ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpLWRldmljZXMtY2Npc3MKaW5kZXggMGE5MmE3Yy4uNGYyOWU1ZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaS1kZXZpY2VzLWNjaXNzCkBAIC0zMSwzICszMSwzMSBAQAogS2VybmVsIFZlcnNpb246IDIuNi4zMAogQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCiBEZXNjcmlwdGlvbjoJQSBzeW1ib2xpYyBsaW5rIHRvIC9zeXMvYmxvY2svY2Npc3MhY1hkWQorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9yZXNjYW4KK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246CTIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJS2lja3Mgb2YgYSByZXNjYW4gb2YgdGhlIGNvbnRyb2xsZXIgdG8gZGlzY292ZXIgbG9naWNhbAorCQlkcml2ZSB0b3BvbG9neSBjaGFuZ2VzLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL2x1bmlkCitEYXRlOgkJQXVndXN0IDIwMDkKK0tlcm5lbCBWZXJzaW9uOiAyLjYuMzEKK0NvbnRhY3Q6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQorRGVzY3JpcHRpb246CURpc3BsYXlzIHRoZSA4LWJ5dGUgTFVOIElEIHVzZWQgdG8gYWRkcmVzcyBsb2dpY2FsCisJCWRyaXZlIFkgb2YgY29udHJvbGxlciBYLgorCitXaGVyZToJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLzxkZXY+L2NjaXNzWC9jWGRZL3JhaWRfbGV2ZWwKK0RhdGU6CQlBdWd1c3QgMjAwOQorS2VybmVsIFZlcnNpb246IDIuNi4zMQorQ29udGFjdDoJaXNzX3N0b3JhZ2VkZXZAaHAuY29tCitEZXNjcmlwdGlvbjoJRGlzcGxheXMgdGhlIFJBSUQgbGV2ZWwgb2YgbG9naWNhbCBkcml2ZSBZIG9mCisJCWNvbnRyb2xsZXIgWC4KKworV2hlcmU6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy88ZGV2Pi9jY2lzc1gvY1hkWS91c2FnZV9jb3VudAorRGF0ZToJCUF1Z3VzdCAyMDA5CitLZXJuZWwgVmVyc2lvbjogMi42LjMxCitDb250YWN0Oglpc3Nfc3RvcmFnZWRldkBocC5jb20KK0Rlc2NyaXB0aW9uOglEaXNwbGF5cyB0aGUgdXNhZ2UgY291bnQgKG51bWJlciBvZiBvcGVucykgb2YgbG9naWNhbCBkcml2ZSBZCisJCW9mIGNvbnRyb2xsZXIgWC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXNiX2hvc3QgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXV3Yl9yYy13dXNiaGMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11c2JfaG9zdApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy11d2JfcmMtd3VzYmhjCmluZGV4IDQ2YjY2YWQxLi40ZTgxMDZmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXVzYl9ob3N0CisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtdXdiX3JjLXd1c2JoYwpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3VzYl9ob3N0L3VzYl9ob3N0Ti93dXNiX2NoaWQKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL3V3Yl9yYy91d2JOL3d1c2JoYy93dXNiX2NoaWQKIERhdGU6ICAgICAgICAgICBKdWx5IDIwMDgKIEtlcm5lbFZlcnNpb246ICAyLjYuMjcKIENvbnRhY3Q6ICAgICAgICBEYXZpZCBWcmFiZWwgPGRhdmlkLnZyYWJlbEBjc3IuY29tPgpAQCAtOSw3ICs5LDcgQEAKIAogICAgICAgICAgICAgICAgIFNldCBhbiBhbGwgemVybyBDSElEIHRvIHN0b3AgdGhlIGhvc3QgY29udHJvbGxlci4KIAotV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXNiX2hvc3QvdXNiX2hvc3ROL3d1c2JfdHJ1c3RfdGltZW91dAorV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvdXdiX3JjL3V3Yk4vd3VzYmhjL3d1c2JfdHJ1c3RfdGltZW91dAogRGF0ZTogICAgICAgICAgIEp1bHkgMjAwOAogS2VybmVsVmVyc2lvbjogIDIuNi4yNwogQ29udGFjdDogICAgICAgIERhdmlkIFZyYWJlbCA8ZGF2aWQudnJhYmVsQGNzci5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRldmljZXMtY2FjaGVfZGlzYWJsZSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzViYjRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1jYWNoZV9kaXNhYmxlCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotV2hhdDogICAgICAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NhY2hlL2luZGV4Ki9jYWNoZV9kaXNhYmxlX1gKLURhdGU6ICAgICAgQXVndXN0IDIwMDgKLUtlcm5lbFZlcnNpb246CTIuNi4yNwotQ29udGFjdDoJbWFyay5sYW5nc2RvcmZAYW1kLmNvbQotRGVzY3JpcHRpb246CVRoZXNlIGZpbGVzIGV4aXN0IGluIGV2ZXJ5IGNwdSdzIGNhY2hlIGluZGV4IGRpcmVjdG9yaWVzLgotCQlUaGVyZSBhcmUgY3VycmVudGx5IDIgY2FjaGVfZGlzYWJsZV8jIGZpbGVzIGluIGVhY2gKLQkJZGlyZWN0b3J5LiAgUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzIG9uIGEgc3VwcG9ydGVkCi0JCXByb2Nlc3NvciB3aWxsIHJldHVybiB0aGF0IGNhY2hlIGRpc2FibGUgaW5kZXggdmFsdWUKLQkJZm9yIHRoYXQgcHJvY2Vzc29yIGFuZCBub2RlLiAgV3JpdGluZyB0byBvbmUgb2YgdGhlc2UKLQkJZmlsZXMgd2lsbCBjYXVzZSB0aGUgc3BlY2lmaWNlZCBjYWNoZSBpbmRleCB0byBiZSBkaXNhYmxlZC4KLQotCQlDdXJyZW50bHksIG9ubHkgQU1EIEZhbWlseSAxMGggUHJvY2Vzc29ycyBzdXBwb3J0IGNhY2hlIGluZGV4Ci0JCWRpc2FibGUsIGFuZCBvbmx5IGZvciB0aGVpciBMMyBjYWNoZXMuICBTZWUgdGhlIEJJT1MgYW5kCi0JCUtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSBhdAotCQlodHRwOi8vd3d3LmFtZC5jb20vdXMtZW4vYXNzZXRzL2NvbnRlbnRfdHlwZS93aGl0ZV9wYXBlcnNfYW5kX3RlY2hfZG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLjIwXzItNC0wOS5wZGYKLQkJZm9yIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYW5kIG90aGVyIGRldGFpbHMgb24gdGhlCi0JCWNhY2hlIGluZGV4IGRpc2FibGUuCi1Vc2VyczogICAgam9hY2hpbS5kZWd1YXJhQGFtZC5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwM2I5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1CkBAIC0wLDAgKzEsMTU2IEBACitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvCitEYXRlOgkJcHJlLWdpdCBoaXN0b3J5CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CisJCUEgY29sbGVjdGlvbiBvZiBib3RoIGdsb2JhbCBhbmQgaW5kaXZpZHVhbCBDUFUgYXR0cmlidXRlcworCisJCUluZGl2aWR1YWwgQ1BVIGF0dHJpYnV0ZXMgYXJlIGNvbnRhaW5lZCBpbiBzdWJkaXJlY3RvcmllcworCQluYW1lZCBieSB0aGUga2VybmVsJ3MgbG9naWNhbCBDUFUgbnVtYmVyLCBlLmcuOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9zY2hlZF9tY19wb3dlcl9zYXZpbmdzCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzCitEYXRlOgkJSnVuZSAyMDA2CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGFuZCBhZGp1c3QgdGhlIGtlcm5lbCdzIG11bHRpLWNvcmUgc2NoZWR1bGVyIHN1cHBvcnQuCisKKwkJUG9zc2libGUgdmFsdWVzIGFyZToKKworCQkwIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKwkJMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisJCTIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKKwkJICAgIHNhdmluZ3MKKworCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworCQlpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworCQlzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyBpcyBkZXBlbmRlbnQgdXBvbiBTQ0hFRF9TTVQsIHdoaWNoCisJCWlzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCisJCVRoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCisJCXRoYXQgb25lIGZpbGUgbWF5IGJlIHByZXNlbnQgd2l0aG91dCB0aGUgb3RoZXIuCisKKwkJSW50cm9kdWNlZCBieSBnaXQgY29tbWl0IDVjNDViZjI3LgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9rZXJuZWxfbWF4CisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L29mZmxpbmUKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvb25saW5lCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3Bvc3NpYmxlCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQKK0RhdGU6CQlEZWNlbWJlciAyMDA4CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CUNQVSB0b3BvbG9neSBmaWxlcyB0aGF0IGRlc2NyaWJlIGtlcm5lbCBsaW1pdHMgcmVsYXRlZCB0bworCQlob3RwbHVnLiBCcmllZmx5OgorCisJCWtlcm5lbF9tYXg6IHRoZSBtYXhpbXVtIGNwdSBpbmRleCBhbGxvd2VkIGJ5IHRoZSBrZXJuZWwKKwkJY29uZmlndXJhdGlvbi4KKworCQlvZmZsaW5lOiBjcHVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgorCQlIT1RQTFVHR0VEIG9mZiBvciBleGNlZWQgdGhlIGxpbWl0IG9mIGNwdXMgYWxsb3dlZCBieSB0aGUKKwkJa2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXggYWJvdmUpLgorCisJCW9ubGluZTogY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZC4KKworCQlwb3NzaWJsZTogY3B1cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFuZCBjYW4gYmUKKwkJYnJvdWdodCBvbmxpbmUgaWYgdGhleSBhcmUgcHJlc2VudC4KKworCQlwcmVzZW50OiBjcHVzIHRoYXQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYXMgYmVpbmcgcHJlc2VudCBpbgorCQl0aGUgc3lzdGVtLgorCisJCVNlZSBEb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL25vZGUKK0RhdGU6CQlPY3RvYmVyIDIwMDkKK0NvbnRhY3Q6CUxpbnV4IG1lbW9yeSBtYW5hZ2VtZW50IG1haWxpbmcgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIE5VTUEgbm9kZSBhIENQVSBiZWxvbmdzIHRvCisKKwkJV2hlbiBDT05GSUdfTlVNQSBpcyBlbmFibGVkLCBhIHN5bWJvbGljIGxpbmsgdGhhdCBwb2ludHMKKwkJdG8gdGhlIGNvcnJlc3BvbmRpbmcgTlVNQSBub2RlIGRpcmVjdG9yeS4KKworCQlGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzeW1saW5rIGlzIGNyZWF0ZWQgZm9yIGNwdTQyCisJCWluIE5VTUEgbm9kZSAyOgorCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyL25vZGUyIC0+IC4uLy4uL25vZGUvbm9kZTIKKworCitXaGF0OgkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS9jb3JlX2lkCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSMvdG9wb2xvZ3kvY29yZV9zaWJsaW5ncworCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L2NvcmVfc2libGluZ3NfbGlzdAorCQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3MKKwkJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Iy90b3BvbG9neS90aHJlYWRfc2libGluZ3NfbGlzdAorRGF0ZToJCURlY2VtYmVyIDIwMDgKK0NvbnRhY3Q6CUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoJQ1BVIHRvcG9sb2d5IGZpbGVzIHRoYXQgZGVzY3JpYmUgYSBsb2dpY2FsIENQVSdzIHJlbGF0aW9uc2hpcAorCQl0byBvdGhlciBjb3JlcyBhbmQgdGhyZWFkcyBpbiB0aGUgc2FtZSBwaHlzaWNhbCBwYWNrYWdlLgorCisJCU9uZSBjcHUjIGRpcmVjdG9yeSBpcyBjcmVhdGVkIHBlciBsb2dpY2FsIENQVSBpbiB0aGUgc3lzdGVtLAorCQllLmcuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTQyLy4KKworCQlCcmllZmx5LCB0aGUgZmlsZXMgYWJvdmUgYXJlOgorCisJCWNvcmVfaWQ6IHRoZSBDUFUgY29yZSBJRCBvZiBjcHUjLiBUeXBpY2FsbHkgaXQgaXMgdGhlCisJCWhhcmR3YXJlIHBsYXRmb3JtJ3MgaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4KKwkJVGhlIGFjdHVhbCB2YWx1ZSBpcyBhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKworCQljb3JlX3NpYmxpbmdzOiBpbnRlcm5hbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZSB0aHJlYWRzCisJCXdpdGhpbiB0aGUgc2FtZSBwaHlzaWNhbF9wYWNrYWdlX2lkLgorCisJCWNvcmVfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiB0aGUgbG9naWNhbCBDUFUKKwkJbnVtYmVycyB3aXRoaW4gdGhlIHNhbWUgcGh5c2ljYWxfcGFja2FnZV9pZCBhcyBjcHUjLgorCisJCXBoeXNpY2FsX3BhY2thZ2VfaWQ6IHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgY3B1Iy4gVHlwaWNhbGx5CisJCWNvcnJlc3BvbmRzIHRvIGEgcGh5c2ljYWwgc29ja2V0IG51bWJlciwgYnV0IHRoZSBhY3R1YWwgdmFsdWUKKwkJaXMgYXJjaGl0ZWN0dXJlIGFuZCBwbGF0Zm9ybSBkZXBlbmRlbnQuCisKKwkJdGhyZWFkX3NpYmxpbmdzOiBpbnRlcm5lbCBrZXJuZWwgbWFwIG9mIGNwdSMncyBoYXJkd2FyZQorCQl0aHJlYWRzIHdpdGhpbiB0aGUgc2FtZSBjb3JlIGFzIGNwdSMKKworCQl0aHJlYWRfc2libGluZ3NfbGlzdDogaHVtYW4tcmVhZGFibGUgbGlzdCBvZiBjcHUjJ3MgaGFyZHdhcmUKKwkJdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUgY29yZSBhcyBjcHUjCisKKwkJU2VlIERvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK1doYXQ6CQkvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVpZGxlL2N1cnJlbnRfZHJpdmVyCisJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvY3VycmVudF9nb3Zlcm5lcl9ybworRGF0ZToJCVNlcHRlbWJlciAyMDA3CitDb250YWN0OglMaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0IDxsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnPgorRGVzY3JpcHRpb246CURpc2NvdmVyIGNwdWlkbGUgcG9saWN5IGFuZCBtZWNoYW5pc20KKworCQlWYXJpb3VzIENQVXMgdG9kYXkgc3VwcG9ydCBtdWx0aXBsZSBpZGxlIGxldmVscyB0aGF0IGFyZQorCQlkaWZmZXJlbnRpYXRlZCBieSB2YXJ5aW5nIGV4aXQgbGF0ZW5jaWVzIGFuZCBwb3dlcgorCQljb25zdW1wdGlvbiBkdXJpbmcgaWRsZS4KKworCQlJZGxlIHBvbGljeSAoZ292ZXJub3IpIGlzIGRpZmZlcmVudGlhdGVkIGZyb20gaWRsZSBtZWNoYW5pc20KKwkJKGRyaXZlcikKKworCQljdXJyZW50X2RyaXZlcjogZGlzcGxheXMgY3VycmVudCBpZGxlIG1lY2hhbmlzbQorCisJCWN1cnJlbnRfZ292ZXJub3Jfcm86IGRpc3BsYXlzIGN1cnJlbnQgaWRsZSBwb2xpY3kKKworCQlTZWUgZmlsZXMgaW4gRG9jdW1lbnRhdGlvbi9jcHVpZGxlLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitXaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAorRGF0ZTogICAgICBBdWd1c3QgMjAwOAorS2VybmVsVmVyc2lvbjoJMi42LjI3CitDb250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCitEZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCisJCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAorCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKKwkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQorCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQorCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorCisJCUN1cnJlbnRseSwgb25seSBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzIHN1cHBvcnQgY2FjaGUgaW5kZXgKKwkJZGlzYWJsZSwgYW5kIG9ubHkgZm9yIHRoZWlyIEwzIGNhY2hlcy4gIFNlZSB0aGUgQklPUyBhbmQKKwkJS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGF0CisJCWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9hc3NldHMvY29udGVudF90eXBlL3doaXRlX3BhcGVyc19hbmRfdGVjaF9kb2NzLzMxMTE2LVB1YmxpYy1HSC1CS0RHXzMuMjBfMi00LTA5LnBkZgorCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKKwkJY2FjaGUgaW5kZXggZGlzYWJsZS4KK1VzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggYjdmOWQzYi4uNzI2NTFmNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0yMzIsNyArMjMyLDcgQEAKIFdoZW4gc2VuZGluZyBwYXRjaGVzIHRvIExpbnVzLCBhbHdheXMgZm9sbG93IHN0ZXAgIzcuCiAKIExhcmdlIGNoYW5nZXMgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgbWFpbGluZyBsaXN0cywgYW5kIHNvbWUKLW1haW50YWluZXJzLiAgSWYgeW91ciBwYXRjaCwgdW5jb21wcmVzc2VkLCBleGNlZWRzIDQwIGtCIGluIHNpemUsCittYWludGFpbmVycy4gIElmIHlvdXIgcGF0Y2gsIHVuY29tcHJlc3NlZCwgZXhjZWVkcyAzMDAga0IgaW4gc2l6ZSwKIGl0IGlzIHByZWZlcnJlZCB0aGF0IHlvdSBzdG9yZSB5b3VyIHBhdGNoIG9uIGFuIEludGVybmV0LWFjY2Vzc2libGUKIHNlcnZlciwgYW5kIHByb3ZpZGUgaW5zdGVhZCBhIFVSTCAobGluaykgcG9pbnRpbmcgdG8geW91ciBwYXRjaC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vdGNtLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZDkzNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL3RjbS50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0FSTSBUQ00gKFRpZ2h0bHktQ291cGxlZCBNZW1vcnkpIGhhbmRsaW5nIGluIExpbnV4CistLS0tCitXcml0dGVuIGJ5IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+CisKK1NvbWUgQVJNIFNvQzpzIGhhdmUgYSBzby1jYWxsZWQgVENNIChUaWdodGx5LUNvdXBsZWQgTWVtb3J5KS4KK1RoaXMgaXMgdXN1YWxseSBqdXN0IGEgZmV3ICg0LTY0KSBLaUIgb2YgUkFNIGluc2lkZSB0aGUgQVJNCitwcm9jZXNzb3IuCisKK0R1ZSB0byBiZWluZyBlbWJlZGRlZCBpbnNpZGUgdGhlIENQVSBUaGUgVENNIGhhcyBhCitIYXJ2YXJkLWFyY2hpdGVjdHVyZSwgc28gdGhlcmUgaXMgYW4gSVRDTSAoaW5zdHJ1Y3Rpb24gVENNKQorYW5kIGEgRFRDTSAoZGF0YSBUQ00pLiBUaGUgRFRDTSBjYW4gbm90IGNvbnRhaW4gYW55CitpbnN0cnVjdGlvbnMsIGJ1dCB0aGUgSVRDTSBjYW4gYWN0dWFsbHkgY29udGFpbiBkYXRhLgorVGhlIHNpemUgb2YgRFRDTSBvciBJVENNIGlzIG1pbmltdW0gNEtpQiBzbyB0aGUgdHlwaWNhbAorbWluaW11bSBjb25maWd1cmF0aW9uIGlzIDRLaUIgSVRDTSBhbmQgNEtpQiBEVENNLgorCitBUk0gQ1BVOnMgaGF2ZSBzcGVjaWFsIHJlZ2lzdGVycyB0byByZWFkIG91dCBzdGF0dXMsIHBoeXNpY2FsCitsb2NhdGlvbiBhbmQgc2l6ZSBvZiBUQ00gbWVtb3JpZXMuIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorZGVmaW5lcyBhIENQVUlEX1RDTSByZWdpc3RlciB0aGF0IHlvdSBjYW4gcmVhZCBvdXQgZnJvbSB0aGUKK3N5c3RlbSBjb250cm9sIGNvcHJvY2Vzc29yLiBEb2N1bWVudGF0aW9uIGZyb20gQVJNIGNhbiBiZSBmb3VuZAorYXQgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbSwgc2VhcmNoIGZvciAiVENNIFN0YXR1cyBSZWdpc3RlciIKK3RvIHNlZSBkb2N1bWVudHMgZm9yIGFsbCBDUFVzLiBSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgeW91IGNhbgorZGV0ZXJtaW5lIGlmIElUQ00gKGJpdCAwKSBhbmQvb3IgRFRDTSAoYml0IDE2KSBpcyBwcmVzZW50IGluIHRoZQorbWFjaGluZS4KKworVGhlcmUgaXMgZnVydGhlciBhIFRDTSByZWdpb24gcmVnaXN0ZXIgKHNlYXJjaCBmb3IgIlRDTSBSZWdpb24KK1JlZ2lzdGVycyIgYXQgdGhlIEFSTSBzaXRlKSB0aGF0IGNhbiByZXBvcnQgYW5kIG1vZGlmeSB0aGUgbG9jYXRpb24KK3NpemUgb2YgVENNIG1lbW9yaWVzIGF0IHJ1bnRpbWUuIFRoaXMgaXMgdXNlZCB0byByZWFkIG91dCBhbmQgbW9kaWZ5CitUQ00gbG9jYXRpb24gYW5kIHNpemUuIE5vdGljZSB0aGF0IHRoaXMgaXMgbm90IGEgTU1VIHRhYmxlOiB5b3UKK2FjdHVhbGx5IG1vdmUgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoZSBUQ00gYXJvdW5kLiBBdCB0aGUKK3BsYWNlIHlvdSBwdXQgaXQsIGl0IHdpbGwgbWFzayBhbnkgdW5kZXJseWluZyBSQU0gZnJvbSB0aGUKK0NQVSBzbyBpdCBpcyB1c3VhbGx5IHdpc2Ugbm90IHRvIG92ZXJsYXAgYW55IHBoeXNpY2FsIFJBTSB3aXRoCit0aGUgVENNLgorCitUaGUgVENNIG1lbW9yeSBjYW4gdGhlbiBiZSByZW1hcHBlZCB0byBhbm90aGVyIGFkZHJlc3MgYWdhaW4gdXNpbmcKK3RoZSBNTVUsIGJ1dCBub3RpY2UgdGhhdCB0aGUgVENNIGlmIG9mdGVuIHVzZWQgaW4gc2l0dWF0aW9ucyB3aGVyZQordGhlIE1NVSBpcyB0dXJuZWQgb2ZmLiBUbyBhdm9pZCBjb25mdXNpb24gdGhlIGN1cnJlbnQgTGludXgKK2ltcGxlbWVudGF0aW9uIHdpbGwgbWFwIHRoZSBUQ00gMSB0byAxIGZyb20gcGh5c2ljYWwgdG8gdmlydHVhbAorbWVtb3J5IGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG1hY2hpbmUuCisKK1RDTSBpcyB1c2VkIGZvciBhIGZldyB0aGluZ3M6CisKKy0gRklRIGFuZCBvdGhlciBpbnRlcnJ1cHQgaGFuZGxlcnMgdGhhdCBuZWVkIGRldGVybWluaXN0aWMKKyAgdGltaW5nIGFuZCBjYW5ub3Qgd2FpdCBmb3IgY2FjaGUgbWlzc2VzLgorCistIElkbGUgbG9vcHMgd2hlcmUgYWxsIGV4dGVybmFsIFJBTSBpcyBzZXQgdG8gc2VsZi1yZWZyZXNoCisgIHJldGVudGlvbiBtb2RlLCBzbyBvbmx5IG9uLWNoaXAgUkFNIGlzIGFjY2Vzc2libGUgYnkKKyAgdGhlIENQVSBhbmQgdGhlbiB3ZSBoYW5nIGluc2lkZSBJVENNIHdhaXRpbmcgZm9yIGFuCisgIGludGVycnVwdC4KKworLSBPdGhlciBvcGVyYXRpb25zIHdoaWNoIGltcGxpZXMgc2h1dHRpbmcgb2ZmIG9yIHJlY29uZmlndXJpbmcKKyAgdGhlIGV4dGVybmFsIFJBTSBjb250cm9sbGVyLgorCitUaGVyZSBpcyBhbiBpbnRlcmZhY2UgZm9yIHVzaW5nIFRDTSBvbiB0aGUgQVJNIGFyY2hpdGVjdHVyZQoraW4gPGFzbS90Y20uaD4uIFVzaW5nIHRoaXMgaW50ZXJmYWNlIGl0IGlzIHBvc3NpYmxlIHRvOgorCistIERlZmluZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhbmQgc2l6ZSBvZiBJVENNIGFuZCBEVENNLgorCistIFRhZyBmdW5jdGlvbnMgdG8gYmUgY29tcGlsZWQgaW50byBJVENNLgorCistIFRhZyBkYXRhIGFuZCBjb25zdGFudHMgdG8gYmUgYWxsb2NhdGVkIHRvIERUQ00gYW5kIElUQ00uCisKKy0gSGF2ZSB0aGUgcmVtYWluaW5nIFRDTSBSQU0gYWRkZWQgdG8gYSBzcGVjaWFsCisgIGFsbG9jYXRpb24gcG9vbCB3aXRoIGdlbl9wb29sX2NyZWF0ZSgpIGFuZCBnZW5fcG9vbF9hZGQoKQorICBhbmQgcHJvdmljZSB0Y21fYWxsb2MoKSBhbmQgdGNtX2ZyZWUoKSBmb3IgdGhpcworICBtZW1vcnkuIFN1Y2ggYSBoZWFwIGlzIGdyZWF0IGZvciB0aGluZ3MgbGlrZSBzYXZpbmcKKyAgZGV2aWNlIHN0YXRlIHdoZW4gc2h1dHRpbmcgb2ZmIGRldmljZSBwb3dlciBkb21haW5zLgorCitBIG1hY2hpbmUgdGhhdCBoYXMgVENNIG1lbW9yeSBzaGFsbCBzZWxlY3QgSEFWRV9UQ00gaW4KK2FyY2gvYXJtL0tjb25maWcgZm9yIGl0c2VsZiwgYW5kIHRoZW4gdGhlCityZXN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgZGVwZW5kIG9uIHRoZSBwaHlzaWNhbAorbG9jYXRpb24gYW5kIHNpemUgb2YgSVRDTSBhbmQgRFRDTSB0byBiZSBkZWZpbmVkIGluCittYWNoL21lbW9yeS5oIGZvciB0aGUgbWFjaGluZS4gQ29kZSB0aGF0IG5lZWRzIHRvIHVzZQorVENNIHNoYWxsICNpbmNsdWRlIDxhc20vdGNtLmg+IElmIHRoZSBUQ00gaXMgbm90IGxvY2F0ZWQKK2F0IHRoZSBwbGFjZSBnaXZlbiBpbiBtZW1vcnkuaCBpdCB3aWxsIGJlIG1vdmVkIHVzaW5nCit0aGUgVENNIFJlZ2lvbiByZWdpc3RlcnMuCisKK0Z1bmN0aW9ucyB0byBnbyBpbnRvIGl0Y20gY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21mdW5jIGZvbyhpbnQgYmFyKTsKKworVmFyaWFibGVzIHRvIGdvIGludG8gZHRjbSBjYW4gYmUgdGFnZ2VkIGxpa2UgdGhpczoKK2ludCBfX3RjbWRhdGEgZm9vOworCitDb25zdGFudHMgY2FuIGJlIHRhZ2dlZCBsaWtlIHRoaXM6CitpbnQgX190Y21jb25zdCBmb287CisKK1RvIHB1dCBhc3NlbWJsZXIgaW50byBUQ00ganVzdCB1c2UKKy5zZWN0aW9uICIudGNtLnRleHQiIG9yIC5zZWN0aW9uICIudGNtLmRhdGEiCityZXNwZWN0aXZlbHkuCisKK0V4YW1wbGUgY29kZToKKworI2luY2x1ZGUgPGFzbS90Y20uaD4KKworLyogVW5pbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y212YXI7CisvKiBJbml0aWFsaXplZCBkYXRhICovCitzdGF0aWMgdTMyIF9fdGNtZGF0YSB0Y21hc3NpZ25lZCA9IDB4MkJBREJBQkVVOworLyogQ29uc3RhbnQgKi8KK3N0YXRpYyBjb25zdCB1MzIgX190Y21jb25zdCB0Y21jb25zdCA9IDB4Q0FGRUJBQkVVOworCitzdGF0aWMgdm9pZCBfX3RjbWxvY2FsZnVuYyB0Y21fdG9fdGNtKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQorCQl0Y212YXIgKys7Cit9CisKK3N0YXRpYyB2b2lkIF9fdGNtZnVuYyBoZWxsb190Y20odm9pZCkKK3sKKwkvKiBTb21lIGFic3RyYWN0IGNvZGUgdGhhdCBydW5zIGluIElUQ00gKi8KKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJdGNtdmFyICsrOworCX0KKwl0Y21fdG9fdGNtKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0ZXN0X3RjbSh2b2lkKQoreworCXUzMiAqdGNtZW07CisJaW50IGk7CisKKwloZWxsb190Y20oKTsKKwlwcmludGsoIkhlbGxvIFRDTSBleGVjdXRlZCBmcm9tIElUQ00gUkFNXG4iKTsKKworCXByaW50aygiVENNIHZhcmlhYmxlIGZyb20gdGVzdHJ1bjogJXUgQCAlcFxuIiwgdGNtdmFyLCAmdGNtdmFyKTsKKwl0Y212YXIgPSAweERFQURCRUVGVTsKKwlwcmludGsoIlRDTSB2YXJpYWJsZTogMHgleCBAICVwXG4iLCB0Y212YXIsICZ0Y212YXIpOworCisJcHJpbnRrKCJUQ00gYXNzaWduZWQgdmFyaWFibGU6IDB4JXggQCAlcFxuIiwgdGNtYXNzaWduZWQsICZ0Y21hc3NpZ25lZCk7CisKKwlwcmludGsoIlRDTSBjb25zdGFudDogMHgleCBAICVwXG4iLCB0Y21jb25zdCwgJnRjbWNvbnN0KTsKKworCS8qIEFsbG9jYXRlIHNvbWUgVENNIG1lbW9yeSBmcm9tIHRoZSBwb29sICovCisJdGNtZW0gPSB0Y21fYWxsb2MoMjApOworCWlmICh0Y21lbSkgeworCQlwcmludGsoIlRDTSBBbGxvY2F0ZWQgMjAgYnl0ZXMgb2YgVENNIEAgJXBcbiIsIHRjbWVtKTsKKwkJdGNtZW1bMF0gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bMV0gPSAweDJCQURCQUJFVTsKKwkJdGNtZW1bMl0gPSAweENBRkVCQUJFVTsKKwkJdGNtZW1bM10gPSAweERFQURCRUVGVTsKKwkJdGNtZW1bNF0gPSAweDJCQURCQUJFVTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJCXByaW50aygiVENNIHRjbWVtWyVkXSA9ICUwOHhcbiIsIGksIHRjbWVtW2ldKTsKKwkJdGNtX2ZyZWUodGNtZW0sIDIwKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggNDU1ZDRlNi4uMGIzM2JmZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dApAQCAtMjI3LDcgKzIyNywxNCBAQAogRWFjaCBjZ3JvdXAgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNncm91cCBmaWxlIHN5c3RlbQogY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjZ3JvdXA6CiAKLSAtIHRhc2tzOiBsaXN0IG9mIHRhc2tzIChieSBwaWQpIGF0dGFjaGVkIHRvIHRoYXQgY2dyb3VwCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cC4gIFRoaXMgbGlzdAorICAgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkLiAgV3JpdGluZyBhIHRocmVhZCBpZCBpbnRvIHRoaXMgZmlsZQorICAgbW92ZXMgdGhlIHRocmVhZCBpbnRvIHRoaXMgY2dyb3VwLgorIC0gY2dyb3VwLnByb2NzOiBsaXN0IG9mIHRnaWRzIGluIHRoZSBjZ3JvdXAuICBUaGlzIGxpc3QgaXMgbm90CisgICBndWFyYW50ZWVkIHRvIGJlIHNvcnRlZCBvciBmcmVlIG9mIGR1cGxpY2F0ZSB0Z2lkcywgYW5kIHVzZXJzcGFjZQorICAgc2hvdWxkIHNvcnQvdW5pcXVpZnkgdGhlIGxpc3QgaWYgdGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZC4KKyAgIFdyaXRpbmcgYSB0Z2lkIGludG8gdGhpcyBmaWxlIG1vdmVzIGFsbCB0aHJlYWRzIHdpdGggdGhhdCB0Z2lkIGludG8KKyAgIHRoaXMgY2dyb3VwLgogIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIHRoZSByZWxlYXNlIGFnZW50IG9uIGV4aXQ/CiAgLSByZWxlYXNlX2FnZW50OiB0aGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyAodGhpcyBmaWxlCiAgICBleGlzdHMgaW4gdGhlIHRvcCBjZ3JvdXAgb25seSkKQEAgLTM3NCw3ICszODEsNyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLW5vdGlmeV9vbl9yZWxlYXNlIHRhc2tzCitjZ3JvdXAucHJvY3Mgbm90aWZ5X29uX3JlbGVhc2UgdGFza3MKIChwbHVzIHdoYXRldmVyIGZpbGVzIGFkZGVkIGJ5IHRoZSBhdHRhY2hlZCBzdWJzeXN0ZW1zKQogCiBOb3cgYXR0YWNoIHlvdXIgc2hlbGwgdG8gdGhpcyBjZ3JvdXA6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXRvcG9sb2d5LnR4dCBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CmluZGV4IGI0MWYzZTUuLmYxYzVjNGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1dG9wb2xvZ3kudHh0CkBAIC0xLDE1ICsxLDI4IEBACiAKLUV4cG9ydCBjcHUgdG9wb2xvZ3kgaW5mbyB2aWEgc3lzZnMuIEl0ZW1zIChhdHRyaWJ1dGVzKSBhcmUgc2ltaWxhcgorRXhwb3J0IENQVSB0b3BvbG9neSBpbmZvIHZpYSBzeXNmcy4gSXRlbXMgKGF0dHJpYnV0ZXMpIGFyZSBzaW1pbGFyCiB0byAvcHJvYy9jcHVpbmZvLgogCiAxKSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHVYL3RvcG9sb2d5L3BoeXNpY2FsX3BhY2thZ2VfaWQ6Ci1yZXByZXNlbnQgdGhlIHBoeXNpY2FsIHBhY2thZ2UgaWQgb2YgIGNwdSBYOworCisJcGh5c2ljYWwgcGFja2FnZSBpZCBvZiBjcHVYLiBUeXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBwaHlzaWNhbAorCXNvY2tldCBudW1iZXIsIGJ1dCB0aGUgYWN0dWFsIHZhbHVlIGlzIGFyY2hpdGVjdHVyZSBhbmQgcGxhdGZvcm0KKwlkZXBlbmRlbnQuCisKIDIpIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvdG9wb2xvZ3kvY29yZV9pZDoKLXJlcHJlc2VudCB0aGUgY3B1IGNvcmUgaWQgdG8gY3B1IFg7CisKKwl0aGUgQ1BVIGNvcmUgSUQgb2YgY3B1WC4gVHlwaWNhbGx5IGl0IGlzIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSdzCisJaWRlbnRpZmllciAocmF0aGVyIHRoYW4gdGhlIGtlcm5lbCdzKS4gIFRoZSBhY3R1YWwgdmFsdWUgaXMKKwlhcmNoaXRlY3R1cmUgYW5kIHBsYXRmb3JtIGRlcGVuZGVudC4KKwogMykgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS90aHJlYWRfc2libGluZ3M6Ci1yZXByZXNlbnQgdGhlIHRocmVhZCBzaWJsaW5ncyB0byBjcHUgWCBpbiB0aGUgc2FtZSBjb3JlOworCisJaW50ZXJuZWwga2VybmVsIG1hcCBvZiBjcHVYJ3MgaGFyZHdhcmUgdGhyZWFkcyB3aXRoaW4gdGhlIHNhbWUKKwljb3JlIGFzIGNwdVgKKwogNCkgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC90b3BvbG9neS9jb3JlX3NpYmxpbmdzOgotcmVwcmVzZW50IHRoZSB0aHJlYWQgc2libGluZ3MgdG8gY3B1IFggaW4gdGhlIHNhbWUgcGh5c2ljYWwgcGFja2FnZTsKKworCWludGVybmFsIGtlcm5lbCBtYXAgb2YgY3B1WCdzIGhhcmR3YXJlIHRocmVhZHMgd2l0aGluIHRoZSBzYW1lCisJcGh5c2ljYWxfcGFja2FnZV9pZC4KIAogVG8gaW1wbGVtZW50IGl0IGluIGFuIGFyY2hpdGVjdHVyZS1uZXV0cmFsIHdheSwgYSBuZXcgc291cmNlIGZpbGUsCiBkcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYywgaXMgdG8gZXhwb3J0IHRoZSA0IGF0dHJpYnV0ZXMuCkBAIC0zMiwzMiArNDUsMzIgQEAKIDMpIHRocmVhZF9zaWJsaW5nczoganVzdCB0aGUgZ2l2ZW4gQ1BVCiA0KSBjb3JlX3NpYmxpbmdzOiBqdXN0IHRoZSBnaXZlbiBDUFUKIAotQWRkaXRpb25hbGx5LCBjcHUgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgdW5kZXIKK0FkZGl0aW9uYWxseSwgQ1BVIHRvcG9sb2d5IGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIHVuZGVyCiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdSBhbmQgaW5jbHVkZXMgdGhlc2UgZmlsZXMuICBUaGUgaW50ZXJuYWwKIHNvdXJjZSBmb3IgdGhlIG91dHB1dCBpcyBpbiBicmFja2V0cyAoIltdIikuCiAKLSAgICBrZXJuZWxfbWF4OiB0aGUgbWF4aW11bSBjcHUgaW5kZXggYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCisgICAga2VybmVsX21heDogdGhlIG1heGltdW0gQ1BVIGluZGV4IGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLgogCQlbTlJfQ1BVUy0xXQogCi0gICAgb2ZmbGluZToJY3B1cyB0aGF0IGFyZSBub3Qgb25saW5lIGJlY2F1c2UgdGhleSBoYXZlIGJlZW4KKyAgICBvZmZsaW5lOglDUFVzIHRoYXQgYXJlIG5vdCBvbmxpbmUgYmVjYXVzZSB0aGV5IGhhdmUgYmVlbgogCQlIT1RQTFVHR0VEIG9mZiAoc2VlIGNwdS1ob3RwbHVnLnR4dCkgb3IgZXhjZWVkIHRoZSBsaW1pdAotCQlvZiBjcHVzIGFsbG93ZWQgYnkgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIChrZXJuZWxfbWF4CisJCW9mIENQVXMgYWxsb3dlZCBieSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gKGtlcm5lbF9tYXgKIAkJYWJvdmUpLiBbfmNwdV9vbmxpbmVfbWFzayArIGNwdXMgPj0gTlJfQ1BVU10KIAotICAgIG9ubGluZToJY3B1cyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQorICAgIG9ubGluZToJQ1BVcyB0aGF0IGFyZSBvbmxpbmUgYW5kIGJlaW5nIHNjaGVkdWxlZCBbY3B1X29ubGluZV9tYXNrXQogCi0gICAgcG9zc2libGU6CWNwdXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCisgICAgcG9zc2libGU6CUNQVXMgdGhhdCBoYXZlIGJlZW4gYWxsb2NhdGVkIHJlc291cmNlcyBhbmQgY2FuIGJlCiAJCWJyb3VnaHQgb25saW5lIGlmIHRoZXkgYXJlIHByZXNlbnQuIFtjcHVfcG9zc2libGVfbWFza10KIAotICAgIHByZXNlbnQ6CWNwdXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQorICAgIHByZXNlbnQ6CUNQVXMgdGhhdCBoYXZlIGJlZW4gaWRlbnRpZmllZCBhcyBiZWluZyBwcmVzZW50IGluIHRoZQogCQlzeXN0ZW0uIFtjcHVfcHJlc2VudF9tYXNrXQogCiBUaGUgZm9ybWF0IGZvciB0aGUgYWJvdmUgb3V0cHV0IGlzIGNvbXBhdGlibGUgd2l0aCBjcHVsaXN0X3BhcnNlKCkKIFtzZWUgPGxpbnV4L2NwdW1hc2suaD5dLiAgU29tZSBleGFtcGxlcyBmb2xsb3cuCiAKLUluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IGNwdXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKK0luIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIDY0IENQVXMgaW4gdGhlIHN5c3RlbSBidXQgY3B1cyAzMi02MyBleGNlZWQKIHRoZSBrZXJuZWwgbWF4IHdoaWNoIGlzIGxpbWl0ZWQgdG8gMC4uMzEgYnkgdGhlIE5SX0NQVVMgY29uZmlnIG9wdGlvbgotYmVpbmcgMzIuICBOb3RlIGFsc28gdGhhdCBjcHVzIDIgYW5kIDQtMzEgYXJlIG5vdCBvbmxpbmUgYnV0IGNvdWxkIGJlCitiZWluZyAzMi4gIE5vdGUgYWxzbyB0aGF0IENQVXMgMiBhbmQgNC0zMSBhcmUgbm90IG9ubGluZSBidXQgY291bGQgYmUKIGJyb3VnaHQgb25saW5lIGFzIHRoZXkgYXJlIGJvdGggcHJlc2VudCBhbmQgcG9zc2libGUuCiAKICAgICAga2VybmVsX21heDogMzEKQEAgLTY3LDggKzgwLDggQEAKICAgICAgICAgcHJlc2VudDogMC0zMQogCiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBOUl9DUFVTIGNvbmZpZyBvcHRpb24gaXMgMTI4LCBidXQgdGhlIGtlcm5lbCB3YXMKLXN0YXJ0ZWQgd2l0aCBwb3NzaWJsZV9jcHVzPTE0NC4gIFRoZXJlIGFyZSA0IGNwdXMgaW4gdGhlIHN5c3RlbSBhbmQgY3B1Mgotd2FzIG1hbnVhbGx5IHRha2VuIG9mZmxpbmUgKGFuZCBpcyB0aGUgb25seSBjcHUgdGhhdCBjYW4gYmUgYnJvdWdodAorc3RhcnRlZCB3aXRoIHBvc3NpYmxlX2NwdXM9MTQ0LiAgVGhlcmUgYXJlIDQgQ1BVcyBpbiB0aGUgc3lzdGVtIGFuZCBjcHUyCit3YXMgbWFudWFsbHkgdGFrZW4gb2ZmbGluZSAoYW5kIGlzIHRoZSBvbmx5IENQVSB0aGF0IGNhbiBiZSBicm91Z2h0CiBvbmxpbmUuKQogCiAgICAgIGtlcm5lbF9tYXg6IDEyNwpAQCAtNzgsNCArOTEsNCBAQAogICAgICAgICBwcmVzZW50OiAwLTMKIAogU2VlIGNwdS1ob3RwbHVnLnR4dCBmb3IgdGhlIHBvc3NpYmxlX2NwdXM9TlVNIGtlcm5lbCBzdGFydCBwYXJhbWV0ZXIKLWFzIHdlbGwgYXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmFyaW91cyBjcHVtYXNrJ3MuCithcyB3ZWxsIGFzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZhcmlvdXMgY3B1bWFza3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmctdmlhLW9oY2kxMzk0LnR4dAppbmRleCA1OWE5MWU1Li42MTFmNWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RlYnVnZ2luZy12aWEtb2hjaTEzOTQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKQEAgLTY0LDE0ICs2NCwxNCBAQAogCiBCZXJuaGFyZCBLYWluZGwgZW5oYW5jZWQgZmlyZXNjb3BlIHRvIHN1cHBvcnQgYWNjZXNzaW5nIDY0LWJpdCBtYWNoaW5lcwogZnJvbSAzMi1iaXQgZmlyZXNjb3BlIGFuZCB2aWNlIHZlcnNhOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVzY29wZS0wLjIuMi50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXNjb3BlLTAuMi4yLnRhci5iejIKIAogYW5kIGhlIGltcGxlbWVudGVkIGZhc3Qgc3lzdGVtIGR1bXAgKGFscGhhIHZlcnNpb24gLSByZWFkIFJFQURNRS50eHQpOgotLSBmdHA6Ly9mdHAuc3VzZS5kZS9wcml2YXRlL2JrL2ZpcmV3aXJlL3Rvb2xzL2ZpcmVkdW1wLTAuMS50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZWR1bXAtMC4xLnRhci5iejIKIAogVGhlcmUgaXMgYWxzbyBhIGdkYiBwcm94eSBmb3IgZmlyZXdpcmUgd2hpY2ggYWxsb3dzIHRvIHVzZSBnZGIgdG8gYWNjZXNzCiBkYXRhIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGZyb20gc3ltYm9scyBmb3VuZCBieSBnZGIgaW4gdm1saW51eDoKLS0gZnRwOi8vZnRwLnN1c2UuZGUvcHJpdmF0ZS9iay9maXJld2lyZS90b29scy9maXJlcHJveHktMC4zMy50YXIuYnoyCistIGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvZmlyZXByb3h5LTAuMzMudGFyLmJ6MgogCiBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBnZGIgcHJveHkgKGZpcmVwcm94eS0wLjM0KSBjYW4gY29tbXVuaWNhdGUgKG5vdAogeWV0IHN0YWJsZSkgd2l0aCBrZ2RiIG92ZXIgYW4gbWVtb3J5LWJhc2VkIGNvbW11bmljYXRpb24gbW9kdWxlIChrZ2Rib20pLgpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIE5vdGVzCiAtLS0tLQotRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGZ0cDovL2Z0cC5zdXNlLmRlL3ByaXZhdGUvYmsvZmlyZXdpcmUvZG9jcworRG9jdW1lbnRhdGlvbiBhbmQgc3BlY2lmaWNhdGlvbnM6IGh0dHA6Ly9oYWxvYmF0ZXMuZGUvZmlyZXdpcmUvCiAKIEZpcmVXaXJlIGlzIGEgdHJhZGVtYXJrIG9mIEFwcGxlIEluYy4gLSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgcmVmZXIgdG86CiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ZpcmVXaXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggODlhNDdiNS4uYmM2OTNmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNDE4LDYgKzQxOCwxNCBAQAogV2h5OglTaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdXNlcnNwYWNlLCBwb2xpY3kgZGFlbW9uLgogV2hvOglKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJQ09ORklHX0lOT1RJRlkKK1doZW46CTIuNi4zMworV2h5OglsYXN0IHVzZXIgKGF1ZGl0KSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgbmV3ZXIgbW9yZSBnZW5lcmljCisJYW5kIG1vcmUgZWFzaWx5IG1haW50YWluZWQgZnNub3RpZnkgc3Vic3lzdGVtCitXaG86CUVyaWMgUGFyaXMgPGVwYXJpc0ByZWRoYXQuY29tPgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFdoYXQ6CWxvY2tfcG9saWN5X3J3c2VtXyogYW5kIHVubG9ja19wb2xpY3lfcndzZW1fKiB3aWxsIG5vdCBiZQpAQCAtNDUxLDMgKzQ1OSwzMyBAQAogCXdpbGwgYWxzbyBhbGxvdyBtYWtpbmcgQUxTQSBPU1MgZW11bGF0aW9uIGluZGVwZW5kZW50IG9mCiAJc291bmRfY29yZS4gIFRoZSBkZXBlbmRlbmN5IHdpbGwgYmUgYnJva2VuIHRoZW4gdG9vLgogV2hvOglUZWp1biBIZW8gPHRqQGtlcm5lbC5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJU3VwcG9ydCBmb3IgVk13YXJlJ3MgZ3Vlc3QgcGFyYXZpcnR1bGlhemF0aW9uIHRlY2huaXF1ZSBbVk1JXSB3aWxsIGJlCisJZHJvcHBlZC4KK1doZW46CTIuNi4zNyBvciBlYXJsaWVyLgorV2h5OglXaXRoIHRoZSByZWNlbnQgaW5ub3ZhdGlvbnMgaW4gQ1BVIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiB0ZWNobm9sb2dpZXMKKwlmcm9tIEludGVsIGFuZCBBTUQsIFZNd2FyZSByYW4gYSBmZXcgZXhwZXJpbWVudHMgdG8gY29tcGFyZSB0aGVzZQorCXRlY2huaXF1ZXMgdG8gZ3Vlc3QgcGFyYXZpcnR1YWxpemF0aW9uIHRlY2huaXF1ZSBvbiBWTXdhcmUncyBwbGF0Zm9ybS4KKwlUaGVzZSBoYXJkd2FyZSBhc3Npc3RlZCB2aXJ0dWFsaXphdGlvbiB0ZWNobmlxdWVzIGhhdmUgb3V0cGVyZm9ybWVkIHRoZQorCXBlcmZvcm1hbmNlIGJlbmVmaXRzIHByb3ZpZGVkIGJ5IFZNSSBpbiBtb3N0IG9mIHRoZSB3b3JrbG9hZHMuIFZNd2FyZQorCWV4cGVjdHMgdGhhdCB0aGVzZSBoYXJkd2FyZSBmZWF0dXJlcyB3aWxsIGJlIHViaXF1aXRvdXMgaW4gYSBjb3VwbGUgb2YKKwl5ZWFycywgYXMgYSByZXN1bHQsIFZNd2FyZSBoYXMgc3RhcnRlZCBhIHBoYXNlZCByZXRpcmVtZW50IG9mIHRoaXMKKwlmZWF0dXJlIGZyb20gdGhlIGh5cGVydmlzb3IuIFdlIHdpbGwgYmUgcmVtb3ZpbmcgdGhpcyBmZWF0dXJlIGZyb20gdGhlCisJS2VybmVsIHRvby4gUmlnaHQgbm93IHdlIGFyZSB0YXJnZXRpbmcgMi42LjM3IGJ1dCBjYW4gcmV0aXJlIGVhcmxpZXIgaWYKKwl0ZWNobmljYWwgcmVhc29ucyAocmVhZCBvcHBvcnR1bml0eSB0byByZW1vdmUgbWFqb3IgY2h1bmsgb2YgcHZvcHMpCisJYXJpc2UuCisKKwlQbGVhc2Ugbm90ZSB0aGF0IFZNSSBoYXMgYWx3YXlzIGJlZW4gYW4gb3B0aW1pemF0aW9uIGFuZCBub24tVk1JIGtlcm5lbHMKKwlzdGlsbCB3b3JrIGZpbmUgb24gVk13YXJlJ3MgcGxhdGZvcm0uCisJTGF0ZXN0IHZlcnNpb25zIG9mIFZNd2FyZSdzIHByb2R1Y3Qgd2hpY2ggc3VwcG9ydCBWTUkgYXJlLAorCVdvcmtzdGF0aW9uIDcuMCBhbmQgVlNwaGVyZSA0LjAgb24gRVNYIHNpZGUsIGZ1dHVyZSBtYWludGFpbmVuY2UKKwlyZWxlYXNlcyBmb3IgdGhlc2UgcHJvZHVjdHMgd2lsbCBjb250aW51ZSBzdXBwb3J0aW5nIFZNSS4KKworCUZvciBtb3JlIGRldGFpbHMgYWJvdXQgVk1JIHJldGlyZW1lbnQgdGFrZSBhIGxvb2sgYXQgdGhpcywKKwlodHRwOi8vYmxvZ3Mudm13YXJlLmNvbS9ndWVzdG9zZ3VpZGUvMjAwOS8wOS92bWktcmV0aXJlbWVudC5odG1sCisKK1dobzoJQWxvayBOIEthdGFyaWEgPGFrYXRhcmlhQHZtd2FyZS5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDU3MGY5YmQuLjA1ZDVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dApAQCAtMTIzLDEwICsxMjMsMTggQEAKIAogc2I9bgkJCVVzZSBhbHRlcm5hdGUgc3VwZXJibG9jayBhdCB0aGlzIGxvY2F0aW9uLgogCi1xdW90YQotbm9xdW90YQotZ3JwcXVvdGEKLXVzcnF1b3RhCitxdW90YQkJCVRoZXNlIG9wdGlvbnMgYXJlIGlnbm9yZWQgYnkgdGhlIGZpbGVzeXN0ZW0uIFRoZXkKK25vcXVvdGEJCQlhcmUgdXNlZCBvbmx5IGJ5IHF1b3RhIHRvb2xzIHRvIHJlY29nbml6ZSB2b2x1bWVzCitncnBxdW90YQkJd2hlcmUgcXVvdGEgc2hvdWxkIGJlIHR1cm5lZCBvbi4gU2VlIGRvY3VtZW50YXRpb24KK3VzcnF1b3RhCQlpbiB0aGUgcXVvdGEtdG9vbHMgcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KKworanFmbXQ9PHF1b3RhIHR5cGU+CVRoZXNlIG9wdGlvbnMgdGVsbCBmaWxlc3lzdGVtIGRldGFpbHMgYWJvdXQgcXVvdGEKK3VzcmpxdW90YT08ZmlsZT4Jc28gdGhhdCBxdW90YSBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvcGVybHkgdXBkYXRlZAorZ3JwanF1b3RhPTxmaWxlPglkdXJpbmcgam91cm5hbCByZXBsYXkuIFRoZXkgcmVwbGFjZSB0aGUgYWJvdmUKKwkJCXF1b3RhIG9wdGlvbnMuIFNlZSBkb2N1bWVudGF0aW9uIGluIHRoZSBxdW90YS10b29scworCQkJcGFja2FnZSBmb3IgbW9yZSBkZXRhaWxzCisJCQkoaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhKS4KIAogYmgJCSgqKQlleHQzIGFzc29jaWF0ZXMgYnVmZmVyIGhlYWRzIHRvIGRhdGEgcGFnZXMgdG8KIG5vYmgJCQkoYSkgY2FjaGUgZGlzayBibG9jayBtYXBwaW5nIGluZm9ybWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAppbmRleCAxOGI1ZWM4Li42ZDk0ZTA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKQEAgLTEzNCw5ICsxMzQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIAltb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKIAkJICAgICAJd3JpdGVzIHRvIHRoZSBmaWxlc3lzdGVtLgogCitqb3VybmFsX2NoZWNrc3VtCUVuYWJsZSBjaGVja3N1bW1pbmcgb2YgdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb25zLgorCQkJVGhpcyB3aWxsIGFsbG93IHRoZSByZWNvdmVyeSBjb2RlIGluIGUyZnNjayBhbmQgdGhlCisJCQlrZXJuZWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gaW4gdGhlIGtlcm5lbC4gIEl0IGlzIGEKKwkJCWNvbXBhdGlibGUgY2hhbmdlIGFuZCB3aWxsIGJlIGlnbm9yZWQgYnkgb2xkZXIga2VybmVscy4KKwogam91cm5hbF9hc3luY19jb21taXQJQ29tbWl0IGJsb2NrIGNhbiBiZSB3cml0dGVuIHRvIGRpc2sgd2l0aG91dCB3YWl0aW5nCiAJCQlmb3IgZGVzY3JpcHRvciBibG9ja3MuIElmIGVuYWJsZWQgb2xkZXIga2VybmVscyBjYW5ub3QKLQkJCW1vdW50IHRoZSBkZXZpY2UuCisJCQltb3VudCB0aGUgZGV2aWNlLiBUaGlzIHdpbGwgZW5hYmxlICdqb3VybmFsX2NoZWNrc3VtJworCQkJaW50ZXJuYWxseS4KIAogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0NCBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KQEAgLTI4Miw5ICsyODgsMTYgQEAKIAkJCXRvIHVzZSBmb3IgYWxsb2NhdGlvbiBzaXplIGFuZCBhbGlnbm1lbnQuIEZvciBSQUlENS82CiAJCQlzeXN0ZW1zIHRoaXMgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgZGF0YQogCQkJZGlza3MgKiAgUkFJRCBjaHVuayBzaXplIGluIGZpbGUgc3lzdGVtIGJsb2Nrcy4KLWRlbGFsbG9jCSgqKQlEZWZlcnJpbmcgYmxvY2sgYWxsb2NhdGlvbiB1bnRpbCB3cml0ZS1vdXQgdGltZS4KLW5vZGVsYWxsb2MJCURpc2FibGUgZGVsYXllZCBhbGxvY2F0aW9uLiBCbG9ja3MgYXJlIGFsbG9jYXRpb24KLQkJCXdoZW4gZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2VyIHRvIHBhZ2UgY2FjaGUuCisKK2RlbGFsbG9jCSgqKQlEZWZlciBibG9jayBhbGxvY2F0aW9uIHVudGlsIGp1c3QgYmVmb3JlIGV4dDQKKwkJCXdyaXRlcyBvdXQgdGhlIGJsb2NrKHMpIGluIHF1ZXN0aW9uLiAgVGhpcworCQkJYWxsb3dzIGV4dDQgdG8gYmV0dGVyIGFsbG9jYXRpb24gZGVjaXNpb25zCisJCQltb3JlIGVmZmljaWVudGx5Lgorbm9kZWxhbGxvYwkJRGlzYWJsZSBkZWxheWVkIGFsbG9jYXRpb24uICBCbG9ja3MgYXJlIGFsbG9jYXRlZAorCQkJd2hlbiB0aGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB1c2Vyc3BhY2UgdG8gdGhlCisJCQlwYWdlIGNhY2hlLCBlaXRoZXIgdmlhIHRoZSB3cml0ZSgyKSBzeXN0ZW0gY2FsbAorCQkJb3Igd2hlbiBhbiBtbWFwJ2VkIHBhZ2Ugd2hpY2ggd2FzIHByZXZpb3VzbHkKKwkJCXVuYWxsb2NhdGVkIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLgogCiBtYXhfYmF0Y2hfdGltZT11c2VjCU1heGltdW0gYW1vdW50IG9mIHRpbWUgZXh0NCBzaG91bGQgd2FpdCBmb3IKIAkJCWFkZGl0aW9uYWwgZmlsZXN5c3RlbSBvcGVyYXRpb25zIHRvIGJlIGJhdGNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBiNWFlZTc4Li4yYzQ4Zjk0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTExMTMsNyArMTExMyw2IEBACiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KICBGaWxlICAgICAgICAgICAgQ29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBtYl9ncm91cHMgICAgICAgZGV0YWlscyBvZiBtdWx0aWJsb2NrIGFsbG9jYXRvciBidWRkeSBjYWNoZSBvZiBmcmVlIGJsb2NrcwotIG1iX2hpc3RvcnkgICAgICBtdWx0aWJsb2NrIGFsbG9jYXRpb24gaGlzdG9yeQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKaW5kZXggYjU4Yjg0Yi4uZWVkNTIwZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZmF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3ZmYXQudHh0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJIHdpbm50OiBlbXVsYXRlIHRoZSBXaW5kb3dzIE5UIHJ1bGUgZm9yIGRpc3BsYXkvY3JlYXRlLgogCQkgbWl4ZWQ6IGVtdWxhdGUgdGhlIFdpbmRvd3MgTlQgcnVsZSBmb3IgZGlzcGxheSwKIAkJCWVtdWxhdGUgdGhlIFdpbmRvd3MgOTUgcnVsZSBmb3IgY3JlYXRlLgotCQkgRGVmYXVsdCBzZXR0aW5nIGlzIGBsb3dlcicuCisJCSBEZWZhdWx0IHNldHRpbmcgaXMgYG1peGVkJy4KIAogdHo9VVRDICAgICAgICAtLSBJbnRlcnByZXQgdGltZXN0YW1wcyBhcyBVVEMgcmF0aGVyIHRoYW4gbG9jYWwgdGltZS4KICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gZGlzYWJsZXMgdGhlIGNvbnZlcnNpb24gb2YgdGltZXN0YW1wcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IDg0ZWIyNjguLmNiOGEzYTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTEsNSArMSw1IEBACiBVc2luZyBmbGV4aWJsZSBhcnJheXMgaW4gdGhlIGtlcm5lbAotTGFzdCB1cGRhdGVkIGZvciAyLjYuMzEKK0xhc3QgdXBkYXRlZCBmb3IgMi42LjMyCiBKb25hdGhhbiBDb3JiZXQgPGNvcmJldEBsd24ubmV0PgogCiBMYXJnZSBjb250aWd1b3VzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gYmUgdW5yZWxpYWJsZSBpbiB0aGUgTGludXgga2VybmVsLgpAQCAtNDAsNiArNDAsMTMgQEAKIHRoZSBjdXJyZW50IGNvZGUsIHVzaW5nIGZsYWdzIHRvIGFzayBmb3IgaGlnaCBtZW1vcnkgaXMgbGlrZWx5IHRvIGxlYWQgdG8KIG5vdGFibHkgdW5wbGVhc2FudCBzaWRlIGVmZmVjdHMuCiAKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGVmaW5lIGZsZXhpYmxlIGFycmF5cyBhdCBjb21waWxlIHRpbWUgd2l0aDoKKworICAgIERFRklORV9GTEVYX0FSUkFZKG5hbWUsIGVsZW1lbnRfc2l6ZSwgdG90YWwpOworCitUaGlzIG1hY3JvIHdpbGwgcmVzdWx0IGluIGEgZGVmaW5pdGlvbiBvZiBhbiBhcnJheSB3aXRoIHRoZSBnaXZlbiBuYW1lOyB0aGUKK2VsZW1lbnQgc2l6ZSBhbmQgdG90YWwgd2lsbCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhdCBjb21waWxlIHRpbWUuCisKIFN0b3JpbmcgZGF0YSBpbnRvIGEgZmxleGlibGUgYXJyYXkgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBjYWxsIHRvOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHV0KHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSwgdW5zaWduZWQgaW50IGVsZW1lbnRfbnIsCkBAIC03NiwxNiArODMsMzAgQEAKIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBnZXQgYmFjayBhIHZhbGlkIHBvaW50ZXIgZm9yIGFuIGVsZW1lbnQgd2hpY2gKIGhhcyBuZXZlciBiZWVuIHN0b3JlZCBpbiB0aGUgYXJyYXkuICBNZW1vcnkgZm9yIGFycmF5IGVsZW1lbnRzIGlzIGFsbG9jYXRlZAogb25lIHBhZ2UgYXQgYSB0aW1lOyBhIHNpbmdsZSBhbGxvY2F0aW9uIGNvdWxkIHByb3ZpZGUgbWVtb3J5IGZvciBzZXZlcmFsCi1hZGphY2VudCBlbGVtZW50cy4gIFRoZSBmbGV4aWJsZSBhcnJheSBjb2RlIGRvZXMgbm90IGtub3cgaWYgYSBzcGVjaWZpYwotZWxlbWVudCBoYXMgYmVlbiB3cml0dGVuOyBpdCBvbmx5IGtub3dzIGlmIHRoZSBhc3NvY2lhdGVkIG1lbW9yeSBpcwotcHJlc2VudC4gIFNvIGEgZmxleF9hcnJheV9nZXQoKSBjYWxsIG9uIGFuIGVsZW1lbnQgd2hpY2ggd2FzIG5ldmVyIHN0b3JlZAotaW4gdGhlIGFycmF5IGhhcyB0aGUgcG90ZW50aWFsIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gcmFuZG9tIGRhdGEuICBJZiB0aGUKLWNhbGxlciBkb2VzIG5vdCBoYXZlIGEgc2VwYXJhdGUgd2F5IHRvIGtub3cgd2hpY2ggZWxlbWVudHMgd2VyZSBhY3R1YWxseQotc3RvcmVkLCBpdCBtaWdodCBiZSB3aXNlLCBhdCBsZWFzdCwgdG8gYWRkIEdGUF9aRVJPIHRvIHRoZSBmbGFncyBhcmd1bWVudAotdG8gZW5zdXJlIHRoYXQgYWxsIGVsZW1lbnRzIGFyZSB6ZXJvZWQuCithZGphY2VudCBlbGVtZW50cy4gIEZsZXhpYmxlIGFycmF5IGVsZW1lbnRzIGFyZSBub3JtYWxseSBpbml0aWFsaXplZCB0byB0aGUKK3ZhbHVlIEZMRVhfQVJSQVlfRlJFRSAoZGVmaW5lZCBhcyAweDZjIGluIDxsaW51eC9wb2lzb24uaD4pLCBzbyBlcnJvcnMKK2ludm9sdmluZyB0aGF0IG51bWJlciBwcm9iYWJseSByZXN1bHQgZnJvbSB1c2Ugb2YgdW5zdG9yZWQgYXJyYXkgZW50cmllcy4KK05vdGUgdGhhdCwgaWYgYXJyYXkgZWxlbWVudHMgYXJlIGFsbG9jYXRlZCB3aXRoIF9fR0ZQX1pFUk8sIHRoZXkgd2lsbCBiZQoraW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgdGhpcyBwb2lzb25pbmcgd2lsbCBub3QgaGFwcGVuLgogCi1UaGVyZSBpcyBubyB3YXkgdG8gcmVtb3ZlIGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuICBJdCBpcyBwb3NzaWJsZSwKLXRob3VnaCwgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyB3aXRoIGEgY2FsbCB0bzoKK0luZGl2aWR1YWwgZWxlbWVudHMgaW4gdGhlIGFycmF5IGNhbiBiZSBjbGVhcmVkIHdpdGg6CisKKyAgICBpbnQgZmxleF9hcnJheV9jbGVhcihzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIGludCBlbGVtZW50X25yKTsKKworVGhpcyBmdW5jdGlvbiB3aWxsIHNldCB0aGUgZ2l2ZW4gZWxlbWVudCB0byBGTEVYX0FSUkFZX0ZSRUUgYW5kIHJldHVybgoremVyby4gIElmIHN0b3JhZ2UgZm9yIHRoZSBpbmRpY2F0ZWQgZWxlbWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciB0aGUgYXJyYXksCitmbGV4X2FycmF5X2NsZWFyKCkgd2lsbCByZXR1cm4gLUVJTlZBTCBpbnN0ZWFkLiAgTm90ZSB0aGF0IGNsZWFyaW5nIGFuCitlbGVtZW50IGRvZXMgbm90IHJlbGVhc2UgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIGl0OyB0byByZWR1Y2UgdGhlCithbGxvY2F0ZWQgc2l6ZSBvZiBhbiBhcnJheSwgY2FsbDoKKworICAgIGludCBmbGV4X2FycmF5X3NocmluayhzdHJ1Y3QgZmxleF9hcnJheSAqYXJyYXkpOworCitUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlIG51bWJlciBvZiBwYWdlcyBvZiBtZW1vcnkgYWN0dWFsbHkgZnJlZWQuCitUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHNjYW5uaW5nIHRoZSBhcnJheSBmb3IgcGFnZXMgY29udGFpbmluZyBub3RoaW5nIGJ1dAorRkxFWF9BUlJBWV9GUkVFIGJ5dGVzLCBzbyAoMSkgaXQgY2FuIGJlIGV4cGVuc2l2ZSwgYW5kICgyKSBpdCB3aWxsIG5vdCB3b3JrCitpZiB0aGUgYXJyYXkncyBwYWdlcyBhcmUgYWxsb2NhdGVkIHdpdGggX19HRlBfWkVSTy4KKworSXQgaXMgcG9zc2libGUgdG8gcmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbiBhcnJheSB3aXRoIGEgY2FsbCB0bzoKIAogICAgIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICphcnJheSk7CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNSBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDIxNQppbmRleCAyZTZhMjFlLi5jMTk2YTE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1CkBAIC0yMiwxMiArMjIsMTMgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKLW9mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKLXRoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorb2YgdGhlIHBvc3NpYmxlIGFkZHJlc3NlcyBhcmUgdW5mcmllbmRseSB0byBwcm9iaW5nLiBZb3Ugd2lsbCBoYXZlIHRvCitpbnN0YW50aWF0ZSB0aGUgZGV2aWNlcyBleHBsaWNpdGx5LgogCiBFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAogb24gSTJDIGJ1cyAjMDoKLSQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKyQgbW9kcHJvYmUgbHRjNDIxNQorJCBlY2hvIGx0YzQyMTUgMHg0NCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIAogCiBTeXNmcyBlbnRyaWVzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyNDUKaW5kZXggYmFlN2EzYS4uMDI4MzhhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjQ1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbHRjNDI0NQpAQCAtMjMsMTIgKzIzLDEzIEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgTFRDNDI0NSBkZXZpY2VzLCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBzb21lCi1vZiB0aGUgcG9zc2libGUgYWRkcmVzc2VzIGFyZSB1bmZyaWVuZGx5IHRvIHByb2JpbmcuIFlvdSB3aWxsIG5lZWQgdG8gdXNlCi10aGUgImZvcmNlIiBwYXJhbWV0ZXIgdG8gdGVsbCB0aGUgZHJpdmVyIHdoZXJlIHRvIGZpbmQgdGhlIGRldmljZS4KK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgaGF2ZSB0bworaW5zdGFudGlhdGUgdGhlIGRldmljZXMgZXhwbGljaXRseS4KIAogRXhhbXBsZTogdGhlIGZvbGxvd2luZyB3aWxsIGxvYWQgdGhlIGRyaXZlciBmb3IgYW4gTFRDNDI0NSBhdCBhZGRyZXNzIDB4MjMKIG9uIEkyQyBidXMgIzE6Ci0kIG1vZHByb2JlIGx0YzQyNDUgZm9yY2U9MSwweDIzCiskIG1vZHByb2JlIGx0YzQyNDUKKyQgZWNobyBsdGM0MjQ1IDB4MjMgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMS9uZXdfZGV2aWNlCiAKIAogU3lzZnMgZW50cmllcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCBkY2JkNTAyLi44MmRlZjg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzUzLDEwICszNTMsMjAgQEAKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwogCi1wb3dlclsxLSpdX2F2ZXJhZ2VfaW50ZXJ2YWwJUG93ZXIgdXNlIGF2ZXJhZ2luZyBpbnRlcnZhbAorcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsCVBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwuICBBIHBvbGwKKwkJCQlub3RpZmljYXRpb24gaXMgc2VudCB0byB0aGlzIGZpbGUgaWYgdGhlCisJCQkJaGFyZHdhcmUgY2hhbmdlcyB0aGUgYXZlcmFnaW5nIGludGVydmFsLgogCQkJCVVuaXQ6IG1pbGxpc2Vjb25kcwogCQkJCVJXCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9pbnRlcnZhbF9tYXgJTWF4aW11bSBwb3dlciB1c2UgYXZlcmFnaW5nIGludGVydmFsCisJCQkJVW5pdDogbWlsbGlzZWNvbmRzCisJCQkJUk8KKworcG93ZXJbMS0qXV9hdmVyYWdlX2ludGVydmFsX21pbglNaW5pbXVtIHBvd2VyIHVzZSBhdmVyYWdpbmcgaW50ZXJ2YWwKKwkJCQlVbml0OiBtaWxsaXNlY29uZHMKKwkJCQlSTworCiBwb3dlclsxLSpdX2F2ZXJhZ2VfaGlnaGVzdAlIaXN0b3JpY2FsIGF2ZXJhZ2UgbWF4aW11bSBwb3dlciB1c2UKIAkJCQlVbml0OiBtaWNyb1dhdHQKIAkJCQlSTwpAQCAtMzY1LDYgKzM3NSwxOCBAQAogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCiAKK3Bvd2VyWzEtKl1fYXZlcmFnZV9tYXgJCUEgcG9sbCBub3RpZmljYXRpb24gaXMgc2VudCB0bworCQkJCXBvd2VyWzEtKl1fYXZlcmFnZSB3aGVuIHBvd2VyIHVzZQorCQkJCXJpc2VzIGFib3ZlIHRoaXMgdmFsdWUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9hdmVyYWdlX21pbgkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvCisJCQkJcG93ZXJbMS0qXV9hdmVyYWdlIHdoZW4gcG93ZXIgdXNlCisJCQkJc2lua3MgYmVsb3cgdGhpcyB2YWx1ZS4KKwkJCQlVbml0OiBtaWNyb1dhdHQKKwkJCQlSVworCiBwb3dlclsxLSpdX2lucHV0CQlJbnN0YW50YW5lb3VzIHBvd2VyIHVzZQogCQkJCVVuaXQ6IG1pY3JvV2F0dAogCQkJCVJPCkBAIC0zODEsNiArNDAzLDM5IEBACiAJCQkJYXZlcmFnZV9oaWdoZXN0IGFuZCBhdmVyYWdlX2xvd2VzdC4KIAkJCQlXTwogCitwb3dlclsxLSpdX2FjY3VyYWN5CQlBY2N1cmFjeSBvZiB0aGUgcG93ZXIgbWV0ZXIuCisJCQkJVW5pdDogUGVyY2VudAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fYWxhcm0JCTEgaWYgdGhlIHN5c3RlbSBpcyBkcmF3aW5nIG1vcmUgcG93ZXIgdGhhbiB0aGUKKwkJCQljYXAgYWxsb3dzOyAwIG90aGVyd2lzZS4gIEEgcG9sbCBub3RpZmljYXRpb24gaXMKKwkJCQlzZW50IHRvIHRoaXMgZmlsZSB3aGVuIHRoZSBwb3dlciB1c2UgZXhjZWVkcyB0aGUKKwkJCQljYXAuICBUaGlzIGZpbGUgb25seSBhcHBlYXJzIGlmIHRoZSBjYXAgaXMga25vd24KKwkJCQl0byBiZSBlbmZvcmNlZCBieSBoYXJkd2FyZS4KKwkJCQlSTworCitwb3dlclsxLSpdX2NhcAkJCUlmIHBvd2VyIHVzZSByaXNlcyBhYm92ZSB0aGlzIGxpbWl0LCB0aGUKKwkJCQlzeXN0ZW0gc2hvdWxkIHRha2UgYWN0aW9uIHRvIHJlZHVjZSBwb3dlciB1c2UuCisJCQkJQSBwb2xsIG5vdGlmaWNhdGlvbiBpcyBzZW50IHRvIHRoaXMgZmlsZSBpZiB0aGUKKwkJCQljYXAgaXMgY2hhbmdlZCBieSB0aGUgaGFyZHdhcmUuICBUaGUgKl9jYXAKKwkJCQlmaWxlcyBvbmx5IGFwcGVhciBpZiB0aGUgY2FwIGlzIGtub3duIHRvIGJlCisJCQkJZW5mb3JjZWQgYnkgaGFyZHdhcmUuCisJCQkJVW5pdDogbWljcm9XYXR0CisJCQkJUlcKKworcG93ZXJbMS0qXV9jYXBfaHlzdAkJTWFyZ2luIG9mIGh5c3RlcmVzaXMgYnVpbHQgYXJvdW5kIGNhcHBpbmcgYW5kCisJCQkJbm90aWZpY2F0aW9uLgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJXCisKK3Bvd2VyWzEtKl1fY2FwX21heAkJTWF4aW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKK3Bvd2VyWzEtKl1fY2FwX21pbgkJTWluaW11bSBjYXAgdGhhdCBjYW4gYmUgc2V0LgorCQkJCVVuaXQ6IG1pY3JvV2F0dAorCQkJCVJPCisKICoqKioqKioqKioKICogRW5lcmd5ICoKICoqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBpaXg0CmluZGV4IGM1YjM3YzUuLmFjNTQwYzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGlpeDQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1waWl4NApAQCAtOCw3ICs4LDcgQEAKICAgICBEYXRhc2hlZXQ6IE9ubHkgYXZhaWxhYmxlIHZpYSBOREEgZnJvbSBTZXJ2ZXJXb3JrcwogICAqIEFUSSBJWFAyMDAsIElYUDMwMCwgSVhQNDAwLCBTQjYwMCwgU0I3MDAgYW5kIFNCODAwIHNvdXRoYnJpZGdlcwogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQotICAqIEFNRCBTQjkwMAorICAqIEFNRCBIdWRzb24tMgogICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQogICAqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyAoU01TQykgU0xDOTBFNjYgKFZpY3Rvcnk2Nikgc291dGhicmlkZ2UKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgU01TQyB3ZWJzaXRlIGh0dHA6Ly93d3cuc21zYy5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBiL0RvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcwppbmRleCBjNzQwYjdiLi5lODk0OTAyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9pbnN0YW50aWF0aW5nLWRldmljZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzCkBAIC0xODgsNyArMTg4LDcgQEAKIGRlbGV0ZWQuCiAKIEV4YW1wbGU6Ci0jIGVjaG8gZWVwcm9tIDB4NTAgPiAvc3lzL2NsYXNzL2kyYy1hZGFwdGVyL2kyYy0zL25ld19kZXZpY2UKKyMgZWNobyBlZXByb20gMHg1MCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0zL25ld19kZXZpY2UKIAogV2hpbGUgdGhpcyBpbnRlcmZhY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGluLWtlcm5lbCBkZXZpY2UgZGVjbGFyYXRpb24KIGNhbid0IGJlIGRvbmUsIHRoZXJlIGlzIGEgdmFyaWV0eSBvZiBjYXNlcyB3aGVyZSBpdCBjYW4gYmUgaGVscGZ1bDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl9tYWQudHh0CmluZGV4IDc0NDY4N2QuLjhhMzY2OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX21hZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfbWFkLnR4dApAQCAtMTI4LDggKzEyOCw4IEBACiAgIFRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVyIGRldmljZSBmaWxlcyBhdXRvbWF0aWNhbGx5IHdpdGgKICAgdWRldiwgYSBydWxlIGxpa2UKIAotICAgIEtFUk5FTD0idW1hZCoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgotICAgIEtFUk5FTD0iaXNzbSoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InVtYWQqIiwgTkFNRT0iaW5maW5pYmFuZC8layIKKyAgICBLRVJORUw9PSJpc3NtKiIsIE5BTUU9ImluZmluaWJhbmQvJWsiCiAKICAgY2FuIGJlIHVzZWQuICBUaGlzIHdpbGwgY3JlYXRlIGRldmljZSBub2RlcyBuYW1lZAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvdXNlcl92ZXJicy50eHQKaW5kZXggZjg0NzUwMS4uYWZlM2Y4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL3VzZXJfdmVyYnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC91c2VyX3ZlcmJzLnR4dApAQCAtNTgsNyArNTgsNyBAQAogICBUbyBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMgYXV0b21hdGljYWxseSB3aXRoCiAgIHVkZXYsIGEgcnVsZSBsaWtlCiAKLSAgICBLRVJORUw9InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgorICAgIEtFUk5FTD09InV2ZXJicyoiLCBOQU1FPSJpbmZpbmliYW5kLyVrIgogCiAgIGNhbiBiZSB1c2VkLiAgVGhpcyB3aWxsIGNyZWF0ZSBkZXZpY2Ugbm9kZXMgbmFtZWQKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2ZmE3MjkyLi45MTA3YjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNjcxLDYgKzY3MSw3IEBACiAJZWFybHlwcmludGs9CVtYODYsU0gsQkxBQ0tGSU5dCiAJCQllYXJseXByaW50az12Z2EKIAkJCWVhcmx5cHJpbnRrPXNlcmlhbFssdHR5U25bLGJhdWRyYXRlXV0KKwkJCWVhcmx5cHJpbnRrPXR0eVNuWyxiYXVkcmF0ZV0KIAkJCWVhcmx5cHJpbnRrPWRiZ3BbZGVidWdDb250cm9sbGVyI10KIAogCQkJQXBwZW5kICIsa2VlcCIgdG8gbm90IGRpc2FibGUgaXQgd2hlbiB0aGUgcmVhbCBjb25zb2xlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNmQwMzQ4Ny4uYWFmY2FhNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMTk5LDE4ICsxOTksMjIgQEAKIAogTm90IGFsbCBiaXRzIGluIHRoZSBtYXNrIGNhbiBiZSBtb2RpZmllZC4gIE5vdCBhbGwgYml0cyB0aGF0IGNhbiBiZQogbW9kaWZpZWQgZG8gYW55dGhpbmcuICBOb3QgYWxsIGhvdCBrZXlzIGNhbiBiZSBpbmRpdmlkdWFsbHkgY29udHJvbGxlZAotYnkgdGhlIG1hc2suICBTb21lIG1vZGVscyBkbyBub3Qgc3VwcG9ydCB0aGUgbWFzayBhdCBhbGwsIGFuZCBpbiB0aG9zZQotbW9kZWxzLCBob3Qga2V5cyBjYW5ub3QgYmUgY29udHJvbGxlZCBpbmRpdmlkdWFsbHkuICBUaGUgYmVoYXZpb3VyIG9mCi10aGUgbWFzayBpcywgdGhlcmVmb3JlLCBoaWdobHkgZGVwZW5kZW50IG9uIHRoZSBUaGlua1BhZCBtb2RlbC4KK2J5IHRoZSBtYXNrLiAgU29tZSBtb2RlbHMgZG8gbm90IHN1cHBvcnQgdGhlIG1hc2sgYXQgYWxsLiAgVGhlIGJlaGF2aW91cgorb2YgdGhlIG1hc2sgaXMsIHRoZXJlZm9yZSwgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgVGhpbmtQYWQgbW9kZWwuCisKK1RoZSBkcml2ZXIgd2lsbCBmaWx0ZXIgb3V0IGFueSB1bm1hc2tlZCBob3RrZXlzLCBzbyBldmVuIGlmIHRoZSBmaXJtd2FyZQorZG9lc24ndCBhbGxvdyBkaXNhYmxpbmcgYW4gc3BlY2lmaWMgaG90a2V5LCB0aGUgZHJpdmVyIHdpbGwgbm90IHJlcG9ydAorZXZlbnRzIGZvciB1bm1hc2tlZCBob3RrZXlzLgogCiBOb3RlIHRoYXQgdW5tYXNraW5nIHNvbWUga2V5cyBwcmV2ZW50cyB0aGVpciBkZWZhdWx0IGJlaGF2aW9yLiAgRm9yCiBleGFtcGxlLCBpZiBGbitGNSBpcyB1bm1hc2tlZCwgdGhhdCBrZXkgd2lsbCBubyBsb25nZXIgZW5hYmxlL2Rpc2FibGUKLUJsdWV0b290aCBieSBpdHNlbGYuCitCbHVldG9vdGggYnkgaXRzZWxmIGluIGZpcm13YXJlLgogCi1Ob3RlIGFsc28gdGhhdCBub3QgYWxsIEZuIGtleSBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCB0aHJvdWdoIEFDUEkuCi1Gb3IgZXhhbXBsZSwgb24gdGhlIFg0MCwgdGhlIGJyaWdodG5lc3MsIHZvbHVtZSBhbmQgIkFjY2VzcyBJQk0iIGJ1dHRvbnMKLWRvIG5vdCBnZW5lcmF0ZSBBQ1BJIGV2ZW50cyBldmVuIHdpdGggdGhpcyBkcml2ZXIuICBUaGV5ICpjYW4qIGJlIHVzZWQKLXRocm91Z2ggdGhlICJUaGlua1BhZCBCdXR0b25zIiB1dGlsaXR5LCBzZWUgaHR0cDovL3d3dy5ub25nbnUub3JnL3RwYi8KK05vdGUgYWxzbyB0aGF0IG5vdCBhbGwgRm4ga2V5IGNvbWJpbmF0aW9ucyBhcmUgc3VwcG9ydGVkIHRocm91Z2ggQUNQSQorZGVwZW5kaW5nIG9uIHRoZSBUaGlua1BhZCBtb2RlbCBhbmQgZmlybXdhcmUgdmVyc2lvbi4gIE9uIHRob3NlCitUaGlua1BhZHMsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHN1cHBvcnQgc29tZSBleHRyYSBob3RrZXlzIGJ5Citwb2xsaW5nIHRoZSAiQ01PUyBOVlJBTSIgYXQgbGVhc3QgMTAgdGltZXMgcGVyIHNlY29uZC4gIFRoZSBkcml2ZXIKK2F0dGVtcHRzIHRvIGVuYWJsZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGF1dG9tYXRpY2FsbHkgd2hlbiByZXF1aXJlZC4KIAogcHJvY2ZzIG5vdGVzOgogCkBAIC0yNTUsMTggKzI1OSwxMSBAQAogCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgotCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCisJCWJpdCBtYXNrIHRvIGVuYWJsZSByZXBvcnRpbmcgKGFuZCBkZXBlbmRpbmcgb24KIAkJdGhlIGZpcm13YXJlLCBBQ1BJIGV2ZW50IGdlbmVyYXRpb24pIGZvciBlYWNoIGhvdCBrZXkKIAkJKHNlZSBhYm92ZSkuICBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKIAkJbWFzaywgYW5kIGFsbG93cyBvbmUgdG8gbW9kaWZ5IGl0LgogCi0JCU5vdGU6IHdoZW4gTlZSQU0gcG9sbGluZyBpcyBhY3RpdmUsIHRoZSBmaXJtd2FyZSBtYXNrCi0JCXdpbGwgYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0JCWhvdGtleV9tYXNrLiAgVGhlIGRyaXZlciB3aWxsIHJldGFpbiBlbmFibGVkIGJpdHMgZm9yCi0JCWhvdGtleXMgdGhhdCBhcmUgdW5kZXIgTlZSQU0gcG9sbGluZyBldmVuIGlmIHRoZQotCQlmaXJtd2FyZSByZWZ1c2VzIHRoZW0sIGFuZCB3aWxsIG5vdCBzZXQgdGhlc2UgYml0cyBvbgotCQl0aGUgZmlybXdhcmUgaG90IGtleSBtYXNrLgotCiAJaG90a2V5X2FsbF9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCB3aGVuIGVjaG9lZCB0byBob3RrZXlfbWFzayBhYm92ZS4KQEAgLTI3OSw3ICsyNzYsOCBAQAogCQliaXQgbWFzayB0aGF0IHNob3VsZCBlbmFibGUgZXZlbnQgcmVwb3J0aW5nIGZvciBhbGwKIAkJc3VwcG9ydGVkIGhvdCBrZXlzLCBleGNlcHQgdGhvc2Ugd2hpY2ggYXJlIGFsd2F5cwogCQloYW5kbGVkIGJ5IHRoZSBmaXJtd2FyZSBhbnl3YXkuICBFY2hvIGl0IHRvCi0JCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuCisJCWhvdGtleV9tYXNrIGFib3ZlLCB0byB1c2UuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1hc2sKKwkJdXNlZCBieSB0aGUgZHJpdmVyLgogCiAJaG90a2V5X3NvdXJjZV9tYXNrOgogCQliaXQgbWFzayB0aGF0IHNlbGVjdHMgd2hpY2ggaG90IGtleXMgd2lsbCB0aGUgZHJpdmVyCkBAIC0yODcsOSArMjg1LDEwIEBACiAJCWJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIEFDUEkgZmlybXdhcmUsCiAJCWJ1dCBpdCBjYW4gYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lLgogCi0JCUhvdCBrZXlzIHdob3NlIGJpdHMgYXJlIHNldCBpbiBib3RoIGhvdGtleV9zb3VyY2VfbWFzawotCQlhbmQgYWxzbyBvbiBob3RrZXlfbWFzayBhcmUgcG9sbGVkIGZvciBpbiBOVlJBTS4gIE9ubHkgYQotCQlmZXcgaG90IGtleXMgYXJlIGF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KKwkJSG90IGtleXMgd2hvc2UgYml0cyBhcmUgc2V0IGluIGhvdGtleV9zb3VyY2VfbWFzayBhcmUKKwkJcG9sbGVkIGZvciBpbiBOVlJBTSwgYW5kIHJlcG9ydGVkIGFzIGhvdGtleSBldmVudHMgaWYKKwkJZW5hYmxlZCBpbiBob3RrZXlfbWFzay4gIE9ubHkgYSBmZXcgaG90IGtleXMgYXJlCisJCWF2YWlsYWJsZSB0aHJvdWdoIENNT1MgTlZSQU0gcG9sbGluZy4KIAogCQlXYXJuaW5nOiB3aGVuIGluIE5WUkFNIG1vZGUsIHRoZSB2b2x1bWUgdXAvZG93bi9tdXRlCiAJCWtleXMgYXJlIHN5bnRoZXNpemVkIGFjY29yZGluZyB0byBjaGFuZ2VzIGluIHRoZSBtaXhlciwKQEAgLTUyNSw2ICs1MjQsNyBAQAogMHgyMzA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gc3VzcGVuZCB0byBlamVjdCBiYXkKIDB4MjQwNAkJU3lzdGVtIGlzIHdha2luZyB1cCBmcm9tIGhpYmVybmF0aW9uIHRvIHVuZG9jawogMHgyNDA1CQlTeXN0ZW0gaXMgd2FraW5nIHVwIGZyb20gaGliZXJuYXRpb24gdG8gZWplY3QgYmF5CisweDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZC9jb250cm9sIGV2ZW50CiAKIFRoZSBhYm92ZSBldmVudHMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQgYnkgdGhlIGRyaXZlci4KIApAQCAtNTMyLDcgKzUzMiw2IEBACiAweDQwMDMJCVVuZG9ja2VkIChzZWUgMHgyeDA0KSwgY2FuIHNsZWVwIGFnYWluCiAweDUwMEIJCVRhYmxldCBwZW4gaW5zZXJ0ZWQgaW50byBpdHMgc3RvcmFnZSBiYXkKIDB4NTAwQwkJVGFibGV0IHBlbiByZW1vdmVkIGZyb20gaXRzIHN0b3JhZ2UgYmF5Ci0weDUwMTAJCUJyaWdodG5lc3MgbGV2ZWwgY2hhbmdlZCAobmV3ZXIgTGVub3ZvIEJJT1NlcykKIAogVGhlIGFib3ZlIGV2ZW50cyBhcmUgcHJvcGFnYXRlZCBieSB0aGUgZHJpdmVyLgogCkBAIC02MjEsNiArNjIwLDggQEAKIDIuIERvICpOT1QqIGxvYWQgdXAgQUNQSSB2aWRlbywgZW5hYmxlIHRoZSBob3RrZXlzIGluIHRoaW5rcGFkLWFjcGksCiAgICBhbmQgbWFwIHRoZW0gdG8gS0VZX0JSSUdIVE5FU1NfVVAgYW5kIEtFWV9CUklHSFRORVNTX0RPV04uICBQcm9jZXNzCiAgICB0aGVzZSBrZXlzIG9uIHVzZXJzcGFjZSBzb21laG93IChlLmcuIGJ5IGNhbGxpbmcgeGJhY2tsaWdodCkuCisgICBUaGUgZHJpdmVyIHdpbGwgZG8gdGhpcyBhdXRvbWF0aWNhbGx5IGlmIGl0IGRldGVjdHMgdGhhdCBBQ1BJIHZpZGVvCisgICBoYXMgYmVlbiBkaXNhYmxlZC4KIAogCiBCbHVldG9vdGgKQEAgLTE0NTksMyArMTQ2MCw4IEBACiAweDAyMDQwMDoJTWFya2VyIGZvciAxNiBMRURzIHN1cHBvcnQuICBBbHNvLCBMRURzIHRoYXQgYXJlIGtub3duCiAJCXRvIG5vdCBleGlzdCBpbiBhIGdpdmVuIG1vZGVsIGFyZSBub3QgcmVnaXN0ZXJlZCB3aXRoCiAJCXRoZSBMRUQgc3lzZnMgY2xhc3MgYW55bW9yZS4KKworMHgwMjA1MDA6CVVwZGF0ZWQgaG90a2V5IGRyaXZlciwgaG90a2V5X21hc2sgaXMgYWx3YXlzIGF2YWlsYWJsZQorCQlhbmQgaXQgaXMgYWx3YXlzIGFibGUgdG8gZGlzYWJsZSBob3Qga2V5cy4gIFZlcnkgb2xkCisJCXRoaW5rcGFkcyBhcmUgcHJvcGVybHkgc3VwcG9ydGVkLiAgaG90a2V5X2Jpb3NfbWFzaworCQlpcyBkZXByZWNhdGVkIGFuZCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCmluZGV4IGJhOTM3M2YuLjA5OGRlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCisrKyBiL0RvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSAibGludXgvbGd1ZXN0X2xhdW5jaGVyLmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2NvbmZpZy5oIgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlICJsaW51eC92aXJ0aW9fbmV0LmgiCiAjaW5jbHVkZSAibGludXgvdmlydGlvX2Jsay5oIgogI2luY2x1ZGUgImxpbnV4L3ZpcnRpb19jb25zb2xlLmgiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9lZXByb20gYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9lZXByb20Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL2VlcHJvbQpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvZWVwcm9tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1IGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2kyYy9jaGlwcy9tYXg2ODc1CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tYXg2ODc1CmluZGV4IDEwY2E0M2MuLjFlODllZTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL21heDY4NzUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWF4Njg3NQpAQCAtNDIsMTAgKzQyLDEyIEBACiAKIFZhbGlkIGFkZHJlc3NlcyBmb3IgdGhlIE1BWDY4NzUgYXJlIDB4NTAgYW5kIDB4NTIuCiBWYWxpZCBhZGRyZXNzZXMgZm9yIHRoZSBNQVg2ODc0IGFyZSAweDUwLCAweDUyLCAweDU0IGFuZCAweDU2LgotVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBhbnkgYWRkcmVzcywgc28geW91IG11c3QgZm9yY2UgdGhlIGFkZHJlc3MuCitUaGUgZHJpdmVyIGRvZXMgbm90IHByb2JlIGFueSBhZGRyZXNzLCBzbyB5b3UgZXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUKK2RldmljZXMuCiAKIEV4YW1wbGU6Ci0kIG1vZHByb2JlIG1heDY4NzUgZm9yY2U9MCwweDUwCiskIG1vZHByb2JlIG1heDY4NzUKKyQgZWNobyBtYXg2ODc1IDB4NTAgPiAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlCiAKIFRoZSBNQVg2ODc0L01BWDY4NzUgaWdub3JlcyBhZGRyZXNzIGJpdCAwLCBzbyB0aGlzIGRyaXZlciBhdHRhY2hlcyB0byBtdWx0aXBsZQogYWRkcmVzc2VzLiAgRm9yIGV4YW1wbGUsIGZvciBhZGRyZXNzIDB4NTAsIGl0IGFsc28gcmVzZXJ2ZXMgMHg1MS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9ocHRpb3AudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKaW5kZXggYTZlYjRhZC4uOTYwNTE3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2hwdGlvcC50eHQKQEAgLTMsNiArMywyNSBAQAogQ29udHJvbGxlciBSZWdpc3RlciBNYXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIFJSNDR4eCBJbnRlbCBJT1AgYmFzZWQgYWRhcHRlcnMsIHRoZSBjb250cm9sbGVyIElPUCBpcyBhY2Nlc3NlZCB2aWEgUENJIEJBUjAgYW5kIEJBUjI6CisKKyAgICAgQkFSMCBvZmZzZXQgICAgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MTFDNUMgTGluayBJbnRlcmZhY2UgSVJRIFNldAorICAgICAgICAgICAgMHgxMUM2MCBMaW5rIEludGVyZmFjZSBJUlEgQ2xlYXIKKworICAgICBCQVIyIG9mZnNldCAgICBSZWdpc3RlcgorICAgICAgICAgICAgMHgxMCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMAorICAgICAgICAgICAgMHgxNCAgICBJbmJvdW5kIE1lc3NhZ2UgUmVnaXN0ZXIgMQorICAgICAgICAgICAgMHgxOCAgICBPdXRib3VuZCBNZXNzYWdlIFJlZ2lzdGVyIDAKKyAgICAgICAgICAgIDB4MUMgICAgT3V0Ym91bmQgTWVzc2FnZSBSZWdpc3RlciAxCisgICAgICAgICAgICAweDIwICAgIEluYm91bmQgRG9vcmJlbGwgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MjQgICAgSW5ib3VuZCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAweDI4ICAgIEluYm91bmQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIKKyAgICAgICAgICAgIDB4MzAgICAgT3V0Ym91bmQgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgMHgzNCAgICBPdXRib3VuZCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcgorICAgICAgICAgICAgMHg0MCAgICBJbmJvdW5kIFF1ZXVlIFBvcnQKKyAgICAgICAgICAgIDB4NDQgICAgT3V0Ym91bmQgUXVldWUgUG9ydAorCiBGb3IgSW50ZWwgSU9QIGJhc2VkIGFkYXB0ZXJzLCB0aGUgY29udHJvbGxlciBJT1AgaXMgYWNjZXNzZWQgdmlhIFBDSSBCQVIwOgogCiAgICAgIEJBUjAgb2Zmc2V0ICAgIFJlZ2lzdGVyCkBAIC05Myw3ICsxMTIsNyBAQAogCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIaWdoUG9pbnQgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKICAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDFjOGViNDUuLmZkOWEyZjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC01MjIsNyArNTIyLDcgQEAKICAgICBwY21fZGV2cyAgICAgICAtIE51bWJlciBvZiBQQ00gZGV2aWNlcyBhc3NpZ25lZCB0byBlYWNoIGNhcmQKICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gMSwgdXAgdG8gNCkKICAgICBwY21fc3Vic3RyZWFtcyAtIE51bWJlciBvZiBQQ00gc3Vic3RyZWFtcyBhc3NpZ25lZCB0byBlYWNoIFBDTQotICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSA4LCB1cCB0byAxNikKKyAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0ID0gOCwgdXAgdG8gMTI4KQogICAgIGhydGltZXIgICAgICAgIC0gVXNlIGhydGltZXIgKD0xLCBkZWZhdWx0KSBvciBzeXN0ZW0gdGltZXIgKD0wKQogICAgIGZha2VfYnVmZmVyICAgIC0gRmFrZSBidWZmZXIgYWxsb2NhdGlvbnMgKGRlZmF1bHQgPSAxKQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IGYxNzA4YjcuLjRjN2Y5YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC0yMDksNiArMjA5LDcgQEAKICAgbGFwdG9wCWxhcHRvcCB3aXRoIEhQIGphY2sgc2Vuc2luZwogICBtb2JpbGUJbW9iaWxlIGRldmljZXMgd2l0aCBIUCBqYWNrIHNlbnNpbmcKICAgdGhpbmtwYWQJTGVub3ZvIFRoaW5rcGFkIFgzMDAKKyAgdG91Y2hzbWFydAlIUCBUb3VjaHNtYXJ0CiAKIEFEMTg4NAogPT09PT09CkBAIC0zNTgsNiArMzU5LDcgQEAKICAgNXN0YWNrLW5vLWZwCUQ5NjUgNXN0YWNrIHdpdGhvdXQgZnJvbnQgcGFuZWwKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgdm9sa25vYglGaXhlcyB3aXRoIHZvbHVtZS1rbm9iIHdpZGdldCAweDI0CiAgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzFCKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGVybWFsL3N5c2ZzLWFwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAppbmRleCA3MGQ2OGNlLi5hODdkYzI3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoZXJtYWwvc3lzZnMtYXBpLnR4dApAQCAtMSw1ICsxLDUgQEAKIEdlbmVyaWMgVGhlcm1hbCBTeXNmcyBkcml2ZXIgSG93IFRvCi09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBXcml0dGVuIGJ5IFN1aml0aCBUaG9tYXMgPHN1aml0aC50aG9tYXNAaW50ZWwuY29tPiwgWmhhbmcgUnVpIDxydWkuemhhbmdAaW50ZWwuY29tPgogCkBAIC0xMCwyMCArMTAsMjAgQEAKIAogMC4gSW50cm9kdWN0aW9uCiAKLVRoZSBnZW5lcmljIHRoZXJtYWwgc3lzZnMgcHJvdmlkZXMgYSBzZXQgb2YgaW50ZXJmYWNlcyBmb3IgdGhlcm1hbCB6b25lIGRldmljZXMgKHNlbnNvcnMpCi1hbmQgdGhlcm1hbCBjb29saW5nIGRldmljZXMgKGZhbiwgcHJvY2Vzc29yLi4uKSB0byByZWdpc3RlciB3aXRoIHRoZSB0aGVybWFsIG1hbmFnZW1lbnQKLXNvbHV0aW9uIGFuZCB0byBiZSBhIHBhcnQgb2YgaXQuCitUaGUgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHByb3ZpZGVzIGEgc2V0IG9mIGludGVyZmFjZXMgZm9yIHRoZXJtYWwgem9uZQorZGV2aWNlcyAoc2Vuc29ycykgYW5kIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIChmYW4sIHByb2Nlc3Nvci4uLikgdG8gcmVnaXN0ZXIKK3dpdGggdGhlIHRoZXJtYWwgbWFuYWdlbWVudCBzb2x1dGlvbiBhbmQgdG8gYmUgYSBwYXJ0IG9mIGl0LgogCi1UaGlzIGhvdy10byBmb2N1c2VzIG9uIGVuYWJsaW5nIG5ldyB0aGVybWFsIHpvbmUgYW5kIGNvb2xpbmcgZGV2aWNlcyB0byBwYXJ0aWNpcGF0ZQotaW4gdGhlcm1hbCBtYW5hZ2VtZW50LgotVGhpcyBzb2x1dGlvbiBpcyBwbGF0Zm9ybSBpbmRlcGVuZGVudCBhbmQgYW55IHR5cGUgb2YgdGhlcm1hbCB6b25lIGRldmljZXMgYW5kCi1jb29saW5nIGRldmljZXMgc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGluZnJhc3RydWN0dXJlLgorVGhpcyBob3ctdG8gZm9jdXNlcyBvbiBlbmFibGluZyBuZXcgdGhlcm1hbCB6b25lIGFuZCBjb29saW5nIGRldmljZXMgdG8KK3BhcnRpY2lwYXRlIGluIHRoZXJtYWwgbWFuYWdlbWVudC4KK1RoaXMgc29sdXRpb24gaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgYW5kIGFueSB0eXBlIG9mIHRoZXJtYWwgem9uZSBkZXZpY2VzCithbmQgY29vbGluZyBkZXZpY2VzIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBpbmZyYXN0cnVjdHVyZS4KIAotVGhlIG1haW4gdGFzayBvZiB0aGUgdGhlcm1hbCBzeXNmcyBkcml2ZXIgaXMgdG8gZXhwb3NlIHRoZXJtYWwgem9uZSBhdHRyaWJ1dGVzIGFzIHdlbGwKLWFzIGNvb2xpbmcgZGV2aWNlIGF0dHJpYnV0ZXMgdG8gdGhlIHVzZXIgc3BhY2UuCi1BbiBpbnRlbGxpZ2VudCB0aGVybWFsIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gY2FuIG1ha2UgZGVjaXNpb25zIGJhc2VkIG9uIGlucHV0cwotZnJvbSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcyAodGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIHRyaXAgcG9pbnQgdGVtcGVyYXR1cmUpCi1hbmQgdGhyb3R0bGUgYXBwcm9wcmlhdGUgZGV2aWNlcy4KK1RoZSBtYWluIHRhc2sgb2YgdGhlIHRoZXJtYWwgc3lzZnMgZHJpdmVyIGlzIHRvIGV4cG9zZSB0aGVybWFsIHpvbmUgYXR0cmlidXRlcworYXMgd2VsbCBhcyBjb29saW5nIGRldmljZSBhdHRyaWJ1dGVzIHRvIHRoZSB1c2VyIHNwYWNlLgorQW4gaW50ZWxsaWdlbnQgdGhlcm1hbCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIGNhbiBtYWtlIGRlY2lzaW9ucyBiYXNlZCBvbgoraW5wdXRzIGZyb20gdGhlcm1hbCB6b25lIGF0dHJpYnV0ZXMgKHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIGFuZCB0cmlwIHBvaW50Cit0ZW1wZXJhdHVyZSkgYW5kIHRocm90dGxlIGFwcHJvcHJpYXRlIGRldmljZXMuCiAKIFswLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDAKIFsxLSpdCWRlbm90ZXMgYW55IHBvc2l0aXZlIG51bWJlciBzdGFydGluZyBmcm9tIDEKQEAgLTMxLDc3ICszMSw3NyBAQAogMS4gdGhlcm1hbCBzeXNmcyBkcml2ZXIgaW50ZXJmYWNlIGZ1bmN0aW9ucwogCiAxLjEgdGhlcm1hbCB6b25lIGRldmljZSBpbnRlcmZhY2UKLTEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCB0cmlwcywKLQkJCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgKm9wcykKKzEuMS4xIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsX3pvbmVfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCisJCWludCB0cmlwcywgdm9pZCAqZGV2ZGF0YSwgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHMpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBhZGRzIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UgKHNlbnNvcikgdG8KLQkvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFzIHRoZXJtYWxfem9uZVswLSpdLgotCUl0IHRyaWVzIHRvIGJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyByZWdpc3RlcmVkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIHpvbmUgZGV2aWNlIChzZW5zb3IpIHRvCisgICAgL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhcyB0aGVybWFsX3pvbmVbMC0qXS4gSXQgdHJpZXMgdG8gYmluZCBhbGwgdGhlCisgICAgdGhlcm1hbCBjb29saW5nIGRldmljZXMgcmVnaXN0ZXJlZCBhdCB0aGUgc2FtZSB0aW1lLgogCi0JbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgotCXRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgotCWRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKLQlvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KLQkJLmJpbmQ6IGJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JCS51bmJpbmQ6IHVuYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KLQkJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KLQkJLmdldF9tb2RlOiBnZXQgdGhlIGN1cnJlbnQgbW9kZSAodXNlci9rZXJuZWwpIG9mIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkgICAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCi0JCQkgICAidXNlciIgd2lsbCBwcmV2ZW50IGtlcm5lbCB0aGVybWFsIGRyaXZlciBhY3Rpb25zIHVwb24gdHJpcCBwb2ludHMKLQkJCSAgIHNvIHRoYXQgdXNlciBhcHBsaWNhdGlvbnMgY2FuIHRha2UgY2hhcmdlIG9mIHRoZXJtYWwgbWFuYWdlbWVudC4KLQkJLnNldF9tb2RlOiBzZXQgdGhlIG1vZGUgKHVzZXIva2VybmVsKSBvZiB0aGUgdGhlcm1hbCB6b25lLgotCQkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KLQkJLmdldF90cmlwX3RlbXA6IGdldCB0aGUgdGVtcGVyYXR1cmUgYWJvdmUgd2hpY2ggdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCQkJCXdpbGwgYmUgZmlyZWQuCisgICAgbmFtZTogdGhlIHRoZXJtYWwgem9uZSBuYW1lLgorICAgIHRyaXBzOiB0aGUgdG90YWwgbnVtYmVyIG9mIHRyaXAgcG9pbnRzIHRoaXMgdGhlcm1hbCB6b25lIHN1cHBvcnRzLgorICAgIGRldmRhdGE6IGRldmljZSBwcml2YXRlIGRhdGEKKyAgICBvcHM6IHRoZXJtYWwgem9uZSBkZXZpY2UgY2FsbC1iYWNrcy4KKwkuYmluZDogYmluZCB0aGUgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZS4KKwkudW5iaW5kOiB1bmJpbmQgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2Ugd2l0aCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCisJLmdldF90ZW1wOiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X21vZGU6IGdldCB0aGUgY3VycmVudCBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkgICAgLSAia2VybmVsIiBtZWFucyB0aGVybWFsIG1hbmFnZW1lbnQgaXMgZG9uZSBpbiBrZXJuZWwuCisJICAgIC0gInVzZXIiIHdpbGwgcHJldmVudCBrZXJuZWwgdGhlcm1hbCBkcml2ZXIgYWN0aW9ucyB1cG9uIHRyaXAgcG9pbnRzCisJICAgICAgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9ucyBjYW4gdGFrZSBjaGFyZ2Ugb2YgdGhlcm1hbCBtYW5hZ2VtZW50LgorCS5zZXRfbW9kZTogc2V0IHRoZSBtb2RlICh1c2VyL2tlcm5lbCkgb2YgdGhlIHRoZXJtYWwgem9uZS4KKwkuZ2V0X3RyaXBfdHlwZTogZ2V0IHRoZSB0eXBlIG9mIGNlcnRhaW4gdHJpcCBwb2ludC4KKwkuZ2V0X3RyaXBfdGVtcDogZ2V0IHRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0aGUgY2VydGFpbiB0cmlwIHBvaW50CisJCQl3aWxsIGJlIGZpcmVkLgogCiAxLjEuMiB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHopCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCUl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZCB1bmJpbmQgYWxsCi0JdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGl0IHVzZXMuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZS4KKyAgICBJdCBkZWxldGVzIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGZvcm0gL3N5cy9jbGFzcy90aGVybWFsIGZvbGRlciBhbmQKKyAgICB1bmJpbmQgYWxsIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlcyBpdCB1c2VzLgogCiAxLjIgdGhlcm1hbCBjb29saW5nIGRldmljZSBpbnRlcmZhY2UKIDEuMi4xIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKm5hbWUsCi0JCQkJCXZvaWQgKmRldmRhdGEsIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX29wcyAqKQorCQl2b2lkICpkZXZkYXRhLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgKikKIAotCVRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIGFkZHMgYSBuZXcgdGhlcm1hbCBjb29saW5nIGRldmljZSAoZmFuL3Byb2Nlc3Nvci8uLi4pIHRvCi0JL3N5cy9jbGFzcy90aGVybWFsLyBmb2xkZXIgYXMgY29vbGluZ19kZXZpY2VbMC0qXS4KLQlJdCB0cmllcyB0byBiaW5kIGl0c2VsZiB0byBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHJlZ2lzdGVyIGF0IHRoZSBzYW1lIHRpbWUuCi0JbmFtZTogdGhlIGNvb2xpbmcgZGV2aWNlIG5hbWUuCi0JZGV2ZGF0YTogZGV2aWNlIHByaXZhdGUgZGF0YS4KLQlvcHM6IHRoZXJtYWwgY29vbGluZyBkZXZpY2VzIGNhbGwtYmFja3MuCi0JCS5nZXRfbWF4X3N0YXRlOiBnZXQgdGhlIE1heGltdW0gdGhyb3R0bGUgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlLgotCQkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KLQkJLnNldF9jdXJfc3RhdGU6IHNldCB0aGUgQ3VycmVudCB0aHJvdHRsZSBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gYWRkcyBhIG5ldyB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIChmYW4vcHJvY2Vzc29yLy4uLikKKyAgICB0byAvc3lzL2NsYXNzL3RoZXJtYWwvIGZvbGRlciBhcyBjb29saW5nX2RldmljZVswLSpdLiBJdCB0cmllcyB0byBiaW5kIGl0c2VsZgorICAgIHRvIGFsbCB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgcmVnaXN0ZXIgYXQgdGhlIHNhbWUgdGltZS4KKyAgICBuYW1lOiB0aGUgY29vbGluZyBkZXZpY2UgbmFtZS4KKyAgICBkZXZkYXRhOiBkZXZpY2UgcHJpdmF0ZSBkYXRhLgorICAgIG9wczogdGhlcm1hbCBjb29saW5nIGRldmljZXMgY2FsbC1iYWNrcy4KKwkuZ2V0X21heF9zdGF0ZTogZ2V0IHRoZSBNYXhpbXVtIHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuZ2V0X2N1cl9zdGF0ZTogZ2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KKwkuc2V0X2N1cl9zdGF0ZTogc2V0IHRoZSBDdXJyZW50IHRocm90dGxlIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZS4KIAogMS4yLjIgdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYpCiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiByZW1vdmUgdGhlIHRoZXJtYWwgY29vbGluZyBkZXZpY2UuCi0JSXQgZGVsZXRlcyB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBmb3JtIC9zeXMvY2xhc3MvdGhlcm1hbCBmb2xkZXIgYW5kIHVuYmluZAotCWl0c2VsZiBmcm9tIGFsbAl0aGUgdGhlcm1hbCB6b25lIGRldmljZXMgdXNpbmcgaXQuCisgICAgVGhpcyBpbnRlcmZhY2UgZnVuY3Rpb24gcmVtb3ZlIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlLgorICAgIEl0IGRlbGV0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgZm9ybSAvc3lzL2NsYXNzL3RoZXJtYWwgZm9sZGVyIGFuZAorICAgIHVuYmluZCBpdHNlbGYgZnJvbSBhbGwgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzIHVzaW5nIGl0LgogCiAxLjMgaW50ZXJmYWNlIGZvciBiaW5kaW5nIGEgdGhlcm1hbCB6b25lIGRldmljZSB3aXRoIGEgdGhlcm1hbCBjb29saW5nIGRldmljZQogMS4zLjEgaW50IHRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKLQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwIHBvaW50Ci0Jb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgotCVRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCSBpbiB0aGlzIHRoZXJtYWwgem9uZS4KKyAgICBUaGlzIGludGVyZmFjZSBmdW5jdGlvbiBiaW5kIGEgdGhlcm1hbCBjb29saW5nIGRldmljZSB0byB0aGUgY2VydGFpbiB0cmlwCisgICAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgaW4gdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLmJpbmQgY2FsbGJhY2suCisgICAgdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCisgICAgY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQorICAgIHRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCisJICBpbiB0aGlzIHRoZXJtYWwgem9uZS4KIAogMS4zLjIgaW50IHRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6LAotCQkJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CisJCWludCB0cmlwLCBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2Rldik7CiAKLQlUaGlzIGludGVyZmFjZSBmdW5jdGlvbiB1bmJpbmQgYSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGZyb20gdGhlIGNlcnRhaW4gdHJpcCBwb2ludAotCW9mIGEgdGhlcm1hbCB6b25lIGRldmljZS4KLQlUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluIHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlIC51bmJpbmQgY2FsbGJhY2suCi0JdHo6IHRoZSB0aGVybWFsIHpvbmUgZGV2aWNlCi0JY2RldjogdGhlcm1hbCBjb29saW5nIGRldmljZQotCXRyaXA6IGluZGljYXRlcyB3aGljaCB0cmlwIHBvaW50IHRoZSBjb29saW5nIGRldmljZXMgaXMgYXNzb2NpYXRlZCB3aXRoCi0JCWluIHRoaXMgdGhlcm1hbCB6b25lLgorICAgIFRoaXMgaW50ZXJmYWNlIGZ1bmN0aW9uIHVuYmluZCBhIHRoZXJtYWwgY29vbGluZyBkZXZpY2UgZnJvbSB0aGUgY2VydGFpbgorICAgIHRyaXAgcG9pbnQgb2YgYSB0aGVybWFsIHpvbmUgZGV2aWNlLiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGluCisgICAgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UgLnVuYmluZCBjYWxsYmFjay4KKyAgICB0ejogdGhlIHRoZXJtYWwgem9uZSBkZXZpY2UKKyAgICBjZGV2OiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlCisgICAgdHJpcDogaW5kaWNhdGVzIHdoaWNoIHRyaXAgcG9pbnQgdGhlIGNvb2xpbmcgZGV2aWNlcyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkgIGluIHRoaXMgdGhlcm1hbCB6b25lLgogCiAyLiBzeXNmcyBhdHRyaWJ1dGVzIHN0cnVjdHVyZQogCkBAIC0xMTQsMTUzICsxMTQsMTY2IEBACiAKIFRoZXJtYWwgem9uZSBkZXZpY2Ugc3lzIEkvRiwgY3JlYXRlZCBvbmNlIGl0J3MgcmVnaXN0ZXJlZDoKIC9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKLQl8LS0tLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQotCXwtLS0tLXRlbXA6CQkJQ3VycmVudCB0ZW1wZXJhdHVyZQotCXwtLS0tLW1vZGU6CQkJV29ya2luZyBtb2RlIG9mIHRoZSB0aGVybWFsIHpvbmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKLQl8LS0tLS10cmlwX3BvaW50X1swLSpdX3R5cGU6CVRyaXAgcG9pbnQgdHlwZQorICAgIHwtLS10eXBlOgkJCVR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10ZW1wOgkJCUN1cnJlbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tbW9kZToJCQlXb3JraW5nIG1vZGUgb2YgdGhlIHRoZXJtYWwgem9uZQorICAgIHwtLS10cmlwX3BvaW50X1swLSpdX3RlbXA6CVRyaXAgcG9pbnQgdGVtcGVyYXR1cmUKKyAgICB8LS0tdHJpcF9wb2ludF9bMC0qXV90eXBlOglUcmlwIHBvaW50IHR5cGUKIAogVGhlcm1hbCBjb29saW5nIGRldmljZSBzeXMgSS9GLCBjcmVhdGVkIG9uY2UgaXQncyByZWdpc3RlcmVkOgogL3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlWzAtKl06Ci0JfC0tLS0tdHlwZSA6CQkJVHlwZSBvZiB0aGUgY29vbGluZyBkZXZpY2UocHJvY2Vzc29yL2Zhbi8uLi4pCi0JfC0tLS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQotCXwtLS0tLWN1cl9zdGF0ZToJCUN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGUgY29vbGluZyBkZXZpY2UKKyAgICB8LS0tdHlwZToJCQlUeXBlIG9mIHRoZSBjb29saW5nIGRldmljZShwcm9jZXNzb3IvZmFuLy4uLikKKyAgICB8LS0tbWF4X3N0YXRlOgkJTWF4aW11bSBjb29saW5nIHN0YXRlIG9mIHRoZSBjb29saW5nIGRldmljZQorICAgIHwtLS1jdXJfc3RhdGU6CQlDdXJyZW50IGNvb2xpbmcgc3RhdGUgb2YgdGhlIGNvb2xpbmcgZGV2aWNlCiAKIAotVGhlc2UgdHdvIGR5bmFtaWMgYXR0cmlidXRlcyBhcmUgY3JlYXRlZC9yZW1vdmVkIGluIHBhaXJzLgotVGhleSByZXByZXNlbnQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGEgdGhlcm1hbCB6b25lIGFuZCBpdHMgYXNzb2NpYXRlZCBjb29saW5nIGRldmljZS4KLVRoZXkgYXJlIGNyZWF0ZWQvcmVtb3ZlZCBmb3IgZWFjaAotdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2UvdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZSBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KK1RoZW4gbmV4dCB0d28gZHluYW1pYyBhdHRyaWJ1dGVzIGFyZSBjcmVhdGVkL3JlbW92ZWQgaW4gcGFpcnMuIFRoZXkgcmVwcmVzZW50Cit0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgYW5kIGl0cyBhc3NvY2lhdGVkIGNvb2xpbmcgZGV2aWNlLgorVGhleSBhcmUgY3JlYXRlZC9yZW1vdmVkIGZvciBlYWNoIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCit0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZS90aGVybWFsX3pvbmVfdW5iaW5kX2Nvb2xpbmdfZGV2aWNlLgogCi0vc3lzL2NsYXNzL3RoZXJtYWwvdGhlcm1hbF96b25lWzAtKl0KLQl8LS0tLS1jZGV2WzAtKl06CQlUaGUgWzAtKl10aCBjb29saW5nIGRldmljZSBpbiB0aGUgY3VycmVudCB0aGVybWFsIHpvbmUKLQl8LS0tLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKKy9zeXMvY2xhc3MvdGhlcm1hbC90aGVybWFsX3pvbmVbMC0qXToKKyAgICB8LS0tY2RldlswLSpdOgkJWzAtKl10aCBjb29saW5nIGRldmljZSBpbiBjdXJyZW50IHRoZXJtYWwgem9uZQorICAgIHwtLS1jZGV2WzAtKl1fdHJpcF9wb2ludDoJVHJpcCBwb2ludCB0aGF0IGNkZXZbMC0qXSBpcyBhc3NvY2lhdGVkIHdpdGgKIAogQmVzaWRlcyB0aGUgdGhlcm1hbCB6b25lIGRldmljZSBzeXNmcyBJL0YgYW5kIGNvb2xpbmcgZGV2aWNlIHN5c2ZzIEkvRiwKLXRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIGFsc28gY3JlYXRlcyBhIGh3bW9uIHN5c2ZzIEkvRiBmb3IgZWFjaCBfdHlwZV8gb2YKLXRoZXJtYWwgem9uZSBkZXZpY2UuIEUuZy4gdGhlIGdlbmVyaWMgdGhlcm1hbCBkcml2ZXIgcmVnaXN0ZXJzIG9uZSBod21vbiBjbGFzcyBkZXZpY2UKLWFuZCBidWlsZCB0aGUgYXNzb2NpYXRlZCBod21vbiBzeXNmcyBJL0YgZm9yIGFsbCB0aGUgcmVnaXN0ZXJlZCBBQ1BJIHRoZXJtYWwgem9uZXMuCit0aGUgZ2VuZXJpYyB0aGVybWFsIGRyaXZlciBhbHNvIGNyZWF0ZXMgYSBod21vbiBzeXNmcyBJL0YgZm9yIGVhY2ggX3R5cGVfCitvZiB0aGVybWFsIHpvbmUgZGV2aWNlLiBFLmcuIHRoZSBnZW5lcmljIHRoZXJtYWwgZHJpdmVyIHJlZ2lzdGVycyBvbmUgaHdtb24KK2NsYXNzIGRldmljZSBhbmQgYnVpbGQgdGhlIGFzc29jaWF0ZWQgaHdtb24gc3lzZnMgSS9GIGZvciBhbGwgdGhlIHJlZ2lzdGVyZWQKK0FDUEkgdGhlcm1hbCB6b25lcy4KKwogL3N5cy9jbGFzcy9od21vbi9od21vblswLSpdOgotCXwtLS0tLW5hbWU6CQkJVGhlIHR5cGUgb2YgdGhlIHRoZXJtYWwgem9uZSBkZXZpY2VzLgotCXwtLS0tLXRlbXBbMS0qXV9pbnB1dDoJCVRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KLQl8LS0tLS10ZW1wWzEtKl1fY3JpdGljYWw6CVRoZSBjcml0aWNhbCB0cmlwIHBvaW50IG9mIHRoZXJtYWwgem9uZSBbMS0qXS4KKyAgICB8LS0tbmFtZToJCQlUaGUgdHlwZSBvZiB0aGUgdGhlcm1hbCB6b25lIGRldmljZXMKKyAgICB8LS0tdGVtcFsxLSpdX2lucHV0OglUaGUgY3VycmVudCB0ZW1wZXJhdHVyZSBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKyAgICB8LS0tdGVtcFsxLSpdX2NyaXRpY2FsOglUaGUgY3JpdGljYWwgdHJpcCBwb2ludCBvZiB0aGVybWFsIHpvbmUgWzEtKl0KKwogUGxlYXNlIHJlYWQgRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiBUaGVybWFsIHpvbmUgYXR0cmlidXRlcyAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotdHlwZQkJCQlTdHJpbmdzIHdoaWNoIHJlcHJlc2VudCB0aGUgdGhlcm1hbCB6b25lIHR5cGUuCi0JCQkJVGhpcyBpcyBnaXZlbiBieSB0aGVybWFsIHpvbmUgZHJpdmVyIGFzIHBhcnQgb2YgcmVnaXN0cmF0aW9uLgotCQkJCUVnOiAiYWNwaXR6IiBpbmRpY2F0ZXMgaXQncyBhbiBBQ1BJIHRoZXJtYWwgZGV2aWNlLgotCQkJCUluIG9yZGVyIHRvIGtlZXAgaXQgY29uc2lzdGVudCB3aXRoIGh3bW9uIHN5cyBhdHRyaWJ1dGUsCi0JCQkJdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbG93ZXJjYXNlIHN0cmluZywKLQkJCQlub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0eXBlCisJU3RyaW5ncyB3aGljaCByZXByZXNlbnQgdGhlIHRoZXJtYWwgem9uZSB0eXBlLgorCVRoaXMgaXMgZ2l2ZW4gYnkgdGhlcm1hbCB6b25lIGRyaXZlciBhcyBwYXJ0IG9mIHJlZ2lzdHJhdGlvbi4KKwlFLmc6ICJhY3BpdHoiIGluZGljYXRlcyBpdCdzIGFuIEFDUEkgdGhlcm1hbCBkZXZpY2UuCisJSW4gb3JkZXIgdG8ga2VlcCBpdCBjb25zaXN0ZW50IHdpdGggaHdtb24gc3lzIGF0dHJpYnV0ZTsgdGhpcyBzaG91bGQKKwliZSBhIHNob3J0LCBsb3dlcmNhc2Ugc3RyaW5nLCBub3QgY29udGFpbmluZyBzcGFjZXMgbm9yIGRhc2hlcy4KKwlSTywgUmVxdWlyZWQKIAotdGVtcAkJCQlDdXJyZW50IHRlbXBlcmF0dXJlIGFzIHJlcG9ydGVkIGJ5IHRoZXJtYWwgem9uZSAoc2Vuc29yKQotCQkJCVVuaXQ6IG1pbGxpZGVncmVlIENlbHNpdXMKLQkJCQlSTwotCQkJCVJlcXVpcmVkCit0ZW1wCisJQ3VycmVudCB0ZW1wZXJhdHVyZSBhcyByZXBvcnRlZCBieSB0aGVybWFsIHpvbmUgKHNlbnNvcikuCisJVW5pdDogbWlsbGlkZWdyZWUgQ2Vsc2l1cworCVJPLCBSZXF1aXJlZAogCi1tb2RlCQkJCU9uZSBvZiB0aGUgcHJlZGVmaW5lZCB2YWx1ZXMgaW4gW2tlcm5lbCwgdXNlcl0KLQkJCQlUaGlzIGZpbGUgZ2l2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobQotCQkJCXRoYXQgaXMgY3VycmVudGx5IG1hbmFnaW5nIHRoZSB0aGVybWFsIHpvbmUuCi0JCQkJSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZCBhbGdvcml0aG0KLQkJCQlvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgotCQkJCVJXCi0JCQkJT3B0aW9uYWwKLQkJCQlrZXJuZWwJPSBUaGVybWFsIG1hbmFnZW1lbnQgaW4ga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIuCi0JCQkJdXNlcgk9IFByZXZlbnRpbmcga2VybmVsIHRoZXJtYWwgem9uZSBkcml2ZXIgYWN0aW9ucyB1cG9uCi0JCQkJCSAgdHJpcCBwb2ludHMgc28gdGhhdCB1c2VyIGFwcGxpY2F0aW9uIGNhbiB0YWtlIGZ1bGwKLQkJCQkJICBjaGFyZ2Ugb2YgdGhlIHRoZXJtYWwgbWFuYWdlbWVudC4KK21vZGUKKwlPbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsdWVzIGluIFtrZXJuZWwsIHVzZXJdLgorCVRoaXMgZmlsZSBnaXZlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWxnb3JpdGhtIHRoYXQgaXMgY3VycmVudGx5CisJbWFuYWdpbmcgdGhlIHRoZXJtYWwgem9uZS4gSXQgY2FuIGJlIGVpdGhlciBkZWZhdWx0IGtlcm5lbCBiYXNlZAorCWFsZ29yaXRobSBvciB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uLgorCWtlcm5lbAk9IFRoZXJtYWwgbWFuYWdlbWVudCBpbiBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlci4KKwl1c2VyCT0gUHJldmVudGluZyBrZXJuZWwgdGhlcm1hbCB6b25lIGRyaXZlciBhY3Rpb25zIHVwb24KKwkJICB0cmlwIHBvaW50cyBzbyB0aGF0IHVzZXIgYXBwbGljYXRpb24gY2FuIHRha2UgZnVsbAorCQkgIGNoYXJnZSBvZiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50LgorCVJXLCBPcHRpb25hbAogCi10cmlwX3BvaW50X1swLSpdX3RlbXAJCVRoZSB0ZW1wZXJhdHVyZSBhYm92ZSB3aGljaCB0cmlwIHBvaW50IHdpbGwgYmUgZmlyZWQKLQkJCQlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCi0JCQkJUk8KLQkJCQlPcHRpb25hbAordHJpcF9wb2ludF9bMC0qXV90ZW1wCisJVGhlIHRlbXBlcmF0dXJlIGFib3ZlIHdoaWNoIHRyaXAgcG9pbnQgd2lsbCBiZSBmaXJlZC4KKwlVbml0OiBtaWxsaWRlZ3JlZSBDZWxzaXVzCisJUk8sIE9wdGlvbmFsCiAKLXRyaXBfcG9pbnRfWzAtKl1fdHlwZSAJCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQKLQkJCQlFLmcuIGl0IGNhbiBiZSBvbmUgb2YgY3JpdGljYWwsIGhvdCwgcGFzc2l2ZSwKLQkJCQkgICAgYWN0aXZlWzAtKl0gZm9yIEFDUEkgdGhlcm1hbCB6b25lLgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK3RyaXBfcG9pbnRfWzAtKl1fdHlwZQorCVN0cmluZ3Mgd2hpY2ggaW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIHRyaXAgcG9pbnQuCisJRS5nLiBpdCBjYW4gYmUgb25lIG9mIGNyaXRpY2FsLCBob3QsIHBhc3NpdmUsIGFjdGl2ZVswLSpdIGZvciBBQ1BJCisJdGhlcm1hbCB6b25lLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl0JCQlTeXNmcyBsaW5rIHRvIHRoZSB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIG5vZGUgd2hlcmUgdGhlIHN5cyBJL0YKLQkJCQlmb3IgY29vbGluZyBkZXZpY2UgdGhyb3R0bGluZyBjb250cm9sIHJlcHJlc2VudHMuCi0JCQkJUk8KLQkJCQlPcHRpb25hbAorY2RldlswLSpdCisJU3lzZnMgbGluayB0byB0aGUgdGhlcm1hbCBjb29saW5nIGRldmljZSBub2RlIHdoZXJlIHRoZSBzeXMgSS9GCisJZm9yIGNvb2xpbmcgZGV2aWNlIHRocm90dGxpbmcgY29udHJvbCByZXByZXNlbnRzLgorCVJPLCBPcHRpb25hbAogCi1jZGV2WzAtKl1fdHJpcF9wb2ludAkJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwgem9uZQotCQkJCS0xIG1lYW5zIHRoZSBjb29saW5nIGRldmljZSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB0cmlwIHBvaW50LgotCQkJCVJPCi0JCQkJT3B0aW9uYWwKK2NkZXZbMC0qXV90cmlwX3BvaW50CisJVGhlIHRyaXAgcG9pbnQgd2l0aCB3aGljaCBjZGV2WzAtKl0gaXMgYXNzb2NpYXRlZCBpbiB0aGlzIHRoZXJtYWwKKwl6b25lOyAtMSBtZWFucyB0aGUgY29vbGluZyBkZXZpY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdHJpcAorCXBvaW50LgorCVJPLCBPcHRpb25hbAogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogQ29vbGluZyBkZXZpY2UgIGF0dHJpYnV0ZXMgKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitwYXNzaXZlCisJQXR0cmlidXRlIGlzIG9ubHkgcHJlc2VudCBmb3Igem9uZXMgaW4gd2hpY2ggdGhlIHBhc3NpdmUgY29vbGluZworCXBvbGljeSBpcyBub3Qgc3VwcG9ydGVkIGJ5IG5hdGl2ZSB0aGVybWFsIGRyaXZlci4gRGVmYXVsdCBpcyB6ZXJvCisJYW5kIGNhbiBiZSBzZXQgdG8gYSB0ZW1wZXJhdHVyZSAoaW4gbWlsbGlkZWdyZWVzKSB0byBlbmFibGUgYQorCXBhc3NpdmUgdHJpcCBwb2ludCBmb3IgdGhlIHpvbmUuIEFjdGl2YXRpb24gaXMgZG9uZSBieSBwb2xsaW5nIHdpdGgKKwlhbiBpbnRlcnZhbCBvZiAxIHNlY29uZC4KKwlVbml0OiBtaWxsaWRlZ3JlZXMgQ2Vsc2l1cworCVJXLCBPcHRpb25hbAogCi10eXBlCQkJCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZQotCQkJCWVnOiBGb3IgZ2VuZXJpYyBBQ1BJOiB0aGlzIHNob3VsZCBiZSAiRmFuIiwKLQkJCQkiUHJvY2Vzc29yIiBvciAiTENEIgotCQkJCWVnLiBGb3IgbWVtb3J5IGNvbnRyb2xsZXIgZGV2aWNlIG9uIGludGVsX21lbmxvdyBwbGF0Zm9ybToKLQkJCQl0aGlzIHNob3VsZCBiZSAiTWVtb3J5IGNvbnRyb2xsZXIiCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29vbGluZyBkZXZpY2UgYXR0cmlidXRlcyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1tYXhfc3RhdGUJCQlUaGUgbWF4aW11bSBwZXJtaXNzaWJsZSBjb29saW5nIHN0YXRlIG9mIHRoaXMgY29vbGluZyBkZXZpY2UuCi0JCQkJUk8KLQkJCQlSZXF1aXJlZAordHlwZQorCVN0cmluZyB3aGljaCByZXByZXNlbnRzIHRoZSB0eXBlIG9mIGRldmljZSwgZS5nOgorCS0gZm9yIGdlbmVyaWMgQUNQSTogc2hvdWxkIGJlICJGYW4iLCAiUHJvY2Vzc29yIiBvciAiTENEIgorCS0gZm9yIG1lbW9yeSBjb250cm9sbGVyIGRldmljZSBvbiBpbnRlbF9tZW5sb3cgcGxhdGZvcm06CisJICBzaG91bGQgYmUgIk1lbW9yeSBjb250cm9sbGVyIi4KKwlSTywgUmVxdWlyZWQKIAotY3VyX3N0YXRlCQkJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgotCQkJCXRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZSwKLQkJCQljdXJfc3RhdGUgPT0gMCBtZWFucyBubyBjb29saW5nCi0JCQkJY3VyX3N0YXRlID09IG1heF9zdGF0ZSBtZWFucyB0aGUgbWF4aW11bSBjb29saW5nLgotCQkJCVJXCi0JCQkJUmVxdWlyZWQKK21heF9zdGF0ZQorCVRoZSBtYXhpbXVtIHBlcm1pc3NpYmxlIGNvb2xpbmcgc3RhdGUgb2YgdGhpcyBjb29saW5nIGRldmljZS4KKwlSTywgUmVxdWlyZWQKKworY3VyX3N0YXRlCisJVGhlIGN1cnJlbnQgY29vbGluZyBzdGF0ZSBvZiB0aGlzIGNvb2xpbmcgZGV2aWNlLgorCVRoZSB2YWx1ZSBjYW4gYW55IGludGVnZXIgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heF9zdGF0ZToKKwktIGN1cl9zdGF0ZSA9PSAwIG1lYW5zIG5vIGNvb2xpbmcKKwktIGN1cl9zdGF0ZSA9PSBtYXhfc3RhdGUgbWVhbnMgdGhlIG1heGltdW0gY29vbGluZy4KKwlSVywgUmVxdWlyZWQKIAogMy4gQSBzaW1wbGUgaW1wbGVtZW50YXRpb24KIAotQUNQSSB0aGVybWFsIHpvbmUgbWF5IHN1cHBvcnQgbXVsdGlwbGUgdHJpcCBwb2ludHMgbGlrZSBjcml0aWNhbC9ob3QvcGFzc2l2ZS9hY3RpdmUuCi1JZiBhbiBBQ1BJIHRoZXJtYWwgem9uZSBzdXBwb3J0cyBjcml0aWNhbCwgcGFzc2l2ZSwgYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwKLWl0IG1heSByZWdpc3RlciBpdHNlbGYgYXMgYSB0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgotSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMgdGhlcm1hbF9jb29saW5nX2RldmljZS4KLUlmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMCBtZXRob2QsCi10aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CitBQ1BJIHRoZXJtYWwgem9uZSBtYXkgc3VwcG9ydCBtdWx0aXBsZSB0cmlwIHBvaW50cyBsaWtlIGNyaXRpY2FsLCBob3QsCitwYXNzaXZlLCBhY3RpdmUuIElmIGFuIEFDUEkgdGhlcm1hbCB6b25lIHN1cHBvcnRzIGNyaXRpY2FsLCBwYXNzaXZlLAorYWN0aXZlWzBdIGFuZCBhY3RpdmVbMV0gYXQgdGhlIHNhbWUgdGltZSwgaXQgbWF5IHJlZ2lzdGVyIGl0c2VsZiBhcyBhCit0aGVybWFsX3pvbmVfZGV2aWNlICh0aGVybWFsX3pvbmUxKSB3aXRoIDQgdHJpcCBwb2ludHMgaW4gYWxsLgorSXQgaGFzIG9uZSBwcm9jZXNzb3IgYW5kIG9uZSBmYW4sIHdoaWNoIGFyZSBib3RoIHJlZ2lzdGVyZWQgYXMKK3RoZXJtYWxfY29vbGluZ19kZXZpY2UuCisKK0lmIHRoZSBwcm9jZXNzb3IgaXMgbGlzdGVkIGluIF9QU0wgbWV0aG9kLCBhbmQgdGhlIGZhbiBpcyBsaXN0ZWQgaW4gX0FMMAorbWV0aG9kLCB0aGUgc3lzIEkvRiBzdHJ1Y3R1cmUgd2lsbCBiZSBidWlsdCBsaWtlIHRoaXM6CiAKIC9zeXMvY2xhc3MvdGhlcm1hbDoKIAogfHRoZXJtYWxfem9uZTE6Ci0JfC0tLS0tdHlwZToJCQlhY3BpdHoKLQl8LS0tLS10ZW1wOgkJCTM3MDAwCi0JfC0tLS0tbW9kZToJCQlrZXJuZWwKLQl8LS0tLS10cmlwX3BvaW50XzBfdGVtcDoJMTAwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8wX3R5cGU6CWNyaXRpY2FsCi0JfC0tLS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCi0JfC0tLS0tdHJpcF9wb2ludF8xX3R5cGU6CXBhc3NpdmUKLQl8LS0tLS10cmlwX3BvaW50XzJfdGVtcDoJNzAwMDAKLQl8LS0tLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAotCXwtLS0tLXRyaXBfcG9pbnRfM190ZW1wOgk2MDAwMAotCXwtLS0tLXRyaXBfcG9pbnRfM190eXBlOglhY3RpdmUxCi0JfC0tLS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKLQl8LS0tLS1jZGV2MF90cmlwX3BvaW50OgkJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLwotCXwtLS0tLWNkZXYxOgkJCS0tLT4vc3lzL2NsYXNzL3RoZXJtYWwvY29vbGluZ19kZXZpY2UzCi0JfC0tLS0tY2RldjFfdHJpcF9wb2ludDoJCTIJLyogY2RldjEgY2FuIGJlIHVzZWQgZm9yIGFjdGl2ZVswXSovCisgICAgfC0tLXR5cGU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXA6CQkJMzcwMDAKKyAgICB8LS0tbW9kZToJCQlrZXJuZWwKKyAgICB8LS0tdHJpcF9wb2ludF8wX3RlbXA6CTEwMDAwMAorICAgIHwtLS10cmlwX3BvaW50XzBfdHlwZToJY3JpdGljYWwKKyAgICB8LS0tdHJpcF9wb2ludF8xX3RlbXA6CTgwMDAwCisgICAgfC0tLXRyaXBfcG9pbnRfMV90eXBlOglwYXNzaXZlCisgICAgfC0tLXRyaXBfcG9pbnRfMl90ZW1wOgk3MDAwMAorICAgIHwtLS10cmlwX3BvaW50XzJfdHlwZToJYWN0aXZlMAorICAgIHwtLS10cmlwX3BvaW50XzNfdGVtcDoJNjAwMDAKKyAgICB8LS0tdHJpcF9wb2ludF8zX3R5cGU6CWFjdGl2ZTEKKyAgICB8LS0tY2RldjA6CQkJLS0tPi9zeXMvY2xhc3MvdGhlcm1hbC9jb29saW5nX2RldmljZTAKKyAgICB8LS0tY2RldjBfdHJpcF9wb2ludDoJMQkvKiBjZGV2MCBjYW4gYmUgdXNlZCBmb3IgcGFzc2l2ZSAqLworICAgIHwtLS1jZGV2MToJCQktLS0+L3N5cy9jbGFzcy90aGVybWFsL2Nvb2xpbmdfZGV2aWNlMworICAgIHwtLS1jZGV2MV90cmlwX3BvaW50OgkyCS8qIGNkZXYxIGNhbiBiZSB1c2VkIGZvciBhY3RpdmVbMF0qLwogCiB8Y29vbGluZ19kZXZpY2UwOgotCXwtLS0tLXR5cGU6CQkJUHJvY2Vzc29yCi0JfC0tLS0tbWF4X3N0YXRlOgkJOAotCXwtLS0tLWN1cl9zdGF0ZToJCTAKKyAgICB8LS0tdHlwZToJCQlQcm9jZXNzb3IKKyAgICB8LS0tbWF4X3N0YXRlOgkJOAorICAgIHwtLS1jdXJfc3RhdGU6CQkwCiAKIHxjb29saW5nX2RldmljZTM6Ci0JfC0tLS0tdHlwZToJCQlGYW4KLQl8LS0tLS1tYXhfc3RhdGU6CQkyCi0JfC0tLS0tY3VyX3N0YXRlOgkJMAorICAgIHwtLS10eXBlOgkJCUZhbgorICAgIHwtLS1tYXhfc3RhdGU6CQkyCisgICAgfC0tLWN1cl9zdGF0ZToJCTAKIAogL3N5cy9jbGFzcy9od21vbjoKIAogfGh3bW9uMDoKLQl8LS0tLS1uYW1lOgkJCWFjcGl0egotCXwtLS0tLXRlbXAxX2lucHV0OgkJMzcwMDAKLQl8LS0tLS10ZW1wMV9jcml0OgkJMTAwMDAwCisgICAgfC0tLW5hbWU6CQkJYWNwaXR6CisgICAgfC0tLXRlbXAxX2lucHV0OgkJMzcwMDAKKyAgICB8LS0tdGVtcDFfY3JpdDoJCTEwMDAwMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CmluZGV4IDk1N2IyMmYuLjgxNzk2OTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKQEAgLTEyMzEsNiArMTIzMSw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKQEAgLTEyNjUsNiArMTI2Niw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKKyAgICAgICBzdHJjYXQoZGVidWdmcywgIi90cmFjaW5nLyIpOwogICAgICAgIGRlYnVnZnNfZm91bmQgPSAxOwogCiAgICAgICAgcmV0dXJuIGRlYnVnZnM7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHdwb2lzb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZmFkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2h3cG9pc29uLnR4dApAQCAtMCwwICsxLDEzNiBAQAorV2hhdCBpcyBod3BvaXNvbj8KKworVXBjb21pbmcgSW50ZWwgQ1BVcyBoYXZlIHN1cHBvcnQgZm9yIHJlY292ZXJpbmcgZnJvbSBzb21lIG1lbW9yeSBlcnJvcnMKKyhgYE1DQSByZWNvdmVyeScnKS4gVGhpcyByZXF1aXJlcyB0aGUgT1MgdG8gZGVjbGFyZSBhIHBhZ2UgInBvaXNvbmVkIiwKK2tpbGwgdGhlIHByb2Nlc3NlcyBhc3NvY2lhdGVkIHdpdGggaXQgYW5kIGF2b2lkIHVzaW5nIGl0IGluIHRoZSBmdXR1cmUuCisKK1RoaXMgcGF0Y2hraXQgaW1wbGVtZW50cyB0aGUgbmVjZXNzYXJ5IGluZnJhc3RydWN0dXJlIGluIHRoZSBWTS4KKworVG8gcXVvdGUgdGhlIG92ZXJ2aWV3IGNvbW1lbnQ6CisKKyAqIEhpZ2ggbGV2ZWwgbWFjaGluZSBjaGVjayBoYW5kbGVyLiBIYW5kbGVzIHBhZ2VzIHJlcG9ydGVkIGJ5IHRoZQorICogaGFyZHdhcmUgYXMgYmVpbmcgY29ycnVwdGVkIHVzdWFsbHkgZHVlIHRvIGEgMmJpdCBFQ0MgbWVtb3J5IG9yIGNhY2hlCisgKiBmYWlsdXJlLgorICoKKyAqIFRoaXMgZm9jdXNzZXMgb24gcGFnZXMgZGV0ZWN0ZWQgYXMgY29ycnVwdGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICogV2hlbiB0aGUgY3VycmVudCBDUFUgdHJpZXMgdG8gY29uc3VtZSBjb3JydXB0aW9uIHRoZSBjdXJyZW50bHkKKyAqIHJ1bm5pbmcgcHJvY2VzcyBjYW4ganVzdCBiZSBraWxsZWQgZGlyZWN0bHkgaW5zdGVhZC4gVGhpcyBpbXBsaWVzCisgKiB0aGF0IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgaGFuZGxlZCBmb3Igc29tZSByZWFzb24gaXQncyBzYWZlIHRvCisgKiBqdXN0IGlnbm9yZSBpdCBiZWNhdXNlIG5vIGNvcnJ1cHRpb24gaGFzIGJlZW4gY29uc3VtZWQgeWV0LiBJbnN0ZWFkCisgKiB3aGVuIHRoYXQgaGFwcGVucyBhbm90aGVyIG1hY2hpbmUgY2hlY2sgd2lsbCBoYXBwZW4uCisgKgorICogSGFuZGxlcyBwYWdlIGNhY2hlIHBhZ2VzIGluIHZhcmlvdXMgc3RhdGVzLiBUaGUgdHJpY2t5IHBhcnQKKyAqIGhlcmUgaXMgdGhhdCB3ZSBjYW4gYWNjZXNzIGFueSBwYWdlIGFzeW5jaHJvbm91cyB0byBvdGhlciBWTQorICogdXNlcnMsIGJlY2F1c2UgbWVtb3J5IGZhaWx1cmVzIGNvdWxkIGhhcHBlbiBhbnl0aW1lIGFuZCBhbnl3aGVyZSwKKyAqIHBvc3NpYmx5IHZpb2xhdGluZyBzb21lIG9mIHRoZWlyIGFzc3VtcHRpb25zLiBUaGlzIGlzIHdoeSB0aGlzIGNvZGUKKyAqIGhhcyB0byBiZSBleHRyZW1lbHkgY2FyZWZ1bC4gR2VuZXJhbGx5IGl0IHRyaWVzIHRvIHVzZSBub3JtYWwgbG9ja2luZworICogcnVsZXMsIGFzIGluIGdldCB0aGUgc3RhbmRhcmQgbG9ja3MsIGV2ZW4gaWYgdGhhdCBtZWFucyB0aGUKKyAqIGVycm9yIGhhbmRsaW5nIHRha2VzIHBvdGVudGlhbGx5IGEgbG9uZyB0aW1lLgorICoKKyAqIFNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgaGVyZSBhcmUgc29tZXdoYXQgaW5lZmZpY2llbnQgYW5kIGhhdmUgbm9uCisgKiBsaW5lYXIgYWxnb3JpdGhtaWMgY29tcGxleGl0eSwgYmVjYXVzZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgbm90CisgKiBiZWVuIG9wdGltaXplZCBmb3IgdGhpcyBjYXNlLiBUaGlzIGlzIGluIHBhcnRpY3VsYXIgdGhlIGNhc2UKKyAqIGZvciB0aGUgbWFwcGluZyBmcm9tIGEgdm1hIHRvIGEgcHJvY2Vzcy4gU2luY2UgdGhpcyBjYXNlIGlzIGV4cGVjdGVkCisgKiB0byBiZSByYXJlIHdlIGhvcGUgd2UgY2FuIGdldCBhd2F5IHdpdGggdGhpcy4KKworVGhlIGNvZGUgY29uc2lzdHMgb2YgYSB0aGUgaGlnaCBsZXZlbCBoYW5kbGVyIGluIG1tL21lbW9yeS1mYWlsdXJlLmMsCithIG5ldyBwYWdlIHBvaXNvbiBiaXQgYW5kIHZhcmlvdXMgY2hlY2tzIGluIHRoZSBWTSB0byBoYW5kbGUgcG9pc29uZWQKK3BhZ2VzLgorCitUaGUgbWFpbiB0YXJnZXQgcmlnaHQgbm93IGlzIEtWTSBndWVzdHMsIGJ1dCBpdCB3b3JrcyBmb3IgYWxsIGtpbmRzCitvZiBhcHBsaWNhdGlvbnMuIEtWTSBzdXBwb3J0IHJlcXVpcmVzIGEgcmVjZW50IHFlbXUta3ZtIHJlbGVhc2UuCisKK0ZvciB0aGUgS1ZNIHVzZSB0aGVyZSB3YXMgbmVlZCBmb3IgYSBuZXcgc2lnbmFsIHR5cGUgc28gdGhhdAorS1ZNIGNhbiBpbmplY3QgdGhlIG1hY2hpbmUgY2hlY2sgaW50byB0aGUgZ3Vlc3Qgd2l0aCB0aGUgcHJvcGVyCithZGRyZXNzLiBUaGlzIGluIHRoZW9yeSBhbGxvd3Mgb3RoZXIgYXBwbGljYXRpb25zIHRvIGhhbmRsZQorbWVtb3J5IGZhaWx1cmVzIHRvby4gVGhlIGV4cGVjdGlvbiBpcyB0aGF0IG5lYXIgYWxsIGFwcGxpY2F0aW9ucword29uJ3QgZG8gdGhhdCwgYnV0IHNvbWUgdmVyeSBzcGVjaWFsaXplZCBvbmVzIG1pZ2h0LgorCistLS0KKworVGhlcmUgYXJlIHR3byAoYWN0dWFsbHkgdGhyZWUpIG1vZGkgbWVtb3J5IGZhaWx1cmUgcmVjb3ZlcnkgY2FuIGJlIGluOgorCit2bS5tZW1vcnlfZmFpbHVyZV9yZWNvdmVyeSBzeXNjdGwgc2V0IHRvIHplcm86CisJQWxsIG1lbW9yeSBmYWlsdXJlcyBjYXVzZSBhIHBhbmljLiBEbyBub3QgYXR0ZW1wdCByZWNvdmVyeS4KKwkob24geDg2IHRoaXMgY2FuIGJlIGFsc28gYWZmZWN0ZWQgYnkgdGhlIHRvbGVyYW50IGxldmVsIG9mIHRoZQorCU1DRSBzdWJzeXN0ZW0pCisKK2Vhcmx5IGtpbGwKKwkoY2FuIGJlIGNvbnRyb2xsZWQgZ2xvYmFsbHkgYW5kIHBlciBwcm9jZXNzKQorCVNlbmQgU0lHQlVTIHRvIHRoZSBhcHBsaWNhdGlvbiBhcyBzb29uIGFzIHRoZSBlcnJvciBpcyBkZXRlY3RlZAorCVRoaXMgYWxsb3dzIGFwcGxpY2F0aW9ucyB3aG8gY2FuIHByb2Nlc3MgbWVtb3J5IGVycm9ycyBpbiBhIGdlbnRsZQorCXdheSAoZS5nLiBkcm9wIGFmZmVjdGVkIG9iamVjdCkKKwlUaGlzIGlzIHRoZSBtb2RlIHVzZWQgYnkgS1ZNIHFlbXUuCisKK2xhdGUga2lsbAorCVNlbmQgU0lHQlVTIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHJ1bnMgaW50byB0aGUgY29ycnVwdGVkIHBhZ2UuCisJVGhpcyBpcyBiZXN0IGZvciBtZW1vcnkgZXJyb3IgdW5hd2FyZSBhcHBsaWNhdGlvbnMgYW5kIGRlZmF1bHQKKwlOb3RlIHNvbWUgcGFnZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGFzIGxhdGUga2lsbC4KKworLS0tCisKK1VzZXIgY29udHJvbDoKKwordm0ubWVtb3J5X2ZhaWx1cmVfcmVjb3ZlcnkKKwlTZWUgc3lzY3RsLnR4dAorCit2bS5tZW1vcnlfZmFpbHVyZV9lYXJseV9raWxsCisJRW5hYmxlIGVhcmx5IGtpbGwgbW9kZSBnbG9iYWxseQorCitQUl9NQ0VfS0lMTAorCVNldCBlYXJseS9sYXRlIGtpbGwgbW9kZS9yZXZlcnQgdG8gc3lzdGVtIGRlZmF1bHQKKwlhcmcxOiBQUl9NQ0VfS0lMTF9DTEVBUjogUmV2ZXJ0IHRvIHN5c3RlbSBkZWZhdWx0CisJYXJnMTogUFJfTUNFX0tJTExfU0VUOiBhcmcyIGRlZmluZXMgdGhyZWFkIHNwZWNpZmljIG1vZGUKKwkJUFJfTUNFX0tJTExfRUFSTFk6IEVhcmx5IGtpbGwKKwkJUFJfTUNFX0tJTExfTEFURTogIExhdGUga2lsbAorCQlQUl9NQ0VfS0lMTF9ERUZBVUxUOiBVc2Ugc3lzdGVtIGdsb2JhbCBkZWZhdWx0CitQUl9NQ0VfS0lMTF9HRVQKKwlyZXR1cm4gY3VycmVudCBtb2RlCisKKworLS0tCisKK1Rlc3Rpbmc6CisKK21hZHZpc2UoTUFEVl9QT0lTT04sIC4uLi4pCisJKGFzIHJvb3QpCisJUG9pc29uIGEgcGFnZSBpbiB0aGUgcHJvY2VzcyBmb3IgdGVzdGluZworCisKK2h3cG9pc29uLWluamVjdCBtb2R1bGUgdGhyb3VnaCBkZWJ1Z2ZzCisJL3N5cy9kZWJ1Zy9od3BvaXNvbi9jb3JydXB0LXBmbgorCitJbmplY3QgaHdwb2lzb24gZmF1bHQgYXQgUEZOIGVjaG9lZCBpbnRvIHRoaXMgZmlsZQorCisKK0FyY2hpdGVjdHVyZSBzcGVjaWZpYyBNQ0UgaW5qZWN0b3IKKworeDg2IGhhcyBtY2UtaW5qZWN0LCBtY2UtdGVzdAorCitTb21lIHBvcnRhYmxlIGh3cG9pc29uIHRlc3QgcHJvZ3JhbXMgaW4gbWNlLXRlc3QsIHNlZSBibG93LgorCistLS0KKworUmVmZXJlbmNlczoKKworaHR0cDovL2hhbG9iYXRlcy5kZS9tY2UtbGMwOS0yLnBkZgorCU92ZXJ2aWV3IHByZXNlbnRhdGlvbiBmcm9tIExpbnV4Q29uIDA5CisKK2dpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvY3B1L21jZS9tY2UtdGVzdC5naXQKKwlUZXN0IHN1aXRlIChod3BvaXNvbiBzcGVjaWZpYyBwb3J0YWJsZSB0ZXN0cyBpbiB0c3JjKQorCitnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL3V0aWxzL2NwdS9tY2UvbWNlLWluamVjdC5naXQKKwl4ODYgc3BlY2lmaWMgaW5qZWN0b3IKKworCistLS0KKworTGltaXRhdGlvbnM6CisKKy0gTm90IGFsbCBwYWdlIHR5cGVzIGFyZSBzdXBwb3J0ZWQgYW5kIG5ldmVyIHdpbGwuIE1vc3Qga2VybmVsIGludGVybmFsCitvYmplY3RzIGNhbm5vdCBiZSByZWNvdmVyZWQsIG9ubHkgTFJVIHBhZ2VzIGZvciBub3cuCistIFJpZ2h0IG5vdyBodWdlcGFnZSBzdXBwb3J0IGlzIG1pc3NpbmcuCisKKy0tLQorQW5kaSBLbGVlbiwgT2N0IDIwMDkKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rc20udHh0CmluZGV4IDcyYTIyZjYuLjI2MmQ4ZTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0va3NtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQKQEAgLTUyLDE1ICs1MiwxNSBAQAogcmVhZGFibGUgYnkgYWxsIGJ1dCB3cml0YWJsZSBvbmx5IGJ5IHJvb3Q6CiAKIG1heF9rZXJuZWxfcGFnZXMgLSBzZXQgdG8gbWF4aW11bSBudW1iZXIgb2Yga2VybmVsIHBhZ2VzIHRoYXQgS1NNIG1heSB1c2UKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMDAgPiAvc3lzL2tlcm5lbC9tbS9rc20vbWF4X2tlcm5lbF9wYWdlcyIKKyAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDEwMDAwMCA+IC9zeXMva2VybmVsL21tL2tzbS9tYXhfa2VybmVsX3BhZ2VzIgogICAgICAgICAgICAgICAgICAgIFZhbHVlIDAgaW1wb3NlcyBubyBsaW1pdCBvbiB0aGUga2VybmVsIHBhZ2VzIEtTTSBtYXkgdXNlOwogICAgICAgICAgICAgICAgICAgIGJ1dCBub3RlIHRoYXQgYW55IHByb2Nlc3MgdXNpbmcgTUFEVl9NRVJHRUFCTEUgY2FuIGNhdXNlCiAgICAgICAgICAgICAgICAgICAgS1NNIHRvIGFsbG9jYXRlIHRoZXNlIHBhZ2VzLCB1bnN3YXBwYWJsZSB1bnRpbCBpdCBleGl0cy4KLSAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAyMDAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogcXVhcnRlciBvZiBtZW1vcnkgKGNob3NlbiB0byBub3QgcGluIHRvbyBtdWNoKQogCiBwYWdlc190b19zY2FuICAgIC0gaG93IG1hbnkgcHJlc2VudCBwYWdlcyB0byBzY2FuIGJlZm9yZSBrc21kIGdvZXMgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICBlLmcuICJlY2hvIDIwMCA+IC9zeXMva2VybmVsL21tL2tzbS9wYWdlc190b19zY2FuIgotICAgICAgICAgICAgICAgICAgIERlZmF1bHQ6IDIwMCAoY2hvc2VuIGZvciBkZW1vbnN0cmF0aW9uIHB1cnBvc2VzKQorICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMTAwID4gL3N5cy9rZXJuZWwvbW0va3NtL3BhZ2VzX3RvX3NjYW4iCisgICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMTAwIChjaG9zZW4gZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMpCiAKIHNsZWVwX21pbGxpc2VjcyAgLSBob3cgbWFueSBtaWxsaXNlY29uZHMga3NtZCBzaG91bGQgc2xlZXAgYmVmb3JlIG5leHQgc2NhbgogICAgICAgICAgICAgICAgICAgIGUuZy4gImVjaG8gMjAgPiAvc3lzL2tlcm5lbC9tbS9rc20vc2xlZXBfbWlsbGlzZWNzIgpAQCAtNzAsNyArNzAsOCBAQAogICAgICAgICAgICAgICAgICAgIHNldCAxIHRvIHJ1biBrc21kIGUuZy4gImVjaG8gMSA+IC9zeXMva2VybmVsL21tL2tzbS9ydW4iLAogICAgICAgICAgICAgICAgICAgIHNldCAyIHRvIHN0b3Aga3NtZCBhbmQgdW5tZXJnZSBhbGwgcGFnZXMgY3VycmVudGx5IG1lcmdlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbGVhdmUgbWVyZ2VhYmxlIGFyZWFzIHJlZ2lzdGVyZWQgZm9yIG5leHQgcnVuCi0gICAgICAgICAgICAgICAgICAgRGVmYXVsdDogMSAoZm9yIGltbWVkaWF0ZSB1c2UgYnkgYXBwcyB3aGljaCByZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICBEZWZhdWx0OiAwIChtdXN0IGJlIGNoYW5nZWQgdG8gMSB0byBhY3RpdmF0ZSBLU00sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGlmIENPTkZJR19TWVNGUyBpcyBkaXNhYmxlZCkKIAogVGhlIGVmZmVjdGl2ZW5lc3Mgb2YgS1NNIGFuZCBNQURWX01FUkdFQUJMRSBpcyBzaG93biBpbiAvc3lzL2tlcm5lbC9tbS9rc20vOgogCkBAIC04Niw0ICs4Nyw0IEBACiBwcm9wb3J0aW9uIHRoZXJlIHdvdWxkIGFsc28gaW5kaWNhdGUgcG9vciB1c2Ugb2YgbWFkdmlzZSBNQURWX01FUkdFQUJMRS4KIAogSXppayBFaWR1cywKLUh1Z2ggRGlja2lucywgMzAgSnVseSAyMDA5CitIdWdoIERpY2tpbnMsIDI0IFNlcHQgMjAwOQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlLXR5cGVzLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwppbmRleCBmYTFhMzBkLi40NzkzYzZhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYworKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2UtdHlwZXMuYwpAQCAtMiw3ICsyLDEwIEBACiAgKiBwYWdlLXR5cGVzOiBUb29sIGZvciBxdWVyeWluZyBwYWdlIGZsYWdzCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIGNvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgV3UgRmVuZ2d1YW5nIDxmZW5nZ3Vhbmcud3VAaW50ZWwuY29tPgorICoKKyAqIEF1dGhvcnM6IFd1IEZlbmdndWFuZyA8ZmVuZ2d1YW5nLnd1QGludGVsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KICAqLwogCiAjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKQEAgLTY5LDcgKzcyLDkgQEAKICNkZWZpbmUgS1BGX0NPTVBPVU5EX1RBSUwJMTYKICNkZWZpbmUgS1BGX0hVR0UJCTE3CiAjZGVmaW5lIEtQRl9VTkVWSUNUQUJMRQkJMTgKKyNkZWZpbmUgS1BGX0hXUE9JU09OCQkxOQogI2RlZmluZSBLUEZfTk9QQUdFCQkyMAorI2RlZmluZSBLUEZfS1NNCQkJMjEKIAogLyogWzMyLV0ga2VybmVsIGhhY2tpbmcgYXNzaXN0YW5jZXMgKi8KICNkZWZpbmUgS1BGX1JFU0VSVkVECQkzMgpAQCAtMTE2LDcgKzEyMSw5IEBACiAJW0tQRl9DT01QT1VORF9UQUlMXQk9ICJUOmNvbXBvdW5kX3RhaWwiLAogCVtLUEZfSFVHRV0JCT0gIkc6aHVnZSIsCiAJW0tQRl9VTkVWSUNUQUJMRV0JPSAidTp1bmV2aWN0YWJsZSIsCisJW0tQRl9IV1BPSVNPTl0JCT0gIlg6aHdwb2lzb24iLAogCVtLUEZfTk9QQUdFXQkJPSAibjpub3BhZ2UiLAorCVtLUEZfS1NNXQkJPSAieDprc20iLAogCiAJW0tQRl9SRVNFUlZFRF0JCT0gInI6cmVzZXJ2ZWQiLAogCVtLUEZfTUxPQ0tFRF0JCT0gIm06bWxvY2tlZCIsCkBAIC0xNTIsOSArMTU5LDYgQEAKIHN0YXRpYyBpbnQJCW5yX3ZtYXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19zdGFydFtNQVhfVk1BU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZwlwZ19lbmRbTUFYX1ZNQVNdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcJdm9mZnNldDsKLQotc3RhdGljIGludAkJcGFnZW1hcF9mZDsKIAogI2RlZmluZSBNQVhfQklUX0ZJTFRFUlMJNjQKIHN0YXRpYyBpbnQJCW5yX2JpdF9maWx0ZXJzOwpAQCAtMTYzLDkgKzE2NywxNiBAQAogCiBzdGF0aWMgaW50CQlwYWdlX3NpemU7CiAKLSNkZWZpbmUgUEFHRVNfQkFUQ0gJKDY0IDw8IDEwKQkvKiA2NGsgcGFnZXMgKi8KK3N0YXRpYyBpbnQJCXBhZ2VtYXBfZmQ7CiBzdGF0aWMgaW50CQlrcGFnZWZsYWdzX2ZkOwogCitzdGF0aWMgaW50CQlvcHRfaHdwb2lzb247CitzdGF0aWMgaW50CQlvcHRfdW5wb2lzb247CisKK3N0YXRpYyBjaGFyCQkqaHdwb2lzb25fZGVidWdfZnMgPSAiL2RlYnVnL2h3cG9pc29uIjsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2luamVjdF9mZDsKK3N0YXRpYyBpbnQJCWh3cG9pc29uX2ZvcmdldF9mZDsKKwogI2RlZmluZSBIQVNIX1NISUZUCTEzCiAjZGVmaW5lIEhBU0hfU0laRQkoMSA8PCBIQVNIX1NISUZUKQogI2RlZmluZSBIQVNIX01BU0sJKEhBU0hfU0laRSAtIDEpCkBAIC0yMDcsNiArMjE4LDc0IEBACiAJZXhpdChFWElUX0ZBSUxVUkUpOwogfQogCitzdGF0aWMgaW50IGNoZWNrZWRfb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworCWludCBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKworCWlmIChmZCA8IDApIHsKKwkJcGVycm9yKHBhdGhuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCXJldHVybiBmZDsKK30KKworLyoKKyAqIHBhZ2VtYXAva3BhZ2VmbGFncyByb3V0aW5lcworICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3U2NF9yZWFkKGludCBmZCwgY2hhciAqbmFtZSwKKwkJCQkgdWludDY0X3QgKmJ1ZiwKKwkJCQkgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlsb25nIGJ5dGVzOworCisJaWYgKGluZGV4ID4gVUxPTkdfTUFYIC8gOCkKKwkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKKworCWlmIChsc2VlayhmZCwgaW5kZXggKiA4LCBTRUVLX1NFVCkgPCAwKSB7CisJCXBlcnJvcihuYW1lKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWJ5dGVzID0gcmVhZChmZCwgYnVmLCBjb3VudCAqIDgpOworCWlmIChieXRlcyA8IDApIHsKKwkJcGVycm9yKG5hbWUpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChieXRlcyAlIDgpCisJCWZhdGFsKCJwYXJ0aWFsIHJlYWQ6ICVsdSBieXRlc1xuIiwgYnl0ZXMpOworCisJcmV0dXJuIGJ5dGVzIC8gODsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcga3BhZ2VmbGFnc19yZWFkKHVpbnQ2NF90ICpidWYsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGluZGV4LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwlyZXR1cm4gZG9fdTY0X3JlYWQoa3BhZ2VmbGFnc19mZCwgUFJPQ19LUEFHRUZMQUdTLCBidWYsIGluZGV4LCBwYWdlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhZ2VtYXBfcmVhZCh1aW50NjRfdCAqYnVmLAorCQkJCSAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJcmV0dXJuIGRvX3U2NF9yZWFkKHBhZ2VtYXBfZmQsICIvcHJvYy9waWQvcGFnZW1hcCIsIGJ1ZiwgaW5kZXgsIHBhZ2VzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFnZW1hcF9wZm4odWludDY0X3QgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcGZuOworCisJaWYgKHZhbCAmIFBNX1BSRVNFTlQpCisJCXBmbiA9IFBNX1BGUkFNRSh2YWwpOworCWVsc2UKKwkJcGZuID0gMDsKKworCXJldHVybiBwZm47Cit9CisKIAogLyoKICAqIHBhZ2UgZmxhZyBuYW1lcwpAQCAtMjU1LDcgKzMzNCw4IEBACiAgKiBwYWdlIGxpc3QgYW5kIHN1bW1hcnkKICAqLwogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2VfcmFuZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7CiAJc3RhdGljIHVpbnQ2NF90ICAgICAgZmxhZ3MwOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHZvZmY7CkBAIC0yODEsNyArMzYxLDggQEAKIAljb3VudCAgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQorc3RhdGljIHZvaWQgc2hvd19wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHVpbnQ2NF90IGZsYWdzKQogewogCWlmIChvcHRfcGlkKQogCQlwcmludGYoIiVseFx0Iiwgdm9mZnNldCk7CkBAIC0zNjIsNiArNDQzLDYyIEBACiAJcmV0dXJuIGZsYWdzOwogfQogCitzdGF0aWMgdWludDY0X3Qga3BhZ2VmbGFnc19mbGFncyh1aW50NjRfdCBmbGFncykKK3sKKwlmbGFncyA9IGV4cGFuZF9vdmVybG9hZGVkX2ZsYWdzKGZsYWdzKTsKKworCWlmICghb3B0X3JhdykKKwkJZmxhZ3MgPSB3ZWxsX2tub3duX2ZsYWdzKGZsYWdzKTsKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIHBhZ2UgYWN0aW9ucworICovCisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaHdwb2lzb25fZmQodm9pZCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCisJaWYgKG9wdF9od3BvaXNvbiAmJiAhaHdwb2lzb25faW5qZWN0X2ZkKSB7CisJCXNwcmludGYoYnVmLCAiJXMvY29ycnVwdC1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2luamVjdF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9CisKKwlpZiAob3B0X3VucG9pc29uICYmICFod3BvaXNvbl9mb3JnZXRfZmQpIHsKKwkJc3ByaW50ZihidWYsICIlcy9yZW5ldy1wZm4iLCBod3BvaXNvbl9kZWJ1Z19mcyk7CisJCWh3cG9pc29uX2ZvcmdldF9mZCA9IGNoZWNrZWRfb3BlbihidWYsIE9fV1JPTkxZKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaHdwb2lzb25fcGFnZSh1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwljaGFyIGJ1ZlsxMDBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBvZmZzZXQpOworCWxlbiA9IHdyaXRlKGh3cG9pc29uX2luamVjdF9mZCwgYnVmLCBsZW4pOworCWlmIChsZW4gPCAwKSB7CisJCXBlcnJvcigiaHdwb2lzb24gaW5qZWN0Iik7CisJCXJldHVybiBsZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVucG9pc29uX3BhZ2UodW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJY2hhciBidWZbMTAwXTsKKwlpbnQgbGVuOworCisJbGVuID0gc3ByaW50ZihidWYsICIweCVseFxuIiwgb2Zmc2V0KTsKKwlsZW4gPSB3cml0ZShod3BvaXNvbl9mb3JnZXRfZmQsIGJ1ZiwgbGVuKTsKKwlpZiAobGVuIDwgMCkgeworCQlwZXJyb3IoImh3cG9pc29uIGZvcmdldCIpOworCQlyZXR1cm4gbGVuOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIHBhZ2UgZnJhbWUgd2Fsa2VyCkBAIC0zOTQsMTA0ICs1MzEsODMgQEAKIAlleGl0KEVYSVRfRkFJTFVSRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1aW50NjRfdCBmbGFncykKK3N0YXRpYyB2b2lkIGFkZF9wYWdlKHVuc2lnbmVkIGxvbmcgdm9mZnNldCwKKwkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdWludDY0X3QgZmxhZ3MpCiB7Ci0JZmxhZ3MgPSBleHBhbmRfb3ZlcmxvYWRlZF9mbGFncyhmbGFncyk7Ci0KLQlpZiAoIW9wdF9yYXcpCi0JCWZsYWdzID0gd2VsbF9rbm93bl9mbGFncyhmbGFncyk7CisJZmxhZ3MgPSBrcGFnZWZsYWdzX2ZsYWdzKGZsYWdzKTsKIAogCWlmICghYml0X21hc2tfb2soZmxhZ3MpKQogCQlyZXR1cm47CiAKKwlpZiAob3B0X2h3cG9pc29uKQorCQlod3BvaXNvbl9wYWdlKG9mZnNldCk7CisJaWYgKG9wdF91bnBvaXNvbikKKwkJdW5wb2lzb25fcGFnZShvZmZzZXQpOworCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlX3JhbmdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCWVsc2UgaWYgKG9wdF9saXN0ID09IDIpCi0JCXNob3dfcGFnZShvZmZzZXQsIGZsYWdzKTsKKwkJc2hvd19wYWdlKHZvZmZzZXQsIG9mZnNldCwgZmxhZ3MpOwogCiAJbnJfcGFnZXNbaGFzaF9zbG90KGZsYWdzKV0rKzsKIAl0b3RhbF9wYWdlcysrOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIGNvdW50KQorI2RlZmluZSBLUEFHRUZMQUdTX0JBVENICSg2NCA8PCAxMCkJLyogNjRrIHBhZ2VzICovCitzdGF0aWMgdm9pZCB3YWxrX3Bmbih1bnNpZ25lZCBsb25nIHZvZmZzZXQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBpbmRleCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50KQogeworCXVpbnQ2NF90IGJ1ZltLUEFHRUZMQUdTX0JBVENIXTsKIAl1bnNpZ25lZCBsb25nIGJhdGNoOwotCXVuc2lnbmVkIGxvbmcgbjsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChpbmRleCA+IFVMT05HX01BWCAvIEtQRl9CWVRFUykKLQkJZmF0YWwoImluZGV4IG92ZXJmbG93OiAlbHVcbiIsIGluZGV4KTsKLQotCWxzZWVrKGtwYWdlZmxhZ3NfZmQsIGluZGV4ICogS1BGX0JZVEVTLCBTRUVLX1NFVCk7Ci0KIAl3aGlsZSAoY291bnQpIHsKLQkJdWludDY0X3Qga3BhZ2VmbGFnc19idWZbS1BGX0JZVEVTICogUEFHRVNfQkFUQ0hdOwotCi0JCWJhdGNoID0gbWluX3QodW5zaWduZWQgbG9uZywgY291bnQsIFBBR0VTX0JBVENIKTsKLQkJbiA9IHJlYWQoa3BhZ2VmbGFnc19mZCwga3BhZ2VmbGFnc19idWYsIGJhdGNoICogS1BGX0JZVEVTKTsKLQkJaWYgKG4gPT0gMCkKKwkJYmF0Y2ggPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjb3VudCwgS1BBR0VGTEFHU19CQVRDSCk7CisJCXBhZ2VzID0ga3BhZ2VmbGFnc19yZWFkKGJ1ZiwgaW5kZXgsIGJhdGNoKTsKKwkJaWYgKHBhZ2VzID09IDApCiAJCQlicmVhazsKLQkJaWYgKG4gPCAwKSB7Ci0JCQlwZXJyb3IoUFJPQ19LUEFHRUZMQUdTKTsKLQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQkJfQogCi0JCWlmIChuICUgS1BGX0JZVEVTICE9IDApCi0JCQlmYXRhbCgicGFydGlhbCByZWFkOiAlbHUgYnl0ZXNcbiIsIG4pOwotCQluID0gbiAvIEtQRl9CWVRFUzsKKwkJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspCisJCQlhZGRfcGFnZSh2b2Zmc2V0ICsgaSwgaW5kZXggKyBpLCBidWZbaV0pOwogCi0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0JCQlhZGRfcGFnZShpbmRleCArIGksIGtwYWdlZmxhZ3NfYnVmW2ldKTsKLQotCQlpbmRleCArPSBiYXRjaDsKLQkJY291bnQgLT0gYmF0Y2g7CisJCWluZGV4ICs9IHBhZ2VzOworCQljb3VudCAtPSBwYWdlczsKIAl9CiB9CiAKLQotI2RlZmluZSBQQUdFTUFQX0JBVENICTQwOTYKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRhc2tfcGZuKHVuc2lnbmVkIGxvbmcgcGdvZmYpCisjZGVmaW5lIFBBR0VNQVBfQkFUQ0gJKDY0IDw8IDEwKQorc3RhdGljIHZvaWQgd2Fsa192bWEodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlzdGF0aWMgdWludDY0X3QgYnVmW1BBR0VNQVBfQkFUQ0hdOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCXN0YXRpYyBsb25nIGNvdW50OwotCXVpbnQ2NF90IHBmbjsKKwl1aW50NjRfdCBidWZbUEFHRU1BUF9CQVRDSF07CisJdW5zaWduZWQgbG9uZyBiYXRjaDsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcGZuOworCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChwZ29mZiA8IHN0YXJ0IHx8IHBnb2ZmID49IHN0YXJ0ICsgY291bnQpIHsKLQkJaWYgKGxzZWVrNjQocGFnZW1hcF9mZCwKLQkJCSAgICAodWludDY0X3QpcGdvZmYgKiBQTV9FTlRSWV9CWVRFUywKLQkJCSAgICBTRUVLX1NFVCkgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgc2VlayIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCXdoaWxlIChjb3VudCkgeworCQliYXRjaCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGNvdW50LCBQQUdFTUFQX0JBVENIKTsKKwkJcGFnZXMgPSBwYWdlbWFwX3JlYWQoYnVmLCBpbmRleCwgYmF0Y2gpOworCQlpZiAocGFnZXMgPT0gMCkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCQlwZm4gPSBwYWdlbWFwX3BmbihidWZbaV0pOworCQkJaWYgKHBmbikKKwkJCQl3YWxrX3BmbihpbmRleCArIGksIHBmbiwgMSk7CiAJCX0KLQkJY291bnQgPSByZWFkKHBhZ2VtYXBfZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCQlpZiAoY291bnQgPT0gMCkKLQkJCXJldHVybiAwOwotCQlpZiAoY291bnQgPCAwKSB7Ci0JCQlwZXJyb3IoInBhZ2VtYXAgcmVhZCIpOwotCQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCQl9Ci0JCWlmIChjb3VudCAlIFBNX0VOVFJZX0JZVEVTKSB7Ci0JCQlmYXRhbCgicGFnZW1hcCByZWFkIG5vdCBhbGlnbmVkLlxuIik7Ci0JCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JCX0KLQkJY291bnQgLz0gUE1fRU5UUllfQllURVM7Ci0JCXN0YXJ0ID0gcGdvZmY7CisKKwkJaW5kZXggKz0gcGFnZXM7CisJCWNvdW50IC09IHBhZ2VzOwogCX0KLQotCXBmbiA9IGJ1ZltwZ29mZiAtIHN0YXJ0XTsKLQlpZiAocGZuICYgUE1fUFJFU0VOVCkKLQkJcGZuID0gUE1fUEZSQU1FKHBmbik7Ci0JZWxzZQotCQlwZm4gPSAwOwotCi0JcmV0dXJuIHBmbjsKIH0KIAogc3RhdGljIHZvaWQgd2Fsa190YXNrKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JaW50IGkgPSAwOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kID0gaW5kZXggKyBjb3VudDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCBpID0gMDsKIAogCXdoaWxlIChpbmRleCA8IGVuZCkgewogCkBAIC01MDEsMTUgKzYxNywxMSBAQAogCQlpZiAocGdfc3RhcnRbaV0gPj0gZW5kKQogCQkJcmV0dXJuOwogCi0JCXZvZmZzZXQgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBwZ19zdGFydFtpXSwgaW5kZXgpOwotCQlpbmRleCAgID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOworCQlzdGFydCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIHBnX3N0YXJ0W2ldLCBpbmRleCk7CisJCWluZGV4ID0gbWluX3QodW5zaWduZWQgbG9uZywgcGdfZW5kW2ldLCBlbmQpOwogCi0JCWFzc2VydCh2b2Zmc2V0IDwgaW5kZXgpOwotCQlmb3IgKDsgdm9mZnNldCA8IGluZGV4OyB2b2Zmc2V0KyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgcGZuID0gdGFza19wZm4odm9mZnNldCk7Ci0JCQlpZiAocGZuKQotCQkJCXdhbGtfcGZuKHBmbiwgMSk7Ci0JCX0KKwkJYXNzZXJ0KHN0YXJ0IDwgaW5kZXgpOworCQl3YWxrX3ZtYShzdGFydCwgaW5kZXggLSBzdGFydCk7CiAJfQogfQogCkBAIC01MjcsMTggKzYzOSwxNCBAQAogewogCWludCBpOwogCi0Ja3BhZ2VmbGFnc19mZCA9IG9wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7Ci0JaWYgKGtwYWdlZmxhZ3NfZmQgPCAwKSB7Ci0JCXBlcnJvcihQUk9DX0tQQUdFRkxBR1MpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCWtwYWdlZmxhZ3NfZmQgPSBjaGVja2VkX29wZW4oUFJPQ19LUEFHRUZMQUdTLCBPX1JET05MWSk7CiAKIAlpZiAoIW5yX2FkZHJfcmFuZ2VzKQogCQlhZGRfYWRkcl9yYW5nZSgwLCBVTE9OR19NQVgpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX2FkZHJfcmFuZ2VzOyBpKyspCiAJCWlmICghb3B0X3BpZCkKLQkJCXdhbGtfcGZuKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKKwkJCXdhbGtfcGZuKDAsIG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIAkJZWxzZQogCQkJd2Fsa190YXNrKG9wdF9vZmZzZXRbaV0sIG9wdF9zaXplW2ldKTsKIApAQCAtNTc1LDYgKzY4Myw4IEBACiAiICAgICAgICAgICAgLWx8LS1saXN0ICAgICAgICAgICAgICAgICBTaG93IHBhZ2UgZGV0YWlscyBpbiByYW5nZXNcbiIKICIgICAgICAgICAgICAtTHwtLWxpc3QtZWFjaCAgICAgICAgICAgIFNob3cgcGFnZSBkZXRhaWxzIG9uZSBieSBvbmVcbiIKICIgICAgICAgICAgICAtTnwtLW5vLXN1bW1hcnkgICAgICAgICAgIERvbid0IHNob3cgc3VtbWF5IGluZm9cbiIKKyIgICAgICAgICAgICAtWHwtLWh3cG9pc29uICAgICAgICAgICAgIGh3cG9pc29uIHBhZ2VzXG4iCisiICAgICAgICAgICAgLXh8LS11bnBvaXNvbiAgICAgICAgICAgICB1bnBvaXNvbiBwYWdlc1xuIgogIiAgICAgICAgICAgIC1ofC0taGVscCAgICAgICAgICAgICAgICAgU2hvdyB0aGlzIHVzYWdlIG1lc3NhZ2VcbiIKICJhZGRyLXNwZWM6XG4iCiAiICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgcGFnZSBhdCBvZmZzZXQgTiAodW5pdDogcGFnZXMpXG4iCkBAIC02MjQsMTEgKzczNCw3IEBACiAJb3B0X3BpZCA9IHBhcnNlX251bWJlcihzdHIpOwogCiAJc3ByaW50ZihidWYsICIvcHJvYy8lZC9wYWdlbWFwIiwgb3B0X3BpZCk7Ci0JcGFnZW1hcF9mZCA9IG9wZW4oYnVmLCBPX1JET05MWSk7Ci0JaWYgKHBhZ2VtYXBfZmQgPCAwKSB7Ci0JCXBlcnJvcihidWYpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQorCXBhZ2VtYXBfZmQgPSBjaGVja2VkX29wZW4oYnVmLCBPX1JET05MWSk7CiAKIAlzcHJpbnRmKGJ1ZiwgIi9wcm9jLyVkL21hcHMiLCBvcHRfcGlkKTsKIAlmaWxlID0gZm9wZW4oYnVmLCAiciIpOwpAQCAtNzg4LDYgKzg5NCw4IEBACiAJeyAibGlzdCIgICAgICAsIDAsIE5VTEwsICdsJyB9LAogCXsgImxpc3QtZWFjaCIgLCAwLCBOVUxMLCAnTCcgfSwKIAl7ICJuby1zdW1tYXJ5IiwgMCwgTlVMTCwgJ04nIH0sCisJeyAiaHdwb2lzb24iICAsIDAsIE5VTEwsICdYJyB9LAorCXsgInVucG9pc29uIiAgLCAwLCBOVUxMLCAneCcgfSwKIAl7ICJoZWxwIiAgICAgICwgMCwgTlVMTCwgJ2gnIH0sCiAJeyBOVUxMICAgICAgICAsIDAsIE5VTEwsIDAgfQogfTsKQEAgLTc5OSw3ICs5MDcsNyBAQAogCXBhZ2Vfc2l6ZSA9IGdldHBhZ2VzaXplKCk7CiAKIAl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LAotCQkJCSJycDpmOmE6YjpsTE5oIiwgb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCQkJInJwOmY6YTpiOmxMTlh4aCIsIG9wdHMsIE5VTEwpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAncic6CiAJCQlvcHRfcmF3ID0gMTsKQEAgLTgyNSw2ICs5MzMsMTQgQEAKIAkJY2FzZSAnTic6CiAJCQlvcHRfbm9fc3VtbWFyeSA9IDE7CiAJCQlicmVhazsKKwkJY2FzZSAnWCc6CisJCQlvcHRfaHdwb2lzb24gPSAxOworCQkJcHJlcGFyZV9od3BvaXNvbl9mZCgpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJb3B0X3VucG9pc29uID0gMTsKKwkJCXByZXBhcmVfaHdwb2lzb25fZmQoKTsKKwkJCWJyZWFrOwogCQljYXNlICdoJzoKIAkJCXVzYWdlKCk7CiAJCQlleGl0KDApOwpAQCAtODQ0LDcgKzk2MCw3IEBACiAJd2Fsa19hZGRyX3JhbmdlcygpOwogCiAJaWYgKG9wdF9saXN0ID09IDEpCi0JCXNob3dfcGFnZV9yYW5nZSgwLCAwKTsgIC8qIGRyYWluIHRoZSBidWZmZXIgKi8KKwkJc2hvd19wYWdlX3JhbmdlKDAsIDAsIDApOyAgLyogZHJhaW4gdGhlIGJ1ZmZlciAqLwogCiAJaWYgKG9wdF9ub19zdW1tYXJ5KQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CmluZGV4IDYwMGEzMDQuLmRmMDliOTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcGFnZW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dApAQCAtNTcsNyArNTcsOSBAQAogICAgIDE2LiBDT01QT1VORF9UQUlMCiAgICAgMTYuIEhVR0UKICAgICAxOC4gVU5FVklDVEFCTEUKKyAgICAxOS4gSFdQT0lTT04KICAgICAyMC4gTk9QQUdFCisgICAgMjEuIEtTTQogCiBTaG9ydCBkZXNjcmlwdGlvbnMgdG8gdGhlIHBhZ2UgZmxhZ3M6CiAKQEAgLTg2LDkgKzg4LDE1IEBACiAxNy4gSFVHRQogICAgIHRoaXMgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiBhIEh1Z2VUTEIgcGFnZQogCisxOS4gSFdQT0lTT04KKyAgICBoYXJkd2FyZSBkZXRlY3RlZCBtZW1vcnkgY29ycnVwdGlvbiBvbiB0aGlzIHBhZ2U6IGRvbid0IHRvdWNoIHRoZSBkYXRhIQorCiAyMC4gTk9QQUdFCiAgICAgbm8gcGFnZSBmcmFtZSBleGlzdHMgYXQgdGhlIHJlcXVlc3RlZCBhZGRyZXNzCiAKKzIxLiBLU00KKyAgICBpZGVudGljYWwgbWVtb3J5IHBhZ2VzIGR5bmFtaWNhbGx5IHNoYXJlZCBiZXR3ZWVuIG9uZSBvciBtb3JlIHByb2Nlc3NlcworCiAgICAgW0lPIHJlbGF0ZWQgcGFnZSBmbGFnc10KICAxLiBFUlJPUiAgICAgSU8gZXJyb3Igb2NjdXJyZWQKICAzLiBVUFRPREFURSAgcGFnZSBoYXMgdXAtdG8tZGF0ZSBkYXRhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyIGIvRG9jdW1lbnRhdGlvbi93MS9tYXN0ZXJzL2RzMjQ4MgppbmRleCA5MjEwZDZmLi4yOTliOTFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3cxL21hc3RlcnMvZHMyNDgyCisrKyBiL0RvY3VtZW50YXRpb24vdzEvbWFzdGVycy9kczI0ODIKQEAgLTI0LDggKzI0LDggQEAKIAogVmFsaWQgYWRkcmVzc2VzIGFyZSAweDE4LCAweDE5LCAweDFhLCBhbmQgMHgxYi4KIEhvd2V2ZXIsIHRoZSBkZXZpY2UgY2Fubm90IGJlIGRldGVjdGVkIHdpdGhvdXQgd3JpdGluZyB0byB0aGUgaTJjIGJ1cywgc28gbm8KLWRldGVjdGlvbiBpcyBkb25lLgotWW91IHNob3VsZCBmb3JjZSB0aGUgZGV2aWNlIGFkZHJlc3MuCitkZXRlY3Rpb24gaXMgZG9uZS4gWW91IHNob3VsZCBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIGV4cGxpY2l0bHkuCiAKLSQgbW9kcHJvYmUgZHMyNDgyIGZvcmNlPTAsMHgxOAorJCBtb2Rwcm9iZSBkczI0ODIKKyQgZWNobyBkczI0ODIgMHgxOCA+IC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2UKIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA4ODdiNTBiLi5jODI0YjRkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjUsNDMgKzY1LDUxIEBACiAKIDguCUhhcHB5IGhhY2tpbmcuCiAKLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Rlc2NyaXB0aW9ucyBvZiBzZWN0aW9uIGVudHJpZXM6CiAKLU1haW50YWluZXJzIExpc3QgKHRyeSB0byBsb29rIGZvciBtb3N0IHByZWNpc2UgYXJlYXMgZmlyc3QpCisJUDogUGVyc29uIChvYnNvbGV0ZSkKKwlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KKwlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKKwlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgorCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgorCSAgIE1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCisJICAgT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbworCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCisJICAgT3JwaGFuOglObyBjdXJyZW50IG1haW50YWluZXIgW2J1dCBtYXliZSB5b3UgY291bGQgdGFrZSB0aGUKKwkJCXJvbGUgYXMgeW91IHdyaXRlIHlvdXIgbmV3IGNvZGVdLgorCSAgIE9ic29sZXRlOglPbGQgY29kZS4gU29tZXRoaW5nIHRhZ2dlZCBvYnNvbGV0ZSBnZW5lcmFsbHkgbWVhbnMKKwkJCWl0IGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGEgYmV0dGVyIHN5c3RlbSBhbmQgeW91CisJCQlzaG91bGQgYmUgdXNpbmcgdGhhdC4KKwlGOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aCB3aWxkY2FyZCBwYXR0ZXJucy4KKwkgICBBIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVzIGFsbCBmaWxlcyBhbmQgc3ViZGlyZWN0b3J5IGZpbGVzLgorCSAgIEY6CWRyaXZlcnMvbmV0LwlhbGwgZmlsZXMgaW4gYW5kIGJlbG93IGRyaXZlcnMvbmV0CisJICAgRjoJZHJpdmVycy9uZXQvKglhbGwgZmlsZXMgaW4gZHJpdmVycy9uZXQsIGJ1dCBub3QgYmVsb3cKKwkgICBGOgkqL25ldC8qCQlhbGwgZmlsZXMgaW4gImFueSB0b3AgbGV2ZWwgZGlyZWN0b3J5Ii9uZXQKKwkgICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCisJWDogRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYXJlIE5PVCBtYWludGFpbmVkLCBzYW1lIHJ1bGVzIGFzIEY6CisJICAgRmlsZXMgZXhjbHVzaW9ucyBhcmUgdGVzdGVkIGJlZm9yZSBmaWxlIG1hdGNoZXMuCisJICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6CisJICAgRjoJbmV0LworCSAgIFg6CW5ldC9pcHY2LworCSAgIG1hdGNoZXMgYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBuZXQgZXhjbHVkaW5nIG5ldC9pcHY2LworCUs6IEtleXdvcmQgcGVybCBleHRlbmRlZCByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGNvbnRlbnQgaW4gYQorCSAgIHBhdGNoIG9yIGZpbGUuICBGb3IgaW5zdGFuY2U6CisJICAgSzogb2ZfZ2V0X3Byb2ZpbGUKKwkgICAgICBtYXRjaGVzIHBhdGNoZXMgb3IgZmlsZXMgdGhhdCBjb250YWluICJvZl9nZXRfcHJvZmlsZSIKKwkgICBLOiBcYihwcmludGt8cHJfKGluZm98ZXJyKSlcYgorCSAgICAgIG1hdGNoZXMgcGF0Y2hlcyBvciBmaWxlcyB0aGF0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIHdvcmRzCisJICAgICAgcHJpbnRrLCBwcl9pbmZvIG9yIHByX2VycgorCSAgIE9uZSByZWdleCBwYXR0ZXJuIHBlciBsaW5lLiAgTXVsdGlwbGUgSzogbGluZXMgYWNjZXB0YWJsZS4KIAogTm90ZTogRm9yIHRoZSBoYXJkIG9mIHRoaW5raW5nLCB0aGlzIGxpc3QgaXMgbWVhbnQgdG8gcmVtYWluIGluIGFscGhhYmV0aWNhbAogb3JkZXIuIElmIHlvdSBjb3VsZCBhZGQgeW91cnNlbHZlcyB0byBpdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgdGhhdCB3b3VsZCBiZQogc28gbXVjaCBlYXNpZXIgW0VkXQogCi1QOiBQZXJzb24gKG9ic29sZXRlKQotTTogTWFpbCBwYXRjaGVzIHRvOiBGdWxsTmFtZSA8YWRkcmVzc0Bkb21haW4+Ci1MOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKLVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KLVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KLVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CitNYWludGFpbmVycyBMaXN0ICh0cnkgdG8gbG9vayBmb3IgbW9zdCBwcmVjaXNlIGFyZWFzIGZpcnN0KQogCi0JU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgotCU1haW50YWluZWQ6CVNvbWVvbmUgYWN0dWFsbHkgbG9va3MgYWZ0ZXIgaXQuCi0JT2RkIEZpeGVzOglJdCBoYXMgYSBtYWludGFpbmVyIGJ1dCB0aGV5IGRvbid0IGhhdmUgdGltZSB0byBkbwotCQkJbXVjaCBvdGhlciB0aGFuIHRocm93IHRoZSBvZGQgcGF0Y2ggaW4uIFNlZSBiZWxvdy4uCi0JT3JwaGFuOgkJTm8gY3VycmVudCBtYWludGFpbmVyIFtidXQgbWF5YmUgeW91IGNvdWxkIHRha2UgdGhlCi0JCQlyb2xlIGFzIHlvdSB3cml0ZSB5b3VyIG5ldyBjb2RlXS4KLQlPYnNvbGV0ZToJT2xkIGNvZGUuIFNvbWV0aGluZyB0YWdnZWQgb2Jzb2xldGUgZ2VuZXJhbGx5IG1lYW5zCi0JCQlpdCBoYXMgYmVlbiByZXBsYWNlZCBieSBhIGJldHRlciBzeXN0ZW0gYW5kIHlvdQotCQkJc2hvdWxkIGJlIHVzaW5nIHRoYXQuCi0KLUY6IEZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHdpbGRjYXJkIHBhdHRlcm5zLgotICAgQSB0cmFpbGluZyBzbGFzaCBpbmNsdWRlcyBhbGwgZmlsZXMgYW5kIHN1YmRpcmVjdG9yeSBmaWxlcy4KLQlGOglkcml2ZXJzL25ldC8JYWxsIGZpbGVzIGluIGFuZCBiZWxvdyBkcml2ZXJzL25ldAotCUY6CWRyaXZlcnMvbmV0LyoJYWxsIGZpbGVzIGluIGRyaXZlcnMvbmV0LCBidXQgbm90IGJlbG93Ci0JRjoJKi9uZXQvKgkJYWxsIGZpbGVzIGluICJhbnkgdG9wIGxldmVsIGRpcmVjdG9yeSIvbmV0Ci0gICBPbmUgcGF0dGVybiBwZXIgbGluZS4gIE11bHRpcGxlIEY6IGxpbmVzIGFjY2VwdGFibGUuCi1YOiBGaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgTk9UIG1haW50YWluZWQsIHNhbWUgcnVsZXMgYXMgRjoKLSAgIEZpbGVzIGV4Y2x1c2lvbnMgYXJlIHRlc3RlZCBiZWZvcmUgZmlsZSBtYXRjaGVzLgotICAgQ2FuIGJlIHVzZWZ1bCBmb3IgZXhjbHVkaW5nIGEgc3BlY2lmaWMgc3ViZGlyZWN0b3J5LCBmb3IgaW5zdGFuY2U6Ci0JRjoJbmV0LwotCVg6CW5ldC9pcHY2LwotICAgbWF0Y2hlcyBhbGwgZmlsZXMgaW4gYW5kIGJlbG93IG5ldCBleGNsdWRpbmcgbmV0L2lwdjYvCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDNDNTA1IE5FVFdPUksgRFJJVkVSCiBNOglQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+CkBAIC0xNzQsNyArMTgyLDcgQEAKIE06CUxhdGNoZXNhciBJb25rb3YgPGx1Y2hvQGlvbmtvdi5uZXQ+CiBMOgl2OWZzLWRldmVsb3BlckBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9zd2lrLm5ldC92OWZzCi1UOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZXJpY3ZoL3Y5ZnMuZ2l0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2VyaWN2aC92OWZzLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKIEY6CWZzLzlwLwpAQCAtMjU3LDYgKzI2NSwxMyBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2FjcGkvZmFuLmMKIAorQUNQSSBQUk9DRVNTT1IgQUdHUkVHQVRPUiBEUklWRVIKK006CVNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2FjcGkvYWNwaV9wYWQuYworCiBBQ1BJIFRIRVJNQUwgRFJJVkVSCiBNOglaaGFuZyBSdWkgPHJ1aS56aGFuZ0BpbnRlbC5jb20+CiBMOglsaW51eC1hY3BpQHZnZXIua2VybmVsLm9yZwpAQCAtNTcwLDYgKzU4NSwxMSBAQAogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFM6CU1haW50YWluZWQKIAorQVJNL0NPTlRFQyBNSUNSTzkgTUFDSElORSBTVVBQT1JUCitNOglIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4KK1M6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisKIEFSTS9DT1JHSSBNQUNISU5FIFNVUFBPUlQKIE06CVJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KIFM6CU1haW50YWluZWQKQEAgLTY0NiwyNCArNjY2LDI0IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AzM1ggQVJNIEFSQ0hJVEVDVFVSRQogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JTlRFTCBJT1AxM1hYIEFSTSBBUkNISVRFQ1RVUkUKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElRODEzNDJFWCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBNOglEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIAogQVJNL0lOVEVMIElYUDIwMDAgQVJNIEFSQ0hJVEVDVFVSRQogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KQEAgLTY4Myw3ICs3MDMsNyBAQAogQVJNL0lOVEVMIElYUDRYWCBBUk0gQVJDSElURUNUVVJFCiBNOglJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KIE06CUtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Ci1MOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLWl4cDR4eC8KIApAQCAtNjkxLDcgKzcxMSw3IEBACiBNOglMZW5uZXJ0IEJ1eXRlbmhlayA8a2VybmVsQHdhbnRzdG9mbHkub3JnPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQotUzoJU3VwcG9ydGVkCitTOglNYWludGFpbmVkCiAKIEFSTS9JUCBGQUJSSUNTIERPVUJMRSBFU1BSRVNTTyBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CkBAIC03NDAsMjAgKzc2MCwzNyBAQAogTToJRGlyayBPcGZlciA8ZGlya0BvcGZlci1vbmxpbmUuZGU+CiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyIFNVUFBPUlQKK0FSTS9QQUxNVFgsUEFMTVQ1LFBBTE1MRCxQQUxNVEUyLFBBTE1UQyBTVVBQT1JUCiBNOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCiBXOglodHRwOi8vaGFja25kZXYuY29tCiBTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jCitGOglhcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRlMi5oCitGOglhcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKIAogQVJNL1BBTE0gVFJFTyA2ODAgU1VQUE9SVAogTToJVG9tYXMgQ2VjaCA8c2xlZXBfd2Fsa2VyQHN1c2UuY3o+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KIFM6CU1haW50YWluZWQKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC90cmVvNjgwLmgKK0Y6CWFyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwogCiBBUk0vUEFMTVo3MiBTVVBQT1JUCiBNOglTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwogVzoJaHR0cDovL2hhY2tuZGV2LmNvbQogUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG16NzIuaAorRjoJYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCiAKIEFSTS9QTEVCIFNVUFBPUlQKIE06CVBldGVyIENodWJiIDxwbGViQGdlbGF0by51bnN3LmVkdS5hdT4KQEAgLTg2OSw3ICs5MDYsNiBAQAogTDoJYWNwaTRhc3VzLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vYWNwaTRhc3VzLnNmLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwogCiBBU1VTIEFTQjEwMCBIQVJEV0FSRSBNT05JVE9SIERSSVZFUgpAQCAtOTYzLDcgKzk5OSw3IEBACiAKIEFUTQogTToJQ2hhcyBXaWxsaWFtcyA8Y2hhc0BjbWYubnJsLm5hdnkubWlsPgotTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eC1hdG0uc291cmNlZm9yZ2UubmV0CiBTOglNYWludGFpbmVkCkBAIC0xMjA3LDYgKzEyNDMsMTIgQEAKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvdGczLioKIAorQlJPQ0FERSBCRkEgRkMgU0NTSSBEUklWRVIKK006CUppbmcgSHVhbmcgPGh1YW5nakBicm9jYWRlLmNvbT4KK0w6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvc2NzaS9iZmEvCisKIEJTRyAoYmxvY2sgbGF5ZXIgZ2VuZXJpYyBzZyB2NCBkcml2ZXIpCiBNOglGVUpJVEEgVG9tb25vcmkgPGZ1aml0YS50b21vbm9yaUBsYWIubnR0LmNvLmpwPgogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTE0NDQsNiArMTQ4Niw3IEBACiAKIENPUkVURU1QIEhBUkRXQVJFIE1PTklUT1JJTkcgRFJJVkVSCiBNOglSdWRvbGYgTWFyZWsgPHIubWFyZWtAYXNzZW1ibGVyLmN6PgorTToJSHVheHUgV2FuIDxodWF4dS53YW5AaW50ZWwuY29tPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9jb3JldGVtcApAQCAtMjAzNCw3ICsyMDc3LDcgQEAKIEY6CWZzLyoKIAogRklOVEVLIEY3NTM3NVMgSEFSRFdBUkUgTU9OSVRPUiBBTkQgRkFOIENPTlRST0xMRVIgRFJJVkVSCi1NOglSaWt1IFZvaXBpbyA8cmlrdS52aXBpb0Bpa2kuZmk+CitNOglSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AaWtpLmZpPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9od21vbi9mNzUzNzVzLmMKQEAgLTIxMTUsNyArMjE1OCw3IEBACiBGOglhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi8KIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS8qcWUuaAogCi1GUkVFU0NBTEUgVVNCIFBFUklQSEVSSUFMIERSSVZFUlMKK0ZSRUVTQ0FMRSBVU0IgUEVSSVBIRVJBTCBEUklWRVJTCiBNOglMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgogTDoJbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKQEAgLTIxNjYsMTggKzIyMDksNiBAQAogRjoJZnMvZnNjYWNoZS8KIEY6CWluY2x1ZGUvbGludXgvZnNjYWNoZSouaAogCi1UUkFDSU5HCi1NOglTdGV2ZW4gUm9zdGVkdCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KLU06CUZyZWRlcmljIFdlaXNiZWNrZXIgPGZ3ZWlzYmVjQGdtYWlsLmNvbT4KLU06CUluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgotVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90aXAvbGludXgtMi42LXRpcC5naXQgdHJhY2luZy9jb3JlCi1TOglNYWludGFpbmVkCi1GOglEb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKLUY6CWFyY2gvKi8qLyovZnRyYWNlLmgKLUY6CWFyY2gvKi9rZXJuZWwvZnRyYWNlLmMKLUY6CWluY2x1ZGUvKi9mdHJhY2UuaCBpbmNsdWRlL3RyYWNlLyBpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCi1GOglrZXJuZWwvdHJhY2UvCi0KIEZVSklUU1UgRlItViAoRlJWKSBQT1JUCiBNOglEYXZpZCBIb3dlbGxzIDxkaG93ZWxsc0ByZWRoYXQuY29tPgogUzoJTWFpbnRhaW5lZApAQCAtMjIzNiw5ICsyMjY3LDggQEAKIEY6CWluY2x1ZGUvYXNtLWdlbmVyaWMKIAogR0VORVJJQyBVSU8gRFJJVkVSIEZPUiBQQ0kgREVWSUNFUwotTToJTWljaGFlbCBTLiBUc2lya2luIDxtc3RAcmVkaGF0LmNvbT4KK006CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKLUw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy91aW8vdWlvX3BjaV9nZW5lcmljLmMKIApAQCAtMjU3OSw2ICsyNjA5LDcgQEAKIFc6CWh0dHA6Ly93d3cubGludXgxMzk0Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGVidWdnaW5nLXZpYS1vaGNpMTM5NC50eHQKIEY6CWRyaXZlcnMvaWVlZTEzOTQvCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgpAQCAtMjY3OCw3ICsyNzA5LDcgQEAKIAogSU5URUwgSU9QLUFETUEgRE1BIERSSVZFUgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+Ci1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvZG1hL2lvcC1hZG1hLmMKIAogSU5URUwgSVhQNFhYIFFNR1IsIE5QRSwgRVRIRVJORVQgYW5kIEhTUyBTVVBQT1JUCkBAIC0yNzkyLDcgKzI4MjMsNyBAQAogCiBJUE1JIFNVQlNZU1RFTQogTToJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBhY20ub3JnPgotTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJb3BlbmlwbWktZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBXOglodHRwOi8vb3BlbmlwbWkuc291cmNlZm9yZ2UubmV0LwogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0yOTY3LDggKzI5OTgsOCBAQAogCiBLRVJORUwgSkFOSVRPUlMKIEw6CWtlcm5lbC1qYW5pdG9yc0B2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotUzoJTWFpbnRhaW5lZAorVzoJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCitTOglPZGQgRml4ZXMKIAogS0VSTkVMIE5GU0QsIFNVTlJQQywgQU5EIExPQ0tEIFNFUlZFUlMKIE06CSJKLiBCcnVjZSBGaWVsZHMiIDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KQEAgLTMwNTMsOSArMzA4NCwxMyBAQAogCiBLTUVNQ0hFQ0sKIE06CVZlZ2FyZCBOb3NzdW0gPHZlZ2FyZG5vQGlmaS51aW8ubm8+Ci1QCVBla2thIEVuYmVyZwotTToJcGVuYmVyZ0Bjcy5oZWxzaW5raS5maQorTToJUGVra2EgRW5iZXJnIDxwZW5iZXJnQGNzLmhlbHNpbmtpLmZpPgogUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9rbWVtY2hlY2sudHh0CitGOglhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rbWVtY2hlY2suaAorRjoJYXJjaC94ODYvbW0va21lbWNoZWNrLworRjoJaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaAorRjoJbW0va21lbWNoZWNrLmMKIAogS01FTUxFQUsKIE06CUNhdGFsaW4gTWFyaW5hcyA8Y2F0YWxpbi5tYXJpbmFzQGFybS5jb20+CkBAIC0zNTg1LDcgKzM2MjAsNyBAQAogTDoJY29yZXRlYW1AbmV0ZmlsdGVyLm9yZwogVzoJaHR0cDovL3d3dy5uZXRmaWx0ZXIub3JnLwogVzoJaHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvCi1UOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva2FiZXIvbmYtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rYWJlci9uZi0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CWluY2x1ZGUvbGludXgvbmV0ZmlsdGVyKgogRjoJaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvCkBAIC0zNzQ5LDcgKzM3ODQsNyBAQAogRjoJZHJpdmVycy92aWRlby9udmlkaWEvCiAKIE9NQVAgU1VQUE9SVAotTToJIlRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IiA8dG9ueUBhdG9taWRlLmNvbT4KK006CVRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5tdXJ1LmNvbS9saW51eC9vbWFwLwogVzoJaHR0cDovL2xpbnV4Lm9tYXAuY29tLwpAQCAtMzg1NCw2ICszODg5LDE1IEBACiBGOglEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW9jb3JlcwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwogCitPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKK006CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KK0w6CWRldmljZXRyZWUtZGlzY3Vzc0BsaXN0cy5vemxhYnMub3JnCitXOglodHRwOi8vZmR0LnNlY3JldGxhYi5jYQorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9vZgorRjoJaW5jbHVkZS9saW51eC9vZiouaAorSzoJb2ZfZ2V0X3Byb3BlcnR5CisKIE9QUk9GSUxFCiBNOglSb2JlcnQgUmljaHRlciA8cm9iZXJ0LnJpY2h0ZXJAYW1kLmNvbT4KIEw6CW9wcm9maWxlLWxpc3RAbGlzdHMuc2YubmV0CkBAIC0zOTU4LDYgKzQwMDIsNyBAQAogUEFSSVNDIEFSQ0hJVEVDVFVSRQogTToJS3lsZSBNY01hcnRpbiA8a3lsZUBtY21hcnRpbi5jYT4KIE06CUhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KK006CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPGplamJAcGFyaXNjLWxpbnV4Lm9yZz4KIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdApAQCAtNDA0MSw2ICs0MDg2LDEzIEBACiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIE06CUluZ28gTW9sbmFyIDxtaW5nb0BlbHRlLmh1PgogUzoJU3VwcG9ydGVkCitGOglrZXJuZWwvcGVyZl9ldmVudC5jCitGOglpbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qLyova2VybmVsL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAorRjoJYXJjaC8qL2xpYi9wZXJmX2V2ZW50LmMKK0Y6CWFyY2gvKi9rZXJuZWwvcGVyZl9jYWxsY2hhaW4uYworRjoJdG9vbHMvcGVyZi8KIAogUEVSU09OQUxJVFkgSEFORExJTkcKIE06CUNocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4KQEAgLTQ0OTIsMTIgKzQ1NDQsMTEgQEAKIEY6CWluY2x1ZGUvbGludXgvc2NoZWQuaAogCiBTQ09SRSBBUkNISVRFQ1RVUkUKLVA6CUNoZW4gTGlxaW4KLU06CWxpcWluLmNoZW5Ac3VucGx1c2N0LmNvbQotUDoJTGVubm94IFd1Ci1NOglsZW5ub3gud3VAZ21haWwuY29tCitNOglDaGVuIExpcWluIDxsaXFpbi5jaGVuQHN1bnBsdXNjdC5jb20+CitNOglMZW5ub3ggV3UgPGxlbm5veC53dUBnbWFpbC5jb20+CiBXOglodHRwOi8vd3d3LnN1bnBsdXNjdC5jb20KIFM6CVN1cHBvcnRlZAorRjoJYXJjaC9zY29yZS8KIAogU0NTSSBDRFJPTSBEUklWRVIKIE06CUplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KQEAgLTQ1NzAsMjcgKzQ2MjEsMjcgQEAKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RyaWNvaF9jcy5jCiAKIFNFQ1VSRSBESUdJVEFMIEhPU1QgQ09OVFJPTExFUiBJTlRFUkZBQ0UgKFNESENJKSBEUklWRVIKLVM6ICAgICBPcnBoYW4KLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS4qCitTOglPcnBoYW4KK0w6CWxpbnV4LW1tY0B2Z2VyLmtlcm5lbC5vcmcKK0Y6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuKgogCiBTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKIE06CUFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPgogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKLUw6ICAgICBsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1tbWNAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCi1GOiAgICAgZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi4qCitGOglkcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLioKIAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIFNBTVNVTkcgRFJJVkVSCiBNOglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci1MOiAgICAgbGludXgtbW1jQHZnZXIua2VybmVsLm9yZworTDoJbGludXgtbW1jQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwogCiBTRUNVUklUWSBTVUJTWVNURU0KIE06CUphbWVzIE1vcnJpcyA8am1vcnJpc0BuYW1laS5vcmc+CiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQotVDoJZ2l0IGdpdDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qbW9ycmlzL3NlY3VyaXR5LXRlc3RpbmctMi42LmdpdAogVzoJaHR0cDovL3NlY3VyaXR5Lndpa2kua2VybmVsLm9yZy8KIFM6CVN1cHBvcnRlZAogRjoJc2VjdXJpdHkvCkBAIC00NjI1LDYgKzQ2NzYsMTMgQEAKIEY6CWluY2x1ZGUvbGludXgvYXRhLmgKIEY6CWluY2x1ZGUvbGludXgvbGliYXRhLmgKIAorU0VSVkVSIEVOR0lORVMgMTBHYnBzIGlTQ1NJIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKK006CUpheWFtb2hhbiBLYWxsaWNrYWwgPGpheWFtb2hhbmtAc2VydmVyZW5naW5lcy5jb20+CitMOglsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCisKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgogTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgogTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KQEAgLTQ2NzgsOCArNDczNiw3IEBACiBGOglkcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwKgogCiBTSU1QTEUgRklSTVdBUkUgSU5URVJGQUNFIChTRkkpCi1QOglMZW4gQnJvd24KLU06CWxlbmJAa2VybmVsLm9yZworTToJTGVuIEJyb3duIDxsZW5iQGtlcm5lbC5vcmc+CiBMOglzZmktZGV2ZWxAc2ltcGxlZmlybXdhcmUub3JnCiBXOglodHRwOi8vc2ltcGxlZmlybXdhcmUub3JnLwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LXNmaS0yLjYuZ2l0CkBAIC01MTI3LDYgKzUxODQsMjAgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvY2hhci90cG0vCiAKK1RSQUNJTkcKK006CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgorTToJRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RpcC9saW51eC0yLjYtdGlwLmdpdCB0cmFjaW5nL2NvcmUKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAorRjoJYXJjaC8qLyovKi9mdHJhY2UuaAorRjoJYXJjaC8qL2tlcm5lbC9mdHJhY2UuYworRjoJaW5jbHVkZS8qL2Z0cmFjZS5oCitGOglpbmNsdWRlL2xpbnV4L3RyYWNlKi5oCitGOglpbmNsdWRlL3RyYWNlLworRjoJa2VybmVsL3RyYWNlLworCiBUUklWSUFMIFBBVENIRVMKIE06CUppcmkgS29zaW5hIDx0cml2aWFsQGtlcm5lbC5vcmc+CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ppa29zL3RyaXZpYWwuZ2l0CkBAIC01NjE2LDExICs1Njg3LDExIEBACiBGOglpbmNsdWRlL2xpbnV4L3ZseW5xLmgKIAogVk1XQVJFIFZNWE5FVDMgRVRIRVJORVQgRFJJVkVSCi1NOiAgICAgU2hyZXlhcyBCaGF0ZXdhcmEgPHNiaGF0ZXdhcmFAdm13YXJlLmNvbT4KLU06ICAgICBWTXdhcmUsIEluYy4gPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KLUw6ICAgICBuZXRkZXZAdmdlci5rZXJuZWwub3JnCi1TOiAgICAgTWFpbnRhaW5lZAotRjogICAgIGRyaXZlcnMvbmV0L3ZteG5ldDMvCitNOglTaHJleWFzIEJoYXRld2FyYSA8c2JoYXRld2FyYUB2bXdhcmUuY29tPgorTToJIlZNd2FyZSwgSW5jLiIgPHB2LWRyaXZlcnNAdm13YXJlLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvbmV0L3ZteG5ldDMvCiAKIFZPTFRBR0UgQU5EIENVUlJFTlQgUkVHVUxBVE9SIEZSQU1FV09SSwogTToJTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KQEAgLTU2OTMsOCArNTc2NCw3IEBACiBGOglkcml2ZXJzL3Njc2kvd2Q3MDAwLmMKIAogV0lOQk9ORCBDSVIgRFJJVkVSCi1QOglEYXZpZCBI5HJkZW1hbgotTToJZGF2aWRAaGFyZGVtYW4ubnUKK006CURhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAaGFyZGVtYW4ubnU+CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2lucHV0L21pc2Mvd2luYm9uZC1jaXIuYwogCkBAIC01NzUxLDkgKzU4MjEsNyBAQAogRjoJaW5jbHVkZS9saW51eC93bTk3eHguaAogCiBXT0xGU09OIE1JQ1JPRUxFQ1RST05JQ1MgUE1JQyBEUklWRVJTCi1QOglNYXJrIEJyb3duCi1NOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworTToJTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CiBUOglnaXQgZ2l0Oi8vb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tL2xpbnV4LTIuNi1hdWRpb3BsdXMKIFc6CWh0dHA6Ly9vcGVuc291cmNlLndvbGZzb25taWNyby5jb20vbm9kZS84CiBTOglTdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZjkwOGFjYy4uYWEzZTEzYSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKLVNVQkxFVkVMID0gMzEKLUVYVFJBVkVSU0lPTiA9CitTVUJMRVZFTCA9IDMyCitFWFRSQVZFUlNJT04gPSAtcmM3CiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTE3OSw0NiArMTc5LDkgQEAKICMgQWx0ZXJuYXRpdmVseSBDUk9TU19DT01QSUxFIGNhbiBiZSBzZXQgaW4gdGhlIGVudmlyb25tZW50LgogIyBEZWZhdWx0IHZhbHVlIGZvciBDUk9TU19DT01QSUxFIGlzIG5vdCB0byBwcmVmaXggZXhlY3V0YWJsZXMKICMgTm90ZTogU29tZSBhcmNoaXRlY3R1cmVzIGFzc2lnbiBDUk9TU19DT01QSUxFIGluIHRoZWlyIGFyY2gvKi9NYWtlZmlsZQotIwotIyBUbyBmb3JjZSBBUkNIIGFuZCBDUk9TU19DT01QSUxFIHNldHRpbmdzIGluY2x1ZGUga2VybmVsLiogZmlsZXMKLSMgaW4gdGhlIGtlcm5lbCB0cmVlIC0gZG8gbm90IHBhdGNoIHRoaXMgZmlsZS4KIGV4cG9ydCBLQlVJTERfQlVJTERIT1NUIDo9ICQoU1VCQVJDSCkKLQotIyBLYnVpbGQgc2F2ZSB0aGUgQVJDSCBhbmQgQ1JPU1NfQ09NUElMRSBzZXR0aW5nIGluIGtlcm5lbC4qIGZpbGVzLgotIyBSZXN0b3JlIHRoZXNlIHNldHRpbmdzIGFuZCBjaGVjayB0aGF0IHVzZXIgZGlkIG5vdCBzcGVjaWZ5Ci0jIGNvbmZsaWN0aW5nIHZhbHVlcy4KLQotc2F2ZWRfYXJjaCAgOj0gJChzaGVsbCBjYXQgaW5jbHVkZS9nZW5lcmF0ZWQva2VybmVsLmFyY2ggIDI+IC9kZXYvbnVsbCkKLXNhdmVkX2Nyb3NzIDo9ICQoc2hlbGwgY2F0IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcyAyPiAvZGV2L251bGwpCi0KLWlmbmVxICgkKENST1NTX0NPTVBJTEUpLCkKLSAgICAgICAgaWZuZXEgKCQoc2F2ZWRfY3Jvc3MpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChDUk9TU19DT01QSUxFKSwkKHNhdmVkX2Nyb3NzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICQoZXJyb3IgQ1JPU1NfQ09NUElMRSBjaGFuZ2VkIGZyb20gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJChzYXZlZF9jcm9zcykiIHRvIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvICIkKENST1NTX0NPTVBJTEUpIi4gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlICJtYWtlIG1ycHJvcGVyIiB0byBmaXggaXQgdXApCi0gICAgICAgICAgICAgICAgZW5kaWYKLSAgICAgICAgZW5kaWYKLWVsc2UKLSAgICBDUk9TU19DT01QSUxFIDo9ICQoc2F2ZWRfY3Jvc3MpCi1lbmRpZgotCi1pZm5lcSAoJChBUkNIKSwpCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBpZm5lcSAoJChzYXZlZF9hcmNoKSwkKEFSQ0gpKQotICAgICAgICAgICAgICAgICAgICAgICAgJChlcnJvciBBUkNIIGNoYW5nZWQgZnJvbSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkKHNhdmVkX2FyY2gpIiB0byAiJChBUkNIKSIuIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSAibWFrZSBtcnByb3BlciIgdG8gZml4IGl0IHVwKQotICAgICAgICAgICAgICAgIGVuZGlmCi0gICAgICAgIGVuZGlmCi1lbHNlCi0gICAgICAgIGlmbmVxICgkKHNhdmVkX2FyY2gpLCkKLSAgICAgICAgICAgICAgICBBUkNIIDo9ICQoc2F2ZWRfYXJjaCkKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEFSQ0ggOj0gJChTVUJBUkNIKQotICAgICAgICBlbmRpZgotZW5kaWYKK0FSQ0gJCT89ICQoU1VCQVJDSCkKK0NST1NTX0NPTVBJTEUJPz0KIAogIyBBcmNoaXRlY3R1cmUgYXMgcHJlc2VudCBpbiBjb21waWxlLmgKIFVUU19NQUNISU5FIAk6PSAkKEFSQ0gpCkBAIC0yNTgsNyArMjIxLDcgQEAKIAogSE9TVENDICAgICAgID0gZ2NjCiBIT1NUQ1hYICAgICAgPSBnKysKLUhPU1RDRkxBR1MgICA9IC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyCitIT1NUQ0ZMQUdTICAgPSAtV2FsbCAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgogSE9TVENYWEZMQUdTID0gLU8yCiAKICMgRGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgYnVpbHQtaW4sIG1vZHVsYXIsIG9yIGJvdGguCkBAIC00ODMsMTEgKzQ0Niw2IEBACiBpbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL01ha2VmaWxlCiBleHBvcnQgS0JVSUxEX0RFRkNPTkZJRyBLQlVJTERfS0NPTkZJRwogCi0jIHNhdmUgQVJDSCAmIENST1NTX0NPTVBJTEUgc2V0dGluZ3MKLSQoc2hlbGwgbWtkaXIgLXAgaW5jbHVkZS9nZW5lcmF0ZWQgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlY2hvICQoQVJDSCkgICAgICAgICAgPiBpbmNsdWRlL2dlbmVyYXRlZC9rZXJuZWwuYXJjaCAmJiBcCi0gICAgICAgIGVjaG8gJChDUk9TU19DT01QSUxFKSA+IGluY2x1ZGUvZ2VuZXJhdGVkL2tlcm5lbC5jcm9zcykKLQogY29uZmlnOiBzY3JpcHRzX2Jhc2ljIG91dHB1dG1ha2VmaWxlIEZPUkNFCiAJJChRKW1rZGlyIC1wIGluY2x1ZGUvbGludXggaW5jbHVkZS9jb25maWcKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1zY3JpcHRzL2tjb25maWcgJEAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvYm9vdC90b29scy9vYmpzdHJpcC5jIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKaW5kZXggOWQwNzI3ZC4uMzY3ZDUzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKKysrIGIvYXJjaC9hbHBoYS9ib290L3Rvb2xzL29ianN0cmlwLmMKQEAgLTM1LDcgKzM1LDcgQEAKIGNvbnN0IGNoYXIgKiBwcm9nX25hbWU7CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIHVzYWdlICh2b2lkKQogewogICAgIGZwcmludGYoc3RkZXJyLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IGU0MjgyM2UuLjI1ZGEwMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZmNudGwuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2ZjbnRsLmgKQEAgLTI2LDggKzI2LDYgQEAKICNkZWZpbmUgRl9HRVRPV04JNgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVE9XTl9FWAkxMgotI2RlZmluZSBGX0dFVE9XTl9FWAkxMwogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkxCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTA3NmE4OC4uODE1NjgwYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNTAsMTIgKzUwLDEyIEBACiByZWdpc3RlciBzdHJ1Y3QgdGhyZWFkX2luZm8gKl9fY3VycmVudF90aHJlYWRfaW5mbyBfX2FzbV9fKCIkOCIpOwogI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkgIF9fY3VycmVudF90aHJlYWRfaW5mbwogCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKIC8qIFRocmVhZCBpbmZvcm1hdGlvbiBhbGxvY2F0aW9uLiAgKi8KICNkZWZpbmUgVEhSRUFEX1NJWkVfT1JERVIgMQogI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCiAKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHg0MDAwMDAwMAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCAxOWI4NjMyLi42ZjgwY2E0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMTMsNiArMTMsNSBAQAogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwogRVhQT1JUX1NZTUJPTChpbml0X3Rhc2spOwogCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZGF0YS5pbml0X3RocmVhZCIpKSkKLQk9IHsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07Cit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gX19pbml0X3Rhc2tfZGF0YSA9CisJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FscGhhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDZkYzAzYzMuLjAwM2VmNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIE9VVFBVVF9GT1JNQVQoImVsZjY0LWFscGhhIikKQEAgLTMxLDg4ICszMiwyMSBAQAogCX0gOmtlcm5lbAogCiAJUk9EQVRBCi0KLQkvKiBFeGNlcHRpb24gdGFibGUgKi8KLQkuID0gQUxJR04oMTYpOwotCV9fZXhfdGFibGUgOiB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMTYpCiAKIAkvKiBXaWxsIGJlIGZyZWVkIGFmdGVyIGluaXQgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLQlfX2luaXRfYmVnaW4gPSAuOwotCS5pbml0LnRleHQgOiB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOiB7Ci0JCUlOSVRfREFUQQotCX0KLQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCi0JLiA9IEFMSUdOKDgpOwotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgotCi0JLiA9IEFMSUdOKDgpOwotCS5jb25faW5pdGNhbGwuaW5pdCA6IHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0KLQkuID0gQUxJR04oOCk7Ci0JU0VDVVJJVFlfSU5JVAotCisJX19pbml0X2JlZ2luID0gQUxJR04oUEFHRV9TSVpFKTsKKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKFBBR0VfU0laRSkKLQotCS4gPSBBTElHTigyICogUEFHRV9TSVpFKTsKKwkvKiBBbGlnbiB0byBUSFJFQURfU0laRSByYXRoZXIgdGhhbiBQQUdFX1NJWkUgaGVyZSBzbyBhbnkgcGFkZGluZyBwYWdlCisJICAgbmVlZGVkIGZvciB0aGUgVEhSRUFEX1NJWkUgYWxpZ25lZCBpbml0X3Rhc2sgZ2V0cyBmcmVlZCBhZnRlciBpbml0ICovCisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKIAlfX2luaXRfZW5kID0gLjsKIAkvKiBGcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0JLyogTm90ZSAyIHBhZ2UgYWxpZ25tZW50IGFib3ZlLiAgKi8KLQkuZGF0YS5pbml0X3RocmVhZCA6IHsKLQkJKiguZGF0YS5pbml0X3RocmVhZCkKLQl9Ci0KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuZGF0YS5wYWdlX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEucGFnZV9hbGlnbmVkKQotCX0KLQotCS4gPSBBTElHTig2NCk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQotCiAJX2RhdGEgPSAuOwotCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KKwlSV19EQVRBX1NFQ1RJT04oNjQsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAKIAkuZ290IDogewogCQkqKC5nb3QpCkBAIC0xMjIsMTYgKzU2LDcgQEAKIAl9CiAJX2VkYXRhID0gLjsJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0JX19ic3Nfc3RhcnQgPSAuOwotCS5zYnNzIDogewotCQkqKC5zYnNzKQotCQkqKC5zY29tbW9uKQotCX0KLQkuYnNzIDogewotCQkqKC5ic3MpCi0JCSooQ09NTU9OKQotCX0KLQlfX2Jzc19zdG9wID0gLjsKKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCV9lbmQgPSAuOwogCiAJLm1kZWJ1ZyAwIDogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggZDc3OGE2OS4uMWM0MTE5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC00Niw2ICs0NiwxMCBAQAogCWRlcGVuZHMgb24gR0VORVJJQ19DTE9DS0VWRU5UUwogCWRlZmF1bHQgeSBpZiBTTVAgJiYgIUxPQ0FMX1RJTUVSUwogCitjb25maWcgSEFWRV9UQ00KKwlib29sCisJc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SCisKIGNvbmZpZyBOT19JT1BPUlQKIAlib29sCiAKQEAgLTY0OSw2ICs2NTMsNyBAQAogCWJvb2wgIlNULUVyaWNzc29uIFUzMDAgU2VyaWVzIgogCWRlcGVuZHMgb24gTU1VCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEhBVkVfVENNCiAJc2VsZWN0IEFSTV9BTUJBCiAJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgR0VORVJJQ19USU1FCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMjI5M2YwYy4uYmQzNmM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtODY1LDYgKzg2NSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19zZXRfZGlyKTsKIAogaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg4Miw2ICs4ODMsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwogCiBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKQEAgLTg5OSw2ICs5MDEsNyBAQAogCXJldCAmPSBiaXRzOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KTsKIAogdm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KQogewpAQCAtOTIwLDYgKzkyMyw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGxvY29tb19tNjIzMzJfc2VuZGJpdCh2b2lkICptYXBiYXNlLCBpbnQgYml0KQogewpAQCAtMTA4NCwxMyArMTA4OCwxMiBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CiAKIC8qCiAgKglGcm9udGxpZ2h0IGNvbnRyb2wKICAqLwogCi1zdGF0aWMgc3RydWN0IGxvY29tbyAqbG9jb21vX2NoaXBfZHJpdmVyKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KTsKLQogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExODIsMTEgKzExODUsMTMgQEAKIAlkcml2ZXItPmRydi5idXMgPSAmbG9jb21vX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgbG9jb21vX2luaXQodm9pZCkKIHsKQEAgLTEyMDgsMTEgKzEyMTMsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMb0NvTW8gY29yZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkpvaG4gTGVueiA8bGVuekBjcy53aXNjLmVkdT4iKTsKLQotRVhQT1JUX1NZTUJPTChsb2NvbW9fZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX2dwaW9fc2V0X2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3JlYWRfbGV2ZWwpOwotRVhQT1JUX1NZTUJPTChsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGxvY29tb19ncGlvX3dyaXRlKTsKLUVYUE9SVF9TWU1CT0wobG9jb21vX202MjMzMl9zZW5kZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggZWYxMjc5NC4uOGJhNzA0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMTAzMiw2ICsxMDMyLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3BsbF9jbG9jayk7CiAKIC8qKgogICoJc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlIC0gc2VsZWN0IEkyUyBvciBBQyBsaW5rIG1vZGUKQEAgLTEwNTksNiArMTA2MCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NlbGVjdF9hdWRpb19tb2RlKTsKIAogLyoqCiAgKglzYTExMTFfc2V0X2F1ZGlvX3JhdGUgLSBzZXQgdGhlIGF1ZGlvIHNhbXBsZSByYXRlCkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7CiAKIC8qKgogICoJc2ExMTExX2dldF9hdWRpb19yYXRlIC0gZ2V0IHRoZSBhdWRpbyBzYW1wbGUgcmF0ZQpAQCAtMTEwMCw2ICsxMTAzLDcgQEAKIAogCXJldHVybiBfX3NhMTExMV9wbGxfY2xvY2soc2FjaGlwKSAvICgyNTYgKiBkaXYpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZ2V0X2F1ZGlvX3JhdGUpOwogCiB2b2lkIHNhMTExMV9zZXRfaW9fZGlyKHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldiwKIAkJICAgICAgIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyLApAQCAtMTEyOCw2ICsxMTMyLDcgQEAKIAlNT0RJRllfQklUUyhncGlvICsgU0ExMTExX0dQSU9fUENTRFIsIChiaXRzID4+IDE2KSAmIDI1NSwgc2xlZXBfZGlyID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pb19kaXIpOwogCiB2b2lkIHNhMTExMV9zZXRfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpCiB7CkBAIC0xMTQyLDYgKzExNDcsNyBAQAogCU1PRElGWV9CSVRTKGdwaW8gKyBTQTExMTFfR1BJT19QQ0RXUiwgKGJpdHMgPj4gMTYpICYgMjU1LCB2ID4+IDE2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYWNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7CiAKIHZvaWQgc2ExMTExX3NldF9zbGVlcF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdikKIHsKQEAgLTExNTYsNiArMTE2Miw3IEBACiAJTU9ESUZZX0JJVFMoZ3BpbyArIFNBMTExMV9HUElPX1BDU1NSLCAoYml0cyA+PiAxNikgJiAyNTUsIHYgPj4gMTYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfc2V0X3NsZWVwX2lvKTsKIAogLyoKICAqIEluZGl2aWR1YWwgZGV2aWNlIG9wZXJhdGlvbnMuCkBAIC0xMTc2LDYgKzExODMsNyBAQAogCXNhMTExMV93cml0ZWwodmFsIHwgc2FkZXYtPnNrcGNyX21hc2ssIHNhY2hpcC0+YmFzZSArIFNBMTExMV9TS1BDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHNhMTExMV9lbmFibGVfZGV2aWNlKTsKIAogLyoqCiAgKglzYTExMTFfZGlzYWJsZV9kZXZpY2UgLSBkaXNhYmxlIGFuIG9uLWNoaXAgU0ExMTExIGZ1bmN0aW9uIGJsb2NrCkBAIC0xMTkyLDYgKzEyMDAsNyBAQAogCXNhMTExMV93cml0ZWwodmFsICYgfnNhZGV2LT5za3Bjcl9tYXNrLCBzYWNoaXAtPmJhc2UgKyBTQTExMTFfU0tQQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChzYTExMTFfZGlzYWJsZV9kZXZpY2UpOwogCiAvKgogICoJU0ExMTExICJSZWdpc3RlciBBY2Nlc3MgQnVzLiIKQEAgLTEyNTksMTcgKzEyNjgsMjAgQEAKIAkuc3VzcGVuZAk9IHNhMTExMV9idXNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTExMV9idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0woc2ExMTExX2J1c190eXBlKTsKIAogaW50IHNhMTExMV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHNhMTExMV9kcml2ZXIgKmRyaXZlcikKIHsKIAlkcml2ZXItPmRydi5idXMgPSAmc2ExMTExX2J1c190eXBlOwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl9yZWdpc3Rlcik7CiAKIHZvaWQgc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBzYTExMTFfZHJpdmVyICpkcml2ZXIpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlci0+ZHJ2KTsKIH0KK0VYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTExX2luaXQodm9pZCkKIHsKQEAgLTEyOTAsMTYgKzEzMDIsMyBAQAogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIENvcnBvcmF0aW9uIFNBMTExMSBjb3JlIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZWxlY3RfYXVkaW9fbW9kZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9nZXRfYXVkaW9fcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfaW9fZGlyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX3NldF9pbyk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9zZXRfc2xlZXBfaW8pOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZW5hYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9kaXNhYmxlX2RldmljZSk7Ci1FWFBPUlRfU1lNQk9MKHNhMTExMV9wbGxfY2xvY2spOwotRVhQT1JUX1NZTUJPTChzYTExMTFfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTChzYTExMTFfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woc2ExMTExX2RyaXZlcl91bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYyBiL2FyY2gvYXJtL2NvbW1vbi92aWMuYwppbmRleCA5MjBjZWQwLi5mMjMyOTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vdmljLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCmluZGV4IDc2NDczMjUuLmU4ZjczODBiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2Ftc19kZWx0YV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbXNfZGVsdGFfZGVmY29uZmlnCkBAIC01NSwxMCArNTUsMTAgQEAKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQpAQCAtMjI0LDcgKzIyNCw3IEBACiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwogIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0g9eQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAotIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMjk5LDcgKzI5OSw5IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogCiAjCiAjIE5ldHdvcmtpbmcKQEAgLTY3MCw3ICs2NzIsNyBAQAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTc4NCw2ICs3ODYsNyBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQogCiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKQEAgLTgyMCw2ICs4MjMsNyBAQAogQ09ORklHX0xFRFNfVFJJR0dFUlM9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwpAQCAtODk2LDcgKzkwMCwxMyBAQAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19BTVNfREVMVEE9eQogCiAjCiAjIEhJRCBEZXZpY2VzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCmluZGV4IDE1MDI5NTcuLmY2YWVkNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaDM2MDBfZGVmY29uZmlnCkBAIC05MCw3ICs5MCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0ExMTAwX0gzNjAwPXkKLUNPTkZJR19TQTExMDBfSDNYWFg9eQogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKaW5kZXggZWVjNDg4Mi4uZWQyZDU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwpAQCAtMSwyOSArMSwyNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjNQotIyBXZWQgRGVjIDEyIDE2OjExOjI3IDIwMDcKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKKyMgVHVlIEF1ZyAxOCAxMzo0MTo0MSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsMjEgKzM3LDM5IEBACiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKKyMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjcsMjkgKzgyLDQ4IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKICMgSU8gU2NoZWR1bGVycwpAQCAtMTAzLDYgKzEzNyw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCkBAIC0xMTIsMTUgKzE0NywxNSBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9JT1AzM1g9eQpAQCAtMTI4LDE5ICsxNjMsMjYgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19JT1AzWFhfQVRVPXkKIAogIwogIyBJT1AzM3ggSW1wbGVtZW50YXRpb24gT3B0aW9ucwpAQCAtMTUxLDE0ICsxOTMsNiBAQAogIwogQ09ORklHX0FSQ0hfSVE4MDMzMT15CiBDT05GSUdfTUFDSF9JUTgwMzMyPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCiBDT05GSUdfUExBVF9JT1A9eQogCiAjCkBAIC0xNjgsNiArMjAyLDcgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQogQ09ORklHX0NQVV9DUDE1PXkKQEAgLTE3OCw3ICsyMTMsNiBAQAogIwogIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JV01NWFQgaXMgbm90IHNldAogQ09ORklHX1hTQ0FMRV9QTVU9eQogCkBAIC0xOTAsNDEgKzIyNCw1NSBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogIyBDT05GSUdfQUVBQkkgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAogIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCiBDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKLUNPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIGNhY2hlcG9saWN5PXdyaXRlYWxsb2MiCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1ib290cCBjYWNoZXBvbGljeT13cml0ZWFsbG9jIGlvcDN4eF9pbml0X2F0dT15IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIwogIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KICMKIApAQCAtMjM5LDYgKzI4Nyw4IEBACiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiBDT05GSUdfQklORk1UX0FPVVQ9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfQVJUSFVSIGlzIG5vdCBzZXQKQEAgLTI0NywxMSArMjk3LDcgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIAogIwpAQCAtMjY0LDYgKzMxMCw3IEBACiAjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTMxMCw2ICszNTcsNyBAQAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKQEAgLTMxNyw2ICszNjUsNyBAQAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAogIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CkBAIC0zMjYsMjQgKzM3NSwzMSBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM1Nyw3ICs0MTMsOSBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLSMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKQEAgLTM2NiwxMiArNDI0LDE0IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTQyMSw5ICs0ODEsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CkBAIC00NDcsNiArNTA1LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ2MywxNCArNTI2LDI5IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi1DT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ5MiwxMCArNTcwLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxMiw2ICs1ODYsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUyMCwxMyArNTk2LDE4IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKQEAgLTU0MywxNSArNjI0LDE4IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKIENPTkZJR19NRF9SQUlENDU2PXkKLSMgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtNTY4LDI3ICs2NTIsMzQgQEAKICMKICMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAogIworCisjCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX0VUSEVSTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CiBDT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAorIyBDT05GSUdfSUdCVkYgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CkBAIC01OTYsMjMgKzY4NywzNCBAQAogIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQogIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAogIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02MjAsMTMgKzcyMiwxNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKQEAgLTY3MCwxMCArNzc1LDEzIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwpAQCAtNjkyLDExICs4MDAsMTIgQEAKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03MDUsNjcgKzgxNCw5NyBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotQ09ORklHX0kyQ19JT1AzWFg9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKIAogIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldApAQCAtNzczLDEzICs5MTIsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC03OTQsMTYgKzkzNywyMyBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODEyLDI4ICs5NjIsMzggQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC04NTQsMTUgKzEwMTQsMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQogIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTg3MCwxNCArMTAzMSwyMSBAQAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCiAjCiAKICMKLSMgVVNCIEdhZGdldCBTdXBwb3J0CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CkBAIC04OTMsNiArMTA2MSwxMiBAQAogIyBETUEgQ2xpZW50cwogIwogQ09ORklHX05FVF9ETUE9eQorIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTAxLDEwICsxMDc1LDExIEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkxMywxNyArMTA4OCwyMyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtOTQxLDE1ICsxMTIyLDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05NTksMjkgKzExMzgsMzEgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDEzLDkgKzExOTQsNiBAQAogIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19OTFMgaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDIzLDYgKzEyMDEsNyBAQAogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC0xMDMwLDEwICsxMjA5LDE3IEBACiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTA0NywxNiArMTIzMyw0MSBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKQEAgLTEwNjUsMjQgKzEyNzYsMTE3IEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogQ09ORklHX1hPUl9CTE9DS1M9eQogQ09ORklHX0FTWU5DX0NPUkU9eQogQ09ORklHX0FTWU5DX01FTUNQWT15CiBDT05GSUdfQVNZTkNfWE9SPXkKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCBhZjc0Y2MyLi5iY2ZhZGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDExOjU4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDozMToxOCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTkKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDcgKzcxLDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtODYsNiArODMsMTAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKQEAgLTk1LDEzICs5NiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTQsNyArMTE5LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSwxOSArMTQwLDIyIEBACiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldApAQCAtMTU2LDI1ICsxNjQsMjcgQEAKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfS0lSS1dPT0Q9eQotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTg1LDYgKzE5NSw3IEBACiBDT05GSUdfTUFDSF9NVjg4RjYyODFHVFdfR0U9eQogQ09ORklHX01BQ0hfU0hFRVZBUExVRz15CiBDT05GSUdfTUFDSF9UUzIxOT15CitDT05GSUdfTUFDSF9PUEVOUkRfQkFTRT15CiBDT05GSUdfUExBVF9PUklPTj15CiAKICMKQEAgLTE5NSw3ICsyMDYsNyBAQAogIyBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTEsNiArMjIyLDcgQEAKIENPTkZJR19PVVRFUl9DQUNIRT15CiBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDI9eQogIyBDT05GSUdfQ0FDSEVfRkVST0NFT05fTDJfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMzUsMTEgKzI0NywxMiBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKICMgQ09ORklHX09BQklfQ09NUEFUIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKICMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldApAQCAtMjU0LDEwICsyNjcsMTIgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM0NSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszODMsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxNyArNDAwLDE4IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCisjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CkBAIC00MTQsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDI1LDkgKzQ0NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTEzLDcgQEAKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX00yNVBYWF9VU0VfRkFTVF9SRUFEPXkKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU0Myw2ICs1NjMsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CkBAIC01NjcsMTAgKzU4OCw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTg3LDYgKzYwNCw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MTQsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjExLDcgKzYzMSw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MjMsMTEgKzY0MiwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NDksNiArNjcxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NzYsNiArNjk5LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjkzLDEzICs3MTcsMTYgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNzY4LDYgKzc5NSw5IEBACiAjIENPTkZJR19TTVNDOTQyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc4OSw2ICs4MTksNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogQ09ORklHX01WNjQzWFhfRVRIPXkKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CkBAIC03OTcsMTAgKzgyOCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dMQU5fODAyMTE9eQogQ09ORklHX0xJQkVSVEFTPXkKQEAgLTgyMCw5ICs4NDgsNyBAQAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg1SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEg5SyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRkkgaXMgbm90IHNldApAQCAtODMyLDYgKzg1OCw4IEBACiAjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTg1NSw2ICs4ODMsNyBAQAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC04NzgsMTMgKzkwNywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTQzLDYgKzk3OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05OTgsMTAgKzEwMzQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDIzLDExICsxMDU1LDQ3IEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNDEsMzMgKzExMDksMjggQEAKICMKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE1MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTEwNiwxMCArMTE2OCwxMiBAQAogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQogIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExMjMsOSArMTE4NywxNCBAQAogQ09ORklHX0hJRF9TQU1TVU5HPXkKIENPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQogIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQogIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQEAgLTExNTAsMTggKzEyMTksMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTI1MiwxMSArMTMyNCwxNCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX01WU0RJTz15CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19DQjcxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVklBX1NETU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI2Niw3ICsxMzQxLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CkBAIC0xMjc4LDExICsxMzUzLDE0IEBACiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogQ09ORklHX1JUQ19MSUI9eQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0hDVE9TWVM9eQpAQCAtMTMxNCw2ICsxMzkyLDcgQEAKIENPTkZJR19SVENfRFJWX1MzNTM5MEE9eQogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTMyNSw2ICsxNDA0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEzNjAsOCArMTQ0MCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzksMTAgKzE0NjIsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDU1LDcgKzE1NDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTMwLDYgKzE2MTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTQ3LDYgKzE2MzMsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CkBAIC0xNTY3LDEyICsxNjU0LDE0IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xNTgxLDI1ICsxNjcwLDEyIEBACiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CkBAIC0xNjIzLDcgKzE2OTksNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE2NjUsMTEgKzE3NDAsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3MTQsNiArMTc5MSw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0hXPXkKK0NPTkZJR19DUllQVE9fREVWX01WX0NFU0E9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogQ09ORklHX0JJTkFSWV9QUklOVEY9eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xpdHRsZXRvbl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYjQ5NjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9saXR0bGV0b25fZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNzgzICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNC1yYzUKLSMgRnJpIERlYyAyMSAxMTowNjoxOSAyMDA3Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci1DT05GSUdfR0VORVJJQ19HUElPPXkKLUNPTkZJR19HRU5FUklDX1RJTUU9eQotQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15Ci1DT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKLUNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKLUNPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAotQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKLUNPTkZJR19BUkNIX01URF9YSVA9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0xPQ0tfS0VSTkVMPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQotIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfSE9UUExVRz15Ci1DT05GSUdfUFJJTlRLPXkKLUNPTkZJR19CVUc9eQotQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX1NJR05BTEZEPXkKLUNPTkZJR19FVkVOVEZEPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotQ09ORklHX1NMQUI9eQotIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLUNPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotIyBDT05GSUdfQ1BVX1BYQTMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UUklaRVBTNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9MSVRUTEVUT049eQotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEzeHg9eQotQ09ORklHX1BYQV9TU1A9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQzM9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci1DT05GSUdfSU9fMzY9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLUNPTkZJR19QUkVFTVBUPXkKLUNPTkZJR19IWj0xMDAKLUNPTkZJR19BRUFCST15Ci1DT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKLUNPTkZJR19GTEFUTUVNX01BTlVBTD15Ci0jIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAotQ09ORklHX0ZMQVRNRU09eQotQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjEuMTAxOjE5Mi4xNjguMS4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMiwzODQwMCBtZW09NjRNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCi0jCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0Ci0KLSMKLSMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCi0jCi0KLSMKLSMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCi0jCi1DT05GSUdfRlBFX05XRlBFPXkKLSMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfRklCX0hBU0g9eQotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcwotIwotIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREUgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci1DT05GSUdfU01DOTFYPXkKLSMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCi0jCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKLSMgQ09ORklHX1NTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EQUIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotQ09ORklHX0ZCX0RFRkVSUkVEX0lPPXkKLSMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAotCi0jCi0jIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCi0jCi0jIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLSMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfRk9OVFM9eQotIyBDT05GSUdfRk9OVF84eDggaXMgbm90IHNldAotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQotQ09ORklHX0hBU19JT01FTT15Ci1DT05GSUdfSEFTX0lPUE9SVD15Ci1DT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uOHgwX2RlZmNvbmZpZwppbmRleCA4ZGE3NWRlLi4yNjRmNTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL244eDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvbjh4MF9kZWZjb25maWcKQEAgLTMwNCw3ICszMDQsNyBAQAogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MTBDMDgwMDAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MTAyMDAwMDAKICMgQ09ORklHX1pCT09UX1JPTSBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORT0icm9vdD0xZjAzIHJvb3Rmc3R5cGU9amZmczIgY29uc29sZT10dHlTMCwxMTUyMDBuOCIKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgcm9vdGZzdHlwZT1qZmZzMiBjb25zb2xlPXR0eVMyLDExNTIwMG44IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfYmVhZ2xlX2RlZmNvbmZpZwppbmRleCAzNTdkNDAyLi5iM2M4Y2NlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2JlYWdsZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19iZWFnbGVfZGVmY29uZmlnCkBAIC05NjksNyArOTY5LDYgQEAKICMKIENPTkZJR19VU0JfT1RHX1VUSUxTPXkKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX1VTQj15CiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKaW5kZXggYjU0YWQyZS4uMTUwZGVhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCkBAIC02MTEsNyArNjExLDcgQEAKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYzNCw3ICs2MzQsOCBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTgzNCw3ICs4MzUsMjkgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPXkKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9EUklWRVJTPXkKK0NPTkZJR19TTkRfVVNCPXkKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorQ09ORklHX1NORF9TT0NfVFdMNDAzMD15CisKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKICMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMDIwLDcgKzEwNDMsMTMgQEAKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwODQsOSArMTExMywxMiBAQAogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisKICMKICMgRmlsZSBzeXN0ZW1zCiAjCkBAIC0xNDA3LDMgKzE0MzksMTAgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorCisjIGFkZGVkIGJ5IGhhbmQgZm9yIG5vdworQ09ORklHX0tFWUJPQVJEX1RXTDQwMzA9eQorQ09ORklHX1VTQl9PVEdfVVRJTFM9eQorQ09ORklHX1RXTDQwMzBfVVNCPXkKK0NPTkZJR19NTUNfT01BUF9IUz15CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwppbmRleCA4YTRhN2UyLi41YTMwNWYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwXzM0MzBzZHBfZGVmY29uZmlnCkBAIC0xNzAzLDcgKzE3MDMsMTQgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDllMjM4NTIuLjUzODNjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjNAotIyBNb24gTWF5ICA0IDE0OjA3OjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU2F0IE5vdiAgNyAyMDo1MjoyMSAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE2LDEyIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDYsMTEgKzQzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTY5LDcgKzY3LDYgQEAKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKQEAgLTgyLDYgKzc5LDEwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiAjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTkxLDEzICs5MiwxNyBAQAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEwOSw3ICsxMTQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTMwLDE5ICsxMzUsMjIgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTEsMjUgKzE1OSwyNyBAQAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT1JJT041WD15CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAogCiAjCiAjIE9yaW9uIEltcGxlbWVudGF0aW9ucwpAQCAtMTg3LDYgKzE5Nyw5IEBACiBDT05GSUdfTUFDSF9UUzc4WFg9eQogQ09ORklHX01BQ0hfTVYyMTIwPXkKIENPTkZJR19NQUNIX0VETUlOSV9WMj15CitDT05GSUdfTUFDSF9EMk5FVD15CitDT05GSUdfTUFDSF9CSUdESVNLPXkKK0NPTkZJR19NQUNIX05FVDJCSUc9eQogQ09ORklHX01BQ0hfTVNTMj15CiBDT05GSUdfTUFDSF9XTlI4NTRUPXkKIENPTkZJR19NQUNIX1JEODhGNTE4MUxfR0U9eQpAQCAtMjAyLDcgKzIxNSw3IEBACiBDT05GSUdfQ1BVX0ZFUk9DRU9OX09MRF9JRD15CiBDT05GSUdfQ1BVXzMydjU9eQogQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQogQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKIENPTkZJR19DUFVfQ09QWV9GRVJPQ0VPTj15CiBDT05GSUdfQ1BVX1RMQl9GRVJPQ0VPTj15CkBAIC0yMTUsNyArMjI4LDcgQEAKIENPTkZJR19BUk1fVEhVTUI9eQogIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMjQwLDExICsyNTMsMTIgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0yNTksMTIgKzI3MywxNCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfTEVEUz15CiBDT05GSUdfTEVEU19DUFU9eQogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKK0NPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMwOCw2ICszMjQsNyBAQAogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiBDT05GSUdfTkVUPXkKIApAQCAtMzU2LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM5Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzk0LDExICs0MTMsMTUgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMSw2ICs0MzQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUzNyw2ICs1NjEsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldApAQCAtNTUyLDcgKzU3Nyw5IEBACiAjCiAjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19DQjcxMF9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NzYsMTAgKzYwMyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz1tCiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTk2LDYgKzYxOSw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYwNCw2ICs2MjksNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNjIwLDcgKzY0Niw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MzIsMTEgKzY1NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY1OCw2ICs2ODYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY4NSw2ICs3MTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC03MDMsMTMgKzczMywxNiBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NzcsNiArODEwLDggQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CkBAIC03OTgsNiArODMzLDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKIENPTkZJR19NVjY0M1hYX0VUSD15CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldApAQCAtODA2LDEwICs4NDIsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzUsNiArODY4LDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtODU1LDEzICs4ODksMTkgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9HUElPPXkKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTEyLDYgKzk1Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjcsMjAgKzEwMDgsNTUgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwMzAsNiArMTEwNiw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDQxLDkgKzExMTksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTA1NywzMyArMTEzMywyNiBAQAogIwogIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19WR0FfQVJCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDk3LDcgKzExNjYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMTYsMTAgKzExODQsMTEgQEAKICMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTEzMCwxMCArMTE5OSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMTYwLDE4ICsxMjMwLDIxIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEyNDgsNyArMTMyMSw2IEBACiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIApAQCAtMTI1OCw3ICsxMzMwLDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CiBDT05GSUdfTEVEU19HUElPPXkKIENPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtMTI2OSwxMSArMTM0MSwxNCBAQAogQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiAKICMKICMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQogIworIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEzMDYsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEzNDQsOCArMTQyMCwxMSBAQAogIyBDT05GSUdfQVNZTkNfVFhfRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNTgsMTAgKzE0MzcsMTAgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPW0KLSMgQ09ORklHX0VYVDRERVZfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTX1hBVFRSPXkKICMgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDRfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEMj1tCkBAIC0xMzcwLDEwICsxNDQ5LDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTQ0Niw3ICsxNTI4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTUzNyw2ICsxNjE4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU1Miw2ICsxNjM0LDcgQEAKIENPTkZJR19TQ0hFRFNUQVRTPXkKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTU3Miw2ICsxNjU1LDcgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtMTU3OSw2ICsxNjYzLDcgQEAKICMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKQEAgLTE1ODcsMjUgKzE2NzIsMTIgQEAKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCi0jIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKQEAgLTE2MjksMjAgKzE3MDEsMTkgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0FMR0FQST1tCi1DT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQotQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCi1DT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQotQ09ORklHX0NSWVBUT19IQVNIMj1tCi1DT05GSUdfQ1JZUFRPX1JORzI9bQotQ09ORklHX0NSWVBUT19QQ09NUD1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9bQotQ09ORklHX0NSWVBUT19NQU5BR0VSMj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1dPUktRVUVVRT1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE2NzAsMTEgKzE3NDEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTY5MSw3ICsxNzY0LDcgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CkBAIC0xNzE5LDYgKzE3OTIsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19IVz15CitDT05GSUdfQ1JZUFRPX0RFVl9NVl9DRVNBPXkKICMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKIENPTkZJR19CSU5BUllfUFJJTlRGPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGEzeHhfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2I4NTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTN4eF9kZWZjb25maWcKQEAgLTAsMCArMSwxMzMyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmMxCisjIE1vbiBKdWwgMTMgMjI6NDg6NDkgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE4CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCisjCitDT05GSUdfQ1BVX1BYQTMwMD15CitDT05GSUdfQ1BVX1BYQTMxMD15CitDT05GSUdfQ1BVX1BYQTMyMD15CitDT05GSUdfQ1BVX1BYQTkzMD15CitDT05GSUdfQ1BVX1BYQTkzNT15CisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9aWUxPTklURT15CitDT05GSUdfTUFDSF9MSVRUTEVUT049eQorQ09ORklHX01BQ0hfVEFWT1JFVkI9eQorQ09ORklHX01BQ0hfU0FBUj15CisjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDQ3MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hJTUFMQVlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNzI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTN4eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUFhBX0hBVkVfQk9BUkRfSVJRUz15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDMz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKK0NPTkZJR19JT18zNj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX1hTQzNMMj15CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09NjRNIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKK0NPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEU9eQorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1BYQTN4eD15CitDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU49eQorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURT15CitDT05GSUdfTVREX09ORU5BTkRfR0VORVJJQz15CisjIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfMlhfUFJPR1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9TSU0gaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MTTgzMjMgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CitDT05GSUdfS0VZQk9BUkRfUFhBOTMwX1JPVEFSWT15CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfUFhBOTMwX1RSS0JBTEw9eQorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKKyMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCitDT05GSUdfR1BJT19NQVg3MzJYPXkKK0NPTkZJR19HUElPX1BDQTk1M1g9eQorQ09ORklHX0dQSU9fUENGODU3WD15CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19HUElPX01BWDczMDE9eQorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKK0NPTkZJR19QT1dFUl9TVVBQTFlfREVCVUc9eQorQ09ORklHX1BEQV9QT1dFUj15CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorQ09ORklHX0JBVFRFUllfREE5MDMwPXkKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKK0NPTkZJR19QTUlDX0RBOTAzWD15CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKKyMgQ09ORklHX0xDRF9MVFYzNTBRViBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CitDT05GSUdfTENEX1RETzI0TT15CisjIENPTkZJR19MQ0RfVkdHMjQzMkE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CitDT05GSUdfQkFDS0xJR0hUX0RBOTAzWD15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfOHgxNiBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF82eDExPXkKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9bQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz1tCitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFA1NTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19EQTkwM1g9bQorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUFdNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQorQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPPW0KK0NPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj1tCisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9MWk89eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NISVJRPXkKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUM9eQorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTEKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19DT01QUkVTUz15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3UzMDBfZGVmY29uZmlnCmluZGV4IDdkNjFhZTYuLjk1M2JhMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvdTMwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy91MzAwX2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjMwotIyBUaHUgSnVsIDE2IDIzOjM2OjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgU2F0IE9jdCAxNyAyMzozMjoyNCAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15CitDT05GSUdfSEFWRV9UQ009eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNDQsMTEgKzQ0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgwLDE3ICs4MSwxNSBAQAogIyBDT05GSUdfQUlPIGlzIG5vdCBzZXQKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIwogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMzMsNiArMTMyLDcgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CkBAIC0xNDcsNiArMTQ3LDcgQEAKICMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNjksMTEgKzE3MCwxMyBAQAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfVTMwMD15CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CiAKICMKICMgU1QtRXJpY3Nzb24gQUIgVTMwMC9VMzMwL1UzMzUvVTM2NSBQbGF0Zm9ybQpAQCAtMTk1LDYgKzE5OCw3IEBACiBDT05GSUdfTUFDSF9VMzAwX0RVQUxfUkFNPXkKIENPTkZJR19VMzAwX0RFQlVHPXkKICMgQ09ORklHX01BQ0hfVTMwMF9TRU1JX0lTX1NIQVJFRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZPXkKIAogIwogIyBBbGwgdGhlIHNldHRpbmdzIGJlbG93IG11c3QgbWF0Y2ggdGhlIGJvb3Rsb2FkZXIncyBzZXR0aW5ncwpAQCAtMjA3LDcgKzIxMSw3IEBACiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQpAQCAtMjIyLDYgKzIyNiw3IEBACiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0NBQ0hFX1JPVU5EX1JPQklOIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQogQ09ORklHX0FSTV9WSUM9eQogQ09ORklHX0FSTV9WSUNfTlI9MgogQ09ORklHX0NPTU1PTl9DTEtERVY9eQpAQCAtMjQ1LDYgKzI1MCw4IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfSFo9MTAwCiBDT05GSUdfQUVBQkk9eQpAQCAtMjY1LDYgKzI3Miw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CkBAIC0zMTMsNiArMzIxLDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKQEAgLTM1MSw2ICszNjAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5MSw2ICs0MDEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQwMiw5ICs0MTMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUzLDYgKzQ2NCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNTIwLDYgKzUzMiw3IEBACiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC01NDAsMTIgKzU1MywxNiBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKQEAgLTU5Nyw2ICs2MTQsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02MjksOSArNjQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02NTMsMTYgKzY2OCwyMSBAQAogIwogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiBDT05GSUdfUE9XRVJfU1VQUExZPXkKICMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAogIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTY5MCwxMCArNzEwLDI0IEBACiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiBDT05GSUdfQUIzMTAwX0NPUkU9eQorQ09ORklHX0FCMzEwMF9PVFA9eQogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfQUIzMTAwPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Miw5ICs4MjYsMTAgQEAKICMKIENPTkZJR19NTUNfQVJNTU1DST15CiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQogQ09ORklHX0xFRFNfQ0xBU1M9eQogCkBAIC04MjAsMTAgKzg1NSwxMCBAQAogIwogIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCiAjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfSENUT1NZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC04NjMsNiArODk4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg3OCwyNyArOTE0LDI1IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0FCMzEwMD15CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX1BMMDMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUEwwMzEgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQ09IOTAxMzMxPXkKIENPTkZJR19ETUFERVZJQ0VTPXkKIAogIwogIyBETUEgRGV2aWNlcwogIwogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0Ci1DT05GSUdfUkVHVUxBVE9SPXkKLSMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw2ICs5NDcsNyBAQAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw3ICsxMDEwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw2ICsxMDY3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjYsMTEgKzExMDEsMTMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTIxLDYgKzExNTgsNyBAQAogIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy94Y2VwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiYjcyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MveGNlcF9kZWZjb25maWcKQEAgLTAsMCArMSwxMTI5IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2CisjIFRodSBBdWcgMjAgMDk6MDI6MzcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIueGNlcC1pdGVjaCIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CisjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQUlPPXkKKworIworIyBQZXJmb3JtYW5jZSBDb3VudGVycworIworIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9CPXkKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorQ09ORklHX01BUktFUlM9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0tQUk9CRVM9eQorQ09ORklHX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CisjIENPTkZJR19CTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NSU9BNzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9YQ0VQPXkKK0NPTkZJR19QWEEyNXg9eQorQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD1tdGQ0IHJvb3Rmc3R5cGU9amZmczIgcm8gY29uc29sZT10dHlTMCwxMTUyMDAiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD1tCitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BYQTJYWD15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9bQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj1tCisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX01BWDY2NTA9bQorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9bQorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX1NBMTEwMD1tCisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD1tCitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9InV0ZjgiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tQUk9CRVNfU0FOSVRZX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9bQorQ09ORklHX0NSWVBUT19BTEdBUEkyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvenlsb25pdGVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDlkMDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy96eWxvbml0ZV9kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MzYgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCi0jIFR1ZSBPY3QgMjMgMTM6MzM6MjAgMjAwNwotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15Ci1DT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci1DT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKLUNPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAotQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15Ci1DT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX1NMVUI9eQotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAotQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xTRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLQotIwotIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cwotIwotQ09ORklHX0NQVV9QWEEzMDA9eQotQ09ORklHX0NQVV9QWEEzMTA9eQotQ09ORklHX0NQVV9QWEEzMjA9eQotIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVFJJWkVQUzQgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9FTV9YMjcwIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX1pZTE9OSVRFPXkKLSMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFhBM3h4PXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0MzPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9DUDE1PXkKLUNPTkZJR19DUFVfQ1AxNV9NTVU9eQotQ09ORklHX0lPXzM2PXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0FSTV9USFVNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAotQ09ORklHX0lXTU1YVD15Ci0KLSMKLSMgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIEZlYXR1cmVzCi0jCi0jIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAotIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci0jIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQotQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKLSMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkxBVE1FTT15Ci1DT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQotIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUgaXMgbm90IHNldAotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKLUNPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mcy9yb290ZnMvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDM4NDAwIG1lbT02NE0gZGVidWciCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLUNPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci0jIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAotIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9GSUJfSEFTSD15Ci1DT05GSUdfSVBfUE5QPXkKLUNPTkZJR19JUF9QTlBfREhDUD15Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLUNPTkZJR19JUF9QTlBfUkFSUD15Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9eQotQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgotIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USVBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotQ09ORklHX0ZXX0xPQURFUj15Ci0jIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotQ09ORklHX1NNQzkxWD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfUFhBPXkKLUNPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIFNQSSBzdXBwb3J0Ci0jCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9EREMgaXMgbm90IHNldAotQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15Ci1DT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKLUNPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLSMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15Ci0jIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKLQotIwotIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycwotIwotIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAotQ09ORklHX0ZCX1BYQT15Ci0jIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQlggaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UUz15Ci0jIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAotQ09ORklHX0ZPTlRfNngxMT15Ci0jIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0xJQj15Ci0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19QUk9DX1NZU0NUTD15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci1DT05GSUdfTkZTX1YzX0FDTD15Ci1DT05GSUdfTkZTX1Y0PXkKLUNPTkZJR19ORlNfRElSRUNUSU89eQotIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETE0gaXMgbm90IHNldAotIyBDT05GSUdfSU5TVFJVTUVOVEFUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKLUNPTkZJR19DUllQVE9fTUFOQUdFUj15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz15Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotQ09ORklHX0JJVFJFVkVSU0U9eQotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCA5ZWQyMzc3Li5kMGRhZWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMTksMzEgKzE5LDIxIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKy8qCisgKiBPbiBBUk0sIG9yZGluYXJ5IGFzc2lnbm1lbnQgKHN0ciBpbnN0cnVjdGlvbikgZG9lc24ndCBjbGVhciB0aGUgbG9jYWwKKyAqIHN0cmV4L2xkcmV4IG1vbml0b3Igb24gc29tZSBpbXBsZW1lbnRhdGlvbnMuIFRoZSByZWFzb24gd2UgY2FuIHVzZSBpdCBmb3IKKyAqIGF0b21pY19zZXQoKSBpcyB0aGUgY2xyZXggb3IgZHVtbXkgc3RyZXggZG9uZSBvbiBldmVyeSBleGNlcHRpb24gcmV0dXJuLgorICovCiAjZGVmaW5lIGF0b21pY19yZWFkKHYpCSgodiktPmNvdW50ZXIpCisjZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgogCiAvKgogICogQVJNdjYgVVAgYW5kIFNNUCBzYWZlIGF0b21pYyBvcHMuICBXZSB1c2UgbG9hZCBleGNsdXNpdmUgYW5kCiAgKiBzdG9yZSBleGNsdXNpdmUgdG8gZW5zdXJlIHRoYXQgdGhlc2UgYXJlIGF0b21pYy4gIFdlIG1heSBsb29wCi0gKiB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlIGhhcHBlbnMuICBXcml0aW5nIHRvICd2LT5jb3VudGVyJwotICogd2l0aG91dCB1c2luZyB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgV0lMTCBicmVhayB0aGUgYXRvbWljCi0gKiBuYXR1cmUgb2YgdGhlc2Ugb3BzLgorICogdG8gZW5zdXJlIHRoYXQgdGhlIHVwZGF0ZSBoYXBwZW5zLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3NldChhdG9taWNfdCAqdiwgaW50IGkpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfc2V0XG4iCi0iMToJbGRyZXgJJTAsIFslMV1cbiIKLSIJc3RyZXgJJTAsICUyLCBbJTFdXG4iCi0iCXRlcQklMCwgIzBcbiIKLSIJYm5lCTFiIgotCTogIj0mciIgKHRtcCkKLQk6ICJyIiAoJnYtPmNvdW50ZXIpLCAiciIgKGkpCi0JOiAiY2MiKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTYzLDggKzE1Myw2IEBACiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKICNlbmRpZgogCi0jZGVmaW5lIGF0b21pY19zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCi0KIHN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAppbmRleCA2M2E0ODFmLi4zMzhmZjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtODQsNyArODQsNyBAQAogCSpwID0gcmVzIHwgbWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAxLDcgKzEwMSw3IEBACiAJKnAgPSByZXMgJiB+bWFzazsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JcmV0dXJuIHJlcyAmIG1hc2s7CisJcmV0dXJuIChyZXMgJiBtYXNrKSAhPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTE4LDcgKzExOCw3IEBACiAJKnAgPSByZXMgXiBtYXNrOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gcmVzICYgbWFzazsKKwlyZXR1cm4gKHJlcyAmIG1hc2spICE9IDA7CiB9CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlLmgKaW5kZXggZmVhYTc1Zi4uNjZjMTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICiAjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKIAotI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVAogI2RlZmluZSBMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZmQwM2ZiNi4uM2QwY2RkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNDE0LDkgKzQxNCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF9pY2FjaGVfYWxsKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCisJZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKKwl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7CisjZWxzZQogCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSS1jYWNoZVxuIgogCSAgICA6CiAJICAgIDogInIiICgwKSk7CisjZW5kaWYKIH0KIAogI2RlZmluZSBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAppbmRleCBiM2U2NTZjLi4yMGFlOTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCkBAIC02Myw2ICs2MywxMSBAQAogCXJldHVybiByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX2NvbnN0X18gcmVhZF9jcHVpZF90Y21zdGF0dXModm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9jcHVpZChDUFVJRF9UQ00pOworfQorCiAvKgogICogSW50ZWwncyBYU2NhbGUzIGNvcmUgc3VwcG9ydHMgc29tZSB2NiBmZWF0dXJlcyAoc3VwZXJzZWN0aW9ucywgTDIpCiAgKiBidXQgYWR2ZXJ0aXNlcyBpdHNlbGYgYXMgdjUgYXMgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgdjYgSVNBLiAgRm9yCkBAIC03Myw3ICs3OCwxMCBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9pc194c2MzKHZvaWQpCiB7Ci0JaWYgKChyZWFkX2NwdWlkX2lkKCkgJiAweGZmZmZlMDAwKSA9PSAweDY5MDU2MDAwKQorCXVuc2lnbmVkIGludCBpZDsKKwlpZCA9IHJlYWRfY3B1aWRfaWQoKSAmIDB4ZmZmZmUwMDA7CisJLyogSXQgY292ZXJzIGJvdGggSW50ZWwgSUQgYW5kIE1hcnZlbGwgSUQgKi8KKwlpZiAoKGlkID09IDB4NjkwNTYwMDApIHx8IChpZCA9PSAweDU2MDU2MDAwKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYzNiOTExZS4uNmFhYzNmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTk4LDYgKzk4LDkgQEAKIGV4dGVybiBpbnQgYXJtX2VsZl9yZWFkX2ltcGxpZXNfZXhlYyhjb25zdCBzdHJ1Y3QgZWxmMzJfaGRyICosIGludCk7CiAjZGVmaW5lIGVsZl9yZWFkX2ltcGxpZXNfZXhlYyhleCxzdGspIGFybV9lbGZfcmVhZF9pbXBsaWVzX2V4ZWMoJihleCksIHN0aykKIAoraW50IGR1bXBfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2dyZWdzZXRfdCAqZWxmcmVncyk7CisjZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTIGR1bXBfdGFza19yZWdzCisKICNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKaW5kZXggYTBlMzlkNWQwMC4uMjM0YTNmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaApAQCAtMTIwLDI1ICsxMjAsMzkgQEAKICNlbmRpZgogCiAvKgotICogUHJlZmV0Y2ggYWJvcnQgaGFuZGxlci4gIElmIHRoZSBDUFUgaGFzIGFuIElGQVIgdXNlIHRoYXQsIG90aGVyd2lzZQotICogdXNlIHRoZSBhZGRyZXNzIG9mIHRoZSBhYm9ydGVkIGluc3RydWN0aW9uCisgKglQcmVmZXRjaCBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgorICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgorICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgogICovCisKICN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKICN1bmRlZiBNVUxUSV9QQUJPUlQKIAotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfSUZBUgorI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltcmMgcDE1LCAwLCByZWcsIGNyNiwgY3IwLCAyCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIGxlZ2FjeV9wYWJvcnQKICMgZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0NQVV9QQUJSVF9OT0lGQVIKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2CiAjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgogIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCiAjIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIocmVnLCBpbnNuKQltb3YgcmVnLCBpbnNuCisjICBkZWZpbmUgQ1BVX1BBQk9SVF9IQU5ETEVSIHY2X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y3CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjdfcGFib3J0CiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHguaAppbmRleCA0YjhlN2Y1Li44ZDYwYWQyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LmgKQEAgLTIxNSw2ICsyMTUsNyBAQAogICogSU9QM1hYIEkvTyBhbmQgTWVtIHNwYWNlIHJlZ2lvbnMgZm9yIFBDSSBhdXRvY29uZmlndXJhdGlvbgogICovCiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfTUVNX1BBCTB4ODAwMDAwMDAKKyNkZWZpbmUgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUJMHgwODAwMDAwMAogCiAjZGVmaW5lIElPUDNYWF9QQ0lfSU9fV0lORE9XX1NJWkUJMHgwMDAxMDAwMAogI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX0lPX1BBCQkweDkwMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfcGxhdC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTMwM2UyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3BsYXQuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogQVJNIHNwZWNpZmljIFNNUCBoZWFkZXIsIHRoaXMgY29udGFpbnMgb3VyIGltcGxlbWVudGF0aW9uCisgKiBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQVNNQVJNX1NNUF9QTEFUX0gKKyNkZWZpbmUgX19BU01BUk1fU01QX1BMQVRfSAorCisjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KKworLyogYWxsIFNNUCBjb25maWd1cmF0aW9ucyBoYXZlIHRoZSBleHRlbmRlZCBDUFVJRCByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRsYl9vcHNfbmVlZF9icm9hZGNhc3Qodm9pZCkKK3sKKwlyZXR1cm4gKChyZWFkX2NwdWlkX2V4dChDUFVJRF9FWFRfTU1GUjMpID4+IDEyKSAmIDB4ZikgPCAyOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RjbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyOWVmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RjbS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICoKKyAqLworI2lmbmRlZiBfX0FTTUFSTV9UQ01fSAorI2RlZmluZSBfX0FTTUFSTV9UQ01fSAorCisjaWZuZGVmIENPTkZJR19IQVZFX1RDTQorI2Vycm9yICJZb3Ugc2hvdWxkIG5vdCBiZSBpbmNsdWRpbmcgdGNtLmggdW5sZXNzIHlvdSBoYXZlIGEgVENNISIKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyogVGFnIHZhcmlhYmxlcyB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgX190Y21kYXRhIF9fc2VjdGlvbigudGNtLmRhdGEpCisvKiBUYWcgY29uc3RhbnRzIHdpdGggdGhpcyAqLworI2RlZmluZSBfX3RjbWNvbnN0IF9fc2VjdGlvbigudGNtLnJvZGF0YSkKKy8qIFRhZyBmdW5jdGlvbnMgaW5zaWRlIFRDTSBjYWxsZWQgZnJvbSBvdXRzaWRlIFRDTSB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgX190Y21mdW5jIF9fYXR0cmlidXRlX18oKGxvbmdfY2FsbCkpIF9fc2VjdGlvbigudGNtLnRleHQpIG5vaW5saW5lCisvKiBUYWcgZnVuY3Rpb24gaW5zaWRlIFRDTSBjYWxsZWQgZnJvbSBpbnNpZGUgVENNICB3aXRoIHRoaXMgKi8KKyNkZWZpbmUgX190Y21sb2NhbGZ1bmMgX19zZWN0aW9uKC50Y20udGV4dCkKKwordm9pZCAqdGNtX2FsbG9jKHNpemVfdCBsZW4pOwordm9pZCB0Y21fZnJlZSh2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBhNDVhYjVkLi5jMmYxNjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfV0IpKQogCQlkc2IoKTsKIAotCWlmIChjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpKSB7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoZ2V0X2NwdSgpLCBtbV9jcHVtYXNrKG1tKSkpIHsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKIAkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9VX0ZVTEwpKQpAQCAtMzYwLDYgKzM2MCw3IEBACiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfSV9GVUxMKSkKIAkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAl9CisJcHV0X2NwdSgpOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX0FTSUQpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzcsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlmaWVkLmgKaW5kZXggMDczZTg1Yi4uYmM2MzExNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pZmllZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaWZpZWQuaApAQCAtMzUsNyArMzUsOSBAQAogCiAjZGVmaW5lIEFSTSh4Li4uKQogI2RlZmluZSBUSFVNQih4Li4uKQl4CisjaWZkZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIFcoaW5zdHIpCWluc3RyLncKKyNlbmRpZgogI2RlZmluZSBCU1lNKHN5bSkJc3ltICsgMQogCiAjZWxzZQkvKiAhQ09ORklHX1RIVU1CMl9LRVJORUwgKi8KQEAgLTQ1LDcgKzQ3LDkgQEAKIAogI2RlZmluZSBBUk0oeC4uLikJeAogI2RlZmluZSBUSFVNQih4Li4uKQorI2lmZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBXKGluc3RyKQlpbnN0cgorI2VuZGlmCiAjZGVmaW5lIEJTWU0oc3ltKQlzeW0KIAogI2VuZGlmCS8qIENPTkZJR19USFVNQjJfS0VSTkVMICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDg5ZjdlYWQuLjRlNTA2ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00MDMsNiArNDAzLDE1IEBACiAjZGVmaW5lIF9fQVJNX05SX3NldF90bHMJCShfX0FSTV9OUl9CQVNFKzUpCiAKIC8qCisgKiAqTk9URSo6IFRoaXMgaXMgYSBnaG9zdCBzeXNjYWxsIHByaXZhdGUgdG8gdGhlIGtlcm5lbC4gIE9ubHkgdGhlCisgKiBfX2t1c2VyX2NtcHhjaGcgY29kZSBpbiBlbnRyeS1hcm12LlMgc2hvdWxkIGJlIGF3YXJlIG9mIGl0cworICogZXhpc3RlbmNlLiAgRG9uJ3QgZXZlciB1c2UgdGhpcyBmcm9tIHVzZXIgY29kZS4KKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgX19BUk1fTlJfY21weGNoZwkJKF9fQVJNX05SX0JBU0UrMHgwMGZmZjApCisjZW5kaWYKKworLyoKICAqIFRoZSBmb2xsb3dpbmcgc3lzY2FsbHMgYXJlIG9ic29sZXRlIGFuZCBubyBsb25nZXIgYXZhaWxhYmxlIGZvciBFQUJJLgogICovCiAjaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCkBAIC00NTYsNiArNDY1LDcgQEAKICAqIFVuaW1wbGVtZW50ZWQgKG9yIGFsdGVybmF0aXZlbHkgaW1wbGVtZW50ZWQpIHN5c2NhbGxzCiAgKi8KICNkZWZpbmUgX19JR05PUkVfZmFkdmlzZTY0XzY0CQkxCisjZGVmaW5lIF9fSUdOT1JFX21pZ3JhdGVfcGFnZXMJCTEKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9BUk1fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBjNDQ2YWVmLi43OTA4N2RkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0zNSw2ICszNSw3IEBACiBvYmotJChDT05GSUdfQVJNX1RIVU1CRUUpCSs9IHRodW1iZWUubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KIG9iai0kKENPTkZJR19BUk1fVU5XSU5EKQkrPSB1bndpbmQubworb2JqLSQoQ09ORklHX0hBVkVfVENNKQkJKz0gdGNtLm8KIAogb2JqLSQoQ09ORklHX0NSVU5DSCkJCSs9IGNydW5jaC5vIGNydW5jaC1iaXRzLm8KIEFGTEFHU19jcnVuY2gtYml0cy5vCQk6PSAtV2EsLW1jcHU9ZXA5MzEyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCAzZDcyN2E4Li5kMjkwM2UzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTI3Miw3ICsyNzMsMTUgQEAKIAlACiAJQCAgcjAgLSBpbnN0cnVjdGlvbgogCUAKKyNpZm5kZWYJQ09ORklHX1RIVU1CMl9LRVJORUwKIAlsZHIJcjAsIFtyMiwgIy00XQorI2Vsc2UKKwlsZHJoCXIwLCBbcjIsICMtMl0JCQlAIFRodW1iIGluc3RydWN0aW9uIGF0IExSIC0gMgorCWFuZAlyOSwgcjAsICMweGY4MDAKKwljbXAJcjksICMweGU4MDAJCQlAIDMyLWJpdCBpbnN0cnVjdGlvbiBpZiB4eCA+PSAwCisJbGRyaGhzCXI5LCBbcjJdCQkJQCBib3R0b20gMTYgYml0cworCW9ycmhzCXIwLCByOSwgcjAsIGxzbCAjMTYKKyNlbmRpZgogCWFkcglyOSwgQlNZTSgxZikKIAlibAljYWxsX2ZwZQogCkBAIC0zMDMsMjIgKzMxMiwxNiBAQAogCXRzdAlyMywgI1BTUl9JX0JJVAogCWJpY2VxCXI5LCByOSwgI1BTUl9JX0JJVAogCi0JQAotCUAgc2V0IGFyZ3MsIHRoZW4gY2FsbCBtYWluIGhhbmRsZXIKLQlACi0JQCAgcjAgLSBhZGRyZXNzIG9mIGZhdWx0aW5nIGluc3RydWN0aW9uCi0JQCAgcjEgLSBwb2ludGVyIHRvIHJlZ2lzdGVycyBvbiBzdGFjawotCUAKLSNpZmRlZiBNVUxUSV9QQUJPUlQKIAltb3YJcjAsIHIyCQkJQCBwYXNzIGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbi4KKyNpZmRlZiBNVUxUSV9QQUJPUlQKIAlsZHIJcjQsIC5MQ3Byb2NmbnMKIAltb3YJbHIsIHBjCiAJbGRyCXBjLCBbcjQsICNQUk9DRVNTT1JfUEFCVF9GVU5DXQogI2Vsc2UKLQlDUFVfUEFCT1JUX0hBTkRMRVIocjAsIHIyKQorCWJsCUNQVV9QQUJPUlRfSEFORExFUgogI2VuZGlmCiAJbXNyCWNwc3JfYywgcjkJCQlAIE1heWJlIGVuYWJsZSBpbnRlcnJ1cHRzCi0JbW92CXIxLCBzcAkJCQlAIHJlZ3MKKwltb3YJcjIsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCiAKIAlACkBAIC02MDYsMzMgKzYwOSwzMyBAQAogIFRIVU1CKAlhZGQJcGMsIHI4CQkJKQogCW5vcAogCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzAKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMAogCVcoYikJZG9fZnBlCQkJCUAgQ1AjMSAoRlBFKQogCVcoYikJZG9fZnBlCQkJCUAgQ1AjMiAoRlBFKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMzCisJbW92d19wYwlscgkJCQlAIENQIzMKICNpZmRlZiBDT05GSUdfQ1JVTkNICiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNCAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNSAoTWF2ZXJpY2tDcnVuY2gpCiAJYgljcnVuY2hfdGFza19lbmFibGUJCUAgQ1AjNiAoTWF2ZXJpY2tDcnVuY2gpCiAjZWxzZQotCVcobW92KQlwYywgbHIJCQkJQCBDUCM0Ci0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzUKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjNgorCW1vdndfcGMJbHIJCQkJQCBDUCM0CisJbW92d19wYwlscgkJCQlAIENQIzUKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjNgogI2VuZGlmCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzcKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjOAotCVcobW92KQlwYywgbHIJCQkJQCBDUCM5CisJbW92d19wYwlscgkJCQlAIENQIzcKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjOAorCW1vdndfcGMJbHIJCQkJQCBDUCM5CiAjaWZkZWYgQ09ORklHX1ZGUAogCVcoYikJZG9fdmZwCQkJCUAgQ1AjMTAgKFZGUCkKIAlXKGIpCWRvX3ZmcAkJCQlAIENQIzExIChWRlApCiAjZWxzZQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMCAoVkZQKQotCVcobW92KQlwYywgbHIJCQkJQCBDUCMxMSAoVkZQKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMCAoVkZQKQorCW1vdndfcGMJbHIJCQkJQCBDUCMxMSAoVkZQKQogI2VuZGlmCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEyCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzEzCi0JVyhtb3YpCXBjLCBscgkJCQlAIENQIzE0IChEZWJ1ZykKLQlXKG1vdikJcGMsIGxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCisJbW92d19wYwlscgkJCQlAIENQIzEyCisJbW92d19wYwlscgkJCQlAIENQIzEzCisJbW92d19wYwlscgkJCQlAIENQIzE0IChEZWJ1ZykKKwltb3Z3X3BjCWxyCQkJCUAgQ1AjMTUgKENvbnRyb2wpCiAKICNpZmRlZiBDT05GSUdfTkVPTgogCS5hbGlnbgk2CkBAIC02NzgsNyArNjgxLDkgQEAKIAkud29yZAlub19mcAogCS5wcmV2aW91cwogCi1ub19mcDoJbW92CXBjLCBscgorRU5UUlkobm9fZnApCisJbW92CXBjLCBscgorRU5EUFJPQyhub19mcCkKIAogX191bmRfdXNyX3Vua25vd246CiAJZW5hYmxlX2lycQpAQCAtNjkxLDE2ICs2OTYsMTYgQEAKIF9fcGFidF91c3I6CiAJdXNyX2VudHJ5CiAKLSNpZmRlZiBNVUxUSV9QQUJPUlQKIAltb3YJcjAsIHIyCQkJQCBwYXNzIGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbi4KKyNpZmRlZiBNVUxUSV9QQUJPUlQKIAlsZHIJcjQsIC5MQ3Byb2NmbnMKIAltb3YJbHIsIHBjCiAJbGRyCXBjLCBbcjQsICNQUk9DRVNTT1JfUEFCVF9GVU5DXQogI2Vsc2UKLQlDUFVfUEFCT1JUX0hBTkRMRVIocjAsIHIyKQorCWJsCUNQVV9QQUJPUlRfSEFORExFUgogI2VuZGlmCiAJZW5hYmxlX2lycQkJCQlAIEVuYWJsZSBpbnRlcnJ1cHRzCi0JbW92CXIxLCBzcAkJCQlAIHJlZ3MKKwltb3YJcjIsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCiAgVU5XSU5EKC5mbmVuZAkJKQogCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtNzM0LDEzICs3MzksNiBAQAogI2lmZGVmIENPTkZJR19NTVUKIAlsZHIJcjYsIFtyMiwgI1RJX0NQVV9ET01BSU5dCiAjZW5kaWYKLSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgotI2lmZGVmIENPTkZJR19DUFVfMzJ2NksKLQljbHJleAotI2Vsc2UKLQlzdHJleAlyNSwgcjQsIFtpcF0JCQlAIENsZWFyIGV4Y2x1c2l2ZSBtb25pdG9yCi0jZW5kaWYKLSNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0hBU19UTFNfUkVHKQogCW1jcglwMTUsIDAsIHIzLCBjMTMsIGMwLCAzCQlAIHNldCBUTFMgcmVnaXN0ZXIKICNlbGlmICFkZWZpbmVkKENPTkZJR19UTFNfUkVHX0VNVUwpCkBAIC05MTEsMTAgKzkwOSwxMCBAQAogCSAqIEEgc3BlY2lhbCBnaG9zdCBzeXNjYWxsIGlzIHVzZWQgZm9yIHRoYXQgKHNlZSB0cmFwcy5jKS4KIAkgKi8KIAlzdG1mZAlzcCEsIHtyNywgbHJ9Ci0JbW92CXI3LCAjMHhmZjAwCQlAIDB4ZmZmMCBpbnRvIHI3IGZvciBFQUJJCi0Jb3JyCXI3LCByNywgIzB4ZjAKLQlzd2kJIzB4OWZmZmYwCisJbGRyCXI3LCA9MWYJCQlAIGl0J3MgMjAgYml0cworCXN3aQlfX0FSTV9OUl9jbXB4Y2hnCiAJbGRtZmQJc3AhLCB7cjcsIHBjfQorMToJLndvcmQJX19BUk1fTlJfY21weGNoZwogCiAjZWxpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCA4MDdjZmViLi5mMGZlOTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMjYsNyArMTI2LDcgQEAKIAljbXAgcjAsIHIyCiAJYm5lIGdudV90cmFjZQogCWxkbWlhIHNwISwge3IwLXIzLCBpcCwgbHJ9Ci0JYnggaXAKKwltb3YgcGMsIGlwCiAKIGdudV90cmFjZToKIAlsZHIgcjEsIFtzcCwgIzIwXQkJCUAgbHIgb2YgaW5zdHJ1bWVudGVkIHJvdXRpbmUKQEAgLTEzNSw3ICsxMzUsNyBAQAogCW1vdiBsciwgcGMKIAltb3YgcGMsIHIyCiAJbGRtaWEgc3AhLCB7cjAtcjMsIGlwLCBscn0KLQlieCBpcAorCW1vdiBwYywgaXAKIAogRU5UUlkobWNvdW50KQogCXN0bWRiIHNwISwge3IwLXIzLCBscn0KQEAgLTQyNSwxMyArNDI1LDYgQEAKICNlbmRpZgogRU5EUFJPQyhzeXNfbW1hcDIpCiAKLUVOVFJZKHBhYm9ydF9pZmFyKQotCQltcmMJcDE1LCAwLCByMCwgY3I2LCBjcjAsIDIKLUVOVFJZKHBhYm9ydF9ub2lmYXIpCi0JCW1vdglwYywgbHIKLUVORFBST0MocGFib3J0X2lmYXIpCi1FTkRQUk9DKHBhYm9ydF9ub2lmYXIpCi0KICNpZmRlZiBDT05GSUdfT0FCSV9DT01QQVQKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1oZWFkZXIuUwppbmRleCBhNGVhZjRmLi43ZTllZDFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktaGVhZGVyLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWhlYWRlci5TCkBAIC03NiwxMyArNzYsMjcgQEAKICNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKIAkubWFjcm8Jc3ZjX2V4aXQsIHJwc3IKIAltc3IJc3Bzcl9jeHNmLCBccnBzcgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV8zMnY2SykKKwljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKIAlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgbG9hZCByMCAtIHBjLCBjcHNyCisjZWxpZiBkZWZpbmVkIChDT05GSUdfQ1BVX1Y2KQorCWxkcglyMCwgW3NwXQorCXN0cmV4CXIxLCByMiwgW3NwXQkJCUAgY2xlYXIgdGhlIGV4Y2x1c2l2ZSBtb25pdG9yCisJbGRtaWIJc3AsIHtyMSAtIHBjfV4JCQlAIGxvYWQgcjEgLSBwYywgY3BzcgorI2Vsc2UKKwlsZG1pYQlzcCwge3IwIC0gcGN9XgkJCUAgbG9hZCByMCAtIHBjLCBjcHNyCisjZW5kaWYKIAkuZW5kbQogCiAJLm1hY3JvCXJlc3RvcmVfdXNlcl9yZWdzLCBmYXN0ID0gMCwgb2Zmc2V0ID0gMAogCWxkcglyMSwgW3NwLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKIAlsZHIJbHIsIFtzcCwgI1xvZmZzZXQgKyBTX1BDXSEJQCBnZXQgcGMKIAltc3IJc3Bzcl9jeHNmLCByMQkJCUAgc2F2ZSBpbiBzcHNyX3N2YworI2lmIGRlZmluZWQoQ09ORklHX0NQVV8zMnY2SykKKwljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKKyNlbGlmIGRlZmluZWQgKENPTkZJR19DUFVfVjYpCisJc3RyZXgJcjEsIHIyLCBbc3BdCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKKyNlbmRpZgogCS5pZglcZmFzdAogCWxkbWRiCXNwLCB7cjEgLSBscn1eCQkJQCBnZXQgY2FsbGluZyByMSAtIGxyCiAJLmVsc2UKQEAgLTk2LDggKzExMCwxNiBAQAogCW1vdglccmQsIHNwLCBsc3IgIzEzCiAJbW92CVxyZCwgXHJkLCBsc2wgIzEzCiAJLmVuZG0KKworCUAKKwlAIDMyLWJpdCB3aWRlICJtb3YgcGMsIHJlZyIKKwlACisJLm1hY3JvCW1vdndfcGMsIHJlZworCW1vdglwYywgXHJlZworCS5lbmRtCiAjZWxzZQkvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCS5tYWNybwlzdmNfZXhpdCwgcnBzcgorCWNscmV4CQkJCQlAIGNsZWFyIHRoZSBleGNsdXNpdmUgbW9uaXRvcgogCWxkcglyMCwgW3NwLCAjU19TUF0JCQlAIHRvcCBvZiB0aGUgc3RhY2sKIAlsZHIJcjEsIFtzcCwgI1NfUENdCQkJQCByZXR1cm4gYWRkcmVzcwogCXRzdAlyMCwgIzQJCQkJQCBvcmlnIHN0YWNrIDgtYnl0ZSBhbGlnbmVkPwpAQCAtMTEwLDYgKzEzMiw3IEBACiAJLmVuZG0KIAogCS5tYWNybwlyZXN0b3JlX3VzZXJfcmVncywgZmFzdCA9IDAsIG9mZnNldCA9IDAKKwljbHJleAkJCQkJQCBjbGVhciB0aGUgZXhjbHVzaXZlIG1vbml0b3IKIAltb3YJcjIsIHNwCiAJbG9hZF91c2VyX3NwX2xyIHIyLCByMywgXG9mZnNldCArIFNfU1AJQCBjYWxsaW5nIHNwLCBscgogCWxkcglyMSwgW3NwLCAjXG9mZnNldCArIFNfUFNSXQlAIGdldCBjYWxsaW5nIGNwc3IKQEAgLTEzMCw2ICsxNTMsMTQgQEAKIAlsc3IJXHJkLCBccmQsICMxMwogCW1vdglccmQsIFxyZCwgbHNsICMxMwogCS5lbmRtCisKKwlACisJQCAzMi1iaXQgd2lkZSAibW92IHBjLCByZWciCisJQAorCS5tYWNybwltb3Z3X3BjLCByZWcKKwltb3YJcGMsIFxyZWcKKwlub3AKKwkuZW5kbQogI2VuZGlmCS8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2hlYWQtY29tbW9uLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUwppbmRleCA5M2FkNTc2Li5iOTUwNWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1jb21tb24uUwpAQCAtMTMsNiArMTMsNyBAQAogCiAjZGVmaW5lIEFUQUdfQ09SRSAweDU0NDEwMDAxCiAjZGVmaW5lIEFUQUdfQ09SRV9TSVpFICgoMio0ICsgMyo0KSA+PiAyKQorI2RlZmluZSBBVEFHX0NPUkVfU0laRV9FTVBUWSAoKDIqNCkgPj4gMikKIAogCS5hbGlnbgkyCiAJLnR5cGUJX19zd2l0Y2hfZGF0YSwgJW9iamVjdApAQCAtOTYsNyArOTcsNyBAQAogCWJsCXByaW50aGV4OAogCWFkcglyMCwgc3RyX2EyCiAJYmwJcHJpbnRhc2NpaQotCWFkcglyMywgM2YKKwlhZHIJcjMsIDRmCiAJbGRtaWEJcjMsIHtyNCwgcjUsIHI2fQkJQCBnZXQgbWFjaGluZSBkZXNjIGxpc3QKIAlzdWIJcjQsIHIzLCByNAkJCUAgZ2V0IG9mZnNldCBiZXR3ZWVuIHZpcnQmcGh5cwogCWFkZAlyNSwgcjUsIHI0CQkJQCBjb252ZXJ0IHZpcnQgYWRkcmVzc2VzIHRvCkBAIC0yNTEsNyArMjUyLDggQEAKIAlibmUJMWYKIAogCWxkcglyNSwgW3IyLCAjMF0JCQlAIGlzIGZpcnN0IHRhZyBBVEFHX0NPUkU/Ci0Jc3VicwlyNSwgcjUsICNBVEFHX0NPUkVfU0laRQorCWNtcAlyNSwgI0FUQUdfQ09SRV9TSVpFCisJY21wbmUJcjUsICNBVEFHX0NPUkVfU0laRV9FTVBUWQogCWJuZQkxZgogCWxkcglyNSwgW3IyLCAjNF0KIAlsZHIJcjYsID1BVEFHX0NPUkUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGY2OTJlZmQuLjYwYzYyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtODMsMTAgKzg0LDI0IEBACiAJZmx1c2hfaW5zbnMocC0+YWRkciwgMSk7CiB9CiAKKy8qCisgKiBUaGUgYWN0dWFsIGRpc2FybWluZyBpcyBkb25lIGhlcmUgb24gZWFjaCBDUFUgYW5kIHN5bmNocm9uaXplZCB1c2luZworICogc3RvcF9tYWNoaW5lLiBUaGlzIHN5bmNocm9uaXphdGlvbiBpcyBuZWNlc3Nhcnkgb24gU01QIHRvIGF2b2lkIHJlbW92aW5nCisgKiBhIHByb2JlIGJldHdlZW4gdGhlIG1vbWVudCB0aGUgJ1VuZGVmaW5lZCBJbnN0cnVjdGlvbicgZXhjZXB0aW9uIGlzIHJhaXNlZAorICogYW5kIHRoZSBtb21lbnQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIHJlYWRzIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbiBmcm9tCisgKiBtZW1vcnkuCisgKi8KK2ludCBfX2twcm9iZXMgX19hcmNoX2Rpc2FybV9rcHJvYmUodm9pZCAqcCkKK3sKKwlzdHJ1Y3Qga3Byb2JlICprcCA9IHA7CisJKmtwLT5hZGRyID0ga3AtPm9wY29kZTsKKwlmbHVzaF9pbnNucyhrcC0+YWRkciwgMSk7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQgX19rcHJvYmVzIGFyY2hfZGlzYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCSpwLT5hZGRyID0gcC0+b3Bjb2RlOwotCWZsdXNoX2luc25zKHAtPmFkZHIsIDEpOworCXN0b3BfbWFjaGluZShfX2FyY2hfZGlzYXJtX2twcm9iZSwgcCwgJmNwdV9vbmxpbmVfbWFwKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA3OTBmYmVlLi4wZDk2ZDAxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMyOCw2ICszMjgsMTUgQEAKIH0KIAogLyoKKyAqIEZpbGwgaW4gdGhlIHRhc2sncyBlbGZyZWdzIHN0cnVjdHVyZSBmb3IgYSBjb3JlIGR1bXAuCisgKi8KK2ludCBkdW1wX3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QgKmVsZnJlZ3MpCit7CisJZWxmX2NvcmVfY29weV9yZWdzKGVsZnJlZ3MsIHRhc2tfcHRfcmVncyh0KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBmaWxsIGluIHRoZSBmcGUgc3RydWN0dXJlIGZvciBhIGNvcmUgZHVtcC4uLgogICovCiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdXNlcl9mcCAqZnApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IGQ0ZDRmNzcuLmM2YzU3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC00NSw2ICs0NSw3IEBACiAKICNpbmNsdWRlICJjb21wYXQuaCIKICNpbmNsdWRlICJhdGFncy5oIgorI2luY2x1ZGUgInRjbS5oIgogCiAjaWZuZGVmIE1FTV9TSVpFCiAjZGVmaW5lIE1FTV9TSVpFCSgxNioxMDI0KjEwMjQpCkBAIC03NDksNiArNzUwLDcgQEAKICNlbmRpZgogCiAJY3B1X2luaXQoKTsKKwl0Y21faW5pdCgpOwogCiAJLyoKIAkgKiBTZXQgdXAgdmFyaW91cyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcG9pbnRlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCAxNDIzYTM0Li4yYTU3M2Q0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBsaW51eC9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgUnVzc2VsbCBLaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yOSw2ICsyOSw3IEBACiAgKi8KICNkZWZpbmUgU1dJX1NZU19TSUdSRVRVUk4JKDB4ZWYwMDAwMDB8KF9fTlJfc2lncmV0dXJuKXwoX19OUl9PQUJJX1NZU0NBTExfQkFTRSkpCiAjZGVmaW5lIFNXSV9TWVNfUlRfU0lHUkVUVVJOCSgweGVmMDAwMDAwfChfX05SX3J0X3NpZ3JldHVybil8KF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UpKQorI2RlZmluZSBTV0lfU1lTX1JFU1RBUlQJCSgweGVmMDAwMDAwfF9fTlJfcmVzdGFydF9zeXNjYWxsfF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UpCiAKIC8qCiAgKiBXaXRoIEVBQkksIHRoZSBzeXNjYWxsIG51bWJlciBoYXMgdG8gYmUgbG9hZGVkIGludG8gcjcuCkBAIC00OSw2ICs1MCwxOCBAQAogfTsKIAogLyoKKyAqIEVpdGhlciB3ZSBzdXBwb3J0IE9BQkkgb25seSwgb3Igd2UgaGF2ZSBFQUJJIHdpdGggdGhlIE9BQkkKKyAqIGNvbXBhdCBsYXllciBlbmFibGVkLiAgSW4gdGhlIGxhdGVyIGNhc2Ugd2UgZG9uJ3Qga25vdyBpZgorICogdXNlciBzcGFjZSBpcyBFQUJJIG9yIG5vdCwgYW5kIGlmIG5vdCB3ZSBtdXN0IG5vdCBjbG9iYmVyIHI3LgorICogQWx3YXlzIHVzaW5nIHRoZSBPQUJJIHN5c2NhbGwgc29sdmVzIHRoYXQgaXNzdWUgYW5kIHdvcmtzIGZvcgorICogYWxsIHRob3NlIGNhc2VzLgorICovCitjb25zdCB1bnNpZ25lZCBsb25nIHN5c2NhbGxfcmVzdGFydF9jb2RlWzJdID0geworCVNXSV9TWVNfUkVTVEFSVCwJLyogc3dpCV9fTlJfcmVzdGFydF9zeXNjYWxsICovCisJMHhlNDlkZjAwNCwJCS8qIGxkcglwYywgW3NwXSwgIzQgKi8KK307CisKKy8qCiAgKiBhdG9taWNhbGx5IHN3YXAgaW4gdGhlIG5ldyBzaWduYWwgbWFzaywgYW5kIHdhaXQgZm9yIGEgc2lnbmFsLgogICovCiBhc21saW5rYWdlIGludCBzeXNfc2lnc3VzcGVuZChpbnQgcmVzdGFydCwgdW5zaWduZWQgbG9uZyBvbGRtYXNrLCBvbGRfc2lnc2V0X3QgbWFzaykKQEAgLTY0NSwzMiArNjU4LDEyIEBACiAJCQkJcmVncy0+QVJNX3BjIC09IDQ7CiAjZWxzZQogCQkJCXUzMiBfX3VzZXIgKnVzcDsKLQkJCQl1MzIgc3dpdmFsID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CiAKLQkJCQlyZWdzLT5BUk1fc3AgLT0gMTI7CisJCQkJcmVncy0+QVJNX3NwIC09IDQ7CiAJCQkJdXNwID0gKHUzMiBfX3VzZXIgKilyZWdzLT5BUk1fc3A7CiAKLQkJCQkvKgotCQkJCSAqIEVpdGhlciB3ZSBzdXBwb3J0cyBPQUJJIG9ubHksIG9yIHdlIGhhdmUKLQkJCQkgKiBFQUJJIHdpdGggdGhlIE9BQkkgY29tcGF0IGxheWVyIGVuYWJsZWQuCi0JCQkJICogSW4gdGhlIGxhdGVyIGNhc2Ugd2UgZG9uJ3Qga25vdyBpZiB1c2VyCi0JCQkJICogc3BhY2UgaXMgRUFCSSBvciBub3QsIGFuZCBpZiBub3Qgd2UgbXVzdAotCQkJCSAqIG5vdCBjbG9iYmVyIHI3LiAgQWx3YXlzIHVzaW5nIHRoZSBPQUJJCi0JCQkJICogc3lzY2FsbCBzb2x2ZXMgdGhhdCBpc3N1ZSBhbmQgd29ya3MgZm9yCi0JCQkJICogYWxsIHRob3NlIGNhc2VzLgotCQkJCSAqLwotCQkJCXN3aXZhbCA9IHN3aXZhbCAtIF9fTlJfU1lTQ0FMTF9CQVNFICsgX19OUl9PQUJJX1NZU0NBTExfQkFTRTsKLQotCQkJCXB1dF91c2VyKHJlZ3MtPkFSTV9wYywgJnVzcFswXSk7Ci0JCQkJLyogc3dpIF9fTlJfcmVzdGFydF9zeXNjYWxsICovCi0JCQkJcHV0X3VzZXIoMHhlZjAwMDAwMCB8IHN3aXZhbCwgJnVzcFsxXSk7Ci0JCQkJLyogbGRyCXBjLCBbc3BdLCAjMTIgKi8KLQkJCQlwdXRfdXNlcigweGU0OWRmMDBjLCAmdXNwWzJdKTsKLQotCQkJCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyl1c3AsCi0JCQkJCQkgICAodW5zaWduZWQgbG9uZykodXNwICsgMykpOwotCi0JCQkJcmVncy0+QVJNX3BjID0gcmVncy0+QVJNX3NwICsgNDsKKwkJCQlwdXRfdXNlcihyZWdzLT5BUk1fcGMsIHVzcCk7CisJCQkJcmVncy0+QVJNX3BjID0gS0VSTl9SRVNUQVJUX0NPREU7CiAjZW5kaWYKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCmluZGV4IDI3YmVlY2UuLjZmY2ZlODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuaAorKysgYi9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmgKQEAgLTEsMTIgKzEsMTQgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNSBSdXNzZWxsIEtpbmcuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgUnVzc2VsbCBLaW5nLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNkZWZpbmUgS0VSTl9TSUdSRVRVUk5fQ09ERQkoQ09ORklHX1ZFQ1RPUlNfQkFTRSArIDB4MDAwMDA1MDApCisjZGVmaW5lIEtFUk5fUkVTVEFSVF9DT0RFCShLRVJOX1NJR1JFVFVSTl9DT0RFICsgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpCiAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHNpZ3JldHVybl9jb2Rlc1s3XTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIHN5c2NhbGxfcmVzdGFydF9jb2RlWzJdOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IGUwZDMyNzcuLjU3MTYyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc21wX3BsYXQuaD4KIAogLyoKICAqIGFzIGZyb20gMi41LCBrZXJuZWxzIG5vIGxvbmdlciBoYXZlIGFuIGluaXRfdGFza3Mgc3RydWN0dXJlCkBAIC0xNTMsNyArMTU0LDcgQEAKIC8qCiAgKiBfX2NwdV9kaXNhYmxlIHJ1bnMgb24gdGhlIHByb2Nlc3NvciB0byBiZSBzaHV0ZG93bi4KICAqLwotaW50IF9fY3B1ZXhpdCBfX2NwdV9kaXNhYmxlKHZvaWQpCitpbnQgX19jcHVfZGlzYWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwpAQCAtMjAwLDcgKzIwMSw3IEBACiAgKiBjYWxsZWQgb24gdGhlIHRocmVhZCB3aGljaCBpcyBhc2tpbmcgZm9yIGEgQ1BVIHRvIGJlIHNodXRkb3duIC0KICAqIHdhaXRzIHVudGlsIHNodXRkb3duIGhhcyBjb21wbGV0ZWQsIG9yIGl0IGlzIHRpbWVkIG91dC4KICAqLwotdm9pZCBfX2NwdWV4aXQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCWlmICghcGxhdGZvcm1fY3B1X2tpbGwoY3B1KSkKIAkJcHJpbnRrKCJDUFUldTogdW5hYmxlIHRvIGtpbGxcbiIsIGNwdSk7CkBAIC0yMTQsNyArMjE1LDcgQEAKICAqIG9mIHRoZSBvdGhlciBob3RwbHVnLWNwdSBjYXBhYmxlIGNvcmVzLCBzbyBwcmVzdW1hYmx5IGNvbWluZwogICogb3V0IG9mIGlkbGUgZml4ZXMgdGhpcy4KICAqLwotdm9pZCBfX2NwdWV4aXQgY3B1X2RpZSh2b2lkKQordm9pZCBfX3JlZiBjcHVfZGllKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtNTg2LDEyICs1ODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGFfZW5kOwogfTsKIAotLyogYWxsIFNNUCBjb25maWd1cmF0aW9ucyBoYXZlIHRoZSBleHRlbmRlZCBDUFVJRCByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRsYl9vcHNfbmVlZF9icm9hZGNhc3Qodm9pZCkKLXsKLQlyZXR1cm4gKChyZWFkX2NwdWlkX2V4dChDUFVJRF9FWFRfTU1GUjMpID4+IDEyKSAmIDB4ZikgPCAyOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgaXBpX2ZsdXNoX3RsYl9hbGwodm9pZCAqaWdub3JlZCkKIHsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwppbmRleCBkMzgzMWY2Li45YWI0MTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKQEAgLTM3LDYgKzM3LDEwIEBACiAJdTMyIHNjdV9jdHJsOwogCiAJc2N1X2N0cmwgPSBfX3Jhd19yZWFkbChzY3VfYmFzZSArIFNDVV9DVFJMKTsKKwkvKiBhbHJlYWR5IGVuYWJsZWQ/ICovCisJaWYgKHNjdV9jdHJsICYgMSkKKwkJcmV0dXJuOworCiAJc2N1X2N0cmwgfD0gMTsKIAlfX3Jhd193cml0ZWwoc2N1X2N0cmwsIHNjdV9iYXNlICsgU0NVX0NUUkwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwppbmRleCBkOGM4OGM2Li5hNzNhMzRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKQEAgLTE2NiwxMCArMTY2LDEyIEBACiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNsayk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC8qCiAgKiB0YWtlIGEgbG9jYWwgdGltZXIgZG93bgogICovCi12b2lkIF9fY3B1ZXhpdCB0d2RfdGltZXJfc3RvcCh2b2lkKQordm9pZCB0d2RfdGltZXJfc3RvcCh2b2lkKQogewogCV9fcmF3X3dyaXRlbCgwLCB0d2RfYmFzZSArIFRXRF9USU1FUl9DT05UUk9MKTsKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RjbS5jIGIvYXJjaC9hcm0va2VybmVsL3RjbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9rZXJuZWwvdGNtLmMKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+IC8qIG1lbWNweSAqLworI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIFBBR0VfU0hJRlQgKi8KKyNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisjaW5jbHVkZSAidGNtLmgiCisKKy8qIFNjcmVhbSBhbmQgd2FybiBhYm91dCBtaXN1c2UgKi8KKyNpZiAhZGVmaW5lZChJVENNX09GRlNFVCkgfHwgIWRlZmluZWQoSVRDTV9FTkQpIHx8IFwKKyAgICAhZGVmaW5lZChEVENNX09GRlNFVCkgfHwgIWRlZmluZWQoRFRDTV9FTkQpCisjZXJyb3IgIlRDTSBzdXBwb3J0IHNlbGVjdGVkIGJ1dCBvZmZzZXRzIG5vdCBkZWZpbmVkISIKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGdlbl9wb29sICp0Y21fcG9vbDsKKworLyogVENNIHNlY3Rpb24gZGVmaW5pdGlvbnMgZnJvbSB0aGUgbGlua2VyICovCitleHRlcm4gY2hhciBfX2l0Y21fc3RhcnQsIF9fc2l0Y21fdGV4dCwgX19laXRjbV90ZXh0OworZXh0ZXJuIGNoYXIgX19kdGNtX3N0YXJ0LCBfX3NkdGNtX2RhdGEsIF9fZWR0Y21fZGF0YTsKKworLyoKKyAqIFRDTSBtZW1vcnkgcmVzb3VyY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZHRjbV9yZXMgPSB7CisJLm5hbWUgPSAiRFRDTSBSQU0iLAorCS5zdGFydCA9IERUQ01fT0ZGU0VULAorCS5lbmQgPSBEVENNX0VORCwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpdGNtX3JlcyA9IHsKKwkubmFtZSA9ICJJVENNIFJBTSIsCisJLnN0YXJ0ID0gSVRDTV9PRkZTRVQsCisJLmVuZCA9IElUQ01fRU5ELAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGR0Y21faW9tYXBbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBEVENNX09GRlNFVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKERUQ01fT0ZGU0VUKSwKKwkJLmxlbmd0aAkJPSAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpLAorCQkudHlwZQkJPSBNVF9VTkNBQ0hFRAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaXRjbV9pb21hcFtdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IElUQ01fT0ZGU0VULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oSVRDTV9PRkZTRVQpLAorCQkubGVuZ3RoCQk9IChJVENNX0VORCAtIElUQ01fT0ZGU0VUICsgMSksCisJCS50eXBlCQk9IE1UX1VOQ0FDSEVECisJfQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgY2h1bmsgb2YgVENNIG1lbW9yeQorICovCit2b2lkICp0Y21fYWxsb2Moc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJaWYgKCF0Y21fcG9vbCkKKwkJcmV0dXJuIE5VTEw7CisKKwl2YWRkciA9IGdlbl9wb29sX2FsbG9jKHRjbV9wb29sLCBsZW4pOworCWlmICghdmFkZHIpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICh2b2lkICopIHZhZGRyOworfQorRVhQT1JUX1NZTUJPTCh0Y21fYWxsb2MpOworCisvKgorICogRnJlZSBhIGNodW5rIG9mIFRDTSBtZW1vcnkKKyAqLwordm9pZCB0Y21fZnJlZSh2b2lkICphZGRyLCBzaXplX3QgbGVuKQoreworCWdlbl9wb29sX2ZyZWUodGNtX3Bvb2wsICh1bnNpZ25lZCBsb25nKSBhZGRyLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTCh0Y21fZnJlZSk7CisKKworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3RjbV9iYW5rKHU4IHR5cGUsIHUzMiBvZmZzZXQsIHUzMiBleHBlY3RlZF9zaXplKQoreworCWNvbnN0IGludCB0Y21fc2l6ZXNbMTZdID0geyAwLCAtMSwgLTEsIDQsIDgsIDE2LCAzMiwgNjQsIDEyOCwKKwkJCQkgICAgMjU2LCA1MTIsIDEwMjQsIC0xLCAtMSwgLTEsIC0xIH07CisJdTMyIHRjbV9yZWdpb247CisJaW50IHRjbV9zaXplOworCisJLyogUmVhZCB0aGUgc3BlY2lhbCBUQ00gcmVnaW9uIHJlZ2lzdGVyIGM5LCAwICovCisJaWYgKCF0eXBlKQorCQlhc20oIm1yYwlwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6ICI9ciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibXJjCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogIj1yIiAodGNtX3JlZ2lvbikpOworCisJdGNtX3NpemUgPSB0Y21fc2l6ZXNbKHRjbV9yZWdpb24gPj4gMikgJiAweDBmXTsKKwlpZiAodGNtX3NpemUgPCAwKSB7CisJCXByX2VycigiQ1BVOiAlc1RDTSBvZiB1bmtub3duIHNpemUhXG4iLAorCQkJdHlwZSA/ICJJIiA6ICJEIik7CisJfSBlbHNlIHsKKwkJcHJfaW5mbygiQ1BVOiBmb3VuZCAlc1RDTSAlZGsgQCAlMDh4LCAlc2VuYWJsZWRcbiIsCisJCQl0eXBlID8gIkkiIDogIkQiLAorCQkJdGNtX3NpemUsCisJCQkodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSwKKwkJCSh0Y21fcmVnaW9uICYgMSkgPyAiIiA6ICJub3QgIik7CisJfQorCisJaWYgKHRjbV9zaXplICE9IGV4cGVjdGVkX3NpemUpIHsKKwkJcHJfY3JpdCgiQ1BVOiAlc1RDTSB3YXMgZGV0ZWN0ZWQgJWRrIGJ1dCBleHBlY3RlZCAlZGshXG4iLAorCQkgICAgICAgdHlwZSA/ICJJIiA6ICJEIiwKKwkJICAgICAgIHRjbV9zaXplLAorCQkgICAgICAgZXhwZWN0ZWRfc2l6ZSk7CisJCS8qIEFkanVzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZT8gd2hhdCBjYW4gd2UgZG8uLi4gKi8KKwl9CisKKwkvKiBGb3JjZSBtb3ZlIHRoZSBUQ00gYmFuayB0byB3aGVyZSB3ZSB3YW50IGl0LCBlbmFibGUgKi8KKwl0Y21fcmVnaW9uID0gb2Zmc2V0IHwgKHRjbV9yZWdpb24gJiAweDAwMDAwZmZlVSkgfCAxOworCisJaWYgKCF0eXBlKQorCQlhc20oIm1jcglwMTUsIDAsICUwLCBjOSwgYzEsIDAiCisJCSAgICA6IC8qIE5vIG91dHB1dCBvcGVyYW5kcyAqLworCQkgICAgOiAiciIgKHRjbV9yZWdpb24pKTsKKwllbHNlCisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM5LCBjMSwgMSIKKwkJICAgIDogLyogTm8gb3V0cHV0IG9wZXJhbmRzICovCisJCSAgICA6ICJyIiAodGNtX3JlZ2lvbikpOworCisJcHJfZGVidWcoIkNQVTogbW92ZWQgJXNUQ00gJWRrIHRvICUwOHgsIGVuYWJsZWRcbiIsCisJCSB0eXBlID8gIkkiIDogIkQiLAorCQkgdGNtX3NpemUsCisJCSAodGNtX3JlZ2lvbiAmIDB4ZmZmZmYwMDBVKSk7Cit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBUQ00gbWVtb3J5CisgKi8KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCWNoYXIgKnN0YXJ0OworCWNoYXIgKmVuZDsKKwljaGFyICpyYW07CisKKwkvKiBTZXR1cCBEVENNIGlmIHByZXNlbnQgKi8KKwlpZiAodGNtX3N0YXR1cyAmICgxIDw8IDE2KSkgeworCQlzZXR1cF90Y21fYmFuaygwLCBEVENNX09GRlNFVCwKKwkJCSAgICAgICAoRFRDTV9FTkQgLSBEVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZkdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChkdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBkYXRhIGZyb20gUkFNIHRvIERUQ00gKi8KKwkJc3RhcnQgPSAmX19zZHRjbV9kYXRhOworCQllbmQgICA9ICZfX2VkdGNtX2RhdGE7CisJCXJhbSAgID0gJl9fZHRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBEVENNOiBjb3BpZWQgZGF0YSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KKworCS8qIFNldHVwIElUQ00gaWYgcHJlc2VudCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlzZXR1cF90Y21fYmFuaygxLCBJVENNX09GRlNFVCwKKwkJCSAgICAgICAoSVRDTV9FTkQgLSBJVENNX09GRlNFVCArIDEpID4+IDEwKTsKKwkJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZpdGNtX3Jlcyk7CisJCWlvdGFibGVfaW5pdChpdGNtX2lvbWFwLCAxKTsKKwkJLyogQ29weSBjb2RlIGZyb20gUkFNIHRvIElUQ00gKi8KKwkJc3RhcnQgPSAmX19zaXRjbV90ZXh0OworCQllbmQgICA9ICZfX2VpdGNtX3RleHQ7CisJCXJhbSAgID0gJl9faXRjbV9zdGFydDsKKwkJbWVtY3B5KHN0YXJ0LCByYW0sIChlbmQtc3RhcnQpKTsKKwkJcHJfZGVidWcoIkNQVSBJVENNOiBjb3BpZWQgY29kZSBmcm9tICVwIC0gJXBcbiIsIHN0YXJ0LCBlbmQpOworCX0KK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyB0aGUgVENNIG1lbW9yeSBwb29sIGFuZCBoYXMgdG8gYmUgZG9uZSBsYXRlciwKKyAqIGR1cmluZyB0aGUgY29yZV9pbml0aWNhbGxzLCBzaW5jZSB0aGUgYWxsb2NhdG9yIGlzIG5vdCB5ZXQKKyAqIHVwIGFuZCBydW5uaW5nIHdoZW4gdGhlIGZpcnN0IGluaXRpYWxpemF0aW9uIHJ1bnMuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3RjbV9wb29sKHZvaWQpCit7CisJdTMyIHRjbV9zdGF0dXMgPSByZWFkX2NwdWlkX3RjbXN0YXR1cygpOworCXUzMiBkdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19lZHRjbV9kYXRhOworCXUzMiBpdGNtX3Bvb2xfc3RhcnQgPSAodTMyKSAmX19laXRjbV90ZXh0OworCWludCByZXQ7CisKKwkvKgorCSAqIFNldCB1cCBtYWxsb2MgcG9vbCwgMl4yID0gNCBieXRlcyBncmFudWxhcml0eSBzaW5jZQorCSAqIHRoZSBUQ00gaXMgc29tZXRpbWVzIGp1c3QgNCBLaUIuIE5COiBwYWdlcyBhbmQgY2FjaGUKKwkgKiBsaW5lIGFsaWdubWVudHMgZG9lcyBub3QgbWF0dGVyIGluIFRDTSEKKwkgKi8KKwl0Y21fcG9vbCA9IGdlbl9wb29sX2NyZWF0ZSgyLCAtMSk7CisKKwlwcl9kZWJ1ZygiU2V0dGluZyB1cCBUQ00gbWVtb3J5IHBvb2xcbiIpOworCisJLyogQWRkIHRoZSByZXN0IG9mIERUQ00gdG8gdGhlIFRDTSBwb29sICovCisJaWYgKHRjbV9zdGF0dXMgJiAoMSA8PCAxNikpIHsKKwkJaWYgKGR0Y21fcG9vbF9zdGFydCA8IERUQ01fRU5EKSB7CisJCQlyZXQgPSBnZW5fcG9vbF9hZGQodGNtX3Bvb2wsIGR0Y21fcG9vbF9zdGFydCwKKwkJCQkJICAgRFRDTV9FTkQgLSBkdGNtX3Bvb2xfc3RhcnQgKyAxLCAtMSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJfZXJyKCJDUFUgRFRDTTogY291bGQgbm90IGFkZCBEVENNICIgXAorCQkJCSAgICAgICAicmVtYWluZGVyIHRvIHBvb2whXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJcHJfZGVidWcoIkNQVSBEVENNOiBBZGRlZCAlMDh4IGJ5dGVzIEAgJTA4eCB0byAiIFwKKwkJCQkgInRoZSBUQ00gbWVtb3J5IHBvb2xcbiIsCisJCQkJIERUQ01fRU5EIC0gZHRjbV9wb29sX3N0YXJ0ICsgMSwKKwkJCQkgZHRjbV9wb29sX3N0YXJ0KTsKKwkJfQorCX0KKworCS8qIEFkZCB0aGUgcmVzdCBvZiBJVENNIHRvIHRoZSBUQ00gcG9vbCAqLworCWlmICh0Y21fc3RhdHVzICYgMSkgeworCQlpZiAoaXRjbV9wb29sX3N0YXJ0IDwgSVRDTV9FTkQpIHsKKwkJCXJldCA9IGdlbl9wb29sX2FkZCh0Y21fcG9vbCwgaXRjbV9wb29sX3N0YXJ0LAorCQkJCQkgICBJVENNX0VORCAtIGl0Y21fcG9vbF9zdGFydCArIDEsIC0xKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcl9lcnIoIkNQVSBJVENNOiBjb3VsZCBub3QgYWRkIElUQ00gIiBcCisJCQkJICAgICAgICJyZW1haW5kZXIgdG8gcG9vbCFcbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCQlwcl9kZWJ1ZygiQ1BVIElUQ006IEFkZGVkICUwOHggYnl0ZXMgQCAlMDh4IHRvICIgXAorCQkJCSAidGhlIFRDTSBtZW1vcnkgcG9vbFxuIiwKKwkJCQkgSVRDTV9FTkQgLSBpdGNtX3Bvb2xfc3RhcnQgKyAxLAorCQkJCSBpdGNtX3Bvb2xfc3RhcnQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKHNldHVwX3RjbV9wb29sKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90Y20uaCBiL2FyY2gvYXJtL2tlcm5lbC90Y20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDE1YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0va2VybmVsL3RjbS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUQ00gbWVtb3J5IGhhbmRsaW5nIGZvciBBUk0gc3lzdGVtcworICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogUmlja2FyZCBBbmRlcnNzb24gPHJpY2thcmQuYW5kZXJzc29uQHN0ZXJpY3Nzb24uY29tPgorICovCisKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KK3ZvaWQgX19pbml0IHRjbV9pbml0KHZvaWQpOworI2Vsc2UKKy8qIE5vIFRDTSBzdXBwb3J0LCBqdXN0IGJsYW5rIGlubGluZXMgdG8gYmUgb3B0aW1pemVkIG91dCAqLworaW5saW5lIHZvaWQgdGNtX2luaXQodm9pZCkKK3sKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKaW5kZXggNGNkYzRhMC4uZDM4Y2RmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggNTdlYjBmNi4uM2YzNjFhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IFJ1c3NlbGwgS2luZwogICogIEZyYWdtZW50cyB0aGF0IGFwcGVhciB0aGUgc2FtZSBhcyBsaW51eC9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgKEMpIExpbnVzIFRvcnZhbGRzCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ1LDIxICs0NSwyMSBAQAogX19zZXR1cCgidXNlcl9kZWJ1Zz0iLCB1c2VyX2RlYnVnX3NldHVwKTsKICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLCB1bnNpZ25lZCBsb25nIHRvcCk7CitzdGF0aWMgdm9pZCBkdW1wX21lbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAKIHZvaWQgZHVtcF9iYWNrdHJhY2VfZW50cnkodW5zaWduZWQgbG9uZyB3aGVyZSwgdW5zaWduZWQgbG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIGZyYW1lKQogewogI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCXByaW50aygiWzwlMDhseD5dICIsIHdoZXJlKTsKLQlwcmludF9zeW1ib2woIiglcykgIiwgd2hlcmUpOwotCXByaW50aygiZnJvbSBbPCUwOGx4Pl0gIiwgZnJvbSk7Ci0JcHJpbnRfc3ltYm9sKCIoJXMpXG4iLCBmcm9tKTsKKwljaGFyIHN5bTFbS1NZTV9TWU1CT0xfTEVOXSwgc3ltMltLU1lNX1NZTUJPTF9MRU5dOworCXNwcmludF9zeW1ib2woc3ltMSwgd2hlcmUpOworCXNwcmludF9zeW1ib2woc3ltMiwgZnJvbSk7CisJcHJpbnRrKCJbPCUwOGx4Pl0gKCVzKSBmcm9tIFs8JTA4bHg+XSAoJXMpXG4iLCB3aGVyZSwgc3ltMSwgZnJvbSwgc3ltMik7CiAjZWxzZQogCXByaW50aygiRnVuY3Rpb24gZW50ZXJlZCBhdCBbPCUwOGx4Pl0gZnJvbSBbPCUwOGx4Pl1cbiIsIHdoZXJlLCBmcm9tKTsKICNlbmRpZgogCiAJaWYgKGluX2V4Y2VwdGlvbl90ZXh0KHdoZXJlKSkKLQkJZHVtcF9tZW0oIkV4Y2VwdGlvbiBzdGFjayIsIGZyYW1lICsgNCwgZnJhbWUgKyA0ICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJCWR1bXBfbWVtKCIiLCAiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIAogI2lmbmRlZiBDT05GSUdfQVJNX1VOV0lORApAQCAtODEsOSArODEsMTAgQEAKIC8qCiAgKiBEdW1wIG91dCB0aGUgY29udGVudHMgb2Ygc29tZSBtZW1vcnkgbmljZWx5Li4uCiAgKi8KLXN0YXRpYyB2b2lkIGR1bXBfbWVtKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyBib3R0b20sIHVuc2lnbmVkIGxvbmcgdG9wKQorc3RhdGljIHZvaWQgZHVtcF9tZW0oY29uc3QgY2hhciAqbHZsLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgYm90dG9tLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgdG9wKQogewotCXVuc2lnbmVkIGxvbmcgcCA9IGJvdHRvbSAmIH4zMTsKKwl1bnNpZ25lZCBsb25nIGZpcnN0OwogCW1tX3NlZ21lbnRfdCBmczsKIAlpbnQgaTsKIApAQCAtOTUsMzMgKzk2LDM3IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiJXMoMHglMDhseCB0byAweCUwOGx4KVxuIiwgc3RyLCBib3R0b20sIHRvcCk7CisJcHJpbnRrKCIlcyVzKDB4JTA4bHggdG8gMHglMDhseClcbiIsIGx2bCwgc3RyLCBib3R0b20sIHRvcCk7CiAKLQlmb3IgKHAgPSBib3R0b20gJiB+MzE7IHAgPCB0b3A7KSB7Ci0JCXByaW50aygiJTA0bHg6ICIsIHAgJiAweGZmZmYpOworCWZvciAoZmlyc3QgPSBib3R0b20gJiB+MzE7IGZpcnN0IDwgdG9wOyBmaXJzdCArPSAzMikgeworCQl1bnNpZ25lZCBsb25nIHA7CisJCWNoYXIgc3RyW3NpemVvZigiIDEyMzQ1Njc4IikgKiA4ICsgMV07CiAKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgcCArPSA0KSB7Ci0JCQl1bnNpZ25lZCBpbnQgdmFsOworCQltZW1zZXQoc3RyLCAnICcsIHNpemVvZihzdHIpKTsKKwkJc3RyW3NpemVvZihzdHIpIC0gMV0gPSAnXDAnOwogCi0JCQlpZiAocCA8IGJvdHRvbSB8fCBwID49IHRvcCkKLQkJCQlwcmludGsoIiAgICAgICAgICIpOwotCQkJZWxzZSB7Ci0JCQkJX19nZXRfdXNlcih2YWwsICh1bnNpZ25lZCBsb25nICopcCk7Ci0JCQkJcHJpbnRrKCIlMDh4ICIsIHZhbCk7CisJCWZvciAocCA9IGZpcnN0LCBpID0gMDsgaSA8IDggJiYgcCA8IHRvcDsgaSsrLCBwICs9IDQpIHsKKwkJCWlmIChwID49IGJvdHRvbSAmJiBwIDwgdG9wKSB7CisJCQkJdW5zaWduZWQgbG9uZyB2YWw7CisJCQkJaWYgKF9fZ2V0X3VzZXIodmFsLCAodW5zaWduZWQgbG9uZyAqKXApID09IDApCisJCQkJCXNwcmludGYoc3RyICsgaSAqIDksICIgJTA4bHgiLCB2YWwpOworCQkJCWVsc2UKKwkJCQkJc3ByaW50ZihzdHIgKyBpICogOSwgIiA/Pz8/Pz8/PyIpOwogCQkJfQogCQl9Ci0JCXByaW50ayAoIlxuIik7CisJCXByaW50aygiJXMlMDRseDolc1xuIiwgbHZsLCBmaXJzdCAmIDB4ZmZmZiwgc3RyKTsKIAl9CiAKIAlzZXRfZnMoZnMpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX2luc3RyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgZHVtcF9pbnN0cihjb25zdCBjaGFyICpsdmwsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9IGluc3RydWN0aW9uX3BvaW50ZXIocmVncyk7CiAJY29uc3QgaW50IHRodW1iID0gdGh1bWJfbW9kZShyZWdzKTsKIAljb25zdCBpbnQgd2lkdGggPSB0aHVtYiA/IDQgOiA4OwogCW1tX3NlZ21lbnRfdCBmczsKKwljaGFyIHN0cltzaXplb2YoIjAwMDAwMDAwICIpICogNSArIDIgKyAxXSwgKnAgPSBzdHI7CiAJaW50IGk7CiAKIAkvKgpAQCAtMTMyLDcgKzEzNyw2IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCXByaW50aygiQ29kZTogIik7CiAJZm9yIChpID0gLTQ7IGkgPCAxOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IHZhbCwgYmFkOwogCkBAIC0xNDIsMTMgKzE0NiwxNCBAQAogCQkJYmFkID0gX19nZXRfdXNlcih2YWwsICYoKHUzMiAqKWFkZHIpW2ldKTsKIAogCQlpZiAoIWJhZCkKLQkJCXByaW50ayhpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLCB3aWR0aCwgdmFsKTsKKwkJCXAgKz0gc3ByaW50ZihwLCBpID09IDAgPyAiKCUwKngpICIgOiAiJTAqeCAiLAorCQkJCQl3aWR0aCwgdmFsKTsKIAkJZWxzZSB7Ci0JCQlwcmludGsoImJhZCBQQyB2YWx1ZS4iKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAiYmFkIFBDIHZhbHVlIik7CiAJCQlicmVhazsKIAkJfQogCX0KLQlwcmludGsoIlxuIik7CisJcHJpbnRrKCIlc0NvZGU6ICVzXG4iLCBsdmwsIHN0cik7CiAKIAlzZXRfZnMoZnMpOwogfQpAQCAtMjI0LDE4ICsyMjksMTkgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IHRocmVhZC0+dGFzazsKIAlzdGF0aWMgaW50IGRpZV9jb3VudGVyOwogCi0JcHJpbnRrKCJJbnRlcm5hbCBlcnJvcjogJXM6ICV4IFsjJWRdIiBTX1BSRUVNUFQgU19TTVAgIlxuIiwKKwlwcmludGsoS0VSTl9FTUVSRyAiSW50ZXJuYWwgZXJyb3I6ICVzOiAleCBbIyVkXSIgU19QUkVFTVBUIFNfU01QICJcbiIsCiAJICAgICAgIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwlzeXNmc19wcmludGtfbGFzdF9maWxlKCk7CiAJcHJpbnRfbW9kdWxlcygpOwogCV9fc2hvd19yZWdzKHJlZ3MpOwotCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAweCVwKVxuIiwKLQkJdHNrLT5jb21tLCB0YXNrX3BpZF9ucih0c2spLCB0aHJlYWQgKyAxKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiUHJvY2VzcyAlLipzIChwaWQ6ICVkLCBzdGFjayBsaW1pdCA9IDB4JXApXG4iLAorCQlUQVNLX0NPTU1fTEVOLCB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykgfHwgaW5faW50ZXJydXB0KCkpIHsKLQkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCisJCWR1bXBfbWVtKEtFUk5fRU1FUkcsICJTdGFjazogIiwgcmVncy0+QVJNX3NwLAogCQkJIFRIUkVBRF9TSVpFICsgKHVuc2lnbmVkIGxvbmcpdGFza19zdGFja19wYWdlKHRzaykpOwogCQlkdW1wX2JhY2t0cmFjZShyZWdzLCB0c2spOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fRU1FUkcsIHJlZ3MpOwogCX0KIH0KIApAQCAtMjUwLDEzICsyNTYsMTQgQEAKIAogCW9vcHNfZW50ZXIoKTsKIAotCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKKwljb25zb2xlX3ZlcmJvc2UoKTsKIAlidXN0X3NwaW5sb2NrcygxKTsKIAlfX2RpZShzdHIsIGVyciwgdGhyZWFkLCByZWdzKTsKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChpbl9pbnRlcnJ1cHQoKSkKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiBpbiBpbnRlcnJ1cHQiKTsKQEAgLTI2NCw3ICsyNzEsNiBAQAogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAKLQlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCkBAIC0zNDksNyArMzU1LDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfVU5ERUZJTkVEKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzICglZCk6IHVuZGVmaW5lZCBpbnN0cnVjdGlvbjogcGM9JXBcbiIsCiAJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcGMpOwotCQlkdW1wX2luc3RyKHJlZ3MpOworCQlkdW1wX2luc3RyKEtFUk5fSU5GTywgcmVncyk7CiAJfQogI2VuZGlmCiAKQEAgLTQwMCw3ICs0MDYsNyBAQAogCWlmICh1c2VyX2RlYnVnICYgVURCR19TWVNDQUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiWyVkXSAlczogb2Jzb2xldGUgc3lzdGVtIGNhbGwgJTA4eC5cbiIsCiAJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbik7Ci0JCWR1bXBfaW5zdHIocmVncyk7CisJCWR1bXBfaW5zdHIoS0VSTl9FUlIsIHJlZ3MpOwogCX0KICNlbmRpZgogCkBAIC00MTgsMTIgKzQyNCwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBkb19jYWNoZV9vcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsYWdzKQogeworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+YWN0aXZlX21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCiAJaWYgKGVuZCA8IHN0YXJ0IHx8IGZsYWdzKQogCQlyZXR1cm47CiAKLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5hY3RpdmVfbW0sIHN0YXJ0KTsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKIAlpZiAodm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQpIHsKIAkJaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCkKIAkJCXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKQEAgLTQzMiw2ICs0NDAsNyBAQAogCiAJCWZsdXNoX2NhY2hlX3VzZXJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTsKIAl9CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKIH0KIAogLyoKQEAgLTUxOSw3ICs1MjgsNyBAQAogCSAqIF9fa3VzZXJfY21weGNoZyBjb2RlIGluIGVudHJ5LWFybXYuUyBzaG91bGQgYmUgYXdhcmUgb2YgaXRzCiAJICogZXhpc3RlbmNlLiAgRG9uJ3QgZXZlciB1c2UgdGhpcyBmcm9tIHVzZXIgY29kZS4KIAkgKi8KLQljYXNlIDB4ZmZmMDoKKwljYXNlIE5SKGNtcHhjaGcpOgogCWZvciAoOzspIHsKIAkJZXh0ZXJuIHZvaWQgZG9fRGF0YUFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTU2NCw3ICs1NzMsNyBAQAogCQkgICBpZiBub3QgaW1wbGVtZW50ZWQsIHJhdGhlciB0aGFuIHJhaXNpbmcgU0lHSUxMLiAgVGhpcwogCQkgICB3YXkgdGhlIGNhbGxpbmcgcHJvZ3JhbSBjYW4gZ3JhY2VmdWxseSBkZXRlcm1pbmUgd2hldGhlcgogCQkgICBhIGZlYXR1cmUgaXMgc3VwcG9ydGVkLiAgKi8KLQkJaWYgKG5vIDw9IDB4N2ZmKQorCQlpZiAoKG5vICYgMHhmZmZmKSA8PSAweDdmZikKIAkJCXJldHVybiAtRU5PU1lTOwogCQlicmVhazsKIAl9CkBAIC01NzYsNyArNTg1LDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfU1lTQ0FMTCkgewogCQlwcmludGsoIlslZF0gJXM6IGFybSBzeXNjYWxsICVkXG4iLAogCQkgICAgICAgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIG5vKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cigiIiwgcmVncyk7CiAJCWlmICh1c2VyX21vZGUocmVncykpIHsKIAkJCV9fc2hvd19yZWdzKHJlZ3MpOwogCQkJY19iYWNrdHJhY2UocmVncy0+QVJNX2ZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7CkBAIC02NTMsNyArNjYyLDcgQEAKIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfQkFEQUJPUlQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBiYWQgZGF0YSBhYm9ydDogY29kZSAlZCBpbnN0ciAweCUwOGx4XG4iLAogCQkJdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIGNvZGUsIGluc3RyKTsKLQkJZHVtcF9pbnN0cihyZWdzKTsKKwkJZHVtcF9pbnN0cihLRVJOX0VSUiwgcmVncyk7CiAJCXNob3dfcHRlKGN1cnJlbnQtPm1tLCBhZGRyKTsKIAl9CiAjZW5kaWYKQEAgLTc0Miw2ICs3NTEsOCBAQAogCSAqLwogCW1lbWNweSgodm9pZCAqKUtFUk5fU0lHUkVUVVJOX0NPREUsIHNpZ3JldHVybl9jb2RlcywKIAkgICAgICAgc2l6ZW9mKHNpZ3JldHVybl9jb2RlcykpOworCW1lbWNweSgodm9pZCAqKUtFUk5fUkVTVEFSVF9DT0RFLCBzeXNjYWxsX3Jlc3RhcnRfY29kZSwKKwkgICAgICAgc2l6ZW9mKHN5c2NhbGxfcmVzdGFydF9jb2RlKSk7CiAKIAlmbHVzaF9pY2FjaGVfcmFuZ2UodmVjdG9ycywgdmVjdG9ycyArIFBBR0VfU0laRSk7CiAJbW9kaWZ5X2RvbWFpbihET01BSU5fVVNFUiwgRE9NQUlOX0NMSUVOVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKaW5kZXggMzliYWYxMS4uNzg2YWMyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpAQCAtMjYsNiArMjYsMTUgQEAKICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5zdWJzZXQuc3dkZXYuYWJpL2luZGV4Lmh0bWwKICAqLwogCisjaWYgIWRlZmluZWQgKF9fQVJNX0VBQklfXykKKyN3YXJuaW5nIFlvdXIgY29tcGlsZXIgZG9lcyBub3QgaGF2ZSBFQUJJIHN1cHBvcnQuCisjd2FybmluZyAgICBBUk0gdW53aW5kIGlzIGtub3duIHRvIGNvbXBpbGUgb25seSB3aXRoIEVBQkkgY29tcGlsZXJzLgorI3dhcm5pbmcgICAgQ2hhbmdlIGNvbXBpbGVyIG9yIGRpc2FibGUgQVJNX1VOV0lORCBvcHRpb24uCisjZWxpZiAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8PSAyKQorI3dhcm5pbmcgWW91ciBjb21waWxlciBpcyB0b28gYnVnZ3k7IGl0IGlzIGtub3duIHRvIG5vdCBjb21waWxlIEFSTSB1bndpbmQgc3VwcG9ydC4KKyN3YXJuaW5nICAgIENoYW5nZSBjb21waWxlciBvciBkaXNhYmxlIEFSTV9VTldJTkQgb3B0aW9uLgorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDVjYzQ4MTIuLmFlY2Y4N2RmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTk5LDYgKzE5OSw2MyBAQAogCX0KIAlfZWRhdGFfbG9jID0gX19kYXRhX2xvYyArIFNJWkVPRiguZGF0YSk7CiAKKyNpZmRlZiBDT05GSUdfSEFWRV9UQ00KKyAgICAgICAgLyoKKwkgKiBXZSBhbGlnbiBldmVyeXRoaW5nIHRvIGEgcGFnZSBib3VuZGFyeSBzbyB3ZSBjYW4KKwkgKiBmcmVlIGl0IGFmdGVyIGluaXQgaGFzIGNvbW1lbmNlZCBhbmQgVENNIGNvbnRlbnRzIGhhdmUKKwkgKiBiZWVuIGNvcGllZCB0byBpdHMgZGVzdGluYXRpb24uCisJICovCisJLnRjbV9zdGFydCA6IHsKKwkJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJCV9fdGNtX3N0YXJ0ID0gLjsKKwkJX19pdGNtX3N0YXJ0ID0gLjsKKwl9CisKKwkvKgorCSAqIExpbmsgdGhlc2UgdG8gdGhlIElUQ00gUkFNCisJICogUHV0IFZNQSB0byB0aGUgVENNIGFkZHJlc3MgYW5kIExNQSB0byB0aGUgY29tbW9uIFJBTQorCSAqIGFuZCB3ZSdsbCB1cGxvYWQgdGhlIGNvbnRlbnRzIGZyb20gUkFNIHRvIFRDTSBhbmQgZnJlZQorCSAqIHRoZSB1c2VkIFJBTSBhZnRlciB0aGF0LgorCSAqLworCS50ZXh0X2l0Y20gSVRDTV9PRkZTRVQgOiBBVChfX2l0Y21fc3RhcnQpCisJeworCQlfX3NpdGNtX3RleHQgPSAuOworCQkqKC50Y20udGV4dCkKKwkJKigudGNtLnJvZGF0YSkKKwkJLiA9IEFMSUdOKDQpOworCQlfX2VpdGNtX3RleHQgPSAuOworCX0KKworCS8qCisJICogUmVzZXQgdGhlIGRvdCBwb2ludGVyLCB0aGlzIGlzIG5lZWRlZCB0byBjcmVhdGUgdGhlCisJICogcmVsYXRpdmUgX19kdGNtX3N0YXJ0IGJlbG93ICh0byBiZSB1c2VkIGFzIGV4dGVybiBpbiBjb2RlKS4KKwkgKi8KKwkuID0gQUREUigudGNtX3N0YXJ0KSArIFNJWkVPRigudGNtX3N0YXJ0KSArIFNJWkVPRigudGV4dF9pdGNtKTsKKworCS5kdGNtX3N0YXJ0IDogeworCQlfX2R0Y21fc3RhcnQgPSAuOworCX0KKworCS8qIFRPRE86IGFkZCByZW1haW5kZXIgb2YgSVRDTSBhcyB3ZWxsLCB0aGF0IGNhbiBiZSB1c2VkIGZvciBkYXRhISAqLworCS5kYXRhX2R0Y20gRFRDTV9PRkZTRVQgOiBBVChfX2R0Y21fc3RhcnQpCisJeworCQkuID0gQUxJR04oNCk7CisJCV9fc2R0Y21fZGF0YSA9IC47CisJCSooLnRjbS5kYXRhKQorCQkuID0gQUxJR04oNCk7CisJCV9fZWR0Y21fZGF0YSA9IC47CisJfQorCisJLyogUmVzZXQgdGhlIGRvdCBwb2ludGVyIG9yIHRoZSBsaW5rZXIgZ2V0cyBjb25mdXNlZCAqLworCS4gPSBBRERSKC5kdGNtX3N0YXJ0KSArIFNJWkVPRiguZGF0YV9kdGNtKTsKKworCS8qIEVuZCBtYXJrZXIgZm9yIGZyZWVpbmcgVENNIGNvcHkgaW4gbGlua2VkIG9iamVjdCAqLworCS50Y21fZW5kIDogQVQoQUREUiguZHRjbV9zdGFydCkgKyBTSVpFT0YoLmRhdGFfZHRjbSkpeworCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkJX190Y21fZW5kID0gLjsKKwl9CisjZW5kaWYKKwogCS5ic3MgOiB7CiAJCV9fYnNzX3N0YXJ0ID0gLjsJLyogQlNTCQkJCSovCiAJCSooLmJzcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUyBiL2FyY2gvYXJtL2xpYi9jb3B5X3BhZ2UuUwppbmRleCA2YWUwNGRiLi42ZWUyZjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY29weV9wYWdlLlMKKysrIGIvYXJjaC9hcm0vbGliL2NvcHlfcGFnZS5TCkBAIC0xMiw4ICsxMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAotI2RlZmluZSBDT1BZX0NPVU5UIChQQUdFX1NaLzY0IFBMRCggLTEgKSkKKyNkZWZpbmUgQ09QWV9DT1VOVCAoUEFHRV9TWiAvICgyICogTDFfQ0FDSEVfQllURVMpIFBMRCggLTEgKSkKIAogCQkudGV4dAogCQkuYWxpZ24JNQpAQCAtMjYsMTcgKzI3LDE2IEBACiBFTlRSWShjb3B5X3BhZ2UpCiAJCXN0bWZkCXNwISwge3I0LCBscn0JCQlACTIKIAlQTEQoCXBsZAlbcjEsICMwXQkJKQotCVBMRCgJcGxkCVtyMSwgIzMyXQkJKQorCVBMRCgJcGxkCVtyMSwgI0wxX0NBQ0hFX0JZVEVTXQkJKQogCQltb3YJcjIsICNDT1BZX0NPVU5UCQkJQAkxCiAJCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLTE6CVBMRCgJcGxkCVtyMSwgIzY0XQkJKQotCVBMRCgJcGxkCVtyMSwgIzk2XQkJKQotMjoJCXN0bWlhCXIwISwge3IzLCByNCwgaXAsIGxyfQkJQAk0Ci0JCWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0KzEKLQkJc3RtaWEJcjAhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQKLQkJbGRtaWEJcjEhLCB7cjMsIHI0LCBpcCwgbHJ9CQlACTQrMQorMToJUExEKAlwbGQJW3IxLCAjMiAqIEwxX0NBQ0hFX0JZVEVTXSkKKwlQTEQoCXBsZAlbcjEsICMzICogTDFfQ0FDSEVfQllURVNdKQorMjoKKwkucmVwdAkoMiAqIEwxX0NBQ0hFX0JZVEVTIC8gMTYgLSAxKQogCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAogCQlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAorCS5lbmRyCiAJCXN1YnMJcjIsIHIyLCAjMQkJCUAJMQogCQlzdG1pYQlyMCEsIHtyMywgcjQsIGlwLCBscn0JCUAJNAogCQlsZG1ndGlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQAk0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCmluZGV4IGUzNWQ1NGQuLjJmZDg4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnCkBAIC0yODksMTMgKzI4OSw2IEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyB0aGUgQWRlbmVvIE5lb2NvcmUgOTI2IGJvYXJkLgogCi1jb25maWcgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMKLQlib29sICJBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdCBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMiCi0JZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAotCSAgUmV2IEEgb3IgQiBtb2RpZmllZCBmb3IgMiBNTUMgU2xvdHMuCi0KIGVuZGlmCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzIyLDcgKzMxNSwxNiBAQAogCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IgogCWRlcGVuZHMgb24gQVJDSF9BVDkxU0FNOUcyMAogCWhlbHAKLQkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdC4KKwkgIFNlbGVjdCB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgQXRtZWwncyBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgdGhhdCBlbWJlZHMgb25seSBvbmUgU0QvTU1DIHNsb3QuCisKK2NvbmZpZyBNQUNIX0FUOTFTQU05RzIwRUtfMk1NQworCWJvb2wgIkF0bWVsIEFUOTFTQU05RzIwLUVLIEV2YWx1YXRpb24gS2l0IHdpdGggMiBTRC9NTUMgU2xvdHMiCisJZGVwZW5kcyBvbiBBUkNIX0FUOTFTQU05RzIwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSB1c2luZyBhbiBBdG1lbCBBVDkxU0FNOUcyMC1FSyBFdmFsdWF0aW9uIEtpdAorCSAgd2l0aCAyIFNEL01NQyBTbG90cy4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgQVQ5MVNBTTlHMjAtRUsgcmV2LiBDIGFuZAorCSAgb253YXJkcy4KIAogY29uZmlnIE1BQ0hfQ1BVOUcyMAogCWJvb2wgIkV1a3JlYSBDUFU5RzIwIGJvYXJkIgpAQCAtMzkyLDcgKzM5NCw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9BVE1FTF9CVVNXSURUSF8xNgogCWJvb2wgIkVuYWJsZSAxNi1iaXQgZGF0YSBidXMgaW50ZXJmYWNlIHRvIE5BTkQgZmxhc2giCi0JZGVwZW5kcyBvbiAoTUFDSF9BVDkxU0FNOTI2MEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjFFSyB8fCBNQUNIX0FUOTFTQU05RzEwRUsgfHwgTUFDSF9BVDkxU0FNOTI2M0VLIHx8IE1BQ0hfQVQ5MVNBTTlHMjBFSyB8fCBNQUNIX0FUOTFTQU05RzQ1RUtFUyB8fCBNQUNIX0FUOTFDQVA5QURLKQorCWRlcGVuZHMgb24gKE1BQ0hfQVQ5MVNBTTkyNjBFSyB8fCBNQUNIX0FUOTFTQU05MjYxRUsgfHwgTUFDSF9BVDkxU0FNOUcxMEVLIHx8IE1BQ0hfQVQ5MVNBTTkyNjNFSyB8fCBNQUNIX0FUOTFTQU05RzIwRUsgfHwgTUFDSF9BVDkxU0FNOUcyMEVLXzJNTUMgfHwgTUFDSF9BVDkxU0FNOUc0NUVLRVMgfHwgTUFDSF9BVDkxQ0FQOUFESykKIAloZWxwCiAJICBPbiBBVDkxU0FNOTI2eCBib2FyZHMgYm90aCB0eXBlcyBvZiBOQU5EIGZsYXNoIGNhbiBiZSBwcmVzZW50CiAJICAoOCBhbmQgMTYgYml0IGRhdGEgYnVzIHdpZHRoKS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MWNhcDlfZGV2aWNlcy5jCmluZGV4IDQxMmFhNDkuLmQxZjc3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxY2FwOV9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFjYXA5X2RldmljZXMuYwpAQCAtNzcxLDkgKzc3MSw5IEBACiAgKiAgQUM5NwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9BVDkxX0FDOTdfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1NORF9BVE1FTF9BQzk3QykgfHwgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDX01PRFVMRSkKIHN0YXRpYyB1NjQgYWM5N19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGFjOTdfZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSBhYzk3X2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWM5N19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC03ODksNyArNzg5LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFjYXA5X2FjOTdfZGV2aWNlID0gewotCS5uYW1lCQk9ICJhYzk3YyIsCisJLm5hbWUJCT0gImF0bWVsX2FjOTdjIiwKIAkuaWQJCT0gMSwKIAkuZGV2CQk9IHsKIAkJCQkuZG1hX21hc2sJCT0gJmFjOTdfZG1hbWFzaywKQEAgLTgwMCw3ICs4MDAsNyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCiB9OwogCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpCiB7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm47CkBAIC04MTgsNyArODE4LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFjYXA5X2FjOTdfZGV2aWNlKTsKIH0KICNlbHNlCi12b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhICpkYXRhKSB7fQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2FjOTcoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEpIHt9CiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05ZzQ1X2RldmljZXMuYwppbmRleCBkNzQ2ZTg2Li4zMzJiNzg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlnNDVfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOWc0NV9kZXZpY2VzLmMKQEAgLTI0LDExICsyNCw1OSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlnNDUuaD4KICNpbmNsdWRlIDxtYWNoL2F0OTFzYW05ZzQ1X21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSA4LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9ETUEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdF9oZG1hY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF0X2hkbWFjIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZoZG1hY19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmF0ZG1hX3BkYXRhLAorCX0sCisJLnJlc291cmNlCT0gaGRtYWNfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoZG1hY19yZXNvdXJjZXMpLAorfTsKKwordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpCit7CisJZG1hX2NhcF9zZXQoRE1BX01FTUNQWSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgYXRkbWFfcGRhdGEuY2FwX21hc2spOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXRfaGRtYWNfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfaGRtYWModm9pZCkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgVVNCIEhvc3QgKE9IQ0kpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC01NTAsNiArNTk4LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfQkFTRV9BQzk3QywKKwkJLmVuZAk9IEFUOTFTQU05RzQ1X0JBU0VfQUM5N0MgKyBTWl8xNksgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlHNDVfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOUc0NV9JRF9BQzk3QywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdG1lbF9hYzk3YyIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkJLmRtYV9tYXNrCQk9ICZhYzk3X2RtYW1hc2ssCisJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYWM5N19kYXRhLAorCX0sCisJLnJlc291cmNlCT0gYWM5N19yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFjOTdfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9hYzk3KHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQoreworCWlmICghZGF0YSkKKwkJcmV0dXJuOworCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ4LCAwKTsJLyogQUM5N0ZTICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ5LCAwKTsJLyogQUM5N0NLICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ3LCAwKTsJLyogQUM5N1RYICovCisJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEQ2LCAwKTsJLyogQUM5N1JYICovCisKKwkvKiByZXNldCAqLworCWlmIChkYXRhLT5yZXNldF9waW4pCisJCWF0OTFfc2V0X2dwaW9fb3V0cHV0KGRhdGEtPnJlc2V0X3BpbiwgMCk7CisKKwlhYzk3X2RhdGEgPSAqZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05ZzQ1X2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTczNSw3ICs4MzgsNyBAQAogICogIFdhdGNoZG9nCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVQ5MVNBTTlfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05X1dBVENIRE9HX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19BVDkxU0FNOVhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFTQU05WF9XQVRDSERPR19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOWc0NV93ZHRfZGV2aWNlID0gewogCS5uYW1lCQk9ICJhdDkxX3dkdCIsCiAJLmlkCQk9IC0xLApAQCAtMTIyMCw2ICsxMzIzLDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYXQ5MV9hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQogeworCWF0OTFfYWRkX2RldmljZV9oZG1hYygpOwogCWF0OTFfYWRkX2RldmljZV9ydGMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnR0KCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3dhdGNoZG9nKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTlybF9kZXZpY2VzLmMKaW5kZXggNzI4MTg2NS4uZDM0NWY1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05cmxfZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOXJsX2RldmljZXMuYwpAQCAtMjEsMTEgKzIxLDU3IEBACiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsLmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxc2FtOXJsX21hdHJpeC5oPgogI2luY2x1ZGUgPG1hY2gvYXQ5MXNhbTlfc21jLmg+CisjaW5jbHVkZSA8bWFjaC9hdF9oZG1hYy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSERNQUMgLSBBSEIgRE1BIENvbnRyb2xsZXIKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19BVF9IRE1BQykgfHwgZGVmaW5lZChDT05GSUdfQVRfSERNQUNfTU9EVUxFKQorc3RhdGljIHU2NCBoZG1hY19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RhdGljIHN0cnVjdCBhdF9kbWFfcGxhdGZvcm1fZGF0YSBhdGRtYV9wZGF0YSA9IHsKKwkubnJfY2hhbm5lbHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoZG1hY19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSwKKwkJLmVuZAk9IEFUOTFfQkFTRV9TWVMgKyBBVDkxX0RNQSArIFNaXzUxMiAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBBVDkxU0FNOVJMX0lEX0RNQSwKKwkJLmVuZAk9IEFUOTFTQU05UkxfSURfRE1BLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXRfaGRtYWNfZGV2aWNlID0geworCS5uYW1lCQk9ICJhdF9oZG1hYyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmaGRtYWNfZG1hbWFzaywKKwkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZhdGRtYV9wZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGhkbWFjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaGRtYWNfcmVzb3VyY2VzKSwKK307CisKK3ZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9oZG1hYyh2b2lkKQoreworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGF0ZG1hX3BkYXRhLmNhcF9tYXNrKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0X2hkbWFjX2RldmljZSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX2hkbWFjKHZvaWQpIHt9CisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBVU0IgSFMgRGV2aWNlIChHYWRnZXQpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0zOTgsNiArNDQ0LDYxIEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBBQzk3CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU05EX0FUTUVMX0FDOTdDKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfQVRNRUxfQUM5N0NfTU9EVUxFKQorc3RhdGljIHU2NCBhYzk3X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGFjOTdfZGF0YTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhYzk3X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDLAorCQkuZW5kCT0gQVQ5MVNBTTlSTF9CQVNFX0FDOTdDICsgU1pfMTZLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IEFUOTFTQU05UkxfSURfQUM5N0MsCisJCS5lbmQJPSBBVDkxU0FNOVJMX0lEX0FDOTdDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTlybF9hYzk3X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYXRtZWxfYWM5N2MiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkJCS5kbWFfbWFzawkJPSAmYWM5N19kbWFtYXNrLAorCQkJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCQkJLnBsYXRmb3JtX2RhdGEJCT0gJmFjOTdfZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGFjOTdfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhYzk3X3Jlc291cmNlcyksCit9OworCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkKK3sKKwlpZiAoIWRhdGEpCisJCXJldHVybjsKKworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMSwgMCk7CS8qIEFDOTdGUyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMiwgMCk7CS8qIEFDOTdDSyAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BEMywgMCk7CS8qIEFDOTdUWCAqLworCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BENCwgMCk7CS8qIEFDOTdSWCAqLworCisJLyogcmVzZXQgKi8KKwlpZiAoZGF0YS0+cmVzZXRfcGluKQorCQlhdDkxX3NldF9ncGlvX291dHB1dChkYXRhLT5yZXNldF9waW4sIDApOworCisJYWM5N19kYXRhID0gKmRhdGE7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOXJsX2FjOTdfZGV2aWNlKTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfYWM5NyhzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqZGF0YSkge30KKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiAgTENEIENvbnRyb2xsZXIKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTExMDMsNiArMTIwNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKIHsKKwlhdDkxX2FkZF9kZXZpY2VfaGRtYWMoKTsKIAlhdDkxX2FkZF9kZXZpY2VfcnRjKCk7CiAJYXQ5MV9hZGRfZGV2aWNlX3J0dCgpOwogCWF0OTFfYWRkX2RldmljZV93YXRjaGRvZygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1jYXA5YWRrLmMKaW5kZXggODNhMWEwZi4uZDY5NDA4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWNhcDlhZGsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtY2FwOWFkay5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIC8qCiAgKiBBQzk3CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRtZWxfYWM5N19kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0geworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGNhcDlhZGtfYWM5N19kYXRhID0gewogLy8JLnJlc2V0X3Bpbgk9IC4uLiBub3QgY29ubmVjdGVkCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLW5lb2NvcmU5MjYuYwppbmRleCA4YzBiNzFjLi43YzFlMzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtbmVvY29yZTkyNi5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1uZW9jb3JlOTI2LmMKQEAgLTM0MCw3ICszNDAsNyBAQAogLyoKICAqIEFDOTcKICAqLwotc3RhdGljIHN0cnVjdCBhdG1lbF9hYzk3X2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgbmVvY29yZTkyNl9hYzk3X2RhdGEgPSB7CiAJLnJlc2V0X3Bpbgk9IEFUOTFfUElOX1BBMTMsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay0yc2xvdC1tbWMuYwppbmRleCBhMjhlNTNmLi5hNDEwMmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLTJzbG90LW1tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWstMnNsb3QtbW1jLmMKQEAgLTkwLDcgKzkwLDcgQEAKICAqIFNQSSBkZXZpY2VzLgogICovCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVrX3NwaV9kZXZpY2VzW10gPSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkKKyNpZiAhKGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX0FUOTEpKQogCXsJLyogRGF0YUZsYXNoIGNoaXAgKi8KIAkJLm1vZGFsaWFzCT0gIm10ZF9kYXRhZmxhc2giLAogCQkuY2hpcF9zZWxlY3QJPSAxLApAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBNQUNCIEV0aGVybmV0IGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBla19tYWNiX2RhdGEgPSB7Ci0JLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMxMiwKKwkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjAsCiAJLmlzX3JtaWkJPSAxLAogfTsKIApAQCAtMTk0LDI0ICsxOTQsMjcgQEAKIAogLyoKICAqIE1DSSAoU0QvTU1DKQotICogZGV0X3BpbiBhbmQgd3BfcGluIGFyZSBub3QgY29ubmVjdGVkCisgKiB3cF9waW4gaXMgbm90IGNvbm5lY3RlZAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX0FUTUVMTUNJKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0lfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0gewogCS5zbG90WzBdID0gewogCQkuYnVzX3dpZHRoCT0gNCwKLQkJLmRldGVjdF9waW4JPSAtRU5PREVWLAorCQkuZGV0ZWN0X3Bpbgk9IEFUOTFfUElOX1BDMiwKIAkJLndwX3BpbgkJPSAtRU5PREVWLAogCX0sCiAJLnNsb3RbMV0gPSB7CiAJCS5idXNfd2lkdGgJPSA0LAotCQkuZGV0ZWN0X3Bpbgk9IC1FTk9ERVYsCisJCS5kZXRlY3RfcGluCT0gQVQ5MV9QSU5fUEM5LAogCQkud3BfcGluCQk9IC1FTk9ERVYsCiAJfSwKIAogfTsKICNlbHNlCi1zdGF0aWMgc3RydWN0IGFtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGVrX21tY19kYXRhID0geworc3RhdGljIHN0cnVjdCBhdDkxX21tY19kYXRhIF9faW5pdGRhdGEgZWtfbW1jX2RhdGEgPSB7CisJLnNsb3RfYgkJPSAxLAkvKiBPbmx5IG9uZSBzbG90IHNvIHVzZSBzbG90IEIgKi8KKwkud2lyZTQJCT0gMSwKKwkuZGV0X3Bpbgk9IEFUOTFfUElOX1BDOSwKIH07CiAjZW5kaWYKIApAQCAtMjIxLDEzICsyMjQsMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZWtfbGVkc1tdID0gewogCXsJLyogImJvdHRvbSIgbGVkLCBncmVlbiwgdXNlcmxlZDEgdG8gYmUgZGVmaW5lZCAqLwogCQkubmFtZQkJCT0gImRzNSIsCi0JCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjEyLAorCQkuZ3BpbwkJCT0gQVQ5MV9QSU5fUEI4LAogCQkuYWN0aXZlX2xvdwkJPSAxLAogCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAogCX0sCiAJewkvKiAicG93ZXIiIGxlZCwgeWVsbG93ICovCiAJCS5uYW1lCQkJPSAiZHMxIiwKLQkJLmdwaW8JCQk9IEFUOTFfUElOX1BCMTMsCisJCS5ncGlvCQkJPSBBVDkxX1BJTl9QQjksCiAJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKIAl9CiB9OwpAQCAtMjU0LDcgKzI1NywxMSBAQAogCS8qIEV0aGVybmV0ICovCiAJYXQ5MV9hZGRfZGV2aWNlX2V0aCgmZWtfbWFjYl9kYXRhKTsKIAkvKiBNTUMgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfQVRNRUxNQ0kpIHx8IGRlZmluZWQoQ09ORklHX01NQ19BVE1FTE1DSV9NT0RVTEUpCiAJYXQ5MV9hZGRfZGV2aWNlX21jaSgwLCAmZWtfbW1jX2RhdGEpOworI2Vsc2UKKwlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CisjZW5kaWYKIAkvKiBJMkMgKi8KIAlhdDkxX2FkZF9kZXZpY2VfaTJjKGVrX2kyY19kZXZpY2VzLCBBUlJBWV9TSVpFKGVrX2kyY19kZXZpY2VzKSk7CiAJLyogTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTltMTBnNDVlay5jCmluZGV4IGI4NTU4ZWEuLjY0YzM4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05bTEwZzQ1ZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOW0xMGc0NWVrLmMKQEAgLTMxMSw2ICszMTEsMTQgQEAKIAogCiAvKgorICogQUM5NworICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKKyAqLworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKK307CisKKworLyoKICAqIExFRHMgLi4uIHRoZXNlIGNvdWxkIGFsbCBiZSBQV00tZHJpdmVuLCBmb3IgdmFyaWFibGUgYnJpZ2h0bmVzcwogICovCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGVrX2xlZHNbXSA9IHsKQEAgLTM3Miw2ICszODAsOCBAQAogCWF0OTFfYWRkX2RldmljZV9sY2RjKCZla19sY2RjX2RhdGEpOwogCS8qIFB1c2ggQnV0dG9ucyAqLwogCWVrX2FkZF9kZXZpY2VfYnV0dG9ucygpOworCS8qIEFDOTcgKi8KKwlhdDkxX2FkZF9kZXZpY2VfYWM5NygmZWtfYWM5N19kYXRhKTsKIAkvKiBMRURzICovCiAJYXQ5MV9ncGlvX2xlZHMoZWtfbGVkcywgQVJSQVlfU0laRShla19sZWRzKSk7CiAJYXQ5MV9wd21fbGVkcyhla19wd21fbGVkLCBBUlJBWV9TSVpFKGVrX3B3bV9sZWQpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05cmxlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKaW5kZXggOTRmZmI1Yy4uYmQyOGU5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlybGVrLmMKQEAgLTIxMSw2ICsyMTEsMTQgQEAKIAogCiAvKgorICogQUM5NworICogcmVzZXRfcGluIGlzIG5vdCBjb25uZWN0ZWQ6IE5SU1QKKyAqLworc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIGVrX2FjOTdfZGF0YSA9IHsKK307CisKKworLyoKICAqIExFRHMKICAqLwogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBla19sZWRzW10gPSB7CkBAIC0yOTksNiArMzA3LDggQEAKIAlhdDkxX2FkZF9kZXZpY2VfbW1jKDAsICZla19tbWNfZGF0YSk7CiAJLyogTENEIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfbGNkYygmZWtfbGNkY19kYXRhKTsKKwkvKiBBQzk3ICovCisJYXQ5MV9hZGRfZGV2aWNlX2FjOTcoJmVrX2FjOTdfZGF0YSk7CiAJLyogVG91Y2ggU2NyZWVuIENvbnRyb2xsZXIgKi8KIAlhdDkxX2FkZF9kZXZpY2VfdHNhZGNjKCk7CiAJLyogTEVEcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggMzRhOTUwMi4uYzIyZGYzMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHMjAJMHgwMTk5MDVhMAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05Ukw2NAkweDAxOWIwM2EwCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDUJMHg4MTliMDVhMAorI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1TVJMCTB4ODE5YjA1YTIJLyogYWthIDlHNDUtRVMyICYgbm9uIEVTIGxvdHMgKi8KKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NUVTCTB4ODE5YjA1YTEJLyogOUc0NS1FUyAoRW5naW5lZXJpbmcgU2FtcGxlKSAqLwogI2RlZmluZSBBUkNIX0lEX0FUOTFDQVA5CTB4MDM5QTAzQTAKIAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05WEUxMjgJMHgzMjk5NzNhMApAQCAtNDEsNiArNDMsMTEgQEAKIAlyZXR1cm4gKGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpICYgfkFUOTFfQ0lEUl9WRVJTSU9OKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfY3B1X2Z1bGx5X2lkZW50aWZ5KHZvaWQpCit7CisJcmV0dXJuIGF0OTFfc3lzX3JlYWQoQVQ5MV9EQkdVX0NJRFIpOworfQorCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMQkweDAwMDAwMDAxCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOU0xMAkweDAwMDAwMDAyCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NQkweDAwMDAwMDA0CkBAIC0xMTgsOCArMTI1LDEwIEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxU0FNOUc0NQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05RzQ1KQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCShhdDkxX2NwdV9mdWxseV9pZGVudGlmeSgpID09IEFSQ0hfSURfQVQ5MVNBTTlHNDVFUykKICNlbHNlCiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCSgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxQ0FQOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9jb3JlLmMKaW5kZXggNDkyYzY0OS4uZTU5MGJiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvY29yZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPG1hY2gvY3NwL21tX2FkZHIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KIAogI2luY2x1ZGUgPGNmZ19nbG9iYWwuaD4KIApAQCAtMjczLDEyICsyNzEsMTIgQEAKIAkuaGFuZGxlciA9IGJjbXJpbmdfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMSh2b2lkKQorc3RhdGljIGN5Y2xlX3QgYmNtcmluZ19nZXRfY3ljbGVzX3RpbWVyMShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewogCXJldHVybiB+cmVhZGwoVElNRVIxX1ZBX0JBU0UgKyBUSU1FUl9WQUxVRSk7CiB9CiAKLXN0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjModm9pZCkKK3N0YXRpYyBjeWNsZV90IGJjbXJpbmdfZ2V0X2N5Y2xlc190aW1lcjMoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gfnJlYWRsKFRJTUVSM19WQV9CQVNFICsgVElNRVJfVkFMVUUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYmNtcmluZy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggY2RiZjkzYy4uMzhiMzcwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1iY21yaW5nL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWJjbXJpbmcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yOSw3ICsyOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjaGFyICpjbWQpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlwcmludGsoImFyY2hfcmVzZXQ6JWMgJXhcbiIsIG1vZGUsIGJjbXJpbmdfYXJjaF93YXJtX3JlYm9vdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1kbTM2NS1ldm0uYwppbmRleCBhMWQ1ZTdkLi41MmRkODA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtZG0zNjUtZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLWRtMzY1LWV2bS5jCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwppbmRleCBkNzI5MWM2Li45MTY3YzNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKQEAgLTE3LDEzICsxNywzMSBAQAogCWJvb2wgIjB4MDAwMDAwMDAgLSBTRENFMy9TeW5jQm9vdCIKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgRVA5M3h4IGJvYXJkcyB3aXRoIHRoZQotCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweDAwMDAwMDAwCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4MDAwMDAwMDAuCiAKIGNvbmZpZyBFUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQKIAlib29sICIweGMwMDAwMDAwIC0gU0RDRU8iCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKLQkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhjMDAwMDAwMAorCSAgZmlyc3QgU0RSQU0gYmFuayBhdCAweGMwMDAwMDAwLgorCitjb25maWcgRVA5M1hYX1NEQ0UxX1BIWVNfT0ZGU0VUCisJYm9vbCAiMHhkMDAwMDAwMCAtIFNEQ0UxIgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBFUDkzeHggYm9hcmRzIHdpdGggdGhlCisJICBmaXJzdCBTRFJBTSBiYW5rIGF0IDB4ZDAwMDAwMDAuCisKK2NvbmZpZyBFUDkzWFhfU0RDRTJfUEhZU19PRkZTRVQKKwlib29sICIweGUwMDAwMDAwIC0gU0RDRTIiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhlMDAwMDAwMC4KKworY29uZmlnIEVQOTNYWF9TRENFM19BU1lOQ19QSFlTX09GRlNFVAorCWJvb2wgIjB4ZjAwMDAwMDAgLSBTRENFMy9Bc3luY0Jvb3QiCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVQOTN4eCBib2FyZHMgd2l0aCB0aGUKKwkgIGZpcnN0IFNEUkFNIGJhbmsgYXQgMHhmMDAwMDAwMC4KIAogZW5kY2hvaWNlCiAKQEAgLTExMiwyOCArMTMwLDM2IEBACiAJYm9vbAogCiBjb25maWcgTUFDSF9NSUNSTzlICi0JYm9vbCAiU3VwcG9ydCBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1IIgorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1IaWdoIgogCWRlcGVuZHMgb24gRVA5M1hYX1NEQ0UzX1NZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUggYm9hcmQuCisJICBDb250ZWMgTWljcm85LUhpZ2ggYm9hcmQuCiAKIGNvbmZpZyBNQUNIX01JQ1JPOU0KLQlib29sICJTdXBwb3J0IENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LU0iCi0JZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfU1lOQ19QSFlTX09GRlNFVAorCWJvb2wgIlN1cHBvcnQgQ29udGVjIE1pY3JvOS1NaWQiCisJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQKIAlzZWxlY3QgTUFDSF9NSUNSTzkKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKLQkgIENvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LU0gYm9hcmQuCisJICBDb250ZWMgTWljcm85LU1pZCBib2FyZC4KIAogY29uZmlnIE1BQ0hfTUlDUk85TAotCWJvb2wgIlN1cHBvcnQgQ29udGVjIEh5cGVyY29udHJvbCBNaWNybzktTCIKKwlib29sICJTdXBwb3J0IENvbnRlYyBNaWNybzktTGl0ZSIKIAlkZXBlbmRzIG9uIEVQOTNYWF9TRENFM19TWU5DX1BIWVNfT0ZGU0VUCiAJc2VsZWN0IE1BQ0hfTUlDUk85CiAJaGVscAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCi0JICBDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIGJvYXJkLgorCSAgQ29udGVjIE1pY3JvOS1MaXRlIGJvYXJkLgorCitjb25maWcgTUFDSF9NSUNSTzlTCisJYm9vbCAiU3VwcG9ydCBDb250ZWMgTWljcm85LVNsaW0iCisJZGVwZW5kcyBvbiBFUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQKKwlzZWxlY3QgTUFDSF9NSUNSTzkKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIENvbnRlYyBNaWNybzktU2xpbSBib2FyZC4KIAogY29uZmlnIE1BQ0hfVFM3MlhYCiAJYm9vbCAiU3VwcG9ydCBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggU0JDIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlLmJvb3QKaW5kZXggMjdhMDg1YS4uMGFkMzNmMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUuYm9vdAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZS5ib290CkBAIC0zLDMgKzMsMTIgQEAKIAogICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UwX1BIWVNfT0ZGU0VUKQkJOj0gMHhjMDAwODAwMAogcGFyYW1zX3BoeXMtJChDT05GSUdfRVA5M1hYX1NEQ0UwX1BIWVNfT0ZGU0VUKQkJOj0gMHhjMDAwMDEwMAorCisgICB6cmVsYWRkci0kKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCQk6PSAweGQwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTFfUEhZU19PRkZTRVQpCQk6PSAweGQwMDAwMTAwCisKKyAgIHpyZWxhZGRyLSQoQ09ORklHX0VQOTNYWF9TRENFMl9QSFlTX09GRlNFVCkJCTo9IDB4ZTAwMDgwMDAKK3BhcmFtc19waHlzLSQoQ09ORklHX0VQOTNYWF9TRENFMl9QSFlTX09GRlNFVCkJCTo9IDB4ZTAwMDAxMDAKKworICAgenJlbGFkZHItJChDT05GSUdfRVA5M1hYX1NEQ0UzX0FTWU5DX1BIWVNfT0ZGU0VUKQk6PSAweGYwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCTo9IDB4ZjAwMDAxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IGRkYTE5Y2Q3Li4xZDBmOWQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKQEAgLTE2LDEzICsxNiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIAogc3RydWN0IGNsayB7CisJc3RydWN0IGNsawkqcGFyZW50OwogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKIAlpbnQJCXVzZXJzOwogCWludAkJc3dfbG9ja2VkOwpAQCAtMzksNDAgKzQyLDYwIEBACiBzdGF0aWMgaW50IHNldF9rZXl0Y2hjbGtfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBzdGF0aWMgaW50IHNldF9kaXZfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3h0YWxpID0geworCS5yYXRlCQk9IEVQOTNYWF9FWFRfQ0xLX1JBVEUsCit9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQxID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkuc3dfbG9ja2VkCT0gMSwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHLAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fREVWQ0ZHX1UxRU4sCiAJLmdldF9yYXRlCT0gZ2V0X3VhcnRfcmF0ZSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfdWFydDIgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkcsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9ERVZDRkdfVTJFTiwKIAkuZ2V0X3JhdGUJPSBnZXRfdWFydF9yYXRlLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191YXJ0MyA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCiAJLnN3X2xvY2tlZAk9IDEsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0RFVkNGRywKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0RFVkNGR19VM0VOLAogCS5nZXRfcmF0ZQk9IGdldF91YXJ0X3JhdGUsCiB9Owotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BsbDE7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfZjsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oOwotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3A7Ci1zdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMjsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wbGwxID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfZiA9IHsKKwkucGFyZW50CQk9ICZjbGtfcGxsMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfaCA9IHsKKwkucGFyZW50CQk9ICZjbGtfcGxsMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfcCA9IHsKKwkucGFyZW50CQk9ICZjbGtfcGxsMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMiA9IHsKKwkucGFyZW50CQk9ICZjbGtfeHRhbGksCit9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VzYl9ob3N0ID0geworCS5wYXJlbnQJCT0gJmNsa19wbGwyLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfVVNIX0VOLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19rZXlwYWQgPSB7CisJLnBhcmVudAkJPSAmY2xrX3h0YWxpLAogCS5zd19sb2NrZWQJPSAxLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVYsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9LRVlUQ0hDTEtESVZfS0VOLAogCS5zZXRfcmF0ZQk9IHNldF9rZXl0Y2hjbGtfcmF0ZSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfcHdtID0geworCS5wYXJlbnQJCT0gJmNsa194dGFsaSwKIAkucmF0ZQkJPSBFUDkzWFhfRVhUX0NMS19SQVRFLAogfTsKIApAQCAtODUsNTAgKzEwOCw2MiBAQAogCiAvKiBETUEgQ2xvY2tzICovCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMCA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAwLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAxID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDEsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDIgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQMiwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMyA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlAzLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA0ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDQsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDUgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQNSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNiA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA2LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA3ID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yUDcsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDggPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJQOCwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOSA9IHsKKwkucGFyZW50CQk9ICZjbGtfaCwKIAkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fUFdSQ05ULAogCS5lbmFibGVfbWFzawk9IEVQOTNYWF9TWVNDT05fUFdSQ05UX0RNQV9NMlA5LAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMm0wID0geworCS5wYXJlbnQJCT0gJmNsa19oLAogCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlQsCiAJLmVuYWJsZV9tYXNrCT0gRVA5M1hYX1NZU0NPTl9QV1JDTlRfRE1BX00yTTAsCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTEgPSB7CisJLnBhcmVudAkJPSAmY2xrX2gsCiAJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVCwKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX1BXUkNOVF9ETUFfTTJNMSwKIH07CkBAIC0xMzcsNiArMTcyLDcgQEAKIAl7IC5kZXZfaWQgPSBkZXYsIC5jb25faWQgPSBjb24sIC5jbGsgPSBjayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBjbG9ja3NbXSA9IHsKKwlJTklUX0NLKE5VTEwsCQkJInh0YWxpIiwJJmNsa194dGFsaSksCiAJSU5JVF9DSygiYXBiOnVhcnQxIiwJCU5VTEwsCQkmY2xrX3VhcnQxKSwKIAlJTklUX0NLKCJhcGI6dWFydDIiLAkJTlVMTCwJCSZjbGtfdWFydDIpLAogCUlOSVRfQ0soImFwYjp1YXJ0MyIsCQlOVUxMLAkJJmNsa191YXJ0MyksCkBAIC0xNjMsNDggKzE5OSw4NCBAQAogCUlOSVRfQ0soTlVMTCwJCQkibTJtMSIsCQkmY2xrX20ybTEpLAogfTsKIAorc3RhdGljIERFRklORV9TUElOTE9DSyhjbGtfbG9jayk7CisKK3N0YXRpYyB2b2lkIF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCFjbGstPnVzZXJzKyspIHsKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKworCQlpZiAoY2xrLT5lbmFibGVfcmVnKSB7CisJCQl1MzIgdjsKKworCQkJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQl2IHw9IGNsay0+ZW5hYmxlX21hc2s7CisJCQlpZiAoY2xrLT5zd19sb2NrZWQpCisJCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2LCBjbGstPmVuYWJsZV9yZWcpOworCQkJZWxzZQorCQkJCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisJfQorfQogCiBpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaWYgKCFjbGstPnVzZXJzKysgJiYgY2xrLT5lbmFibGVfcmVnKSB7Ci0JCXUzMiB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJdmFsdWUgfD0gY2xrLT5lbmFibGVfbWFzazsKLQkJaWYgKGNsay0+c3dfbG9ja2VkKQotCQkJZXA5M3h4X3N5c2Nvbl9zd2xvY2tlZF93cml0ZSh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJX19yYXdfd3JpdGVsKHZhbHVlLCBjbGstPmVuYWJsZV9yZWcpOwotCX0KKwlpZiAoIWNsaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKKwlfX2Nsa19lbmFibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOwogCitzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIS0tY2xrLT51c2VycykgeworCQlpZiAoY2xrLT5lbmFibGVfcmVnKSB7CisJCQl1MzIgdjsKKworCQkJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQl2ICY9IH5jbGstPmVuYWJsZV9tYXNrOworCQkJaWYgKGNsay0+c3dfbG9ja2VkKQorCQkJCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlfX3Jhd193cml0ZWwodiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfQorCisJCWlmIChjbGstPnBhcmVudCkKKwkJCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworCX0KK30KKwogdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JaWYgKCEtLWNsay0+dXNlcnMgJiYgY2xrLT5lbmFibGVfcmVnKSB7Ci0JCXUzMiB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXZhbHVlID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJdmFsdWUgJj0gfmNsay0+ZW5hYmxlX21hc2s7Ci0JCWlmIChjbGstPnN3X2xvY2tlZCkKLQkJCWVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodmFsdWUsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCWVsc2UKLQkJCV9fcmF3X3dyaXRlbCh2YWx1ZSwgY2xrLT5lbmFibGVfcmVnKTsKLQl9CisJaWYgKCFjbGspCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbGtfbG9jaywgZmxhZ3MpOworCV9fY2xrX2Rpc2FibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGtfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogeworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAJdTMyIHZhbHVlOwogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX1BXUkNOVCk7CiAJaWYgKHZhbHVlICYgRVA5M1hYX1NZU0NPTl9QV1JDTlRfVUFSVEJBVUQpCi0JCXJldHVybiBFUDkzWFhfRVhUX0NMS19SQVRFOworCQlyZXR1cm4gcmF0ZTsKIAllbHNlCi0JCXJldHVybiBFUDkzWFhfRVhUX0NMS19SQVRFIC8gMjsKKwkJcmV0dXJuIHJhdGUgLyAyOwogfQogCiB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0yNDQsMTYgKzMxNiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjX2Nsa19kaXYodW5zaWduZWQgbG9uZyByYXRlLCBpbnQgKnBzZWwsIGludCAqZXNlbCwKLQkJCQkgIGludCAqcGRpdiwgaW50ICpkaXYpCitzdGF0aWMgaW50IGNhbGNfY2xrX2RpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCWludCAqcHNlbCwgaW50ICplc2VsLCBpbnQgKnBkaXYsIGludCAqZGl2KQogewotCXVuc2lnbmVkIGxvbmcgbWF4X3JhdGUsIGJlc3RfcmF0ZSA9IDAsCi0JCWFjdHVhbF9yYXRlID0gMCwgbWNsa19yYXRlID0gMCwgcmF0ZV9lcnIgPSAtMTsKKwlzdHJ1Y3QgY2xrICptY2xrOworCXVuc2lnbmVkIGxvbmcgbWF4X3JhdGUsIGFjdHVhbF9yYXRlLCBtY2xrX3JhdGUsIHJhdGVfZXJyID0gLTE7CiAJaW50IGksIGZvdW5kID0gMCwgX19kaXYgPSAwLCBfX3BkaXYgPSAwOwogCiAJLyogRG9uJ3QgZXhjZWVkIHRoZSBtYXhpbXVtIHJhdGUgKi8KIAltYXhfcmF0ZSA9IG1heChtYXgoY2xrX3BsbDEucmF0ZSAvIDQsIGNsa19wbGwyLnJhdGUgLyA0KSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nKUVQOTNYWF9FWFRfQ0xLX1JBVEUgLyA0KTsKKwkJICAgICAgIGNsa194dGFsaS5yYXRlIC8gNCk7CiAJcmF0ZSA9IG1pbihyYXRlLCBtYXhfcmF0ZSk7CiAKIAkvKgpAQCAtMjY3LDExICszMzksMTIgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCWlmIChpID09IDApCi0JCQltY2xrX3JhdGUgPSBFUDkzWFhfRVhUX0NMS19SQVRFICogMjsKKwkJCW1jbGsgPSAmY2xrX3h0YWxpOwogCQllbHNlIGlmIChpID09IDEpCi0JCQltY2xrX3JhdGUgPSBjbGtfcGxsMS5yYXRlICogMjsKLQkJZWxzZSBpZiAoaSA9PSAyKQotCQkJbWNsa19yYXRlID0gY2xrX3BsbDIucmF0ZSAqIDI7CisJCQltY2xrID0gJmNsa19wbGwxOworCQllbHNlCisJCQltY2xrID0gJmNsa19wbGwyOworCQltY2xrX3JhdGUgPSBtY2xrLT5yYXRlICogMjsKIAogCQkvKiBUcnkgZWFjaCBwcmVkaXZpZGVyIHZhbHVlICovCiAJCWZvciAoX19wZGl2ID0gNDsgX19wZGl2IDw9IDY7IF9fcGRpdisrKSB7CkBAIC0yODYsNyArMzU5LDggQEAKIAkJCQkqZGl2ID0gX19kaXY7CiAJCQkJKnBzZWwgPSAoaSA9PSAyKTsKIAkJCQkqZXNlbCA9IChpICE9IDApOwotCQkJCWJlc3RfcmF0ZSA9IGFjdHVhbF9yYXRlOworCQkJCWNsay0+cGFyZW50ID0gbWNsazsKKwkJCQljbGstPnJhdGUgPSBhY3R1YWxfcmF0ZTsKIAkJCQlyYXRlX2VyciA9IGFicyhhY3R1YWxfcmF0ZSAtIHJhdGUpOwogCQkJCWZvdW5kID0gMTsKIAkJCX0KQEAgLTI5NCwyMSArMzY4LDE5IEBACiAJfQogCiAJaWYgKCFmb3VuZCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIGJlc3RfcmF0ZTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzZXRfZGl2X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBhY3R1YWxfcmF0ZTsKLQlpbnQgcHNlbCA9IDAsIGVzZWwgPSAwLCBwZGl2ID0gMCwgZGl2ID0gMDsKKwlpbnQgZXJyLCBwc2VsID0gMCwgZXNlbCA9IDAsIHBkaXYgPSAwLCBkaXYgPSAwOwogCXUzMiB2YWw7CiAKLQlhY3R1YWxfcmF0ZSA9IGNhbGNfY2xrX2RpdihyYXRlLCAmcHNlbCwgJmVzZWwsICZwZGl2LCAmZGl2KTsKLQlpZiAoYWN0dWFsX3JhdGUgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JY2xrLT5yYXRlID0gYWN0dWFsX3JhdGU7CisJZXJyID0gY2FsY19jbGtfZGl2KGNsaywgcmF0ZSwgJnBzZWwsICZlc2VsLCAmcGRpdiwgJmRpdik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCS8qIENsZWFyIHRoZSBlc2VsLCBwc2VsLCBwZGl2IGFuZCBkaXYgYml0cyAqLwogCXZhbCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CkBAIC0zNDQsNyArNDE2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmF0ZTsKIAlpbnQgaTsKIAotCXJhdGUgPSBFUDkzWFhfRVhUX0NMS19SQVRFOworCXJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAlyYXRlICo9ICgoY29uZmlnX3dvcmQgPj4gMTEpICYgMHgxZikgKyAxOwkJLyogWDFGQkQgKi8KIAlyYXRlICo9ICgoY29uZmlnX3dvcmQgPj4gNSkgJiAweDNmKSArIDE7CQkvKiBYMkZCRCAqLwogCWRvX2RpdihyYXRlLCAoY29uZmlnX3dvcmQgJiAweDFmKSArIDEpOwkJCS8qIFgySVBEICovCkBAIC0zNzcsNyArNDQ5LDcgQEAKIAogCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQxKTsKIAlpZiAoISh2YWx1ZSAmIDB4MDA4MDAwMDApKSB7CQkJLyogUExMMSBieXBhc3NlZD8gICovCi0JCWNsa19wbGwxLnJhdGUgPSBFUDkzWFhfRVhUX0NMS19SQVRFOworCQljbGtfcGxsMS5yYXRlID0gY2xrX3h0YWxpLnJhdGU7CiAJfSBlbHNlIHsKIAkJY2xrX3BsbDEucmF0ZSA9IGNhbGNfcGxsX3JhdGUodmFsdWUpOwogCX0KQEAgLTM4OCw3ICs0NjAsNyBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChFUDkzWFhfU1lTQ09OX0NMT0NLX1NFVDIpOwogCWlmICghKHZhbHVlICYgMHgwMDA4MDAwMCkpIHsJCQkvKiBQTEwyIGJ5cGFzc2VkPyAgKi8KLQkJY2xrX3BsbDIucmF0ZSA9IEVQOTNYWF9FWFRfQ0xLX1JBVEU7CisJCWNsa19wbGwyLnJhdGUgPSBjbGtfeHRhbGkucmF0ZTsKIAl9IGVsc2UgaWYgKHZhbHVlICYgMHgwMDA0MDAwMCkgewkJLyogUExMMiBlbmFibGVkPyAgKi8KIAkJY2xrX3BsbDIucmF0ZSA9IGNhbGNfcGxsX3JhdGUodmFsdWUpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggZjdlYmVkOS4uYjQzNTdjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtMjA2LDcgKzIwNiw2IEBACiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKIAkJCWludCBncGlvX2lycSA9IGdwaW9fdG9faXJxKEVQOTNYWF9HUElPX0xJTkVfQigwKSkgKyBpOwotCQkJZGVzYyA9IGlycV9kZXNjICsgZ3Bpb19pcnE7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEoZ3Bpb19pcnEpOwogCQl9CiAJfQpAQCAtNTUwLDEzICs1NDksMTEgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwOTN4eF9ldGhfZGV2aWNlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGVwOTN4eF9pMmNfZGF0YSA9IHsKLQkuc2RhX3BpbgkJPSBFUDkzWFhfR1BJT19MSU5FX0VFREFULAotCS5zZGFfaXNfb3Blbl9kcmFpbgk9IDAsCi0JLnNjbF9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRUNMSywKLQkuc2NsX2lzX29wZW5fZHJhaW4JPSAwLAotCS51ZGVsYXkJCQk9IDIsCi19OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRVA5M3h4IGkyYyBwZXJpcGhlcmFsIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBlcDkzeHhfaTJjX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVwOTN4eF9pMmNfZGV2aWNlID0gewogCS5uYW1lCQkJPSAiaTJjLWdwaW8iLApAQCAtNTY0LDggKzU2MSwyNSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhfaTJjX2RhdGEsCiB9OwogCi12b2lkIF9faW5pdCBlcDkzeHhfcmVnaXN0ZXJfaTJjKHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqZGV2aWNlcywgaW50IG51bSkKK3ZvaWQgX19pbml0IGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgKmRhdGEsCisJCQkJc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKQogeworCS8qCisJICogU2V0IHRoZSBFRVBST00gaW50ZXJmYWNlIHBpbiBkcml2ZSB0eXBlIGNvbnRyb2wuCisJICogRGVmaW5lcyB0aGUgZHJpdmVyIHR5cGUgZm9yIHRoZSBFRUNMSyBhbmQgRUVEQVQgcGlucyBhcyBlaXRoZXIKKwkgKiBvcGVuIGRyYWluLCB3aGljaCB3aWxsIHJlcXVpcmUgYW4gZXh0ZXJuYWwgcHVsbC11cCwgb3IgYSBub3JtYWwKKwkgKiBDTU9TIGRyaXZlci4KKwkgKi8KKwlpZiAoZGF0YS0+c2RhX2lzX29wZW5fZHJhaW4gJiYgZGF0YS0+c2RhX3BpbiAhPSBFUDkzWFhfR1BJT19MSU5FX0VFREFUKQorCQlwcl93YXJuaW5nKCJlcDkzeHg6IHNkYSAhPSBFRURBVCwgb3BlbiBkcmFpbiBoYXMgbm8gZWZmZWN0XG4iKTsKKwlpZiAoZGF0YS0+c2NsX2lzX29wZW5fZHJhaW4gJiYgZGF0YS0+c2NsX3BpbiAhPSBFUDkzWFhfR1BJT19MSU5FX0VFQ0xLKQorCQlwcl93YXJuaW5nKCJlcDkzeHg6IHNjbCAhPSBFRUNMSywgb3BlbiBkcmFpbiBoYXMgbm8gZWZmZWN0XG4iKTsKKworCV9fcmF3X3dyaXRlbCgoZGF0YS0+c2RhX2lzX29wZW5fZHJhaW4gPDwgMSkgfAorCQkgICAgIChkYXRhLT5zY2xfaXNfb3Blbl9kcmFpbiA8PCAwKSwKKwkJICAgICBFUDkzWFhfR1BJT19FRURSSVZFKTsKKworCWVwOTN4eF9pMmNfZGF0YSA9ICpkYXRhOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGRldmljZXMsIG51bSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlcDkzeHhfaTJjX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKaW5kZXggNzMxNDVhZS4uYTRhN2JlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApAQCAtNzYsMTMgKzc4LDI2IEBACiAJLnBoeV9pZAkJPSAxLAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVkYjkzeHhhX2kyY19kYXRhW10gPSB7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFREI5M3h4IGkyYyBwZXJpcGhlcmFsIGhhbmRsaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSBlZGI5M3h4X2kyY19ncGlvX2RhdGEgPSB7CisJLnNkYV9waW4JCT0gRVA5M1hYX0dQSU9fTElORV9FRURBVCwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAwLAorCS5zY2xfcGluCQk9IEVQOTNYWF9HUElPX0xJTkVfRUVDTEssCisJLnNjbF9pc19vcGVuX2RyYWluCT0gMCwKKwkudWRlbGF5CQkJPSAwLAkvKiBkZWZhdWx0IHRvIDEwMCBrSHogKi8KKwkudGltZW91dAkJPSAwLAkvKiBkZWZhdWx0IHRvIDEwMCBtcyAqLworfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVkYjkzeHhhX2kyY19ib2FyZF9pbmZvW10gPSB7CiAJewogCQlJMkNfQk9BUkRfSU5GTygiaXNsMTIwOCIsIDB4NmYpLAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZWRiOTN4eF9pMmNfZGF0YVtdID0geworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVkYjkzeHhfaTJjX2JvYXJkX2luZm9bXSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJkczEzMzciLCAweDY4KSwKIAl9LApAQCAtOTIsMTIgKzEwNywxNCBAQAogewogCWlmIChtYWNoaW5lX2lzX2VkYjkzMDJhKCkgfHwgbWFjaGluZV9pc19lZGI5MzA3YSgpIHx8CiAJICAgIG1hY2hpbmVfaXNfZWRiOTMxNWEoKSkgewotCQllcDkzeHhfcmVnaXN0ZXJfaTJjKGVkYjkzeHhhX2kyY19kYXRhLAotCQkJCUFSUkFZX1NJWkUoZWRiOTN4eGFfaTJjX2RhdGEpKTsKKwkJZXA5M3h4X3JlZ2lzdGVyX2kyYygmZWRiOTN4eF9pMmNfZ3Bpb19kYXRhLAorCQkJCSAgICBlZGI5M3h4YV9pMmNfYm9hcmRfaW5mbywKKwkJCQkgICAgQVJSQVlfU0laRShlZGI5M3h4YV9pMmNfYm9hcmRfaW5mbykpOwogCX0gZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzA3KCkgfHwgbWFjaGluZV9pc19lZGI5MzEyKCkgfHwKIAkJICAgbWFjaGluZV9pc19lZGI5MzE1KCkpIHsKLQkJZXA5M3h4X3JlZ2lzdGVyX2kyYyhlZGI5M3h4X2kyY19kYXRhLAotCQkJCUFSUkFZX1NJWkUoZWRiOTN4eF9pMmNfZGF0YSkpOworCQllcDkzeHhfcmVnaXN0ZXJfaTJjKCZlZGI5M3h4X2kyY19ncGlvX2RhdGEsCisJCQkJICAgIGVkYjkzeHhfaTJjX2JvYXJkX2luZm8sCisJCQkJICAgIEFSUkFZX1NJWkUoZWRiOTN4eF9pMmNfYm9hcmRfaW5mbykpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2VwOTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAppbmRleCAwZmJmODdiLi5iMWY5MzdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaApAQCAtNTIsMjUgKzUyLDI3IEBACiAjZGVmaW5lIEVQOTNYWF9BSEJfVklSVF9CQVNFCQkweGZlZjAwMDAwCiAjZGVmaW5lIEVQOTNYWF9BSEJfU0laRQkJCTB4MDAxMDAwMDAKIAorI2RlZmluZSBFUDkzWFhfQUhCX1BIWVMoeCkJCShFUDkzWFhfQUhCX1BIWVNfQkFTRSArICh4KSkKICNkZWZpbmUgRVA5M1hYX0FIQl9JT01FTSh4KQkJSU9NRU0oRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAoeCkpCiAKICNkZWZpbmUgRVA5M1hYX0FQQl9QSFlTX0JBU0UJCTB4ODA4MDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9WSVJUX0JBU0UJCTB4ZmVkMDAwMDAKICNkZWZpbmUgRVA5M1hYX0FQQl9TSVpFCQkJMHgwMDIwMDAwMAogCisjZGVmaW5lIEVQOTNYWF9BUEJfUEhZUyh4KQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgKHgpKQogI2RlZmluZSBFUDkzWFhfQVBCX0lPTUVNKHgpCQlJT01FTShFUDkzWFhfQVBCX1ZJUlRfQkFTRSArICh4KSkKIAogCiAvKiBBSEIgcGVyaXBoZXJhbHMgKi8KICNkZWZpbmUgRVA5M1hYX0RNQV9CQVNFCQkJRVA5M1hYX0FIQl9JT01FTSgweDAwMDAwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9FVEhFUk5FVF9QSFlTX0JBU0UJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQlFUDkzWFhfQUhCX1BIWVMoMHgwMDAxMDAwMCkKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX0JBU0UJCUVQOTNYWF9BSEJfSU9NRU0oMHgwMDAxMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfVVNCX1BIWVNfQkFTRQkJKEVQOTNYWF9BSEJfUEhZU19CQVNFICsgMHgwMDAyMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1VTQl9QSFlTX0JBU0UJCUVQOTNYWF9BSEJfUEhZUygweDAwMDIwMDAwKQogI2RlZmluZSBFUDkzWFhfVVNCX0JBU0UJCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1JBU1RFUl9QSFlTX0JBU0UJCShFUDkzWFhfQUhCX1BIWVNfQkFTRSArIDB4MDAwMzAwMDApCisjZGVmaW5lIEVQOTNYWF9SQVNURVJfUEhZU19CQVNFCQlFUDkzWFhfQUhCX1BIWVMoMHgwMDAzMDAwMCkKICNkZWZpbmUgRVA5M1hYX1JBU1RFUl9CQVNFCQlFUDkzWFhfQUhCX0lPTUVNKDB4MDAwMzAwMDApCiAKICNkZWZpbmUgRVA5M1hYX0dSQVBISUNTX0FDQ0VMX0JBU0UJRVA5M1hYX0FIQl9JT01FTSgweDAwMDQwMDAwKQpAQCAtMTEyLDIxICsxMTQsMTAgQEAKIAogI2RlZmluZSBFUDkzWFhfR1BJT19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwNDAwMDApCiAjZGVmaW5lIEVQOTNYWF9HUElPX1JFRyh4KQkJKEVQOTNYWF9HUElPX0JBU0UgKyAoeCkpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX1RZUEUxCQlFUDkzWFhfR1BJT19SRUcoMHg0YykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fRl9JTlRfVFlQRTIJCUVQOTNYWF9HUElPX1JFRygweDUwKQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9BQ0sJCUVQOTNYWF9HUElPX1JFRygweDU0KQotI2RlZmluZSBFUDkzWFhfR1BJT19GX0lOVF9FTkFCTEUJRVA5M1hYX0dQSU9fUkVHKDB4NTgpCiAjZGVmaW5lIEVQOTNYWF9HUElPX0ZfSU5UX1NUQVRVUwlFUDkzWFhfR1BJT19SRUcoMHg1YykKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfVFlQRTEJCUVQOTNYWF9HUElPX1JFRygweDkwKQotI2RlZmluZSBFUDkzWFhfR1BJT19BX0lOVF9UWVBFMgkJRVA5M1hYX0dQSU9fUkVHKDB4OTQpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX0FDSwkJRVA5M1hYX0dQSU9fUkVHKDB4OTgpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0FfSU5UX0VOQUJMRQlFUDkzWFhfR1BJT19SRUcoMHg5YykKICNkZWZpbmUgRVA5M1hYX0dQSU9fQV9JTlRfU1RBVFVTCUVQOTNYWF9HUElPX1JFRygweGEwKQotI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9UWVBFMQkJRVA5M1hYX0dQSU9fUkVHKDB4YWMpCi0jZGVmaW5lIEVQOTNYWF9HUElPX0JfSU5UX1RZUEUyCQlFUDkzWFhfR1BJT19SRUcoMHhiMCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfQUNLCQlFUDkzWFhfR1BJT19SRUcoMHhiNCkKLSNkZWZpbmUgRVA5M1hYX0dQSU9fQl9JTlRfRU5BQkxFCUVQOTNYWF9HUElPX1JFRygweGI4KQogI2RlZmluZSBFUDkzWFhfR1BJT19CX0lOVF9TVEFUVVMJRVA5M1hYX0dQSU9fUkVHKDB4YmMpCisjZGVmaW5lIEVQOTNYWF9HUElPX0VFRFJJVkUJCUVQOTNYWF9HUElPX1JFRygweGM4KQogCiAjZGVmaW5lIEVQOTNYWF9BQUNfQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDA4MDAwMCkKIApAQCAtMTM0LDEzICsxMjUsMTMgQEAKIAogI2RlZmluZSBFUDkzWFhfSVJEQV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYjAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQxX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDBjMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1VBUlQxX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAwYzAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMV9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwYzAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQyX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDBkMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1VBUlQyX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAwZDAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUMl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZDAwMDApCiAKLSNkZWZpbmUgRVA5M1hYX1VBUlQzX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDBlMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1VBUlQzX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAwZTAwMDApCiAjZGVmaW5lIEVQOTNYWF9VQVJUM19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAwZTAwMDApCiAKICNkZWZpbmUgRVA5M1hYX0tFWV9NQVRSSVhfQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMGYwMDAwKQpAQCAtMTQ4LDEwICsxMzksMTAgQEAKICNkZWZpbmUgRVA5M1hYX0FEQ19CQVNFCQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTAwMDAwKQogI2RlZmluZSBFUDkzWFhfVE9VQ0hTQ1JFRU5fQkFTRQkJRVA5M1hYX0FQQl9JT01FTSgweDAwMTAwMDAwKQogCi0jZGVmaW5lIEVQOTNYWF9QV01fUEhZU19CQVNFCQkoRVA5M1hYX0FQQl9QSFlTX0JBU0UgKyAweDAwMTEwMDAwKQorI2RlZmluZSBFUDkzWFhfUFdNX1BIWVNfQkFTRQkJRVA5M1hYX0FQQl9QSFlTKDB4MDAxMTAwMDApCiAjZGVmaW5lIEVQOTNYWF9QV01fQkFTRQkJCUVQOTNYWF9BUEJfSU9NRU0oMHgwMDExMDAwMCkKIAotI2RlZmluZSBFUDkzWFhfUlRDX1BIWVNfQkFTRQkJKEVQOTNYWF9BUEJfUEhZU19CQVNFICsgMHgwMDEyMDAwMCkKKyNkZWZpbmUgRVA5M1hYX1JUQ19QSFlTX0JBU0UJCUVQOTNYWF9BUEJfUEhZUygweDAwMTIwMDAwKQogI2RlZmluZSBFUDkzWFhfUlRDX0JBU0UJCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMjAwMDApCiAKICNkZWZpbmUgRVA5M1hYX1NZU0NPTl9CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxMzAwMDApCkBAIC0yMTgsNiArMjA5LDE3IEBACiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fS0VZVENIQ0xLRElWX0FESVYJKDE8PDE2KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRU4JKDE8PDE1KQogI2RlZmluZSBFUDkzWFhfU1lTQ09OX0tFWVRDSENMS0RJVl9LRElWCSgxPDwwKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGRwkJRVA5M1hYX1NZU0NPTl9SRUcoMHg5YykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfUkVWX01BU0sJKDB4ZjAwMDAwMDApCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX1JFVl9TSElGVAkoMjgpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX1NCT09UCSgxPDw4KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NONwkoMTw8NykKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTENTTjYJKDE8PDYpCisjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xBU0RPCSgxPDw1KQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MRUVEQQkoMTw8NCkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTEVFQ0xLCSgxPDwzKQorI2RlZmluZSBFUDkzWFhfU1lTQ09OX1NZU0NGR19MQ1NOMgkoMTw8MSkKKyNkZWZpbmUgRVA5M1hYX1NZU0NPTl9TWVNDRkdfTENTTjEJKDE8PDApCiAjZGVmaW5lIEVQOTNYWF9TWVNDT05fU1dMT0NLCQlFUDkzWFhfU1lTQ09OX1JFRygweGMwKQogCiAjZGVmaW5lIEVQOTNYWF9XQVRDSERPR19CQVNFCQlFUDkzWFhfQVBCX0lPTUVNKDB4MDAxNDAwMDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAwYTE0OThhLi5jOTkxYjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTExNCwxNyArMTE0LDkgQEAKICAqICAgICAgICAgIEIwLi5CNyAgKDcuLjE1KSB0byBpcnEgNzIuLjc5LCBhbmQKICAqICAgICAgICAgIEYwLi5GNyAoMTYuLjI0KSB0byBpcnEgODAuLjg3LgogICovCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvIDw9IEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSkKLQkJcmV0dXJuIDY0ICsgZ3BpbzsKKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJXAorCSgoKGdwaW8pIDw9IEVQOTNYWF9HUElPX0xJTkVfTUFYX0lSUSkgPyAoNjQgKyAoZ3BpbykpIDogLUVJTlZBTCkKIAotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JcmV0dXJuIGlycSAtIGdwaW9fdG9faXJxKDApOwotfQorI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCSgoaXJxKSAtIGdwaW9fdG9faXJxKDApKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA5MjViMTJlLi41NTQwNjRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC05LDYgKzksMTIgQEAKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MDAwMDAwMDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTBfUEhZU19PRkZTRVQpCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGMwMDAwMDAwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRVA5M1hYX1NEQ0UxX1BIWVNfT0ZGU0VUKQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhkMDAwMDAwMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0VQOTNYWF9TRENFMl9QSFlTX09GRlNFVCkKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ZTAwMDAwMDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19FUDkzWFhfU0RDRTNfQVNZTkNfUEhZU19PRkZTRVQpCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweGYwMDAwMDAwKQogI2Vsc2UKICNlcnJvciAiS2NvbmZpZyBidWc6IE5vIEVQOTN4eCBQSFlTX09GRlNFVCBzZXQiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKaW5kZXggMDFhMGYwOC4uNDY5ZmQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTQsNiArNCw3IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKK3N0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhOwogc3RydWN0IGkyY19ib2FyZF9pbmZvOwogc3RydWN0IHBsYXRmb3JtX2RldmljZTsKIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm87CkBAIC0xNiw3ICsxNyw2IEBACiAKIHZvaWQgZXA5M3h4X21hcF9pbyh2b2lkKTsKIHZvaWQgZXA5M3h4X2luaXRfaXJxKHZvaWQpOwotdm9pZCBlcDkzeHhfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcpOwogCiAvKiBFUDkzeHggU3lzdGVtIENvbnRyb2xsZXIgc29mdHdhcmUgbG9ja2VkIHJlZ2lzdGVyIHdyaXRlICovCiB2b2lkIGVwOTN4eF9zeXNjb25fc3dsb2NrZWRfd3JpdGUodW5zaWduZWQgaW50IHZhbCwgdm9pZCBfX2lvbWVtICpyZWcpOwpAQCAtMzMsNyArMzMsOCBAQAogfQogCiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9ldGgoc3RydWN0IGVwOTN4eF9ldGhfZGF0YSAqZGF0YSwgaW50IGNvcHlfYWRkcik7Ci12b2lkIGVwOTN4eF9yZWdpc3Rlcl9pMmMoc3RydWN0IGkyY19ib2FyZF9pbmZvICpkZXZpY2VzLCBpbnQgbnVtKTsKK3ZvaWQgZXA5M3h4X3JlZ2lzdGVyX2kyYyhzdHJ1Y3QgaTJjX2dwaW9fcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCSBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmRldmljZXMsIGludCBudW0pOwogdm9pZCBlcDkzeHhfcmVnaXN0ZXJfZmIoc3RydWN0IGVwOTN4eGZiX21hY2hfaW5mbyAqZGF0YSk7CiB2b2lkIGVwOTN4eF9yZWdpc3Rlcl9wd20oaW50IHB3bTAsIGludCBwd20xKTsKIGludCBlcDkzeHhfcHdtX2FjcXVpcmVfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKaW5kZXggMGEzMTNlOC4uZjM3NTdhMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKQEAgLTIsNyArMiw5IEBACiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ29udGVjIFN0ZXVlcnVuZ3N0ZWNobmlrICYgQXV0b21hdGlvbiBHbWJICi0gKiAgICAgICAgICAgICAgICAgICBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PgorICogICAgICAgICAgICAgICAgICAgIE1hbmZyZWQgR3J1YmVyIDxtLmdydWJlckB0aXJvbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29udGVjIFN0ZXVlcnVuZ3N0ZWNobmlrICYgQXV0b21hdGlvbiBHbWJICisgKiAgICAgICAgICAgICAgICAgICAgSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMyw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIApAQCAtMjAsMTA0ICsyMywxMjQgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKIAotc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgbWljcm85X2V0aF9kYXRhID0gewotCS5waHlfaWQJCT0gMHgxZiwKLX07CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWljcm85IE5PUiBGbGFzaAorICoKKyAqIE1pY3JvOS1IaWdoIGhhcyB1cCB0byA2NE1CIG9mIDMyLWJpdCBmbGFzaCBvbiBDUzEKKyAqIE1pY3JvOS1NaWQgaGFzIHVwIHRvIDY0TUIgb2YgZWl0aGVyIDMyLWJpdCBvciAxNi1iaXQgZmxhc2ggb24gQ1MxCisgKiBNaWNybzktTGl0ZSB1c2VzIGEgc2VwZXJhdGUgTVREIG1hcCBkcml2ZXIgZm9yIGZsYXNoIHN1cHBvcnQKKyAqIE1pY3JvOS1TbGltIGhhcyB1cCB0byA2NE1CIG9mIGVpdGhlciAzMi1iaXQgb3IgMTYtYml0IGZsYXNoIG9uIENTMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtaWNybzlfZmxhc2hfZGF0YTsKIAotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9pbml0KHZvaWQpCi17Ci0JZXA5M3h4X3JlZ2lzdGVyX2V0aCgmbWljcm85X2V0aF9kYXRhLCAxKTsKLX0KLQotLyoKLSAqIE1pY3JvOS1ICi0gKi8KLSNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlICi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtaWNybzloX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDQsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1pY3JvOWhfZmxhc2hfcmVzb3VyY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1pY3JvOV9mbGFzaF9yZXNvdXJjZSA9IHsKIAkuc3RhcnQJCT0gRVA5M1hYX0NTMV9QSFlTX0JBU0UsCiAJLmVuZAkJPSBFUDkzWFhfQ1MxX1BIWVNfQkFTRSArIFNaXzY0TSAtIDEsCiAJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWljcm85aF9mbGFzaCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pY3JvOV9mbGFzaCA9IHsKIAkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJm1pY3JvOWhfZmxhc2hfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWljcm85X2ZsYXNoX2RhdGEsCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IDEsCi0JLnJlc291cmNlCT0gJm1pY3JvOWhfZmxhc2hfcmVzb3VyY2UsCisJLnJlc291cmNlCT0gJm1pY3JvOV9mbGFzaF9yZXNvdXJjZSwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzloX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21pY3JvOV9yZWdpc3Rlcl9mbGFzaCh1bnNpZ25lZCBpbnQgd2lkdGgpCiB7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtaWNybzloX2ZsYXNoKTsKKwltaWNybzlfZmxhc2hfZGF0YS53aWR0aCA9IHdpZHRoOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtaWNybzlfZmxhc2gpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWljcm85aF9pbml0X21hY2hpbmUodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IG1pY3JvOV9kZXRlY3RfYm9vdHdpZHRoKHZvaWQpCit7CisJdTMyIHY7CisKKwkvKiBEZXRlY3QgdGhlIGJ1cyB3aWR0aCBvZiB0aGUgZXh0ZXJuYWwgZmxhc2ggbWVtb3J5ICovCisJdiA9IF9fcmF3X3JlYWRsKEVQOTNYWF9TWVNDT05fU1lTQ0ZHKTsKKwlpZiAodiAmIEVQOTNYWF9TWVNDT05fU1lTQ0ZHX0xDU043KQorCQlyZXR1cm4gNDsgLyogMzItYml0ICovCisJZWxzZQorCQlyZXR1cm4gMjsgLyogMTYtYml0ICovCit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlfcmVnaXN0ZXJfZmxhc2godm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19taWNybzkoKSkKKwkJX19taWNybzlfcmVnaXN0ZXJfZmxhc2goNCk7CisJZWxzZSBpZiAobWFjaGluZV9pc19taWNybzltKCkgfHwgbWFjaGluZV9pc19taWNybzlzKCkpCisJCV9fbWljcm85X3JlZ2lzdGVyX2ZsYXNoKG1pY3JvOV9kZXRlY3RfYm9vdHdpZHRoKCkpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaWNybzkgRXRoZXJuZXQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBlcDkzeHhfZXRoX2RhdGEgbWljcm85X2V0aF9kYXRhID0geworCS5waHlfaWQJCT0gMHgxZiwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOV9pbml0X21hY2hpbmUodm9pZCkKIHsKIAllcDkzeHhfaW5pdF9kZXZpY2VzKCk7Ci0JbWljcm85X2luaXQoKTsKLQltaWNybzloX2luaXQoKTsKKwllcDkzeHhfcmVnaXN0ZXJfZXRoKCZtaWNybzlfZXRoX2RhdGEsIDEpOworCW1pY3JvOV9yZWdpc3Rlcl9mbGFzaCgpOwogfQogCi1NQUNISU5FX1NUQVJUKE1JQ1JPOSwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LUgiKQotCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NSUNSTzlICitNQUNISU5FX1NUQVJUKE1JQ1JPOSwgIkNvbnRlYyBNaWNybzktSGlnaCIpCisJLyogTWFpbnRhaW5lcjogSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCiAJLm1hcF9pbwkJPSBlcDkzeHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGVwOTN4eF9pbml0X2lycSwKIAkudGltZXIJCT0gJmVwOTN4eF90aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbWljcm85aF9pbml0X21hY2hpbmUsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCiBNQUNISU5FX0VORAogI2VuZGlmCiAKLS8qCi0gKiBNaWNybzktTQotICovCiAjaWZkZWYgQ09ORklHX01BQ0hfTUlDUk85TQotc3RhdGljIHZvaWQgX19pbml0IG1pY3JvOW1faW5pdF9tYWNoaW5lKHZvaWQpCi17Ci0JZXA5M3h4X2luaXRfZGV2aWNlcygpOwotCW1pY3JvOV9pbml0KCk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoTUlDUk85TSwgIkNvbnRlYyBIeXBlcmNvbnRyb2wgTWljcm85LU0iKQotCS8qIE1haW50YWluZXI6IE1hbmZyZWQgR3J1YmVyIDxtYW5mcmVkLmdydWJlckBjb250ZWMuYXQ+ICovCitNQUNISU5FX1NUQVJUKE1JQ1JPOU0sICJDb250ZWMgTWljcm85LU1pZCIpCisJLyogTWFpbnRhaW5lcjogSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+ICovCiAJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKIAkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9TWU5DICsgMHgxMDAsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9BU1lOQyArIDB4MTAwLAogCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKIAkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IG1pY3JvOW1faW5pdF9tYWNoaW5lLAorCS5pbml0X21hY2hpbmUJPSBtaWNybzlfaW5pdF9tYWNoaW5lLAogTUFDSElORV9FTkQKICNlbmRpZgogCi0vKgotICogTWljcm85LUwKLSAqLwogI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOUwKLXN0YXRpYyB2b2lkIF9faW5pdCBtaWNybzlsX2luaXRfbWFjaGluZSh2b2lkKQotewotCWVwOTN4eF9pbml0X2RldmljZXMoKTsKLQltaWNybzlfaW5pdCgpOwotfQotCi1NQUNISU5FX1NUQVJUKE1JQ1JPOUwsICJDb250ZWMgSHlwZXJjb250cm9sIE1pY3JvOS1MIikKLQkvKiBNYWludGFpbmVyOiBNYW5mcmVkIEdydWJlciA8bWFuZnJlZC5ncnViZXJAY29udGVjLmF0PiAqLworTUFDSElORV9TVEFSVChNSUNSTzlMLCAiQ29udGVjIE1pY3JvOS1MaXRlIikKKwkvKiBNYWludGFpbmVyOiBIdWJlcnQgRmV1cnN0ZWluIDxodWJlcnQuZmV1cnN0ZWluQGNvbnRlYy5hdD4gKi8KIAkucGh5c19pbwk9IEVQOTNYWF9BUEJfUEhZU19CQVNFLAogCS5pb19wZ19vZmZzdAk9ICgoRVA5M1hYX0FQQl9WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBFUDkzWFhfU0RDRTNfUEhZU19CQVNFX1NZTkMgKyAweDEwMCwKIAkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAogCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBtaWNybzlsX2luaXRfbWFjaGluZSwKKwkuaW5pdF9tYWNoaW5lCT0gbWljcm85X2luaXRfbWFjaGluZSwKIE1BQ0hJTkVfRU5ECiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NQUNIX01JQ1JPOVMKK01BQ0hJTkVfU1RBUlQoTUlDUk85UywgIkNvbnRlYyBNaWNybzktU2xpbSIpCisJLyogTWFpbnRhaW5lcjogSHViZXJ0IEZldXJzdGVpbiA8aHViZXJ0LmZldXJzdGVpbkBjb250ZWMuYXQ+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gRVA5M1hYX1NEQ0UzX1BIWVNfQkFTRV9BU1lOQyArIDB4MTAwLAorCS5tYXBfaW8JCT0gZXA5M3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBlcDkzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZlcDkzeHhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IG1pY3JvOV9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCAyYjJlN2ExLi40ODkxODI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTI4LDUgKzI4LDYgQEAKICNkZWZpbmUgQlVTX09GRlNFVAlVTCgweDgwMDAwMDAwKQogI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoeCkgLSBQQUdFX09GRlNFVCArIEJVU19PRkZTRVQpCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkJKCh4KSAtIEJVU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHgpCQkoKCh4KSA8PCBQQUdFX1NISUZUKSArIEJVU19PRkZTRVQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggMmEzMThlYi4uM2YzNTI5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2ttaS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvY2xjZC5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CkBAIC0zNSw3ICszNiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCkBAIC00MDAsNyArNDAwLDcgQEAKIAlyZXR1cm4gc3RhdHVzICYgODsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tY19kYXRhID0gewogCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKIAkuc3RhdHVzCQk9IG1tY19zdGF0dXMsCiAJLmdwaW9fd3AJPSAtMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYwppbmRleCBmMWQ3MmIyLi4xNDhkMjVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lycV9yZWdzLmg+CkBAIC00ODYsNyArNDg3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgcGNpX2J1cyAqcGNpX3YzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQorc3RydWN0IHBjaV9idXMgKiBfX2luaXQgcGNpX3YzX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJnBjaV92M19vcHMsIHN5cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmggYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvaW9wMzJ4LmgKaW5kZXggYWJkOWViNC4uOTQxZjM2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL2lvcDMyeC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9pb3AzMnguaApAQCAtMzEsNyArMzEsNSBAQAogI2RlZmluZSBJT1AzMlhfTUFYX1JBTV9TSVpFICAgICAgICAgICAgMHg0MDAwMDAwMFVMCiAjZGVmaW5lIElPUDNYWF9NQVhfUkFNX1NJWkUgICAgICAgICAgICBJT1AzMlhfTUFYX1JBTV9TSVpFCiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElPUDMyWF9QQ0lfTUVNX1dJTkRPV19TSVpFICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIElPUDNYWF9QQ0lfTUVNX1dJTkRPV19TSVpFICAgICBJT1AzMlhfUENJX01FTV9XSU5ET1dfU0laRQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaCBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9pb3AzM3guaAppbmRleCAyNDU2NzMxLi5hODljMGEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvaW9wMzN4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL2lvcDMzeC5oCkBAIC0zNiw4ICszNiw2IEBACiAjZGVmaW5lIElPUDMzWF9NQVhfUkFNX1NJWkUJCTB4ODAwMDAwMDBVTAogI2RlZmluZSBJT1AzWFhfTUFYX1JBTV9TSVpFCQlJT1AzM1hfTUFYX1JBTV9TSVpFCiAjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBCShQSFlTX09GRlNFVCArIElPUDMzWF9NQVhfUkFNX1NJWkUpCi0jZGVmaW5lIElPUDMzWF9QQ0lfTUVNX1dJTkRPV19TSVpFCTB4MDgwMDAwMDAKLSNkZWZpbmUgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUJSU9QMzNYX1BDSV9NRU1fV0lORE9XX1NJWkUKIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYwppbmRleCAxZGE1ZDFjLi4yZTY5MTY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9hZGRyLW1hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvYWRkci1tYXAuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJc2V0dXBfY3B1X3dpbigwLCBLSVJLV09PRF9QQ0lFX0lPX1BIWVNfQkFTRSwgS0lSS1dPT0RfUENJRV9JT19TSVpFLAogCQkgICAgICBUQVJHRVRfUENJRSwgQVRUUl9QQ0lFX0lPLCBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFKTsKIAlzZXR1cF9jcHVfd2luKDEsIEtJUktXT09EX1BDSUVfTUVNX1BIWVNfQkFTRSwgS0lSS1dPT0RfUENJRV9NRU1fU0laRSwKLQkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9NRU0sIC0xKTsKKwkJICAgICAgVEFSR0VUX1BDSUUsIEFUVFJfUENJRV9NRU0sIEtJUktXT09EX1BDSUVfTUVNX0JVU19CQVNFKTsKIAogCS8qCiAJICogU2V0dXAgd2luZG93IGZvciBOQU5EIGNvbnRyb2xsZXIuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwppbmRleCAwYWNiNjFmLi4yNDJkZDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKQEAgLTg0NSw3ICs4NDUsNyBAQAogCXJldHVybiAxNjY2NjY2Njc7CiB9CiAKLXN0YXRpYyB2b2lkIGtpcmt3b29kX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBraXJrd29vZF90aW1lcl9pbml0KHZvaWQpCiB7CiAJa2lya3dvb2RfdGNsayA9IGtpcmt3b29kX2ZpbmRfdGNsaygpOwogCW9yaW9uX3RpbWVfaW5pdChJUlFfS0lSS1dPT0RfQlJJREdFLCBraXJrd29vZF90Y2xrKTsKQEAgLTkxNSw2ICs5MTUsMTQgQEAKIAlraXJrd29vZF91YXJ0MF9kYXRhWzBdLnVhcnRjbGsgPSBraXJrd29vZF90Y2xrOwogCWtpcmt3b29kX3VhcnQxX2RhdGFbMF0udWFydGNsayA9IGtpcmt3b29kX3RjbGs7CiAKKwkvKgorCSAqIERpc2FibGUgcHJvcGFnYXRpb24gb2YgbWJ1cyBlcnJvcnMgdG8gdGhlIENQVSBsb2NhbCBidXMsCisJICogYXMgdGhpcyBjYXVzZXMgbWJ1cyBlcnJvcnMgKHdoaWNoIGNhbiBvY2N1ciBmb3IgZXhhbXBsZQorCSAqIGZvciBQQ0kgYWJvcnRzKSB0byB0aHJvdyBDUFUgYWJvcnRzLCB3aGljaCB3ZSdyZSBub3Qgc2V0CisJICogdXAgdG8gZGVhbCB3aXRoLgorCSAqLworCXdyaXRlbChyZWFkbChDUFVfQ09ORklHKSAmIH5DUFVfQ09ORklHX0VSUk9SX1BST1AsIENQVV9DT05GSUcpOworCiAJa2lya3dvb2Rfc2V0dXBfY3B1X21idXMoKTsKIAogI2lmZGVmIENPTkZJR19DQUNIRV9GRVJPQ0VPTl9MMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2JyaWRnZS1yZWdzLmgKaW5kZXggOWU4MGQ5Mi4uNDE4ZjUwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvYnJpZGdlLXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9icmlkZ2UtcmVncy5oCkBAIC0xMyw2ICsxMyw5IEBACiAKICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CiAKKyNkZWZpbmUgQ1BVX0NPTkZJRwkJKEJSSURHRV9WSVJUX0JBU0UgfCAweDAxMDApCisjZGVmaW5lIENQVV9DT05GSUdfRVJST1JfUFJPUAkweDAwMDAwMDA0CisKICNkZWZpbmUgQ1BVX0NPTlRST0wJCShCUklER0VfVklSVF9CQVNFIHwgMHgwMTA0KQogI2RlZmluZSBDUFVfUkVTRVQJCTB4MDAwMDAwMDIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2lvLmgKaW5kZXggYTY0M2E4NC4uNDRlOGJlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0xNSw3ICsxNSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfX2lvKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKSgoYWRkciAtIEtJUktXT09EX1BDSUVfSU9fUEhZU19CQVNFKQorCXJldHVybiAodm9pZCBfX2lvbWVtICopKChhZGRyIC0gS0lSS1dPT0RfUENJRV9JT19CVVNfQkFTRSkKIAkJCQkJKyBLSVJLV09PRF9QQ0lFX0lPX1ZJUlRfQkFTRSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCmluZGV4IDU0YzEzMjcuLmExNWNmMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBLSVJLV09PRF9SRUdTX1NJWkUJCVNaXzFNCiAKICNkZWZpbmUgS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFCTB4ZTAwMDAwMDAKKyNkZWZpbmUgS0lSS1dPT0RfUENJRV9NRU1fQlVTX0JBU0UJMHhlMDAwMDAwMAogI2RlZmluZSBLSVJLV09PRF9QQ0lFX01FTV9TSVpFCQlTWl8xMjhNCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKaW5kZXggOTQ3ZGZiOC4uNzc2MTdjNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYwpAQCAtNzAsOCArNzAsMjAgQEAKIAlraXJrd29vZF9nZTAwX2luaXQoJm9wZW5yZF9iYXNlX2dlMDBfZGF0YSk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZvcGVucmRfYmFzZV9zYXRhX2RhdGEpOwogCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX2Jhc2VfbXZzZGlvX2RhdGEpOworCisJa2lya3dvb2RfaTJjX2luaXQoKTsKIH0KIAorc3RhdGljIGludCBfX2luaXQgb3BlbnJkX2Jhc2VfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19vcGVucmRfYmFzZSgpKQorCQlraXJrd29vZF9wY2llX2luaXQoKTsKKworCXJldHVybiAwOworIH0KK3N1YnN5c19pbml0Y2FsbChvcGVucmRfYmFzZV9wY2lfaW5pdCk7CisKKwogTUFDSElORV9TVEFSVChPUEVOUkRfQkFTRSwgIk1hcnZlbGwgT3BlblJEIEJhc2UgQm9hcmQiKQogCS8qIE1haW50YWluZXI6IERoYXZhbCBWYXNhIDxkaGF2YWwudmFzYUBlaW5mb2NoaXBzLmNvbT4gKi8KIAkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9wY2llLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYwppbmRleCBkOTBiOWFhLi5hNjA0YjJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3BjaWUuYwpAQCAtOTMsNyArOTMsNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IGtpcmt3b29kX3BjaWVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCitzdGF0aWMgaW50IF9faW5pdCBraXJrd29vZF9wY2llX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWV4dGVybiB1bnNpZ25lZCBpbnQga2lya3dvb2RfY2xrX2N0cmw7CkBAIC0xMTUsNyArMTE1LDcgQEAKIAkgKi8KIAlyZXNbMF0ubmFtZSA9ICJQQ0llIEkvTyBTcGFjZSI7CiAJcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQlyZXNbMF0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX0lPX1BIWVNfQkFTRTsKKwlyZXNbMF0uc3RhcnQgPSBLSVJLV09PRF9QQ0lFX0lPX0JVU19CQVNFOwogCXJlc1swXS5lbmQgPSByZXNbMF0uc3RhcnQgKyBLSVJLV09PRF9QQ0lFX0lPX1NJWkUgLSAxOwogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pKQogCQlwYW5pYygiUmVxdWVzdCBQQ0llIElPIHJlc291cmNlIGZhaWxlZFxuIik7CkBAIC0xMjYsNyArMTI2LDcgQEAKIAkgKi8KIAlyZXNbMV0ubmFtZSA9ICJQQ0llIE1lbW9yeSBTcGFjZSI7CiAJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JcmVzWzFdLnN0YXJ0ID0gS0lSS1dPT0RfUENJRV9NRU1fUEhZU19CQVNFOworCXJlc1sxXS5zdGFydCA9IEtJUktXT09EX1BDSUVfTUVNX0JVU19CQVNFOwogCXJlc1sxXS5lbmQgPSByZXNbMV0uc3RhcnQgKyBLSVJLV09PRF9QQ0lFX01FTV9TSVpFIC0gMTsKIAlpZiAocmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pKQogCQlwYW5pYygiUmVxdWVzdCBQQ0llIE1lbW9yeSByZXNvdXJjZSBmYWlsZWRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3JlZ3Mtc3dpdGNoLmggYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaAppbmRleCA1NmQxMmU4Li45N2U4YWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvcmVncy1zd2l0Y2guaApAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBLUzg2OTVfU0VDMQkJKDB4MDQpCQkvKiBTd2l0Y2ggRW5naW5lIENvbnRyb2wgMSAqLwogI2RlZmluZSBLUzg2OTVfU0VDMgkJKDB4MDgpCQkvKiBTd2l0Y2ggRW5naW5lIENvbnRyb2wgMiAqLwogCi0jZGVmaW5lIEtTODY5NV9QKHgpX0MoeikJKDB4YzAgKyAoKCh4KS0xKSozICsgKCh6KS0xKSkqNCkJLyogUG9ydCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLworI2RlZmluZSBLUzg2OTVfU0VQWENaKHgseikJKDB4MGMgKyAoKCh4KS0xKSozICsgKCh6KS0xKSkqNCkJLyogUG9ydCBDb25maWd1cmF0aW9uIFJlZ2lzdGVycyAqLwogCiAjZGVmaW5lIEtTODY5NV9TRVAxMkFOCQkoMHg0OCkJCS8qIFBvcnQgMSAmIDIgQXV0by1OZWdvdGlhdGlvbiAqLwogI2RlZmluZSBLUzg2OTVfU0VQMzRBTgkJKDB4NGMpCQkvKiBQb3J0IDMgJiA0IEF1dG8tTmVnb3RpYXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oCmluZGV4IGJmMTE4OWZmLi43ZThhODBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTkxMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKQEAgLTE2MCw3ICsxNjAsNyBAQAogI2RlZmluZSBNTUMxX1dQX01NQzFfV1AJCU1GUF9DRkdfRFJWKE1NQzFfV1AsIEFGMCwgTUVESVVNKQogCiAvKiBQV00gKi8KLSNkZWZpbmUgR1BJTzI3IFBXTTMgQUYyCQlNRlBfQ0ZHKEdQSU8yNywgQUYyKQorI2RlZmluZSBHUElPMjdfUFdNM19BRjIJCU1GUF9DRkcoR1BJTzI3LCBBRjIpCiAjZGVmaW5lIEdQSU81MV9QV00yX09VVAkJTUZQX0NGRyhHUElPNTEsIEFGMikKICNkZWZpbmUgR1BJTzExN19QV00xX09VVAlNRlBfQ0ZHKEdQSU8xMTcsIEFGMikKICNkZWZpbmUgR1BJTzExOF9QV00yX09VVAlNRlBfQ0ZHKEdQSU8xMTgsIEFGMikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwppbmRleCAxYjIyZTRhLi4wODQ2NWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCkBAIC04NDUsNiArODQ1LDggQEAKIAl9IGVsc2UgaWYgKGRldiA9PSBNVjc4MTAwX0RFVl9JRCkgewogCQlpZiAocmV2ID09IE1WNzgxMDBfUkVWX0EwKQogCQkJcmV0dXJuICJNVjc4MTAwLUEwIjsKKwkJZWxzZSBpZiAocmV2ID09IE1WNzgxMDBfUkVWX0ExKQorCQkJcmV0dXJuICJNVjc4MTAwLUExIjsKIAkJZWxzZQogCQkJcmV0dXJuICJNVjc4MTAwLVJldi1VbnN1cHBvcnRlZCI7CiAJfSBlbHNlIGlmIChkZXYgPT0gTVY3ODIwMF9ERVZfSUQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKaW5kZXggZDcxNWI5Mi4uNzg4YmRhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9tdjc4eHgwLmgKQEAgLTExMiw2ICsxMTIsNyBAQAogCiAjZGVmaW5lIE1WNzgxMDBfREVWX0lECQkweDc4MTAKICNkZWZpbmUgTVY3ODEwMF9SRVZfQTAJCTEKKyNkZWZpbmUgTVY3ODEwMF9SRVZfQTEJCTIKIAogI2RlZmluZSBNVjc4MjAwX0RFVl9JRAkJMHg3ODIwCiAjZGVmaW5lIE1WNzgyMDBfUkVWX0EwCQkxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwppbmRleCA0MDg5OTUxLi5mZjVlMzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKQEAgLTYzOCw5ICs2MzgsOSBAQAogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4wIiwgTlVMTCwgc2RoYzFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoYzJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4yIiwgTlVMTCwgc2RoYzNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTEiLCBjc3BpMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMiIsIGNzcGkyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkzIiwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4xIiwgTlVMTCwgY3NwaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4yIiwgTlVMTCwgY3NwaTNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWZiLjAiLCBOVUxMLCBsY2RjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNiX2NsaykKQEAgLTY2NSw3ICs2NjUsNyBAQAogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2FoYXJhMiIsIHNhaGFyYTJfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGlja19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJ3ZG9nIiwgd2RvZ19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGVlNjVkZGEuLjkwNmQ1OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0yMyw2ICsyMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMzUsNiArMzksNyBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTc4LDggKzgzLDYgQEAKIAlQQzZfUEZfSTJDMl9TQ0wsCiAJLyogU1BJMSAqLwogCVBEMjVfUEZfQ1NQSTFfUkRZLAotCVBEMjdfUEZfQ1NQSTFfU1MxLAotCVBEMjhfUEZfQ1NQSTFfU1MwLAogCVBEMjlfUEZfQ1NQSTFfU0NMSywKIAlQRDMwX1BGX0NTUEkxX01JU08sCiAJUEQzMV9QRl9DU1BJMV9NT1NJLApAQCAtMTk2LDYgKzE5OSw4NiBAQAogCX0KIH07CiAKK3N0YXRpYyBpbnQgcGNtMDM4X3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgKyAyOH07CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgcGNtMDM4X3NwaV8wX2RhdGEgPSB7CisJLmNoaXBzZWxlY3QgPSBwY20wMzhfc3BpX2NzLAorCS5udW1fY2hpcHNlbGVjdCA9IEFSUkFZX1NJWkUocGNtMDM4X3NwaV9jcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RoYzFfY29uc3VtZXJzW10gPSB7CisJeworCQkuZGV2CT0gJm14Y19zZGhjX2RldmljZTEuZGV2LAorCQkuc3VwcGx5CT0gInNkaGNfdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkaGMxX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMzAwMDAwMCwKKwkJLm1heF91ViA9IDM0MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNkaGMxX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc2RoYzFfY29uc3VtZXJzLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGNhbV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSBOVUxMLAorCQkuc3VwcGx5CT0gImlteF9jYW1fdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGNhbV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzNDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDAsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShjYW1fY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBjYW1fY29uc3VtZXJzLAorfTsKKworc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBwY20wMzhfcmVndWxhdG9yc1tdID0geworCXsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZDQU0sCisJCS5pbml0X2RhdGEgPSAmY2FtX2RhdGEsCisJfSwgeworCQkuaWQgPSBNQzEzNzgzX1JFR1VfVk1NQzEsCisJCS5pbml0X2RhdGEgPSAmc2RoYzFfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgcGNtMDM4X3BtaWMgPSB7CisJLnJlZ3VsYXRvcnMgPSBwY20wMzhfcmVndWxhdG9ycywKKwkubnVtX3JlZ3VsYXRvcnMgPSBBUlJBWV9TSVpFKHBjbTAzOF9yZWd1bGF0b3JzKSwKKwkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9BREMgfCBNQzEzNzgzX1VTRV9SRUdVTEFUT1IgfAorCQkgTUMxMzc4M19VU0VfVE9VQ0hTQ1JFRU4sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIHBjbTAzOF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMgPSAibWMxMzc4MyIsCisJCS5pcnEgPSBJUlFfR1BJT0IoMjMpLAorCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9wbWljLAorCQkubW9kZSA9IFNQSV9DU19ISUdILAorCX0KK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzhfaW5pdCh2b2lkKQogewogCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMocGNtMDM4X3BpbnMsIEFSUkFZX1NJWkUocGNtMDM4X3BpbnMpLApAQCAtMjE5LDYgKzMwMiwxNSBAQAogCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLwogCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwogCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CisKKwkvKiBNQzEzNzgzIElSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQiB8IDIzIHwgR1BJT19HUElPIHwgR1BJT19JTik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY20wMzhfc3BpXzBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM4X3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUocGNtMDM4X3NwaV9ib2FyZF9pbmZvKSk7CisKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX1BDTTk3MF9CQVNFQk9BUkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwppbmRleCBjMjYxZjU5Li4zY2I3ZjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCkBAIC0zOSw3ICszOSw2IEBACiAJUEI3X1BGX1NEMl9EMywKIAlQQjhfUEZfU0QyX0NNRCwKIAlQQjlfUEZfU0QyX0NMSywKLQlHUElPX1BPUlRDIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX0lOLCAvKiBjYXJkIGRldGVjdCAqLwogCS8qIGRpc3BsYXkgKi8KIAlQQTVfUEZfTFNDTEssCiAJUEE2X1BGX0xEMCwKQEAgLTIyOCw2ICsyMjcsNyBAQAogCQkJIlBDTTk3MCIpOwogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJnBjbTAzOF9mYl9kYXRhKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjX3BkYXRhKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk3MF9zamExMDAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmluZGV4IGViMTJkZTEuLjYzNTExZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtMSw0ICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9teDI1Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYwppbmRleCA5MmFhNGZkLi5kMjNhZTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvbXgyNXBkay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKQEAgLTEsMyArMSwyMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IFNhc2NoYSBIYXVlciwgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMjMsMTkgKzQxLDEyIEBACiAJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBuYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKIHsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCBOVUxMKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZuYW5kX2JvYXJkX2luZm8pOwogfQogCi0KIHN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX3RpbWVyX2luaXQodm9pZCkKIHsKIAlteDI1X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzNS5jCmluZGV4IGZlNWM0MjEuLmM1OTUyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYm90Z19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYm90Z19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNib3RnX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soIm14Y193ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYXgiLCBtYXhfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYWRtdXgiLCBhZG11eF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKaW5kZXggMDZiZDYxOC4uYjJhM2JjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCkBAIC01MzAsNyArNTMwLDcgQEAKIAlfUkVHSVNURVJfQ0xPQ0soInNwaV9pbXguMiIsIE5VTEwsIGNzcGkzX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXdkdC4wIiwgTlVMTCwgd2RvZ19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQogCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQxX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0Ml9jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKaW5kZXggOGE1NzdmMy4uZTZhYmUxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgKiBTUEkgbWFzdGVyIGNvbnRyb2xsZXIKICAqIDMgY2hhbm5lbHMKICAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3BpXzBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfMF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJICAgICAgIC5zdGFydCA9IENTUEkxX0JBU0VfQUREUiwKIAkgICAgICAgLmVuZCA9IENTUEkxX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zcGlfMV9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV8xX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ID0gQ1NQSTJfQkFTRV9BRERSLAogCQkuZW5kID0gQ1NQSTJfQkFTRV9BRERSICsgU1pfNEsgLSAxLApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW14X3NwaV8yX3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpXzJfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSBDU1BJM19CQVNFX0FERFIsCiAJCS5lbmQgPSBDU1BJM19CQVNFX0FERFIgKyBTWl80SyAtIDEsCkBAIC00OTUsMjUgKzQ5NSwyNSBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMCA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UwID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMF9yZXNvdXJjZXMsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMSA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UxID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMV9yZXNvdXJjZXMsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMiA9IHsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UyID0gewogCS5uYW1lID0gInNwaV9pbXgiLAogCS5pZCA9IDIsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zcGlfMl9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IGlteF9zcGlfMl9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19zcGlfMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19zcGlfMl9yZXNvdXJjZXMsCiB9OwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCmluZGV4IDc5ZjJiZTQuLmFiODc0MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191c2JoMjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ybmdhX2RldmljZTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zcGlfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKaW5kZXggYWQ1YTExMi4uYmVkZjViOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbW0uYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCkBAIC04MSw2ICs4MSw3IEBACiAJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CiB2b2lkIF9faW5pdCBteDM1X21hcF9pbyh2b2lkKQogewogCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDM1KTsKQEAgLTg5LDYgKzkwLDcgQEAKIAogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IG14MzFfaW5pdF9pcnEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9jbG9jay5jCmluZGV4IDQ0ZWQyMGQuLmNmODFjYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvY2xvY2suYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNsa19kZWJ1Z2ZzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbGtfZGVidWdmc19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2xrX2RlYnVnZnNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiA9IGNsa19kZWJ1Z2ZzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKaW5kZXggNDI5MjBmOS4uOGFkNWNjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCkBAIC0yMTksNiArMjE5LDEwIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbXNfZGVsdGFfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisKIAlpb3RhYmxlX2luaXQoYW1zX2RlbHRhX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYW1zX2RlbHRhX2lvX2Rlc2MpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gYW1zX2RlbHRhX2NvbmZpZzsKQEAgLTIzMSw2ICsyMzUsOCBAQAogCiAJb21hcF91c2JfaW5pdCgmYW1zX2RlbHRhX3VzYl9jb25maWcpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CisKKwlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9SU1RDVDEpIHwgMHgwMDA0LCBBUk1fUlNUQ1QxKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhbXNfZGVsdGFfbW9kZW1fcG9ydHNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKaW5kZXggZmI0NzIzOS4uNmM4YTQxZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMKQEAgLTY0LDYgKzY0LDE0IEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJLyogbXV4IHBpbnMgZm9yIHVhcnRzICovCisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKKwogCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTUxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCmluZGV4IGNjMmFiYmIuLmNkNmMzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwpAQCAtMzc2LDYgKzM3NiwyNiBAQAogewogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCXVuc2lnbmVkIGNoYXIgcmVnOworCisJCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCQlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwkJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7CisJCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKKwkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMV9FTjsKKwkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOworCQl1ZGVsYXkoMTApOworCisJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU47CisJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKKwkJdWRlbGF5KDEwKTsKKwogCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CiAJCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGlubm92YXRvcjE1MTBfYm9hcmRpbmZvLAogCQkJCUFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9ib2FyZGluZm8pKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDkwZGQwNDMuLjRkZTI1ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMzQyLDYgKzM0MiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdGVfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHBhbG10ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUocGFsbXRlX2NvbmZpZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCmluZGV4IDgyNTYxMzkuLmQ5NzJjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYwpAQCAtMjg5LDYgKzI4OSwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdHRfaW5pdCh2b2lkKQogeworCS8qIG11eCBwaW5zIGZvciB1YXJ0cyAqLworCW9tYXBfY2ZnX3JlZyhVQVJUMV9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQxX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDJfUlRTKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUM19SWCk7CisKIAlvbWFwX21wdV93ZHRfbW9kZSgwKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gcGFsbXR0X2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKaW5kZXggODFiNmJkZS4uOTg2YmQ0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTMwNyw2ICszMDcsMTQgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogb21hcF9wYWxtejcxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGFsbXo3MV9ncGlvX3NldHVwKDEpOwogCW9tYXBfbXB1X3dkdF9tb2RlKDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCAwMmM4NWNhLi4wNTZhZTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTM3Nyw2ICszNzcsMTQgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfc3gxX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJcGxhdGZvcm1fYWRkX2RldmljZXMoc3gxX2RldmljZXMsIEFSUkFZX1NJWkUoc3gxX2RldmljZXMpKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc3gxX2NvbmZpZzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IGMwNmU3YTUuLjA3YjA3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUyLDYgKzE1MiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX2luaXQodm9pZCkKIHsKKwkvKiBtdXggcGlucyBmb3IgdWFydHMgKi8KKwlvbWFwX2NmZ19yZWcoVUFSVDFfVFgpOworCW9tYXBfY2ZnX3JlZyhVQVJUMV9SVFMpOworCW9tYXBfY2ZnX3JlZyhVQVJUMl9UWCk7CisJb21hcF9jZmdfcmVnKFVBUlQyX1JUUyk7CisJb21hcF9jZmdfcmVnKFVBUlQzX1RYKTsKKwlvbWFwX2NmZ19yZWcoVUFSVDNfUlgpOworCiAJLyogV2F0Y2hkb2cgKi8KIAlncGlvX3JlcXVlc3QoMCwgIldhdGNoZG9nIik7CiAJLyogc21jOTF4IHJlc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKaW5kZXggNGVmMjZmYS4uZTVkY2RmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwpAQCAtMzgsNyArMzgsNyBAQAogCXsgLmp0YWdfaWQgPSAweGI1NzQsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMTAzMTUsIC50eXBlID0gMHgwMzEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4MzU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMTAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAzMDB9LAotCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCisJeyAuanRhZ19pZCA9IDB4YjYyYywgLmRpZV9yZXYgPSAweDEsIC5vbWFwX2lkID0gMHgwMzMyMDUwMCwgLnR5cGUgPSAweDA4NTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNDcwLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzEwMTAwLCAudHlwZSA9IDB4MTUxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgxNjEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjU3NiwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMyMDEwMCwgLnR5cGUgPSAweDE2MTEwMDAwfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IGQ0OTZlNTAuLmQyMzk3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTMxLDggKzEzMSw2IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKLQkJdW5zaWduZWQgY2hhciByZWc7Ci0KIAkJc3dpdGNoIChpKSB7CiAJCWNhc2UgMDoKIAkJCXVhcnQxX2NrID0gY2xrX2dldChOVUxMLCAidWFydDFfY2siKTsKQEAgLTE0MywxNiArMTQxLDYgQEAKIAkJCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCQkJCWNsa19zZXRfcmF0ZSh1YXJ0MV9jaywgMTIwMDAwMDApOwogCQkJfQotCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQxX1RYKTsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDFfUlRTKTsKLQkJCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpKSB7Ci0JCQkJCXJlZyA9IGZwZ2FfcmVhZChPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJcmVnIHw9IE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU47Ci0JCQkJCWZwZ2Ffd3JpdGUocmVnLCBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKLQkJCQkJdWRlbGF5KDEwKTsKLQkJCQl9Ci0JCQl9CiAJCQlicmVhazsKIAkJY2FzZSAxOgogCQkJdWFydDJfY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9jayIpOwpAQCAtMTY1LDE2ICsxNTMsNiBAQAogCQkJCWVsc2UKIAkJCQkJY2xrX3NldF9yYXRlKHVhcnQyX2NrLCA0ODAwMDAwMCk7CiAJCQl9Ci0JCQlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJCQlvbWFwX2NmZ19yZWcoVUFSVDJfVFgpOwotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUMl9SVFMpOwotCQkJCWlmIChtYWNoaW5lX2lzX29tYXBfaW5ub3ZhdG9yKCkpIHsKLQkJCQkJcmVnID0gZnBnYV9yZWFkKE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQlyZWcgfD0gT01BUDE1MTBfRlBHQV9QQ1JfQ09NMl9FTjsKLQkJCQkJZnBnYV93cml0ZShyZWcsIE9NQVAxNTEwX0ZQR0FfUE9XRVIpOwotCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQl1YXJ0M19jayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2NrIik7CkBAIC0xODUsMTAgKzE2Myw2IEBACiAJCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJCQljbGtfc2V0X3JhdGUodWFydDNfY2ssIDEyMDAwMDAwKTsKIAkJCX0KLQkJCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewotCQkJCW9tYXBfY2ZnX3JlZyhVQVJUM19UWCk7Ci0JCQkJb21hcF9jZmdfcmVnKFVBUlQzX1JYKTsKLQkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCW9tYXBfc2VyaWFsX3Jlc2V0KCZzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNzViMWM3ZS4uYWFkMTk0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNzMsOSArNzMsMjEgQEAKIAlib29sICJPTUFQIDM0MzAgU0RQIGJvYXJkIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCiAKK2NvbmZpZyBNQUNIX05PS0lBX044MDAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTAKKyAgICAgICBib29sCisKK2NvbmZpZyBNQUNIX05PS0lBX044MTBfV0lNQVgKKyAgICAgICBib29sCisKIGNvbmZpZyBNQUNIX05PS0lBX044WDAKIAlib29sICJOb2tpYSBOODAwL044MTAiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyNDIwCisJc2VsZWN0IE1BQ0hfTk9LSUFfTjgwMAorCXNlbGVjdCBNQUNIX05PS0lBX044MTAKKwlzZWxlY3QgTUFDSF9OT0tJQV9OODEwX1dJTUFYCiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKaW5kZXggYmQ1N2VjNy4uMGFjYjU1NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgInNkcmFtLXFpbW9uZGEtaHliMThtNTEyMTYwYWYtNi5oIgpAQCAtNTQsNyArNTQsNyBAQAogCiAjZGVmaW5lIFRXTDQwMzBfTVNFQ1VSRV9HUElPIDIyCiAKLXN0YXRpYyBpbnQgc2RwMzQzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtODgsMTEgKzg4LDE1IEBACiAJMAogfTsKIAorc3RhdGljIHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgYm9hcmRfbWFwX2RhdGEgPSB7CisJLmtleW1hcAkJCT0gYm9hcmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQkJPSBBUlJBWV9TSVpFKGJvYXJkX2tleW1hcCksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgc2RwMzQzMF9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA1LAogCS5jb2xzCQk9IDYsCi0JLmtleW1hcAkJPSBzZHAzNDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoc2RwMzQzMF9rZXltYXApLAogCS5yZXAJCT0gMSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKaW5kZXggZWIzN2M0MC4uNjA5YTVhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMKQEAgLTU4LDYgKzU4LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfNDQzMHNkcF9pbml0X2lycSh2b2lkKQogeworCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOwogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCW9tYXAyX2dwX2Nsb2NrZXZlbnRfc2V0X2dwdGltZXIoMSk7CkBAIC03MCw4ICs3Miw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF80NDMwc2RwX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHA0NDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwNDQzMF9kZXZpY2VzKSk7Ci0Jb21hcF9ib2FyZF9jb25maWcgPSBzZHA0NDMwX2NvbmZpZzsKLQlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHA0NDMwX2NvbmZpZyk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwppbmRleCBlYzY4NTRjLi5kNTdlYzJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtNDEsNyArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPG1hY2gvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTgwLDcgKzgwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBsZHBfdHdsNDAzMF9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV8xKSwKIAlLRVkoMSwgMCwgS0VZXzIpLAogCUtFWSgyLCAwLCBLRVlfMyksCkBAIC0xMDEsMTEgKzEwMSwxNSBAQAogCTAKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIGxkcF9rcF90d2w0MDMwX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IGxkcF90d2w0MDMwX2tleW1hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUobGRwX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggNTAwYzk5NS4uMDhiMDgxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtMTM5LDggKzEzOSwxMyBAQAogc3RhdGljIGludCBiZWFnbGVfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKKwlpZiAoc3lzdGVtX3JldiA+PSAweDIwICYmIHN5c3RlbV9yZXYgPD0gMHgzNDMwMTAwMCkgeworCQlvbWFwX2NmZ19yZWcoQUc5XzM0WFhfR1BJTzIzKTsKKwkJbW1jWzBdLmdwaW9fd3AgPSAyMzsKKwl9IGVsc2UgeworCQlvbWFwX2NmZ19yZWcoQUg4XzM0WFhfR1BJTzI5KTsKKwl9CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCi0Jb21hcF9jZmdfcmVnKEFIOF8zNFhYX0dQSU8yOSk7CiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CiAKQEAgLTE1Nyw3ICsxNjIsNyBAQAogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDAgPT0gbGVkQSwgRUhDSSBuRU5fVVNCX1BXUiAob3V0LCBhY3RpdmUgbG93KSAqLwogCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIm5FTl9VU0JfUFdSIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOwogCiAJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCiAJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKaW5kZXggZDUwYjliZS4uNGM0ZDdmOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgpAQCAtMzcsNyArMzgsNiBAQAogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KIAogI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCkBAIC0xNTksNyArMTU5LDcgQEAKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKIAotc3RhdGljIGludCBvbWFwM2V2bV9rZXltYXBbXSA9IHsKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9MRUZUKSwKIAlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKIAlLRVkoMCwgMiwgS0VZX0EpLApAQCAtMTc4LDExICsxNzgsMTUgQEAKIAlLRVkoMywgMywgS0VZX1ApCiB9OwogCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBvbWFwM2V2bV9rcF9kYXRhID0geworCS5rZXltYXBfZGF0YQk9ICZib2FyZF9tYXBfZGF0YSwKIAkucm93cwkJPSA0LAogCS5jb2xzCQk9IDQsCi0JLmtleW1hcAkJPSBvbWFwM2V2bV9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG9tYXAzZXZtX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYjQzZjZlMy4uNzUxOWVkYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMzksNyArNDAsNiBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKQEAgLTEzMyw1OCArMTMzLDYyIEBACiAJb21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKDMyICogNSwgR1BJT19ERUJPVU5DRV9USU1FKTsKIH0KIAotc3RhdGljIGludCBwYW5kb3JhX2tleXBhZF9tYXBbXSA9IHsKLQkvKiBjb2wsIHJvdywgY29kZSAqLworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKKwkvKiByb3csIGNvbCwgY29kZSAqLwogCUtFWSgwLCAwLCBLRVlfOSksCi0JS0VZKDAsIDEsIEtFWV8wKSwKLQlLRVkoMCwgMiwgS0VZX0JBQ0tTUEFDRSksCi0JS0VZKDAsIDMsIEtFWV9PKSwKLQlLRVkoMCwgNCwgS0VZX1ApLAotCUtFWSgwLCA1LCBLRVlfSyksCi0JS0VZKDAsIDYsIEtFWV9MKSwKLQlLRVkoMCwgNywgS0VZX0VOVEVSKSwKLQlLRVkoMSwgMCwgS0VZXzgpLAorCUtFWSgwLCAxLCBLRVlfOCksCisJS0VZKDAsIDIsIEtFWV9JKSwKKwlLRVkoMCwgMywgS0VZX0opLAorCUtFWSgwLCA0LCBLRVlfTiksCisJS0VZKDAsIDUsIEtFWV9NKSwKKwlLRVkoMSwgMCwgS0VZXzApLAogCUtFWSgxLCAxLCBLRVlfNyksCi0JS0VZKDEsIDIsIEtFWV82KSwKLQlLRVkoMSwgMywgS0VZXzUpLAotCUtFWSgxLCA0LCBLRVlfNCksCi0JS0VZKDEsIDUsIEtFWV8zKSwKLQlLRVkoMSwgNiwgS0VZXzIpLAotCUtFWSgxLCA3LCBLRVlfMSksCi0JS0VZKDIsIDAsIEtFWV9JKSwKLQlLRVkoMiwgMSwgS0VZX1UpLAorCUtFWSgxLCAyLCBLRVlfVSksCisJS0VZKDEsIDMsIEtFWV9IKSwKKwlLRVkoMSwgNCwgS0VZX0IpLAorCUtFWSgxLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgyLCAwLCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMiwgMSwgS0VZXzYpLAogCUtFWSgyLCAyLCBLRVlfWSksCi0JS0VZKDIsIDMsIEtFWV9UKSwKLQlLRVkoMiwgNCwgS0VZX1IpLAotCUtFWSgyLCA1LCBLRVlfRSksCi0JS0VZKDIsIDYsIEtFWV9XKSwKLQlLRVkoMiwgNywgS0VZX1EpLAotCUtFWSgzLCAwLCBLRVlfSiksCi0JS0VZKDMsIDEsIEtFWV9IKSwKLQlLRVkoMywgMiwgS0VZX0cpLAorCUtFWSgyLCAzLCBLRVlfRyksCisJS0VZKDIsIDQsIEtFWV9WKSwKKwlLRVkoMiwgNSwgS0VZX0ZOKSwKKwlLRVkoMywgMCwgS0VZX08pLAorCUtFWSgzLCAxLCBLRVlfNSksCisJS0VZKDMsIDIsIEtFWV9UKSwKIAlLRVkoMywgMywgS0VZX0YpLAotCUtFWSgzLCA0LCBLRVlfRCksCi0JS0VZKDMsIDUsIEtFWV9TKSwKLQlLRVkoMywgNiwgS0VZX0EpLAotCUtFWSgzLCA3LCBLRVlfTEVGVFNISUZUKSwKLQlLRVkoNCwgMCwgS0VZX04pLAotCUtFWSg0LCAxLCBLRVlfQiksCi0JS0VZKDQsIDIsIEtFWV9WKSwKLQlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSgzLCA0LCBLRVlfQyksCisJS0VZKDQsIDAsIEtFWV9QKSwKKwlLRVkoNCwgMSwgS0VZXzQpLAorCUtFWSg0LCAyLCBLRVlfUiksCisJS0VZKDQsIDMsIEtFWV9EKSwKIAlLRVkoNCwgNCwgS0VZX1gpLAotCUtFWSg0LCA1LCBLRVlfWiksCi0JS0VZKDQsIDYsIEtFWV9ET1QpLAotCUtFWSg0LCA3LCBLRVlfQ09NTUEpLAotCUtFWSg1LCAwLCBLRVlfTSksCi0JS0VZKDUsIDEsIEtFWV9TUEFDRSksCi0JS0VZKDUsIDIsIEtFWV9GTiksCisJS0VZKDUsIDAsIEtFWV9LKSwKKwlLRVkoNSwgMSwgS0VZXzMpLAorCUtFWSg1LCAyLCBLRVlfRSksCisJS0VZKDUsIDMsIEtFWV9TKSwKKwlLRVkoNSwgNCwgS0VZX1opLAorCUtFWSg2LCAwLCBLRVlfTCksCisJS0VZKDYsIDEsIEtFWV8yKSwKKwlLRVkoNiwgMiwgS0VZX1cpLAorCUtFWSg2LCAzLCBLRVlfQSksCisJS0VZKDYsIDQsIEtFWV9ET1QpLAorCUtFWSg3LCAwLCBLRVlfRU5URVIpLAorCUtFWSg3LCAxLCBLRVlfMSksCisJS0VZKDcsIDIsIEtFWV9RKSwKKwlLRVkoNywgMywgS0VZX0xFRlRTSElGVCksCisJS0VZKDcsIDQsIEtFWV9DT01NQSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSBwYW5kb3JhX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gNiwKLQkua2V5bWFwCQk9IHBhbmRvcmFfa2V5cGFkX21hcCwKLQkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUocGFuZG9yYV9rZXlwYWRfbWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCmluZGV4IGU2ZTgyOTAuLmUzNGQ5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS1wZXJpcGhlcmFscy5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgpAQCAtMjcsNyArMjgsNiBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvb25lbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy1zbWM5MXguaD4KIApAQCAtMzYsNTggKzM2LDYyIEBACiAjZGVmaW5lIFNZU1RFTV9SRVZfQl9VU0VTX1ZBVVgzCTB4MTY5OQogI2RlZmluZSBTWVNURU1fUkVWX1NfVVNFU19WQVVYMyAweDgKIAotc3RhdGljIGludCByeDUxX2tleW1hcFtdID0geworc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX1EpLAotCUtFWSgwLCAxLCBLRVlfVyksCi0JS0VZKDAsIDIsIEtFWV9FKSwKLQlLRVkoMCwgMywgS0VZX1IpLAotCUtFWSgwLCA0LCBLRVlfVCksCi0JS0VZKDAsIDUsIEtFWV9ZKSwKLQlLRVkoMCwgNiwgS0VZX1UpLAotCUtFWSgwLCA3LCBLRVlfSSksCi0JS0VZKDEsIDAsIEtFWV9PKSwKKwlLRVkoMCwgMSwgS0VZX08pLAorCUtFWSgwLCAyLCBLRVlfUCksCisJS0VZKDAsIDMsIEtFWV9DT01NQSksCisJS0VZKDAsIDQsIEtFWV9CQUNLU1BBQ0UpLAorCUtFWSgwLCA2LCBLRVlfQSksCisJS0VZKDAsIDcsIEtFWV9TKSwKKwlLRVkoMSwgMCwgS0VZX1cpLAogCUtFWSgxLCAxLCBLRVlfRCksCi0JS0VZKDEsIDIsIEtFWV9ET1QpLAotCUtFWSgxLCAzLCBLRVlfViksCi0JS0VZKDEsIDQsIEtFWV9ET1dOKSwKLQlLRVkoMiwgMCwgS0VZX1ApLAotCUtFWSgyLCAxLCBLRVlfRiksCisJS0VZKDEsIDIsIEtFWV9GKSwKKwlLRVkoMSwgMywgS0VZX0cpLAorCUtFWSgxLCA0LCBLRVlfSCksCisJS0VZKDEsIDUsIEtFWV9KKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfTCksCisJS0VZKDIsIDAsIEtFWV9FKSwKKwlLRVkoMiwgMSwgS0VZX0RPVCksCiAJS0VZKDIsIDIsIEtFWV9VUCksCi0JS0VZKDIsIDMsIEtFWV9CKSwKLQlLRVkoMiwgNCwgS0VZX1JJR0hUKSwKLQlLRVkoMywgMCwgS0VZX0NPTU1BKSwKLQlLRVkoMywgMSwgS0VZX0cpLAotCUtFWSgzLCAyLCBLRVlfRU5URVIpLAorCUtFWSgyLCAzLCBLRVlfRU5URVIpLAorCUtFWSgyLCA1LCBLRVlfWiksCisJS0VZKDIsIDYsIEtFWV9YKSwKKwlLRVkoMiwgNywgS0VZX0MpLAorCUtFWSgzLCAwLCBLRVlfUiksCisJS0VZKDMsIDEsIEtFWV9WKSwKKwlLRVkoMywgMiwgS0VZX0IpLAogCUtFWSgzLCAzLCBLRVlfTiksCi0JS0VZKDQsIDAsIEtFWV9CQUNLU1BBQ0UpLAotCUtFWSg0LCAxLCBLRVlfSCksCi0JS0VZKDQsIDMsIEtFWV9NKSwKKwlLRVkoMywgNCwgS0VZX00pLAorCUtFWSgzLCA1LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA2LCBLRVlfU1BBQ0UpLAorCUtFWSgzLCA3LCBLRVlfTEVGVCksCisJS0VZKDQsIDAsIEtFWV9UKSwKKwlLRVkoNCwgMSwgS0VZX0RPV04pLAorCUtFWSg0LCAyLCBLRVlfUklHSFQpLAogCUtFWSg0LCA0LCBLRVlfTEVGVENUUkwpLAotCUtFWSg1LCAxLCBLRVlfSiksCi0JS0VZKDUsIDIsIEtFWV9aKSwKLQlLRVkoNSwgMywgS0VZX1NQQUNFKSwKLQlLRVkoNSwgNCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDYsIDAsIEtFWV9BKSwKLQlLRVkoNiwgMSwgS0VZX0spLAotCUtFWSg2LCAyLCBLRVlfWCksCi0JS0VZKDYsIDMsIEtFWV9TUEFDRSksCi0JS0VZKDYsIDQsIEtFWV9GTiksCi0JS0VZKDcsIDAsIEtFWV9TKSwKLQlLRVkoNywgMSwgS0VZX0wpLAotCUtFWSg3LCAyLCBLRVlfQyksCi0JS0VZKDcsIDMsIEtFWV9MRUZUKSwKLQlLRVkoMHhmZiwgMCwgS0VZX0Y2KSwKLQlLRVkoMHhmZiwgMSwgS0VZX0Y3KSwKLQlLRVkoMHhmZiwgMiwgS0VZX0Y4KSwKLQlLRVkoMHhmZiwgNCwgS0VZX0Y5KSwKLQlLRVkoMHhmZiwgNSwgS0VZX0YxMCksCisJS0VZKDQsIDUsIEtFWV9SSUdIVEFMVCksCisJS0VZKDQsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSg1LCAwLCBLRVlfWSksCisJS0VZKDYsIDAsIEtFWV9VKSwKKwlLRVkoNywgMCwgS0VZX0kpLAorCUtFWSg3LCAxLCBLRVlfRjcpLAorCUtFWSg3LCAyLCBLRVlfRjgpLAorCUtFWSgweGZmLCAyLCBLRVlfRjkpLAorCUtFWSgweGZmLCA0LCBLRVlfRjEwKSwKKwlLRVkoMHhmZiwgNSwgS0VZX0YxMSksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSBib2FyZF9tYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBib2FyZF9rZXltYXAsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUoYm9hcmRfa2V5bWFwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSByeDUxX2twX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJmJvYXJkX21hcF9kYXRhLAogCS5yb3dzCQk9IDgsCiAJLmNvbHMJCT0gOCwKLQkua2V5bWFwCQk9IHJ4NTFfa2V5bWFwLAotCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShyeDUxX2tleW1hcCksCiAJLnJlcAkJPSAxLAogfTsKIApAQCAtNDQwLDcgKzQ0NCw3IEBACiAJCXJ4NTFfdHdsZGF0YS52YXV4MyA9ICZyeDUxX3ZhdXgzX2NhbTsKIAkJcng1MV90d2xkYXRhLnZtbWMyID0gJnJ4NTFfdm1tYzI7CiAJfQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCByeDUxX3BlcmlwaGVyYWxzX2kyY19ib2FyZF9pbmZvXzEsCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDIyMDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKIAkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IGY5MTk2YzMuLjc4ODY5YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYwppbmRleCAzMjQwMDllLi41MWUwYjNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yMiw3MSArMjMsNzQgQEAKIAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC91c2IuaD4KLSNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKIAogLyogWm9vbTIgaGFzIFF3ZXJ0eSBrZXlib2FyZCovCi1zdGF0aWMgaW50IHpvb20yX3R3bDQwMzBfa2V5bWFwW10gPSB7CitzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRSksCi0JS0VZKDEsIDAsIEtFWV9SKSwKLQlLRVkoMiwgMCwgS0VZX1QpLAotCUtFWSgzLCAwLCBLRVlfSE9NRSksCi0JS0VZKDYsIDAsIEtFWV9JKSwKLQlLRVkoNywgMCwgS0VZX0xFRlRTSElGVCksCi0JS0VZKDAsIDEsIEtFWV9EKSwKKwlLRVkoMCwgMSwgS0VZX1IpLAorCUtFWSgwLCAyLCBLRVlfVCksCisJS0VZKDAsIDMsIEtFWV9IT01FKSwKKwlLRVkoMCwgNiwgS0VZX0kpLAorCUtFWSgwLCA3LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoMSwgMCwgS0VZX0QpLAogCUtFWSgxLCAxLCBLRVlfRiksCi0JS0VZKDIsIDEsIEtFWV9HKSwKLQlLRVkoMywgMSwgS0VZX1NFTkQpLAotCUtFWSg2LCAxLCBLRVlfSyksCi0JS0VZKDcsIDEsIEtFWV9FTlRFUiksCi0JS0VZKDAsIDIsIEtFWV9YKSwKLQlLRVkoMSwgMiwgS0VZX0MpLAorCUtFWSgxLCAyLCBLRVlfRyksCisJS0VZKDEsIDMsIEtFWV9TRU5EKSwKKwlLRVkoMSwgNiwgS0VZX0spLAorCUtFWSgxLCA3LCBLRVlfRU5URVIpLAorCUtFWSgyLCAwLCBLRVlfWCksCisJS0VZKDIsIDEsIEtFWV9DKSwKIAlLRVkoMiwgMiwgS0VZX1YpLAotCUtFWSgzLCAyLCBLRVlfRU5EKSwKLQlLRVkoNiwgMiwgS0VZX0RPVCksCi0JS0VZKDcsIDIsIEtFWV9DQVBTTE9DSyksCi0JS0VZKDAsIDMsIEtFWV9aKSwKLQlLRVkoMSwgMywgS0VZX0tQUExVUyksCi0JS0VZKDIsIDMsIEtFWV9CKSwKKwlLRVkoMiwgMywgS0VZX0VORCksCisJS0VZKDIsIDYsIEtFWV9ET1QpLAorCUtFWSgyLCA3LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgzLCAwLCBLRVlfWiksCisJS0VZKDMsIDEsIEtFWV9LUFBMVVMpLAorCUtFWSgzLCAyLCBLRVlfQiksCiAJS0VZKDMsIDMsIEtFWV9GMSksCi0JS0VZKDYsIDMsIEtFWV9PKSwKLQlLRVkoNywgMywgS0VZX1NQQUNFKSwKLQlLRVkoMCwgNCwgS0VZX1cpLAotCUtFWSgxLCA0LCBLRVlfWSksCi0JS0VZKDIsIDQsIEtFWV9VKSwKLQlLRVkoMywgNCwgS0VZX0YyKSwKKwlLRVkoMywgNiwgS0VZX08pLAorCUtFWSgzLCA3LCBLRVlfU1BBQ0UpLAorCUtFWSg0LCAwLCBLRVlfVyksCisJS0VZKDQsIDEsIEtFWV9ZKSwKKwlLRVkoNCwgMiwgS0VZX1UpLAorCUtFWSg0LCAzLCBLRVlfRjIpLAogCUtFWSg0LCA0LCBLRVlfVk9MVU1FVVApLAotCUtFWSg2LCA0LCBLRVlfTCksCi0JS0VZKDcsIDQsIEtFWV9MRUZUKSwKLQlLRVkoMCwgNSwgS0VZX1MpLAotCUtFWSgxLCA1LCBLRVlfSCksCi0JS0VZKDIsIDUsIEtFWV9KKSwKLQlLRVkoMywgNSwgS0VZX0YzKSwKKwlLRVkoNCwgNiwgS0VZX0wpLAorCUtFWSg0LCA3LCBLRVlfTEVGVCksCisJS0VZKDUsIDAsIEtFWV9TKSwKKwlLRVkoNSwgMSwgS0VZX0gpLAorCUtFWSg1LCAyLCBLRVlfSiksCisJS0VZKDUsIDMsIEtFWV9GMyksCiAJS0VZKDUsIDUsIEtFWV9WT0xVTUVET1dOKSwKLQlLRVkoNiwgNSwgS0VZX00pLAotCUtFWSg0LCA1LCBLRVlfRU5URVIpLAotCUtFWSg3LCA1LCBLRVlfUklHSFQpLAotCUtFWSgwLCA2LCBLRVlfUSksCi0JS0VZKDEsIDYsIEtFWV9BKSwKLQlLRVkoMiwgNiwgS0VZX04pLAotCUtFWSgzLCA2LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoNSwgNiwgS0VZX00pLAorCUtFWSg1LCA3LCBLRVlfRU5URVIpLAorCUtFWSg2LCAwLCBLRVlfUSksCisJS0VZKDYsIDEsIEtFWV9BKSwKKwlLRVkoNiwgMiwgS0VZX04pLAorCUtFWSg2LCAzLCBLRVlfQkFDS1NQQUNFKSwKIAlLRVkoNiwgNiwgS0VZX1ApLAotCUtFWSg3LCA2LCBLRVlfVVApLAogCUtFWSg2LCA3LCBLRVlfU0VMRUNUKSwKLQlLRVkoNywgNywgS0VZX0RPV04pLAotCUtFWSgwLCA3LCBLRVlfUFJPRzEpLAkvKk1BQ1JPIDEgPFVzZXIgZGVmaW5lZD4gKi8KLQlLRVkoMSwgNywgS0VZX1BST0cyKSwJLypNQUNSTyAyIDxVc2VyIGRlZmluZWQ+ICovCi0JS0VZKDIsIDcsIEtFWV9QUk9HMyksCS8qTUFDUk8gMyA8VXNlciBkZWZpbmVkPiAqLwotCUtFWSgzLCA3LCBLRVlfUFJPRzQpLAkvKk1BQ1JPIDQgPFVzZXIgZGVmaW5lZD4gKi8KLQkwCisJS0VZKDcsIDAsIEtFWV9QUk9HMSksCS8qTUFDUk8gMSA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCAxLCBLRVlfUFJPRzIpLAkvKk1BQ1JPIDIgPFVzZXIgZGVmaW5lZD4gKi8KKwlLRVkoNywgMiwgS0VZX1BST0czKSwJLypNQUNSTyAzIDxVc2VyIGRlZmluZWQ+ICovCisJS0VZKDcsIDMsIEtFWV9QUk9HNCksCS8qTUFDUk8gNCA8VXNlciBkZWZpbmVkPiAqLworCUtFWSg3LCA1LCBLRVlfUklHSFQpLAorCUtFWSg3LCA2LCBLRVlfVVApLAorCUtFWSg3LCA3LCBLRVlfRE9XTikKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAogfTsKIAogc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHpvb20yX2twX3R3bDQwMzBfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCiAJLnJvd3MJCT0gOCwKIAkuY29scwkJPSA4LAotCS5rZXltYXAJCT0gem9vbTJfdHdsNDAzMF9rZXltYXAsCi0JLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKHpvb20yX3R3bDQwMzBfa2V5bWFwKSwKIAkucmVwCQk9IDEsCiB9OwogCkBAIC0yMDksNyArMjEzLDggQEAKIHsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHpvb20yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh6b29tMl9jb25maWcpOwotCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwsIE5VTEwpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMsCisJCQkJIG10NDZoMzJtMzJsZjZfc2RyY19wYXJhbXMpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKaW5kZXggYmM1ZDNhYy4uZTJkYmVkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCkBAIC03NjksNiArNzY5LDcgQEAKIAkJaWYgKGMtPmNwdSAmIGNwdV9tYXNrKSB7CiAJCQljbGtkZXZfYWRkKCZjLT5sayk7CiAJCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CiAJCX0KIAogCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZmFmY2QzMi4uN2M1YzAwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0zMzgsNiArMzM4LDEzIEBACiAgKi8KICNkZWZpbmUgU0RSQ19NUFVSQVRFX0xPT1BTCQk5NgogCisvKgorICogRFBMTDVfRlJFUV9GT1JfVVNCSE9TVDogVVNCSE9TVCBhbmQgVVNCVExMIGFyZSB0aGUgb25seSBjbG9ja3MKKyAqIHRoYXQgYXJlIHNvdXJjZWQgYnkgRFBMTDUsIGFuZCBib3RoIG9mIHRoZXNlIHJlcXVpcmUgdGhpcyBjbG9jaworICogdG8gYmUgYXQgMTIwIE1IeiBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUCQkxMjAwMDAwMDAKKwogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciBTU0kKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCkBAIC00NjYsNyArNDczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZpbnQ7CiAJdTE2IGYgPSAwOwogCi0JZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gKG4gKyAxKTsKKwlmaW50ID0gY2xrLT5kcGxsX2RhdGEtPmNsa19yZWYtPnJhdGUgLyBuOwogCiAJcHJfZGVidWcoImNsb2NrOiBmaW50IGlzICVsdVxuIiwgZmludCk7CiAKQEAgLTEwNTYsNiArMTA2MywyOCBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCit7CisJc3RydWN0IGNsayAqZHBsbDVfY2xrOworCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKKworCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7CisJY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisJY2xrX2VuYWJsZShkcGxsNV9jbGspOworCisJLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KKwlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKKworCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCisJZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKKwljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7CisJY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7CisKKwljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7CisJcmV0dXJuOworfQorCiAvKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCiAKIC8qCkBAIC0xMTQ4LDYgKzExNzcsMTIgQEAKIAkgKi8KIAljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CiAKKwkvKgorCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCisJCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7CisKIAkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCiAJLyogUkVWSVNJVDogbm90IHlldCByZWFkeSBmb3IgMzQzeCAqLwogI2lmIDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCmluZGV4IGM4MTE5NzguLjk1NjVjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaApAQCAtNDg5LDkgKzQ4OSw5IEBACiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM19tMngyX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM194Ml9jaywKKwkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKIAkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCA0ZWY3YjRmLi41OGFmZjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xMzcsNiArMTM3LDM2IEBACiAJfQogfQogCisvKgorICogX29tYXAyX2Nsa2RtX3NldF9od3N1cCAtIHNldCB0aGUgaHdzdXAgaWRsZSB0cmFuc2l0aW9uIGJpdAorICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgorICogQGVuYWJsZTogaW50IDAgdG8gZGlzYWJsZSwgMSB0byBlbmFibGUKKyAqCisgKiBJbnRlcm5hbCBoZWxwZXIgZm9yIGFjdHVhbGx5IHN3aXRjaGluZyB0aGUgYml0IHRoYXQgY29udHJvbHMgaHdzdXAKKyAqIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtLgorICovCitzdGF0aWMgdm9pZCBfb21hcDJfY2xrZG1fc2V0X2h3c3VwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIGludCBlbmFibGUpCit7CisJdTMyIHY7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMjRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKGVuYWJsZSkKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE87CisJCWVsc2UKKwkJCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOworCX0gZWxzZSB7CisJCUJVRygpOworCX0KKworCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAorCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKl9jbGtkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQ1Niw4ICs0ODYsNiBAQAogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNDczLDE4ICs1MDEsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCV9jbGtkbV9hZGRfYXV0b2RlcHMoY2xrZG0pOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQotCQl2ID0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQotCQl2ID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQotCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAotCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCi0JCQkgICAgQ01fQ0xLU1RDVFJMKTsKKwlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiB9CkBAIC01MDAsOCArNTE3LDYgQEAKICAqLwogdm9pZCBvbWFwMl9jbGtkbV9kZW55X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQl1MzIgdjsKLQogCWlmICghY2xrZG0pCiAJCXJldHVybjsKIApAQCAtNTE0LDE2ICs1MjksNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZGlzYWJsaW5nIGF1dG9tYXRpYyBpZGxlIHRyYW5zaXRpb25zIGZvciAlc1xuIiwKIAkJIGNsa2RtLT5uYW1lKTsKIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKLQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCi0JCXYgPSBPTUFQMzRYWF9DTEtTVENUUkxfRElTQUJMRV9BVVRPOwotCWVsc2UKLQkJQlVHKCk7Ci0KLQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKLQkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCV9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoY2xrZG0sIDApOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjksMTAgKzU3NSwxNCBAQAogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fAotCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKQorCSAgICAoY3B1X2lzX29tYXAyNHh4KCkgJiYgdiA9PSBPTUFQMjRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pKSB7CisJCS8qIERpc2FibGUgSFcgdHJhbnNpdGlvbnMgd2hlbiB3ZSBhcmUgY2hhbmdpbmcgZGVwcyAqLworCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAwKTsKIAkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7Ci0JZWxzZQorCQlfb21hcDJfY2xrZG1fc2V0X2h3c3VwKGNsa2RtLCAxKTsKKwl9IGVsc2UgewogCQlvbWFwMl9jbGtkbV93YWtldXAoY2xrZG0pOworCX0KIAogCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihjbGtkbS0+cHdyZG0ucHRyKTsKIAlwd3JkbV9jbGtkbV9zdGF0ZV9zd2l0Y2goY2xrZG0pOwpAQCAtNjIzLDEwICs2MzMsMTQgQEAKIAl2ID0gb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQoY2xrZG0pOwogCiAJaWYgKChjcHVfaXNfb21hcDM0eHgoKSAmJiB2ID09IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTykgfHwKLQkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkKKwkgICAgKGNwdV9pc19vbWFwMjR4eCgpICYmIHYgPT0gT01BUDI0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSkgeworCQkvKiBEaXNhYmxlIEhXIHRyYW5zaXRpb25zIHdoZW4gd2UgYXJlIGNoYW5naW5nIGRlcHMgKi8KKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAJCV9jbGtkbV9kZWxfYXV0b2RlcHMoY2xrZG0pOwotCWVsc2UKKwkJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CisJfSBlbHNlIHsKIAkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOworCX0KIAogCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGtkbSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtNHh4eC5jCmluZGV4IGU0ZWJkNmQuLjRhZjc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY200eHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTR4eHguYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNtLmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy00eHh4LmgiCiAKIC8qIFhYWCBtb3ZlIHRoaXMgdG8gY20uaCAqLwogLyogTUFYX01PRFVMRV9SRUFEWV9USU1FOiBtYXggbWlsbGlzZWNvbmRzIGZvciBtb2R1bGUgdG8gbGVhdmUgaWRsZSAqLwpAQCAtNTAsMTkgKzQ5LDcgQEAKICAqLwogaW50IG9tYXA0X2NtX3dhaXRfaWRsZXN0X3JlYWR5KHUzMiBwcmNtX21vZCwgdTggcHJjbV9kZXZfb2ZmcykKIHsKLQlpbnQgaSA9IDA7Ci0JdTggY21faWQ7Ci0JdTE2IHByY21fbW9kX29mZnM7Ci0JdTMyIG1hc2sgPSBPTUFQNF9QUkNNX0NNX0NMS0NUUkxfSURMRVNUX01BU0s7Ci0KLQljbV9pZCA9IHByY21fbW9kID4+IE9NQVA0X1BSQ01fTU9EX0NNX0lEX1NISUZUOwotCXByY21fbW9kX29mZnMgPSBwcmNtX21vZCAmIE9NQVA0X1BSQ01fTU9EX09GRlNfTUFTSzsKLQotCXdoaWxlICgoKG9tYXA0X2NtX3JlYWRfbW9kX3JlZyhjbV9pZCwgcHJjbV9tb2Rfb2ZmcywgcHJjbV9kZXZfb2ZmcywKLQkJCQkgICAgICAgT01BUDRfQ01fQ0xLQ1RSTF9EUkVHKSAmIG1hc2spICE9IDApICYmCi0JICAgICAgIChpKysgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpKQotCQl1ZGVsYXkoMSk7Ci0KLQlyZXR1cm4gKGkgPCBNQVhfTU9EVUxFX1JFQURZX1RJTUUpID8gMCA6IC1FQlVTWTsKKwkvKiBGSVhNRTogQWRkIGNsb2NrIG1hbmFnZXIgcmVsYXRlZCBjb2RlICovCisJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggYmNmY2ZjNy4uZmFmN2ExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTM1NSwyOSArMzU1LDYwIEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDRfbWNzcGlfZml4dXAodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMV9CQVNFOwotCQlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMV9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOwotCQlvbWFwMl9tY3NwaTJfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJMl9CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGkzX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJM19CQVNFOwotCQlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKLQkJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJNF9CQVNFOwotCQlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJNF9CQVNFICsgMHhmZjsKLQl9Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTEpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkyKTsKKwlvbWFwMl9tY3NwaTFfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEkxX0JBU0U7CisJb21hcDJfbWNzcGkxX3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTFfQkFTRSArIDB4ZmY7CisJb21hcDJfbWNzcGkyX3Jlc291cmNlc1swXS5zdGFydAk9IE9NQVA0X01DU1BJMl9CQVNFOworCW9tYXAyX21jc3BpMl9yZXNvdXJjZXNbMF0uZW5kCT0gT01BUDRfTUNTUEkyX0JBU0UgKyAweGZmOworCW9tYXAyX21jc3BpM19yZXNvdXJjZXNbMF0uc3RhcnQJPSBPTUFQNF9NQ1NQSTNfQkFTRTsKKwlvbWFwMl9tY3NwaTNfcmVzb3VyY2VzWzBdLmVuZAk9IE9NQVA0X01DU1BJM19CQVNFICsgMHhmZjsKKwlvbWFwMl9tY3NwaTRfcmVzb3VyY2VzWzBdLnN0YXJ0CT0gT01BUDRfTUNTUEk0X0JBU0U7CisJb21hcDJfbWNzcGk0X3Jlc291cmNlc1swXS5lbmQJPSBPTUFQNF9NQ1NQSTRfQkFTRSArIDB4ZmY7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X21jc3BpX2ZpeHVwKHZvaWQpCit7Cit9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpM19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTMpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTNfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChjcHVfaXNfb21hcDM0M3goKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX21jc3BpNF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwMl9tY3NwaTQpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9tY3NwaTRfaW5pdCh2b2lkKQoreworfQogI2VuZGlmCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9tY3NwaSh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJb21hcDRfbWNzcGlfZml4dXAoKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcDJfbWNzcGkxKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAyX21jc3BpMik7CisKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpM19pbml0KCk7CisKKwlpZiAoY3B1X2lzX29tYXAzNDN4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX21jc3BpNF9pbml0KCk7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCmluZGV4IDE1ODc2ODIuLmYzYzk5MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gb3V0OwogCi0JZ3BtY19jc19lbmFibGVfbWVtKGNzLCByZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJKmJhc2UgPSByZXMtPnN0YXJ0OwogCWdwbWNfY3Nfc2V0X3Jlc2VydmVkKGNzLCAxKTsKIG91dDoKQEAgLTM3OCw3ICszNzgsNyBAQAogdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKQogewogCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7Ci0JaWYgKGNzID49IEdQTUNfQ1NfTlVNIHx8ICFncG1jX2NzX3Jlc2VydmVkKGNzKSkgeworCWlmIChjcyA+PSBHUE1DX0NTX05VTSB8fCBjcyA8IDAgfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgbm9uLXJlc2VydmVkIEdQTUMgQ1MlZFxuIiwgY3MpOwogCQlCVUcoKTsKIAkJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDc1NzRiNmYuLjU2YmU4N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTI5NCwxNSArMjk0LDE3IEBACiAJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCiAJCWh3bW9kcyA9IG9tYXAzNHh4X2h3bW9kczsKIAotCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOwotCW9tYXAyX211eF9pbml0KCk7CiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBjbGtkZXYgaXMgcmVhZHkgKi8KIAkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KKwlvbWFwX2h3bW9kX2luaXQoaHdtb2RzKTsKKwlvbWFwMl9tdXhfaW5pdCgpOwogCW9tYXBfcG1faWZfZWFybHlfaW5pdChtcHVfb3BwcywgZHNwX29wcHMsIGwzX29wcHMpOwogCXB3cmRtX2luaXQocG93ZXJkb21haW5zX29tYXApOwogCWNsa2RtX2luaXQoY2xvY2tkb21haW5zX29tYXAsIGNsa2RtX3B3cmRtX2F1dG9kZXBzKTsKIAlvbWFwMl9jbGtfaW5pdCgpOworI2VuZGlmCiAJb21hcF9zZXJpYWxfZWFybHlfaW5pdCgpOworI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCW9tYXBfaHdtb2RfbGF0ZV9pbml0KCk7CiAJb21hcF9wbV9pZl9pbml0KCk7CiAJb21hcDJfc2RyY19pbml0KHNkcmNfY3MwLCBzZHJjX2NzMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pb21tdTIuYwppbmRleCAyZDliNWNjLi40YTBlMWNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvbW11Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW9tbXUyLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJbCA9IGlvbW11X3JlYWRfcmVnKG9iaiwgTU1VX1NZU1NUQVRVUyk7CiAJCWlmIChsICYgTU1VX1NZU19SRVNFVERPTkUpCiAJCQlicmVhazsKLQl9IHdoaWxlICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKwl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSk7CiAKIAlpZiAoIShsICYgTU1VX1NZU19SRVNFVERPTkUpKSB7CiAJCWRldl9lcnIob2JqLT5kZXYsICJjYW4ndCB0YWtlIG1tdSBvdXQgb2YgcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCA2ZjcxZjM3Li5lZjU3YjM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMzAsNiArMzAsMTQgQEAKICNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKHUpCQkoMSA8PCAoMiAqICh1KSkpCiAjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwodSkJCSgxIDw8ICgyICogKHUpICsgMSkpCiAKKy8qIFNZU0NPTkZJRzogcmVnaXN0ZXIgYml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgQVVUT0lETEUJKDEgPDwgMCkKKyNkZWZpbmUgU09GVFJFU0VUCSgxIDw8IDEpCisjZGVmaW5lIFNNQVJUSURMRQkoMiA8PCAzKQorCisvKiBTWVNTVEFUVVM6IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uICovCisjZGVmaW5lIFJFU0VURE9ORQkoMSA8PCAwKQorCiAjZGVmaW5lIE1CT1hfUkVHX1NJWkUJCQkweDEyMAogI2RlZmluZSBNQk9YX05SX1JFR1MJCQkoTUJPWF9SRUdfU0laRSAvIHNpemVvZih1MzIpKQogCkBAIC02OSwyMSArNzcsMzMgQEAKIC8qIE1haWxib3ggSC9XIHByZXBhcmF0aW9ucyAqLwogc3RhdGljIGludCBvbWFwMl9tYm94X3N0YXJ0dXAoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKIHsKLQl1bnNpZ25lZCBpbnQgbDsKKwl1MzIgbDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CiAJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7Ci0JCXByaW50aygiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrXG4iKTsKKwkJcHJfZXJyKCJDYW4ndCBnZXQgbWFpbGJveGVzX2lja1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAljbGtfZW5hYmxlKG1ib3hfaWNrX2hhbmRsZSk7CiAKKwltYm94X3dyaXRlX3JlZyhTT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjApOworCWRvIHsKKwkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNTVEFUVVMpOworCQlpZiAobCAmIFJFU0VURE9ORSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCWlmICghKGwgJiBSRVNFVERPTkUpKSB7CisJCXByX2VycigiQ2FuJ3QgdGFrZSBtbXUgb3V0IG9mIHJlc2V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CiAJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCS8qIHNldCBzbWFydC1pZGxlICYgYXV0b2lkbGUgKi8KLQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU0NPTkZJRyk7Ci0JbCB8PSAweDAwMDAwMDExOworCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKIAltYm94X3dyaXRlX3JlZyhsLCBNQUlMQk9YX1NZU0NPTkZJRyk7CiAKIAlvbWFwMl9tYm94X2VuYWJsZV9pcnEobWJveCwgSVJRX1JYKTsKQEAgLTE1Niw2ICsxNzYsOSBAQAogCXUzMiBiaXQgPSAoaXJxID09IElSUV9UWCkgPyBwLT5ub3RmdWxsX2JpdCA6IHAtPm5ld21zZ19iaXQ7CiAKIAltYm94X3dyaXRlX3JlZyhiaXQsIHAtPmlycXN0YXR1cyk7CisKKwkvKiBGbHVzaCBwb3N0ZWQgd3JpdGUgZm9yIGlycSBzdGF0dXMgdG8gYXZvaWQgc3B1cmlvdXMgaW50ZXJydXB0cyAqLworCW1ib3hfcmVhZF9yZWcocC0+aXJxc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBvbWFwMl9tYm94X2lzX2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LApAQCAtMjc3LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKKwltYm94X2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFtYm94X2Jhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCAyZGFhNTk1Li5iNWZhYzMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTQ2MCw2ICs0NjAsOCBAQAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFHOV8zNFhYX0dQSU8yMyIsIDB4NWVlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LApAQCAtNDcyLDYgKzQ3NCw4IEBACiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNF8zNFhYX0dQSU8xMzVfT1VUIiwgMHgxNjIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCiAJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCiBNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxYjRjMTYwLi4yZmM0ZDZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC01NDEsNyArNTQxLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogb25seSBPTUFQMyBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQkKKwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInBtX2RlYnVnIiwgTlVMTCk7CiAJaWYgKElTX0VSUihkKSkKIAkJcmV0dXJuIFBUUl9FUlIoZCk7CkBAIC01NTEsNyArNTUxLDcgQEAKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgidGltZSIsIFNfSVJVR08sCiAJCWQsICh2b2lkICopREVCVUdfRklMRV9USU1FUlMsICZkZWJ1Z19mb3BzKTsKIAotCXB3cmRtX2Zvcl9lYWNoKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaF9ub2xvY2socHdyZG1zX3NldHVwLCAodm9pZCAqKWQpOwogCiAJcG1fZGJnX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigicmVnaXN0ZXJzIiwgZCk7CiAJaWYgKElTX0VSUihwbV9kYmdfZGlyKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDBmZjVhNmMuLjg5NDYzMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtNTEsOTcgKzUxLDExMiBAQAogCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICptcHVfcHdyZG07CiAKLS8qIFBSQ00gSW50ZXJydXB0IEhhbmRsZXIgZm9yIHdha2V1cHMgKi8KKy8qCisgKiBQUkNNIEludGVycnVwdCBIYW5kbGVyIEhlbHBlciBGdW5jdGlvbgorICoKKyAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gY2xlYXIgYW55IHdha2UtdXAgZXZlbnRzIGxhdGNoZWQKKyAqIGluIHRoZSBQUkNNIFBNX1dLU1RfeCByZWdpc3RlcnMuIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSB3YWtlLXVwIGV2ZW50CisgKiBtYXkgb2NjdXIgd2hpbHN0IGF0dGVtcHRpbmcgdG8gY2xlYXIgYSBQTV9XS1NUX3ggcmVnaXN0ZXIgYW5kIHRodXMKKyAqIHNldCBhbm90aGVyIGJpdCBpbiB0aGlzIHJlZ2lzdGVyLiBBIHdoaWxlIGxvb3AgaXMgdXNlZCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHBlcmlwaGVyYWwgd2FrZS11cCBldmVudHMgb2NjdXJyaW5nIHdoaWxlIGF0dGVtcHRpbmcgdG8KKyAqIGNsZWFyIHRoZSBQTV9XS1NUX3ggYXJlIGRldGVjdGVkIGFuZCBjbGVhcmVkLgorICovCitzdGF0aWMgaW50IHByY21fY2xlYXJfbW9kX2lycXMoczE2IG1vZHVsZSwgdTggcmVncykKK3sKKwl1MzIgd2tzdCwgZmNsaywgaWNsaywgY2xrZW47CisJdTE2IHdrc3Rfb2ZmID0gKHJlZ3MgPT0gMykgPyBPTUFQMzQzMEVTMl9QTV9XS1NUMyA6IFBNX1dLU1QxOworCXUxNiBmY2xrX29mZiA9IChyZWdzID09IDMpID8gT01BUDM0MzBFUzJfQ01fRkNMS0VOMyA6IENNX0ZDTEtFTjE7CisJdTE2IGljbGtfb2ZmID0gKHJlZ3MgPT0gMykgPyBDTV9JQ0xLRU4zIDogQ01fSUNMS0VOMTsKKwl1MTYgZ3Jwc2VsX29mZiA9IChyZWdzID09IDMpID8KKwkJT01BUDM0MzBFUzJfUE1fTVBVR1JQU0VMMyA6IE9NQVAzNDMwX1BNX01QVUdSUFNFTDsKKwlpbnQgYyA9IDA7CisKKwl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhtb2R1bGUsIHdrc3Rfb2ZmKTsKKwl3a3N0ICY9IHBybV9yZWFkX21vZF9yZWcobW9kdWxlLCBncnBzZWxfb2ZmKTsKKwlpZiAod2tzdCkgeworCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgaWNsa19vZmYpOworCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKG1vZHVsZSwgZmNsa19vZmYpOworCQl3aGlsZSAod2tzdCkgeworCQkJY2xrZW4gPSB3a3N0OworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBpY2xrX29mZik7CisJCQkvKgorCQkJICogRm9yIFVTQkhPU1QsIHdlIGRvbid0IGtub3cgd2hldGhlciBIT1NUMSBvcgorCQkJICogSE9TVDIgd29rZSB1cyB1cCwgc28gZW5hYmxlIGJvdGggZi1jbG9ja3MKKwkJCSAqLworCQkJaWYgKG1vZHVsZSA9PSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCkKKwkJCQljbGtlbiB8PSAxIDw8IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZUOworCQkJY21fc2V0X21vZF9yZWdfYml0cyhjbGtlbiwgbW9kdWxlLCBmY2xrX29mZik7CisJCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBtb2R1bGUsIHdrc3Rfb2ZmKTsKKwkJCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKG1vZHVsZSwgd2tzdF9vZmYpOworCQkJYysrOworCQl9CisJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgbW9kdWxlLCBpY2xrX29mZik7CisJCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgbW9kdWxlLCBmY2xrX29mZik7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbnQgX3ByY21faW50X2hhbmRsZV93YWtldXAodm9pZCkKK3sKKwlpbnQgYzsKKworCWMgPSBwcmNtX2NsZWFyX21vZF9pcnFzKFdLVVBfTU9ELCAxKTsKKwljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDEpOworCWMgKz0gcHJjbV9jbGVhcl9tb2RfaXJxcyhPTUFQMzQzMF9QRVJfTU9ELCAxKTsKKwlpZiAob21hcF9yZXYoKSA+IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoQ09SRV9NT0QsIDMpOworCQljICs9IHByY21fY2xlYXJfbW9kX2lycXMoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIDEpOworCX0KKworCXJldHVybiBjOworfQorCisvKgorICogUFJDTSBJbnRlcnJ1cHQgSGFuZGxlcgorICoKKyAqIFRoZSBQUk1fSVJRU1RBVFVTX01QVSByZWdpc3RlciBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBwZW5kaW5nCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIFBSQ00gZm9yIHRoZSBNUFUuIFRoZXNlIGJpdHMgbXVzdCBiZSBjbGVhcmVkIGluCisgKiBvcmRlciB0byBjbGVhciB0aGUgUFJDTSBpbnRlcnJ1cHQuIFRoZSBQUkNNIGludGVycnVwdCBoYW5kbGVyIGlzCisgKiBpbXBsZW1lbnRlZCB0byBzaW1wbHkgY2xlYXIgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIGluIG9yZGVyIHRvIGNsZWFyCisgKiB0aGUgUFJDTSBpbnRlcnJ1cHQuIFBsZWFzZSBub3RlIHRoYXQgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVCisgKiByZWdpc3RlciBpbmRpY2F0ZXMgdGhhdCBhIHdha2UtdXAgZXZlbnQgaXMgcGVuZGluZyBmb3IgdGhlIE1QVSBhbmQKKyAqIHRoaXMgYml0IGNhbiBvbmx5IGJlIGNsZWFyZWQgaWYgdGhlIGFsbCB0aGUgd2FrZS11cCBldmVudHMgbGF0Y2hlZAorICogaW4gdGhlIHZhcmlvdXMgUE1fV0tTVF94IHJlZ2lzdGVycyBoYXZlIGJlZW4gY2xlYXJlZC4gVGhlIGludGVycnVwdAorICogaGFuZGxlciBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGRvLXdoaWxlIGxvb3Agc28gdGhhdCBpZiBhIHdha2UtdXAKKyAqIGV2ZW50IG9jY3VycmVkIGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgcHJjbSBpbnRlcnJ1cHQgaGFuZGxlcgorICogKHNldHRpbmcgYSBiaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgUE1fV0tTVF94IHJlZ2lzdGVyIGFuZCB0aHVzCisgKiBwcmV2ZW50aW5nIHVzIGZyb20gY2xlYXJpbmcgYml0IDAgb2YgdGhlIFBSTV9JUlFTVEFUVVNfTVBVIHJlZ2lzdGVyKQorICogdGhpcyB3b3VsZCBiZSBoYW5kbGVkLgorICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgcHJjbV9pbnRlcnJ1cHRfaGFuZGxlciAoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXUzMiB3a3N0LCBpcnFzdGF0dXNfbXB1OwotCXUzMiBmY2xrLCBpY2xrOworCXUzMiBpcnFzdGF0dXNfbXB1OworCWludCBjID0gMDsKIAotCS8qIFdLVVAgKi8KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJZmNsayA9IGNtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQkJcHJtX3dyaXRlX21vZF9yZWcod2tzdCwgV0tVUF9NT0QsIFBNX1dLU1QpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhXS1VQX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBXS1VQX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBXS1VQX01PRCwgQ01fRkNMS0VOKTsKLQl9CisJZG8geworCQlpcnFzdGF0dXNfbXB1ID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELAorCQkJCQlPTUFQM19QUk1fSVJRU1RBVFVTX01QVV9PRkZTRVQpOwogCi0JLyogQ09SRSAqLwotCXdrc3QgPSBwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIENPUkVfTU9ELCBDTV9JQ0xLRU4xKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fRkNMS0VOMSk7Ci0JCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIENPUkVfTU9ELCBQTV9XS1NUMSk7Ci0JCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBQTV9XS1NUMSkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBDT1JFX01PRCwgQ01fSUNMS0VOMSk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoZmNsaywgQ09SRV9NT0QsIENNX0ZDTEtFTjEpOwotCX0KLQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCWlmICh3a3N0KSB7Ci0JCWljbGsgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBDT1JFX01PRCwgQ01fSUNMS0VOMyk7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpOwotCQl3aGlsZSAocHJtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgT01BUDM0MzBFUzJfUE1fV0tTVDMpKQotCQkJY3B1X3JlbGF4KCk7Ci0JCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgQ09SRV9NT0QsIENNX0lDTEtFTjMpOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKTsKLQl9CisJCWlmIChpcnFzdGF0dXNfbXB1ICYgKE9NQVAzNDMwX1dLVVBfU1QgfCBPTUFQMzQzMF9JT19TVCkpIHsKKwkJCWMgPSBfcHJjbV9pbnRfaGFuZGxlX3dha2V1cCgpOwogCi0JLyogUEVSICovCi0Jd2tzdCA9IHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCk7Ci0JaWYgKHdrc3QpIHsKLQkJaWNsayA9IGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQlmY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JCWNtX3NldF9tb2RfcmVnX2JpdHMod2tzdCwgT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKTsKLQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pOwotCQlwcm1fd3JpdGVfbW9kX3JlZyh3a3N0LCBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS1NUKTsKLQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBfUEVSX01PRCwgUE1fV0tTVCkpCi0JCQljcHVfcmVsYXgoKTsKLQkJY21fd3JpdGVfbW9kX3JlZyhpY2xrLCBPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pOwotCQljbV93cml0ZV9tb2RfcmVnKGZjbGssIE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTik7Ci0JfQotCi0JaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApIHsKLQkJLyogVVNCSE9TVCAqLwotCQl3a3N0ID0gcHJtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fV0tTVCk7Ci0JCWlmICh3a3N0KSB7Ci0JCQlpY2xrID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgICAgQ01fSUNMS0VOKTsKLQkJCWZjbGsgPSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSAgICAgICBDTV9GQ0xLRU4pOwotCQkJY21fc2V0X21vZF9yZWdfYml0cyh3a3N0LCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJICAgIENNX0lDTEtFTik7Ci0JCQljbV9zZXRfbW9kX3JlZ19iaXRzKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgICAgQ01fRkNMS0VOKTsKLQkJCXBybV93cml0ZV9tb2RfcmVnKHdrc3QsIE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAotCQkJCQkgIFBNX1dLU1QpOwotCQkJd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCQlQTV9XS1NUKSkKLQkJCQljcHVfcmVsYXgoKTsKLQkJCWNtX3dyaXRlX21vZF9yZWcoaWNsaywgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsCi0JCQkJCSBDTV9JQ0xLRU4pOwotCQkJY21fd3JpdGVfbW9kX3JlZyhmY2xrLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkJCQkJIENNX0ZDTEtFTik7CisJCQkvKgorCQkJICogSXMgdGhlIE1QVSBQUkNNIGludGVycnVwdCBoYW5kbGVyIHJhY2luZyB3aXRoIHRoZQorCQkJICogSVZBMiBQUkNNIGludGVycnVwdCBoYW5kbGVyID8KKwkJCSAqLworCQkJV0FSTihjID09IDAsICJwcmNtOiBXQVJOSU5HOiBQUkNNIGluZGljYXRlZCBNUFUgd2FrZXVwICIKKwkJCSAgICAgImJ1dCBubyB3YWtldXAgc291cmNlcyBhcmUgbWFya2VkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFhYWCB3ZSBuZWVkIHRvIGV4cGFuZCBvdXIgUFJDTSBpbnRlcnJ1cHQgaGFuZGxlciAqLworCQkJV0FSTigxLCAicHJjbTogV0FSTklORzogUFJDTSBpbnRlcnJ1cHQgcmVjZWl2ZWQsIGJ1dCAiCisJCQkgICAgICJubyBjb2RlIHRvIGhhbmRsZSBpdCAoJTA4eClcbiIsIGlycXN0YXR1c19tcHUpOwogCQl9Ci0JfQogCi0JaXJxc3RhdHVzX21wdSA9IHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwKLQkJCQkJIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKLQkJCSAgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKKwkJcHJtX3dyaXRlX21vZF9yZWcoaXJxc3RhdHVzX21wdSwgT0NQX01PRCwKKwkJCQkJT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKTsKIAotCXdoaWxlIChwcm1fcmVhZF9tb2RfcmVnKE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCkpCi0JCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHBybV9yZWFkX21vZF9yZWcoT0NQX01PRCwgT01BUDNfUFJNX0lSUVNUQVRVU19NUFVfT0ZGU0VUKSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC02MjQsNiArNjM5LDE3IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfSU9fRU4gfCBPTUFQMzQzMF9XS1VQX0VOLAogCQkJICBPQ1BfTU9ELCBPTUFQM19QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwogCisJLyogRW5hYmxlIHdha2V1cHMgaW4gUEVSICovCisJcHJtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfRU5fR1BJTzIgfCBPTUFQMzQzMF9FTl9HUElPMyB8CisJCQkgIE9NQVAzNDMwX0VOX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9FTl9HUElPNiB8IE9NQVAzNDMwX0VOX1VBUlQzLAorCQkJICBPTUFQMzQzMF9QRVJfTU9ELCBQTV9XS0VOKTsKKwkvKiBhbmQgYWxsb3cgdGhlbSB0byB3YWtlIHVwIE1QVSAqLworCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0dSUFNFTF9HUElPMiB8IE9NQVAzNDMwX0VOX0dQSU8zIHwKKwkJCSAgT01BUDM0MzBfR1JQU0VMX0dQSU80IHwgT01BUDM0MzBfRU5fR1BJTzUgfAorCQkJICBPTUFQMzQzMF9HUlBTRUxfR1BJTzYgfCBPTUFQMzQzMF9FTl9VQVJUMywKKwkJCSAgT01BUDM0MzBfUEVSX01PRCwgT01BUDM0MzBfUE1fTVBVR1JQU0VMKTsKKwogCS8qIERvbid0IGF0dGFjaCBJVkEgaW50ZXJydXB0cyAqLwogCXBybV93cml0ZV9tb2RfcmVnKDAsIFdLVVBfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwpOwogCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBPTUFQMzQzMF9QTV9JVkFHUlBTRUwxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwppbmRleCAyNTk0Y2JmLi5mMDAyODlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCkBAIC0yNzMsMzUgKzI3Myw1MCBAQAogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoIC0gY2FsbCBmdW5jdGlvbiBvbiBlYWNoIHJlZ2lzdGVyZWQgY2xvY2tkb21haW4KKyAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCiAgKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCiAgKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgcHdyZG1fcndsb2NrCi0gKiBoZWxkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUKLSAqIHBvd2VyZG9tYWluIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLiAgUmV0dXJucyB0aGUgbGFzdCByZXR1cm4KLSAqIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGJlIDAgZm9yIHN1Y2Nlc3Mgb3IKLSAqIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZiB0aGUgZnVuY3Rpb24KLSAqIHBvaW50ZXIgaXMgbnVsbC4KKyAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKKyAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgorICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKLQkJCXZvaWQgKnVzZXIpCitpbnQgcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCQl2b2lkICp1c2VyKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqdGVtcF9wd3JkbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFmbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wX3B3cmRtLCAmcHdyZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKSh0ZW1wX3B3cmRtLCB1c2VyKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogcHdyZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgorICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyAncHdyZG1fZm9yX2VhY2hfbm9sb2NrKCknLCBidXQga2VlcHMgdGhlCisgKiAmcHdyZG1fcndsb2NrIGxvY2tlZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlIG1hbmlwdWxhdGlvbgorICogZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoIGhhcmR3YXJlIHBvd2VyZG9tYWluCisgKiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4KKyAqLworaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKKwkJCXZvaWQgKnVzZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJcmVhZF9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOworCXJldCA9IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhmbiwgdXNlcik7CiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKaW5kZXggM2E1MjljNy4uNTRkZmViNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0xMDksMTYgKzEwOSw2IEBACiAJCS5yZWdzaGlmdAk9IDIsCiAJCS51YXJ0Y2xrCT0gT01BUDI0WFhfQkFTRV9CQVVEICogMTYsCiAJfSwgewotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDRfQkFTRSwKLQkJLmlycQkJPSA3MCwKLQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkucmVnc2hpZnQJPSAyLAotCQkudWFydGNsawk9IE9NQVAyNFhYX0JBU0VfQkFVRCAqIDE2LAotCX0sIHsKLSNlbmRpZgogCQkuZmxhZ3MJCT0gMAogCX0KIH07CkBAIC0xMjYsNyArMTE2LDcgQEAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhPTUFQX1VBUlQ0X0JBU0UpLAorCQkubWVtYmFzZQk9IE9NQVAyX0lPX0FERFJFU1MoT01BUF9VQVJUNF9CQVNFKSwKIAkJLm1hcGJhc2UJPSBPTUFQX1VBUlQ0X0JBU0UsCiAJCS5pcnEJCT0gNzAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKQEAgLTU3OSw3ICs1NjksNyBAQAogCXsKIAkJLnBkZXYgPSB7CiAJCQkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAotCQkJLmlkCQkJPSAzCisJCQkuaWQJCQk9IDMsCiAJCQkuZGV2CQkJPSB7CiAJCQkJLnBsYXRmb3JtX2RhdGEJPSBzZXJpYWxfcGxhdGZvcm1fZGF0YTMsCiAJCQl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggODljOTkyYi4uYTZmOGVhYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxMSBAQAogCiBjb25maWcgQ1BVX1BYQTkzNQogCWJvb2wgIlBYQTkzNSAoY29kZW5hbWUgVGF2b3ItUDY1KSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAorCitjb25maWcgQ1BVX1BYQTk1MAorCWJvb2wgIlBYQTk1MCAoY29kZW5hbWUgVGF2b3ItUFYyKSIKKwlzZWxlY3QgQ1BVX1BYQTkzMAogCiBlbmRtZW51CiAKQEAgLTc5LDYgKzg0LDEyIEBACiAJYm9vbCAiTmVjIE1vYmlsZXBybyA5MDAvYyIKIAlzZWxlY3QgUFhBMjV4CiAKK2NvbmZpZyBNQUNIX0JBTExPT04zCisJYm9vbCAiQmFsbG9vbiAzIGJvYXJkIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJc2VsZWN0IFBYQV9IQVZFX0JPQVJEX0lSUVMKKwogY29uZmlnIEFSQ0hfUFhBX0lEUAogCWJvb2wgIkFjY2VsZW50IFhzY2FsZSBJRFAiCiAJc2VsZWN0IFBYQTI1eApAQCAtMzcxLDYgKzM4MiwxNSBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gVHVuZ3N0ZW58RTIKIAkgIGhhbmRoZWxkIGNvbXB1dGVyLgogCitjb25maWcgTUFDSF9QQUxNVEMKKwlib29sICJQYWxtIFR1bmdzdGVufEMiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBBUkNIX1BYQV9QQUxNCisJc2VsZWN0IFBYQTI1eAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufEMKKwkgIGhhbmRoZWxkIGNvbXB1dGVyLgorCiBjb25maWcgTUFDSF9QQUxNVDUKIAlib29sICJQYWxtIFR1bmdzdGVufFQ1IgogCWRlZmF1bHQgeQpAQCAtNDU4LDYgKzQ3OCw3IEBACiAJc2VsZWN0IFBYQTI3eAogCXNlbGVjdCBJV01NWFQKIAlzZWxlY3QgSEFWRV9QV00KKwlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCiBjb25maWcgTUFDSF9FWlhfQTc4MAogCWJvb2wgIk1vdG9yb2xhIEVaWCBBNzgwIgpAQCAtNDg5LDYgKzUxMCwyMSBAQAogCWRlZmF1bHQgeQogCWRlcGVuZHMgb24gUFhBX0VaWAogCitjb25maWcgTUFDSF9YQ0VQCisJYm9vbCAiSXNrcmF0ZWwgRWxlY3Ryb25pY3MgWENFUCIKKwlzZWxlY3QgUFhBMjV4CisJc2VsZWN0IE1URAorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCXNlbGVjdCBNVERfUEhZU01BUAorCXNlbGVjdCBNVERfQ0ZJX0lOVEVMRVhUCisJc2VsZWN0IE1URF9DRkkKKwlzZWxlY3QgTVREX0NIQVIKKwlzZWxlY3QgU01DOTFYCisJc2VsZWN0IFBYQV9TU1AKKwloZWxwCisJICBQWEEyNTUgYmFzZWQgU2luZ2xlIEJvYXJkIENvbXB1dGVyIHdpdGggU01DIDkxQzExMSBldGhlcm5ldCBjaGlwIGFuZCA2NCBNQiBvZiBmbGFzaC4KKwkgIFR1bmVkIGZvciB1c2FnZSBpbiBMaWJlcmEgaW5zdHJ1bWVudHMgZm9yIHBhcnRpY2xlIGFjY2VsZXJhdG9ycy4KKwogZW5kbWVudQogCiBjb25maWcgUFhBMjV4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IGQ0YzYxMjIuLmYxMGUxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zMSw2ICszMSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubworb2JqLSQoQ09ORklHX01BQ0hfQkFMTE9PTjMpCSs9IGJhbGxvb24zLm8KIG9iai0kKENPTkZJR19NQUNIX01QOTAwQykJKz0gbXA5MDAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkJKz0gaWRwLm8KIG9iai0kKENPTkZJR19NQUNIX1RSSVpFUFM0KQkrPSB0cml6ZXBzNC5vCkBAIC01OCw2ICs1OSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9FNDAwKQkJKz0gZTQwMC5vCiBvYmotJChDT05GSUdfTUFDSF9FODAwKQkJKz0gZTgwMC5vCiBvYmotJChDT05GSUdfTUFDSF9QQUxNVEUyKQkrPSBwYWxtdGUyLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1UQykJKz0gcGFsbXRjLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UNSkJKz0gcGFsbXQ1Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJKz0gcGFsbXR4Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJKz0gcGFsbWxkLm8KQEAgLTc4LDYgKzgwLDggQEAKIG9iai0kKENPTkZJR19NQUNIX0NNX1gzMDApICAgICAgKz0gY20teDMwMC5vCiBvYmotJChDT05GSUdfUFhBX0VaWCkgICAgICAgICAgICs9IGV6eC5vCiAKK29iai0kKENPTkZJR19NQUNIX1hDRVApICAgICAgICAgKz0geGNlcC5vCisKIG9iai0kKENPTkZJR19NQUNIX0lOVEVMTU9URTIpICAgKz0gaW1vdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJKz0gc3RhcmdhdGUyLm8KIG9iai0kKENPTkZJR19NQUNIX0NTQjcyNikJKz0gY3NiNzI2Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMzEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgQmFsbG9vbmJvYXJkLm9yZyBCYWxsb29uMyBib2FyZC4KKyAqCisgKiAgQXV0aG9yOglOaWNrIEJhbmUsIFdvb2tleSwgSm9uYXRoYW4gTWNEb3dlbGwKKyAqICBDcmVhdGVkOglKdW5lLCAyMDA2CisgKiAgQ29weXJpZ2h0OglUb2J5IENodXJjaGlsbCBMdGQKKyAqICBEZXJpdmVkIGZyb20gbWFpbnN0b25lLmMsIGJ5IE5pY28gUGl0cmUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9iYWxsb29uMy5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2lycV9lbmFibGVkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19mZWF0dXJlc19wcmVzZW50ID0KKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9PSENJKSB8ICgxIDw8IEJBTExPT04zX0ZFQVRVUkVfQ0YpIHwKKwkJKDEgPDwgQkFMTE9PTjNfRkVBVFVSRV9BVURJTykgfAorCQkoMSA8PCBCQUxMT09OM19GRUFUVVJFX1RPUFBPTFkpOworCitpbnQgYmFsbG9vbjNfaGFzKGVudW0gYmFsbG9vbjNfZmVhdHVyZXMgZmVhdHVyZSkKK3sKKwlyZXR1cm4gKGJhbGxvb24zX2ZlYXR1cmVzX3ByZXNlbnQgJiAoMSA8PCBmZWF0dXJlKSkgPyAxIDogMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJhbGxvb24zX2hhcyk7CisKK2ludCBfX2luaXQgcGFyc2VfYmFsbG9vbjNfZmVhdHVyZXMoY2hhciAqYXJnKQoreworCWlmICghYXJnKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzdHJpY3Rfc3RydG91bChhcmcsIDAsICZiYWxsb29uM19mZWF0dXJlc19wcmVzZW50KTsKK30KK2Vhcmx5X3BhcmFtKCJiYWxsb29uM19mZWF0dXJlcyIsIHBhcnNlX2JhbGxvb24zX2ZlYXR1cmVzKTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYmFsbG9vbjNfaXJxID0gKGlycSAtIEJBTExPT04zX0lSUSgwKSk7CisJYmFsbG9vbjNfaXJxX2VuYWJsZWQgJj0gfigxIDw8IGJhbGxvb24zX2lycSk7CisJX19yYXdfd3JpdGVsKH5iYWxsb29uM19pcnFfZW5hYmxlZCwgQkFMTE9PTjNfSU5UX0NPTlRST0xfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYmFsbG9vbjNfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBiYWxsb29uM19pcnEgPSAoaXJxIC0gQkFMTE9PTjNfSVJRKDApKTsKKwliYWxsb29uM19pcnFfZW5hYmxlZCB8PSAoMSA8PCBiYWxsb29uM19pcnEpOworCV9fcmF3X3dyaXRlbCh+YmFsbG9vbjNfaXJxX2VuYWJsZWQsIEJBTExPT04zX0lOVF9DT05UUk9MX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgYmFsbG9vbjNfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkZQR0EiLAorCS5hY2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLm1hc2sJCT0gYmFsbG9vbjNfbWFza19pcnEsCisJLnVubWFzawkJPSBiYWxsb29uM191bm1hc2tfaXJxLAorfTsKKworc3RhdGljIHZvaWQgYmFsbG9vbjNfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGxvbmcgcGVuZGluZyA9IF9fcmF3X3JlYWRsKEJBTExPT04zX0lOVF9DT05UUk9MX1JFRykgJgorCQkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKworCWRvIHsKKwkJLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlpZiAoZGVzYy0+Y2hpcC0+YWNrKQorCQkJZGVzYy0+Y2hpcC0+YWNrKEJBTExPT04zX0FVWF9OSVJRKTsKKwkJd2hpbGUgKHBlbmRpbmcpIHsKKwkJCWlycSA9IEJBTExPT04zX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOworCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CisJCQlwZW5kaW5nICY9IHBlbmRpbmcgLSAxOworCQl9CisJCXBlbmRpbmcgPSBfX3Jhd19yZWFkbChCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcpICYKKwkJCQliYWxsb29uM19pcnFfZW5hYmxlZDsKKwl9IHdoaWxlIChwZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGlycTsKKworCXB4YTI3eF9pbml0X2lycSgpOworCS8qIHNldHVwIGV4dHJhIEJhbGxvb24zIGlycXMgKi8KKwlmb3IgKGlycSA9IEJBTExPT04zX0lSUSgwKTsgaXJxIDw9IEJBTExPT04zX0lSUSg3KTsgaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycSwgJmJhbGxvb24zX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorCisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoQkFMTE9PTjNfQVVYX05JUlEsIGJhbGxvb24zX2lycV9oYW5kbGVyKTsKKwlzZXRfaXJxX3R5cGUoQkFMTE9PTjNfQVVYX05JUlEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYWluZWQgaGFuZGxlciBpbnN0YWxsZWQgLSBpcnEgJWQgYXV0b21hdGljYWxseSAiCisJCSJlbmFibGVkXG4iLCBfX2Z1bmNfXywgQkFMTE9PTjNfQVVYX05JUlEpOworfQorCitzdGF0aWMgdm9pZCBiYWxsb29uM19iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQoreworCXByX2RlYnVnKCIlczogcG93ZXIgaXMgJXNcbiIsIF9fZnVuY19fLCBvbiA/ICJvbiIgOiAib2ZmIik7CisJZ3Bpb19zZXRfdmFsdWUoQkFMTE9PTjNfR1BJT19SVU5fQkFDS0xJR0hULCBvbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2xjZF9waW5fY29uZmlnW10gPSB7CisJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJR1BJTzk5X0dQSU8sCQkvKiBCYWNrbGlnaHQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIGJhbGxvb24zX2xjZF9tb2Rlc1tdID0geworCXsKKwkJLnBpeGNsb2NrCQk9IDM4MDAwLAorCQkueHJlcwkJCT0gNDgwLAorCQkueXJlcwkJCT0gNjQwLAorCQkuYnBwCQkJPSAxNiwKKwkJLmhzeW5jX2xlbgkJPSA4LAorCQkubGVmdF9tYXJnaW4JCT0gOCwKKwkJLnJpZ2h0X21hcmdpbgkJPSA4LAorCQkudnN5bmNfbGVuCQk9IDIsCisJCS51cHBlcl9tYXJnaW4JCT0gNCwKKwkJLmxvd2VyX21hcmdpbgkJPSA1LAorCQkuc3luYwkJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gYmFsbG9vbjNfcHhhZmJfaW5mbyA9IHsKKwkubW9kZXMJCQk9IGJhbGxvb24zX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCQk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfbGNkX21vZGVzKSwKKwkubGNkX2Nvbm4JCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyCT0gYmFsbG9vbjNfYmFja2xpZ2h0X3Bvd2VyLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfbW1jX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMzJfTU1DX0NMSywKKwlHUElPOTJfTU1DX0RBVF8wLAorCUdQSU8xMDlfTU1DX0RBVF8xLAorCUdQSU8xMTBfTU1DX0RBVF8yLAorCUdQSU8xMTFfTU1DX0RBVF8zLAorCUdQSU8xMTJfTU1DX0NNRCwKK307CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoKDEgPDwgdmRkKSAmIHBfZC0+b2NyX21hc2spIHsKKwkJcHJfZGVidWcoIiVzOiBvblxuIiwgX19mdW5jX18pOworCQkvKiBGSVhNRSBzb21ldGhpbmcgdG8gcHJvZCBoZXJlPyAqLworCX0gZWxzZSB7CisJCXByX2RlYnVnKCIlczogb2ZmXG4iLCBfX2Z1bmNfXyk7CisJCS8qIEZJWE1FIHNvbWV0aGluZyB0byBwcm9kIGhlcmU/ICovCisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIgCT0gYmFsbG9vbjNfbWNpX3NldHBvd2VyLAorfTsKKworc3RhdGljIGludCBiYWxsb29uM191ZGNfaXNfY29ubmVjdGVkKHZvaWQpCit7CisJcHJfZGVidWcoIiVzOiB1ZGMgY29ubmVjdGVkXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJhbGxvb24zX3VkY19jb21tYW5kKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0NPTk5FQ1Q6CisJCVVQMk9DUiB8PSAoVVAyT0NSX0RQUFVFICsgVVAyT0NSX0RQUFVCRSk7CisJCXByX2RlYnVnKCIlczogY29ubmVjdFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1Q6CisJCVVQMk9DUiAmPSB+VVAyT0NSX0RQUFVFOworCQlwcl9kZWJ1ZygiJXM6IGRpc2Nvbm5lY3RcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIGJhbGxvb24zX3VkY19pbmZvID0geworCS51ZGNfaXNfY29ubmVjdGVkID0gYmFsbG9vbjNfdWRjX2lzX2Nvbm5lY3RlZCwKKwkudWRjX2NvbW1hbmQgICAgICA9IGJhbGxvb24zX3VkY19jb21tYW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBiYWxsb29uM19vaGNpX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPODhfVVNCSDFfUFdSLAorCUdQSU84OV9VU0JIMV9QRU4sCit9OworCitzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBiYWxsb29uM19vaGNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnBvcnRfbW9kZQk9IFBNTV9QRVJQT1JUX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFsbG9vbjNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogU2VsZWN0IEJUVUFSVCAnQ09NMS90dHlTMCcgYXMgSU8gb3B0aW9uIGZvciBwaW5zIDQyLzQzLzQ0LzQ1ICovCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwkvKiBXYWtldXAgR1BJTyAqLworCUdQSU8xX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAorCisJLyogTkFORCAmIElETEUgTEVEIEdQSU9zICovCisJR1BJTzlfR1BJTywKKwlHUElPMTBfR1BJTywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgYmFsbG9vbjNfZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOmlkbGUiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9JRExFLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gImJhbGxvb24zOmdyZWVuOm5hbmQiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCisJCS5ncGlvCQkJPSBCQUxMT09OM19HUElPX0xFRF9OQU5ELAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgYmFsbG9vbjNfZ3Bpb19sZWRzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmxlZHMJCT0gYmFsbG9vbjNfZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoYmFsbG9vbjNfZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhbGxvb24zbGVkX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmJhbGxvb24zX2dwaW9fbGVkc19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbjNfaW5pdCh2b2lkKQoreworCXByX2luZm8oIkluaXRpYWxpc2luZyBCYWxsb29uM1xuIik7CisKKwkvKiBzeXN0ZW0gYnVzIGFyYml0ZXIgc2V0dGluZworCSAqIC0gQ29yZV9QYXJrCisJICogLSBMQ0Rfd3Q6RE1BX3d0OkNPUkVfV3QgPSAyOjM6NAorCSAqLworCUFSQl9DTlRSTCA9IEFSQl9DT1JFX1BBUksgfCAweDIzNDsKKworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX0FVRElPKSkKKwkJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7CisKKwlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKKwkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKKwkJZ3Bpb19yZXF1ZXN0KEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVCwKKwkJCSJMQ0QgQmFja2xpZ2h0IFBvd2VyIik7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChCQUxMT09OM19HUElPX1JVTl9CQUNLTElHSFQsIDEpOworCQlzZXRfcHhhX2ZiX2luZm8oJmJhbGxvb24zX3B4YWZiX2luZm8pOworCX0KKworCWlmIChiYWxsb29uM19oYXMoQkFMTE9PTjNfRkVBVFVSRV9NTUMpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX21tY19waW5fY29uZmlnKSk7CisJCXB4YV9zZXRfbWNpX2luZm8oJmJhbGxvb24zX21jaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF9maWNwX2luZm8oJmJhbGxvb24zX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisJaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX09IQ0kpKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX29oY2lfcGluX2NvbmZpZykpOworCQlweGFfc2V0X29oY2lfaW5mbygmYmFsbG9vbjNfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKwl9CisJcHhhX3NldF91ZGNfaW5mbygmYmFsbG9vbjNfdWRjX2luZm8pOworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfcGluX2NvbmZpZykpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiYWxsb29uM2xlZF9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGJhbGxvb24zX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsJLyogQ1BMRC9GUEdBICovCisJCS52aXJ0dWFsCT0gIEJBTExPT04zX0ZQR0FfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEJBTExPT04zX0ZQR0FfUEhZUyksCisJCS5sZW5ndGgJCT0gQkFMTE9PTjNfRlBHQV9MRU5HVEgsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGJhbGxvb24zX21hcF9pbyh2b2lkKQoreworCXB4YV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQoYmFsbG9vbjNfaW9fZGVzYywgQVJSQVlfU0laRShiYWxsb29uM19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQkFMTE9PTjMsICJCYWxsb29uMyIpCisJLyogTWFpbnRhaW5lcjogTmljayBCYW5lLiAqLworCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IGJhbGxvb24zX21hcF9pbywKKwkuaW5pdF9pcnEJPSBiYWxsb29uM19pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gYmFsbG9vbjNfaW5pdCwKKwkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCmluZGV4IDU1OTliY2UuLjk3OGEzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaApAQCAtMTIsNyArMTIsNiBAQAogCXVuc2lnbmVkIGludAkJY2tlbjsKIAl1bnNpZ25lZCBpbnQJCWRlbGF5OwogCXVuc2lnbmVkIGludAkJZW5hYmxlZDsKLQlzdHJ1Y3QgY2xrCQkqb3RoZXI7CiB9OwogCiAjZGVmaW5lIElOSVRfQ0xLUkVHKF9jbGssX2Rldm5hbWUsX2Nvbm5hbWUpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggMWQyY2VjMi4uZWVhNzhiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTMsMTMgKzEzLDE4IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDx2aWRlby9tYnhmYi5oPgogCisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9saWJlcnRhc19zcGkuaD4KKwogI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtMzQsNiArMzksMTAgQEAKIC8qIE1NQyBwb3dlciBlbmFibGUgKi8KICNkZWZpbmUgR1BJTzEwNV9NTUNfUE9XRVIJKDEwNSkKIAorLyogV0xBTiBHUElPUyAqLworI2RlZmluZSBHUElPMTlfV0xBTl9TVFJBUAkoMTkpCisjZGVmaW5lIEdQSU8xMDJfV0xBTl9SU1QJKDEwMikKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgY214MjcwX3Bpbl9jb25maWdbXSA9IHsKIAkvKiBBQyc5NyAqLwogCUdQSU8yOF9BQzk3X0JJVENMSywKQEAgLTk0LDggKzEwMyw4IEBACiAJR1BJTzI2X1NTUDFfUlhELAogCiAJLyogU1NQMiAqLwotCUdQSU8xOV9TU1AyX1NDTEssCi0JR1BJTzE0X1NTUDJfU0ZSTSwKKwlHUElPMTlfR1BJTywJLyogU1NQMiBjbG9jayBpcyB1c2VkIGFzIEdQSU8gZm9yIExpYmVydGFzIHBpbi1zdHJhcCAqLworCUdQSU8xNF9HUElPLAogCUdQSU84N19TU1AyX1RYRCwKIAlHUElPODhfU1NQMl9SWEQsCiAKQEAgLTEyMyw2ICsxMzIsNyBAQAogCUdQSU8wX0dQSU8JfCBXQUtFVVBfT05fRURHRV9CT1RILAogCUdQSU8xMDVfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTU1DL1NEIHBvd2VyICovCiAJR1BJTzUzX0dQSU8sCQkJCS8qIFBDIGNhcmQgcmVzZXQgKi8KKwlHUElPMTAyX0dQSU8sCQkJCS8qIFdMQU4gcmVzZXQgKi8KIAogCS8qIE5BTkQgY29udHJvbHMgKi8KIAlHUElPMTFfR1BJTwl8IE1GUF9MUE1fRFJJVkVfSElHSCwJLyogTkFORCBDRSMgKi8KQEAgLTEzMSw2ICsxNDEsNyBAQAogCS8qIGludGVycnVwdHMgKi8KIAlHUElPMTBfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogCUdQSU84M19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogV0xBTiBpbnRlcnJ1cHQgKi8KIH07CiAKIC8qIFYzMDIwIFJUQyAqLwpAQCAtMjcxLDU2ICsyODIsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfTU9EVUxFKQotc3RhdGljIGludCBjbXgyNzBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgaXJxX2hhbmRsZXJfdCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTA1X01NQ19QT1dFUiwgIk1NQy9TRCBwb3dlciIpOwotCWlmIChlcnIpIHsKLQkJZGV2X3dhcm4oZGV2LCAicG93ZXIgZ3BpbyB1bmF2YWlsYWJsZVxuIik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDVfTU1DX1BPV0VSLCAwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKENNWDI3MF9NTUNfSVJRLCBjbXgyNzBfZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlncGlvX2ZyZWUoR1BJTzEwNV9NTUNfUE9XRVIpOwotCQlkZXZfZXJyKGRldiwgImNteDI3MF9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCIKLQkJCSIgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iKTsKLQl9Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjbXgyNzBfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlkZXZfZGJnKGRldiwgInBvd2VyIG9uXG4iKTsKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzEwNV9NTUNfUE9XRVIsIDApOwotCX0gZWxzZSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDVfTU1DX1BPV0VSLCAxKTsKLQkJZGV2X2RiZyhkZXYsICJwb3dlciBvZmZcbiIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY214MjcwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShDTVgyNzBfTU1DX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU8xMDVfTU1DX1BPV0VSKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbXgyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbXgyNzBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IGNteDI3MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gY214MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODNfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU8xMDVfTU1DX1BPV0VSLAorCS5ncGlvX3Bvd2VyX2ludmVydAk9IDEsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgY214MjcwX2luaXRfbW1jKHZvaWQpCkBAIC0zMzEsNiArMjk4LDEwMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYKSB8fCBkZWZpbmVkKENPTkZJR19TUElfUFhBMlhYX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgY21feDI3MF9zcGlfaW5mbyA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSAxLAorCS5lbmFibGVfZG1hCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9jaGlwIGNtX3gyNzBfbGliZXJ0YXNfY2hpcCA9IHsKKwkucnhfdGhyZXNob2xkCT0gMSwKKwkudHhfdGhyZXNob2xkCT0gMSwKKwkudGltZW91dAk9IDEwMDAsCisJLmdwaW9fY3MJPSAxNCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtX3gyNzBfbGliZXJ0YXNfcGluX2NvbmZpZ1tdID0geworCS8qIFNTUDIgKi8KKwlHUElPMTlfU1NQMl9TQ0xLLAorCUdQSU8xNF9HUElPLAorCUdQSU84N19TU1AyX1RYRCwKKwlHUElPODhfU1NQMl9SWEQsCisKK307CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc19zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWludCBlcnIgPSBncGlvX3JlcXVlc3QoR1BJTzE5X1dMQU5fU1RSQVAsICJXTEFOIFNUUkFQIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMTAyX1dMQU5fUlNULCAiV0xBTiBSU1QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlX3N0cmFwOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzE5X1dMQU5fU1RSQVAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVfc3RyYXA7CisJbXNsZWVwKDEwMCk7CisKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjbV94MjcwX2xpYmVydGFzX3Bpbl9jb25maWcpKTsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDEpOworCW1zbGVlcCgxMDApOworCisJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7CisJc3BpX3NldHVwKHNwaSk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfc3RyYXA6CisJZ3Bpb19mcmVlKEdQSU8xOV9XTEFOX1NUUkFQKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY21feDI3MF9saWJlcnRhc190ZWFyZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMDJfV0xBTl9SU1QsIDApOworCWdwaW9fZnJlZShHUElPMTAyX1dMQU5fUlNUKTsKKwlncGlvX2ZyZWUoR1BJTzE5X1dMQU5fU1RSQVApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBsaWJlcnRhc19zcGlfcGxhdGZvcm1fZGF0YSBjbV94MjcwX2xpYmVydGFzX3BkYXRhID0geworCS51c2VfZHVtbXlfd3JpdGVzCT0gMSwKKwkuc2V0dXAJCQk9IGNtX3gyNzBfbGliZXJ0YXNfc2V0dXAsCisJLnRlYXJkb3duCQk9IGNtX3gyNzBfbGliZXJ0YXNfdGVhcmRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGNtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJsaWJlcnRhc19zcGkiLAorCQkubWF4X3NwZWVkX2h6CQk9IDEzMDAwMDAwLAorCQkuYnVzX251bQkJPSAyLAorCQkuaXJxCQkJPSBncGlvX3RvX2lycSg5NSksCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmNtX3gyNzBfbGliZXJ0YXNfY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmNtX3gyNzBfbGliZXJ0YXNfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbXgyNzBfaW5pdF9zcGkodm9pZCkKK3sKKwlweGEyeHhfc2V0X3NwaV9pbmZvKDIsICZjbV94MjcwX3NwaV9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjbV94MjcwX3NwaV9kZXZpY2VzKSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNteDI3MF9pbml0X3NwaSh2b2lkKSB7fQorI2VuZGlmCisKIHZvaWQgX19pbml0IGNteDI3MF9pbml0KHZvaWQpCiB7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX3Bpbl9jb25maWcpKTsKQEAgLTM0Myw0ICs0MDQsNSBAQAogCWNteDI3MF9pbml0X21tYygpOwogCWNteDI3MF9pbml0X29oY2koKTsKIAljbXgyNzBfaW5pdF8yNzAwRygpOworCWNteDI3MF9pbml0X3NwaSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCmluZGV4IDQ2NWRhMjYuLjEwMjkxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKQEAgLTQzLDEwICs0MywxMCBAQAogCiAjZGVmaW5lIENNX1gzMDBfRVRIX1BIWVMJMHgwODAwMDAxMAogCi0jZGVmaW5lIEdQSU84Ml9NTUMyX0lSUQkJKDgyKQotI2RlZmluZSBHUElPODVfTU1DMl9XUAkJKDg1KQorI2RlZmluZSBHUElPODJfTU1DX0lSUQkJKDgyKQorI2RlZmluZSBHUElPODVfTU1DX1dQCQkoODUpCiAKLSNkZWZpbmUJQ01fWDMwMF9NTUMyX0lSUQlJUlFfR1BJTyhHUElPODJfTU1DMl9JUlEpCisjZGVmaW5lCUNNX1gzMDBfTU1DX0lSUQkJSVJRX0dQSU8oR1BJTzgyX01NQ19JUlEpCiAKICNkZWZpbmUgR1BJTzk1X1JUQ19DUwkJKDk1KQogI2RlZmluZSBHUElPOTZfUlRDX1dSCQkoOTYpCkBAIC0yOTIsODIgKzI5MiwzNSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCi0vKiBUaGUgZmlyc3QgTU1DIHNsb3Qgb2YgQ00tWDMwMCBpcyBoYXJkd2lyZWQgdG8gTGliZXJ0YXMgY2FyZCBhbmQgaGFzCi0gICBubyBkZXRlY3Rpb24vcm8gcGlucyAqLwotc3RhdGljIGludCBjbV94MzAwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBpcnFfaGFuZGxlcl90IGNtX3gzMDBfZGV0ZWN0X2ludCwKLQkJCSAgICB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbV94MzAwX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5kZXRlY3RfZGVsYXkJPSAyMCwKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNtX3gzMDBfbWNpX2luaXQsCi0JLmV4aXQJCT0gY21feDMwMF9tY2lfZXhpdCwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPODJfTU1DX0lSUSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU84NV9NTUNfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCi1zdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU84NV9NTUMyX1dQKTsKLX0KLQorLyogVGhlIHNlY29uZCBNTUMgc2xvdCBvZiBDTS1YMzAwIGlzIGhhcmR3aXJlZCB0byBMaWJlcnRhcyBjYXJkIGFuZCBoYXMKKyAgIG5vIGRldGVjdGlvbi9ybyBwaW5zICovCiBzdGF0aWMgaW50IGNtX3gzMDBfbWNpMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgaXJxX2hhbmRsZXJfdCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgICAgIHZvaWQgKmRhdGEpCisJdm9pZCAqZGF0YSkKIHsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBzZXR1cCBHUElPIGZvciBDTS1YMzAwIE1NQyBjb250cm9sbGVyCi0JICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU84Ml9NTUMyX0lSUSwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJTzgyX01NQzJfSVJRKTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPODVfTU1DMl9XUCwgIm1tYyB3cml0ZSBwcm90ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF93cDsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPODVfTU1DMl9XUCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDTV9YMzAwX01NQzJfSVJRLCBjbV94MzAwX2RldGVjdF9pbnQsCi0JCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogTU1DL1NEL1NESU86ICIKLQkJCQkiY2FuJ3QgcmVxdWVzdCBjYXJkIGRldGVjdCBJUlFcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7Ci0JfQotCiAJcmV0dXJuIDA7Ci0KLWVycl9yZXF1ZXN0X2lycToKLQlncGlvX2ZyZWUoR1BJTzg1X01NQzJfV1ApOwotZXJyX3JlcXVlc3Rfd3A6Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci1lcnJfcmVxdWVzdF9jZDoKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBjbV94MzAwX21jaTJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZnJlZV9pcnEoQ01fWDMwMF9NTUMyX0lSUSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU84Ml9NTUMyX0lSUSk7Ci0JZ3Bpb19mcmVlKEdQSU84NV9NTUMyX1dQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjbV94MzAwX21jaTJfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBjbV94MzAwX21jaTJfaW5pdCwKLQkuZXhpdAkJPSBjbV94MzAwX21jaTJfZXhpdCwKLQkuZ2V0X3JvCQk9IGNtX3gzMDBfbWNpMl9ybywKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQgCQkJPSBjbV94MzAwX21jaTJfaW5pdCwKKwkuZXhpdAkJCT0gY21feDMwMF9tY2kyX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3gzMDBfaW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IDdjOWMzNGMuLjM3YzIzOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtMTcyLDYgKzE3Miw3IEBACiB7CiAJY29saWJyaV9weGEzMDBfaW5pdF9ldGgoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X25hbmQoKTsKIAljb2xpYnJpX3B4YTMwMF9pbml0X2xjZCgpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU8zOV9HUElPKSk7CiAJY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMjAuYwppbmRleCBhMThkMzdiLi5lYzBlMTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE0NSw3ICsxNDYsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU05EX0FDOTdfQ09ERUMpIHx8IGRlZmluZWQoU05EX0FDOTdfQ09ERUNfTU9EVUxFKQorI2lmCWRlZmluZWQoQ09ORklHX1NORF9BQzk3X0NPREVDKSB8fCBcCisJZGVmaW5lZChDT05GSUdfU05EX0FDOTdfQ09ERUNfTU9EVUxFKQogc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF9hYzk3X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0gewogCUdQSU8zNF9BQzk3X1NZU0NMSywKIAlHUElPMzVfQUM5N19TREFUQV9JTl8wLApAQCAtMTY0LDE1ICsxNjYsNDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KICNlbmRpZgogCisvKgorICogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGlzIHZlcmlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgVG9yYWRleCBPcmNoaWQKKyAqIGNhcnJpZXIgYm9hcmQKKyAqLworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIFVBUlQgMSBjb25maWd1cmF0aW9uIChtYXkgYmUgc2V0IGJ5IGJvb3Rsb2FkZXIpICovCisJR1BJTzk5X1VBUlQxX0NUUywKKwlHUElPMTA0X1VBUlQxX1JUUywKKwlHUElPOTdfVUFSVDFfUlhELAorCUdQSU85OF9VQVJUMV9UWEQsCisJR1BJTzEwMV9VQVJUMV9EVFIsCisJR1BJTzEwM19VQVJUMV9EU1IsCisJR1BJTzEwMF9VQVJUMV9EQ0QsCisJR1BJTzEwMl9VQVJUMV9SSSwKKworCS8qIFVBUlQgMiBjb25maWd1cmF0aW9uICovCisJR1BJTzEwOV9VQVJUMl9DVFMsCisJR1BJTzExMl9VQVJUMl9SVFMsCisJR1BJTzExMF9VQVJUMl9SWEQsCisJR1BJTzExMV9VQVJUMl9UWEQsCisKKwkvKiBVQVJUIDMgY29uZmlndXJhdGlvbiAqLworCUdQSU8zMF9VQVJUM19SWEQsCisJR1BJTzMxX1VBUlQzX1RYRCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0X3VhcnQodm9pZCkKK3sKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMyMF91YXJ0X3Bpbl9jb25maWcpKTsKK30KKwogdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdCh2b2lkKQogewogCWNvbGlicmlfcHhhMzIwX2luaXRfZXRoKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKCk7CiAJY29saWJyaV9weGEzMjBfaW5pdF9sY2QoKTsKIAljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPNDlfR1BJTykpOwogCWNvbGlicmlfcHhhMzIwX2luaXRfYWM5NygpOwogCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnKSwKIAkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8yOCkpOworCWNvbGlicmlfcHhhMzIwX2luaXRfdWFydCgpOwogfQogCiBNQUNISU5FX1NUQVJUKENPTElCUkkzMjAsICJUb3JhZGV4IENvbGlicmkgUFhBMzIwIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTN4eC5jCmluZGV4IGVhMzRlMzQuLmVmZWJhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1hY2gvY29saWJyaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4X25hbmQuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKICNpbmNsdWRlICJkZXZpY2VzLmgiCkBAIC05NSwxMCArOTYsMTMgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb2xpYnJpX3B4YTN4eF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2luaXQsCi0JLmV4aXQJCT0gY29saWJyaV9weGEzeHhfbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNvbGlicmlfcHhhM3h4X21jaV9pbml0LAorCS5leGl0CQkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X21tYyhtZnBfY2ZnX3QgKnBpbnMsIGludCBsZW4sIGludCBkZXRlY3RfcGluKQpAQCAtMTU0LDMgKzE1OCw0MyBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfTkFORF9QWEEzeHgpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY29saWJyaV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lICAgICAgICA9ICJib290bG9hZGVyIiwKKwkJLm9mZnNldCAgICAgID0gMCwKKwkJLnNpemUgICAgICAgID0gU1pfNTEySywKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJrZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICA9IFNaXzRNLAorCQkubWFza19mbGFncyAgPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUgICAgICAgID0gInJlc2VydmVkIiwKKwkJLm9mZnNldCAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgPSBTWl8xTSwKKwkJLm1hc2tfZmxhZ3MgID0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lICAgICAgICA9ICJmcyIsCisJCS5vZmZzZXQgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgID0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLmtlZXBfY29uZmlnCT0gMSwKKwkucGFydHMJCT0gY29saWJyaV9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShjb2xpYnJpX25hbmRfcGFydGl0aW9ucyksCit9OworCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTN4eF9pbml0X25hbmQodm9pZCkKK3sKKwlweGEzeHhfc2V0X25hbmRfaW5mbygmY29saWJyaV9uYW5kX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCmluZGV4IDUzNjNlMWEuLmI1MzZiNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2NvcmdpX2xjZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9zaGFycHNsLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgogI2luY2x1ZGUgPHZpZGVvL3cxMDBmYi5oPgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC0xMDQsNiArMTA1LDI4IEBACiAJR1BJTzZfTU1DX0NMSywKIAlHUElPOF9NTUNfQ1MwLAogCisJLyogR1BJTyBNYXRyaXggS2V5cGFkICovCisJR1BJTzY2X0dQSU8sCS8qIGNvbHVtbiAwICovCisJR1BJTzY3X0dQSU8sCS8qIGNvbHVtbiAxICovCisJR1BJTzY4X0dQSU8sCS8qIGNvbHVtbiAyICovCisJR1BJTzY5X0dQSU8sCS8qIGNvbHVtbiAzICovCisJR1BJTzcwX0dQSU8sCS8qIGNvbHVtbiA0ICovCisJR1BJTzcxX0dQSU8sCS8qIGNvbHVtbiA1ICovCisJR1BJTzcyX0dQSU8sCS8qIGNvbHVtbiA2ICovCisJR1BJTzczX0dQSU8sCS8qIGNvbHVtbiA3ICovCisJR1BJTzc0X0dQSU8sCS8qIGNvbHVtbiA4ICovCisJR1BJTzc1X0dQSU8sCS8qIGNvbHVtbiA5ICovCisJR1BJTzc2X0dQSU8sCS8qIGNvbHVtbiAxMCAqLworCUdQSU83N19HUElPLAkvKiBjb2x1bW4gMTEgKi8KKwlHUElPNThfR1BJTywJLyogcm93IDAgKi8KKwlHUElPNTlfR1BJTywJLyogcm93IDEgKi8KKwlHUElPNjBfR1BJTywJLyogcm93IDIgKi8KKwlHUElPNjFfR1BJTywJLyogcm93IDMgKi8KKwlHUElPNjJfR1BJTywJLyogcm93IDQgKi8KKwlHUElPNjNfR1BJTywJLyogcm93IDUgKi8KKwlHUElPNjRfR1BJTywJLyogcm93IDYgKi8KKwlHUElPNjVfR1BJTywJLyogcm93IDcgKi8KKwogCS8qIEdQSU8gKi8KIAlHUElPOV9HUElPLAkvKiBDT1JHSV9HUElPX25TRF9ERVRFQ1QgKi8KIAlHUElPN19HUElPLAkvKiBDT1JHSV9HUElPX25TRF9XUCAqLwpAQCAtMjY3LDkgKzI5MCwxMTUgQEAKIC8qCiAgKiBDb3JnaSBLZXlib2FyZCBEZXZpY2UKICAqLworI2RlZmluZSBDT1JHSV9LRVlfQ0FMRU5ERVIJS0VZX0YxCisjZGVmaW5lIENPUkdJX0tFWV9BRERSRVNTCUtFWV9GMgorI2RlZmluZSBDT1JHSV9LRVlfRk4JCUtFWV9GMworI2RlZmluZSBDT1JHSV9LRVlfQ0FOQ0VMCUtFWV9GNAorI2RlZmluZSBDT1JHSV9LRVlfT0ZGCQlLRVlfU1VTUEVORAorI2RlZmluZSBDT1JHSV9LRVlfRVhPSwkJS0VZX0Y1CisjZGVmaW5lIENPUkdJX0tFWV9FWENBTkNFTAlLRVlfRjYKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HRE9XTglLRVlfRjcKKyNkZWZpbmUgQ09SR0lfS0VZX0VYSk9HVVAJS0VZX0Y4CisjZGVmaW5lIENPUkdJX0tFWV9KQVAxCQlLRVlfTEVGVENUUkwKKyNkZWZpbmUgQ09SR0lfS0VZX0pBUDIJCUtFWV9MRUZUQUxUCisjZGVmaW5lIENPUkdJX0tFWV9NQUlMCQlLRVlfRjEwCisjZGVmaW5lIENPUkdJX0tFWV9PSwkJS0VZX0YxMQorI2RlZmluZSBDT1JHSV9LRVlfTUVOVQkJS0VZX0YxMgorCitzdGF0aWMgY29uc3QgdWludDMyX3QgY29yZ2lrYmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDEsIEtFWV8xKSwKKwlLRVkoMCwgMiwgS0VZXzMpLAorCUtFWSgwLCAzLCBLRVlfNSksCisJS0VZKDAsIDQsIEtFWV82KSwKKwlLRVkoMCwgNSwgS0VZXzcpLAorCUtFWSgwLCA2LCBLRVlfOSksCisJS0VZKDAsIDcsIEtFWV8wKSwKKwlLRVkoMCwgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEsIDEsIEtFWV8yKSwKKwlLRVkoMSwgMiwgS0VZXzQpLAorCUtFWSgxLCAzLCBLRVlfUiksCisJS0VZKDEsIDQsIEtFWV9ZKSwKKwlLRVkoMSwgNSwgS0VZXzgpLAorCUtFWSgxLCA2LCBLRVlfSSksCisJS0VZKDEsIDcsIEtFWV9PKSwKKwlLRVkoMSwgOCwgS0VZX1ApLAorCUtFWSgyLCAwLCBLRVlfVEFCKSwKKwlLRVkoMiwgMSwgS0VZX1EpLAorCUtFWSgyLCAyLCBLRVlfRSksCisJS0VZKDIsIDMsIEtFWV9UKSwKKwlLRVkoMiwgNCwgS0VZX0cpLAorCUtFWSgyLCA1LCBLRVlfVSksCisJS0VZKDIsIDYsIEtFWV9KKSwKKwlLRVkoMiwgNywgS0VZX0spLAorCUtFWSgzLCAwLCBDT1JHSV9LRVlfQ0FMRU5ERVIpLAorCUtFWSgzLCAxLCBLRVlfVyksCisJS0VZKDMsIDIsIEtFWV9TKSwKKwlLRVkoMywgMywgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfViksCisJS0VZKDMsIDUsIEtFWV9IKSwKKwlLRVkoMywgNiwgS0VZX00pLAorCUtFWSgzLCA3LCBLRVlfTCksCisJS0VZKDMsIDksIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoNCwgMCwgQ09SR0lfS0VZX0FERFJFU1MpLAorCUtFWSg0LCAxLCBLRVlfQSksCisJS0VZKDQsIDIsIEtFWV9EKSwKKwlLRVkoNCwgMywgS0VZX0MpLAorCUtFWSg0LCA0LCBLRVlfQiksCisJS0VZKDQsIDUsIEtFWV9OKSwKKwlLRVkoNCwgNiwgS0VZX0RPVCksCisJS0VZKDQsIDgsIEtFWV9FTlRFUiksCisJS0VZKDQsIDEwLCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgQ09SR0lfS0VZX01BSUwpLAorCUtFWSg1LCAxLCBLRVlfWiksCisJS0VZKDUsIDIsIEtFWV9YKSwKKwlLRVkoNSwgMywgS0VZX01JTlVTKSwKKwlLRVkoNSwgNCwgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNSwgS0VZX0NPTU1BKSwKKwlLRVkoNSwgNywgS0VZX1VQKSwKKwlLRVkoNSwgMTEsIENPUkdJX0tFWV9GTiksCisJS0VZKDYsIDAsIEtFWV9TWVNSUSksCisJS0VZKDYsIDEsIENPUkdJX0tFWV9KQVAxKSwKKwlLRVkoNiwgMiwgQ09SR0lfS0VZX0pBUDIpLAorCUtFWSg2LCAzLCBDT1JHSV9LRVlfQ0FOQ0VMKSwKKwlLRVkoNiwgNCwgQ09SR0lfS0VZX09LKSwKKwlLRVkoNiwgNSwgQ09SR0lfS0VZX01FTlUpLAorCUtFWSg2LCA2LCBLRVlfTEVGVCksCisJS0VZKDYsIDcsIEtFWV9ET1dOKSwKKwlLRVkoNiwgOCwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMCwgQ09SR0lfS0VZX09GRiksCisJS0VZKDcsIDEsIENPUkdJX0tFWV9FWE9LKSwKKwlLRVkoNywgMiwgQ09SR0lfS0VZX0VYQ0FOQ0VMKSwKKwlLRVkoNywgMywgQ09SR0lfS0VZX0VYSk9HRE9XTiksCisJS0VZKDcsIDQsIENPUkdJX0tFWV9FWEpPR1VQKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGNvcmdpa2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gY29yZ2lrYmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29yZ2lrYmRfcm93X2dwaW9zW10gPQorCQl7IDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSB9Oworc3RhdGljIGNvbnN0IGludCBjb3JnaWtiZF9jb2xfZ3Bpb3NbXSA9CisJCXsgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NyB9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBjb3JnaWtiZF9wZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJCT0gJmNvcmdpa2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gY29yZ2lrYmRfcm93X2dwaW9zLAorCS5jb2xfZ3Bpb3MJCT0gY29yZ2lrYmRfY29sX2dwaW9zLAorCS5udW1fcm93X2dwaW9zCQk9IEFSUkFZX1NJWkUoY29yZ2lrYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKGNvcmdpa2JkX2NvbF9ncGlvcyksCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gMTAsCisJLmRlYm91bmNlX21zCQk9IDEwLAorCS53YWtldXAJCQk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb3JnaWtiZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb3JnaWtiZF9wZGF0YSwKKwl9LAogfTsKIAogLyoKQEAgLTMwNywxMTEgKzQzNiwyMCBAQAogICogVGhlIGNhcmQgZGV0ZWN0IGludGVycnVwdCBpc24ndCBkZWJvdW5jZWQgc28gd2UgZGVsYXkgaXQgYnkgMjUwbXMKICAqIHRvIGdpdmUgdGhlIGNhcmQgYSBjaGFuY2UgdG8gZnVsbHkgaW5zZXJ0L2VqZWN0LgogICovCi1zdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhOwotCi1zdGF0aWMgaW50IGNvcmdpX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBjb3JnaV9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ09SR0lfR1BJT19uU0RfREVURUNULCAiblNEX0RFVEVDVCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX291dDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX1NEX1BXUiwgIlNEX1BXUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMjsKLQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ09SR0lfR1BJT19uU0RfV1ApOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDT1JHSV9HUElPX1NEX1BXUiwgMCk7Ci0KLQljb3JnaV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShDT1JHSV9JUlFfR1BJT19uU0RfREVURUNULCBjb3JnaV9kZXRlY3RfaW50LAotCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfMzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlXzM6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fU0RfUFdSKTsKLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvcmdpX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhKiBwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX1NEX1BXUiwgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKSk7Ci19Ci0KLXN0YXRpYyBpbnQgY29yZ2lfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKENPUkdJX0dQSU9fblNEX1dQKTsKLX0KLQotc3RhdGljIHZvaWQgY29yZ2lfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWZyZWVfaXJxKENPUkdJX0lSUV9HUElPX25TRF9ERVRFQ1QsIGRhdGEpOwotCWdwaW9fZnJlZShDT1JHSV9HUElPX1NEX1BXUik7Ci0JZ3Bpb19mcmVlKENPUkdJX0dQSU9fblNEX1dQKTsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19uU0RfREVURUNUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGNvcmdpX21jaV9pbml0LAotCS5nZXRfcm8JCT0gY29yZ2lfbWNpX2dldF9ybywKLQkuc2V0cG93ZXIgCT0gY29yZ2lfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IGNvcmdpX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IENPUkdJX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IENPUkdJX0dQSU9fU0RfUFdSLAogfTsKIAogCiAvKgogICogSXJkYQogICovCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShDT1JHSV9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi1zdGF0aWMgaW50IGNvcmdpX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChDT1JHSV9HUElPX0lSX09OLCAiSVJfT04iKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENPUkdJX0dQSU9fSVJfT04sIDEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjb3JnaV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoQ09SR0lfR1BJT19JUl9PTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZ3Bpb19wd2Rvd24JCT0gQ09SR0lfR1BJT19JUl9PTiwKIAkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IGNvcmdpX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBjb3JnaV9pcmRhX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IGNvcmdpX2lyZGFfc2h1dGRvd24sCiB9OwogCiAKQEAgLTYzNiw2ICs2NzQsNyBAQAogCWNvcmdpX2luaXRfc3BpKCk7CiAKICAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCWNvcmdpX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZjb3JnaV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJmNvcmdpX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCmluZGV4IDNhOGVlMjIuLjk4M2NjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBweGFfZnJlcXNfdCBweGEyN3hfZnJlcXNbXSA9IHsKIAl7MTA0MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAyKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksICA5MDAwMDAsIDE3MDUwMDAgfSwKLQl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCA2KSwgMCwgQ0NMS0NGRzIoMSwgMSwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKKwl7MTU2MDAwLCAxMDQwMDAsIFBYQTI3eF9DQ0NSKDEsCSA4LCAzKSwgMCwgQ0NMS0NGRzIoMSwgMCwgMSksIDEwMDAwMDAsIDE3MDUwMDAgfSwKIAl7MjA4MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDAsIDE2LCAyKSwgMSwgQ0NMS0NGRzIoMCwgMCwgMSksIDExODAwMDAsIDE3MDUwMDAgfSwKIAl7MzEyMDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCAzKSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEyNTAwMDAsIDE3MDUwMDAgfSwKIAl7NDE2MDAwLCAyMDgwMDAsIFBYQTI3eF9DQ0NSKDEsIDE2LCA0KSwgMSwgQ0NMS0NGRzIoMSwgMCwgMSksIDEzNTAwMDAsIDE3MDUwMDAgfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcyNi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKaW5kZXggN2QzZTFiNC4uOTY1NDgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTEzMCw2MSArMTMwLDE3IEBACiBzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQogewotCWludCBlcnI7Ci0KIAljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZGV0X3JlcTsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2RldF9kaXI7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcm9fcmVxOwotCi0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9yb19kaXI7Ci0KLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAotCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2lycTsKLQogCXJldHVybiAwOwotCi1lcnJfaXJxOgotZXJyX3JvX2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLWVycl9yb19yZXE6Ci1lcnJfZGV0X2RpcjoKLQlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7Ci1lcnJfZGV0X3JlcToKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKLX0KLQotc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7Ci0JZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmluaXQJCQk9IGNzYjcyNl9tY2lfaW5pdCwKIAkvKiBGSVhNRSBzZXRwb3dlciAqLwotCS5leGl0CQk9IGNzYjcyNl9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IENTQjcyNl9HUElPX01NQ19ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBDU0I3MjZfR1BJT19NTUNfUk8sCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewpAQCAtMjgyLDcgKzIzOCw3IEBACiB9OwogCiBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIGNzYjcyNl9sYW5fY29uZmlnID0gewotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKIAkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCiAJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKIAkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKaW5kZXggZWNjMDhmMy4uNDZmYWJlMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKQEAgLTkzNSw2ICs5MzUsMzMgQEAKIHsKIAlweGFfcmVnaXN0ZXJfZGV2aWNlKCZweGEzeHhfZGV2aWNlX25hbmQsIGluZm8pOwogfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHB4YTN4eF9yZXNvdXJjZXNfZ2N1W10gPSB7CisJeworCQkuc3RhcnQJPSAweDU0MDAwMDAwLAorCQkuZW5kCT0gMHg1NDAwMGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IElSUV9HQ1UsCisJCS5lbmQJPSBJUlFfR0NVLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBweGEzeHhfZ2N1X2RtYW1hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfZ2N1ID0geworCS5uYW1lCQk9ICJweGEzeHgtZ2N1IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHB4YTN4eF9yZXNvdXJjZXNfZ2N1KSwKKwkucmVzb3VyY2UJPSBweGEzeHhfcmVzb3VyY2VzX2djdSwKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrID0gJnB4YTN4eF9nY3VfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorfTsKKwogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogLyogcHhhMnh4LXNwaSBwbGF0Zm9ybS1kZXZpY2UgSUQgZXF1YWxzIHJlc3BlY3RpdmUgU1NQIHBsYXRmb3JtLWRldmljZSBJRCArIDEuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKaW5kZXggZWNjMjRhNGQuLjkzODE3ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmgKQEAgLTM1LDQgKzM1LDYgQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfbmFuZDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTN4eF9kZXZpY2VfaTJjX3Bvd2VyOwogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBweGEzeHhfZGV2aWNlX2djdTsKKwogdm9pZCBfX2luaXQgcHhhX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCmluZGV4IGEzNmZjMTcuLjQ5YWNkZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKQEAgLTE5OSw3ICsxOTksNiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOwogCXB4YV9zZXRfdWRjX2luZm8oJmU3eHhfdWRjX21hY2hfaW5mbyk7CiAJcHhhX3NldF9hYzk3X2luZm8oTlVMTCk7Ci0JZTd4eF9pcmRhX2luaXQoKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmZTd4eF9maWNwX3BsYXRmb3JtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggMWQwMDExMC4uNDA1MmVjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMjAwLDcgKzIwMCw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJcHhhX3NldF91ZGNfaW5mbygmZTd4eF91ZGNfbWFjaF9pbmZvKTsKIAlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKLQllN3h4X2lyZGFfaW5pdCgpOwogCXB4YV9zZXRfZmljcF9pbmZvKCZlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCA5Y2QwOTQ2Li5hZWM3ZjQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCkBAIC02NDYsMTMgKzY0NiwxNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8yMF8yMXxNTUNfVkREXzIxXzIyfE1NQ19WRERfMjJfMjN8Ci0JCQkgIE1NQ19WRERfMjRfMjV8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fAotCQkJICBNTUNfVkREXzI3XzI4fE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHwKLQkJCSAgTU1DX1ZERF8zMF8zMXxNTUNfVkREXzMxXzMyLAotCS5pbml0IAkJPSBlbV94MjcwX21jaV9pbml0LAotCS5zZXRwb3dlciAJPSBlbV94MjcwX21jaV9zZXRwb3dlciwKLQkuZXhpdAkJPSBlbV94MjcwX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKKwkJCQkgIE1NQ19WRERfMjRfMjV8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fAorCQkJCSAgTU1DX1ZERF8yN18yOHxNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8CisJCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCisJLmluaXQgCQkJPSBlbV94MjcwX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gZW1feDI3MF9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IGVtX3gyNzBfbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9tbWModm9pZCkKQEAgLTEwMjIsMjIgKzEwMjUsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0gewotCS5idXNfaWQJPSAwLAotCS5wb3dlciA9IGVtX3gyNzBfc2Vuc29yX3Bvd2VyLAotfTsKLQogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBlbV94MjcwX2kyY19jYW1faW5mb1tdID0gewogCXsKIAkJSTJDX0JPQVJEX0lORk8oIm10OW0xMTEiLCAweDQ4KSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJCT0gMCwKKwkucG93ZXIJCT0gZW1feDI3MF9zZW5zb3JfcG93ZXIsCisJLmJvYXJkX2luZm8JPSAmZW1feDI3MF9pMmNfY2FtX2luZm9bMF0sCisJLmkyY19hZGFwdGVyX2lkCT0gMCwKKwkubW9kdWxlX25hbWUJPSAibXQ5bTExMSIsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX2NhbWVyYSA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKIAl9LAogfTsKIAogc3RhdGljIHZvaWQgIF9faW5pdCBlbV94MjcwX2luaXRfY2FtZXJhKHZvaWQpCiB7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9pMmNfY2FtX2luZm8pKTsKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZlbV94MjcwX2NhbWVyYV9wbGF0Zm9ybV9kYXRhKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVtX3gyNzBfY2FtZXJhKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X2NhbWVyYSh2b2lkKSB7fQpAQCAtMTEwMyw2ICsxMTE2LDcgQEAKIFJFR1VMQVRPUl9DT05TVU1FUihsZG8xMCwgJnB4YV9kZXZpY2VfbWNpLmRldiwgInZjYyBzZGlvIik7CiBSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTIsIE5VTEwsICJ2Y2MgdXNiIik7CiBSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTksICZlbV94MjcwX2dwcnNfdXNlcnNwYWNlX2NvbnN1bWVyLmRldiwgInZjYyBncHJzIik7CitSRUdVTEFUT1JfQ09OU1VNRVIoYnVjazIsIE5VTEwsICJ2Y2NfY29yZSIpOwogCiAjZGVmaW5lIFJFR1VMQVRPUl9JTklUKF9sZG8sIF9taW5fdVYsIF9tYXhfdVYsIF9vcHNfbWFzaykJCVwKIAlzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgX2xkbyMjX2RhdGEgPSB7CQlcCkBAIC0xMTI1LDYgKzExMzksNyBAQAogCSAgICAgICBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyB8IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSk7CiBSRUdVTEFUT1JfSU5JVChsZG8xMiwgMzAwMDAwMCwgMzAwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOwogUkVHVUxBVE9SX0lOSVQobGRvMTksIDMyMDAwMDAsIDMyMDAwMDAsIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTKTsKK1JFR1VMQVRPUl9JTklUKGJ1Y2syLCAxMDAwMDAwLCAxNjUwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UpOwogCiBzdHJ1Y3QgbGVkX2luZm8gZW1feDI3MF9sZWRfaW5mbyA9IHsKIAkubmFtZSA9ICJlbS14MjcwOm9yYW5nZSIsCkBAIC0xMTk0LDYgKzEyMDksOCBAQAogCURBOTAzMF9MRE8oMTIpLAogCURBOTAzMF9MRE8oMTkpLAogCisJREE5MDMwX1NVQkRFVihyZWd1bGF0b3IsIEJVQ0syLCAmYnVjazJfZGF0YSksCisKIAlEQTkwMzBfU1VCREVWKGxlZCwgTEVEX1BDLCAmZW1feDI3MF9sZWRfaW5mbyksCiAJREE5MDMwX1NVQkRFVihiYWNrbGlnaHQsIFdMRUQsICZlbV94MjcwX2xlZF9pbmZvKSwKIAlEQTkwMzBfU1VCREVWKGJhdHRlcnksIEJBVCwgJmVtX3gyNzBfYmF0dGVydHlfaW5mbyksCkBAIC0xMjQ1LDcgKzEyNjIsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9tb2R1bGVfaW5pdCh2b2lkKQogewotCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9waW5fY29uZmlnKSk7CiAKIAltbWNfY2QgPSBHUElPMTNfTU1DX0NEOwpAQCAtMTI1Nyw3ICsxMjczLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfZXhlZGFfaW5pdCh2b2lkKQogewotCXByX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CiAJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoZXhlZGFfcGluX2NvbmZpZykpOwogCiAJbW1jX2NkID0gR1BJTzExNF9NTUNfQ0Q7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggYzYwZGFkZi4uOTE0MTdmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtNDcsNDQgKzQ3LDkgQEAKIAkuZ3Bpb19wdWxsdXBfaW52ZXJ0ZWQgPSAxCiB9OwogCi1zdGF0aWMgdm9pZCBlN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWlmIChtb2RlICYgSVJfT0ZGKSB7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTdYWF9JUl9PRkYsIDEpOwotCQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotCX0gZWxzZSB7Ci0JCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci0JCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTdYWF9JUl9PRkYsIDApOwotCX0KLX0KLQotaW50IGU3eHhfaXJkYV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3WFhfSVJfT0ZGLCAiSXJEQSBwb3dlciIpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTdYWF9JUl9PRkYsIDApOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JZTd4eF9pcmRhX3RyYW5zY2VpdmVyX21vZGUoTlVMTCwgSVJfU0lSTU9ERSB8IElSX09GRik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgZTd4eF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQllN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIElSX1NJUk1PREUgfCBJUl9PRkYpOwotCWdwaW9fZnJlZShHUElPX0U3WFhfSVJfT0ZGKTsKLX0KLQogc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBlN3h4X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBlN3h4X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc2h1dGRvd24gPSBlN3h4X2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fRTdYWF9JUl9PRkYsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiBpbnQgZXNlcmllc190bWlvX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKaW5kZXggY2E5OTEyZS4uMTcwOGMwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYwpAQCAtODgsNyArODgsMTAgQEAKIAogI2lmZGVmIENPTkZJR19NTUNfUFhBCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGd1bXN0aXhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QgCT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X21tY19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDgxMzU5ZDUuLjgzYmQzYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CiAKKyNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KICNpbmNsdWRlIDx2aWRlby93MTAwZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKQEAgLTE3NCwxNCArMTc1LDkgQEAKICAqIElSREEKICAqLwogCi1zdGF0aWMgdm9pZCBpcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPMTA1X0hYNDcwMF9uSVJfT04sIG1vZGUgJiBJUl9PRkYpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBmaWNwX2luZm8gPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPMTA1X0hYNDcwMF9uSVJfT04sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKgpAQCAtMzY4LDggKzM2NCw2IEBACiAgKiBMQ0QgLSBTb255IGRpc3BsYXkgY29ubmVjdGVkIHRvIEFUSSBJbWFnZW9uIHczMjIwCiAgKi8KIAotc3RhdGljIGludCBsY2RfcG93ZXI7Ci0KIHN0YXRpYyB2b2lkIHNvbnlfbGNkX2luaXQodm9pZCkKIHsKIAlncGlvX3NldF92YWx1ZShHUElPODRfSFg0NzAwX0xDRF9TUU4sIDEpOwpAQCAtNDEwLDM1ICs0MDQsNiBAQAogCWdwaW9fc2V0X3ZhbHVlKEdQSU8xMTBfSFg0NzAwX0xDRF9MVkREXzNWM19PTiwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgaHg0NzAwX2xjZF9zZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxkZXYsIGludCBsZXZlbCkKLXsKLQlzd2l0Y2ggKGxldmVsKSB7Ci0JY2FzZSBGQl9CTEFOS19VTkJMQU5LOgotCQlzb255X2xjZF9pbml0KCk7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfTk9STUFMOgotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046Ci0JCXNvbnlfbGNkX29mZigpOwotCQlicmVhazsKLQl9Ci0JbGNkX3Bvd2VyID0gbGV2ZWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaHg0NzAwX2xjZF9nZXRfcG93ZXIoc3RydWN0IGxjZF9kZXZpY2UgKmxtKQotewotCXJldHVybiBsY2RfcG93ZXI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbGNkX29wcyBoeDQ3MDBfbGNkX29wcyA9IHsKLQkuZ2V0X3Bvd2VyID0gaHg0NzAwX2xjZF9nZXRfcG93ZXIsCi0JLnNldF9wb3dlciA9IGh4NDcwMF9sY2Rfc2V0X3Bvd2VyLAotfTsKLQotc3RhdGljIHN0cnVjdCBsY2RfZGV2aWNlICpoeDQ3MDBfbGNkX2RldmljZTsKLQogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgdzMyMjBfbGNkX3N1c3BlbmQoc3RydWN0IHcxMDBmYl9wYXIgKndmYikKIHsKQEAgLTU3Myw2ICs1MzgsMjcgQEAKIAkucmVzb3VyY2UgICAgICA9IHczMjIwX3Jlc291cmNlcywKIH07CiAKK3N0YXRpYyB2b2lkIGh4NDcwMF9sY2Rfc2V0X3Bvd2VyKHN0cnVjdCBwbGF0X2xjZF9kYXRhICpwZCwgdW5zaWduZWQgaW50IHBvd2VyKQoreworCWlmIChwb3dlcikKKwkJc29ueV9sY2RfaW5pdCgpOworCWVsc2UKKwkJc29ueV9sY2Rfb2ZmKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBoeDQ3MDBfbGNkX2RhdGEgPSB7CisJLnNldF9wb3dlciA9IGh4NDcwMF9sY2Rfc2V0X3Bvd2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaHg0NzAwX2xjZCA9IHsKKwkubmFtZSA9ICJwbGF0Zm9ybS1sY2QiLAorCS5pZCAgID0gLTEsCisJLmRldiAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmh4NDcwMF9sY2RfZGF0YSwKKwkJLnBhcmVudCAgICAgICAgPSAmdzMyMjAuZGV2LAorCX0sCit9OworCiAvKgogICogQmFja2xpZ2h0CiAgKi8KQEAgLTYxOCw3ICs2MDQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZHM3ODQ2X3BsYXRmb3JtX2RhdGEgdHNjMjA0Nl9pbmZvID0gewogCS5tb2RlbCAgICAgICAgICAgID0gNzg0NiwKIAkudnJlZl9kZWxheV91c2VjcyA9IDEwMCwKLQkucHJlc3N1cmVfbWF4ICAgICA9IDUxMiwKKwkucHJlc3N1cmVfbWF4ICAgICA9IDEwMjQsCiAJLmRlYm91bmNlX21heCAgICAgPSAxMCwKIAkuZGVib3VuY2VfdG9sICAgICA9IDMsCiAJLmRlYm91bmNlX3JlcCAgICAgPSAxLApAQCAtODcyLDkgKzg1OCw2IEBACiAJcHhhMnh4X3NldF9zcGlfaW5mbygyLCAmcHhhX3NzcDJfbWFzdGVyX2luZm8pOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKEFSUkFZX0FORF9TSVpFKHRzYzIwNDZfYm9hcmRfaW5mbykpOwogCi0JaHg0NzAwX2xjZF9kZXZpY2UgPSBsY2RfZGV2aWNlX3JlZ2lzdGVyKCJ3MTAwZmIiLCBOVUxMLAotCQkJCQkodm9pZCAqKSZ3MzIyMF9pbmZvLCAmaHg0NzAwX2xjZF9vcHMpOwotCiAJZ3Bpb19zZXRfdmFsdWUoR1BJTzcxX0hYNDcwMF9BU0lDM19uUkVTRVQsIDApOwogCW1kZWxheSgxMCk7CiAJZ3Bpb19zZXRfdmFsdWUoR1BJTzcxX0hYNDcwMF9BU0lDM19uUkVTRVQsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYwppbmRleCBiNjI0M2I1Li5iNjQ4NmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYwpAQCAtMTY4LDcgKzE2OCwxMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBpZHBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGlkcF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbW90ZTIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCmluZGV4IDk2MTgwN2QuLjJhNDk0NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jCkBAIC0zODksNiArMzg5LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgaW1vdGUyX21jaV9wbGF0Zm9ybV9kYXRhID0gewogCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LCAvKiBkZWZhdWx0IGFueXdheSAqLwogCS5nZXRfcm8gPSBpbW90ZTJfbWNpX2dldF9ybywKKwkuZ3Bpb19jYXJkX2RldGVjdCA9IC0xLAorCS5ncGlvX2NhcmRfcm8JPSAtMSwKKwkuZ3Bpb19wb3dlciA9IC0xLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGltb3RlMmZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlYzA5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9iYWxsb29uMy5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9iYWxsb29uMy5oCisgKgorICogIEF1dGhvcnM6CU5pY2sgQmFuZSBhbmQgV29va2V5CisgKiAgQ3JlYXRlZDoJT2N0LCAyMDA1CisgKiAgQ29weXJpZ2h0OglUb2J5IENodXJjaGlsbCBMdGQKKyAqICBDcmliYmVkIGZyb20gbWFpbnN0b25lLmMsIGJ5IE5pY2hvbGFzIFBpdHJlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIEFTTV9BUkNIX0JBTExPT04zX0gKKyNkZWZpbmUgQVNNX0FSQ0hfQkFMTE9PTjNfSAorCitlbnVtIGJhbGxvb24zX2ZlYXR1cmVzIHsKKwlCQUxMT09OM19GRUFUVVJFX09IQ0ksCisJQkFMTE9PTjNfRkVBVFVSRV9NTUMsCisJQkFMTE9PTjNfRkVBVFVSRV9DRiwKKwlCQUxMT09OM19GRUFUVVJFX0FVRElPLAorCUJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSwKK307CisKKyNkZWZpbmUgQkFMTE9PTjNfRlBHQV9QSFlTCVBYQV9DUzRfUEhZUworI2RlZmluZSBCQUxMT09OM19GUEdBX1ZJUlQJKDB4ZjEwMDAwMDApCS8qIGFzIHBlciBiYWxsb29uMiAqLworI2RlZmluZSBCQUxMT09OM19GUEdBX0xFTkdUSAkweDAxMDAwMDAwCisKKy8qIEZQR0EvQ1BMRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBMF9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDA4KQorLyogZml4bWUgLSBzYW1lIGZvciBub3cgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBMV9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDA4KQorI2RlZmluZSBCQUxMT09OM19OQU5ESU9fSU9fUkVHCQkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAwMCkKKy8qIGZwZ2EvY3BsZCBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBCQUxMT09OM19JTlRfQ09OVFJPTF9SRUcJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMEMpCisjZGVmaW5lIEJBTExPT04zX05BTkRJT19DVEwyX1JFRyAJKEJBTExPT04zX0ZQR0FfVklSVCArIDB4MDBlMDAwMTApCisjZGVmaW5lIEJBTExPT04zX05BTkRJT19DVExfUkVHIAkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGUwMDAxNCkKKyNkZWZpbmUgQkFMTE9PTjNfVkVSU0lPTl9SRUcJCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwZTAwMDFjKQorCisjZGVmaW5lIEJBTExPT04zX1NBTU9TQV9BRERSX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGMwMDAwMCkKKyNkZWZpbmUgQkFMTE9PTjNfU0FNT1NBX0RBVEFfUkVHCShCQUxMT09OM19GUEdBX1ZJUlQgKyAweDAwYzAwMDA0KQorI2RlZmluZSBCQUxMT09OM19TQU1PU0FfU1RBVFVTX1JFRwkoQkFMTE9PTjNfRlBHQV9WSVJUICsgMHgwMGMwMDAxYykKKworLyogR1BJT3MgZm9yIGlycXMgKi8KKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19BVVhfTklSUQkJKDk0KQorI2RlZmluZSBCQUxMT09OM19HUElPX0NPREVDX0lSUQkJKDk1KQorCisvKiBUaW1lciBhbmQgSWRsZSBMRUQgbG9jYXRpb25zICovCisjZGVmaW5lIEJBTExPT04zX0dQSU9fTEVEX05BTkQJCSg5KQorI2RlZmluZSBCQUxMT09OM19HUElPX0xFRF9JRExFCQkoMTApCisKKy8qIGJhY2tsaWdodCBjb250cm9sICovCisjZGVmaW5lIEJBTExPT04zX0dQSU9fUlVOX0JBQ0tMSUdIVAkoOTkpCisKKyNkZWZpbmUgQkFMTE9PTjNfR1BJT19TMF9DRAkJKDEwNSkKKworLyogRlBHQSBJbnRlcnJ1cHQgTWFzay9BY2tub3dsZWRnZSBSZWdpc3RlciAqLworI2RlZmluZSBCQUxMT09OM19JTlRfUzBfSVJRCQkoMSA8PCAwKSAgLyogUENNQ0lBIDAgSVJRICovCisjZGVmaW5lIEJBTExPT04zX0lOVF9TMF9TVFNDSEcJCSgxIDw8IDEpICAvKiBQQ01DSUEgMCBzdGF0dXMgY2hhbmdlZCAqLworCisvKiBDRiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX25JUlEJCSgxIDw8IDApICAvKiBJUlEgLyByZWFkeSBzaWduYWwgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX25TVFNDSEdfQlZEMQkoMSA8PCAxKQorCQkJCQkvKiBWREQgc2Vuc2UgLyBjYXJkIHN0YXR1cyBjaGFuZ2VkICovCisKKy8qIENGIGNvbnRyb2wgcmVnaXN0ZXIgKHdyaXRlKSAqLworI2RlZmluZSBCQUxMT09OM19QQ01DSUFfUkVTRVQJCSgxIDw8IDApICAgLyogQ2FyZCByZXNldCBzaWduYWwgKi8KKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX0VOQUJMRQkJKDEgPDwgMSkKKyNkZWZpbmUgQkFMTE9PTjNfUENNQ0lBX0FERF9FTkFCTEUJKDEgPDwgMikKKworLyogQ1BMRCAoYW5kIEZQR0EpIGludGVyZmFjZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDUExEX0xDRDBfREFUQV9TRVQgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBDUExEX0xDRDBfREFUQV9DTFIgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBDUExEX0xDRDBfQ09NTUFORF9TRVQgICAgICAgICAgMHgwMQorI2RlZmluZSBDUExEX0xDRDBfQ09NTUFORF9DTFIgICAgICAgICAgMHgxMQorI2RlZmluZSBDUExEX0xDRDFfREFUQV9TRVQgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBDUExEX0xDRDFfREFUQV9DTFIgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBDUExEX0xDRDFfQ09NTUFORF9TRVQgICAgICAgICAgMHgwMworI2RlZmluZSBDUExEX0xDRDFfQ09NTUFORF9DTFIgICAgICAgICAgMHgxMworCisjZGVmaW5lIENQTERfTUlTQ19TRVQgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIENQTERfTUlTQ19DTFIgICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIENQTERfTUlTQ19MT09OX05SRVNFVF9CSVQgICAgICAwCisjZGVmaW5lIENQTERfTUlTQ19MT09OX1VOU1VTUF9CSVQgICAgICAxCisjZGVmaW5lIENQTERfTUlTQ19SVU5fNVZfQklUICAgICAgICAgICAyCisjZGVmaW5lIENQTERfTUlTQ19DSEdfRDBfQklUICAgICAgICAgICAzCisjZGVmaW5lIENQTERfTUlTQ19DSEdfRDFfQklUICAgICAgICAgICA0CisjZGVmaW5lIENQTERfTUlTQ19EQUNfTkNTX0JJVCAgICAgICAgICA1CisKKyNkZWZpbmUgQ1BMRF9MQ0RfU0VUICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1BMRF9MQ0RfQ0xSICAgICAgICAgICAgICAgICAgIDB4MTgKKyNkZWZpbmUgQ1BMRF9MQ0RfQkFDS0xJR0hUX0VOXzBfQklUICAgIDAKKyNkZWZpbmUgQ1BMRF9MQ0RfQkFDS0xJR0hUX0VOXzFfQklUICAgIDEKKyNkZWZpbmUgQ1BMRF9MQ0RfTEVEX1JFRF9CSVQgICAgICAgICAgIDQKKyNkZWZpbmUgQ1BMRF9MQ0RfTEVEX0dSRUVOX0JJVCAgICAgICAgIDUKKyNkZWZpbmUgQ1BMRF9MQ0RfTlJFU0VUX0JJVCAgICAgICAgICAgIDcKKworI2RlZmluZSBDUExEX0xDRF9ST19TRVQgICAgICAgICAgICAgICAgMHgwOQorI2RlZmluZSBDUExEX0xDRF9ST19DTFIgICAgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBDUExEX0xDRF9ST19MQ0QwX25XQUlUX0JJVCAgICAgMAorI2RlZmluZSBDUExEX0xDRF9ST19MQ0QxX25XQUlUX0JJVCAgICAgMQorCisjZGVmaW5lIENQTERfU0VSSUFMX1NFVCAgICAgICAgICAgICAgICAweDBhCisjZGVmaW5lIENQTERfU0VSSUFMX0NMUiAgICAgICAgICAgICAgICAweDFhCisjZGVmaW5lIENQTERfU0VSSUFMX0dTTV9SSV9CSVQgICAgICAgICAwCisjZGVmaW5lIENQTERfU0VSSUFMX0dTTV9DVFNfQklUICAgICAgICAxCisjZGVmaW5lIENQTERfU0VSSUFMX0dTTV9EVFJfQklUICAgICAgICAyCisjZGVmaW5lIENQTERfU0VSSUFMX0xQUl9DVFNfQklUICAgICAgICAzCisjZGVmaW5lIENQTERfU0VSSUFMX1RDMjMyX0NUU19CSVQgICAgICA0CisjZGVmaW5lIENQTERfU0VSSUFMX1RDMjMyX0RTUl9CSVQgICAgICA1CisKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19TRVQgICAgICAgICAgICAgIDB4MGIKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19DTFIgICAgICAgICAgICAgIDB4MWIKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19NU1A0MzBfTFBSICAgICAgIDAKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19NU1A0MzBfVEMyMzIgICAgIDEKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19NU1A0MzBfR1NNICAgICAgIDIKKyNkZWZpbmUgQ1BMRF9TUk9VVElOR19MT09OX0xQUiAgICAgICAgICgwIDw8IDQpCisjZGVmaW5lIENQTERfU1JPVVRJTkdfTE9PTl9UQzIzMiAgICAgICAoMSA8PCA0KQorI2RlZmluZSBDUExEX1NST1VUSU5HX0xPT05fR1NNICAgICAgICAgKDIgPDwgNCkKKworI2RlZmluZSBDUExEX0FST1VUSU5HX1NFVCAgICAgICAgICAgICAgMHgwYworI2RlZmluZSBDUExEX0FST1VUSU5HX0NMUiAgICAgICAgICAgICAgMHgxYworI2RlZmluZSBDUExEX0FST1VUSU5HX01JQzJQSE9ORV9CSVQgICAgMAorI2RlZmluZSBDUExEX0FST1VUSU5HX1BIT05FMklOVF9CSVQgICAgMQorI2RlZmluZSBDUExEX0FST1VUSU5HX1BIT05FMkVYVF9CSVQgICAgMgorI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05MMklOVF9CSVQgICAgMworI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05MMkVYVF9CSVQgICAgNAorI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05SMlBIT05FX0JJVCAgNQorI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05SMklOVF9CSVQgICAgNgorI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05SMkVYVF9CSVQgICAgNworCitleHRlcm4gaW50IGJhbGxvb24zX2hhcyhlbnVtIGJhbGxvb24zX2ZlYXR1cmVzIGZlYXR1cmUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCmluZGV4IGE4OGQ3Y2EuLjgxMTc0M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaApAQCAtMjMsNiArMjMsMTIgQEAKIGV4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfZXRoKHN0cnVjdCBheF9wbGF0X2RhdGEgKnBsYXRfZGF0YSk7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4X01PRFVMRSkKK2V4dGVybiB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbmFuZCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9uYW5kKHZvaWQpIHt9CisjZW5kaWYKKwogLyogcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgKi8KICNkZWZpbmUgQ09MSUJSSV9TRFJBTV9CQVNFCTB4YTAwMDAwMDAgICAgICAvKiBTRFJBTSByZWdpb24gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBmNmI0YmYzLi5hNzNiYzg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMjQsMzQgKzI0LDI4IEBACiAJCW1vdglcdG1wLCBcdG1wLCBsc3IgIzEzCiAJCWFuZAlcdG1wLCBcdG1wLCAjMHg3CQlAIENvcmUgRwogCQljbXAJXHRtcCwgIzEKLQkJYmhpCTEwMDRmCisJCWJoaQkxMDAyZgogCisJCUAgQ29yZSBHZW5lcmF0aW9uIDEgKFBYQTI1eCkKIAkJbW92CVxiYXNlLCAjaW9fcDJ2KDB4NDAwMDAwMDApCUAgSUlSIEN0bCA9IDB4NDBkMDAwMDAKIAkJYWRkCVxiYXNlLCBcYmFzZSwgIzB4MDBkMDAwMDAKIAkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBJQ0lQCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzRdCQlAIElDTVIKLQkJYgkxMDAyZgogCi0xMDA0OgotCQltcmMJcDYsIDAsIFxpcnFzdGF0LCBjNiwgYzAsIDAJQCBJQ0lQMgotCQltcmMJcDYsIDAsIFxpcnFuciwgYzcsIGMwLCAwCUAgSUNNUjIKLQkJYW5kcwlcaXJxbnIsIFxpcnFzdGF0LCBcaXJxbnIKLQkJYmVxCTEwMDNmCi0JCXJzYglcaXJxc3RhdCwgXGlycW5yLCAjMAotCQlhbmQJXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKLQkJY2x6CVxpcnFuciwgXGlycXN0YXQKLQkJcnNiCVxpcnFuciwgXGlycW5yLCAjMzEKLQkJYWRkCVxpcnFuciwgXGlycW5yLCAjKDMyICsgUFhBX0lSUSgwKSkKLQkJYgkxMDAxZgotMTAwMzoKLQkJbXJjCXA2LCAwLCBcaXJxc3RhdCwgYzAsIGMwLCAwCUAgSUNJUAotCQltcmMJcDYsIDAsIFxpcnFuciwgYzEsIGMwLCAwCUAgSUNNUgotMTAwMjoKIAkJYW5kcwlcaXJxbnIsIFxpcnFzdGF0LCBcaXJxbnIKIAkJYmVxCTEwMDFmCiAJCXJzYglcaXJxc3RhdCwgXGlycW5yLCAjMAogCQlhbmQJXGlycXN0YXQsIFxpcnFzdGF0LCBcaXJxbnIKIAkJY2x6CVxpcnFuciwgXGlycXN0YXQKIAkJcnNiCVxpcnFuciwgXGlycW5yLCAjKDMxICsgUFhBX0lSUSgwKSkKKwkJYgkxMDAxZgorMTAwMjoKKwkJQCBDb3JlIEdlbmVyYXRpb24gMiAoUFhBMjd4KSBvciBDb3JlIEdlbmVyYXRpb24gMyAoUFhBM3h4KQorCQltcmMJcDYsIDAsIFxpcnFzdGF0LCBjNSwgYzAsIDAJQCBJQ0hQCisJCXRzdAlcaXJxc3RhdCwgIzB4ODAwMDAwMDAKKwkJYmVxCTEwMDFmCisJCWJpYwlcaXJxc3RhdCwgXGlycXN0YXQsICMweDgwMDAwMDAwCisJCW1vdglcaXJxbnIsIFxpcnFzdGF0LCBsc3IgIzE2CisJCWFkZAlcaXJxbnIsIFxpcnFuciwgIyhQWEFfSVJRKDApKQogMTAwMToKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggMTZhYjc5NS4uYWEzZDlmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTE5Nyw2ICsxOTcsMTYgQEAKICNkZWZpbmUgX19jcHVfaXNfcHhhOTM1KGlkKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5NTAKKyNkZWZpbmUgX19jcHVfaXNfcHhhOTUwKGlkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJdW5zaWduZWQgaW50IF9pZCA9IChpZCkgPj4gNCAmIDB4ZmZmOwlcCisJCWlkID09IDB4Njk3OwkJCQlcCisJIH0pCisjZWxzZQorI2RlZmluZSBfX2NwdV9pc19weGE5NTAoaWQpCSgwKQorI2VuZGlmCisKICNkZWZpbmUgY3B1X2lzX3B4YTIxMCgpCQkJCQlcCiAJKHsJCQkJCQlcCiAJCV9fY3B1X2lzX3B4YTIxMChyZWFkX2NwdWlkX2lkKCkpOwlcCkBAIC0yNDksNiArMjU5LDEzIEBACiAJCV9fY3B1X2lzX3B4YTkzNShpZCk7CQkJXAogCSB9KQogCisjZGVmaW5lIGNwdV9pc19weGE5NTAoKQkJCQkJXAorCSh7CQkJCQkJXAorCQl1bnNpZ25lZCBpbnQgaWQgPSByZWFkX2NwdWlkKENQVUlEX0lEKTsJXAorCQlfX2NwdV9pc19weGE5NTAoaWQpOwkJCVwKKwkgfSkKKworCiAvKgogICogQ1BVSUQgQ29yZSBHZW5lcmF0aW9uIEJpdAogICogPD0gMHgyIGZvciBweGEyMXgvcHhhMjV4L3B4YTI2eC9weGEyN3gKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJkYS5oCmluZGV4IDBhNTBjM2MuLjNjZDQxZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcmRhLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lyZGEuaApAQCAtMTIsNiArMTIsOCBAQAogCXZvaWQgKCp0cmFuc2NlaXZlcl9tb2RlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKTsKIAlpbnQgKCpzdGFydHVwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgZ3Bpb19wd2Rvd247CQkvKiBwb3dlcmRvd24gR1BJTyBmb3IgdGhlIElyREEgY2hpcCAqLworCWJvb2wgZ3Bpb19wd2Rvd25faW52ZXJ0ZWQ7CS8qIGdwaW9fcHdkb3duIGlzIGludmVydGVkICovCiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X2ZpY3BfaW5mbyhzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhICppbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDZhMWQ5NTkuLjM2NzdhOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtNjgsOSArNjgsMTAgQEAKICNpZmRlZiBDT05GSUdfUFhBM3h4CiAjZGVmaW5lIElSUV9TU1A0CVBYQV9JUlEoMTMpCS8qIFNTUDQgc2VydmljZSByZXF1ZXN0ICovCiAjZGVmaW5lIElSUV9DSVIJCVBYQV9JUlEoMzQpCS8qIENvbnN1bWVyIElSICovCisjZGVmaW5lIElSUV9DT01NX1dEVAlQWEFfSVJRKDM1KSAJLyogQ29tbSBXRFQgaW50ZXJydXB0ICovCiAjZGVmaW5lIElSUV9UU0kJCVBYQV9JUlEoMzYpCS8qIFRvdWNoIFNjcmVlbiBJbnRlcmZhY2UgKFBYQTMyMCkgKi8KICNkZWZpbmUgSVJRX1VTSU0yCVBYQV9JUlEoMzgpCS8qIFVTSU0yIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgSVJRX0dSUEhJQ1MJUFhBX0lSUSgzOSkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfR0NVCQlQWEFfSVJRKDM5KQkvKiBHcmFwaGljcyBDb250cm9sbGVyICovCiAjZGVmaW5lIElSUV9NTUMyCVBYQV9JUlEoNDEpCS8qIE1NQzIgQ29udHJvbGxlciAqLwogI2RlZmluZSBJUlFfMVdJUkUJUFhBX0lSUSg0NCkJLyogMS1XaXJlIENvbnRyb2xsZXIgKi8KICNkZWZpbmUgSVJRX05BTkQJUFhBX0lSUSg0NSkJLyogTkFORCBDb250cm9sbGVyICovCkBAIC04MSw4ICs4MiwzMSBAQAogI2RlZmluZSBJUlFfTU1DMwlQWEFfSVJRKDU1KQkvKiBNTUMzIENvbnRyb2xsZXIgKFBYQTMxMCkgKi8KICNlbmRpZgogCi0jZGVmaW5lIFBYQV9HUElPX0lSUV9CQVNFCVBYQV9JUlEoNjQpCi0jZGVmaW5lIFBYQV9HUElPX0lSUV9OVU0JKDEyOCkKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTkzNQorI2RlZmluZSBJUlFfVTJPCQlQWEFfSVJRKDY0KQkvKiBVU0IgT1RHIDIuMCBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9VMkgJCVBYQV9JUlEoNjUpCS8qIFVTQiBIb3N0IDIuMCBDb250cm9sbGVyIChQWEE5MzUpICovCisKKyNkZWZpbmUgSVJRX01NQzNfUFhBOTM1CVBYQV9JUlEoNzIpCS8qIE1NQzMgQ29udHJvbGxlciAoUFhBOTM1KSAqLworI2RlZmluZSBJUlFfTU1DNF9QWEE5MzUJUFhBX0lSUSg3MykJLyogTU1DNCBDb250cm9sbGVyIChQWEE5MzUpICovCisjZGVmaW5lIElSUV9NTUM1X1BYQTkzNQlQWEFfSVJRKDc0KQkvKiBNTUM1IENvbnRyb2xsZXIgKFBYQTkzNSkgKi8KKworI2RlZmluZSBJUlFfVTJQCQlQWEFfSVJRKDkzKQkvKiBVU0IgUEhZIEQrL0QtIExpbmVzIChQWEE5MzUpICovCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUFhBOTMwCisjZGVmaW5lIElSUV9FTkhST1QJUFhBX0lSUSgzNykJLyogRW5oYW5jZWQgUm90YXJ5IChQWEE5MzApICovCisjZGVmaW5lIElSUV9BQ0lQQzAJUFhBX0lSUSg1KQorI2RlZmluZSBJUlFfQUNJUEMxCVBYQV9JUlEoNDApCisjZGVmaW5lIElSUV9BQ0lQQzIJUFhBX0lSUSgxOSkKKyNkZWZpbmUgSVJRX1RSS0JBTEwJUFhBX0lSUSg0MykJLyogVHJhY2sgQmFsbCAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BYQTk1MAorI2RlZmluZSBJUlFfR0M1MDAJUFhBX0lSUSg3MCkJLyogR3JhcGhpY3MgQ29udHJvbGxlciAoUFhBOTUwKSAqLworI2VuZGlmCisKKyNkZWZpbmUgUFhBX0dQSU9fSVJRX0JBU0UJUFhBX0lSUSg5NikKKyNkZWZpbmUgUFhBX0dQSU9fSVJRX05VTQkoMTkyKQogCiAjZGVmaW5lIEdQSU9fMl94X1RPX0lSUSh4KQkoUFhBX0dQSU9fSVJRX0JBU0UgKyAoeCkpCiAjZGVmaW5lIElSUV9HUElPKHgpCSgoKHgpIDwgMikgPyAoSVJRX0dQSU8wICsgKHgpKSA6IEdQSU9fMl94X1RPX0lSUSh4KSkKQEAgLTEwNSw2ICsxMjksOCBAQAogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgNzApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX1pZTE9OSVRFKQogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMzIpCisjZWxpZiBkZWZpbmVkKENPTkZJR19QWEFfRVpYKQorI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMjMpCiAjZWxzZQogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMTYpCiAjZW5kaWYKQEAgLTIzNyw2ICsyNjMsMTYgQEAKICNkZWZpbmUgTUFJTlNUT05FX1MxX1NUU0NIR19JUlEJTUFJTlNUT05FX0lSUSgxNCkKICNkZWZpbmUgTUFJTlNUT05FX1MxX0lSUQlNQUlOU1RPTkVfSVJRKDE1KQogCisvKiBCYWxsb29uMyBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEJBTExPT04zX0lSUSh4KQkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKworI2RlZmluZSBCQUxMT09OM19CUF9DRl9OUkRZX0lSUQlCQUxMT09OM19JUlEoMCkKKyNkZWZpbmUgQkFMTE9PTjNfQlBfTlNUU0NIR19JUlEJQkFMTE9PTjNfSVJRKDEpCisKKyNkZWZpbmUgQkFMTE9PTjNfQVVYX05JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19BVVhfTklSUSkKKyNkZWZpbmUgQkFMTE9PTjNfQ09ERUNfSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fQ09ERUNfSVJRKQorI2RlZmluZSBCQUxMT09OM19TMF9DRF9JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19TMF9DRCkKKwogLyogTG9Db01vIEludGVycnVwdHMgKENPTkZJR19TSEFSUF9MT0NPTU8pICovCiAjZGVmaW5lIElSUV9MT0NPTU9fS0VZX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDApCiAjZGVmaW5lIElSUV9MT0NPTU9fR1BJT19CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC5oCmluZGV4IDQ4MjE4NTAuLjI3MWUyNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLmgKQEAgLTE2LDMwNSArMTYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01GUF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX0gKIAotI2RlZmluZSBtZnBfdG9fZ3BpbyhtKQkoKG0pICUgMTI4KQotCi0vKiBsaXN0IG9mIGFsbCB0aGUgY29uZmlndXJhYmxlIE1GUCBwaW5zICovCi1lbnVtIHsKLQlNRlBfUElOX0lOVkFMSUQgPSAtMSwKLQotCU1GUF9QSU5fR1BJTzAgPSAwLAotCU1GUF9QSU5fR1BJTzEsCi0JTUZQX1BJTl9HUElPMiwKLQlNRlBfUElOX0dQSU8zLAotCU1GUF9QSU5fR1BJTzQsCi0JTUZQX1BJTl9HUElPNSwKLQlNRlBfUElOX0dQSU82LAotCU1GUF9QSU5fR1BJTzcsCi0JTUZQX1BJTl9HUElPOCwKLQlNRlBfUElOX0dQSU85LAotCU1GUF9QSU5fR1BJTzEwLAotCU1GUF9QSU5fR1BJTzExLAotCU1GUF9QSU5fR1BJTzEyLAotCU1GUF9QSU5fR1BJTzEzLAotCU1GUF9QSU5fR1BJTzE0LAotCU1GUF9QSU5fR1BJTzE1LAotCU1GUF9QSU5fR1BJTzE2LAotCU1GUF9QSU5fR1BJTzE3LAotCU1GUF9QSU5fR1BJTzE4LAotCU1GUF9QSU5fR1BJTzE5LAotCU1GUF9QSU5fR1BJTzIwLAotCU1GUF9QSU5fR1BJTzIxLAotCU1GUF9QSU5fR1BJTzIyLAotCU1GUF9QSU5fR1BJTzIzLAotCU1GUF9QSU5fR1BJTzI0LAotCU1GUF9QSU5fR1BJTzI1LAotCU1GUF9QSU5fR1BJTzI2LAotCU1GUF9QSU5fR1BJTzI3LAotCU1GUF9QSU5fR1BJTzI4LAotCU1GUF9QSU5fR1BJTzI5LAotCU1GUF9QSU5fR1BJTzMwLAotCU1GUF9QSU5fR1BJTzMxLAotCU1GUF9QSU5fR1BJTzMyLAotCU1GUF9QSU5fR1BJTzMzLAotCU1GUF9QSU5fR1BJTzM0LAotCU1GUF9QSU5fR1BJTzM1LAotCU1GUF9QSU5fR1BJTzM2LAotCU1GUF9QSU5fR1BJTzM3LAotCU1GUF9QSU5fR1BJTzM4LAotCU1GUF9QSU5fR1BJTzM5LAotCU1GUF9QSU5fR1BJTzQwLAotCU1GUF9QSU5fR1BJTzQxLAotCU1GUF9QSU5fR1BJTzQyLAotCU1GUF9QSU5fR1BJTzQzLAotCU1GUF9QSU5fR1BJTzQ0LAotCU1GUF9QSU5fR1BJTzQ1LAotCU1GUF9QSU5fR1BJTzQ2LAotCU1GUF9QSU5fR1BJTzQ3LAotCU1GUF9QSU5fR1BJTzQ4LAotCU1GUF9QSU5fR1BJTzQ5LAotCU1GUF9QSU5fR1BJTzUwLAotCU1GUF9QSU5fR1BJTzUxLAotCU1GUF9QSU5fR1BJTzUyLAotCU1GUF9QSU5fR1BJTzUzLAotCU1GUF9QSU5fR1BJTzU0LAotCU1GUF9QSU5fR1BJTzU1LAotCU1GUF9QSU5fR1BJTzU2LAotCU1GUF9QSU5fR1BJTzU3LAotCU1GUF9QSU5fR1BJTzU4LAotCU1GUF9QSU5fR1BJTzU5LAotCU1GUF9QSU5fR1BJTzYwLAotCU1GUF9QSU5fR1BJTzYxLAotCU1GUF9QSU5fR1BJTzYyLAotCU1GUF9QSU5fR1BJTzYzLAotCU1GUF9QSU5fR1BJTzY0LAotCU1GUF9QSU5fR1BJTzY1LAotCU1GUF9QSU5fR1BJTzY2LAotCU1GUF9QSU5fR1BJTzY3LAotCU1GUF9QSU5fR1BJTzY4LAotCU1GUF9QSU5fR1BJTzY5LAotCU1GUF9QSU5fR1BJTzcwLAotCU1GUF9QSU5fR1BJTzcxLAotCU1GUF9QSU5fR1BJTzcyLAotCU1GUF9QSU5fR1BJTzczLAotCU1GUF9QSU5fR1BJTzc0LAotCU1GUF9QSU5fR1BJTzc1LAotCU1GUF9QSU5fR1BJTzc2LAotCU1GUF9QSU5fR1BJTzc3LAotCU1GUF9QSU5fR1BJTzc4LAotCU1GUF9QSU5fR1BJTzc5LAotCU1GUF9QSU5fR1BJTzgwLAotCU1GUF9QSU5fR1BJTzgxLAotCU1GUF9QSU5fR1BJTzgyLAotCU1GUF9QSU5fR1BJTzgzLAotCU1GUF9QSU5fR1BJTzg0LAotCU1GUF9QSU5fR1BJTzg1LAotCU1GUF9QSU5fR1BJTzg2LAotCU1GUF9QSU5fR1BJTzg3LAotCU1GUF9QSU5fR1BJTzg4LAotCU1GUF9QSU5fR1BJTzg5LAotCU1GUF9QSU5fR1BJTzkwLAotCU1GUF9QSU5fR1BJTzkxLAotCU1GUF9QSU5fR1BJTzkyLAotCU1GUF9QSU5fR1BJTzkzLAotCU1GUF9QSU5fR1BJTzk0LAotCU1GUF9QSU5fR1BJTzk1LAotCU1GUF9QSU5fR1BJTzk2LAotCU1GUF9QSU5fR1BJTzk3LAotCU1GUF9QSU5fR1BJTzk4LAotCU1GUF9QSU5fR1BJTzk5LAotCU1GUF9QSU5fR1BJTzEwMCwKLQlNRlBfUElOX0dQSU8xMDEsCi0JTUZQX1BJTl9HUElPMTAyLAotCU1GUF9QSU5fR1BJTzEwMywKLQlNRlBfUElOX0dQSU8xMDQsCi0JTUZQX1BJTl9HUElPMTA1LAotCU1GUF9QSU5fR1BJTzEwNiwKLQlNRlBfUElOX0dQSU8xMDcsCi0JTUZQX1BJTl9HUElPMTA4LAotCU1GUF9QSU5fR1BJTzEwOSwKLQlNRlBfUElOX0dQSU8xMTAsCi0JTUZQX1BJTl9HUElPMTExLAotCU1GUF9QSU5fR1BJTzExMiwKLQlNRlBfUElOX0dQSU8xMTMsCi0JTUZQX1BJTl9HUElPMTE0LAotCU1GUF9QSU5fR1BJTzExNSwKLQlNRlBfUElOX0dQSU8xMTYsCi0JTUZQX1BJTl9HUElPMTE3LAotCU1GUF9QSU5fR1BJTzExOCwKLQlNRlBfUElOX0dQSU8xMTksCi0JTUZQX1BJTl9HUElPMTIwLAotCU1GUF9QSU5fR1BJTzEyMSwKLQlNRlBfUElOX0dQSU8xMjIsCi0JTUZQX1BJTl9HUElPMTIzLAotCU1GUF9QSU5fR1BJTzEyNCwKLQlNRlBfUElOX0dQSU8xMjUsCi0JTUZQX1BJTl9HUElPMTI2LAotCU1GUF9QSU5fR1BJTzEyNywKLQlNRlBfUElOX0dQSU8wXzIsCi0JTUZQX1BJTl9HUElPMV8yLAotCU1GUF9QSU5fR1BJTzJfMiwKLQlNRlBfUElOX0dQSU8zXzIsCi0JTUZQX1BJTl9HUElPNF8yLAotCU1GUF9QSU5fR1BJTzVfMiwKLQlNRlBfUElOX0dQSU82XzIsCi0JTUZQX1BJTl9HUElPN18yLAotCU1GUF9QSU5fR1BJTzhfMiwKLQlNRlBfUElOX0dQSU85XzIsCi0JTUZQX1BJTl9HUElPMTBfMiwKLQlNRlBfUElOX0dQSU8xMV8yLAotCU1GUF9QSU5fR1BJTzEyXzIsCi0JTUZQX1BJTl9HUElPMTNfMiwKLQlNRlBfUElOX0dQSU8xNF8yLAotCU1GUF9QSU5fR1BJTzE1XzIsCi0JTUZQX1BJTl9HUElPMTZfMiwKLQlNRlBfUElOX0dQSU8xN18yLAotCi0JTUZQX1BJTl9VTFBJX1NUUCwKLQlNRlBfUElOX1VMUElfTlhULAotCU1GUF9QSU5fVUxQSV9ESVIsCi0KLQlNRlBfUElOX25YQ1ZSRU4sCi0JTUZQX1BJTl9ERl9DTEVfbk9FLAotCU1GUF9QSU5fREZfbkFEVjFfQUxFLAotCU1GUF9QSU5fREZfU0NMS19FLAotCU1GUF9QSU5fREZfU0NMS19TLAotCU1GUF9QSU5fbkJFMCwKLQlNRlBfUElOX25CRTEsCi0JTUZQX1BJTl9ERl9uQURWMl9BTEUsCi0JTUZQX1BJTl9ERl9JTlRfUm5CLAotCU1GUF9QSU5fREZfbkNTMCwKLQlNRlBfUElOX0RGX25DUzEsCi0JTUZQX1BJTl9uTFVBLAotCU1GUF9QSU5fbkxMQSwKLQlNRlBfUElOX0RGX25XRSwKLQlNRlBfUElOX0RGX0FMRV9uV0UsCi0JTUZQX1BJTl9ERl9uUkVfbk9FLAotCU1GUF9QSU5fREZfQUREUjAsCi0JTUZQX1BJTl9ERl9BRERSMSwKLQlNRlBfUElOX0RGX0FERFIyLAotCU1GUF9QSU5fREZfQUREUjMsCi0JTUZQX1BJTl9ERl9JTzAsCi0JTUZQX1BJTl9ERl9JTzEsCi0JTUZQX1BJTl9ERl9JTzIsCi0JTUZQX1BJTl9ERl9JTzMsCi0JTUZQX1BJTl9ERl9JTzQsCi0JTUZQX1BJTl9ERl9JTzUsCi0JTUZQX1BJTl9ERl9JTzYsCi0JTUZQX1BJTl9ERl9JTzcsCi0JTUZQX1BJTl9ERl9JTzgsCi0JTUZQX1BJTl9ERl9JTzksCi0JTUZQX1BJTl9ERl9JTzEwLAotCU1GUF9QSU5fREZfSU8xMSwKLQlNRlBfUElOX0RGX0lPMTIsCi0JTUZQX1BJTl9ERl9JTzEzLAotCU1GUF9QSU5fREZfSU8xNCwKLQlNRlBfUElOX0RGX0lPMTUsCi0KLQkvKiBhZGRpdGlvbmFsIHBpbnMgb24gUFhBOTMwICovCi0JTUZQX1BJTl9HU0lNX1VJTywKLQlNRlBfUElOX0dTSU1fVUNMSywKLQlNRlBfUElOX0dTSU1fVURFVCwKLQlNRlBfUElOX0dTSU1fblVSU1QsCi0JTUZQX1BJTl9QTUlDX0lOVCwKLQlNRlBfUElOX1JEWSwKLQotCU1GUF9QSU5fTUFYLAotfTsKLQotLyoKLSAqIGEgcG9zc2libGUgTUZQIGNvbmZpZ3VyYXRpb24gaXMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgaW50ZWdlcgotICoKLSAqIGJpdCAgMC4uIDkgLSBNRlAgUGluIE51bWJlciAoMTAyNCBQaW5zIE1heGltdW0pCi0gKiBiaXQgMTAuLjEyIC0gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdGlvbgotICogYml0IDEzLi4xNSAtIERyaXZlIFN0cmVuZ3RoCi0gKiBiaXQgMTYuLjE4IC0gTG93IFBvd2VyIE1vZGUgU3RhdGUKLSAqIGJpdCAxOS4uMjAgLSBMb3cgUG93ZXIgTW9kZSBFZGdlIERldGVjdGlvbgotICogYml0IDIxLi4yMiAtIFJ1biBNb2RlIFB1bGwgU3RhdGUKLSAqCi0gKiB0byBmYWNpbGl0YXRlIHRoZSBkZWZpbml0aW9uLCB0aGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgcHJvdmlkZWQKLSAqCi0gKiBNRlBfQ0ZHX0RFRkFVTFQgLSBkZWZhdWx0IE1GUCBjb25maWd1cmF0aW9uIHZhbHVlLCB3aXRoCi0gKiAJCSAgYWx0ZXJuYXRlIGZ1bmN0aW9uID0gMCwKLSAqIAkJICBkcml2ZSBzdHJlbmd0aCA9IGZhc3QgM21BIChNRlBfRFMwM1gpCi0gKiAJCSAgbG93IHBvd2VyIG1vZGUgPSBkZWZhdWx0Ci0gKiAJCSAgZWRnZSBkZXRlY3Rpb24gPSBub25lCi0gKgotICogTUZQX0NGRwktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbgotICogTUZQX0NGR19EUlYJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCi0gKiAJCSAgcGluIGRyaXZlIHN0cmVuZ3RoCi0gKiBNRlBfQ0ZHX0xQTQktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiBhbmQKLSAqIAkJICBsb3cgcG93ZXIgbW9kZQotICogTUZQX0NGR19YCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uLAotICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aCBhbmQgbG93IHBvd2VyIG1vZGUKLSAqLwotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbWZwX2NmZ190OwotCi0jZGVmaW5lIE1GUF9QSU4oeCkJCSgoeCkgJiAweDNmZikKLQotI2RlZmluZSBNRlBfQUYwCQkJKDB4MCA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGMQkJCSgweDEgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjIJCQkoMHgyIDw8IDEwKQotI2RlZmluZSBNRlBfQUYzCQkJKDB4MyA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNAkJCSgweDQgPDwgMTApCi0jZGVmaW5lIE1GUF9BRjUJCQkoMHg1IDw8IDEwKQotI2RlZmluZSBNRlBfQUY2CQkJKDB4NiA8PCAxMCkKLSNkZWZpbmUgTUZQX0FGNwkJCSgweDcgPDwgMTApCi0jZGVmaW5lIE1GUF9BRl9NQVNLCQkoMHg3IDw8IDEwKQotI2RlZmluZSBNRlBfQUYoeCkJCSgoKHgpID4+IDEwKSAmIDB4NykKLQotI2RlZmluZSBNRlBfRFMwMVgJCSgweDAgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzAyWAkJKDB4MSA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDNYCQkoMHgyIDw8IDEzKQotI2RlZmluZSBNRlBfRFMwNFgJCSgweDMgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzA2WAkJKDB4NCA8PCAxMykKLSNkZWZpbmUgTUZQX0RTMDhYCQkoMHg1IDw8IDEzKQotI2RlZmluZSBNRlBfRFMxMFgJCSgweDYgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUzEzWAkJKDB4NyA8PCAxMykKLSNkZWZpbmUgTUZQX0RTX01BU0sJCSgweDcgPDwgMTMpCi0jZGVmaW5lIE1GUF9EUyh4KQkJKCgoeCkgPj4gMTMpICYgMHg3KQotCi0jZGVmaW5lIE1GUF9MUE1fREVGQVVMVAkJKDB4MCA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9EUklWRV9MT1cJKDB4MSA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9EUklWRV9ISUdICSgweDIgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fUFVMTF9MT1cJKDB4MyA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9QVUxMX0hJR0gJKDB4NCA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9GTE9BVAkJKDB4NSA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9JTlBVVAkJKDB4NiA8PCAxNikKLSNkZWZpbmUgTUZQX0xQTV9TVEFURV9NQVNLCSgweDcgPDwgMTYpCi0jZGVmaW5lIE1GUF9MUE1fU1RBVEUoeCkJKCgoeCkgPj4gMTYpICYgMHg3KQotCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9OT05FCSgweDAgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9SSVNFCSgweDEgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9GQUxMCSgweDIgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9CT1RICSgweDMgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRV9NQVNLCSgweDMgPDwgMTkpCi0jZGVmaW5lIE1GUF9MUE1fRURHRSh4KQkJKCgoeCkgPj4gMTkpICYgMHgzKQotCi0jZGVmaW5lIE1GUF9QVUxMX05PTkUJCSgweDAgPDwgMjEpCi0jZGVmaW5lIE1GUF9QVUxMX0xPVwkJKDB4MSA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfSElHSAkJKDB4MiA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfQk9USAkJKDB4MyA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTExfTUFTSwkJKDB4MyA8PCAyMSkKLSNkZWZpbmUgTUZQX1BVTEwoeCkJCSgoKHgpID4+IDIxKSAmIDB4MykKLQotI2RlZmluZSBNRlBfQ0ZHX0RFRkFVTFQJCShNRlBfQUYwIHwgTUZQX0RTMDNYIHwgTUZQX0xQTV9ERUZBVUxUIHxcCi0JCQkJIE1GUF9MUE1fRURHRV9OT05FIHwgTUZQX1BVTExfTk9ORSkKLQotI2RlZmluZSBNRlBfQ0ZHKHBpbiwgYWYpCQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+TUZQX0FGX01BU0spIHxcCi0JIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYpKQotCi0jZGVmaW5lIE1GUF9DRkdfRFJWKHBpbiwgYWYsIGRydikJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydikpCi0KLSNkZWZpbmUgTUZQX0NGR19MUE0ocGluLCBhZiwgbHBtKQlcCi0JKChNRlBfQ0ZHX0RFRkFVTFQgJiB+KE1GUF9BRl9NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF9MUE1fIyNscG0pKQotCi0jZGVmaW5lIE1GUF9DRkdfWChwaW4sIGFmLCBkcnYsIGxwbSkJXAotCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9EU19NQVNLIHwgTUZQX0xQTV9TVEFURV9NQVNLKSkgfFwKLQkgKE1GUF9QSU4oTUZQX1BJTl8jI3BpbikgfCBNRlBfIyNhZiB8IE1GUF8jI2RydiB8IE1GUF9MUE1fIyNscG0pKQorI2luY2x1ZGUgPHBsYXQvbWZwLmg+CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbW1jLmgKaW5kZXggNmQxMzA0Yy4uMDJhNjlkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tbWMuaApAQCAtMTQsNiArMTQsMTEgQEAKIAlpbnQgKCpnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKik7CiAJdm9pZCAoKnNldHBvd2VyKShzdHJ1Y3QgZGV2aWNlICosIHVuc2lnbmVkIGludCk7CiAJdm9pZCAoKmV4aXQpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKTsKKwlpbnQgZ3Bpb19jYXJkX2RldGVjdDsJCQkvKiBncGlvIGRldGVjdGluZyBjYXJkIGluc2VydGlvbiAqLworCWludCBncGlvX2NhcmRfcm87CQkJLyogZ3BpbyBkZXRlY3RpbmcgcmVhZCBvbmx5IHRvZ2dsZSAqLworCWJvb2wgZ3Bpb19jYXJkX3JvX2ludmVydDsJCS8qIGdwaW8gcm8gaXMgaW52ZXJ0ZWQgKi8KKwlpbnQgZ3Bpb19wb3dlcjsJCQkJLyogZ3BpbyBwb3dlcmluZyB1cCBNTUMgYnVzICovCisJYm9vbCBncGlvX3Bvd2VyX2ludmVydDsJCQkvKiBncGlvIHBvd2VyIGlzIGludmVydGVkICovCiB9OwogCiBleHRlcm4gdm9pZCBweGFfc2V0X21jaV9pbmZvKHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjOWIwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdGMuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3BhbG10Yy1ncGlvLmgKKyAqCisgKiBHUElPcyBhbmQgaW50ZXJydXB0cyBmb3IgUGFsbSBUdW5nc3RlbnxDIEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQXV0aG9yczoJQWxleCBPc2Jvcm5lIDxib2JvZmRvb21AZ21haWwuY29tPgorICoJCU1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgkJSG9sZ2VyIEJvY2tsZXQgPGJpdHouZW1haWxAZ214Lm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9JTkNMVURFX1BBTE1UQ19IXworI2RlZmluZSBfSU5DTFVERV9QQUxNVENfSF8KKworLyoqIEhFUkUgQVJFIEdQSU9zICoqLworCisvKiBHUElPcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19FQVJQSE9ORV9ERVRFQ1QJMgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19DUkFETEVfREVURUNUCTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfSE9UU1lOQ19CVVRUT04JNworCisvKiBTRC9NTUMgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfREVURUNUX04JMTIKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfU0RfUE9XRVIJCTMyCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1NEX1JFQURPTkxZCTU0CisKKy8qIFdMQU4gKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZCTEzCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWQkxNAorI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxCTE1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIJMzMKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMwk1NQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQJNzgKKworLyogVURDICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1VTQl9ERVRFQ1RfTgk0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1VTQl9QT1dFUgkzNgorCisvKiBMQ0QvQkFDS0xJR0hUICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSCQkxNgorI2RlZmluZSBHUElPX05SX1BBTE1UQ19MQ0RfUE9XRVIJNDQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfTENEX0JMQU5LCTM4CisKKy8qIFVBUlQgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfUlMyMzJfUE9XRVIJMzcKKworLyogSVJEQSAqLworI2RlZmluZSBHUElPX05SX1BBTE1UQ19JUl9ESVNBQkxFCTQ1CisKKy8qIElSUXMgKi8KKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVRDX1NEX0RFVEVDVF9OCUlSUV9HUElPKEdQSU9fTlJfUEFMTVRDX1NEX0RFVEVDVF9OKQorI2RlZmluZSBJUlFfR1BJT19QQUxNVENfV0xBTl9SRUFEWQlJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19XTEFOX1JFQURZKQorCisvKiBVQ0IxNDAwIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1BPV0VSX0RFVEVDVAkoMHg4MCB8IDB4MDApCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX0hFQURQSE9ORV9ERVRFQ1QJKDB4ODAgfCAweDAxKQorI2RlZmluZSBHUElPX05SX1BBTE1UQ19TUEVBS0VSX0VOQUJMRQkoMHg4MCB8IDB4MDMpCisjZGVmaW5lIEdQSU9fTlJfUEFMTVRDX1ZJQlJBX1BPV0VSCSgweDgwIHwgMHgwNSkKKyNkZWZpbmUgR1BJT19OUl9QQUxNVENfTEVEX1BPV0VSCSgweDgwIHwgMHgwNykKKworLyoqIEhFUkUgQVJFIElOSVQgVkFMVUVTICoqLworI2RlZmluZSBQQUxNVENfVUNCMTQwMF9HUElPX09GRlNFVAkweDgwCisKKy8qIEJBVFRFUlkgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfVk9MVEFHRQkJNDAwMAkvKiA0LjAwViBtYXhpbXVtIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NSU5fVk9MVEFHRQkJMzU1MAkvKiAzLjU1ViBjcml0aWNhbCB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1UQ19CQVRfTUFYX0NVUlJFTlQJCTAJLyogdW5rbm9rbiAqLworI2RlZmluZSBQQUxNVENfQkFUX01JTl9DVVJSRU5UCQkwCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NQVhfQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX0JBVF9NSU5fQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVRDX01BWF9MSUZFX01JTlMJCTI0MAkvKiBvbi1saWZlIGluIG1pbnV0ZXMgKi8KKworI2RlZmluZSBQQUxNVENfQkFUX01FQVNVUkVfREVMQVkJKEhaICogMSkKKworLyogQkFDS0xJR0hUICovCisjZGVmaW5lIFBBTE1UQ19NQVhfSU5URU5TSVRZCQkweEZFCisjZGVmaW5lIFBBTE1UQ19ERUZBVUxUX0lOVEVOU0lUWQkweDdFCisjZGVmaW5lIFBBTE1UQ19MSU1JVF9NQVNLCQkweDdGCisjZGVmaW5lIFBBTE1UQ19QUkVTQ0FMRVIJCTB4M0YKKyNkZWZpbmUgUEFMTVRDX1BFUklPRF9OUwkJMzUwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtdHguaAppbmRleCBlNzQwODJjLi4xYmUwZGI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXR4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10eC5oCkBAIC04Miw2ICs4MiwxMSBAQAogI2RlZmluZSBQQUxNVFhfUEhZU19GTEFTSF9TVEFSVAlQWEFfQ1MwX1BIWVMJLyogQ2hpcFNlbGVjdCAwICovCiAjZGVmaW5lIFBBTE1UWF9QSFlTX05BTkRfU1RBUlQJUFhBX0NTMV9QSFlTCS8qIENoaXBTZWxlY3QgMSAqLwogCisjZGVmaW5lIFBBTE1UWF9OQU5EX0FMRV9QSFlTCShQQUxNVFhfUEhZU19OQU5EX1NUQVJUIHwgKDEgPDwgMjQpKQorI2RlZmluZSBQQUxNVFhfTkFORF9DTEVfUEhZUwkoUEFMTVRYX1BIWVNfTkFORF9TVEFSVCB8ICgxIDw8IDI1KSkKKyNkZWZpbmUgUEFMTVRYX05BTkRfQUxFX1ZJUlQJMHhmZjEwMDAwMAorI2RlZmluZSBQQUxNVFhfTkFORF9DTEVfVklSVAkweGZmMjAwMDAwCisKIC8qIFRPVUNIU0NSRUVOICovCiAjZGVmaW5lIEFDOTdfTElOS19GUkFNRQkJCTIxCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKaW5kZXggN2QxYTA1OS4uZTkxZDYzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmgKQEAgLTIwOCw3ICsyMDgsNyBAQAogI2RlZmluZSBDS0VOX01WRUQJNDMJLyogPCBNVkVEIGNsb2NrIGVuYWJsZSAqLwogCiAvKiBOb3RlOiBHQ1UgY2xvY2sgZW5hYmxlIGJpdCBkaWZmZXJzIG9uIFBYQTMwMC9QWEEzMTAgYW5kIFBYQTMyMCAqLwotI2RlZmluZSBQWEEzMDBfQ0tFTl9HUkFQSElDUwk0MgkvKiBHcmFwaGljcyBjb250cm9sbGVyIGNsb2NrIGVuYWJsZSAqLwotI2RlZmluZSBQWEEzMjBfQ0tFTl9HUkFQSElDUwk3CS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIENLRU5fUFhBMzAwX0dDVQkJNDIJLyogR3JhcGhpY3MgY29udHJvbGxlciBjbG9jayBlbmFibGUgKi8KKyNkZWZpbmUgQ0tFTl9QWEEzMjBfR0NVCQk3CS8qIEdyYXBoaWNzIGNvbnRyb2xsZXIgY2xvY2sgZW5hYmxlICovCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX1BYQTNYWF9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGFmYi5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKaW5kZXggNjkzMjcyMC4uZjczMDYxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YWZiLmgKQEAgLTExOCw3ICsxMTgsOCBAQAogCXVfaW50CQlmaXhlZF9tb2RlczoxLAogCQkJY21hcF9pbnZlcnNlOjEsCiAJCQljbWFwX3N0YXRpYzoxLAotCQkJdW51c2VkOjI5OworCQkJYWNjZWxlcmF0aW9uX2VuYWJsZWQ6MSwKKwkJCXVudXNlZDoyODsKIAogCS8qIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIGRlZmluZWQgaW4gTENDUjAKIAkgKiAgICAgIExDQ1IwX0FjdCBvciBMQ0NSMF9QYXMgICAgICAgICAgQWN0aXZlIG9yIFBhc3NpdmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaAppbmRleCBhZDIzZTc0Li42ODQ2NGNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1pbnRjLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIElDRlAJCV9fUkVHKDB4NDBEMDAwMEMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ1BSCQlfX1JFRygweDQwRDAwMDEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAqLwogI2RlZmluZSBJQ0NSCQlfX1JFRygweDQwRDAwMDE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBJQ0hQCQlfX1JFRygweDQwRDAwMDE4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSGlnaGVzdCBQcmlvcml0eSBSZWdpc3RlciAqLwogCiAjZGVmaW5lIElDSVAyCQlfX1JFRygweDQwRDAwMDlDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgSVJRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLwogI2RlZmluZSBJQ01SMgkJX19SRUcoMHg0MEQwMDBBMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIE1hc2sgUmVnaXN0ZXIgMiAqLwpAQCAtMjAsNCArMjEsMTQgQEAKICNkZWZpbmUgSUNGUDIJCV9fUkVHKDB4NDBEMDAwQTgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBGSVEgUGVuZGluZyBSZWdpc3RlciAyICovCiAjZGVmaW5lIElDUFIyCQlfX1JFRygweDQwRDAwMEFDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgUGVuZGluZyBSZWdpc3RlciAyICovCiAKKyNkZWZpbmUgSUNJUDMJCV9fUkVHKDB4NDBEMDAxMzApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAzICovCisjZGVmaW5lIElDTVIzCQlfX1JFRygweDQwRDAwMTM0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAzICovCisjZGVmaW5lIElDTFIzCQlfX1JFRygweDQwRDAwMTM4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBJQ0ZQMwkJX19SRUcoMHg0MEQwMDEzQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgSUNQUjMJCV9fUkVHKDB4NDBEMDAxNDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDMgKi8KKworI2RlZmluZSBJUFIoeCkJCV9fUkVHKDB4NDBEMDAwMUMgKyAoeCA8IDMyID8gKHggPDwgMikJCVwKKwkJCQk6ICh4IDwgNjQgPyAoMHg5NCArICgoeCAtIDMyKSA8PCAyKSkJXAorCQkJCTogKDB4MTI4ICsgKCh4IC0gNjQpIDw8IDIpKSkpKQorCiAjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggYjU0NzQ5NC4uMjM3NzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0zNyw3ICszNyw3IEBACiB7CiAJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkKIAkgICAgfHwgbWFjaGluZV9pc19jc2I3MjYoKSB8fCBtYWNoaW5lX2lzX3N0YXJnYXRlMigpCi0JICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpKQorCSAgICB8fCBtYWNoaW5lX2lzX2NtX3gzMDAoKSB8fCBtYWNoaW5lX2lzX2JhbGxvb24zKCkpCiAJCVVBUlQgPSBTVFVBUlQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKaW5kZXggZjZlMDMwMC4uNjExMmFmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAorI2RlZmluZSBNQVhfSU5URVJOQUxfSVJRUwkxMjgKKwogI2RlZmluZSBJUlFfQklUKG4pCSgoKG4pIC0gUFhBX0lSUSgwKSkgJiAweDFmKQogI2RlZmluZSBfSUNNUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTVIyIDogJklDTVIpKQogI2RlZmluZSBfSUNMUihuKQkoKigoKChuKSAtIFBYQV9JUlEoMCkpICYgfjB4MWYpID8gJklDTFIyIDogJklDTFIpKQpAQCAtMTIwLDcgKzEyMiw5IEBACiAKIHZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKQogewotCWludCBpcnE7CisJaW50IGlycSwgaTsKKworCUJVR19PTihpcnFfbnIgPiBNQVhfSU5URVJOQUxfSVJRUyk7CiAKIAlweGFfaW50ZXJuYWxfaXJxX25yID0gaXJxX25yOwogCkBAIC0xMjksNiArMTMzLDEyIEBACiAJCV9JQ0xSKGlycSkgPSAwOwkvKiBhbGwgSVJRcyBhcmUgSVJRLCBub3QgRklRICovCiAJfQogCisJLyogaW5pdGlhbGl6ZSBpbnRlcnJ1cHQgcHJpb3JpdHkgKi8KKwlpZiAoY3B1X2lzX3B4YTI3eCgpIHx8IGNwdV9pc19weGEzeHgoKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgaXJxX25yOyBpKyspCisJCQlJUFIoaSkgPSBpIHwgKDEgPDwgMzEpOworCX0KKwogCS8qIG9ubHkgdW5tYXNrZWQgaW50ZXJydXB0cyBraWNrIHVzIG91dCBvZiBpZGxlICovCiAJSUNDUiA9IDE7CiAKQEAgLTE0Myw3ICsxNTMsOCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yWzJdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfaWNtcltNQVhfSU5URVJOQUxfSVJRUy8zMl07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pcHJbTUFYX0lOVEVSTkFMX0lSUVNdOwogCiBzdGF0aWMgaW50IHB4YV9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0xNTMsNiArMTY0LDggQEAKIAkJc2F2ZWRfaWNtcltpXSA9IF9JQ01SKGlycSk7CiAJCV9JQ01SKGlycSkgPSAwOwogCX0KKwlmb3IgKGkgPSAwOyBpIDwgcHhhX2ludGVybmFsX2lycV9ucjsgaSsrKQorCQlzYXZlZF9pcHJbaV0gPSBJUFIoaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NSw2ICsxNzgsOCBAQAogCQlfSUNNUihpcnEpID0gc2F2ZWRfaWNtcltpXTsKIAkJX0lDTFIoaXJxKSA9IDA7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBweGFfaW50ZXJuYWxfaXJxX25yOyBpKyspCisJCUlQUihpKSA9IHNhdmVkX2lwcltpXTsKIAogCUlDQ1IgPSAxOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCA1NWIzNzg4Li4xMzg0ODk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMjY1LDQ1ICsyNjUsMTIgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX1BYQSkgfHwgZGVmaW5lZChDT05GSUdfTU1DX1BYQV9NT0RVTEUpCi1zdGF0aWMgaW50IGxpdHRsZXRvbl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBpcnFfaGFuZGxlcl90IGxpdHRsZXRvbl9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnIsIGdwaW9fY2QgPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1Q7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19jZCwgIm1tYyBjYXJkIGRldGVjdCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfY2Q7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX2NkKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKGdwaW9fY2QpLCBsaXR0bGV0b25fZGV0ZWN0X2ludCwKLQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAibW1jIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX3JlcXVlc3RfaXJxOgotCWdwaW9fZnJlZShncGlvX2NkKTsKLWVycl9yZXF1ZXN0X2NkOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGxpdHRsZXRvbl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGdwaW9fY2QgPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1Q7Ci0KLQlmcmVlX2lycShncGlvX3RvX2lycShncGlvX2NkKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKGdwaW9fY2QpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGxpdHRsZXRvbl9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjAsCi0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IGxpdHRsZXRvbl9tY2lfaW5pdCwKLQkuZXhpdAkJPSBsaXR0bGV0b25fbWNpX2V4aXQsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX01NQzFfQ0FSRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBsaXR0bGV0b25faW5pdF9tbWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwppbmRleCBmMDRjODMzMy4uYzZhOTRkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtNDgyLDExICs0ODIsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBsdWJib2NrX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuZGV0ZWN0X2RlbGF5CT0gMSwKLQkuaW5pdCAJCT0gbHViYm9ja19tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IGx1YmJvY2tfbWNpX2dldF9ybywKLQkuZXhpdCAJCT0gbHViYm9ja19tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5kZXRlY3RfZGVsYXkJCT0gMSwKKwkuaW5pdCAJCQk9IGx1YmJvY2tfbWNpX2luaXQsCisJLmdldF9ybwkJCT0gbHViYm9ja19tY2lfZ2V0X3JvLAorCS5leGl0IAkJCT0gbHViYm9ja19tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgdm9pZCBsdWJib2NrX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQpAQCAtNTA0LDggKzUwNyw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIGx1YmJvY2tfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBsdWJib2NrX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gbHViYm9ja19pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbHViYm9ja19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCBjYTM5NjY5Li41MzYwYzA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTE0MCwxNSArMTQwLDkgQEAKICAqIElSREEKICAqLwogCi1zdGF0aWMgdm9pZCBtYWdpY2lhbl9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShHUElPODNfTUFHSUNJQU5fbklSX0VOLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBtYWdpY2lhbl9maWNwX2luZm8gPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlID0gbWFnaWNpYW5faXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPODNfTUFHSUNJQU5fbklSX0VOLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoKQEAgLTY1MSw1NSArNjQ1LDI0IEBACiBzdGF0aWMgaW50IG1hZ2ljaWFuX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGVycjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKElSUV9NQUdJQ0lBTl9TRCwgZGV0ZWN0X2lycSwKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSVJRX01BR0lDSUFOX1NELCBkZXRlY3RfaXJxLAogCQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00sCi0JCQkJIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwotCWVyciA9IGdwaW9fcmVxdWVzdChFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9wb3dlcjsKLQllcnIgPSBncGlvX3JlcXVlc3QoRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZLCAiblNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfcmVxdWVzdF9yZWFkb25seTsKLQotCXJldHVybiAwOwotCi1lcnJfcmVxdWVzdF9yZWFkb25seToKLQlncGlvX2ZyZWUoRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIpOwotZXJyX3JlcXVlc3RfcG93ZXI6Ci0JZnJlZV9pcnEoSVJRX01BR0lDSUFOX1NELCBkYXRhKTsKLWVycl9yZXF1ZXN0X2lycToKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBtYWdpY2lhbl9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQlncGlvX3NldF92YWx1ZShFR1BJT19NQUdJQ0lBTl9TRF9QT1dFUiwgKDEgPDwgdmRkKSAmIHBkYXRhLT5vY3JfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbnQgbWFnaWNpYW5fbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICghZ3Bpb19nZXRfdmFsdWUoRUdQSU9fTUFHSUNJQU5fblNEX1JFQURPTkxZKSk7CisJCQkJIm1tYyBjYXJkIGRldGVjdCIsIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBtYWdpY2lhbl9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEVHUElPX01BR0lDSUFOX1NEX1BPV0VSKTsKIAlmcmVlX2lycShJUlFfTUFHSUNJQU5fU0QsIGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG1hZ2ljaWFuX21jaV9pbmZvID0gewotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAgICAgPSBtYWdpY2lhbl9tY2lfaW5pdCwKLQkuZ2V0X3JvICAgPSBtYWdpY2lhbl9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciA9IG1hZ2ljaWFuX21jaV9zZXRwb3dlciwKLQkuZXhpdCAgICAgPSBtYWdpY2lhbl9tY2lfZXhpdCwKKwkub2NyX21hc2sgCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuaW5pdCAgICAgCQk9IG1hZ2ljaWFuX21jaV9pbml0LAorCS5leGl0ICAgICAJCT0gbWFnaWNpYW5fbWNpX2V4aXQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IEVHUElPX01BR0lDSUFOX25TRF9SRUFET05MWSwKKwkuZ3Bpb19jYXJkX3JvX2ludmVydAk9IDEsCisJLmdwaW9fcG93ZXIJCT0gRUdQSU9fTUFHSUNJQU5fU0RfUE9XRVIsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKaW5kZXggZjRkYWJmMC4uYTRlZWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMKQEAgLTQ1MCwxMCArNDUwLDEzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgbWFpbnN0b25lX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gbWFpbnN0b25lX21jaV9pbml0LAotCS5zZXRwb3dlciAJPSBtYWluc3RvbmVfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IG1haW5zdG9uZV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gbWFpbnN0b25lX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gbWFpbnN0b25lX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gbWFpbnN0b25lX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gLTEsCisJLmdwaW9fY2FyZF9ybwkJPSAtMSwKKwkuZ3Bpb19wb3dlcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIG1haW5zdG9uZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKQEAgLTQ3Niw4ICs0NzksOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBtYWluc3RvbmVfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS50cmFuc2NlaXZlcl9jYXAgID0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSAtMSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCisJLnRyYW5zY2VpdmVyX21vZGUJPSBtYWluc3RvbmVfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fa2V5c19idXR0b25bXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyZDI4MTMyLi4zY2FiNDUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC00MzQsNzIgKzQzNCwxNSBAQAogLyoKICAqIFNESU8vTU1DIENhcmQgY29udHJvbGxlcgogICovCi1zdGF0aWMgdm9pZCBtY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JaWYgKCgxIDw8IHZkZCkgJiBwX2QtPm9jcl9tYXNrKQotCQlncGlvX3NldF92YWx1ZShHUElPOTFfU0RJT19FTiwgMSk7CS8qIGVuYWJsZSBTRElPIHBvd2VyICovCi0JZWxzZQotCQlncGlvX3NldF92YWx1ZShHUElPOTFfU0RJT19FTiwgMCk7CS8qIGRpc2FibGUgU0RJTyBwb3dlciAqLwotfQotCi1zdGF0aWMgaW50IG1jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPNzhfU0RJT19STyk7Ci19Ci0KLXN0cnVjdCBncGlvX3Jlc3MgbWNpX2dwaW9zW10gPSB7Ci0JTUlPX0dQSU9fSU4oR1BJTzc4X1NESU9fUk8sIAkiU0RJTyByZWFkb25seSBkZXRlY3QiKSwKLQlNSU9fR1BJT19JTihHUElPMTVfU0RJT19JTlNFUlQsCSJTRElPIGluc2VydGlvbiBkZXRlY3QiKSwKLQlNSU9fR1BJT19PVVQoR1BJTzkxX1NESU9fRU4sIDAsCSJTRElPIHBvd2VyIGVuYWJsZSIpCi19OwotCi1zdGF0aWMgdm9pZCBtY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JbWlvX2dwaW9fZnJlZShBUlJBWV9BTkRfU0laRShtY2lfZ3Bpb3MpKTsKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPMTVfU0RJT19JTlNFUlQpLCBkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtaW9hNzAxX21jaV9pbmZvOwotCiAvKioKICAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCiAgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwotc3RhdGljIGludCBtY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmM7Ci0JaW50IGlycSA9IGdwaW9fdG9faXJxKEdQSU8xNV9TRElPX0lOU0VSVCk7Ci0KLQlyYyA9IG1pb19ncGlvX3JlcXVlc3QoQVJSQVlfQU5EX1NJWkUobWNpX2dwaW9zKSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9ncGlvOwotCS8qIGVuYWJsZSBSRS9GRSBpbnRlcnJ1cHQgb24gY2FyZCBpbnNlcnRpb24gYW5kIHJlbW92YWwgKi8KLQlyYyA9IHJlcXVlc3RfaXJxKGlycSwgZGV0ZWN0X2ludCwKLQkJCSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8Ci0JCQkgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChyYykKLQkJZ290byBlcnJfaXJxOwotCi0JbWlvYTcwMV9tY2lfaW5mby5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0JcmV0dXJuIDA7Ci0KLWVycl9pcnE6Ci0JZGV2X2VycihkZXYsICJtaW9hNzAxX21jaV9pbml0OiBNTUMvU0Q6IgotCQkiIGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIik7Ci0JbWlvX2dwaW9fZnJlZShBUlJBWV9BTkRfU0laRShtY2lfZ3Bpb3MpKTsKLWVycl9ncGlvOgotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBtaW9hNzAxX21jaV9pbmZvID0gewotCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0CSAgPSBtY2lfaW5pdCwKLQkuZ2V0X3JvCSAgPSBtY2lfZ2V0X3JvLAotCS5zZXRwb3dlciA9IG1jaV9zZXRwb3dlciwKLQkuZXhpdAkgID0gbWNpX2V4aXQsCisJLm9jcl9tYXNrIAkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU8xNV9TRElPX0lOU0VSVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU83OF9TRElPX1JPLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU85MV9TRElPX0VOLAogfTsKIAogLyogRmxhc2hSQU0gKi8KQEAgLTc2NSwxOSArNzA4LDIwIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKLQkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCBpZCBpbiBweGEyN3hfZGV2aWNlX2NhbWVyYSBpbiBkZXZpY2UuYyAqLwotfTsKLQogLyogQm9hcmQgSTJDIGRldmljZXMuICovCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbWlvYTcwMV9pMmNfZGV2aWNlc1tdID0gewogCXsKLQkJLyogTXVzdCBpbml0aWFsaXplIGJlZm9yZSB0aGUgY2FtZXJhKHMpICovCiAJCUkyQ19CT0FSRF9JTkZPKCJtdDltMTExIiwgMHg1ZCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rID0geworCS5idXNfaWQJCT0gMCwgLyogTWF0Y2ggaWQgaW4gcHhhMjd4X2RldmljZV9jYW1lcmEgaW4gZGV2aWNlLmMgKi8KKwkuYm9hcmRfaW5mbwk9ICZtaW9hNzAxX2kyY19kZXZpY2VzWzBdLAorCS5pMmNfYWRhcHRlcl9pZAk9IDAsCisJLm1vZHVsZV9uYW1lCT0gIm10OW0xMTEiLAorfTsKKwogc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSBpMmNfcGRhdGEgPSB7CiAJLmZhc3RfbW9kZSA9IDEsCiB9OwpAQCAtODExLDYgKzc1NSw3IEBACiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX3NvdW5kLAkgICJtaW9hNzAxLXdtOTcxMyIsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX2JvYXJkLAkgICJtaW9hNzAxLWJvYXJkIiwgIE5VTEwpCiBNSU9fU0lNUExFX0RFVihncGlvX3ZidXMsCSAgImdwaW8tdmJ1cyIsICAgICAgJmdwaW9fdmJ1c19kYXRhKTsKK01JT19TSU1QTEVfREVWKG1pb2E3MDFfY2FtZXJhLAkgICJzb2MtY2FtZXJhLXBkcnYiLCZpY2xpbmspOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm1pb2E3MDFfZ3Bpb19rZXlzLApAQCAtODIxLDYgKzc2Niw3IEBACiAJJnBvd2VyX2RldiwKIAkmc3RyYXRhZmxhc2gsCiAJJmdwaW9fdmJ1cywKKwkmbWlvYTcwMV9jYW1lcmEsCiAJJm1pb2E3MDFfYm9hcmQsCiB9OwogCkBAIC04NDEsNyArNzg3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19yZXNzIGdsb2JhbF9ncGlvc1tdID0gewogCU1JT19HUElPX09VVChHUElPOV9DSEFSR0VfRU4sIDEsICJDaGFyZ2VyIGVuYWJsZSIpLAogCU1JT19HUElPX09VVChHUElPMThfUE9XRVJPRkYsIDAsICJQb3dlciBPZmYiKSwKLQlNSU9fR1BJT19PVVQoR1BJTzg3X0xDRF9QT1dFUiwgMCwgIkxDRCBQb3dlciIpCisJTUlPX0dQSU9fT1VUKEdQSU84N19MQ0RfUE9XRVIsIDAsICJMQ0QgUG93ZXIiKSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtaW9hNzAxX21hY2hpbmVfaW5pdCh2b2lkKQpAQCAtODU1LDYgKzgwMSw3IEBACiAJbWlvX2dwaW9fcmVxdWVzdChBUlJBWV9BTkRfU0laRShnbG9iYWxfZ3Bpb3MpKTsKIAlib290c3RyYXBfaW5pdCgpOwogCXNldF9weGFfZmJfaW5mbygmbWlvYTcwMV9weGFmYl9pbmZvKTsKKwltaW9hNzAxX21jaV9pbmZvLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZtaW9hNzAxX21jaV9pbmZvKTsKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZtaW9hNzAxX2tleXBhZF9pbmZvKTsKIAl3bTk3eHhfYmF0X3NldF9wZGF0YSgmbWlvYTcwMV9iYXR0ZXJ5X2RhdGEpOwpAQCAtODY5LDcgKzgxNiw2IEBACiAJcHhhX3NldF9pMmNfaW5mbygmaTJjX3BkYXRhKTsKIAlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOwogCXB4YV9zZXRfY2FtZXJhX2luZm8oJm1pb2E3MDFfcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKG1pb2E3MDFfaTJjX2RldmljZXMpKTsKIH0KIAogc3RhdGljIHZvaWQgbWlvYTcwMV9tYWNoaW5lX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggMTY5ZmNjMS4uMWFkMDI5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTI1LDYgKzI1LDkgQEAKICNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTE0MSw4NSArMTQ0LDUwIEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT1IgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbWxkX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJGbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbWxkX2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSAyLAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0gcGFsbWxkX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbWxkX3BhcnRpdGlvbnMpCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtbGRfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl80TSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtbGRfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9ICZwYWxtbGRfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYgCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBwYWxtbGRfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbWxkX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtbGRfZGV0ZWN0X2ludCwKLQkJCQl2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLAotCQkJcGFsbWxkX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG1sZF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbWxkX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtbGRfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtbGRfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbWxkX21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG1sZF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSBwYWxtbGRfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbWxkX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNTERfU0RfUE9XRVIsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzNiwzNSArMzA0LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG1sZF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbWxkX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtbGRfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtbGRfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtbGRfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTYwLDYgKzUwMiw3IEBACiAJJnBvd2VyX3N1cHBseSwKIAkmcGFsbWxkX2Fzb2MsCiAJJnBhbG1sZF9oZGQsCisJJnBhbG1sZF9mbGFzaCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcGFsbWxkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwppbmRleCAzM2Y3MjZmLi4yZGQ3Y2UyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwpAQCAtMTI0LDgzICsxMjQsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10NV9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgcGFsbXQ1X2RldGVjdF9pbnQsCi0JCQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKSwKLQkJCXBhbG10NV9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKLWVycjQ6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdDVfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSKTsKLQlmcmVlX2lycShJUlFfR1BJT19QQUxNVDVfU0RfREVURUNUX04sIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10NV9tY2lfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSAqcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXQ1X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG10NV9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtdDVfbWNpX2dldF9ybywKLQkuaW5pdCAJCT0gcGFsbXQ1X21jaV9pbml0LAotCS5leGl0CQk9IHBhbG10NV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVQ1X1NEX1BPV0VSLAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTQsMzUgKzI0Myw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJckRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBwYWxtdDVfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCAxKTsKLQlpZiAoZXJyKQotCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10NV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLnN0YXJ0dXAJCT0gcGFsbXQ1X2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXQ1X2lyZGFfc2h1dGRvd24sCi0JLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXQ1X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuZ3Bpb19wd2Rvd24JCT0gR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MjI5MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRjLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgUGFsbSBUdW5nc3RlbnxDCisgKgorICogQXV0aG9yOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJUGV0ciBCbGFoYSA8cDN0M0BjZW50cnVtLmN6PgorICoJCUNoZXRhbiBTLiBLdW1hciA8c2hpdmFrdW1hci5jaGV0YW5AZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbXRjLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8bWFjaC91ZGMuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQaW4gY29uZmlndXJhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhbG10Y19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBNTUMgKi8KKwlHUElPNl9NTUNfQ0xLLAorCUdQSU84X01NQ19DUzAsCisJR1BJTzEyX0dQSU8sCS8qIGRldGVjdCAqLworCUdQSU8zMl9HUElPLAkvKiBwb3dlciAqLworCUdQSU81NF9HUElPLAkvKiByL28gc3dpdGNoICovCisKKwkvKiBQQ01DSUEgKi8KKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzUwX25QSU9SLAorCUdQSU81MV9uUElPVywKKwlHUElPNDlfblBXRSwKKwlHUElPNDhfblBPRSwKKwlHUElPNTJfblBDRV8xLAorCUdQSU81M19uUENFXzIsCisJR1BJTzU3X25JT0lTMTYsCisJR1BJTzU2X25QV0FJVCwKKworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKworCS8qIElyREEgKi8KKwlHUElPNDVfR1BJTywJLyogaXIgZGlzYWJsZSAqLworCUdQSU80Nl9GSUNQX1JYRCwKKwlHUElPNDdfRklDUF9UWEQsCisKKwkvKiBQV00gKi8KKwlHUElPMTdfUFdNMV9PVVQsCisKKwkvKiBVU0IgKi8KKwlHUElPNF9HUElPLAkvKiBkZXRlY3QgKi8KKwlHUElPMzZfR1BJTywJLyogcHVsbHVwICovCisKKwkvKiBMQ0QgKi8KKwlHUElPNThfTENEX0xERF8wLAorCUdQSU81OV9MQ0RfTEREXzEsCisJR1BJTzYwX0xDRF9MRERfMiwKKwlHUElPNjFfTENEX0xERF8zLAorCUdQSU82Ml9MQ0RfTEREXzQsCisJR1BJTzYzX0xDRF9MRERfNSwKKwlHUElPNjRfTENEX0xERF82LAorCUdQSU82NV9MQ0RfTEREXzcsCisJR1BJTzY2X0xDRF9MRERfOCwKKwlHUElPNjdfTENEX0xERF85LAorCUdQSU82OF9MQ0RfTEREXzEwLAorCUdQSU82OV9MQ0RfTEREXzExLAorCUdQSU83MF9MQ0RfTEREXzEyLAorCUdQSU83MV9MQ0RfTEREXzEzLAorCUdQSU83Ml9MQ0RfTEREXzE0LAorCUdQSU83M19MQ0RfTEREXzE1LAorCUdQSU83NF9MQ0RfRkNMSywKKwlHUElPNzVfTENEX0xDTEssCisJR1BJTzc2X0xDRF9QQ0xLLAorCUdQSU83N19MQ0RfQklBUywKKworCS8qIE1BVFJJWCBLRVlQQUQgKi8KKwlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaW4gMCAqLworCUdQSU85X0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAxICovCisJR1BJTzEwX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAyICovCisJR1BJTzExX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAzICovCisJR1BJTzE4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDAgKi8KKwlHUElPMTlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMSAqLworCUdQSU8yMF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCAyICovCisJR1BJTzIxX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDMgKi8KKwlHUElPMjJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNCAqLworCUdQSU8yM19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA1ICovCisJR1BJTzI0X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDYgKi8KKwlHUElPMjVfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgNyAqLworCUdQSU8yNl9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIG91dCA4ICovCisJR1BJTzI3X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogb3V0IDkgKi8KKwlHUElPNzlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMTAgKi8KKwlHUElPODBfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBvdXQgMTEgKi8KKworCS8qIFBYQSBHUElPIEtFWVMgKi8KKwlHUElPN19HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogaG90c3luYyBidXR0b24gb24gY3JhZGxlICovCisKKwkvKiBNSVNDICovCisJR1BJTzFfUlNULAkvKiByZXNldCAqLworCUdQSU8yX0dQSU8sCS8qIGVhcnBob25lIGRldGVjdCAqLworCUdQSU8xNl9HUElPLAkvKiBiYWNrbGlnaHQgc3dpdGNoICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdGNfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVRDX1NEX1BPV0VSLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVENfU0RfUkVBRE9OTFksCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1BBTE1UQ19TRF9ERVRFQ1RfTiwKKwkuZGV0ZWN0X2RlbGF5CQk9IDIwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG10Y19weGFfYnV0dG9uc1tdID0geworCXtLRVlfRjgsIEdQSU9fTlJfUEFMTVRDX0hPVFNZTkNfQlVUVE9OLCAxLCAiSG90U3luYyBCdXR0b24iLCBFVl9LRVksIDF9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBwYWxtdGNfcHhhX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHBhbG10Y19weGFfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKHBhbG10Y19weGFfYnV0dG9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfcHhhX2tleXMgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdGNfcHhhX2tleXNfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQmFja2xpZ2h0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtdGNfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIsICJCTCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19CTF9QT1dFUiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0dXJuIDA7CisKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG10Y19iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCS8qIGJhY2tsaWdodCBpcyBvbiB3aGVuIEdQSU8xNiBBRjAgaXMgaGlnaCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfQkxfUE9XRVIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBwYWxtdGNfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAxLAorCS5tYXhfYnJpZ2h0bmVzcwk9IFBBTE1UQ19NQVhfSU5URU5TSVRZLAorCS5kZnRfYnJpZ2h0bmVzcwk9IFBBTE1UQ19NQVhfSU5URU5TSVRZLAorCS5wd21fcGVyaW9kX25zCT0gUEFMTVRDX1BFUklPRF9OUywKKwkuaW5pdAkJPSBwYWxtdGNfYmFja2xpZ2h0X2luaXQsCisJLm5vdGlmeQkJPSBwYWxtdGNfYmFja2xpZ2h0X25vdGlmeSwKKwkuZXhpdAkJPSBwYWxtdGNfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfYmFja2xpZ2h0ID0geworCS5uYW1lCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJPSB7CisJCS5wYXJlbnQJCT0gJnB4YTI1eF9kZXZpY2VfcHdtMS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10Y19iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSXJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG10Y19maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVRDX0lSX0RJU0FCTEUsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBLZXlib2FyZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCBwYWxtdGNfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0YxKSwKKwlLRVkoMCwgMSwgS0VZX1gpLAorCUtFWSgwLCAyLCBLRVlfUE9XRVIpLAorCUtFWSgwLCAzLCBLRVlfVEFCKSwKKwlLRVkoMCwgNCwgS0VZX0EpLAorCUtFWSgwLCA1LCBLRVlfUSksCisJS0VZKDAsIDYsIEtFWV9MRUZUU0hJRlQpLAorCUtFWSgwLCA3LCBLRVlfWiksCisJS0VZKDAsIDgsIEtFWV9TKSwKKwlLRVkoMCwgOSwgS0VZX1cpLAorCUtFWSgwLCAxMCwgS0VZX0UpLAorCUtFWSgwLCAxMSwgS0VZX1VQKSwKKworCUtFWSgxLCAwLCBLRVlfRjIpLAorCUtFWSgxLCAxLCBLRVlfRE9XTiksCisJS0VZKDEsIDMsIEtFWV9EKSwKKwlLRVkoMSwgNCwgS0VZX0MpLAorCUtFWSgxLCA1LCBLRVlfRiksCisJS0VZKDEsIDYsIEtFWV9SKSwKKwlLRVkoMSwgNywgS0VZX1NQQUNFKSwKKwlLRVkoMSwgOCwgS0VZX1YpLAorCUtFWSgxLCA5LCBLRVlfRyksCisJS0VZKDEsIDEwLCBLRVlfVCksCisJS0VZKDEsIDExLCBLRVlfTEVGVCksCisKKwlLRVkoMiwgMCwgS0VZX0YzKSwKKwlLRVkoMiwgMSwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMiwgMywgS0VZX0gpLAorCUtFWSgyLCA0LCBLRVlfWSksCisJS0VZKDIsIDUsIEtFWV9OKSwKKwlLRVkoMiwgNiwgS0VZX0opLAorCUtFWSgyLCA3LCBLRVlfVSksCisJS0VZKDIsIDgsIEtFWV9NKSwKKwlLRVkoMiwgOSwgS0VZX0spLAorCUtFWSgyLCAxMCwgS0VZX0kpLAorCUtFWSgyLCAxMSwgS0VZX1JJR0hUKSwKKworCUtFWSgzLCAwLCBLRVlfRjQpLAorCUtFWSgzLCAxLCBLRVlfRU5URVIpLAorCUtFWSgzLCAzLCBLRVlfRE9UKSwKKwlLRVkoMywgNCwgS0VZX0wpLAorCUtFWSgzLCA1LCBLRVlfTyksCisJS0VZKDMsIDYsIEtFWV9MRUZUQUxUKSwKKwlLRVkoMywgNywgS0VZX0VOVEVSKSwKKwlLRVkoMywgOCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDMsIDksIEtFWV9QKSwKKwlLRVkoMywgMTAsIEtFWV9CKSwKKwlLRVkoMywgMTEsIEtFWV9GTiksCit9OworCitjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHBhbG10Y19rZXltYXBfZGF0YSA9IHsKKwkua2V5bWFwCQkJPSBwYWxtdGNfbWF0cml4X2tleXMsCisJLmtleW1hcF9zaXplCQk9IEFSUkFZX1NJWkUocGFsbXRjX21hdHJpeF9rZXlzKSwKK307CisKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3NbXSA9IHsKKwkwLCA5LCAxMCwgMTEKK307CisKK2NvbnN0IHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3NbXSA9IHsKKwkxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgNzksIDgwCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtdGNfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLmtleW1hcF9kYXRhCT0gJnBhbG10Y19rZXltYXBfZGF0YSwKKwkucm93X2dwaW9zCT0gcGFsbXRjX2tleXBhZF9yb3dfZ3Bpb3MsCisJLm51bV9yb3dfZ3Bpb3MJPSBBUlJBWV9TSVpFKHBhbG10Y19rZXlwYWRfcm93X2dwaW9zKSwKKwkuY29sX2dwaW9zCT0gcGFsbXRjX2tleXBhZF9jb2xfZ3Bpb3MsCisJLm51bV9jb2xfZ3Bpb3MJPSBBUlJBWV9TSVpFKHBhbG10Y19rZXlwYWRfY29sX2dwaW9zKSwKKwkuYWN0aXZlX2xvdwk9IDEsCisKKwkuZGVib3VuY2VfbXMJCT0gMjAsCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y19rZXlib2FyZCA9IHsKKwkubmFtZQk9ICJtYXRyaXgta2V5cGFkIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwYWxtdGNfa2V5cGFkX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVEQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gcGFsbXRjX3VkY19pbmZvIF9faW5pdGRhdGEgPSB7CisJLmdwaW9fdmJ1cwkJPSBHUElPX05SX1BBTE1UQ19VU0JfREVURUNUX04sCisJLmdwaW9fdmJ1c19pbnZlcnRlZAk9IDEsCisJLmdwaW9fcHVsbHVwCQk9IEdQSU9fTlJfUEFMTVRDX1VTQl9QT1dFUiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRvdWNoc2NyZWVuIC8gQmF0dGVyeSAvIEdQSU8tZXh0ZW5kZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdGNfdWNiMTQwMF9jb3JlID0geworCS5uYW1lCT0gInVjYjE0MDBfY29yZSIsCisJLmlkCT0gLTEsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT1IgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhbG10Y19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBQWEFfQ1MwX1BIWVMsCisJLmVuZAk9IFBYQV9DUzBfUEhZUyArIFNaXzE2TSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbXRjX2ZsYXNoX3BhcnRzW10gPSB7CisJeworCQkubmFtZQk9ICJVLUJvb3QgQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJPSAweDAsCisJCS5zaXplCT0gMHg0MDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAiTGludXggS2VybmVsIiwKKwkJLm9mZnNldAk9IDB4NDAwMDAsCisJCS5zaXplCT0gMHgyYzAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIkZpbGVzeXN0ZW0iLAorCQkub2Zmc2V0CT0gMHgzMDAwMDAsCisJCS5zaXplCT0gMHhjYzAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gIlUtQm9vdCBFbnZpcm9ubWVudCIsCisJCS5vZmZzZXQJPSAweGZjMDAwMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdGNfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gNCwKKwkucGFydHMJCT0gcGFsbXRjX2ZsYXNoX3BhcnRzLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbXRjX2ZsYXNoX3BhcnRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10Y19mbGFzaCA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9ICZwYWxtdGNfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10Y19mbGFzaF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBGcmFtZWJ1ZmZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHBhbG10Y19sY2RfbW9kZXNbXSA9IHsKK3sKKwkucGl4Y2xvY2sJPSAxMTUzODQsCisJLnhyZXMJCT0gMzIwLAorCS55cmVzCQk9IDMyMCwKKwkuYnBwCQk9IDE2LAorCisJLmxlZnRfbWFyZ2luCT0gMjcsCisJLnJpZ2h0X21hcmdpbgk9IDcsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDgsCisKKwkuaHN5bmNfbGVuCT0gNiwKKwkudnN5bmNfbGVuCT0gMSwKK30sCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyBwYWxtdGNfbGNkX3NjcmVlbiA9IHsKKwkubW9kZXMJCQk9IHBhbG10Y19sY2RfbW9kZXMsCisJLm51bV9tb2RlcwkJPSBBUlJBWV9TSVpFKHBhbG10Y19sY2RfbW9kZXMpLAorCS5sY2RfY29ubgkJPSBMQ0RfQ09MT1JfVEZUXzE2QlBQIHwgTENEX1BDTEtfRURHRV9GQUxMLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTWFjaGluZSBpbml0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZwYWxtdGNfYmFja2xpZ2h0LAorCSZwYWxtdGNfdWNiMTQwMF9jb3JlLAorCSZwYWxtdGNfa2V5Ym9hcmQsCisJJnBhbG10Y19weGFfa2V5cywKKwkmcGFsbXRjX2ZsYXNoLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBhbG10Y19pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocGFsbXRjX3Bpbl9jb25maWcpKTsKKworCXNldF9weGFfZmJfaW5mbygmcGFsbXRjX2xjZF9zY3JlZW4pOworCXB4YV9zZXRfbWNpX2luZm8oJnBhbG10Y19tY2lfcGxhdGZvcm1fZGF0YSk7CisJcHhhX3NldF91ZGNfaW5mbygmcGFsbXRjX3VkY19pbmZvKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKKwlweGFfc2V0X2ZpY3BfaW5mbygmcGFsbXRjX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK307CisKK01BQ0hJTkVfU1RBUlQoUEFMTVRDLCAiUGFsbSBUdW5nc3RlbnxDIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmJvb3RfcGFyYW1zIAk9IDB4YTAwMDAxMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI1eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcGFsbXRjX2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKaW5kZXggZDgyM2IwOS4uMjc3YzQwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwpAQCAtMTE3LDgzICsxMTcsMTEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10ZTJfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCWlycV9oYW5kbGVyX3QgcGFsbXRlMl9kZXRlY3RfaW50LCB2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04sICJTRCBJUlEiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMjsKLQllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pLAotCQkJcGFsbXRlMl9kZXRlY3RfaW50LCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NIHwKLQkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKLQkJCSJTRC9NTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkJX19mdW5jX18pOwotCQlnb3RvIGVycjI7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwgIlNEX1BPV0VSIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIzOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1URTJfU0RfUE9XRVIsIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFkpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKLQotCXJldHVybiAwOwotCi1lcnI1OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSKTsKLWVycjM6Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci1lcnIyOgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10ZTJfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfUkVBRE9OTFkpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRFMl9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfU0RfREVURUNUX04pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVEUyX1NEX1BPV0VSLCBwX2QtPm9jcl9tYXNrICYgKDEgPDwgdmRkKSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXRlMl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdGUyX21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5zZXRwb3dlcgk9IHBhbG10ZTJfbWNpX3Bvd2VyLAotCS5nZXRfcm8JCT0gcGFsbXRlMl9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSBwYWxtdGUyX21jaV9pbml0LAotCS5leGl0CQk9IHBhbG10ZTJfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gR1BJT19OUl9QQUxNVEUyX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVEUyX1NEX1JFQURPTkxZLAorCS5ncGlvX3Bvd2VyCQk9IEdQSU9fTlJfUEFMTVRFMl9TRF9QT1dFUiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4NywzNSArMjE1LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10ZTJfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSk7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXRlMl9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVEUyX0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdGUyX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRFMl9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdGUyX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtdGUyX2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gcGFsbXRlMl9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKLQkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10ZTJfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1URTJfSVJfRElTQUJMRSwKKwkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX09GRiwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKaW5kZXggODNkMDIwOC4uNzZhMmIzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKQEAgLTI4LDYgKzI4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ3Bpb192YnVzLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0xMzEsNiArMTM1LDEwIEBACiAJR1BJTzM0X0ZGVUFSVF9SWEQsCiAJR1BJTzM5X0ZGVUFSVF9UWEQsCiAKKwkvKiBOQU5EICovCisJR1BJTzE1X25DU18xLAorCUdQSU8xOF9SRFksCisKIAkvKiBNSVNDLiAqLwogCUdQSU8xMF9HUElPLAkvKiBob3RzeW5jIGJ1dHRvbiAqLwogCUdQSU8xMl9HUElPLAkvKiBwb3dlciBkZXRlY3QgKi8KQEAgLTEzOCw4NSArMTQ2LDUwIEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBOT1IgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbXR4X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJGbGFzaCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm1hc2tfZmxhZ3MJPSAwCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbXR4X2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSAyLAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0gcGFsbXR4X3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbXR4X3BhcnRpdGlvbnMpCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtdHhfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl84TSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdHhfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9ICZwYWxtdHhfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5kZXYgCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBwYWxtdHhfZmxhc2hfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXR4X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtdHhfZGV0ZWN0X2ludCwKLQkJCQl2b2lkICpkYXRhKQotewotCWludCBlcnIgPSAwOwotCi0JLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLwotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pLAotCQkJcGFsbXR4X2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIsIDApOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UWF9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjU7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gMDsKLQotZXJyNToKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFkpOwotZXJyNDoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UWF9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfREVURUNUX04pOwotZXJyOgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG10eF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZKTsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIpOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OKTsKLX0KLQotc3RhdGljIHZvaWQgcGFsbXR4X21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCBwYWxtdHhfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRYX1NEX1JFQURPTkxZKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdHhfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbXR4X21jaV9wb3dlciwKLQkuZ2V0X3JvCQk9IHBhbG10eF9tY2lfZ2V0X3JvLAotCS5pbml0IAkJPSBwYWxtdHhfbWNpX2luaXQsCi0JLmV4aXQJCT0gcGFsbXR4X21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVRYX1NEX0RFVEVDVF9OLAorCS5ncGlvX2NhcmRfcm8JCT0gR1BJT19OUl9QQUxNVFhfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9QQUxNVFhfU0RfUE9XRVIsCisJLmRldGVjdF9kZWxheQkJPSAyMCwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzMCwzNSArMzAzLDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIElyREEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHBhbG10eF9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsICJJUiBESVNBQkxFIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUsIDEpOwotCWlmIChlcnIpCi0JCWdwaW9fZnJlZShHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRYX0lSX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtdHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVFhfSVJfRElTQUJMRSwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgcGFsbXR4X2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkuc3RhcnR1cAkJPSBwYWxtdHhfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtdHhfaXJkYV9zaHV0ZG93biwKLQkudHJhbnNjZWl2ZXJfY2FwCT0gSVJfU0lSTU9ERSB8IElSX0ZJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUJPSBwYWxtdHhfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1BBTE1UWF9JUl9ESVNBQkxFLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDkzLDYgKzQ0MCw2OCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTkFORCBGbGFzaAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHBhbG10eF9uYW5kX2NtZF9jdGwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgbG9uZyBuYW5kYWRkciA9ICh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVzsKKworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgUEFMTVRYX05BTkRfQ0xFX1ZJUlQpOworCWVsc2UgaWYgKGN0cmwgJiBOQU5EX0FMRSkKKwkJd3JpdGViKGNtZCwgUEFMTVRYX05BTkRfQUxFX1ZJUlQpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgbmFuZGFkZHIpOworfQorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFsbXR4X3BhcnRpdGlvbl9pbmZvW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJwYWxtdHgtMCIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhbG10eF9wYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgcGFsbXR4X25hbmRfcGxhdGRhdGEgPSB7CisJLmNoaXAJPSB7CisJCS5ucl9jaGlwcwkJPSAxLAorCQkuY2hpcF9vZmZzZXQJCT0gMCwKKwkJLm5yX3BhcnRpdGlvbnMJCT0gQVJSQVlfU0laRShwYWxtdHhfcGFydGl0aW9uX2luZm8pLAorCQkucGFydGl0aW9ucwkJPSBwYWxtdHhfcGFydGl0aW9uX2luZm8sCisJCS5jaGlwX2RlbGF5CQk9IDIwLAorCQkucGFydF9wcm9iZV90eXBlcyAJPSBwYWxtdHhfcGFydF9wcm9iZXMsCisJfSwKKwkuY3RybAk9IHsKKwkJLmNtZF9jdHJsCT0gcGFsbXR4X25hbmRfY21kX2N0bCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwYWxtdHhfbmFuZF9yZXNvdXJjZVtdID0geworCVswXQk9IHsKKwkJLnN0YXJ0CT0gUFhBX0NTMV9QSFlTLAorCQkuZW5kCT0gUFhBX0NTMV9QSFlTICsgU1pfMU0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR4X25hbmQgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocGFsbXR4X25hbmRfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IHBhbG10eF9uYW5kX3Jlc291cmNlLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXR4X25hbmRfcGxhdGRhdGEsCisJfQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUG93ZXIgbWFuYWdlbWVudCAtIHN0YW5kYnkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXR4X3BtX2luaXQodm9pZCkKQEAgLTUxOCw2ICs1MjcsOCBAQAogCSZwb3dlcl9zdXBwbHksCiAJJnBhbG10eF9hc29jLAogCSZwYWxtdHhfZ3Bpb192YnVzLAorCSZwYWxtdHhfZmxhc2gsCisJJnBhbG10eF9uYW5kLAogfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwYWxtdHhfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC01MjUsOCArNTM2LDE4IEBACiAJLnZpcnR1YWwJPSBQQUxNVFhfUENNQ0lBX1ZJUlQsCiAJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1UWF9QQ01DSUFfUEhZUyksCiAJLmxlbmd0aAkJPSBQQUxNVFhfUENNQ0lBX1NJWkUsCi0JLnR5cGUJCT0gTVRfREVWSUNFCi19LAorCS50eXBlCQk9IE1UX0RFVklDRSwKK30sIHsKKwkudmlydHVhbAk9IFBBTE1UWF9OQU5EX0FMRV9WSVJULAorCS5wZm4JCT0gX19waHlzX3RvX3BmbihQQUxNVFhfTkFORF9BTEVfUEhZUyksCisJLmxlbmd0aAkJPSBTWl8xTSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCit9LCB7CisJLnZpcnR1YWwJPSBQQUxNVFhfTkFORF9DTEVfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTVRYX05BTkRfQ0xFX1BIWVMpLAorCS5sZW5ndGgJCT0gU1pfMU0sCisJLnR5cGUJCT0gTVRfREVWSUNFLAorfQogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHBhbG10eF9tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCBjMzY0NWFhLi5jMmJmNDkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0xMjksODggKzEyOSwxNCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXo3Ml9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJaXJxX2hhbmRsZXJfdCBwYWxtejcyX2RldGVjdF9pbnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiksCi0JCQlwYWxtejcyX2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAotCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyMjsKLQl9Ci0KLQkvKiBTRF9QT1dFUiBpcyBub3QgYWN0dWFsbHkgcG93ZXIsIGJ1dCBpdCBpcyBtb3JlIGxpa2UgY2hpcAotCSAqIHNlbGVjdCwgaS5lLiBpdCBpcyBpbnZlcnRlZCAqLwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAiU0RfUE9XRVIiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjM7Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVo3Ml9TRF9QT1dFUl9OLCAwKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjQ7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVo3Ml9TRF9STywgIlNEX1JPIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI0OwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpcnEgcmVnaXN0ZXJlZFxuIiwgX19mdW5jX18pOwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9TRF9STyk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTik7Ci1lcnIzOgotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiksIGRhdGEpOwotZXJyMjoKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX0RFVEVDVF9OKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtejcyX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNWjcyX1NEX1BPV0VSX04pOwotCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiksIGRhdGEpOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfREVURUNUX04pOwotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfU0RfUk8pOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtejcyX21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCi17Ci0Jc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaWYgKHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKQotCQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwgMCk7Ci0JZWxzZQotCQlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgcGFsbXo3Ml9tY2lfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1aNzJfU0RfUk8pOwotfQotCisvKiBTRF9QT1dFUiBpcyBub3QgYWN0dWFsbHkgcG93ZXIsIGJ1dCBpdCBpcyBtb3JlIGxpa2UgY2hpcAorICogc2VsZWN0LCBpLmUuIGl0IGlzIGludmVydGVkICovCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG16NzJfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gcGFsbXo3Ml9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSBwYWxtejcyX21jaV9ybywKLQkuaW5pdCAJCT0gcGFsbXo3Ml9tY2lfaW5pdCwKLQkuZXhpdAkJPSBwYWxtejcyX21jaV9leGl0LAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9ERVRFQ1RfTiwKKwkuZ3Bpb19jYXJkX3JvCQk9IEdQSU9fTlJfUEFMTVo3Ml9TRF9STywKKwkuZ3Bpb19wb3dlcgkJPSBHUElPX05SX1BBTE1aNzJfU0RfUE9XRVJfTiwKKwkuZ3Bpb19wb3dlcl9pbnZlcnQJPSAxLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzA0LDM1ICsyMzAsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcGFsbXo3Ml9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCBlcnI7Ci0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOwotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSwgMSk7Ci0JaWYgKGVycikKLQkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFKTsKLWVycjoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBwYWxtejcyX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShHUElPX05SX1BBTE1aNzJfSVJfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhbG16NzJfaXJkYV90cmFuc2NlaXZlcl9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG1vZGUpCi17Ci0JZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNWjcyX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG16NzJfZmljcF9wbGF0Zm9ybV9kYXRhID0gewotCS5zdGFydHVwCQk9IHBhbG16NzJfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwYWxtejcyX2lyZGFfc2h1dGRvd24sCisJLmdwaW9fcHdkb3duCQk9IEdQSU9fTlJfUEFMTVo3Ml9JUl9ESVNBQkxFLAogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbXo3Ml9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggMDE3OTFkNy4uYmJkYTU3MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMzIxLDExICszMjEsMTQgQEAKICNkZWZpbmUgTVNFQ1NfUEVSX0pJRkZZICgxMDAwL0haKQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBjbTk5MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkuZGV0ZWN0X2RlbGF5CT0gMjUwIC8gTVNFQ1NfUEVSX0pJRkZZLAotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAotCS5pbml0IAkJPSBwY205OTBfbWNpX2luaXQsCi0JLnNldHBvd2VyIAk9IHBjbTk5MF9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gcGNtOTkwX21jaV9leGl0LAorCS5kZXRlY3RfZGVsYXkJCT0gMjUwIC8gTVNFQ1NfUEVSX0pJRkZZLAorCS5vY3JfbWFzawkJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuaW5pdCAJCQk9IHBjbTk5MF9tY2lfaW5pdCwKKwkuc2V0cG93ZXIgCQk9IHBjbTk5MF9tY2lfc2V0cG93ZXIsCisJLmV4aXQJCQk9IHBjbTk5MF9tY2lfZXhpdCwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IC0xLAorCS5ncGlvX2NhcmRfcm8JCT0gLTEsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHB4YW9oY2lfcGxhdGZvcm1fZGF0YSBwY205OTBfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewpAQCAtNDI3LDI1ICs0MzAsNTYgQEAKIAlncGlvX2J1c19zd2l0Y2ggPSAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmsgPSB7Ci0JLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCi0JLnF1ZXJ5X2J1c19wYXJhbSA9IHBjbTk5MF9jYW1lcmFfcXVlcnlfYnVzX3BhcmFtLAotCS5zZXRfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAotCS5mcmVlX2J1cyA9IHBjbTk5MF9jYW1lcmFfZnJlZV9idXMsCi19OwotCiAvKiBCb2FyZCBJMkMgZGV2aWNlcy4gKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBwY205OTBfaTJjX2RldmljZXNbXSA9IHsKIAl7CiAJCS8qIE11c3QgaW5pdGlhbGl6ZSBiZWZvcmUgdGhlIGNhbWVyYShzKSAqLwogCQlJMkNfQk9BUkRfSU5GTygicGNhOTUzNiIsIDB4NDEpLAogCQkucGxhdGZvcm1fZGF0YSA9ICZwY2E5NTM2X2RhdGEsCi0JfSwgeworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTk5MF9jYW1lcmFfaTJjW10gPSB7CisJewogCQlJMkNfQk9BUkRfSU5GTygibXQ5djAyMiIsIDB4NDgpLAotCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssIC8qIFdpdGggZXh0ZW5kZXIgKi8KIAl9LCB7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDltMDAxIiwgMHg1ZCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywgLyogV2l0aCBleHRlbmRlciAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtbXSA9IHsKKwl7CisJCS5idXNfaWQJCQk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJCS5ib2FyZF9pbmZvCQk9ICZwY205OTBfY2FtZXJhX2kyY1swXSwKKwkJLmkyY19hZGFwdGVyX2lkCQk9IDAsCisJCS5xdWVyeV9idXNfcGFyYW0JPSBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbSwKKwkJLnNldF9idXNfcGFyYW0JCT0gcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorCQkuZnJlZV9idXMJCT0gcGNtOTkwX2NhbWVyYV9mcmVlX2J1cywKKwkJLm1vZHVsZV9uYW1lCQk9ICJtdDl2MDIyIiwKKwl9LCB7CisJCS5idXNfaWQJCQk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJCS5ib2FyZF9pbmZvCQk9ICZwY205OTBfY2FtZXJhX2kyY1sxXSwKKwkJLmkyY19hZGFwdGVyX2lkCQk9IDAsCisJCS5xdWVyeV9idXNfcGFyYW0JPSBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbSwKKwkJLnNldF9idXNfcGFyYW0JCT0gcGNtOTkwX2NhbWVyYV9zZXRfYnVzX3BhcmFtLAorCQkuZnJlZV9idXMJCT0gcGNtOTkwX2NhbWVyYV9mcmVlX2J1cywKKwkJLm1vZHVsZV9uYW1lCQk9ICJtdDltMDAxIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtOTkwX2NhbWVyYVtdID0geworCXsKKwkJLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKKwkJLmlkCT0gMCwKKwkJLmRldgk9IHsKKwkJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1swXSwKKwkJfSwKKwl9LCB7CisJCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJCS5pZAk9IDEsCisJCS5kZXYJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtbMV0sCisJCX0sCiAJfSwKIH07CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1BYQTI3eCB8fENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFICovCkBAIC01MDEsNiArNTM1LDkgQEAKIAlweGFfc2V0X2NhbWVyYV9pbmZvKCZwY205OTBfcHhhY2FtZXJhX3BsYXRmb3JtX2RhdGEpOwogCiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgQVJSQVlfQU5EX1NJWkUocGNtOTkwX2kyY19kZXZpY2VzKSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk5MF9jYW1lcmFbMF0pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtOTkwX2NhbWVyYVsxXSk7CiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIlBDTS05OTAgRXZhbHVhdGlvbiBiYXNlYm9hcmQgaW5pdGlhbGl6ZWRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCA5MzUyZDRhLi5hMTg2OTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtMjQ1LDIwICsyNDUsMTAgQEAKICAqIFRoZSBjYXJkIGRldGVjdCBpbnRlcnJ1cHQgaXNuJ3QgZGVib3VuY2VkIHNvIHdlIGRlbGF5IGl0IGJ5IDI1MG1zCiAgKiB0byBnaXZlIHRoZSBjYXJkIGEgY2hhbmNlIHRvIGZ1bGx5IGluc2VydC9lamVjdC4KICAqLwotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGE7Ci0KIHN0YXRpYyBpbnQgcG9vZGxlX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwb29kbGVfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX25TRF9ERVRFQ1QsICJuU0RfREVURUNUIik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfb3V0OwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX25TRF9XUCwgIm5TRF9XUCIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQogCWVyciA9IGdwaW9fcmVxdWVzdChQT09ETEVfR1BJT19TRF9QV1IsICJTRF9QV1IiKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlXzI7CkBAIC0yNjcsMzQgKzI1NywxNCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfMzsKIAotCWdwaW9fZGlyZWN0aW9uX2lucHV0KFBPT0RMRV9HUElPX25TRF9ERVRFQ1QpOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KFBPT0RMRV9HUElPX25TRF9XUCk7Ci0KIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUE9PRExFX0dQSU9fU0RfUFdSLCAwKTsKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUE9PRExFX0dQSU9fU0RfUFdSMSwgMCk7CiAKLQlwb29kbGVfbWNpX3BsYXRmb3JtX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcygyNTApOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsIHBvb2RsZV9kZXRlY3RfaW50LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoIiVzOiBNTUMvU0Q6IGNhbid0IHJlcXVlc3QgTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCWdvdG8gZXJyX2ZyZWVfNDsKLQl9Ci0KIAlyZXR1cm4gMDsKIAotZXJyX2ZyZWVfNDoKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSMSk7CiBlcnJfZnJlZV8zOgogCWdwaW9fZnJlZShQT09ETEVfR1BJT19TRF9QV1IpOwogZXJyX2ZyZWVfMjoKLQlncGlvX2ZyZWUoUE9PRExFX0dQSU9fblNEX1dQKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX25TRF9ERVRFQ1QpOwotZXJyX291dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zMTIsNjIgKzI4MiwyOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBwb29kbGVfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICEhZ3Bpb19nZXRfdmFsdWUoUE9PRExFX0dQSU9fblNEX1dQKTsKLQlyZXR1cm4gR1BMUihQT09ETEVfR1BJT19uU0RfV1ApICYgR1BJT19iaXQoUE9PRExFX0dQSU9fblNEX1dQKTsKLX0KLQotCiBzdGF0aWMgdm9pZCBwb29kbGVfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWZyZWVfaXJxKFBPT0RMRV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKIAlncGlvX2ZyZWUoUE9PRExFX0dQSU9fU0RfUFdSMSk7CiAJZ3Bpb19mcmVlKFBPT0RMRV9HUElPX1NEX1BXUik7Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX25TRF9XUCk7Ci0JZ3Bpb19mcmVlKFBPT0RMRV9HUElPX25TRF9ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCi0JLmluaXQgCQk9IHBvb2RsZV9tY2lfaW5pdCwKLQkuZ2V0X3JvCQk9IHBvb2RsZV9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciAJPSBwb29kbGVfbWNpX3NldHBvd2VyLAotCS5leGl0CQk9IHBvb2RsZV9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0IAkJCT0gcG9vZGxlX21jaV9pbml0LAorCS5zZXRwb3dlciAJCT0gcG9vZGxlX21jaV9zZXRwb3dlciwKKwkuZXhpdAkJCT0gcG9vZGxlX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gUE9PRExFX0lSUV9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBQT09ETEVfR1BJT19uU0RfV1AsCisJLmdwaW9fcG93ZXIJCT0gLTEsCiB9OwogCiAKIC8qCiAgKiBJcmRhCiAgKi8KLXN0YXRpYyB2b2lkIHBvb2RsZV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShQT09ETEVfR1BJT19JUl9PTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotc3RhdGljIGludCBwb29kbGVfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFBPT0RMRV9HUElPX0lSX09OLCAiSVJfT04iKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFBPT0RMRV9HUElPX0lSX09OLCAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcG9vZGxlX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQotewotCWdwaW9fZnJlZShQT09ETEVfR1BJT19JUl9PTik7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBvb2RsZV9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fcHdkb3duCQk9IFBPT0RMRV9HUElPX0lSX09OLAogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gcG9vZGxlX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cAkJPSBwb29kbGVfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93bgkJPSBwb29kbGVfaXJkYV9zaHV0ZG93biwKIH07CiAKIApAQCAtNTIxLDYgKzQ1OCw3IEBACiAJc2V0X3B4YV9mYl9wYXJlbnQoJnBvb2RsZV9sb2NvbW9fZGV2aWNlLmRldik7CiAJc2V0X3B4YV9mYl9pbmZvKCZwb29kbGVfZmJfaW5mbyk7CiAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOworCXBvb2RsZV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmcG9vZGxlX21jaV9wbGF0Zm9ybV9kYXRhKTsKIAlweGFfc2V0X2ZpY3BfaW5mbygmcG9vZGxlX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKaW5kZXggMmYzMzk0Zi4uODY4MjcwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMnh4LmMKQEAgLTUyLDMgKzUyLDQgQEAKIAl9IGVsc2UKIAkJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jCmluZGV4IDRiYTZkMjEuLmY0YWY2ZTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMDAuYwpAQCAtODQsOSArODQsMTEgQEAKIH07CiAKIHN0YXRpYyBERUZJTkVfUFhBM19DS0VOKGNvbW1vbl9uYW5kLCBOQU5ELCAxNTYwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4oZ2N1LCBQWEEzMDBfR0NVLCAwLCAwKTsKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGNvbW1vbl9jbGtyZWdzW10gPSB7CiAJSU5JVF9DTEtSRUcoJmNsa19jb21tb25fbmFuZCwgInB4YTN4eC1uYW5kIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19nY3UsICJweGEzeHgtZ2N1IiwgTlVMTCksCiB9OwogCiBzdGF0aWMgREVGSU5FX1BYQTNfQ0tFTihweGEzMTBfbW1jMywgTU1DMywgMTk1MDAwMDAsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwppbmRleCA4YjNkOTdlLi5jNzM3M2U3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYwpAQCAtNzgsOSArNzgsMTEgQEAKIH07CiAKIHN0YXRpYyBERUZJTkVfUFhBM19DS0VOKHB4YTMyMF9uYW5kLCBOQU5ELCAxMDQwMDAwMDAsIDApOworc3RhdGljIERFRklORV9QWEEzX0NLRU4oZ2N1LCBQWEEzMjBfR0NVLCAwLCAwKTsKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTMyMF9jbGtyZWdzW10gPSB7CiAJSU5JVF9DTEtSRUcoJmNsa19weGEzMjBfbmFuZCwgInB4YTN4eC1uYW5kIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19nY3UsICJweGEzeHgtZ2N1IiwgTlVMTCksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGEzMjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhOTMwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYwppbmRleCA3MTEzMTc0Li4wNjQyOTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYwpAQCAtMTc2LDEzICsxNzYsMzAgQEAKIAlNRlBfQUREUl9FTkQsCiB9OwogCitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGE5MzVfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKKwlNRlBfQUREUihHUElPMTU5LCAweDA1MjQpLAorCU1GUF9BRERSKEdQSU8xNjMsIDB4MDUzNCksCisJTUZQX0FERFIoR1BJTzE2NywgMHgwNTQ0KSwKKwlNRlBfQUREUihHUElPMTY4LCAweDA1NDgpLAorCU1GUF9BRERSKEdQSU8xNjksIDB4MDU0YyksCisJTUZQX0FERFIoR1BJTzE3MCwgMHgwNTUwKSwKKwlNRlBfQUREUihHUElPMTcxLCAweDA1NTQpLAorCU1GUF9BRERSKEdQSU8xNzIsIDB4MDU1OCksCisJTUZQX0FERFIoR1BJTzE3MywgMHgwNTVjKSwKKworCU1GUF9BRERSX0VORCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHB4YTkzMF9pbml0KHZvaWQpCiB7Ci0JaWYgKGNwdV9pc19weGE5MzAoKSkgeworCWlmIChjcHVfaXNfcHhhOTMwKCkgfHwgY3B1X2lzX3B4YTkzNSgpKSB7CiAJCW1mcF9pbml0X2Jhc2UoaW9fcDJ2KE1GUFJfQkFTRSkpOwogCQltZnBfaW5pdF9hZGRyKHB4YTkzMF9tZnBfYWRkcl9tYXApOwogCX0KIAorCWlmIChjcHVfaXNfcHhhOTM1KCkpCisJCW1mcF9pbml0X2FkZHIocHhhOTM1X21mcF9hZGRyX21hcCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKaW5kZXggZGRhMzEwZi4uM2RhNDVkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CkBAIC0yNCw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvY29yZ2lfbGNkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3NoYXJwc2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMTExLDYgKzExMywyNiBAQAogCUdQSU8xMDVfR1BJTywJLyogU1BJVFpfR1BJT19DRl9JUlEgKi8KIAlHUElPMTA2X0dQSU8sCS8qIFNQSVRaX0dQSU9fQ0YyX0lSUSAqLwogCisJLyogR1BJTyBtYXRyaXgga2V5cGFkICovCisJR1BJTzg4X0dQSU8sCS8qIGNvbHVtbiAwICovCisJR1BJTzIzX0dQSU8sCS8qIGNvbHVtbiAxICovCisJR1BJTzI0X0dQSU8sCS8qIGNvbHVtbiAyICovCisJR1BJTzI1X0dQSU8sCS8qIGNvbHVtbiAzICovCisJR1BJTzI2X0dQSU8sCS8qIGNvbHVtbiA0ICovCisJR1BJTzI3X0dQSU8sCS8qIGNvbHVtbiA1ICovCisJR1BJTzUyX0dQSU8sCS8qIGNvbHVtbiA2ICovCisJR1BJTzEwM19HUElPLAkvKiBjb2x1bW4gNyAqLworCUdQSU8xMDdfR1BJTywJLyogY29sdW1uIDggKi8KKwlHUElPMTA4X0dQSU8sCS8qIGNvbHVtbiA5ICovCisJR1BJTzExNF9HUElPLAkvKiBjb2x1bW4gMTAgKi8KKwlHUElPMTJfR1BJTywJLyogcm93IDAgKi8KKwlHUElPMTdfR1BJTywJLyogcm93IDEgKi8KKwlHUElPOTFfR1BJTywJLyogcm93IDIgKi8KKwlHUElPMzRfR1BJTywJLyogcm93IDMgKi8KKwlHUElPMzZfR1BJTywJLyogcm93IDQgKi8KKwlHUElPMzhfR1BJTywJLyogcm93IDUgKi8KKwlHUElPMzlfR1BJTywJLyogcm93IDYgKi8KKwogCS8qIEkyQyAqLwogCUdQSU8xMTdfSTJDX1NDTCwKIAlHUElPMTE4X0kyQ19TREEsCkBAIC0yNDIsOSArMjY0LDE1MiBAQAogLyoKICAqIFNwaXR6IEtleWJvYXJkIERldmljZQogICovCisjZGVmaW5lIFNQSVRaX0tFWV9DQUxFTkRBUglLRVlfRjEKKyNkZWZpbmUgU1BJVFpfS0VZX0FERFJFU1MJS0VZX0YyCisjZGVmaW5lIFNQSVRaX0tFWV9GTgkJS0VZX0YzCisjZGVmaW5lIFNQSVRaX0tFWV9DQU5DRUwJS0VZX0Y0CisjZGVmaW5lIFNQSVRaX0tFWV9FWE9LCQlLRVlfRjUKKyNkZWZpbmUgU1BJVFpfS0VZX0VYQ0FOQ0VMCUtFWV9GNgorI2RlZmluZSBTUElUWl9LRVlfRVhKT0dET1dOCUtFWV9GNworI2RlZmluZSBTUElUWl9LRVlfRVhKT0dVUAlLRVlfRjgKKyNkZWZpbmUgU1BJVFpfS0VZX0pBUDEJCUtFWV9MRUZUQUxUCisjZGVmaW5lIFNQSVRaX0tFWV9KQVAyCQlLRVlfUklHSFRDVFJMCisjZGVmaW5lIFNQSVRaX0tFWV9TWU5DCQlLRVlfRjkKKyNkZWZpbmUgU1BJVFpfS0VZX01BSUwJCUtFWV9GMTAKKyNkZWZpbmUgU1BJVFpfS0VZX09LCQlLRVlfRjExCisjZGVmaW5lIFNQSVRaX0tFWV9NRU5VCQlLRVlfRjEyCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0emtiZF9rZXltYXBbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX0xFRlRDVFJMKSwKKwlLRVkoMCwgMSwgS0VZXzEpLAorCUtFWSgwLCAyLCBLRVlfMyksCisJS0VZKDAsIDMsIEtFWV81KSwKKwlLRVkoMCwgNCwgS0VZXzYpLAorCUtFWSgwLCA1LCBLRVlfNyksCisJS0VZKDAsIDYsIEtFWV85KSwKKwlLRVkoMCwgNywgS0VZXzApLAorCUtFWSgwLCA4LCBLRVlfQkFDS1NQQUNFKSwKKwlLRVkoMCwgOSwgU1BJVFpfS0VZX0VYT0spLAkvKiBFWE9LICovCisJS0VZKDAsIDEwLCBTUElUWl9LRVlfRVhDQU5DRUwpLAkvKiBFWENBTkNFTCAqLworCUtFWSgxLCAxLCBLRVlfMiksCisJS0VZKDEsIDIsIEtFWV80KSwKKwlLRVkoMSwgMywgS0VZX1IpLAorCUtFWSgxLCA0LCBLRVlfWSksCisJS0VZKDEsIDUsIEtFWV84KSwKKwlLRVkoMSwgNiwgS0VZX0kpLAorCUtFWSgxLCA3LCBLRVlfTyksCisJS0VZKDEsIDgsIEtFWV9QKSwKKwlLRVkoMSwgOSwgU1BJVFpfS0VZX0VYSk9HRE9XTiksCS8qIEVYSk9HRE9XTiAqLworCUtFWSgxLCAxMCwgU1BJVFpfS0VZX0VYSk9HVVApLAkvKiBFWEpPR1VQICovCisJS0VZKDIsIDAsIEtFWV9UQUIpLAorCUtFWSgyLCAxLCBLRVlfUSksCisJS0VZKDIsIDIsIEtFWV9FKSwKKwlLRVkoMiwgMywgS0VZX1QpLAorCUtFWSgyLCA0LCBLRVlfRyksCisJS0VZKDIsIDUsIEtFWV9VKSwKKwlLRVkoMiwgNiwgS0VZX0opLAorCUtFWSgyLCA3LCBLRVlfSyksCisJS0VZKDMsIDAsIFNQSVRaX0tFWV9BRERSRVNTKSwJLyogQUREUkVTUyAqLworCUtFWSgzLCAxLCBLRVlfVyksCisJS0VZKDMsIDIsIEtFWV9TKSwKKwlLRVkoMywgMywgS0VZX0YpLAorCUtFWSgzLCA0LCBLRVlfViksCisJS0VZKDMsIDUsIEtFWV9IKSwKKwlLRVkoMywgNiwgS0VZX00pLAorCUtFWSgzLCA3LCBLRVlfTCksCisJS0VZKDMsIDksIEtFWV9SSUdIVFNISUZUKSwKKwlLRVkoNCwgMCwgU1BJVFpfS0VZX0NBTEVOREFSKSwJLyogQ0FMRU5EQVIgKi8KKwlLRVkoNCwgMSwgS0VZX0EpLAorCUtFWSg0LCAyLCBLRVlfRCksCisJS0VZKDQsIDMsIEtFWV9DKSwKKwlLRVkoNCwgNCwgS0VZX0IpLAorCUtFWSg0LCA1LCBLRVlfTiksCisJS0VZKDQsIDYsIEtFWV9ET1QpLAorCUtFWSg0LCA4LCBLRVlfRU5URVIpLAorCUtFWSg0LCA5LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNSwgMCwgU1BJVFpfS0VZX01BSUwpLAkvKiBNQUlMICovCisJS0VZKDUsIDEsIEtFWV9aKSwKKwlLRVkoNSwgMiwgS0VZX1gpLAorCUtFWSg1LCAzLCBLRVlfTUlOVVMpLAorCUtFWSg1LCA0LCBLRVlfU1BBQ0UpLAorCUtFWSg1LCA1LCBLRVlfQ09NTUEpLAorCUtFWSg1LCA3LCBLRVlfVVApLAorCUtFWSg1LCAxMCwgU1BJVFpfS0VZX0ZOKSwJLyogRk4gKi8KKwlLRVkoNiwgMCwgS0VZX1NZU1JRKSwKKwlLRVkoNiwgMSwgU1BJVFpfS0VZX0pBUDEpLAkvKiBKQVAxICovCisJS0VZKDYsIDIsIFNQSVRaX0tFWV9KQVAyKSwJLyogSkFQMiAqLworCUtFWSg2LCAzLCBTUElUWl9LRVlfQ0FOQ0VMKSwJLyogQ0FOQ0VMICovCisJS0VZKDYsIDQsIFNQSVRaX0tFWV9PSyksCS8qIE9LICovCisJS0VZKDYsIDUsIFNQSVRaX0tFWV9NRU5VKSwJLyogTUVOVSAqLworCUtFWSg2LCA2LCBLRVlfTEVGVCksCisJS0VZKDYsIDcsIEtFWV9ET1dOKSwKKwlLRVkoNiwgOCwgS0VZX1JJR0hUKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHNwaXR6a2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gc3BpdHprYmRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUoc3BpdHprYmRfa2V5bWFwKSwKK307CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0emtiZF9yb3dfZ3Bpb3NbXSA9CisJCXsgMTIsIDE3LCA5MSwgMzQsIDM2LCAzOCwgMzkgfTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzcGl0emtiZF9jb2xfZ3Bpb3NbXSA9CisJCXsgODgsIDIzLCAyNCwgMjUsIDI2LCAyNywgNTIsIDEwMywgMTA3LCAxMDgsIDExNCB9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBzcGl0emtiZF9wZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJCT0gJnNwaXR6a2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gc3BpdHprYmRfcm93X2dwaW9zLAorCS5jb2xfZ3Bpb3MJCT0gc3BpdHprYmRfY29sX2dwaW9zLAorCS5udW1fcm93X2dwaW9zCQk9IEFSUkFZX1NJWkUoc3BpdHprYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKHNwaXR6a2JkX2NvbF9ncGlvcyksCisJLmNvbF9zY2FuX2RlbGF5X3VzCT0gMTAsCisJLmRlYm91bmNlX21zCQk9IDEwLAorCS53YWtldXAJCQk9IDEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzcGl0emtiZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNwaXR6LWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzcGl0emtiZF9wZGF0YSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gc3BpdHpfZ3Bpb19rZXlzW10gPSB7CisJeworCQkudHlwZQk9IEVWX1BXUiwKKwkJLmNvZGUJPSBLRVlfU1VTUEVORCwKKwkJLmdwaW8JPSBTUElUWl9HUElPX09OX0tFWSwKKwkJLmRlc2MJPSAiT24vT2ZmIiwKKwkJLndha2V1cAk9IDEsCisJfSwKKwkvKiBUd28gYnV0dG9ucyBkZXRlY3RpbmcgdGhlIGxpZCBzdGF0ZSAqLworCXsKKwkJLnR5cGUJPSBFVl9TVywKKwkJLmNvZGUJPSAwLAorCQkuZ3Bpbwk9IFNQSVRaX0dQSU9fU1dBLAorCQkuZGVzYwk9ICLvu79EaXNwbGF5IERvd24iLAorCX0sCisJeworCQkudHlwZQk9IEVWX1NXLAorCQkuY29kZQk9IDEsCisJCS5ncGlvCT0gU1BJVFpfR1BJT19TV0IsCisJCS5kZXNjCT0gIu+7v0xpZCBDbG9zZWQiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHNwaXR6X2dwaW9fa2V5c19wbGF0Zm9ybV9kYXRhID0geworCS5idXR0b25zCT0gc3BpdHpfZ3Bpb19rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoc3BpdHpfZ3Bpb19rZXlzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaXR6X2dwaW9fa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzcGl0el9ncGlvX2tleXNfcGxhdGZvcm1fZGF0YSwKKwl9LAogfTsKIAogCkBAIC0yOTYsNiArNDYxLDcgQEAKIAkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwKIAkueF9wbGF0ZV9vaG1zCQk9IDQxOSwKIAkueV9wbGF0ZV9vaG1zCQk9IDQ4NiwKKwkucHJlc3N1cmVfbWF4CQk9IDEwMjQsCiAJLmdwaW9fcGVuZG93bgkJPSBTUElUWl9HUElPX1RQX0lOVCwKIAkud2FpdF9mb3Jfc3luYwkJPSBzcGl0el93YWl0X2Zvcl9oc3luYywKIH07CkBAIC0zNzgsNDUgKzU0NCw2IEBACiAgKiBUaGUgY2FyZCBkZXRlY3QgaW50ZXJydXB0IGlzbid0IGRlYm91bmNlZCBzbyB3ZSBkZWxheSBpdCBieSAyNTBtcwogICogdG8gZ2l2ZSB0aGUgY2FyZCBhIGNoYW5jZSB0byBmdWxseSBpbnNlcnQvZWplY3QuCiAgKi8KLQotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBzcGl0el9tY2lfcGxhdGZvcm1fZGF0YTsKLQotc3RhdGljIGludCBzcGl0el9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3Qgc3BpdHpfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFNQSVRaX0dQSU9fblNEX0RFVEVDVCwgIm5TRF9ERVRFQ1QiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoU1BJVFpfR1BJT19uU0RfV1AsICJuU0RfV1AiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9mcmVlXzE7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTUElUWl9HUElPX25TRF9ERVRFQ1QpOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNQSVRaX0dQSU9fblNEX1dQKTsKLQotCXNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKLQotCWVyciA9IHJlcXVlc3RfaXJxKFNQSVRaX0lSUV9HUElPX25TRF9ERVRFQ1QsIHNwaXR6X2RldGVjdF9pbnQsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfUklTSU5HIHwKLQkJCSAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCi0JCQkgICJNTUMgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiJXM6IE1NQy9TRDogY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJZ290byBlcnJfZnJlZV8yOwotCX0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfMjoKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfV1ApOwotZXJyX2ZyZWVfMToKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfREVURUNUKTsKLWVycl9vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIHZvaWQgc3BpdHpfbWNpX3NldHBvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKIHsKIAlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKQEAgLTQyNywyNCArNTU0LDEyIEBACiAJCXNwaXR6X2NhcmRfcHdyX2N0cmwoU1BJVFpfUFdSX1NELCAweDAwMDApOwogfQogCi1zdGF0aWMgaW50IHNwaXR6X21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShTUElUWl9HUElPX25TRF9XUCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNwaXR6X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShTUElUWl9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKLQlncGlvX2ZyZWUoU1BJVFpfR1BJT19uU0RfV1ApOwotCWdwaW9fZnJlZShTUElUWl9HUElPX25TRF9ERVRFQ1QpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhID0gewotCS5vY3JfbWFzawk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKLQkuaW5pdCAJCT0gc3BpdHpfbWNpX2luaXQsCi0JLmdldF9ybwkJPSBzcGl0el9tY2lfZ2V0X3JvLAotCS5zZXRwb3dlciAJPSBzcGl0el9tY2lfc2V0cG93ZXIsCi0JLmV4aXQJCT0gc3BpdHpfbWNpX2V4aXQsCisJLm9jcl9tYXNrCQk9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIgCQk9IHNwaXR6X21jaV9zZXRwb3dlciwKKwkuZ3Bpb19jYXJkX2RldGVjdAk9IFNQSVRaX0dQSU9fblNEX0RFVEVDVCwKKwkuZ3Bpb19jYXJkX3JvCQk9IFNQSVRaX0dQSU9fblNEX1dQLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAogfTsKIAogCkBAIC00ODQsNTAgKzU5OSwxMCBAQAogLyoKICAqIElyZGEKICAqLwotc3RhdGljIGludCBzcGl0el9pcmRhX3N0YXJ0dXAoc3RydWN0IGRldmljZSAqZGV2KQotewotCWludCByYzsKLQotCXJjID0gZ3Bpb19yZXF1ZXN0KFNQSVRaX0dQSU9fSVJfT04sICJJckRBIG9uIik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycjsKLQotCXJjID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNQSVRaX0dQSU9fSVJfT04sIDEpOwotCWlmIChyYykKLQkJZ290byBlcnJfZGlyOwotCi0JcmV0dXJuIDA7Ci0KLWVycl9kaXI6Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fSVJfT04pOwotZXJyOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgc3BpdHpfaXJkYV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JZ3Bpb19mcmVlKFNQSVRaX0dQSU9fSVJfT04pOwotfQotCi1zdGF0aWMgdm9pZCBzcGl0el9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKLXsKLQlncGlvX3NldF92YWx1ZShTUElUWl9HUElPX0lSX09OLCBtb2RlICYgSVJfT0ZGKTsKLQlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOwotfQotCi0jaWZkZWYgQ09ORklHX01BQ0hfQUtJVEEKLXN0YXRpYyB2b2lkIGFraXRhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEFLSVRBX0dQSU9fSVJfT04sIG1vZGUgJiBJUl9PRkYpOwotCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Ci19Ci0jZW5kaWYKIAogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgc3BpdHpfZmljcF9wbGF0Zm9ybV9kYXRhID0geworLyogLmdwaW9fcHdkb3duIGlzIHNldCBpbiBzcGl0el9pbml0KCkgYW5kIGFraXRhX2luaXQoKSBhY2NvcmRpbmdseSAqLwogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfT0ZGLAotCS50cmFuc2NlaXZlcl9tb2RlCT0gc3BpdHpfaXJkYV90cmFuc2NlaXZlcl9tb2RlLAotCS5zdGFydHVwCQk9IHNwaXR6X2lyZGFfc3RhcnR1cCwKLQkuc2h1dGRvd24JCT0gc3BpdHpfaXJkYV9zaHV0ZG93biwKIH07CiAKIApAQCAtNjUyLDYgKzcyNyw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnNwaXR6c2Nvb3BfZGV2aWNlLAogCSZzcGl0emtiZF9kZXZpY2UsCisJJnNwaXR6X2dwaW9fa2V5c19kZXZpY2UsCiAJJnNwaXR6bGVkX2RldmljZSwKIAkmc2hhcnBzbF9uYW5kX2RldmljZSwKIAkmc2hhcnBzbF9yb21fZGV2aWNlLApAQCAtNjk1LDYgKzc3MSw3IEBACiAJc3BpdHpfaW5pdF9zcGkoKTsKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCXNwaXR6X21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZzcGl0el9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9vaGNpX2luZm8oJnNwaXR6X29oY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF9maWNwX2luZm8oJnNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YSk7CkBAIC03MDIsOSArNzc5LDM0IEBACiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfQUtJVEEpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfQk9SWk9JKQorc3RhdGljIHN0cnVjdCBuYW5kX2JidF9kZXNjciBzaGFycHNsX2FraXRhX2JidCA9IHsKKwkub3B0aW9ucyA9IDAsCisJLm9mZnMgPSA0LAorCS5sZW4gPSAxLAorCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCit9OworCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7CisJLmVjY2J5dGVzID0gMjQsCisJLmVjY3BvcyA9IHsKKwkJICAgMHg1LCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywgMHgxNSwgMHgxMSwKKwkJICAgMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkJICAgMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCisJLm9vYmZyZWUgPSB7ezB4MDgsIDB4MDl9fQorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUElUWikgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9CT1JaT0kpCiBzdGF0aWMgdm9pZCBfX2luaXQgc3BpdHpfaW5pdCh2b2lkKQogeworCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IFNQSVRaX0dQSU9fSVJfT047CisKKwlpZiAobWFjaGluZV9pc19ib3J6b2koKSkgeworCQlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5iYWRibG9ja19wYXR0ZXJuID0gJnNoYXJwc2xfYWtpdGFfYmJ0OworCQlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5lY2NfbGF5b3V0ID0gJmFraXRhX29vYmluZm87CisJfQorCiAJcGxhdGZvcm1fc2Nvb3BfY29uZmlnID0gJnNwaXR6X3BjbWNpYV9jb25maWc7CiAKIAljb21tb25faW5pdCgpOwpAQCAtNzI5LDI1ICs4MzEsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNoYXJwc2xfYWtpdGFfYmJ0ID0gewotCS5vcHRpb25zID0gMCwKLQkub2ZmcyA9IDQsCi0JLmxlbiA9IDEsCi0JLnBhdHRlcm4gPSBzY2FuX2ZmX3BhdHRlcm4KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgYWtpdGFfb29iaW5mbyA9IHsKLQkuZWNjYnl0ZXMgPSAyNCwKLQkuZWNjcG9zID0gewotCQkgICAweDUsIDB4MSwgMHgyLCAweDMsIDB4NiwgMHg3LCAweDE1LCAweDExLAotCQkgICAweDEyLCAweDEzLCAweDE2LCAweDE3LCAweDI1LCAweDIxLCAweDIyLCAweDIzLAotCQkgICAweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3fSwKLQkub29iZnJlZSA9IHt7MHgwOCwgMHgwOX19Ci19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgYWtpdGFfaW5pdCh2b2lkKQogewotCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS50cmFuc2NlaXZlcl9tb2RlID0gYWtpdGFfaXJkYV90cmFuc2NlaXZlcl9tb2RlOworCXNwaXR6X2ZpY3BfcGxhdGZvcm1fZGF0YS5ncGlvX3B3ZG93biA9IEFLSVRBX0dQSU9fSVJfT047CiAKIAlzaGFycHNsX25hbmRfcGxhdGZvcm1fZGF0YS5iYWRibG9ja19wYXR0ZXJuID0gJnNoYXJwc2xfYWtpdGFfYmJ0OwogCXNoYXJwc2xfbmFuZF9wbGF0Zm9ybV9kYXRhLmVjY19sYXlvdXQgPSAmYWtpdGFfb29iaW5mbzsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAxMTdhZDU5Li5lODFhNTI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0yNDcsNDkgKzI0NywxMCBAQAogLyoKICAqIE1NQy9TRCBEZXZpY2UKICAqLwotc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSB0b3NhX21jaV9wbGF0Zm9ybV9kYXRhOwotCiBzdGF0aWMgaW50IHRvc2FfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHRvc2FfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKIHsKIAlpbnQgZXJyOwogCi0JdG9zYV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7Ci0KLQllcnIgPSBncGlvX3JlcXVlc3QoVE9TQV9HUElPX25TRF9ERVRFQ1QsICJNTUMvU0QgY2FyZCBkZXRlY3QiKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBuU0RfREVURUNUIGdwaW9cbiIpOwotCQlnb3RvIGVycl9ncGlvX2RldGVjdDsKLQl9Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoVE9TQV9HUElPX25TRF9ERVRFQ1QpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyX2dwaW9fZGV0ZWN0X2RpcjsKLQotCWVyciA9IHJlcXVlc3RfaXJxKFRPU0FfSVJRX0dQSU9fblNEX0RFVEVDVCwgdG9zYV9kZXRlY3RfaW50LAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCSJNTUMvU0QgY2FyZCBkZXRlY3QiLCBkYXRhKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogTU1DL1NEOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlFcbiIpOwotCQlnb3RvIGVycl9pcnE7Ci0JfQotCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19TRF9XUCwgIlNEIFdyaXRlIFByb3RlY3QiKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9XUCBncGlvXG4iKTsKLQkJZ290byBlcnJfZ3Bpb193cDsKLQl9Ci0JZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoVE9TQV9HUElPX1NEX1dQKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9ncGlvX3dwX2RpcjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChUT1NBX0dQSU9fUFdSX09OLCAiU0QgUG93ZXIiKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidG9zYV9tY2lfaW5pdDogY2FuJ3QgcmVxdWVzdCBTRF9QV1IgZ3Bpb1xuIik7Ci0JCWdvdG8gZXJyX2dwaW9fcHdyOwotCX0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoVE9TQV9HUElPX1BXUl9PTiwgMCk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfZ3Bpb19wd3JfZGlyOwotCiAJZXJyID0gZ3Bpb19yZXF1ZXN0KFRPU0FfR1BJT19uU0RfSU5ULCAiU0QgSW50Iik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInRvc2FfbWNpX2luaXQ6IGNhbid0IHJlcXVlc3QgU0RfUFdSIGdwaW9cbiIpOwpAQCAtMzA0LDUxICsyNjUsMjEgQEAKIGVycl9ncGlvX2ludF9kaXI6CiAJZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfSU5UKTsKIGVycl9ncGlvX2ludDoKLWVycl9ncGlvX3B3cl9kaXI6Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19QV1JfT04pOwotZXJyX2dwaW9fcHdyOgotZXJyX2dwaW9fd3BfZGlyOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fU0RfV1ApOwotZXJyX2dwaW9fd3A6Ci0JZnJlZV9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKLWVycl9pcnE6Ci1lcnJfZ3Bpb19kZXRlY3RfZGlyOgotCWdwaW9fZnJlZShUT1NBX0dQSU9fblNEX0RFVEVDVCk7Ci1lcnJfZ3Bpb19kZXRlY3Q6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdG9zYV9tY2lfc2V0cG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdmRkKQotewotCXN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSogcF9kID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JaWYgKCggMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgewotCQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fUFdSX09OLCAxKTsKLQl9IGVsc2UgewotCQlncGlvX3NldF92YWx1ZShUT1NBX0dQSU9fUFdSX09OLCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgdG9zYV9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoVE9TQV9HUElPX1NEX1dQKTsKLX0KLQogc3RhdGljIHZvaWQgdG9zYV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJZ3Bpb19mcmVlKFRPU0FfR1BJT19uU0RfSU5UKTsKLQlncGlvX2ZyZWUoVE9TQV9HUElPX1BXUl9PTik7Ci0JZ3Bpb19mcmVlKFRPU0FfR1BJT19TRF9XUCk7Ci0JZnJlZV9pcnEoVE9TQV9JUlFfR1BJT19uU0RfREVURUNULCBkYXRhKTsKLQlncGlvX2ZyZWUoVE9TQV9HUElPX25TRF9ERVRFQ1QpOwogfQogCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHRvc2FfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrICAgICAgID0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAotCS5pbml0ICAgICAgICAgICA9IHRvc2FfbWNpX2luaXQsCi0JLmdldF9ybwkJPSB0b3NhX21jaV9nZXRfcm8sCi0JLnNldHBvd2VyICAgICAgID0gdG9zYV9tY2lfc2V0cG93ZXIsCi0JLmV4aXQgICAgICAgICAgID0gdG9zYV9tY2lfZXhpdCwKKwkub2NyX21hc2sgICAgICAgCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0ICAgICAgICAgICAJPSB0b3NhX21jaV9pbml0LAorCS5leGl0ICAgICAgICAgICAJPSB0b3NhX21jaV9leGl0LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gVE9TQV9HUElPX25TRF9ERVRFQ1QsCisJLmdwaW9fY2FyZF9ybwkJPSBUT1NBX0dQSU9fU0RfV1AsCisJLmdwaW9fcG93ZXIJCT0gVE9TQV9HUElPX1BXUl9PTiwKIH07CiAKIC8qCkBAIC00MDYsMTAgKzMzNywxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSB0b3NhX2ZpY3BfcGxhdGZvcm1fZGF0YSA9IHsKLQkudHJhbnNjZWl2ZXJfY2FwICA9IElSX1NJUk1PREUgfCBJUl9PRkYsCi0JLnRyYW5zY2VpdmVyX21vZGUgPSB0b3NhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKLQkuc3RhcnR1cCA9IHRvc2FfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93biA9IHRvc2FfaXJkYV9zaHV0ZG93biwKKwkuZ3Bpb19wd2Rvd24JCT0gLTEsCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCisJLnRyYW5zY2VpdmVyX21vZGUJPSB0b3NhX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKKwkuc3RhcnR1cAkJPSB0b3NhX2lyZGFfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gdG9zYV9pcmRhX3NodXRkb3duLAogfTsKIAogLyoKQEAgLTkxMCw2ICs4NDIsNyBAQAogCWR1bW15ID0gZ3Bpb2NoaXBfcmVzZXJ2ZShUT1NBX1NDT09QX0pDX0dQSU9fQkFTRSwgMTIpOwogCWR1bW15ID0gZ3Bpb2NoaXBfcmVzZXJ2ZShUT1NBX1RDNjM5M1hCX0dQSU9fQkFTRSwgMTYpOwogCisJdG9zYV9tY2lfcGxhdGZvcm1fZGF0YS5kZXRlY3RfZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKDI1MCk7CiAJcHhhX3NldF9tY2lfaW5mbygmdG9zYV9tY2lfcGxhdGZvcm1fZGF0YSk7CiAJcHhhX3NldF91ZGNfaW5mbygmdWRjX2luZm8pOwogCXB4YV9zZXRfZmljcF9pbmZvKCZ0b3NhX2ZpY3BfcGxhdGZvcm1fZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cmVvNjgwLmMKaW5kZXggNzUzZWM0ZC4uZmUwODUwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdHJlbzY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyZW82ODAuYwpAQCAtMTUzLDg3ICsxNTMsMTEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNEL01NQyBjYXJkIGNvbnRyb2xsZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IHRyZW82ODBfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQlpcnFfaGFuZGxlcl90IHRyZW82ODBfZGV0ZWN0X2ludCwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNldHVwIGFuIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGNhcmQgaW5zZXJ0L3JlbW92ZSBldmVudHMgKi8KLQllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIGVycjsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTik7Ci0JaWYgKGVycikKLQkJZ290byBlcnIyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKSwKLQkJCXRyZW82ODBfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8Ci0JCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7Ci0KLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoZGV2LCAiJXM6IGNhbm5vdCByZXF1ZXN0IFNEL01NQyBjYXJkIGRldGVjdCBJUlFcbiIsCi0JCQkgICAgIF9fZnVuY19fKTsKLQkJZ290byBlcnIyOwotCX0KLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfU0RfUE9XRVIsICJTRF9QT1dFUiIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyMzsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU82ODBfU0RfUE9XRVIsIDEpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFksICJTRF9SRUFET05MWSIpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyNDsKLQotCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnI1OwotCi0JcmV0dXJuIDA7Ci0KLWVycjU6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSk7Ci1lcnI0OgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfU0RfUE9XRVIpOwotZXJyMzoKLQlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04pLCBkYXRhKTsKLWVycjI6Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTik7Ci1lcnI6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdHJlbzY4MF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9SRUFET05MWSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9QT1dFUik7Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9UUkVPNjgwX1NEX0RFVEVDVF9OKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9TRF9ERVRFQ1RfTik7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyZW82ODBfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKLXsKLQlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlncGlvX3NldF92YWx1ZShHUElPX05SX1RSRU82ODBfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKLX0KLQotc3RhdGljIGludCB0cmVvNjgwX21jaV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFkpOwotfQotCiBzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHRyZW82ODBfbWNpX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCi0JLnNldHBvd2VyCT0gdHJlbzY4MF9tY2lfcG93ZXIsCi0JLmdldF9ybwkJPSB0cmVvNjgwX21jaV9nZXRfcm8sCi0JLmluaXQgCQk9IHRyZW82ODBfbWNpX2luaXQsCi0JLmV4aXQJCT0gdHJlbzY4MF9tY2lfZXhpdCwKKwkub2NyX21hc2sJCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSBHUElPX05SX1RSRU82ODBfU0RfREVURUNUX04sCisJLmdwaW9fY2FyZF9ybwkJPSBHUElPX05SX1RSRU82ODBfU0RfUkVBRE9OTFksCisJLmdwaW9fcG93ZXIJCT0gR1BJT19OUl9UUkVPNjgwX1NEX1BPV0VSLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzMwLDE2ICsyNTQsOSBAQAogCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1RSRU82ODBfQkxfUE9XRVIsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyMjsKLQlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyMjsKLQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnIzOwogCiAJcmV0dXJuIDA7Ci1lcnIzOgotCWdwaW9fZnJlZShHUElPX05SX1RSRU82ODBfTENEX1BPV0VSKTsKKwogZXJyMjoKIAlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSKTsKIGVycjoKQEAgLTM1NSw3ICsyNzIsNiBAQAogc3RhdGljIHZvaWQgdHJlbzY4MF9iYWNrbGlnaHRfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9CTF9QT1dFUik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9MQ0RfUE9XRVIpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSB0cmVvNjgwX2JhY2tsaWdodF9kYXRhID0gewpAQCAtMzc5LDQ0ICsyOTUsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSXJEQQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIHRyZW82ODBfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQotewotCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfVFJFTzY4MF9JUl9FTiwgbW9kZSAmIElSX09GRik7Ci0JcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoZGV2LCBtb2RlKTsKLX0KLQotc3RhdGljIGludCB0cmVvNjgwX2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfSVJfRU4sICJJciBwb3J0IGRpc2FibGUiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjE7Ci0KLQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0lSX0VOLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycjI7Ci0KLQlyZXR1cm4gMDsKLQotZXJyMjoKLQlkZXZfZXJyKGRldiwgInRyZW82ODBfaXJkYTogY2Fubm90IGNoYW5nZSBJUiBncGlvIGRpcmVjdGlvblxuIik7Ci0JZ3Bpb19mcmVlKEdQSU9fTlJfVFJFTzY4MF9JUl9FTik7Ci1lcnIxOgotCWRldl9lcnIoZGV2LCAidHJlbzY4MF9pcmRhOiBjYW5ub3QgYWxsb2NhdGUgSVIgZ3Bpb1xuIik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdHJlbzY4MF9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0lSX0VOKTsKLX0KLQogc3RhdGljIHN0cnVjdCBweGFmaWNwX3BsYXRmb3JtX2RhdGEgdHJlbzY4MF9maWNwX2luZm8gPSB7Ci0JLnRyYW5zY2VpdmVyX2NhcCAgPSBJUl9GSVJNT0RFIHwgSVJfU0lSTU9ERSB8IElSX09GRiwKLQkuc3RhcnR1cCAgICAgICAgICA9IHRyZW82ODBfaXJkYV9zdGFydHVwLAotCS5zaHV0ZG93biAgICAgICAgID0gdHJlbzY4MF9pcmRhX3NodXRkb3duLAotCS50cmFuc2NlaXZlcl9tb2RlID0gdHJlbzY4MF90cmFuc2NlaXZlcl9tb2RlLAorCS5ncGlvX3B3ZG93bgkJPSBHUElPX05SX1RSRU82ODBfSVJfRU4sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9PRkYsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC01NDYsNiArNDI3LDExIEBACiB9LAogfTsKIAorc3RhdGljIHZvaWQgdHJlbzY4MF9sY2RfcG93ZXIoaW50IG9uLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKmluZm8pCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9UUkVPNjgwX0JMX1BPV0VSLCBvbik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcHhhZmJfbWFjaF9pbmZvIHRyZW82ODBfbGNkX3NjcmVlbiA9IHsKIAkubW9kZXMJCT0gdHJlbzY4MF9sY2RfbW9kZXMsCiAJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUodHJlbzY4MF9sY2RfbW9kZXMpLApAQCAtNTg1LDExICs0NzEsMzIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCB0cmVvNjgwX2xjZF9wb3dlcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1RSRU82ODBfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlRyZW82ODA6IExDRCBwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUiwgMCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoIlRyZW82ODA6IHNldHRpbmcgTENEIHBvd2VyIEdQSU8gZGlyZWN0aW9uIGZhaWxlZCFcbiIpOworCQlncGlvX2ZyZWUoR1BJT19OUl9UUkVPNjgwX0xDRF9QT1dFUik7CisJCXJldHVybjsKKwl9CisKKwl0cmVvNjgwX2xjZF9zY3JlZW4ucHhhZmJfbGNkX3Bvd2VyID0gdHJlbzY4MF9sY2RfcG93ZXI7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCB0cmVvNjgwX2luaXQodm9pZCkKIHsKIAl0cmVvNjgwX3BtX2luaXQoKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh0cmVvNjgwX3Bpbl9jb25maWcpKTsKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZ0cmVvNjgwX2tleXBhZF9wbGF0Zm9ybV9kYXRhKTsKKwl0cmVvNjgwX2xjZF9wb3dlcl9pbml0KCk7CiAJc2V0X3B4YV9mYl9pbmZvKCZ0cmVvNjgwX2xjZF9zY3JlZW4pOwogCXB4YV9zZXRfbWNpX2luZm8oJnRyZW82ODBfbWNpX3BsYXRmb3JtX2RhdGEpOwogCXRyZW82ODBfdWRjX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IDgyNWY1NDAuLjM5ODFlMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtMzY3LDYgKzM2Nyw5IEBACiAJLmV4aXQJCT0gdHJpemVwczRfbWNpX2V4aXQsCiAJLmdldF9ybwkJPSBOVUxMLAkvKiB3cml0ZS1wcm90ZWN0aW9uIG5vdCBzdXBwb3J0ZWQgKi8KIAkuc2V0cG93ZXIgCT0gTlVMTCwJLyogcG93ZXItc3dpdGNoaW5nIG5vdCBzdXBwb3J0ZWQgKi8KKwkuZ3Bpb19jYXJkX2RldGVjdCA9IC0xLAorCS5ncGlvX2NhcmRfcm8JPSAtMSwKKwkuZ3Bpb19wb3dlcgk9IC0xLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQxMiw2ICs0MTUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSB0cml6ZXBzNF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmdwaW9fcHdkb3duCQk9IC0xLAogCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKIAkudHJhbnNjZWl2ZXJfbW9kZQk9IHRyaXplcHM0X2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKIAkuc3RhcnR1cAkJPSB0cml6ZXBzNF9pcmRhX3N0YXJ0dXAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS94Y2VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkNzljYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYwpAQCAtMCwwICsxLDE4NyBAQAorLyogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL3hjZXAuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgSXNrcmF0ZWwgRWxlY3Ryb25pY3MgWENFUCBwbGF0Zm9ybSBhcyB1c2VkIGluCisgKiAgdGhlIExpYmVyYSBpbnN0cnVtZW50cyBmcm9tIEluc3RydW1lbnRhdGlvbiBUZWNobm9sb2dpZXMuCisgKgorICogIEF1dGhvcjogICAgIEFsZXMgQmFyZG9yZmVyIDxhbGVzQGktdGVjaC5zaT4KKyAqICBDb250cmlidXRpb25zIGJ5OiBBYmJvdHQsIE1HIChNaWNoYWVsKSA8bWljaGFlbC5hYmJvdHRAZGlhbW9uZC5hYy51az4KKyAqICBDb250cmlidXRpb25zIGJ5OiBNYXRlaiBLZW5kYSA8bWF0ZWoua2VuZGFAaS10ZWNoLnNpPgorICogIENyZWF0ZWQ6ICAgIEp1bmUgMjAwNgorICogIENvcHlyaWdodDogIChDKSAyMDA2LTIwMDkgSW5zdHJ1bWVudGF0aW9uIFRlY2hub2xvZ2llcworICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjZGVmaW5lIFhDRVBfRVRIX1BIWVMJCShQWEFfQ1MzX1BIWVMgKyAweDAwMDAwMzAwKQorI2RlZmluZSBYQ0VQX0VUSF9QSFlTX0VORAkoUFhBX0NTM19QSFlTICsgMHgwMDBmZmZmZikKKyNkZWZpbmUgWENFUF9FVEhfQVRUUgkJKFBYQV9DUzNfUEhZUyArIDB4MDIwMDAwMDApCisjZGVmaW5lIFhDRVBfRVRIX0FUVFJfRU5ECShQWEFfQ1MzX1BIWVMgKyAweDAyMGZmZmZmKQorI2RlZmluZSBYQ0VQX0VUSF9JUlEJCUlSUV9HUElPMAorCisvKiAgWENFUCBDUExEIGJhc2UgKi8KKyNkZWZpbmUgWENFUF9DUExEX0JBU0UJCTB4ZjAwMDAwMDAKKworCisvKiBGbGFzaCBwYXJ0aXRpb25zLiAqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24geGNlcF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciIsCisJCS5zaXplID0JCTB4MDAwNDAwMDAsCisJCS5vZmZzZXQgPQkwLAorCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUKKwl9LCB7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIEVOViIsCisJCS5zaXplID0JCTB4MDAwNDAwMDAsCisJCS5vZmZzZXQgPQkweDAwMDQwMDAwLAorCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUKKwl9LCB7CisJCS5uYW1lID0JCSJLZXJuZWwiLAorCQkuc2l6ZSA9CQkweDAwMTAwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDA4MDAwMCwKKwl9LCB7CisJCS5uYW1lID0JCSJSZXNjdWUgZnMiLAorCQkuc2l6ZSA9CQkweDAwMjgwMDAwLAorCQkub2Zmc2V0ID0JMHgwMDE4MDAwMCwKKwl9LCB7CisJCS5uYW1lID0JCSJGaWxlc3lzdGVtIiwKKwkJLnNpemUgPQkJTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldCA9CTB4MDA0MDAwMDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSB4Y2VwX2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSA0LAkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCisJCS5wYXJ0cwkJPSB4Y2VwX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoeGNlcF9wYXJ0aXRpb25zKQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLmRldiAJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0geGNlcF9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKworCisvKiBTTUMgTEFOOTFDMTExIG5ldHdvcmsgY29udHJvbGxlci4gKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJzbWM5MXgtcmVncyIsCisJCS5zdGFydAk9IFhDRVBfRVRIX1BIWVMsCisJCS5lbmQJPSBYQ0VQX0VUSF9QSFlTX0VORCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IFhDRVBfRVRIX0lSUSwKKwkJLmVuZAk9IFhDRVBfRVRIX0lSUSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gInNtYzkxeC1hdHRyaWIiLAorCQkuc3RhcnQJPSBYQ0VQX0VUSF9BVFRSLAorCQkuZW5kCT0gWENFUF9FVEhfQVRUUl9FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSB4Y2VwX3NtYzkxeF9pbmZvID0geworCS5mbGFncwk9IFNNQzkxWF9VU0VfMzJCSVQgfCBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX1VTRV9ETUEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmeGNlcF9zbWM5MXhfaW5mbywKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmZsYXNoX2RldmljZSwKKwkmc21jOTF4X2RldmljZSwKK307CisKKworLyogV2UgaGF2ZSB0byBzdGF0ZSB0aGF0IHRoZXJlIGFyZSBIV01PTiBkZXZpY2VzIG9uIHRoZSBJMkMgYnVzIG9uIFhDRVAuCisgKiBEcml2ZXJzIGZvciBIV01PTiB2ZXJpZnkgY2FwYWJpbGl0aWVzIG9mIHRoZSBhZGFwdGVyIHdoZW4gbG9hZGluZyBhbmQKKyAqIHJlZnVzZSB0byBhdHRhY2ggaWYgdGhlIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IEhXTU9OIGNsYXNzIG9mIGRldmljZXMuCisgKiBTZWUgYWxzbyBEb2N1bWVudGF0aW9uL2kyYy9wb3J0aW5nLWNsaWVudHMuICovCitzdGF0aWMgc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSB4Y2VwX2kyY19wbGF0Zm9ybV9kYXRhICA9IHsKKwkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04KK307CisKKworc3RhdGljIG1mcF9jZmdfdCB4Y2VwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU83OV9uQ1NfMywJLyogU01DIDkxQzExMSBjaGlwIHNlbGVjdC4gKi8KKwlHUElPODBfbkNTXzQsCS8qIENQTEQgY2hpcCBzZWxlY3QuICovCisJLyogU1NQIGNvbW11bmljYXRpb24gdG8gTVNQNDMwICovCisJR1BJTzIzX1NTUDFfU0NMSywKKwlHUElPMjRfU1NQMV9TRlJNLAorCUdQSU8yNV9TU1AxX1RYRCwKKwlHUElPMjZfU1NQMV9SWEQsCisJR1BJTzI3X1NTUDFfRVhUQ0xLCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgeGNlcF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoeGNlcF9waW5fY29uZmlnKSk7CisKKwkvKiBTZWUgSW50ZWwgWFNjYWxlIERldmVsb3BlcidzIEd1aWRlIGZvciBkZXRhaWxzICovCisJLyogU2V0IFJERiBhbmQgUkROIHRvIGFwcHJvcHJpYXRlIHZhbHVlcyAoY2hpcCBzZWxlY3QgMyAoc21jOTF4KSkgKi8KKwlNU0MxID0gKE1TQzEgJiAweGZmZmYpIHwgMHhENTU0MDAwMDsKKwkvKiBTZXQgUkRGIGFuZCBSRE4gdG8gYXBwcm9wcmlhdGUgdmFsdWVzIChjaGlwIHNlbGVjdCA1IChmcGdhKSkgKi8KKwlNU0MyID0gKE1TQzIgJiAweGZmZmYpIHwgMHg3MkEwMDAwMDsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKEFSUkFZX0FORF9TSVpFKGRldmljZXMpKTsKKwlweGFfc2V0X2kyY19pbmZvKCZ4Y2VwX2kyY19wbGF0Zm9ybV9kYXRhKTsKK30KKworTUFDSElORV9TVEFSVChYQ0VQLCAiSXNrcmF0ZWwgWENFUCIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IHhjZXBfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3p5bG9uaXRlLmMKaW5kZXggMjE4ZDIwMC4uMDk3ODRkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZS5jCkBAIC0yOTAsNiArMjkwLDkgQEAKIAkuaW5pdCAJCT0genlsb25pdGVfbWNpX2luaXQsCiAJLmV4aXQJCT0genlsb25pdGVfbWNpX2V4aXQsCiAJLmdldF9ybwkJPSB6eWxvbml0ZV9tY2lfcm8sCisJLmdwaW9fY2FyZF9kZXRlY3QgPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCT0gLTEsCisJLmdwaW9fcG93ZXIJPSAtMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgenlsb25pdGVfbWNpMl9wbGF0Zm9ybV9kYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCmluZGV4IGRmYzliMGIuLmM0OGUxZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKQEAgLTcwLDYgKzcwLDggQEAKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCWCBwbGF0Zm9ybSIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlmIENQVV9WNyAmJiAhSElHSF9QSFlTX09GRlNFVAorCXNlbGVjdCBaT05FX0RNQSBpZiBTUEFSU0VNRU0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUEJYIHBsYXRmb3JtLgogCkBAIC04Miw2ICs4NCw3IEBACiAJICAweDcwMDAwMDAwLCAyNTZNQiBvZiB3aGljaCBiZWluZyBtaXJyb3JlZCBhdCAweDAwMDAwMDAwLiBJZgogCSAgdGhlIGJvYXJkIHN1cHBvcnRzIDUxMk1CIG9mIFJBTSwgdGhpcyBvcHRpb24gYWxsb3dzIHRoZQogCSAgbWVtb3J5IHRvIGJlIGFjY2Vzc2VkIGNvbnRpZ3VvdXNseSBhdCB0aGUgaGlnaCBwaHlzaWNhbAotCSAgb2Zmc2V0LgorCSAgb2Zmc2V0LiBPbiB0aGUgUEJYIGJvYXJkLCBkaXNhYmxpbmcgdGhpcyBvcHRpb24gYWxsb3dzIDFHQiBvZgorCSAgUkFNIHRvIGJlIHVzZWQgd2l0aCBTUEFSU0VNRU0uCiAKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMKaW5kZXggZGMzNTE5YzUuLjlmMjkzNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogCiAjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTQ0LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCkBAIC01OSw2ICs1OSwyNSBAQAogLyogdXNlZCBieSBlbnRyeS1tYWNyby5TIGFuZCBwbGF0c21wLmMgKi8KIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiAKKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEKKy8qCisgKiBBZGp1c3QgdGhlIHpvbmVzIGlmIHRoZXJlIGFyZSByZXN0cmljdGlvbnMgZm9yIERNQSBhY2Nlc3MuCisgKi8KK3ZvaWQgX19pbml0IHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpCit7CisJdW5zaWduZWQgbG9uZyBkbWFfc2l6ZSA9IFNaXzI1Nk0gPj4gUEFHRV9TSElGVDsKKworCWlmICghbWFjaGluZV9pc19yZWFsdmlld19wYngoKSB8fCBub2RlIHx8IChzaXplWzBdIDw9IGRtYV9zaXplKSkKKwkJcmV0dXJuOworCisJc2l6ZVtaT05FX05PUk1BTF0gPSBzaXplWzBdIC0gZG1hX3NpemU7CisJc2l6ZVtaT05FX0RNQV0gPSBkbWFfc2l6ZTsKKwlob2xlW1pPTkVfTk9STUFMXSA9IGhvbGVbMF07CisJaG9sZVtaT05FX0RNQV0gPSAwOworfQorI2VuZGlmCisKIC8qCiAgKiBUaGlzIGlzIHRoZSBSZWFsVmlldyBzY2hlZF9jbG9jayBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgaGFzCiAgKiBhIHJlc29sdXRpb24gb2YgNDEuN25zLCBhbmQgYSBtYXhpbXVtIHZhbHVlIG9mIGFib3V0IDE3OXMuCkBAIC0yMzcsMTQgKzI1NiwxNCBAQAogCXJldHVybiByZWFkbChSRUFMVklFV19TWVNNQ0kpICYgbWFzazsKIH0KIAotc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzBfcGxhdF9kYXRhID0geworc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSByZWFsdmlld19tbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gMTcsCiAJLmdwaW9fY2QJPSAxNiwKIH07CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMxX3BsYXRfZGF0YSA9IHsKK3N0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gcmVhbHZpZXdfbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IDE5LApAQCAtMjk2LDMxICszMTUsMzEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKIAl7CS8qIFVBUlQwICovCi0JCS5kZXZfaWQJCT0gImRldjpmMSIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MCIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQxICovCi0JCS5kZXZfaWQJCT0gImRldjpmMiIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MSIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQyICovCi0JCS5kZXZfaWQJCT0gImRldjpmMyIsCisJCS5kZXZfaWQJCT0gImRldjp1YXJ0MiIsCiAJCS5jbGsJCT0gJnJlZjI0X2NsaywKIAl9LCB7CS8qIFVBUlQzICovCi0JCS5kZXZfaWQJCT0gImZwZ2E6MDkiLAorCQkuZGV2X2lkCQk9ICJmcGdhOnVhcnQzIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA2IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogS01JMSAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA3IiwKKwkJLmRldl9pZAkJPSAiZnBnYTprbWkxIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogTU1DMCAqLwotCQkuZGV2X2lkCQk9ICJmcGdhOjA1IiwKKwkJLmRldl9pZAkJPSAiZnBnYTptbWMwIiwKIAkJLmNsawkJPSAmcmVmMjRfY2xrLAogCX0sIHsJLyogRUI6Q0xDRCAqLwotCQkuZGV2X2lkCQk9ICJkZXY6MjAiLAorCQkuZGV2X2lkCQk9ICJkZXY6Y2xjZCIsCiAJCS5jbGsJCT0gJm9zY3Zjb19jbGssCiAJfSwgewkvKiBQQjpDTENEICovCi0JCS5kZXZfaWQJCT0gImlzc3A6MjAiLAorCQkuZGV2X2lkCQk9ICJpc3NwOmNsY2QiLAogCQkuY2xrCQk9ICZvc2N2Y29fY2xrLAogCX0KIH07CkBAIC01NDMsNyArNTYyLDcgQEAKIAlmYi0+cGFuZWwJCT0gcmVhbHZpZXdfY2xjZF9wYW5lbCgpOwogCiAJZmItPmZiLnNjcmVlbl9iYXNlID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgmZmItPmRldi0+ZGV2LCBmcmFtZXNpemUsCi0JCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgJmRtYSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCWlmICghZmItPmZiLnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ0xDRDogdW5hYmxlIHRvIG1hcCBmcmFtZWJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzg4LDMgKzgwNywyNCBAQAogCXJlYWx2aWV3X2Nsb2Nrc291cmNlX2luaXQoKTsKIAlyZWFsdmlld19jbG9ja2V2ZW50c19pbml0KHRpbWVyX2lycSk7CiB9CisKKy8qCisgKiBTZXR1cCB0aGUgbWVtb3J5IGJhbmtzLgorICovCit2b2lkIHJlYWx2aWV3X2ZpeHVwKHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjLCBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJICAgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogTW9zdCBSZWFsVmlldyBwbGF0Zm9ybXMgaGF2ZSA1MTJNQiBjb250aWd1b3VzIFJBTSBhdCAweDcwMDAwMDAwLgorCSAqIEhhbGYgb2YgdGhpcyBpcyBtaXJyb3JlZCBhdCAwLgorCSAqLworI2lmZGVmIENPTkZJR19SRUFMVklFV19ISUdIX1BIWVNfT0ZGU0VUCisJbWVtaW5mby0+YmFua1swXS5zdGFydCA9IDB4NzAwMDAwMDA7CisJbWVtaW5mby0+YmFua1swXS5zaXplID0gU1pfNTEyTTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDE7CisjZWxzZQorCW1lbWluZm8tPmJhbmtbMF0uc3RhcnQgPSAwOworCW1lbWluZm8tPmJhbmtbMF0uc2l6ZSA9IFNaXzI1Nk07CisJbWVtaW5mby0+bnJfYmFua3MgPSAxOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCmluZGV4IDU5YTMzN2IuLjc4MWJjYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvY29yZS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KIAogI2RlZmluZSBBTUJBX0RFVklDRShuYW1lLGJ1c2lkLGJhc2UscGxhdCkJCQlcCkBAIC00NCwxMSArNDUsMTMgQEAKIAkvKiAuZG1hCQk9IGJhc2UjI19ETUEsKi8JCQkJXAogfQogCitzdHJ1Y3QgbWFjaGluZV9kZXNjOworCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKLWV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CitleHRlcm4gc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHJlYWx2aWV3X21tYzFfcGxhdF9kYXRhOwogZXh0ZXJuIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdF9kYXRhOwogZXh0ZXJuIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHI7CiBleHRlcm4gdm9pZCBfX2lvbWVtICp0aW1lcjBfdmFfYmFzZTsKQEAgLTYxLDUgKzY0LDggQEAKIGV4dGVybiBpbnQgcmVhbHZpZXdfZmxhc2hfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiBudW0pOwogZXh0ZXJuIGludCByZWFsdmlld19ldGhfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc291cmNlICpyZXMpOwogZXh0ZXJuIGludCByZWFsdmlld191c2JfcmVnaXN0ZXIoc3RydWN0IHJlc291cmNlICpyZXMpOworZXh0ZXJuIHZvaWQgcmVhbHZpZXdfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsIHN0cnVjdCB0YWcgKnRhZ3MsCisJCQkgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pOworZXh0ZXJuIHZvaWQgKCpyZWFsdmlld19yZXNldCkoY2hhcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMTc2LmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAppbmRleCA5OGY4ZTdlLi4zNGI4MGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYjExNzYuaApAQCAtNzMsNCArNzMsOSBAQAogI2RlZmluZSBSRUFMVklFV19QQjExNzZfR0lDX0RJU1RfQkFTRQkJMHgxMDA0MTAwMCAvKiBHSUMgZGlzdHJpYnV0b3IsIG9uIEZQR0EgKi8KICNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X0wyMjBfQkFTRQkJMHgxMDExMDAwMCAvKiBMMjIwIHJlZ2lzdGVycyAqLwogCisvKgorICogQ29udHJvbCByZWdpc3RlciBTWVNfUkVTRVRDVEwgaXMgc2V0IHRvIDEgdG8gZm9yY2UgYSBzb2Z0IHJlc2V0CisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCAgICAweDAxMDAKKwogI2VuZGlmCS8qIF9fQVNNX0FSQ0hfQk9BUkRfUEIxMTc2X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiMTFtcC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKaW5kZXggZjBkNjhlMC4uN2FiZjkxOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGIxMW1wLmgKQEAgLTgxLDQgKzgxLDE2IEBACiAjZGVmaW5lIFJFQUxWSUVXX1RDMTFNUF9HSUNfRElTVF9CQVNFCQkweDFGMDAxMDAwCS8qIFRlc3QgY2hpcCBpbnRlcnJ1cHQgY29udHJvbGxlciBkaXN0cmlidXRvciAqLwogI2RlZmluZSBSRUFMVklFV19UQzExTVBfTDIyMF9CQVNFCQkweDFGMDAyMDAwCS8qIEwyMjAgcmVnaXN0ZXJzICovCiAKKyAvKgorICogVmFsdWVzIGZvciBSRUFMVklFV19TWVNfUkVTRVRfQ1RSTAorICovCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9DT05GSUdDTFIgICAgMHgwMQorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RMTFJFU0VUICAgICAweDAzCisjZGVmaW5lIFJFQUxWSUVXX1BCMTFNUF9TWVNfQ1RSTF9SRVNFVF9QTExSRVNFVCAgICAgMHgwNAorI2RlZmluZSBSRUFMVklFV19QQjExTVBfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0RvQyAgICAgICAgICAweDA2CisKKyNkZWZpbmUgUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX0xFRCAgICAgICAgICgxIDw8IDApCisKICNlbmRpZgkvKiBfX0FTTV9BUkNIX0JPQVJEX1BCMTFNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IDI5M2MzMDAuLjI0MTdiYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0yOSw0ICsyOSw1MyBAQAogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwMDAwMDAwMCkKICNlbmRpZgogCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiBkZWZpbmVkKENPTkZJR19aT05FX0RNQSkKK2V4dGVybiB2b2lkIHJlYWx2aWV3X2FkanVzdF96b25lcyhpbnQgbm9kZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmhvbGUpOworI2RlZmluZSBhcmNoX2FkanVzdF96b25lcyhub2RlLCBzaXplLCBob2xlKSBcCisJcmVhbHZpZXdfYWRqdXN0X3pvbmVzKG5vZGUsIHNpemUsIGhvbGUpCisKKyNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQJKFBIWVNfT0ZGU0VUICsgU1pfMjU2TSAtIDEpCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgU1pfMjU2TSkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCisvKgorICogU3BhcnNlbWVtIGRlZmluaXRpb25zIGZvciBSZWFsVmlldyBQQlguCisgKgorICogVGhlIFJlYWxWaWV3IFBCWCBib2FyZCBoYXMgYW5vdGhlciBibG9jayBvZiA1MTJNQiBvZiBSQU0gYXQgMHgyMDAwMDAwMCwKKyAqIGhvd2V2ZXIgb25seSB0aGUgYmxvY2sgYXQgMHg3MDAwMDAwMCAob3IgdGhlIDI1Nk1CIG1pcnJvciBhdCAweDAwMDAwMDAwKQorICogbWF5IGJlIHVzZWQgZm9yIERNQS4KKyAqCisgKiBUaGUgbWFjcm9zIGJlbG93IGRlZmluZSBhIHNlY3Rpb24gc2l6ZSBvZiAyNTZNQiBhbmQgYSBub24tbGluZWFyIHZpcnR1YWwgdG8KKyAqIHBoeXNpY2FsIG1hcHBpbmc6CisgKgorICogMjU2TUIgQCAweDAwMDAwMDAwIC0+IFBBR0VfT0ZGU0VUCisgKiA1MTJNQiBAIDB4MjAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwCisgKiAyNTZNQiBAIDB4ODAwMDAwMDAgLT4gUEFHRV9PRkZTRVQgKyAweDMwMDAwMDAwCisgKi8KKyNpZmRlZiBDT05GSUdfUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAorI2Vycm9yICJTUEFSU0VNRU0gbm90IGF2YWlsYWJsZSB3aXRoIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQiCisjZW5kaWYKKworI2RlZmluZSBNQVhfUEhZU01FTV9CSVRTCTMyCisjZGVmaW5lIFNFQ1RJT05fU0laRV9CSVRTCTI4CisKKy8qIGJhbmsgcGFnZSBvZmZzZXRzICovCisjZGVmaW5lIFBBR0VfT0ZGU0VUMQkoUEFHRV9PRkZTRVQgKyAweDEwMDAwMDAwKQorI2RlZmluZSBQQUdFX09GRlNFVDIJKFBBR0VfT0ZGU0VUICsgMHgzMDAwMDAwMCkKKworI2RlZmluZSBfX3BoeXNfdG9fdmlydChwaHlzKQkJCQkJCVwKKwkoKHBoeXMpID49IDB4ODAwMDAwMDAgPwkocGh5cykgLSAweDgwMDAwMDAwICsgUEFHRV9PRkZTRVQyIDoJXAorCSAocGh5cykgPj0gMHgyMDAwMDAwMCA/CShwaHlzKSAtIDB4MjAwMDAwMDAgKyBQQUdFX09GRlNFVDEgOglcCisJIChwaHlzKSArIFBBR0VfT0ZGU0VUKQorCisjZGVmaW5lIF9fdmlydF90b19waHlzKHZpcnQpCQkJCQkJXAorCSAoKHZpcnQpID49IFBBR0VfT0ZGU0VUMiA/ICh2aXJ0KSAtIFBBR0VfT0ZGU0VUMiArIDB4ODAwMDAwMDAgOglcCisJICAodmlydCkgPj0gUEFHRV9PRkZTRVQxID8gKHZpcnQpIC0gUEFHRV9PRkZTRVQxICsgMHgyMDAwMDAwMCA6CVwKKwkgICh2aXJ0KSAtIFBBR0VfT0ZGU0VUKQorCisjZW5kaWYJLyogQ09ORklHX1NQQVJTRU1FTSAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCmluZGV4IGM4ZjUwODMuLjRmNDZiZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaApAQCAtMTE5LDE5ICsxMTksNiBAQAogI2RlZmluZSBSRUFMVklFV19TWVNfVEVTVF9PU0MzICAgICAgICAgICAgICAgKFJFQUxWSUVXX1NZU19CQVNFICsgUkVBTFZJRVdfU1lTX1RFU1RfT1NDM19PRkZTRVQpCiAjZGVmaW5lIFJFQUxWSUVXX1NZU19URVNUX09TQzQgICAgICAgICAgICAgICAoUkVBTFZJRVdfU1lTX0JBU0UgKyBSRUFMVklFV19TWVNfVEVTVF9PU0M0X09GRlNFVCkKIAotLyogCi0gKiBWYWx1ZXMgZm9yIFJFQUxWSUVXX1NZU19SRVNFVF9DVFJMCi0gKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHQ0xSICAgIDB4MDEKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfQ09ORklHSU5JVCAgIDB4MDIKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRExMUkVTRVQgICAgIDB4MDMKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUExMUkVTRVQgICAgIDB4MDQKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfUE9SICAgICAgICAgIDB4MDUKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0NUUkxfUkVTRVRfRG9DICAgICAgICAgIDB4MDYKLQotI2RlZmluZSBSRUFMVklFV19TWVNfQ1RSTF9MRUQgICAgICAgICAoMSA8PCAwKQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIFJlYWxWaWV3IGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Myw3ICsxNDAsNyBAQAogICogICAgIFNZU19DTEQsIFNZU19CT09UQ1MKICAqLwogI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS19MT0NLRUQgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFJFQUxWSUVXX1NZU19MT0NLVkFMX01BU0sJMHhGRkZGCQkvKiB3cml0ZSAweEEwNUYgdG8gZW5hYmxlIHdyaXRlIGFjY2VzcyAqLworI2RlZmluZSBSRUFMVklFV19TWVNfTE9DS1ZBTF9NQVNLCTB4QTA1RgkgICAgICAgLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLwogCiAvKgogICogUkVBTFZJRVdfU1lTX0ZMQVNICmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDFhMTVhNDQuLmEzMGYyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvcGxhdGZvcm0uaD4KIAordm9pZCAoKnJlYWx2aWV3X3Jlc2V0KShjaGFyIG1vZGUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJLyoKQEAgLTM2LDE2ICszOCwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7Ci0JdW5zaWduZWQgaW50IHZhbDsKLQogCS8qCiAJICogVG8gcmVzZXQsIHdlIGhpdCB0aGUgb24tYm9hcmQgcmVzZXQgcmVnaXN0ZXIKIAkgKiBpbiB0aGUgc3lzdGVtIEZQR0EKIAkgKi8KLQl2YWwgPSBfX3Jhd19yZWFkbChoZHJfY3RybCk7Ci0JdmFsIHw9IFJFQUxWSUVXX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKLQlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7CisJaWYgKHJlYWx2aWV3X3Jlc2V0KQorCQlyZWFsdmlld19yZXNldChtb2RlKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCmluZGV4IGE4ODQ1OGIuLjAwOTI2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcGxhdHNtcC5jCkBAIC0xNDYsMTEgKzE0Niw4IEBACiAJICogcmVnaXN0ZXIuIFRoZSBCb290TW9uaXRvciB3YWl0cyBmb3IgdGhpcyByZWdpc3RlciB0byBiZWNvbWUKIAkgKiBub24temVyby4KIAkgKi8KLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQgMHgzMAotI2RlZmluZSBSRUFMVklFV19TWVNfRkxBR1NDX09GRlNFVCAweDM0CiAJX19yYXdfd3JpdGVsKEJTWU0odmlydF90b19waHlzKHJlYWx2aWV3X3NlY29uZGFyeV9zdGFydHVwKSksCi0JCSAgICAgX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCi0JCSAgICAgUkVBTFZJRVdfU1lTX0ZMQUdTU19PRkZTRVQpOworCQkgICAgIF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfRkxBR1NTRVQpKTsKIAogCW1iKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKaW5kZXggYWJkMTNiNC4uOTE3ZjhjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNyw3ICszOCw2IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1lYi5oPgpAQCAtMTkzLDI3ICsxOTMsMjcgQEAKICNkZWZpbmUgRUJfU1NQX0RNQQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksICAiZnBnYTowNCIsIEFBQ0ksICAgICBOVUxMKTsKLUFNQkFfREVWSUNFKG1tYzAsICAiZnBnYTowNSIsIE1NQ0kwLCAgICAmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0Uoa21pMCwgICJmcGdhOjA2IiwgS01JMCwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwgICJmcGdhOjA3IiwgS01JMSwgICAgIE5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsICJmcGdhOjA5IiwgRUJfVUFSVDMsIE5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwgICJmcGdhOmFhY2kiLCAgQUFDSSwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UobW1jMCwgICJmcGdhOm1tYzAiLCAgTU1DSTAsICAgICZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLCAgImZwZ2E6a21pMCIsICBLTUkwLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRShrbWkxLCAgImZwZ2E6a21pMSIsICBLTUkxLCAgICAgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywgImZwZ2E6dWFydDMiLCBFQl9VQVJUMywgTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLCAgICJkZXY6MDAiLCAgRUJfU01DLCAgIE5VTEwpOwotQU1CQV9ERVZJQ0UoY2xjZCwgICJkZXY6MjAiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShkbWFjLCAgImRldjozMCIsICBETUFDLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLCAgImRldjplMCIsICBTQ1RMLCAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh3ZG9nLCAgImRldjplMSIsICBFQl9XQVRDSERPRywgTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwgImRldjplNCIsICBFQl9HUElPMCwgJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwgImRldjplNSIsICBHUElPMSwgICAgJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwgImRldjplNiIsICBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsICAgImRldjplOCIsICBFQl9SVEMsICAgTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLCAgImRldjpmMCIsICBTQ0ksICAgICAgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwgImRldjpmMSIsICBFQl9VQVJUMCwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwgImRldjpmMiIsICBFQl9VQVJUMSwgTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwgImRldjpmMyIsICBFQl9VQVJUMiwgTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLCAgImRldjpmNCIsICBFQl9TU1AsICAgTlVMTCk7CitBTUJBX0RFVklDRShzbWMsICAgImRldjpzbWMiLCAgIEVCX1NNQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsICAiZGV2OmNsY2QiLCAgRUJfQ0xDRCwgICZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLCAgImRldjpkbWFjIiwgIERNQUMsICAgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsICAiZGV2OnNjdGwiLCAgU0NUTCwgICAgIE5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywgICJkZXY6d2RvZyIsICBFQl9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwgImRldjpncGlvMCIsIEVCX0dQSU8wLCAmZ3BpbzBfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGdwaW8xLCAiZGV2OmdwaW8xIiwgR1BJTzEsICAgICZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsICJkZXY6Z3BpbzIiLCBHUElPMiwgICAgJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsICAgImRldjpydGMiLCAgIEVCX1JUQywgICBOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsICAiZGV2OnNjaTAiLCAgU0NJLCAgICAgIE5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsICJkZXY6dWFydDAiLCBFQl9VQVJUMCwgTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwgImRldjp1YXJ0MSIsIEVCX1VBUlQxLCBOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLCAiZGV2OnVhcnQyIiwgRUJfVUFSVDIsIE5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwgICJkZXY6c3NwMCIsICBFQl9TU1AsICAgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtNDE1LDYgKzQxNSw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19FQl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX0VCX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfZWJfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X2ViX3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKaW5kZXggMTdmYmIwZS4uN2ZiNzI2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTM3LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLXBiMTE3Ni5oPgpAQCAtMTcwLDI5ICsxNzAsMjkgQEAKICNkZWZpbmUgUEIxMTc2X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQjExNzZfVUFSVDMsCU5VTEwpOworQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6YWFjaSIsCUFBQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKG1tYzAsCSJmcGdhOm1tYzAiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShrbWkwLAkiZnBnYTprbWkwIiwJS01JMCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6a21pMSIsCUtNSTEsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQzLAkiZnBnYTp1YXJ0MyIsCVBCMTE3Nl9VQVJUMywJTlVMTCk7CiAKIC8qIERldkNoaXAgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OjAwIiwJUEIxMTc2X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7Ci1BTUJBX0RFVklDRShncGlvMCwJImRldjplNCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMSwJImRldjplNSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShncGlvMiwJImRldjplNiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShydGMsCSJkZXY6ZTgiLAlQQjExNzZfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQxLAkiZGV2OmYyIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQyLAkiZGV2OmYzIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQjExNzZfU1NQLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNtYywJImRldjpzbWMiLAlQQjExNzZfU01DLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjdGwsCSJkZXY6c2N0bCIsCVNDVEwsCQlOVUxMKTsKK0FNQkFfREVWSUNFKHdkb2csCSJkZXY6d2RvZyIsCVBCMTE3Nl9XQVRDSERPRywJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCMTE3Nl9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEIxMTc2X1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEIxMTc2X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEIxMTc2X1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEIxMTc2X1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCMTE3Nl9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCMTE3Nl9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotLy9BTUJBX0RFVklDRShkbWFjLAkiaXNzcDozMCIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKK0FNQkFfREVWSUNFKGNsY2QsCSJpc3NwOmNsY2QiLAlQQjExNzZfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKKy8vQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCVBCMTE3Nl9ETUFDLAlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIC8vCSZkbWFjX2RldmljZSwKQEAgLTI5MCw2ICsyOTAsMjggQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYjExNzZfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BiMTE3Nl9yZXNldChjaGFyIG1vZGUpCit7CisJdm9pZCBfX2lvbWVtICpoZHJfY3RybCA9IF9faW9fYWRkcmVzcyhSRUFMVklFV19TWVNfQkFTRSkgKworCQlSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VUOworCXZvaWQgX19pb21lbSAqcnN0X2hkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArCisJCVJFQUxWSUVXX1NZU19MT0NLX09GRlNFVDsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfU1lTX0xPQ0tWQUxfTUFTSywgcnN0X2hkcl9jdHJsKTsKKwlfX3Jhd193cml0ZWwoUkVBTFZJRVdfUEIxMTc2X1NZU19MT0NLVkFMX1JTVENUTCwgaGRyX2N0cmwpOworfQorCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExNzZfZml4dXAoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MsCisJCQkJICBzdHJ1Y3QgdGFnICp0YWdzLCBjaGFyICoqZnJvbSwKKwkJCQkgIHN0cnVjdCBtZW1pbmZvICptZW1pbmZvKQoreworCS8qCisJICogUmVhbFZpZXcgUEIxMTc2IG9ubHkgaGFzIDEyOE1CIG9mIFJBTSBtYXBwZWQgYXQgMC4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8xMjhNOworCW1lbWluZm8tPm5yX2JhbmtzID0gMTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X3BiMTE3Nl9pbml0KHZvaWQpCiB7CiAJaW50IGk7CkBAIC0zMTMsNiArMzM1LDcgQEAKICNpZmRlZiBDT05GSUdfTEVEUwogCWxlZHNfZXZlbnQgPSByZWFsdmlld19sZWRzX2V2ZW50OwogI2VuZGlmCisJcmVhbHZpZXdfcmVzZXQgPSByZWFsdmlld19wYjExNzZfcmVzZXQ7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoUkVBTFZJRVdfUEIxMTc2LCAiQVJNLVJlYWxWaWV3IFBCMTE3NiIpCkBAIC0zMjAsNiArMzQzLDcgQEAKIAkucGh5c19pbwk9IFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFLAogCS5pb19wZ19vZmZzdAk9IChJT19BRERSRVNTKFJFQUxWSUVXX1BCMTE3Nl9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19wYjExNzZfZml4dXAsCiAJLm1hcF9pbwkJPSByZWFsdmlld19wYjExNzZfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiMTE3Nl90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IGZkZDA0MmIuLjliYmJmYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9wbDA2MS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvbW1jaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wYjExbXAuaD4KQEAgLTE3MiwyOSArMTcyLDI5IEBACiAjZGVmaW5lIFBCMTFNUF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEIxMU1QX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQjExTVBfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCMTFNUF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6ZTUiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6ZTYiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UocnRjLAkiZGV2OmU4IiwJUEIxMU1QX1JUQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY2kwLAkiZGV2OmYwIiwJU0NJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MCwJImRldjpmMSIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MiwJImRldjpmMyIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7Ci1BTUJBX0RFVklDRShzc3AwLAkiZGV2OmY0IiwJUEIxMU1QX1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEIxMU1QX1NNQywJTlVMTCk7CitBTUJBX0RFVklDRShzY3RsLAkiZGV2OnNjdGwiLAlTQ1RMLAkJTlVMTCk7CitBTUJBX0RFVklDRSh3ZG9nLAkiZGV2Ondkb2ciLAlQQjExTVBfV0FUQ0hET0csIE5VTEwpOworQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6Z3BpbzAiLAlQQjExTVBfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCMTFNUF9SVEMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpzY2kwIiwJU0NJLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MCwJImRldjp1YXJ0MCIsCVBCMTFNUF9VQVJUMCwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MSwJImRldjp1YXJ0MSIsCVBCMTFNUF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCMTFNUF9VQVJUMiwJTlVMTCk7CitBTUJBX0RFVklDRShzc3AwLAkiZGV2OnNzcDAiLAlQQjExTVBfU1NQLAlOVUxMKTsKIAogLyogUHJpbWVjZWxscyBvbiB0aGUgTkVDIElTU1AgY2hpcCAqLwotQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6MjAiLAlQQjExTVBfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCMTFNUF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6ZG1hYyIsCURNQUMsCQlOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhbWJhX2RldmljZSAqYW1iYV9kZXZzW10gX19pbml0ZGF0YSA9IHsKIAkmZG1hY19kZXZpY2UsCkBAIC0yOTksNiArMjk5LDIxIEBACiAJLmluaXQJCT0gcmVhbHZpZXdfcGIxMW1wX3RpbWVyX2luaXQsCiB9OwogCitzdGF0aWMgdm9pZCByZWFsdmlld19wYjExbXBfcmVzZXQoY2hhciBtb2RlKQoreworCXZvaWQgX19pb21lbSAqaGRyX2N0cmwgPSBfX2lvX2FkZHJlc3MoUkVBTFZJRVdfU1lTX0JBU0UpICsKKwkJUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVDsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyoKKwkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgorCSAqIGluIHRoZSBzeXN0ZW0gRlBHQQorCSAqLworCXZhbCA9IF9fcmF3X3JlYWRsKGhkcl9jdHJsKTsKKwl2YWwgfD0gUkVBTFZJRVdfUEIxMU1QX1NZU19DVFJMX1JFU0VUX0NPTkZJR0NMUjsKKwlfX3Jhd193cml0ZWwodmFsLCBoZHJfY3RybCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCByZWFsdmlld19wYjExbXBfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtMzI0LDYgKzMzOSw3IEBACiAjaWZkZWYgQ09ORklHX0xFRFMKIAlsZWRzX2V2ZW50ID0gcmVhbHZpZXdfbGVkc19ldmVudDsKICNlbmRpZgorCXJlYWx2aWV3X3Jlc2V0ID0gcmVhbHZpZXdfcGIxMW1wX3Jlc2V0OwogfQogCiBNQUNISU5FX1NUQVJUKFJFQUxWSUVXX1BCMTFNUCwgIkFSTS1SZWFsVmlldyBQQjExTVBDb3JlIikKQEAgLTMzMSw2ICszNDcsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEIxMU1QX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X2ZpeHVwLAogCS5tYXBfaW8JCT0gcmVhbHZpZXdfcGIxMW1wX21hcF9pbywKIAkuaW5pdF9pcnEJPSBnaWNfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZyZWFsdmlld19wYjExbXBfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCmluZGV4IDcwYmJhOTkuLmZlODYxZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJhOC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTM0LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0xNjIsMjkgKzE2MiwyOSBAQAogI2RlZmluZSBQQkE4X1NTUF9ETUEJCXsgOSwgOCB9CiAKIC8qIEZQR0EgUHJpbWVjZWxscyAqLwotQU1CQV9ERVZJQ0UoYWFjaSwJImZwZ2E6MDQiLAlBQUNJLAkJTlVMTCk7Ci1BTUJBX0RFVklDRShtbWMwLAkiZnBnYTowNSIsCU1NQ0kwLAkJJnJlYWx2aWV3X21tYzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGttaTAsCSJmcGdhOjA2IiwJS01JMCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uoa21pMSwJImZwZ2E6MDciLAlLTUkxLAkJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6MDkiLAlQQkE4X1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQkE4X1VBUlQzLAlOVUxMKTsKIAogLyogRGV2Q2hpcCBQcmltZWNlbGxzICovCi1BTUJBX0RFVklDRShzbWMsCSJkZXY6MDAiLAlQQkE4X1NNQywJTlVMTCk7Ci1BTUJBX0RFVklDRShzY3RsLAkiZGV2OmUwIiwJU0NUTCwJCU5VTEwpOwotQU1CQV9ERVZJQ0Uod2RvZywJImRldjplMSIsCVBCQThfV0FUQ0hET0csIE5VTEwpOwotQU1CQV9ERVZJQ0UoZ3BpbzAsCSJkZXY6ZTQiLAlQQkE4X0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCQThfUlRDLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNjaTAsCSJkZXY6ZjAiLAlTQ0ksCQlOVUxMKTsKLUFNQkFfREVWSUNFKHVhcnQwLAkiZGV2OmYxIiwJUEJBOF9VQVJUMCwJTlVMTCk7Ci1BTUJBX0RFVklDRSh1YXJ0MSwJImRldjpmMiIsCVBCQThfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQkE4X1VBUlQyLAlOVUxMKTsKLUFNQkFfREVWSUNFKHNzcDAsCSJkZXY6ZjQiLAlQQkE4X1NTUCwJTlVMTCk7CitBTUJBX0RFVklDRShzbWMsCSJkZXY6c21jIiwJUEJBOF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJBOF9XQVRDSERPRywgTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCQThfR1BJTzAsCSZncGlvMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzEsCSJkZXY6Z3BpbzEiLAlHUElPMSwJCSZncGlvMV9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UoZ3BpbzIsCSJkZXY6Z3BpbzIiLAlHUElPMiwJCSZncGlvMl9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0UocnRjLAkiZGV2OnJ0YyIsCVBCQThfUlRDLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNjaTAsCSJkZXY6c2NpMCIsCVNDSSwJCU5VTEwpOworQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6dWFydDAiLAlQQkE4X1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJBOF9VQVJUMSwJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MiwJImRldjp1YXJ0MiIsCVBCQThfVUFSVDIsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpzc3AwIiwJUEJBOF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGRtYWMsCSJpc3NwOjMwIiwJRE1BQywJCU5VTEwpOworQU1CQV9ERVZJQ0UoY2xjZCwJImlzc3A6Y2xjZCIsCVBCQThfQ0xDRCwJJmNsY2RfcGxhdF9kYXRhKTsKK0FNQkFfREVWSUNFKGRtYWMsCSJpc3NwOmRtYWMiLAlETUFDLAkJTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmRtYWNfZGV2aWNlLApAQCAtMjk4LDYgKzI5OCw3IEBACiAJLnBoeXNfaW8JPSBSRUFMVklFV19QQkE4X1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJBOF9VQVJUMF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCiAJLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDAwMDAwMTAwLAorCS5maXh1cAkJPSByZWFsdmlld19maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BiYThfbWFwX2lvLAogCS5pbml0X2lycQk9IGdpY19pbml0X2lycSwKIAkudGltZXIJCT0gJnJlYWx2aWV3X3BiYThfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYnguYwppbmRleCBjZTZjNWQyLi5lYzM5NDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BieC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGJ4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KKyNpbmNsdWRlIDxsaW51eC9hbWJhL21tY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMzQsNyArMzUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTE4MiwyOSArMTgyLDI5IEBACiAjZGVmaW5lIFBCWF9TU1BfRE1BCQl7IDksIDggfQogCiAvKiBGUEdBIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKGFhY2ksCSJmcGdhOjA0IiwJQUFDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UobW1jMCwJImZwZ2E6MDUiLAlNTUNJMCwJCSZyZWFsdmlld19tbWMwX3BsYXRfZGF0YSk7Ci1BTUJBX0RFVklDRShrbWkwLAkiZnBnYTowNiIsCUtNSTAsCQlOVUxMKTsKLUFNQkFfREVWSUNFKGttaTEsCSJmcGdhOjA3IiwJS01JMSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDMsCSJmcGdhOjA5IiwJUEJYX1VBUlQzLAlOVUxMKTsKK0FNQkFfREVWSUNFKGFhY2ksCSJmcGdhOmFhY2kiLAlBQUNJLAkJTlVMTCk7CitBTUJBX0RFVklDRShtbWMwLAkiZnBnYTptbWMwIiwJTU1DSTAsCQkmcmVhbHZpZXdfbW1jMF9wbGF0X2RhdGEpOworQU1CQV9ERVZJQ0Uoa21pMCwJImZwZ2E6a21pMCIsCUtNSTAsCQlOVUxMKTsKK0FNQkFfREVWSUNFKGttaTEsCSJmcGdhOmttaTEiLAlLTUkxLAkJTlVMTCk7CitBTUJBX0RFVklDRSh1YXJ0MywJImZwZ2E6dWFydDMiLAlQQlhfVUFSVDMsCU5VTEwpOwogCiAvKiBEZXZDaGlwIFByaW1lY2VsbHMgKi8KLUFNQkFfREVWSUNFKHNtYywJImRldjowMCIsCVBCWF9TTUMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjplMCIsCVNDVEwsCQlOVUxMKTsKLUFNQkFfREVWSUNFKHdkb2csCSJkZXY6ZTEiLAlQQlhfV0FUQ0hET0csIAlOVUxMKTsKLUFNQkFfREVWSUNFKGdwaW8wLAkiZGV2OmU0IiwJUEJYX0dQSU8wLAkmZ3BpbzBfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8xLAkiZGV2OmU1IiwJR1BJTzEsCQkmZ3BpbzFfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKGdwaW8yLAkiZGV2OmU2IiwJR1BJTzIsCQkmZ3BpbzJfcGxhdF9kYXRhKTsKLUFNQkFfREVWSUNFKHJ0YywJImRldjplOCIsCVBCWF9SVEMsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc2NpMCwJImRldjpmMCIsCVNDSSwJCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDAsCSJkZXY6ZjEiLAlQQlhfVUFSVDAsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDEsCSJkZXY6ZjIiLAlQQlhfVUFSVDEsCU5VTEwpOwotQU1CQV9ERVZJQ0UodWFydDIsCSJkZXY6ZjMiLAlQQlhfVUFSVDIsCU5VTEwpOwotQU1CQV9ERVZJQ0Uoc3NwMCwJImRldjpmNCIsCVBCWF9TU1AsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc21jLAkiZGV2OnNtYyIsCVBCWF9TTUMsCU5VTEwpOworQU1CQV9ERVZJQ0Uoc2N0bCwJImRldjpzY3RsIiwJU0NUTCwJCU5VTEwpOworQU1CQV9ERVZJQ0Uod2RvZywJImRldjp3ZG9nIiwJUEJYX1dBVENIRE9HLCAJTlVMTCk7CitBTUJBX0RFVklDRShncGlvMCwJImRldjpncGlvMCIsCVBCWF9HUElPMCwJJmdwaW8wX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMSwJImRldjpncGlvMSIsCUdQSU8xLAkJJmdwaW8xX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShncGlvMiwJImRldjpncGlvMiIsCUdQSU8yLAkJJmdwaW8yX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShydGMsCSJkZXY6cnRjIiwJUEJYX1JUQywJTlVMTCk7CitBTUJBX0RFVklDRShzY2kwLAkiZGV2OnNjaTAiLAlTQ0ksCQlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQwLAkiZGV2OnVhcnQwIiwJUEJYX1VBUlQwLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQxLAkiZGV2OnVhcnQxIiwJUEJYX1VBUlQxLAlOVUxMKTsKK0FNQkFfREVWSUNFKHVhcnQyLAkiZGV2OnVhcnQyIiwJUEJYX1VBUlQyLAlOVUxMKTsKK0FNQkFfREVWSUNFKHNzcDAsCSJkZXY6c3NwMCIsCVBCWF9TU1AsCU5VTEwpOwogCiAvKiBQcmltZWNlbGxzIG9uIHRoZSBORUMgSVNTUCBjaGlwICovCi1BTUJBX0RFVklDRShjbGNkLAkiaXNzcDoyMCIsCVBCWF9DTENELAkmY2xjZF9wbGF0X2RhdGEpOwotQU1CQV9ERVZJQ0UoZG1hYywJImlzc3A6MzAiLAlETUFDLAkJTlVMTCk7CitBTUJBX0RFVklDRShjbGNkLAkiaXNzcDpjbGNkIiwJUEJYX0NMQ0QsCSZjbGNkX3BsYXRfZGF0YSk7CitBTUJBX0RFVklDRShkbWFjLAkiaXNzcDpkbWFjIiwJRE1BQywJCU5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0gewogCSZkbWFjX2RldmljZSwKQEAgLTMwNCw2ICszMDQsMjYgQEAKIAkuaW5pdAkJPSByZWFsdmlld19wYnhfdGltZXJfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlYWx2aWV3X3BieF9maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYywgc3RydWN0IHRhZyAqdGFncywKKwkJCSAgICAgICBjaGFyICoqZnJvbSwgc3RydWN0IG1lbWluZm8gKm1lbWluZm8pCit7CisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCS8qCisJICogTWVtb3J5IGNvbmZpZ3VyYXRpb24gd2l0aCBTUEFSU0VNRU0gZW5hYmxlZCBvbiBSZWFsVmlldyBQQlggKHNlZQorCSAqIGFzbS9tYWNoL21lbW9yeS5oIGZvciBtb3JlIGluZm9ybWF0aW9uKS4KKwkgKi8KKwltZW1pbmZvLT5iYW5rWzBdLnN0YXJ0ID0gMDsKKwltZW1pbmZvLT5iYW5rWzBdLnNpemUgPSBTWl8yNTZNOworCW1lbWluZm8tPmJhbmtbMV0uc3RhcnQgPSAweDIwMDAwMDAwOworCW1lbWluZm8tPmJhbmtbMV0uc2l6ZSA9IFNaXzUxMk07CisJbWVtaW5mby0+YmFua1syXS5zdGFydCA9IDB4ODAwMDAwMDA7CisJbWVtaW5mby0+YmFua1syXS5zaXplID0gU1pfMjU2TTsKKwltZW1pbmZvLT5ucl9iYW5rcyA9IDM7CisjZWxzZQorCXJlYWx2aWV3X2ZpeHVwKG1kZXNjLCB0YWdzLCBmcm9tLCBtZW1pbmZvKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVhbHZpZXdfcGJ4X2luaXQodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTM0NSw2ICszNjUsNyBAQAogCS5waHlzX2lvCT0gUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKElPX0FERFJFU1MoUkVBTFZJRVdfUEJYX1VBUlQwX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCisJLmZpeHVwCQk9IHJlYWx2aWV3X3BieF9maXh1cCwKIAkubWFwX2lvCQk9IHJlYWx2aWV3X3BieF9tYXBfaW8sCiAJLmluaXRfaXJxCT0gZ2ljX2luaXRfaXJxLAogCS50aW1lcgkJPSAmcmVhbHZpZXdfcGJ4X3RpbWVyLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwppbmRleCBkOGMwMjNkLi4zZDRlOWRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZwpAQCAtNzcsNiArNzcsNyBAQAogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgSFAgSVBBUSBIMTk0MAogCkBAIC04OSw2ICs5MCw3IEBACiAJYm9vbCAiQWNlciBOMzAgZmFtaWx5IgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcHQgZm9yIHRoZSBBY2VyIE4zMCwgQWNlciBOMzUsCiAJICBOYXZtYW4gUGlONTcwLCBZYWt1bW8gQWxwaGFYIG9yIEFpcmlzIE5DMDUgUERBcy4KQEAgLTEwMyw2ICsxMDUsNyBAQAogCXNlbGVjdCBTM0MyNFhYX0RDTEsKIAlzZWxlY3QgSVNBCiAJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgRUIyNDEwSVRYCiAJICBkZXZlbG9wbWVudCBib2FyZCAoYWxzbyBrbm93biBhcyBCQVNUKQpAQCAtMTExLDYgKzExNCw3IEBACiAgCWJvb2wgIk5leFZpc2lvbiBPVE9NIEJvYXJkIgogIAlzZWxlY3QgQ1BVX1MzQzI0MTAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE9UT00gYm9hcmQKIApAQCAtMTU0LDYgKzE1OCw3IEBACiAJYm9vbCAiUVQyNDEwIgogCXNlbGVjdCBDUFVfUzNDMjQxMAogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFybXpvbmUgUVQyNDEwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCmluZGV4IDc5NzRhZmMuLjk2NjRlMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9kbWEuaAppbmRleCBjM2EyNjI5Li45MmUyNjg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTExMCw2ICsxMTAsOCBAQAogCQkJCQkgICAgKiB3YWl0aW5nIGZvciByZWxvYWRzICovCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9BVVRPU1RBUlQgICAgKDE8PDEpICAgLyogYXV0by1zdGFydCBpZiBidWZmZXIgcXVldWVkICovCiAKKyNkZWZpbmUgUzNDMjQxMF9ETUFGX0NJUkNVTEFSCSgxIDw8IDIpCS8qIG5vIGNpcmN1bGFyIGRtYSBzdXBwb3J0ICovCisKIC8qIGRtYSBidWZmZXIgKi8KIAogc3RydWN0IHMzYzI0MTBfZG1hX2J1ZjsKQEAgLTE5NCw0ICsxOTYsOSBAQAogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZG1hX2RldmljZV90OwogCitzdGF0aWMgaW5saW5lIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCmluZGV4IDM1YzFiZGUuLmMyYmRjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJYm9vbCAiTG9naXRlY2ggSml2ZSIKIAlzZWxlY3QgQ1BVX1MzQzI0MTIKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIExvZ2l0ZWNoIEppdmUuCiAKQEAgLTYxLDYgKzYyLDcgQEAKIAlzZWxlY3QgTUFDSF9TM0MyNDEzCiAJc2VsZWN0IE1BQ0hfU01ESwogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBTTURLMjQxMwogCkBAIC04NCw2ICs4Niw3IEBACiAJYm9vbCAiVk1TVE1TIgogCXNlbGVjdCBDUFVfUzNDMjQxMgogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBWU1RNUyBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCmluZGV4IDhhZTFiMjguLmE4YjY5ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnCkBAIC00OCw2ICs0OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xMjAwMDAwMAogCXNlbGVjdCBTM0MyNDEwX0lPVElNSU5HIGlmIFMzQzI0NDBfQ1BVRlJFUQogCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgU2ltdGVjIElNMjQ0MEQyMCBtb2R1bGUsIGFsc28KIAkgIGtub3duIGFzIHRoZSBPc2lyaXMuCkBAIC01Nyw2ICs1OCw3IEBACiAJc2VsZWN0IENQVV9TM0MyNDQwCiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBQTV9IMTk0MCBpZiBQTQorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEhQIGlQQVEgcngzNzE1LgogCkBAIC02Niw2ICs2OCw3IEBACiAJc2VsZWN0IFMzQzI0NDBfWFRBTF8xNjkzNDQwMAogCXNlbGVjdCBNQUNIX1NNREsKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNNREsyNDQwLgogCkBAIC03NCw2ICs3Nyw3IEBACiAgCXNlbGVjdCBDUFVfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAgCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBOZXggVmlzaW9uIE5FWENPREVSIDI0NDAgTGlnaHQgQm9hcmQKIApAQCAtODgsNiArOTIsNyBAQAogCWJvb2wgIkF2YW50ZWNoIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZCIKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAorCXNlbGVjdCBTM0NfREVWX05BTkQKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIEFUMjQ0MEVWQiBkZXZlbG9wbWVudCBib2FyZAogCkBAIC05Nyw2ICsxMDIsOCBAQAogCXNlbGVjdCBFRVBST01fQVQyNAogCXNlbGVjdCBMRURTX1RSSUdHRVJfQkFDS0xJR0hUCiAJc2VsZWN0IFNORF9TM0MyNFhYX1NPQ19TM0MyNFhYX1VEQTEzNFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCBzdXBwb3J0IGZvciB0aGUgTUlOSTI0NDAuIElzIGEgMTBjbSB4IDEwY20gYm9hcmQKIAkgIGF2YWlsYWJsZSB2aWEgdmFyaW91cyBzb3VyY2VzLiBJdCBjYW4gY29tZSB3aXRoIGEgMy41IiBvciA3IiB0b3VjaCBMQ0QuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYwppbmRleCBlYzcxYTY5Li4xYzMzODJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCS50eXBlCQk9IChTM0MyNDEwX0xDRENPTjFfVEZUMTZCUFAgfFwKIAkJCSAgIFMzQzI0MTBfTENEQ09OMV9URlQpCiAKLXN0cnVjdCBzM2MyNDEwZmJfZGlzcGxheSBtaW5pMjQ0MF9sY2RfY2ZnW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX2Rpc3BsYXkgbWluaTI0NDBfbGNkX2NmZ1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewkvKiBtaW5pMjQ0MCArIDMuNSIgVEZUICsgdG91Y2hzY3JlZW4gKi8KIAkJX0xDRF9ERUNMQVJFKAogCQkJNywJCQkvKiBUaGUgMy41IGlzIHF1aXRlIGZhc3QgKi8KQEAgLTE5MSw3ICsxOTEsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dQQ0NPTl9NQVNLKHgpCSgzIDw8ICgoeCkgKiAyKSkKICNkZWZpbmUgUzNDMjQxMF9HUERDT05fTUFTSyh4KQkoMyA8PCAoKHgpICogMikpCiAKLXN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIG1pbmkyNDQwX2ZiX2luZm8gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMGZiX21hY2hfaW5mbyBtaW5pMjQ0MF9mYl9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLmRpc3BsYXlzCSA9ICZtaW5pMjQ0MF9sY2RfY2ZnWzBdLCAvKiBub3QgY29uc3RhbnQhIHNlZSBpbml0ICovCiAJLm51bV9kaXNwbGF5cwkgPSAxLAogCS5kZWZhdWx0X2Rpc3BsYXkgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwppbmRleCBmNWFmMjEyLi43NzBiNzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogICAgICAgIGJvb2wgIlNNREs2NDAwIgogCXNlbGVjdCBDUFVfUzNDNjQwMAogCXNlbGVjdCBTM0NfREVWX0hTTU1DCisJc2VsZWN0IFMzQ19ERVZfTkFORAogCXNlbGVjdCBTM0M2NDAwX1NFVFVQX1NESENJCiAJaGVscAogCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggMTA2NzYxOS4uNjcyMzg2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC01OCwxMiArNTgsOSBAQAogCURNQUNIX01BWAkJLyogdGhlIGVuZCAqLwogfTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCitzdGF0aWMgX19pbmxpbmVfXyBib29sIHMzY19kbWFfaGFzX2NpcmN1bGFyKHZvaWQpCiB7Ci0JLyogd2Ugd2lsbCBiZSBzdXBwb3J0aW5nIGNpcnVjbGFyIGJ1ZmZlcnMgYXMgc29vbiBhcyB3ZSBoYXZlIERNQQotCSAqIGVuZ2luZSBzdXBwb3J0LgotCSAqLwotCXJldHVybiAxOworCXJldHVybiB0cnVlOwogfQogCiAjZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkJKDEgPDwgMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKaW5kZXggZjlkMGYwOS4uNzJkNGIxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcKQEAgLTc3LDYgKzc3LDcgQEAKIAlkZXBlbmRzIG9uIE1BQ0hfU01ESzY0MTAKIAlzZWxlY3QgUkVHVUxBVE9SCiAJc2VsZWN0IFJFR1VMQVRPUl9XTTgzNTAKKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBNjQKIAlzZWxlY3QgTUZEX1dNODM1MF9JMkMKIAlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCiAJc2VsZWN0IE1GRF9XTTgzNTBfQ09ORklHX01PREVfMwpAQCAtMTAyLDYgKzEwMyw3IEBACiAJYm9vbCAiQWlyZ29vIEhNVCIKIAlzZWxlY3QgQ1BVX1MzQzY0MTAKIAlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX05BTkQKIAlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAogCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCiAJc2VsZWN0IEhBVkVfUFdNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwppbmRleCBlYTUxZGJlLi45ZjFhMjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKQEAgLTMyMCw2ICszMjAsOSBAQAogewogCWludCBpOwogCisJLyogQ29uZmlndXJlIHRoZSBJUlEgbGluZSAqLworCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUE4oMTIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwogCS8qIEluc3RhbnRpYXRlIHRoZSByZWd1bGF0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod20xMTkwX3JlZ3VsYXRvcnMpOyBpKyspCiAJCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKaW5kZXggODFmZmZmNy4uNGU1YzA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCkBAIC03MSwxMSArNzEsNiBAQAogCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzNjAwPgogCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgogCi1jb25maWcgU0ExMTAwX0gzWFhYCi0JYm9vbAotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMAotCWRlZmF1bHQgeQotCiBjb25maWcgU0ExMTAwX0JBREdFNAogCWJvb2wgIkhQIExhYnMgQmFkZ2VQQUQgNCIKIAlzZWxlY3QgU0ExMTExCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IDhhNTU0NmUuLmJiN2I4MTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC0yNSw2ICsyNSw3IEBACiAKIG9iai0kKENPTkZJR19TQTExMDBfQ09MTElFKQkJKz0gY29sbGllLm8KIAorb2JqLSQoQ09ORklHX1NBMTEwMF9IMzEwMCkJCSs9IGgzNjAwLm8KIG9iai0kKENPTkZJR19TQTExMDBfSDM2MDApCQkrPSBoMzYwMC5vCiAKIG9iai0kKENPTkZJR19TQTExMDBfSEFDS0tJVCkJCSs9IGhhY2traXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwppbmRleCA5NWY5YzVhLi5jYjQ1MjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9kbWEuYwpAQCAtMzksNyArMzksNyBAQAogCiBzdGF0aWMgc2ExMTAwX2RtYV90IGRtYV9jaGFuW1NBMTEwMF9ETUFfQ0hBTk5FTFNdOwogCi1zdGF0aWMgc3BpbmxvY2tfdCBkbWFfbGlzdF9sb2NrOworc3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfbGlzdF9sb2NrKTsKIAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCA5NWQ5MmU4Li5iOWNiYjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJLnNldF9tb2RlCT0gc2ExMTAwX29zbXIwX3NldF9tb2RlLAogfTsKIAotc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3Njcih2b2lkKQorc3RhdGljIGN5Y2xlX3Qgc2ExMTAwX3JlYWRfb3NjcihzdHJ1Y3QgY2xvY2tzb3VyY2UgKnMpCiB7CiAJcmV0dXJuIE9TQ1I7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCmluZGV4IDMzN2I5YWEuLjgwMWIyMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnCkBAIC04MSw2ICs4MSwxOCBAQAogCQlNZW1vcnkgSW50ZXJmYWNlKSBmcm9tIGJvdGggZnJvbSBhY2Nlc3MgYW5kIGFwcGxpY2F0aW9uCiAJCXNpZGUuCiAKK2NvbmZpZyBNQUNIX1UzMDBfU1BJRFVNTVkKKwlib29sICJTU1AvU1BJIGR1bW15IGNoaXAiCisJc2VsZWN0IFNQSQorCXNlbGVjdCBTUElfTUFTVEVSCisJc2VsZWN0IFNQSV9QTDAyMgorCWhlbHAKKwkJVGhpcyBjcmVhdGVzIGEgc21hbGwga2VybmVsIG1vZHVsZSB0aGF0IGNyZWF0ZXMgYSBkdW1teQorCQlTUEkgZGV2aWNlIHRvIGJlIHVzZWQgZm9yIGxvb3BiYWNrIHRlc3RzLiBSZWd1bGFybHkgdXNlZAorCQl0byB0ZXN0IHJlZmVyZW5jZSBkZXNpZ25zLiBJZiB5b3UncmUgbm90IHRlc3RpbmcgU1BJLAorCQl5b3UgZG9uJ3QgbmVlZCBpdC4gU2VsZWN0aW5nIHRoaXMgd2lsbCBhY3RpdmF0ZSB0aGUKKwkJU1BJIGZyYW1ld29yayBhbmQgQVJNIFBMMDIyIHN1cHBvcnQuCisKIGNvbW1lbnQgIkFsbCB0aGUgc2V0dGluZ3MgYmVsb3cgbXVzdCBtYXRjaCB0aGUgYm9vdGxvYWRlcidzIHNldHRpbmdzIgogCiBjb25maWcgTUFDSF9VMzAwX0FDQ0VTU19NRU1fU0laRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC11MzAwL01ha2VmaWxlCmluZGV4IDI0OTUwZTAuLjg4NWI1YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvTWFrZWZpbGUKQEAgLTksMyArOSw2IEBACiAKIG9iai0kKENPTkZJR19BUkNIX1UzMDApCSAgICAgICAgICArPSB1MzAwLm8KIG9iai0kKENPTkZJR19NTUMpICAgICAgICAgICAgICAgICArPSBtbWMubworb2JqLSQoQ09ORklHX1NQSV9QTDAyMikgICAgICAgICAgICs9IHNwaS5vCitvYmotJChDT05GSUdfTUFDSF9VMzAwX1NQSURVTU1ZKSAgKz0gZHVtbXlzcGljaGlwLm8KK29iai0kKENPTkZJR19JMkNfU1RVMzAwKSAgICAgICAgICArPSBpMmMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKaW5kZXggMmU5YjhjYy4uNjUzZTI1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCkBAIC0zMiw2ICszMiw4IEBACiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgIm1tYy5oIgorI2luY2x1ZGUgInNwaS5oIgorI2luY2x1ZGUgImkyYy5oIgogCiAvKgogICogU3RhdGljIEkvTyBtYXBwaW5ncyB0aGF0IGFyZSBuZWVkZWQgZm9yIGJvb3RpbmcgdGhlIFUzMDAgcGxhdGZvcm1zLiBUaGUKQEAgLTM3OCwxNCArMzgwLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMwX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAwLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMwX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMF9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpMmMxX2RldmljZSA9IHsKLQkubmFtZSA9ICJzdGRkY2kyYyIsCisJLm5hbWUgPSAic3R1MzAwIiwKIAkuaWQgPSAxLAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpMmMxX3Jlc291cmNlcyksCiAJLnJlc291cmNlID0gaTJjMV9yZXNvdXJjZXMsCkBAIC00MDYsNyArNDA4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicnRjMCIsCisJLm5hbWUgPSAicnRjLWNvaDkwMTMzMSIsCiAJLmlkID0gLTEsCiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IHJ0Y19yZXNvdXJjZXMsCkBAIC02MTEsNiArNjEzLDggQEAKIAkvKiBXYWl0IGZvciB0aGUgUExMMjA4IHRvIGxvY2sgaWYgbm90IGxvY2tlZCBpbiB5ZXQgKi8KIAl3aGlsZSAoIShyZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX0NTUikgJgogCQkgVTMwMF9TWVNDT05fQ1NSX1BMTDIwOF9MT0NLX0lORCkpOworCS8qIEluaXRpYWxpemUgU1BJIGRldmljZSB3aXRoIHNvbWUgYm9hcmQgc3BlY2lmaWNzICovCisJdTMwMF9zcGlfaW5pdCgmcGwwMjJfZGV2aWNlKTsKIAogCS8qIFJlZ2lzdGVyIHRoZSBBTUJBIGRldmljZXMgaW4gdGhlIEFNQkEgYnVzIGFic3RyYWN0aW9uIGxheWVyICovCiAJdTMwMF9jbG9ja19wcmltZWNlbGxzKCk7CkBAIC02MjIsNiArNjI2LDEyIEBACiAKIAl1MzAwX2Fzc2lnbl9waHlzbWVtKCk7CiAKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBJMkMgYnVzZXMgKi8KKwl1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKCk7CisKKwkvKiBSZWdpc3RlciBzdWJkZXZpY2VzIG9uIHRoZSBTUEkgYnVzICovCisJdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcygpOworCiAJLyogUmVnaXN0ZXIgdGhlIHBsYXRmb3JtIGRldmljZXMgKi8KIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldnMpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2R1bW15c3BpY2hpcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MmY5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKQEAgLTAsMCArMSwyOTAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvZHVtbXlzcGljaGlwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKiBUaGlzIGlzIGEgZHVtbXkgbG9vcGJhY2sgU1BJICJjaGlwIiB1c2VkIGZvciB0ZXN0aW5nIFNQSS4KKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisvKgorICogV0FSTklORyEgRG8gbm90IGluY2x1ZGUgdGhpcyBwbDAyMi1zcGVjaWZpYyBjb250cm9sbGVyIGhlYWRlcgorICogZm9yIGFueSBnZW5lcmljIGRyaXZlci4gSXQgaXMgb25seSBkb25lIGluIHRoaXMgZHVtbXkgY2hpcAorICogYmVjYXVzZSB3ZSBhbHRlciB0aGUgY2hpcCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIHRlc3Qgc29tZQorICogZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBsb29wYmFjayBkZXZpY2UuIE5vcm1hbCBjaGlwIGNvbmZpZ3MKKyAqIHNoYWxsIGJlIFNUQVRJQyBhbmQgbm90IGFsdGVyZWQgYnkgdGhlIGRyaXZlciEKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwMjIuaD4KKworc3RydWN0IGR1bW15IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7Cit9OworCisjZGVmaW5lIERNQV9URVNUX1NJWkUgMjA0OAorCisvKiBXaGVuIHdlIGNhdCAvc3lzL2J1cy9zcGkvZGV2aWNlcy9zcGkwLjAvbG9vcHRlc3QgdGhpcyB3aWxsIGJlIHRyaWdnZXJlZCAqLworc3RhdGljIHNzaXplX3QgZHVtbXlfbG9vcHRlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwkvKgorCSAqIFdBUk5JTkchIERvIG5vdCBkZXJlZmVyZW5jZSB0aGUgY2hpcC1zcGVjaWZpYyBkYXRhIGluIGFueSBub3JtYWwKKwkgKiBkcml2ZXIgZm9yIGEgY2hpcC4gSXQgaXMgdXN1YWxseSBTVEFUSUMgYW5kIHNoYWxsIG5vdCBiZSByZWFkCisJICogb3Igd3JpdHRlbiB0by4gWW91ciBjaGlwIGRyaXZlciBzaG91bGQgTk9UIGRlcGVuZCBvbiBmaWVsZHMgaW4gdGhpcworCSAqIHN0cnVjdCwgdGhpcyBpcyBqdXN0IHVzZWQgaGVyZSB0byBhbHRlciB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjaGlwCisJICogaW4gb3JkZXIgdG8gcGVyZm9ybSB0ZXN0cy4KKwkgKi8KKwlzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgKmNoaXBfaW5mbyA9IHNwaS0+Y29udHJvbGxlcl9kYXRhOworCWludCBzdGF0dXM7CisJdTggdHhidWZbMTRdID0gezB4REUsIDB4QUQsIDB4QkUsIDB4RUYsIDB4MkIsIDB4QUQsCisJCQkweENBLCAweEZFLCAweEJBLCAweEJFLCAweEIxLCAweDA1LAorCQkJMHhGMCwgMHgwRH07CisJdTggcnhidWZbMTRdOworCXU4ICpiaWd0eGJ1Zl92aXJ0dWFsOworCXU4ICpiaWdyeGJ1Zl92aXJ0dWFsOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcF9kdW1teS0+bG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwliaWd0eGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmlndHhidWZfdmlydHVhbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwliaWdyeGJ1Zl92aXJ0dWFsID0ga21hbGxvYyhETUFfVEVTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKworCS8qIEZpbGwgVFhCVUYgd2l0aCBzb21lIGhhcHB5IHBhdHRlcm4gKi8KKwltZW1zZXQoYmlndHhidWZfdmlydHVhbCwgMHhBQSwgRE1BX1RFU1RfU0laRSk7CisKKwkvKgorCSAqIEZvcmNlIGNoaXAgdG8gOCBiaXQgbW9kZQorCSAqIFdBUk5JTkc6IE5FVkVSIERPIFRISVMgSU4gUkVBTCBEUklWRVIgQ09ERSwgVEhJUyBTSE9VTEQgQkUgU1RBVElDIQorCSAqLworCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU184OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwkvKiBOb3cgcnVuIHRoZSB0ZXN0cyBmb3IgOGJpdCBtb2RlICovCisJcHJfaW5mbygiU2ltcGxlIHRlc3QgMTogd3JpdGUgMHhBQSBieXRlLCByZWFkIGJhY2sgZ2FyYmFnZSBieXRlICIKKwkJImluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3c4cjgoc3BpLCAweEFBKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCAxOiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiB3cml0ZSA4IGJ5dGVzLCByZWFkIGJhY2sgOCBieXRlcyBnYXJiYWdlICIKKwkJImluIDhiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMjogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAzOiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gOGJpdCBtb2RlIChzZWUgaWYgd2Ugb3ZlcmZsb3cgRklGTylcbiIpOworCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCAmdHhidWZbMF0sIDE0LCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgMzogRkFJTFVSRTogZmFpbGVkIHdpdGggc3RhdHVzICVkICIKKwkJCSAgICIocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDM6IFNVQ0NFU1MhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQ6IHdyaXRlIDggYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgcmVhZCA4ICIKKwkJImJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDE6IEZBSUxVUkU6IHNwaV93cml0ZSgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA0IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDQgc3RlcCAyOiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiB3cml0ZSAxNCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCByZWFkICIKKwkJIjE0IGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJnR4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBGQUlMVVJFOiBzcGlfd3JpdGUoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDUgc3RlcCAxOiBTVUNDRVNTIVxuIik7CisJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCAmcnhidWZbMF0sIDE0KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgNSBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA1OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2OiB3cml0ZSAlZCBieXRlcyB3aXRoIHNwaV93cml0ZSgpLCAiCisJCSJyZWFkICVkIGJ5dGVzIGdhcmJhZ2Ugd2l0aCBzcGlfcmVhZCgpIGluIDhiaXQgbW9kZVxuIiwKKwkJRE1BX1RFU1RfU0laRSwgRE1BX1RFU1RfU0laRSk7CisJc3RhdHVzID0gc3BpX3dyaXRlKHNwaSwgJmJpZ3R4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMTogU1VDQ0VTUyFcbiIpOworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCA2IHN0ZXAgMjogRkFJTFVSRTogc3BpX3JlYWQoKSAiCisJCQkgICAiZmFpbGVkIHdpdGggc3RhdHVzICVkIChwcm9iYWJseSBGSUZPIG92ZXJydW4pXG4iLAorCQkJICAgc3RhdHVzKTsKKwllbHNlCisJCXByX2luZm8oIlNpbXBsZSB0ZXN0IDY6IFNVQ0NFU1MhXG4iKTsKKworCisJLyoKKwkgKiBGb3JjZSBjaGlwIHRvIDE2IGJpdCBtb2RlCisJICogV0FSTklORzogTkVWRVIgRE8gVEhJUyBJTiBSRUFMIERSSVZFUiBDT0RFLCBUSElTIFNIT1VMRCBCRSBTVEFUSUMhCisJICovCisJY2hpcF9pbmZvLT5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzE2OworCS8qIFlvdSBzaG91bGQgTk9UIERPIFRISVMgRUlUSEVSICovCisJc3BpLT5tYXN0ZXItPnNldHVwKHNwaSk7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiB3cml0ZSAweEFBIGJ5dGUsIHJlYWQgYmFjayBnYXJiYWdlIGJ5dGUgIgorCQkiaW4gMTZiaXQgYnVzIG1vZGVcbiIpOworCXN0YXR1cyA9IHNwaV93OHI4KHNwaSwgMHhBQSk7CisJaWYgKHN0YXR1cyA9PSAtRUlPKQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA3OiBTVUNDRVNTISAoZXhwZWN0ZWQgZmFpbHVyZSB3aXRoICIKKwkJCSJzdGF0dXMgRUlPKVxuIik7CisJZWxzZSBpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2lwbGUgdGVzdCA3OiBGQUlMVVJFOiBzcGlfd3JpdGVfdGhlbl9yZWFkICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl93YXJuaW5nKCJTaXBsZSB0ZXN0IDc6IEZBSUxVUkU6IHNwaV93cml0ZV90aGVuX3JlYWQgIgorCQkJICAgInN1Y2NlZWRlZCBidXQgaXQgd2FzIGV4cGVjdGVkIHRvIGZhaWwhXG4iKTsKKworCXByX2luZm8oIlNpbXBsZSB0ZXN0IDg6IHdyaXRlIDggYnl0ZXMsIHJlYWQgYmFjayA4IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoZnVsbCBGSUZPKVxuIik7CisJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksICZ0eGJ1ZlswXSwgOCwgJnJ4YnVmWzBdLCA4KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcHJfd2FybmluZygiU2ltcGxlIHRlc3QgODogRkFJTFVSRTogc3BpX3dyaXRlX3RoZW5fcmVhZCgpICIKKwkJCSAgICJmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA4OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiB3cml0ZSAxNCBieXRlcywgcmVhZCBiYWNrIDE0IGJ5dGVzIGdhcmJhZ2UgIgorCQkiaW4gMTZiaXQgbW9kZSAoc2VlIGlmIHdlIG92ZXJmbG93IEZJRk8pXG4iKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJnR4YnVmWzBdLCAxNCwgJnJ4YnVmWzBdLCAxNCk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDk6IEZBSUxVUkU6IGZhaWxlZCB3aXRoIHN0YXR1cyAlZCAiCisJCQkgICAiKHByb2JhYmx5IEZJRk8gb3ZlcnJ1bilcbiIsIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCA5OiBTVUNDRVNTIVxuIik7CisKKwlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogd3JpdGUgJWQgYnl0ZXMgd2l0aCBzcGlfd3JpdGUoKSwgIgorCSAgICAgICAicmVhZCAlZCBieXRlcyBnYXJiYWdlIHdpdGggc3BpX3JlYWQoKSBpbiAxNmJpdCBtb2RlXG4iLAorCSAgICAgICBETUFfVEVTVF9TSVpFLCBETUFfVEVTVF9TSVpFKTsKKwlzdGF0dXMgPSBzcGlfd3JpdGUoc3BpLCAmYmlndHhidWZfdmlydHVhbFswXSwgRE1BX1RFU1RfU0laRSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXByX3dhcm5pbmcoIlNpbXBsZSB0ZXN0IDEwIHN0ZXAgMTogRkFJTFVSRTogc3BpX3dyaXRlKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDE6IFNVQ0NFU1MhXG4iKTsKKworCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgJmJpZ3J4YnVmX3ZpcnR1YWxbMF0sIERNQV9URVNUX1NJWkUpOworCWlmIChzdGF0dXMgPCAwKQorCQlwcl93YXJuaW5nKCJTaW1wbGUgdGVzdCAxMCBzdGVwIDI6IEZBSUxVUkU6IHNwaV9yZWFkKCkgIgorCQkJICAgImZhaWxlZCB3aXRoIHN0YXR1cyAlZCAocHJvYmFibHkgRklGTyBvdmVycnVuKVxuIiwKKwkJCSAgIHN0YXR1cyk7CisJZWxzZQorCQlwcl9pbmZvKCJTaW1wbGUgdGVzdCAxMDogU1VDQ0VTUyFcbiIpOworCisJc3RhdHVzID0gc3ByaW50ZihidWYsICJsb29wIHRlc3QgY29tcGxldGVcbiIpOworCWtmcmVlKGJpZ3J4YnVmX3ZpcnR1YWwpOworCWtmcmVlKGJpZ3R4YnVmX3ZpcnR1YWwpOworIG91dDoKKwltdXRleF91bmxvY2soJnBfZHVtbXktPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsb29wdGVzdCwgU19JUlVHTywgZHVtbXlfbG9vcHRlc3QsIE5VTEwpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbDAyMl9kdW1teV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBkdW1teSAqcF9kdW1teTsKKwlpbnQgc3RhdHVzOworCisJZGV2X2luZm8oJnNwaS0+ZGV2LCAicHJvYmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKworCXBfZHVtbXkgPSBremFsbG9jKHNpemVvZiAqcF9kdW1teSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwX2R1bW15KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHBfZHVtbXkpOworCW11dGV4X2luaXQoJnBfZHVtbXktPmxvY2spOworCisJLyogc3lzZnMgaG9vayAqLworCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3BpLT5kZXYsICZkZXZfYXR0cl9sb29wdGVzdCk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZGJnKCZzcGktPmRldiwgImRldmljZV9jcmVhdGVfZmlsZSBsb29wdGVzdCBmYWlsdXJlLlxuIik7CisJCWdvdG8gb3V0X2Rldl9jcmVhdGVfbG9vcHRlc3RfZmFpbGVkOworCX0KKworCXJldHVybiAwOworCitvdXRfZGV2X2NyZWF0ZV9sb29wdGVzdF9mYWlsZWQ6CisJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7CisJa2ZyZWUocF9kdW1teSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcGwwMjJfZHVtbXlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGR1bW15ICpwX2R1bW15ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlkZXZfaW5mbygmc3BpLT5kZXYsICJyZW1vdmluZyBkdW1teSBTUEkgZGV2aWNlXG4iKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnNwaS0+ZGV2LCAmZGV2X2F0dHJfbG9vcHRlc3QpOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOworCWtmcmVlKHBfZHVtbXkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBwbDAyMl9kdW1teV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAic3BpLWR1bW15IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJPSBwbDAyMl9kdW1teV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGwwMjJfZHVtbXlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBsMDIyX2luaXRfZHVtbXkodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmcGwwMjJfZHVtbXlfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBsMDIyX2V4aXRfZHVtbXkodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnBsMDIyX2R1bW15X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBsMDIyX2luaXRfZHVtbXkpOworbW9kdWxlX2V4aXQocGwwMjJfZXhpdF9kdW1teSk7CisKK01PRFVMRV9BVVRIT1IoIkxpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBMMDIyIFNTUC9TUEkgRFVNTVkgTGludXggZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL2dwaW8uYwppbmRleCAzMDhjZGIxLi4wYjM1ODI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMKQEAgLTI1LDExICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0vKiBOZWVkIGFjY2VzcyB0byBTWVNDT04gcmVnaXN0ZXJzIGZvciBQQURtdXhpbmcgKi8KLSNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCi0jaW5jbHVkZSAicGFkbXV4LmgiCi0KIC8qIFJlZmVyZW5jZSB0byBHUElPIGJsb2NrIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrOwogCkBAIC0yODYsNiArMjgxLDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdwaW9fdW5yZWdpc3Rlcl9jYWxsYmFjayk7CiAKKy8qIE5vbi16ZXJvIG1lYW5zIHZhbGlkICovCitpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKQoreworCWlmIChudW1iZXIgPj0gMCAmJgorCSAgICBudW1iZXIgPCAoVTMwMF9HUElPX05VTV9QT1JUUyAqIFUzMDBfR1BJT19QSU5TX1BFUl9QT1JUKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGdwaW9faXNfdmFsaWQpOworCiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQogewogCWlmIChncGlvX3BpbltncGlvXS51c2VycykKQEAgLTYwNiwxNCArNjExLDYgQEAKIAl3cml0ZWwoVTMwMF9HUElPX0NSX0JMT0NLX0NMS1JRX0VOQUJMRSwgdmlydGJhc2UgKyBVMzAwX0dQSU9fQ1IpOwogI2VuZGlmCiAKLQkvKiBTZXQgdXAgc29tZSBwYWRtdXhpbmcgaGVyZSAqLwotI2lmZGVmIENPTkZJR19NTUMKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9tbWMoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19TUElfUEwwMjIKLQlwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkoKTsKLSNlbmRpZgotCiAJZ3Bpb19zZXRfaW5pdGlhbF92YWx1ZXMoKTsKIAogCWZvciAobnVtX2lycXMgPSAwIDsgbnVtX2lycXMgPCBVMzAwX0dQSU9fTlVNX1BPUlRTOyBudW1faXJxcysrKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiZTFmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pMmMuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNULUVyaWNzc29uIEFCCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiBSZWdpc3RlciBib2FyZCBpMmMgZGV2aWNlcworICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBidXMwX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQkudHlwZSA9ICJhYjMxMDAiLAorCQkuYWRkciA9IDB4NDgsCisJCS5pcnEgPSBJUlFfVTMwMF9JUlEwX0VYVCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGJ1czFfaTJjX2JvYXJkX2luZm9bXSA9IHsKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisJeworCQkudHlwZSA9ICJmd2NhbSIsCisJCS5hZGRyID0gMHgxMCwKKwl9LAorCXsKKwkJLnR5cGUgPSAiZndjYW0iLAorCQkuYWRkciA9IDB4NWQsCisJfSwKKyNlbHNlCisJeyB9LAorI2VuZGlmCit9OworCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYnVzMF9pMmNfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGJ1czBfaTJjX2JvYXJkX2luZm8pKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBidXMxX2kyY19ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUoYnVzMV9pMmNfYm9hcmRfaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWMwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaTJjLmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9pMmMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogUmVnaXN0ZXIgYm9hcmQgaTJjIGRldmljZXMKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworCisjaWZuZGVmIE1BQ0hfVTMwMF9JMkNfSAorI2RlZmluZSBNQUNIX1UzMDBfSTJDX0gKKworI2lmZGVmIENPTkZJR19JMkNfU1RVMzAwCit2b2lkIF9faW5pdCB1MzAwX2kyY19yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IHRoaXMgc3R1ZmYgaWYgbm8gSTJDIGFkYXB0ZXIgaXMgYXZhaWxhYmxlICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHUzMDBfaTJjX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggYzgxNzQxMi4uN2IxZmM5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTI1OCw2ICsyNTgsNyBAQAogI2RlZmluZSBQSU5fVE9fUE9SVCh2YWwpICh2YWwgPj4gMykKIAogLyogVGhlc2UgY2FuIGJlIGZvdW5kIGluIGFyY2gvYXJtL21hY2gtdTMwMC9ncGlvLmMgKi8KK2V4dGVybiBpbnQgZ3Bpb19pc192YWxpZChpbnQgbnVtYmVyKTsKIGV4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKTsKIGV4dGVybiB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKTsKIGV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25faW5wdXQodW5zaWduZWQgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBiZjEzNGJjLi5hYjAwMGRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTM1LDYgKzM1LDE0IEBACiAjZW5kaWYKIAogLyoKKyAqIFRDTSBtZW1vcnkgd2hlcmVhYm91dHMKKyAqLworI2RlZmluZSBJVENNX09GRlNFVAkweGZmZmYyMDAwCisjZGVmaW5lIElUQ01fRU5ECTB4ZmZmZjNmZmYKKyNkZWZpbmUgRFRDTV9PRkZTRVQJMHhmZmZmNDAwMAorI2RlZmluZSBEVENNX0VORAkweGZmZmY1ZmZmCisKKy8qCiAgKiBXZSBlbmFibGUgYSByZWFsIGJpZyBETUEgYnVmZmVyIGlmIG5lZWQgYmUuCiAgKi8KICNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl80TQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvc3lzY29uLmgKaW5kZXggMWM5MGQxYi4uNzQ0NGY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9zeXNjb24uaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL3N5c2Nvbi5oCkBAIC0yNDAsOCArMjQwLDEzIEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfTUFTSwkJCQkoMHhDMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0NESQkJCQkoMHgwMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX0VNSUYJCQkJKDB4NDAwMCkKKyNpZmRlZiBDT05GSUdfTUFDSF9VMzAwX0JTMzM1CisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfQ0RJMgkJCQkoMHg4MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfQ0RJX1dDRE1BX0FQUF9HUElPCQkJKDB4QzAwMCkKKyNlbGlmIENPTkZJR19NQUNIX1UzMDBfQlMzNjUKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX0NESV9HUElPCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzFMUl9DRElfV0NETUEJCQkJKDB4QzAwMCkKKyNlbmRpZgogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMxTFJfUERJX01BU0sJCQkJKDB4MzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9QREkJCQkJKDB4MDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMUxSX1BESV9FR0cJCQkJKDB4MTAwMCkKQEAgLTM0NSwxOSArMzUwLDY5IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01NQ1JfTUFTSwkJCQkJKDB4MDAwMykKICNkZWZpbmUgVTMwMF9TWVNDT05fTU1DUl9NTUNfRkJfQ0xLX1NFTF9FTkFCTEUJCQkoMHgwMDAyKQogI2RlZmluZSBVMzAwX1NZU0NPTl9NTUNSX01TUFJPX0ZSRVFTRUxfRU5BQkxFCQkJKDB4MDAwMSkKLQorLyogUHVsbCB1cC9kb3duIGNvbnRyb2wgKFIvVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUgkJCQkJKDB4MTA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9XQUlUX05fUFVfRU5BQkxFCQkoMHgwMjAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0VNSUZfMV9ORklGX1JFQURZX1BVX0VOQUJMRQkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfMTZCSVRfUFVfRU5BQkxFCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUFVDUl9FTUlGXzFfOEJJVF9QVV9FTkFCTEUJCQkoMHgwMDQwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QVUNSX0tFWV9JTl9QVV9FTl9NQVNLCQkJKDB4MDAzRikKKy8qIFBhZG11eCAyIGNvbnRyb2wgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlIJCQkJCSgweDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9NQVNLCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfRU1JRl9TRFJBTQkJCSgweDAwNDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzBfTU1DCQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMF9DREkyCQkJKDB4MDBDMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9NQVNLCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfRU1JRl9TRFJBTQkJCSgweDAxMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzFfTU1DCQkJKDB4MDIwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMV9DREkyCQkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9NQVNLCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfRU1JRl9TRFJBTQkJCSgweDA0MDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzJfTU1DCQkJKDB4MDgwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfMl9DREkyCQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19NQVNLCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfRU1JRl9TRFJBTQkJCSgweDEwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzNfTU1DCQkJKDB4MjAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfM19DREkyCQkJKDB4MzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9NQVNLCQkJKDB4QzAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BUFBfR1BJTwkJCSgweDAwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfRU1JRl9TRFJBTQkJCSgweDQwMDApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzJSX0FQUF9NSVNDXzRfTU1DCQkJKDB4ODAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DMlJfQVBQX01JU0NfNF9BQ0NfR1BJTwkJCSgweEMwMDApCiAvKiBUT0RPOiBNb3JlIFNZU0NPTiByZWdpc3RlcnMgbWlzc2luZyAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUgkJCQkJKDB4MTBjKQogI2RlZmluZSBVMzAwX1NZU0NPTl9QTUMzUl9BUFBfTUlTQ18xMV9NQVNLCQkJKDB4YzAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTFfU1BJCQkJKDB4NDAwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUE1DM1JfQVBQX01JU0NfMTBfTUFTSwkJCSgweDMwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzNSX0FQUF9NSVNDXzEwX1NQSQkJCSgweDEwMDApCi0vKiBUT0RPOiBNaXNzaW5nIG90aGVyIGNvbmZpZ3MsIEkganVzdCBhZGRlZCB0aGUgU1BJIHN0dWZmICovCi0KKy8qIFRPRE86IE1pc3Npbmcgb3RoZXIgY29uZmlncyAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0UgkJCQkJKDB4MTY4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xMl9NQVNLCQkJKDB4MDAwMykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfQVBQX0dQSU8JCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xM19NQVNLCQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfU01JQQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEzX1NNSUEyCQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTNfQVBQX0dQSU8JCQkoMHgwMDBDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9NQVNLCQkJKDB4MDAzMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfQ0RJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTRfU01JQQkJCSgweDAwMTApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE0X0NESTIJCQkoMHgwMDIwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNF9BUFBfR1BJTwkJCSgweDAwMzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzE2X01BU0sJCQkoMHgwMzAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QTUM0Ul9BUFBfTUlTQ18xNl9BUFBfR1BJT18xMwkJKDB4MDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfQVBQX1VBUlQxX0NUUwkJKDB4MDEwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTZfRU1JRl8xX1NUQVRJQ19DUzVfTgkoMHgwMjAwKQogLyogU1lTXzBfQ0xLX0NPTlRST0wgZmlyc3QgY2xvY2sgY29udHJvbCAxNmJpdCAoUi9XKSAqLwogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUgkJCQkJKDB4MTIwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9GSUVMRF9NQVNLCQkJCSgweDQzRkYpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MwQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMENDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC0zNzUsNiArNDMwLDcgQEAKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1IJCQkJCSgweDEyNCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfRklFTERfTUFTSwkJCQkoMHg0M0ZGKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19SRVEJCQkJKDB4NDAwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfUkVRX01PTklUT1IJCQkoMHgyMDAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMUNDUl9DTE9DS19JTlYJCQkJKDB4MDIwMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfRlJFUV9NQVNLCQkJKDB4MDFFMCkKICNkZWZpbmUgVTMwMF9TWVNDT05fUzFDQ1JfQ0xPQ0tfU0VMRUNUX01BU0sJCQkoMHgwMDFFKQpAQCAtMzkzLDYgKzQ0OSw3IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0ZJRUxEX01BU0sJCQkJKDB4QzNGRikKICNkZWZpbmUgVTMwMF9TWVNDT05fUzJDQ1JfQ0xLX1NURUFMCQkJCSgweDgwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX1JFUQkJCQkoMHg0MDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19SRVFfTU9OSVRPUgkJCSgweDIwMDApCiAjZGVmaW5lIFUzMDBfU1lTQ09OX1MyQ0NSX0NMT0NLX0lOVgkJCQkoMHgwMjAwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19GUkVRX01BU0sJCQkoMHgwMUUwKQogI2RlZmluZSBVMzAwX1NZU0NPTl9TMkNDUl9DTE9DS19TRUxFQ1RfTUFTSwkJCSgweDAwMUUpCkBAIC00MjUsNiArNDgyLDQ0IEBACiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTUdFTl9DUl8wX0VNSUZfMF9TRFJBTQkJCSgweDAwMEMpCiAjZGVmaW5lIFUzMDBfU1lTQ09OX01DUl9QTTFHX01PREVfRU5BQkxFCQkJKDB4MDAwMikKICNkZWZpbmUgVTMwMF9TWVNDT05fTUNSX1BNVEc1X01PREVfRU5BQkxFCQkJKDB4MDAwMSkKKy8qIFNDX1BMTF9JUlFfQ09OVFJPTCAxNmJpdCAoUi9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSCQkJCQkoMHgwMTMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX01BU0sJCQkJCSgweDAwRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMjA4X0xPQ0tfTE9XX0VOQUJMRQkJKDB4MDA4MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwyMDhfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDA0MCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9GT1JDRV9QTEwxM19MT0NLX0xPV19FTkFCTEUJCSgweDAwMjApCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfRk9SQ0VfUExMMTNfTE9DS19ISUdIX0VOQUJMRQkJKDB4MDAxMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDEzX1VOTE9DS19FTkFCTEUJCSgweDAwMDgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ1JfSVJRTUFTS19QTEwxM19MT0NLX0VOQUJMRQkJKDB4MDAwNCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDUl9JUlFNQVNLX1BMTDIwOF9VTkxPQ0tfRU5BQkxFCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNSX0lSUU1BU0tfUExMMjA4X0xPQ0tfRU5BQkxFCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9TVEFUVVMgMTYgYml0IChSLy0pICovCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1IJCQkJCSgweDAxMzQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJU1JfTUFTSwkJCQkJKDB4MDAwRikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19VTkxPQ0tfSU5ECQkJKDB4MDAwOCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwxM19MT0NLX0lORAkJCQkoMHgwMDA0KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSVNSX1BMTDIwOF9VTkxPQ0tfSU5ECQkJKDB4MDAwMikKKyNkZWZpbmUgVTMwMF9TWVNDT05fUElTUl9QTEwyMDhfTE9DS19JTkQJCQkoMHgwMDAxKQorLyogU0NfUExMX0lSUV9DTEVBUiAxNiBiaXQgKC0vVykgKi8KKyNkZWZpbmUgVTMwMF9TWVNDT05fUElDTFIJCQkJCSgweDAxMzgpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX01BU0sJCQkJCSgweDAwMEYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1JXTUFTSwkJCQkoMHgwMDAwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19VTkxPQ0tfU0MJCQkoMHgwMDA4KQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwxM19MT0NLX1NDCQkJCSgweDAwMDQpCisjZGVmaW5lIFUzMDBfU1lTQ09OX1BJQ0xSX1BMTDIwOF9VTkxPQ0tfU0MJCQkoMHgwMDAyKQorI2RlZmluZSBVMzAwX1NZU0NPTl9QSUNMUl9QTEwyMDhfTE9DS19TQwkJCSgweDAwMDEpCisvKiBDQU1JRl9DT05UUk9MIDE2IGJpdCAoLS9XKSAqLworI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSCQkJCQkoMHgwMTNDKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX01BU0sJCQkJCSgweDBGRkYpCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfVEVTVE1PREVfTUFTSwkJKDB4MEYwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMQkJKDB4MEMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19URVNUTU9ERV9QT1JUMAkJKDB4MDMwMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fTUFTSwkJKDB4MDBGMCkKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19SRVNDT05fUE9SVDEJCSgweDAwQzApCisjZGVmaW5lIFUzMDBfU1lTQ09OX0NJQ1JfQVBQX1NVQkxWRFNfUkVTQ09OX1BPUlQwCQkoMHgwMDMwKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9NQVNLCQkoMHgwMDBGKQorI2RlZmluZSBVMzAwX1NZU0NPTl9DSUNSX0FQUF9TVUJMVkRTX1BXUl9EV05fTl9QT1JUMQkJKDB4MDAwQykKKyNkZWZpbmUgVTMwMF9TWVNDT05fQ0lDUl9BUFBfU1VCTFZEU19QV1JfRFdOX05fUE9SVDAJCSgweDAwMDMpCiAvKiBDbG9jayBhY3Rpdml0eSBvYnNlcnZhYmlsaXR5IHJlZ2lzdGVyIDAgKi8KICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVIJCQkJCSgweDE0MCkKICNkZWZpbmUgVTMwMF9TWVNDT05fQzBPQVJfTUFTSwkJCQkJKDB4RkZGRikKQEAgLTUxMyw3ICs2MDgsNyBAQAogLyoqCiAgKiBDUFUgbWVkaXVtIGZyZXF1ZW5jeSBpbiBNSHoKICAqLwotI2RlZmluZSBTWVNDT05fQ1BVX0NMT0NLX01FRElVTSAgMTA0CisjZGVmaW5lIFNZU0NPTl9DUFVfQ0xPQ0tfTUVESVVNICAgNTIKIC8qKgogICogQ1BVIGxvdyBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KQEAgLTUyNyw3ICs2MjIsNyBAQAogLyoqCiAgKiBFTUlGIG1lZGl1bSBmcmVxdWVuY3kgaW4gTUh6CiAgKi8KLSNkZWZpbmUgU1lTQ09OX0VNSUZfQ0xPQ0tfTUVESVVNIDEwNAorI2RlZmluZSBTWVNDT05fRU1JRl9DTE9DS19NRURJVU0gIDUyCiAvKioKICAqIEVNSUYgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTQxLDcgKzYzNiw3IEBACiAvKioKICAqIEFIQiBtZWRpdW0gZnJlcXVlbmN5IGluIE1IegogICovCi0jZGVmaW5lIFNZU0NPTl9BSEJfQ0xPQ0tfTUVESVVNICAgNTIKKyNkZWZpbmUgU1lTQ09OX0FIQl9DTE9DS19NRURJVU0gICAyNgogLyoqCiAgKiBBSEIgbG93IGZyZXF1ZW5jeSBpbiBNSHoKICAqLwpAQCAtNTUzLDYgKzY0OCwxNSBAQAogICBTWVNDT05fQk1fVklERU9fRU5DCiB9OwogCisvKiBTZWxlY3RyIGEgcmVzaXN0b3Igb3IgYSBzZXQgb2YgcmVzaXN0b3JzICovCitlbnVtIHN5c2Nvbl9wdWxsX3VwX2Rvd24geworICBTWVNDT05fUFVfS0VZX0lOX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzhfQklUX0VOLAorICBTWVNDT05fUFVfRU1JRl8xXzE2X0JJVF9FTiwKKyAgU1lTQ09OX1BVX0VNSUZfMV9ORklGX1JFQURZX0VOLAorICBTWVNDT05fUFVfRU1JRl8xX05GSUZfV0FJVF9OX0VOLAorfTsKKwogLyoKICAqIE5vdGUgdGhhdCB0aGlzIGFycmF5IG11c3QgbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBhcnJheSAiY2xrX3JlZyIKICAqIGluIHN5c2Nvbi5jCkBAIC01NzUsNiArNjc5LDcgQEAKICAgU1lTQ09OX0NMS0NPTlRST0xfU1BJLAogICBTWVNDT05fQ0xLQ09OVFJPTF9JMlMwX0NPUkUsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0kyUzFfQ09SRSwKKyAgU1lTQ09OX0NMS0NPTlRST0xfVUFSVDEsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FBSUYsCiAgIFNZU0NPTl9DTEtDT05UUk9MX0FIQiwKICAgU1lTQ09OX0NMS0NPTlRST0xfQVBFWCwKQEAgLTYwNCw3ICs3MDksOCBAQAogCiBlbnVtIHN5c2Nvbl9zeXNjbGtfcmVxIHsKICAgU1lTQ09OX1NZU0NMS1JFUV9ESVNBQkxFRCwKLSAgU1lTQ09OX1NZU0NMS1JFUV9BQ1RJVkVfTE9XCisgIFNZU0NPTl9TWVNDTEtSRVFfQUNUSVZFX0xPVywKKyAgU1lTQ09OX1NZU0NMS1JFUV9NT05JVE9SCiB9OwogCiBlbnVtIHN5c2Nvbl9jbGtfbW9kZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvbW1jLmMKaW5kZXggNTg1Y2MwMS4uN2I2YjAxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL21tYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9tbWMuYwpAQCAtMTksMTUgKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9tbWMuaD4KICNpbmNsdWRlICJtbWMuaCIKKyNpbmNsdWRlICJwYWRtdXguaCIKIAogc3RydWN0IG1tY2lfY2FyZF9ldmVudCB7CiAJc3RydWN0IGlucHV0X2RldiAqbW1jX2lucHV0OwogCWludCBtbWNfaW5zZXJ0ZWQ7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtxOwotCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIG1tYzBfcGxhdF9kYXRhOwogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTE0Niw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBtbWNpX2NhcmRfZXZlbnQgKm1tY2lfY2FyZDsKIAlzdHJ1Y3QgZGV2aWNlICptbWNzZF9kZXZpY2UgPSAmYWRldi0+ZGV2OworCXN0cnVjdCBwbXggKnBteDsKIAlpbnQgcmV0ID0gMDsKIAogCW1tY2lfY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNpX2NhcmRfZXZlbnQpLCBHRlBfS0VSTkVMKTsKQEAgLTE1OCw2ICsxNjAsOCBAQAogCW1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGEuc3RhdHVzID0gbW1jX3N0YXR1czsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fd3AgPSAtMTsKIAltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmdwaW9fY2QgPSAtMTsKKwltbWNpX2NhcmQtPm1tYzBfcGxhdF9kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8CisJCU1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF80X0JJVF9EQVRBOwogCiAJbW1jc2RfZGV2aWNlLT5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgJm1tY2lfY2FyZC0+bW1jMF9wbGF0X2RhdGE7CiAKQEAgLTIwNyw2ICsyMTEsMjAgQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKG1tY2lfY2FyZC0+bW1jX2lucHV0LCBtbWNpX2NhcmQpOwogCisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIE1NQy4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQobW1jc2RfZGV2aWNlLCBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcpOworCisJaWYgKElTX0VSUihwbXgpKQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgZ2V0IHBhZG11eCBoYW5kbGVcbiIpOworCWVsc2UgeworCQlyZXQgPSBwbXhfYWN0aXZhdGUobW1jc2RfZGV2aWNlLCBwbXgpOworCQlpZiAoSVNfRVJSX1ZBTFVFKHJldCkpCisJCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKIAlyZXQgPSBncGlvX3JlZ2lzdGVyX2NhbGxiYWNrKFUzMDBfR1BJT19QSU5fTU1DX0NELCBtbWNpX2NhbGxiYWNrLAogCQkJCSAgICAgbW1jaV9jYXJkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5jCmluZGV4IGYzNjY0NTYuLjRjOTNjNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmMKQEAgLTYsNTMgKzYsMzYyIEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKICAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgogICogVTMwMCBQQURNVVggZnVuY3Rpb25zCi0gKiBBdXRob3I6IExpbnVzIFdhbGxlaWogPGxpbnVzLndhbGxlaWpAc3Rlcmljc3Nvbi5jb20+Ci0gKgorICogQXV0aG9yOiBNYXJ0aW4gUGVyc3NvbiA8bWFydGluLnBlcnNzb25Ac3Rlcmljc3Nvbi5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bWFjaC91MzAwLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2Nvbi5oPgotCiAjaW5jbHVkZSAicGFkbXV4LmgiCiAKLS8qIFNldCB0aGUgUEFEIE1VWCB0byByb3V0ZSB0aGUgTU1DIHJlYWRlciBjb3JyZWN0bHkgdG8gR1BJTzAuICovCi12b2lkIHBteF9zZXRfbWlzc2lvbl9tb2RlX21tYyh2b2lkKQotewotCXUxNiB2YWw7CitzdGF0aWMgREVGSU5FX01VVEVYKHBteF9tdXRleCk7CiAKLQl2YWwgPSByZWFkdyhVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsICY9IH5VMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTUFTSzsKLQl3cml0ZXcodmFsLCBVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzFMUik7Ci0JdmFsID0gcmVhZHcoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOwotCXZhbCAmPSB+VTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9HUElPXzFfTU1DOwotCXdyaXRldyh2YWwsIFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKK2NvbnN0IHUzMiBwbXhfcmVnaXN0ZXJzW10gPSB7CisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUxSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpLAorCShVMzAwX1NZU0NPTl9WQkFTRSArIFUzMDBfU1lTQ09OX1BNQzJSKSwKKwkoVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMzUiksCisJKFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DNFIpCit9OworCisvKiBIaWdoIGxldmVsIGZ1bmN0aW9uYWxpdHkgKi8KKworLyogTGF6eSBkb2c6CisgKiBvbm1hc2sgPSB7CisgKiAgIHsiUE1DMUxSIiBtYXNrLCAiUE1DMUxSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMUhSIiBtYXNrLCAiUE1DMUhSIiB2YWx1ZX0sCisgKiAgIHsiUE1DMlIiICBtYXNrLCAiUE1DMlIiICB2YWx1ZX0sCisgKiAgIHsiUE1DM1IiICBtYXNrLCAiUE1DM1IiICB2YWx1ZX0sCisgKiAgIHsiUE1DNFIiICBtYXNrLCAiUE1DNFIiICB2YWx1ZX0KKyAqIH0KKyAqLworc3RhdGljIHN0cnVjdCBwbXggbW1jX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfTU1DX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiTU1DIiwKKwkub25tYXNrID0geworCQkgICB7VTMwMF9TWVNDT05fUE1DMUxSX01NQ1NEX01BU0ssCisJCSAgICBVMzAwX1NZU0NPTl9QTUMxTFJfTU1DU0RfTU1DU0R9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9LAorCQkgICB7VTMwMF9TWVNDT05fUE1DNFJfQVBQX01JU0NfMTJfTUFTSywKKwkJICAgIFUzMDBfU1lTQ09OX1BNQzRSX0FQUF9NSVNDXzEyX0FQUF9HUElPfQorCQkgICB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbXggc3BpX3NldHRpbmcgPSB7CisJLnNldHRpbmcgPSBVMzAwX0FQUF9QTVhfU1BJX1NFVFRJTkcsCisJLmRlZmF1bHRfb24gPSBmYWxzZSwKKwkuYWN0aXZhdGVkID0gZmFsc2UsCisJLm5hbWUgPSAiU1BJIiwKKwkub25tYXNrID0ge3swLCAwfSwKKwkJICAge1UzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSyB8CisJCSAgICBVMzAwX1NZU0NPTl9QTUMxSFJfQVBQX1NQSV9DU18xX01BU0sgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9NQVNLLAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEkgfAorCQkgICAgVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEl9LAorCQkgICB7MCwgMH0sCisJCSAgIHswLCAwfSwKKwkJICAgezAsIDB9CisJCSAgIH0sCit9OworCisvKiBBdmFpbGFibGUgcGFkbXV4IHNldHRpbmdzICovCitzdGF0aWMgc3RydWN0IHBteCAqcG14X3NldHRpbmdzW10gPSB7CisJJm1tY19zZXR0aW5nLAorCSZzcGlfc2V0dGluZywKK307CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWdpc3RlcnMoc3RydWN0IHBteCAqcG14LCBib29sIGFjdGl2YXRlKQoreworCXUxNiByZWd2YWwsIHZhbCwgbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9yZWdpc3RlcnMpOyBpKyspIHsKKwkJaWYgKGFjdGl2YXRlKQorCQkJdmFsID0gcG14LT5vbm1hc2tbaV0udmFsOworCQllbHNlCisJCQl2YWwgPSAwOworCisJCW1hc2sgPSBwbXgtPm9ubWFza1tpXS5tYXNrOworCQlpZiAobWFzayAhPSAwKSB7CisJCQlyZWd2YWwgPSByZWFkdyhwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJCXJlZ3ZhbCAmPSB+bWFzazsKKwkJCXJlZ3ZhbCB8PSB2YWw7CisJCQl3cml0ZXcocmVndmFsLCBwbXhfcmVnaXN0ZXJzW2ldKTsKKwkJfQorCX0KIH0KIAotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCkKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKQogewotCXUxNiB2YWw7CisJaW50IGk7CisJc3RydWN0IHBteCAqcG14ID0gRVJSX1BUUigtRU5PRU5UKTsKIAotCS8qIFNldCB1cCBwYWRtdXhpbmcgc28gdGhlIFNQSSBwb3J0IGFuZCBpdHMgY2hpcHNlbGVjdHMgYXJlIGFjdGl2ZSAqLwotCXZhbCA9IHJlYWR3KFUzMDBfU1lTQ09OX1ZCQVNFICsgVTMwMF9TWVNDT05fUE1DMUhSKTsKLQkvKgotCSAqIEFjdGl2YXRlIHRoZSBTUEkgcG9ydCAoZGlzYWJsZSB0aGUgdXNlIG9mIHRoZXNlIHBpbnMgZm9yIGdlbmVyaWMKLQkgKiBHUElPLCBEU1AsIEFBSUYKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfMl9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMSBmb3IgQ1MxIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzFfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMV9TUEk7Ci0JLyoKLQkgKiBVc2UgR1BJTyBwaW4gU1BJIENTMiBmb3IgQ1MyIGFjdHVhbGx5IChpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIKLQkgKiB0aGluZ3MgYWxzbykKLQkgKi8KLQl2YWwgJj0gflUzMDBfU1lTQ09OX1BNQzFIUl9BUFBfU1BJX0NTXzJfTUFTSzsKLQl2YWwgfD0gVTMwMF9TWVNDT05fUE1DMUhSX0FQUF9TUElfQ1NfMl9TUEk7Ci0Jd3JpdGV3KHZhbCwgVTMwMF9TWVNDT05fVkJBU0UgKyBVMzAwX1NZU0NPTl9QTUMxSFIpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChzZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgIT0gTlVMTCkgeworCQkJCVdBUk4oMSwgInBhZG11eDogcmVxdWlyZWQgc2V0dGluZyAiCisJCQkJICAgICAiaW4gdXNlIGJ5IGFub3RoZXIgY29uc3VtZXJcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwbXggPSBwbXhfc2V0dGluZ3NbaV07CisJCQkJcG14LT5kZXYgPSBkZXY7CisJCQkJZGV2X2RiZyhkZXYsICJwYWRtdXg6IHNldHRpbmcgbnIgJWQgaXMgbm93ICIKKwkJCQkJImJvdW5kIHRvICVzIGFuZCByZWFkeSB0byB1c2VcbiIsCisJCQkJCXNldHRpbmcsIGRldl9uYW1lKGRldikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKworCXJldHVybiBwbXg7CiB9CitFWFBPUlRfU1lNQk9MKHBteF9nZXQpOworCitpbnQgcG14X3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCWlmIChwbXggPT0gTlVMTCB8fCBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZwbXhfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmIChwbXgtPnNldHRpbmcgPT0gcG14X3NldHRpbmdzW2ldLT5zZXR0aW5nKSB7CisKKwkJCWlmIChkZXYgIT0gcG14LT5kZXYpIHsKKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCByZWxlYXNlIGhhbmRsZSBhcyAiCisJCQkJCSJpdCBpcyBib3VuZCB0byBhbm90aGVyIGNvbnN1bWVyXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlwbXhfc2V0dGluZ3NbaV0tPmRldiA9IE5VTEw7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbXhfcHV0KTsKKworaW50IHBteF9hY3RpdmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwbXggKnBteCkKK3sKKwlpbnQgaSwgaiwgcmV0OworCXJldCA9IDA7CisKKwlpZiAocG14ID09IE5VTEwgfHwgZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgcmVxdWlyZWQgYml0cyBhcmUgbm90IHVzZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKworCQlpZiAocG14X3NldHRpbmdzW2ldLT5kZXYgPT0gTlVMTCB8fCBwbXhfc2V0dGluZ3NbaV0gPT0gcG14KQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQlpZiAocG14X3NldHRpbmdzW2ldLT5vbm1hc2tbal0ubWFzayAmIHBteC0+CisJCQkJb25tYXNrW2pdLm1hc2spIHsKKwkJCQkvKiBNb3JlIHRoYW4gb25lIGVudHJ5IG9uIHRoZSBzYW1lIGJpdHMgKi8KKwkJCQlXQVJOKDEsICJwYWRtdXg6IGNhbm5vdCBhY3RpdmF0ZSAiCisJCQkJCSJzZXR0aW5nLiBCaXQgY29uZmxpY3Qgd2l0aCAiCisJCQkJCSJhbiBhY3RpdmUgc2V0dGluZ1xuIik7CisKKwkJCQlyZXQgPSAtRVVTRVJTOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCX0KKwl1cGRhdGVfcmVnaXN0ZXJzKHBteCwgdHJ1ZSk7CisJcG14LT5hY3RpdmF0ZWQgPSB0cnVlOworCWRldl9kYmcoZGV2LCAicGFkbXV4OiBzZXR0aW5nIG5yICVkIGlzIGFjdGl2YXRlZFxuIiwKKwkJcG14LT5zZXR0aW5nKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnBteF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2FjdGl2YXRlKTsKKworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KQoreworCWludCBpOworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHBteCA9PSBOVUxMIHx8IGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnBteF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG14X3NldHRpbmdzKTsgaSsrKSB7CisKKwkJaWYgKHBteF9zZXR0aW5nc1tpXS0+ZGV2ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG14LT5zZXR0aW5nID09IHBteF9zZXR0aW5nc1tpXS0+c2V0dGluZykgeworCisJCQlpZiAoZGV2ICE9IHBteC0+ZGV2KSB7CisJCQkJV0FSTigxLCAicGFkbXV4OiBjYW5ub3QgZGVhY3RpdmF0ZSAiCisJCQkJICAgICAicG14IHNldHRpbmcgYXMgaXQgd2FzIGFjdGl2YXRlZCAiCisJCQkJICAgICAiYnkgYW5vdGhlciBjb25zdW1lclxuIik7CisKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXVwZGF0ZV9yZWdpc3RlcnMocG14LCBmYWxzZSk7CisJCQkJcG14X3NldHRpbmdzW2ldLT5kZXYgPSBOVUxMOworCQkJCXBteC0+YWN0aXZhdGVkID0gZmFsc2U7CisJCQkJcmV0ID0gMDsKKwkJCQlkZXZfZGJnKGRldiwgInBhZG11eDogc2V0dGluZyBuciAlZCBpcyBkZWFjdGl2YXRlZCIsCisJCQkJCXBteC0+c2V0dGluZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZwbXhfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG14X2RlYWN0aXZhdGUpOworCisvKgorICogRm9yIGludGVybmFsIHVzZSBvbmx5LiBJZiBpdCBpcyB0byBiZSBleHBvcnRlZCwKKyAqIGl0IHNob3VsZCBiZSByZWVudHJhbnQuIE5vdGljZSB0aGF0IHBteF9hY3RpdmF0ZQorICogKGkuZS4gcnVudGltZSBzZXR0aW5ncykgYWx3YXlzIG92ZXJyaWRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyBpbnQgcG14X3NldF9kZWZhdWx0KHZvaWQpCit7CisJLyogVXNlZCB0byBpZGVudGlmeSBzZXZlcmFsIGVudHJpZXMgb24gdGhlIHNhbWUgYml0cyAqLworCXUxNiBtb2RiaXRzW0FSUkFZX1NJWkUocG14X3JlZ2lzdGVycyldOworCisJaW50IGksIGo7CisKKwltZW1zZXQobW9kYml0cywgMCwgQVJSQVlfU0laRShwbXhfcmVnaXN0ZXJzKSAqIHNpemVvZih1MTYpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBteF9zZXR0aW5ncyk7IGkrKykgeworCisJCWlmICghcG14X3NldHRpbmdzW2ldLT5kZWZhdWx0X29uKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocG14X3JlZ2lzdGVycyk7IGorKykgeworCisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgb24gdGhlIHNhbWUgYml0cyAqLworCQkJaWYgKG1vZGJpdHNbal0gJiBwbXhfc2V0dGluZ3NbaV0tPm9ubWFza1tqXS5tYXNrKSB7CisJCQkJQlVHKCk7CisJCQkJcmV0dXJuIC1FVVNFUlM7CisJCQl9CisJCQltb2RiaXRzW2pdIHw9IHBteF9zZXR0aW5nc1tpXS0+b25tYXNrW2pdLm1hc2s7CisJCX0KKwkJdXBkYXRlX3JlZ2lzdGVycyhwbXhfc2V0dGluZ3NbaV0sIHRydWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfVTMwMF9ERUJVRykpCitzdGF0aWMgaW50IHBteF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzZXFfcHJpbnRmKHMsICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKHMsICJTRVRUSU5HICAgICBCT1VORCBUTyBERVZJQ0UgICAgICAgICAgICAgICBTVEFURVxuIik7CisJc2VxX3ByaW50ZihzLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJbXV0ZXhfbG9jaygmcG14X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbXhfc2V0dGluZ3MpOyBpKyspIHsKKwkJLyogRm9ybWF0IHBteCBhbmQgZGV2aWNlIG5hbWUgbmljZWx5ICovCisJCWNoYXIgY2RwWzMzXTsKKwkJaW50IGNoYXJzOworCisJCWNoYXJzID0gc25wcmludGYoJmNkcFswXSwgMTcsICIlcyIsIHBteF9zZXR0aW5nc1tpXS0+bmFtZSk7CisJCXdoaWxlIChjaGFycyA8IDE2KSB7CisJCQljZHBbY2hhcnNdID0gJyAnOworCQkJY2hhcnMrKzsKKwkJfQorCQljaGFycyA9IHNucHJpbnRmKCZjZHBbMTZdLCAxNywgIiVzIiwgcG14X3NldHRpbmdzW2ldLT5kZXYgPworCQkJCWRldl9uYW1lKHBteF9zZXR0aW5nc1tpXS0+ZGV2KSA6ICJOL0EiKTsKKwkJd2hpbGUgKGNoYXJzIDwgMTYpIHsKKwkJCWNkcFtjaGFycysxNl0gPSAnICc7CisJCQljaGFycysrOworCQl9CisJCWNkcFszMl0gPSAnXDAnOworCisJCXNlcV9wcmludGYocywKKwkJCSIlc1x0JXNcbiIsCisJCQkmY2RwWzBdLAorCQkJcG14X3NldHRpbmdzW2ldLT5hY3RpdmF0ZWQgPworCQkJIkFDVElWQVRFRCIgOiAiREVBQ1RJVkFURUQiCisJCQkpOworCisJfQorCW11dGV4X3VubG9jaygmcG14X211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbXhfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG14X3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXhfb3BlcmF0aW9ucyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG14X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG14X3JlYWRfZGVidWdmcyh2b2lkKQoreworCS8qIEV4cG9zZSBhIHNpbXBsZSBkZWJ1Z2ZzIGludGVyZmFjZSB0byB2aWV3IHBteCBzZXR0aW5ncyAqLworCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwYWRtdXgiLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkgICBOVUxMLCBOVUxMLAorCQkJCSAgICZwbXhfb3BlcmF0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGNvbWUgaW4gYWZ0ZXIgdGhlIGNvcmVfaW5pdGNhbGwoKSwKKyAqIGJlY2F1c2UgZGVidWdmcyBpcyBub3QgYXZhaWxhYmxlIHVudGlsCisgKiB0aGUgc3Vic3lzdGVtcyBjb21lIHVwLgorICovCittb2R1bGVfaW5pdChpbml0X3BteF9yZWFkX2RlYnVnZnMpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBteF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBteF9zZXRfZGVmYXVsdCgpOworCisJaWYgKElTX0VSUl9WQUxVRShyZXQpKQorCQlwcl9jcml0KCJwYWRtdXg6IGRlZmF1bHQgc2V0dGluZ3MgY291bGQgbm90IGJlIHNldFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjb25zdW1lcnMgKi8KK2NvcmVfaW5pdGNhbGwocG14X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oIGIvYXJjaC9hcm0vbWFjaC11MzAwL3BhZG11eC5oCmluZGV4IDhjMjA5OWEuLjZlOGI4NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9wYWRtdXguaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvcGFkbXV4LmgKQEAgLTYsMTQgKzYsMzQgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgogICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCiAgKiBVMzAwIFBBRE1VWCBBUEkKLSAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KLSAqCisgKiBBdXRob3I6IE1hcnRpbiBQZXJzc29uIDxtYXJ0aW4ucGVyc3NvbkBzdGVyaWNzc29uLmNvbT4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAjZGVmaW5lIF9fTUFDSF9VMzAwX1BBRE1VWF9ICiAKLXZvaWQgcG14X3NldF9taXNzaW9uX21vZGVfbW1jKHZvaWQpOwotdm9pZCBwbXhfc2V0X21pc3Npb25fbW9kZV9zcGkodm9pZCk7CitlbnVtIHBteF9zZXR0aW5ncyB7CisJVTMwMF9BUFBfUE1YX01NQ19TRVRUSU5HLAorCVUzMDBfQVBQX1BNWF9TUElfU0VUVElORworfTsKKworc3RydWN0IHBteF9vbm1hc2sgeworCXUxNiBtYXNrOwkJLyogTWFzayBiaXRzICovCisJdTE2IHZhbDsJCS8qIFZhbHVlIHdoZW4gYWN0aXZlICovCit9OworCitzdHJ1Y3QgcG14IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJZW51bSBwbXhfc2V0dGluZ3Mgc2V0dGluZzsKKwljaGFyICpuYW1lOworCWJvb2wgYWN0aXZhdGVkOworCWJvb2wgZGVmYXVsdF9vbjsKKwlzdHJ1Y3QgcG14X29ubWFzayBvbm1hc2tbXTsKK307CisKK3N0cnVjdCBwbXggKnBteF9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBlbnVtIHBteF9zZXR0aW5ncyBzZXR0aW5nKTsKK2ludCBwbXhfcHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKK2ludCBwbXhfYWN0aXZhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcG14ICpwbXgpOworaW50IHBteF9kZWFjdGl2YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBteCAqcG14KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBlODg3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdTMwMC9zcGkuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbiBBQgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogQXV0aG9yOiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQHN0ZXJpY3Nzb24uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9wbDAyMi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgInBhZG11eC5oIgorCisvKgorICogVGhlIGZvbGxvd2luZyBpcyBmb3IgdGhlIGFjdHVhbCBkZXZpY2VzIG9uIHRoZSBTU1AvU1BJIGJ1cworICovCisjaWZkZWYgQ09ORklHX01BQ0hfVTMwMF9TUElEVU1NWQorc3RhdGljIHZvaWQgc2VsZWN0X2R1bW15X2NoaXAodTMyIGNoaXBzZWxlY3QpCit7CisJcHJfZGVidWcoIkNPUkU6ICVzIGNhbGxlZCB3aXRoIENTPTB4JXggKCVzKVxuIiwKKwkJIF9fZnVuY19fLAorCQkgY2hpcHNlbGVjdCwKKwkJIGNoaXBzZWxlY3QgPyAidW5zZWxlY3QgY2hpcCIgOiAic2VsZWN0IGNoaXAiKTsKKwkvKgorCSAqIEhlcmUgeW91IHdvdWxkIHdyaXRlIHRoZSBjaGlwIHNlbGVjdCB2YWx1ZSB0byB0aGUgR1BJTyBwaW5zIGlmCisJICogdGhpcyB3YXMgYSByZWFsIGNoaXAgKGJ1dCB0aGlzIGlzIGEgbG9vcGJhY2sgZHVtbXkpLgorCSAqLworfQorCitzdHJ1Y3QgcGwwMjJfY29uZmlnX2NoaXAgZHVtbXlfY2hpcF9pbmZvID0geworCS8qIE5vbWluYWxseSB0aGlzIGlzIExPT1BCQUNLX0RJU0FCTEVELCBidXQgdGhpcyBpcyBvdXIgZHVtbXkgY2hpcCEgKi8KKwkubGJtID0gTE9PUEJBQ0tfRU5BQkxFRCwKKwkvKgorCSAqIGF2YWlsYWJsZSBQT0xMSU5HX1RSQU5TRkVSIGFuZCBJTlRFUlJVUFRfVFJBTlNGRVIsCisJICogRE1BX1RSQU5TRkVSIGRvZXMgbm90IHdvcmsKKwkgKi8KKwkuY29tX21vZGUgPSBJTlRFUlJVUFRfVFJBTlNGRVIsCisJLmlmYWNlID0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksCisJLyogV2UgY2FuIG9ubHkgYWN0IGFzIG1hc3RlciBidXQgU1NQX1NMQVZFIGlzIHBvc3NpYmxlIGluIHRoZW9yeSAqLworCS5oaWVyYXJjaHkgPSBTU1BfTUFTVEVSLAorCS8qIDAgPSBkcml2ZSBUWCBldmVuIGFzIHNsYXZlLCAxID0gZG8gbm90IGRyaXZlIFRYIGFzIHNsYXZlICovCisJLnNsYXZlX3R4X2Rpc2FibGUgPSAwLAorCS8qIExTQiBmaXJzdCAqLworCS5lbmRpYW5fdHggPSBTU1BfVFhfTFNCLAorCS5lbmRpYW5fcnggPSBTU1BfUlhfTFNCLAorCS5kYXRhX3NpemUgPSBTU1BfREFUQV9CSVRTXzgsIC8qIHVzZWQgdG8gYmUgMTIgaW4gc29tZSBkZWZhdWx0ICovCisJLnJ4X2xldl90cmlnID0gU1NQX1JYXzFfT1JfTU9SRV9FTEVNLAorCS50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DLAorCS5jbGtfcGhhc2UgPSBTU1BfQ0xLX1NFQ09ORF9FREdFLAorCS5jbGtfcG9sID0gU1NQX0NMS19QT0xfSURMRV9MT1csCisJLmN0cmxfbGVuID0gU1NQX0JJVFNfMTIsCisJLndhaXRfc3RhdGUgPSBTU1BfTVdJUkVfV0FJVF9aRVJPLAorCS5kdXBsZXggPSBTU1BfTUlDUk9XSVJFX0NIQU5ORUxfRlVMTF9EVVBMRVgsCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIHlvdSBpbnNlcnQgYSBjYWxsIHRvIGEgZnVuY3Rpb24gdG8gZW5hYmxlIENTCisJICogKHVzdWFsbHkgR1BJTykgZm9yIGEgY2VydGFpbiBjaGlwLgorCSAqLworCS5jc19jb250cm9sID0gc2VsZWN0X2R1bW15X2NoaXAsCit9OworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gdTMwMF9zcGlfZGV2aWNlc1tdID0geworI2lmZGVmIENPTkZJR19NQUNIX1UzMDBfU1BJRFVNTVkKKwl7CisJCS8qIEEgZHVtbXkgY2hpcCB1c2VkIGZvciBsb29wYmFjayB0ZXN0cyAqLworCQkubW9kYWxpYXMgICAgICAgPSAic3BpLWR1bW15IiwKKwkJLyogUmVhbGx5IGR1bW15LCBwYXNzIGluIGFkZGl0aW9uYWwgY2hpcCBjb25maWcgaGVyZSAqLworCQkucGxhdGZvcm1fZGF0YSAgPSBOVUxMLAorCQkvKiBUaGlzIGRlZmluZXMgaG93IHRoZSBjb250cm9sbGVyIHNoYWxsIGhhbmRsZSB0aGUgZGV2aWNlICovCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZHVtbXlfY2hpcF9pbmZvLAorCQkvKiAuaXJxIC0gbm8gZXh0ZXJuYWwgSVJRIHJvdXRlZCBmcm9tIHRoaXMgZGV2aWNlICovCisJCS5tYXhfc3BlZWRfaHogICA9IDEwMDAwMDAsCisJCS5idXNfbnVtICAgICAgICA9IDAsIC8qIE9ubHkgb25lIGJ1cyBvbiB0aGlzIGNoaXAgKi8KKwkJLmNoaXBfc2VsZWN0ICAgID0gMCwKKwkJLyogTWVhbnMgU1BJX0NTX0hJR0gsIGNoYW5nZSBpZiBlLmcgbG93IENTICovCisJCS5tb2RlICAgICAgICAgICA9IDAsCisJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBwbDAyMl9zc3BfY29udHJvbGxlciBzc3BfcGxhdGZvcm1fZGF0YSA9IHsKKwkvKiBJZiB5b3UgaGF2ZSBzZXZlcmFsIFNQSSBidXNlcyB0aGlzIHZhcmllcywgd2UgaGF2ZSBvbmx5IGJ1cyAwICovCisJLmJ1c19pZCA9IDAsCisJLyogU2V0IHRoaXMgdG8gMSB3aGVuIHdlIHRoaW5rIHdlIGdvdCBETUEgd29ya2luZyAqLworCS5lbmFibGVfZG1hID0gMCwKKwkvKgorCSAqIE9uIHRoZSBBUFAgQ1BVIEdQSU8gNCwgNSBhbmQgNiBhcmUgY29ubmVjdGVkIGFzIGdlbmVyaWMKKwkgKiBjaGlwIHNlbGVjdHMgZm9yIFNQSS4gKFNhbWUgb24gVTMzMCwgVTMzNSBhbmQgVTM2NS4pCisJICogVE9ETzogbWFrZSBzdXJlIHRoZSBHUElPIGRyaXZlciBjYW4gc2VsZWN0IHRoZXNlIHByb3Blcmx5CisJICogYW5kIGRvIHBhZG11eGluZyBhY2NvcmRpbmdseSB0b28uCisJICovCisJLm51bV9jaGlwc2VsZWN0ID0gMywKK307CisKKwordm9pZCBfX2luaXQgdTMwMF9zcGlfaW5pdChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFkZXYpCit7CisJc3RydWN0IHBteCAqcG14OworCisJYWRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3NwX3BsYXRmb3JtX2RhdGE7CisJLyoKKwkgKiBTZXR1cCBwYWRtdXhpbmcgZm9yIFNQSS4gU2luY2UgdGhpcyBtdXN0IGFsd2F5cyBiZQorCSAqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgcG14IGlzIG5ldmVyIHJlbGVhc2VkLgorCSAqLworCXBteCA9IHBteF9nZXQoJmFkZXYtPmRldiwgVTMwMF9BUFBfUE1YX1NQSV9TRVRUSU5HKTsKKworCWlmIChJU19FUlIocG14KSkKKwkJZGV2X3dhcm4oJmFkZXYtPmRldiwgIkNvdWxkIG5vdCBnZXQgcGFkbXV4IGhhbmRsZVxuIik7CisJZWxzZSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcG14X2FjdGl2YXRlKCZhZGV2LT5kZXYsIHBteCk7CisJCWlmIChJU19FUlJfVkFMVUUocmV0KSkKKwkJCWRldl93YXJuKCZhZGV2LT5kZXYsICJDb3VsZCBub3QgYWN0aXZhdGUgcGFkbXV4aW5nXG4iKTsKKwl9CisKK30KK3ZvaWQgX19pbml0IHUzMDBfc3BpX3JlZ2lzdGVyX2JvYXJkX2RldmljZXModm9pZCkKK3sKKwkvKiBSZWdpc3RlciBhbnkgU1BJIGRldmljZXMgKi8KKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh1MzAwX3NwaV9kZXZpY2VzLCBBUlJBWV9TSVpFKHUzMDBfc3BpX2RldmljZXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNkODY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL3NwaS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXUzMDAvc3BpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24gQUIKKyAqIExpY2Vuc2UgdGVybXM6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIHZlcnNpb24gMgorICoKKyAqIEF1dGhvcjogTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBzdGVyaWNzc29uLmNvbT4KKyAqLworI2lmbmRlZiBTUElfSAorI2RlZmluZSBTUElfSAorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisKKyNpZmRlZiBDT05GSUdfU1BJX1BMMDIyCit2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldik7Cit2b2lkIF9faW5pdCB1MzAwX3NwaV9yZWdpc3Rlcl9ib2FyZF9kZXZpY2VzKHZvaWQpOworI2Vsc2UKKy8qIENvbXBpbGUgb3V0IFNQSSBzdXBwb3J0IGlmIFBMMDIyIGlzIG5vdCBzZWxlY3RlZCAqLworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCB1MzAwX3NwaV9pbml0KHN0cnVjdCBhbWJhX2RldmljZSAqYWRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgdTMwMF9zcGlfcmVnaXN0ZXJfYm9hcmRfZGV2aWNlcyh2b2lkKQoreworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwppbmRleCBjY2U1MzIwLi4yNmQyNmY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvdGltZXIuYwpAQCAtMzQ2LDYgKzM0NiwyMSBAQAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorLyoKKyAqIE92ZXJyaWRlIHRoZSBnbG9iYWwgd2VhayBzY2hlZF9jbG9jayBzeW1ib2wgd2l0aCB0aGlzCisgKiBsb2NhbCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIHRoZSBjbG9ja3NvdXJjZSB0byBnZXQgc29tZQorICogYmV0dGVyIHJlc29sdXRpb24gd2hlbiBzY2hlZHVsaW5nIHRoZSBrZXJuZWwuIFdlIGFjY2VwdCB0aGF0CisgKiB0aGlzIHdyYXBzIGFyb3VuZCBmb3Igbm93LCBzaW5jZSBpdCBpcyBqdXN0IGEgcmVsYXRpdmUgdGltZQorICogc3RhbXAuIChJbnNwaXJlZCBieSBPTUFQIGltcGxlbWVudGF0aW9uLikKKyAqLwordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfY3ljMm5zKGNsb2Nrc291cmNlX3UzMDBfMW1oei5yZWFkKAorCQkJCSAgJmNsb2Nrc291cmNlX3UzMDBfMW1oeiksCisJCQkJICBjbG9ja3NvdXJjZV91MzAwXzFtaHoubXVsdCwKKwkJCQkgIGNsb2Nrc291cmNlX3UzMDBfMW1oei5zaGlmdCk7Cit9CisKIAogLyoKICAqIFRoaXMgc2V0cyB1cCB0aGUgc3lzdGVtIHRpbWVycywgY2xvY2sgc291cmNlIGFuZCBjbG9jayBldmVudC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwppbmRleCA5NzVlYWU0Li5lMTNiZTdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2NsY2QuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KQEAgLTQ3LDcgKzQ4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTM2OSw3ICszNjksNyBAQAogCXJldHVybiByZWFkbChWRVJTQVRJTEVfU1lTTUNJKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgbW1jMF9wbGF0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1tY2lfcGxhdGZvcm1fZGF0YSBtbWMwX3BsYXRfZGF0YSA9IHsKIAkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQsCiAJLnN0YXR1cwkJPSBtbWNfc3RhdHVzLAogCS5ncGlvX3dwCT0gLTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGVfcGIuYyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCmluZGV4IDlhZjhkODEuLjIzOWNkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZV9wYi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL3BsMDYxLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTMxLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAiY29yZS5oIgogCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIElSUV9NTUNJMUEJSVJRX1NJQ19NTUNJMUEKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhIG1tYzFfcGxhdF9kYXRhID0geworc3RhdGljIHN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgbW1jMV9wbGF0X2RhdGEgPSB7CiAJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAogCS5zdGF0dXMJCT0gbW1jX3N0YXR1cywKIAkuZ3Bpb193cAk9IC0xLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggNWZlNTk1YS4uOTI2NGQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xNyw3ICsxNyw3IEBACiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WMyBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WMyBpZiBNTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJaGVscAogCSAgVGhlIEFSTTYxMCBpcyB0aGUgc3VjY2Vzc29yIHRvIHRoZSBBUk0zIHByb2Nlc3NvcgogCSAgYW5kIHdhcyBwcm9kdWNlZCBieSBWTFNJIFRlY2hub2xvZ3kgSW5jLgpAQCAtMzEsNyArMzEsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJaGVscAogCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQpAQCAtNDksNyArNDksNyBAQAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjMgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjMgaWYgTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTcgcHJvY2Vzc29yIGNvcmUKIAkgIGRlc2lnbmVkIGJ5IEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgTHRkLiBUaGUgQVJNNzEwIGlzIHRoZQpAQCAtNjQsNyArNjQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNNzIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtODMsNyArODMsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1YzCSMgYWx0aG91Z2ggdGhlIGNvcmUgaXMgdjR0CiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWRlcGVuZHMgb24gIU1NVQogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNAogCWhlbHAKIAkgIEEgMzItYml0IFJJU0MgbWljcm9wcm9jZXNzb3IgYmFzZWQgb24gdGhlIEFSTTkgcHJvY2Vzc29yIGNvcmUKQEAgLTExNCw3ICsxMTQsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0xMjIsMTAgKzEyMiw3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscAogCSAgVGhlIEFSTTkyMFQgaXMgbGljZW5zZWQgdG8gYmUgcHJvZHVjZWQgYnkgbnVtZXJvdXMgdmVuZG9ycywKLQkgIGFuZCBpcyB1c2VkIGluIHRoZSBNYXZlcmljayBFUDkzMTIgYW5kIHRoZSBTYW1zdW5nIFMzQzI0MTAuCi0KLQkgIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIE1hdmVyaWNrIEVQOTMxMiBhdAotCSAgPGh0dHA6Ly9saW51eGRldmljZXMuY29tL3Byb2R1Y3RzL1BEMjM4Mjg2NjA2OC5odG1sPi4KKwkgIGFuZCBpcyB1c2VkIGluIHRoZSBDaXJydXMgRVA5M3h4IGFuZCB0aGUgU2Ftc3VuZyBTM0MyNDEwLgogCiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTIwVCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgpAQCAtMTM1LDcgKzEzMiw3IEBACiAJYm9vbCAiU3VwcG9ydCBBUk05MjJUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE1NCw3ICsxNTEsNyBAQAogIAlib29sICJTdXBwb3J0IEFSTTkyNVQgcHJvY2Vzc29yIiBpZiBBUkNIX09NQVAxCiAJc2VsZWN0IENQVV8zMnY0VAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTE3Myw3ICsxNzAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTI2VCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVRKCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKQEAgLTE5MSw3ICsxODgsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0Ci0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NBQ0hFX0ZBCkBAIC0yMTAsNyArMjA3LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX05PTU1VCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NUFUKIAloZWxwCkBAIC0yMjgsNyArMjI1LDcgQEAKIAlkZXBlbmRzIG9uICFNTVUKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01QVQogCWhlbHAKQEAgLTI0NCw3ICsyNDEsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKQEAgLTI2Miw3ICsyNTksNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMEUgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC0yNzUsNyArMjcyLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTEwMjJFIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKQEAgLTI5Myw3ICsyOTAsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyNkVKLVMgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VCAjIEJ1dCBuZWVkIEphemVsbGUsIGJ1dCBFVjVUSiBpZ25vcmVzIGJpdCAxMAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VICMgY2FuIHByb2JhYmx5IGRvIGJldHRlcgpAQCAtMzExLDcgKzMwOCw3IEBACiAJc2VsZWN0IENQVV8zMnYzIGlmIEFSQ0hfUlBDCiAJc2VsZWN0IENQVV8zMnY0IGlmICFBUkNIX1JQQwogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzMxLDcgKzMyOCw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdCCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtMzQyLDcgKzMzOSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKQEAgLTM1Miw3ICszNDksNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VAotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9MRUdBQ1kKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCkBAIC0zNjMsNyArMzYwLDcgQEAKIAlib29sCiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKLQlzZWxlY3QgQ1BVX1BBQlJUX05PSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfTEVHQUNZCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCiAJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQpAQCAtMzc0LDcgKzM3MSw3IEBACiAJYm9vbAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCi0Jc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX1BBQlJUX0xFR0FDWQogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAogCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfRkVST0NFT04gaWYgTU1VCkBAIC0zOTQsNyArMzkxLDcgQEAKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IE1BQ0hfUkVBTFZJRVdfUEJYCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgotCXNlbGVjdCBDUFVfUEFCUlRfTk9JRkFSCisJc2VsZWN0IENQVV9QQUJSVF9WNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJUFQKIAlzZWxlY3QgQ1BVX0NQMTVfTU1VCkBAIC00MjAsNyArNDE3LDcgQEAKIAlzZWxlY3QgQ1BVXzMydjZLCiAJc2VsZWN0IENQVV8zMnY3CiAJc2VsZWN0IENQVV9BQlJUX0VWNwotCXNlbGVjdCBDUFVfUEFCUlRfSUZBUgorCXNlbGVjdCBDUFVfUEFCUlRfVjcKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y3CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCiAJc2VsZWN0IENQVV9DUDE1X01NVQpAQCAtNDgyLDEwICs0NzksMTMgQEAKIGNvbmZpZyBDUFVfQUJSVF9FVjcKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfSUZBUgorY29uZmlnIENQVV9QQUJSVF9MRUdBQ1kKIAlib29sCiAKLWNvbmZpZyBDUFVfUEFCUlRfTk9JRkFSCitjb25maWcgQ1BVX1BBQlJUX1Y2CisJYm9vbAorCitjb25maWcgQ1BVX1BBQlJUX1Y3CiAJYm9vbAogCiAjIFRoZSBjYWNoZSBtb2RlbApAQCAtNzcxLDMgKzc3MSw4IEBACiAJc2VsZWN0IE9VVEVSX0NBQ0hFCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTDIgY2FjaGUgb24gWFNjYWxlMy4KKworY29uZmlnIEFSTV9MMV9DQUNIRV9TSElGVAorCWludAorCWRlZmF1bHQgNiBpZiBBUkNIX09NQVAzCisJZGVmYXVsdCA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IDYzZTNmNmQuLjA1NWNiMmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tbS9NYWtlZmlsZQpAQCAtMjcsNiArMjcsMTAgQEAKIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjYpCSs9IGFib3J0LWV2Ni5vCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfRVY3KQkrPSBhYm9ydC1ldjcubwogCitvYmotJChDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWSkJKz0gcGFib3J0LWxlZ2FjeS5vCitvYmotJChDT05GSUdfQ1BVX1BBQlJUX1Y2KQkrPSBwYWJvcnQtdjYubworb2JqLSQoQ09ORklHX0NQVV9QQUJSVF9WNykJKz0gcGFib3J0LXY3Lm8KKwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WMykJKz0gY2FjaGUtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNCkJKz0gY2FjaGUtdjQubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNFdUKQkrPSBjYWNoZS12NHd0Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ni5TCmluZGV4IDhmNWMxM2YuLjI5NWUyNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjYuUwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTEyMSwxMSArMTIyLDEzIEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2Nl9jb2hlcmVudF91c2VyX3JhbmdlKQotCisgVU5XSU5EKC5mbnN0YXJ0CQkpCiAjaWZkZWYgSEFSVkFSRF9DQUNIRQogCWJpYwlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUgLSAxCi0xOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGxpbmUKKzE6CisgVVNFUigJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJKQlAIGNsZWFuIEQgbGluZQogCWFkZAlyMCwgcjAsICNDQUNIRV9MSU5FX1NJWkUKKzI6CiAJY21wCXIwLCByMQogCWJsbwkxYgogI2VuZGlmCkBAIC0xNDMsNiArMTQ2LDE5IEBACiAJbW92CXBjLCBscgogCiAvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKK0VORFBST0ModjZfY29oZXJlbnRfdXNlcl9yYW5nZSkKK0VORFBST0ModjZfY29oZXJlbnRfa2Vybl9yYW5nZSkKKworLyoKICAqCXY2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2Uoa2FkZHIpCiAgKgogICoJRW5zdXJlIHRoYXQgdGhlIGRhdGEgaGVsZCBpbiB0aGUgcGFnZSBrYWRkciBpcyB3cml0dGVuIGJhY2sKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMgYi9hcmNoL2FybS9tbS9jYWNoZS12Ny5TCmluZGV4IGJkYTBlYzMuLmUxYmQ5NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtdjcuUwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCiAKQEAgLTE1MywxMyArMTU0LDE2IEBACiAgKgktIHRoZSBJY2FjaGUgZG9lcyBub3QgcmVhZCBkYXRhIGZyb20gdGhlIHdyaXRlIGJ1ZmZlcgogICovCiBFTlRSWSh2N19jb2hlcmVudF91c2VyX3JhbmdlKQorIFVOV0lORCguZm5zdGFydAkJKQogCWRjYWNoZV9saW5lX3NpemUgcjIsIHIzCiAJc3ViCXIzLCByMiwgIzEKIAliaWMJcjAsIHIwLCByMwotMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTEsIDEJCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgorMToKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMSwgMQkpCUAgY2xlYW4gRCBsaW5lIHRvIHRoZSBwb2ludCBvZiB1bmlmaWNhdGlvbgogCWRzYgotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGxpbmUKKyBVU0VSKAltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCSkJQCBpbnZhbGlkYXRlIEkgbGluZQogCWFkZAlyMCwgcjAsIHIyCisyOgogCWNtcAlyMCwgcjEKIAlibG8JMWIKIAltb3YJcjAsICMwCkBAIC0xNjcsNiArMTcxLDE3IEBACiAJZHNiCiAJaXNiCiAJbW92CXBjLCBscgorCisvKgorICogRmF1bHQgaGFuZGxpbmcgZm9yIHRoZSBjYWNoZSBvcGVyYXRpb24gYWJvdmUuIElmIHRoZSB2aXJ0dWFsIGFkZHJlc3MgaW4gcjAKKyAqIGlzbid0IG1hcHBlZCwganVzdCB0cnkgdGhlIG5leHQgcGFnZS4KKyAqLworOTAwMToKKwltb3YJcjAsIHIwLCBsc3IgIzEyCisJbW92CXIwLCByMCwgbHNsICMxMgorCWFkZAlyMCwgcjAsICM0MDk2CisJYgkyYgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0ModjdfY29oZXJlbnRfa2Vybl9yYW5nZSkKIEVORFBST0ModjdfY29oZXJlbnRfdXNlcl9yYW5nZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29udGV4dC5jIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCmluZGV4IDZiZGE3NmEuLmE5ZTIyZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnRleHQuYworKysgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKQEAgLTUwLDEwICs1MCw3IEBACiAJCWlzYigpOwogCQlmbHVzaF90bGJfYWxsKCk7CiAJCWlmIChpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7Ci0JCQlhc20oIm1jcglwMTUsIDAsICUwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEktY2FjaGVcbiIKLQkJCSAgICAibWNyCXAxNSwgMCwgJTAsIGM3LCBjNSwgNglAIGZsdXNoIEJUQUMvQlRCXG4iCi0JCQkgICAgOgotCQkJICAgIDogInIiICgwKSk7CisJCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAkJCWRzYigpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKaW5kZXggYjMwOTI1Zi4uYjk1OTBhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCiAJcGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpOwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKCFtYXNrKQogCQlnb3RvIGVycm9yOwogCi0JaWYgKG1hc2sgIT0gMHhmZmZmZmZmZikKKwlpZiAobWFzayA8IDB4ZmZmZmZmZmZVTEwpCiAJCWdmcCB8PSBHRlBfRE1BOwogCXZpcnQgPSBrbWFsbG9jKHNpemUsIGdmcCk7CiAJaWYgKCF2aXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jIGIvYXJjaC9hcm0vbW0vZmF1bHQtYXJtdi5jCmluZGV4IGJjMDA5OWQuLmQwZDE3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LWFybXYuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC1hcm12LmMKQEAgLTE1MywxNCArMTUzLDExIEBACiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKIAltYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwotCWlmIChtYXBwaW5nKSB7CiAjaWZuZGVmIENPTkZJR19TTVAKLQkJaW50IGRpcnR5ID0gdGVzdF9hbmRfY2xlYXJfYml0KFBHX2RjYWNoZV9kaXJ0eSwgJnBhZ2UtPmZsYWdzKTsKLQotCQlpZiAoZGlydHkpCi0JCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfZGNhY2hlX2RpcnR5LCAmcGFnZS0+ZmxhZ3MpKQorCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKG1hcHBpbmcsIHBhZ2UpOwogI2VuZGlmCi0KKwlpZiAobWFwcGluZykgewogCQlpZiAoY2FjaGVfaXNfdml2dCgpKQogCQkJbWFrZV9jb2hlcmVudChtYXBwaW5nLCB2bWEsIGFkZHIsIHBmbik7CiAJCWVsc2UgaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuYyBiL2FyY2gvYXJtL21tL2ZhdWx0LmMKaW5kZXggY2M4ODI5ZC4uMTBlMDY4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuYworKysgYi9hcmNoL2FybS9tbS9mYXVsdC5jCkBAIC0yNSw2ICsyNSwxOSBAQAogCiAjaW5jbHVkZSAiZmF1bHQuaCIKIAorLyoKKyAqIEZhdWx0IHN0YXR1cyByZWdpc3RlciBlbmNvZGluZ3MuICBXZSBzdGVhbCBiaXQgMzEgZm9yIG91ciBvd24gcHVycG9zZXMuCisgKi8KKyNkZWZpbmUgRlNSX0xOWF9QRgkJKDEgPDwgMzEpCisjZGVmaW5lIEZTUl9XUklURQkJKDEgPDwgMTEpCisjZGVmaW5lIEZTUl9GUzQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgRlNSX0ZTM18wCQkoMTUpCisKK3N0YXRpYyBpbmxpbmUgaW50IGZzcl9mcyh1bnNpZ25lZCBpbnQgZnNyKQoreworCXJldHVybiAoZnNyICYgRlNSX0ZTM18wKSB8IChmc3IgJiBGU1JfRlM0KSA+PiA2OworfQorCiAjaWZkZWYgQ09ORklHX01NVQogCiAjaWZkZWYgQ09ORklHX0tQUk9CRVMKQEAgLTE4MiwxOCArMTk1LDM1IEBACiAjZGVmaW5lIFZNX0ZBVUxUX0JBRE1BUAkJMHgwMTAwMDAKICNkZWZpbmUgVk1fRkFVTFRfQkFEQUNDRVNTCTB4MDIwMDAwCiAKLXN0YXRpYyBpbnQKKy8qCisgKiBDaGVjayB0aGF0IHRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgVk1BIGFsbG93IGZvciB0aGUgZmF1bHQgd2hpY2ggb2NjdXJyZWQuCisgKiBJZiB3ZSBlbmNvdW50ZXJlZCBhIHdyaXRlIGZhdWx0LCB3ZSBtdXN0IGhhdmUgd3JpdGUgcGVybWlzc2lvbiwgb3RoZXJ3aXNlCisgKiB3ZSBhbGxvdyBhbnkgcGVybWlzc2lvbi4KKyAqLworc3RhdGljIGlubGluZSBib29sIGFjY2Vzc19lcnJvcih1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUM7CisKKwlpZiAoZnNyICYgRlNSX1dSSVRFKQorCQltYXNrID0gVk1fV1JJVEU7CisJaWYgKGZzciAmIEZTUl9MTlhfUEYpCisJCW1hc2sgPSBWTV9FWEVDOworCisJcmV0dXJuIHZtYS0+dm1fZmxhZ3MgJiBtYXNrID8gZmFsc2UgOiB0cnVlOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcwogX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCWludCBmYXVsdCwgbWFzazsKKwlpbnQgZmF1bHQ7CiAKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJZmF1bHQgPSBWTV9GQVVMVF9CQURNQVA7Ci0JaWYgKCF2bWEpCisJaWYgKHVubGlrZWx5KCF2bWEpKQogCQlnb3RvIG91dDsKLQlpZiAodm1hLT52bV9zdGFydCA+IGFkZHIpCisJaWYgKHVubGlrZWx5KHZtYS0+dm1fc3RhcnQgPiBhZGRyKSkKIAkJZ290byBjaGVja19zdGFjazsKIAogCS8qCkBAIC0yMDEsNDcgKzIzMSwyNCBAQAogCSAqIG1lbW9yeSBhY2Nlc3MsIHNvIHdlIGNhbiBoYW5kbGUgaXQuCiAJICovCiBnb29kX2FyZWE6Ci0JaWYgKGZzciAmICgxIDw8IDExKSkgLyogd3JpdGU/ICovCi0JCW1hc2sgPSBWTV9XUklURTsKLQllbHNlCi0JCW1hc2sgPSBWTV9SRUFEfFZNX0VYRUN8Vk1fV1JJVEU7Ci0KLQlmYXVsdCA9IFZNX0ZBVUxUX0JBREFDQ0VTUzsKLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgbWFzaykpCisJaWYgKGFjY2Vzc19lcnJvcihmc3IsIHZtYSkpIHsKKwkJZmF1bHQgPSBWTV9GQVVMVF9CQURBQ0NFU1M7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qCi0JICogSWYgZm9yIGFueSByZWFzb24gYXQgYWxsIHdlIGNvdWxkbid0IGhhbmRsZQotCSAqIHRoZSBmYXVsdCwgbWFrZSBzdXJlIHdlIGV4aXQgZ3JhY2VmdWxseSByYXRoZXIKLQkgKiB0aGFuIGVuZGxlc3NseSByZWRvIHRoZSBmYXVsdC4KKwkgKiBJZiBmb3IgYW55IHJlYXNvbiBhdCBhbGwgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBmYXVsdCwgbWFrZQorCSAqIHN1cmUgd2UgZXhpdCBncmFjZWZ1bGx5IHJhdGhlciB0aGFuIGVuZGxlc3NseSByZWRvIHRoZSBmYXVsdC4KIAkgKi8KLXN1cnZpdmU6Ci0JZmF1bHQgPSBoYW5kbGVfbW1fZmF1bHQobW0sIHZtYSwgYWRkciAmIFBBR0VfTUFTSywgKGZzciAmICgxIDw8IDExKSkgPyBGQVVMVF9GTEFHX1dSSVRFIDogMCk7Ci0JaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7Ci0JCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKLQkJCWdvdG8gb3V0X29mX21lbW9yeTsKLQkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCi0JCQlyZXR1cm4gZmF1bHQ7Ci0JCUJVRygpOwotCX0KKwlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyICYgUEFHRV9NQVNLLCAoZnNyICYgRlNSX1dSSVRFKSA/IEZBVUxUX0ZMQUdfV1JJVEUgOiAwKTsKKwlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpCisJCXJldHVybiBmYXVsdDsKIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9NQUpPUikKIAkJdHNrLT5tYWpfZmx0Kys7CiAJZWxzZQogCQl0c2stPm1pbl9mbHQrKzsKIAlyZXR1cm4gZmF1bHQ7CiAKLW91dF9vZl9tZW1vcnk6Ci0JaWYgKCFpc19nbG9iYWxfaW5pdCh0c2spKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogSWYgd2UgYXJlIG91dCBvZiBtZW1vcnkgZm9yIHBpZDEsIHNsZWVwIGZvciBhIHdoaWxlIGFuZCByZXRyeQotCSAqLwotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JeWllbGQoKTsKLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JZ290byBzdXJ2aXZlOwotCiBjaGVja19zdGFjazoKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTiAmJiAhZXhwYW5kX3N0YWNrKHZtYSwgYWRkcikpCiAJCWdvdG8gZ29vZF9hcmVhOwpAQCAtMjc4LDYgKzI4NSwxOCBAQAogCQlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJiAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSkKIAkJCWdvdG8gbm9fY29udGV4dDsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSBhYm92ZSBkb3duX3JlYWRfdHJ5bG9jaygpIG1pZ2h0IGhhdmUgc3VjY2VlZGVkIGluCisJCSAqIHdoaWNoIGNhc2UsIHdlJ2xsIGhhdmUgbWlzc2VkIHRoZSBtaWdodF9zbGVlcCgpIGZyb20KKwkJICogZG93bl9yZWFkKCkKKwkJICovCisJCW1pZ2h0X3NsZWVwKCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCisJCWlmICghdXNlcl9tb2RlKHJlZ3MpICYmCisJCSAgICAhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSkKKwkJCWdvdG8gbm9fY29udGV4dDsKKyNlbmRpZgogCX0KIAogCWZhdWx0ID0gX19kb19wYWdlX2ZhdWx0KG1tLCBhZGRyLCBmc3IsIHRzayk7CkBAIC0yODksNiArMzA4LDE2IEBACiAJaWYgKGxpa2VseSghKGZhdWx0ICYgKFZNX0ZBVUxUX0VSUk9SIHwgVk1fRkFVTFRfQkFETUFQIHwgVk1fRkFVTFRfQkFEQUNDRVNTKSkpKQogCQlyZXR1cm4gMDsKIAorCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgeworCQkvKgorCQkgKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgY2FsbCB0aGUgT09NIGtpbGxlciwgYW5kIHJldHVybiB0bworCQkgKiB1c2Vyc3BhY2UgKHdoaWNoIHdpbGwgcmV0cnkgdGhlIGZhdWx0LCBvciBraWxsIHVzIGlmIHdlCisJCSAqIGdvdCBvb20ta2lsbGVkKQorCQkgKi8KKwkJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKIAkgKiBJZiB3ZSBhcmUgaW4ga2VybmVsIG1vZGUgYXQgdGhpcyBwb2ludCwgd2UKIAkgKiBoYXZlIG5vIGNvbnRleHQgdG8gaGFuZGxlIHRoaXMgZmF1bHQgd2l0aC4KQEAgLTI5NiwxNiArMzI1LDYgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJZ290byBub19jb250ZXh0OwogCi0JaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7Ci0JCS8qCi0JCSAqIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nCi0JCSAqIGhhcHBlbmVkIHRvIHVzIHRoYXQgbWFkZSB1cyB1bmFibGUgdG8gaGFuZGxlCi0JCSAqIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCi0JCSAqLwotCQlwcmludGsoIlZNOiBraWxsaW5nIHByb2Nlc3MgJXNcbiIsIHRzay0+Y29tbSk7Ci0JCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7Ci0JCXJldHVybiAwOwotCX0KIAlpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJLyoKIAkJICogV2UgaGFkIHNvbWUgbWVtb3J5LCBidXQgd2VyZSB1bmFibGUgdG8KQEAgLTQ4OSwxMCArNTA4LDEwIEBACiBhc21saW5rYWdlIHZvaWQgX19leGNlcHRpb24KIGRvX0RhdGFBYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gZnNyX2luZm8gKyAoZnNyICYgMTUpICsgKChmc3IgJiAoMSA8PCAxMCkpID4+IDYpOworCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gZnNyX2luZm8gKyBmc3JfZnMoZnNyKTsKIAlzdHJ1Y3Qgc2lnaW5mbyBpbmZvOwogCi0JaWYgKCFpbmYtPmZuKGFkZHIsIGZzciwgcmVncykpCisJaWYgKCFpbmYtPmZuKGFkZHIsIGZzciAmIH5GU1JfTE5YX1BGLCByZWdzKSkKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fQUxFUlQgIlVuaGFuZGxlZCBmYXVsdDogJXMgKDB4JTAzeCkgYXQgMHglMDhseFxuIiwKQEAgLTUwNSw5ICs1MjQsNTggQEAKIAlhcm1fbm90aWZ5X2RpZSgiIiwgcmVncywgJmluZm8sIGZzciwgMCk7CiB9CiAKKworc3RhdGljIHN0cnVjdCBmc3JfaW5mbyBpZnNyX2luZm9bXSA9IHsKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJkZWJ1ZyBldmVudCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJzZWN0aW9uIGFjY2VzcyBmbGFnIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDQiCQkJICAgfSwKKwl7IGRvX3RyYW5zbGF0aW9uX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJInNlY3Rpb24gdHJhbnNsYXRpb24gZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdTRUdWLCBTRUdWX0FDQ0VSUiwJInBhZ2UgYWNjZXNzIGZsYWcgZmF1bHQiCSAgIH0sCisJeyBkb19wYWdlX2ZhdWx0LAlTSUdTRUdWLCBTRUdWX01BUEVSUiwJInBhZ2UgdHJhbnNsYXRpb24gZmF1bHQiCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsCSAwLAkJImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giICB9LAorCXsgZG9fYmFkLAkJU0lHU0VHViwgU0VHVl9BQ0NFUlIsCSJzZWN0aW9uIGRvbWFpbiBmYXVsdCIJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkicGFnZSBkb21haW4gZmF1bHQiCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIJICAgfSwKKwl7IGRvX3NlY3RfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkic2VjdGlvbiBwZXJtaXNzaW9uIGZhdWx0IgkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLAkgMCwJCSJleHRlcm5hbCBhYm9ydCBvbiB0cmFuc2xhdGlvbiIJICAgfSwKKwl7IGRvX3BhZ2VfZmF1bHQsCVNJR1NFR1YsIFNFR1ZfQUNDRVJSLAkicGFnZSBwZXJtaXNzaW9uIGZhdWx0IgkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxNiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDE3IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMTgiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAxOSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIwIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjEiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyMiIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDIzIgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjQiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyNSIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI2IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMjciCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAyOCIJCQkgICB9LAorCXsgZG9fYmFkLAkJU0lHQlVTLCAgMCwJCSJ1bmtub3duIDI5IgkJCSAgIH0sCisJeyBkb19iYWQsCQlTSUdCVVMsICAwLAkJInVua25vd24gMzAiCQkJICAgfSwKKwl7IGRvX2JhZCwJCVNJR0JVUywgIDAsCQkidW5rbm93biAzMSIJCQkgICB9LAorfTsKKwogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uCi1kb19QcmVmZXRjaEFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitkb19QcmVmZXRjaEFib3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGlmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX3RyYW5zbGF0aW9uX2ZhdWx0KGFkZHIsIDAsIHJlZ3MpOworCWNvbnN0IHN0cnVjdCBmc3JfaW5mbyAqaW5mID0gaWZzcl9pbmZvICsgZnNyX2ZzKGlmc3IpOworCXN0cnVjdCBzaWdpbmZvIGluZm87CisKKwlpZiAoIWluZi0+Zm4oYWRkciwgaWZzciB8IEZTUl9MTlhfUEYsIHJlZ3MpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9BTEVSVCAiVW5oYW5kbGVkIHByZWZldGNoIGFib3J0OiAlcyAoMHglMDN4KSBhdCAweCUwOGx4XG4iLAorCQlpbmYtPm5hbWUsIGlmc3IsIGFkZHIpOworCisJaW5mby5zaV9zaWdubyA9IGluZi0+c2lnOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfY29kZSAgPSBpbmYtPmNvZGU7CisJaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKWFkZHI7CisJYXJtX25vdGlmeV9kaWUoIiIsIHJlZ3MsICZpbmZvLCBpZnNyLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggYjI3OTQyOS4uN2YyOTRmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xOCwxMCArMTgsNiBAQAogCiAjaW5jbHVkZSAibW0uaCIKIAotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotZXh0ZXJuIHZvaWQgdjZfaWNhY2hlX2ludmFsX2FsbCh2b2lkKTsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAKICNkZWZpbmUgQUxJQVNfRkxVU0hfU1RBUlQJMHhmZmZmNDAwMApAQCAtMzUsMTYgKzMxLDExIEBACiAJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHRvKTsKIAogCWFzbSgJIm1jcnIJcDE1LCAwLCAlMSwgJTAsIGMxNFxuIgotCSIJbWNyCXAxNSwgMCwgJTIsIGM3LCBjMTAsIDRcbiIKLSNpZm5kZWYgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwCi0JIgltY3IJcDE1LCAwLCAlMiwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkiCW1jcglwMTUsIDAsICUyLCBjNywgYzEwLCA0IgogCSAgICA6CiAJICAgIDogInIiICh0byksICJyIiAodG8gKyBQQUdFX1NJWkUgLSBMMV9DQUNIRV9CWVRFUyksICJyIiAoemVybykKIAkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIH0KIAogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTU3LDE2ICs0OCwxMSBAQAogCiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgewogCQlhc20oCSJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMFxuIgotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0XG4iCi0jaWZuZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzUsIDBcbiIKLSNlbmRpZgorCQkiCW1jcglwMTUsIDAsICUwLCBjNywgYzEwLCA0IgogCQkgICAgOgogCQkgICAgOiAiciIgKDApCiAJCSAgICA6ICJjYyIpOwotI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMAotCQl2Nl9pY2FjaGVfaW52YWxfYWxsKCk7Ci0jZW5kaWYKKwkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCkBAIC04MSwxNiArNjcsMTEgQEAKIAogCWlmIChjYWNoZV9pc192aXB0X2FsaWFzaW5nKCkpIHsKIAkJYXNtKAkibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTQsIDBcbiIKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNFxuIgotI2lmbmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGM1LCAwXG4iCi0jZW5kaWYKKwkJIgltY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIKIAkJICAgIDoKIAkJICAgIDogInIiICgwKQogCQkgICAgOiAiY2MiKTsKLSNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAKLQkJdjZfaWNhY2hlX2ludmFsX2FsbCgpOwotI2VuZGlmCisJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaGlnaG1lbS5jIGIvYXJjaC9hcm0vbW0vaGlnaG1lbS5jCmluZGV4IDczY2FlNTcuLjMwZjgyZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2hpZ2htZW0uYworKysgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKQEAgLTQ2LDYgKzQ2LDggQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CisKIAlrbWFwID0ga21hcF9oaWdoX2dldChwYWdlKTsKIAlpZiAoa21hcCkKIAkJcmV0dXJuIGttYXA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZjk4MjYwNi4uNTJjNDBkMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMjczLDcgKzI3Myw2IEBACiAJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOwogCQlpZiAoIWJhbmstPmhpZ2htZW0pCiAJCQlmcmVlX2Jvb3RtZW1fbm9kZShwZ2RhdCwgYmFua19waHlzX3N0YXJ0KGJhbmspLCBiYW5rX3BoeXNfc2l6ZShiYW5rKSk7Ci0JCW1lbW9yeV9wcmVzZW50KG5vZGUsIGJhbmtfcGZuX3N0YXJ0KGJhbmspLCBiYW5rX3Bmbl9lbmQoYmFuaykpOwogCX0KIAogCS8qCkBAIC0zNzAsNiArMzY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKHBmbl92YWxpZCk7CisKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGFybV9tZW1vcnlfcHJlc2VudChzdHJ1Y3QgbWVtaW5mbyAqbWksIGludCBub2RlKQoreworCWludCBpOworCWZvcl9lYWNoX25vZGViYW5rKGksIG1pLCBub2RlKSB7CisJCXN0cnVjdCBtZW1iYW5rICpiYW5rID0gJm1pLT5iYW5rW2ldOworCQltZW1vcnlfcHJlc2VudChub2RlLCBiYW5rX3Bmbl9zdGFydChiYW5rKSwgYmFua19wZm5fZW5kKGJhbmspKTsKKwl9Cit9CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgbWVtaW5mb19jbXAoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQpAQCAtNDI3LDYgKzQzOSwxMiBAQAogCQkgKi8KIAkJaWYgKG5vZGUgPT0gaW5pdHJkX25vZGUpCiAJCQlib290bWVtX3Jlc2VydmVfaW5pdHJkKG5vZGUpOworCisJCS8qCisJCSAqIFNwYXJzZW1lbSB0cmllcyB0byBhbGxvY2F0ZSBib290bWVtIGluIG1lbW9yeV9wcmVzZW50KCksCisJCSAqIHNvIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgZml4ZWQgcmVzZXJ2YXRpb25zCisJCSAqLworCQlhcm1fbWVtb3J5X3ByZXNlbnQobWksIG5vZGUpOwogCX0KIAogCS8qCkBAIC00ODMsNyArNTAxLDcgQEAKIAkvKgogCSAqIENvbnZlcnQgc3RhcnRfcGZuL2VuZF9wZm4gdG8gYSBzdHJ1Y3QgcGFnZSBwb2ludGVyLgogCSAqLwotCXN0YXJ0X3BnID0gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKKwlzdGFydF9wZyA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAtIDEpICsgMTsKIAllbmRfcGcgPSBwZm5fdG9fcGFnZShlbmRfcGZuKTsKIAogCS8qCkBAIC02MTMsNiArNjMxLDE0IEBACiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX0hBVkVfVENNCisJZXh0ZXJuIGNoYXIgKl9fdGNtX3N0YXJ0LCAqX190Y21fZW5kOworCisJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hcmVhKF9fcGh5c190b19wZm4oX19wYShfX3RjbV9zdGFydCkpLAorCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoX190Y21fZW5kKSksCisJCQkJICAgICJUQ00gbGluayIpOworI2VuZGlmCisKIAlpZiAoIW1hY2hpbmVfaXNfaW50ZWdyYXRvcigpICYmICFtYWNoaW5lX2lzX2NpbnRlZ3JhdG9yKCkpCiAJCXRvdGFscmFtX3BhZ2VzICs9IGZyZWVfYXJlYShfX3BoeXNfdG9fcGZuKF9fcGEoX19pbml0X2JlZ2luKSksCiAJCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoX19pbml0X2VuZCkpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW1hcC5jIGIvYXJjaC9hcm0vbW0vbW1hcC5jCmluZGV4IGY3NDU3ZmUuLjJiNzk5NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tYXAuYworKysgYi9hcmNoL2FybS9tbS9tbWFwLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogewogCWlmIChhZGRyIDwgUEhZU19PRkZTRVQpCiAJCXJldHVybiAwOwotCWlmIChhZGRyICsgc2l6ZSA+PSBfX3BhKGhpZ2hfbWVtb3J5IC0gMSkpCisJaWYgKGFkZHIgKyBzaXplID4gX19wYShoaWdoX21lbW9yeSAtIDEpICsgMSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tdS5jIGIvYXJjaC9hcm0vbW0vbW11LmMKaW5kZXggNDQyNmVlNi4uZWE2N2JlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW11LmMKKysrIGIvYXJjaC9hcm0vbW0vbW11LmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9oaWdobWVtLmg+CiAKQEAgLTExNiw2ICsxMTcsMTMgQEAKIAl9CiAJaWYgKGkgPT0gQVJSQVlfU0laRShjYWNoZV9wb2xpY2llcykpCiAJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgY2FjaGUgcG9saWN5XG4iKTsKKwkvKgorCSAqIFRoaXMgcmVzdHJpY3Rpb24gaXMgcGFydGx5IHRvIGRvIHdpdGggdGhlIHdheSB3ZSBib290OyBpdCBpcworCSAqIHVucHJlZGljdGFibGUgdG8gaGF2ZSBtZW1vcnkgbWFwcGVkIHVzaW5nIHR3byBkaWZmZXJlbnQgc2V0cyBvZgorCSAqIG1lbW9yeSBhdHRyaWJ1dGVzIChzaGFyZWQsIHR5cGUsIGFuZCBjYWNoZSBhdHRyaWJzKS4gIFdlIGNhbiBub3QKKwkgKiBjaGFuZ2UgdGhlc2UgYXR0cmlidXRlcyBvbmNlIHRoZSBpbml0aWFsIGFzc2VtYmx5IGhhcyBzZXR1cCB0aGUKKwkgKiBwYWdlIHRhYmxlcy4KKwkgKi8KIAlpZiAoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9ubHkgY2FjaGVwb2xpY3k9d3JpdGViYWNrIHN1cHBvcnRlZCBvbiBBUk12NiBhbmQgbGF0ZXJcbiIpOwogCQljYWNoZXBvbGljeSA9IENQT0xJQ1lfV1JJVEVCQUNLOwpAQCAtNzA5LDEwICs3MTcsNiBAQAogCQkJaWYgKG1lbWluZm8ubnJfYmFua3MgPj0gTlJfQkFOS1MpIHsKIAkJCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCiAJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKLQkJCX0gZWxzZSBpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVCAiSElHSE1FTSBpcyBub3QgeWV0IHN1cHBvcnRlZCAiCi0JCQkJCQkgIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSwgIgotCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7CiAJCQl9IGVsc2UgewogCQkJCW1lbW1vdmUoYmFuayArIDEsIGJhbmssCiAJCQkJCShtZW1pbmZvLm5yX2JhbmtzIC0gaSkgKiBzaXplb2YoKmJhbmspKTsKQEAgLTcyNiw2ICs3MzAsOCBAQAogCQkJYmFuay0+c2l6ZSA9IFZNQUxMT0NfTUlOIC0gX192YShiYW5rLT5zdGFydCk7CiAJCX0KICNlbHNlCisJCWJhbmstPmhpZ2htZW0gPSBoaWdobWVtOworCiAJCS8qCiAJCSAqIENoZWNrIHdoZXRoZXIgdGhpcyBtZW1vcnkgYmFuayB3b3VsZCBlbnRpcmVseSBvdmVybGFwCiAJCSAqIHRoZSB2bWFsbG9jIGFyZWEuCkBAIC03NTQsNiArNzYwLDM4IEBACiAjZW5kaWYKIAkJaisrOwogCX0KKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWlmIChoaWdobWVtKSB7CisJCWNvbnN0IGNoYXIgKnJlYXNvbiA9IE5VTEw7CisKKwkJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgeworCQkJLyoKKwkJCSAqIEludGVyYWN0aW9ucyBiZXR3ZWVuIGttYXAgYW5kIG90aGVyIG1hcHBpbmdzCisJCQkgKiBtYWtlIGhpZ2htZW0gc3VwcG9ydCB3aXRoIGFsaWFzaW5nIFZJUFQgY2FjaGVzCisJCQkgKiByYXRoZXIgZGlmZmljdWx0LgorCQkJICovCisJCQlyZWFzb24gPSAid2l0aCBWSVBUIGFsaWFzaW5nIGNhY2hlIjsKKyNpZmRlZiBDT05GSUdfU01QCisJCX0gZWxzZSBpZiAodGxiX29wc19uZWVkX2Jyb2FkY2FzdCgpKSB7CisJCQkvKgorCQkJICoga21hcF9oaWdoIG5lZWRzIHRvIG9jY2FzaW9uYWxseSBmbHVzaCBUTEIgZW50cmllcywKKwkJCSAqIGhvd2V2ZXIsIGlmIHRoZSBUTEIgZW50cmllcyBuZWVkIHRvIGJlIGJyb2FkY2FzdAorCQkJICogd2UgbWF5IGRlYWRsb2NrOgorCQkJICogIGttYXBfaGlnaChpcnFzIG9mZiktPmZsdXNoX2FsbF96ZXJvX3BrbWFwcy0+CisJCQkgKiAgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZS0+c21wX2NhbGxfZnVuY3Rpb25fbWFueQorCQkJICogICAobXVzdCBub3QgYmUgY2FsbGVkIHdpdGggaXJxcyBvZmYpCisJCQkgKi8KKwkJCXJlYXNvbiA9ICJ3aXRob3V0IGhhcmR3YXJlIFRMQiBvcHMgYnJvYWRjYXN0aW5nIjsKKyNlbmRpZgorCQl9CisJCWlmIChyZWFzb24pIHsKKwkJCXByaW50ayhLRVJOX0NSSVQgIkhJR0hNRU0gaXMgbm90IHN1cHBvcnRlZCAlcywgaWdub3JpbmcgaGlnaCBtZW1vcnlcbiIsCisJCQkJcmVhc29uKTsKKwkJCXdoaWxlIChqID4gMCAmJiBtZW1pbmZvLmJhbmtbaiAtIDFdLmhpZ2htZW0pCisJCQkJai0tOworCQl9CisJfQorI2VuZGlmCiAJbWVtaW5mby5ucl9iYW5rcyA9IGo7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUyBiL2FyY2gvYXJtL21tL3BhYm9ydC1sZWdhY3kuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzk3MGViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcGFib3J0LWxlZ2FjeS5TCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IGxlZ2FjeV9wYWJvcnQKKyAqCisgKiBQYXJhbXMgIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0ZWQgaW5zdHJ1Y3Rpb24KKyAqCisgKiBSZXR1cm5zIDogcjAgPSBhZGRyZXNzIG9mIGFib3J0CisgKgkgICA6IHIxID0gU2ltdWxhdGVkIElGU1Igd2l0aCBzZWN0aW9uIHRyYW5zbGF0aW9uIGZhdWx0IHN0YXR1cworICoKKyAqIFB1cnBvc2UgOiBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgY3VycmVudCBwcmVmZXRjaCBhYm9ydC4KKyAqLworCisJLmFsaWduCTUKK0VOVFJZKGxlZ2FjeV9wYWJvcnQpCisJbW92CXIxLCAjNQorCW1vdglwYywgbHIKK0VORFBST0MobGVnYWN5X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlM2QxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ni5TCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IHY2X3BhYm9ydAorICoKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnMgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnQKKyAqCSAgIDogcjEgPSBJRlNSCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHByZWZldGNoIGFib3J0LgorICovCisKKwkuYWxpZ24JNQorRU5UUlkodjZfcGFib3J0KQorCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDEJCUAgZ2V0IElGU1IKKwltb3YJcGMsIGxyCitFTkRQUk9DKHY2X3BhYm9ydCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3BhYm9ydC12Ny5TIGIvYXJjaC9hcm0vbW0vcGFib3J0LXY3LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiM2IzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3BhYm9ydC12Ny5TCkBAIC0wLDAgKzEsMjAgQEAKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorCisvKgorICogRnVuY3Rpb246IHY2X3BhYm9ydAorICoKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnRlZCBpbnN0cnVjdGlvbgorICoKKyAqIFJldHVybnMgOiByMCA9IGFkZHJlc3Mgb2YgYWJvcnQKKyAqCSAgIDogcjEgPSBJRlNSCisgKgorICogUHVycG9zZSA6IG9idGFpbiBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IHByZWZldGNoIGFib3J0LgorICovCisKKwkuYWxpZ24JNQorRU5UUlkodjdfcGFib3J0KQorCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDIJCUAgZ2V0IElGQVIKKwltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAxCQlAIGdldCBJRlNSCisJbW92CXBjLCBscgorRU5EUFJPQyh2N19wYWJvcnQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCmluZGV4IGI1NTUxYmYuLmQ5ZmI0YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMC5TCkBAIC00NDksNyArNDQ5LDcgQEAKIAkudHlwZQlhcm0xMDIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwppbmRleCA4YmM2NzQwLi43NDUzYjc1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCkBAIC00MzAsNyArNDMwLDcgQEAKIAkudHlwZQlhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTEwMjBlX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDIwZV9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDIwZV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwppbmRleCAyY2QwM2U2Li44ZWI3MmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjIuUwpAQCAtNDEzLDcgKzQxMyw3IEBACiAJLnR5cGUJYXJtMTAyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtMTAyMl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtMTAyMl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm0xMDIyX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCmluZGV4IGFkOTYxYTguLjNiNTlmMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyNi5TCkBAIC00MDgsNyArNDA4LDcgQEAKIAkudHlwZQlhcm0xMDI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm0xMDI2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm0xMDI2X3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTEwMjZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCmluZGV4IDgwZDZlMWQuLjNmOWNkM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCS50eXBlCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNl9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAljcHVfYXJtNl9kYXRhX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtNl9wcm9jX2luaXQKIAkJLndvcmQJY3B1X2FybTZfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTZfcmVzZXQKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQkudHlwZQlhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTdfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkJLndvcmQJY3B1X2FybTdfZGF0YV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTdfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm03X3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm03X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwppbmRleCA4NWFlMTg2Li4wYjYyZGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKQEAgLTE4MSw3ICsxODEsNyBAQAogCQkudHlwZQlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtNzIwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtNzIwX3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtNzIwX3Byb2NfZmluCiAJCS53b3JkCWNwdV9hcm03MjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCmluZGV4IDRmOTViZWUuLjAxODYwY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJLnR5cGUJYXJtNzQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY0dF9sYXRlX2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtNzQwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm03NDBfcHJvY19maW4KIAkud29yZAljcHVfYXJtNzQwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKaW5kZXggOTNlMDVmYS4uMTIwMWI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwpAQCAtNjQsNyArNjQsNyBAQAogCQkudHlwZQlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCQkud29yZAl2NHRfbGF0ZV9hYm9ydAotCQkud29yZAlwYWJvcnRfbm9pZmFyCisJCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkJLndvcmQJY3B1X2FybTd0ZG1pX3Byb2NfaW5pdAogCQkud29yZAljcHVfYXJtN3RkbWlfcHJvY19maW4KIAkJLndvcmQJY3B1X2FybTd0ZG1pX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUwppbmRleCA5MTRkNjg4Li4yYjdjMTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKQEAgLTM5NSw3ICszOTUsNyBAQAogCS50eXBlCWFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjBfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NHRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05MjBfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTkyMF9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05MjBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IDUxYzljOTguLjA2YTFhYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJLnR5cGUJYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIGFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTkyMl9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTIyX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTkyMl9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggMjcyNDUyNi4uY2I1MzQzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNS5TCkBAIC00NjIsNyArNDYyLDcgQEAKIAkudHlwZQlhcm05MjVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CiAJLndvcmQJdjR0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTI1X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjVfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTI1X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwppbmRleCA1NDQ2NjkzLi4xYzQ4NDg3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKQEAgLTQxNSw3ICs0MTUsNyBAQAogCS50eXBlCWFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRqX2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfYXJtOTI2X3Byb2NfaW5pdAogCS53b3JkCWNwdV9hcm05MjZfcHJvY19maW4KIAkud29yZAljcHVfYXJtOTI2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwppbmRleCBmNTk1MTE3Li41YjBmODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKQEAgLTMyMiw3ICszMjIsNyBAQAogCS50eXBlCWFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWShhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAlub21tdV9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X2FybTk0MF9wcm9jX2luaXQKIAkud29yZAljcHVfYXJtOTQwX3Byb2NfZmluCiAJLndvcmQJY3B1X2FybTk0MF9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQ2LlMKaW5kZXggZTAzZjZmZi4uNDBjMDQ0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkudHlwZQlhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkoYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9hcm05NDZfcHJvY19pbml0CiAJLndvcmQJY3B1X2FybTk0Nl9wcm9jX2ZpbgogCS53b3JkCWNwdV9hcm05NDZfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwppbmRleCBiZTZjMTFkLi4yODU0NWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC02NCw3ICs2NCw3IEBACiAJCS50eXBlCWFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKGFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0Ci0JCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkJLndvcmQJbGVnYWN5X3BhYm9ydAogCQkud29yZAljcHVfYXJtOXRkbWlfcHJvY19pbml0CiAJCS53b3JkCWNwdV9hcm05dGRtaV9wcm9jX2ZpbgogCQkud29yZAljcHVfYXJtOXRkbWlfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwppbmRleCAwOGI4YTk1Li4wOGY1YWMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkudHlwZQlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfZmE1MjZfcHJvY19pbml0CiAJLndvcmQJY3B1X2ZhNTI2X3Byb2NfZmluCiAJLndvcmQJY3B1X2ZhNTI2X3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKaW5kZXggMGZlMWY4Zi4uZDBkNzc5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAJLnR5cGUJZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogZmVyb2Nlb25fcHJvY2Vzc29yX2Z1bmN0aW9uczoKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9mZXJvY2Vvbl9wcm9jX2luaXQKIAkud29yZAljcHVfZmVyb2Nlb25fcHJvY19maW4KIAkud29yZAljcHVfZmVyb2Nlb25fcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCmluZGV4IDU0MGY1MDcuLjUyYjVmZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJLnR5cGUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIG1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zOgogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X21vaGF3a19wcm9jX2luaXQKIAkud29yZAljcHVfbW9oYXdrX3Byb2NfZmluCiAJLndvcmQJY3B1X21vaGF3a19yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IDkwYTdlNTIuLjdiNzA2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTE5OSw3ICsxOTksNyBAQAogCS50eXBlCXNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHNhMTEwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMpCiAJLndvcmQJdjRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV9zYTExMF9wcm9jX2luaXQKIAkud29yZAljcHVfc2ExMTBfcHJvY19maW4KIAkud29yZAljcHVfc2ExMTBfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCmluZGV4IDQ1MWUyZDkuLmVlNzcwMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJLnR5cGUJc2ExMTAwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY0X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X25vaWZhcgorCS53b3JkCWxlZ2FjeV9wYWJvcnQKIAkud29yZAljcHVfc2ExMTAwX3Byb2NfaW5pdAogCS53b3JkCWNwdV9zYTExMDBfcHJvY19maW4KIAkud29yZAljcHVfc2ExMTAwX3Jlc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY2LlMKaW5kZXggNTI0ZGRhZS4uNzBmNzVkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwpAQCAtMzIsOCArMzIsMTAgQEAKIAogI2lmbmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIFRUQl9GTEFHUwlUVEJfUkdOX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogI2RlZmluZSBUVEJfRkxBR1MJVFRCX1JHTl9XQldBfFRUQl9TCisjZGVmaW5lIFBNRF9GTEFHUwlQTURfU0VDVF9XQldBfFBNRF9TRUNUX1MKICNlbmRpZgogCiBFTlRSWShjcHVfdjZfcHJvY19pbml0KQpAQCAtMTkxLDcgKzE5Myw3IEBACiAJLnR5cGUJdjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAogRU5UUlkodjZfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2Nl9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAl2Nl9wYWJvcnQKIAkud29yZAljcHVfdjZfcHJvY19pbml0CiAJLndvcmQJY3B1X3Y2X3Byb2NfZmluCiAJLndvcmQJY3B1X3Y2X3Jlc2V0CkBAIC0yMjIsMTAgKzIyNCw5IEBACiAJLmxvbmcJMHgwMDA3YjAwMAogCS5sb25nCTB4MDAwN2YwMDAKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMgYi9hcmNoL2FybS9tbS9wcm9jLXY3LlMKaW5kZXggZjNmYTFjMy4uM2EyODUyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwpAQCAtMzMsOSArMzMsMTEgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCIG5vdCBzaGFyZWFibGUsIG91dGVyIFdCIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCfFRUQl9SR05fT0NfV0IKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCCiAjZWxzZQogLyogUFRXcyBjYWNoZWFibGUsIGlubmVyIFdCV0Egc2hhcmVhYmxlLCBvdXRlciBXQldBIG5vdCBzaGFyZWFibGUgKi8KICNkZWZpbmUgVFRCX0ZMQUdTCVRUQl9JUkdOX1dCV0F8VFRCX1N8VFRCX05PU3xUVEJfUkdOX09DX1dCV0EKKyNkZWZpbmUgUE1EX0ZMQUdTCVBNRF9TRUNUX1dCV0F8UE1EX1NFQ1RfUwogI2VuZGlmCiAKIEVOVFJZKGNwdV92N19wcm9jX2luaXQpCkBAIC0xODQsOSArMTg2LDEwIEBACiAgKi8KIF9fdjdfc2V0dXA6CiAjaWZkZWYgQ09ORklHX1NNUAotCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDEJCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCi0Jb3JyCXIwLCByMCwgIygxIDw8IDYpIHwgKDEgPDwgMCkJQCBUTEIgb3BzIGJyb2FkY2FzdGluZwotCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDEKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAxCisJdHN0CXIwLCAjKDEgPDwgNikJCQlAIFNNUC9uQU1QIG1vZGUgZW5hYmxlZD8KKwlvcnJlcQlyMCwgcjAsICMoMSA8PCA2KSB8ICgxIDw8IDApCUAgRW5hYmxlIFNNUC9uQU1QIG1vZGUgYW5kCisJbWNyZXEJcDE1LCAwLCByMCwgYzEsIGMwLCAxCQlAIFRMQiBvcHMgYnJvYWRjYXN0aW5nCiAjZW5kaWYKIAlhZHIJcjEyLCBfX3Y3X3NldHVwX3N0YWNrCQlAIHRoZSBsb2NhbCBzdGFjawogCXN0bWlhCXIxMiwge3IwLXI1LCByNywgcjksIHIxMSwgbHJ9CkBAIC0yOTUsNyArMjk4LDcgQEAKIAkudHlwZQl2N19wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CiBFTlRSWSh2N19wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY3X2Vhcmx5X2Fib3J0Ci0JLndvcmQJcGFib3J0X2lmYXIKKwkud29yZAl2N19wYWJvcnQKIAkud29yZAljcHVfdjdfcHJvY19pbml0CiAJLndvcmQJY3B1X3Y3X3Byb2NfZmluCiAJLndvcmQJY3B1X3Y3X3Jlc2V0CkBAIC0zMjYsMTAgKzMyOSw5IEBACiAJLmxvbmcJMHgwMDBmMDAwMAkJQCBSZXF1aXJlZCBJRCB2YWx1ZQogCS5sb25nCTB4MDAwZjAwMDAJCUAgTWFzayBmb3IgSUQKIAkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCi0JCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCi0JCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCi0JCVBNRF9TRUNUX0FQX1JFQUQKKwkJUE1EX1NFQ1RfQVBfUkVBRCB8IFwKKwkJUE1EX0ZMQUdTCiAJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAogCQlQTURfU0VDVF9YTiB8IFwKIAkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzYzMuUyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCmluZGV4IDMzNTE1YzIuLjIwMjhmMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TCkBAIC00MjgsNyArNDI4LDcgQEAKIAkudHlwZQl4c2MzX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucykKIAkud29yZAl2NXRfZWFybHlfYWJvcnQKLQkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJbGVnYWN5X3BhYm9ydAogCS53b3JkCWNwdV94c2MzX3Byb2NfaW5pdAogCS53b3JkCWNwdV94c2MzX3Byb2NfZmluCiAJLndvcmQJY3B1X3hzYzNfcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDQyMzM5NDIuLmYwNTZjMjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtNTExLDcgKzUxMSw3IEBACiAJLnR5cGUJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKIEVOVFJZKHhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zKQogCS53b3JkCXY1dF9lYXJseV9hYm9ydAotCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAlsZWdhY3lfcGFib3J0CiAJLndvcmQJY3B1X3hzY2FsZV9wcm9jX2luaXQKIAkud29yZAljcHVfeHNjYWxlX3Byb2NfZmluCiAJLndvcmQJY3B1X3hzY2FsZV9yZXNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYyBiL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3Y2LmMKaW5kZXggZmU1ODEzOC4uZjdkMmVjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfdjYuYworKysgYi9hcmNoL2FybS9vcHJvZmlsZS9vcF9tb2RlbF92Ni5jCkBAIC0zMyw2ICszMyw5IEBACiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkzLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfQkNNUklORworCUlSUV9QTVVJUlEsIC8qIGZvciBCQ01SSU5HLCBBUk0gUE1VIGludGVycnVwdCBpcyA0MyAqLworI2VuZGlmCiB9OwogCiBzdGF0aWMgdm9pZCBhcm12Nl9wbXVfc3RvcCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwppbmRleCA3N2ZhN2NjLi5jZTMxZjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYworKysgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwpAQCAtMjU3LDcgKzI1Nyw4IEBACiAJKklPUDNYWF9PVU1XVFZSMCA9IDA7CiAKIAkvKiBPdXRib3VuZCB3aW5kb3cgMSAqLwotCSpJT1AzWFhfT01XVFZSMSA9IElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBICsgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkU7CisJKklPUDNYWF9PTVdUVlIxID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fQkEgKworCQkJICBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRSAvIDI7CiAJKklPUDNYWF9PVU1XVFZSMSA9IDA7CiAKIAkvKiBCQVIgMyAoIERpc2FibGVkICkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwppbmRleCAzNjk1YmJlLi44ZGE5NWQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC04NSw3ICs4NSw3IEBACiB7CiAJdTMyIHRpbWVyX2N0bDsKIAotCXRpY2tzX3Blcl9qaWZmeSA9ICh0aWNrX3JhdGUgKyBIWi8yKSAvIEhaOworCXRpY2tzX3Blcl9qaWZmeSA9IERJVl9ST1VORF9DTE9TRVNUKHRpY2tfcmF0ZSwgSFopOwogCXRpY2tzX3Blcl91c2VjID0gdGlja19yYXRlIC8gMTAwMDAwMDsKIAluZXh0X2ppZmZ5X3RpbWUgPSAweGZmZmZmZmZmOwogCWlvcF90aWNrX3JhdGUgPSB0aWNrX3JhdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCmluZGV4IDE4NjhjMGQuLjM0MTIzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jcHUtb21hcC5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAl9CiAKIAkvKiBGSVhNRTogd2hhdCdzIHRoZSBhY3R1YWwgdHJhbnNpdGlvbiB0aW1lPyAqLwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAxMCAqIDEwMDAgKiAxMDAwOworCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAzMDAgKiAxMDAwOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZmQzMTU0YS4uNjhlYWFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNjkxLDEzICs2OTEsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9lbmFibGVfaXJxX2xjaChpbnQgbGNoKQogewogCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghY3B1X2NsYXNzX2lzX29tYXAyKCkpCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJdmFsID0gZG1hX3JlYWQoSVJRRU5BQkxFX0wwKTsKIAl2YWwgfD0gMSA8PCBsY2g7CiAJZG1hX3dyaXRlKHZhbCwgSVJRRU5BQkxFX0wwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNzk5LDEwICs4MDIsMTMgQEAKIAogCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQl1MzIgdmFsOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCQl2YWwgPSBkbWFfcmVhZChJUlFFTkFCTEVfTDApOwogCQl2YWwgJj0gfigxIDw8IGxjaCk7CiAJCWRtYV93cml0ZSh2YWwsIElSUUVOQUJMRV9MMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBDbGVhciB0aGUgQ1NSIHJlZ2lzdGVyIGFuZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCiAJCWRtYV93cml0ZShPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0ssIENTUihsY2gpKTsKQEAgLTgyOSwxMCArODM1LDEwIEBACiAgKgogICogQHBhcmFtIGFyYl9yYXRlCiAgKiBAcGFyYW0gbWF4X2ZpZm9fZGVwdGgKLSAqIEBwYXJhbSB0cGFyYW1zIC0gTnVtYmVyIG9mIHRoZXJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQotICogCQkJCQkJICAgIERNQV9USFJFQURfUkVTRVJWRV9PTkVUCi0gKiAJCQkJCQkgICAgRE1BX1RIUkVBRF9SRVNFUlZFX1RXT1QKLSAqIAkJCQkJCSAgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCisgKiBAcGFyYW0gdHBhcmFtcyAtIE51bWJlciBvZiB0aHJlYWRzIHRvIHJlc2VydmUgOiBETUFfVEhSRUFEX1JFU0VSVkVfTk9STQorICogCQkJCQkJICAgRE1BX1RIUkVBRF9SRVNFUlZFX09ORVQKKyAqIAkJCQkJCSAgIERNQV9USFJFQURfUkVTRVJWRV9UV09UCisgKiAJCQkJCQkgICBETUFfVEhSRUFEX1JFU0VSVkVfVEhSRUVUCiAgKi8KIHZvaWQKIG9tYXBfZG1hX3NldF9nbG9iYWxfcGFyYW1zKGludCBhcmJfcmF0ZSwgaW50IG1heF9maWZvX2RlcHRoLCBpbnQgdHBhcmFtcykKQEAgLTg0NCwxMSArODUwLDE0IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAobWF4X2ZpZm9fZGVwdGggPT0gMCkKKwkJbWF4X2ZpZm9fZGVwdGggPSAxOwogCWlmIChhcmJfcmF0ZSA9PSAwKQogCQlhcmJfcmF0ZSA9IDE7CiAKLQlyZWcgPSAoYXJiX3JhdGUgJiAweGZmKSA8PCAxNjsKLQlyZWcgfD0gKDB4ZmYgJiBtYXhfZmlmb19kZXB0aCk7CisJcmVnID0gMHhmZiAmIG1heF9maWZvX2RlcHRoOworCXJlZyB8PSAoMHgzICYgdHBhcmFtcykgPDwgMTI7CisJcmVnIHw9IChhcmJfcmF0ZSAmIDB4ZmYpIDw8IDE2OwogCiAJZG1hX3dyaXRlKHJlZywgR0NSKTsKIH0KQEAgLTk3NSw2ICs5ODQsMTQgQEAKIHsKIAl1MzIgbDsKIAorCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOworCisJbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKKwlsICY9IH5PTUFQX0RNQV9DQ1JfRU47CisJZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKKwogCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgewogCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CiAJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKQEAgLTk5MiwxOCArMTAwOSw4IEBACiAJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwogCQkJY3VyX2xjaCA9IG5leHRfbGNoOwogCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwogCX0KIAotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCi0JCWRtYV93cml0ZSgwLCBDSUNSKGxjaCkpOwotCi0JbCA9IGRtYV9yZWFkKENDUihsY2gpKTsKLQlsICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0JZG1hX3dyaXRlKGwsIENDUihsY2gpKTsKLQogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CkBAIC0xMTA3LDYgKzExMTQsMTQgQEAKIHsKIAlpbnQgbGNoOwogCisJLyoKKwkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKKwkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgorCSAqLworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJaWYgKG9tYXBfcmVhZHcoMHhmZmZlYzAwMCArIDB4MDApICYgKDEgPDwgMCkpCisJCQlyZXR1cm4gMTsKKwogCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLwogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKIAkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggNjkzODM5Yy4uN2MzNDViNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua184NTBbN10gPSB7Ci0JeyBPTUFQMV9NUFVJT19CQVNFLCAgICAgSU5UXzg1MF9NUFVJTywJICAgIElIX01QVUlPX0JBU0UsCU1FVEhPRF9NUFVJTyB9LAorCXsgT01BUDFfTVBVSU9fVkJBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCiAJeyBPTUFQODUwX0dQSU8xX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzEsICBJSF9HUElPX0JBU0UsCU1FVEhPRF9HUElPXzg1MCB9LAogCXsgT01BUDg1MF9HUElPMl9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTksyLCAgSUhfR1BJT19CQVNFICsgMzIsCU1FVEhPRF9HUElPXzg1MCB9LAogCXsgT01BUDg1MF9HUElPM19CQVNFLCAgSU5UXzg1MF9HUElPX0JBTkszLCAgSUhfR1BJT19CQVNFICsgNjQsCU1FVEhPRF9HUElPXzg1MCB9LApAQCAtMzczLDcgKzM3Myw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfZ3BpbyhpbnQgZ3BpbykKIHsKLQlpZiAodW5saWtlbHkoZ3Bpb192YWxpZChncGlvKSkgPCAwKSB7CisJaWYgKHVubGlrZWx5KGdwaW9fdmFsaWQoZ3BpbykgPCAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgIm9tYXAtZ3BpbzogaW52YWxpZCBHUElPICVkXG4iLCBncGlvKTsKIAkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAxMWU3M2Q5Li5mMTI5ZWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTMwMywzMiArMzAzLDIxIEBACiAjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMzQzMCgpCQkwCiAKLSNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKLSMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCi0jICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCi0jIGVuZGlmCi0jZWxzZQotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCi0jICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQkxCi0jIGVuZGlmCi0jZW5kaWYKLSNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDg1MAotIyAgZGVmaW5lIGNwdV9pc19vbWFwODUwKCkJCTEKLSMgZW5kaWYKLSNlbmRpZgotCiAvKgogICogV2hldGhlciB3ZSBoYXZlIE1VTFRJX09NQVAxIG9yIG5vdCwgd2Ugc3RpbGwgbmVlZCB0byBkaXN0aW5ndWlzaAotICogYmV0d2VlbiAzMzAgdnMuIDE1MTAgYW5kIDE2MTFCLzU5MTIgdnMuIDE3MTAuCisgKiBiZXR3ZWVuIDczMCB2cyA4NTAsIDMzMCB2cy4gMTUxMCBhbmQgMTYxMUIvNTkxMiB2cy4gMTcxMC4KICAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorIyB1bmRlZiAgY3B1X2lzX29tYXA3MzAKKyMgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjIHVuZGVmICBjcHVfaXNfb21hcDg1MAorIyBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJaXNfb21hcDg1MCgpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjIHVuZGVmICBjcHVfaXNfb21hcDMxMAogIyB1bmRlZiAgY3B1X2lzX29tYXAxNTEwCkBAIC00MzMsMyArNDIyLDUgQEAKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7CiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2tleXBhZC5oCmluZGV4IDQ1ZWEzYWUuLjNhZTUyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gva2V5cGFkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9rZXlwYWQuaApAQCAtMTAsNiArMTAsOCBAQAogI2lmbmRlZiBBU01BUk1fQVJDSF9LRVlQQURfSAogI2RlZmluZSBBU01BUk1fQVJDSF9LRVlQQURfSAogCisjd2FybmluZzogUGxlYXNlIHVwZGF0ZSB0aGUgYm9hcmQgdG8gdXNlIG1hdHJpeF9rZXlwYWQuaCBpbnN0ZWFkCisKIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgewogCWludCByb3dzOwogCWludCBjb2xzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggOThkZmFiNi4uMGY0OWQyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC04NDAsMTIgKzg0MCwxNCBAQAogCSAqLwogCUFGMjZfMzRYWF9HUElPMCwKIAlBRjIyXzM0WFhfR1BJTzksCisJQUc5XzM0WFhfR1BJTzIzLAogCUFIOF8zNFhYX0dQSU8yOSwKIAlVOF8zNFhYX0dQSU81NF9PVVQsCiAJVThfMzRYWF9HUElPNTRfRE9XTiwKIAlMOF8zNFhYX0dQSU82MywKIAlHMjVfMzRYWF9HUElPODZfT1VULAogCUFHNF8zNFhYX0dQSU8xMzRfT1VULAorCUFGNF8zNFhYX0dQSU8xMzVfT1VULAogCUFFNF8zNFhYX0dQSU8xMzZfT1VULAogCUFGNl8zNFhYX0dQSU8xNDBfVVAsCiAJQUU2XzM0WFhfR1BJTzE0MSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaAppbmRleCA2MjcxZDg1Li5mYTY0NjE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCkBAIC0xMzUsNiArMTM1LDggQEAKIAogaW50IHB3cmRtX2Zvcl9lYWNoKGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB2b2lkICp1c2VyKSwKIAkJCXZvaWQgKnVzZXIpOworaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCQl2b2lkICp1c2VyKTsKIAogaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIGludCBwd3JkbV9kZWxfY2xrZG0oc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDRiNjAxMjcuLjk0NTg0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC02NjQsNyArNjY0LDcgQEAKIAkJbmVudCA9IDE7IC8qIGZvciB0aGUgbmV4dCBMMSBlbnRyeSAqLwogCX0gZWxzZSB7CiAJCWJ5dGVzID0gSU9QR0RfU0laRTsKLQkJaWYgKCppb3BnZCAmIElPUEdEX1NVUEVSKSB7CisJCWlmICgoKmlvcGdkICYgSU9QR0RfU1VQRVIpID09IElPUEdEX1NVUEVSKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KIAkJCWlvcGdkID0gKHUzMiAqKSgodTMyKWlvcGdkICYgSU9TVVBFUl9NQVNLKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb3ZtbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKaW5kZXggNmZjNTJmYy4uZGMzZmFjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKICAqCSd2YSc6CW1wdSB2aXJ0dWFsIGFkZHJlc3MKICAqCiAgKgknYyc6CWNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKLSAqCSdkJzoJZGljb250aWd1b3VzIG1lbW9yeSBhcmVhCisgKgknZCc6CWRpc2NvbnRpZ3VvdXMgbWVtb3J5IGFyZWEKICAqCSdhJzoJYW5vbnltb3VzIG1lbW9yeSBhbGxvY2F0aW9uCiAgKgknKCknOglvcHRpb25hbCBmZWF0dXJlCiAgKgpAQCAtMTk5LDcgKzE5OSw4IEBACiAJCXZhICs9IGJ5dGVzOwogCX0KIAotCWZsdXNoX2NhY2hlX3ZtYXAobmV3LT5hZGRyLCBuZXctPmFkZHIgKyB0b3RhbCk7CisJZmx1c2hfY2FjaGVfdm1hcCgodW5zaWduZWQgbG9uZyluZXctPmFkZHIsCisJCQkJKHVuc2lnbmVkIGxvbmcpKG5ldy0+YWRkciArIHRvdGFsKSk7CiAJcmV0dXJuIG5ldy0+YWRkcjsKIAogZXJyX291dDoKQEAgLTM2Miw4ICszNjMsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAJdmEgPSBhcmVhLT52YTsKLQltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKIG91dDoKKwltdXRleF91bmxvY2soJm9iai0+bW1hcF9sb2NrKTsKKwogCXJldHVybiB2YTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRhX3RvX3ZhKTsKQEAgLTM5MCwxNCArMzkyLDE0IEBACiAJfQogCiAJdmFfZW5kID0gX3ZhICsgUEFHRV9TSVpFICogaTsKLQlmbHVzaF9jYWNoZV92bWFwKF92YSwgdmFfZW5kKTsKKwlmbHVzaF9jYWNoZV92bWFwKCh1bnNpZ25lZCBsb25nKV92YSwgKHVuc2lnbmVkIGxvbmcpdmFfZW5kKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNndGFibGVfZHJhaW5fdm1hbGxvYyhzdHJ1Y3Qgc2dfdGFibGUgKnNndCkKIHsKIAkvKgogCSAqIEFjdHVhbGx5IHRoaXMgaXMgbm90IG5lY2Vzc2FyeSBhdCBhbGwsIGp1c3QgZXhpc3RzIGZvcgotCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRpYmlsaXR5LgorCSAqIGNvbnNpc3RlbmN5IG9mIHRoZSBjb2RlIHJlYWRhYmlsaXR5LgogCSAqLwogCUJVR19PTighc2d0KTsKIH0KQEAgLTQzMyw3ICs0MzUsNyBAQAogewogCS8qCiAJICogQWN0dWFsbHkgdGhpcyBpcyBub3QgbmVjZXNzYXJ5IGF0IGFsbCwganVzdCBleGlzdHMgZm9yCi0JICogY29uc2lzdGVuY3kgb2YgdGhlIGNvZGUgcmVhZGliaWxpdHkKKwkgKiBjb25zaXN0ZW5jeSBvZiB0aGUgY29kZSByZWFkYWJpbGl0eQogCSAqLwogCUJVR19PTighc2d0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggODhhYzk3Ni4uZTY2NGI5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogCXJ4ICY9IDE7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNDUik7Ci0JCXcgfD0gKHR4ID8gUkRJU0FCTEUgOiAwKTsKKwkJdyB8PSAocnggPyBSRElTQUJMRSA6IDApOwogCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDQ1IsIHcpOwogCX0KIAl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDkyNWY2NDcuLjc1ZDFmMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjcwLDcgKzI3MCw4IEBACiAJb21hcF9zcmFtX2NlaWwgLT0gc2l6ZTsKIAlvbWFwX3NyYW1fY2VpbCA9IFJPVU5EX0RPV04ob21hcF9zcmFtX2NlaWwsIHNpemVvZih2b2lkICopKTsKIAltZW1jcHkoKHZvaWQgKilvbWFwX3NyYW1fY2VpbCwgc3RhcnQsIHNpemUpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzdGFydCwgKHVuc2lnbmVkIGxvbmcpKHN0YXJ0ICsgc2l6ZSkpOworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylvbWFwX3NyYW1fY2VpbCwKKwkJKHVuc2lnbmVkIGxvbmcpKG9tYXBfc3JhbV9jZWlsICsgc2l6ZSkpOwogCiAJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCmluZGV4IDcwYWVlZTQuLjI5NzU3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2RtYS5jCkBAIC0xNywyMiArMTcsMjY2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKKyNkZWZpbmUgRE1BX0RFQlVHX05BTUUJCSJweGFfZG1hIgorI2RlZmluZSBETUFfTUFYX1JFUVVFU1RFUlMJNjQKKwogc3RydWN0IGRtYV9jaGFubmVsIHsKIAljaGFyICpuYW1lOwogCXB4YV9kbWFfcHJpbyBwcmlvOwogCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopOwogCXZvaWQgKmRhdGE7CisJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RhdGljIHN0cnVjdCBkbWFfY2hhbm5lbCAqZG1hX2NoYW5uZWxzOwogc3RhdGljIGludCBudW1fZG1hX2NoYW5uZWxzOwogCisvKgorICogRGVidWcgZnMKKyAqLworI2lmZGVmIENPTkZJR19ERUJVR19GUworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmRiZ2ZzX3Jvb3QsICpkYmdmc19zdGF0ZSwgKipkYmdmc19jaGFuOworCitzdGF0aWMgaW50IGRiZ19zaG93X3JlcXVlc3Rlcl9jaGFuKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlpbnQgcG9zID0gMDsKKwlpbnQgY2hhbiA9IChpbnQpcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKwl1MzIgZHJjbXI7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgcmVxdWVzdGVycyBsaXN0IDpcbiIsIGNoYW4pOworCWZvciAoaSA9IDA7IGkgPCBETUFfTUFYX1JFUVVFU1RFUlM7IGkrKykgeworCQlkcmNtciA9IERSQ01SKGkpOworCQlpZiAoKGRyY21yICYgRFJDTVJfQ0hMTlVNKSA9PSBjaGFuKQorCQkJcG9zICs9IHNlcV9wcmludGYocywgIlx0UmVxdWVzdGVyICVkIChNQVBWTEQ9JWQpXG4iLCBpLAorCQkJCQkgICEhKGRyY21yICYgRFJDTVJfTUFQVkxEKSk7CisJfQorCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRiZ19idXJzdF9mcm9tX2RjbWQodTMyIGRjbWQpCit7CisJaW50IGJ1cnN0ID0gKGRjbWQgPj4gMTYpICYgMHgzOworCisJcmV0dXJuIGJ1cnN0ID8gNCA8PCBidXJzdCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcGh5c192YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIHBmbl92YWxpZChfX3BoeXNfdG9fcGZuKGFkZHIpKTsKK30KKworI2RlZmluZSBEQ1NSX1NUUihmbGFnKSAoZGNzciAmIERDU1JfIyNmbGFnID8gI2ZsYWciICIgOiAiIikKKyNkZWZpbmUgRENNRF9TVFIoZmxhZykgKGRjbWQgJiBEQ01EXyMjZmxhZyA/ICNmbGFnIiAiIDogIiIpCisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfZGVzY3JpcHRvcnMoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCWludCBjaGFuID0gKGludClzLT5wcml2YXRlOworCWludCBpLCBtYXhfc2hvdyA9IDIwLCBidXJzdCwgd2lkdGg7CisJdTMyIGRjbWQ7CisJdW5zaWduZWQgbG9uZyBwaHlzX2Rlc2M7CisJc3RydWN0IHB4YV9kbWFfZGVzYyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFubmVsc1tjaGFuXS5sb2NrLCBmbGFncyk7CisJcGh5c19kZXNjID0gRERBRFIoY2hhbik7CisKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiRE1BIGNoYW5uZWwgJWQgZGVzY3JpcHRvcnMgOlxuIiwgY2hhbik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBGaXJzdCBkZXNjcmlwdG9yIHVua25vd25cbiIsIDApOworCWZvciAoaSA9IDE7IGkgPCBtYXhfc2hvdyAmJiBpc19waHlzX3ZhbGlkKHBoeXNfZGVzYyk7IGkrKykgeworCQlkZXNjID0gcGh5c190b192aXJ0KHBoeXNfZGVzYyk7CisJCWRjbWQgPSBkZXNjLT5kY21kOworCQlidXJzdCA9IGRiZ19idXJzdF9mcm9tX2RjbWQoZGNtZCk7CisJCXdpZHRoID0gKDEgPDwgKChkY21kID4+IDE0KSAmIDB4MykpID4+IDE7CisKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlslMDNkXSBEZXNjIGF0ICUwOGx4KHZpcnQgJXApXG4iLAorCQkJCSAgaSwgcGh5c19kZXNjLCBkZXNjKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RERBRFIgPSAlMDh4XG4iLCBkZXNjLT5kZGFkcik7CisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgZGVzYy0+ZHNhZHIpOworCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREVEFEUiA9ICUwOHhcbiIsIGRlc2MtPmR0YWRyKTsKKwkJcG9zICs9IHNlcV9wcmludGYocywgIlx0RENNRCAgPSAlMDh4ICglcyVzJXMlcyVzJXMlc2J1cnN0PSVkIgorCQkJCSAgIiB3aWR0aD0lZCBsZW49JWQpXG4iLAorCQkJCSAgZGNtZCwKKwkJCQkgIERDTURfU1RSKElOQ1NSQ0FERFIpLCBEQ01EX1NUUihJTkNUUkdBRERSKSwKKwkJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCQkgIERDTURfU1RSKFNUQVJUSVJRRU4pLCBEQ01EX1NUUihFTkRJUlFFTiksCisJCQkJICBEQ01EX1NUUihFTkRJQU4pLCBidXJzdCwgd2lkdGgsCisJCQkJICBkY21kICYgRENNRF9MRU5HVEgpOworCQlwaHlzX2Rlc2MgPSBkZXNjLT5kZGFkcjsKKwl9CisJaWYgKGkgPT0gbWF4X3Nob3cpCisJCXBvcyArPSBzZXFfcHJpbnRmKHMsICJbJTAzZF0gRGVzYyBhdCAlMDhseCAuLi4gbWF4IGRpc3BsYXkgcmVhY2hlZFxuIiwKKwkJCQkgIGksIHBoeXNfZGVzYyk7CisJZWxzZQorCQlwb3MgKz0gc2VxX3ByaW50ZihzLCAiWyUwM2RdIERlc2MgYXQgJTA4bHggaXMgJXNcbiIsCisJCQkJICBpLCBwaHlzX2Rlc2MsIHBoeXNfZGVzYyA9PSBEREFEUl9TVE9QID8KKwkJCQkgICJEREFEUl9TVE9QIiA6ICJpbnZhbGlkIik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbm5lbHNbY2hhbl0ubG9jaywgZmxhZ3MpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfY2hhbl9zdGF0ZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJaW50IHBvcyA9IDA7CisJaW50IGNoYW4gPSAoaW50KXMtPnByaXZhdGU7CisJdTMyIGRjc3IsIGRjbWQ7CisJaW50IGJ1cnN0LCB3aWR0aDsKKwlzdGF0aWMgY2hhciAqc3RyX3ByaW9bXSA9IHsgImhpZ2giLCAibm9ybWFsIiwgImxvdyIgfTsKKworCWRjc3IgPSBEQ1NSKGNoYW4pOworCWRjbWQgPSBEQ01EKGNoYW4pOworCWJ1cnN0ID0gZGJnX2J1cnN0X2Zyb21fZGNtZChkY21kKTsKKwl3aWR0aCA9ICgxIDw8ICgoZGNtZCA+PiAxNCkgJiAweDMpKSA+PiAxOworCisJcG9zICs9IHNlcV9wcmludGYocywgIkRNQSBjaGFubmVsICVkXG4iLCBjaGFuKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHRQcmlvcml0eSA6ICVzXG4iLAorCQkJICBzdHJfcHJpb1tkbWFfY2hhbm5lbHNbY2hhbl0ucHJpb10pOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdFVuYWxpZ25lZCB0cmFuc2ZlciBiaXQ6ICVzXG4iLAorCQkJICBEQUxHTiAmICgxIDw8IGNoYW4pID8gInllcyIgOiAibm8iKTsKKwlwb3MgKz0gc2VxX3ByaW50ZihzLCAiXHREQ1NSICA9ICUwOHggKCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcylcbiIsCisJCQkgIGRjc3IsIERDU1JfU1RSKFJVTiksIERDU1JfU1RSKE5PREVTQyksCisJCQkgIERDU1JfU1RSKFNUT1BJUlFFTiksIERDU1JfU1RSKEVPUklSUUVOKSwKKwkJCSAgRENTUl9TVFIoRU9SSk1QRU4pLCBEQ1NSX1NUUihFT1JTVE9QRU4pLAorCQkJICBEQ1NSX1NUUihTRVRDTVBTVCksIERDU1JfU1RSKENMUkNNUFNUKSwKKwkJCSAgRENTUl9TVFIoQ01QU1QpLCBEQ1NSX1NUUihFT1JJTlRSKSwgRENTUl9TVFIoUkVRUEVORCksCisJCQkgIERDU1JfU1RSKFNUT1BTVEFURSksIERDU1JfU1RSKEVORElOVFIpLAorCQkJICBEQ1NSX1NUUihTVEFSVElOVFIpLCBEQ1NSX1NUUihCVVNFUlIpKTsKKworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERDTUQgID0gJTA4eCAoJXMlcyVzJXMlcyVzJXNidXJzdD0lZCB3aWR0aD0lZCIKKwkJCSAgIiBsZW49JWQpXG4iLAorCQkJICBkY21kLAorCQkJICBEQ01EX1NUUihJTkNTUkNBRERSKSwgRENNRF9TVFIoSU5DVFJHQUREUiksCisJCQkgIERDTURfU1RSKEZMT1dTUkMpLCBEQ01EX1NUUihGTE9XVFJHKSwKKwkJCSAgRENNRF9TVFIoU1RBUlRJUlFFTiksIERDTURfU1RSKEVORElSUUVOKSwKKwkJCSAgRENNRF9TVFIoRU5ESUFOKSwgYnVyc3QsIHdpZHRoLCBkY21kICYgRENNRF9MRU5HVEgpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERTQURSID0gJTA4eFxuIiwgRFNBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdERUQURSID0gJTA4eFxuIiwgRFRBRFIoY2hhbikpOworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJcdEREQURSID0gJTA4eFxuIiwgRERBRFIoY2hhbikpOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGJnX3Nob3dfc3RhdGUoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBwb3MgPSAwOworCisJLyogYmFzaWMgZGV2aWNlIHN0YXR1cyAqLworCXBvcyArPSBzZXFfcHJpbnRmKHMsICJETUEgZW5naW5lIHN0YXR1c1xuIik7CisJcG9zICs9IHNlcV9wcmludGYocywgIlx0Q2hhbm5lbCBudW1iZXI6ICVkXG4iLCBudW1fZG1hX2NoYW5uZWxzKTsKKworCXJldHVybiBwb3M7Cit9CisKKyNkZWZpbmUgREJHRlNfRlVOQ19ERUNMKG5hbWUpIFwKK3N0YXRpYyBpbnQgZGJnX29wZW5fIyNuYW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSBcCit7IFwKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX3Nob3dfIyNuYW1lLCBpbm9kZS0+aV9wcml2YXRlKTsgXAorfSBcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYmdfZm9wc18jI25hbWUgPSB7IFwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsIFwKKwkub3BlbgkJPSBkYmdfb3Blbl8jI25hbWUsIFwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywgXAorCS5yZWFkCQk9IHNlcV9yZWFkLCBcCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwgXAorfQorCitEQkdGU19GVU5DX0RFQ0woc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGNoYW5fc3RhdGUpOworREJHRlNfRlVOQ19ERUNMKGRlc2NyaXB0b3JzKTsKK0RCR0ZTX0ZVTkNfREVDTChyZXF1ZXN0ZXJfY2hhbik7CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpweGFfZG1hX2RiZ19hbGxvY19jaGFuKGludCBjaCwgc3RydWN0IGRlbnRyeSAqY2hhbmRpcikKK3sKKwljaGFyIGNoYW5fbmFtZVsxMV07CisJc3RydWN0IGRlbnRyeSAqY2hhbiwgKmNoYW5fc3RhdGUgPSBOVUxMLCAqY2hhbl9kZXNjciA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqY2hhbl9yZXFzID0gTlVMTDsKKwl2b2lkICpkdDsKKworCXNjbnByaW50ZihjaGFuX25hbWUsIHNpemVvZihjaGFuX25hbWUpLCAiJWQiLCBjaCk7CisJY2hhbiA9IGRlYnVnZnNfY3JlYXRlX2RpcihjaGFuX25hbWUsIGNoYW5kaXIpOworCWR0ID0gKHZvaWQgKiljaDsKKworCWlmIChjaGFuKQorCQljaGFuX3N0YXRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdGUiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSAmZGJnX2ZvcHNfY2hhbl9zdGF0ZSk7CisJaWYgKGNoYW5fc3RhdGUpCisJCWNoYW5fZGVzY3IgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZXNjcmlwdG9ycyIsIDA0MDAsIGNoYW4sIGR0LAorCQkJCQkJICZkYmdfZm9wc19kZXNjcmlwdG9ycyk7CisJaWYgKGNoYW5fZGVzY3IpCisJCWNoYW5fcmVxcyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlcXVlc3RlcnMiLCAwNDAwLCBjaGFuLCBkdCwKKwkJCQkJCSZkYmdfZm9wc19yZXF1ZXN0ZXJfY2hhbik7CisJaWYgKCFjaGFuX3JlcXMpCisJCWdvdG8gZXJyX3N0YXRlOworCisJcmV0dXJuIGNoYW47CisKK2Vycl9zdGF0ZToKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY2hhbik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRlbnRyeSAqY2hhbmRpcjsKKworCWRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoRE1BX0RFQlVHX05BTUUsIE5VTEwpOworCWlmIChJU19FUlIoZGJnZnNfcm9vdCkgfHwgIWRiZ2ZzX3Jvb3QpCisJCWdvdG8gZXJyX3Jvb3Q7CisKKwlkYmdmc19zdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgMDQwMCwgZGJnZnNfcm9vdCwgTlVMTCwKKwkJCQkJICAmZGJnX2ZvcHNfc3RhdGUpOworCWlmICghZGJnZnNfc3RhdGUpCisJCWdvdG8gZXJyX3N0YXRlOworCisJZGJnZnNfY2hhbiA9IGttYWxsb2Moc2l6ZW9mKCpkYmdmc19zdGF0ZSkgKiBudW1fZG1hX2NoYW5uZWxzLAorCQkJICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWRiZ2ZzX3N0YXRlKQorCQlnb3RvIGVycl9hbGxvYzsKKworCWNoYW5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNoYW5uZWxzIiwgZGJnZnNfcm9vdCk7CisJaWYgKCFjaGFuZGlyKQorCQlnb3RvIGVycl9jaGFuZGlyOworCisJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgeworCQlkYmdmc19jaGFuW2ldID0gcHhhX2RtYV9kYmdfYWxsb2NfY2hhbihpLCBjaGFuZGlyKTsKKwkJaWYgKCFkYmdmc19jaGFuW2ldKQorCQkJZ290byBlcnJfY2hhbnM7CisJfQorCisJcmV0dXJuOworZXJyX2NoYW5zOgorZXJyX2NoYW5kaXI6CisJa2ZyZWUoZGJnZnNfY2hhbik7CitlcnJfYWxsb2M6CitlcnJfc3RhdGU6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGRiZ2ZzX3Jvb3QpOworZXJyX3Jvb3Q6CisJcHJfZXJyKCJweGFfZG1hOiBkZWJ1Z2ZzIGlzIG5vdCBhdmFpbGFibGVcbiIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZGJnZnNfcm9vdCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHB4YV9kbWFfaW5pdF9kZWJ1Z2ZzKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2RtYV9jbGVhbnVwX2RlYnVnZnModm9pZCkge30KKyNlbmRpZgorCiBpbnQgcHhhX3JlcXVlc3RfZG1hIChjaGFyICpuYW1lLCBweGFfZG1hX3ByaW8gcHJpbywKIAkJCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopLAogCQkJdm9pZCAqZGF0YSkKQEAgLTcxLDYgKzMxNSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXJldHVybiBpOwogfQorRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwogCiB2b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKIHsKQEAgLTg4LDI0ICszMzMsMjYgQEAKIAlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MKHB4YV9mcmVlX2RtYSk7CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWludCBpLCBkaW50ID0gRElOVDsKKwlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7Ci0JCWlmIChkaW50ICYgKDEgPDwgaSkpIHsKLQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07Ci0JCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgewotCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgotCQkJCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgotCQkJCSAqLwotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKLQkJCQlEQ1NSKGkpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOwotCQkJfQorCXdoaWxlIChkaW50KSB7CisJCWkgPSBfX2ZmcyhkaW50KTsKKwkJZGludCAmPSAoZGludCAtIDEpOworCQljaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKKwkJaWYgKGNoYW5uZWwtPm5hbWUgJiYgY2hhbm5lbC0+aXJxX2hhbmRsZXIpIHsKKwkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgorCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCisJCQkgKi8KKwkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKKwkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CiAJCX0KIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI3LDYgKzM3NCw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7CiAJCURDU1IoaSkgPSAwOwogCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmRtYV9jaGFubmVsc1tpXS5sb2NrKTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGRtYV9pcnFfaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwgIkRNQSIsIE5VTEwpOwpAQCAtMTM1LDEwICszODMsOSBAQAogCQlrZnJlZShkbWFfY2hhbm5lbHMpOwogCQlyZXR1cm4gcmV0OwogCX0KLQogCW51bV9kbWFfY2hhbm5lbHMgPSBudW1fY2g7CisKKwlweGFfZG1hX2luaXRfZGVidWdmcygpOworCiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0wocHhhX3JlcXVlc3RfZG1hKTsKLUVYUE9SVF9TWU1CT0wocHhhX2ZyZWVfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaAppbmRleCA2NDAxOTQ2Li44NTdhNjgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvbWZwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaWZuZGVmIF9fQVNNX1BMQVRfTUZQX0gKICNkZWZpbmUgX19BU01fUExBVF9NRlBfSAogCi0jZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCisjZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAyNTYpCiAKIC8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KIGVudW0gewpAQCAtMTUwLDYgKzE1MCw3NCBAQAogCU1GUF9QSU5fR1BJTzEyNSwKIAlNRlBfUElOX0dQSU8xMjYsCiAJTUZQX1BJTl9HUElPMTI3LAorCisJTUZQX1BJTl9HUElPMTI4LAorCU1GUF9QSU5fR1BJTzEyOSwKKwlNRlBfUElOX0dQSU8xMzAsCisJTUZQX1BJTl9HUElPMTMxLAorCU1GUF9QSU5fR1BJTzEzMiwKKwlNRlBfUElOX0dQSU8xMzMsCisJTUZQX1BJTl9HUElPMTM0LAorCU1GUF9QSU5fR1BJTzEzNSwKKwlNRlBfUElOX0dQSU8xMzYsCisJTUZQX1BJTl9HUElPMTM3LAorCU1GUF9QSU5fR1BJTzEzOCwKKwlNRlBfUElOX0dQSU8xMzksCisJTUZQX1BJTl9HUElPMTQwLAorCU1GUF9QSU5fR1BJTzE0MSwKKwlNRlBfUElOX0dQSU8xNDIsCisJTUZQX1BJTl9HUElPMTQzLAorCU1GUF9QSU5fR1BJTzE0NCwKKwlNRlBfUElOX0dQSU8xNDUsCisJTUZQX1BJTl9HUElPMTQ2LAorCU1GUF9QSU5fR1BJTzE0NywKKwlNRlBfUElOX0dQSU8xNDgsCisJTUZQX1BJTl9HUElPMTQ5LAorCU1GUF9QSU5fR1BJTzE1MCwKKwlNRlBfUElOX0dQSU8xNTEsCisJTUZQX1BJTl9HUElPMTUyLAorCU1GUF9QSU5fR1BJTzE1MywKKwlNRlBfUElOX0dQSU8xNTQsCisJTUZQX1BJTl9HUElPMTU1LAorCU1GUF9QSU5fR1BJTzE1NiwKKwlNRlBfUElOX0dQSU8xNTcsCisJTUZQX1BJTl9HUElPMTU4LAorCU1GUF9QSU5fR1BJTzE1OSwKKwlNRlBfUElOX0dQSU8xNjAsCisJTUZQX1BJTl9HUElPMTYxLAorCU1GUF9QSU5fR1BJTzE2MiwKKwlNRlBfUElOX0dQSU8xNjMsCisJTUZQX1BJTl9HUElPMTY0LAorCU1GUF9QSU5fR1BJTzE2NSwKKwlNRlBfUElOX0dQSU8xNjYsCisJTUZQX1BJTl9HUElPMTY3LAorCU1GUF9QSU5fR1BJTzE2OCwKKwlNRlBfUElOX0dQSU8xNjksCisJTUZQX1BJTl9HUElPMTcwLAorCU1GUF9QSU5fR1BJTzE3MSwKKwlNRlBfUElOX0dQSU8xNzIsCisJTUZQX1BJTl9HUElPMTczLAorCU1GUF9QSU5fR1BJTzE3NCwKKwlNRlBfUElOX0dQSU8xNzUsCisJTUZQX1BJTl9HUElPMTc2LAorCU1GUF9QSU5fR1BJTzE3NywKKwlNRlBfUElOX0dQSU8xNzgsCisJTUZQX1BJTl9HUElPMTc5LAorCU1GUF9QSU5fR1BJTzE4MCwKKwlNRlBfUElOX0dQSU8xODEsCisJTUZQX1BJTl9HUElPMTgyLAorCU1GUF9QSU5fR1BJTzE4MywKKwlNRlBfUElOX0dQSU8xODQsCisJTUZQX1BJTl9HUElPMTg1LAorCU1GUF9QSU5fR1BJTzE4NiwKKwlNRlBfUElOX0dQSU8xODcsCisJTUZQX1BJTl9HUElPMTg4LAorCU1GUF9QSU5fR1BJTzE4OSwKKwlNRlBfUElOX0dQSU8xOTAsCisJTUZQX1BJTl9HUElPMTkxLAorCisJTUZQX1BJTl9HUElPMjU1ID0gMjU1LAorCiAJTUZQX1BJTl9HUElPMF8yLAogCU1GUF9QSU5fR1BJTzFfMiwKIAlNRlBfUElOX0dQSU8yXzIsCkBAIC0zMjUsOCArMzkzLDkgQEAKICNkZWZpbmUgTUZQX1BVTExfTE9XCQkoMHgxIDw8IDIxKQogI2RlZmluZSBNRlBfUFVMTF9ISUdICQkoMHgyIDw8IDIxKQogI2RlZmluZSBNRlBfUFVMTF9CT1RICQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTF9NQVNLCQkoMHgzIDw8IDIxKQotI2RlZmluZSBNRlBfUFVMTCh4KQkJKCgoeCkgPj4gMjEpICYgMHgzKQorI2RlZmluZSBNRlBfUFVMTF9GTE9BVAkJKDB4NCA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTExfTUFTSwkJKDB4NyA8PCAyMSkKKyNkZWZpbmUgTUZQX1BVTEwoeCkJCSgoKHgpID4+IDIxKSAmIDB4NykKIAogI2RlZmluZSBNRlBfQ0ZHX0RFRkFVTFQJCShNRlBfQUYwIHwgTUZQX0RTMDNYIHwgTUZQX0xQTV9ERUZBVUxUIHxcCiAJCQkJIE1GUF9MUE1fRURHRV9OT05FIHwgTUZQX1BVTExfTk9ORSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKaW5kZXggZTcxNmM2Mi4uYmU1OGY5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvbWZwLmMKQEAgLTc3LDExICs3NywxMyBAQAogICogTUZQUl9QVUxMX0xPVyAgICAgICAgMSAgICAgICAgIDAgICAgICAgIDEKICAqIE1GUFJfUFVMTF9ISUdIICAgICAgIDEgICAgICAgICAxICAgICAgICAwCiAgKiBNRlBSX1BVTExfQk9USCAgICAgICAxICAgICAgICAgMSAgICAgICAgMQorICogTUZQUl9QVUxMX0ZMT0FUCTEgICAgICAgICAwICAgICAgICAwCiAgKi8KICNkZWZpbmUgTUZQUl9QVUxMX05PTkUJCSgwKQogI2RlZmluZSBNRlBSX1BVTExfTE9XCQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTERPV05fRU4pCiAjZGVmaW5lIE1GUFJfUFVMTF9CT1RICQkoTUZQUl9QVUxMX0xPVyB8IE1GUFJfUFVMTFVQX0VOKQogI2RlZmluZSBNRlBSX1BVTExfSElHSAkJKE1GUFJfUFVMTF9TRUwgfCBNRlBSX1BVTExVUF9FTikKKyNkZWZpbmUgTUZQUl9QVUxMX0ZMT0FUCQkoTUZQUl9QVUxMX1NFTCkKIAogLyogbWZwX3NwaW5fbG9jayBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IE1GUCByZWdpc3RlciBjb25maWd1cmF0aW9uCiAgKiAobW9zdCBsaWtlbHkgYSByZWFkLW1vZGlmeS13cml0ZSBvcGVyYXRpb24pIGlzIGF0b21pYywgYW5kIHRoYXQKQEAgLTExNiw2ICsxMTgsNyBAQAogCU1GUFJfUFVMTF9MT1csCiAJTUZQUl9QVUxMX0hJR0gsCiAJTUZQUl9QVUxMX0JPVEgsCisJTUZQUl9QVUxMX0ZMT0FULAogfTsKIAogLyogbWFwcGluZyBvZiBNRlBfTFBNX0VER0VfKiBkZWZpbml0aW9ucyB0byBNRlBSX0VER0VfKiByZWdpc3RlciBiaXRzICovCkBAIC0yMDQsNyArMjA3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAl2YWwgPSBtZnByX3JlYWRsKG1mcF90YWJsZVttZnBdLm1mcHJfb2ZmKTsKQEAgLTIxNyw3ICsyMjAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKwlCVUdfT04obWZwIDwgMCB8fCBtZnAgPj0gTUZQX1BJTl9NQVgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKIAltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYwppbmRleCAyNjBmZGM2Li41ZmYyNGUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIAlncG4gPSBjaGlwLT5jaGlwLmJhc2U7CiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPmNoaXAubmdwaW87IGkrKywgZ3BuKyspIHsKLQkJQlVHX09OKGdwbiA+IEFSUkFZX1NJWkUoczNjX2dwaW9zKSk7CisJCUJVR19PTihncG4gPj0gQVJSQVlfU0laRShzM2NfZ3Bpb3MpKTsKIAkJczNjX2dwaW9zW2dwbl0gPSBjaGlwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwppbmRleCAxMTExN2E3Li5kZjQ3MzIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CkBAIC0xODgsNyArMTg5LDcgQEAKIGVycjoKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTF9HUEwoczNjX2FkY19jb252ZXJ0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfcmVhZCk7CiAKIHN0YXRpYyB2b2lkIHMzY19hZGNfZGVmYXVsdF9zZWxlY3Qoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCiAJCQkJICAgdW5zaWduZWQgc2VsZWN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDU0NDdlNjAuLjRhZjlkZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQxMltdICA9ICJTM0MyNDEyIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MFtdICA9ICJTM0MyNDQwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MltdICA9ICJTM0MyNDQyIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MmJbXSAgPSAiUzNDMjQ0MkIiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDQzW10gID0gIlMzQzI0NDMiOwogc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2MyNDEwYVtdID0gIlMzQzI0MTBBIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MGFbXSA9ICJTM0MyNDQwQSI7CkBAIC0xMTIsNiArMTEzLDE1IEBACiAJCS5uYW1lCQk9IG5hbWVfczNjMjQ0MgogCX0sCiAJeworCQkuaWRjb2RlCQk9IDB4MzI0NDBhYWIsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0NDJfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyYgorCX0sCisJewogCQkuaWRjb2RlCQk9IDB4MzI0MTIwMDEsCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKIAkJLm1hcF9pbwkJPSBzM2MyNDEyX21hcF9pbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCAxOTZiMTkxLi5mMDQ2ZjhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0yMDgsMTQgKzIwOCwxNCBAQAogewogCXVuc2lnbmVkIGxvbmcgcmVsb2FkOwogCi0JcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKLQkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOwotCiAJaWYgKGJ1ZiA9PSBOVUxMKSB7CiAJCWRtYXdhcm4oImJ1ZmZlciBpcyBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcHJfZGVidWcoInMzYzI0MTBfY2hhbl9sb2FkYnVmZmVyOiBsb2FkaW5nIGJ1ZmYgJXAgKDB4JTA4bHgsMHglMDZ4KVxuIiwKKwkJIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpYnVmLT5kYXRhLCBidWYtPnNpemUpOworCiAJLyogY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBjaGFubmVsIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLwogCiAJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpby5jCmluZGV4IDk1ZGYwNTkuLjU0Njc0NzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW8uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWZucy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCmluZGV4IGVmZWIwMjUuLmM3NzYxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oCkBAIC0yMjIsNyArMjIyLDkgQEAKIC8qIFMzQzI0MTAgYW5kIGNvbXBhdGlibGUgZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfY3B1ZnJlcV9zZXRyZWZyZXNoKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CitleHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CiAKKyNpZmRlZiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORwogZXh0ZXJuIGludCBzM2MyNDEwX2lvdGltaW5nX2NhbGMoc3RydWN0IHMzY19jcHVmcmVxX2NvbmZpZyAqY2ZnLAogCQkJCSBzdHJ1Y3QgczNjX2lvdGltaW5ncyAqaW90KTsKIApAQCAtMjMxLDggKzIzMywxMSBAQAogCiBleHRlcm4gdm9pZCBzM2MyNDEwX2lvdGltaW5nX3NldChzdHJ1Y3QgczNjX2NwdWZyZXFfY29uZmlnICpjZmcsCiAJCQkJIHN0cnVjdCBzM2NfaW90aW1pbmdzICppb3QpOwotCi1leHRlcm4gdm9pZCBzM2MyNDEwX3NldF9mdmNvKHN0cnVjdCBzM2NfY3B1ZnJlcV9jb25maWcgKmNmZyk7CisjZWxzZQorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2NhbGMgTlVMTAorI2RlZmluZSBzM2MyNDEwX2lvdGltaW5nX2dldCBOVUxMCisjZGVmaW5lIHMzYzI0MTBfaW90aW1pbmdfc2V0IE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9JT1RJTUlORyAqLwogCiAvKiBTM0MyNDEyIGNvbXBhdGlibGUgcm91dGluZXMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKaW5kZXggMmQwODUyYS4uYzJjZWY2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCkBAIC0yLDggKzIsMTEgQEAKICNkZWZpbmUgX0FSQ0hfTUNJX0gKIAogc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHsKKwl1bnNpZ25lZCBpbnQJbm9fd3Byb3RlY3QgOiAxOworCXVuc2lnbmVkIGludAlub19kZXRlY3QgOiAxOwogCXVuc2lnbmVkIGludAl3cHJvdGVjdF9pbnZlcnQgOiAxOwogCXVuc2lnbmVkIGludAlkZXRlY3RfaW52ZXJ0IDogMTsgICAvKiBzZXQgPT4gZGV0ZWN0IGFjdGl2ZSBoaWdoLiAqLworCXVuc2lnbmVkIGludAl1c2VfZG1hIDogMTsKIAogCXVuc2lnbmVkIGludAlncGlvX2RldGVjdDsKIAl1bnNpZ25lZCBpbnQJZ3Bpb193cHJvdGVjdDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDEwLmgKaW5kZXggYjZkZWVlZi4uODJhYjRhYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQxMC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIHMzYzI0MTBfaW5pdF91YXJ0cyBOVUxMCiAjZGVmaW5lIHMzYzI0MTBfbWFwX2lvIE5VTEwKICNkZWZpbmUgczNjMjQxMF9pbml0IE5VTEwKKyNkZWZpbmUgczNjMjQxMGFfaW5pdCBOVUxMCiAjZW5kaWYKIAogZXh0ZXJuIGludCBzM2MyNDEwX2Jhc2VjbGtfYWRkKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCmluZGV4IDY3YWE5M2QuLmQ1NTRiOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKQEAgLTE1MSw4ICsxNTEsNiBAQAogCQlzcmMgPSBjaGFuLT5kZXZfYWRkcjsKIAkJZHN0ID0gZGF0YTsKIAkJY29udHJvbDAgPSBQTDA4MF9DT05UUk9MX1NSQ19BSEIyOwotCQljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwotCQljb250cm9sMCB8PSAyIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOwogCQljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX0RTVF9JTkNSOwogCQlicmVhazsKIApAQCAtMTYwLDggKzE1OCw2IEBACiAJCXNyYyA9IGRhdGE7CiAJCWRzdCA9IGNoYW4tPmRldl9hZGRyOwogCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7Ci0JCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9EV0lEVEhfU0hJRlQ7Ci0JCWNvbnRyb2wwIHw9IDIgPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAJCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfU1JDX0lOQ1I7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzMsNiArMTY5LDggQEAKIAljb250cm9sMSA9IHNpemUgPj4gY2hhbi0+aHdfd2lkdGg7CS8qIHNpemUgaW4gbm8gb2YgeGZlcnMgKi8KIAljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1BST1RfU1lTOwkvKiBhbHdheXMgaW4gcHJpdi4gbW9kZSAqLwogCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfVENfSVJRX0VOOwkvKiBhbHdheXMgZmlyZSBJUlEgKi8KKwljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CiAKIAlsbGktPnNyY19hZGRyID0gc3JjOwogCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CkBAIC0zMzksMTkgKzMzNywyMCBAQAogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OwogCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOwogCXN0cnVjdCBwbDA4MHNfbGxpICpsbGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJV0FSTl9PTighY2hhbik7CiAJaWYgKCFjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9LRVJORUwpOworCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlsbGkgPSBkbWFfcG9vbF9hbGxvYyhkbWFfcG9vbCwgR0ZQX0tFUk5FTCwgJmJ1ZmYtPmxsaV9kbWEpOworCWxsaSA9IGRtYV9wb29sX2FsbG9jKGRtYV9wb29sLCBHRlBfQVRPTUlDLCAmYnVmZi0+bGxpX2RtYSk7CiAJaWYgKCFsbGkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBsbGlcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTM2Niw2ICszNjUsOCBAQAogCiAJczNjNjR4eF9kbWFfZmlsbF9sbGkoY2hhbiwgbGxpLCBkYXRhLCBzaXplKTsKIAorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwogCWlmICgobmV4dCA9IGNoYW4tPm5leHQpICE9IE5VTEwpIHsKIAkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZCA9IGNoYW4tPmVuZDsKIAkJc3RydWN0IHBsMDgwc19sbGkgKmVuZGxsaSA9IGVuZC0+bGxpOwpAQCAtMzk3LDYgKzM5OCw4IEBACiAJCXMzYzY0eHhfbGxpX3RvX3JlZ3MoY2hhbiwgbGxpKTsKIAl9CiAKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKIAlzaG93X2xsaShsbGkpOwogCiAJZGJnX3Nob3djaGFuKGNoYW4pOwpAQCAtNTYwLDI2ICs1NjMsMTEgQEAKIAogRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9mcmVlKTsKIAotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV90Y2lycShzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjLCBpbnQgb2ZmcykKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKLQotCS8qIG5vdGUsIHdlIGN1cnJlbnRseSBkbyBub3QgYm90aGVyIHRvIHdvcmsgb3V0IHdoaWNoIGJ1ZmZlcgotCSAqIG9yIGJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbXBsZXRlZCBzaW5jZSB0aGUgbGFzdCB0Yy1pcnEuICovCi0KLQlpZiAoY2hhbi0+Y2FsbGJhY2tfZm4pCi0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgY2hhbi0+Y3Vyci0+cHcsIDAsIFMzQzI0MTBfUkVTX09LKTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfZXJyaXJxKHN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMsIGludCBvZmZzKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogb2ZmcyAlZFxuIiwgX19mdW5jX18sIG9mZnMpOwotfQotCiBzdGF0aWMgaXJxcmV0dXJuX3QgczNjNjR4eF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB3KQogewogCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBwdzsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwllbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzOwogCXUzMiB0Y3N0YXQsIGVycnN0YXQ7CiAJdTMyIGJpdDsKIAlpbnQgb2ZmczsKQEAgLTU4OCwxNCArNTc2LDU0IEBACiAJZXJyc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfU1RBVFVTKTsKIAogCWZvciAob2ZmcyA9IDAsIGJpdCA9IDE7IG9mZnMgPCA4OyBvZmZzKyssIGJpdCA8PD0gMSkgeworCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKKworCQlpZiAoIShlcnJzdGF0ICYgYml0KSAmJiAhKHRjc3RhdCAmIGJpdCkpCisJCQljb250aW51ZTsKKworCQljaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOworCQlyZXMgPSBTM0MyNDEwX1JFU19FUlI7CisKIAkJaWYgKHRjc3RhdCAmIGJpdCkgewogCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX1RDX0NMRUFSKTsKLQkJCXMzYzY0eHhfZG1hX3RjaXJxKGRtYWMsIG9mZnMpOworCQkJcmVzID0gUzNDMjQxMF9SRVNfT0s7CiAJCX0KIAotCQlpZiAoZXJyc3RhdCAmIGJpdCkgewotCQkJczNjNjR4eF9kbWFfZXJyaXJxKGRtYWMsIG9mZnMpOworCQlpZiAoZXJyc3RhdCAmIGJpdCkKIAkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfQ0xFQVIpOworCisJCS8qICduZXh0JyBwb2ludHMgdG8gdGhlIGJ1ZmZlciB0aGF0IGlzIG5leHQgdG8gdGhlCisJCSAqIGN1cnJlbnRseSBhY3RpdmUgYnVmZmVyLgorCQkgKiBGb3IgQ0lSQ1VMQVIgcXVldWVzLCAnbmV4dCcgd2lsbCBiZSBzYW1lIGFzICdjdXJyJworCQkgKiB3aGVuICdlbmQnIGlzIHRoZSBhY3RpdmUgYnVmZmVyLgorCQkgKi8KKwkJYnVmZiA9IGNoYW4tPmN1cnI7CisJCXdoaWxlIChidWZmICYmIGJ1ZmYgIT0gY2hhbi0+bmV4dAorCQkJCSYmIGJ1ZmYtPm5leHQgIT0gY2hhbi0+bmV4dCkKKwkJCWJ1ZmYgPSBidWZmLT5uZXh0OworCisJCWlmICghYnVmZikKKwkJCUJVRygpOworCisJCWlmIChidWZmID09IGNoYW4tPm5leHQpCisJCQlidWZmID0gY2hhbi0+ZW5kOworCisJCXMzYzY0eHhfZG1hX2J1ZmZmZG9uZShjaGFuLCBidWZmLCByZXMpOworCisJCS8qIEZyZWUgdGhlIG5vZGUgYW5kIHVwZGF0ZSBjdXJyLCBpZiBub24tY2lyY3VsYXIgcXVldWUgKi8KKwkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKSB7CisJCQljaGFuLT5jdXJyID0gYnVmZi0+bmV4dDsKKwkJCXMzYzY0eHhfZG1hX2ZyZWVidWZmKGJ1ZmYpOworCQl9CisKKwkJLyogVXBkYXRlICduZXh0JyAqLworCQlidWZmID0gY2hhbi0+bmV4dDsKKwkJaWYgKGNoYW4tPm5leHQgPT0gY2hhbi0+ZW5kKSB7CisJCQljaGFuLT5uZXh0ID0gY2hhbi0+Y3VycjsKKwkJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkKKwkJCQljaGFuLT5lbmQgPSBOVUxMOworCQl9IGVsc2UgeworCQkJY2hhbi0+bmV4dCA9IGJ1ZmYtPm5leHQ7CiAJCX0KIAl9CiAKQEAgLTY5Nyw3ICs3MjUsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyaW5nIERNQSBjaGFubmVsc1xuIiwgX19mdW5jX18pOwogCi0JZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCAzMiwgMTYsIDApOworCWRtYV9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJETUEtTExJIiwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBwbDA4MHNfbGxpKSwgMTYsIDApOwogCWlmICghZG1hX3Bvb2wpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwb29sXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCmluZGV4IDBjMzBkZDkuLjhmNzZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKIAogCXZvaWQJCQkqcHc7Ci0Jc3RydWN0IHBsMDgwX2xsaQkqbGxpOworCXN0cnVjdCBwbDA4MHNfbGxpCSpsbGk7CiAJZG1hX2FkZHJfdAkJIGxsaV9kbWE7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IDc0M2E3MDAuLjc5NTZmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCkBAIC0xOTQsOSArMTk0LDE3IEBACiAKICNkZWZpbmUgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG5vKQkoSVJRX0VJTlRfR1JPVVAjI2dyb3VwIyNfQkFTRSArIChubykpCiAKKy8qIERlZmluZSBhIGdyb3VwIG9mIGludGVycnVwdHMgZm9yIGJvYXJkLXNwZWNpZmljIHVzZSAoZWcsIGZvciBNRkQKKyAqIGludGVycnVwdCBjb250cm9sbGVycykuICovCisjZGVmaW5lIElSUV9CT0FSRF9TVEFSVCAoSVJRX0VJTlRfR1JPVVA5X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDlfTlIgKyAxKQorCisjZGVmaW5lIElSUV9CT0FSRF9OUiAxNgorCisjZGVmaW5lIElSUV9CT0FSRF9FTkQgKElSUV9CT0FSRF9TVEFSVCArIElSUV9CT0FSRF9OUikKKwogLyogU2V0IHRoZSBkZWZhdWx0IE5SX0lSUVMgKi8KIAotI2RlZmluZSBOUl9JUlFTCShJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisjZGVmaW5lIE5SX0lSUVMJKElSUV9CT0FSRF9FTkQgKyAxKQogCiAjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCmluZGV4IGE4Nzc3YTc1Li5mZjQ2ZTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApAQCAtNTEsOCArNTEsOCBAQAogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfSENMS19TSElGVAkoOCkKICNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfTUFTSwkoMHgxIDw8IDQpCiAjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9NUExMX1NISUZUCSg0KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX01BU0sJKDB4MyA8PCAwKQotI2RlZmluZSBTM0M2NDEwX0NMS0RJVjBfQVJNX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX01BU0sJKDB4NyA8PCAwKQorI2RlZmluZSBTM0M2NDEwX0NMS0RJVjBfQVJNX01BU0sJKDB4ZiA8PCAwKQogI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQVJNX1NISUZUCSgwKQogCiAvKiBDTEtESVYxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwppbmRleCBmZWJhYzE5Li42ZmZhMjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKQEAgLTMwMiw4ICszMDIsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JdmFsICY9IH4oMHhmIDw8IHNjbGstPnNoaWZ0KTsKLQl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPnNoaWZ0OworCXZhbCAmPSB+KDB4ZiA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0KTsKKwl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPmRpdmlkZXJfc2hpZnQ7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKIAogCXJldHVybiAwOwpAQCAtMzI4LDYgKzMyOCw4IEBACiAJCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7CiAKIAkJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDX0NMS19TUkMpOworCisJCWNsay0+cGFyZW50ID0gcGFyZW50OwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM0Myw3ICszNDUsNyBAQAogCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCiAJCXJhdGUgPSBwYXJlbnRfcmF0ZTsKIAllbHNlIHsKLQkJZGl2ID0gcmF0ZSAvIHBhcmVudF9yYXRlOworCQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CiAKIAkJaWYgKGRpdiA9PSAwKQogCQkJZGl2ID0gMTsKQEAgLTY3NSw2ICs2NzcsOSBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4dGFsIGlzICVsZFxuIiwgX19mdW5jX18sIHh0YWwpOwogCisJLyogRm9yIG5vdyBhc3N1bWUgdGhlIG11eCBhbHdheXMgc2VsZWN0cyB0aGUgY3J5c3RhbCAqLworCWNsa19leHRfeHRhbF9tdXgucGFyZW50ID0geHRhbF9jbGs7CisKIAllcGxsID0gczNjNjQwMF9nZXRfZXBsbCh4dGFsKTsKIAltcGxsID0gczNjNjQwMF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFMzQ19NUExMX0NPTikpOwogCWFwbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX0FQTExfQ09OKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jIGIvYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9kbWEuYwppbmRleCBkMmY0OTc3Li5lZjg4ZjI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXN0bXAzeHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc3RtcDN4eHgvZG1hLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCQkJCQlzdG1wM3h4eF9kbWFfZnJlZV9jb21tYW5kKGNoLAogCQkJCQkJCQkgICZkZXNjcmlwdG9ycwogCQkJCQkJCQkgIFtpXSk7Ci0JCQkJfSB3aGlsZSAoaS0tID49IDApOworCQkJCX0gd2hpbGUgKGktLSA+IDApOwogCQkJfQogCQkJcmV0dXJuIGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggYzhjNTViNC4uOTRiZTdiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcworKysgYi9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCkBAIC0xMiw3ICsxMiw3IEBACiAjCiAjICAgaHR0cDovL3d3dy5hcm0ubGludXgub3JnLnVrL2RldmVsb3Blci9tYWNoaW5lcy8/YWN0aW9uPW5ldwogIwotIyBMYXN0IHVwZGF0ZTogU2F0IFNlcCAxMiAxMjowMDoxNiAyMDA5CisjIExhc3QgdXBkYXRlOiBGcmkgU2VwIDE4IDIxOjQyOjAwIDIwMDkKICMKICMgbWFjaGluZV9pc194eHgJQ09ORklHX3h4eHgJCU1BQ0hfVFlQRV94eHgJCW51bWJlcgogIwpAQCAtMTYzOCw3ICsxNjM4LDcgQEAKIGFtbF9tODA1MAkJTUFDSF9BTUxfTTgwNTAJCUFNTF9NODA1MAkJMTY0NAogbXgzNV8zZHMJCU1BQ0hfTVgzNV8zRFMJCU1YMzVfM0RTCQkxNjQ1CiBtYXJzCQkJTUFDSF9NQVJTCQlNQVJTCQkJMTY0NgotbnRvc2RfNjQ0eGEJCU1BQ0hfTlRPU0RfNjQ0WEEJTlRPU0RfNjQ0WEEJCTE2NDcKK25ldXJvc19vc2QyCQlNQUNIX05FVVJPU19PU0QyCU5FVVJPU19PU0QyCQkxNjQ3CiBiYWRnZXIJCQlNQUNIX0JBREdFUgkJQkFER0VSCQkJMTY0OAogdHJpemVwczR3bAkJTUFDSF9UUklaRVBTNFdMCQlUUklaRVBTNFdMCQkxNjQ5CiB0cml6ZXBzNQkJTUFDSF9UUklaRVBTNQkJVFJJWkVQUzUJCTE2NTAKQEAgLTE2NTQsNyArMTY1NCw3IEBACiB6b3JhbjQzeHgJCU1BQ0hfWk9SQU40M1hYCQlaT1JBTjQzWFgJCTE2NjAKIHNvbml4OTI2CQlNQUNIX1NPTklYOTI2CQlTT05JWDkyNgkJMTY2MQogY2VsZXN0aWFsc2VtaQkJTUFDSF9DRUxFU1RJQUxTRU1JCUNFTEVTVElBTFNFTUkJCTE2NjIKLWNjOW0yNDQzCQlNQUNIX0NDOU0yNDQzCQlDQzlNMjQ0MwkJMTY2MworY2M5bTI0NDNqcwkJTUFDSF9DQzlNMjQ0M0pTCQlDQzlNMjQ0M0pTCQkxNjYzCiB0dzUzMzQJCQlNQUNIX1RXNTMzNAkJVFc1MzM0CQkJMTY2NAogb21hcF9odGNhcnRlbWlzCQlNQUNIX0hUQ0FSVEVNSVMJCUhUQ0FSVEVNSVMJCTE2NjUKIG5hbF9obGl0ZQkJTUFDSF9OQUxfSExJVEUJCU5BTF9ITElURQkJMTY2NgpAQCAtMTgwMiw3ICsxODAyLDcgQEAKIHJkODhmNTE4MWxfZ2UJCU1BQ0hfUkQ4OEY1MTgxTF9HRQlSRDg4RjUxODFMX0dFCQkxODEyCiBzaWZtYWluCQkJTUFDSF9TSUZNQUlOCQlTSUZNQUlOCQkJMTgxMwogc2FtOV9sOTI2MQkJTUFDSF9TQU05X0w5MjYxCQlTQU05X0w5MjYxCQkxODE0Ci1jYzltMjQ0M2pzCQlNQUNIX0NDOU0yNDQzSlMJCUNDOU0yNDQzSlMJCTE4MTUKK2NjOW0yNDQzCQlNQUNIX0NDOU0yNDQzCQlDQzlNMjQ0MwkJMTgxNQogeGFyaWEzMDAJCU1BQ0hfWEFSSUEzMDAJCVhBUklBMzAwCQkxODE2CiBpdDkyMDAJCQlNQUNIX0lUOTIwMAkJSVQ5MjAwCQkJMTgxNwogcmQ4OGY1MTgxbF9meG8JCU1BQ0hfUkQ4OEY1MTgxTF9GWE8JUkQ4OEY1MTgxTF9GWE8JCTE4MTgKQEAgLTI0MDksMyArMjQwOSwxNSBAQAogcHNzMgkJCU1BQ0hfUFNTMgkJUFNTMgkJCTI0MjMKIGRhdmluY2lfYXBtMTUwCQlNQUNIX0RBVklOQ0lfQVBNMTUwCURBVklOQ0lfQVBNMTUwCQkyNDI0CiBzdHI5MTAwCQkJTUFDSF9TVFI5MTAwCQlTVFI5MTAwCQkJMjQyNQorbmV0NWJpZwkJCU1BQ0hfTkVUNUJJRwkJTkVUNUJJRwkJCTI0MjYKK3NlYWJlZDkyNjMJCU1BQ0hfU0VBQkVEOTI2MwkJU0VBQkVEOTI2MwkJMjQyNworbXg1MV9tMmlkCQlNQUNIX01YNTFfTTJJRAkJTVg1MV9NMklECQkyNDI4CitvY3R2b2NwbHVzX2ViCQlNQUNIX09DVFZPQ1BMVVNfRUIJT0NUVk9DUExVU19FQgkJMjQyOQora2xrX2ZpcmVmb3gJCU1BQ0hfS0xLX0ZJUkVGT1gJS0xLX0ZJUkVGT1gJCTI0MzAKK2tsa193aXJtYV9tb2R1bGUJTUFDSF9LTEtfV0lSTUFfTU9EVUxFCUtMS19XSVJNQV9NT0RVTEUJMjQzMQora2xrX3dpcm1hX21taQkJTUFDSF9LTEtfV0lSTUFfTU1JCUtMS19XSVJNQV9NTUkJCTI0MzIKK3N1cGVyc29uaWMJCU1BQ0hfU1VQRVJTT05JQwkJU1VQRVJTT05JQwkJMjQzMworbGliZXJ0eQkJCU1BQ0hfTElCRVJUWQkJTElCRVJUWQkJCTI0MzQKK21oMzU1CQkJTUFDSF9NSDM1NQkJTUgzNTUJCQkyNDM1CitwYzc4MDIJCQlNQUNIX1BDNzgwMgkJUEM3ODAyCQkJMjQzNgorZ25ldF9zZ2MJCU1BQ0hfR05FVF9TR0MJCUdORVRfU0dDCQkyNDM3CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaCBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDQ0ZDBiZmEuLjljOTZhMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2NwdS5oCkBAIC0zMSw1ICszMSw4IEBACiAjZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MygpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlybCgpCSgwKQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDkoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDVlcygpCSgwKQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9BRElfQlNELnR4dCBiL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYmxhY2tmaW4vQURJX0JTRC50eHQKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBCU0QtU3R5bGUgTGljZW5zZSBhcHBsaWVzIHRvIGEgZmV3IGZpbGVzIGluIC4vYXJjaC9ibGFja2ZpbiBkaXJlY3RvcnksCithbmQgaXMgaW5jbHVkZWQgaGVyZSwgc28gcGVvcGxlIHVuZGVyc3RhbmQgd2hpY2ggY29kZSB0aGV5IGNhbiB1c2Ugb3V0c2lkZQordGhlIExpbnV4IGtlcm5lbCwgaW4gbm9uLUdQTCBiYXNlZCBwcm9qZWN0cy4KKworVXNpbmcgdGhlIGZpbGVzIHJlbGVhc2VkIHVuZGVyIHRoZSAiQURJIEJTRCIgbGljZW5zZSwgbXVzdCBjb21wbHkgd2l0aAordGhlc2UgbGljZW5zZSB0ZXJtcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IEFuYWxvZyBEZXZpY2VzLCBJbmMuCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KKyAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIEFuYWxvZyBEZXZpY2VzLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAtIFRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtYXkgb3IgbWF5IG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IHJpZ2h0cworICAgIG9mIG9uZSBvciBtb3JlIHBhdGVudCBob2xkZXJzLiAgVGhpcyBsaWNlbnNlIGRvZXMgbm90IHJlbGVhc2UgeW91CisgICAgZnJvbSB0aGUgcmVxdWlyZW1lbnQgdGhhdCB5b3Ugb2J0YWluIHNlcGFyYXRlIGxpY2Vuc2VzIGZyb20gdGhlc2UKKyAgICBwYXRlbnQgaG9sZGVycyB0byB1c2UgdGhpcyBzb2Z0d2FyZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTkFMT0cgREVWSUNFUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgTk9OLUlORlJJTkdFTUVOVCwKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBBTkFMT0cgREVWSUNFUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vS2NvbmZpZyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwppbmRleCA5YTAxZDQ0Li5hZTZhNjBmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL0tjb25maWcKKysrIGIvYXJjaC9ibGFja2Zpbi9LY29uZmlnCkBAIC00Nyw2ICs0Nyw5IEBACiBjb25maWcgR0VORVJJQ19JUlFfUFJPQkUKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBHRU5FUklDX0dQSU8KIAlkZWZfYm9vbCB5CiAKQEAgLTIyOSw3ICsyMzIsNyBAQAogCiBjb25maWcgU01QCiAJZGVwZW5kcyBvbiBCRjU2MQotCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVSwKQEAgLTYxMywxMiArNjE2LDEwIEBACiBzb3VyY2Uga2VybmVsL0tjb25maWcuaHoKIAogY29uZmlnIEdFTkVSSUNfVElNRQotCWJvb2wgIkdlbmVyaWMgdGltZSIKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0NMT0NLRVZFTlRTCiAJYm9vbCAiR2VuZXJpYyBjbG9jayBldmVudHMiCi0JZGVwZW5kcyBvbiBHRU5FUklDX1RJTUUKIAlkZWZhdWx0IHkKIAogY2hvaWNlCkBAIC02NTMsNiArNjU0LDEwIEBACiAJZGVwZW5kcyBvbiBHRU5FUklDX0NMT0NLRVZFTlRTCiAJZGVwZW5kcyBvbiAhVElDS1NPVVJDRV9HUFRNUjAKIAorY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJZGVwZW5kcyBvbiAhR0VORVJJQ19DTE9DS0VWRU5UUworCWRlZl9ib29sIHkKKwogc291cmNlIGtlcm5lbC90aW1lL0tjb25maWcKIAogY29tbWVudCAiTWlzYyIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDg4ZjM2ZDUuLmQyN2M2MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX19BUkNIX0JMQUNLRklOX0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9CTEFDS0ZJTl9BVE9NSUNfXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW4tZ2xvYmFsLmgKaW5kZXggYWVmMDU5NC4uMTAwNjRmOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluLWdsb2JhbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbi1nbG9iYWwuaApAQCAtMSwyOSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9iZmluLWdsb2JhbC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgR2xvYmFsIGV4dGVybiBkZWZpbmVzIGZvciBibGFja2ZpbgorICogR2xvYmFsIGV4dGVybiBkZWZpbmVzIGZvciBibGFja2ZpbgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGSU5fR0xPQkFMX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW41eHhfc3BpLmgKaW5kZXggYzI4MWM2My4uZWQ0ZjhjNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluNXh4X3NwaS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbjV4eF9zcGkuaApAQCAtMyw4ICszLDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3JvdGFyeS5oCmluZGV4IDQyNWVjZTYuLmFiZGIyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9yb3RhcnkuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fcm90YXJ5LmgKQEAgLTEsNiArMSwxMCBAQAogLyoKICAqIGJvYXJkIGluaXRpYWxpemF0aW9uIHNob3VsZCBwdXQgb25lIG9mIHRoZXNlIHN0cnVjdHVyZXMgaW50byBwbGF0Zm9ybV9kYXRhCiAgKiBhbmQgcGxhY2UgdGhlIGJmaW4tcm90YXJ5IG9udG8gcGxhdGZvcm1fYnVzIG5hbWVkICJiZmluLXJvdGFyeSIuCisgKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRklOX1JPVEFSWV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2ltcGxlX3RpbWVyLmgKaW5kZXggZmNjYmI1OS4uNTI0OGMxMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NpbXBsZV90aW1lci5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zaW1wbGVfdGltZXIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfYmZpbl9zaW1wbGVfdGltZXJfaF8KICNkZWZpbmUgX2JmaW5fc2ltcGxlX3RpbWVyX2hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IGRhZmZhNzEuLmEyZmYzZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYml0b3BzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iaXRvcHMuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fQklUT1BTX0gKICNkZWZpbmUgX0JMQUNLRklOX0JJVE9QU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmxhY2tmaW4uaAppbmRleCA0ZDQ0Mzk1Li5lYjdjMTQ0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ibGFja2Zpbi5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisgKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIEJsYWNrZmluIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogICoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggNjU1ZTQ5NS4uNmY0NTQ4YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9idWcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J1Zy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9CVUdfSAogI2RlZmluZSBfQkxBQ0tGSU5fQlVHX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKaW5kZXggM2U2OTEwNi4uOTU1ODQxNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCkBAIC0xLDYgKzEgQEAKLSNpZm5kZWYgX0JMQUNLRklOX0JZVEVPUkRFUl9ICi0jZGVmaW5lIF9CTEFDS0ZJTl9CWVRFT1JERVJfSAotCiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaD4KLQotI2VuZGlmCQkJCS8qIF9CTEFDS0ZJTl9CWVRFT1JERVJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDQ3NzA1MGEuLjg1NDJiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NhY2hlLmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogaW5jbHVkZS9hc20tYmxhY2tmaW4vY2FjaGUuaAorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpZm5kZWYgX19BUkNIX0JMQUNLRklOX0NBQ0hFX0gKICNkZWZpbmUgX19BUkNIX0JMQUNLRklOX0NBQ0hFX0gKIApAQCAtMzUsMTAgKzM4LDEwIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQkZJTl9DQUNIRV9DT0hFUkVOVCkKLSMgaWYgZGVmaW5lZChDT05GSUdfQkZJTl9JQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0lDQUNIRUFCTEUpCisjIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fRVhUTUVNX0lDQUNIRUFCTEUpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fTDJfSUNBQ0hFQUJMRSkKICMgZGVmaW5lIF9fQVJDSF9TWU5DX0NPUkVfSUNBQ0hFCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0JGSU5fRENBQ0hFQUJMRSkgfHwgZGVmaW5lZChDT05GSUdfQkZJTl9MMl9EQ0FDSEVBQkxFKQorIyBpZiBkZWZpbmVkKENPTkZJR19CRklOX0VYVE1FTV9EQ0FDSEVBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19CRklOX0wyX0RDQUNIRUFCTEUpCiAjIGRlZmluZSBfX0FSQ0hfU1lOQ19DT1JFX0RDQUNIRQogIyBlbmRpZgogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggN2U1NTU0OWUuLmFmMDNhMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL2NhY2hlZmx1c2guaAotICogQmFzZWQgb246CSBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvY2FjaGVmbHVzaC5oCi0gKiBBdXRob3I6ICAgICAgIExHIFNvZnQgSW5kaWEKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA0IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqIENyZWF0ZWQ6ICAgICAgVHVlIFNlcCAyMSAyMDA0Ci0gKiBEZXNjcmlwdGlvbjogIEJsYWNrZmluIGxvdy1sZXZlbCBjYWNoZSByb3V0aW5lcyBhZGFwdGVkIGZyb20gdGhlIGkzODYKLSAqIAkJIGFuZCBQUEMgdmVyc2lvbnMgYnkgR3JlZyBVbmdlcmVyIChnZXJnQHNuYXBnZWFyLmNvbSkKKyAqIEJsYWNrZmluIGxvdy1sZXZlbCBjYWNoZSByb3V0aW5lcwogICoKLSAqIE1vZGlmaWVkOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fQ0FDSEVGTFVTSF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jZGVmX0xQQmxhY2tmaW4uaAppbmRleCAzNWY4NDFiLi44Nzc4ZTBmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NkZWZfTFBCbGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2RlZl9MUEJsYWNrZmluLmgKQEAgLTEsMzAgKzEsOCBAQAotIC8qCi0gICogRmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtY29tbW9uL2NkZWZfTFBCbGFja2Zpbi5oCi0gICogQmFzZWQgb246Ci0gICogQXV0aG9yOiAgICAgIHVua25vd24KLSAgKiAgICAgICAgICAgICAgQ09QWVJJR0hUIDIwMDUgQW5hbG9nIERldmljZXMKLSAgKiBDcmVhdGVkOiAgICAgPwotICAqIERlc2NyaXB0aW9uOgotICAqCi0gICogTW9kaWZpZWQ6Ci0gICoKLSAgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICAqCi0gICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICoKLSAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAgKi8KKy8qCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KIAogI2lmbmRlZiBfQ0RFRl9MUEJMQUNLRklOX0gKICNkZWZpbmUgX0NERUZfTFBCTEFDS0ZJTl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NoZWNrc3VtLmgKaW5kZXggNzkzNTgxZi4uYTIzNDE1YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jaGVja3N1bS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2hlY2tzdW0uaApAQCAtMSw5ICsxLDE0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAgICAgIGFrYmFyLmh1c3NhaW5AbGluZW8uY29tCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fQ0hFQ0tTVU1fSAogI2RlZmluZSBfQkZJTl9DSEVDS1NVTV9ICiAKIC8qCi0gKiBNT0RJRklFRCBGT1IgQkZJTiBBcHJpbCAzMCwgMjAwMSBha2Jhci5odXNzYWluQGxpbmVvLmNvbQotICoKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLAogICogYW5kIGFkZHMgaW4gInN1bSIgKDMyLWJpdCkKICAqCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jbG9ja3MuaAppbmRleCAwMzNiYmE5Li5mODBkYWQ1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Nsb2Nrcy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY2xvY2tzLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1jb21tb24vY2xvY2tzLmgKLSAqIEJhc2VkIG9uOiAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBBdXRob3I6CSBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAqIENvbW1vbiBDbG9jayBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBrZXJuZWwgZmlsZXMKICAqCi0gKiBDcmVhdGVkOiAgICAgIDI1SnVsMDcKLSAqIERlc2NyaXB0aW9uOiAgQ29tbW9uIENsb2NrIGRlZmluaXRpb25zIGZvciB2YXJpb3VzIGtlcm5lbCBmaWxlcworICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGSU5fQ0xPQ0tTX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY29udGV4dC5TIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jb250ZXh0LlMKaW5kZXggZjhhNjY0Zi4uNWRmZmFmNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jb250ZXh0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jb250ZXh0LlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvY29udGV4dC5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmgKaW5kZXggZDE4ZDE2OC4uZmRhOTYyNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiLmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vY3BsYi5oCi0gKiBCYXNlZCBvbjogICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOiAgICAgICBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZz4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwMAotICogRGVzY3JpcHRpb246ICBDb21tb24gQ1BMQiBkZWZpbml0aW9ucyBmb3IgQ1BMQiBpbml0Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NQTEJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcGxiaW5pdC5oCmluZGV4IDA1YjE0YTYuLmYzMTVjODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3BsYmluaXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwbGJpbml0LmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vY3BsYmluaXQuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb21tb24gQ1BMQiBkZWZpbml0aW9ucyBmb3IgQ1BMQiBpbml0CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BU01fQ1BMQklOSVRfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaAppbmRleCBmYWRmYTgyLi5iMTkxZGM2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vY3B1LmgKQEAgLTEsMjMgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9jcHUuaC4KLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0FTTV9CTEFDS0ZJTl9DUFVfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kZWZfTFBCbGFja2Zpbi5oCmluZGV4IDYzNDFlZWIuLjI1OTA2NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZGVmX0xQQmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RlZl9MUEJsYWNrZmluLmgKQEAgLTEsMzIgKzEsMTAgQEAKLSAvKgotICAqIEZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWNvbW1vbi9kZWZfTFBCbGFja2Zpbi5oCi0gICogQmFzZWQgb246Ci0gICogQXV0aG9yOiAgICAgIHVua25vd24KLSAgKiAgICAgICAgICAgICAgQ09QWVJJR0hUIDIwMDUgQW5hbG9nIERldmljZXMKLSAgKiBDcmVhdGVkOiAgICAgPwotICAqIERlc2NyaXB0aW9uOgotICAqCi0gICogTW9kaWZpZWQ6Ci0gICoKLSAgKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICAqCi0gICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgKgotICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gICoKLSAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAgKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAgKi8KLQotLyogTFAgQmxhY2tmaW4gQ09SRSBSRUdJU1RFUiBCSVQgJiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTMyLzMzICovCisvKgorICogQmxhY2tmaW4gY29yZSByZWdpc3RlciBiaXQgJiBhZGRyZXNzIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciBHUEwtMiAob3IgbGF0ZXIpLgorICovCiAKICNpZm5kZWYgX0RFRl9MUEJMQUNLRklOX0gKICNkZWZpbmUgX0RFRl9MUEJMQUNLRklOX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBlZDZiMWYzLi43YTIzZDgyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9CTEFDS0ZJTl9ETUFfTUFQUElOR19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZHBtYy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKaW5kZXggOTZlODIwOC4uOTI1ZTY2YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kcG1jLmgKQEAgLTEsOSArMSwxMSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWJsYWNrZmluL2RwbWMuaCAtICBNaXNjZWxsYW5lb3VzIElPQ1RMIGNvbW1hbmRzIGZvciBEeW5hbWljIFBvd2VyCi0gKiAgIAkJCSAJTWFuYWdlbWVudCBDb250cm9sbGVyIERyaXZlci4KKyAqIE1pc2NlbGxhbmVvdXMgSU9DVEwgY29tbWFuZHMgZm9yIER5bmFtaWMgUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIERyaXZlcgorICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2UgSW5jLgogICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCisKICNpZm5kZWYgX0JMQUNLRklOX0RQTUNfSF8KICNkZWZpbmUgX0JMQUNLRklOX0RQTUNfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWFybHlfcHJpbnRrLmgKaW5kZXggNTNhNzYyYi4uNjhhOTEwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lYXJseV9wcmludGsuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Vhcmx5X3ByaW50ay5oCkBAIC0xLDI3ICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9lYXJseV9wcmludGsuaAotICogQXV0aG9yOiAgICAgICBSb2JpbiBHZXR6IDxyZ2V0ekBibGFja2Zpbi51Y2xpbnV4Lm9yZworICogZnVuY3Rpb24gcHJvdG90cHllcyBmb3IgZWFybHkgcHJpbnRrCiAgKgotICogQ3JlYXRlZDogICAgICAxNEF1ZzIwMDcKLSAqIERlc2NyaXB0aW9uOiAgZnVuY3Rpb24gcHJvdG90cHllcyBmb3IgZWFybHkgcHJpbnRrCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAotCiAjaWZuZGVmIF9fQVNNX0VBUkxZX1BSSU5US19IX18KICNkZWZpbmUgX19BU01fRUFSTFlfUFJJTlRLX0hfXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjODIzZThlLi44ZTA3NjRjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZWxmLmgKQEAgLTEsNCArMSw4IEBACi0vKiBDaGFuZ2VzIG1hZGUgYnkgIExHIFNvZnQgT2N0IDIwMDQqLworLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZuZGVmIF9fQVNNQkZJTl9FTEZfSAogI2RlZmluZSBfX0FTTUJGSU5fRUxGX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZW50cnkuaAppbmRleCA1NWI4MDhmLi5hNjg4NmY2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2VudHJ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9lbnRyeS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQkZJTl9FTlRSWV9ICiAjZGVmaW5lIF9fQkZJTl9FTlRSWV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmNudGwuaAppbmRleCA5YzQwMzcxLi44NzI3YjJiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9mY250bC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX0ZDTlRMX0gKICNkZWZpbmUgX0JGSU5fRkNOVExfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZpeGVkX2NvZGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZml4ZWRfY29kZS5oCmluZGV4IDMyYzRkNDkuLjczZmU1M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZml4ZWRfY29kZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZml4ZWRfY29kZS5oCkBAIC0xLDUgKzEsMTEgQEAKLS8qIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmaXhlZCBhZGRyZXNzZXMgd2hlcmUgdXNlcnNwYWNlIHByb2dyYW1zIGNhbiBmaW5kCi0gICBhdG9taWMgY29kZSBzZXF1ZW5jZXMuICAqLworLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBmaXhlZCBhZGRyZXNzZXMgd2hlcmUgdXNlcnNwYWNlIHByb2dyYW1zCisgKiBjYW4gZmluZCBhdG9taWMgY29kZSBzZXF1ZW5jZXMuCisgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCiAKICNpZm5kZWYgX19CRklOX0FTTV9GSVhFRF9DT0RFX0hfXwogI2RlZmluZSBfX0JGSU5fQVNNX0ZJWEVEX0NPREVfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2ZsYXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmxhdC5oCmluZGV4IDczM2ExNzguLmMxMzE0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmxhdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZmxhdC5oCkBAIC0xLDggKzEsOSBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLWJsYWNrZmluL2ZsYXQuaCAtLSB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzCisgKiB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzLAorICogQ29weXJpZ2h0IDIwMDMtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX0ZMQVRfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCmluZGV4IGZlMTM5NjEuLjViNDRkMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZ3Bpby5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoJIE1pY2hhZWwgSGVubmVyaWNoIChoZW5uZXJpY2hAYmxhY2tmaW4udWNsaW51eC5vcmcpCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19BUkNIX0JMQUNLRklOX0dQSU9fSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDBiNzhiODcuLmMwNzhkZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQkZJTl9IQVJESVJRX0gKICNkZWZpbmUgX19CRklOX0hBUkRJUlFfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMzcwNTNlYy4uZDFmNTAyOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaW8uaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9JT19ICiAjZGVmaW5lIF9CRklOX0lPX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxLmgKaW5kZXggNDJhMTVmNS4uZTdjMDYyMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycS5oCkBAIC0xLDE3ICsxLDEwIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDAzIEh1VGFvCisgKiAgICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gKHd3dy5hcmN0dXJ1c25ldHdvcmtzLmNvbQorICogICAgICAgICAgICAgICAgICAgICAgIFRlZCBNYSA8bWF0ZWRAc3ltcGF0aWNvLmNhPgogICoKLSAqIENoYW5nZWQgYnkgSHVUYW8gQXByMTgsIDIwMDMKLSAqCi0gKiBDb3B5cmlnaHQgd2FzIG1pc3Npbmcgd2hlbiBJIGdvdCB0aGUgY29kZSBzbyB0b29rIGZyb20gTUlQUyBhcmNoIC4uLk1hVGVkLS0tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgV2FsZG9yZiBHTUJILCB3cml0dGVuIGJ5IFJhbGYgQmFlY2hsZQotICogQ29weXJpZ2h0IChDKSAxOTk1LCA5NiwgOTcsIDk4LCA5OSwgMjAwMCwgMjAwMSBieSBSYWxmIEJhZWNobGUKLSAqCi0gKiBBZGFwdGVkIGZvciBCbGFja0ZpbiAoQURJKSBieSBUZWQgTWEgPG1hdGVkQHN5bXBhdGljby5jYT4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuICh3d3cuYXJjdHVydXNuZXR3b3Jrcy5jb20pCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgTGluZW8sIEluYy4gPG1hdHR3QGxpbmVvLmNvbT4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX0JGSU5fSVJRX0hfCkBAIC0xOSw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCisjaW5jbHVkZSA8bWFjaC9hbm9tYWx5Lmg+CisKIC8qIFNZU19JUlFTIGFuZCBOUl9JUlFTIGFyZSBkZWZpbmVkIGluIDxtYWNoLWJmNXh4L2lycS5oPiAqLwogI2luY2x1ZGUgPG1hY2gvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vaXJxX2hhbmRsZXIuaAppbmRleCA3ZDllMmQzLi43ZmJlNDIzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2lycV9oYW5kbGVyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9pcnFfaGFuZGxlci5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9JUlFfSEFORExFUl9ICiAjZGVmaW5lIF9JUlFfSEFORExFUl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaAppbmRleCA3OWRiZWZhYS4uYzg3ZTY4NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9sMWxheW91dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbDFsYXlvdXQuaApAQCAtMSw2ICsxLDkgQEAKIC8qCi0gKiBsMWxheW91dC5oCiAgKiBEZWZpbmVzIGEgbGF5b3V0IG9mIEwxIHNjcmF0Y2hwYWQgbWVtb3J5IHRoYXQgdXNlcnNwYWNlIGNhbiByZWx5IG9uLgorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9MMUxBWU9VVF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9saW5rYWdlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAppbmRleCA1YTgyMmJiLi5mN2Q2ZDQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2xpbmthZ2UuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKICNkZWZpbmUgX19BU01fTElOS0FHRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGRiZmQ2ODYuLjI2ZjZiNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMSw4ICsxLDEzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDAyIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgorICovCisKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLS8qIENvcHlyaWdodCAoQykgMjAwMiwgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4gKi8KLQogc3RydWN0IHNyYW1fbGlzdF9zdHJ1Y3QgewogCXN0cnVjdCBzcmFtX2xpc3Rfc3RydWN0ICpuZXh0OwogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMDQwNDEwYi4uNGEzYmUzNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tbXVfY29udGV4dC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX0JMQUNLRklOX01NVV9DT05URVhUX0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZTMxMjhkZi4uOWMxY2ZmZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQVNNX0JGSU5fTU9EVUxFX0gKICNkZWZpbmUgX0FTTV9CRklOX01PRFVMRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbXV0ZXguaAppbmRleCA1Y2M2NDFjLi5mNzI2ZTNhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL211dGV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9tdXRleC5oCkBAIC00LDYgKzQsMTAgQEAKICAqIFRPRE86IGltcGxlbWVudCBvcHRpbWl6ZWQgcHJpbWl0aXZlcyBpbnN0ZWFkLCBvciBsZWF2ZSB0aGUgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24gaW4gcGxhY2UsIG9yIHBpY2sgdGhlIGF0b21pY194Y2hnKCkgYmFzZWQgZ2VuZXJpYwogICogaW1wbGVtZW50YXRpb24uIChzZWUgYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGZvciBkZXRhaWxzKQorICoKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9BU01fTVVURVhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAppbmRleCBhZmJhYWZhLi4zYWU4YjU2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL25hbmQuaApAQCAtMSwxMyArMSw5IEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1ibGFja2Zpbi9uYW5kLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgQW5hbG9nIERldmljZXMsIEluYy4KLSAqCUJyeWFuIFd1IDxicnlhbi53dUBhbmFsb2cuY29tPgotICoKKy8qCiAgKiBCRjVYWCAtIE5BTkQgZmxhc2ggY29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbwogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzLCBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogLyogc3RydWN0IGJmNXh4X25hbmRfcGxhdGZvcm0KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKaW5kZXggMjlkY2Y3NS4uOTQ0YTA3YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsMyArMSw5IEBACisvKgorwqAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorwqAqCivCoCogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorwqAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QQUdFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BBR0VfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggY2JhZmYyNC4uZDA2YTg5YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0LmgKQEAgLTEsNSArMSwxMCBAQAotCi0vKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLworLyoKKyAqIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcAorICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLwogCiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAjZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKaW5kZXggYTZmOTU2OS4uZDQ5YmIyNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZGEuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BkYS5oCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGRhLmgKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX0JMQUNLRklOX1BEQV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDc4M2M4ZjcuLjgyMWM2OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9QR1RBQkxFX0gKICNkZWZpbmUgX0JMQUNLRklOX1BHVEFCTEVfSAogCkBAIC05Miw2ICs5OCwxMiBAQAogI2RlZmluZQlWTUFMTE9DX1NUQVJUCTAKICNkZWZpbmUJVk1BTExPQ19FTkQJMHhmZmZmZmZmZgogCisvKiBwcm92aWRlIGEgc3BlY2lhbCBnZXRfdW5tYXBwZWRfYXJlYSBmb3IgZnJhbWVidWZmZXIgbW1hcHMgb2Ygbm9tbXUgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mYl91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgdW5zaWduZWQgbG9uZyk7CisjZGVmaW5lIEhBVkVfQVJDSF9GQl9VTk1BUFBFRF9BUkVBCisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKICNlbmRpZgkJCQkvKiBfQkxBQ0tGSU5fUEdUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BvbGwuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCmluZGV4IGEwNTU2NjcuLjA3MmQ4OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9sbC5oCkBAIC0xLDMgKzEsMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKgorICovCisKICNpZm5kZWYgX19CRklOX1BPTExfSAogI2RlZmluZSBfX0JGSU5fUE9MTF9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKaW5kZXggODhlYjVjMC4uZWRkOGVmMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3J0bXV4LmgKQEAgLTEsNiArMSw5IEBACiAvKgotICogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBibGFja2ZpbiBmYW1pbHkgb2YgcHJvY2Vzc29ycy4KKyAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgQmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMKICAqCivCoCogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfUE9SVE1VWF9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wb3NpeF90eXBlcy5oCmluZGV4IDgwYzlkNjQuLjQxYmMxODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX19BUkNIX0JGSU5fUE9TSVhfVFlQRVNfSAogI2RlZmluZSBfX0FSQ0hfQkZJTl9QT1NJWF9UWVBFU19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGEzNmFkOGQuLmFlYTg4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fUFJPQ0VTU09SX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZTNmMDg2ZC4uMjcyOTBjOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1BUUkFDRV9ICiAjZGVmaW5lIF9CRklOX1BUUkFDRV9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VjdGlvbnMuaAppbmRleCBhZTRkYWUxLi4xZjUzODFmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKK8KgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KK8KgKgorwqAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KK8KgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU0VDVElPTlNfSAogI2RlZmluZSBfQkxBQ0tGSU5fU0VDVElPTlNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCmluZGV4IDAyY2ZkMDkuLmY4ZTE5ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc2VnbWVudC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NFR01FTlRfSAogI2RlZmluZSBfQkZJTl9TRUdNRU5UX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAppbmRleCBjZTAwYjAzLi5jZTQwODFhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKICNkZWZpbmUgX0FTTV9CTEFDS0ZJTl9TSUdDT05URVhUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zaWdpbmZvLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCBlY2E0NTY1Li4zZTgxMzA2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NpZ2luZm8uaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkZJTl9TSUdJTkZPX0gKICNkZWZpbmUgX0JGSU5fU0lHSU5GT19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDExOGRlZWUuLjZhMGZlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zbXAuaApAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NtcC5oCi0gKiBBdXRob3I6ICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQVNNX0JMQUNLRklOX1NNUF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZDZmZjRiNS4uYjBjN2YwZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMSwzICsxLDkgQEAKKy8qCivCoCogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCivCoCoKK8KgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCivCoCovCisKICNpZm5kZWYgX19CRklOX1NQSU5MT0NLX0gKICNkZWZpbmUgX19CRklOX1NQSU5MT0NLX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGIxZTNjNGMuLmJlNzU3NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3BpbmxvY2tfdHlwZXMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKICNkZWZpbmUgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0YXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCmluZGV4IGQyYjZmMTEuLjJlMjc2NjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RhdC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMi4KKyAqLworCiAjaWZuZGVmIF9CRklOX1NUQVRfSAogI2RlZmluZSBfQkZJTl9TVEFUX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3RyaW5nLmgKaW5kZXggMzIxZjRkOS4uZDdmMGNjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zdHJpbmcuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9CTEFDS0ZJTl9TVFJJTkdfSF8KICNkZWZpbmUgX0JMQUNLRklOX1NUUklOR19IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IGQ0NDIxMTMuLjg5ZGU2NTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fU1dBQl9ICiAjZGVmaW5lIF9CTEFDS0ZJTl9TV0FCX0gKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODVlOGYxNi4uZGRlMTliMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xLDM0ICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgaW5jbHVkZS9hc20vc3lzdGVtLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgIFRvbnkgS291ICh0b255a29AbGluZW8uY2EpCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4KLSAqICAgICAgICAgICAgICAgICAgICAod3d3LmFyY3R1cnVzbmV0d29ya3MuY29tKQotICogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMyBNZXRyb3dlcmtzICh3d3cubWV0cm93ZXJrcy5jb20pCi0gKiAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA0IEFuYWxvZyBEZXZpY2UgSW5jLgotICogQ3JlYXRlZDogICAgIDI1SmFuMjAwMSAtIFRvbnkgS291Ci0gKiBEZXNjcmlwdGlvbjogc3lzdGVtLmggaW5jbHVkZSBmaWxlCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgVG9ueSBLb3UgKHRvbnlrb0BsaW5lby5jYSkKICAqCi0gKiBNb2RpZmllZDogICAgIDIyU2VwMjAwNiAtIFJvYmluIEdldHoKLSAqICAgICAgICAgICAgICAgIC0gbW92ZSBpbmNsdWRlIGJsYWNrZmluLmggZG93biwgc28gSSBjYW4gZ2V0IGFjY2VzcyB0bwotICogICAgICAgICAgICAgICAgICAgaXJxIGZ1bmN0aW9ucyBpbiBvdGhlciBpbmNsdWRlIGZpbGVzLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkxBQ0tGSU5fU1lTVEVNX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCAyYmJmZGQ5Li5hZmIzYTg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xLDI3ICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL3RocmVhZF9pbmZvLmgKLSAqIEJhc2VkIG9uOiAgICAgaW5jbHVkZS9hc20tbTY4a25vbW11L3RocmVhZF9pbmZvLmgKLSAqIEF1dGhvcjogICAgICAgTEcgU29mdCBJbmRpYQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBsb3ctbGV2ZWwgdGhyZWFkIGluZm9ybWF0aW9uCi0gKiBNb2RpZmllZDoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQVNNX1RIUkVBRF9JTkZPX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg5YTEyZWUuLmE3NGFlMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90bGIuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfQkxBQ0tGSU5fVExCX0gKICNkZWZpbmUgX0JMQUNLRklOX1RMQl9ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhY2UuaAppbmRleCAzMTJiNTk2Li42MDlhZDNjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYWNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFjZS5oCkBAIC0xLDYgKzEsOSBAQAogLyoKLSAqIENvbW1vbiBoZWFkZXIgZmlsZSBmb3IgYmxhY2tmaW4gZmFtaWx5IG9mIHByb2Nlc3NvcnMuCisgKiBoZWFkZXIgZmlsZSBmb3IgaGFyZHdhcmUgdHJhY2UgZnVuY3Rpb25zCiAgKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JMQUNLRklOX1RSQUNFXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS90cmFwcy5oCmluZGV4IDNjZGM0NTQuLjlmZTBkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTEsMTMgKzEsMTAgQEAKIC8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20vdHJhcHMuaAorICogIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgIDIwMDEgTGluZW8sIEluYworICogICAgICAgICAgICAgICAgICAgICAgICBUb255IEtvdQorICogICAgICAgICAgICAgICAgIDE5OTMgSGFtaXNoIE1hY2RvbmFsZAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTMgICAgICAgIEhhbWlzaCBNYWNkb25hbGQKLSAqCi0gKiAgTGluZW8sIEluYyAgICBKdWwgMjAwMSAgICBUb255IEtvdQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpZm5kZWYgX0JGSU5fVFJBUFNfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCAyZjQ2OWExLi5jMDNiODUzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMSw0ICsxLDcgQEAKLS8qIENoYW5nZXMgbWFkZSBieSBMaW5lbyBJbmMuICAgIE1heSAyMDAxCisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKICAqIEJhc2VkIG9uOiBpbmNsdWRlL2FzbS1tNjhrbm9tbXUvdWFjY2Vzcy5oCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IDAyYjE1MjkuLjc3OWJlMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfX0FTTV9CRklOX1VOSVNURF9ICiAjZGVmaW5lIF9fQVNNX0JGSU5fVU5JU1REX0gKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBmMDVkMWI5Li5iZDMyYzA5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYXNtLW9mZnNldHMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBnZW5lcmF0ZSBkZWZpbml0aW9ucyBuZWVkZWQgYnkgYXNzZW1ibHkgbGFuZ3VhZ2UgbW9kdWxlcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGdlbmVyYXRlIGRlZmluaXRpb25zIG5lZWRlZCBieSBhc3NlbWJseSBsYW5ndWFnZSBtb2R1bGVzLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9kbWFfNXh4LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwppbmRleCAzODQ4NjhkLi4xZjE3MDIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9iZmluX2RtYV81eHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIGJmaW5fZG1hXzV4eC5jIC0gQmxhY2tmaW4gRE1BIGltcGxlbWVudGF0aW9uCiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2JmaW5fZ3Bpby5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKaW5kZXggZmM0NjgxYy4uMjI3MDVlZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvYmZpbl9ncGlvLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQorICogR1BJTyBBYnN0cmFjdGlvbiBMYXllcgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEdQSU8gQWJzdHJhY3Rpb24gTGF5ZXIKKyAqIENvcHlyaWdodCAyMDA2LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxiaW5pdC5jCmluZGV4IDM2MTkzZWUuLmY3YjljZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJpbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYmluaXQuYwpAQCAtMSwyNSArMSwxMSBAQAogLyoKICAqIEJsYWNrZmluIENQTEIgaW5pdGlhbGl6YXRpb24KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW1wdS9jcGxibWdyLmMKaW5kZXggOGUxZTllOS4uNjllMGU1MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1tcHUvY3BsYm1nci5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwpAQCAtMSwyMiArMSwxMSBAQAogLyoKLSAqICAgICAgICAgICAgICAgQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcuCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogQmxhY2tmaW4gQ1BMQiBleGNlcHRpb24gaGFuZGxpbmcgZm9yIHdoZW4gTVBVIGluIG9uCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwppbmRleCA1ZDhhZDUwMy4uZmQ5YTJmMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYi1ub21wdS9jcGxiaW5pdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYmluaXQuYwpAQCAtMSwyNCArMSw5IEBACiAvKgogICogQmxhY2tmaW4gQ1BMQiBpbml0aWFsaXphdGlvbgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1L2NwbGJtZ3IuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYm1nci5jCmluZGV4IGQ5ZWE0NmMuLjViODg4NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYm1nci5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbm9tcHUvY3BsYm1nci5jCkBAIC0xLDI2ICsxLDE0IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiLW5vbXB1LWMvY3BsYm1nci5jCiAgKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2NwbGItbXB1L2NwbGJtZ3IuYwogICogQXV0aG9yOiAgICAgICBNaWNoYWVsIE1jVGVybmFuIDxtbWN0ZXJuYW5AYWlydmFuYS5jb20+CiAgKgotICogQ3JlYXRlZDogICAgICAwMU5vdjIwMDgKICAqIERlc2NyaXB0aW9uOiAgQ1BMQiBtaXNzIGhhbmRsZXIuCiAgKgogICogTW9kaWZpZWQ6CiAgKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFpcnZhbmEgSW5jLgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvY3BsYmluZm8uYwppbmRleCA2NGQ3ODMwLi4wYmRhYTUxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2NwbGJpbmZvLmMKQEAgLTIsNiArMiw3IEBACiAgKiBhcmNoL2JsYWNrZmluL2tlcm5lbC9jcGxiaW5mby5jIC0gZGlzcGxheSBDUExCIHN0YXR1cwogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCkBAIC0xMTEsMjQgKzExMiwyMSBAQAogCS5zaG93ICA9IGNwbGJpbmZvX3Nob3csCiB9OwogCisjZGVmaW5lIENQTEJJTkZPX0RDUExCX0ZMQUcgMHg4MDAwMDAwMAorCiBzdGF0aWMgaW50IGNwbGJpbmZvX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JY2hhciBidWZbMjU2XSwgKnBhdGgsICpwOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCWNoYXIgY3BsYl90eXBlOwogCXVuc2lnbmVkIGludCBjcHU7Ci0JY2hhciAqc19jcHUsICpzX2NwbGI7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm07CiAJc3RydWN0IGNwbGJpbmZvX2RhdGEgKmNkYXRhOwogCi0JcGF0aCA9IGRfcGF0aCgmZmlsZS0+Zl9wYXRoLCBidWYsIHNpemVvZihidWYpKTsKLQlpZiAoSVNfRVJSKHBhdGgpKQotCQlyZXR1cm4gUFRSX0VSUihwYXRoKTsKLQlzX2NwdSA9IHN0cnN0cihwYXRoLCAiL2NwdSIpOwotCXNfY3BsYiA9IHN0cnJjaHIocGF0aCwgJy8nKTsKLQlpZiAoIXNfY3B1IHx8ICFzX2NwbGIpCi0JCXJldHVybiAtRUlOVkFMOworCWNwdSA9ICh1bnNpZ25lZCBpbnQpcGRlLT5kYXRhOworCWNwbGJfdHlwZSA9IGNwdSAmIENQTEJJTkZPX0RDUExCX0ZMQUcgPyAnRCcgOiAnSSc7CisJY3B1ICY9IH5DUExCSU5GT19EQ1BMQl9GTEFHOwogCi0JY3B1ID0gc2ltcGxlX3N0cnRvdWwoc19jcHUgKyA0LCAmcCwgMTApOwogCWlmICghY3B1X29ubGluZShjcHUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTM5LDcgKzEzNyw3IEBACiAJY2RhdGEgPSBtLT5wcml2YXRlOwogCiAJY2RhdGEtPnBvcyA9IDA7Ci0JY2RhdGEtPmNwbGJfdHlwZSA9IHRvdXBwZXIoc19jcGxiWzFdKTsKKwljZGF0YS0+Y3BsYl90eXBlID0gY3BsYl90eXBlOwogCWNwbGJpbmZvX3NlcV9pbml0KGNkYXRhLCBjcHUpOwogCiAJcmV0dXJuIDA7CkBAIC0xNjgsOCArMTY2LDEwIEBACiAJCWlmICghY3B1X2RpcikKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXByb2NfY3JlYXRlKCJpY3BsYiIsIFNfSVJVR08sIGNwdV9kaXIsICZjcGxiaW5mb19mb3BzKTsKLQkJcHJvY19jcmVhdGUoImRjcGxiIiwgU19JUlVHTywgY3B1X2RpciwgJmNwbGJpbmZvX2ZvcHMpOworCQlwcm9jX2NyZWF0ZV9kYXRhKCJpY3BsYiIsIFNfSVJVR08sIGNwdV9kaXIsICZjcGxiaW5mb19mb3BzLAorCQkJKHZvaWQgKiljcHUpOworCQlwcm9jX2NyZWF0ZV9kYXRhKCJkY3BsYiIsIFNfSVJVR08sIGNwdV9kaXIsICZjcGxiaW5mb19mb3BzLAorCQkJKHZvaWQgKikoY3B1IHwgQ1BMQklORk9fRENQTEJfRkxBRykpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKaW5kZXggMmY2MmE5Zi4uZTc0ZTc0ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9kbWEtbWFwcGluZy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4va2VybmVsL2RtYS1tYXBwaW5nLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogRHluYW1pYyBETUEgbWFwcGluZyBzdXBwb3J0CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgRHluYW1pYyBETUEgbWFwcGluZyBzdXBwb3J0LgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDkzMWM3OGIuLjg0ZWQ4MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2Vhcmx5X3ByaW50ay5jCkBAIC0xLDI1ICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9lYXJseV9wcmludGsuYwotICogQmFzZWQgb246ICAgICBhcmNoL3g4Nl82NC9rZXJuZWwvZWFybHlfcHJpbnRrLmMKLSAqIEF1dGhvcjogICAgICAgUm9iaW4gR2V0eiA8cmdldHpAYmxhY2tmaW4udWNsaW51eC5vcmcKKyAqIGFsbG93IGEgY29uc29sZSB0byBiZSB1c2VkIGZvciBlYXJseSBwcmludGsKKyAqIGRlcml2ZWQgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKICAqCi0gKiBDcmVhdGVkOiAgICAgIDE0QXVnMjAwNwotICogRGVzY3JpcHRpb246ICBhbGxvdyBhIGNvbnNvbGUgdG8gYmUgdXNlZCBmb3IgZWFybHkgcHJpbnRrCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUwppbmRleCAzZjg3NjliLi5mMjdkYzIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2VudHJ5LlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvZW50cnkuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZpeGVkX2NvZGUuUwppbmRleCAwZDJkOWUwLi4wNTY1OTE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9maXhlZF9jb2RlLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZml4ZWRfY29kZS5TCkBAIC02LDcgKzYsMTIgQEAKICAqIFRoZXNlIGFyZSBhbGlnbmVkIHRvIDE2IGJ5dGVzLCBzbyB0aGF0IHdlIGhhdmUgc29tZSBzcGFjZSB0byByZXBsYWNlCiAgKiB0aGVzZSBzZXF1ZW5jZXMgd2l0aCBzb21ldGhpbmcgZWxzZSAoZS5nLiBrZXJuZWwgdHJhcHMgaWYgd2UgZXZlciBkbwogICogQkY1NjEgU01QKS4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9mbGF0LmMKaW5kZXggZDE4OGIyNC4uYTg4ZGFkZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvZmxhdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYwpAQCAtMSwyMSArMSw3IEBACiAvKgotICogIGFyY2gvYmxhY2tmaW4va2VybmVsL2ZsYXQuYworICogQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQW5hbG9nIERldmljZXMsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaW5pdF90YXNrLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCBjMjZjMzRkLi4xMThjNWI5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9pbml0X3Rhc2suYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKaW5kZXggNGI1ZmQzNi4uZGI5ZjljOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYwppbmRleCA2N2ZjN2E1Li5hNmRmYTZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC9tb2R1bGUuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2RlZmluZSBwcl9mbXQoZm10KSAibW9kdWxlICVzOiAiIGZtdApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGY1YjI4NjEuLjQzMGFlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIEJsYWNrZmluIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcHJvY2VzcyBoYW5kbGluZwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIEJsYWNrZmluIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcHJvY2VzcyBoYW5kbGluZy4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3B0cmFjZS5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMzBmNDgyOC4uMDk4MmI1ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKQEAgLTEsMzAgKzEsOCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHRyYWNlLmMKLSAqIEJhc2VkIG9uOiAgICAgVGFrZW4gZnJvbSBsaW51eC9rZXJuZWwvcHRyYWNlLmMKLSAqIEF1dGhvcjogICAgICAgbGludXgva2VybmVsL3B0cmFjZS5jIGlzIGJ5IFJvc3MgQmlybyAxLzIzLzkyLCBlZGl0ZWQgYnkgTGludXMgVG9ydmFsZHMKKyAqIGxpbnV4L2tlcm5lbC9wdHJhY2UuYyBpcyBieSBSb3NzIEJpcm8gMS8yMy85MiwgZWRpdGVkIGJ5IExpbnVzIFRvcnZhbGRzCisgKiB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDEvMjMvOTIKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM2OTUzNWIuLmMyMDJhNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2V0dXAuYwpAQCAtMSw5ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2JsYWNrZmluL2tlcm5lbC9zZXR1cC5jCi0gKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zaGFkb3dfY29uc29sZS5jCmluZGV4IDhiOGM3MTAuLjU1N2U5ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NoYWRvd19jb25zb2xlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2hhZG93X2NvbnNvbGUuYwpAQCAtNCw4ICs0LDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3NpZ25hbC5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZGJjM2JiZi4uOWQ5MGMxOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvc2lnbmFsLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9zeXNfYmZpbi5jCmluZGV4IDNkYTYwZmIuLmFmY2VmMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3N5c19iZmluLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYwpAQCAtMSwzMiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvc3lzX2JmaW4uYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBjb250YWlucyB2YXJpb3VzIHJhbmRvbSBzeXN0ZW0gY2FsbHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkCisgKiBjYWxsaW5nIHNlcXVlbmNlIG9uIHRoZSBMaW51eC9CbGFja2ZpbiBwbGF0Zm9ybS4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdmFyaW91cyByYW5kb20gc3lzdGVtIGNhbGxzIHRoYXQKLSAqICAgICAgICAgICAgICAgaGF2ZSBhIG5vbi1zdGFuZGFyZCBjYWxsaW5nIHNlcXVlbmNlIG9uIHRoZSBMaW51eC9iZmluCi0gKiAgICAgICAgICAgICAgIHBsYXRmb3JtLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC05MSwzICs2OSwxNCBAQAogewogCXJldHVybiBzYWZlX2RtYV9tZW1jcHkoZGVzdCwgc3JjLCBsZW4pOwogfQorCisjaWYgZGVmaW5lZChDT05GSUdfRkIpIHx8IGRlZmluZWQoQ09ORklHX0ZCX01PRFVMRSkKKyNpbmNsdWRlIDxsaW51eC9mYi5oPgordW5zaWduZWQgbG9uZyBnZXRfZmJfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBvcmlnX2FkZHIsCisJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWluZm8tPnNjcmVlbl9iYXNlOworfQorRVhQT1JUX1NZTUJPTChnZXRfZmJfdW5tYXBwZWRfYXJlYSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwppbmRleCBmOTcxNTc2Li4zNTljZmIxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCkBAIC0xLDEzICsxLDEzIEBACiAvKgotICogbGludXgvYXJjaC9rZXJuZWwvdGltZS10cy5jCi0gKgogICogQmFzZWQgb24gYXJtIGNsb2NrZXZlbnRzIGltcGxlbWVudGF0aW9uIGFuZCBvbGQgYmZpbiB0aW1lIHRpY2suCiAgKgotICogQ29weXJpZ2h0KEMpIDIwMDgsIEdlb1RlY2hub2xvZ2llcywgVml0amEgTWFrYXJvdgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDggR2VvVGVjaG5vbG9naWVzCisgKiAgICAgICAgICAgICAgICAgICAgIFZpdGphIE1ha2Fyb3YKICAqCi0gKiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIuIEZvciBkZXRhaWxzIHNlZQotICoga2VybmVsLWJhc2UvQ09QWUlORy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLmMKaW5kZXggYWRiNTRhYS4uYmQzYjUzZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgpAQCAtODEsMTEgKzgyLDExIEBACiAjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19BUkNIX1VTRVNfR0VUVElNRU9GRlNFVAogLyoKICAqIFNob3VsZCByZXR1cm4gdXNlY29uZHMgc2luY2UgbGFzdCB0aW1lciB0aWNrCiAgKi8KLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0dGltZW9mZnNldCh2b2lkKQordTMyIGFyY2hfZ2V0dGltZW9mZnNldCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgY2xvY2tzX3Blcl9qaWZmeTsKQEAgLTE4NCw2NSArMTg1LDYgQEAKIAl0aW1lX3NjaGVkX2luaXQodGltZXJfaW50ZXJydXB0KTsKIH0KIAotI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNlcTsKLQl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYzsKLQotCWRvIHsKLQkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JCXVzZWMgPSBnZXR0aW1lb2Zmc2V0KCk7Ci0JCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQkJdXNlYyArPSAoeHRpbWUudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMpOwotCX0KLQl3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0KLQl3aGlsZSAodXNlYyA+PSBVU0VDX1BFUl9TRUMpIHsKLQkJdXNlYyAtPSBVU0VDX1BFUl9TRUM7Ci0JCXNlYysrOwotCX0KLQotCXR2LT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X3VzZWMgPSB1c2VjOwotfQotRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JLyoKLQkgKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgdGhlIHh0aW1lLnR2X3VzZWMKLQkgKiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBpbiB0aGlzIGxvY2F0aW9uIGlzCi0JICogaXMgdmFsdWUgYXQgdGhlIGxhc3QgdGljay4KLQkgKiBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5Ci0JICogd291bGQgaGF2ZSBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQotCSAqLwotCW5zZWMgLT0gKGdldHRpbWVvZmZzZXQoKSAqIE5TRUNfUEVSX1VTRUMpOwotCi0Jd3RtX3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwotCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7Ci0KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmeHRpbWUsIHNlYywgbnNlYyk7Ci0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLCB3dG1fc2VjLCB3dG1fbnNlYyk7Ci0KLQludHBfY2xlYXIoKTsKLQotCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwotCWNsb2NrX3dhc19zZXQoKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwotI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19USU1FICovCi0KIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwppbmRleCA1NjQ2NGNiLi42YjczMjVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RyYXBzLmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvdHJhcHMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEhhbWlzaCBNYWNkb25hbGQKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHVzZXMgUy9XIGludGVycnVwdCAxNSBmb3IgdGhlIHN5c3RlbSBjYWxscwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDIxYWM3YzIuLjEwZTEyNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2tlcm5lbC92bWxpbnV4Lmxkcy5TCi0gKiBCYXNlZCBvbjogICAgIG5vbmUgLSBvcmlnaW5hbCB3b3JrCi0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOiAgICAgIFR1ZSBTZXAgMjEgMjAwNAotICogRGVzY3JpcHRpb246ICBNYXN0ZXIgbGlua2VyIHNjcmlwdCBmb3IgYmxhY2tmaW4gYXJjaGl0ZWN0dXJlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgXyMjX3N5bV8KQEAgLTk2LDggKzczLDcgQEAKIAl7CiAJCV9fc2RhdGEgPSAuOwogCQkvKiBUaGlzIGdldHMgZG9uZSBmaXJzdCwgc28gdGhlIGdsb2IgZG9lc24ndCBzdWNrIGl0IGluICovCi0JCS4gPSBBTElHTigzMik7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCisJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoMzIpCiAKICNpZiAhTDFfREFUQV9BX0xFTkdUSAogCQkuID0gQUxJR04oMzIpOwpAQCAtMTE2LDEyICs5Miw3IEBACiAJCURBVEFfREFUQQogCQlDT05TVFJVQ1RPUlMKIAotCQkvKiBtYWtlIHN1cmUgdGhlIGluaXRfdGFzayBpcyBhbGlnbmVkIHRvIHRoZQotCQkgKiBrZXJuZWwgdGhyZWFkIHNpemUgc28gd2UgY2FuIGxvY2F0ZSB0aGUga2VybmVsCi0JCSAqIHN0YWNrIHByb3Blcmx5IGFuZCBxdWlja2x5LgotCQkgKi8KLQkJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsKLQkJKiguaW5pdF90YXNrLmRhdGEpCisJCUlOSVRfVEFTS19EQVRBKFRIUkVBRF9TSVpFKQogCiAJCV9fZWRhdGEgPSAuOwogCX0KQEAgLTEzNCwzOSArMTA1LDEwIEBACiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX19faW5pdF9iZWdpbiA9IC47CiAKLQkuaW5pdC50ZXh0IDoKLQl7Ci0JCS4gPSBBTElHTihQQUdFX1NJWkUpOwotCQlfX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfX2Vpbml0dGV4dCA9IC47Ci0JfQotCS5pbml0LmRhdGEgOgotCXsKLQkJLiA9IEFMSUdOKDE2KTsKLQkJSU5JVF9EQVRBCi0JfQotCS5pbml0LnNldHVwIDoKLQl7Ci0JCS4gPSBBTElHTigxNik7Ci0JCV9fX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19fc2V0dXBfZW5kID0gLjsKLQl9Ci0JLmluaXRjYWxsLmluaXQgOgotCXsKLQkJX19faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQkJX19faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JLmNvbl9pbml0Y2FsbC5pbml0IDoKLQl7Ci0JCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9CisJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorCS4gPSBBTElHTigxNik7CisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAJUEVSQ1BVKDQpCi0JU0VDVVJJVFlfSU5JVAogCiAJLyogd2UgaGF2ZSB0byBkaXNjYXJkIGV4aXQgdGV4dCBhbmQgc3VjaCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0bwogCSAqIGhhbmRsZSBlbWJlZGRlZCBjcm9zcy1zZWN0aW9uIHJlZmVyZW5jZXMgKGFsdCBpbnN0cnVjdGlvbnMsIGJ1ZwpAQCAtMTgxLDE4ICsxMjMsOSBAQAogCQlFWElUX0RBVEEKIAl9CiAKLQkuaW5pdC5yYW1mcyA6Ci0JewotCQkuID0gQUxJR04oNCk7Ci0JCV9fX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCS4gPSBBTElHTig0KTsKLQkJX19faW5pdHJhbWZzX2VuZCA9IC47Ci0JfQotCiAJX19sMV9sbWFfc3RhcnQgPSAuOwogCi0JLnRleHRfbDEgTDFfQ09ERV9TVEFSVCA6IEFUKExPQURBRERSKC5pbml0LnJhbWZzKSArIFNJWkVPRiguaW5pdC5yYW1mcykpCisJLnRleHRfbDEgTDFfQ09ERV9TVEFSVCA6IEFUKExPQURBRERSKC5leGl0LmRhdGEpICsgU0laRU9GKC5leGl0LmRhdGEpKQogCXsKIAkJLiA9IEFMSUdOKDQpOwogCQlfX3N0ZXh0X2wxID0gLjsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYwppbmRleCBhOGMyNzllLi5hYjY5ZDg3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hsZGkzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNobGRpMy5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2FzaGxkaTMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlICJnY2NsaWIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYyBiL2FyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYwppbmRleCBhMGQzNDE5Li5iNWIzNTFlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9hc2hyZGkzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvYXNocmRpMy5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2FzaHJkaTMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlICJnY2NsaWIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMgYi9hcmNoL2JsYWNrZmluL2xpYi9jaGVja3N1bS5jCmluZGV4IGNkNjA1ZTcuLmM2Mjk2OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL2NoZWNrc3VtLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYwpAQCAtMSwzMiArMSwxMiBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvY2hlY2tzdW0uYwotICogQmFzZWQgb246ICAgICBub25lIC0gb3JpZ2luYWwgd29yawotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCi0gKiAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0uICBJTkVUIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSAgQlNEIFNvY2tldAotICogICAgICAgICAgICAgICBpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVENQL0lQIHByb3RvY29sIHN1aXRlIGZvciB0aGUgTElOVVggb3BlcmF0aW5nCisgKiBzeXN0ZW0uIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIEJTRCBTb2NrZXQgaW50ZXJmYWNlIGFzIHRoZQorICogbWVhbnMgb2YgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB1c2VyIGxldmVsLgogICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2RpdnNpMy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMKaW5kZXggMmFjNTljNy4uZjg5YzVhNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMKQEAgLTEsMTAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvZGl2c2kzLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgMTYgLyAzMiBiaXQgc2lnbmVkIGRpdmlzaW9uLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICoKKyAqIDE2IC8gMzIgYml0IHNpZ25lZCBkaXZpc2lvbi4KICAqICAgICAgICAgICAgICAgICBTcGVjaWFsIGNhc2VzIDoKICAqICAgICAgICAgICAgICAgICAgICAgIDEpICBJZihudW1lcmF0b3IgPT0gMCkKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMApAQCAtMjIsMjUgKzIxLDYgQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSMCAtIFF1b3RpZW50ICAgIChvKQogICogICAgICAgICAgICAgICAgIFJlZ2lzdGVycyBVc2VkIDogUjItUjcsUDAtUDIKICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KIAogLmdsb2JhbCAgIF9fX2RpdnNpMzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2djY2xpYi5oIGIvYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmgKaW5kZXggOWNjZDM5YS4uNzI0ZjA3ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvZ2NjbGliLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjZGVmaW5lIEJJVFNfUEVSX1VOSVQgIDgKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYyBiL2FyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYwppbmRleCBlNTdiZjZmLi41M2YxNzQxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9sc2hyZGkzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbHNocmRpMy5jCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL2xzaHJkaTMuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlICJnY2NsaWIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL21lbWNoci5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMKaW5kZXggNWRhNDI4MS4uNTQyZTQwZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY2hyLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jbXAuUwppbmRleCAyMTlmYTI4Li5jZTViOWYxYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY21wLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwppbmRleCBlNjU0YTE4Li5jMzFiZjIyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1jcHkuUwpAQCAtMSwzNiArMSwxMyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvbWVtY3B5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogaW50ZXJuYWwgdmVyc2lvbiBvZiBtZW1jcHkoKSwgaXNzdWVkIGJ5IHRoZSBjb21waWxlciB0byBjb3B5IGJsb2NrcyBvZgorICogZGF0YSBhcm91bmQuIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAorICogcG9zc2libGUgb3ZlcmxhcHMsIGJlY2F1c2UgdGhhdCBhbWJpZ3VpdHkgaXMgd2hlbiB0aGUgY29tcGlsZXIgZ2l2ZXMgdXAKKyAqIGFuZCBjYWxscyBhIGZ1bmN0aW9uLiBXZSBoYXZlIG91ciBvd24sIGludGVybmFsIHZlcnNpb24gc28gdGhhdCB3ZSBnZXQKKyAqIHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkIHRoZSBub3JtYWwgc3ltYm9sLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIGludGVybmFsIHZlcnNpb24gb2YgbWVtY3B5KCksIGlzc3VlZCBieSB0aGUgY29tcGlsZXIKLSAqICAgICAgICAgICAgICAgdG8gY29weSBibG9ja3Mgb2YgZGF0YSBhcm91bmQuCi0gKiAgICAgICAgICAgICAgIFRoaXMgaXMgcmVhbGx5IG1lbW1vdmUoKSAtIGl0IGhhcyB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aAotICogICAgICAgICAgICAgICBwb3NzaWJsZSBvdmVybGFwcywgYmVjYXVzZSB0aGF0IGFtYmlndWl0eSBpcyB3aGVuIHRoZSBjb21waWxlcgotICogICAgICAgICAgICAgICBnaXZlcyB1cCBhbmQgY2FsbHMgYSBmdW5jdGlvbi4gV2UgaGF2ZSBvdXIgb3duLCBpbnRlcm5hbCB2ZXJzaW9uCi0gKiAgICAgICAgICAgICAgIHNvIHRoYXQgd2UgZ2V0IHNvbWV0aGluZyB3ZSB0cnVzdCwgZXZlbiBpZiB0aGUgdXNlciBoYXMgcmVkZWZpbmVkCi0gKiAgICAgICAgICAgICAgIHRoZSBub3JtYWwgc3ltYm9sLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKaW5kZXggMzNmODY1My4uODBjMjQwYSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtbW92ZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21lbW1vdmUuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1tb3ZlLlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvbWVtc2V0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwppbmRleCA4MTU5MTM2Li5jMzBkOTliIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwpAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tZW1zZXQuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCmluZGV4IGNhMWRkMzkuLjhiMGM3ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL21vZHNpMy5TCkBAIC0xLDM2ICsxLDEyIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL2xpYi9tb2RzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBUaGlzIHByb2dyYW0gY29tcHV0ZXMgMzIgYml0IHNpZ25lZCByZW1haW5kZXIuIEl0IGNhbGxzIGRpdjMyIGZ1bmN0aW9uCisgKiBmb3IgcXVvdGllbnQgZXN0aW1hdGlvbi4KKyAqICAgUmVnaXN0ZXJzIGluOiAgUjAsIFIxID0gTnVtZXJhdG9yLyBEZW5vbWluYXRvcgorICogICBSZWdpc3RlcnMgb3V0OiBSMCAgICAgPSBSZW1haW5kZXIKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIHByb2dyYW0gY29tcHV0ZXMgMzIgYml0IHNpZ25lZCByZW1haW5kZXIuIEl0IGNhbGxzIGRpdjMyIGZ1bmN0aW9uCi0gKiAgICAgICAgICAgICAgIGZvciBxdW90aWVudCBlc3RpbWF0aW9uLgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogICAgICAgICAgICAgICBSZWdpc3RlcnMgdXNlZCA6Ci0gKiAgICAgICAgICAgICAgIE51bWVyYXRvci8gRGVub21pbmF0b3IgaW4gIFIwLCBSMQotICogICAgICAgICAgICAgICAgIFIwICAtICByZXR1cm5zIHJlbWFpbmRlci4KLSAqICAgICAgICAgICAgICAgICBSMi1SNwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAuZ2xvYmFsIF9fX21vZHNpMzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL211bGRpMy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKaW5kZXggYWJkZTEyMC4uOTUzYTM4YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvbXVsZGkzLlMKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKKyAqLworCiAuYWxpZ24gMgogLmdsb2JhbCBfX19tdWxkaTM7CiAudHlwZSBfX19tdWxkaTMsIFNUVF9GVU5DOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCmluZGV4IDQ2ODViN2EuLjI1MGY0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKQEAgLTEsMzAgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL291dHMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6ICAgICAgIEJhcyBWZXJtZXVsZW4gPGJhc0BidXl3YXlzLm5sPgorICogSW1wbGVtZW50YXRpb24gb2Ygb3V0c3tid2x9IGZvciBCbGFja0ZpbiBwcm9jZXNzb3JzIHVzaW5nIHplcm8gb3ZlcmhlYWQgbG9vcHMuCiAgKgotICogQ3JlYXRlZDogICAgICBUdWUgTWFyIDIyIDE1OjI3OjI0IENFU1QgMjAwNQotICogRGVzY3JpcHRpb246ICBJbXBsZW1lbnRhdGlvbiBvZiBvdXRze2J3bH0gZm9yIEJsYWNrRmluIHByb2Nlc3NvcnMgdXNpbmcgemVybyBvdmVyaGVhZCBsb29wcy4KKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBCdXlXYXlzIEJWCisgKiAgICAgICAgICAgICAgICAgICAgICBCYXMgVmVybWV1bGVuIDxiYXNAYnV5d2F5cy5ubD4KICAqCi0gKiBNb2RpZmllZDogICAgIENvcHlyaWdodCAoQykgMjAwNSBCYXMgVmVybWV1bGVuLCBCdXlXYXlzIEJWIDxiYXNAYnV5d2F5cy5ubD4KLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3NtdWxzaTNfaGlnaHBhcnQuUwppbmRleCBlMzgzY2QzLi45OWVlOGM1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi9zbXVsc2kzX2hpZ2hwYXJ0LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvc211bHNpM19oaWdocGFydC5TCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCisgKi8KKwogLmFsaWduIDIKIC5nbG9iYWwgX19fc211bHNpM19oaWdocGFydDsKIC50eXBlIF9fX3NtdWxzaTNfaGlnaHBhcnQsIFNUVF9GVU5DOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TIGIvYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCmluZGV4IDU4ZmQ5NmQuLjk3ZTkwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbGliL3VkaXZzaTMuUworKysgYi9hcmNoL2JsYWNrZmluL2xpYi91ZGl2c2kzLlMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9saWIvdWRpdnNpMy5TCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUyBiL2FyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwppbmRleCA0ZjJiNzZlLi4xNjhlYmE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2xpYi91bW9kc2kzLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9saWIvdW1vZHNpMy5TCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbGliL3Vtb2RzaTMuUwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBsaWJnY2MxIHJvdXRpbmVzIGZvciBCbGFja2ZpbiA1eHgKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBsaWJnY2MxIHJvdXRpbmVzIGZvciBCbGFja2ZpbiA1eHgKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZkZWYgQ09ORklHX0FSSVRITUVUSUNfT1BTX0wxCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMgYi9hcmNoL2JsYWNrZmluL2xpYi91bXVsc2kzX2hpZ2hwYXJ0LlMKaW5kZXggNjdiNzk5My4uMDUxODI0YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvdW11bHNpM19oaWdocGFydC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL3VtdWxzaTNfaGlnaHBhcnQuUwpAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQorICovCisKIC5hbGlnbiAyCiAuZ2xvYmFsIF9fX3VtdWxzaTNfaGlnaHBhcnQ7CiAudHlwZSBfX191bXVsc2kzX2hpZ2hwYXJ0LCBTVFRfRlVOQzsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwppbmRleCAwM2U0YTk5Li4wMTk3NWMwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvYm9hcmRzL2V6YnJkLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2JvYXJkcy9lemJyZC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9ib2FyZHMvZXpicmQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKLSAqIEF1dGhvcjogICAgICAgQnJ5YW4gV3UgPGNvb2xvbmV5QGtlcm5lbC5vcmc+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTU3MSwxOSArNTQ5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC02NjAsOCArNjI1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZlemJyZF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV6YnJkX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9kbWEuYwppbmRleCA2OThlODhjLi43OGI0MzYwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBCcnlhbiBXdSA8Y29vbG9uZXlAa2VybmVsLm9yZz4KKyAqIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmNTE4LmgKaW5kZXggNzhkYTFhMC4uODU2YjMzMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZjUxOC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmY1MTguaApAQCAtMSwzMCArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JmNTE4LmgKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JmNTI3LmgKLSAqIEF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUxOAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUxOF9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGRiYWRlOTMuLjk3MGQzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggODM0MjFkMy4uNmNmYjI0NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAppbmRleCA4MjBjMTNjNC4uNDkzMDIwZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxMi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTEyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MTJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE0LmgKaW5kZXggZGZlNDkyZC4uZTFkOTk5MSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZmJmNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUxNF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTYuaAppbmRleCAxNGRmNDNkLi42YjM2NGVkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxNi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE2LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9jZGVmYmY1MTYuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxOC5oCmluZGV4IGJhZmIzNzAuLjkyOWI5MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTE4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MTguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2NkZWZiZjUxOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MThfSApAQCAtMjExLDYgKzE4Niw0NyBAQAogI2RlZmluZSBiZmluX3JlYWRfRU1BQ19UWENfQUJPUlQoKQkJYmZpbl9yZWFkMzIoRU1BQ19UWENfQUJPUlQpCiAjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19UWENfQUJPUlQodmFsKQkJYmZpbl93cml0ZTMyKEVNQUNfVFhDX0FCT1JULCB2YWwpCiAKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0NUTCgpICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0NUTCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9DVEwodmFsKSAgICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9DVEwsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lFKCkgICAgICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lFKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0lFKHZhbCkgICAgICAgICAgICAgYmZpbl93cml0ZTE2KEVNQUNfUFRQX0lFLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9JU1RBVCgpICAgICAgICAgICAgICBiZmluX3JlYWQxNihFTUFDX1BUUF9JU1RBVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JU1RBVCh2YWwpICAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JU1RBVCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfRk9GRigpICAgICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfRk9GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9GT0ZGKHZhbCkgICAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9GT0ZGLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjEoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjEpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYxKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYxLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjIoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjIpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYyKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYyLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9GVjMoKSAgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9GVjMpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfRlYzKHZhbCkgICAgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfRlYzLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BRERFTkQoKSAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BRERFTkQpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfQURERU5EKHZhbCkgICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfQURERU5ELCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BQ0NSKCkgICAgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BQ0NSKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FDQ1IodmFsKSAgICAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FDQ1IsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX09GRlNFVCgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX09GRlNFVCkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9PRkZTRVQodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9PRkZTRVQsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVMTygpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVMTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FTE8odmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FTE8sIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RJTUVISSgpICAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RJTUVISSkKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9USU1FSEkodmFsKSAgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9USU1FSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1JYU05BUExPKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1JYU05BUExPKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUlhTTkFQSEkoKSAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUlhTTkFQSEkpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9UWFNOQVBMTygpICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9UWFNOQVBMTykKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1RYU05BUEhJKCkgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1RYU05BUEhJKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfQUxBUk1MTygpICAgICAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfQUxBUk1MTykKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9BTEFSTUxPKHZhbCkgICAgICAgIGJmaW5fd3JpdGUzMihFTUFDX1BUUF9BTEFSTUxPLCB2YWwpCisjZGVmaW5lIGJmaW5fcmVhZF9FTUFDX1BUUF9BTEFSTUhJKCkgICAgICAgICAgICBiZmluX3JlYWQzMihFTUFDX1BUUF9BTEFSTUhJKQorI2RlZmluZSBiZmluX3dyaXRlX0VNQUNfUFRQX0FMQVJNSEkodmFsKSAgICAgICAgYmZpbl93cml0ZTMyKEVNQUNfUFRQX0FMQVJNSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX09GRigpICAgICAgICAgICAgIGJmaW5fcmVhZDE2KEVNQUNfUFRQX0lEX09GRikKKyNkZWZpbmUgYmZpbl93cml0ZV9FTUFDX1BUUF9JRF9PRkYodmFsKSAgICAgICAgIGJmaW5fd3JpdGUxNihFTUFDX1BUUF9JRF9PRkYsIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX0lEX1NOQVAoKSAgICAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX0lEX1NOQVApCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfSURfU05BUCh2YWwpICAgICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfSURfU05BUCwgdmFsKQorI2RlZmluZSBiZmluX3JlYWRfRU1BQ19QVFBfUFBTX1NUQVJUSEkoKSAgICAgICAgYmZpbl9yZWFkMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEkpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1NUQVJUSEkodmFsKSAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1NUQVJUSEksIHZhbCkKKyNkZWZpbmUgYmZpbl9yZWFkX0VNQUNfUFRQX1BQU19QRVJJT0QoKSAgICAgICAgIGJmaW5fcmVhZDMyKEVNQUNfUFRQX1BQU19QRVJJT0QpCisjZGVmaW5lIGJmaW5fd3JpdGVfRU1BQ19QVFBfUFBTX1BFUklPRCh2YWwpICAgICBiZmluX3dyaXRlMzIoRU1BQ19QVFBfUFBTX1BFUklPRCwgdmFsKQorCiAvKiBSZW1vdmFibGUgU3RvcmFnZSBJbnRlcmZhY2UgUmVnaXN0ZXJzICovCiAKICNkZWZpbmUgYmZpbl9yZWFkX1JTSV9QV1JfQ1RMKCkgICAgICAgIGJmaW5fcmVhZDE2KFJTSV9QV1JfQ09OVFJPTCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvY2RlZkJGNTF4X2Jhc2UuaAppbmRleCBlZTNkNDczLi4xZDk3MGRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2NkZWZCRjUxeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MXhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MTgvY2RlZkJGNTF4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MlhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxMi5oCmluZGV4IGE5NmNhOTAuLjliNTA1YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTIuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTEyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUxMl9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE0LmgKaW5kZXggNTZlZTVhNy4uYjVhZGNhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTE0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MTRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxNi5oCmluZGV4IGRmYzkzODQuLjdlYjE4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTYuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTE2LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUxOC9kZWZCRjUxNi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTE2X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaAppbmRleCA2ZTk4MmFiLi43OTRjZjA2ZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxOC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvZGVmQkY1MTguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTE4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MThfSApAQCAtNjQ4LDQgKzYyNCwzMiBAQAogCiAjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBSV1IgIDB4MSAgICAgICAgLyogUmVhZCBXYWl0IFJlcXVlc3QgKi8KIAorLyogQml0IG1hc2tzIGZvciBFTUFDX1BUUF9DVEwgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgUFRQX0VOICAweDEgICAgICAgIC8qIEVuYWJsZSB0aGUgUFRQX1RTWU5DIG1vZHVsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgIFRMICAweDIgICAgICAgIC8qIFRpbWVzdGFtcCBsb2NrIGNvbnRyb2wgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICAgQVNFTiAgMHgxMCAgICAgICAvKiBBdXhpbGlhcnkgc25hcHNob3QgY29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFBQU0VOICAweDgwICAgICAgIC8qIFB1bHNlLXBlci1zZWNvbmQgKFBQUykgY29udHJvbCAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIENLT0VOICAweDIwMDAgICAgIC8qIENsb2NrIG91dHB1dCBjb250cm9sICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRU1BQ19QVFBfSUUgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBTElFICAweDEgICAgICAgIC8qIEFsYXJtIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSWEVJRSAgMHgyICAgICAgICAvKiBSZWNlaXZlIGV2ZW50IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSWEdJRSAgMHg0ICAgICAgICAvKiBSZWNlaXZlIGdlbmVyYWwgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUWElFICAweDggICAgICAgIC8qIFRyYW5zbWl0IGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgICAgICAgICAgICAgICAgICAgICBSWE9WRSAgMHgxMCAgICAgICAvKiBSZWNlaXZlIG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgIFRYT1ZFICAweDIwICAgICAgIC8qIFRyYW5zbWl0IG92ZXJydW4gZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBBU0lFICAweDQwICAgICAgIC8qIEF1eGlsaWFyeSBzbmFwc2hvdCBpbnRlcnJ1cHQgZW5hYmxlICovCisKKy8qIEJpdCBtYXNrcyBmb3IgRU1BQ19QVFBfSVNUQVQgKi8KKworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICAgQUxTICAweDEgICAgICAgIC8qIEFsYXJtIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSWEVMICAweDIgICAgICAgIC8qIFJlY2VpdmUgZXZlbnQgaW50ZXJydXB0IHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBSWEdMICAweDQgICAgICAgIC8qIFJlY2VpdmUgZ2VuZXJhbCBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFRYVEwgIDB4OCAgICAgICAgLyogVHJhbnNtaXQgc25hcHNob3Qgc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgIFJYT1YgIDB4MTAgICAgICAgLyogUmVjZWl2ZSBzbmFwc2hvdCBvdmVycnVuIHN0YXR1cyAqLworI2RlZmluZSAgICAgICAgICAgICAgICAgICAgICBUWE9WICAweDIwICAgICAgIC8qIFRyYW5zbWl0IHNuYXBzaG90IG92ZXJydW4gc3RhdHVzICovCisjZGVmaW5lICAgICAgICAgICAgICAgICAgICAgICBBU0wgIDB4NDAgICAgICAgLyogQXV4aWxpYXJ5IHNuYXBzaG90IGludGVycnVwdCBzdGF0dXMgKi8KKwogI2VuZGlmIC8qIF9ERUZfQkY1MThfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9kZWZCRjUxeF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaAppbmRleCAxYmVjOGQxLi5lMDZmNDExIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2RlZkJGNTF4X2Jhc2UuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2RlZkJGNTF4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MVhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA5NzU3NjgzLi5iYmFiMmQ3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggM2ZmMGYwOS4uMTRlNTJlYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTE4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTE4X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCBhMGZjNzdmLi5lMzUyOTEwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYwppbmRleCAzMTUxZmQ1Li5iYjA1YmVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MTgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUxOC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTE4L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIEJyeWFuIFd1IDxjb29sb25leUBrZXJuZWwub3JnPgorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9jbV9iZjUyNy5jCmluZGV4IDA4YTNmMDEuLmYxOTk2YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY21fYmY1MjcuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2NtX2JmNTI3LmMKQEAgLTEsMzEgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvY20tYmY1MjcuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBCbHVldGVjaG5peAorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtNjE2LDEyICs1OTUsNiBAQAogfTsKICNlbmRpZiAgLyogc3BpIG1hc3RlciBhbmQgZGV2aWNlcyAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gY21fcGFydGl0aW9uc1tdID0gewogCXsKQEAgLTc4Niw2ICs3NTksMTEgQEAKIAkJLmlycSA9IElSUV9QRjgsCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKQEAgLTgyMSwxOSArNzk5LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC05MDksMTAgKzg3NCw2IEBACiAJJmJmaW5fc3BpMF9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIAkmYmZpbl91YXJ0X2RldmljZSwKICNlbmRpZgpAQCAtOTQyLDggKzkwMyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUikgfHwgZGVmaW5lZChDT05GSUdfTVREX0dQSU9fQUREUl9NT0RVTEUpCiAJJmNtX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCmluZGV4IDY4YjRjODAuLmNhZDIzYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpicmQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6YnJkLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemJyZC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC02MTEsMTkgKzU4OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAJVlJQQUlSKFZMRVZfMTAwLCA0MDAwMDAwMDApLApAQCAtNzMyLDggKzY5Nyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpicmRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlemJyZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKaW5kZXggMjg0OWIwOS4uZjA5NjY1ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9ib2FyZHMvZXpraXQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvYm9hcmRzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTcxNiwxMiArNjk0LDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfYWR2NzM5M19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbi1hZHY3MzkzIiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fdWFydF9yZXNvdXJjZXNbXSA9IHsKICNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fVUFSVDAKQEAgLTgzNyw2ICs4MDksMTEgQEAKIAkJLmlycSA9IElSUV9QRjgsCiAJfSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCiB9OwogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX01PRFVMRSkKQEAgLTkwNSwxOSArODgyLDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KIHsKIAlWUlBBSVIoVkxFVl8xMDAsIDQwMDAwMDAwMCksCkBAIC0xMDAxLDEwICs5NjUsNiBAQAogCSZiZjUyeF90MzUwbWNxYl9kZXZpY2UsCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLQkmYmZpbl9mYl9hZHY3MzkzX2RldmljZSwKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX01PRFVMRSkKIAkmYmZpbl91YXJ0X2RldmljZSwKICNlbmRpZgpAQCAtMTAzOCw4ICs5OTgsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZXpraXRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2RtYS5jCmluZGV4IDIzMTg3NzUuLjdiYzc1NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZjUyNy5oCmluZGV4IDM4MzJhYWIuLmZmNjhjODggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmY1MjcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmNTI3LmgKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9iZjUyNy5oCi0gKiBCYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBBdXRob3I6CU1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjUyNwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUyN19IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGViZDZjZWIuLmMxZDU1YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggZWE5Y2IwZi4uZTdkNjAzNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MjIuaAppbmRleCA2NjNjMmJiLi4xMDc5YWY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTIyLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmYmY1MjIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTIyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oCmluZGV4IDAwMzc3ZWIuLmRjMzExOWU5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI1LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmYmY1MjUuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTI1X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNy5oCmluZGV4IGZjYThkYjcuLmQ2NTc5NDQ5IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyNy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTI3LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9jZGVmYmY1MjcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTI3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvY2RlZkJGNTJ4X2Jhc2UuaAppbmRleCAxZmU3NmQ4Li43MDE0ZGRlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2NkZWZCRjUyeF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MnhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvY2RlZkJGNTJ4X2Jhc2UuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUyWF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTIyLmgKaW5kZXggMGE4Y2RjZC4uY2IxMzlhMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyMi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjIuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTI3L2RlZkJGNTIyLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MjJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNS5oCmluZGV4IDVjZDc1NzYuLjgyYWJlZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjUuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI1LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9kZWZCRjUyNS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTI1X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MjcuaAppbmRleCBmMDQwZjM2Li41NzBhMTI1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTI3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9kZWZCRjUyNy5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MjcuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUyN19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2RlZkJGNTJ4X2Jhc2UuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCmluZGV4IDY4YjU1ZDAuLmY4MjE3MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZGVmQkY1MnhfYmFzZS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MjcvZGVmQkY1MnhfYmFzZS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTJYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMDZiNmVlYi4uMTA0YmZmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTEsNyArMSw0IEBACiAvKgotICogRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9ncGlvLmgKLSAqIEJ1Z3M6IEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL2lycS5oCmluZGV4IDhlYTY2MGQuLmFhNjU3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbmNsdWRlL21hY2gvaXJxLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9pcnEuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZToJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUyNy9pcnEuaAotICogYmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvaXJxLmgKLSAqIGF1dGhvcjoJTWljaGFlbCBIZW5uZXJpY2ggKG1pY2hhZWwuaGVubmVyaWNoQGFuYWxvZy5jb20pCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTI3X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCA3MmIxNjUyLi5kNDUxOGI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTI3L2ludHMtcHJpb3JpdHkuYwppbmRleCBmOGM4YWNkLi40NGNhMjE1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MjcvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUyNy9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoIChtaWNoYWVsLmhlbm5lcmljaEBhbmFsb2cuY29tKQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL0g4NjA2LmMKaW5kZXggNmMyYjQ3Zi4uNDNmNDNhMCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9IODYwNi5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvSDg2MDYuYwpAQCAtMSwzMiArMSwxMSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL0g4NjA2LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgSmF2aWVyIEhlcnJlcm8gPGpoZXJyZXJvQGh2c2lzdGVtYXMuZXM+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA3LTIwMDggSFYgU2lzdGVtYXMgUy5MLgorICogICAgICAgICAgICAgICAgICAgICAgSmF2aWVyIEhlcnJlcm8gPGpoZXJyZXJvQGh2c2lzdGVtYXMuZXM+CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDcKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgSW5mbyBGaWxlIGZvciB0aGUgSFYgU2lzdGVtYXMgSDg2MDYgYm9hcmQKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jCi0gKgkJIENvcHlyaWdodCAyMDA3LDIwMDggSFYgU2lzdGVtYXMgUy5MLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvYmxhY2tzdGFtcC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKaW5kZXggODIwOGQ2Ny4uYjU4MDg4NCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9ibGFja3N0YW1wLmMKQEAgLTEsMTYgKzEsMTAgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ibGFja3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL3N0YW1wLmMKLSAqIEF1dGhvcjogICAgICAgQmVuamFtaW4gTWF0dGhld3MgPGJtYXRAbGxlLnJvY2hlc3Rlci5lZHU+Ci0gKiAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBCbGFja1N0YW1wCiAgKgotICogQ3JlYXRlZDogICAgICAyMDA4Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIEluZm8gRmlsZSBmb3IgdGhlIEJsYWNrU3RhbXAKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLworICogICAgICAgICAgICAgICAgMjAwOCBCZW5qYW1pbiBNYXR0aGV3cyA8Ym1hdEBsbGUucm9jaGVzdGVyLmVkdT4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKICAqIE1vcmUgaW5mbyBhYm91dCB0aGUgQmxhY2tTdGFtcCBhdDoKICAqIAlodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvZ2YvcHJvamVjdC9ibGFja3N0YW1wLwpAQCAtMjgxLDE5ICsyNzUsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaTJjLWdwaW8uaD4KIApAQCAtMzg0LDggKzM2NSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBibGFja3N0YW1wX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzMuYwppbmRleCA3NDQzYjI2Li43ZmMzYjg2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9jbV9iZjUzMy5jCkBAIC0xLDMwICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTMzLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+IENvcHlyaWdodCAyMDA1CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAyMDA4LTIwMDkgQmx1ZXRlY2huaXgKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBkZXNjcmlwdGlvbiBmaWxlCi0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTI2MSwxOSArMjQxLDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3VhcnRfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNTA2LDggKzQ3Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmcGFyYV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTMzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwppbmRleCBmZDUxOGUzLi5kNDY4OWRjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9lemtpdC5jCi0gKiBCYXNlZCBvbjogICAgIE9yaWdpbmFsIFdvcmsKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA1Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDogICAgIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnPiAtIE5hbWVkIHRoZSBib2FyZHMKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTMzLDEyICsxMSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9JU1AxMzYyX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTM2Mi5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9iZmluNXh4X3NwaS5oPgogI2luY2x1ZGUgPGFzbS9wb3J0bXV4Lmg+CkBAIC01NiwxMiArMzYsNiBAQAogfTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9mYl9hZHY3MzkzX2RldmljZSA9IHsKLQkubmFtZSA9ICJiZmluLWFkdjczOTMiLAotfTsKLSNlbmRpZgotCiAvKgogICogIFVTQi1MQU4gRXpFeHRlbmRlciBib2FyZAogICogIERyaXZlciBuZWVkcyB0byBrbm93IGFkZHJlc3MsIGlycSBhbmQgZmxhZyBwaW4uCkBAIC05OCw1NCArNzIsNjkgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX01URF9QU0Q0MjU2RykgfHwgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHX01PRFVMRSkKLXN0YXRpYyBjb25zdCBjaGFyICptYXBfcHJvYmVzW10gPSB7Ci0JInN0bV9mbGFzaCIsCi0JTlVMTCwKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGV6a2l0X3BhcnRpdGlvbnNfYVtdID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiYm9vdGxvYWRlcihub3IgYSkiLAorCQkuc2l6ZSAgICAgICA9IDB4NDAwMDAsCisJCS5vZmZzZXQgICAgID0gMCwKKwl9LCB7CisJCS5uYW1lICAgICAgID0gImxpbnV4IGtlcm5lbChub3IgYSkiLAorCQkuc2l6ZSAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gc3RtX3ByaV9kYXRhX2EgPSB7Ci0JLm1hcG5hbWUgICAgPSAiRmxhc2ggQSBQcmltYXJ5IiwKLQkubWFwX3Byb2JlcyA9IG1hcF9wcm9iZXMsCi0JLmJhbmt3aWR0aCAgPSAyLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXpraXRfZmxhc2hfZGF0YV9hID0geworCS53aWR0aCAgICAgID0gMiwKKwkucGFydHMgICAgICA9IGV6a2l0X3BhcnRpdGlvbnNfYSwKKwkubnJfcGFydHMgICA9IEFSUkFZX1NJWkUoZXpraXRfcGFydGl0aW9uc19hKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3RtX3ByaV9yZXNvdXJjZV9hID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlemtpdF9mbGFzaF9yZXNvdXJjZV9hID0gewogCS5zdGFydCA9IDB4MjAwMDAwMDAsCiAJLmVuZCAgID0gMHgyMDBmZmZmZiwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0bV9wcmlfZGV2aWNlX2EgPSB7Ci0JLm5hbWUgICAgICAgICAgPSAibXRkLXJhbSIsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlemtpdF9mbGFzaF9kZXZpY2VfYSA9IHsKKwkubmFtZSAgICAgICAgICA9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQgICAgICAgICAgICA9IDAsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmc3RtX3ByaV9kYXRhX2EsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmV6a2l0X2ZsYXNoX2RhdGFfYSwKIAl9LAogCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgICAgICA9ICZzdG1fcHJpX3Jlc291cmNlX2EsCisJLnJlc291cmNlICAgICAgPSAmZXpraXRfZmxhc2hfcmVzb3VyY2VfYSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBzdG1fcHJpX2RhdGFfYiA9IHsKLQkubWFwbmFtZSAgICA9ICJGbGFzaCBCIFByaW1hcnkiLAotCS5tYXBfcHJvYmVzID0gbWFwX3Byb2JlcywKLQkuYmFua3dpZHRoICA9IDIsCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZXpraXRfcGFydGl0aW9uc19iW10gPSB7CisJeworCQkubmFtZSAgID0gImZpbGUgc3lzdGVtKG5vciBiKSIsCisJCS5zaXplICAgPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHN0bV9wcmlfcmVzb3VyY2VfYiA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGV6a2l0X2ZsYXNoX2RhdGFfYiA9IHsKKwkud2lkdGggICAgICA9IDIsCisJLnBhcnRzICAgICAgPSBlemtpdF9wYXJ0aXRpb25zX2IsCisJLm5yX3BhcnRzICAgPSBBUlJBWV9TSVpFKGV6a2l0X3BhcnRpdGlvbnNfYiksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGV6a2l0X2ZsYXNoX3Jlc291cmNlX2IgPSB7CiAJLnN0YXJ0ID0gMHgyMDEwMDAwMCwKIAkuZW5kICAgPSAweDIwMWZmZmZmLAogCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RtX3ByaV9kZXZpY2VfYiA9IHsKLQkubmFtZSAgICAgICAgICA9ICJtdGQtcmFtIiwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV6a2l0X2ZsYXNoX2RldmljZV9iID0geworCS5uYW1lICAgICAgICAgID0gInBoeXNtYXAtZmxhc2giLAogCS5pZCAgICAgICAgICAgID0gNCwKIAkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzdG1fcHJpX2RhdGFfYiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXpraXRfZmxhc2hfZGF0YV9iLAogCX0sCiAJLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSAgICAgID0gJnN0bV9wcmlfcmVzb3VyY2VfYiwKKwkucmVzb3VyY2UgICAgICA9ICZlemtpdF9mbGFzaF9yZXNvdXJjZV9iLAogfTsKICNlbmRpZgogCkBAIC00MDAsMTkgKzM4OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC00NjAsMTMgKzQzNiwyMSBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYmZpbl9pMmNfYm9hcmRfaW5mb1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJiZmluLWFkdjczOTMiLCAweDJCKSwKKwl9LAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZXpraXRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAKIAkmYmZpbl9kcG1jLAogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BTRDQyNTZHKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUFNENDI1NkdfTU9EVUxFKQotCSZzdG1fcHJpX2RldmljZV9hLAotCSZzdG1fcHJpX2RldmljZV9iLAorI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCisJJmV6a2l0X2ZsYXNoX2RldmljZV9hLAorCSZlemtpdF9mbGFzaF9kZXZpY2VfYiwKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BMQVRSQU0pIHx8IGRlZmluZWQoQ09ORklHX01URF9QTEFUUkFNX01PRFVMRSkKQEAgLTQ4MiwxMCArNDY2LDYgQEAKIAkmYmZpbl9zcGkwX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0JGSU4pIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQkZJTl9NT0RVTEUpCiAJJnJ0Y19kZXZpY2UsCiAjZW5kaWYKQEAgLTUwNyw4ICs0ODcsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0kyQ19HUElPKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfR1BJT19NT0RVTEUpCiAJJmkyY19ncGlvX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZXpraXRfaW5pdCh2b2lkKQpAQCAtNTE2LDYgKzQ5NCw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMoKTogcmVnaXN0ZXJpbmcgZGV2aWNlIHJlc291cmNlc1xuIiwgX19mdW5jX18pOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGV6a2l0X2RldmljZXMsIEFSUkFZX1NJWkUoZXpraXRfZGV2aWNlcykpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJmaW5fc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoYmZpbl9zcGlfYm9hcmRfaW5mbykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGJmaW5faTJjX2JvYXJkX2luZm8sCisJCQkJQVJSQVlfU0laRShiZmluX2kyY19ib2FyZF9pbmZvKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9pcDB4LmMKaW5kZXggZjE5YjYzMzcuLjY0NGJlNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvaXAweC5jCkBAIC0xLDM0ICsxLDEyIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaXAweC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9iZjEuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvc3RhbXAuYwotICogQXV0aG9yOiAgICAgICBJdmFuIERhbm92IDxpZGFub3ZAZ21haWwuY29tPgotICogICAgICAgICAgICAgICBNb2RpZmllZCBmb3IgSVAwWCBEYXZpZCBSb3dlCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDcgRGF2aWQgUm93ZQorICogICAgICAgICAgICAgICAgMjAwNiBJbnRyYXRyYWRlIEx0ZC4KKyAqICAgICAgICAgICAgICAgICAgICAgSXZhbiBEYW5vdiA8aWRhbm92QGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDogICAgICAyMDA3Ci0gKiBEZXNjcmlwdGlvbjogIEJvYXJkIGluZm8gZmlsZSBmb3IgdGhlIElQMDQvSVAwOCBib2FyZHMsIHdoaWNoCi0gKiAgICAgICAgICAgICAgIGFyZSBkZXJpdmVkIGZyb20gdGhlIEJsYWNrZmluT25lIFYyLjAgYm9hcmRzLgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDT3B5cmlnaHQgMjAwNyBEYXZpZCBSb3dlCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA2IEludHJhdHJhZGUgTHRkLgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTE0NSw3ICsxMjMsNiBAQAogCS5jdGxfcmVnID0gMHgxMDAwLAkJLyogQ1BPTD0wLENQSEE9MCxTYW5kaXNrIDFHIHdvcmsgKi8KIAkuZW5hYmxlX2RtYSA9IDAsCQkvKiBpZiAxIC0gYmxvY2shISEgKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvc3RhbXAuYwppbmRleCA3MjlmZDdjLi44MmY3MGVmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL3N0YW1wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9zdGFtcC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9zdGFtcC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwNQotICogRGVzY3JpcHRpb246ICBCb2FyZCBJbmZvIEZpbGUgZm9yIHRoZSBCRjUzMy1TVEFNUAotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtOTUsMTIgKzczLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfYWR2NzM5M19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbi1hZHY3MzkzIiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9ORVQyMjcyKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3Ml9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG5ldDIyNzJfYmZpbl9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC00MzYsMTkgKzQwOCw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfSTJDX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0kyQ19HUElPX01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgogCkBAIC00ODcsNiArNDQ2LDExIEBACiAJCS5pcnEgPSAzOSwKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQorCXsKKwkJSTJDX0JPQVJEX0lORk8oImJmaW4tYWR2NzM5MyIsIDB4MkIpLAorCX0sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2Nsa192bGV2X2RhdGFzaGVldFtdID0KQEAgLTUyOCwxMCArNDkyLDYgQEAKIAkmc21jOTF4X2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTkVUMjI3MikgfHwgZGVmaW5lZChDT05GSUdfVVNCX05FVDIyNzJfTU9EVUxFKQogCSZuZXQyMjcyX2JmaW5fZGV2aWNlLAogI2VuZGlmCkBAIC01NjMsOCArNTIzLDYgQEAKIAkmaTJjX2dwaW9fZGV2aWNlLAogI2VuZGlmCiAKLQkmYmZpbl9ncGlvc19kZXZpY2UsCi0KICNpZiBkZWZpbmVkKENPTkZJR19NVERfQkZJTl9BU1lOQykgfHwgZGVmaW5lZChDT05GSUdfTVREX0JGSU5fQVNZTkNfTU9EVUxFKQogCSZzdGFtcF9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9kbWEuYwppbmRleCA3YTQ0M2MzLi40YTE0YTQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2RtYS5jCkBAIC0xLDMxICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmNTMzLmgKaW5kZXggY2Y0NDI3Yy4uZTNlMDVmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZjUzMy5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmY1MzMuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JmNTMzLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjUzM19IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IDY5NjViNDAuLjllMWYzZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKaW5kZXggNDk5ZTg5Ny4uZjRiZDZkZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2JsYWNrZmluLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2NkZWZCRjUzMi5oCmluZGV4IGJiYzNjODMuLmZlYjIzOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvY2RlZkJGNTMyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9jZGVmQkY1MzIuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTMzL2NkZWZCRjUzMi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTMyX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvZGVmQkY1MzIuaAppbmRleCA3ZjQ2MzMyLi4wMmIzMjhlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2RlZkJGNTMyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9kZWZCRjUzMi5oCkBAIC0xLDQ4ICsxLDEwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTm9uLUdQTCBMaWNlbnNlIGFsc28gYXZhaWxhYmxlIGFzIHBhcnQgb2YgVmlzdWFsRFNQKysKLSAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9wcm9jZXNzb3JzL3Jlc291cmNlcy9jcm9zc2NvcmUvdmlzdWFsRHNwRGV2U29mdHdhcmUuaHRtbAotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEFuYWxvZyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIGZpbGUgdW5kZXIgc291cmNlIGNvZGUgY29udHJvbCwgcGxlYXNlIHNlbmQgYnVncyBvciBjaGFuZ2VzIHRvOgotICogZHNwdG9vbHMuc3VwcG9ydEBhbmFsb2cuY29tCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvZGVmQkY1MzIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBTeXN0ZW0gJiBNTVIgYml0IGFuZCBBZGRyZXNzIGRlZmluaXRpb25zIGZvciBBRFNQLUJGNTMyCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCi0vKiBTWVNURU0gJiBNTSBSRUdJU1RFUiBCSVQgJiBBRERSRVNTIERFRklOSVRJT05TIEZPUiBBRFNQLUJGNTMyICovCiAKICNpZm5kZWYgX0RFRl9CRjUzMl9ICiAjZGVmaW5lIF9ERUZfQkY1MzJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBlNDVjMTcwLi4yYWYxOWQ2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZGIxZTM0Ni4uYzMxNDk4YiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzMvZGVmQkY1MzIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2lmbmRlZiBfQkY1MzNfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IDJmNTljZTAuLjA3NWRhZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCmluZGV4IGY1MTk5NGIuLjhmNzE0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2gKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqCi0gKiBDcmVhdGVkOiAgICAgID8KLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3ZS5jCmluZGV4IDg3YWNiN2QuLmM4NWY0ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1MzdlLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN2UuYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjk3LDE5ICsyNzYsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNtX3BhcnRpdGlvbnNbXSA9IHsKIAl7CkBAIC02OTksOCArNjY1LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9iZjUzN2VfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvY21fYmY1Mzd1LmMKaW5kZXggODIxOWRjMy4uZWExMWFhOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9jbV9iZjUzN3UuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2NtX2JmNTM3dS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjk4LDE5ICsyNzcsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNtX3BhcnRpdGlvbnNbXSA9IHsKIAl7CkBAIC02MDUsOCArNTcxLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjbV9iZjUzN3VfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9taW5vdGF1ci5jCmluZGV4IDM5OWY4MWQuLjBkYTkyNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvbWlub3RhdXIuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL21pbm90YXVyLmMKQEAgLTEsNCArMSwxMCBAQAogLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgIDIwMDgtMjAwOSBDYW1icmlkZ2UgU2lnbmFsIFByb2Nlc3NpbmcKKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9wbmF2MTAuYwppbmRleCAxMGIzNWI4Li45YmEyOTA0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3BuYXYxMC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvcG5hdjEwLmMKQEAgLTEsMzEgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zMDIsNyArMjgwLDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykgfHwgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3X01PRFVMRSkKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfYWQ3ODc3X2NoaXBfaW5mbyA9IHsKLQkuY3NfY2hhbmdlX3Blcl93b3JkID0gMCwKIAkuZW5hYmxlX2RtYSA9IDAsCiAJLmJpdHNfcGVyX3dvcmQgPSAxNiwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKaW5kZXggOWRiNmI0MC4uYzQ2YmFhNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9zdGFtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvc3RhbXAuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3N0YW1wLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTEyMSwxOSArOTksNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUEpIHx8IGRlZmluZWQoQ09ORklHX0JGSU5fQ0ZQQ01DSUFfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX3BjbWNpYV9jZl9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC0xMDc4LDEyICsxMDQzLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5MykgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZmJfYWR2NzM5M19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiYmZpbi1hZHY3MzkzIiwKLX07Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fTFEwMzVRMSkgfHwgZGVmaW5lZChDT05GSUdfRkJfQkZJTl9MUTAzNVExX01PRFVMRSkKICNpbmNsdWRlIDxhc20vYmZpbi1scTAzNXExLmg+CiAKQEAgLTE0OTgsNiArMTQ1NywxMSBAQAogCQkucGxhdGZvcm1fZGF0YSA9ICh2b2lkICopJmFkcDU1ODhfZ3Bpb19kYXRhLAogCX0sCiAjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTMpIHx8IGRlZmluZWQoQ09ORklHX0ZCX0JGSU5fNzM5M19NT0RVTEUpCisJeworCQlJMkNfQk9BUkRfSU5GTygiYmZpbi1hZHY3MzkzIiwgMHgyQiksCisJfSwKKyNlbmRpZgogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9CRklOX1NQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVF9NT0RVTEUpCkBAIC0xNjY4LDEwICsxNjMyLDYgQEAKIAkmYmZpbl9scTAzNXExX2RldmljZSwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfRkJfQkZJTl83MzkzKSB8fCBkZWZpbmVkKENPTkZJR19GQl9CRklOXzczOTNfTU9EVUxFKQotCSZiZmluX2ZiX2FkdjczOTNfZGV2aWNlLAotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQkZJTikgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fTU9EVUxFKQogCSZiZmluX3VhcnRfZGV2aWNlLAogI2VuZGlmCkBAIC0xNzAyLDggKzE2NjIsNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUExBVEZPUk0pIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BMQVRGT1JNX01PRFVMRSkKIAkmYmZpbl9hc3luY19uYW5kX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvdGNtX2JmNTM3LmMKaW5kZXggNjEzNTNmNy4uNTcxNjNiNiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy90Y21fYmY1MzcuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCkBAIC0xLDMxICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL3RjbV9iZjUzNy5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9ib2FyZHMvY21fYmY1MzcuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDUKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjk4LDE5ICsyNzcsNiBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFIpIHx8IGRlZmluZWQoQ09ORklHX01URF9HUElPX0FERFJfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNtX3BhcnRpdGlvbnNbXSA9IHsKIAl7CkBAIC02MDcsOCArNTczLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSKSB8fCBkZWZpbmVkKENPTkZJR19NVERfR1BJT19BRERSX01PRFVMRSkKIAkmY21fZmxhc2hfZGV2aWNlLAogI2VuZGlmCi0KLQkmYmZpbl9ncGlvc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB0Y21fYmY1MzdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2RtYS5jCmluZGV4IGQyM2ZjMGUuLjVjOGM0ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgogICovCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9ibGFja2Zpbi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZjUzNy5oCmluZGV4IGYxOTRhODQuLjE3ZmFiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmNTM3LmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZjUzNy5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFN5c3RlbSBNTVIgUmVnaXN0ZXIgYW5kIG1lbW9yeSBtYXAgZm9yIEFEU1AtQkY1MzcKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTM3CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNiBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfX01BQ0hfQkY1MzdfSF9fCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCBlOTVkNTRmLi42MzVjOTFjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9iZmluX3NlcmlhbF81eHguaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglibGFja2ZpbiBzZXJpYWwgZHJpdmVyIGhlYWRlciBmaWxlcwotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCA5ZWU4ODM0Li5lYWIwMDZkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNC5oCmluZGV4IDVmOGI1ZjguLjkxODI1YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzQuaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM3L2NkZWZiZjUzNC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIHN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1MzRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvY2RlZkJGNTM3LmgKaW5kZXggYjhmYzk0OS4uOTM2M2MzOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2NkZWZCRjUzNy5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoJU3lzdGVtIE1NUiBSZWdpc3RlciBNYXAKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIKICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTM3X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzQuaAppbmRleCBhMzIyN2Y5Li5jZWJiMTRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM0LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvY2RlZkJGNTM3LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9kZWZCRjUzNy5oCmluZGV4IDNkNmM4M2UuLjhjYjVkNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZGVmQkY1MzcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2RlZkJGNTM3LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9kZWZiZjUzNy5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCXN5c3RlbSBtbXIgcmVnaXN0ZXIgbWFwCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjUzN19ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGQ3N2EzMWUuLjEwNGJmZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0xLDcgKzEsNCBAQAogLyoKLSAqIEZpbGU6IGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvZ3Bpby5oCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9pcnEuaAppbmRleCBiMmE3MWQ1Li4wZGVmYTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL2lycS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbmNsdWRlL21hY2gvaXJxLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYmFzZWQgb246Ci0gKiBhdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlcgogICovCiAKICNpZm5kZWYgX0JGNTM3X0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCA4NzI4NWU3Li5kYTk3NjAzMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKaW5kZXggNTFjNDgwOC4uZjY1MDA2MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKaW5kZXggZjJhYzNiMC4uMTRhZjVjMiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2JvYXJkcy9lemtpdC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9ib2FyZHMvZXpraXQuYwpAQCAtMSwzMSArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvYm9hcmRzL2V6a2l0LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjM3LDcgKzIxNSw2IEBACiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2ZsYXNoX2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC01MDYsMTkgKzQ4Myw2IEBACiAjZW5kaWYKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fZ3Bpb3NfcmVzb3VyY2VzID0gewotCS5zdGFydCA9IDAsCi0JLmVuZCAgID0gTUFYX0JMQUNLRklOX0dQSU9TIC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJmaW5fZ3Bpb3NfZGV2aWNlID0gewotCS5uYW1lID0gInNpbXBsZS1ncGlvIiwKLQkuaWQgPSAtMSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJmJmaW5fZ3Bpb3NfcmVzb3VyY2VzLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgogCkBAIC02NTgsOCArNjIyLDYgQEAKIAkmYmZpbl9kZXZpY2VfZ3Bpb2tleXMsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2RtYS5jCmluZGV4IGQ2ODM3ZmIuLjVkYzAyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLworCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKICNpbmNsdWRlIDxhc20vYmxhY2tmaW4uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmY1MzguaAppbmRleCA5YzhhYmIzLi4wY2Y1YmY4IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZjUzOC5oCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmY1MzguaAotICogQmFzZWQgb246CWluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzcvYmY1MzcuaAotICogQXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1MzgKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTI3CisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTM4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKaW5kZXggOTk5ZjIzOS4uNWMxNDgxNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkZXIgZmlsZXMKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDVlY2VlMTYuLjI3OGU4OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzOC9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX01BQ0hfQkxBQ0tGSU5fSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2NkZWZCRjUzOC5oCmluZGV4IDFkZTY3NTEuLjQwMWViZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvY2RlZkJGNTM4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9jZGVmQkY1MzguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2NkZWZCRjUzOC5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjUzOF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2RlZkJGNTM5LmgKaW5kZXggMWM1ODkxNC4uNWY2YzM0ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9kZWZCRjUzOS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvZGVmQkY1MzkuaApAQCAtMSw0NyArMSw5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgUHVibGljCi0gKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogTm9uLUdQTCBMaWNlbnNlIGFsc28gYXZhaWxhYmxlIGFzIHBhcnQgb2YgVmlzdWFsRFNQKysKLSAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9wcm9jZXNzb3JzL3Jlc291cmNlcy9jcm9zc2NvcmUvdmlzdWFsRHNwRGV2U29mdHdhcmUuaHRtbAotICoKLSAqIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA1IEFuYWxvZyBEZXZpY2VzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIGZpbGUgdW5kZXIgc291cmNlIGNvZGUgY29udHJvbCwgcGxlYXNlIHNlbmQgYnVncyBvciBjaGFuZ2VzIHRvOgotICogZHNwdG9vbHMuc3VwcG9ydEBhbmFsb2cuY29tCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1MzgvZGVmQkY1MzkuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCisKIC8qIFNZU1RFTSAmIE1NIFJFR0lTVEVSIEJJVCAmIEFERFJFU1MgREVGSU5JVElPTlMgRk9SIEFEU1AtQkY1MzgvOSAqLwogCiAjaWZuZGVmIF9ERUZfQkY1MzlfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzMGY0ZjcyLi4yOTVjNzhhIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZmRjODdmZS4uYTRiN2ZjYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTM4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglNaWNoYWVsIEhlbm5lcmljaCAobWljaGFlbC5oZW5uZXJpY2hAYW5hbG9nLmNvbSkKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBjcmVhdGVkOgotICogZGVzY3JpcHRpb246Ci0gKglzeXN0ZW0gbW1yIHJlZ2lzdGVyIG1hcAotICogcmV2OgotICoKLSAqIG1vZGlmaWVkOgotICoKLSAqCi0gKiBidWdzOiAgICAgICAgIGVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgd2l0aG91dCBhbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgc2VlIHRoZQotICogZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiB5b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBjb3B5aW5nLgotICogaWYgbm90LCB3cml0ZSB0byB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uLAotICogNTkgdGVtcGxlIHBsYWNlIC0gc3VpdGUgMzMwLCBib3N0b24sIG1hIDAyMTExLTEzMDcsIHVzYS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9CRjUzOF9JUlFfSF8KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbmNsdWRlL21hY2gvcG9ydG11eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKaW5kZXggYzhkYjI2NC4uNjEyMWNmOCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2luY2x1ZGUvbWFjaC9wb3J0bXV4LmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX01BQ0hfUE9SVE1VWF9IXwogI2RlZmluZSBfTUFDSF9QT1JUTVVYX0hfCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCmluZGV4IDcwZDE3ZTUuLjFmYTc5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjUzOC9pbnRzLXByaW9yaXR5LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM4L2ludHMtcHJpb3JpdHkuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzgvaW50cy1wcmlvcml0eS5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzMy9pbnRzLXByaW9yaXR5LmMKLSAqIEF1dGhvcjogICAgICAgTWljaGFlbCBIZW5uZXJpY2gKKyAqIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBDb3B5cmlnaHQgMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2NtX2JmNTQ4LmMKaW5kZXggZTU2NWFhZS4uY2NkY2Q2ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvY21fYmY1NDguYwpAQCAtMSwzMSArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9jbV9iZjU0OC5jCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjUzNy9ib2FyZHMvZXpraXQuYwotICogQXV0aG9yOiAgICAgICBBaWRhbiBXaWxsaWFtcyA8YWlkYW5AbmljdGEuY29tLmF1PgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgICAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQorICogICAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA1IE5hdGlvbmFsIElDVCBBdXN0cmFsaWEgKE5JQ1RBKQotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0zODAsMTkgKzM1OSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WCkgfHwgZGVmaW5lZChDT05GSUdfUEFUQV9CRjU0WF9NT0RVTEUpCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGJmaW5fYXRhcGlfcmVzb3VyY2VzW10gPSB7CiAJewpAQCAtNTQ2LDEzICs1MTIsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcpIHx8IGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3N19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGJmaW41eHhfc3BpX2NoaXAgc3BpX2FkNzg3N19jaGlwX2luZm8gPSB7Ci0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiAJLmVuYWJsZV9kbWEgPSAwLAogCS5iaXRzX3Blcl93b3JkID0gMTYsCiB9OwpAQCAtODUzLDggKzgxNyw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmcGFyYV9mbGFzaF9kZXZpY2UsCiAjZW5kaWYKLQotCSZiZmluX2dwaW9zX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNtX2JmNTQ4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwppbmRleCBjNjZmMzgwLi4xYTUyODZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvYm9hcmRzL2V6a2l0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2JvYXJkcy9lemtpdC5jCkBAIC0xLDMxICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9ib2FyZHMvZXpraXQuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzcvYm9hcmRzL2V6a2l0LmMKLSAqIEF1dGhvcjogICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KKyAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMjA4LDcgKzE4Niw2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFgpIHx8IGRlZmluZWQoQ09ORklHX0lOUFVUX0FEWEwzNFhfTU9EVUxFKQotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2FkeGwzNHguaD4KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWR4bDM0eF9wbGF0Zm9ybV9kYXRhIGFkeGwzNHhfaW5mbyA9IHsKIAkueF9heGlzX29mZnNldCA9IDAsCkBAIC02MzYsNyArNjEzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmZpbjV4eF9zcGlfY2hpcCBzcGlfZmxhc2hfY2hpcF9pbmZvID0gewogCS5lbmFibGVfZG1hID0gMCwgICAgICAgICAvKiB1c2UgZG1hIHRyYW5zZmVyIHdpdGggdGhpcyBjaGlwKi8KIAkuYml0c19wZXJfd29yZCA9IDgsCi0JLmNzX2NoYW5nZV9wZXJfd29yZCA9IDAsCiB9OwogI2VuZGlmCiAKQEAgLTY1MCw3ICs2MjYsNiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3KSB8fCBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzdfTU9EVUxFKQogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZDc4NzdfY2hpcF9pbmZvID0gewotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogCS5lbmFibGVfZG1hID0gMCwKIAkuYml0c19wZXJfd29yZCA9IDE2LAogfTsKQEAgLTY4MSw3ICs2NTYsNiBAQAogc3RhdGljIHN0cnVjdCBiZmluNXh4X3NwaV9jaGlwIHNwaV9hZHhsMzR4X2NoaXBfaW5mbyA9IHsKIAkuZW5hYmxlX2RtYSA9IDAsICAgICAgICAgLyogdXNlIGRtYSB0cmFuc2ZlciB3aXRoIHRoaXMgY2hpcCovCiAJLmJpdHNfcGVyX3dvcmQgPSA4LAotCS5jc19jaGFuZ2VfcGVyX3dvcmQgPSAwLAogfTsKICNlbmRpZgogCkBAIC05MDgsMTkgKzg4Miw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNjbGtfdmxldl9kYXRhc2hlZXRbXSA9CiB7CiAvKgpAQCAtMTAyOCw4ICs5ODksNiBAQAogCSZiZmluX2RldmljZV9ncGlva2V5cywKICNlbmRpZgogCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAotCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVApIHx8IGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQX01PRFVMRSkKIAkmZXpraXRfZmxhc2hfZGV2aWNlLAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKaW5kZXggZDkyMzliYy4uMDM5YTZkOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2RtYS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9kbWEuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvZG1hLmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzaW1wbGUgRE1BIEltcGxlbWVudGF0aW9uIGZvciBCbGFja2ZpbgorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NDguaAppbmRleCBjZDMxZjcyLi43YmVhZDVjIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTQ4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0OC5oCkBAIC0xLDMwICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmY1NDguaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTeXN0ZW0gTU1SIHJlZ2lzdGVyIGFuZCBtZW1vcnkgbWFwIGZvciBBRFNQLUJGNTQ4Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX19NQUNIX0JGNTQ4X0hfXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eC1scTA0My5oCmluZGV4IDljN2NhNjIuLjg4MjFlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHgtbHEwNDMuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmNTR4LWxxMDQzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgQkY1NFhfTFEwNDNfSAogI2RlZmluZSBCRjU0WF9MUTA0M19ICiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmY1NHhfa2V5cy5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKaW5kZXggMWZiNGVjNy4uNDkzMzhhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZjU0eF9rZXlzLmgKQEAgLTEsMyArMSw5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgorICovCisKICNpZm5kZWYgX0JGSU5fS1BBRF9ICiAjZGVmaW5lIF9CRklOX0tQQURfSAogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaAppbmRleCAyZDFiNWZhLi5kZDQ0YWE3IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKQEAgLTEsMzIgKzEsNyBAQAogLyoKLSAqIGZpbGU6ICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2JmaW5fc2VyaWFsXzV4eC5oCi0gKiBiYXNlZCBvbjoKLSAqIGF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIGNyZWF0ZWQ6Ci0gKiBkZXNjcmlwdGlvbjoKLSAqCWJsYWNrZmluIHNlcmlhbCBkcml2ZXIgaGVhZCBmaWxlCi0gKiByZXY6Ci0gKgotICogbW9kaWZpZWQ6Ci0gKgotICoKLSAqIGJ1Z3M6ICAgICAgICAgZW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgZnJlZSBzb2Z0d2FyZSBmb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCB3aXRob3V0IGFueSB3YXJyYW50eTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBzZWUgdGhlCi0gKiBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIGNvcHlpbmcuCi0gKiBpZiBub3QsIHdyaXRlIHRvIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb24sCi0gKiA1OSB0ZW1wbGUgcGxhY2UgLSBzdWl0ZSAzMzAsIGJvc3RvbiwgbWEgMDIxMTEtMTMwNywgdXNhLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAppbmRleCAzMTg2NjdiLi4xMzMwMmI2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvYmxhY2tmaW4uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9NQUNIX0JMQUNLRklOX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDIuaAppbmRleCAwN2FlZmI5Li40MmY0YTk0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Mi5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQyLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9jZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDJfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ0LmgKaW5kZXggNDMxYTY5Mi4uMjIwNzc5OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDQuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0NC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ0X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0Ny5oCmluZGV4IDkzMzc2ZTkuLjQyMzQyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ3LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDcuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ4LmgKaW5kZXggOWNkNzQzOC4uZGY4NDE4MCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OC5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvY2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTQ4X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0OS5oCmluZGV4IGVhZDM2MGIuLjM0Yzg0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTQ5LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NDkuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ5L2NkZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQ0RFRl9CRjU0OV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2NkZWZCRjU0eF9iYXNlLmgKaW5kZXggNmU2MzZjNC4uYTJlOWQ5OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9jZGVmQkY1NHhfYmFzZS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvY2RlZkJGNTR4X2Jhc2UuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2NkZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9DREVGX0JGNTRYX0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDIuaAppbmRleCBiMTMxNjU0Li5kM2JjNmQxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQyLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Mi5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NDgvZGVmQkY1NDIuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0Ml9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ0LmgKaW5kZXggYzJjNzg1Yi4uZGQ0MTRhZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0NC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDQuaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ0LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDRfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0Ny5oCmluZGV4IDY2MWYwZDguLjVhOWRiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDcuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ3LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0Ny5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU0OF9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ4LmgKaW5kZXggODVkNGJhZC4uODJjZDU5MyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDguaApAQCAtMSwzMSArMSw3IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2RlZkJGNTQ4LmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NDhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0OS5oCmluZGV4IDA5NjczNDUuLjZmYzZlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NDkuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2RlZkJGNTQ5LmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0OS5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQURJIEJTRCBsaWNlbnNlIG9yIHRoZSBHUEwtMiAob3IgbGF0ZXIpCiAgKi8KIAogI2lmbmRlZiBfREVGX0JGNTQ5X0gKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvZGVmQkY1NHhfYmFzZS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKaW5kZXggZTAyMmU4OS4uODU5MGM4YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9kZWZCRjU0eF9iYXNlLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU0OC9kZWZCRjU0eF9iYXNlLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIFJldjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgotICogSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBREkgQlNEIGxpY2Vuc2Ugb3IgdGhlIEdQTC0yIChvciBsYXRlcikKICAqLwogCiAjaWZuZGVmIF9ERUZfQkY1NFhfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCAzYTIwNTE3Li44NTBlMzlkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSwzNCArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2dwaW8uaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CSBNaWNoYWVsIEhlbm5lcmljaCAoaGVubmVyaWNoQGJsYWNrZmluLnVjbGludXgub3JnKQotICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCi0KLQogI2RlZmluZSBHUElPX1BBMAkwCiAjZGVmaW5lIEdQSU9fUEExCTEKICNkZWZpbmUgR1BJT19QQTIJMgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggZjE5NDYyNS4uMTA2ZGIwNSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKIC8qCi0gKiBmaWxlOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTQ4L2lycS5oCi0gKiBiYXNlZCBvbjoJaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjUzNy9pcnEuaAotICogYXV0aG9yOglSb3kgSHVhbmcgKHJveS5odWFuZ0BhbmFsb2cuY29tKQorICogQ29weXJpZ2h0IDIwMDctMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJc3lzdGVtIG1tciByZWdpc3RlciBtYXAKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfQkY1NDhfSVJRX0hfCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW5jbHVkZS9tYWNoL3BvcnRtdXguaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCmluZGV4IGNlMzcyYmEuLjg5YWQ2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbmNsdWRlL21hY2gvcG9ydG11eC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX1BPUlRNVVhfSF8KICNkZWZpbmUgX01BQ0hfUE9SVE1VWF9IXwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTQ4L2ludHMtcHJpb3JpdHkuYwppbmRleCA5ZGQwZmEzLi40OGRkM2E0IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NDgvaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU0OC9pbnRzLXByaW9yaXR5LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQmFzZWQgb246ICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvaW50cy1wcmlvcml0eS5jCi0gKiBBdXRob3I6ICAgICAgIE1pY2hhZWwgSGVubmVyaWNoCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBTZXQgdXAgdGhlIGludGVycnVwdCBwcmlvcml0aWVzCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwppbmRleCA5NDM5YmM2Li4wMjYxYTVlIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYXRvbWljLlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2F0b21pYy5TCkBAIC0xLDIzICsxLDggQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9hdG9taWMuUwotICogQXV0aG9yOiAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgorICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvY21fYmY1NjEuYwppbmRleCA2NTc3ZWNmLi5kZmM4ZDViIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2NtX2JmNTYxLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9jbV9iZjU2MS5jCkBAIC0xLDMwICsxLDEwIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1MzMvYm9hcmRzL2NtX2JmNTYxLmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTMzL2JvYXJkcy9lemtpdC5jCi0gKiBBdXRob3I6ICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+IENvcHlyaWdodCAyMDA1CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgMjAwOC0yMDA5IEJsdWV0ZWNobml4CisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOiAgICAgIDIwMDYKLSAqIERlc2NyaXB0aW9uOiAgQm9hcmQgZGVzY3JpcHRpb24gZmlsZQotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CkBAIC0yODUsMTkgKzI2NSw2IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmZpbl9ncGlvc19yZXNvdXJjZXMgPSB7Ci0JLnN0YXJ0ID0gMCwKLQkuZW5kICAgPSBNQVhfQkxBQ0tGSU5fR1BJT1MgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmZpbl9ncGlvc19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2ltcGxlLWdwaW8iLAotCS5pZCA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLQkucmVzb3VyY2UgPSAmYmZpbl9ncGlvc19yZXNvdXJjZXMsCi19OwotCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX0lTUDEzNjJfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfSVNQMTM2Ml9IQ0RfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpc3AxMzYyX2hjZF9yZXNvdXJjZXNbXSA9IHsKIAl7CkBAIC01MzIsOCArNDk5LDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQogCSZwYXJhX2ZsYXNoX2RldmljZSwKICNlbmRpZgotCi0JJmJmaW5fZ3Bpb3NfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY21fYmY1NjFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy9lemtpdC5jCmluZGV4IGNhZWQ5NmIuLjllMmQ4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvZXpraXQuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL2V6a2l0LmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2V6a2l0LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIDIwMDUgTmF0aW9uYWwgSUNUIEF1c3RyYWxpYSAoTklDVEEpCisgKiAgICAgICAgICAgICAgICAgICAgQWlkYW4gV2lsbGlhbXMgPGFpZGFuQG5pY3RhLmNvbS5hdT4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTM4NywxOSArMzY2LDYgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBiZmluX2dwaW9zX3Jlc291cmNlcyA9IHsKLQkuc3RhcnQgPSAwLAotCS5lbmQgICA9IE1BWF9CTEFDS0ZJTl9HUElPUyAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBiZmluX2dwaW9zX2RldmljZSA9IHsKLQkubmFtZSA9ICJzaW1wbGUtZ3BpbyIsCi0JLmlkID0gLTEsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZiZmluX2dwaW9zX3Jlc291cmNlcywKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19JMkNfR1BJTykgfHwgZGVmaW5lZChDT05GSUdfSTJDX0dQSU9fTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CiAKQEAgLTQ5Myw4ICs0NTksNiBAQAogCSZpc3AxMzYyX2hjZF9kZXZpY2UsCiAjZW5kaWYKIAotCSZiZmluX2dwaW9zX2RldmljZSwKLQogI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUF9NT0RVTEUpCiAJJmV6a2l0X2ZsYXNoX2RldmljZSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2JvYXJkcy90ZXBsYS5jCmluZGV4IDZmNzdkYmUuLjhiYTcyNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9ib2FyZHMvdGVwbGEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvYm9hcmRzL3RlcGxhLmMKQEAgLTEsMTUgKzEsMTMgQEAKIC8qCi0gKiAgRmlsZTogYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3RlcGxhLmMKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSkKKyAqICAgICAgICAgICAgICAgICAgICAgIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+CiAgKgotICogIENvcHlyaWdodCAyMDA0LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogIE9ubHkgU01TQzkxQzExMTEgd2FzIHJlZ2lzdGVyZWQsIG1heSBkbyBtb3JlIGxhdGVyLgorICogVGhhbmtzIHRvIEphbWV5IEhpY2tzLgogICoKLSAqICBDb3B5cmlnaHQgMjAwNSBOYXRpb25hbCBJQ1QgQXVzdHJhbGlhIChOSUNUQSksIEFpZGFuIFdpbGxpYW1zIDxhaWRhbkBuaWN0YS5jb20uYXU+Ci0gKiAgVGhhbmtzIHRvIEphbWV5IEhpY2tzLgorICogT25seSBTTVNDOTFDMTExMSB3YXMgcmVnaXN0ZXJlZCwgbWF5IGRvIG1vcmUgbGF0ZXIuCiAgKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9jb3JlYi5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKaW5kZXggOTM2MzVhNy4uMWU2MGE5MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2NvcmViLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb3JlYl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29yZWJfZm9wcyA9IHsKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogCS5pb2N0bCAgID0gY29yZWJfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2RtYS5jCmluZGV4IDQyYjAwMzcuLmM5MzhjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvZG1hLmMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9kbWEuYwotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiB0aGUgc2ltcGxlIERNQSBJbXBsZW1lbnRhdGlvbiBmb3IgQmxhY2tmaW4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHNpbXBsZSBETUEgSW1wbGVtZW50YXRpb24gZm9yIEJsYWNrZmluCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmNTYxLmgKaW5kZXggOTk2ODM2Mi4uOWY5YTM2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZjU2MS5oCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmY1NjEuaApAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2JmNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNZU1RFTSBNTVIgUkVHSVNURVIgQU5EIE1FTU9SWSBNQVAgRk9SIEFEU1AtQkY1NjEKKyAqIENvcHlyaWdodCAyMDA1LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fTUFDSF9CRjU2MV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JmaW5fc2VyaWFsXzV4eC5oCmluZGV4IGZkNWU4ODcuLmUzM2UxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmZpbl9zZXJpYWxfNXh4LmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9iZmluX3NlcmlhbF81eHguaApAQCAtMSwzMiArMSw3IEBACiAvKgotICogZmlsZTogICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvYmZpbl9zZXJpYWxfNXh4LmgKLSAqIGJhc2VkIG9uOgotICogYXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogY3JlYXRlZDoKLSAqIGRlc2NyaXB0aW9uOgotICoJYmxhY2tmaW4gc2VyaWFsIGRyaXZlciBoZWFkIGZpbGUKLSAqIHJldjoKLSAqCi0gKiBtb2RpZmllZDoKLSAqCi0gKgotICogYnVnczogICAgICAgICBlbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiB0aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBnbnUgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBmcmVlIHNvZnR3YXJlIGZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIHRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IHdpdGhvdXQgYW55IHdhcnJhbnR5OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIHNlZSB0aGUKLSAqIGdudSBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogeW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgZ251IGdlbmVyYWwgcHVibGljIGxpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgY29weWluZy4KLSAqIGlmIG5vdCwgd3JpdGUgdG8gdGhlIGZyZWUgc29mdHdhcmUgZm91bmRhdGlvbiwKLSAqIDU5IHRlbXBsZSBwbGFjZSAtIHN1aXRlIDMzMCwgYm9zdG9uLCBtYSAwMjExMS0xMzA3LCB1c2EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9ibGFja2Zpbi5oCmluZGV4IDhiZTMxMzUuLjY3ZDZiZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvYmxhY2tmaW4uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2JsYWNrZmluLmgKQEAgLTEsMzEgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9ibGFja2Zpbi5oCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoKLSAqCi0gKiBSZXY6Ci0gKgotICogTW9kaWZpZWQ6Ci0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KLSAqIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2lmbmRlZiBfTUFDSF9CTEFDS0ZJTl9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvY2RlZkJGNTYxLmgKaW5kZXggOWQ5ODU4Yy4uODFlY2RiNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9jZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2NkZWZCRjU2MS5oCkBAIC0xLDMxICsxLDcgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGluY2x1ZGUvYXNtLWJsYWNrZmluL21hY2gtYmY1NjEvY2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOiAgQyBQT0lOVEVSUyBUTyBTWVNURU0gTU1SIFJFR0lTVEVSIEFORCBNRU1PUlkgTUFQIEZPUiBBRFNQLUJGNTYxCi0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0NERUZfQkY1NjFfSApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9kZWZCRjU2MS5oCmluZGV4IDVmYzBmMDUuLmEzMWU1MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZGVmQkY1NjEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2RlZkJGNTYxLmgKQEAgLTEsMzIgKzEsNyBAQAotCiAvKgotICogRmlsZTogICAgICAgICBpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLWJmNTYxL2RlZkJGNTYxLmgKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICogU1lTVEVNIE1NUiBSRUdJU1RFUiBBTkQgTUVNT1JZIE1BUCBGT1IgQURTUC1CRjU2MQotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFESSBCU0QgbGljZW5zZSBvciB0aGUgR1BMLTIgKG9yIGxhdGVyKQogICovCiAKICNpZm5kZWYgX0RFRl9CRjU2MV9ICmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDc4ODJmNzkuLmE2NTFhOGNmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMSw3ICsxLDQgQEAKIC8qCi0gKiBGaWxlOiBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2dwaW8uaAotICogQnVnczogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvaXJxLmgKaW5kZXggNjY5ODM4OS4uN2IyMDhkYiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9pcnEuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL2lycS5oCkBAIC0xLDMyICsxLDcgQEAKLQogLyoKLSAqIEZpbGU6ICAgICAgICAgaW5jbHVkZS9hc20tYmxhY2tmaW4vbWFjaC1iZjU2MS9pcnEuaAotICogQmFzZWQgb246Ci0gKiBBdXRob3I6CisgKiBDb3B5cmlnaHQgMjAwNS0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBDcmVhdGVkOgotICogRGVzY3JpcHRpb246Ci0gKgotICogUmV2OgotICoKLSAqIE1vZGlmaWVkOgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCi0gKiBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpZm5kZWYgX0JGNTYxX0lSUV9IXwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9wb3J0bXV4LmggYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAppbmRleCAyZTVhZDYzLi4zYTdiNDZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3BvcnRtdXguaApAQCAtMSwzICsxLDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCisgKi8KKwogI2lmbmRlZiBfTUFDSF9QT1JUTVVYX0hfCiAjZGVmaW5lIF9NQUNIX1BPUlRNVVhfSF8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaCBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbmNsdWRlL21hY2gvc21wLmgKaW5kZXggZjllNjVlYi4uMzkwYzdmNCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2luY2x1ZGUvbWFjaC9zbXAuaAorKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW5jbHVkZS9tYWNoL3NtcC5oCkBAIC0xLDMgKzEsOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCiAjaWZuZGVmIF9NQUNIX0JGNTYxX1NNUAogI2RlZmluZSBfTUFDSF9CRjU2MV9TTVAKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKaW5kZXggOWQyZjIzMy4uYjQ0MjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvaW50cy1wcmlvcml0eS5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9pbnRzLXByaW9yaXR5LmMKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTM3L2ludHMtcHJpb3JpdHkuYwotICogQXV0aG9yOiAgICAgICBNaWNoYWVsIEhlbm5lcmljaAorICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNldCB1cCB0aGUgaW50ZXJydXB0IHByaW9yaXRpZXMKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc2Vjb25kYXJ5LlMKaW5kZXggZjcyYTZhZi4uOGU2MDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zZWNvbmRhcnkuUwpAQCAtMSwyNiArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NlY29uZGFyeS5TCi0gKiBCYXNlZCBvbjogICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9oZWFkLlMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIEJGNTYxIGNvcmVCIGJvb3RzdHJhcCBmaWxlCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KICAqCi0gKiBEZXNjcmlwdGlvbjogIEJGNTYxIGNvcmVCIGJvb3RzdHJhcCBmaWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKaW5kZXggOGMxMDcwMS4uNTEwZjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWJmNTYxL3NtcC5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1iZjU2MS9zbXAuYwpAQCAtMSwyMyArMSw4IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtYmY1NjEvc21wLmMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICBQaGlsaXBwZSBHZXJ1bSA8cnBtQHhlbm9tYWkub3JnPgogICoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCmluZGV4IDU5OThkODYuLjlkYmFmY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vYXJjaF9jaGVja3MuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2FyY2hfY2hlY2tzLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9hcmNoX2NoZWNrcy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoJIFJvYmluIEdldHogPHJnZXR6QGJsYWNrZmluLnVjbGludXgub3JnPgorICogRG8gc29tZSBjaGVja2luZyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSBPSwogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjVKdWwwNwotICogRGVzY3JpcHRpb246ICBEbyBzb21lIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIE9LCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9maXhlZF9jb2RlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLWMuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCmluZGV4IDRlYmJkNzguLmE2MGEyNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUtYy5jCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKaW5kZXggZDk2NjZmZS4uZWE1NDAzMSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUwpAQCAtMyw4ICszLDYgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jcHVmcmVxLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwppbmRleCA4NWM2NTgwLi4wMTUwNjUwIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NwdWZyZXEuYwpAQCAtMSwzMCArMSw5IEBACiAvKgotICogRmlsZToJIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY3B1ZnJlcS5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIEJsYWNrZmluIGNvcmUgY2xvY2sgc2NhbGluZwogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjoJIEJsYWNrZmluIGNvcmUgY2xvY2sgc2NhbGluZworICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKgkJIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6CSBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQkwMjExMC0xMzAxCVVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwppbmRleCAxZTdjYWMyLi45NGEwMzc1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCkBAIC0xLDMyICsxLDExIEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBMaW51cyBUb3J2YWxkcworICogQ29udGFpbnMgdGhlIHN5c3RlbS1jYWxsIGFuZCBmYXVsdCBsb3ctbGV2ZWwgaGFuZGxpbmcgcm91dGluZXMuCisgKiBUaGlzIGFsc28gY29udGFpbnMgdGhlIHRpbWVyLWludGVycnVwdCBoYW5kbGVyLCBhcyB3ZWxsIGFzIGFsbAorICogaW50ZXJydXB0cyBhbmQgZmF1bHRzIHRoYXQgY2FuIHJlc3VsdCBpbiBhIHRhc2stc3dpdGNoLgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBjb250YWlucyB0aGUgc3lzdGVtLWNhbGwgYW5kIGZhdWx0IGxvdy1sZXZlbCBoYW5kbGluZyByb3V0aW5lcy4KLSAqICAgICAgICAgICAgICAgVGhpcyBhbHNvIGNvbnRhaW5zIHRoZSB0aW1lci1pbnRlcnJ1cHQgaGFuZGxlciwgYXMgd2VsbCBhcyBhbGwKLSAqICAgICAgICAgICAgICAgaW50ZXJydXB0cyBhbmQgZmF1bHRzIHRoYXQgY2FuIHJlc3VsdCBpbiBhIHRhc2stc3dpdGNoLgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDYgQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qIE5PVEU6IFRoaXMgY29kZSBoYW5kbGVzIHNpZ25hbC1yZWNvZ25pdGlvbiwgd2hpY2ggaGFwcGVucyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2hlYWQuUyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCmluZGV4IDljNzlkZmUuLmNhYjBhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaGVhZC5TCkBAIC0zLDggKzMsNiBAQAogICoKICAqIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgogICoKLSAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRlcnJ1cHQuUwppbmRleCA4MmQ0MTdlLi44MDg1ZmYxIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludGVycnVwdC5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKQEAgLTEsMzEgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50ZXJydXB0LlMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOiAgICAgICBELiBKZWZmIERpb25uZSA8amVmZkByeWVoYW0uZWUucnllcnNvbi5jYT4KKyAqIEludGVycnVwdCBFbnRyaWVzCisgKgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiAgICAgICAgICAgICAgIEQuIEplZmYgRGlvbm5lIDxqZWZmQHJ5ZWhhbS5lZS5yeWVyc29uLmNhPgogICogICAgICAgICAgICAgICBLZW5uZXRoIEFsYmFub3dza2kgPGtqYWhkc0BramFoZHMuY29tPgogICoKLSAqIENyZWF0ZWQ6ICAgICAgPwotICogRGVzY3JpcHRpb246ICBJbnRlcnJ1cHQgRW50cmllcwotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCmluZGV4IDZmZmRhNzguLjY2MGVhMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaW50cy1wcmlvcml0eS5jCkBAIC0xLDMzICsxLDE0IEBACiAvKgotICogRmlsZTogICAgICAgICBhcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcwogICoKLSAqIERlc2NyaXB0aW9uOiAgU2V0IHVwIHRoZSBpbnRlcnJ1cHQgcHJpb3JpdGllcworICogQ29weXJpZ2h0ICAyMDA0LTIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICogICAgICAgICAgICAgICAgIDIwMDMgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+CisgKiAgICAgICAgICAgICAgICAgMjAwMiBBcmN0dXJ1cyBOZXR3b3JrcyBJbmMuIE1hVGVkIDxtYXRlZEBzeW1wYXRpY28uY2E+CisgKiAgICAgICAgICAgIDIwMDAtMjAwMSBMaW5lbywgSW5jLiBELiBKZWZmZiBEaW9ubmUgPGplZmZAbGluZW8uY2E+CisgKiAgICAgICAgICAgICAgICAgMTk5OSBELiBKZWZmIERpb25uZSA8amVmZkB1Y2xpbnV4Lm9yZz4KKyAqICAgICAgICAgICAgICAgICAxOTk2IFJvbWFuIFppcHBlbAogICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICAxOTk2IFJvbWFuIFppcHBlbAotICogICAgICAgICAgICAgICAxOTk5IEQuIEplZmYgRGlvbm5lIDxqZWZmQHVjbGludXgub3JnPgotICogICAgICAgICAgICAgICAyMDAwLTIwMDEgTGluZW8sIEluYy4gRC4gSmVmZmYgRGlvbm5lIDxqZWZmQGxpbmVvLmNhPgotICogICAgICAgICAgICAgICAyMDAyIEFyY3R1cnVzIE5ldHdvcmtzIEluYy4gTWFUZWQgPG1hdGVkQHN5bXBhdGljby5jYT4KLSAqICAgICAgICAgICAgICAgMjAwMyBNZXRyb3dlcmtzL01vdG9yb2xhCi0gKiAgICAgICAgICAgICAgIDIwMDMgQmFzIFZlcm1ldWxlbiA8YmFzQGJ1eXdheXMubmw+Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA0LTIwMDggQW5hbG9nIERldmljZXMgSW5jLgotICoKLSAqIEJ1Z3M6ICAgICAgICAgRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCmluZGV4IDg4M2UzMjQuLmM2NDk2MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vaXJxcGFuaWMuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2lycXBhbmljLmMKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pcnFwYW5pYy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIHBhbmljIGtlcm5lbCB3aXRoIGR1bXAgaW5mb3JtYXRpb24KICAqCi0gKiBDcmVhdGVkOiAgICAgID8KLSAqIERlc2NyaXB0aW9uOiAgcGFuaWMga2VybmVsIHdpdGggZHVtcCBpbmZvcm1hdGlvbgorICogQ29weXJpZ2h0IDIwMDUtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6ICAgICByZ2V0eiAtIGFkZGVkIGNhY2hlIGNoZWNraW5nIGNvZGUgMTRGZWIwNgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKaW5kZXggMGUzZDRmZjkuLjg4MzdiZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKQEAgLTEsMzUgKzEsMTEgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwotICogQmFzZWQgb246ICAgICBhcm0vbWFjaC1vbWFwL3BtLmMKLSAqIEF1dGhvcjogICAgICAgQ2xpZmYgQnJha2UgPGNicmFrZUBhY2NlbGVudC5jb20+IENvcHlyaWdodCAoYykgMjAwMQorICogQmxhY2tmaW4gcG93ZXIgbWFuYWdlbWVudAogICoKLSAqIENyZWF0ZWQ6ICAgICAgMjAwMQotICogRGVzY3JpcHRpb246ICBCbGFja2ZpbiBwb3dlciBtYW5hZ2VtZW50CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDogICAgIE5pY29sYXMgUGl0cmUgLSBQWEEyNTAgc3VwcG9ydAotICogICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgICAgICAgIERhdmlkIFNpbmdsZXRvbiAtIE9NQVAxNTEwCi0gKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICAgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+IC0gT01BUDE1MTAvMTYxMAotICogICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIKKyAqIGJhc2VkIG9uIGFybS9tYWNoLW9tYXAvcG0uYworICogICAgQ29weXJpZ2h0IDIwMDEsIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPiBhbmQgb3RoZXJzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCmluZGV4IDM0OWVlM2YuLmQ5ODU4NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYwpAQCAtMSwyNCArMSwxMCBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9rZXJuZWwvc21wLmMKLSAqIEF1dGhvcjogICAgICAgUGhpbGlwcGUgR2VydW0gPHJwbUB4ZW5vbWFpLm9yZz4KLSAqIElQSSBtYW5hZ2VtZW50IGJhc2VkIG9uIGFyY2gvYXJtL2tlcm5lbC9zbXAuYy4KKyAqIElQSSBtYW5hZ2VtZW50IGJhc2VkIG9uIGFyY2gvYXJtL2tlcm5lbC9zbXAuYyAoQ29weXJpZ2h0IDIwMDIgQVJNIExpbWl0ZWQpCiAgKgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNyBBbmFsb2cgRGV2aWNlcyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIFBoaWxpcHBlIEdlcnVtIDxycG1AeGVub21haS5vcmc+CiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vYmxhY2tmaW5fc3JhbS5oIGIvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmgKaW5kZXggYmMwMDYyOC4uZmIwYjE1OSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmgKQEAgLTEsMzAgKzEsOSBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmgKLSAqIEJhc2VkIG9uOiAgICAgYXJjaC9ibGFja2Zpbi9tbS9ibGFja2Zpbl9zcmFtLmMKLSAqIEF1dGhvcjogICAgICAgTWlrZSBGcnlzaW5nZXIKKyAqIExvY2FsIHByb3RvdHlwZXMgbWVhbnQgZm9yIGludGVybmFsIHVzZSBvbmx5CiAgKgotICogQ3JlYXRlZDogICAgICBBdWcgMjAwNgotICogRGVzY3JpcHRpb246ICBMb2NhbCBwcm90b3R5cGVzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seQorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogTW9kaWZpZWQ6Ci0gKiAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDA2IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaWZuZGVmIF9fQkxBQ0tGSU5fU1JBTV9IX18KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbW0vaW5pdC5jIGIvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMKaW5kZXggYjg4Y2U3Zi4uYmI5Yzk4ZiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMKQEAgLTEsMzAgKzEsNyBAQAogLyoKLSAqIEZpbGU6ICAgICAgICAgYXJjaC9ibGFja2Zpbi9tbS9pbml0LmMKLSAqIEJhc2VkIG9uOgotICogQXV0aG9yOgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoKLSAqIERlc2NyaXB0aW9uOgotICoKLSAqIE1vZGlmaWVkOgotICogICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAwNC0yMDA3IEFuYWxvZyBEZXZpY2VzIEluYy4KLSAqCi0gKiBCdWdzOiAgICAgICAgIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYyBiL2FyY2gvYmxhY2tmaW4vbW0vaXNyYW0tZHJpdmVyLmMKaW5kZXggYmViMWE2MC4uODRjZGM1YSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tbS9pc3JhbS1kcml2ZXIuYworKysgYi9hcmNoL2JsYWNrZmluL21tL2lzcmFtLWRyaXZlci5jCkBAIC0xLDE5ICsxLDkgQEAKIC8qCi0gKiBEZXNjcmlwdGlvbjogSW5zdHJ1Y3Rpb24gU1JBTSBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIHRoZSBCbGFja2ZpbgorICogSW5zdHJ1Y3Rpb24gU1JBTSBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIHRoZSBCbGFja2ZpbgogICoKICAqIENvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBCdWdzOiBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyCiAgKi8KIAogI2RlZmluZSBwcl9mbXQoZm10KSAiaXNyYW06ICIgZm10CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCmluZGV4IGViNjNhYjMuLmYwNjhjMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCkBAIC0xLDMwICsxLDkgQEAKIC8qCi0gKiBGaWxlOiAgICAgICAgIGFyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCi0gKiBCYXNlZCBvbjoKLSAqIEF1dGhvcjoKKyAqIFNSQU0gYWxsb2NhdG9yIGZvciBCbGFja2ZpbiBvbi1jaGlwIG1lbW9yeQogICoKLSAqIENyZWF0ZWQ6Ci0gKiBEZXNjcmlwdGlvbjogIFNSQU0gYWxsb2NhdG9yIGZvciBCbGFja2ZpbiBMMSBhbmQgTDIgbWVtb3J5CisgKiBDb3B5cmlnaHQgMjAwNC0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KICAqCi0gKiBNb2RpZmllZDoKLSAqICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDQtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCi0gKgotICogQnVnczogICAgICAgICBFbnRlciBidWdzIGF0IGh0dHA6Ly9ibGFja2Zpbi51Y2xpbnV4Lm9yZy8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLCBvciB3cml0ZQotICogdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMLTIgb3IgbGF0ZXIuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKaW5kZXggNmNjMWEwMy4uNTYyYjlhN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3N5bmNfc2VyaWFsLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvc3luY19zZXJpYWwuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKICNkZWZpbmUgTlVNQkVSX09GX1BPUlRTIDIKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19zZXJpYWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNfc2VyaWFsX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkud3JpdGUgICA9IHN5bmNfc2VyaWFsX3dyaXRlLAogCS5yZWFkICAgID0gc3luY19zZXJpYWxfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKaW5kZXggMmI3M2M3YS4uMzFjYTE0MSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC90aW1lLmMKQEAgLTI4LDcgKzI4LDYgQEAKIAogZXh0ZXJuIHZvaWQgdXBkYXRlX3h0aW1lX2Zyb21fY21vcyh2b2lkKTsKIGV4dGVybiBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSk7Ci1leHRlcm4gaW50IHNldHVwX2lycShpbnQsIHN0cnVjdCBpcnFhY3Rpb24gKik7CiBleHRlcm4gaW50IGhhdmVfcnRjOwogCiB1bnNpZ25lZCBsb25nIGdldF9uc19pbl9qaWZmaWUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL21hY2gtZnMvZ3Bpby5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKaW5kZXggZmUxZmRlOC4uZDg5YWI4MCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbWFjaC1mcy9ncGlvLmMKQEAgLTg1NSw3ICs4NTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9fZm9wcyA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkucG9sbCAgICAgICAgPSBncGlvX3BvbGwsCiAJLmlvY3RsICAgICAgID0gZ3Bpb19pb2N0bCwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGQyYTNmZjguLjA1OGFkZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtNTIsOCArNTIsNiBAQAogc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCogZmx1c2hfdm1hOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmx1c2hfYWRkcjsKIAotZXh0ZXJuIGludCBzZXR1cF9pcnEoaW50LCBzdHJ1Y3QgaXJxYWN0aW9uICopOwotCiAvKiBNb2RlIHJlZ2lzdGVycyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaXJxX3JlZ3NbTlJfQ1BVU10gPSB7CiAgIHJlZ2lfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwppbmRleCA2NTYzM2QwLi5iMTkyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYwpAQCAtNDYsNyArNDYsNiBAQAogCiBleHRlcm4gdm9pZCB1cGRhdGVfeHRpbWVfZnJvbV9jbW9zKHZvaWQpOwogZXh0ZXJuIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKTsKLWV4dGVybiBpbnQgc2V0dXBfaXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiBpbnQgaGF2ZV9ydGM7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1hMy9pby5jCmluZGV4IGMyMmY2N2UuLjA5MGNlYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWEzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtYTMvaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCX0sCiB9OwogCi0jZGVmaW5lIE5CUl9PRl9QT1JUUyBzaXplb2YoY3Jpc3YzMl9pb3BvcnRzKS9zaXplb2Yoc3RydWN0IGNyaXN2MzJfaW9wb3J0KQorI2RlZmluZSBOQlJfT0ZfUE9SVFMgQVJSQVlfU0laRShjcmlzdjMyX2lvcG9ydHMpCiAKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfZ3JlZW47CiBzdHJ1Y3QgY3Jpc3YzMl9pb3BpbiBjcmlzdjMyX2xlZF9uZXQwX3JlZDsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9pby5jCmluZGV4IGNiNjMyN2IuLmE2OTU4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2lvLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvaW8uYwpAQCAtNTIsNyArNTIsNyBAQAogCX0KIH07CiAKLSNkZWZpbmUgTkJSX09GX1BPUlRTIHNpemVvZihjcmlzdjMyX2lvcG9ydHMpL3NpemVvZihzdHJ1Y3QgY3Jpc3YzMl9pb3BvcnQpCisjZGVmaW5lIE5CUl9PRl9QT1JUUyBBUlJBWV9TSVpFKGNyaXN2MzJfaW9wb3J0cykKIAogc3RydWN0IGNyaXN2MzJfaW9waW4gY3Jpc3YzMl9sZWRfbmV0MF9ncmVlbjsKIHN0cnVjdCBjcmlzdjMyX2lvcGluIGNyaXN2MzJfbGVkX25ldDBfcmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKaW5kZXggZGY4NGYxNy4uZTgyOWU1YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCkBAIC0zMywxMCArMzMsMTAgQEAKIAogLyogQ1JJUyBQVEUgYml0cyAoc2VlIFJfVExCX0xPIGluIHRoZSByZWdpc3RlciBkZXNjcmlwdGlvbikKICAqCi0gKiAgIEJpdDogIDMxLTEzIDEyLS0tLS0tLTQgICAgMyAgICAgICAgMiAgICAgICAxICAgICAgIDAgIAotICogICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAqICAgICAgICB8IHBmbiB8IHJlc2VydmVkIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3ZSAgfAotICogICAgICAgIHxfX19fX3xfX19fX19fX19ffF9fX19fX19ffF9fX19fX198X19fX19fX198X19fX198CisgKiAgIEJpdDogIDMxICAgICAzMC0xMyAxMi0tLS0tLS00ICAgIDMgICAgICAgIDIgICAgICAgMSAgICAgICAwCisgKiAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAqICAgICAgICB8IGNhY2hlIHxwZm4gfCByZXNlcnZlZCB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd2UgIHwKKyAqICAgICAgICB8X19fX19fX3xfX19ffF9fX19fX19fX198X19fX19fX198X19fX19fX3xfX19fX19fX3xfX19fX3wKICAqCiAgKiAocGZuID0gcGh5c2ljYWwgZnJhbWUgbnVtYmVyKQogICovCkBAIC01Myw2ICs1Myw3IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElECSAgICgxPDwyKSAvKiBwYWdlIGlzIHZhbGlkICovCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFEICAoMTw8MikgLyogc3lub255bSAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgKDE8PDMpIC8qIGdsb2JhbCBwYWdlIC0gY29udGV4dCBpcyBpZ25vcmVkICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCSAgICgxPDwzMSkgLyogcGFydCBvZiB0aGUgdW5jYWNoZWQgbWVtb3J5IG1hcCAqLwogCiAvKiBCaXRzIHRoZSBIVyBkb2Vzbid0IGNhcmUgYWJvdXQgYnV0IHRoZSBrZXJuZWwgdXNlcyB0aGVtIGluIFNXICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCmluZGV4IDZiY2RjM2YuLmMxYTEzZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaApAQCAtMjgsMTAgKzI4LDEwIEBACiAvKgogICogQ1JJU3YzMiBQVEUgYml0czoKICAqCi0gKiAgQml0OiAgMzEtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwotICogICAgICAgfCBwZm4gfCB6ZXJvIHwgZ2xvYmFsIHwgdmFsaWQgfCBrZXJuZWwgfCB3cml0ZSB8IGV4ZWN1dGUgfAotICogICAgICAgKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKworICogIEJpdDogICAzMSAgICAgMzAtMTMgIDEyLTUgICAgIDQgICAgICAgIDMgICAgICAgMiAgICAgICAgMSAgICAgICAgMAorICogICAgICAgKy0tLS0tLS0rLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0rCisgKiAgICAgICB8IGNhY2hlIHwgcGZuIHwgemVybyB8IGdsb2JhbCB8IHZhbGlkIHwga2VybmVsIHwgd3JpdGUgfCBleGVjdXRlIHwKKyAqICAgICAgICstLS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tKwogICovCiAKIC8qCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIF9QQUdFX1ZBTElEICAgICAgICAgKDEgPDwgMykJLyogUGFnZSBpcyB2YWxpZC4gKi8KICNkZWZpbmUgX1BBR0VfU0lMRU5UX1JFQUQgICAoMSA8PCAzKQkvKiBTYW1lIGFzIGFib3ZlLiAqLwogI2RlZmluZSBfUEFHRV9HTE9CQUwgICAgICAgICgxIDw8IDQpCS8qIEdsb2JhbCBwYWdlLiAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkgICAgKDEgPDwgMzEpCS8qIHBhcnQgb2YgdGhlIHVuY2FjaGVkIG1lbW9yeSBtYXAgKi8KKwogCiAvKgogICogVGhlIGhhcmR3YXJlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGVzZSBiaXRzLCBidXQgdGhlIGtlcm5lbCB1c2VzIHRoZW0gaW4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDc0MTc4YWQuLjE3YmIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMiwxNiArMiw2IEBACiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+IC8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKICNkZWZpbmUgSEFSRElSUV9CSVRTCTgKIApAQCAtMjQsNCArMTQsNiBAQAogIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKICNlbmRpZgogCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgorCiAjZW5kaWYgLyogX19BU01fSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1MGFhOTc0Li4xZmNjZTAwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE5Nyw2ICsxOTcsOCBAQAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKIHsgcHRlX3ZhbChwdGUpID0gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0NIR19NQVNLKSB8IHBncHJvdF92YWwobmV3cHJvdCk7IHJldHVybiBwdGU7IH0KIAorI2RlZmluZSBwZ3Byb3Rfbm9uY2FjaGVkKHByb3QpIF9fcGdwcm90KChwZ3Byb3RfdmFsKHByb3QpIHwgX1BBR0VfTk9fQ0FDSEUpKQorCiAKIC8qIHB0ZV92YWwgcmVmZXJzIHRvIGEgcGFnZSBpbiB0aGUgMHg0eHh4eHh4eCBwaHlzaWNhbCBEUkFNIGludGVydmFsCiAgKiBfX3B0ZV9wYWdlKHB0ZV92YWwpIHJlZmVycyB0byB0aGUgInZpcnR1YWwiIERSQU0gaW50ZXJ2YWwKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDdmNjQyZmMuLjBjYTdkOTggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtMzgsMTEgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi12b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcHJpbnRrKCJ1bmV4cGVjdGVkIElSUSB0cmFwIGF0IHZlY3RvciAlMDJ4XG4iLCBpcnEpOwotfQotCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKIAlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggNmM4MTgzNi4uYmJmZGE2NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTEsMTAgKzUxLDcgQEAKIAlfZXRleHQgPSAuIDsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uLiAqLwogCV9fZXRleHQgPSAuOwogCi0JLiA9IEFMSUdOKDQpOwkJCS8qIEV4Y2VwdGlvbiB0YWJsZS4gKi8KLQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCV9fZXhfdGFibGUgOiB7ICooX19leF90YWJsZSkgfQotCV9fc3RvcF9fX2V4X3RhYmxlID0gLjsKKwlFWENFUFRJT05fVEFCTEUoNCkKIAogCVJPREFUQQogCkBAIC02NywzNiArNjQsMjQgQEAKIAlfX2VkYXRhID0gLiA7CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbi4gKi8KIAlfZWRhdGEgPSAuIDsKIAotCS4gPSBBTElHTihQQUdFX1NJWkUpOwkvKiBpbml0X3Rhc2sgYW5kIHN0YWNrLCBtdXN0IGJlIGFsaWduZWQuICovCi0JLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQorCUlOSVRfVEFTS19EQVRBX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEuICovCiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogewotCQkgICBfc2luaXR0ZXh0ID0gLjsKLQkJICAgSU5JVF9URVhUCi0JCSAgIF9laW5pdHRleHQgPSAuOwotCX0KKwlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJLmluaXQuZGF0YSA6IHsgSU5JVF9EQVRBIH0KLQkuID0gQUxJR04oMTYpOwotCV9fc2V0dXBfc3RhcnQgPSAuOwotCS5pbml0LnNldHVwIDogeyAqKC5pbml0LnNldHVwKSB9Ci0JX19zZXR1cF9lbmQgPSAuOworCS5pbml0LnNldHVwIDogeyBJTklUX1NFVFVQKDE2KSB9CiAjaWZkZWYgQ09ORklHX0VUUkFYX0FSQ0hfVjMyCiAJX19zdGFydF9fX3BhcmFtID0gLjsKIAlfX3BhcmFtIDogeyAqKF9fcGFyYW0pIH0KIAlfX3N0b3BfX19wYXJhbSA9IC47CiAjZW5kaWYKIAkuaW5pdGNhbGwuaW5pdCA6IHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47CisJCUlOSVRfQ0FMTFMKIAl9CiAKIAkuY29uX2luaXRjYWxsLmluaXQgOiB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAlTRUNVUklUWV9JTklUCiAKQEAgLTExNCw5ICs5OSw3IEBACiAJUEVSQ1BVKFBBR0VfU0laRSkKIAogCS5pbml0LnJhbWZzIDogewotCQlfX2luaXRyYW1mc19zdGFydCA9IC47Ci0JCSooLmluaXQucmFtZnMpCi0JCV9faW5pdHJhbWZzX2VuZCA9IC47CisJCUlOSVRfUkFNX0ZTCiAJfQogI2VuZGlmCiAKQEAgLTEzMCwxMSArMTEzLDcgQEAKIAlfX2luaXRfZW5kID0gLjsKIAogCV9fZGF0YV9lbmQgPSAuIDsJCS8qIE1vdmUgdG8gX2VkYXRhID8gKi8KLQlfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MuICovCi0JLmJzcyA6IHsKLQkJKihDT01NT04pCi0JCSooLmJzcykKLQl9CisJQlNTX1NFQ1RJT04oMCwgMCwgMCkKIAogCS4gPSAgQUxJR04gKDB4MjApOwogCV9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9mcnYva2VybmVsL3NpZ25hbC5jCmluZGV4IDZiMGEyYjYuLjA5NzRjMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2lnbmFsLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCiBub19zaWduYWw6CiAJLyogRGlkIHdlIGNvbWUgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwotCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gPj0gMCkgeworCWlmIChfX2ZyYW1lLT5zeXNjYWxsbm8gIT0gLTEpIHsKIAkJLyogUmVzdGFydCB0aGUgc3lzdGVtIGNhbGwgLSBubyBoYW5kbGVycyBwcmVzZW50ICovCiAJCXN3aXRjaCAoX19mcmFtZS0+Z3I4KSB7CiAJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL01ha2VmaWxlCmluZGV4IDc2NTk1ZTguLmI3M2I1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9NYWtlZmlsZQorKysgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvTWFrZWZpbGUKQEAgLTExLDMgKzExLDUgQEAKIG9iai15ICs9IHBjaS1kbWEtbm9tbXUubwogZW5kaWYKIGVuZGlmCisKK29iai0kKENPTkZJR19NVEQpICs9IGZsYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL2ZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBlMzcwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9mbGFzaC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEZsYXNoIG1hcHBpbmdzIGZvciB0aGUgTUI5MzA5MC1NQjAwIG1vdGhlcmJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjZGVmaW5lIE1COTMwOTBfQk9PVFJPTV9BRERSCTB4RkYwMDAwMDAJLyogQm9vdCBST00gKi8KKyNkZWZpbmUgTUI5MzA5MF9CT09UUk9NX1NJWkUJKDIgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgTUI5MzA5MF9VU0VSUk9NX0FERFIJMHhGRjIwMDAwMAkvKiBVc2VyIFJPTSAqLworI2RlZmluZSBNQjkzMDkwX1VTRVJST01fU0laRQkoMiAqIDEwMjQgKiAxMDI0KQorCisvKgorICogZGVmYXVsdCBNVEQgcGFydGl0aW9uIHRhYmxlIGZvciBib3RoIG1haW4gZmxhc2ggZGV2aWNlcywgZXhwZWN0ZWQgdG8gYmUKKyAqIG92ZXJyaWRkZW4gYnkgUmVkQm9vdAorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbWI5MzA5MF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiRmlsZXN5c3RlbSIsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5vZmZzZXQJCT0gMCwKKwl9Cit9OworCisvKgorICogRGVmaW5pdGlvbiBvZiB0aGUgTUI5MzA5MCBCb290IFJPTSAob24gdGhlIENQVSBjYXJkKQorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBtYjkzMDkwX2Jvb3Ryb21fZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkubnJfcGFydHMJPSAyLAorCS5wYXJ0cwkJPSBtYjkzMDkwX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTUI5MzA5MF9CT09UUk9NX0FERFIsCisJLmVuZAkJPSBNQjkzMDkwX0JPT1RST01fQUREUiArIE1COTMwOTBfQk9PVFJPTV9TSVpFIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtYjkzMDkwX2Jvb3Ryb20gPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YSA9ICZtYjkzMDkwX2Jvb3Ryb21fZGF0YSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJm1iOTMwOTBfYm9vdHJvbV9yZXNvdXJjZSwKK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBNQjkzMDkwIFVzZXIgUk9NIGRlZmluaXRpb24gKG9uIHRoZSBtb3RoZXJib2FyZCkKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWI5MzA5MF91c2Vycm9tX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLm5yX3BhcnRzCT0gMiwKKwkucGFydHMJCT0gbWI5MzA5MF9wYXJ0aXRpb25zLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IE1COTMwOTBfVVNFUlJPTV9BRERSLAorCS5lbmQJCT0gTUI5MzA5MF9VU0VSUk9NX0FERFIgKyBNQjkzMDkwX1VTRVJST01fU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbWI5MzA5MF91c2Vycm9tID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbWI5MzA5MF91c2Vycm9tX2RhdGEsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZtYjkzMDkwX3VzZXJyb21fcmVzb3VyY2UsCit9OworCisvKgorICogcmVnaXN0ZXIgdGhlIE1COTMwOTAgZmxhc2hlcworICovCitzdGF0aWMgaW50IF9faW5pdCBtYjkzMDkwX210ZF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtYjkzMDkwX2Jvb3Ryb20pOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbWI5MzA5MF91c2Vycm9tKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobWI5MzA5MF9tdGRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2NjJiMDJlLi5iOWUyNDkwNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xLDUgKzEsNiBAQAogI2RlZmluZSBWTUxJTlVYX1NZTUJPTChfc3ltXykgXyMjX3N5bV8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIHRhcmdldCBtZW1vcnkgbWFwICovCiAjaWZkZWYgQ09ORklHX0g4MzAwSF9HRU5FUklDCkBAIC03OSwxMSArODAsOCBAQAogCVNDSEVEX1RFWFQKIAlMT0NLX1RFWFQKIAlfX2V0ZXh0ID0gLiA7Ci0JLiA9IEFMSUdOKDE2KTsgICAgICAgICAgLyogRXhjZXB0aW9uIHRhYmxlICAgICAgICAgICAgICAqLwotCV9fX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCQkqKF9fZXhfdGFibGUpCi0JX19fc3RvcF9fX2V4X3RhYmxlID0gLjsKIAl9CisJRVhDRVBUSU9OX1RBQkxFKDE2KQogCiAJUk9EQVRBCiAjaWYgZGVmaW5lZChDT05GSUdfUk9NS0VSTkVMKQpAQCAtMTAwLDggKzk4LDcgQEAKIAlfX3NkYXRhID0gLiA7CiAJX19fZGF0YV9zdGFydCA9IC4gOwogCi0JLiA9IEFMSUdOKDB4MjAwMCkgOwotCQkqKC5kYXRhLmluaXRfdGFzaykKKwlJTklUX1RBU0tfREFUQSgweDIwMDApCiAJLiA9IEFMSUdOKDB4NCkgOwogCQlEQVRBX0RBVEEKIAkuID0gQUxJR04oMHg0KSA7CkBAIC0xMTQsMjQgKzExMSwxNiBAQAogCV9fZWluaXR0ZXh0ID0gLjsgCiAJCUlOSVRfREFUQQogCS4gPSBBTElHTigweDQpIDsKKwlJTklUX1NFVFVQKDB4NCkKIAlfX19zZXR1cF9zdGFydCA9IC47CiAJCSooLmluaXQuc2V0dXApCiAJLiA9IEFMSUdOKDB4NCkgOwogCV9fX3NldHVwX2VuZCA9IC47Ci0JX19faW5pdGNhbGxfc3RhcnQgPSAuOwotCQlJTklUQ0FMTFMKLQlfX19pbml0Y2FsbF9lbmQgPSAuOwotCV9fX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCV9fX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCUlOSVRfQ0FMTFMKKwlDT05fSU5JVENBTEwKIAkJRVhJVF9URVhUCiAJCUVYSVRfREFUQQotI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSU5JVFJEKQotCQkuID0gQUxJR04oNCk7Ci0JX19faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLSAgCQkqKC5pbml0LnJhbWZzKQotICAJX19faW5pdHJhbWZzX2VuZCA9IC47Ci0jZW5kaWYKKwlJTklUX1JBTV9GUwogCS4gPSBBTElHTigweDQpIDsKIAlfX19pbml0X2VuZCA9IC47CiAJX19lZGF0YSA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA2ODUxZTUyLi4xZWU1OTZjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNjAsOSArNjAsNyBAQAogICAgICAgIGJvb2wKIAogY29uZmlnIEdFTkVSSUNfTE9DS0JSRUFLCi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gU01QICYmIFBSRUVNUFQKKwlkZWZfYm9vbCBuCiAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL2JpbmZtdF9lbGYzMi5jIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKaW5kZXggZjkyYmRhYS4uYzY5NTUyYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvYmluZm10X2VsZjMyLmMKQEAgLTY5LDExICs2OSwxMSBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaWEzMl9zaGFyZWRfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfc2hhcmVkX3BhZ2Vfdm1fb3BzID0gewogCS5mYXVsdCA9IGlhMzJfaW5zdGFsbF9zaGFyZWRfcGFnZQogfTsKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpYTMyX2dhdGVfcGFnZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlhMzJfZ2F0ZV9wYWdlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpYTMyX2luc3RhbGxfZ2F0ZV9wYWdlCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAwZjgyY2MyLi45MWRmOTY4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgKQEAgLTg5LDEwICs4OSwxMiBAQAogI2RlZmluZSBBQ1BJX1JFTEVBU0VfR0xPQkFMX0xPQ0soZmFjcywgQWNxKQkJCQlcCiAJKChBY3EpID0gaWE2NF9hY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soJmZhY3MtPmdsb2JhbF9sb2NrKSkKIAorI2lmZGVmCUNPTkZJR19BQ1BJCiAjZGVmaW5lIGFjcGlfZGlzYWJsZWQgMAkvKiBBQ1BJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9ub2lycSAwCS8qIEFDUEkgYWx3YXlzIGVuYWJsZWQgb24gSUE2NCAqLwogI2RlZmluZSBhY3BpX3BjaV9kaXNhYmxlZCAwIC8qIEFDUEkgUENJIGFsd2F5cyBlbmFibGVkIG9uIElBNjQgKi8KICNkZWZpbmUgYWNwaV9zdHJpY3QgMQkvKiBubyBBQ1BJIHNwZWMgd29ya2Fyb3VuZHMgb24gSUE2NCAqLworI2VuZGlmCiAjZGVmaW5lIGFjcGlfcHJvY2Vzc29yX2NzdGF0ZV9jaGVjayh4KSAoeCkgLyogbm8gaWRsZSBsaW1pdHMgb24gSUE2NCA6KSAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfYWNwaSh2b2lkKSB7IH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAxM2FiNzE1Li4yMzllY2RjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTksMTAzICsxOSwxMjYgQEAKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfaW5pdCh4KQkJCSgoeCktPmxvY2sgPSAwKQogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAogLyoKLSAqIFRyeSB0byBnZXQgdGhlIGxvY2suICBJZiB3ZSBmYWlsIHRvIGdldCB0aGUgbG9jaywgbWFrZSBhIG5vbi1zdGFuZGFyZCBjYWxsIHRvCi0gKiBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb24oKS4gIFdlIGRvIG5vdCB1c2UgYSBub3JtYWwgY2FsbCBiZWNhdXNlIHRoYXQgd291bGQgZm9yY2UgYWxsCi0gKiBjYWxsZXJzIG9mIF9fcmF3X3NwaW5fbG9jaygpIHRvIGJlIG5vbi1sZWFmIHJvdXRpbmVzLiAgSW5zdGVhZCwgaWE2NF9zcGlubG9ja19jb250ZW50aW9uKCkgaXMKLSAqIGNhcmVmdWxseSBjb2RlZCB0byB0b3VjaCBvbmx5IHRob3NlIHJlZ2lzdGVycyB0aGF0IF9fcmF3X3NwaW5fbG9jaygpIG1hcmtzICJjbG9iYmVyZWQiLgorICogVGlja2V0IGxvY2tzIGFyZSBjb25jZXB0dWFsbHkgdHdvIHBhcnRzLCBvbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCBoZWFkIG9mCisgKiB0aGUgcXVldWUsIGFuZCB0aGUgb3RoZXIgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0YWlsLiBUaGUgbG9jayBpcyBhY3F1aXJlZAorICogYnkgYXRvbWljYWxseSBub3RpbmcgdGhlIHRhaWwgYW5kIGluY3JlbWVudGluZyBpdCBieSBvbmUgKHRodXMgYWRkaW5nCisgKiBvdXJzZWxmIHRvIHRoZSBxdWV1ZSBhbmQgbm90aW5nIG91ciBwb3NpdGlvbiksIHRoZW4gd2FpdGluZyB1bnRpbCB0aGUgaGVhZAorICogYmVjb21lcyBlcXVhbCB0byB0aGUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRhaWwuCisgKiBUaGUgcGFkIGJpdHMgaW4gdGhlIG1pZGRsZSBhcmUgdXNlZCB0byBwcmV2ZW50IHRoZSBuZXh0X3RpY2tldCBudW1iZXIKKyAqIG92ZXJmbG93aW5nIGludG8gdGhlIG5vd19zZXJ2aW5nIG51bWJlci4KKyAqCisgKiAgIDMxICAgICAgICAgICAgIDE3ICAxNiAgICAxNSAgMTQgICAgICAgICAgICAgICAgICAgIDAKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICB8ICBub3dfc2VydmluZyAgICAgfCBwYWRkaW5nIHwgICBuZXh0X3RpY2tldCAgICAgICAgIHwKKyAqICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAqLwogCi0jZGVmaW5lIElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMgImFyLmNjdiIsICJhci5wZnMiLCAicDE0IiwgInAxNSIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAiYjYiLCAibWVtb3J5IgorI2RlZmluZSBUSUNLRVRfU0hJRlQJMTcKKyNkZWZpbmUgVElDS0VUX0JJVFMJMTUKKyNkZWZpbmUJVElDS0VUX01BU0sJKCgxIDw8IFRJQ0tFVF9CSVRTKSAtIDEpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotX19yYXdfc3Bpbl9sb2NrX2ZsYWdzIChyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3RpY2tldF9zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7Ci0JcmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpwdHIgYXNtICgicjMxIikgPSAmbG9jay0+bG9jazsKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldCwgc2VydmU7CiAKLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0jIGlmZGVmIENPTkZJR19JVEFOSVVNCi0JLyogZG9uJ3QgdXNlIGJybCBvbiBJdGFuaXVtLi4uICovCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Zcblx0IgotCQkgICAgICAibW92bCByMjkgPSBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180Oztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICJtb3YgcjI3PSUyXG5cdCIKLQkJICAgICAgIihwMTQpIGJyLmNvbmQuc3BudC5tYW55IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgie1xuXHQiCi0JCSAgICAgICIgIG1vdiBhci5jY3YgPSByMFxuXHQiCi0JCSAgICAgICIgIG1vdiByMjggPSBpcFxuXHQiCi0JCSAgICAgICIgIG1vdiByMzAgPSAxOztcblx0IgotCQkgICAgICAifVxuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUxXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAiKHAxNCkgYnJsLmNvbmQuc3BudC5tYW55IGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZWxzZQotIyBpZmRlZiBDT05GSUdfSVRBTklVTQotCS8qIGRvbid0IHVzZSBicmwgb24gSXRhbml1bS4uLiAqLwotCS8qIG1pcy1kZWNsYXJlLCBzbyB3ZSBnZXQgdGhlIGVudHJ5LXBvaW50LCBub3QgaXQncyBmdW5jdGlvbiBkZXNjcmlwdG9yOiAqLwotCWFzbSB2b2xhdGlsZSAoIm1vdiByMzAgPSAxXG5cdCIKLQkJICAgICAgIm1vdiByMjc9JTJcblx0IgotCQkgICAgICAibW92IGFyLmNjdiA9IHIwOztcblx0IgotCQkgICAgICAiY21weGNoZzQuYWNxIHIzMCA9IFslMF0sIHIzMCwgYXIuY2N2XG5cdCIKLQkJICAgICAgIm1vdmwgcjI5ID0gaWE2NF9zcGlubG9ja19jb250ZW50aW9uOztcblx0IgotCQkgICAgICAiY21wNC5uZSBwMTQsIHAwID0gcjMwLCByMFxuXHQiCi0JCSAgICAgICJtb3YgYjYgPSByMjk7O1xuXHQiCi0JCSAgICAgICIocDE0KSBici5jYWxsLnNwbnQubWFueSBiNiA9IGI2IgotCQkgICAgICA6ICI9ciIocHRyKSA6ICJyIihwdHIpLCAiciIgKGZsYWdzKSA6IElBNjRfU1BJTkxPQ0tfQ0xPQkJFUlMpOwotIyBlbHNlCi0JYXNtIHZvbGF0aWxlICgibW92IHIzMCA9IDFcblx0IgotCQkgICAgICAibW92IHIyNz0lMlxuXHQiCi0JCSAgICAgICJtb3YgYXIuY2N2ID0gcjA7O1xuXHQiCi0JCSAgICAgICJjbXB4Y2hnNC5hY3EgcjMwID0gWyUwXSwgcjMwLCBhci5jY3Y7O1xuXHQiCi0JCSAgICAgICJjbXA0Lm5lIHAxNCwgcDAgPSByMzAsIHIwXG5cdCIKLQkJICAgICAgIihwMTQpIGJybC5jYWxsLnNwbnQubWFueSBiNj1pYTY0X3NwaW5sb2NrX2NvbnRlbnRpb247OyIKLQkJICAgICAgOiAiPXIiKHB0cikgOiAiciIocHRyKSwgInIiIChmbGFncykgOiBJQTY0X1NQSU5MT0NLX0NMT0JCRVJTKTsKLSMgZW5kaWYgLyogQ09ORklHX01DS0lOTEVZICovCi0jZW5kaWYKKwl0aWNrZXQgPSBpYTY0X2ZldGNoYWRkKDEsIHAsIGFjcSk7CisKKwlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuOworCisJaWE2NF9pbnZhbGEoKTsKKworCWZvciAoOzspIHsKKwkJYXNtIHZvbGF0aWxlICgibGQ0LmMubmMgJTA9WyUxXSIgOiAiPXIiKHNlcnZlKSA6ICJyIihwKSA6ICJtZW1vcnkiKTsKKworCQlpZiAoISgoKHNlcnZlID4+IFRJQ0tFVF9TSElGVCkgXiB0aWNrZXQpICYgVElDS0VUX01BU0spKQorCQkJcmV0dXJuOworCQljcHVfcmVsYXgoKTsKKwl9CiB9CiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCAwKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX190aWNrZXRfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCWludCB0bXAgPSBBQ0NFU1NfT05DRShsb2NrLT5sb2NrKTsKIAotLyogVW5sb2NrIGJ5IGRvaW5nIGFuIG9yZGVyZWQgc3RvcmUgYW5kIHJlbGVhc2luZyB0aGUgY2FjaGVsaW5lIHdpdGggbnRhICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKngpIHsKLQliYXJyaWVyKCk7Ci0JYXNtIHZvbGF0aWxlICgic3Q0LnJlbC5udGEgWyUwXSA9IHIwXG5cdCIgOjogInIiKHgpKTsKKwlpZiAoISgoKHRtcCA+PiBUSUNLRVRfU0hJRlQpIF4gdG1wKSAmIFRJQ0tFVF9NQVNLKSkKKwkJcmV0dXJuIGlhNjRfY21weGNoZyhhY3EsICZsb2NrLT5sb2NrLCB0bXAsIHRtcCArIDEsIHNpemVvZiAodG1wKSkgPT0gdG1wOworCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwotI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQotIyBkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKHgpCQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJCQlcCi0JX191MzIgKmlhNjRfc3BpbmxvY2tfcHRyID0gKF9fdTMyICopICh4KTsJCQkJCVwKLQlfX3U2NCBpYTY0X3NwaW5sb2NrX3ZhbDsJCQkJCQkJXAotCWlhNjRfc3BpbmxvY2tfdmFsID0gaWE2NF9jbXB4Y2hnNF9hY3EoaWE2NF9zcGlubG9ja19wdHIsIDEsIDApOwkJCVwKLQlpZiAodW5saWtlbHkoaWE2NF9zcGlubG9ja192YWwpKSB7CQkJCQkJXAotCQlkbyB7CQkJCQkJCQkJXAotCQkJd2hpbGUgKCppYTY0X3NwaW5sb2NrX3B0cikJCQkJCVwKLQkJCQlpYTY0X2JhcnJpZXIoKTsJCQkJCQlcCi0JCQlpYTY0X3NwaW5sb2NrX3ZhbCA9IGlhNjRfY21weGNoZzRfYWNxKGlhNjRfc3BpbmxvY2tfcHRyLCAxLCAwKTsJXAotCQl9IHdoaWxlIChpYTY0X3NwaW5sb2NrX3ZhbCk7CQkJCQkJXAotCX0JCQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2soeCkJZG8geyBiYXJyaWVyKCk7ICgocmF3X3NwaW5sb2NrX3QgKikgeCktPmxvY2sgPSAwOyB9IHdoaWxlICgwKQotI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgc2hvcnQJKnAgPSAodW5zaWduZWQgc2hvcnQgKikmbG9jay0+bG9jayArIDEsIHRtcDsKIAotI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KQkJKCh4KS0+bG9jayAhPSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3RyeWxvY2soeCkJCShjbXB4Y2hnX2FjcSgmKHgpLT5sb2NrLCAwLCAxKSA9PSAwKQotI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spIFwKLQlkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCisJYXNtIHZvbGF0aWxlICgibGQyLmJpYXMgJTA9WyUxXSIgOiAiPXIiKHRtcCkgOiAiciIocCkpOworCUFDQ0VTU19PTkNFKCpwKSA9ICh0bXAgKyAyKSAmIH4xOworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX190aWNrZXRfc3Bpbl91bmxvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlpbnQJKnAgPSAoaW50ICopJmxvY2stPmxvY2ssIHRpY2tldDsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIih0aWNrZXQpIDogInIiKHApIDogIm1lbW9yeSIpOworCQlpZiAoISgoKHRpY2tldCA+PiBUSUNLRVRfU0hJRlQpIF4gdGlja2V0KSAmIFRJQ0tFVF9NQVNLKSkKKwkJCXJldHVybjsKKwkJY3B1X3JlbGF4KCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICEhKCgodG1wID4+IFRJQ0tFVF9TSElGVCkgXiB0bXApICYgVElDS0VUX01BU0spOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX3RpY2tldF9zcGluX2lzX2NvbnRlbmRlZChyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlsb25nIHRtcCA9IEFDQ0VTU19PTkNFKGxvY2stPmxvY2spOworCisJcmV0dXJuICgodG1wIC0gKHRtcCA+PiBUSUNLRVRfU0hJRlQpKSAmIFRJQ0tFVF9NQVNLKSA+IDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3NwaW5faXNfbG9ja2VkKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX2lzX2xvY2tlZChsb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl9pc19jb250ZW5kZWQocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJcmV0dXJuIF9fdGlja2V0X3NwaW5faXNfY29udGVuZGVkKGxvY2spOworfQorI2RlZmluZSBfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAlfX3Jhd19zcGluX2lzX2NvbnRlbmRlZAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fbG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpsb2NrKQoreworCXJldHVybiBfX3RpY2tldF9zcGluX3RyeWxvY2sobG9jayk7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlfX3RpY2tldF9zcGluX3VubG9jayhsb2NrKTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19zcGluX2xvY2sobG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19zcGluX3VubG9ja193YWl0KHJhd19zcGlubG9ja190ICpsb2NrKQoreworCV9fdGlja2V0X3NwaW5fdW5sb2NrX3dhaXQobG9jayk7Cit9CiAKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykJCSgqKHZvbGF0aWxlIGludCAqKShydykgPj0gMCkKICNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2socncpCSgqKHZvbGF0aWxlIGludCAqKShydykgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggMWE2ZTQ0NS4uNjk2ZWZmMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTExMzAsOTUgKzExMzAsNiBAQAogI2VuZGlmIC8qIENPTkZJR19JQTY0X0JSTF9FTVUgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLQkvKgotCSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIHNwaW5sb2NrIGNvbnRlbnRpb24uICBJdCB1c2VzIGEgbm9uLXN0YW5kYXJkIGNhbGxpbmcKLQkgKiBjb252ZW50aW9uIHRvIGF2b2lkIGNvbnZlcnRpbmcgbGVhZiByb3V0aW5lcyBpbnRvIGludGVyaW9yIHJvdXRpbmVzLiAgQmVjYXVzZQotCSAqIG9mIHRoaXMgc3BlY2lhbCBjb252ZW50aW9uLCB0aGVyZSBhcmUgc2V2ZXJhbCByZXN0cmljdGlvbnM6Ci0JICoKLQkgKiAtIGRvIG5vdCB1c2UgZ3AgcmVsYXRpdmUgdmFyaWFibGVzLCB0aGlzIGNvZGUgaXMgY2FsbGVkIGZyb20gdGhlIGtlcm5lbAotCSAqICAgYW5kIGZyb20gbW9kdWxlcywgcjEgaXMgdW5kZWZpbmVkLgotCSAqIC0gZG8gbm90IHVzZSBzdGFja2VkIHJlZ2lzdGVycywgdGhlIGNhbGxlciBvd25zIHRoZW0uCi0JICogLSBkbyBub3QgdXNlIHRoZSBzY3JhdGNoIHN0YWNrIHNwYWNlLCB0aGUgY2FsbGVyIG93bnMgaXQuCi0JICogLSBkbyBub3QgdXNlIGFueSByZWdpc3RlcnMgb3RoZXIgdGhhbiB0aGUgb25lcyBsaXN0ZWQgYmVsb3cKLQkgKgotCSAqIElucHV0czoKLQkgKiAgIGFyLnBmcyAtIHNhdmVkIENGTSBvZiBjYWxsZXIKLQkgKiAgIGFyLmNjdiAtIDAgKGFuZCBhdmFpbGFibGUgZm9yIHVzZSkKLQkgKiAgIHIyNyAgICAtIGZsYWdzIGZyb20gc3Bpbl9sb2NrX2lycXNhdmUgb3IgMC4gIE11c3QgYmUgcHJlc2VydmVkLgotCSAqICAgcjI4ICAgIC0gYXZhaWxhYmxlIGZvciB1c2UuCi0JICogICByMjkgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHIzMCAgICAtIGF2YWlsYWJsZSBmb3IgdXNlLgotCSAqICAgcjMxICAgIC0gYWRkcmVzcyBvZiBsb2NrLCBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIGI2ICAgICAtIHJldHVybiBhZGRyZXNzCi0JICogICBwMTQgICAgLSBhdmFpbGFibGUgZm9yIHVzZS4KLQkgKiAgIHAxNSAgICAtIHVzZWQgdG8gdHJhY2sgZmxhZyBzdGF0dXMuCi0JICoKLQkgKiBJZiB5b3UgcGF0Y2ggdGhpcyBjb2RlIHRvIHVzZSBtb3JlIHJlZ2lzdGVycywgZG8gbm90IGZvcmdldCB0byB1cGRhdGUKLQkgKiB0aGUgY2xvYmJlciBsaXN0cyBmb3Igc3Bpbl9sb2NrKCkgaW4gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmguCi0JICovCi0KLSNpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0KLUdMT0JBTF9FTlRSWShpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KQotCS5wcm9sb2d1ZQotCS5zYXZlIGFyLnBmcywgcjAJLy8gdGhpcyBjb2RlIGVmZmVjdGl2ZWx5IGhhcyBhIHplcm8gZnJhbWUgc2l6ZQotCS5zYXZlIHJwLCByMjgKLQkuYm9keQotCW5vcCAwCi0JdGJpdC5ueiBwMTUscDA9cjI3LElBNjRfUFNSX0lfQklUCi0JLnJlc3RvcmUgc3AJCS8vIHBvcCBleGlzdGluZyBwcm9sb2d1ZSBhZnRlciBuZXh0IGluc24KLQltb3YgYjYgPSByMjgKLQkucHJvbG9ndWUKLQkuc2F2ZSBhci5wZnMsIHIwCi0JLmFsdHJwIGI2Ci0JLmJvZHkKLQk7OwotKHAxNSkJc3NtIHBzci5pCQkvLyByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZXkgd2VyZSBvbgotCQkJCS8vIERhdmlkTSBzYXlzIHRoYXQgc3Jsei5kIGlzIHNsb3cgYW5kIGlzIG5vdCByZXF1aXJlZCBpbiB0aGlzIGNhc2UKLS53YWl0OgotCS8vIGV4cG9uZW50aWFsIGJhY2tvZmYsIGtkYiwgbG9ja21ldGVyIGV0Yy4gZ28gaW4gaGVyZQotCWhpbnQgQHBhdXNlCi0JbGQ0IHIzMD1bcjMxXQkJLy8gZG9uJ3QgdXNlIGxkNC5iaWFzOyBpZiBpdCdzIGNvbnRlbmRlZCwgd2Ugd29uJ3Qgd3JpdGUgdGhlIHdvcmQKLQlub3AgMAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0ocDE0KQlici5jb25kLnNwdGsuZmV3IC53YWl0Ci0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCWJyLmNvbmQuc3B0ay5mZXcgYjYJLy8gbG9jayBpcyBub3cgZnJlZSwgdHJ5IHRvIGFjcXVpcmUKLQkuZ2xvYmFsIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzRfZW5kCS8vIGZvciBrZXJucHJvZgotaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNF9lbmQ6Ci1FTkQoaWE2NF9zcGlubG9ja19jb250ZW50aW9uX3ByZTNfNCkKLQotI2Vsc2UKLQotR0xPQkFMX0VOVFJZKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQkucHJvbG9ndWUKLQkuYWx0cnAgYjYKLQkuYm9keQotCXRiaXQubnogcDE1LHAwPXIyNyxJQTY0X1BTUl9JX0JJVAotCTs7Ci0ud2FpdDoKLShwMTUpCXNzbSBwc3IuaQkJLy8gcmVlbmFibGUgaW50ZXJydXB0cyBpZiB0aGV5IHdlcmUgb24KLQkJCQkvLyBEYXZpZE0gc2F5cyB0aGF0IHNybHouZCBpcyBzbG93IGFuZCBpcyBub3QgcmVxdWlyZWQgaW4gdGhpcyBjYXNlCi0ud2FpdDI6Ci0JLy8gZXhwb25lbnRpYWwgYmFja29mZiwga2RiLCBsb2NrbWV0ZXIgZXRjLiBnbyBpbiBoZXJlCi0JaGludCBAcGF1c2UKLQlsZDQgcjMwPVtyMzFdCQkvLyBkb24ndCB1c2UgbGQ0LmJpYXM7IGlmIGl0J3MgY29udGVuZGVkLCB3ZSB3b24ndCB3cml0ZSB0aGUgd29yZAotCTs7Ci0JY21wNC5uZSBwMTQscDA9cjMwLHIwCi0JbW92IHIzMCA9IDEKLShwMTQpCWJyLmNvbmQuc3B0ay5mZXcgLndhaXQyCi0ocDE1KQlyc20gcHNyLmkJCS8vIGRpc2FibGUgaW50ZXJydXB0cyBpZiB3ZSByZWVuYWJsZWQgdGhlbQotCTs7Ci0JY21weGNoZzQuYWNxIHIzMD1bcjMxXSwgcjMwLCBhci5jY3YKLQk7OwotCWNtcDQubmUgcDE0LHAwPXIwLHIzMAotKHAxNCkJYnIuY29uZC5zcHRrLmZldyAud2FpdAotCi0JYnIucmV0LnNwdGsubWFueSBiNgkvLyBsb2NrIGlzIG5vdyB0YWtlbgotRU5EKGlhNjRfc3BpbmxvY2tfY29udGVudGlvbikKLQotI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIEdMT0JBTF9FTlRSWShpYTY0X2p1bXBfdG9fc2FsKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA4ZWJjY2I1Li4xNGQzOWUzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtODQsMjYgKzg0LDYgQEAKICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiBFWFBPUlRfU1lNQk9MKHVud19pbml0X3J1bm5pbmcpOwogCi0jaWZkZWYgQVNNX1NVUFBPUlRFRAotIyBpZmRlZiBDT05GSUdfU01QCi0jICBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpCi0vKgotICogVGhpcyBpcyBub3QgYSBub3JtYWwgcm91dGluZSBhbmQgd2UgZG9uJ3Qgd2FudCBhIGZ1bmN0aW9uIGRlc2NyaXB0b3IgZm9yIGl0LCBzbyB3ZSB1c2UKLSAqIGEgZmFrZSBkZWNsYXJhdGlvbiBoZXJlLgotICovCi1leHRlcm4gY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180OwotRVhQT1JUX1NZTUJPTChpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180KTsKLSMgIGVsc2UKLS8qCi0gKiBUaGlzIGlzIG5vdCBhIG5vcm1hbCByb3V0aW5lIGFuZCB3ZSBkb24ndCB3YW50IGEgZnVuY3Rpb24gZGVzY3JpcHRvciBmb3IgaXQsIHNvIHdlIHVzZQotICogYSBmYWtlIGRlY2xhcmF0aW9uIGhlcmUuCi0gKi8KLWV4dGVybiBjaGFyIGlhNjRfc3BpbmxvY2tfY29udGVudGlvbjsKLUVYUE9SVF9TWU1CT0woaWE2NF9zcGlubG9ja19jb250ZW50aW9uKTsKLSMgIGVuZGlmCi0jIGVuZGlmCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfRVNJKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0VTSV9NT0RVTEUpCiBleHRlcm4gdm9pZCBlc2lfY2FsbF9waHlzICh2b2lkKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGVzaV9jYWxsX3BoeXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggZDI4NzdhNy4uNDk2YWM3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC04ODcsNiArODg3LDYwIEBACiAJbWVtY3B5KGN1cnJlbnQtPmNvbW0sIGNvbW0sIHNpemVvZihjdXJyZW50LT5jb21tKSk7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5pc2hfcHRfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgY29uc3QgcGFsX21pbl9zdGF0ZV9hcmVhX3QgKm1zLAorCQl1bnNpZ25lZCBsb25nICpuYXQpCit7CisJY29uc3QgdTY0ICpiYW5rOworCisJLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQorCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KKwkgKi8KKwlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7CisJCXJlZ3MtPmNyX2lpcCA9IG1zLT5wbXNhX2lpcDsKKwkJcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX2lwc3I7CisJCXJlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKKwl9IGVsc2UgeworCQlyZWdzLT5jcl9paXAgPSBtcy0+cG1zYV94aXA7CisJCXJlZ3MtPmNyX2lwc3IgPSBtcy0+cG1zYV94cHNyOworCQlyZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7CisJfQorCXJlZ3MtPnByID0gbXMtPnBtc2FfcHI7CisJcmVncy0+YjAgPSBtcy0+cG1zYV9icjA7CisJcmVncy0+YXJfcnNjID0gbXMtPnBtc2FfcnNjOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsyLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls4LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI4LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9ncls5LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnI5LCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTAsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzExLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxMSwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjEyLCBuYXQpOworCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTMsIG5hdCk7CisJY29weV9yZWcoJm1zLT5wbXNhX2dyWzE0LTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxNCwgbmF0KTsKKwljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMTUtMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE1LCBuYXQpOworCWlmIChpYTY0X3BzcihyZWdzKS0+Ym4pCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMV9ncjsKKwllbHNlCisJCWJhbmsgPSBtcy0+cG1zYV9iYW5rMF9ncjsKKwljb3B5X3JlZygmYmFua1sxNi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE2LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzE3LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMTcsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIxOCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1sxOS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjE5LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIwLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjAsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyMSwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syMi0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjIyLCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzIzLTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjMsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1syNS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI1LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI2LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjYsIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIyNywgbmF0KTsKKwljb3B5X3JlZygmYmFua1syOC0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjI4LCBuYXQpOworCWNvcHlfcmVnKCZiYW5rWzI5LTE2XSwgbXMtPnBtc2FfbmF0X2JpdHMsICZyZWdzLT5yMjksIG5hdCk7CisJY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJnJlZ3MtPnIzMCwgbmF0KTsKKwljb3B5X3JlZygmYmFua1szMS0xNl0sIG1zLT5wbXNhX25hdF9iaXRzLCAmcmVncy0+cjMxLCBuYXQpOworfQorCiAvKiBPbiBlbnRyeSB0byB0aGlzIHJvdXRpbmUsIHdlIGFyZSBydW5uaW5nIG9uIHRoZSBwZXIgY3B1IHN0YWNrLCBzZWUKICAqIG1jYV9hc20uaC4gIFRoZSBvcmlnaW5hbCBzdGFjayBoYXMgbm90IGJlZW4gdG91Y2hlZCBieSB0aGlzIGV2ZW50LiAgU29tZSBvZgogICogdGhlIG9yaWdpbmFsIHN0YWNrJ3MgcmVnaXN0ZXJzIHdpbGwgYmUgaW4gdGhlIFJCUyBvbiB0aGlzIHN0YWNrLiAgVGhpcyBzdGFjawpAQCAtOTIxLDcgKzk3NSw2IEBACiAJdTY0IHIxMiA9IG1zLT5wbXNhX2dyWzEyLTFdLCByMTMgPSBtcy0+cG1zYV9nclsxMy0xXTsKIAl1NjQgYXJfYnNwc3RvcmUgPSByZWdzLT5hcl9ic3BzdG9yZTsKIAl1NjQgYXJfYnNwID0gcmVncy0+YXJfYnNwc3RvcmUgKyAobG9hZHJzID4+IDE2KTsKLQljb25zdCB1NjQgKmJhbms7CiAJY29uc3QgY2hhciAqbXNnOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTEwMjQsNTQgKzEwNzcsOSBAQAogCXAgPSAoY2hhciAqKXIxMiAtIHNpemVvZigqcmVncyk7CiAJb2xkX3JlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKilwOwogCW1lbWNweShvbGRfcmVncywgcmVncywgc2l6ZW9mKCpyZWdzKSk7Ci0JLyogSWYgaXBzci5pYyB0aGVuIHVzZSBwbXNhX3tpaXAsaXBzcixpZnN9LCBlbHNlIHVzZQotCSAqIHBtc2Ffe3hpcCx4cHNyLHhmc30KLQkgKi8KLQlpZiAoaWE2NF9wc3IocmVncyktPmljKSB7Ci0JCW9sZF9yZWdzLT5jcl9paXAgPSBtcy0+cG1zYV9paXA7Ci0JCW9sZF9yZWdzLT5jcl9pcHNyID0gbXMtPnBtc2FfaXBzcjsKLQkJb2xkX3JlZ3MtPmNyX2lmcyA9IG1zLT5wbXNhX2lmczsKLQl9IGVsc2UgewotCQlvbGRfcmVncy0+Y3JfaWlwID0gbXMtPnBtc2FfeGlwOwotCQlvbGRfcmVncy0+Y3JfaXBzciA9IG1zLT5wbXNhX3hwc3I7Ci0JCW9sZF9yZWdzLT5jcl9pZnMgPSBtcy0+cG1zYV94ZnM7Ci0JfQotCW9sZF9yZWdzLT5wciA9IG1zLT5wbXNhX3ByOwotCW9sZF9yZWdzLT5iMCA9IG1zLT5wbXNhX2JyMDsKIAlvbGRfcmVncy0+bG9hZHJzID0gbG9hZHJzOwotCW9sZF9yZWdzLT5hcl9yc2MgPSBtcy0+cG1zYV9yc2M7CiAJb2xkX3VuYXQgPSBvbGRfcmVncy0+YXJfdW5hdDsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzItMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnIyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclszLTFdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMywgJm9sZF91bmF0KTsKLQljb3B5X3JlZygmbXMtPnBtc2FfZ3JbOC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJm1zLT5wbXNhX2dyWzktMV0sIG1zLT5wbXNhX25hdF9iaXRzLCAmb2xkX3JlZ3MtPnI5LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEwLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjExLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMi0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEyLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxMy0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjEzLCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNC0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE0LCAmb2xkX3VuYXQpOwotCWNvcHlfcmVnKCZtcy0+cG1zYV9nclsxNS0xXSwgbXMtPnBtc2FfbmF0X2JpdHMsICZvbGRfcmVncy0+cjE1LCAmb2xkX3VuYXQpOwotCWlmIChpYTY0X3BzcihvbGRfcmVncyktPmJuKQotCQliYW5rID0gbXMtPnBtc2FfYmFuazFfZ3I7Ci0JZWxzZQotCQliYW5rID0gbXMtPnBtc2FfYmFuazBfZ3I7Ci0JY29weV9yZWcoJmJhbmtbMTYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMTktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMTksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjEsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjItMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjIsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjMtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjMsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjQtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjQsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjUtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjUsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjYtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjYsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjctMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjcsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjgtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjgsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMjktMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMjksICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzAtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzAsICZvbGRfdW5hdCk7Ci0JY29weV9yZWcoJmJhbmtbMzEtMTZdLCBtcy0+cG1zYV9uYXRfYml0cywgJm9sZF9yZWdzLT5yMzEsICZvbGRfdW5hdCk7CisJZmluaXNoX3B0X3JlZ3Mob2xkX3JlZ3MsIG1zLCAmb2xkX3VuYXQpOwogCiAJLyogTmV4dCBzdGFjayBhIHN0cnVjdCBzd2l0Y2hfc3RhY2suICBtY2FfYXNtLlMgYnVpbHQgYSBwYXJ0aWFsCiAJICogc3dpdGNoX3N0YWNrLCBjb3B5IGl0IGFuZCBmaWxsIGluIHRoZSBibGFua3MgdXNpbmcgcHRfcmVncyBhbmQKQEAgLTExNDEsNiArMTE0OSw4IEBACiBub19tb2Q6CiAJbXByaW50ayhLRVJOX0lORk8gImNwdSAlZCwgJXMgJXMsIG9yaWdpbmFsIHN0YWNrIG5vdCBtb2RpZmllZFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwgdHlwZSwgbXNnKTsKKwlvbGRfdW5hdCA9IHJlZ3MtPmFyX3VuYXQ7CisJZmluaXNoX3B0X3JlZ3MocmVncywgbXMsICZvbGRfdW5hdCk7CiAJcmV0dXJuIHByZXZpb3VzX2N1cnJlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IDZkYjA4NTkuLjc3NmRkNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNjAsNyArNjAsNiBAQAogICovCiBpbnQgbm9fdW5hbGlnbmVkX3dhcm5pbmc7CiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7Ci1zdGF0aWMgaW50IG5vcHJpbnRfd2FybmluZzsKIAogLyoKICAqIEZvciBNLXVuaXQ6CkBAIC0xMzU3LDkgKzEzNTYsOCBAQAogCQkJLyogd2F0Y2ggZm9yIGNvbW1hbmQgbmFtZXMgY29udGFpbmluZyAlcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogCQl9IGVsc2UgewotCQkJaWYgKG5vX3VuYWxpZ25lZF93YXJuaW5nICYmICFub3ByaW50X3dhcm5pbmcpIHsKLQkJCQlub3ByaW50X3dhcm5pbmcgPSAxOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCisJCQlpZiAobm9fdW5hbGlnbmVkX3dhcm5pbmcpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgIiVzKCVkKSBlbmNvdW50ZXJlZCBhbiAiCiAJCQkJICAgICAgICJ1bmFsaWduZWQgZXhjZXB0aW9uIHdoaWNoIHJlcXVpcmVkXG4iCiAJCQkJICAgICAgICJrZXJuZWwgYXNzaXN0YW5jZSwgd2hpY2ggZGVncmFkZXMgIgogCQkJCSAgICAgICAidGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbi5cbiIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBmNDI2ZGM3Li5lZTA5ZDI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC0xMDAsMjQgKzEwMCwzNiBAQAogICogdGhpcyBwcmltaXRpdmUgaXQgY2FuIGJlIG1vdmVkIHVwIHRvIGEgc3BpbmFwaG9yZS5oIGhlYWRlci4KICAqLwogc3RydWN0IHNwaW5hcGhvcmUgewotCWF0b21pY190CWN1cjsKKwl1bnNpZ25lZCBsb25nCXRpY2tldDsKKwl1bnNpZ25lZCBsb25nCXNlcnZlOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNwaW5hcGhvcmVfaW5pdChzdHJ1Y3Qgc3BpbmFwaG9yZSAqc3MsIGludCB2YWwpCiB7Ci0JYXRvbWljX3NldCgmc3MtPmN1ciwgdmFsKTsKKwlzcy0+dGlja2V0ID0gMDsKKwlzcy0+c2VydmUgPSB2YWw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCXdoaWxlICh1bmxpa2VseSghYXRvbWljX2FkZF91bmxlc3MoJnNzLT5jdXIsIC0xLCAwKSkpCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmc3MtPmN1cikgPT0gMCkKLQkJCWNwdV9yZWxheCgpOworCXVuc2lnbmVkIGxvbmcgdCA9IGlhNjRfZmV0Y2hhZGQoMSwgJnNzLT50aWNrZXQsIGFjcSksIHNlcnZlOworCisJaWYgKHRpbWVfYmVmb3JlKHQsIHNzLT5zZXJ2ZSkpCisJCXJldHVybjsKKworCWlhNjRfaW52YWxhKCk7CisKKwlmb3IgKDs7KSB7CisJCWFzbSB2b2xhdGlsZSAoImxkNC5jLm5jICUwPVslMV0iIDogIj1yIihzZXJ2ZSkgOiAiciIoJnNzLT5zZXJ2ZSkgOiAibWVtb3J5Iik7CisJCWlmICh0aW1lX2JlZm9yZSh0LCBzZXJ2ZSkpCisJCQlyZXR1cm47CisJCWNwdV9yZWxheCgpOworCX0KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHVwX3NwaW4oc3RydWN0IHNwaW5hcGhvcmUgKnNzKQogewotCWF0b21pY19hZGQoMSwgJnNzLT5jdXIpOworCWlhNjRfZmV0Y2hhZGQoMSwgJnNzLT5zZXJ2ZSwgcmVsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzcGluYXBob3JlIHB0Y2dfc2VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC9pYTY0L29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGFkYjAxNTYuLjVjZGQ3ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL2lhNjQvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTMyLDI0ICszMiw2IEBACiAJdTY0ICpwcmV2X3Bmc19sb2M7CS8qIHN0YXRlIGZvciBXQVIgZm9yIG9sZCBzcGlubG9jayBvb2wgY29kZSAqLwogfSBpYTY0X2JhY2t0cmFjZV90OwogCi0jaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAzKQotLyoKLSAqIFJldHVybnMgbm9uLXplcm8gaWYgdGhlIFBDIGlzIGluIHRoZSBzcGlubG9jayBjb250ZW50aW9uIG91dC1vZi1saW5lIGNvZGUKLSAqIHdpdGggbm9uLXN0YW5kYXJkIGNhbGxpbmcgc2VxdWVuY2UgKG9uIG9sZGVyIGNvbXBpbGVycykuCi0gKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCBpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUodW5zaWduZWQgbG9uZyBwYykKLXsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180W10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQlleHRlcm4gY29uc3QgY2hhciBpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZFtdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7Ci0JdW5zaWduZWQgbG9uZyBzY19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWlhNjRfc3BpbmxvY2tfY29udGVudGlvbl9wcmUzXzQ7Ci0JdW5zaWduZWQgbG9uZyBzY19lbmQgPSAodW5zaWduZWQgbG9uZylpYTY0X3NwaW5sb2NrX2NvbnRlbnRpb25fcHJlM180X2VuZDsKLQlyZXR1cm4gKHNjX3N0YXJ0ICYmIHNjX2VuZCAmJiBwYyA+PSBzY19zdGFydCAmJiBwYyA8IHNjX2VuZCk7Ci19Ci0jZWxzZQotLyogTmV3ZXIgc3BpbmxvY2sgY29kZSBkb2VzIGEgcHJvcGVyIGJyLmNhbGwgYW5kIHdvcmtzIGZpbmUgd2l0aCB0aGUgdW53aW5kZXIgKi8KLSNkZWZpbmUgaW5fb2xkX29vbF9zcGlubG9ja19jb2RlKHBjKQkwCi0jZW5kaWYKLQogLyogUmV0dXJucyBub24temVybyBpZiB0aGUgUEMgaXMgaW4gdGhlIEludGVycnVwdCBWZWN0b3IgVGFibGUgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCBpbl9pdnRfY29kZSh1bnNpZ25lZCBsb25nIHBjKQogewpAQCAtODAsNyArNjIsNyBAQAogCSAqLwogCWlmIChidC0+cHJldl9wZnNfbG9jICYmIGJ0LT5yZWdzICYmIGJ0LT5mcmFtZS5wZnNfbG9jID09IGJ0LT5wcmV2X3Bmc19sb2MpCiAJCWJ0LT5mcmFtZS5wZnNfbG9jID0gJmJ0LT5yZWdzLT5hcl9wZnM7Ci0JYnQtPnByZXZfcGZzX2xvYyA9IChpbl9vbGRfb29sX3NwaW5sb2NrX2NvZGUoYnQtPmZyYW1lLmlwKSA/IGJ0LT5mcmFtZS5wZnNfbG9jIDogTlVMTCk7CisJYnQtPnByZXZfcGZzX2xvYyA9IE5VTEw7CiAKIAlyZXR1cm4gdW53X3Vud2luZCgmYnQtPmZyYW1lKSA9PSAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3BjaS9wY2kuYyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKaW5kZXggN2RlNzZkZC4uYzBmY2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3BjaS9wY2kuYworKysgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCkBAIC01NiwxMCArNTYsMTMgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwogCXJlc3VsdCA9IGlhNjRfc2FsX3BjaV9jb25maWdfcmVhZChhZGRyLCBtb2RlLCBsZW4sICZkYXRhKTsKIAlpZiAocmVzdWx0ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODAsOSArODMsMTEgQEAKIAlpZiAoKHNlZyB8IHJlZykgPD0gMjU1KSB7CiAJCWFkZHIgPSBQQ0lfU0FMX0FERFJFU1Moc2VnLCBidXMsIGRldmZuLCByZWcpOwogCQltb2RlID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSBpZiAoc2FsX3JldmlzaW9uID49IFNBTF9WRVJTSU9OX0NPREUoMywyKSkgewogCQlhZGRyID0gUENJX1NBTF9FWFRfQUREUkVTUyhzZWcsIGJ1cywgZGV2Zm4sIHJlZyk7CiAJCW1vZGUgPSAxOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXN1bHQgPSBpYTY0X3NhbF9wY2lfY29uZmlnX3dyaXRlKGFkZHIsIG1vZGUsIGxlbiwgdmFsdWUpOwogCWlmIChyZXN1bHQgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCmluZGV4IDI1ODMxYzQuLjMwOGU2NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwpAQCAtMTE5LDcgKzExOSw2IEBACiAgKiBBZGRpdGlvbmFsbHkgbm90ZSB0aGF0IHRoZSBzdHJ1Y3Qgc25fZmx1c2hfZGV2aWNlX3dhciBhbHNvIGhhcyB0byBiZQogICogcmVtb3ZlZCBmcm9tIGFyY2gvaWE2NC9zbi9pbmNsdWRlL3h0YWxrL2h1YmRldi5oCiAgKi8KLXN0YXRpYyB1OCB3YXJfaW1wbGVtZW50ZWQgPSAwOwogCiBzdGF0aWMgczY0IHNuX2RldmljZV9maXh1cF93YXIodTY0IG5hc2lkLCB1NjQgd2lkZ2V0LCBpbnQgZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBzbl9mbHVzaF9kZXZpY2VfY29tbW9uICpjb21tb24pCkBAIC0xMjgsMTEgKzEyNyw4IEBACiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV93YXIgKmRldl9lbnRyeTsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnYgPSB7MCwwLDAsMH07CiAKLQlpZiAoIXdhcl9pbXBsZW1lbnRlZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgIgotCQkgICAgICAgIlBST00gZmx1c2ggV0FSXG4iKTsKLQkJd2FyX2ltcGxlbWVudGVkID0gMTsKLQl9CisJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HCisJCSJQUk9NIHZlcnNpb24gPCA0LjUwIC0tIGltcGxlbWVudGluZyBvbGQgUFJPTSBmbHVzaCBXQVJcbiIpOwogCiAJd2FyX2xpc3QgPSBremFsbG9jKERFVl9QRVJfV0lER0VUICogc2l6ZW9mKCp3YXJfbGlzdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighd2FyX2xpc3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwppbmRleCA0YzdlNzQ3Li41NWFjM2M0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbl9od3BlcmYuYwpAQCAtNzg2LDE3ICs3ODYsMTggQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNOX0hXUEVSRl9HRVRfT0JKX05PREU6Ci0JCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGEuYXJnIDwgMCkgeworCQlpID0gYS5hcmc7CisJCWlmIChhLnN6ICE9IHNpemVvZih1NjQpIHx8IGkgPCAwKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJaWYgKChyID0gc25faHdwZXJmX2VudW1fb2JqZWN0cygmbm9iaiwgJm9ianMpKSA9PSAwKSB7Ci0JCQlpZiAoYS5hcmcgPj0gbm9iaikgeworCQkJaWYgKGkgPj0gbm9iaikgewogCQkJCXIgPSAtRUlOVkFMOwogCQkJCXZmcmVlKG9ianMpOwogCQkJCWdvdG8gZXJyb3I7CiAJCQl9Ci0JCQlpZiAob2Jqc1soaSA9IGEuYXJnKV0uaWQgIT0gYS5hcmcpIHsKKwkJCWlmIChvYmpzW2ldLmlkICE9IGEuYXJnKSB7CiAJCQkJZm9yIChpID0gMDsgaSA8IG5vYmo7IGkrKykgewogCQkJCQlpZiAob2Jqc1tpXS5pZCA9PSBhLmFyZykKIAkJCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL0tjb25maWcgYi9hcmNoL20zMnIvS2NvbmZpZwppbmRleCBjNDEyMzRmLi4zYTkzMTlmIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvS2NvbmZpZworKysgYi9hcmNoL20zMnIvS2NvbmZpZwpAQCAtMTEsNiArMTEsOSBAQAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IElOSVRfQUxMX1BPU1NJQkxFCisJc2VsZWN0IEhBVkVfS0VSTkVMX0daSVAKKwlzZWxlY3QgSEFWRV9LRVJORUxfQlpJUDIKKwlzZWxlY3QgSEFWRV9LRVJORUxfTFpNQQogCiBjb25maWcgU0JVUwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDU2MDQ4NGEuLjE3NzcxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMSBAQAogIwotIyBsaW51eC9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorIyBsaW51eC9hcmNoL20zMnIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCiAjCiAjIGNyZWF0ZSBhIGNvbXByZXNzZWQgdm1saW51eCBpbWFnZSBmcm9tIHRoZSBvcmlnaW5hbCB2bWxpbnV4CiAjCiAKLXRhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogaGVhZC5vIG1pc2MubyBcCi0JCSAgIHBpZ2d5Lm8gdm1saW51eC5sZHMKK3RhcmdldHMJCTo9IHZtbGludXggdm1saW51eC5iaW4gdm1saW51eC5iaW4uZ3ogdm1saW51eC5iaW4uYnoyIFwKKwkJICAgdm1saW51eC5iaW4ubHptYSBoZWFkLm8gbWlzYy5vIHBpZ2d5Lm8gdm1saW51eC5sZHMKIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogCkBAIC0yNyw2ICsyNywxMiBAQAogJChvYmopL3ZtbGludXguYmluLmd6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQogCiskKG9iaikvdm1saW51eC5iaW4uYnoyOiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiemlwMikKKworJChvYmopL3ZtbGludXguYmluLmx6bWE6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bWEpCisKIENGTEFHU19taXNjLm8gKz0gLWZwaWMKIAogaWZkZWYgQ09ORklHX01NVQpAQCAtMzcsNSArNDMsOSBAQAogCiBPQkpDT1BZRkxBR1MgKz0gLVIgLmVtcHR5X3plcm9fcGFnZQogCi0kKG9iaikvcGlnZ3kubzogJChvYmopL3ZtbGludXguc2NyICQob2JqKS92bWxpbnV4LmJpbi5neiBGT1JDRQorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9HWklQKQk9IGd6CitzdWZmaXhfJChDT05GSUdfS0VSTkVMX0JaSVAyKQk9IGJ6Mgorc3VmZml4XyQoQ09ORklHX0tFUk5FTF9MWk1BKQk9IGx6bWEKKworJChvYmopL3BpZ2d5Lm86ICQob2JqKS92bWxpbnV4LnNjciAkKG9iaikvdm1saW51eC5iaW4uJChzdWZmaXgteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsZCkKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggZDM5NDI5Mi4uMzcwZDYwOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9tMzJyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTksMTQwICs5LDQ5IEBACiAgKiBBZGFwdGVkIGZvciBTSCBieSBTdHVhcnQgTWVuZWZ5LCBBdWcgMTk5OQogICoKICAqIDIwMDMtMDItMTI6CVN1cHBvcnQgTTMyUiBieSBUYWtlbyBUYWthaGFzaGkKLSAqIAkJVGhpcyBpcyBiYXNlZCBvbiBhcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCiAvKgogICogZ3ppcCBkZWNsYXJhdGlvbnMKICAqLwotCi0jZGVmaW5lIE9GKGFyZ3MpICBhcmdzCiAjZGVmaW5lIFNUQVRJQyBzdGF0aWMKIAogI3VuZGVmIG1lbXNldAogI3VuZGVmIG1lbWNweQogI2RlZmluZSBtZW16ZXJvKHMsIG4pICAgICBtZW1zZXQgKChzKSwgMCwgKG4pKQogCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIHVjaDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNoOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7Ci0KLSNkZWZpbmUgV1NJWkUgMHg4MDAwCQkvKiBXaW5kb3cgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IDMyaywgKi8KLQkJCQkvKiBhbmQgYSBwb3dlciBvZiB0d28gKi8KLQotc3RhdGljIHVjaCAqaW5idWY7CSAgICAgLyogaW5wdXQgYnVmZmVyICovCi1zdGF0aWMgdWNoIHdpbmRvd1tXU0laRV07ICAgIC8qIFNsaWRpbmcgd2luZG93IGJ1ZmZlciAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW5zaXplID0gMDsgIC8qIHZhbGlkIGJ5dGVzIGluIGluYnVmICovCi1zdGF0aWMgdW5zaWduZWQgaW5wdHIgPSAwOyAgIC8qIGluZGV4IG9mIG5leHQgYnl0ZSB0byBiZSBwcm9jZXNzZWQgaW4gaW5idWYgKi8KLXN0YXRpYyB1bnNpZ25lZCBvdXRjbnQgPSAwOyAgLyogYnl0ZXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgQVNDSUkgdGV4dCAqLwotI2RlZmluZSBDT05USU5VQVRJT04gMHgwMiAvKiBiaXQgMSBzZXQ6IGNvbnRpbnVhdGlvbiBvZiBtdWx0aS1wYXJ0IGd6aXAgZmlsZSAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIEVOQ1JZUFRFRCAgICAweDIwIC8qIGJpdCA1IHNldDogZmlsZSBpcyBlbmNyeXB0ZWQgKi8KLSNkZWZpbmUgUkVTRVJWRUQgICAgIDB4QzAgLyogYml0IDYsNzogICByZXNlcnZlZCAqLwotCi0jZGVmaW5lIGdldF9ieXRlKCkgIChpbnB0ciA8IGluc2l6ZSA/IGluYnVmW2lucHRyKytdIDogZmlsbF9pbmJ1ZigpKQotCi0vKiBEaWFnbm9zdGljIGZ1bmN0aW9ucyAqLwotI2lmZGVmIERFQlVHCi0jICBkZWZpbmUgQXNzZXJ0KGNvbmQsbXNnKSB7aWYoIShjb25kKSkgZXJyb3IobXNnKTt9Ci0jICBkZWZpbmUgVHJhY2UoeCkgZnByaW50ZiB4Ci0jICBkZWZpbmUgVHJhY2V2KHgpIHtpZiAodmVyYm9zZSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2V2dih4KSB7aWYgKHZlcmJvc2U+MSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjKGMseCkge2lmICh2ZXJib3NlICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jICBkZWZpbmUgVHJhY2VjdihjLHgpIHtpZiAodmVyYm9zZT4xICYmIChjKSkgZnByaW50ZiB4IDt9Ci0jZWxzZQotIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykKLSMgIGRlZmluZSBUcmFjZSh4KQotIyAgZGVmaW5lIFRyYWNldih4KQotIyAgZGVmaW5lIFRyYWNldnYoeCkKLSMgIGRlZmluZSBUcmFjZWMoYyx4KQotIyAgZGVmaW5lIFRyYWNlY3YoYyx4KQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgIGZpbGxfaW5idWYodm9pZCk7Ci1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCk7CiBzdGF0aWMgdm9pZCBlcnJvcihjaGFyICptKTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmlucHV0X2RhdGE7Ci1zdGF0aWMgaW50IGlucHV0X2xlbjsKLQotc3RhdGljIGxvbmcgYnl0ZXNfb3V0ID0gMDsKLXN0YXRpYyB1Y2ggKm91dHB1dF9kYXRhOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgb3V0cHV0X3B0ciA9IDA7Ci0KICNpbmNsdWRlICJtMzJyX3Npby5jIgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX21lbV9lbmRfcHRyOwogCi0jZGVmaW5lIEhFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCi0KLSNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvaW5mbGF0ZS5jIgotCi12b2lkKiBtZW1zZXQodm9pZCogcywgaW50IGMsIHNpemVfdCBuKQorI2lmZGVmIENPTkZJR19LRVJORUxfQlpJUDIKK3N0YXRpYyB2b2lkICptZW1zZXQodm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQogewotCWludCBpOwotCWNoYXIgKnNzID0gKGNoYXIqKXM7CisJY2hhciAqc3MgPSBzOwogCi0JZm9yIChpPTA7aTxuO2krKykgc3NbaV0gPSBjOworCXdoaWxlIChuLS0pCisJICAgICAgIAkqc3MrKyA9IGM7CiAJcmV0dXJuIHM7CiB9CisjZW5kaWYKIAotdm9pZCogbWVtY3B5KHZvaWQqIF9fZGVzdCwgX19jb25zdCB2b2lkKiBfX3NyYywKLQkJCSAgICBzaXplX3QgX19uKQotewotCWludCBpOwotCWNoYXIgKmQgPSAoY2hhciAqKV9fZGVzdCwgKnMgPSAoY2hhciAqKV9fc3JjOworI2lmZGVmIENPTkZJR19LRVJORUxfR1pJUAorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfaW5mbGF0ZS5jIgorI2VuZGlmCiAKLQlmb3IgKGk9MDtpPF9fbjtpKyspIGRbaV0gPSBzW2ldOwotCXJldHVybiBfX2Rlc3Q7Ci19CisjaWZkZWYgQ09ORklHX0tFUk5FTF9CWklQMgorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDQwMDAwMAorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX2J1bnppcDIuYyIKKyNlbmRpZgogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIEZpbGwgdGhlIGlucHV0IGJ1ZmZlci4gVGhpcyBpcyBjYWxsZWQgb25seSB3aGVuIHRoZSBidWZmZXIgaXMgZW1wdHkKLSAqIGFuZCBhdCBsZWFzdCBvbmUgYnl0ZSBpcyByZWFsbHkgbmVlZGVkLgotICovCi1zdGF0aWMgaW50IGZpbGxfaW5idWYodm9pZCkKLXsKLQlpZiAoaW5zaXplICE9IDApIHsKLQkJZXJyb3IoInJhbiBvdXQgb2YgaW5wdXQgZGF0YSIpOwotCX0KLQotCWluYnVmID0gaW5wdXRfZGF0YTsKLQlpbnNpemUgPSBpbnB1dF9sZW47Ci0JaW5wdHIgPSAxOwotCXJldHVybiBpbmJ1ZlswXTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBXcml0ZSB0aGUgb3V0cHV0IHdpbmRvdyB3aW5kb3dbMC4ub3V0Y250LTFdIGFuZCB1cGRhdGUgY3JjIGFuZCBieXRlc19vdXQuCi0gKiAoVXNlZCBmb3IgdGhlIGRlY29tcHJlc3NlZCBkYXRhIG9ubHkuKQotICovCi1zdGF0aWMgdm9pZCBmbHVzaF93aW5kb3codm9pZCkKLXsKLSAgICB1bGcgYyA9IGNyYzsgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgKi8KLSAgICB1bnNpZ25lZCBuOwotICAgIHVjaCAqaW4sICpvdXQsIGNoOwotCi0gICAgaW4gPSB3aW5kb3c7Ci0gICAgb3V0ID0gJm91dHB1dF9kYXRhW291dHB1dF9wdHJdOwotICAgIGZvciAobiA9IDA7IG4gPCBvdXRjbnQ7IG4rKykgewotCSAgICBjaCA9ICpvdXQrKyA9ICppbisrOwotCSAgICBjID0gY3JjXzMyX3RhYlsoKGludCljIF4gY2gpICYgMHhmZl0gXiAoYyA+PiA4KTsKLSAgICB9Ci0gICAgY3JjID0gYzsKLSAgICBieXRlc19vdXQgKz0gKHVsZylvdXRjbnQ7Ci0gICAgb3V0cHV0X3B0ciArPSAodWxnKW91dGNudDsKLSAgICBvdXRjbnQgPSAwOwotfQorI2lmZGVmIENPTkZJR19LRVJORUxfTFpNQQorI2RlZmluZSBCT09UX0hFQVBfU0laRSAgICAgICAgICAgICAweDEwMDAwCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vbGliL2RlY29tcHJlc3NfdW5sem1hLmMiCisjZW5kaWYKIAogc3RhdGljIHZvaWQgZXJyb3IoY2hhciAqeCkKIHsKQEAgLTE1MywyMCArNjIsMjAgQEAKIAl3aGlsZSgxKTsJLyogSGFsdCAqLwogfQogCi0vKiByZXR1cm4gZGVjb21wcmVzc2VkIHNpemUgKi8KIHZvaWQKIGRlY29tcHJlc3Nfa2VybmVsKGludCBtbXVfb24sIHVuc2lnbmVkIGNoYXIgKnppbWFnZV9kYXRhLAogCQkgIHVuc2lnbmVkIGludCB6aW1hZ2VfbGVuLCB1bnNpZ25lZCBsb25nIGhlYXApCiB7CisJdW5zaWduZWQgY2hhciAqaW5wdXRfZGF0YSA9IHppbWFnZV9kYXRhOworCWludCBpbnB1dF9sZW4gPSB6aW1hZ2VfbGVuOworCXVuc2lnbmVkIGNoYXIgKm91dHB1dF9kYXRhOworCiAJb3V0cHV0X2RhdGEgPSAodW5zaWduZWQgY2hhciAqKUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDIwMDAKIAkJKyAobW11X29uID8gMHg4MDAwMDAwMCA6IDApOwogCWZyZWVfbWVtX3B0ciA9IGhlYXA7Ci0JZnJlZV9tZW1fZW5kX3B0ciA9IGZyZWVfbWVtX3B0ciArIEhFQVBfU0laRTsKLQlpbnB1dF9kYXRhID0gemltYWdlX2RhdGE7Ci0JaW5wdXRfbGVuID0gemltYWdlX2xlbjsKKwlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgQk9PVF9IRUFQX1NJWkU7CiAKLQltYWtlY3JjKCk7Ci0JcHV0cygiVW5jb21wcmVzc2luZyBMaW51eC4uLiAiKTsKLQlndW56aXAoKTsKLQlwdXRzKCJPaywgYm9vdGluZyB0aGUga2VybmVsLlxuIik7CisJcHV0cygiXG5EZWNvbXByZXNzaW5nIExpbnV4Li4uICIpOworCWRlY29tcHJlc3MoaW5wdXRfZGF0YSwgaW5wdXRfbGVuLCBOVUxMLCBOVUxMLCBvdXRwdXRfZGF0YSwgTlVMTCwgZXJyb3IpOworCXB1dHMoImRvbmUuXG5Cb290aW5nIHRoZSBrZXJuZWwuXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggZDA2OTMzYi4uNDAxMGYxZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTE2Miw2ICsxNjIsMTMgQEAKICNkZWZpbmUgX19yYXdfd3JpdGV3IHdyaXRldwogI2RlZmluZSBfX3Jhd193cml0ZWwgd3JpdGVsCiAKKyNkZWZpbmUgaW9yZWFkOCByZWFkCisjZGVmaW5lIGlvcmVhZDE2IHJlYWR3CisjZGVmaW5lIGlvcmVhZDMyIHJlYWRsCisjZGVmaW5lIGlvd3JpdGU4IHdyaXRlYgorI2RlZmluZSBpb3dyaXRlMTYgd3JpdGV3CisjZGVmaW5lIGlvd3JpdGUzMiB3cml0ZWwKKwogI2RlZmluZSBtbWlvd2IoKQogCiAjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKSBkbyB7IH0gd2hpbGUgKDApICAvKiBNMzJSX0ZJWE1FICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxMTc3N2Y3Li43MjVlZGU4IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfQVNNX00zMlJfUEFHRV9ICiAjZGVmaW5lIF9BU01fTTMyUl9QQUdFX0gKIAorI2luY2x1ZGUgPGxpbnV4L2NvbnN0Lmg+CisKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKLSNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgUEFHRV9TSVpFCShfQUMoMSwgVUwpIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMWE5OTdmYy4uODM5N2MyNCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTQwLDggKzE0MCw2IEBACiAjZGVmaW5lIEtTVEtfRUlQKHRzaykgICgodHNrKS0+dGhyZWFkLmxyKQogI2RlZmluZSBLU1RLX0VTUCh0c2spICAoKHRzayktPnRocmVhZC5zcCkKIAotI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCi0KICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKICNlbmRpZiAvKiBfQVNNX00zMlJfUFJPQ0VTU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNzE1NzgxNS4uZWQyNDBiNiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTU1LDYgKzU1LDggQEAKIAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCisjZGVmaW5lIFRIUkVBRF9TSVpFIChQQUdFX1NJWkUgPDwgMSkKKwogLyoKICAqIG1hY3Jvcy9mdW5jdGlvbnMgZm9yIGdhaW5pbmcgYWNjZXNzIHRvIHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAgKi8KQEAgLTc2LDggKzc4LDYgQEAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCiAjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKIAotI2RlZmluZSBUSFJFQURfU0laRSAoMipQQUdFX1NJWkUpCi0KIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewpAQCAtMTI1LDE3ICsxMjUsNiBAQAogCXJldHVybiB0aS0+ZmxhZ3MgPj4gVElfRkxBR19GQVVMVF9DT0RFX1NISUZUOwogfQogCi0jZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNkZWZpbmUgVEhSRUFEX1NJWkUJODE5MgotCi0vKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCi0jZGVmaW5lIEdFVF9USFJFQURfSU5GTyhyZWcpCUdFVF9USFJFQURfSU5GTyByZWcKLQkubWFjcm8gR0VUX1RIUkVBRF9JTkZPIHJlZwotCWxkaQlccmVnLCAjLVRIUkVBRF9TSVpFCi0JYW5kCVxyZWcsIHNwCi0JLmVuZG0KLQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMgYi9hcmNoL20zMnIva2VybmVsL2VudHJ5LlMKaW5kZXggNjEyZDM1Yi4uNDAzODY5OCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvZW50cnkuUwpAQCAtMTE4LDYgKzExOCwxMyBAQAogI2RlZmluZSByZXN1bWVfa2VybmVsCQlyZXN0b3JlX2FsbAogI2VuZGlmCiAKKy8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KKyNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykJR0VUX1RIUkVBRF9JTkZPIHJlZworCS5tYWNybyBHRVRfVEhSRUFEX0lORk8gcmVnCisJbGRpCVxyZWcsICMtVEhSRUFEX1NJWkUKKwlhbmQJXHJlZywgc3AKKwkuZW5kbQorCiBFTlRSWShyZXRfZnJvbV9mb3JrKQogCXBvcAlyMAogCWJsCXNjaGVkdWxlX3RhaWwKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvaGVhZC5TIGIvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKaW5kZXggMGE3MTk0NC4uYTQ2NjUyZCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9oZWFkLlMKQEAgLTI2OCwxMyArMjY4LDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogU3RhY2sgYXJlYQogICovCi0JLnNlY3Rpb24gLnNwaQorCS5zZWN0aW9uIC5pbml0LmRhdGEsICJhdyIKIAlBTElHTgogCS5nbG9iYWwgc3BpX3N0YWNrX3RvcAogCS56ZXJvCTEwMjQKIHNwaV9zdGFja190b3A6CiAKLQkuc2VjdGlvbiAuc3B1CisJLnNlY3Rpb24gLmluaXQuZGF0YSwgImF3IgogCUFMSUdOCiAJLmdsb2JhbCBzcHVfc3RhY2tfdG9wCiAJLnplcm8JMTAyNApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9tMzJyX2tzeW1zLmMgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwppbmRleCAyMjYyNGI1Li43MDA1NzA3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYworKysgYi9hcmNoL20zMnIva2VybmVsL20zMnJfa3N5bXMuYwpAQCAtMjMsMTIgKzIzLDYgQEAKIEVYUE9SVF9TWU1CT0woaW91bm1hcCk7CiBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCi0vKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KLS8qIERlbGF5IGxvb3BzICovCi1FWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKLUVYUE9SVF9TWU1CT0woX19kZWxheSk7Ci1FWFBPUlRfU1lNQk9MKF9fY29uc3RfdWRlbGF5KTsKLQogRVhQT1JUX1NZTUJPTChzdHJuY3B5X2Zyb21fdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChjbGVhcl91c2VyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDFiNzU5OGUuLjMxY2VmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CkBAIC04MDUsNyArODA2LDcgQEAKIAogCWlmIChtYXNrICYgfnBoeXNpZHNfY29lcmNlKHBoeXNfY3B1X3ByZXNlbnRfbWFwKSkKIAkJQlVHKCk7Ci0JaWYgKGlwaV9udW0gPj0gTlJfSVBJUykKKwlpZiAoaXBpX251bSA+PSBOUl9JUElTIHx8IGlwaV9udW0gPCAwKQogCQlCVUcoKTsKIAogCW1hc2sgPDw9IElQSV9TSElGVDsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKaW5kZXggYmE2MWM0Yy4uOWNlZGNlZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC90aW1lLmMKQEAgLTMzLDYgKzMzLDE1IEBACiAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19SVENfRFJWX0NNT1MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19EUlZfQ01PU19NT0RVTEUpCisvKiB0aGlzIG5lZWRzIGEgYmV0dGVyIGhvbWUgKi8KK0RFRklORV9TUElOTE9DSyhydGNfbG9jayk7CisKKyNpZmRlZiBDT05GSUdfUlRDX0RSVl9DTU9TX01PRFVMRQorRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CisjZW5kaWYKKyNlbmRpZiAgLyogcGMtc3R5bGUgJ0NNT1MnIFJUQyBzdXBwb3J0ICovCisKICNpZmRlZiBDT05GSUdfU01QCiBleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCkBAIC02Niw3ICs3NSw3IEBACiAJCWNvdW50ID0gMDsKIAogCWNvdW50ID0gKGxhdGNoIC0gY291bnQpICogVElDS19TSVpFOwotCWVsYXBzZWRfdGltZSA9IChjb3VudCArIGxhdGNoIC8gMikgLyBsYXRjaDsKKwllbGFwc2VkX3RpbWUgPSBESVZfUk9VTkRfQ0xPU0VTVChjb3VudCwgbGF0Y2gpOwogCS8qIE5PVEU6IExBVENIIGlzIGVxdWFsIHRvIHRoZSAiaW50ZXJ2YWwiIHZhbHVlICg9IHJlbG9hZCBjb3VudCkuICovCiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KQEAgLTg0LDcgKzkzLDcgQEAKIAlwX2NvdW50ID0gY291bnQ7CiAKIAljb3VudCA9IChsYXRjaCAtIGNvdW50KSAqIFRJQ0tfU0laRTsKLQllbGFwc2VkX3RpbWUgPSAoY291bnQgKyBsYXRjaCAvIDIpIC8gbGF0Y2g7CisJZWxhcHNlZF90aW1lID0gRElWX1JPVU5EX0NMT1NFU1QoY291bnQsIGxhdGNoKTsKIAkvKiBOT1RFOiBMQVRDSCBpcyBlcXVhbCB0byB0aGUgImludGVydmFsIiB2YWx1ZSAoPSByZWxvYWQgY291bnQpLiAqLwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KICNlbGlmIGRlZmluZWQoQ09ORklHX0NISVBfTTMyMzEwKQpAQCAtMjAyLDcgKzIxMSw3IEBACiAKIAkJYnVzX2Nsb2NrID0gYm9vdF9jcHVfZGF0YS5idXNfY2xvY2s7CiAJCWRpdmlkZSA9IGJvb3RfY3B1X2RhdGEudGltZXJfZGl2aWRlOwotCQlsYXRjaCA9IChidXNfY2xvY2svZGl2aWRlICsgSFogLyAyKSAvIEhaOworCQlsYXRjaCA9IERJVl9ST1VORF9DTE9TRVNUKGJ1c19jbG9jay9kaXZpZGUsIEhaKTsKIAogCQlwcmludGsoIlRpbWVyIHN0YXJ0IDogbGF0Y2ggPSAlbGRcbiIsIGxhdGNoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCmluZGV4IDAzYjE0ZTUuLmZiZDEwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKQEAgLTEwNCw4ICsxMDQsOCBAQAogCWVpdF92ZWN0b3JbMTg2XSA9ICh1bnNpZ25lZCBsb25nKXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4N10gPSAodW5zaWduZWQgbG9uZylzbXBfaXBpX3RpbWVyX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE4OF0gPSAodW5zaWduZWQgbG9uZylzbXBfZmx1c2hfY2FjaGVfYWxsX2ludGVycnVwdDsKLQllaXRfdmVjdG9yWzE4OV0gPSAodW5zaWduZWQgbG9uZylzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0OwotCWVpdF92ZWN0b3JbMTkwXSA9IDA7CisJZWl0X3ZlY3RvclsxODldID0gMDsJLyogQ1BVX0JPT1RfSVBJICovCisJZWl0X3ZlY3RvclsxOTBdID0gKHVuc2lnbmVkIGxvbmcpc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdDsKIAllaXRfdmVjdG9yWzE5MV0gPSAwOwogI2VuZGlmCiAJX2ZsdXNoX2NhY2hlX2NvcHliYWNrX2FsbCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tMzJyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGRlNWUyMWMuLjdkYTk0ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL20zMnIva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogT1VUUFVUX0FSQ0gobTMycikKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQpAQCAtNDAsODMgKzQxLDI0IEBACiAjZW5kaWYKICAgX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKDE2KTsJCS8qIEV4Y2VwdGlvbiB0YWJsZSAqLwotICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KLSAgX19zdG9wX19fZXhfdGFibGUgPSAuOworICBFWENFUFRJT05fVEFCTEUoMTYpCisgIE5PVEVTCiAKICAgUk9EQVRBCi0KLSAgLyogd3JpdGVhYmxlICovCi0gIC5kYXRhIDogewkJCS8qIERhdGEgKi8KLQkqKC5zcHUpCi0JKiguc3BpKQotCURBVEFfREFUQQotCUNPTlNUUlVDVE9SUwotCX0KLQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2JlZ2luID0gLjsKLSAgLmRhdGFfbm9zYXZlIDogeyAqKC5kYXRhLm5vc2F2ZSkgfQotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9fbm9zYXZlX2VuZCA9IC47Ci0KLSAgLiA9IEFMSUdOKDMyKTsKLSAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7ICooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpIH0KLQorICBSV19EQVRBX1NFQ1RJT04oMzIsIFBBR0VfU0laRSwgVEhSRUFEX1NJWkUpCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTig4MTkyKTsJCS8qIGluaXRfdGFzayAqLwotICAuZGF0YS5pbml0X3Rhc2sgOiB7ICooLmRhdGEuaW5pdF90YXNrKSB9Ci0KICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCi0gIC4gPSBBTElHTig0MDk2KTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLworICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIEluaXQgY29kZSBhbmQgZGF0YSAqLwogICBfX2luaXRfYmVnaW4gPSAuOwotICAuaW5pdC50ZXh0IDogewotCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9Ci0gIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9Ci0gIC4gPSBBTElHTigxNik7Ci0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0gIF9faW5pdGNhbGxfc3RhcnQgPSAuOwotICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlJTklUQ0FMTFMKLSAgfQotICBfX2luaXRjYWxsX2VuZCA9IC47Ci0gIF9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmNvbl9pbml0Y2FsbC5pbml0IDogeyAqKC5jb25faW5pdGNhbGwuaW5pdCkgfQotICBfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotICBTRUNVUklUWV9JTklUCi0gIC4gPSBBTElHTig0KTsKLSAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKLSAgLmFsdGluc3RydWN0aW9ucyA6IHsgKiguYWx0aW5zdHJ1Y3Rpb25zKSB9Ci0gIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOwotICAuYWx0aW5zdHJfcmVwbGFjZW1lbnQgOiB7ICooLmFsdGluc3RyX3JlcGxhY2VtZW50KSB9Ci0gIC8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcwotICAgICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZSAqLwotICAuZXhpdC50ZXh0IDogeyBFWElUX1RFWFQgfQotICAuZXhpdC5kYXRhIDogeyBFWElUX0RBVEEgfQotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0gIC4gPSBBTElHTig0MDk2KTsKLSAgX19pbml0cmFtZnNfc3RhcnQgPSAuOwotICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOwotI2VuZGlmCi0KLSAgUEVSQ1BVKDQwOTYpCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorICBJTklUX0RBVEFfU0VDVElPTigxNikKKyAgUEVSQ1BVKFBBR0VfU0laRSkKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogICAvKiBmcmVlZCBhZnRlciBpbml0IGVuZHMgaGVyZSAqLwogCi0gIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwotICAuYnNzIDogeyAqKC5ic3MpIH0KLSAgLiA9IEFMSUdOKDQpOwotICBfX2Jzc19zdG9wID0gLjsKKyAgQlNTX1NFQ1RJT04oMCwgMCwgNCkKIAogICBfZW5kID0gLiA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9saWIvZGVsYXkuYyBiL2FyY2gvbTMyci9saWIvZGVsYXkuYwppbmRleCBjZWQ1NDliLi45NDBmNDgzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9tMzJyL2xpYi9kZWxheS5jCkBAIC0xMjIsNCArMTIyLDggQEAKIHsKIAlfX2NvbnN0X3VkZWxheShuc2VjcyAqIDB4MDAwMDUpOyAgLyogMioqMzIgLyAxMDAwMDAwMDAwIChyb3VuZGVkIHVwKSAqLwogfQorCitFWFBPUlRfU1lNQk9MKF9fZGVsYXkpOworRVhQT1JUX1NZTUJPTChfX2NvbnN0X3VkZWxheSk7CitFWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKIEVYUE9SVF9TWU1CT0woX19uZGVsYXkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jIGIvYXJjaC9tMzJyL21tL2Rpc2NvbnRpZy5jCmluZGV4IGI3YTc4YWQuLjVkMjg1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9kaXNjb250aWcuYworKysgYi9hcmNoL20zMnIvbW0vZGlzY29udGlnLmMKQEAgLTMyLDYgKzMyLDkgQEAKIH0gbWVtX3Byb2ZfdDsKIHN0YXRpYyBtZW1fcHJvZl90IG1lbV9wcm9mW01BWF9OVU1OT0RFU107CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW9yeV9lbmQ7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1fcHJvZl9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGhvbGVzLCBmcmVlX3BmbjsKQEAgLTQyLDcgKzQ1LDcgQEAKIAkvKiBOb2RlIzAgU0RSQU0gKi8KIAltcCA9ICZtZW1fcHJvZlswXTsKIAltcC0+c3RhcnRfcGZuID0gUEZOX1VQKENPTkZJR19NRU1PUllfU1RBUlQpOwotCW1wLT5wYWdlcyA9IFBGTl9ET1dOKENPTkZJR19NRU1PUllfU0laRSk7CisJbXAtPnBhZ2VzID0gUEZOX0RPV04obWVtb3J5X2VuZCAtIG1lbW9yeV9zdGFydCk7CiAJbXAtPmhvbGVzID0gMDsKIAltcC0+ZnJlZV9wZm4gPSBQRk5fVVAoX19wYShfZW5kKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9tbXUuUyBiL2FyY2gvbTMyci9tbS9tbXUuUwppbmRleCA0OWE2ZDE2Li5lOTQ5MWE1IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvbW0vbW11LlMKKysrIGIvYXJjaC9tMzJyL21tL21tdS5TCkBAIC0xNTAsOSArMTUwLDEzIEBACiAKIAk7IHBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKIAlsZAlyMywgQHIzCQkJOyByMzogcG1kIGRhdGEKLQlsZGkJcjIsICMtNDA5NgogCWJlcXoJcjMsIDNmCQkJOyBwbWRfbm9uZSgqcG1kKSA/CiAKKwlhbmQzCXIyLCByMywgIzB4ZmZmCisJYWRkMwlyMiwgcjIsICMtMzU1CQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZXoJcjIsIDNmCQkJOyBwbWRfYmFkKCpwbWQpID8KKwlsZGkJcjIsICMtNDA5NgorCiAJOyBwdGUgPSBwdGVfb2Zmc2V0KHBtZCwgYWRkcmVzcyk7CiAJYW5kCXIyLCByMwkJCTsgcjI6IHB0ZSBiYXNlIGFkZHIKIAlzcmwzCXIzLCByMCwgIzEwCkBAIC0yNjMsOSArMjY3LDkgQEAKIAlsZAlyMSwgQHIzCQkJOyByMTogcG1kCiAJYmVxeglyMSwgM2YJCQk7IHBtZF9ub25lKCpwbWQpID8KIDsKLQlhbmQzCXIxLCByMSwgIzB4ZWZmCi0JbGRpCXI0LCAjNjExCQk7IF9LRVJOUEdfVEFCTEUoPTYxMSkKLQlibmUJcjEsIHI0LCAzZgkJOyAhcG1kX2JhZCgqcG1kKSA/CisJYW5kMwlyMSwgcjEsICMweDNmZgorCWxkaQlyNCwgIzB4MTYzCQk7IF9LRVJOUEdfVEFCTEUoPTB4MTYzKQorCWJuZQlyMSwgcjQsIDNmCQk7IHBtZF9iYWQoKnBtZCkgPwogCiAJLmZpbGxpbnNuCiA0OgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL0tjb25maWcgYi9hcmNoL202OGsvS2NvbmZpZwppbmRleCAyOWRkODQ4Li5lY2RjMTlhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvS2NvbmZpZworKysgYi9hcmNoL202OGsvS2NvbmZpZwpAQCAtNTYxLDcgKzU2MSw3IEBACiAKIGNvbmZpZyBNVk1FMTQ3X1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBNVk1FMTQ3IHNlcmlhbCBwb3J0cyIKLQlkZXBlbmRzIG9uIE1WTUUxNDcKKwlkZXBlbmRzIG9uIE1WTUUxNDcgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBNb3Rvcm9sYSBNVk1FMTQ3CiAJICBib2FyZHMuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkgWSBoZXJlLgpAQCAtNTc2LDE0ICs1NzYsMTQgQEAKIAogY29uZmlnIE1WTUUxNjJfU0NDCiAJYm9vbCAiU0NDIHN1cHBvcnQgZm9yIE1WTUUxNjIgc2VyaWFsIHBvcnRzIgotCWRlcGVuZHMgb24gTVZNRTE2eAorCWRlcGVuZHMgb24gTVZNRTE2eCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBzZXJpYWwgcG9ydHMgb24gdGhlIE1vdG9yb2xhIE1WTUUxNjIgYW5kCiAJICAxNzIgYm9hcmRzLiAgRXZlcnlvbmUgdXNpbmcgb25lIG9mIHRoZXNlIGJvYXJkcyBzaG91bGQgc2F5IFkgaGVyZS4KIAogY29uZmlnIEJWTUU2MDAwX1NDQwogCWJvb2wgIlNDQyBzdXBwb3J0IGZvciBCVk1FNjAwMCBzZXJpYWwgcG9ydHMiCi0JZGVwZW5kcyBvbiBCVk1FNjAwMAorCWRlcGVuZHMgb24gQlZNRTYwMDAgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgc2VyaWFsIHBvcnRzIG9uIHRoZSBCVk1FNDAwMCBhbmQgQlZNRTYwMDAKIAkgIGJvYXJkcyBmcm9tIEJWTSBMdGQuICBFdmVyeW9uZSB1c2luZyBvbmUgb2YgdGhlc2UgYm9hcmRzIHNob3VsZCBzYXkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaGFyZGlycV9tbS5oCmluZGV4IDU1NGY2NWIuLjM5NGVlOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9oYXJkaXJxX21tLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2hhcmRpcnFfbW0uaApAQCAtMSw4ICsxLDE2IEBACiAjaWZuZGVmIF9fTTY4S19IQVJESVJRX0gKICNkZWZpbmUgX19NNjhLX0hBUkRJUlFfSAogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwk4CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CisvKiBlbnRyeS5TIGlzIHNlbnNpdGl2ZSB0byB0aGUgb2Zmc2V0cyBvZiB0aGVzZSBmaWVsZHMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OworCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KKworI2RlZmluZSBIQVJESVJRX0JJVFMJOAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTk0ZWUwZS4uOWE4ODc2ZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQ1LDI1ICs0NSwyNSBAQAogCURFRklORShUSFJFQURfRlBTVEFURSwgb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9zdHJ1Y3QsIGZwc3RhdGUpKTsKIAogCS8qIG9mZnNldHMgaW50byB0aGUgcHRfcmVncyAqLwotCURFRklORShQVF9EMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQwKSk7Ci0JREVGSU5FKFBUX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7Ci0JREVGSU5FKFBUX0QxLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDEpKTsKLQlERUZJTkUoUFRfRDIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkMikpOwotCURFRklORShQVF9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7Ci0JREVGSU5FKFBUX0Q0LCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDQpKTsKLQlERUZJTkUoUFRfRDUsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBkNSkpOwotCURFRklORShQVF9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7Ci0JREVGSU5FKFBUX0ExLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgYTEpKTsKLQlERUZJTkUoUFRfQTIsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBhMikpOwotCURFRklORShQVF9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7Ci0JREVGSU5FKFBUX1NSLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgc3IpKTsKKwlERUZJTkUoUFRfT0ZGX0QwLCBvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZDApKTsKKwlERUZJTkUoUFRfT0ZGX09SSUdfRDAsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBvcmlnX2QwKSk7CisJREVGSU5FKFBUX09GRl9EMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQxKSk7CisJREVGSU5FKFBUX09GRl9EMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQyKSk7CisJREVGSU5FKFBUX09GRl9EMywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQzKSk7CisJREVGSU5FKFBUX09GRl9ENCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ0KSk7CisJREVGSU5FKFBUX09GRl9ENSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGQ1KSk7CisJREVGSU5FKFBUX09GRl9BMCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEwKSk7CisJREVGSU5FKFBUX09GRl9BMSwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGExKSk7CisJREVGSU5FKFBUX09GRl9BMiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGEyKSk7CisJREVGSU5FKFBUX09GRl9QQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSk7CisJREVGSU5FKFBUX09GRl9TUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSk7CiAKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9GT1JNQVRWRUMsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBzcikgLSAyKTsKKwlERUZJTkUoUFRfT0ZGX0ZPUk1BVFZFQywgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHNyKSAtIDIpOwogI2Vsc2UKIAkvKiBiaXRmaWVsZHMgYXJlIGEgYml0IGRpZmZpY3VsdCAqLwotCURFRklORShQVF9WRUNUT1IsIG9mZnNldG9mKHN0cnVjdCBwdF9yZWdzLCBwYykgKyA0KTsKKwlERUZJTkUoUFRfT0ZGX1ZFQ1RPUiwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIHBjKSArIDQpOwogI2VuZGlmCiAKIAkvKiBzaWduYWwgZGVmaW5lcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwppbmRleCBmNTZmYWE1Li41NjA0M2FkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvZW50cnkuUwpAQCAtNDYsNyArNDYsNyBAQAogRU5UUlkoYnVzZXJyKQogCVNBVkVfQUxMCiAJbW92ZXEJIy0xLCVkMAotCW1vdmVsCSVkMCwlc3BAKFBUX09SSUdfRDApCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX09SSUdfRDApCiAJbW92ZWwJJXNwLCVzcEAtIAkJLyogc3RhY2sgZnJhbWUgcG9pbnRlciBhcmd1bWVudCAqLwogCWpzcglidXNlcnJfYwogCWFkZHFsCSM0LCVzcApAQCAtNTUsNyArNTUsNyBAQAogRU5UUlkodHJhcCkKIAlTQVZFX0FMTAogCW1vdmVxCSMtMSwlZDAKLQltb3ZlbAklZDAsJXNwQChQVF9PUklHX0QwKQorCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9PUklHX0QwKQogCW1vdmVsCSVzcCwlc3BALSAJCS8qIHN0YWNrIGZyYW1lIHBvaW50ZXIgYXJndW1lbnQgKi8KIAlqc3IJdHJhcF9jCiAJYWRkcWwJIzQsJXNwCkBAIC02Nyw3ICs2Nyw3IEBACiBFTlRSWShkYmdpbnRlcnJ1cHQpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAltb3ZlbAklc3AsJXNwQC0gCQkvKiBzdGFjayBmcmFtZSBwb2ludGVyIGFyZ3VtZW50ICovCiAJanNyCWRiZ2ludGVycnVwdF9jCiAJYWRkcWwJIzQsJXNwCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9tbS9pbml0LmMgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKaW5kZXggYjE3MDNjNi4uZjMyMzZkMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCisrKyBiL2FyY2gvbTY4a25vbW11L21tL2luaXQuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCXRvdGFscmFtX3BhZ2VzKys7CiAJCXBhZ2VzKys7CiAJfQotCXByaW50ayAoS0VSTl9OT1RJQ0UgIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWRrIGZyZWVkXG4iLCBwYWdlcyk7CisJcHJpbnRrIChLRVJOX05PVElDRSAiRnJlZWluZyBpbml0cmQgbWVtb3J5OiAlZGsgZnJlZWRcbiIsIHBhZ2VzICogKFBBR0VfU0laRSAvIDEwMjQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjA2ZS9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCmluZGV4IDBmNDFiYTguLjk0MjM5NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMDZlL2NvbmZpZy5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8YXNtL21jZnNpbS5oPgogI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21jZmRtYS5oPgotI2luY2x1ZGUgPGFzbS9tY2Z1YXJ0Lmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCmluZGV4IGIxYWVmNzIuLjlkODBkMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUwpAQCAtMzksMTcgKzM5LDE3IEBACiAuZ2xvYmwgaW50aGFuZGxlcjcKIAogYmFkc3lzOgotCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfRDApCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCiAJanJhCXJldF9mcm9tX2V4Y2VwdGlvbgogCiBkb190cmFjZToKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQkvKiBuZWVkZWQgZm9yIHN0cmFjZSovCisJbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9PRkZfRDApCS8qIG5lZWRlZCBmb3Igc3RyYWNlKi8KIAlzdWJxbAkjNCwlc3AKIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQogCVJFU1RPUkVfU1dJVENIX1NUQUNLCiAJYWRkcWwJIzQsJXNwCi0JbW92ZWwJJXNwQChQVF9PUklHX0QwKSwlZDEKKwltb3ZlbAklc3BAKFBUX09GRl9PUklHX0QwKSwlZDEKIAltb3ZlbAkjLUVOT1NZUywlZDAKIAljbXBsCSNOUl9zeXNjYWxscywlZDEKIAlqY2MJMWYKQEAgLTU3LDcgKzU3LDcgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsICVhMAogCWpic3IJJWEwQCglZDEpCiAKLTE6CW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisxOgltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03NSw3ICs3NSw3IEBACiAJamJzciAgICBzZXRfZXNwMAogCWFkZHFsICAgIzQsJXNwCiAKLQltb3ZlbAklc3BAKFBUX09SSUdfRDApLCVkMAorCW1vdmVsCSVzcEAoUFRfT0ZGX09SSUdfRDApLCVkMAogCiAJbW92ZWwJJXNwLCVkMQkJCS8qIGdldCB0aHJlYWRfaW5mbyBwb2ludGVyICovCiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQpAQCAtODgsMTAgKzg4LDEwIEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCVhMAogCW1vdmVsCSVhMEAoJWQwKSwgJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLworCW1vdmVsCSVkMCwlc3BAKFBUX09GRl9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKLQlidHN0CSM1LCVzcEAoUFRfU1IpCQkvKiBjaGVjayBpZiByZXR1cm5pbmcgdG8ga2VybmVsKi8KKwlidHN0CSM1LCVzcEAoUFRfT0ZGX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTMzLDcgKzEzMyw3IEBACiAgKi8KIGludGhhbmRsZXIxOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIGludGhhbmRsZXIyOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIGludGhhbmRsZXIzOgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGludGhhbmRsZXI0OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIGludGhhbmRsZXI1OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTg4LDcgKzE4OCw3IEBACiAKIGludGhhbmRsZXI2OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMTk5LDcgKzE5OSw3IEBACiAKIGludGhhbmRsZXI3OgogCVNBVkVfQUxMCi0JbW92ZXcJJXNwQChQVF9WRUNUT1IpLCAlZDAKKwltb3Zldwklc3BAKFBUX09GRl9WRUNUT1IpLCAlZDAKIAlhbmQJIzB4M2ZmLCAlZDAKIAogCW1vdmVsCSVzcCwlc3BALQpAQCAtMjEwLDcgKzIxMCw3IEBACiAKIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZAkjMHgzZmYsICVkMAogCiAJbW92ZWwJJXNwLCVzcEAtCkBAIC0yMjQsNyArMjI0LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggNTVkZmVmZS4uNmQzNDYwYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0zNSwxNyArMzUsMTcgQEAKIC5nbG9ibCBpbnRoYW5kbGVyCiAKIGJhZHN5czoKLQltb3ZlbAkjLUVOT1NZUywlc3BAKFBUX0QwKQorCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKQogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fdHJhY2U6Ci0JbW92ZWwJIy1FTk9TWVMsJXNwQChQVF9EMCkJLyogbmVlZGVkIGZvciBzdHJhY2UqLworCW1vdmVsCSMtRU5PU1lTLCVzcEAoUFRfT0ZGX0QwKSAvKiBuZWVkZWQgZm9yIHN0cmFjZSovCiAJc3VicWwJIzQsJXNwCiAJU0FWRV9TV0lUQ0hfU1RBQ0sKIAlqYnNyCXN5c2NhbGxfdHJhY2UKIAlSRVNUT1JFX1NXSVRDSF9TVEFDSwogCWFkZHFsCSM0LCVzcAotCW1vdmVsCSVzcEAoUFRfT1JJR19EMCksJWQxCisJbW92ZWwJJXNwQChQVF9PRkZfT1JJR19EMCksJWQxCiAJbW92ZWwJIy1FTk9TWVMsJWQwCiAJY21wbAkjTlJfc3lzY2FsbHMsJWQxCiAJamNjCTFmCkBAIC01Myw3ICs1Myw3IEBACiAJbGVhCXN5c19jYWxsX3RhYmxlLCAlYTAKIAlqYnNyCSVhMEAoJWQxKQogCi0xOgltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLworMToJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KIAlzdWJxbAkjNCwlc3AJCQkvKiBkdW1teSByZXR1cm4gYWRkcmVzcyAqLwogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC03OSwxMCArNzksMTAgQEAKIAlsZWEJc3lzX2NhbGxfdGFibGUsJWEwCiAJbW92ZWwJJWEwQCglZDApLCAlYTAKIAlqYnNyCSVhMEAKLQltb3ZlbAklZDAsJXNwQChQVF9EMCkJCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUqLwogCiByZXRfZnJvbV9leGNlcHRpb246Ci0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCisJYnRzdAkjNSwlc3BAKFBUX09GRl9TUikJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCovCiAJamVxCUx1c2VyX3JldHVybgkJLyogaWYgc28sIHNraXAgcmVzY2hlZCwgc2lnbmFscyovCiAKIExrZXJuZWxfcmV0dXJuOgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKi8KIGludGhhbmRsZXI6CiAJU0FWRV9BTEwKLQltb3Zldwklc3BAKFBUX1ZFQ1RPUiksICVkMAorCW1vdmV3CSVzcEAoUFRfT0ZGX1ZFQ1RPUiksICVkMAogCWFuZC5sCSMweDNmZiwgJWQwCiAJbHNyLmwgICAjMHgwMiwgICVkMAogCkBAIC0xMzksNyArMTM5LDcgQEAKIDI6CiAJUkVTVE9SRV9BTEwKIDE6Ci0JbW92ZWIJJXNwQChQVF9TUiksICVkMAorCW1vdmViCSVzcEAoUFRfT0ZGX1NSKSwgJWQwCiAJYW5kCSM3LCAlZDAKIAlqaGkJMmIKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGRvIHNvZnR3YXJlIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9lbnRyeS5TCmluZGV4IDNiNDcxYzAuLmRkN2Q1OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtODEsMTEgKzgxLDExIEBACiAKIAltb3ZlbAklZDMsJWEwCiAJamJzcgklYTBACi0JbW92ZWwJJWQwLCVzcEAoUFRfRDApCQkvKiBzYXZlIHRoZSByZXR1cm4gdmFsdWUgKi8KKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfRDApCS8qIHNhdmUgdGhlIHJldHVybiB2YWx1ZSAqLwogCWpyYQlyZXRfZnJvbV9leGNlcHRpb24KIDE6Ci0JbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9EMCAqLwotCW1vdmVsCSVkMixQVF9EMCglc3ApCQkvKiBvbiBzeXNjYWxsIGVudHJ5ICovCisJbW92ZWwJIy1FTk9TWVMsJWQyCQkvKiBzdHJhY2UgbmVlZHMgLUVOT1NZUyBpbiBQVF9PRkZfRDAgKi8KKwltb3ZlbAklZDIsUFRfT0ZGX0QwKCVzcCkJLyogb24gc3lzY2FsbCBlbnRyeSAqLwogCXN1YnFsCSM0LCVzcAogCVNBVkVfU1dJVENIX1NUQUNLCiAJamJzcglzeXNjYWxsX3RyYWNlCkBAIC05Myw3ICs5Myw3IEBACiAJYWRkcWwJIzQsJXNwCiAJbW92ZWwJJWQzLCVhMAogCWpic3IJJWEwQAotCW1vdmVsCSVkMCwlc3BAKFBUX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCisJbW92ZWwJJWQwLCVzcEAoUFRfT0ZGX0QwKQkJLyogc2F2ZSB0aGUgcmV0dXJuIHZhbHVlICovCiAJc3VicWwJIzQsJXNwCQkJLyogZHVtbXkgcmV0dXJuIGFkZHJlc3MgKi8KIAlTQVZFX1NXSVRDSF9TVEFDSwogCWpic3IJc3lzY2FsbF90cmFjZQpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKIAltb3ZlCSMweDI3MDAsJXNyCQkvKiBkaXNhYmxlIGludHJzICovCi0JYnRzdAkjNSwlc3BAKFBUX1NSKQkJLyogY2hlY2sgaWYgcmV0dXJuaW5nIHRvIGtlcm5lbCAqLworCWJ0c3QJIzUsJXNwQChQVF9PRkZfU1IpCS8qIGNoZWNrIGlmIHJldHVybmluZyB0byBrZXJuZWwgKi8KIAlqZXEJTHVzZXJfcmV0dXJuCQkvKiBpZiBzbywgc2tpcCByZXNjaGVkLCBzaWduYWxzICovCiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVApAQCAtMTQyLDggKzE0Miw4IEBACiBMcmV0dXJuOgogCW1vdmUJIzB4MjcwMCwlc3IJCS8qIGRpc2FibGUgaW50cnMgKi8KIAltb3ZlbAlzd191c3AsJWEwCQkvKiBnZXQgdXNwICovCi0JbW92ZWwJJXNwQChQVF9QQyksJWEwQC0JLyogY29weSBleGNlcHRpb24gcHJvZ3JhbSBjb3VudGVyICovCi0JbW92ZWwJJXNwQChQVF9GT1JNQVRWRUMpLCVhMEAtLyogY29weSBleGNlcHRpb24gZm9ybWF0L3ZlY3Rvci9zciAqLworCW1vdmVsCSVzcEAoUFRfT0ZGX1BDKSwlYTBALQkvKiBjb3B5IGV4Y2VwdGlvbiBwcm9ncmFtIGNvdW50ZXIgKi8KKwltb3ZlbAklc3BAKFBUX09GRl9GT1JNQVRWRUMpLCVhMEAtIC8qIGNvcHkgZXhjZXB0aW9uIGZvcm1hdC92ZWN0b3Ivc3IgKi8KIAltb3ZlbWwJJXNwQCwlZDEtJWQ1LyVhMC0lYTIKIAlsZWEJJXNwQCgzMiksJXNwCQkvKiBzcGFjZSBmb3IgOCByZWdzICovCiAJbW92ZWwJJXNwQCssJWQwCkBAIC0xODEsOSArMTgxLDkgQEAKIEVOVFJZKGludGhhbmRsZXIpCiAJU0FWRV9BTEwKIAltb3ZlcQkjLTEsJWQwCi0JbW92ZWwJJWQwLCVzcEAoUFRfT1JJR19EMCkKKwltb3ZlbAklZDAsJXNwQChQVF9PRkZfT1JJR19EMCkKIAotCW1vdmV3CSVzcEAoUFRfRk9STUFUVkVDKSwlZDAJLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAgLyogcHV0IGV4Y2VwdGlvbiAjIGluIGQwICovCiAJYW5kbAkjMHgwM2ZjLCVkMAkJLyogbWFzayBvdXQgdmVjdG9yIG9ubHkgKi8KIAogCW1vdmVsCSVzcCwlc3BALQkJLyogcHVzaCByZWdzIGFyZyAqLwpAQCAtMjAzLDcgKzIwMyw3IEBACiBFTlRSWShmYXN0aGFuZGxlcikKIAlTQVZFX0xPQ0FMCiAKLQltb3Zldwklc3BAKFBUX0ZPUk1BVFZFQyksJWQwCisJbW92ZXcJJXNwQChQVF9PRkZfRk9STUFUVkVDKSwlZDAKIAlhbmRsCSMweDAzZmMsJWQwCQkvKiBtYXNrIG91dCB2ZWN0b3Igb25seSAqLwogCiAJbW92ZWwJJXNwLCVzcEAtCQkvKiBwdXNoIHJlZ3MgYXJnICovCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2VudHJ5LlMKaW5kZXggYWNjMWYwNS4uZTNlY2IzNiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZW50cnkuUwpAQCAtNTkyLDYgKzU5Miw4IEBACiAJbm9wCiAJbWZzCXI3LCByZnNyOwkJLyogc2F2ZSBGU1IgKi8KIAlub3AKKwltdHMJcmZzciwgcjA7CS8qIENsZWFyIHN0aWNreSBmc3IgKi8KKwlub3AKIAlsYQlyMTIsIHIwLCBmdWxsX2V4Y2VwdGlvbgogCXNldF92bXM7CiAJcnRiZAlyMTIsIDA7CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKaW5kZXggNmIwMjg4ZS4uMmI4NmMwMyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUwpAQCAtMzg0LDcgKzM4NCw3IEBACiAJYWRkawlyOCwgcjE3LCByMDsgLyogTG9hZCBleGNlcHRpb24gYWRkcmVzcyAqLwogCWJyYWxpZAlyMTUsIGZ1bGxfZXhjZXB0aW9uOyAvKiBCcmFuY2ggdG8gdGhlIGhhbmRsZXIgKi8KIAlub3A7Ci0JbXRzCXIwLCByZnNyOwkvKiBDbGVhciBzdGlja3kgZnNyICovCisJbXRzCXJmc3IsIHIwOwkvKiBDbGVhciBzdGlja3kgZnNyICovCiAJbm9wCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwppbmRleCA0MjAxYzc0Li5jNTkyZDQ3IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjM1LDcgKzIzNSw5IEBACiAJcmVncy0+cGMgPSBwYzsKIAlyZWdzLT5yMSA9IHVzcDsKIAlyZWdzLT5wdF9tb2RlID0gMDsKKyNpZmRlZiBDT05GSUdfTU1VCiAJcmVncy0+bXNyIHw9IE1TUl9VTVM7CisjZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19NTVUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNzA1YTdhOS4uMWFhZDBkOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgTUlQUwogCWJvb2wKIAlkZWZhdWx0IHkKKwlzZWxlY3QgSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVAogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfQVJDSF9LR0RCCkBAIC0xMDEyLDkgKzEwMTMsOSBAQAogCiBjb25maWcgTUlQU19MMV9DQUNIRV9TSElGVAogCWludAotCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMgorCWRlZmF1bHQgIjQiIGlmIE1BQ0hfREVDU1RBVElPTiB8fCBNSUtST1RJS19SQjUzMiB8fCBQTUNfTVNQNDIwMF9FVkFMCisJZGVmYXVsdCAiNiIgaWYgTUlQU19DUFVfU0NBQ0hFCiAJZGVmYXVsdCAiNyIgaWYgU0dJX0lQMjIgfHwgU0dJX0lQMjcgfHwgU0dJX0lQMjggfHwgU05JX1JNIHx8IENQVV9DQVZJVU1fT0NURU9OCi0JZGVmYXVsdCAiNCIgaWYgUE1DX01TUDQyMDBfRVZBTAogCWRlZmF1bHQgIjUiCiAKIGNvbmZpZyBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwppbmRleCAzYWI2ZDgwLi4xOWMxYzgyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAjZGVmaW5lIERCREVWX1RBQl9TSVpFCUFSUkFZX1NJWkUoZGJkZXZfdGFiKQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgdTMyIGF1MXh4eF9kYmRtYV9wbV9yZWdzW05VTV9EQkRNQV9DSEFOUyArIDFdWzhdOworc3RhdGljIHUzMiBhdTF4eHhfZGJkbWFfcG1fcmVnc1tOVU1fREJETUFfQ0hBTlMgKyAxXVs2XTsKICNlbmRpZgogCiAKQEAgLTk5MywxNCArOTkzLDEzIEBACiAJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbMF1bM10gPSBhdV9yZWFkbChhZGRyICsgMHgwYyk7CiAKIAkvKiBzYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPCBOVU1fREJETUFfQ0hBTlM7IGkrKykgeworCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8PSBOVU1fREJETUFfQ0hBTlM7IGkrKykgewogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVswXSA9IGF1X3JlYWRsKGFkZHIgKyAweDAwKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMV0gPSBhdV9yZWFkbChhZGRyICsgMHgwNCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzJdID0gYXVfcmVhZGwoYWRkciArIDB4MDgpOwogCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKIAkJYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNF0gPSBhdV9yZWFkbChhZGRyICsgMHgxMCk7CiAJCWF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzVdID0gYXVfcmVhZGwoYWRkciArIDB4MTQpOwotCQlhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs2XSA9IGF1X3JlYWRsKGFkZHIgKyAweDE4KTsKIAogCQkvKiBoYWx0IGNoYW5uZWwgKi8KIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzBdICYgfjEsIGFkZHIgKyAweDAwKTsKQEAgLTEwMjcsMTQgKzEwMjYsMTMgQEAKIAlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbMF1bM10sIGFkZHIgKyAweDBjKTsKIAogCS8qIHJlc3RvcmUgY2hhbm5lbCBjb25maWd1cmF0aW9ucyAqLwotCWZvciAoaSA9IDEsIGFkZHIgPSBERE1BX0NIQU5ORUxfQkFTRTsgaSA8IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJZm9yIChpID0gMSwgYWRkciA9IERETUFfQ0hBTk5FTF9CQVNFOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVswXSwgYWRkciArIDB4MDApOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bMV0sIGFkZHIgKyAweDA0KTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzJdLCBhZGRyICsgMHgwOCk7CiAJCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVszXSwgYWRkciArIDB4MGMpOwogCQlhdV93cml0ZWwoYXUxeHh4X2RiZG1hX3BtX3JlZ3NbaV1bNF0sIGFkZHIgKyAweDEwKTsKIAkJYXVfd3JpdGVsKGF1MXh4eF9kYmRtYV9wbV9yZWdzW2ldWzVdLCBhZGRyICsgMHgxNCk7Ci0JCWF1X3dyaXRlbChhdTF4eHhfZGJkbWFfcG1fcmVnc1tpXVs2XSwgYWRkciArIDB4MTgpOwogCQlhdV9zeW5jKCk7CiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IGM4OGM4MjEuLmQ2NzA5MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTM1NCw2ICszNTQsMjggQEAKIAlhdV9zeW5jKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGF1MXhfaWMwX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2thY2sodW5zaWduZWQgaW50IGlycV9ucikKK3sKKwl1bnNpZ25lZCBpbnQgYml0ID0gaXJxX25yIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOworCisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfV0FLRUNMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfTUFTS0NMUik7CisJYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfUklTSU5HQ0xSKTsKKwlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9GQUxMSU5HQ0xSKTsKKwlhdV9zeW5jKCk7Cit9CisKIHN0YXRpYyBpbnQgYXUxeF9pYzFfc2V0d2FrZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGlycSAtIEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKQEAgLTM3OSwyNSArNDAxLDIxIEBACiAvKgogICogaXJxX2NoaXBzIGZvciBib3RoIElDczsgdGhpcyB3YXkgdGhlIG1hc2sgaGFuZGxlcnMgY2FuIGJlCiAgKiBhcyBzaG9ydCBhcyBwb3NzaWJsZS4KLSAqCi0gKiBOT1RFOiB0aGUgLT5hY2soKSBjYWxsYmFjayBpcyB1c2VkIGJ5IHRoZSBoYW5kbGVfZWRnZV9pcnEKLSAqCSBmbG93aGFuZGxlciBvbmx5LCB0aGUgLT5tYXNrX2FjaygpIG9uZSBieSBoYW5kbGVfbGV2ZWxfaXJxLAotICoJIHNvIG5vIG5lZWQgZm9yIGFuIGlycV9jaGlwIGZvciBlYWNoIHR5cGUgb2YgaXJxIChsZXZlbC9lZGdlKS4KICAqLwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMF9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMCIsCi0JLmFjawkJPSBhdTF4X2ljMF9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMF9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzBfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMF9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMwX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMF91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdTF4X2ljMV9jaGlwID0gewogCS5uYW1lCQk9ICJBbGNoZW15LUlDMSIsCi0JLmFjawkJPSBhdTF4X2ljMV9hY2ssCQkvKiBlZGdlICovCisJLmFjawkJPSBhdTF4X2ljMV9hY2ssCiAJLm1hc2sJCT0gYXUxeF9pYzFfbWFzaywKLQkubWFza19hY2sJPSBhdTF4X2ljMV9tYXNrLAkvKiBsZXZlbCAqLworCS5tYXNrX2Fjawk9IGF1MXhfaWMxX21hc2thY2ssCiAJLnVubWFzawkJPSBhdTF4X2ljMV91bm1hc2ssCiAJLnNldF90eXBlCT0gYXUxeF9pY19zZXR0eXBlLAogCS5zZXRfd2FrZQk9IGF1MXhfaWMxX3NldHdha2UsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYwppbmRleCBjYzMyYzY5Li40NWI2MWM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNlbHNlCiAJYXVfd3JpdGVsKDB4ZiwgQXUxNTAwX1BDSV9DRkcpOwogI2VuZGlmCisJYm9hcmRfcGNpX2lkc2VsID0gbXR4MV9wY2lfaWRzZWw7CiAjZW5kaWYKIAogCS8qIEluaXRpYWxpemUgc3lzX3BpbmZ1bmMgKi8KQEAgLTg1LDggKzg2LDYgQEAKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTEsIDEpOwkvKiBncmVlbiBvbiAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIxMiwgMCk7CS8qIHJlZCBvZmYgKi8KIAotCWJvYXJkX3BjaV9pZHNlbCA9IG10eDFfcGNpX2lkc2VsOwotCiAJcHJpbnRrKEtFUk5fSU5GTyAiNEcgU3lzdGVtcyBNVFgtMSBCb2FyZFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9hcjcvcGxhdGZvcm0uYwppbmRleCBlMjI3OGMwLi44MzVmM2YwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXI3L3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FyNy9wbGF0Zm9ybS5jCkBAIC01MDMsNiArNTAzLDcgQEAKIHsKIAl1MTYgY2hpcF9pZDsKIAlpbnQgcmVzOworCXUzMiAqYm9vdGNyLCB2YWw7CiAjaWZkZWYgQ09ORklHX1NFUklBTF84MjUwCiAJc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgdWFydF9wb3J0WzJdOwogCkBAIC01OTUsNyArNTk2LDEzIEBACiAKIAlhcjdfd2R0X3Jlcy5lbmQgPSBhcjdfd2R0X3Jlcy5zdGFydCArIDB4MjA7CiAKLQlyZXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFyN193ZHQpOworCWJvb3RjciA9ICh1MzIgKilpb3JlbWFwX25vY2FjaGUoQVI3X1JFR1NfRENMLCA0KTsKKwl2YWwgPSAqYm9vdGNyOworCWlvdW5tYXAoYm9vdGNyKTsKKworCS8qIFJlZ2lzdGVyIHdhdGNoZG9nIG9ubHkgaWYgZW5hYmxlZCBpbiBoYXJkd2FyZSAqLworCWlmICh2YWwgJiBBUjdfV0RUX0hXX0VOQSkKKwkJcmVzID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhcjdfd2R0KTsKIAogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCmluZGV4IGRmYmZkN2UuLjkzOGIxZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCisrKyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pb2Rldi5jCkBAIC0xMTIsMTAgKzExMiw4IEBACiB7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CiAJcmV0ID0gcmVxdWVzdF9pcnEoaW9kZXZfaXJxLCBpb2Rldl9pcnFoZGwsIElSUUZfRElTQUJMRUQsCiAJCQkgICBpb2Rldl9uYW1lLCAmbWlzY2Rldik7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYyBiL2FyY2gvbWlwcy9iY200N3h4L3Byb20uYwppbmRleCAwNzllMzNkLi5mYjI4NGMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9wcm9tLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvcHJvbS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHByb21faW5pdF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBidWZbQ0xfU0laRV07CisJc3RhdGljIGNoYXIgYnVmW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBHZXQgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZnJvbSBDRkUgKi8KIAlpZiAoY2ZlX2dldGVudigiTElOVVhfQ01ETElORSIsIGJ1ZiwgQ0xfU0laRSkgPj0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvTWFrZWZpbGUgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQppbmRleCBhYWE1ODVjLi4wMDA2NGI2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15CQkrPSBjbGsubyBjcHUubyBjcy5vIGdwaW8ubyBpcnEubyBwcm9tLm8gc2V0dXAubyB0aW1lci5vIFwKLQkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8KKwkJICAgZGV2LWRzcC5vIGRldi1lbmV0Lm8gZGV2LXBjbWNpYS5vIGRldi11YXJ0Lm8gZGV2LXdkdC5vCiBvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSBlYXJseV9wcmludGsubwogCiBvYmoteQkJKz0gYm9hcmRzLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwppbmRleCBmZDc3ZjU0Li4wNWEzNWNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9ib2FyZHMvYm9hcmRfYmNtOTYzeHguYwpAQCAtMjAsMTAgKzIwLDEwIEBACiAjaW5jbHVkZSA8YmNtNjN4eF9jcHUuaD4KICNpbmNsdWRlIDxiY202M3h4X3JlZ3MuaD4KICNpbmNsdWRlIDxiY202M3h4X2lvLmg+Ci0jaW5jbHVkZSA8YmNtNjN4eF9ib2FyZC5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X3BjaS5oPgogI2luY2x1ZGUgPGJjbTYzeHhfZGV2X2VuZXQuaD4KICNpbmNsdWRlIDxiY202M3h4X2Rldl9kc3AuaD4KKyNpbmNsdWRlIDxiY202M3h4X2Rldl9wY21jaWEuaD4KICNpbmNsdWRlIDxib2FyZF9iY205NjN4eC5oPgogCiAjZGVmaW5lIFBGWAkiYm9hcmRfYmNtOTYzeHg6ICIKQEAgLTc5Myw2ICs3OTMsOSBAQAogewogCXUzMiB2YWw7CiAKKwlpZiAoYm9hcmQuaGFzX3BjY2FyZCkKKwkJYmNtNjN4eF9wY21jaWFfcmVnaXN0ZXIoKTsKKwogCWlmIChib2FyZC5oYXNfZW5ldDAgJiYKIAkgICAgIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhib2FyZC5lbmV0MC5tYWNfYWRkcikpCiAJCWJjbTYzeHhfZW5ldF9yZWdpc3RlcigwLCAmYm9hcmQuZW5ldDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2JjbTYzeHgvY3B1LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwppbmRleCA2ZGM0M2YwLi43MDM3OGJiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYworKysgYi9hcmNoL21pcHMvYmNtNjN4eC9jcHUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgogI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9yZWdzLmg+CiAjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgpAQCAtMjg0LDYgKzI4NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcCwgZXhwZWN0ZWRfY3B1X2lkOwogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJLyogc29jIHJlZ2lzdGVycyBsb2NhdGlvbiBkZXBlbmRzIG9uIGNwdSB0eXBlICovCiAJZXhwZWN0ZWRfY3B1X2lkID0gMDsKQEAgLTI5Myw2ICsyOTUsNyBAQAogCSAqIEJDTTYzMzggYXMgdGhlIHNhbWUgUHJJZCBhcyBCQ00zMzAyIHNlZSBhcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCiAJICovCiAJY2FzZSBDUFVfQkNNMzMwMjoKKwkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJDTTYzMzgiOwogCQlleHBlY3RlZF9jcHVfaWQgPSBCQ002MzM4X0NQVV9JRDsKIAkJYmNtNjN4eF9yZWdzX2Jhc2UgPSBiY205NjMzOF9yZWdzX2Jhc2U7CiAJCWJjbTYzeHhfaXJxcyA9IGJjbTk2MzM4X2lycXM7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZDkxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi1wY21jaWEuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXhpbWUgQml6b24gPG1iaXpvbkBmcmVlYm94LmZyPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9jcy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNtY2lhLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9pby5oPgorI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbWNpYV9yZXNvdXJjZXNbXSA9IHsKKwkvKiBwY21jaWEgcmVnaXN0ZXJzICovCisJeworCQkvKiBzdGFydCAmIGVuZCBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIHBjbWNpYSBtZW1vcnkgem9uZSByZXNvdXJjZXMgKi8KKwl7CisJCS5zdGFydAkJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfQ09NTU9OX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9BVFRSX0JBU0VfUEEsCisJCS5lbmQJCT0gQkNNX1BDTUNJQV9BVFRSX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuZW5kCQk9IEJDTV9QQ01DSUFfSU9fRU5EX1BBLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKworCS8qIFBDTUNJQSBpcnEgKi8KKwl7CisJCS8qIHN0YXJ0IGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCisJLyogZGVjbGFyZSBQQ01DSUEgSU8gcmVzb3VyY2UgYWxzbyAqLworCXsKKwkJLnN0YXJ0CQk9IEJDTV9QQ01DSUFfSU9fQkFTRV9QQSwKKwkJLmVuZAkJPSBCQ01fUENNQ0lBX0lPX0VORF9QQSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfcGxhdGZvcm1fZGF0YSBwZDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF9wY21jaWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJiY202M3h4X3BjbWNpYSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHBjbWNpYV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHBjbWNpYV9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBkLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjb25maWdfcGNtY2lhX2NzKHVuc2lnbmVkIGludCBjcywKKwkJCQkgICB1MzIgYmFzZSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IGJjbTYzeHhfc2V0X2NzX3N0YXR1cyhjcywgMCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGJjbTYzeHhfc2V0X2NzX2Jhc2UoY3MsIGJhc2UsIHNpemUpOworCWlmICghcmV0KQorCQlyZXQgPSBiY202M3h4X3NldF9jc19zdGF0dXMoY3MsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBfX2luaXRkYXRhIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNzOworCXVuc2lnbmVkIGludAliYXNlOworCXVuc2lnbmVkIGludAlzaXplOworfSBwY21jaWFfY3NbM10gPSB7CisJeworCQkuY3MJPSBNUElfQ1NfUENNQ0lBX0NPTU1PTiwKKwkJLmJhc2UJPSBCQ01fUENNQ0lBX0NPTU1PTl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQ09NTU9OX1NJWkUKKwl9LAorCXsKKwkJLmNzCT0gTVBJX0NTX1BDTUNJQV9BVFRSLAorCQkuYmFzZQk9IEJDTV9QQ01DSUFfQVRUUl9CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfQVRUUl9TSVpFCisJfSwKKwl7CisJCS5jcwk9IE1QSV9DU19QQ01DSUFfSU8sCisJCS5iYXNlCT0gQkNNX1BDTUNJQV9JT19CQVNFX1BBLAorCQkuc2l6ZQk9IEJDTV9QQ01DSUFfSU9fU0laRQorCX0sCit9OworCitpbnQgX19pbml0IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IHJldCwgaTsKKworCWlmICghQkNNQ1BVX0lTXzYzNDgoKSAmJiAhQkNNQ1BVX0lTXzYzNTgoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiB1c2UgY29ycmVjdCBwY21jaWEgcmVhZHkgZ3BpbyBkZXBlbmRpbmcgb24gcHJvY2Vzc29yICovCisJc3dpdGNoIChiY202M3h4X2dldF9jcHVfaWQoKSkgeworCWNhc2UgQkNNNjM0OF9DUFVfSUQ6CisJCXBkLnJlYWR5X2dwaW8gPSAyMjsKKwkJYnJlYWs7CisKKwljYXNlIEJDTTYzNThfQ1BVX0lEOgorCQlwZC5yZWFkeV9ncGlvID0gMTg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9QQ01DSUEpOworCXBjbWNpYV9yZXNvdXJjZXNbMF0uZW5kID0gcGNtY2lhX3Jlc291cmNlc1swXS5zdGFydCArCisJCVJTRVRfUENNQ0lBX1NJWkUgLSAxOworCXBjbWNpYV9yZXNvdXJjZXNbNF0uc3RhcnQgPSBiY202M3h4X2dldF9pcnFfbnVtYmVyKElSUV9QQ01DSUEpOworCisJLyogY29uZmlndXJlIHBjbWNpYSBjaGlwIHNlbGVjdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXJldCA9IGNvbmZpZ19wY21jaWFfY3MocGNtY2lhX2NzW2ldLmNzLAorCQkJCSAgICAgICBwY21jaWFfY3NbaV0uYmFzZSwKKwkJCQkgICAgICAgcGNtY2lhX2NzW2ldLnNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfZXJyOworCX0KKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmJjbTYzeHhfcGNtY2lhX2RldmljZSk7CisKK291dF9lcnI6CisJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gc2V0IHBjbWNpYSBjaGlwIHNlbGVjdFxuIik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi11YXJ0LmMgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNTE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvYmNtNjN4eC9kZXYtdWFydC5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmVuZAkJPSAtMSwgLyogZmlsbGVkIGF0IHJ1bnRpbWUgKi8KKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gLTEsIC8qIGZpbGxlZCBhdCBydW50aW1lICovCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYmNtNjN4eF91YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eF91YXJ0IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVhcnRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3VhcnRfcmVnaXN0ZXIodm9pZCkKK3sKKwl1YXJ0X3Jlc291cmNlc1swXS5zdGFydCA9IGJjbTYzeHhfcmVnc2V0X2FkZHJlc3MoUlNFVF9VQVJUMCk7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kID0gdWFydF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJdWFydF9yZXNvdXJjZXNbMF0uZW5kICs9IFJTRVRfVUFSVF9TSVpFIC0gMTsKKwl1YXJ0X3Jlc291cmNlc1sxXS5zdGFydCA9IGJjbTYzeHhfZ2V0X2lycV9udW1iZXIoSVJRX1VBUlQwKTsKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3VhcnRfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwoYmNtNjN4eF91YXJ0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYyBiL2FyY2gvbWlwcy9iY202M3h4L2Rldi13ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZjNzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvZGV2LXdkdC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRmxvcmlhbiBGYWluZWxsaSA8ZmxvcmlhbkBvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfY3B1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZW5kCQk9IC0xLCAvKiBmaWxsZWQgYXQgcnVudGltZSAqLworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJjbTYzeHhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eC13ZHQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh3ZHRfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSB3ZHRfcmVzb3VyY2VzLAorfTsKKworaW50IF9faW5pdCBiY202M3h4X3dkdF9yZWdpc3Rlcih2b2lkKQoreworCXdkdF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBiY202M3h4X3JlZ3NldF9hZGRyZXNzKFJTRVRfV0RUKTsKKwl3ZHRfcmVzb3VyY2VzWzBdLmVuZCA9IHdkdF9yZXNvdXJjZXNbMF0uc3RhcnQ7CisJd2R0X3Jlc291cmNlc1swXS5lbmQgKz0gUlNFVF9XRFRfU0laRSAtIDE7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZiY202M3h4X3dkdF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChiY202M3h4X3dkdF9yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvc2V0dXAuYwppbmRleCBiMThhMGNhLi5kMDA1NjU5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNjN4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY202M3h4L3NldHVwLmMKQEAgLTc1LDcgKzc1LDkgQEAKIAkJYmNtNjM0OF9hMV9yZWJvb3QoKTsKIAogCXByaW50ayhLRVJOX0lORk8gInRyaWdnZXJpbmcgd2F0Y2hkb2cgc29mdC1yZXNldC4uLlxuIik7Ci0JYmNtX3BlcmZfd3JpdGVsKFNZU19QTExfU09GVF9SRVNFVCwgUEVSRl9TWVNfUExMX0NUTF9SRUcpOworCXJlZyA9IGJjbV9wZXJmX3JlYWRsKFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKKwlyZWcgfD0gU1lTX1BMTF9TT0ZUX1JFU0VUOworCWJjbV9wZXJmX3dyaXRlbChyZWcsIFBFUkZfU1lTX1BMTF9DVExfUkVHKTsKIAl3aGlsZSAoMSkKIAkJOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IDM4NGYxODQuLjZmMmFjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTE3LDYgKzE3LDE1IEBACiBERUZJTkVfUldMT0NLKG9jdGVvbl9pcnFfY2l1MV9yd2xvY2spOwogREVGSU5FX1NQSU5MT0NLKG9jdGVvbl9pcnFfbXNpX2xvY2spOwogCitzdGF0aWMgaW50IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShpbnQgY3B1KQoreworI2lmZGVmIENPTkZJR19TTVAKKwlyZXR1cm4gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisjZWxzZQorCXJldHVybiBjdm14X2dldF9jb3JlX251bSgpOworI2VuZGlmCit9CisKIHN0YXRpYyB2b2lkIG9jdGVvbl9pcnFfY29yZV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9TVzA7CkBAIC0xNTIsMTEgKzE2MSwxMCBAQAogCWludCBiaXQgPSBpcnEgLSBPQ1RFT05fSVJRX1dPUktRMDsJLyogQml0IDAtNjMgb2YgRU4wICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjA7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwogCQllbjAgJj0gfigxdWxsIDw8IGJpdCk7CiAJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpLCBlbjApOwpAQCAtMTY3LDI2ICsxNzUsNTcgQEAKIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MF9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMCA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjAoY29yZWlkICogMikpOwotCWVuMCAmPSB+KDF1bGwgPDwgYml0KTsKLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSwgZW4wKTsKLQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyOworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTBfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV09SS1EwKTsKKwlpbnQgaW5kZXg7CisJaW50IGNwdTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpbmRleCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpICogMjsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XT1JLUTA7CS8qIEJpdCAwLTYzIG9mIEVOMCAqLwogCi0Jd3JpdGVfbG9jaygmb2N0ZW9uX2lycV9jaXUwX3J3bG9jayk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCXVpbnQ2NF90IGVuMCA9CiAJCQljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGNvcmVpZCAqIDIpKTsKIAkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKQEAgLTIwMCwxMiArMjM5LDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4wKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyKSk7Ci0Jd3JpdGVfdW5sb2NrKCZvY3Rlb25faXJxX2NpdTBfcndsb2NrKTsKKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmb2N0ZW9uX2lycV9jaXUwX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZXQgYWZmaW5pdHkgZm9yIHRoZSBpcnEgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyKHVuc2lnbmVkIGludCBpcnEsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQoreworCWludCBjcHU7CisJaW50IGluZGV4OworCXU2NCBtYXNrID0gMXVsbCA8PCAoaXJxIC0gT0NURU9OX0lSUV9XT1JLUTApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyOworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIGRlc3QpKQorCQkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjBfVzFTKGluZGV4KSwgbWFzayk7CisJCWVsc2UKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4wX1cxQyhpbmRleCksIG1hc2spOworCX0KKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCisvKgorICogTmV3ZXIgb2N0ZW9uIGNoaXBzIGhhdmUgc3VwcG9ydCBmb3IgbG9ja2xlc3MgQ0lVIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MF92MiA9IHsKKwkubmFtZSA9ICJDSVUwIiwKKwkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUwX2VuYWJsZV92MiwKKwkuZGlzYWJsZSA9IG9jdGVvbl9pcnFfY2l1MF9kaXNhYmxlX2FsbF92MiwKKwkuYWNrID0gb2N0ZW9uX2lycV9jaXUwX2Rpc2FibGVfdjIsCisJLmVvaSA9IG9jdGVvbl9pcnFfY2l1MF9lbmFibGVfdjIsCisjaWZkZWYgQ09ORklHX1NNUAorCS5zZXRfYWZmaW5pdHkgPSBvY3Rlb25faXJxX2NpdTBfc2V0X2FmZmluaXR5X3YyLAorI2VuZGlmCit9OworCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9jdGVvbl9pcnFfY2hpcF9jaXUwID0gewogCS5uYW1lID0gIkNJVTAiLAogCS5lbmFibGUgPSBvY3Rlb25faXJxX2NpdTBfZW5hYmxlLApAQCAtMjY5LDExICszNDIsMTAgQEAKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1aW50NjRfdCBlbjE7Ci0jaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHU7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrLCBmbGFncyk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaW50IGNvcmVpZCA9IGNwdV9sb2dpY2FsX21hcChjcHUpOworCQlpbnQgY29yZWlkID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSk7CiAJCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKIAkJZW4xICY9IH4oMXVsbCA8PCBiaXQpOwogCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMShjb3JlaWQgKiAyICsgMSksIGVuMSk7CkBAIC0yODQsMjYgKzM1Niw1OCBAQAogCSAqLwogCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY3ZteF9nZXRfY29yZV9udW0oKSAqIDIgKyAxKSk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWVuMSA9IGN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQllbjEgJj0gfigxdWxsIDw8IGJpdCk7Ci0JY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpLCBlbjEpOwotCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEoY29yZWlkICogMiArIDEpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKK30KKworLyoKKyAqIEVuYWJsZSB0aGUgaXJxIG9uIHRoZSBjdXJyZW50IGNvcmUgZm9yIGNoaXBzIHRoYXQgaGF2ZSB0aGUgRU4qX1cxe1MsQ30KKyAqIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jaXUxX2VuYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFTKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGN1cnJlbnQgY29yZSBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV92Mih1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMTsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCisJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7Cit9CisKKy8qCisgKiBEaXNhYmxlIHRoZSBpcnEgb24gdGhlIGFsbCBjb3JlcyBmb3IgY2hpcHMgdGhhdCBoYXZlIHRoZSBFTipfVzF7UyxDfQorICogcmVnaXN0ZXJzLgorICovCitzdGF0aWMgdm9pZCBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIodW5zaWduZWQgaW50IGlycSkKK3sKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWludCBpbmRleDsKKwlpbnQgY3B1OworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJY3ZteF93cml0ZV9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjFfVzFDKGluZGV4KSwgbWFzayk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQorc3RhdGljIGludCBvY3Rlb25faXJxX2NpdTFfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsCisJCQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpkZXN0KQogewogCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsJLyogQml0IDAtNjMgb2YgRU4xICovCiAKLQl3cml0ZV9sb2NrKCZvY3Rlb25faXJxX2NpdTFfcndsb2NrKTsKKwl3cml0ZV9sb2NrX2lycXNhdmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpbnQgY29yZWlkID0gY3B1X2xvZ2ljYWxfbWFwKGNwdSk7CisJCWludCBjb3JlaWQgPSBvY3Rlb25fY29yZWlkX2Zvcl9jcHUoY3B1KTsKIAkJdWludDY0X3QgZW4xID0KIAkJCWN2bXhfcmVhZF9jc3IoQ1ZNWF9DSVVfSU5UWF9FTjEKIAkJCQkoY29yZWlkICogMiArIDEpKTsKQEAgLTMxOCwxMiArNDIyLDQ2IEBACiAJICogb2YgdGhlbSBhcmUgZG9uZS4KIAkgKi8KIAljdm14X3JlYWRfY3NyKENWTVhfQ0lVX0lOVFhfRU4xKGN2bXhfZ2V0X2NvcmVfbnVtKCkgKiAyICsgMSkpOwotCXdyaXRlX3VubG9jaygmb2N0ZW9uX2lycV9jaXUxX3J3bG9jayk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm9jdGVvbl9pcnFfY2l1MV9yd2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQorCisvKgorICogU2V0IGFmZmluaXR5IGZvciB0aGUgaXJxIGZvciBjaGlwcyB0aGF0IGhhdmUgdGhlIEVOKl9XMXtTLEN9CisgKiByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92Mih1bnNpZ25lZCBpbnQgaXJxLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqZGVzdCkKK3sKKwlpbnQgY3B1OworCWludCBpbmRleDsKKwl1NjQgbWFzayA9IDF1bGwgPDwgKGlycSAtIE9DVEVPTl9JUlFfV0RPRzApOworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCWluZGV4ID0gb2N0ZW9uX2NvcmVpZF9mb3JfY3B1KGNwdSkgKiAyICsgMTsKKwkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBkZXN0KSkKKwkJCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX0lOVFhfRU4xX1cxUyhpbmRleCksIG1hc2spOworCQllbHNlCisJCQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9JTlRYX0VOMV9XMUMoaW5kZXgpLCBtYXNrKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIAorLyoKKyAqIE5ld2VyIG9jdGVvbiBjaGlwcyBoYXZlIHN1cHBvcnQgZm9yIGxvY2tsZXNzIENJVSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjIgPSB7CisJLm5hbWUgPSAiQ0lVMCIsCisJLmVuYWJsZSA9IG9jdGVvbl9pcnFfY2l1MV9lbmFibGVfdjIsCisJLmRpc2FibGUgPSBvY3Rlb25faXJxX2NpdTFfZGlzYWJsZV9hbGxfdjIsCisJLmFjayA9IG9jdGVvbl9pcnFfY2l1MV9kaXNhYmxlX3YyLAorCS5lb2kgPSBvY3Rlb25faXJxX2NpdTFfZW5hYmxlX3YyLAorI2lmZGVmIENPTkZJR19TTVAKKwkuc2V0X2FmZmluaXR5ID0gb2N0ZW9uX2lycV9jaXUxX3NldF9hZmZpbml0eV92MiwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvY3Rlb25faXJxX2NoaXBfY2l1MSA9IHsKIAkubmFtZSA9ICJDSVUxIiwKIAkuZW5hYmxlID0gb2N0ZW9uX2lycV9jaXUxX2VuYWJsZSwKQEAgLTQyMCw2ICs1NTgsOCBAQAogdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQogewogCWludCBpcnE7CisJc3RydWN0IGlycV9jaGlwICpjaGlwMDsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAxOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFNldCB0aGUgZGVmYXVsdCBhZmZpbml0eSB0byB0aGUgYm9vdCBjcHUuICovCkBAIC00MzAsNiArNTcwLDE2IEBACiAJaWYgKE5SX0lSUVMgPCBPQ1RFT05fSVJRX0xBU1QpCiAJCXByX2Vycigib2N0ZW9uX2lycV9pbml0OiBOUl9JUlFTIGlzIHNldCB0b28gbG93XG4iKTsKIAorCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONThYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWF9QQVNTMl9YKSB8fAorCSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTJYWF9QQVNTMl9YKSkgeworCQljaGlwMCA9ICZvY3Rlb25faXJxX2NoaXBfY2l1MF92MjsKKwkJY2hpcDEgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTFfdjI7CisJfSBlbHNlIHsKKwkJY2hpcDAgPSAmb2N0ZW9uX2lycV9jaGlwX2NpdTA7CisJCWNoaXAxID0gJm9jdGVvbl9pcnFfY2hpcF9jaXUxOworCX0KKwogCS8qIDAgLSAxNSByZXNlcnZlZCBmb3IgaTgyNTkgbWFzdGVyIGFuZCBzbGF2ZSBjb250cm9sbGVyLiAqLwogCiAJLyogMTcgLSAyMyBNaXBzIGludGVybmFsICovCkBAIC00NDAsMTQgKzU5MCwxMiBAQAogCiAJLyogMjQgLSA4NyBDSVVfSU5UX1NVTTAgKi8KIAlmb3IgKGlycSA9IE9DVEVPTl9JUlFfV09SS1EwOyBpcnEgPD0gT0NURU9OX0lSUV9CT09URE1BOyBpcnErKykgewotCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmb2N0ZW9uX2lycV9jaGlwX2NpdTAsCi0JCQkJCSBoYW5kbGVfcGVyY3B1X2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpcnEsIGNoaXAwLCBoYW5kbGVfcGVyY3B1X2lycSk7CiAJfQogCiAJLyogODggLSAxNTEgQ0lVX0lOVF9TVU0xICovCiAJZm9yIChpcnEgPSBPQ1RFT05fSVJRX1dET0cwOyBpcnEgPD0gT0NURU9OX0lSUV9SRVNFUlZFRDE1MTsgaXJxKyspIHsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJm9jdGVvbl9pcnFfY2hpcF9jaXUxLAotCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCBjaGlwMSwgaGFuZGxlX3BlcmNwdV9pcnEpOwogCX0KIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC01MDUsMTQgKzY1MywxMCBAQAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBpc19pcnFfZW5hYmxlZF9vbl9jcHUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGNwdSkKIHsKLSAgICAgICB1bnNpZ25lZCBpbnQgaXNzZXQ7Ci0jaWZkZWYgQ09ORklHX1NNUAotICAgICAgIGludCBjb3JlaWQgPSBjcHVfbG9naWNhbF9tYXAoY3B1KTsKLSNlbHNlCi0JaW50IGNvcmVpZCA9IGN2bXhfZ2V0X2NvcmVfbnVtKCk7Ci0jZW5kaWYKKwl1bnNpZ25lZCBpbnQgaXNzZXQ7CisJaW50IGNvcmVpZCA9IG9jdGVvbl9jb3JlaWRfZm9yX2NwdShjcHUpOwogCWludCBiaXQgPSAoaXJxIDwgT0NURU9OX0lSUV9XRE9HMCkgPwotCQlpcnEgLSBPQ1RFT05fSVJRX1dPUktRMCA6IGlycSAtIE9DVEVPTl9JUlFfV0RPRzA7CisJCSAgIGlycSAtIE9DVEVPTl9JUlFfV09SS1EwIDogaXJxIC0gT0NURU9OX0lSUV9XRE9HMDsKICAgICAgICBpZiAoaXJxIDwgNjQpIHsKIAkJaXNzZXQgPSAoY3ZteF9yZWFkX2NzcihDVk1YX0NJVV9JTlRYX0VOMChjb3JlaWQgKiAyKSkgJgogCQkJKDF1bGwgPDwgYml0KSkgPj4gYml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCAzMmQ1MWEzMS4uYzE5OGVmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKQEAgLTY1LDExICs2NSwxMiBAQAogCWN2bXhfd3JpdGVfY3NyKENWTVhfQ0lVX01CT1hfU0VUWChjb3JlaWQpLCBhY3Rpb24pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX3NlbmRfaXBpX21hc2soY3B1bWFza190IG1hc2ssIHVuc2lnbmVkIGludCBhY3Rpb24pCitzdGF0aWMgaW5saW5lIHZvaWQgb2N0ZW9uX3NlbmRfaXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCisJCQkJCXVuc2lnbmVkIGludCBhY3Rpb24pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhpLCBtYXNrKQorCWZvcl9lYWNoX2NwdV9tYXNrKGksICptYXNrKQogCQlvY3Rlb25fc2VuZF9pcGlfc2luZ2xlKGksIGFjdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3JidHg0OXh4X2RlZmNvbmZpZwppbmRleCBjNjk4MTNiLi42YzZhMTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYnR4NDl4eF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJ0eDQ5eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNwotIyBXZWQgTWFyICA0IDIzOjA4OjA2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzYKKyMgU3VuIE5vdiAgOCAyMjo1OTo0NyAyMDA5CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTksMTYgKzksMTggQEAKICMgTWFjaGluZSBzZWxlY3Rpb24KICMKICMgQ09ORklHX01BQ0hfQUxDSEVNWSBpcyBub3Qgc2V0CisjIENPTkZJR19BUjcgaXMgbm90IHNldAogIyBDT05GSUdfQkFTTEVSX0VYQ0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19CQ000N1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JDTTYzWFggaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVNBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRU1PVEVfRlVMT05HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9PTkdTT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0VNTUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVDX01BUktFSU5TIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX05YUF9TVEIyMjAgaXMgbm90IHNldAogIyBDT05GSUdfTlhQX1NUQjIyNSBpcyBub3Qgc2V0CkBAIC00NSw2ICs0Nyw3IEBACiAjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBVklVTV9PQ1RFT05fU0lNVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBVklVTV9PQ1RFT05fUkVGRVJFTkNFX0JPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMQ0hFTVlfR1BJT19JTkRJUkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9UWFg5PXkKIENPTkZJR19UT1NISUJBX1JCVFg0OTI3PXkKIENPTkZJR19UT1NISUJBX1JCVFg0OTM4PXkKQEAgLTg2LDcgKzg5LDYgQEAKIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX1NZU19IQVNfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0hPVFBMVUdfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19DUFVfQklHX0VORElBTj15CkBAIC0xMDEsNyArMTAzLDcgQEAKICMKICMgQ1BVIHNlbGVjdGlvbgogIwotIyBDT05GSUdfQ1BVX0xPT05HU09OMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfTE9PTkdTT04yRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzMyX1IxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9NSVBTMzJfUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX01JUFM2NF9SMSBpcyBub3Qgc2V0CkBAIC0xMzcsNiArMTM5LDcgQEAKIENPTkZJR19QQUdFX1NJWkVfNEtCPXkKICMgQ09ORklHX1BBR0VfU0laRV84S0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzE2S0IgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9TSVpFXzMyS0IgaXMgbm90IHNldAogIyBDT05GSUdfUEFHRV9TSVpFXzY0S0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9IQVNfUFJFRkVUQ0g9eQogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQpAQCAtMTU0LDcgKzE1NywxMCBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfVElDS19PTkVTSE9UPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKQEAgLTE3NSw2ICsxODEsNyBAQAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0xOTQsMTEgKzIwMSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMjA5LDggKzIxNywxMiBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKQEAgLTIyMCwyNSArMjMyLDM1IEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiAjIENPTkZJR19QQ1NQS1JfUExBVEZPUk0gaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15Ci0jIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKLSMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0yNDYsOCArMjY4LDggQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yNzQsNiArMjk2LDcgQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKIAogIwpAQCAtMjg4LDYgKzMxMSw3IEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIworQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKQEAgLTI5NSw3ICszMTksNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMTEsNiArMzM0LDcgQEAKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKQEAgLTMzNiw2ICszNjAsNyBAQAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNDcsNyArMzcyLDYgQEAKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtMzY1LDkgKzM4OSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC0zNzYsOSArNDAwLDkgQEAKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKIENPTkZJR19NVERfQ0hBUj15Ci0jIENPTkZJR19NVERfQkxLREVWUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLX1JPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxLREVWUz1tCitDT05GSUdfTVREX0JMT0NLPW0KK0NPTkZJR19NVERfQkxPQ0tfUk89bQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldApAQCAtNDE0LDE2ICs0MzgsMjAgQEAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorQ09ORklHX01URF9SQlRYNDkzOT15CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTQzNSw3ICs0NjMsMTUgQEAKICMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9bQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPW0KKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfVFhYOU5ERk1DPW0KICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIwpAQCAtNDcxLDYgKzUwNyw3IEBACiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKIENPTkZJR19JREVfVElNSU5HUz15CiAjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKIENPTkZJR19JREVfR0Q9eQpAQCAtNTM0LDggKzU3MSwxMyBAQAogIwogCiAjCi0jIEEgbmV3IGFsdGVybmF0aXZlIEZpcmVXaXJlIHN0YWNrIGlzIGF2YWlsYWJsZSB3aXRoIEVYUEVSSU1FTlRBTD15CisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCiAjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKQEAgLTU3NCw2ICs2MTYsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKIENPTkZJR19ORTIwMDA9eQpAQCAtNjAyLDE4ICs2NDYsMTUgQEAKICMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogCiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKQEAgLTY1Myw2ICs2OTQsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9UWFg5PXkKQEAgLTY2Niw3ICs3MDgsOSBAQAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET01fVFg0OTM5PW0KICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNjg2LDYgKzczMCwxMCBAQAogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogCkBAIC03MDEsMTcgKzc0OSwyMiBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtNzQwLDI4ICs3OTMsMTcgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTc3Miw3ICs4MTQsNDIgQEAKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD1tCisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPW0KK0NPTkZJR19TTkRfVElNRVI9bQorQ09ORklHX1NORF9QQ009bQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQUM5N19DT0RFQz1tCisjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JUFMgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9bQorQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQorQ09ORklHX1NORF9TT0NfVFhYOUFDTEM9bQorQ09ORklHX0hBU19UWFg5X0FDTEM9eQorQ09ORklHX1NORF9TT0NfVFhYOUFDTENfQUM5Nz1tCitDT05GSUdfU05EX1NPQ19UWFg5QUNMQ19HRU5FUklDPW0KK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BQzk3X0JVUz1tCiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtNzgzLDYgKzg2MCw4IEBACiAjIExFRCBkcml2ZXJzCiAjCiBDT05GSUdfTEVEU19HUElPPXkKK0NPTkZJR19MRURTX0dQSU9fUExBVEZPUk09eQorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKIAogIwogIyBMRUQgVHJpZ2dlcnMKQEAgLTc5Miw3ICs4NzEsMTIgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfSURFX0RJU0s9eQogQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQogIyBDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKQEAgLTgyMCw2ICs5MDQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4PXkKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTg0MCw4ICs5MjUsMjYgQEAKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9UWDQ5Mzk9eQotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKK0NPTkZJR19UWFg5X0RNQUM9bQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTWU5DX1RYX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg1Myw5ICs5NTYsMTAgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC04NjYsNiArOTcwLDEwIEBACiBDT05GSUdfR0VORVJJQ19BQ0w9eQogCiAjCisjIENhY2hlcworIworCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtODkwLDcgKzk5OCwyNyBAQAogQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz1tCitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05MjIsNiArMTA1MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorQ09ORklHX1NUUklQX0FTTV9TWU1TPXkKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTkyOSwxMSArMTA1OCw5IEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci0KLSMKLSMgVHJhY2VycwotIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfQ01ETElORT0iIgpAQCAtOTQ2LDYgKzEwNzMsNyBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtOTU5LDYgKzEwODcsMTAgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBkMTZhZmRkLi42NjRiYTUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgogCiB2b2lkICpkbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWcpOwpAQCAtNzMsMTQgKzc0LDQgQEAKIGV4dGVybiB2b2lkIGRtYV9jYWNoZV9zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdmFkZHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCi0jaWYgMAotI2RlZmluZSBBUkNIX0hBU19ETUFfREVDTEFSRV9DT0hFUkVOVF9NRU1PUlkKLQotZXh0ZXJuIGludCBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGJ1c19hZGRyLAotCWRtYV9hZGRyX3QgZGV2aWNlX2FkZHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgZG1hX3JlbGVhc2VfZGVjbGFyZWRfbWVtb3J5KHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCAqIGRtYV9tYXJrX2RlY2xhcmVkX21lbW9yeV9vY2N1cGllZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JZG1hX2FkZHJfdCBkZXZpY2VfYWRkciwgc2l6ZV90IHNpemUpOwotI2VuZGlmCi0KICNlbmRpZiAvKiBfQVNNX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCBlZmVkZGM4Li4wYjg5YjgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC00OCw5ICs0OCw5IEBACiAjZGVmaW5lIEZJWF9OX0NPTE9VUlMgOAogCUZJWF9DTUFQX0JFR0lOLAogI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlGSVhfQ01BUF9FTkQgPSBGSVhfQ01BUF9CRUdJTiArIChGSVhfTl9DT0xPVVJTICogTlJfQ1BVUyksCisJRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMgKiAyKSwKICNlbHNlCi0JRklYX0NNQVBfRU5EID0gRklYX0NNQVBfQkVHSU4gKyBGSVhfTl9DT0xPVVJTLAorCUZJWF9DTUFQX0VORCA9IEZJWF9DTUFQX0JFR0lOICsgKEZJWF9OX0NPTE9VUlMgKiAyKSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJLyogcmVzZXJ2ZWQgcHRlJ3MgZm9yIHRlbXBvcmFyeSBrZXJuZWwgbWFwcGluZ3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9nY21wcmVncy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKaW5kZXggMzZmZDk2OS4uYzBjZjc2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2djbXByZWdzLmgKQEAgLTE5LDE1ICsxOSwyMCBAQAogI2RlZmluZSBHQ01QX0dEQl9PRlMJCTB4ODAwMCAvKiBHbG9iYWwgRGVidWcgQmxvY2sgKi8KIAogLyogT2Zmc2V0cyB0byBpbmRpdmlkdWFsIEdDTVAgcmVnaXN0ZXJzIGZyb20gR0NNUCBiYXNlICovCi0jZGVmaW5lIEdDTVBPRlMoYmxvY2ssIHRhZywgcmVnKQkoR0NNUF8jI2Jsb2NrIyNfT0ZTICsgR0NNUF8jI3RhZyMjXyMjcmVnIyNfT0ZTKQorI2RlZmluZSBHQ01QT0ZTKGJsb2NrLCB0YWcsIHJlZykJXAorCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMpCisjZGVmaW5lIEdDTVBPRlNuKGJsb2NrLCB0YWcsIHJlZywgbikgXAorCShHQ01QXyMjYmxvY2sjI19PRlMgKyBHQ01QXyMjdGFnIyNfIyNyZWcjI19PRlMobikpCiAKICNkZWZpbmUgR0NNUEdDQk9GUyhyZWcpCQlHQ01QT0ZTKEdDQiwgR0NCLCByZWcpCisjZGVmaW5lIEdDTVBHQ0JPRlNuKHJlZywgbikJR0NNUE9GU24oR0NCLCBHQ0IsIHJlZywgbikKICNkZWZpbmUgR0NNUENMQ0JPRlMocmVnKQlHQ01QT0ZTKENMQ0IsIENDQiwgcmVnKQogI2RlZmluZSBHQ01QQ09DQk9GUyhyZWcpCUdDTVBPRlMoQ09DQiwgQ0NCLCByZWcpCiAjZGVmaW5lIEdDTVBHREJPRlMocmVnKQkJR0NNUE9GUyhHREIsIEdEQiwgcmVnKQogCiAvKiBHQ01QIHJlZ2lzdGVyIGFjY2VzcyAqLwogI2RlZmluZSBHQ01QR0NCKHJlZykJCQlSRUdQKF9nY21wX2Jhc2UsIEdDTVBHQ0JPRlMocmVnKSkKKyNkZWZpbmUgR0NNUEdDQm4ocmVnLCBuKSAgICAgICAgICAgICAgIFJFR1AoX2djbXBfYmFzZSwgR0NNUEdDQk9GU24ocmVnLCBuKSkKICNkZWZpbmUgR0NNUENMQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUENMQ0JPRlMocmVnKSkKICNkZWZpbmUgR0NNUENPQ0IocmVnKQkJCVJFR1AoX2djbXBfYmFzZSwgR0NNUENPQ0JPRlMocmVnKSkKICNkZWZpbmUgR0NNUEdEQihyZWcpCQkJUkVHUChfZ2NtcF9iYXNlLCBHQ01QR0RCT0ZTKHJlZykpCkBAIC00OSwxMCArNTQsMTAgQEAKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0dDTVBCQVNFX01TSwlHQ01QR0NCTVNLKEdDTVBCX0dDTVBCQVNFLCAxNykKICNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX1NIRgkwCiAjZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NU0sJR0NNUEdDQk1TSyhHQ01QQl9DTURFRlRHVCwgMikKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTQkwCi0jZGVmaW5lICBHQ01QX0dDQl9HQ01QQl9DTURFRlRHVF9NRU0xCTEKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxIDIKLSNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UyIDMKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0RJU0FCTEVECTAKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX01FTQkJMQorI2RlZmluZSAgR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEJCTIKKyNkZWZpbmUgIEdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UyCQkzCiAjZGVmaW5lIEdDTVBfR0NCX0NDTUNfT0ZTCQkweDAwMTAJLyogR2xvYmFsIENNIENvbnRyb2wgKi8KICNkZWZpbmUgR0NNUF9HQ0JfR0NTUkFQX09GUwkJMHgwMDIwCS8qIEdsb2JhbCBDU1IgQWNjZXNzIFByaXZpbGVnZSAqLwogI2RlZmluZSAgR0NNUF9HQ0JfR0NTUkFQX0NNQUNDRVNTX1NIRgkwCkBAIC0xMTUsNSArMTIwLDYgQEAKICNkZWZpbmUgR0NNUF9DQ0JfREJHR1JPVVBfT0ZTCQkweDAxMDAJCS8qIERlYnVnQnJlYWsgR3JvdXAgKi8KIAogZXh0ZXJuIGludCBfX2luaXQgZ2NtcF9wcm9iZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLQorZXh0ZXJuIGludCBfX2luaXQgZ2NtcF9uaW9jdSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBnY21wX3NldHJlZ2lvbihpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CiAjZW5kaWYgLyogX0FTTV9HQ01QUkVHU19IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZ2ljLmgKaW5kZXggYThmNTczNC4uOWI5NDM2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2dpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9naWMuaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZSBfQVNNX0dJQ1JFR1NfSAogCiAjdW5kZWYJR0lDSVNCWVRFTElUVExFRU5ESUFOCi0jZGVmaW5lIEdJQ0lTV09SRExJVFRMRUVORElBTgogCiAvKiBDb25zdGFudHMgKi8KICNkZWZpbmUgR0lDX1BPTF9QT1MJCQkxCkBAIC0yMCwxMSArMTksNyBAQAogI2RlZmluZSBHSUNfVFJJR19FREdFCQkJMQogI2RlZmluZSBHSUNfVFJJR19MRVZFTAkJCTAKIAotI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgR0lDX05VTV9JTlRSUwkJCSgyNCArIE5SX0NQVVMgKiAyKQotI2Vsc2UKLSNkZWZpbmUgR0lDX05VTV9JTlRSUwkJCTMyCi0jZW5kaWYKIAogI2RlZmluZSBNU0sobikgKCgxIDw8IChuKSkgLSAxKQogI2RlZmluZSBSRUczMihhZGRyKQkJKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopIChhZGRyKSkKQEAgLTcwLDEzICs2NSwxMyBAQAogI2RlZmluZSBVU01fVklTSUJMRV9TRUNUSU9OX1NJWkUJMHgxMDAwMAogCiAvKiBSZWdpc3RlciBNYXAgZm9yIFNoYXJlZCBTZWN0aW9uICovCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pIHx8IGRlZmluZWQoR0lDSVNXT1JETElUVExFRU5ESUFOKQogCiAjZGVmaW5lCUdJQ19TSF9DT05GSUdfT0ZTCQkweDAwMDAKIAogLyogU2hhcmVkIEdsb2JhbCBDb3VudGVyICovCiAjZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMTAKICNkZWZpbmUgR0lDX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAxNAorI2RlZmluZSBHSUNfU0hfUkVWSVNJT05JRF9PRlMJCTB4MDAyMAogCiAvKiBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KICNkZWZpbmUgR0lDX1NIX1BPTF8zMV8wX09GUwkJMHgwMTAwCkBAIC0xNjQsMjQgKzE1OSwzMSBAQAogCShHSUNfU0hfSU5UUl9NQVBfVE9fVlBFX0JBU0VfT0ZTICsgKDMyICogKGludHIpKSArICgoKHZwZSkgLyAzMikgKiA0KSkKICNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX0JJVCh2cGUpCSgxIDw8ICgodnBlKSAlIDMyKSkKIAorLyogQ29udmVydCBhbiBpbnRlcnJ1cHQgbnVtYmVyIHRvIGEgYnl0ZSBvZmZzZXQvYml0IGZvciBtdWx0aS13b3JkIHJlZ2lzdGVycyAqLworI2RlZmluZSBHSUNfSU5UUl9PRlMoaW50cikgKCgoaW50cikgLyAzMikqNCkKKyNkZWZpbmUgR0lDX0lOVFJfQklUKGludHIpICgoaW50cikgJSAzMikKKwogLyogUG9sYXJpdHkgOiBSZXNldCBWYWx1ZSBpcyBhbHdheXMgMCAqLwogI2RlZmluZSBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUwkJMHgwMTAwCiAjZGVmaW5lIEdJQ19TRVRfUE9MQVJJVFkoaW50ciwgcG9sKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgKCgoaW50cikgLyAzMikgKiA0KSksIChwb2wpIDw8ICgoaW50cikgJSAzMikpCisJR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAocG9sKSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIFRyaWdnZXJpbmcgOiBSZXNldCBWYWx1ZSBpcyBhbHdheXMgMCAqLwogI2RlZmluZSBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTCQkweDAxODAKICNkZWZpbmUgR0lDX1NFVF9UUklHR0VSKGludHIsIHRyaWcpIFwKLQlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArICgoKGludHIpIC8gMzIpICogNCkpLCAodHJpZykgPDwgKChpbnRyKSAlIDMyKSkKKwlHSUNCSVMoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1NFVF9UUklHR0VSX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgKHRyaWcpIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKIAogLyogTWFzayBtYW5pcHVsYXRpb24gKi8KICNkZWZpbmUgR0lDX1NIX1NNQVNLX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCisjZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIpIFwKKwlHSUNXUklURShHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU01BU0tfT0ZTICsgXAorCQlHSUNfSU5UUl9PRlMoaW50cikpLCAxIDw8IEdJQ19JTlRSX0JJVChpbnRyKSkKICNkZWZpbmUgR0lDX1NIX1JNQVNLX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19DTFJfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9STUFTS19PRlMgKyAoKChpbnRyKSAvIDMyKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQorI2RlZmluZSBHSUNfQ0xSX0lOVFJfTUFTSyhpbnRyKSBcCisJR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArIFwKKwkJR0lDX0lOVFJfT0ZTKGludHIpKSwgMSA8PCBHSUNfSU5UUl9CSVQoaW50cikpCiAKIC8qIFJlZ2lzdGVyIE1hcCBmb3IgTG9jYWwgU2VjdGlvbiAqLwogI2RlZmluZSBHSUNfVlBFX0NUTF9PRlMJCQkweDAwMDAKQEAgLTIxOSwxNjEgKzIyMSw2IEBACiAjZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl8zMV8wMF9PRlMJMHgwMDAwCiAjZGVmaW5lIEdJQ19VTVZfU0hfQ09VTlRFUl82M18zMl9PRlMJMHgwMDA0CiAKLSNlbHNlIC8qIENPTkZJR19DUFVfQklHX0VORElBTiAqLwotCi0jZGVmaW5lCUdJQ19TSF9DT05GSUdfT0ZTCQkweDAwMDAKLQotLyogU2hhcmVkIEdsb2JhbCBDb3VudGVyICovCi0jZGVmaW5lIEdJQ19TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMTQKLSNkZWZpbmUgR0lDX1NIX0NPVU5URVJfNjNfMzJfT0ZTCTB4MDAxMAotCi0vKiBJbnRlcnJ1cHQgUG9sYXJpdHkgKi8KLSNkZWZpbmUgR0lDX1NIX1BPTF8zMV8wX09GUwkJMHgwMTA0Ci0jZGVmaW5lIEdJQ19TSF9QT0xfNjNfMzJfT0ZTCQkweDAxMDAKLSNkZWZpbmUgR0lDX1NIX1BPTF85NV82NF9PRlMJCTB4MDEwYwotI2RlZmluZSBHSUNfU0hfUE9MXzEyN185Nl9PRlMJCTB4MDEwOAotI2RlZmluZSBHSUNfU0hfUE9MXzE1OV8xMjhfT0ZTCQkweDAxMTQKLSNkZWZpbmUgR0lDX1NIX1BPTF8xOTFfMTYwX09GUwkJMHgwMTEwCi0jZGVmaW5lIEdJQ19TSF9QT0xfMjIzXzE5Ml9PRlMJCTB4MDExYwotI2RlZmluZSBHSUNfU0hfUE9MXzI1NV8yMjRfT0ZTCQkweDAxMTgKLQotLyogRWRnZS9MZXZlbCBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9UUklHXzMxXzBfT0ZTCQkweDAxODQKLSNkZWZpbmUgR0lDX1NIX1RSSUdfNjNfMzJfT0ZTCQkweDAxODAKLSNkZWZpbmUgR0lDX1NIX1RSSUdfOTVfNjRfT0ZTCQkweDAxOGMKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTI3Xzk2X09GUwkJMHgwMTg4Ci0jZGVmaW5lIEdJQ19TSF9UUklHXzE1OV8xMjhfT0ZTCQkweDAxOTQKLSNkZWZpbmUgR0lDX1NIX1RSSUdfMTkxXzE2MF9PRlMJCTB4MDE5MAotI2RlZmluZSBHSUNfU0hfVFJJR18yMjNfMTkyX09GUwkJMHgwMTljCi0jZGVmaW5lIEdJQ19TSF9UUklHXzI1NV8yMjRfT0ZTCQkweDAxOTgKLQotLyogRHVhbCBFZGdlIFRyaWdnZXJpbmcgKi8KLSNkZWZpbmUgR0lDX1NIX0RVQUxfMzFfMF9PRlMJCTB4MDIwNAotI2RlZmluZSBHSUNfU0hfRFVBTF82M18zMl9PRlMJCTB4MDIwMAotI2RlZmluZSBHSUNfU0hfRFVBTF85NV82NF9PRlMJCTB4MDIwYwotI2RlZmluZSBHSUNfU0hfRFVBTF8xMjdfOTZfT0ZTCQkweDAyMDgKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMTU5XzEyOF9PRlMJCTB4MDIxNAotI2RlZmluZSBHSUNfU0hfRFVBTF8xOTFfMTYwX09GUwkJMHgwMjEwCi0jZGVmaW5lIEdJQ19TSF9EVUFMXzIyM18xOTJfT0ZTCQkweDAyMWMKLSNkZWZpbmUgR0lDX1NIX0RVQUxfMjU1XzIyNF9PRlMJCTB4MDIxOAotCi0vKiBTZXQvQ2xlYXIgY29ycmVzcG9uZGluZyBiaXQgaW4gRWRnZSBEZXRlY3QgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgR0lDX1NIX1dFREdFX09GUwkJMHgwMjgwCi0KLS8qIFJlc2V0IE1hc2sgLSBEaXNhYmxlcyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzMxXzBfT0ZTCQkweDAzMDQKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzYzXzMyX09GUwkJMHgwMzAwCi0jZGVmaW5lIEdJQ19TSF9STUFTS185NV82NF9PRlMJCTB4MDMwYwotI2RlZmluZSBHSUNfU0hfUk1BU0tfMTI3Xzk2X09GUwkJMHgwMzA4Ci0jZGVmaW5lIEdJQ19TSF9STUFTS18xNTlfMTI4X09GUwkweDAzMTQKLSNkZWZpbmUgR0lDX1NIX1JNQVNLXzE5MV8xNjBfT0ZTCTB4MDMxMAotI2RlZmluZSBHSUNfU0hfUk1BU0tfMjIzXzE5Ml9PRlMJMHgwMzFjCi0jZGVmaW5lIEdJQ19TSF9STUFTS18yNTVfMjI0X09GUwkweDAzMTgKLQotLyogU2V0IE1hc2sgKFdPKSAtIEVuYWJsZXMgSW50ZXJydXB0ICovCi0jZGVmaW5lIEdJQ19TSF9TTUFTS18zMV8wX09GUwkJMHgwMzg0Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS182M18zMl9PRlMJCTB4MDM4MAotI2RlZmluZSBHSUNfU0hfU01BU0tfOTVfNjRfT0ZTCQkweDAzOGMKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzEyN185Nl9PRlMJCTB4MDM4OAotI2RlZmluZSBHSUNfU0hfU01BU0tfMTU5XzEyOF9PRlMJMHgwMzk0Ci0jZGVmaW5lIEdJQ19TSF9TTUFTS18xOTFfMTYwX09GUwkweDAzOTAKLSNkZWZpbmUgR0lDX1NIX1NNQVNLXzIyM18xOTJfT0ZTCTB4MDM5YwotI2RlZmluZSBHSUNfU0hfU01BU0tfMjU1XzIyNF9PRlMJMHgwMzk4Ci0KLS8qIEdsb2JhbCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAoUk8pIC0gQml0IFNldCA9PSBJbnRlcnJ1cHQgZW5hYmxlZCAqLwotI2RlZmluZSBHSUNfU0hfTUFTS18zMV8wX09GUwkJMHgwNDA0Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzYzXzMyX09GUwkJMHgwNDAwCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzk1XzY0X09GUwkJMHgwNDBjCi0jZGVmaW5lIEdJQ19TSF9NQVNLXzEyN185Nl9PRlMJCTB4MDQwOAotI2RlZmluZSBHSUNfU0hfTUFTS18xNTlfMTI4X09GUwkJMHgwNDE0Ci0jZGVmaW5lIEdJQ19TSF9NQVNLXzE5MV8xNjBfT0ZTCQkweDA0MTAKLSNkZWZpbmUgR0lDX1NIX01BU0tfMjIzXzE5Ml9PRlMJCTB4MDQxYwotI2RlZmluZSBHSUNfU0hfTUFTS18yNTVfMjI0X09GUwkJMHgwNDE4Ci0KLS8qIFBlbmRpbmcgR2xvYmFsIEludGVycnVwdHMgKFJPKSAqLwotI2RlZmluZSBHSUNfU0hfUEVORF8zMV8wX09GUwkJMHgwNDg0Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzYzXzMyX09GUwkJMHgwNDgwCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzk1XzY0X09GUwkJMHgwNDhjCi0jZGVmaW5lIEdJQ19TSF9QRU5EXzEyN185Nl9PRlMJCTB4MDQ4OAotI2RlZmluZSBHSUNfU0hfUEVORF8xNTlfMTI4X09GUwkJMHgwNDk0Ci0jZGVmaW5lIEdJQ19TSF9QRU5EXzE5MV8xNjBfT0ZTCQkweDA0OTAKLSNkZWZpbmUgR0lDX1NIX1BFTkRfMjIzXzE5Ml9PRlMJCTB4MDQ5YwotI2RlZmluZSBHSUNfU0hfUEVORF8yNTVfMjI0X09GUwkJMHgwNDk4Ci0KLSNkZWZpbmUgR0lDX1NIX0lOVFJfTUFQX1RPX1BJTl9CQVNFX09GUwkweDA1MDAKLQotLyogTWFwcyBJbnRlcnJ1cHQgWCB0byBhIFBpbiAqLwotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1BJTihpbnRyKSBcCi0JKEdJQ19TSF9JTlRSX01BUF9UT19QSU5fQkFTRV9PRlMgKyAoNCAqIGludHIpKQotCi0jZGVmaW5lIEdJQ19TSF9JTlRSX01BUF9UT19WUEVfQkFTRV9PRlMJMHgyMDA0Ci0KLS8qCi0gKiBNYXBzIEludGVycnVwdCBYIHRvIGEgVlBFLiAgVGhpcyBpcyBtb3JlIGNvbXBsZXggdGhhbiB0aGUgTEUgY2FzZSwgYXMKLSAqIG9kZCBhbmQgZXZlbiByZWdpc3RlcnMgbmVlZCB0byBiZSB0cmFuc3Bvc2VkLiAgSXQgZG9lcyB3b3JrIC0gdHJ1c3QgbWUhCi0gKi8KLSNkZWZpbmUgR0lDX1NIX01BUF9UT19WUEVfUkVHX09GRihpbnRyLCB2cGUpIFwKLQkoR0lDX1NIX0lOVFJfTUFQX1RPX1ZQRV9CQVNFX09GUyArICgzMiAqIChpbnRyKSkgKyBcCi0JKCgoKCh2cGUpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKQotI2RlZmluZSBHSUNfU0hfTUFQX1RPX1ZQRV9SRUdfQklUKHZwZSkJKDEgPDwgKCh2cGUpICUgMzIpKQotCi0vKiBQb2xhcml0eSAqLwotI2RlZmluZSBHSUNfU0hfU0VUX1BPTEFSSVRZX09GUwkJMHgwMTAwCi0jZGVmaW5lIEdJQ19TRVRfUE9MQVJJVFkoaW50ciwgcG9sKSBcCi0JR0lDQklTKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TRVRfUE9MQVJJVFlfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAocG9sKSA8PCAoKGludHIpICUgMzIpKQotCi0vKiBUcmlnZ2VyaW5nICovCi0jZGVmaW5lIEdJQ19TSF9TRVRfVFJJR0dFUl9PRlMJCTB4MDE4MAotI2RlZmluZSBHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZykgXAotCUdJQ0JJUyhHSUNfUkVHX0FERFIoU0hBUkVELCBHSUNfU0hfU0VUX1RSSUdHRVJfT0ZTICsgNCArICgoKCgoaW50cikgLyAzMikgXiAxKSAtIDEpICogNCkpLCAodHJpZykgPDwgKChpbnRyKSAlIDMyKSkKLQotLyogTWFzayBtYW5pcHVsYXRpb24gKi8KLSNkZWZpbmUgR0lDX1NIX1NNQVNLX09GUwkJMHgwMzgwCi0jZGVmaW5lIEdJQ19TRVRfSU5UUl9NQVNLKGludHIsIHZhbCkgXAotCUdJQ1dSSVRFKEdJQ19SRUdfQUREUihTSEFSRUQsIEdJQ19TSF9TTUFTS19PRlMgKyA0ICsgKCgoKChpbnRyKSAvIDMyKSBeIDEpIC0gMSkgKiA0KSksICgodmFsKSA8PCAoKGludHIpICUgMzIpKSkKLQotI2RlZmluZSBHSUNfU0hfUk1BU0tfT0ZTCQkweDAzMDAKLSNkZWZpbmUgR0lDX0NMUl9JTlRSX01BU0soaW50ciwgdmFsKSBcCi0JR0lDV1JJVEUoR0lDX1JFR19BRERSKFNIQVJFRCwgR0lDX1NIX1JNQVNLX09GUyArIDQgKyAoKCgoKGludHIpIC8gMzIpIF4gMSkgLSAxKSAqIDQpKSwgKCh2YWwpIDw8ICgoaW50cikgJSAzMikpKQotCi0vKiBSZWdpc3RlciBNYXAgZm9yIExvY2FsIFNlY3Rpb24gKi8KLSNkZWZpbmUgR0lDX1ZQRV9DVExfT0ZTCQkJMHgwMDAwCi0jZGVmaW5lIEdJQ19WUEVfUEVORF9PRlMJCTB4MDAwNAotI2RlZmluZSBHSUNfVlBFX01BU0tfT0ZTCQkweDAwMDgKLSNkZWZpbmUgR0lDX1ZQRV9STUFTS19PRlMJCTB4MDAwYwotI2RlZmluZSBHSUNfVlBFX1NNQVNLX09GUwkJMHgwMDEwCi0jZGVmaW5lIEdJQ19WUEVfV0RfTUFQX09GUwkJMHgwMDQwCi0jZGVmaW5lIEdJQ19WUEVfQ09NUEFSRV9NQVBfT0ZTCQkweDAwNDQKLSNkZWZpbmUgR0lDX1ZQRV9USU1FUl9NQVBfT0ZTCQkweDAwNDgKLSNkZWZpbmUgR0lDX1ZQRV9QRVJGQ1RSX01BUF9PRlMJCTB4MDA1MAotI2RlZmluZSBHSUNfVlBFX1NXSU5UMF9NQVBfT0ZTCQkweDAwNTQKLSNkZWZpbmUgR0lDX1ZQRV9TV0lOVDFfTUFQX09GUwkJMHgwMDU4Ci0jZGVmaW5lIEdJQ19WUEVfT1RIRVJfQUREUl9PRlMJCTB4MDA4MAotI2RlZmluZSBHSUNfVlBFX1dEX0NPTkZJRzBfT0ZTCQkweDAwOTAKLSNkZWZpbmUgR0lDX1ZQRV9XRF9DT1VOVDBfT0ZTCQkweDAwOTQKLSNkZWZpbmUgR0lDX1ZQRV9XRF9JTklUSUFMMF9PRlMJCTB4MDA5OAotI2RlZmluZSBHSUNfVlBFX0NPTVBBUkVfTE9fT0ZTCQkweDAwYTQKLSNkZWZpbmUgR0lDX1ZQRV9DT01QQVJFX0hJX09GUwkJMHgwMGEwCi0KLSNkZWZpbmUgR0lDX1ZQRV9FSUNfU0hBRE9XX1NFVF9CQVNFCTB4MDEwMAotI2RlZmluZSBHSUNfVlBFX0VJQ19TUyhpbnRyKSBcCi0JKEdJQ19FSUNfU0hBRE9XX1NFVF9CQVNFICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfVlBFX0VJQ19WRUNfQkFTRQkJMHgwODAwCi0jZGVmaW5lIEdJQ19WUEVfRUlDX1ZFQyhpbnRyKSBcCi0JKEdJQ19WUEVfRUlDX1ZFQ19CQVNFICsgKDQgKiBpbnRyKSkKLQotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfTk1JX09GUwkJMHgxMDAwCi0jZGVmaW5lIEdJQ19WUEVfVEVOQUJMRV9ZUV9PRlMJCTB4MTAwNAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfSU5UXzMxXzBfT0ZTCTB4MTA4MAotI2RlZmluZSBHSUNfVlBFX1RFTkFCTEVfSU5UXzYzXzMyX09GUwkweDEwODQKLQotLyogVXNlciBNb2RlIFZpc2libGUgU2VjdGlvbiBSZWdpc3RlciBNYXAgKi8KLSNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzMxXzAwX09GUwkweDAwMDQKLSNkZWZpbmUgR0lDX1VNVl9TSF9DT1VOVEVSXzYzXzMyX09GUwkweDAwMDAKLQotI2VuZGlmIC8qICFMRSAqLwotCiAvKiBNYXNrcyAqLwogI2RlZmluZSBHSUNfU0hfQ09ORklHX0NPVU5UU1RPUF9TSEYJMjgKICNkZWZpbmUgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfTVNLCShNU0soMSkgPDwgR0lDX1NIX0NPTkZJR19DT1VOVFNUT1BfU0hGKQpAQCAtNDczLDEyICszMjAsMTMgQEAKICAqIGluIGJ1aWxkaW5nIGlwaV9tYXAuCiAgKi8KIHN0cnVjdCBnaWNfaW50cl9tYXAgewotCXVuc2lnbmVkIGludCBpbnRybnVtOyAJLyogRXh0IEludHIgTnVtIAkqLwogCXVuc2lnbmVkIGludCBjcHVudW07CS8qIERpcmVjdGVkIHRvIHRoaXMgQ1BVICovCiAJdW5zaWduZWQgaW50IHBpbjsJLyogRGlyZWN0ZWQgdG8gdGhpcyBQaW4gKi8KIAl1bnNpZ25lZCBpbnQgcG9sYXJpdHk7CS8qIFBvbGFyaXR5IDogKy8tCSovCiAJdW5zaWduZWQgaW50IHRyaWd0eXBlOwkvKiBUcmlnZ2VyICA6IEVkZ2UvTGV2bCAqLwotCXVuc2lnbmVkIGludCBpcGlmbGFnOwkvKiBJcyB1c2VkIGZvciBJUEkgPwkqLworCXVuc2lnbmVkIGludCBmbGFnczsJLyogTWlzYyBmbGFncwkqLworI2RlZmluZSBHSUNfRkxBR19JUEkgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgICAweDAyCiB9OwogCiBleHRlcm4gdm9pZCBnaWNfaW5pdCh1bnNpZ25lZCBsb25nIGdpY19iYXNlX2FkZHIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hcjcvYXI3LmgKaW5kZXggZGU3MTY5NC4uMjFjYmJjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXI3L2FyNy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWFyNy9hcjcuaApAQCAtNzgsNiArNzgsOSBAQAogI2RlZmluZSBBUjdfUkVGX0NMT0NLCTI1MDAwMDAwCiAjZGVmaW5lIEFSN19YVEFMX0NMT0NLCTI0MDAwMDAwCiAKKy8qIERDTCAqLworI2RlZmluZSBBUjdfV0RUX0hXX0VOQQkweDEwCisKIHN0cnVjdCBwbGF0X2NwbWFjX2RhdGEgewogCWludCByZXNldF9iaXQ7CiAJaW50IHBvd2VyX2JpdDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKaW5kZXggZmVlYTAwMS4uOTE1OTVmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8tYXUxMDAwLmgKQEAgLTEwNCw2ICsxMDQsOCBAQAogCiAJaWYgKChncGlvID49IDgpICYmIChncGlvIDw9IDE1KSkKIAkJcmV0dXJuIE1BS0VfSVJRKDAsIDI5KTsJCS8qIHNoYXJlZCBHUElPMjA4XzIxNSAqLworCisJcmV0dXJuIC1FTlhJTzsKIH0KIAogI2lmZGVmIENPTkZJR19TT0NfQVUxMTAwCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTYzeHhfZGV2X3BjbWNpYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY202M3h4X2Rldl9wY21jaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmViMzk2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtNjN4eF9kZXZfcGNtY2lhLmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBCQ002M1hYX0RFVl9QQ01DSUFfSF8KKyNkZWZpbmUgQkNNNjNYWF9ERVZfUENNQ0lBX0hfCisKKy8qCisgKiBQQ01DSUEgZHJpdmVyIHBsYXRmb3JtIGRhdGEKKyAqLworc3RydWN0IGJjbTYzeHhfcGNtY2lhX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCByZWFkeV9ncGlvOworfTsKKworaW50IGJjbTYzeHhfcGNtY2lhX3JlZ2lzdGVyKHZvaWQpOworCisjZW5kaWYgLyogQkNNNjNYWF9ERVZfUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1pcDI3L3RvcG9sb2d5LmgKaW5kZXggZjY4Mzc0Mi4uMDlhNTliYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtaXAyNy90b3BvbG9neS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWlwMjcvdG9wb2xvZ3kuaApAQCAtNDQsOCArNDQsOCBAQAogCS5idXN5X2ZhY3RvcgkJPSAzMiwJCQlcCiAJLmltYmFsYW5jZV9wY3QJCT0gMTI1LAkJCVwKIAkuY2FjaGVfbmljZV90cmllcwk9IDEsCQkJXAotCS5mbGFncwkJCT0gU0RfTE9BRF9CQUxBTkNFCVwKLQkJCQl8IFNEX0JBTEFOQ0VfRVhFQwlcCisJLmZsYWdzCQkJPSBTRF9MT0FEX0JBTEFOQ0UgfAlcCisJCQkJICBTRF9CQUxBTkNFX0VYRUMsCVwKIAkubGFzdF9iYWxhbmNlCQk9IGppZmZpZXMsCQlcCiAJLmJhbGFuY2VfaW50ZXJ2YWwJPSAxLAkJCVwKIAkubnJfYmFsYW5jZV9mYWlsZWQJPSAwLAkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbG9vbmdzb24vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKaW5kZXggY2U1YjZlMjcuLjk5NDdlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxvb25nc29uL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKICNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAogI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCTEKLSNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTEKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCShQQUdFX1NJWkUgPCAweDQwMDApCiAjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCTAKICNkZWZpbmUgY3B1X2hhc19kc3AJCTAKICNkZWZpbmUgY3B1X2hhc19lanRhZwkJMApAQCAtNTQsNiArNTQsNSBAQAogI2RlZmluZSBjcHVfaGFzX3ZjZQkJMAogI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKICNkZWZpbmUgY3B1X2hhc193YXRjaAkJMQotI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMQogCiAjZW5kaWYgLyogX19BU01fTUFDSF9MT09OR1NPTl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBkOTc0MzUzLi42MDgzZGI1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogI2luY2x1ZGUgPGFzbS9taXBzbXRyZWdzLmg+CkBAIC0zNiwxMSArMzcsMTMgQEAKICNpZmRlZiBDT05GSUdfMzJCSVQKICNkZWZpbmUgVExCTUlTU19IQU5ETEVSX1NFVFVQKCkJCQkJCQlcCiAJd3JpdGVfYzBfY29udGV4dCgodW5zaWduZWQgbG9uZykgc21wX3Byb2Nlc3Nvcl9pZCgpIDw8IDI1KTsJXAorCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsJCQkJCVwKIAlUTEJNSVNTX0hBTkRMRVJfU0VUVVBfUEdEKHN3YXBwZXJfcGdfZGlyKQogI2VuZGlmCiAjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIFRMQk1JU1NfSEFORExFUl9TRVRVUCgpCQkJCQkJXAogCXdyaXRlX2MwX2NvbnRleHQoKHVuc2lnbmVkIGxvbmcpIHNtcF9wcm9jZXNzb3JfaWQoKSA8PCAyNik7CVwKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CQkJCQlcCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChzd2FwcGVyX3BnX2RpcikKICNlbmRpZgogCkBAIC0xNjUsMTIgKzE2OCwxMiBAQAogCSAqIGhhdmluZyBBU0lEX01BU0sgc21hbGxlciB0aGFuIHRoZSBoYXJkd2FyZSBtYXhpbXVtLAogCSAqIG1ha2Ugc3VyZSBubyAic29mdCIgYml0cyBiZWNvbWUgImhhcmQiLi4uCiAJICovCi0Jd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQotCQkJfCAoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSAmIEFTSURfTUFTSykpOworCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAorCQkJIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCkBAIC0yMjYsMTEgKzIyOSwxMSBAQAogCX0KIAkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLwogCXdyaXRlX2MwX2VudHJ5aGkoKHJlYWRfYzBfZW50cnloaSgpICYgfkhXX0FTSURfTUFTSykgfAotCSAgICAgICAgICAgICAgICAgKGNwdV9jb250ZXh0KGNwdSwgbmV4dCkgJiBBU0lEX01BU0spKTsKKwkgICAgICAgICAgICAgICAgIGNwdV9hc2lkKGNwdSwgbmV4dCkpOwogCWVoYigpOyAvKiBNYWtlIHN1cmUgaXQgcHJvcGFnYXRlcyB0byBUQ1N0YXR1cyAqLwogCWV2cGUobXRmbGFncyk7CiAjZWxzZQotCXdyaXRlX2MwX2VudHJ5aGkoY3B1X2NvbnRleHQoY3B1LCBuZXh0KSk7CisJd3JpdGVfYzBfZW50cnloaShjcHVfYXNpZChjcHUsIG5leHQpKTsKICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAJVExCTUlTU19IQU5ETEVSX1NFVFVQX1BHRChuZXh0LT5wZ2QpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IGU2MDBjZWQuLjUwNTExYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfTUlQU19TRVRVUF9ICiAjZGVmaW5lIF9NSVBTX1NFVFVQX0gKIAotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRQkyNTYKKyNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUJNDA5NgogCiAjaWZkZWYgIF9fS0VSTkVMX18KIGV4dGVybiB2b2lkIHNldHVwX2Vhcmx5X3ByaW50ayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCBlMTVmMTFhLi5hZjQyMzg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC03Nyw3ICs3NywxOCBAQAogCiBleHRlcm4gYXNtbGlua2FnZSB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCit7CisJZXh0ZXJuIHN0cnVjdCBwbGF0X3NtcF9vcHMgKm1wX29wczsgICAgIC8qIHByaXZhdGUgKi8KKworCW1wX29wcy0+c2VuZF9pcGlfbWFzaygmY3B1bWFza19vZl9jcHUoY3B1KSwgU01QX0NBTExfRlVOQ1RJT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spCit7CisJZXh0ZXJuIHN0cnVjdCBwbGF0X3NtcF9vcHMgKm1wX29wczsgICAgIC8qIHByaXZhdGUgKi8KKworCW1wX29wcy0+c2VuZF9pcGlfbWFzayhtYXNrLCBTTVBfQ0FMTF9GVU5DVElPTik7Cit9CiAKICNlbmRpZiAvKiBfX0FTTV9TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtdGNfaXBpLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAppbmRleCA4Y2U1MTc1Li4xNTI3OGRiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc210Y19pcGkuaApAQCAtNDUsNiArNDUsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3Qgc210Y19pcGkgKnRhaWw7CiAJaW50IGRlcHRoOworCWludCByZXNjaGVkX2ZsYWc7CS8qIHJlc2NoZWR1bGUgYWxyZWFkeSBxdWV1ZWQgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzbXRjX2lwaV9ucShzdHJ1Y3Qgc210Y19pcGlfcSAqcSwgc3RydWN0IHNtdGNfaXBpICpwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3ByYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg5MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwcmFtLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTUlQU19TUFJBTV9ICisjZGVmaW5lIF9NSVBTX1NQUkFNX0gKKworI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCitleHRlcm4gX19pbml0IHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzcHJhbV9jb25maWcodm9pZCkgeyB9OworI2VuZGlmIC8qIENPTkZJR19DUFVfTUlQU1IyICovCisKKyNlbmRpZiAvKiBfTUlQU19TUFJBTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDAxY2MxNjMuLjg0NWRhMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC04NiwxNCArODYsNyBAQAogI2RlZmluZSBfX0hBVkVfQVJDSF9USFJFQURfSU5GT19BTExPQ0FUT1IKIAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0c2spCQkJCQlcCi0oewkJCQkJCQkJXAotCXN0cnVjdCB0aHJlYWRfaW5mbyAqcmV0OwkJCQlcCi0JCQkJCQkJCVwKLQlyZXQgPSBremFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKTsJCQlcCi0JCQkJCQkJCVwKLQlyZXQ7CQkJCQkJCVwKLX0pCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNlbHNlCiAjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRzaykga21hbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCmluZGV4IDc5MjQwNDkuLjQyZjY2YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKQEAgLTEyLDE3ICsxMiwxNyBAQAogI2lmIGRlZmluZWQoX19NSVBTRUJfXykKICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2JlX3N0cnVjdC5oPgogIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CiAjIGRlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9iZQogIyBkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfYmUKICNlbGlmIGRlZmluZWQoX19NSVBTRUxfXykKICMgaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2xlX3N0cnVjdC5oPgogIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvYmVfYnl0ZXNoaWZ0Lmg+Ci0jIGluY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9nZW5lcmljLmg+CiAjIGRlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9sZQogIyBkZWZpbmUgcHV0X3VuYWxpZ25lZAlfX3B1dF91bmFsaWduZWRfbGUKICNlbHNlCiAjICBlcnJvciAiTUlQUywgYnV0IG5laXRoZXIgX19NSVBTRUJfXywgbm9yIF9fTUlQU0VMX18/Pz8iCiAjZW5kaWYKIAorIyBpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCiAjZW5kaWYgLyogX0FTTV9NSVBTX1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDdmZDE3MGQuLjdiZDMyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcjQwMzBfdGltZXJfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gcjQwMzBfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiUjQwMzAgdGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZTk2MTIyMS4uZWVjZDJhOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCkBAIC0yLDYgKzIsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L01JUFMga2VybmVsLgogIwogCitDUFBGTEFHU192bWxpbnV4LmxkcyA6PSAkKEtCVUlMRF9DRkxBR1MpCisKIGV4dHJhLXkJCTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteQkJKz0gY3B1LXByb2JlLm8gYnJhbmNoLm8gZW50cnkubyBnZW5leC5vIGlycS5vIHByb2Nlc3MubyBcCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWJjbTE0ODAuYwppbmRleCBlMDJmNzliLi5iZmVhMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtYmNtMTQ4MC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1iY20xNDgwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWJjbTE0ODBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtZHMxMjg3LmMKaW5kZXggNjk5NmRhNC4uMDBhNGRhMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWRzMTI4Ny5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1kczEyODcuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGRzMTI4N19pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBkczEyODdfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImRzMTI4NyIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LWd0NjQxeHguYwppbmRleCA5MjM1MWUwLi5mNWQyNjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtZ3Q2NDF4eC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1ndDY0MXh4LmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBndDY0MXh4X3RpbWVyMF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBndDY0MXh4X3RpbWVyMF9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVIHwgSVJRRl9USU1FUiwKIAkubmFtZQkJPSAiZ3Q2NDF4eF90aW1lcjAiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXI0ay5jCmluZGV4IDI2NTIzNjIuLmI0NjlhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogc3RydWN0IGlycWFjdGlvbiBjMF9jb21wYXJlX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9IGMwX2NvbXBhcmVfaW50ZXJydXB0LAotCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSwKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gInRpbWVyIiwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zYjEyNTAuYwppbmRleCBhYzU5MDNkLi5kYTc4ZWVhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNiMTI1MC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlzYjEyNTBfdW5tYXNrX2lycShjcHUsIGlycSk7CiAKIAlhY3Rpb24tPmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyOwotCWFjdGlvbi0+ZmxhZ3MJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFU7CisJYWN0aW9uLT5mbGFncwk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVI7CiAJYWN0aW9uLT5uYW1lCT0gbmFtZTsKIAlhY3Rpb24tPmRldl9pZAk9IGNkOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXNtdGMuYwppbmRleCA5OGJkN2RlLi5iMTAyZTRmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1zbXRjLmMKQEAgLTE3MywxMSArMTczLDEyIEBACiAJdW5zaWduZWQgaW50IG10ZmxhZ3M7CiAJaW50IGNwdTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKLQl1bnNpZ25lZCBsb25nIG5leHRzdGFtcCA9IDBMOworCXVuc2lnbmVkIGxvbmcgbmV4dHN0YW1wOwogCXVuc2lnbmVkIGxvbmcgcmVmZXJlbmNlOwogCiAKIHJlcGVhdDoKKwluZXh0c3RhbXAgPSAwTDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCSAgICAvKgogCSAgICAgKiBGaW5kIHZpcnR1YWwgQ1BVcyB3aXRoaW4gdGhlIGN1cnJlbnQgVlBFIHdobyBoYXZlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwppbmRleCAwMDM3ZjIxLi4yMThlZTZiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0eHg5dG1yX2lycSA9IHsKIAkuaGFuZGxlcgk9IHR4eDl0bXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInR4eDl0bXIiLAogCS5kZXZfaWQJCT0gJnR4eDlfY2xvY2tfZXZlbnRfZGV2aWNlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGY3MDk2NTcuLjdhNTE4NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vd2F0Y2guaD4KLQorI2luY2x1ZGUgPGFzbS9zcHJhbS5oPgogLyoKICAqIE5vdCBhbGwgb2YgdGhlIE1JUFMgQ1BVcyBoYXZlIHRoZSAid2FpdCIgaW5zdHJ1Y3Rpb24gYXZhaWxhYmxlLiBNb3Jlb3ZlciwKICAqIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgIndhaXQiIGZlYXR1cmUgZGlmZmVycyBiZXR3ZWVuIENQVSBmYW1pbGllcy4gVGhpcwpAQCAtNzExLDEyICs3MTEsNiBAQAogCW1pcHNfcHJvYmVfd2F0Y2hfcmVnaXN0ZXJzKGMpOwogfQogCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKLWV4dGVybiB2b2lkIHNwcmFtX2NvbmZpZyh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpIHt9Ci0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIGNwdV9wcm9iZV9taXBzKHN0cnVjdCBjcHVpbmZvX21pcHMgKmMsIHVuc2lnbmVkIGludCBjcHUpCiB7CiAJZGVjb2RlX2NvbmZpZ3MoYyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IDUzMWNlN2IuLmVhNjk1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0xOTEsNiArMTkxLDcgQEAKIAkvKiBTZXQgdGhlIFNQIGFmdGVyIGFuIGVtcHR5IHB0X3JlZ3MuICAqLwogCVBUUl9MSQkJc3AsIF9USFJFQURfU0laRSAtIDMyIC0gUFRfU0laRQogCVBUUl9BRERVCXNwLCAkMjgKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCiAJc2V0X3NhdmVkX3NwCXNwLCB0MCwgdDEKIAlQVFJfU1VCVQlzcCwgNCAqIFNaUkVHCQkjIGluaXQgc3RhY2sgcG9pbnRlcgogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMgYi9hcmNoL21pcHMva2VybmVsL2k4MjUzLmMKaW5kZXggZjdkOGQ1ZC4uZWQ1YzQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtOTgsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnEwICA9IHsKIAkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORyB8IElSUUZfVElNRVIsCiAJLm5hbWUgPSAidGltZXIiCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycS1naWMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCmluZGV4IGQyMDcyY2QuLmIxODFmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLWdpYy5jCkBAIC0xNCwzOCArMTQsMjMgQEAKIAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfZ2ljX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlLCBfbWFwc2l6ZSwgbnVtdnBlcywgbnVtaW50cnM7Ci1zdGF0aWMgc3RydWN0IGdpY19pbnRyX21hcCAqX2ludHJtYXA7CitzdGF0aWMgdW5zaWduZWQgaW50IF9pcnFiYXNlOworc3RhdGljIHVuc2lnbmVkIGludCBnaWNfaXJxX2ZsYWdzW0dJQ19OVU1fSU5UUlNdOworI2RlZmluZSBHSUNfSVJRX0ZMQUdfRURHRSAgICAgIDB4MDAwMQogCi1zdGF0aWMgc3RydWN0IGdpY19wY3B1X21hc2sgcGNwdV9tYXNrc1tOUl9DUFVTXTsKK3N0cnVjdCBnaWNfcGNwdV9tYXNrIHBjcHVfbWFza3NbTlJfQ1BVU107CiBzdGF0aWMgc3RydWN0IGdpY19wZW5kaW5nX3JlZ3MgcGVuZGluZ19yZWdzW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBnaWNfaW50cm1hc2tfcmVncyBpbnRybWFza19yZWdzW05SX0NQVVNdOwogCi0jZGVmaW5lIGdpY193ZWRnZWIyYm9rIDAJLyoKLQkJCQkgKiBDYW4gR0lDIGhhbmRsZSBiMmIgd3JpdGVzIHRvIHdlZGdlIHJlZ2lzdGVyPwotCQkJCSAqLwotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ2ljX3dlZGdlYjJiX2xvY2spOwotI2VuZGlmCi0KIHZvaWQgZ2ljX3NlbmRfaXBpKHVuc2lnbmVkIGludCBpbnRyKQogewotI2lmIGdpY193ZWRnZWIyYm9rID09IDAKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJcHJfZGVidWcoIkNQVSVkOiAlcyBzdGF0dXMgJTA4eFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywKIAkJIHJlYWRfYzBfc3RhdHVzKCkpOwotCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwogCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCAweDgwMDAwMDAwIHwgaW50cik7Ci0JaWYgKCFnaWNfd2VkZ2ViMmJvaykgewotCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnaWNfd2VkZ2ViMmJfbG9jaywgZmxhZ3MpOwotCX0KIH0KIAogLyogVGhpcyBpcyBNYWx0YSBzcGVjaWZpYyBhbmQgbmVlZHMgdG8gYmUgZXhwb3J0ZWQgKi8KLXN0YXRpYyB2b2lkIHZwZV9sb2NhbF9zZXR1cCh1bnNpZ25lZCBpbnQgbnVtdnBlcykKK3N0YXRpYyB2b2lkIF9faW5pdCB2cGVfbG9jYWxfc2V0dXAodW5zaWduZWQgaW50IG51bXZwZXMpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyB0aW1lcl9pbnRlcnJ1cHQgPSA1LCBwZXJmX2ludGVycnVwdCA9IDU7CkBAIC0xMDUsNDQgKzkwLDM0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2ljX2lycV9zdGFydHVwKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19TRVRfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX1NFVF9JTlRSX01BU0soaXJxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX2lycV9hY2sodW5zaWduZWQgaW50IGlycSkKIHsKLSNpZiBnaWNfd2VkZ2ViMmJvayA9PSAwCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSNlbmRpZgotCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOwogCWlycSAtPSBfaXJxYmFzZTsKLQlHSUNfQ0xSX0lOVFJfTUFTSyhpcnEsIDEpOworCXByX2RlYnVnKCJDUFUlZDogJXM6IGlycSVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIF9fZnVuY19fLCBpcnEpOworCUdJQ19DTFJfSU5UUl9NQVNLKGlycSk7CiAKLQlpZiAoX2ludHJtYXBbaXJxXS50cmlndHlwZSA9PSBHSUNfVFJJR19FREdFKSB7Ci0JCWlmICghZ2ljX3dlZGdlYjJib2spCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKKwlpZiAoZ2ljX2lycV9mbGFnc1tpcnFdICYgR0lDX0lSUV9GTEFHX0VER0UpCiAJCUdJQ1dSSVRFKEdJQ19SRUcoU0hBUkVELCBHSUNfU0hfV0VER0UpLCBpcnEpOwotCQlpZiAoIWdpY193ZWRnZWIyYm9rKSB7Ci0JCQkodm9pZCkgR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2ljX3dlZGdlYjJiX2xvY2ssIGZsYWdzKTsKLQkJfQotCX0KIH0KIAogc3RhdGljIHZvaWQgZ2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CiAJaXJxIC09IF9pcnFiYXNlOwotCUdJQ19DTFJfSU5UUl9NQVNLKGlycSwgMSk7CisJcHJfZGVidWcoIkNQVSVkOiAlczogaXJxJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgX19mdW5jX18sIGlycSk7CisJR0lDX0NMUl9JTlRSX01BU0soaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0JR0lDX1NFVF9JTlRSX01BU0soaXJxLCAxKTsKKwlwcl9kZWJ1ZygiQ1BVJWQ6ICVzOiBpcnElZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX2Z1bmNfXywgaXJxKTsKKwlHSUNfU0VUX0lOVFJfTUFTSyhpcnEpOwogfQogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMTU1LDkgKzEzMCw4IEBACiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAlpbnQJCWk7CiAKLQlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKIAlpcnEgLT0gX2lycWJhc2U7Ci0KKwlwcl9kZWJ1ZyhLRVJOX0RFQlVHICIlcyglZCkgY2FsbGVkXG4iLCBfX2Z1bmNfXywgaXJxKTsKIAljcHVtYXNrX2FuZCgmdG1wLCBjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOwogCWlmIChjcHVzX2VtcHR5KHRtcCkpCiAJCXJldHVybiAtMTsKQEAgLTE2OCwxMyArMTQyLDYgQEAKIAkJLyogUmUtcm91dGUgdGhpcyBJUlEgKi8KIAkJR0lDX1NIX01BUF9UT19WUEVfU01BU0soaXJxLCBmaXJzdF9jcHUodG1wKSk7CiAKLQkJLyoKLQkJICogRklYTUU6IGFzc3VtcHRpb24gdGhhdCBfaW50cm1hcCBpcyBvcmRlcmVkIGFuZCBoYXMgbm8gaG9sZXMKLQkJICovCi0KLQkJLyogVXBkYXRlIHRoZSBpbnRyX21hcCAqLwotCQlfaW50cm1hcFtpcnFdLmNwdW51bSA9IGZpcnN0X2NwdSh0bXApOwotCiAJCS8qIFVwZGF0ZSB0aGUgcGNwdV9tYXNrcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQkJY2xlYXJfYml0KGlycSwgcGNwdV9tYXNrc1tpXS5wY3B1X21hc2spOwpAQCAtMjAxLDggKzE2OCw5IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAotCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19zZXR1cF9pbnRyKHVuc2lnbmVkIGludCBpbnRyLCB1bnNpZ25lZCBpbnQgY3B1LAorCXVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBwb2xhcml0eSwgdW5zaWduZWQgaW50IHRyaWd0eXBlLAorCXVuc2lnbmVkIGludCBmbGFncykKIHsKIAkvKiBTZXR1cCBJbnRyIHRvIFBpbiBtYXBwaW5nICovCiAJaWYgKHBpbiAmIEdJQ19NQVBfVE9fTk1JX01TSykgewpAQCAtMjI3LDM4ICsxOTUsNDMgQEAKIAlHSUNfU0VUX1RSSUdHRVIoaW50ciwgdHJpZ3R5cGUpOwogCiAJLyogSW5pdCBJbnRyIE1hc2tzICovCi0JR0lDX1NFVF9JTlRSX01BU0soaW50ciwgMCk7CisJR0lDX0NMUl9JTlRSX01BU0soaW50cik7CisJLyogSW5pdGlhbGlzZSBwZXItY3B1IEludGVycnVwdCBzb2Z0d2FyZSBtYXNrcyAqLworCWlmIChmbGFncyAmIEdJQ19GTEFHX0lQSSkKKwkJc2V0X2JpdChpbnRyLCBwY3B1X21hc2tzW2NwdV0ucGNwdV9tYXNrKTsKKwlpZiAoZmxhZ3MgJiBHSUNfRkxBR19UUkFOU1BBUkVOVCkKKwkJR0lDX1NFVF9JTlRSX01BU0soaW50cik7CisJaWYgKHRyaWd0eXBlID09IEdJQ19UUklHX0VER0UpCisJCWdpY19pcnFfZmxhZ3NbaW50cl0gfD0gR0lDX0lSUV9GTEFHX0VER0U7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBnaWNfYmFzaWNfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGdpY19iYXNpY19pbml0KGludCBudW1pbnRycywgaW50IG51bXZwZXMsCisJCQlzdHJ1Y3QgZ2ljX2ludHJfbWFwICppbnRybWFwLCBpbnQgbWFwc2l6ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3B1OwogCiAJLyogU2V0dXAgZGVmYXVsdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgR0lDX05VTV9JTlRSUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bWludHJzOyBpKyspIHsKIAkJR0lDX1NFVF9QT0xBUklUWShpLCBHSUNfUE9MX1BPUyk7CiAJCUdJQ19TRVRfVFJJR0dFUihpLCBHSUNfVFJJR19MRVZFTCk7Ci0JCUdJQ19TRVRfSU5UUl9NQVNLKGksIDApOworCQlHSUNfQ0xSX0lOVFJfTUFTSyhpKTsKKwkJaWYgKGkgPCBHSUNfTlVNX0lOVFJTKQorCQkJZ2ljX2lycV9mbGFnc1tpXSA9IDA7CiAJfQogCiAJLyogU2V0dXAgc3BlY2lmaWNzICovCi0JZm9yIChpID0gMDsgaSA8IF9tYXBzaXplOyBpKyspIHsKLQkJY3B1ID0gX2ludHJtYXBbaV0uY3B1bnVtOworCWZvciAoaSA9IDA7IGkgPCBtYXBzaXplOyBpKyspIHsKKwkJY3B1ID0gaW50cm1hcFtpXS5jcHVudW07CiAJCWlmIChjcHUgPT0gWCkKIAkJCWNvbnRpbnVlOwotCi0JCWlmIChjcHUgPT0gMCAmJiBpICE9IDAgJiYgX2ludHJtYXBbaV0uaW50cm51bSA9PSAwICYmCi0JCQkJCV9pbnRybWFwW2ldLmlwaWZsYWcgPT0gMCkKKwkJaWYgKGNwdSA9PSAwICYmIGkgIT0gMCAmJiBpbnRybWFwW2ldLmZsYWdzID09IDApCiAJCQljb250aW51ZTsKLQotCQlzZXR1cF9pbnRyKF9pbnRybWFwW2ldLmludHJudW0sCi0JCQkJX2ludHJtYXBbaV0uY3B1bnVtLAotCQkJCV9pbnRybWFwW2ldLnBpbiwKLQkJCQlfaW50cm1hcFtpXS5wb2xhcml0eSwKLQkJCQlfaW50cm1hcFtpXS50cmlndHlwZSk7Ci0JCS8qIEluaXRpYWxpc2UgcGVyLWNwdSBJbnRlcnJ1cHQgc29mdHdhcmUgbWFza3MgKi8KLQkJaWYgKF9pbnRybWFwW2ldLmlwaWZsYWcpCi0JCQlzZXRfYml0KF9pbnRybWFwW2ldLmludHJudW0sIHBjcHVfbWFza3NbY3B1XS5wY3B1X21hc2spOworCQlnaWNfc2V0dXBfaW50cihpLAorCQkJaW50cm1hcFtpXS5jcHVudW0sCisJCQlpbnRybWFwW2ldLnBpbiwKKwkJCWludHJtYXBbaV0ucG9sYXJpdHksCisJCQlpbnRybWFwW2ldLnRyaWd0eXBlLAorCQkJaW50cm1hcFtpXS5mbGFncyk7CiAJfQogCiAJdnBlX2xvY2FsX3NldHVwKG51bXZwZXMpOwpAQCAtMjczLDEyICsyNDYsMTEgQEAKIAkJICAgICB1bnNpZ25lZCBpbnQgaXJxYmFzZSkKIHsKIAl1bnNpZ25lZCBpbnQgZ2ljY29uZmlnOworCWludCBudW12cGVzLCBudW1pbnRyczsKIAogCV9naWNfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBpb3JlbWFwX25vY2FjaGUoZ2ljX2Jhc2VfYWRkciwKIAkJCQkJCSAgICBnaWNfYWRkcnNwYWNlX3NpemUpOwogCV9pcnFiYXNlID0gaXJxYmFzZTsKLQlfaW50cm1hcCA9IGludHJfbWFwOwotCV9tYXBzaXplID0gaW50cl9tYXBfc2l6ZTsKIAogCUdJQ1JFQUQoR0lDX1JFRyhTSEFSRUQsIEdJQ19TSF9DT05GSUcpLCBnaWNjb25maWcpOwogCW51bWludHJzID0gKGdpY2NvbmZpZyAmIEdJQ19TSF9DT05GSUdfTlVNSU5UUlNfTVNLKSA+PgpAQCAtMjkwLDUgKzI2Miw1IEBACiAKIAlwcl9kZWJ1ZygiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQlnaWNfYmFzaWNfaW5pdCgpOworCWdpY19iYXNpY19pbml0KG51bWludHJzLCBudW12cGVzLCBpbnRyX21hcCwgaW50cl9tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2tzcGQuYyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCmluZGV4IGYyMzk3ZjAuLmFkNGUwMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwva3NwZC5jCkBAIC0xNzIsMTMgKzE3MiwyMCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHNwX3NldGZzdWlkZ2lkKCB1aWRfdCB1aWQsIGdpZF90IGdpZCkKK3N0YXRpYyBpbnQgc3Bfc2V0ZnN1aWRnaWQodWlkX3QgdWlkLCBnaWRfdCBnaWQpCiB7Ci0JY3VycmVudC0+Y3JlZC0+ZnN1aWQgPSB1aWQ7Ci0JY3VycmVudC0+Y3JlZC0+ZnNnaWQgPSBnaWQ7CisJc3RydWN0IGNyZWQgKm5ldzsKIAotCWtleV9mc3VpZF9jaGFuZ2VkKGN1cnJlbnQpOwotCWtleV9mc2dpZF9jaGFuZ2VkKGN1cnJlbnQpOworCW5ldyA9IHByZXBhcmVfY3JlZHMoKTsKKwlpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXctPmZzdWlkID0gdWlkOworCW5ldy0+ZnNnaWQgPSBnaWQ7CisKKwljb21taXRfY3JlZHMobmV3KTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTk2LDcgKzIwMyw3IEBACiAJbW1fc2VnbWVudF90IG9sZF9mczsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlzdHJ1Y3QgdGltZXpvbmUgdHo7Ci0JaW50IGNtZDsKKwlpbnQgZXJyLCBjbWQ7CiAKIAljaGFyICp2Y3dkOwogCWludCBzaXplOwpAQCAtMjI1LDggKzIzMiwxMSBAQAogCS8qIFJ1biB0aGUgc3lzY2FsbCBhdCB0aGUgcHJpdmlsZWdlIG9mIHRoZSB1c2VyIHdobyBsb2FkZWQgdGhlCiAJICAgU1AgcHJvZ3JhbSAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCWlmICh2cGVfZ2V0dWlkKHRjbGltaXQpKSB7CisJCWVyciA9IHNwX3NldGZzdWlkZ2lkKHZwZV9nZXR1aWQodGNsaW1pdCksIHZwZV9nZXRnaWQodGNsaW1pdCkpOworCQlpZiAoIWVycikKKwkJCXByX2VycigiQ2hhbmdlIG9mIGNyZWRzIGZhaWxlZFxuIik7CisJfQogCiAJc3dpdGNoIChzYy5jbWQpIHsKIAkvKiBuZWVkcyB0aGUgZmxhZ3MgYXJndW1lbnQgdHJhbnNsYXRpbmcgZnJvbSBTREUga2l0IHRvCkBAIC0yODMsOCArMjkzLDExIEBACiAJCWJyZWFrOwogIAl9IC8qIHN3aXRjaCAqLwogCi0JaWYgKHZwZV9nZXR1aWQodGNsaW1pdCkpCi0JCXNwX3NldGZzdWlkZ2lkKCAwLCAwKTsKKwlpZiAodnBlX2dldHVpZCh0Y2xpbWl0KSkgeworCQllcnIgPSBzcF9zZXRmc3VpZGdpZCgwLCAwKTsKKwkJaWYgKCFlcnIpCisJCQlwcl9lcnIoInJlc3RvcmluZyBvbGQgY3JlZHMgZmFpbGVkXG4iKTsKKwl9CiAKIAlvbGRfZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggNjI0MmJjNi4uYjc3ZmVmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTQyOCwzICs0MjgsOSBAQAogCXJldHVybiBkb19mb3JrKGNsb25lX2ZsYWdzLCBuZXdzcCwgJnJlZ3MsIDAsCiAJICAgICAgICAgICAgICAgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyKTsKIH0KKworYXNtbGlua2FnZSBsb25nIHN5czMyX2xvb2t1cF9kY29va2llKHUzMiBhMCwgdTMyIGExLCBjaGFyIF9fdXNlciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN5c19sb29rdXBfZGNvb2tpZShtZXJnZV82NChhMCwgYTEpLCBidWYsIGxlbik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3J0bHguYyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCmluZGV4IGExMGViZmQuLjM2NGYwNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvcnRseC5jCkBAIC03Miw4ICs3Miw5IEBACiAqLwogc3RhdGljIGlycXJldHVybl90IHJ0bHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgdnBlZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKLQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHZwZWZsYWdzOwogCiAJLyogT3VnaHQgbm90IHRvIGJlIHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgU01UQyBidWlsZHMgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0zOTIsMjAgKzM5MywxMiBAQAogCiBzdGF0aWMgaW50IGZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWludCBlcnI7Ci0KLQlsb2NrX2tlcm5lbCgpOwotCWVyciA9IHJ0bHhfb3BlbihtaW5vciwgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IDAgOiAxKTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gcnRseF9vcGVuKGltaW5vcihpbm9kZSksIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykgPyAwIDogMSk7CiB9CiAKIHN0YXRpYyBpbnQgZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0KLQlyZXR1cm4gcnRseF9yZWxlYXNlKG1pbm9yKTsKKwlyZXR1cm4gcnRseF9yZWxlYXNlKGltaW5vcihpbm9kZSkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggOWJiZjk3Ny4uMTRkZGU0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNDUwLDcgKzQ1MCw3IEBACiAJUFRSCXN5c19pb19zdWJtaXQKIAlQVFIJc3lzX2lvX2NhbmNlbAkJCS8qIDQyNDUgKi8KIAlQVFIJc3lzX2V4aXRfZ3JvdXAKLQlQVFIJc3lzX2xvb2t1cF9kY29va2llCisJUFRSCXN5czMyX2xvb2t1cF9kY29va2llCiAJUFRSCXN5c19lcG9sbF9jcmVhdGUKIAlQVFIJc3lzX2Vwb2xsX2N0bAogCVBUUglzeXNfZXBvbGxfd2FpdAkJCS8qIDQyNTAgKi8KQEAgLTUwNSw3ICs1MDUsNyBAQAogCVBUUglzeXNfZmNobW9kYXQKIAlQVFIJc3lzX2ZhY2Nlc3NhdAkJCS8qIDQzMDAgKi8KIAlQVFIJY29tcGF0X3N5c19wc2VsZWN0NgotCVBUUglzeXNfcHBvbGwKKwlQVFIJY29tcGF0X3N5c19wcG9sbAogCVBUUglzeXNfdW5zaGFyZQogCVBUUglzeXNfc3BsaWNlCiAJUFRSCXN5czMyX3N5bmNfZmlsZV9yYW5nZQkJLyogNDMwNSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggNGViMTA2Yy4uZTcyZTY4NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jcHUuaD4KQEAgLTEyOCwxOSArMTI3LDYgQEAKIAljcHVfaWRsZSgpOwogfQogCi12b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCW1wX29wcy0+c2VuZF9pcGlfbWFzayhtYXNrLCBTTVBfQ0FMTF9GVU5DVElPTik7Ci19Ci0KLS8qCi0gKiBXZSByZXVzZSB0aGUgc2FtZSB2ZWN0b3IgZm9yIHRoZSBzaW5nbGUgSVBJCi0gKi8KLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KQotewotCW1wX29wcy0+c2VuZF9pcGlfbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBTTVBfQ0FMTF9GVU5DVElPTik7Ci19Ci0KIC8qCiAgKiBDYWxsIGludG8gYm90aCBpbnRlcnJ1cHQgaGFuZGxlcnMsIGFzIHdlIHNoYXJlIHRoZSBJUEkgZm9yIHRoZW0KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLmMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwppbmRleCA2NzE1M2EwLi4yNDYzMGZkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtdGMuYwpAQCAtNzUsNyArNzUsNiBAQAogCiBhc2lkdXNlIHNtdGNfbGl2ZV9hc2lkW01BWF9TTVRDX1RMQlNdW01BWF9TTVRDX0FTSURTXTsKIAotCiAvKgogICogTnVtYmVyIG9mIEludGVyUHJvY2Vzc29yIEludGVycnVwdCAoSVBJKSBtZXNzYWdlIGJ1ZmZlcnMgdG8gYWxsb2NhdGUKICAqLwpAQCAtMzg4LDYgKzM4Nyw3IEBACiAJCUlQSVFbaV0uaGVhZCA9IElQSVFbaV0udGFpbCA9IE5VTEw7CiAJCXNwaW5fbG9ja19pbml0KCZJUElRW2ldLmxvY2spOwogCQlJUElRW2ldLmRlcHRoID0gMDsKKwkJSVBJUVtpXS5yZXNjaGVkX2ZsYWcgPSAwOyAvKiBObyByZXNjaGVkdWxlcyBxdWV1ZWQgaW5pdGlhbGx5ICovCiAJfQogCiAJLyogY3B1X2RhdGEgaW5kZXggc3RhcnRzIGF0IHplcm8gKi8KQEAgLTc0MSwxMSArNzQxLDI0IEBACiBzdGF0aWMgdm9pZCBzbXRjX2lwaV9xZHVtcCh2b2lkKQogewogCWludCBpOworCXN0cnVjdCBzbXRjX2lwaSAqdGVtcDsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTIDtpKyspIHsKLQkJcHJpbnRrKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAorCQlwcl9pbmZvKCJJUElRWyVkXTogaGVhZCA9IDB4JXgsIHRhaWwgPSAweCV4LCBkZXB0aCA9ICVkXG4iLAogCQkJaSwgKHVuc2lnbmVkKUlQSVFbaV0uaGVhZCwgKHVuc2lnbmVkKUlQSVFbaV0udGFpbCwKIAkJCUlQSVFbaV0uZGVwdGgpOworCQl0ZW1wID0gSVBJUVtpXS5oZWFkOworCisJCXdoaWxlICh0ZW1wICE9IElQSVFbaV0udGFpbCkgeworCQkJcHJfZGVidWcoIiVkICVkICVkOiAiLCB0ZW1wLT50eXBlLCB0ZW1wLT5kZXN0LAorCQkJICAgICAgIChpbnQpdGVtcC0+YXJnKTsKKyNpZmRlZglTTVRDX0lQSV9ERUJVRworCQkgICAgcHJfZGVidWcoIiV1ICVsdVxuIiwgdGVtcC0+c2VuZGVyLCB0ZW1wLT5zdGFtcCk7CisjZWxzZQorCQkgICAgcHJfZGVidWcoIlxuIik7CisjZW5kaWYKKwkJICAgIHRlbXAgPSB0ZW1wLT5mbGluazsKKwkJfQogCX0KIH0KIApAQCAtNzg0LDExICs3OTcsMTYgQEAKIAlpbnQgbXRmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRjcmVzdGFydDsKIAlleHRlcm4gdm9pZCByNGtfd2FpdF9pcnFvZmYodm9pZCksIF9fcGFzdHdhaXQodm9pZCk7CisJaW50IHNldF9yZXNjaGVkX2ZsYWcgPSAodHlwZSA9PSBMSU5VWF9TTVBfSVBJICYmCisJCQkJYWN0aW9uID09IFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKTsKIAogCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CiAJCXByaW50aygiQ2Fubm90IFNlbmQgSVBJIHRvIHNlbGYhXG4iKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoc2V0X3Jlc2NoZWRfZmxhZyAmJiBJUElRW2NwdV0ucmVzY2hlZF9mbGFnICE9IDApCisJCXJldHVybjsgLyogVGhlcmUgaXMgYSByZXNjaGVkdWxlIHF1ZXVlZCBhbHJlYWR5ICovCisKIAkvKiBTZXQgdXAgYSBkZXNjcmlwdG9yLCB0byBiZSBkZWxpdmVyZWQgZWl0aGVyIHByb21wdGx5IG9yIHF1ZXVlZCAqLwogCXBpcGkgPSBzbXRjX2lwaV9kcSgmZnJlZUlQSXEpOwogCWlmIChwaXBpID09IE5VTEwpIHsKQEAgLTgwMSw2ICs4MTksNyBAQAogCXBpcGktPmRlc3QgPSBjcHU7CiAJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkICE9IGNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV0udnBlX2lkKSB7CiAJCS8qIElmIG5vdCBvbiBzYW1lIFZQRSwgZW5xdWV1ZSBhbmQgc2VuZCBjcm9zcy1WUEUgaW50ZXJydXB0ICovCisJCUlQSVFbY3B1XS5yZXNjaGVkX2ZsYWcgfD0gc2V0X3Jlc2NoZWRfZmxhZzsKIAkJc210Y19pcGlfbnEoJklQSVFbY3B1XSwgcGlwaSk7CiAJCUxPQ0tfQ09SRV9QUkEoKTsKIAkJc2V0dGMoY3B1X2RhdGFbY3B1XS50Y19pZCk7CkBAIC04NDcsNiArODY2LDcgQEAKIAkJCSAqLwogCQkJd3JpdGVfdGNfYzBfdGNoYWx0KDApOwogCQkJVU5MT0NLX0NPUkVfUFJBKCk7CisJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnIHw9IHNldF9yZXNjaGVkX2ZsYWc7CiAJCQlzbXRjX2lwaV9ucSgmSVBJUVtjcHVdLCBwaXBpKTsKIAkJfSBlbHNlIHsKIHBvc3RkaXJlY3Q6CkBAIC05OTYsMTIgKzEwMTYsMTUgQEAKIAkJICogYWxyZWFkeSBlbmFibGVkLgogCQkgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJCXNwaW5fbG9jaygmcS0+bG9jayk7CiAJCXBpcGkgPSBfX3NtdGNfaXBpX2RxKHEpOwogCQlzcGluX3VubG9jaygmcS0+bG9jayk7Ci0JCWlmIChwaXBpICE9IE5VTEwpCisJCWlmIChwaXBpICE9IE5VTEwpIHsKKwkJCWlmIChwaXBpLT50eXBlID09IExJTlVYX1NNUF9JUEkgJiYKKwkJCSAgICAoaW50KXBpcGktPmFyZyA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRikKKwkJCQlJUElRW2NwdV0ucmVzY2hlZF9mbGFnID0gMDsKIAkJCWlwaV9kZWNvZGUocGlwaSk7CisJCX0KIAkJLyoKIAkJICogVGhlIHVzZSBvZiB0aGUgX19yYXdfbG9jYWwgcmVzdG9yZSBpc24ndAogCQkgKiBhcyBvYnZpb3VzbHkgbmVjZXNzYXJ5IGhlcmUgYXMgaW4gc210Y19pcGlfcmVwbGF5KCksCkBAIC0xMDgyLDYgKzExMDUsOSBAQAogCQkJCSAqIHdpdGggaW50ZXJydXB0cyBvZmYKIAkJCQkgKi8KIAkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJaWYgKHBpcGktPnR5cGUgPT0gTElOVVhfU01QX0lQSSAmJgorCQkJCSAgICAoaW50KXBpcGktPmFyZyA9PSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRikKKwkJCQkJSVBJUVtjcHVdLnJlc2NoZWRfZmxhZyA9IDA7CiAJCQkJaXBpX2RlY29kZShwaXBpKTsKIAkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCQl9CkBAIC0xMDk4LDkgKzExMjQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpcnFfaXBpID0gewogCS5oYW5kbGVyCT0gaXBpX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCwKLQkubmFtZQkJPSAiU01UQ19JUEkiLAotCS5mbGFncwkJPSBJUlFGX1BFUkNQVQorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLm5hbWUJCT0gIlNNVENfSVBJIgogfTsKIAogc3RhdGljIHZvaWQgc2V0dXBfY3Jvc3NfdnBlX2ludGVycnVwdHModW5zaWduZWQgaW50IG52cGUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMgYi9hcmNoL21pcHMva2VybmVsL3NwcmFtLmMKaW5kZXggNmRkYjUwNy4uMTgyMWQxMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zcHJhbS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc3ByYW0uYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9mcHUuaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xOTgsOCArMTk3LDcgQEAKIAkJb2Zmc2V0ICs9IDIgKiBTUFJBTV9UQUdfU1RSSURFOwogCX0KIH0KLQotX19jcHVpbml0IHZvaWQgc3ByYW1fY29uZmlnKHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzcHJhbV9jb25maWcodm9pZCkKIHsKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjID0gJmN1cnJlbnRfY3B1X2RhdGE7CiAJdW5zaWduZWQgaW50IGNvbmZpZzA7CkBAIC0yMDgsNiArMjA2LDcgQEAKIAljYXNlIENQVV8yNEs6CiAJY2FzZSBDUFVfMzRLOgogCWNhc2UgQ1BVXzc0SzoKKwljYXNlIENQVV8xMDA0SzoKIAkJY29uZmlnMCA9IHJlYWRfYzBfY29uZmlnKCk7CiAJCS8qIEZJWE1FOiBhZGRyZXNzZXMgYXJlIE1hbHRhIHNwZWNpZmljICovCiAJCWlmIChjb25maWcwICYgKDE8PDI0KSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDliZjBlM2QuLjE2MmIyOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTExLDE1ICsxMSwxNSBAQAogCW5vdGUgUFRfTk9URSBGTEFHUyg0KTsJLyogUl9fICovCiB9CiAKLWlmZGVmIENPTkZJR18zMkJJVAotCWlmZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgorI2lmZGVmIENPTkZJR18zMkJJVAorCSNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KIAkJamlmZmllcyAgPSBqaWZmaWVzXzY0OwotCWVsc2UKKwkjZWxzZQogCQlqaWZmaWVzICA9IGppZmZpZXNfNjQgKyA0OwotCWVuZGlmCi1lbHNlCisJI2VuZGlmCisjZWxzZQogCWppZmZpZXMgID0gamlmZmllc182NDsKLWVuZGlmCisjZW5kaWYKIAogU0VDVElPTlMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMgYi9hcmNoL21pcHMva2VybmVsL3ZwZS5jCmluZGV4IGViNmM0YzUuLjYwNDc3NTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwpAQCAtMTQ0LDE0ICsxNDQsMTUgQEAKIH07CiAKIHN0cnVjdCB7Ci0JLyogVmlydHVhbCBwcm9jZXNzaW5nIGVsZW1lbnRzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB2cGVfbGlzdDsKLQotCS8qIFRocmVhZCBjb250ZXh0cyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdGNfbGlzdDsKKwlzcGlubG9ja190IHZwZV9saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCB2cGVfbGlzdDsJLyogVmlydHVhbCBwcm9jZXNzaW5nIGVsZW1lbnRzICovCisJc3BpbmxvY2tfdCB0Y19saXN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCB0Y19saXN0OwkvKiBUaHJlYWQgY29udGV4dHMgKi8KIH0gdnBlY29udHJvbCA9IHsKLQkudnBlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnZwZV9saXN0KSwKLQkudGNfbGlzdCA9IExJU1RfSEVBRF9JTklUKHZwZWNvbnRyb2wudGNfbGlzdCkKKwkudnBlX2xpc3RfbG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRCwKKwkudnBlX2xpc3QJPSBMSVNUX0hFQURfSU5JVCh2cGVjb250cm9sLnZwZV9saXN0KSwKKwkudGNfbGlzdF9sb2NrCT0gU1BJTl9MT0NLX1VOTE9DS0VELAorCS50Y19saXN0CT0gTElTVF9IRUFEX0lOSVQodnBlY29udHJvbC50Y19saXN0KQogfTsKIAogc3RhdGljIHZvaWQgcmVsZWFzZV9wcm9nbWVtKHZvaWQgKnB0cik7CkBAIC0xNTksMjggKzE2MCwzOCBAQAogLyogZ2V0IHRoZSB2cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWlub3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdnBlICpnZXRfdnBlKGludCBtaW5vcikKIHsKLQlzdHJ1Y3QgdnBlICp2OworCXN0cnVjdCB2cGUgKnJlcywgKnY7CiAKIAlpZiAoIWNwdV9oYXNfbWlwc210KQogCQlyZXR1cm4gTlVMTDsKIAorCXJlcyA9IE5VTEw7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHYtPm1pbm9yID09IG1pbm9yKQotCQkJcmV0dXJuIHY7CisJCWlmICh2LT5taW5vciA9PSBtaW5vcikgeworCQkJcmVzID0gdjsKKwkJCWJyZWFrOworCQl9CiAJfQorCXNwaW5fdW5sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCi0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJlczsKIH0KIAogLyogZ2V0IHRoZSB2cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWlub3IgKi8KIHN0YXRpYyBzdHJ1Y3QgdGMgKmdldF90YyhpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IHRjICp0OworCXN0cnVjdCB0YyAqcmVzLCAqdDsKIAorCXJlcyA9IE5VTEw7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnRjX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdnBlY29udHJvbC50Y19saXN0LCBsaXN0KSB7Ci0JCWlmICh0LT5pbmRleCA9PSBpbmRleCkKLQkJCXJldHVybiB0OworCQlpZiAodC0+aW5kZXggPT0gaW5kZXgpIHsKKwkJCXJlcyA9IHQ7CisJCQlicmVhazsKKwkJfQogCX0KKwlzcGluX3VubG9jaygmdnBlY29udHJvbC50Y19saXN0X2xvY2spOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xOTAsMTUgKzIwMSwxNyBAQAogewogCXN0cnVjdCB2cGUgKnY7CiAKLQlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwlpZiAoKHYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnBlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCX0KIAogCUlOSVRfTElTVF9IRUFEKCZ2LT50Yyk7CisJc3Bpbl9sb2NrKCZ2cGVjb250cm9sLnZwZV9saXN0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJnYtPmxpc3QsICZ2cGVjb250cm9sLnZwZV9saXN0KTsKKwlzcGluX3VubG9jaygmdnBlY29udHJvbC52cGVfbGlzdF9sb2NrKTsKIAogCUlOSVRfTElTVF9IRUFEKCZ2LT5ub3RpZnkpOwogCXYtPm1pbm9yID0gbWlub3I7CisKIAlyZXR1cm4gdjsKIH0KIApAQCAtMjEyLDcgKzIyNSwxMCBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnRjLT50Yyk7CiAJdGMtPmluZGV4ID0gaW5kZXg7CisKKwlzcGluX2xvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ0Yy0+bGlzdCwgJnZwZWNvbnRyb2wudGNfbGlzdCk7CisJc3Bpbl91bmxvY2soJnZwZWNvbnRyb2wudGNfbGlzdF9sb2NrKTsKIAogb3V0OgogCXJldHVybiB0YzsKQEAgLTIyNyw3ICsyNDMsNyBAQAogCWtmcmVlKHYpOwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX210cmVncyh2b2lkKQorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgZHVtcF9tdHJlZ3Modm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIApAQCAtMTA0OCwyMCArMTA2NCwxOSBAQAogCWVudW0gdnBlX3N0YXRlIHN0YXRlOwogCXN0cnVjdCB2cGVfbm90aWZpY2F0aW9ucyAqbm90OwogCXN0cnVjdCB2cGUgKnY7Ci0JaW50IHJldCwgZXJyID0gMDsKKwlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlpZiAobWlub3IgIT0gaW1pbm9yKGlub2RlKSkgewogCQkvKiBhc3N1bWUgb25seSAxIGRldmljZSBhdCB0aGUgbW9tZW50LiAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWUEUgbG9hZGVyOiBvbmx5IHZwZTEgaXMgc3VwcG9ydGVkXG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7CisJCXByX3dhcm5pbmcoIlZQRSBsb2FkZXI6IG9ubHkgdnBlMSBpcyBzdXBwb3J0ZWRcbiIpOworCisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodiA9IGdldF92cGUodGNsaW1pdCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVlBFIGxvYWRlcjogdW5hYmxlIHRvIGdldCB2cGVcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKKwkJcHJfd2FybmluZygiVlBFIGxvYWRlcjogdW5hYmxlIHRvIGdldCB2cGVcbiIpOworCisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXN0YXRlID0geGNoZygmdi0+c3RhdGUsIFZQRV9TVEFURV9JTlVTRSk7CkBAIC0xMTAxLDggKzExMTYsNiBAQAogCXYtPnNoYXJlZF9wdHIgPSBOVUxMOwogCXYtPl9fc3RhcnQgPSAwOwogCi1vdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTk0LDE0ICsxNjA3LDE0IEBACiB7CiAJc3RydWN0IHZwZSAqdiwgKm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpIHsKLQkJCXJlbGVhc2VfdnBlKHYpOwotCQl9Ci0JfQotCiAJZGV2aWNlX2RlbCgmdnBlX2RldmljZSk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIG1vZHVsZV9uYW1lKTsKKworCS8qIE5vIGxvY2tpbmcgbmVlZGVkIGhlcmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgbiwgJnZwZWNvbnRyb2wudnBlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHYtPnN0YXRlICE9IFZQRV9TVEFURV9VTlVTRUQpCisJCQlyZWxlYXNlX3ZwZSh2KTsKKwl9CiB9CiAKIG1vZHVsZV9pbml0KHZwZV9tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9pcnEuYwppbmRleCBmMzY4YzczLi5iMzJiNGEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2lycS5jCisrKyBiL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vaXJxLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkgKiBpbnQtaGFuZGxlciBpcyBub3Qgb24gYm9vdHN0cmFwCiAJICovCiAJY2xlYXJfYzBfc3RhdHVzKFNUMF9JTSB8IFNUMF9CRVYpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAkvKiBzZXR0aW5nIGlycSB0cmlnZ2VyIG1vZGUgKi8KIAlzZXRfaXJxX3RyaWdnZXJfbW9kZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCmluZGV4IDg5MGY3NzkyLi40NTRiNTM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWF0aC1lbXUvY3AxZW11LmMKKysrIGIvYXJjaC9taXBzL21hdGgtZW11L2NwMWVtdS5jCkBAIC0xNjMsMzMgKzE2MywzNCBAQAogCiAvKgogICogSW4gdGhlIExpbnV4IGtlcm5lbCwgd2Ugc3VwcG9ydCBzZWxlY3Rpb24gb2YgRlBSIGZvcm1hdCBvbiB0aGUKLSAqIGJhc2lzIG9mIHRoZSBTdGF0dXMuRlIgYml0LiAgVGhpcyBkb2VzIGltcGx5IHRoYXQsIGlmIGEgZnVsbCAzMgotICogRlBScyBhcmUgZGVzaXJlZCwgdGhlcmUgbmVlZHMgdG8gYmUgYSBmbGlwLWZsb3AgdGhhdCBjYW4gYmUgd3JpdHRlbgotICogdG8gb25lIGF0IHRoYXQgYml0IHBvc2l0aW9uLiAgSW4gYW55IGNhc2UsIE8zMiBNSVBTIEFCSSB1c2VzCi0gKiBvbmx5IHRoZSBldmVuIEZQUnMgKFN0YXR1cy5GUiA9IDApLgorICogYmFzaXMgb2YgdGhlIFN0YXR1cy5GUiBiaXQuICBJZiBhbiBGUFUgaXMgbm90IHByZXNlbnQsIHRoZSBGUiBiaXQKKyAqIGlzIGhhcmR3aXJlZCB0byB6ZXJvLCB3aGljaCB3b3VsZCBpbXBseSBhIDMyLWJpdCBGUFUgZXZlbiBmb3IKKyAqIDY0LWJpdCBDUFVzLiAgRm9yIDY0LWJpdCBrZXJuZWxzIHdpdGggbm8gRlBVIHdlIHVzZSBUSUZfMzJCSVRfUkVHUworICogYXMgYSBwcm94eSBmb3IgdGhlIEZSIGJpdCBzbyB0aGF0IGEgNjQtYml0IEZQVSBpcyBlbXVsYXRlZC4gIEluIGFueQorICogY2FzZSwgZm9yIGEgMzItYml0IGtlcm5lbCB3aGljaCB1c2VzIHRoZSBPMzIgTUlQUyBBQkksIG9ubHkgdGhlCisgKiBldmVuIEZQUnMgYXJlIHVzZWQgKFN0YXR1cy5GUiA9IDApLgogICovCi0KLSNkZWZpbmUgQ1AwX1NUQVRVU19GUl9TVVBQT1JUCi0KLSNpZmRlZiBDUDBfU1RBVFVTX0ZSX1NVUFBPUlQKLSNkZWZpbmUgRlJfQklUIFNUMF9GUgorc3RhdGljIGlubGluZSBpbnQgY29wMV82NGJpdChzdHJ1Y3QgcHRfcmVncyAqeGNwKQoreworCWlmIChjcHVfaGFzX2ZwdSkKKwkJcmV0dXJuIHhjcC0+Y3AwX3N0YXR1cyAmIFNUMF9GUjsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlyZXR1cm4gIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUX1JFR1MpOwogI2Vsc2UKLSNkZWZpbmUgRlJfQklUIDAKKwlyZXR1cm4gMDsKICNlbmRpZgorfQogCi0jZGVmaW5lIFNJRlJPTVJFRyhzaSwgeCkgKChzaSkgPSBcCi0JCQkoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSB8fCAhKHggJiAxKSA/IFwKLQkJCShpbnQpY3R4LT5mcHJbeF0gOiBcCi0JCQkoaW50KShjdHgtPmZwclt4ICYgfjFdID4+IDMyICkpCi0jZGVmaW5lIFNJVE9SRUcoc2ksIHgpCShjdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0gPSBcCi0JCQkoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSB8fCAhKHggJiAxKSA/IFwKKyNkZWZpbmUgU0lGUk9NUkVHKHNpLCB4KSAoKHNpKSA9IGNvcDFfNjRiaXQoeGNwKSB8fCAhKHggJiAxKSA/IFwKKwkJCShpbnQpY3R4LT5mcHJbeF0gOiAoaW50KShjdHgtPmZwclt4ICYgfjFdID4+IDMyKSkKKworI2RlZmluZSBTSVRPUkVHKHNpLCB4KQkoY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSA9IFwKKwkJCWNvcDFfNjRiaXQoeGNwKSB8fCAhKHggJiAxKSA/IFwKIAkJCWN0eC0+ZnByW3ggJiB+MV0gPj4gMzIgPDwgMzIgfCAodTMyKShzaSkgOiBcCiAJCQljdHgtPmZwclt4ICYgfjFdIDw8IDMyID4+IDMyIHwgKHU2NCkoc2kpIDw8IDMyKQogCi0jZGVmaW5lIERJRlJPTVJFRyhkaSwgeCkgKChkaSkgPSBcCi0JCQljdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0pCi0jZGVmaW5lIERJVE9SRUcoZGksIHgpCShjdHgtPmZwclt4ICYgfigoeGNwLT5jcDBfc3RhdHVzICYgRlJfQklUKSA9PSAwKV0gXAotCQkJPSAoZGkpKQorI2RlZmluZSBESUZST01SRUcoZGksIHgpICgoZGkpID0gY3R4LT5mcHJbeCAmIH4oY29wMV82NGJpdCh4Y3ApID09IDApXSkKKyNkZWZpbmUgRElUT1JFRyhkaSwgeCkJKGN0eC0+ZnByW3ggJiB+KGNvcDFfNjRiaXQoeGNwKSA9PSAwKV0gPSAoZGkpKQogCiAjZGVmaW5lIFNQRlJPTVJFRyhzcCwgeCkgU0lGUk9NUkVHKChzcCkuYml0cywgeCkKICNkZWZpbmUgU1BUT1JFRyhzcCwgeCkJU0lUT1JFRygoc3ApLmJpdHMsIHgpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMgYi9hcmNoL21pcHMvbWF0aC1lbXUvZHBfc2ltcGxlLmMKaW5kZXggMWM1NTVlNi4uZDlhZTFkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21hdGgtZW11L2RwX3NpbXBsZS5jCisrKyBiL2FyY2gvbWlwcy9tYXRoLWVtdS9kcF9zaW1wbGUuYwpAQCAtNjIsOCArNjIsNiBAQAogCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoeSwgIm5lZyIpOwogCX0KIAotCWlmIChpZWVlNzU0ZHBfaXNuYW4oeCkpCS8qIGJ1dCBub3QgaW5maW5pdHkgKi8KLQkJcmV0dXJuIGllZWU3NTRkcF9uYW54Y3B0KHgsICJuZWciLCB4KTsKIAlyZXR1cm4geDsKIH0KIApAQCAtNzYsMTUgKzc0LDEyIEBACiAJQ0xFQVJDWDsKIAlGTFVTSFhEUDsKIAorCS8qIENsZWFyIHNpZ24gQUxXQVlTLCBpcnJlc3BlY3RpdmUgb2YgTmFOICovCisJRFBTSUdOKHgpID0gMDsKKwogCWlmICh4YyA9PSBJRUVFNzU0X0NMQVNTX1NOQU4pIHsKLQkJU0VUQ1goSUVFRTc1NF9JTlZBTElEX09QRVJBVElPTik7Ci0JCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdChpZWVlNzU0ZHBfaW5kZWYoKSwgIm5lZyIpOworCQlyZXR1cm4gaWVlZTc1NGRwX25hbnhjcHQoaWVlZTc1NGRwX2luZGVmKCksICJhYnMiKTsKIAl9CiAKLQlpZiAoaWVlZTc1NGRwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0ZHBfbmFueGNwdCh4LCAiYWJzIiwgeCk7Ci0KLQkvKiBxdWljayBmaXggdXAgKi8KLQlEUFNJR04oeCkgPSAwOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jIGIvYXJjaC9taXBzL21hdGgtZW11L3NwX3NpbXBsZS5jCmluZGV4IDc3MGYwZjQuLjMxNzU0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tYXRoLWVtdS9zcF9zaW1wbGUuYworKysgYi9hcmNoL21pcHMvbWF0aC1lbXUvc3Bfc2ltcGxlLmMKQEAgLTYyLDggKzYyLDYgQEAKIAkJcmV0dXJuIGllZWU3NTRzcF9uYW54Y3B0KHksICJuZWciKTsKIAl9CiAKLQlpZiAoaWVlZTc1NHNwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdCh4LCAibmVnIiwgeCk7CiAJcmV0dXJuIHg7CiB9CiAKQEAgLTc2LDE1ICs3NCwxMiBAQAogCUNMRUFSQ1g7CiAJRkxVU0hYU1A7CiAKKwkvKiBDbGVhciBzaWduIEFMV0FZUywgaXJyZXNwZWN0aXZlIG9mIE5hTiAqLworCVNQU0lHTih4KSA9IDA7CisKIAlpZiAoeGMgPT0gSUVFRTc1NF9DTEFTU19TTkFOKSB7Ci0JCVNFVENYKElFRUU3NTRfSU5WQUxJRF9PUEVSQVRJT04pOwogCQlyZXR1cm4gaWVlZTc1NHNwX25hbnhjcHQoaWVlZTc1NHNwX2luZGVmKCksICJhYnMiKTsKIAl9CiAKLQlpZiAoaWVlZTc1NHNwX2lzbmFuKHgpKQkvKiBidXQgbm90IGluZmluaXR5ICovCi0JCXJldHVybiBpZWVlNzU0c3BfbmFueGNwdCh4LCAiYWJzIiwgeCk7Ci0KLQkvKiBxdWljayBmaXggdXAgKi8KLQlTUFNJR04oeCkgPSAwOwogCXJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwppbmRleCA3ZTQ4ZTc2Li45MzY3ZTMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwpAQCAtOTAsNiArOTAsOSBAQAogewogCXZvaWQgKnJldDsKIAorCWlmIChkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZyZXQpKQorCQlyZXR1cm4gcmV0OworCiAJZ2ZwID0gbWFzc2FnZV9nZnBfZmxhZ3MoZGV2LCBnZnApOwogCiAJcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7CkBAIC0xMjIsNiArMTI1LDEwIEBACiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSB2YWRkcjsKKwlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwlpZiAoZG1hX3JlbGVhc2VfZnJvbV9jb2hlcmVudChkZXYsIG9yZGVyLCB2YWRkcikpCisJCXJldHVybjsKIAogCXBsYXRfdW5tYXBfZG1hX21lbShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2luaXQuYyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKaW5kZXggMTVhYTE5MC4uOGQxZjRmMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2luaXQuYworKysgYi9hcmNoL21pcHMvbW0vaW5pdC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KQEAgLTEzMiw3ICsxMzMsMTAgQEAKIAlpbmNfcHJlZW1wdF9jb3VudCgpOwogCWlkeCA9IChhZGRyID4+IFBBR0VfU0hJRlQpICYgKEZJWF9OX0NPTE9VUlMgLSAxKTsKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWR4ICs9IEZJWF9OX0NPTE9VUlMgKiBzbXBfcHJvY2Vzc29yX2lkKCkgKworCQkoaW5faW50ZXJydXB0KCkgPyAoRklYX05fQ09MT1VSUyAqIE5SX0NQVVMpIDogMCk7CisjZWxzZQorCWlkeCArPSBpbl9pbnRlcnJ1cHQoKSA/IEZJWF9OX0NPTE9VUlMgOiAwOwogI2VuZGlmCiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9DTUFQX0VORCAtIGlkeCk7CiAJcHRlID0gbWtfcHRlKHBhZ2UsIFBBR0VfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMgYi9hcmNoL21pcHMvbW0vc2MtbWlwcy5jCmluZGV4IGI1NWMyZDEuLjVhYjVmYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9zYy1taXBzLmMKKysrIGIvYXJjaC9taXBzL21tL3NjLW1pcHMuYwpAQCAtMzIsNiArMzIsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgbWlwc19zY19pbnYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CisJdW5zaWduZWQgbG9uZyBsc2l6ZSA9IGNwdV9zY2FjaGVfbGluZV9zaXplKCk7CisJdW5zaWduZWQgbG9uZyBhbG1hc2sgPSB+KGxzaXplIC0gMSk7CisKKwljYWNoZV9vcChIaXRfV3JpdGViYWNrX0ludl9TRCwgYWRkciAmIGFsbWFzayk7CisJY2FjaGVfb3AoSGl0X1dyaXRlYmFja19JbnZfU0QsIChhZGRyICsgc2l6ZSAtIDEpICYgYWxtYXNrKTsKIAlibGFzdF9pbnZfc2NhY2hlX3JhbmdlKGFkZHIsIGFkZHIgKyBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWFtb24uYwppbmRleCBkZjllNTI2My4uNDY5ZDliMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1hbW9uLmMKQEAgLTcwLDExICs3MCwxMiBAQAogCWxhdW5jaC0+c3AgPSBzcDsKIAlsYXVuY2gtPmEwID0gYTA7CiAKLQkvKiBNYWtlIHN1cmUgdGFyZ2V0IHNlZXMgcGFyYW1ldGVycyBiZWZvcmUgdGhlIGdvIGJpdCAqLwotCXNtcF9tYigpOwotCisJc21wX3dtYigpOyAgICAgICAgICAgICAgLyogVGFyZ2V0IG11c3Qgc2VlIHBhcmFtZXRlcnMgYmVmb3JlIGdvICovCiAJbGF1bmNoLT5mbGFncyB8PSBMQVVOQ0hfRkdPOworCXNtcF93bWIoKTsgICAgICAgICAgICAgIC8qIFRhcmdldCBtdXN0IHNlZSBnbyBiZWZvcmUgd2UgcG9sbCAgKi8KKwogCXdoaWxlICgobGF1bmNoLT5mbGFncyAmIExBVU5DSF9GR09ORSkgPT0gMCkKIAkJOworCXNtcF9ybWIoKTsgICAgICAvKiBUYXJnZXQgd2lsbCBiZSB1cGRhdGluZyBmbGFncyBzb29uICovCiAJcHJfZGVidWcoImxhdW5jaDogY3B1JWQgZ29uZSFcbiIsIGNwdSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwppbmRleCAzZTBhOWIzLi40YzNmY2ExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWludC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKQEAgLTg3LDcgKzg3LDcgQEAKIAkJZHVtbXkgPSBCT05JVE9fUENJTUFQX0NGRzsKIAkJaW9iKCk7ICAgIC8qIHN5bmMgKi8KIAotCQlpcnEgPSByZWFkbCgodTMyICopX3BjaWN0cmxfYm9uaXRvX3BjaWNmZyk7CisJCWlycSA9IF9fcmF3X3JlYWRsKCh1MzIgKilfcGNpY3RybF9ib25pdG9fcGNpY2ZnKTsKIAkJaW9iKCk7ICAgIC8qIHN5bmMgKi8KIAkJaXJxICY9IDB4ZmY7CiAJCUJPTklUT19QQ0lNQVBfQ0ZHID0gMDsKQEAgLTM3OSwzOCArMzc5LDQzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0ZGF0YSBtc2NfbnJfZWljaXJxcyA9IEFSUkFZX1NJWkUobXNjX2VpY2lycW1hcCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIC8qCiAgKiBUaGlzIEdJQyBzcGVjaWZpYyB0YWJ1bGFyIGFycmF5IGRlZmluZXMgdGhlIGFzc29jaWF0aW9uIGJldHdlZW4gRXh0ZXJuYWwKICAqIEludGVycnVwdHMgYW5kIENQVXMvQ29yZSBJbnRlcnJ1cHRzLiBUaGUgbmF0dXJlIG9mIHRoZSBFeHRlcm5hbAogICogSW50ZXJydXB0cyBpcyBhbHNvIGRlZmluZWQgaGVyZSAtIHBvbGFyaXR5L3RyaWdnZXIuCiAgKi8KKworI2RlZmluZSBHSUNfQ1BVX05NSSBHSUNfTUFQX1RPX05NSV9NU0sKIHN0YXRpYyBzdHJ1Y3QgZ2ljX2ludHJfbWFwIGdpY19pbnRyX21hcFtHSUNfTlVNX0lOVFJTXSA9IHsKLQl7IEdJQ19FWFRfSU5UUigwKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMSksIAlYLAlYLAkJWCwgCQlYLAkJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDIpLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigzKSwgCTAsCUdJQ19DUFVfSU5UMCwJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDQpLCAJMCwJR0lDX0NQVV9JTlQxLAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoNSksIAkwLAlHSUNfQ1BVX0lOVDIsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig2KSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDcpLCAJMCwJR0lDX0NQVV9JTlQ0LAlHSUNfUE9MX1BPUywgCUdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoOCksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUig5KSwgCTAsCUdJQ19DUFVfSU5UMywJR0lDX1BPTF9QT1MsIAlHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDEwKSwgCVgsCVgsCQlYLCAJCVgsCQkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTEpLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMiksIAkwLAlHSUNfQ1BVX0lOVDMsCUdJQ19QT0xfUE9TLCAJR0lDX1RSSUdfTEVWRUwsCTAgfSwKLQl7IEdJQ19FWFRfSU5UUigxMyksIAkwLAlHSUNfTUFQX1RPX05NSV9NU0ssCUdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwJMCB9LAotCXsgR0lDX0VYVF9JTlRSKDE0KSwgCTAsCUdJQ19NQVBfVE9fTk1JX01TSywJR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLAkwIH0sCi0JeyBHSUNfRVhUX0lOVFIoMTUpLCAJWCwJWCwJCVgsIAkJWCwJCTAgfSwKLS8qIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgZ2VuZXJhbCBpbnRlcnJ1cHRzIG5vdyB3ZSBkbyBJUEkgb25lcyAqLworCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgWCwgWCwJCSAgIFgsCSAJWCwJCTAgfSwKKwl7IFgsIFgsCQkgICBYLAkJWCwJCTAgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMCwgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQxLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDIsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgMCwgR0lDX0NQVV9JTlQ0LCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX0lOVDMsIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfSU5UMywgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkJMCB9LAorCXsgMCwgR0lDX0NQVV9JTlQzLCBHSUNfUE9MX1BPUywgR0lDX1RSSUdfTEVWRUwsIEdJQ19GTEFHX1RSQU5TUEFSRU5UIH0sCisJeyAwLCBHSUNfQ1BVX05NSSwgIEdJQ19QT0xfUE9TLCBHSUNfVFJJR19MRVZFTCwgR0lDX0ZMQUdfVFJBTlNQQVJFTlQgfSwKKwl7IDAsIEdJQ19DUFVfTk1JLCAgR0lDX1BPTF9QT1MsIEdJQ19UUklHX0xFVkVMLCBHSUNfRkxBR19UUkFOU1BBUkVOVCB9LAorCXsgWCwgWCwJCSAgIFgsCQlYLAkgICAgICAgIDAgfSwKKwkvKiBUaGUgcmVtYWluZGVyIG9mIHRoaXMgdGFibGUgaXMgaW5pdGlhbGlzZWQgYnkgZmlsbF9pcGlfbWFwICovCiB9OwotI2VuZGlmCiAKIC8qCiAgKiBHQ01QIG5lZWRzIHRvIGJlIGRldGVjdGVkIGJlZm9yZSBhbnkgU01QIGluaXRpYWxpc2F0aW9uCiAgKi8KIGludCBfX2luaXQgZ2NtcF9wcm9iZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKKwlpZiAobWlwc19yZXZpc2lvbl9zY29uaWQgIT0gTUlQU19SRVZJU0lPTl9TQ09OX1JPQ0lUKSB7CisJCWdjbXBfcHJlc2VudCA9IDA7CisJCXJldHVybiBnY21wX3ByZXNlbnQ7CisJfQorCiAJaWYgKGdjbXBfcHJlc2VudCA+PSAwKQogCQlyZXR1cm4gZ2NtcF9wcmVzZW50OwogCkBAIC00MTksMjAgKzQyNCwzNSBAQAogCWdjbXBfcHJlc2VudCA9IChHQ01QR0NCKEdDTVBCKSAmIEdDTVBfR0NCX0dDTVBCX0dDTVBCQVNFX01TSykgPT0gR0NNUF9CQVNFX0FERFI7CiAKIAlpZiAoZ2NtcF9wcmVzZW50KQotCQlwcmludGsoS0VSTl9ERUJVRyAiR0NNUCBwcmVzZW50XG4iKTsKKwkJcHJfZGVidWcoIkdDTVAgcHJlc2VudFxuIik7CiAJcmV0dXJuIGdjbXBfcHJlc2VudDsKIH0KIAorLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgSU9DVSdzIHByZXNlbnQgKi8KK2ludCBfX2luaXQgZ2NtcF9uaW9jdSh2b2lkKQoreworICByZXR1cm4gZ2NtcF9wcmVzZW50ID8KKyAgICAoR0NNUEdDQihHQykgJiBHQ01QX0dDQl9HQ19OVU1JT0NVX01TSykgPj4gR0NNUF9HQ0JfR0NfTlVNSU9DVV9TSEYgOgorICAgIDA7Cit9CisKKy8qIFNldCBHQ01QIHJlZ2lvbiBhdHRyaWJ1dGVzICovCit2b2lkIF9faW5pdCBnY21wX3NldHJlZ2lvbihpbnQgcmVnaW9uLCB1bnNpZ25lZCBsb25nIGJhc2UsCisJCQkgICB1bnNpZ25lZCBsb25nIG1hc2ssIGludCB0eXBlKQoreworCUdDTVBHQ0JuKENNeEJBU0UsIHJlZ2lvbikgPSBiYXNlOworCUdDTVBHQ0JuKENNeE1BU0ssIHJlZ2lvbikgPSBtYXNrIHwgdHlwZTsKK30KKwogI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogc3RhdGljIHZvaWQgX19pbml0IGZpbGxfaXBpX21hcDEoaW50IGJhc2VpbnRyLCBpbnQgY3B1LCBpbnQgY3B1cGluKQogewogCWludCBpbnRyID0gYmFzZWludHIgKyBjcHU7Ci0JZ2ljX2ludHJfbWFwW2ludHJdLmludHJudW0gPSBHSUNfRVhUX0lOVFIoaW50cik7CiAJZ2ljX2ludHJfbWFwW2ludHJdLmNwdW51bSA9IGNwdTsKIAlnaWNfaW50cl9tYXBbaW50cl0ucGluID0gY3B1cGluOwogCWdpY19pbnRyX21hcFtpbnRyXS5wb2xhcml0eSA9IEdJQ19QT0xfUE9TOwogCWdpY19pbnRyX21hcFtpbnRyXS50cmlndHlwZSA9IEdJQ19UUklHX0VER0U7Ci0JZ2ljX2ludHJfbWFwW2ludHJdLmlwaWZsYWcgPSAxOworCWdpY19pbnRyX21hcFtpbnRyXS5mbGFncyA9IEdJQ19GTEFHX0lQSTsKIAlpcGlfbWFwW2NwdV0gfD0gKDEgPDwgKGNwdXBpbiArIDIpKTsKIH0KIApAQCAtNDQ3LDYgKzQ2NywxMiBAQAogfQogI2VuZGlmCiAKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcGlpcnEoaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQoreworCXNldHVwX2lycShpcnEsIGFjdGlvbik7CisJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX3BlcmNwdV9pcnEpOworfQorCiB2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCiB7CiAJaW5pdF9pODI1OV9pcnFzKCk7CkBAIC00NTgsMTIgKzQ4NCwxNyBAQAogCQlHQ01QR0NCKEdJQ0JBKSA9IEdJQ19CQVNFX0FERFIgfCBHQ01QX0dDQl9HSUNCQV9FTl9NU0s7CiAJCWdpY19wcmVzZW50ID0gMTsKIAl9IGVsc2UgewotCQlfbXNjMDFfYml1X2Jhc2UgPSAodW5zaWduZWQgbG9uZykgaW9yZW1hcF9ub2NhY2hlKE1TQzAxX0JJVV9SRUdfQkFTRSwgTVNDMDFfQklVX0FERFJTUEFDRV9TWik7Ci0JCWdpY19wcmVzZW50ID0gKFJFRyhfbXNjMDFfYml1X2Jhc2UsIE1TQzAxX1NDX0NGRykgJgotCQlNU0MwMV9TQ19DRkdfR0lDUFJFU19NU0spID4+IE1TQzAxX1NDX0NGR19HSUNQUkVTX1NIRjsKKwkJaWYgKG1pcHNfcmV2aXNpb25fc2NvbmlkID09IE1JUFNfUkVWSVNJT05fU0NPTl9ST0NJVCkgeworCQkJX21zYzAxX2JpdV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCWlvcmVtYXBfbm9jYWNoZShNU0MwMV9CSVVfUkVHX0JBU0UsCisJCQkJCQlNU0MwMV9CSVVfQUREUlNQQUNFX1NaKTsKKwkJCWdpY19wcmVzZW50ID0gKFJFRyhfbXNjMDFfYml1X2Jhc2UsIE1TQzAxX1NDX0NGRykgJgorCQkJCQlNU0MwMV9TQ19DRkdfR0lDUFJFU19NU0spID4+CisJCQkJCU1TQzAxX1NDX0NGR19HSUNQUkVTX1NIRjsKKwkJfQogCX0KIAlpZiAoZ2ljX3ByZXNlbnQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJHSUMgcHJlc2VudFxuIik7CisJCXByX2RlYnVnKCJHSUMgcHJlc2VudFxuIik7CiAKIAlzd2l0Y2ggKG1pcHNfcmV2aXNpb25fc2NvbmlkKSB7CiAJY2FzZSBNSVBTX1JFVklTSU9OX1NDT05fU09DSVQ6CkBAIC01MjYsMTYgKzU1NywxNiBAQAogCQkJCQkJJmNvcmVoaV9pcnFhY3Rpb24pOwogCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCWlmIChnaWNfcHJlc2VudCkgewogCQkvKiBGSVhNRSAqLwogCQlpbnQgaTsKLQorI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCQlnaWNfY2FsbF9pbnRfYmFzZSA9IEdJQ19OVU1fSU5UUlMgLSBOUl9DUFVTOwogCQlnaWNfcmVzY2hlZF9pbnRfYmFzZSA9IGdpY19jYWxsX2ludF9iYXNlIC0gTlJfQ1BVUzsKLQogCQlmaWxsX2lwaV9tYXAoKTsKLQkJZ2ljX2luaXQoR0lDX0JBU0VfQUREUiwgR0lDX0FERFJTUEFDRV9TWiwgZ2ljX2ludHJfbWFwLCBBUlJBWV9TSVpFKGdpY19pbnRyX21hcCksIE1JUFNfR0lDX0lSUV9CQVNFKTsKKyNlbmRpZgorCQlnaWNfaW5pdChHSUNfQkFTRV9BRERSLCBHSUNfQUREUlNQQUNFX1NaLCBnaWNfaW50cl9tYXAsCisJCQkJQVJSQVlfU0laRShnaWNfaW50cl9tYXApLCBNSVBTX0dJQ19JUlFfQkFTRSk7CiAJCWlmICghZ2NtcF9wcmVzZW50KSB7CiAJCQkvKiBFbmFibGUgdGhlIEdJQyAqLwogCQkJaSA9IFJFRyhfbXNjMDFfYml1X2Jhc2UsIE1TQzAxX1NDX0NGRyk7CkBAIC01NDMsNyArNTc0LDcgQEAKIAkJCQkoaSB8ICgweDEgPDwgTVNDMDFfU0NfQ0ZHX0dJQ0VOQV9TSEYpKTsKIAkJCXByX2RlYnVnKCJHSUMgRW5hYmxlZFxuIik7CiAJCX0KLQorI2lmIGRlZmluZWQoQ09ORklHX01JUFNfTVRfU01QKQogCQkvKiBzZXQgdXAgaXBpIGludGVycnVwdHMgKi8KIAkJaWYgKGNwdV9oYXNfdmludCkgewogCQkJc2V0X3ZpX2hhbmRsZXIoTUlQU0NQVV9JTlRfSVBJMCwgbWFsdGFfaXBpX2lycWRpc3BhdGNoKTsKQEAgLTU1NiwxNiArNTg3LDE0IEBACiAJCXdyaXRlX2MwX3N0YXR1cygweDExMDBkYzAwKTsKIAkJcHJpbnRrKCJDUFUlZDogc3RhdHVzIHJlZ2lzdGVyIGZyYyAlMDh4XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIHJlYWRfYzBfc3RhdHVzKCkpOwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7Ci0JCQlzZXR1cF9pcnEoTUlQU19HSUNfSVJRX0JBU0UgKwotCQkJCQlHSUNfUkVTQ0hFRF9JTlQoaSksICZpcnFfcmVzY2hlZCk7Ci0JCQlzZXR1cF9pcnEoTUlQU19HSUNfSVJRX0JBU0UgKwotCQkJCQlHSUNfQ0FMTF9JTlQoaSksICZpcnFfY2FsbCk7Ci0JCQlzZXRfaXJxX2hhbmRsZXIoTUlQU19HSUNfSVJRX0JBU0UgKwotCQkJCQlHSUNfUkVTQ0hFRF9JTlQoaSksIGhhbmRsZV9wZXJjcHVfaXJxKTsKLQkJCXNldF9pcnFfaGFuZGxlcihNSVBTX0dJQ19JUlFfQkFTRSArCi0JCQkJCUdJQ19DQUxMX0lOVChpKSwgaGFuZGxlX3BlcmNwdV9pcnEpOworCQkJYXJjaF9pbml0X2lwaWlycShNSVBTX0dJQ19JUlFfQkFTRSArCisJCQkJCSBHSUNfUkVTQ0hFRF9JTlQoaSksICZpcnFfcmVzY2hlZCk7CisJCQlhcmNoX2luaXRfaXBpaXJxKE1JUFNfR0lDX0lSUV9CQVNFICsKKwkJCQkJIEdJQ19DQUxMX0lOVChpKSwgJmlycV9jYWxsKTsKIAkJfQorI2VuZGlmCiAJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNUCkKIAkJLyogc2V0IHVwIGlwaSBpbnRlcnJ1cHRzICovCiAJCWlmIChjcHVfaGFzX3ZlaWMpIHsKIAkJCXNldF92aV9oYW5kbGVyIChNU0MwMUVfSU5UX1NXMCwgaXBpX3Jlc2NoZWRfZGlzcGF0Y2gpOwpAQCAtNTgwLDE0ICs2MDksMTAgQEAKIAkJCWNwdV9pcGlfcmVzY2hlZF9pcnEgPSBNSVBTX0NQVV9JUlFfQkFTRSArIE1JUFNfQ1BVX0lQSV9SRVNDSEVEX0lSUTsKIAkJCWNwdV9pcGlfY2FsbF9pcnEgPSBNSVBTX0NQVV9JUlFfQkFTRSArIE1JUFNfQ1BVX0lQSV9DQUxMX0lSUTsKIAkJfQotCi0JCXNldHVwX2lycShjcHVfaXBpX3Jlc2NoZWRfaXJxLCAmaXJxX3Jlc2NoZWQpOwotCQlzZXR1cF9pcnEoY3B1X2lwaV9jYWxsX2lycSwgJmlycV9jYWxsKTsKLQotCQlzZXRfaXJxX2hhbmRsZXIoY3B1X2lwaV9yZXNjaGVkX2lycSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCQlzZXRfaXJxX2hhbmRsZXIoY3B1X2lwaV9jYWxsX2lycSwgaGFuZGxlX3BlcmNwdV9pcnEpOwotCX0KKwkJYXJjaF9pbml0X2lwaWlycShjcHVfaXBpX3Jlc2NoZWRfaXJxLCAmaXJxX3Jlc2NoZWQpOworCQlhcmNoX2luaXRfaXBpaXJxKGNwdV9pcGlfY2FsbF9pcnEsICZpcnFfY2FsbCk7CiAjZW5kaWYKKwl9CiB9CiAKIHZvaWQgbWFsdGFfYmVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtbWVtb3J5LmMKaW5kZXggNjE4ODhmZi4uOTAzNWM2NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLW1lbW9yeS5jCkBAIC01NCw3ICs1NCw4IEBACiB7CiAJY2hhciAqbWVtc2l6ZV9zdHI7CiAJdW5zaWduZWQgaW50IG1lbXNpemU7Ci0JY2hhciBjbWRsaW5lW0NMX1NJWkVdLCAqcHRyOworCWNoYXIgKnB0cjsKKwlzdGF0aWMgY2hhciBjbWRsaW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAKIAkvKiBvdGhlcndpc2UgbG9vayBpbiB0aGUgZW52aXJvbm1lbnQgKi8KIAltZW1zaXplX3N0ciA9IHByb21fZ2V0ZW52KCJtZW1zaXplIik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLXBjaS5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwppbmRleCBiOTc0MzE5MDYuLjJmYmZhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtcGNpLmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1wY2kuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAogI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+Ci0KKyNpbmNsdWRlIDxhc20vZ2NtcHJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9ib25pdG82NC5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaD4KQEAgLTIwMSw3ICsyMDEsMTEgQEAKIAkJbXNjX21lbV9yZXNvdXJjZS5zdGFydCA9IHN0YXJ0ICYgbWFzazsKIAkJbXNjX21lbV9yZXNvdXJjZS5lbmQgPSAoc3RhcnQgJiBtYXNrKSB8IH5tYXNrOwogCQltc2NfY29udHJvbGxlci5tZW1fb2Zmc2V0ID0gKHN0YXJ0ICYgbWFzaykgLSAobWFwICYgbWFzayk7Ci0KKyNpZmRlZiBDT05GSUdfTUlQU19DTVAKKwkJaWYgKGdjbXBfbmlvY3UoKSkKKwkJCWdjbXBfc2V0cmVnaW9uKDAsIHN0YXJ0LCBtYXNrLAorCQkJCUdDTVBfR0NCX0dDTVBCX0NNREVGVEdUX0lPQ1UxKTsKKyNlbmRpZgogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPQkFTTCwgc3RhcnQpOwogCQlNU0NfUkVBRChNU0MwMV9QQ0lfU0MyUElPTVNLTCwgbWFzayk7CiAJCU1TQ19SRUFEKE1TQzAxX1BDSV9TQzJQSU9NQVBMLCBtYXApOwpAQCAtMjA5LDcgKzIxMywxMSBAQAogCQltc2NfaW9fcmVzb3VyY2UuZW5kID0gKG1hcCAmIG1hc2spIHwgfm1hc2s7CiAJCW1zY19jb250cm9sbGVyLmlvX29mZnNldCA9IDA7CiAJCWlvcG9ydF9yZXNvdXJjZS5lbmQgPSB+bWFzazsKLQorI2lmZGVmIENPTkZJR19NSVBTX0NNUAorCQlpZiAoZ2NtcF9uaW9jdSgpKQorCQkJZ2NtcF9zZXRyZWdpb24oMSwgc3RhcnQsIG1hc2ssCisJCQkJR0NNUF9HQ0JfR0NNUEJfQ01ERUZUR1RfSU9DVTEpOworI2VuZGlmCiAJCS8qIElmIHJhbmdlcyBvdmVybGFwIEkvTyB0YWtlcyBwcmVjZWRlbmNlLiAgKi8KIAkJc3RhcnQgPSBzdGFydCAmIG1hc2s7CiAJCWVuZCA9IHN0YXJ0IHwgfm1hc2s7CkBAIC0yNDEsMyArMjQ5LDE2IEBACiAKIAlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcihjb250cm9sbGVyKTsKIH0KKworLyogRW5hYmxlIFBDSSAyLjEgY29tcGF0aWJpbGl0eSBpbiBQSUlYNCAqLworc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX2RsY3NldHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggb2RsYywgbmRsYzsKKwkodm9pZCkgcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDgyLCAmb2RsYyk7CisJLyogRW5hYmxlIHBhc3NpdmUgcmVsZWFzZXMgYW5kIGRlbGF5ZWQgdHJhbnNhY3Rpb24gKi8KKwluZGxjID0gb2RsYyB8IDc7CisJKHZvaWQpIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4ODIsIG5kbGMpOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMCwKKwlxdWlya19kbGNzZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jIGIvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi9pbnQuYwppbmRleCBmMDgwZjExLi43YWNhN2Q1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL2ludC5jCisrKyBiL2FyY2gvbWlwcy9ueHAvcG54ODU1MC9jb21tb24vaW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiB0aW1lcl9hY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlub19hY3Rpb24sCi0JLmZsYWdzID0JSVJRRl9ESVNBQkxFRCwKKwkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKIAkubmFtZSA9CQkiVGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL254cC9wbng4NTUwL2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwppbmRleCAxOGIxOTI3Li44ODM2YzYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvbnhwL3BueDg1NTAvY29tbW9uL3RpbWUuYwpAQCAtNTksNyArNTksNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwbng4eHh4X3RpbWVyX2lycSA9IHsKIAkuaGFuZGxlcgk9IHBueDh4eHhfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gInBueDh4eHhfdGltZXIiLAogfTsKIApAQCAtNzIsNyArNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBtb25vdG9uaWNfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyID0gbW9ub3RvbmljX2ludGVycnVwdCwKLQkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSLAogCS5uYW1lID0gIk1vbm90b25pYyB0aW1lciIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMgYi9hcmNoL21pcHMvb3Byb2ZpbGUvb3BfbW9kZWxfbG9vbmdzb24yLmMKaW5kZXggNjU1Y2I4ZC4uNTc1Y2QxNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL29wcm9maWxlL29wX21vZGVsX2xvb25nc29uMi5jCisrKyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9vcF9tb2RlbF9sb29uZ3NvbjIuYwpAQCAtMjIsNyArMjIsNyBAQAogICogb3RoZXJ3aXNlLCB0aGUgb3Byb2ZpbGUgdG9vbCB3aWxsIG5vdCByZWNvZ25pemUgdGhpcyBhbmQgY29tcGxhaW4gYWJvdXQKICAqICJjcHVfdHlwZSAndW5zZXQnIGlzIG5vdCB2YWxpZCIuCiAgKi8KLSNkZWZpbmUgTE9PTkdTT04yX0NQVV9UWVBFCSJtaXBzL2dvZHNvbjIiCisjZGVmaW5lIExPT05HU09OMl9DUFVfVFlQRQkibWlwcy9sb29uZ3NvbjIiCiAKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIxX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgNSkKICNkZWZpbmUgTE9PTkdTT04yX0NPVU5URVIyX0VWRU5UKGV2ZW50KQkoKGV2ZW50ICYgMHgwZikgPDwgOSkKQEAgLTQ0LDcgKzQ0LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3RybDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVzZXRfY291bnRlcjE7CiAJdW5zaWduZWQgbG9uZyBsb25nIHJlc2V0X2NvdW50ZXIyOwotCWludCBjbnQxX2VuYWxiZWQsIGNudDJfZW5hbGJlZDsKKwlpbnQgY250MV9lbmFibGVkLCBjbnQyX2VuYWJsZWQ7CiB9IHJlZzsKIAogREVGSU5FX1NQSU5MT0NLKHNhbXBsZV9sb2NrKTsKQEAgLTgxLDggKzgxLDggQEAKIAogCXJlZy5jdHJsID0gY3RybDsKIAotCXJlZy5jbnQxX2VuYWxiZWQgPSBjZmdbMF0uZW5hYmxlZDsKLQlyZWcuY250Ml9lbmFsYmVkID0gY2ZnWzFdLmVuYWJsZWQ7CisJcmVnLmNudDFfZW5hYmxlZCA9IGNmZ1swXS5lbmFibGVkOworCXJlZy5jbnQyX2VuYWJsZWQgPSBjZmdbMV0uZW5hYmxlZDsKIAogfQogCkBAIC05OSw3ICs5OSw3IEBACiBzdGF0aWMgdm9pZCBsb29uZ3NvbjJfY3B1X3N0YXJ0KHZvaWQgKmFyZ3MpCiB7CiAJLyogU3RhcnQgYWxsIGNvdW50ZXJzIG9uIGN1cnJlbnQgQ1BVICovCi0JaWYgKHJlZy5jbnQxX2VuYWxiZWQgfHwgcmVnLmNudDJfZW5hbGJlZCkKKwlpZiAocmVnLmNudDFfZW5hYmxlZCB8fCByZWcuY250Ml9lbmFibGVkKQogCQl3cml0ZV9jMF9wZXJmY3RybChyZWcuY3RybCk7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQAogCSAqLwogCiAJLyogQ2hlY2sgd2hldGhlciB0aGUgaXJxIGJlbG9uZ3MgdG8gbWUgKi8KLQllbmFibGVkID0gcmVnLmNudDFfZW5hbGJlZCB8IHJlZy5jbnQyX2VuYWxiZWQ7CisJZW5hYmxlZCA9IHJlZy5jbnQxX2VuYWJsZWQgfCByZWcuY250Ml9lbmFibGVkOwogCWlmICghZW5hYmxlZCkKIAkJcmV0dXJuIElSUV9OT05FOwogCkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzYW1wbGVfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGNvdW50ZXIxICYgTE9PTkdTT04yX1BFUkZDTlRfT1ZFUkZMT1cpIHsKLQkJaWYgKHJlZy5jbnQxX2VuYWxiZWQpCisJCWlmIChyZWcuY250MV9lbmFibGVkKQogCQkJb3Byb2ZpbGVfYWRkX3NhbXBsZShyZWdzLCAwKTsKIAkJY291bnRlcjEgPSByZWcucmVzZXRfY291bnRlcjE7CiAJfQogCWlmIChjb3VudGVyMiAmIExPT05HU09OMl9QRVJGQ05UX09WRVJGTE9XKSB7Ci0JCWlmIChyZWcuY250Ml9lbmFsYmVkKQorCQlpZiAocmVnLmNudDJfZW5hYmxlZCkKIAkJCW9wcm9maWxlX2FkZF9zYW1wbGUocmVncywgMSk7CiAJCWNvdW50ZXIyID0gcmVnLnJlc2V0X2NvdW50ZXIyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLXBtY21zcC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKaW5kZXggMTA5Yzk1Yy4uMzI1NDhiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtcG1jbXNwLmMKQEAgLTM4NSw2ICszODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW50cjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCXN0YXRpYyBjaGFyIHBjaWlycWZsYWc7CisJaW50IHJldDsKICNpZiBkZWZpbmVkKENPTkZJR19QTUNfTVNQNzEyMF9HVykgfHwgZGVmaW5lZChDT05GSUdfUE1DX01TUDcxMjBfRVZBTCkKIAl1bnNpZ25lZCBpbnQJdnBlX3N0YXR1czsKICNlbmRpZgpAQCAtNDAyLDExICs0MDMsMTMgQEAKIAkgKiBhbGxvY2F0aW9uIGFzc2lnbnMgYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gdGhlIGludGVycnVwdC4KIAkgKi8KIAlpZiAocGNpaXJxZmxhZyA9PSAwKSB7Ci0JCXJlcXVlc3RfaXJxKE1TUF9JTlRfUENJLC8qIEhhcmRjb2RlZCBpbnRlcm5hbCBNU1A3MTIwIHdpcmluZyAqLworCQlyZXQgPSByZXF1ZXN0X2lycShNU1BfSU5UX1BDSSwvKiBIYXJkY29kZWQgaW50ZXJuYWwgTVNQNzEyMCB3aXJpbmcgKi8KIAkJCQlicGNpX2ludGVycnVwdCwKIAkJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCiAJCQkJIlBNQyBNU1AgUENJIEhvc3QiLAogCQkJCXByZWcpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OwogCQlwY2lpcnFmbGFnID0gfjA7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jIGIvYXJjaC9taXBzL3JiNTMyL3Byb20uYwppbmRleCA0NmNhMjRkLi5hZDViZDEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcmI1MzIvcHJvbS5jCisrKyBiL2FyY2gvbWlwcy9yYjUzMi9wcm9tLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9zZXR1cF9jbWRsaW5lKHZvaWQpCiB7Ci0JY2hhciBjbWRfbGluZVtDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBjbWRfbGluZVtDTF9TSVpFXSBfX2luaXRkYXRhOwogCWNoYXIgKmNwLCAqYm9hcmQ7CiAJaW50IHByb21fYXJnYzsKIAljaGFyICoqcHJvbV9hcmd2LCAqKnByb21fZW52cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXNtcC5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKaW5kZXggOWFhOGYyOS4uYzY4NTFkZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCVJFTU9URV9IVUJfU0VORF9JTlRSKENPTVBBQ1RfVE9fTkFTSURfTk9ERUlEKGNwdV90b19ub2RlKGRlc3RpZCkpLCBpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBpcDI3X3NlbmRfaXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQorc3RhdGljIHZvaWQgaXAyN19zZW5kX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogCXVuc2lnbmVkIGludCBpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCA2ZDBlNTlmLi5kNjgwMmQ2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiBzdHJ1Y3QgaXJxYWN0aW9uIGh1Yl9ydF9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIJPSBodWJfcnRfY291bnRlcl9oYW5kbGVyLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImh1Yi1ydCIsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggYmE1OTgzOS4uNDA3MDI2OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMTE3LDEwICsxMTcsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGlycV9kaXJ0eTsKIAotCWlmIChjcHVtYXNrX3dlaWdodChtYXNrKSAhPSAxKSB7Ci0JCXByaW50aygiYXR0ZW1wdGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgZm9yIGlycSAlZCB0byBtdWx0aXBsZSBDUFVzXG4iLCBpcnEpOwotCQlyZXR1cm4gLTE7Ci0JfQogCWkgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwogCiAJLyogQ29udmVydCBsb2dpY2FsIENQVSB0byBwaHlzaWNhbCBDUFUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvY29tbW9uL3NiX3RicHJvZi5jIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKaW5kZXggNjM3YTE5NC4uMTVlYTc3OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9jb21tb24vc2JfdGJwcm9mLmMKQEAgLTQwMywzNiArNDAzLDMxIEBACiBzdGF0aWMgaW50IHNicHJvZl90Yl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBtaW5vcjsKLQlpbnQgZXJyID0gMDsKIAotCWxvY2tfa2VybmVsKCk7CiAJbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWlmIChtaW5vciAhPSAwKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAobWlub3IgIT0gMCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoeGNoZygmc2JwLm9wZW4sIFNCX09QRU5JTkcpICE9IFNCX0NMT1NFRCkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoeGNoZygmc2JwLm9wZW4sIFNCX09QRU5JTkcpICE9IFNCX0NMT1NFRCkKKwkJcmV0dXJuIC1FQlVTWTsKIAogCW1lbXNldCgmc2JwLCAwLCBzaXplb2Yoc3RydWN0IHNicHJvZl90YikpOwogCXNicC5zYnByb2ZfdGJidWYgPSB2bWFsbG9jKE1BWF9UQlNBTVBMRV9CWVRFUyk7CiAJaWYgKCFzYnAuc2Jwcm9mX3RiYnVmKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlzYnAub3BlbiA9IFNCX0NMT1NFRDsKKwkJd21iKCk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KKwogCW1lbXNldChzYnAuc2Jwcm9mX3RiYnVmLCAwLCBNQVhfVEJTQU1QTEVfQllURVMpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNicC50Yl9zeW5jKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzYnAudGJfcmVhZCk7CiAJbXV0ZXhfaW5pdCgmc2JwLmxvY2spOwogCiAJc2JwLm9wZW4gPSBTQl9PUEVOOworCXdtYigpOwogCi0gIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYnByb2ZfdGJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTQ0MCw3ICs0MzUsNyBAQAogCWludCBtaW5vcjsKIAogCW1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlpZiAobWlub3IgIT0gMCB8fCAhc2JwLm9wZW4pCisJaWYgKG1pbm9yICE9IDAgfHwgc2JwLm9wZW4gIT0gU0JfQ0xPU0VEKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnNicC5sb2NrKTsKQEAgLTQ0OSw3ICs0NDQsOCBAQAogCQlzYnByb2ZfemJwcm9mX3N0b3AoKTsKIAogCXZmcmVlKHNicC5zYnByb2ZfdGJidWYpOwotCXNicC5vcGVuID0gMDsKKwlzYnAub3BlbiA9IFNCX0NMT1NFRDsKKwl3bWIoKTsKIAogCW11dGV4X3VubG9jaygmc2JwLmxvY2spOwogCkBAIC01ODMsNyArNTc5LDggQEAKIAl9CiAJdGJfZGV2ID0gZGV2OwogCi0Jc2JwLm9wZW4gPSAwOworCXNicC5vcGVuID0gU0JfQ0xPU0VEOworCXdtYigpOwogCXRiX3BlcmlvZCA9IHpiYnVzX21oeiAqIDEwMDAwTEw7CiAJcHJfaW5mbyhERVZOQU1FICI6IGluaXRpYWxpemVkIC0gdGJfcGVyaW9kID0gJWxsZFxuIiwKIAkJKGxvbmcgbG9uZykgdGJfcGVyaW9kKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYwppbmRleCA2MjNmZmM5Li41Mjc3YWFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJYnJlYWs7CiAJfQogCXRzLT50dl9zZWMgPSBzZWM7Ci0JdHYtPnR2X25zZWMgPSAwOworCXRzLT50dl9uc2VjID0gMDsKIH0KIAogaW50IHJ0Y19taXBzX3NldF90aW1lKHVuc2lnbmVkIGxvbmcgc2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS90aW1lLmMgYi9hcmNoL21pcHMvc25pL3RpbWUuYwppbmRleCA2MmRmNmE1Li5mM2I2MGU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3RpbWUuYworKysgYi9hcmNoL21pcHMvc25pL3RpbWUuYwpAQCAtNjcsNyArNjcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBhMjByX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlcgk9IGEyMHJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1BFUkNQVSB8IElSUUZfVElNRVIsCiAJLm5hbWUJCT0gImEyMHItdGltZXIiLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jIGIvYXJjaC9taXBzL3R4eDkvZ2VuZXJpYy9zZXR1cC5jCmluZGV4IGM4NjA4MTAuLmQ2NjgwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvc2V0dXAuYworKysgYi9hcmNoL21pcHMvdHh4OS9nZW5lcmljL3NldHVwLmMKQEAgLTg1LDcgKzg1LDcgQEAKIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKIHsKIAlpZiAoIXN0cmNtcChpZCwgInNwaS1iYXNlY2xrIikpCi0JCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyIC8gNCk7CisJCXJldHVybiAoc3RydWN0IGNsayAqKSgodW5zaWduZWQgbG9uZyl0eHg5X2didXNfY2xvY2sgLyAyIC8gMik7CiAJaWYgKCFzdHJjbXAoaWQsICJpbWJ1c19jbGsiKSkKIAkJcmV0dXJuIChzdHJ1Y3QgY2xrICopKCh1bnNpZ25lZCBsb25nKXR4eDlfZ2J1c19jbG9jayAvIDIpOwogCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJaW50IGFyZ2M7CiAJaW50ICphcmd2MzI7CiAJaW50IGk7CQkJLyogQWx3YXlzIGlnbm9yZSB0aGUgIi1jIiBhdCBhcmd2WzBdICovCi0JY2hhciBidWlsdGluW0NMX1NJWkVdOworCXN0YXRpYyBjaGFyIGJ1aWx0aW5bQ0xfU0laRV0gX19pbml0ZGF0YTsKIAogCWlmIChmd19hcmcwID49IENLU0VHMCB8fCBmd19hcmcxIDwgQ0tTRUcwKSB7CiAJCS8qCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHByZXByb2Nlc3NfY21kbGluZSh2b2lkKQogewotCWNoYXIgY21kbGluZVtDTF9TSVpFXTsKKwlzdGF0aWMgY2hhciBjbWRsaW5lW0NMX1NJWkVdIF9faW5pdGRhdGE7CiAJY2hhciAqczsKIAogCXN0cmNweShjbWRsaW5lLCBhcmNzX2NtZGxpbmUpOwpAQCAtODE3LDcgKzgxNyw4IEBACiBvdXRfcGRldjoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogb3V0X2dwaW86Ci0JZ3Bpb19yZW1vdmUoJmlvY2xlZC0+Y2hpcCk7CisJaWYgKGdwaW9jaGlwX3JlbW92ZSgmaW9jbGVkLT5jaGlwKSkKKwkJcmV0dXJuOwogb3V0X3VubWFwOgogCWlvdW5tYXAoaW9jbGVkLT5tbWlvYWRkcik7CiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDhhM2E0ZGQuLjE2N2UxMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMTI5LDQyICsxMjksNDcgQEAKIHN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CiAjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgKikoeCkpCiAKLSNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgsIHB0ciwgc2l6ZSkJXAotKHsJCQkJCQlcCi0JX190eXBlb2YoKihwdHIpKSBfX2d1X3ZhbDsJCVwKLQl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCVwKLQlpbnQgX19ndV9lcnI7CQkJCVwKLQlfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CVwKLQlzd2l0Y2ggKHNpemUpIHsJCQkJXAotCWNhc2UgMTogIF9fZ2V0X3VzZXJfYXNtKCJidSIpOyBicmVhazsJXAotCWNhc2UgMjogIF9fZ2V0X3VzZXJfYXNtKCJodSIpOyBicmVhazsJXAotCWNhc2UgNDogIF9fZ2V0X3VzZXJfYXNtKCIiICApOyBicmVhazsJXAotCWRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJXAotCX0JCQkJCVwKLQl4ID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CVwKLQlfX2d1X2VycjsJCQkJXAorI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fZ3VfYWRkcjsJCQkJCVwKKwlpbnQgX19ndV9lcnI7CQkJCQkJCVwKKwlfX2d1X2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHB0cik7CQkJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCQkJXAorCWNhc2UgMTogewkJCQkJCQlcCisJCXVuc2lnbmVkIGNoYXIgX19ndV92YWw7CQkJCQlcCisJCV9fZ2V0X3VzZXJfYXNtKCJidSIpOwkJCQkJXAorCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpKikgJl9fZ3VfdmFsOwkJXAorCQlicmVhazsJCQkJCQkJXAorCX0JCQkJCQkJCVwKKwljYXNlIDI6IHsJCQkJCQkJXAorCQl1bnNpZ25lZCBzaG9ydCBfX2d1X3ZhbDsJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiaHUiKTsJCQkJCVwKKwkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSopICZfX2d1X3ZhbDsJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJY2FzZSA0OiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgaW50IF9fZ3VfdmFsOwkJCQkJXAorCQlfX2dldF91c2VyX2FzbSgiIik7CQkJCQlcCisJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkqKSAmX19ndV92YWw7CQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCWRlZmF1bHQ6CQkJCQkJCVwKKwkJX19nZXRfdXNlcl91bmtub3duKCk7CQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCiB9KQogCi0jZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCwgcHRyLCBzaXplKQkJCVwKLSh7CQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19ndV92YWw7CQkJXAotCXVuc2lnbmVkIGxvbmcgX19ndV9hZGRyOwkJCVwKLQlpbnQgX19ndV9lcnI7CQkJCQlcCi0JX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIChwdHIpOwkJXAotCWlmIChsaWtlbHkoX19hY2Nlc3Nfb2soX19ndV9hZGRyLHNpemUpKSkgewlcCi0JCXN3aXRjaCAoc2l6ZSkgewkJCQlcCi0JCWNhc2UgMTogIF9fZ2V0X3VzZXJfYXNtKCJidSIpOyBicmVhazsJXAotCQljYXNlIDI6ICBfX2dldF91c2VyX2FzbSgiaHUiKTsgYnJlYWs7CVwKLQkJY2FzZSA0OiAgX19nZXRfdXNlcl9hc20oIiIgICk7IGJyZWFrOwlcCi0JCWRlZmF1bHQ6IF9fZ2V0X3VzZXJfdW5rbm93bigpOyBicmVhazsJXAotCQl9CQkJCQlcCi0JfQkJCQkJCVwKLQllbHNlIHsJCQkJCQlcCi0JCV9fZ3VfZXJyID0gLUVGQVVMVDsJCQlcCi0JCV9fZ3VfdmFsID0gMDsJCQkJXAotCX0JCQkJCQlcCi0JeCA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJXAotCV9fZ3VfZXJyOwkJCQkJXAorI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgsIHB0ciwgc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfZTsJCQkJCQkJCVwKKwlpZiAobGlrZWx5KF9fYWNjZXNzX29rKCh1bnNpZ25lZCBsb25nKSAocHRyKSwgKHNpemUpKSkpCQlcCisJCV9lID0gX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIChzaXplKSk7CQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCV9lID0gLUVGQVVMVDsJCQkJCQlcCisJCSh4KSA9IChfX3R5cGVvZl9fKHgpKTA7CQkJCQlcCisJfQkJCQkJCQkJXAorCV9lOwkJCQkJCQkJXAogfSkKIAogI2RlZmluZSBfX2dldF91c2VyX2FzbShJTlNOKQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDc2ZjQxYmQuLjEwNTQ5ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTQ0LDI0ICs0NCw4IEBACiAgIFJPX0RBVEEoUEFHRV9TSVpFKQogCiAgIC8qIHdyaXRlYWJsZSAqLwotICAuZGF0YSA6IHsJCQkvKiBEYXRhICovCi0JREFUQV9EQVRBCi0JQ09OU1RSVUNUT1JTCi0JfQotCi0gIC5kYXRhX25vc2F2ZSA6IHsgTk9TQVZFX0RBVEE7IH0KLQotICAuZGF0YS5wYWdlX2FsaWduZWQgOiB7IFBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSk7IH0KLSAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7IENBQ0hFTElORV9BTElHTkVEX0RBVEEoMzIpOyB9Ci0KLSAgLyogcmFyZWx5IGNoYW5nZWQgZGF0YSBsaWtlIGNwdSBtYXBzICovCi0gIC4gPSBBTElHTigzMik7Ci0gIC5kYXRhLnJlYWRfbW9zdGx5IDogQVQoQUREUiguZGF0YS5yZWFkX21vc3RseSkpIHsKLQlSRUFEX01PU1RMWV9EQVRBKDMyKTsKLQlfZWRhdGEgPSAuOwkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwotICB9Ci0KLSAgLmRhdGEuaW5pdF90YXNrIDogeyBJTklUX1RBU0tfREFUQShUSFJFQURfU0laRSk7IH0KKyAgUldfREFUQV9TRUNUSU9OKDMyLCBQQUdFX1NJWkUsIFRIUkVBRF9TSVpFKQorICBfZWRhdGEgPSAuOwogCiAgIC8qIG1pZ2h0IGdldCBmcmVlZCBhZnRlciBpbml0ICovCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwpAQCAtNzQsMjIgKzU4LDggQEAKICAgLyogd2lsbCBiZSBmcmVlZCBhZnRlciBpbml0ICovCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogSW5pdCBjb2RlIGFuZCBkYXRhICovCiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0JX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUOwotCV9laW5pdHRleHQgPSAuOwotICB9Ci0gIC5pbml0LmRhdGEgOiB7IElOSVRfREFUQTsgfQotICAuc2V0dXAuaW5pdCA6IHsgSU5JVF9TRVRVUCgxNik7IH0KLQotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLSAgLmluaXRjYWxsLmluaXQgOiB7Ci0JSU5JVENBTExTCi0gIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotICAuY29uX2luaXRjYWxsLmluaXQgOiB7IENPTl9JTklUQ0FMTDsgfQotCi0gIFNFQ1VSSVRZX0lOSVQKKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQorICBJTklUX0RBVEFfU0VDVElPTigxNikKICAgLiA9IEFMSUdOKDQpOwogICBfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwogICAuYWx0aW5zdHJ1Y3Rpb25zIDogeyAqKC5hbHRpbnN0cnVjdGlvbnMpIH0KQEAgLTEwMCw4ICs3MCw2IEBACiAJLmV4aXQudGV4dCA6IHsgRVhJVF9URVhUOyB9CiAJLmV4aXQuZGF0YSA6IHsgRVhJVF9EQVRBOyB9CiAKLSAgLmluaXQucmFtZnMgOiB7IElOSVRfUkFNX0ZTOyB9Ci0KICAgUEVSQ1BVKDMyKQogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwMy9pbmNsdWRlL3VuaXQvY2xvY2suaAppbmRleCA4YjQ1MGU5Li4yYTBiZjc5IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzAzL2luY2x1ZGUvdW5pdC9jbG9jay5oCisrKyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDMvaW5jbHVkZS91bml0L2Nsb2NrLmgKQEAgLTIwLDkgKzIwLDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1uMTAzMDBfaW9iY2xrOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF90c2NfcGVyX0haOwogCi0jZGVmaW5lIE1OMTAzMDBfSU9DTEsJCSgodW5zaWduZWQgbG9uZyltbjEwMzAwX2lvY2xrKQorI2RlZmluZSBNTjEwMzAwX0lPQ0xLCQltbjEwMzAwX2lvY2xrCiAvKiBJZiB0aGlzIHByb2Nlc3NvcnMgaGFzIGEgYW5vdGhlciBjbG9jaywgdW5jb21tZW50IHRoZSBiZWxvdy4gKi8KLS8qICNkZWZpbmUgTU4xMDMwMF9JT0JDTEsJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9iY2xrKSAqLworLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwltbjEwMzAwX2lvYmNsayAqLwogCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgTU4xMDMwMF9UU0NDTEsJCU1OMTAzMDBfSU9DTEsKIAogI2lmZGVmIENPTkZJR19NTjEwMzAwX1JUQwotI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfdHNjX3Blcl9IWikKKyNkZWZpbmUgTU4xMDMwMF9UU0NfUEVSX0haCW1uMTAzMDBfdHNjX3Blcl9IWgogI2Vsc2UgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwogI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJKE1OMTAzMDBfVFNDQ0xLL0haKQogI2VuZGlmIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmggYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L2luY2x1ZGUvdW5pdC9jbG9jay5oCmluZGV4IDdkNTE0ODQuLjY3YmUzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvaW5jbHVkZS91bml0L2Nsb2NrLmgKKysrIGIvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9pbmNsdWRlL3VuaXQvY2xvY2suaApAQCAtMjAsOSArMjAsOSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbW4xMDMwMF9pb2JjbGs7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbjEwMzAwX3RzY19wZXJfSFo7CiAKLSNkZWZpbmUgTU4xMDMwMF9JT0NMSwkJKCh1bnNpZ25lZCBsb25nKW1uMTAzMDBfaW9jbGspCisjZGVmaW5lIE1OMTAzMDBfSU9DTEsJCW1uMTAzMDBfaW9jbGsKIC8qIElmIHRoaXMgcHJvY2Vzc29ycyBoYXMgYSBhbm90aGVyIGNsb2NrLCB1bmNvbW1lbnQgdGhlIGJlbG93LiAqLwotLyogI2RlZmluZSBNTjEwMzAwX0lPQkNMSwkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF9pb2JjbGspICovCisvKiAjZGVmaW5lIE1OMTAzMDBfSU9CQ0xLCW1uMTAzMDBfaW9iY2xrICovCiAKICNlbHNlIC8qICFDT05GSUdfTU4xMDMwMF9SVEMgKi8KIApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBNTjEwMzAwX1RTQ0NMSwkJTU4xMDMwMF9JT0NMSwogCiAjaWZkZWYgQ09ORklHX01OMTAzMDBfUlRDCi0jZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoKHVuc2lnbmVkIGxvbmcpbW4xMDMwMF90c2NfcGVyX0haKQorI2RlZmluZSBNTjEwMzAwX1RTQ19QRVJfSFoJbW4xMDMwMF90c2NfcGVyX0haCiAjZWxzZSAvKiAhQ09ORklHX01OMTAzMDBfUlRDICovCiAjZGVmaW5lIE1OMTAzMDBfVFNDX1BFUl9IWgkoTU4xMDMwMF9UU0NDTEsvSFopCiAjZW5kaWYgLyogIUNPTkZJR19NTjEwMzAwX1JUQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggZjM4OGRjNi4uNTI0ZDkzNSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC0xOCw2ICsxOCw3IEBACiAJc2VsZWN0IEJVRwogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCiAJc2VsZWN0IEdFTkVSSUNfQVRPTUlDNjQgaWYgITY0QklUCisJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKIAkgIGluIG1hbnkgb2YgdGhlaXIgd29ya3N0YXRpb25zICYgc2VydmVycyAoSFA5MDAwIDcwMCBhbmQgODAwIHNlcmllcywKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mY250bC5oCmluZGV4IDVmMzlkNTUuLjFlMWM4MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2ZjbnRsLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZmNudGwuaApAQCAtMjgsOCArMjgsNiBAQAogI2RlZmluZSBGX1NFVE9XTgkxMgkvKiAgZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfU0VUU0lHCTEzCS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRTSUcJMTQJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX0dFVE9XTl9FWAkxNQotI2RlZmluZSBGX1NFVE9XTl9FWAkxNgogCiAvKiBmb3IgcG9zaXggZmNudGwoKSBhbmQgbG9ja2YoKSAqLwogI2RlZmluZSBGX1JETENLCQkwMQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCBkZTNmZTNhLi42ZmVjNGQ0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMjEsOSArMjEsOSBAQAogI2RlZmluZSBLRVJORUxfTUFQX0VORAkJKFRNUEFMSUFTX01BUF9TVEFSVCkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkICp2bWFsbG9jX3N0YXJ0OworZXh0ZXJuIHZvaWQgKnBhcmlzY192bWFsbG9jX3N0YXJ0OwogI2RlZmluZSBQQ1hMX0RNQV9NQVBfU0laRQkoOCoxMDI0KjEwMjQpCi0jZGVmaW5lIFZNQUxMT0NfU1RBUlQJCSgodW5zaWduZWQgbG9uZyl2bWFsbG9jX3N0YXJ0KQorI2RlZmluZSBWTUFMTE9DX1NUQVJUCQkoKHVuc2lnbmVkIGxvbmcpcGFyaXNjX3ZtYWxsb2Nfc3RhcnQpCiAjZGVmaW5lIFZNQUxMT0NfRU5ECQkoS0VSTkVMX01BUF9FTkQpCiAjZW5kaWYgLypfX0FTU0VNQkxZX18qLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggY2U5MzEzMy4uMGQ2ODE4NCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApAQCAtMSwyOSArMSwxMSBAQAogLyogaGFyZGlycS5oOiBQQS1SSVNDIGhhcmQgSVJRIHN1cHBvcnQuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxIE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KLSAqCi0gKiBUaGUgbG9ja2luZyBpcyByZWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcuICBUaGVyZSdzIGEgY3B1LWxvY2FsCi0gKiBjb3VudCBvZiBob3cgbWFueSBpbnRlcnJ1cHRzIGFyZSBiZWluZyBoYW5kbGVkLCBhbmQgYSBnbG9iYWwKLSAqIGxvY2suICBBbiBpbnRlcnJ1cHQgY2FuIG9ubHkgYmUgc2VydmljZWQgaWYgdGhlIGdsb2JhbCBsb2NrCi0gKiBpcyBmcmVlLiAgWW91IGNhbid0IGJlIHN1cmUgbm8gbW9yZSBpbnRlcnJ1cHRzIGFyZSBiZWluZwotICogc2VydmljZWQgdW50aWwgeW91J3ZlIGFjcXVpcmVkIHRoZSBsb2NrIGFuZCB0aGVuIGNoZWNrZWQKLSAqIGFsbCB0aGUgcGVyLWNwdSBpbnRlcnJ1cHQgY291bnRzIGFyZSBhbGwgemVyby4gIEl0J3MgYSBzcGVjaWFsaXNlZAotICogYnJfbG9jaywgYW5kIHRoYXQncyBleGFjdGx5IGhvdyBTcGFyYyBkb2VzIGl0LiAgV2UgZG9uJ3QgYmVjYXVzZQotICogaXQncyBtb3JlIGxvY2tpbmcgZm9yIHVzLiAgVGhpcyB3YXkgaXMgbG9jay1mcmVlIGluIHRoZSBpbnRlcnJ1cHQgcGF0aC4KICAqLwogCiAjaWZuZGVmIF9QQVJJU0NfSEFSRElSUV9ICiAjZGVmaW5lIF9QQVJJU0NfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIF9fc29mdGlycV9wZW5kaW5nOyAvKiBzZXRfYml0IGlzIHVzZWQgb24gdGhpcyAqLwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSk7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaGFyZGlycS5oPgogCiAjZW5kaWYgLyogX1BBUklTQ19IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMzAyZjY4ZC4uYWVhZDQwYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTU5LDggKzU5LDExIEBACiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKQkJCSgoKHJlZ3MpLT5pYW9xWzBdICYgMykgPyAxIDogMCkKICNkZWZpbmUgdXNlcl9zcGFjZShyZWdzKQkJKCgocmVncyktPmlhc3FbMV0gIT0gMCkgPyAxIDogMCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5pYW9xWzBdICYgfjMpCisjZGVmaW5lIHVzZXJfc3RhY2tfcG9pbnRlcihyZWdzKQkoKHJlZ3MpLT5nclszMF0pCiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci0jZW5kaWYKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmRmZDJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIHN5c2NhbGwuaCAqLworCisjaWZuZGVmIF9BU01fUEFSSVNDX1NZU0NBTExfSF8KKyNkZWZpbmUgX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdGF0aWMgaW5saW5lIGxvbmcgc3lzY2FsbF9nZXRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gcmVncy0+Z3JbMjBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3lzY2FsbF9nZXRfYXJndW1lbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBpLAorCQkJCQkgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGxvbmcgKmFyZ3MpCit7CisJQlVHX09OKGkpOworCisJc3dpdGNoIChuKSB7CisJY2FzZSA2OgorCQlhcmdzWzVdID0gcmVncy0+Z3JbMjFdOworCWNhc2UgNToKKwkJYXJnc1s0XSA9IHJlZ3MtPmdyWzIyXTsKKwljYXNlIDQ6CisJCWFyZ3NbM10gPSByZWdzLT5nclsyM107CisJY2FzZSAzOgorCQlhcmdzWzJdID0gcmVncy0+Z3JbMjRdOworCWNhc2UgMjoKKwkJYXJnc1sxXSA9IHJlZ3MtPmdyWzI1XTsKKwljYXNlIDE6CisJCWFyZ3NbMF0gPSByZWdzLT5nclsyNl07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworI2VuZGlmIC8qX0FTTV9QQVJJU0NfU1lTQ0FMTF9IXyovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBhYzc3NWE3Li43ZWNjMTAzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTMyLDYgKzMyLDExIEBACiAjZGVmaW5lIGluaXRfdGhyZWFkX2luZm8gICAgICAgIChpbml0X3RocmVhZF91bmlvbi50aHJlYWRfaW5mbykKICNkZWZpbmUgaW5pdF9zdGFjayAgICAgICAgICAgICAgKGluaXRfdGhyZWFkX3VuaW9uLnN0YWNrKQogCisvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQyAqLworI2RlZmluZSBjdXJyZW50X3RocmVhZF9pbmZvKCkJKChzdHJ1Y3QgdGhyZWFkX2luZm8gKiltZmN0bCgzMCkpCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMWSAqLworCiAvKiB0aHJlYWQgaW5mb3JtYXRpb24gYWxsb2NhdGlvbiAqLwogCiAjZGVmaW5lIFRIUkVBRF9TSVpFX09SREVSICAgICAgICAgICAgMgpAQCAtNDAsMTEgKzQ1LDYgQEAKICNkZWZpbmUgVEhSRUFEX1NJWkUgICAgICAgICAgICAgKFBBR0VfU0laRSA8PCBUSFJFQURfU0laRV9PUkRFUikKICNkZWZpbmUgVEhSRUFEX1NISUZUICAgICAgICAgICAgKFBBR0VfU0hJRlQgKyBUSFJFQURfU0laRV9PUkRFUikKIAotLyogaG93IHRvIGdldCB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdCBmcm9tIEMgKi8KLSNkZWZpbmUgY3VycmVudF90aHJlYWRfaW5mbygpCSgoc3RydWN0IHRocmVhZF9pbmZvICopbWZjdGwoMzApKQotCi0jZW5kaWYgLyogIV9fQVNTRU1CTFkgKi8KLQogI2RlZmluZSBQUkVFTVBUX0FDVElWRV9CSVQJMjgKICNkZWZpbmUgUFJFRU1QVF9BQ1RJVkUJCSgxIDw8IFBSRUVNUFRfQUNUSVZFX0JJVCkKIApAQCAtNjAsNiArNjAsOCBAQAogI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTYJLyogcmVzdG9yZSBzYXZlZCBzaWduYWwgbWFzayAqLwogI2RlZmluZSBUSUZfRlJFRVpFCQk3CS8qIGlzIGZyZWV6aW5nIGZvciBzdXNwZW5kICovCiAjZGVmaW5lIFRJRl9OT1RJRllfUkVTVU1FCTgJLyogY2FsbGJhY2sgYmVmb3JlIHJldHVybmluZyB0byB1c2VyICovCisjZGVmaW5lIFRJRl9TSU5HTEVTVEVQCQk5CS8qIHNpbmdsZSBzdGVwcGluZz8gKi8KKyNkZWZpbmUgVElGX0JMT0NLU1RFUAkJMTAJLyogYnJhbmNoIHN0ZXBwaW5nPyAqLwogCiAjZGVmaW5lIF9USUZfU1lTQ0FMTF9UUkFDRQkoMSA8PCBUSUZfU1lTQ0FMTF9UUkFDRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMSA8PCBUSUZfU0lHUEVORElORykKQEAgLTY5LDYgKzcxLDggQEAKICNkZWZpbmUgX1RJRl9SRVNUT1JFX1NJR01BU0sJKDEgPDwgVElGX1JFU1RPUkVfU0lHTUFTSykKICNkZWZpbmUgX1RJRl9GUkVFWkUJCSgxIDw8IFRJRl9GUkVFWkUpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKKyNkZWZpbmUgX1RJRl9TSU5HTEVTVEVQCQkoMSA8PCBUSUZfU0lOR0xFU1RFUCkKKyNkZWZpbmUgX1RJRl9CTE9DS1NURVAJCSgxIDw8IFRJRl9CTE9DS1NURVApCiAKICNkZWZpbmUgX1RJRl9VU0VSX1dPUktfTUFTSyAgICAgKF9USUZfU0lHUEVORElORyB8IF9USUZfTk9USUZZX1JFU1VNRSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDY5OWNmOGUuLmZjZDNjNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0yNzAsOCArMjcwLDggQEAKIAlERUZJTkUoRFRMQl9PRkZfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCBwZGNfY2FjaGVfaW5mbywgZHRfb2ZmX2NvdW50KSk7CiAJREVGSU5FKERUTEJfTE9PUCwgb2Zmc2V0b2Yoc3RydWN0IHBkY19jYWNoZV9pbmZvLCBkdF9sb29wKSk7CiAJQkxBTksoKTsKLQlERUZJTkUoUEFfQkxPQ0tTVEVQX0JJVCwgMzEtUFRfQkxPQ0tTVEVQX0JJVCk7Ci0JREVGSU5FKFBBX1NJTkdMRVNURVBfQklULCAzMS1QVF9TSU5HTEVTVEVQX0JJVCk7CisJREVGSU5FKFRJRl9CTE9DS1NURVBfUEFfQklULCAzMS1USUZfQkxPQ0tTVEVQKTsKKwlERUZJTkUoVElGX1NJTkdMRVNURVBfUEFfQklULCAzMS1USUZfU0lOR0xFU1RFUCk7CiAJQkxBTksoKTsKIAlERUZJTkUoQVNNX1BNRF9TSElGVCwgUE1EX1NISUZUKTsKIAlERUZJTkUoQVNNX1BHRElSX1NISUZULCBQR0RJUl9TSElGVCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDhjNDcxMmIuLjNhNDRmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCkBAIC0yMDQ3LDEyICsyMDQ3LDEzIEBACiAJYixuICAgICBzeXNjYWxsX2NoZWNrX3NpZwogCiBzeXNjYWxsX3Jlc3RvcmU6Ci0JLyogQXJlIHdlIGJlaW5nIHB0cmFjZWQ/ICovCiAJTERSRUcJVElfVEFTSy1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMQogCi0JbGR3CVRBU0tfUFRSQUNFKCVyMSksICVyMTkKLQliYiw8CSVyMTksMzEsc3lzY2FsbF9yZXN0b3JlX3JmaQotCW5vcAorCS8qIEFyZSB3ZSBiZWluZyBwdHJhY2VkPyAqLworCWxkdwlUQVNLX0ZMQUdTKCVyMSksJXIxOQorCWxkaQkoX1RJRl9TSU5HTEVTVEVQfF9USUZfQkxPQ0tTVEVQKSwlcjIKKwlhbmQsQ09ORCg9KQklcjE5LCVyMiwlcjAKKwliLG4Jc3lzY2FsbF9yZXN0b3JlX3JmaQogCiAJbGRvCVRBU0tfUFRfRlIzMSglcjEpLCVyMTkJCSAgIC8qIHJlbG9hZCBmcHJlZ3MgKi8KIAlyZXN0X2ZwCSVyMTkKQEAgLTIxMTMsMTYgKzIxMTQsMTYgQEAKIAlsZGkJMHgwYiwlcjIwCQkJICAgLyogQ3JlYXRlIG5ldyBQU1cgKi8KIAlkZXBpCS0xLDEzLDEsJXIyMAkJCSAgIC8qIEMsIFEsIEQsIGFuZCBJIGJpdHMgKi8KIAotCS8qIFRoZSB2YWx1ZXMgb2YgUEFfU0lOR0xFU1RFUF9CSVQgYW5kIFBBX0JMT0NLU1RFUF9CSVQgYXJlCi0JICogc2V0IGluIGluY2x1ZGUvbGludXgvcHRyYWNlLmggYW5kIGNvbnZlcnRlZCB0byBQQSBiaXRtYXAKKwkvKiBUaGUgdmFsdWVzIG9mIFNJTkdMRVNURVBfQklUIGFuZCBCTE9DS1NURVBfQklUIGFyZQorCSAqIHNldCBpbiB0aHJlYWRfaW5mby5oIGFuZCBjb252ZXJ0ZWQgdG8gUEEgYml0bWFwCiAJICogbnVtYmVycyBpbiBhc20tb2Zmc2V0cy5jICovCiAKLQkvKiBpZiAoKCVyMTkuUEFfU0lOR0xFU1RFUF9CSVQpKSB7ICVyMjAuMjc9MX0gKi8KLQlleHRydSw9CSVyMTksUEFfU0lOR0xFU1RFUF9CSVQsMSwlcjAKKwkvKiBpZiAoKCVyMTkuU0lOR0xFU1RFUF9CSVQpKSB7ICVyMjAuMjc9MX0gKi8KKwlleHRydSw9CSVyMTksVElGX1NJTkdMRVNURVBfUEFfQklULDEsJXIwCiAJZGVwaQktMSwyNywxLCVyMjAJCQkgICAvKiBSIGJpdCAqLwogCi0JLyogaWYgKCglcjE5LlBBX0JMT0NLU1RFUF9CSVQpKSB7ICVyMjAuNz0xfSAqLwotCWV4dHJ1LD0gJXIxOSxQQV9CTE9DS1NURVBfQklULDEsJXIwCisJLyogaWYgKCglcjE5LkJMT0NLU1RFUF9CSVQpKSB7ICVyMjAuNz0xfSAqLworCWV4dHJ1LD0gJXIxOSxUSUZfQkxPQ0tTVEVQX1BBX0JJVCwxLCVyMAogCWRlcGkJLTEsNywxLCVyMjAJCQkgICAvKiBUIGJpdCAqLwogCiAJU1RSRUcJJXIyMCxUQVNLX1BUX1BTVyglcjEpCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKaW5kZXggMzMwZjUzNi4uMmU3NjEwYyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwpAQCAtNDIzLDggKzQyMywzIEBACiAgICAgICAgIHNldF9laWVtKGNwdV9laWVtKTsJLyogRUlFTSA6IGVuYWJsZSBhbGwgZXh0ZXJuYWwgaW50ciAqLwogCiB9Ci0KLXZvaWQgYWNrX2JhZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmV4cGVjdGVkIElSUSAlZFxuIiwgaXJxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA2MWVlMGVlLi4yMTIwNzQ2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCkBAIC04OTMsNyArODkzLDcgQEAKIAkgKiBvdXJzZWx2ZXMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKIAkJaWYoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9TWU1UQUIKLQkJICAgJiYgKHNlY2hkcnNbaV0uc2hfdHlwZSAmIFNIRl9BTExPQykpIHsKKwkJICAgJiYgKHNlY2hkcnNbaV0uc2hfZmxhZ3MgJiBTSEZfQUxMT0MpKSB7CiAJCQlpbnQgc3RyaW5kZXggPSBzZWNoZHJzW2ldLnNoX2xpbms7CiAJCQkvKiBGSVhNRTogQVdGVUwgSEFDSwogCQkJICogVGhlIGNhc3QgaXMgdG8gZHJvcCB0aGUgY29uc3QgZnJvbQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3B0cmFjZS5jCmluZGV4IDkyN2RiMzYuLmM0ZjQ5ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHRyYWNlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlaG9vay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC0zNSw3ICszNiw4IEBACiAgKi8KIHZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewotCXRhc2stPnB0cmFjZSAmPSB+KFBUX1NJTkdMRVNURVB8UFRfQkxPQ0tTVEVQKTsKKwljbGVhcl90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOworCWNsZWFyX3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfQkxPQ0tTVEVQKTsKIAogCS8qIG1ha2Ugc3VyZSB0aGUgdHJhcCBiaXRzIGFyZSBub3Qgc2V0ICovCiAJcGFfcHN3KHRhc2spLT5yID0gMDsKQEAgLTU1LDggKzU3LDggQEAKIAogdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH5QVF9CTE9DS1NURVA7Ci0JdGFzay0+cHRyYWNlIHw9IFBUX1NJTkdMRVNURVA7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOworCXNldF90c2tfdGhyZWFkX2ZsYWcodGFzaywgVElGX1NJTkdMRVNURVApOwogCiAJaWYgKHBhX3Bzdyh0YXNrKS0+bikgewogCQlzdHJ1Y3Qgc2lnaW5mbyBzaTsKQEAgLTk4LDggKzEwMCw4IEBACiAKIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0JdGFzay0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOwotCXRhc2stPnB0cmFjZSB8PSBQVF9CTE9DS1NURVA7CisJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9TSU5HTEVTVEVQKTsKKwlzZXRfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl9CTE9DS1NURVApOwogCiAJLyogRW5hYmxlIHRha2VuIGJyYW5jaCB0cmFwLiAqLwogCXBhX3Bzdyh0YXNrKS0+ciA9IDA7CkBAIC0yNjMsMjIgKzI2NSwyMCBAQAogfQogI2VuZGlmCiAKLQotdm9pZCBzeXNjYWxsX3RyYWNlKHZvaWQpCitsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKLQkJcmV0dXJuOwotCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQotCQlyZXR1cm47Ci0JcHRyYWNlX25vdGlmeShTSUdUUkFQIHwgKChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRVNZU0dPT0QpCi0JCQkJID8gMHg4MCA6IDApKTsKLQkvKgotCSAqIHRoaXMgaXNuJ3QgdGhlIHNhbWUgYXMgY29udGludWluZyB3aXRoIGEgc2lnbmFsLCBidXQgaXQgd2lsbCBkbwotCSAqIGZvciBub3JtYWwgdXNlLiAgc3RyYWNlIG9ubHkgY29udGludWVzIHdpdGggYSBzaWduYWwgaWYgdGhlCi0JICogc3RvcHBpbmcgc2lnbmFsIGlzIG5vdCBTSUdUUkFQLiAgLWJybAotCSAqLwotCWlmIChjdXJyZW50LT5leGl0X2NvZGUpIHsKLQkJc2VuZF9zaWcoY3VycmVudC0+ZXhpdF9jb2RlLCBjdXJyZW50LCAxKTsKLQkJY3VycmVudC0+ZXhpdF9jb2RlID0gMDsKLQl9CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpICYmCisJICAgIHRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9lbnRyeShyZWdzKSkKKwkJcmV0dXJuIC0xTDsKKworCXJldHVybiByZWdzLT5nclsyMF07Cit9CisKK3ZvaWQgZG9fc3lzY2FsbF90cmFjZV9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzdGVwcGluZyA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NJTkdMRVNURVApIHx8CisJCXRlc3RfdGhyZWFkX2ZsYWcoVElGX0JMT0NLU1RFUCk7CisKKwlpZiAoc3RlcHBpbmcgfHwgdGVzdF90aHJlYWRfZmxhZyhUSUZfU1lTQ0FMTF9UUkFDRSkpCisJCXRyYWNlaG9va19yZXBvcnRfc3lzY2FsbF9leGl0KHJlZ3MsIHN0ZXBwaW5nKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYwppbmRleCA4ZWIzYzYzLi5lODQ2N2U0IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vob29rLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CkBAIC0zNCw3ICszNSw2IEBACiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi0jaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSAic2lnbmFsMzIuaCIKICNlbmRpZgogCkBAIC00NjgsNiArNDY4LDkgQEAKIAkJc2lnYWRkc2V0KCZjdXJyZW50LT5ibG9ja2VkLHNpZyk7CiAJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCisJdHJhY2Vob29rX3NpZ25hbF9oYW5kbGVyKHNpZywgaW5mbywga2EsIHJlZ3MsIDApOworCiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCmluZGV4IDU5ZmMxYTQzLi5mNWY5NjAyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsLlMKQEAgLTI4OCwxOCArMjg4LDIzIEBACiAJU1RSRUcJJXIxOCxQVF9HUjE4KCVyMikKIAkvKiBGaW5pc2hlZCBzYXZpbmcgdGhpbmdzIGZvciB0aGUgZGVidWdnZXIgKi8KIAotCWxkaWwJTCVzeXNjYWxsX3RyYWNlLCVyMQorCWNvcHkJJXIyLCVyMjYKKwlsZGlsCUwlZG9fc3lzY2FsbF90cmFjZV9lbnRlciwlcjEKIAlsZGlsCUwldHJhY2VzeXNfbmV4dCwlcjIKLQliZQlSJXN5c2NhbGxfdHJhY2UoJXNyNywlcjEpCisJYmUJUiVkb19zeXNjYWxsX3RyYWNlX2VudGVyKCVzcjcsJXIxKQogCWxkbwlSJXRyYWNlc3lzX25leHQoJXIyKSwlcjIKIAkKLXRyYWNlc3lzX25leHQ6CQordHJhY2VzeXNfbmV4dDoKKwkvKiBkb19zeXNjYWxsX3RyYWNlX2VudGVyIGVpdGhlciByZXR1cm5lZCB0aGUgc3lzY2FsbG5vLCBvciAtMUwsCisJICogIHNvIHdlIHNraXAgcmVzdG9yaW5nIHRoZSBQVF9HUjIwIGJlbG93LCBzaW5jZSB3ZSBwdWxsZWQgaXQgZnJvbQorCSAqICB0YXNrLT50aHJlYWQucmVncy5nclsyMF0gYWJvdmUuCisJICovCisJY29weQklcmV0MCwlcjIwCiAJbGRpbAlMJXN5c19jYWxsX3RhYmxlLCVyMQogCWxkbyAgICAgUiVzeXNfY2FsbF90YWJsZSglcjEpLCAlcjE5CiAKIAlsZG8gICAgIC1USFJFQURfU1pfQUxHTi1GUkFNRV9TSVpFKCVyMzApLCVyMSAgICAgIC8qIGdldCB0YXNrIHB0ciAqLwogCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCi0JTERSRUcgICBUQVNLX1BUX0dSMjAoJXIxKSwgJXIyMAogCUxEUkVHICAgVEFTS19QVF9HUjI2KCVyMSksICVyMjYJCS8qIFJlc3RvcmUgdGhlIHVzZXJzIGFyZ3MgKi8KIAlMRFJFRyAgIFRBU0tfUFRfR1IyNSglcjEpLCAlcjI1CiAJTERSRUcgICBUQVNLX1BUX0dSMjQoJXIxKSwgJXIyNApAQCAtMzM2LDcgKzM0MSw4IEBACiAjaWZkZWYgQ09ORklHXzY0QklUCiAJbGRvCS0xNiglcjMwKSwlcjI5CQkJLyogUmVmZXJlbmNlIHBhcmFtIHNhdmUgYXJlYSAqLwogI2VuZGlmCi0JYmwJc3lzY2FsbF90cmFjZSwgJXIyCisJbGRvCVRBU0tfUkVHUyglcjEpLCVyMjYKKwlibAlkb19zeXNjYWxsX3RyYWNlX2V4aXQsJXIyCiAJU1RSRUcgICAlcjI4LFRBU0tfUFRfR1IyOCglcjEpICAgICAgICAgIC8qIHNhdmUgcmV0dXJuIHZhbHVlIG5vdyAqLwogCWxkbyAgICAgLVRIUkVBRF9TWl9BTEdOLUZSQU1FX1NJWkUoJXIzMCksJXIxICAgICAgLyogZ2V0IHRhc2sgcHRyICovCiAJTERSRUcJVElfVEFTSyglcjEpLCAlcjEKQEAgLTM1MywxMiArMzU5LDEyIEBACiAKIHRyYWNlc3lzX3NpZ2V4aXQ6CiAJbGRvICAgICAtVEhSRUFEX1NaX0FMR04tRlJBTUVfU0laRSglcjMwKSwlcjEgICAgICAvKiBnZXQgdGFzayBwdHIgKi8KLQlMRFJFRwkwKCVyMSksICVyMQorCUxEUkVHCVRJX1RBU0soJXIxKSwgJXIxCiAjaWZkZWYgQ09ORklHXzY0QklUCiAJbGRvCS0xNiglcjMwKSwlcjI5CQkJLyogUmVmZXJlbmNlIHBhcmFtIHNhdmUgYXJlYSAqLwogI2VuZGlmCi0JYmwJc3lzY2FsbF90cmFjZSwgJXIyCi0Jbm9wCisJYmwJZG9fc3lzY2FsbF90cmFjZV9leGl0LCVyMgorCWxkbwlUQVNLX1JFR1MoJXIxKSwlcjI2CiAKIAlsZGlsCUwlc3lzY2FsbF9leGl0X3JmaSwlcjEKIAliZSxuCVIlc3lzY2FsbF9leGl0X3JmaSglc3I3LCVyMSkKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggYWVhMTc4NC4uZmRhNGJhYSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCQogLyogbGQgc2NyaXB0IHRvIG1ha2UgaHBwYSBMaW51eCBrZXJuZWwgKi8KICNpZm5kZWYgQ09ORklHXzY0QklUCkBAIC03NywxMyArNzgsNyBAQAogCSAqLwogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCWRhdGFfc3RhcnQgPSAuOwotCS4gPSBBTElHTigxNik7Ci0JLyogRXhjZXB0aW9uIHRhYmxlICovCi0JX19leF90YWJsZSA6IHsKLQkJX19zdGFydF9fX2V4X3RhYmxlID0gLjsKLQkJKihfX2V4X3RhYmxlKQotCQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0JfQorCUVYQ0VQVElPTl9UQUJMRSgxNikKIAogCU5PVEVTCiAKQEAgLTk0LDIzICs4OSw4IEBACiAJCV9fc3RvcF9fX3Vud2luZCA9IC47CiAJfQogCi0JLyogcmFyZWx5IGNoYW5nZWQgZGF0YSBsaWtlIGNwdSBtYXBzICovCi0JLiA9IEFMSUdOKDE2KTsKLQkuZGF0YS5yZWFkX21vc3RseSA6IHsKLQkJKiguZGF0YS5yZWFkX21vc3RseSkKLQl9Ci0KLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS8qIERhdGEgKi8KLQkuZGF0YSA6IHsKLQkJREFUQV9EQVRBCi0JCUNPTlNUUlVDVE9SUwotCX0KLQotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7Ci0JLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiB7Ci0JCSooLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQpCi0JfQorCVJXX0RBVEFfU0VDVElPTihMMV9DQUNIRV9CWVRFUywgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKIAogCS8qIFBBLVJJU0MgbG9ja3MgcmVxdWlyZXMgMTYtYnl0ZSBhbGlnbm1lbnQgKi8KIAkuID0gQUxJR04oMTYpOwpAQCAtMTE4LDE3ICs5OCw2IEBACiAJCSooLmRhdGEubG9ja19hbGlnbmVkKQogCX0KIAotCS8qIG5vc2F2ZSBkYXRhIGlzIHJlYWxseSBvbmx5IHVzZWQgZm9yIHNvZnR3YXJlIHN1c3BlbmQuLi5pdCdzIGhlcmUKLQkgKiBqdXN0IGluIGNhc2Ugd2UgZXZlciBpbXBsZW1lbnQgaXQKLQkgKi8KLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQlfX25vc2F2ZV9iZWdpbiA9IC47Ci0JLmRhdGFfbm9zYXZlIDogewotCQkqKC5kYXRhLm5vc2F2ZSkKLQl9Ci0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JX19ub3NhdmVfZW5kID0gLjsKLQogCS8qIEVuZCBvZiBkYXRhIHNlY3Rpb24gKi8KIAlfZWRhdGEgPSAuOwogCkBAIC0xNDcsMTQgKzExNiw2IEBACiAJfQogCV9fYnNzX3N0b3AgPSAuOwogCi0KLQkvKiBhc3NlbWJsZXIgY29kZSBleHBlY3RzIGluaXRfdGFzayB0byBiZSAxNmsgYWxpZ25lZCAqLwotCS4gPSBBTElHTigxNjM4NCk7Ci0JLyogaW5pdF90YXNrICovCi0JLmRhdGEuaW5pdF90YXNrIDogewotCQkqKC5kYXRhLmluaXRfdGFzaykKLQl9Ci0KICNpZmRlZiBDT05GSUdfNjRCSVQKIAkuID0gQUxJR04oMTYpOwogCS8qIExpbmthZ2UgdGFibGVzICovCkBAIC0xNzIsNjQgKzEzMywxNyBAQAogCS8qIHJlc2VydmUgc3BhY2UgZm9yIGludGVycnVwdCBzdGFjayBieSBhbGlnbmluZyBfX2luaXQqIHRvIDE2ayAqLwogCS4gPSBBTElHTigxNjM4NCk7CiAJX19pbml0X2JlZ2luID0gLjsKLQkuaW5pdC50ZXh0IDogeyAKLQkJX3Npbml0dGV4dCA9IC47Ci0JCUlOSVRfVEVYVAotCQlfZWluaXR0ZXh0ID0gLjsKLQl9Ci0JLmluaXQuZGF0YSA6IHsKLQkJSU5JVF9EQVRBCi0JfQotCS4gPSBBTElHTigxNik7Ci0JLmluaXQuc2V0dXAgOiB7Ci0JCV9fc2V0dXBfc3RhcnQgPSAuOwotCQkqKC5pbml0LnNldHVwKQotCQlfX3NldHVwX2VuZCA9IC47Ci0JfQotCS5pbml0Y2FsbC5pbml0IDogewotCQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJSU5JVENBTExTCi0JCV9faW5pdGNhbGxfZW5kID0gLjsKLQl9Ci0JLmNvbl9pbml0Y2FsbC5pbml0IDogewotCQlfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0JCSooLmNvbl9pbml0Y2FsbC5pbml0KQotCQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOwotCX0KLQlTRUNVUklUWV9JTklUCi0KLQkvKiBhbHRlcm5hdGUgaW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQuICBUaGlzIGlzIGEgbWVjaGFuaXNtIHg4NiB1c2VzCi0JICogdG8gZGV0ZWN0IHRoZSBDUFUgdHlwZSBhbmQgcmVwbGFjZSBnZW5lcmljIGluc3RydWN0aW9uIHNlcXVlbmNlcwotCSAqIHdpdGggQ1BVIHNwZWNpZmljIG9uZXMuICBXZSBkb24ndCBjdXJyZW50bHkgZG8gdGhpcyBpbiBQQSwgYnV0Ci0JICogaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYS4uLgotCSAqLwotCS4gPSBBTElHTig0KTsKLQkuYWx0aW5zdHJ1Y3Rpb25zIDogewotCQlfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwotCQkqKC5hbHRpbnN0cnVjdGlvbnMpCi0JCV9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOyAKLQl9IAotCS5hbHRpbnN0cl9yZXBsYWNlbWVudCA6IHsKLQkJKiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpCi0JfSAKLQotCS8qIC5leGl0LnRleHQgaXMgZGlzY2FyZCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lLCB0byBkZWFsIHdpdGggcmVmZXJlbmNlcwotCSAqICBmcm9tIC5hbHRpbnN0cnVjdGlvbnMgYW5kIC5laF9mcmFtZQotCSAqLwotCS5leGl0LnRleHQgOiB7CisJSU5JVF9URVhUX1NFQ1RJT04oMTYzODQpCisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCisJLyogd2UgaGF2ZSB0byBkaXNjYXJkIGV4aXQgdGV4dCBhbmQgc3VjaCBhdCBydW50aW1lLCBub3QgbGluayB0aW1lICovCisJLmV4aXQudGV4dCA6CisJewogCQlFWElUX1RFWFQKIAl9Ci0JLmV4aXQuZGF0YSA6IHsKKwkuZXhpdC5kYXRhIDoKKwl7CiAJCUVYSVRfREFUQQogCX0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLQkuID0gQUxJR04oUEFHRV9TSVpFKTsKLQkuaW5pdC5yYW1mcyA6IHsKLQkJX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCQkqKC5pbml0LnJhbWZzKQotCQlfX2luaXRyYW1mc19lbmQgPSAuOwotCX0KLSNlbmRpZgogCiAJUEVSQ1BVKFBBR0VfU0laRSkKIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCBkNWFjYTMxLi4xM2I2ZTNlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC00MzQsOCArNDM0LDggQEAKICNkZWZpbmUgU0VUX01BUF9PRkZTRVQoeCkgKCh2b2lkICopKCgodW5zaWduZWQgbG9uZykoeCkgKyBWTV9NQVBfT0ZGU0VUKSBcCiAJCQkJICAgICAmIH4oVk1fTUFQX09GRlNFVC0xKSkpCiAKLXZvaWQgKnZtYWxsb2Nfc3RhcnQgX19yZWFkX21vc3RseTsKLUVYUE9SVF9TWU1CT0wodm1hbGxvY19zdGFydCk7Cit2b2lkICpwYXJpc2Nfdm1hbGxvY19zdGFydCBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTChwYXJpc2Nfdm1hbGxvY19zdGFydCk7CiAKICNpZmRlZiBDT05GSUdfUEExMQogdW5zaWduZWQgbG9uZyBwY3hsX2RtYV9zdGFydCBfX3JlYWRfbW9zdGx5OwpAQCAtNDk2LDEzICs0OTYsMTQgQEAKICNpZmRlZiBDT05GSUdfUEExMQogCWlmIChocHBhX2RtYV9vcHMgPT0gJnBjeGxfZG1hX29wcykgewogCQlwY3hsX2RtYV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKVNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7Ci0JCXZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChwY3hsX2RtYV9zdGFydCArIFBDWExfRE1BX01BUF9TSVpFKTsKKwkJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChwY3hsX2RtYV9zdGFydAorCQkJCQkJKyBQQ1hMX0RNQV9NQVBfU0laRSk7CiAJfSBlbHNlIHsKIAkJcGN4bF9kbWFfc3RhcnQgPSAwOwotCQl2bWFsbG9jX3N0YXJ0ID0gU0VUX01BUF9PRkZTRVQoTUFQX1NUQVJUKTsKKwkJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOwogCX0KICNlbHNlCi0Jdm1hbGxvY19zdGFydCA9IFNFVF9NQVBfT0ZGU0VUKE1BUF9TVEFSVCk7CisJcGFyaXNjX3ZtYWxsb2Nfc3RhcnQgPSBTRVRfTUFQX09GRlNFVChNQVBfU1RBUlQpOwogI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA0ZmQ0NzkwNS4uMmJhMTRlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTM4NSw5ICszODUsMTUgQEAKIAogY29uZmlnIE5PREVTX1NISUZUCiAJaW50CisJZGVmYXVsdCAiOCIgaWYgUFBDNjQKIAlkZWZhdWx0ICI0IgogCWRlcGVuZHMgb24gTkVFRF9NVUxUSVBMRV9OT0RFUwogCitjb25maWcgTUFYX0FDVElWRV9SRUdJT05TCisJaW50CisJZGVmYXVsdCAiMjU2IiBpZiBQUEM2NAorCWRlZmF1bHQgIjMyIgorCiBjb25maWcgQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gUFBDNjQKQEAgLTQwOCw2ICs0MTQsMTAgQEAKIGNvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAogCWRlZl9ib29sIHkKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBQUENfQk9PSzNTXzY0CisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggYWFjZjYyOS4uMWE1NGEzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTY0LDYgKzE2NCwxNyBAQAogCiBib290IDo9IGFyY2gvJChBUkNIKS9ib290CiAKK2lmZXEgKCQoQ09ORklHX1JFTE9DQVRBQkxFKSx5KQorcXVpZXRfY21kX3JlbG9jc19jaGVjayA9IENBTEwgICAgJDwKKyAgICAgIGNtZF9yZWxvY3NfY2hlY2sgPSBwZXJsICQ8ICIkKE9CSkRVTVApIiAiJChvYmopL3ZtbGludXgiCisKK1BIT05ZICs9IHJlbG9jc19jaGVjaworcmVsb2NzX2NoZWNrOiBhcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsIHZtbGludXgKKwkkKGNhbGwgY21kLHJlbG9jc19jaGVjaykKKworekltYWdlOiByZWxvY3NfY2hlY2sKK2VuZGlmCisKICQoQk9PVF9UQVJHRVRTKTogdm1saW51eAogCSQoUSkkKE1BS0UpIEFSQ0g9cHBjNjQgJChidWlsZCk9JChib290KSAkKHBhdHN1YnN0ICUsJChib290KS8lLCRAKQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9hZGRSYW1EaXNrLmMKaW5kZXggYzAyYTk5OS4uODkzZjQ0NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvYWRkUmFtRGlzay5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2FkZFJhbURpc2suYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJcmV0dXJuIDY0OwogfQotdm9pZCBnZXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgZ2V0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAl1bnNpZ25lZCBqOwogCXVuc2lnbmVkIG51bSA9IGZyZWFkKGJ1ZiwgMSwgNDA5NiwgZmlsZSk7CkBAIC02NiwxMiArNjYsMTIgQEAKIAkJYnVmW2pdID0gMDsKIH0KIAotdm9pZCBwdXQ0ayhGSUxFICpmaWxlLCBjaGFyICpidWYgKQorc3RhdGljIHZvaWQgcHV0NGsoRklMRSAqZmlsZSwgY2hhciAqYnVmICkKIHsKIAlmd3JpdGUoYnVmLCAxLCA0MDk2LCBmaWxlKTsKIH0KIAotdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkgCitzdGF0aWMgdm9pZCBkZWF0aChjb25zdCBjaGFyICptc2csIEZJTEUgKmZkZXNjLCBjb25zdCBjaGFyICpmbmFtZSkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgbXNnKTsKIAlmY2xvc2UoZmRlc2MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCBjZWU4MDgwLi5kZDM4NjA4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMjEwLDcgKzIxMCw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCmluZGV4IDRjMzYxODYuLjhlOWJlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCkBAIC0xOTksNyArMTk5LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A1MCB7CiAJCQkJY29tcGF0aWJsZSA9ICJhdCwyNGMwOCI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCBkZTMwYjNmOS4uODJmZjJiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCkBAIC0yNDcsNyArMjQ3LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAogCQlpMmNAM2Q0MCB7CkBAIC0yNTYsNyArMjU1LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAkJc3JhbUA4MDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3JhbSI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDBiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCmluZGV4IGQxM2NiMTEuLmU0NWE2M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzCkBAIC0yNTEsNyArMjUxLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjYwLDcgKzI1OSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCmluZGV4IGUyOTdkOGIuLjBjMzkwMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tZWRpYTUyMDAuZHRzCkBAIC0yMjMsNyArMjIzLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjMyLDcgKzIzMSw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCXNyYW1AODAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCmluZGV4IDdiZThjYTAuLjZjYTRmYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tb3Rpb25wcm8uZHRzCkBAIC0yMjIsNyArMjIyLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM1MTIxYWRzLmR0cwppbmRleCBjMmI4ZGJmLi5jMzUzZGFjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNTEyMWFkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzUxMjFhZHMuZHRzCkBAIC0yMDksNyArMjA5LDYgQEAKIAkJCXJlZyA9IDwweDE3MDAgMHgyMD47CiAJCQlpbnRlcnJ1cHRzID0gPDkgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AxNzIwIHsKQEAgLTIyMCw3ICsyMTksNiBAQAogCQkJcmVnID0gPDB4MTcyMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MTAgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY0AxNzQwIHsKQEAgLTIzMSw3ICsyMjksNiBAQAogCQkJcmVnID0gPDB4MTc0MCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8ICZpcGljID47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCiAJCWkyY2NvbnRyb2xAMTc2MCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N193bGFuLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCmluZGV4IDlhNjAzNjkuLjllYTc4MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3dsYW4uZHRzCkBAIC02Nyw3ICs2Nyw3IEBACiAJCQlkZXZpY2Utd2lkdGggPSA8MT47CiAKIAkJCXBhcnRpdGlvbkAwIHsKLQkJCQlyZWcgPSA8MCAweDgwMDA+OworCQkJCXJlZyA9IDwwIDB4ODAwMDA+OwogCQkJCWxhYmVsID0gInUtYm9vdCI7CiAJCQkJcmVhZC1vbmx5OwogCQkJfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cwppbmRleCAwNjMzMmQ2Li4xZTNlYzhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCkBAIC00ODcsOCArNDg3LDggQEAKIAkJCQkgJnFlX3Bpb19mIDUgMCAgIC8qIFVTQlROICovCiAJCQkJICZxZV9waW9fZiA2IDAgICAvKiBVU0JSUCAqLwogCQkJCSAmcWVfcGlvX2YgOCAwICAgLyogVVNCUk4gKi8KLQkJCQkgJmJjc3IxNyAgIDYgMCAgIC8qIFNQRUVEICovCi0JCQkJICZiY3NyMTcgICA1IDE+OyAvKiBQT1dFUiAqLworCQkJCSAmYmNzcjE3ICAgMSAwICAgLyogU1BFRUQgKi8KKwkJCQkgJmJjc3IxNyAgIDIgMD47IC8qIFBPV0VSICovCiAJCX07CiAKIAkJZW5ldDA6IHVjY0AyMDAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdWNtYzUyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdWNtYzUyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJhNzU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL211Y21jNTIuZHRzCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogTWFucm9sYW5kIG11Y21jNTIgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcgR21iSAorICogSGVpa28gU2Nob2NoZXIgPGhzQGRlbnguZGU+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJtYW5yb2xhbmQsbXVjbWM1MiI7CisJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1MiI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJZ3B0MDogdGltZXJANjAwIHsJLy8gR1BUIDAgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQxOiB0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MjogdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDM6IHRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOworCQkJcmVnID0gPDB4YjAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CisJCQlyZWcgPSA8MHhjMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCXNlcmlhbEAyMDAwIHsgLyogUFNDMSBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjIwMCB7IC8qIFBTQzIgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47CisJCX07CisKKwkJc2VyaWFsQDJjMDAgeyAvKiBQU0M2IGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47IAkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQljb21wYXRpYmxlID0gImludGVsLGx4dDk3MSI7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJaHdtb25AMmMgeworCQkJCWNvbXBhdGlibGUgPSAiYWQsYWRtOTI0MCI7CisJCQkJcmVnID0gPDB4MmM+OworCQkJfTsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlwY2lAZjAwMDBkMDAgeworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CisJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkJLyogSURTRUwgMHgxMCAqLworCQkJCTB4ODAwMCAwIDAgMSAmbXBjNTIwMF9waWMgMCAzIDMKKwkJCQkweDgwMDAgMCAwIDIgJm1wYzUyMDBfcGljIDAgMyAzCisJCQkJMHg4MDAwIDAgMCAzICZtcGM1MjAwX3BpYyAwIDIgMworCQkJCTB4ODAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAxIDMKKwkJCQk+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OworCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDYwMDAwMDAwIDB4NjAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweDkwMDAwMDAwIDB4OTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJmc2wsbXBjNTIwMC1scGIiLCJzaW1wbGUtYnVzIjsKKworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisKKwkJcmFuZ2VzID0gPDAgMCAweGZmODAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMSAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMAorCQkJICAzIDAgMHg4MDAwMDAwMCAweDAwODAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAwODAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkRUUyI7CisJCQkJcmVnID0gPDB4MCAweDAwMTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJLZXJuZWwiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJSb290RlMiOworCQkJCXJlZyA9IDwweDAwMzAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3MDAwMDAgeworCQkJCWxhYmVsID0gIlUtQm9vdCI7CisJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc0MDAwMCB7CisJCQkJbGFiZWwgPSAiRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc0MDAwMCAweDAwMDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzYwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZWQuIEVudiI7CisJCQkJcmVnID0gPDB4MDA3NjAwMDAgMHgwMDAyMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMCB7CisJCQkJbGFiZWwgPSAicmVzZXJ2ZSI7CisJCQkJcmVnID0gPDB4MDA3ODAwMDAgMHgwMDA4MDAwMD47CisJCQl9OworCQl9OworCisJCXNpbXBsZTEwMDogZ3Bpby1jb250cm9sbGVyLTEwMEAzLDYwMDEwMCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAxMDAgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUxMDQ6IGdwaW8tY29udHJvbGxlci0xMDRAMyw2MDAxMDQgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMTA0IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAwOiBncGlvLWNvbnRyb2xsZXItMjAwQDMsNjAwMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMCAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwMTogZ3Bpby1jb250cm9sbGVyLTIwMUAzLDYwMDIwMSB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDEgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDI6IGdwaW8tY29udHJvbGxlci0yMDJAMyw2MDAyMDIgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjAyIDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjAzOiBncGlvLWNvbnRyb2xsZXItMjAzQDMsNjAwMjAzIHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwMyAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwNDogZ3Bpby1jb250cm9sbGVyLTIwNEAzLDYwMDIwNCB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMDQgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCQlzaW1wbGUyMDY6IGdwaW8tY29udHJvbGxlci0yMDZAMyw2MDAyMDYgeworCQkJY29tcGF0aWJsZSA9ICJtYW5yb2xhbmQsbXVjbWM1Mi1hdXgtZ3BpbyI7CisJCQlyZWcgPSA8MyAweDAwNjAwMjA2IDB4MT47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKwkJc2ltcGxlMjA3OiBncGlvLWNvbnRyb2xsZXItMjA3QDMsNjAwMjA3IHsKKwkJCWNvbXBhdGlibGUgPSAibWFucm9sYW5kLG11Y21jNTItYXV4LWdwaW8iOworCQkJcmVnID0gPDMgMHgwMDYwMDIwNyAweDE+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisJCXNpbXBsZTIwZjogZ3Bpby1jb250cm9sbGVyLTIwZkAzLDYwMDIwZiB7CisJCQljb21wYXRpYmxlID0gIm1hbnJvbGFuZCxtdWNtYzUyLWF1eC1ncGlvIjsKKwkJCXJlZyA9IDwzIDB4MDA2MDAyMGYgMHgxPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCmluZGV4IDMwYmZkYzAuLjhhNGVjMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzCkBAIC0yNDQsNyArMjQ0LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjUzLDcgKzI1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQkJcnRjQDUxIHsKIAkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKIAkJCQlyZWcgPSA8MHg1MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcGNtMDMyLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCmluZGV4IDAzMDA0MjYuLjg1ZDg1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCkBAIC0yNDQsNyArMjQ0LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKIAkJaTJjQDNkNDAgewpAQCAtMjUzLDcgKzI1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlmc2w1MjAwLWNsb2NraW5nOwogCQkJcnRjQDUxIHsKIAkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKIAkJCQlyZWcgPSA8MHg1MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKaW5kZXggOWVlZmUwMC4uOTRhMzMyMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwpAQCAtMjYsOCArMjYsNyBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOwotCQkvKiBwY2kxIGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcGh5c2ljYWwgY29ubmVjdG9yICovCi0JCXBjaTIgPSAmcGNpMjsKKwkJcGNpMSA9ICZwY2kxOwogCX07CiAKIAljcHVzIHsKQEAgLTM4MSw3ICszODAsNyBAQAogCQlidXMtcmFuZ2UgPSA8MCAwPjsKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDA4MDAwMDA+OwotCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjYwMDAwMDA+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CkBAIC0zOTAsNyArMzg5LDcgQEAKIAkJZGV2aWNlX3R5cGUgPSAicGNpIjsKIAl9OwogCi0JcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJcGNpMTogcGNpZUBlMDAwYTAwMCB7CiAJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OwogCQlpbnRlcnJ1cHQtbWFwID0gPAogCkBAIC00MDMsOSArNDAyLDkgQEAKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWludGVycnVwdHMgPSA8MHgxYSAweDI+OwogCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OwotCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDB4MCAweDIwMDAwMDAwCi0JCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMzAwMDAwMCAweDAgMHgwODAwMDAwMD47Ci0JCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGUyODAwMDAwIDB4MCAweDA4MDAwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMDAwMDAwPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CiAJCSNhZGRyZXNzLWNlbGxzID0gPDM+OwpAQCAtNDE5LDExICs0MTgsMTEgQEAKIAkJCWRldmljZV90eXBlID0gInBjaSI7CiAJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMAogCQkJCSAgMHgwMjAwMDAwMCAweDAgMHhhMDAwMDAwMAotCQkJCSAgMHgwIDB4MjAwMDAwMDAKKwkJCQkgIDB4MCAweDEwMDAwMDAwCiAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKIAkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKLQkJCQkgIDB4MCAweDA4MDAwMDAwPjsKKwkJCQkgIDB4MCAweDAwODAwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cwppbmRleCBjOTU5MGI1Li4xZGIwN2Y2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCkBAIC0xNjAsNyArMTYwLDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJIHJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzA3IjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy91YzEwMS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOTI2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdWMxMDEuZHRzCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogTWFucm9sYW5kIHVjMTAxIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkgKKyAqIEhlaWtvIFNjaG9jaGVyIDxoc0BkZW54LmRlPgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBTZWNyZXQgTGFiIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAibWFucm9sYW5kLHVjMTAxIjsKKwljb21wYXRpYmxlID0gIm1hbnJvbGFuZCx1YzEwMSI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCisJY3B1cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDUyMDBAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OworCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDQwMDAwMDA+OwkvLyA2NE1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJZ3B0MDogdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0MTogdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYxMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NDogdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDU6IHRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ2OiB0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NzogdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDIwMDAgeyAvKiBQU0MxIGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OworCQl9OworCisJCXNlcmlhbEAyMjAwIHsgLyogUFNDMiBpbiBVQVJUIG1vZGUgKi8KKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOworCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKKwkJfTsKKworCQlzZXJpYWxAMmMwMCB7CQkvKiBQU0M2IGluIFVBUlQgbW9kZSAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJpbnRlbCxseHQ5NzEiOworCQkJCXJlZyA9IDwwPjsKKwkJCX07CisJCX07CisKKwkJYXRhQDNhMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKKwkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47CisJCX07CisKKwkJaTJjQDNkNDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOworCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKKwkJCWZzbCxwcmVzZXJ2ZS1jbG9ja2luZzsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJCQlod21vbkAyYyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZCxhZG05MjQwIjsKKwkJCQlyZWcgPSA8MHgyYz47CisJCQl9OworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gIm54cCxwY2Y4NTYzIjsKKwkJCQlyZWcgPSA8MHg1MT47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CisKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjgwMDAwMCAweDAwODAwMDAwCisJCQkgIDEgMCAweDgwMDAwMDAwIDB4MDA4MDAwMDAKKwkJCSAgMyAwIDB4ODAwMDAwMDAgMHgwMDgwMDAwMD47CisKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgwMDgwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gIkRUUyI7CisJCQkJcmVnID0gPDB4MCAweDAwMTAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMTAwMDAwIHsKKwkJCQlsYWJlbCA9ICJLZXJuZWwiOworCQkJCXJlZyA9IDwweDEwMDAwMCAweDAwMjAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMzAwMDAwIHsKKwkJCQlsYWJlbCA9ICJSb290RlMiOworCQkJCXJlZyA9IDwweDAwMzAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA3MDAwMDAgeworCQkJCWxhYmVsID0gIlUtQm9vdCI7CisJCQkJcmVnID0gPDB4MDA3MDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc0MDAwMCB7CisJCQkJbGFiZWwgPSAiRW52IjsKKwkJCQlyZWcgPSA8MHgwMDc0MDAwMCAweDAwMDEwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzUwMDAwIHsKKwkJCQlsYWJlbCA9ICJyZWQuIEVudiI7CisJCQkJcmVnID0gPDB4MDA3NTAwMDAgMHgwMDAxMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc2MDAwMCB7CisJCQkJbGFiZWwgPSAicmVzZXJ2ZSI7CisJCQkJcmVnID0gPDB4MDA3NjAwMDAgMHgwMDBhMDAwMD47CisJCQl9OworCQl9OworCisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKaW5kZXggMzgzOGI3Ny4uMDM5NmNlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ3OjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQwLDcgKzE1OCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjE5LDExICsyMzcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTIzOSw5ICsyNTksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjczLDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMjgsNiArMzUwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDIsNiArMzY1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjcsNiArMzkxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00NTcsNiArNDgyLDcgQEAKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CiBDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19PRl9NRElPPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC00OTUsMTAgKzUyMSw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC01MTksNyArNTQxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU1OCwxNCArNTc5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02MzYsNiArNjU3LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY0Niw2ICs2NjgsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02NjYsMjMgKzY4OSwyMyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTcxMywyNSArNzM2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi0jIENPTkZJR19EQUIgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydApAQCAtNzc1LDExICs3ODUsMTIgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0M9eQotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQogIyBDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CkBAIC04NjYsNiArODc3LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTg4NSwxMCArOTAwLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTU5LDEyICs5NzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMDY0LDYgKzEwODIsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMDczLDYgKzEwOTIsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTA5MCwxMCArMTExMCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTExMDUsMTEgKzExMjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTExOCwyMyArMTE0MywyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTExNTksNyArMTE4Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIwMCwxMSArMTIyNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCmluZGV4IDI5YjBmMzQuLmY1YzA3ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKQEAgLTEsMjUgKzEsMjcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMC1yYzIKLSMgU2F0IEFwciAxOCAwMDo0ODowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM0CisjIFRodSBPY3QgMTUgMTA6MzM6MjQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCi1DT05GSUdfNnh4PXkKK0NPTkZJR19QUENfQk9PSzNTXzMyPXkKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQk9PSzNTPXkKK0NPTkZJR182eHg9eQogQ09ORklHX1BQQ19GUFU9eQogIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1NURF9NTVU9eQogQ09ORklHX1BQQ19TVERfTU1VXzMyPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1dPUkRfU0laRT0zMgpAQCAtMzAsMTUgKzMyLDE3IEBACiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDPXkKQEAgLTUyLDEyICs1NiwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzgsMTEgKzg0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDYsNyArMTEzLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE5LDYgKzEyNSwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjcsMTQgKzE0MCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ3LDcgKzE2NSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjgsMTEgKzI0NiwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQ4LDkgKzI2OCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI2NCw2ICsyODUsNyBAQAogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zNDgsNiArMzcwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNjIsNiArMzg1LDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODcsNiArNDExLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDIyLDcgQEAKICMgQ09ORklHX01URCBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQzMSw3ICs0NTcsOSBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDU0LDEwICs0ODIsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKLQotIwotIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKLSMKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CkBAIC00NzUsNiArNDk5LDggQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC00ODMsNiArNTA5LDcgQEAKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKQEAgLTUwMiw3ICs1MjksNiBAQAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldApAQCAtNTE0LDExICs1NDAsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NDAsNiArNTY5LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01NjgsNiArNTk4LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNTg2LDE0ICs2MTcsMTcgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjQwLDkgKzY3NCwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjYxLDYgKzY5OCw4IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjg2LDEwICs3MjUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTksNiArNzk1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03ODcsNiArODI0LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODEyLDIzICs4NTAsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODQ3LDMwICs4ODUsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05MTMsNiArOTM5LDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTkzMiwxMCArOTYyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTkyLDEyICsxMDI1LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTA0MSw2ICsxMDc0LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTA1MCw2ICsxMDg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNjcsMTAgKzExMDIsMTQgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CkBAIC0xMDgyLDExICsxMTIxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTEwOTUsMjMgKzExMzUsMjUgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRVZFTlRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAogIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xMTM2LDcgKzExNzgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExNzgsMTEgKzEyMTksMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwppbmRleCAwN2I2YjI2Li40Zjc3YTFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIFNhdCBBcHIgMTggMDA6NDg6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKICMgQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVMgaXMgbm90IHNldAogQ09ORklHX1BQQz15CkBAIC01MiwxMSArNTYsMTMgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAogQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03NywxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEwNSw3ICsxMTIsNiBAQAogQ09ORklHX0VNQkVEREVEPXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKIENPTkZJR19DT01QQVRfQlJLPXkKQEAgLTEyNSwxNCArMTM4LDE5IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDAsNyArMTU4LDcgQEAKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMjAsMTEgKzIzOCwxMyBAQAogIyBDT05GSUdfSEFWRV9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjQwLDkgKzI2MCwxMCBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQogQ09ORklHX0JPVU5DRT15CiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTI1Myw2ICsyNzQsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTMyOSw2ICszNTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM0Myw2ICszNjYsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2OCw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ1OCw2ICs0ODMsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTQ4Myw2ICs1MDksNyBAQAogIwogIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldApAQCAtNTA2LDEwICs1MzMsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTMyLDYgKzU1NSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTU0MCw3ICs1NjQsNiBAQAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc5LDE0ICs2MDIsMTQgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKIENPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfRkVDX01QQzUyeHhfTURJTz15CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0Nyw2ICs2NzAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjU3LDYgKzY4MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKQEAgLTY3NiwyMiArNzAxLDI4IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiAjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNzM4LDYgKzc2OSw4IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldApAQCAtNzQ3LDkgKzc4MCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc3NSwyNSArODA2LDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTgxNyw3ICs4MzUsNyBAQAogIwogIyBMRUQgZHJpdmVycwogIwotIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKIApAQCAtODY2LDYgKzg4NCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtODkzLDYgKzkxMiwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC05MTIsMTAgKzkzNSwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk4NiwxMiArMTAxMiwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTEwOTEsNiArMTExNyw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTExMDAsNiArMTEyNyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTE3LDEwICsxMTQ1LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTEzMiwxMSArMTE2NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xMTQ1LDIzICsxMTc4LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTE4Niw3ICsxMjIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjI3LDExICsxMjYxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggYWZiMWEzZC4uZjkxNjhjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjQyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzksMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMDUsNyArMTEyLDYgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CkBAIC0xMTgsNiArMTI0LDEzIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX0NPTVBBVF9CUks9eQpAQCAtMTI1LDcgKzEzOCw2IEBACiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xMzMsNyArMTQ1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xNDYsNyArMTY0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTIyNywxMSArMjQ1LDEzIEBACiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNDcsOSArMjY3LDEwIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0xCiBDT05GSUdfQk9VTkNFPXkKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMzM2LDYgKzM1Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzUwLDYgKzM3Miw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc1LDYgKzM5OCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzgyLDkgKzQwNiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0OTEsNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CkBAIC00OTIsMTAgKzUxNyw2IEBACiAjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUxNSw2ICs1MzYsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9bQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTM2LDYgKzU1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTY0LDYgKzU4Nyw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTU4MiwxNCArNjA2LDE3IEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYzNiwxNiArNjYzLDE2IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19GRUNfTVBDNTJ4eF9NRElPPXkKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MjIsNiArNzQ5LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTAsNiArNzc4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzc2LDIzICs4MDUsMjMgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKICMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODExLDMwICs4NDAsMTggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTg3MSwxNSArODg4LDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19TT0MgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRj15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CkBAIC05OTUsNiArMTAxNCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTAyMiw2ICsxMDQyLDEwIEBACiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIwogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDEsMTIgKzEwNjUsMTYgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldApAQCAtMTExNCw3ICsxMTQyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMSw2ICsxMjI4LDcgQEAKIENPTkZJR19IQVNfRE1BPXkKIENPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKK0NPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKIAogIwogIyBLZXJuZWwgaGFja2luZwpAQCAtMTIxMCw2ICsxMjM4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjMsMjMgKzEyNTIsMTIgQEAKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQotCi0jCi0jIFRyYWNlcnMKLSMKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0lSUVNUQUNLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IDg1ODVjN2MuLjc1YzgzNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwLXJjMgotIyBTYXQgQXByIDE4IDAwOjQ4OjU3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzQKKyMgVGh1IE9jdCAxNSAxMDozMzoyMyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKICMKLUNPTkZJR182eHg9eQorQ09ORklHX1BQQ19CT09LM1NfMzI9eQogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzh4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogQ09ORklHX1BQQ19CT09LM1M9eQorQ09ORklHXzZ4eD15CiBDT05GSUdfUFBDX0ZQVT15CiAjIENPTkZJR19BTFRJVkVDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0hBVkVfUE1VX1NVUFBPUlQ9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfV09SRF9TSVpFPTMyCkBAIC0zMCwxNSArMzIsMTcgQEAKIENPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiAjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QUEM9eQpAQCAtNTIsMTEgKzU2LDEzIEBACiAjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfQVJDSD15CiBDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CiBDT05GSUdfREVGQVVMVF9VSU1BR0U9eQogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQz15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNzcsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMDUsNyArMTEyLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE4LDYgKzEyNCwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CiBDT05GSUdfQ09NUEFUX0JSSz15CkBAIC0xMjUsMTQgKzEzOCwxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ1LDcgKzE2Myw3IEBACiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMjI1LDExICsyNDMsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0NSw5ICsyNjUsMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMjc5LDcgQEAKIENPTkZJR19FWFRSQV9UQVJHRVRTPSIiCiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCkBAIC0zMzQsNiArMzU2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzcxLDcgQEAKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzMsNiArMzk3LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC0zODIsOSArNDA3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2NCw2ICs0ODksNyBAQAogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMiwxMCArNTI4LDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQogIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTUyOSw2ICs1NTEsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC01MzgsNyArNTYxLDYgQEAKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3NywxNCArNTk5LDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NTQsNiArNjc2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY2NCw2ICs2ODcsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC02ODUsMjIgKzcwOSwyOCBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTc0Nyw2ICs3NzcsOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKQEAgLTc1Niw5ICs3ODgsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03ODksMjUgKzgxOSwxMiBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTg1MSwxMSArODY4LDEyIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKICMgQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldApAQCAtOTY5LDYgKzk4Nyw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtOTk2LDYgKzEwMTUsMTAgQEAKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNSwxMCArMTAzOCwxMyBAQAogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEwODksMTIgKzExMTUsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC0xMTk0LDYgKzEyMjAsNyBAQAogQ09ORklHX0hBU19ETUE9eQogQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQorQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQogCiAjCiAjIEtlcm5lbCBoYWNraW5nCkBAIC0xMjAzLDYgKzEyMzAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTIyMCwxMCArMTI0OCwxNCBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKQEAgLTEyMzUsMTEgKzEyNjcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtMTI0OCwyMyArMTI4MSwyNSBAQAogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FVkVOVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAorQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CiAjIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKQEAgLTEyODksNyArMTMyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTMzMSwxMSArMTM2NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggYTJkZjA2My4uNDY2ZjA5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU3LDYgKzI2MCw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzQsNiArMjc4LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjUsOSArNDMyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQpAQCAtNjI4LDcgKzYzNSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjU4LDEwICs2NjcsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NjAsNiArNzY2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MTQsOSArODIxLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzQsNiArODM4LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTg4Myw2ICs4OTIsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04OTQsNyArOTA0LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CkBAIC05MzQsNiArOTQzLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTQ0LDYgKzk1NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MCw2ICsxMDAxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTEwNDUsNiArMTA1Nyw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMTQ2LDYgKzExNTksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxNSw3ICsxMjI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTMyNyw2ICsxMzQwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNDQsNiArMTM1OCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzY1LDcgKzEzODAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0MDcsMTEgKzE0MjEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCmluZGV4IDkzZWJkNDQuLjY2OTRmYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODYsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTExOSwyMCArMTIxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQwLDYgKzE0MSw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUwLDYgKzI1Myw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjcsNiArMjcxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDgsNiArMzUzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtMzk2LDkgKzQwMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNTY1LDE4ICs1NzEsMTYgQEAKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjYzLDYgKzY2Nyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02OTMsOSArNjk4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03MTMsNyArNzE1LDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTczMiw2ICs3MzMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03ODQsNiArNzg2LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODU0LDcgKzg1Nyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTkyNiw2ICs5MjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICs5NDUsNyBAQAogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCmluZGV4IGZmMzNhN2QuLjg2ZGYxOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxM19yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjksNiArMzc0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTgsNiArNDA0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNSw3ICs0MTIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsNiArNDI0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDg4LDYgKzQ5NSw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjEzLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NDMsNyArNjUyLDkgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKQEAgLTc0MSw5ICs3NTIsMTEgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03OTEsMTAgKzgwNCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg5Niw2ICs5MDYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk1MCw5ICs5NjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk4NCw2ICs5OTIsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwMzYsNiArMTA0OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNDgsOSArMTA2Miw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTA4OCw4ICsxMTAwLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMDk5LDYgKzExMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTEyLDcgKzExMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNjQsNiArMTE3OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzAsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEyNzMsNiArMTI4OSw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1MSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMzg0LDYgKzE0MDIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTQ1Myw3ICsxNDcyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU2OSw2ICsxNTg3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1ODYsNiArMTYwNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjA0LDEwICsxNjI0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzAsMTAgKzE2NTIsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjYwLDcgKzE2ODIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MDIsMTEgKzE3MjMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKaW5kZXggNzYyMzdkNC4uN2JmNzFkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzE1X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjIzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTYsNiArMjU5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQyNyw5ICs0MzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4OCw2ICs0OTUsNyBAQAogIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjA1LDYgKzYxMyw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ0LDExICs2NTMsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzEsNiArNjgzLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTgsNiArNzExLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODAyLDkgKzgxNiwxMSBAQAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTg1MiwxMCArODY4LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTU3LDYgKzk3MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTAxMSw5ICsxMDI1LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwNTYsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKQEAgLTEwOTcsNiArMTExMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMDksOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE0OSw4ICsxMTY0LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExNzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTczLDcgKzExOTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjUsNiArMTI0Miw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE2LDYgKzEzMzQsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTEzMzQsNiArMTM1Myw3IEBACiAjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorIyBDT05GSUdfVVNCX0VUSF9FRU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTEzOTUsNiArMTQxNSw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xNDQ1LDYgKzE0NjYsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTUxNCw3ICsxNTM2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTYzMCw2ICsxNjUxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDcsNiArMTY2OSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjY1LDEwICsxNjg4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2OTEsMTAgKzE3MTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNzIxLDcgKzE3NDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3NjMsMTEgKzE3ODcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggZTBlMzZhMS4uN2RlZjgzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNCw2ICs1MTEsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0Miw3ICs1NTAsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjEyLDcgKzYyMiw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjM1LDcgKzY0Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTY2MywxMCArNjc0LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzU5LDYgKzc2Nyw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODEyLDkgKzgyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODMyLDYgKzgzOCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04ODEsNiArODkyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtODkyLDkgKzkwNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkyNyw2ICs5MzcsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MzcsNiArOTQ4LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtOTUwLDcgKzk2Miw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMDcwLDYgKzEwODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTEyOCw3ICsxMTQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTIwMiw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMTksNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEyODIsMTEgKzEyOTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNGYyN2Q0NS4uYjM5OGI5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjI0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjYsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTcsNiArMjYwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUwNyw2ICs1MTQsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU0NSw3ICs1NTMsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjE3LDcgKzYyNyw5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC02NDAsNyArNjUyLDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjY4LDEwICs2NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NzYsNiArNzg0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MzAsOSArODM5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODY5LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05MTUsNiArOTI2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTI3LDkgKzkzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTY3LDggKzk3NywxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTc4LDYgKzk5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTk5MSw3ICsxMDA0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDQzLDYgKzEwNTUsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTE0Niw2ICsxMTU5LDggQEAKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKQEAgLTExODYsNiArMTIwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjQ3LDcgKzEyNjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzY1LDYgKzEzODAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM4Miw2ICsxMzk4LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE0MDMsNyArMTQyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ0NSwxMSArMTQ2MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwppbmRleCA2NDhkYWMwLi5mNjczMTdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowNyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI0LDkgKzQzMSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIAogIwogIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwpAQCAtNDgzLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzcsNiArNjQ1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzYsMTEgKzY4NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwMyw2ICs3MTUsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTczMCw2ICs3NDMsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NDUsMTAgKzg1OSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzMCw2ICs5NDEsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4NCw5ICs5OTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PXkKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDE3LDcgKzEwMjYsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDU1LDggKzEwNjMsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwNjYsNiArMTA3Niw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExMTEsNiArMTEyMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTIzOCw2ICsxMjUwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyODgsNiArMTMwMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzUwLDcgKzEzNjQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDY1LDYgKzE0NzgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ4Miw2ICsxNDk2LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1MDMsNyArMTUxOCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTU0NSwxMSArMTU1OSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKaW5kZXggYmY2ZGViOC4uYTY2ODExMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjA4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MjQsOSArNDMxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC00ODMsNiArNDkwLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTU4OSw2ICs1OTcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyNyw3ICs2MzYsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNzI1LDEwICs3MzYsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTAsNiArODE4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjQsOSArODczLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfUENGODU3ND15Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk3LDcgKzkwMyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTkzNSw4ICs5NDAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTk0Niw2ICs5NTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05OTEsNiArOTk5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfVUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMDU5LDYgKzEwNjgsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTExNyw2ICsxMTI3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTExNjcsNiArMTE3OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjI5LDcgKzEyNDEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzQ0LDYgKzEzNTUsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2MSw2ICsxMzczLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEzODIsNyArMTM5NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQyNCwxMSArMTQzNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCAzMjM2YzQ3Li5jNGU5MmJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1Niw2ICsyNTksNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY4LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMyw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNTU2LDkgKzU2MywxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjA2LDEwICs2MTUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTksNiArNzA1LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC03NTIsOSArNzU5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03NzIsNiArNzc2LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTgyMSw2ICs4MzAsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC04MzIsOSArODQyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODY3LDYgKzg3NSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTg3Nyw2ICs4ODYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04OTAsNyArOTAwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMTAsNiArMTAxOSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDY4LDcgKzEwNzgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMTQwLDYgKzExNDksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTE1Nyw2ICsxMTY3LDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExNzgsNyArMTE4OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTIyMCwxMSArMTIzMCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCA4YzUyOTlkLi40ZjQzNGIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxMCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MjggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NSw2ICsyNTgsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcyLDYgKzI3Niw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY3LDYgKzM3Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEwLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQyMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIzLDkgKzQzMCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU4NSw2ICs1OTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYyMyw3ICs2MzEsOSBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldApAQCAtNjkzLDcgKzcwMyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzE2LDcgKzcyOCw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogIyBDT05GSUdfR0lBTkZBUiBpcyBub3Qgc2V0CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfVUdFVEhfTUFHSUNfUEFDS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VHRVRIX1RYX09OX0RFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKQEAgLTc0NCwxMCArNzU1LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDYgKzg0OCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODkzLDkgKzkwMiw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTEzLDYgKzkxOSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NjIsNiArOTczLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTczLDkgKzk4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTEwMDgsNiArMTAxOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMTgsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEwMzEsNyArMTA0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTUxLDYgKzExNjIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIxMCw3ICsxMjIyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTI4NCw2ICsxMjk1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMDEsNiArMTMxMyw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzIyLDcgKzEzMzUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzNjQsMTEgKzEzNzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggZmYzMTY2Ny4uYjUyZWMwOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI1LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTUsNiArMjU4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Miw2ICsyNzYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA1LDcgKzQxMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxOCw2ICs0MjQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjcsOSArNDM0LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNDkzLDYgKzUwMCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02MzksNyArNjQ3LDYgQEAKIENPTkZJR19GU0xfUFFfTURJTz15CiAjIENPTkZJR19HSUFORkFSIGlzIG5vdCBzZXQKIENPTkZJR19VQ0NfR0VUSD15Ci0jIENPTkZJR19VR0VUSF9NQUdJQ19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVUdFVEhfVFhfT05fREVNQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldApAQCAtNjQ5LDEwICs2NTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NTAsNiArNzU0LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04MDQsOSArODA5LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NTMsMTcgKzg1NSwyMiBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtODk3LDggKzkwNCwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtOTA4LDYgKzkxNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtOTkyLDcgKzEwMDIsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTAzOCw2ICsxMDQ3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMDcsNyArMTExNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExODMsNiArMTE5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjAwLDYgKzEyMTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzMiw3ICsxMjQzLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc0LDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IGUyODVlYzAuLjczMDA2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjExIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoyOSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjgsNiArMzczLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTcsNiArNDAzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MDMsNiArNTEwLDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01NDIsMTEgKzU1MCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTU2OSw2ICs1ODAsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTU5Niw2ICs2MDgsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NzIsNyArNjg1LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC03MjAsMTAgKzczNSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgxNiw2ICs4MjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg2OSw5ICs4ODIsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTg4OSw2ICs4OTksMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTM4LDYgKzk1Myw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk0OSw5ICs5NjUsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC05ODQsNiArOTk4LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk0LDYgKzEwMDksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDA3LDcgKzEwMjMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA3Miw2ICsxMDg3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzAsNyArMTE0Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDYsNiArMTIyMSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjIxLDYgKzEyMzcsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI0Miw3ICsxMjU5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjg0LDExICsxMzAwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCmluZGV4IDFhYjNlNGMuLjllOTE1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjEzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozMCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyMSArMTI3LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ3LDYgKzE0OCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjU2LDYgKzI1OSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjMsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTIsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5OSw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTgsNiArNTA1LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNTM3LDExICs1NDUsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01NjQsNiArNTc1LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC01OTEsNiArNjAzLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNjEwLDYgKzYyMyw3IEBACiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAogQ09ORklHX01EX1JBSUQ0NTY9eQogQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RNIGlzIG5vdCBzZXQKQEAgLTY3OCw3ICs2OTIsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcwOCwxMCArNzI0LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODEzLDYgKzgyNiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODY3LDkgKzg4MSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODg3LDYgKzg5OCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTUyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTQ3LDkgKzk2NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTk4Nyw2ICsxMDAyLDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTk3LDYgKzEwMTMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMDEwLDcgKzEwMjcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzMsNiArMTA0OSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEwODUsNiArMTEwMiw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNjAsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE4OCw2ICsxMjA3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyNDYsNyArMTI2Niw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEzNjEsNiArMTM4MCw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNzYsNiArMTM5Niw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzk2LDEyICsxNDE3LDEzIEBACiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE0NDMsMTEgKzE0NjUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCmluZGV4IDNhNjhmODYuLjZiMzk5MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgVHVlIEF1ZyAxMSAxOTo1Nzo1MSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNSw2ICszNSw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjQsMjcgKzEyNiwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1NCw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjcxLDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzY2LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk1LDYgKzQwMSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDIsNyArNDA5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE1LDYgKzQyMSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIyLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjUxLDcgKzY1OCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNjgxLDEwICs2OTAsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03ODYsNiArNzkyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NDAsOSArODQ3LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04NjAsNiArODY0LDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTkwOSw2ICs5MTgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC05MjAsOSArOTMwLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtOTYwLDYgKzk2OCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk3MCw2ICs5NzksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk4Myw3ICs5OTMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMzUsNiArMTA0NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNTgsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTIwNyw3ICsxMjE4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTMwNiw2ICsxMzE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzMjEsNiArMTMzMiw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMzQyLDcgKzEzNTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTEzODQsMTEgKzEzOTUsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCmluZGV4IGZmMDRlMTAuLmE1YmRlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzIgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg1LDExICs4NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMjMsMjggKzEyNiwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xODgsNiArMTkyLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiBDT05GSUdfS1NJODU2MD15CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Nyw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg0LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Nyw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1OTEsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNTkxLDEwICs2MDIsNyBAQAogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MDQsMTAgKzcxMiwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzE5LDkgKzczNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NTUsNyArNzcwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTgxOCw2ICs4MzIsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtODc3LDcgKzg5Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTYyLDYgKzk3Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODEsMTAgKzk5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xMDA4LDEwICsxMDI2LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwMzksNyArMTA1Nyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcwLDExICsxMDg3LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKaW5kZXggZmIxMGNjOC4uYzEwZTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTQwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjMzIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNyArMTI5LDI4IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg5LDYgKzE5Myw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDQsNiArMjQ5LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MSw2ICsyNjcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0OSw2ICszNTYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OCw2ICszODYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg1LDcgKzM5NCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OCw2ICs0MDYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MywxNSArNDkyLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg4LDYgKzU5NiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTgsOSArNjExLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzNCw3ICs2NDUsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNjk2LDYgKzcwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NTQsNyArNzY1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04MjIsNiArODMyLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgzOSw2ICs4NTAsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtODU3LDEwICs4NjksMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtODgzLDEwICs4OTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC05MTIsNyArOTI2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTk0MywxMSArOTU2LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKaW5kZXggNWM4Y2U2OS4uOGQ5ZjBhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NTYwX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyOSArMTMwLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ3LDYgKzI1Miw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjQsNiArMjcwLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNjEsNiArMzY4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDYsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTAsNiArNDE4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MzAsNyArNTM5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTU4MiwxMCArNTkzLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjk4LDE0ICs3MDYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNzIxLDkgKzczOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NDYsNiArNzYyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU5LDcgKzc3Niw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC04MjQsNiArODQwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTg4Miw3ICs4OTksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTk1MCw2ICs5NjYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTY3LDYgKzk4NCw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC05ODUsMTAgKzEwMDMsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAxMSwxMCArMTAzMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTEwNDAsNyArMTA2MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMDcxLDExICsxMDkwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKaW5kZXggMTU4ZTYzZS4uOWI2M2UyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9tcGM4NXh4X2Nkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyOCArMTI5LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTkwLDYgKzE5NCw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDUsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Miw2ICsyNjgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OSw2ICszNjYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OCw2ICszOTYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk1LDcgKzQwNCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MTYsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU4Miw3ICs1OTEsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTYzMCwxMCArNjQxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzM3LDYgKzc0NSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC03NTEsOSArNzY0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTc3Niw2ICs3ODcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC03ODksNyArODAxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4NjUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTEyLDcgKzkyNCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTgwLDYgKzk5MSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTcsNiArMTAwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMDE1LDEwICsxMDI4LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwNDEsMTAgKzEwNTYsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMDcwLDcgKzEwODUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTEwMSwxMSArMTExNSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwppbmRleCAyNzI2ZmNhMS4uMWIyMzU2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjcgKzEyOCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQyLDYgKzI0Nyw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTksNiArMjY1LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTUsNiArMzYyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODQsNiArMzkyLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MSw3ICs0MDAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDQsNiArNDEyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01MjEsNyArNTMwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC01NjksMTAgKzU4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3Niw2ICs2ODQsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtNjkwLDkgKzcwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTUsNiArNzI2LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtNzU4LDYgKzc3MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MTYsNyArODI5LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NzIsNiArODg0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg4Nyw2ICs5MDAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtOTA3LDcgKzkyMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzgsMTEgKzk1MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTYwX2RlZmNvbmZpZwppbmRleCBiMGM0Njk4Li45NTlkMDI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU2MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNiwyNiArMTI5LDI3IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDIsNiArMjQ3LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OSw2ICsyNjUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0Nyw2ICszNTQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3Niw2ICszODQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzgzLDcgKzM5Miw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ4MSwxNSArNDkwLDE0IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKIENPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTg0LDYgKzU5MiwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC01OTQsOSArNjA3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTYzMCw3ICs2NDEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzIxLDYgKzczMSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03NzksNyArNzkwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NDcsNiArODU3LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjMsNiArODc0LDcgQEAKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC04ODEsMTAgKzg5MywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC05MDcsMTAgKzkyMSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTk0Nyw3ICs5NjEsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTc4LDExICs5OTEsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwppbmRleCAwNGM4NWRhLi43ZjVlYzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MzcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTMsNiArMTk3LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiBDT05GSUdfU09DUkFURVM9eQogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDcsNiArMjUyLDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2NCw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1OCw2ICszNjUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MDQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDEyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDIxLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDgyLDYgKzQ5MCw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02NjgsNyArNjc3LDkgQEAKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY5OCwxMCArNzA5LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzY1LDYgKzc3Myw3IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs3ODMsNiBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtODM0LDYgKzg0Miw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODg4LDkgKzg5Nyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTIxLDYgKzkyNywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC05NzMsNiArOTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTg1LDkgKzk5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDA2LDggKzEwMTYsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTEwMTcsNiArMTAyOSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTExMiw3ICsxMTI1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTM1LDYgKzExNDcsNyBAQAogIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKQEAgLTExODQsNiArMTE5Nyw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzE5LDYgKzEzMzMsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM2OSw2ICsxMzg0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MzgsNyArMTQ1NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1NTIsNiArMTU2Nyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTY5LDYgKzE1ODUsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTU4OSw3ICsxNjA2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjEsMTEgKzE2MzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKaW5kZXggZTdlODFkNi4uYzgzMjdlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDozOCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjcsMjIgKzEzMCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MCw3ICsxNTIsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTcsNiArMjAxLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDI2LDYgKzQzMyw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU1LDYgKzQ2Myw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NjIsNyArNDcxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDc1LDYgKzQ4Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjIyLDYgKzYzMSw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjYyLDcgKzY3Miw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC03MzIsOCArNzQ0LDEwIEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03ODIsMTAgKzc5Niw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyNywxMSArODM4LDE1IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtODQyLDYgKzg1Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtOTA5LDYgKzkyNSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIENPTkZJR19JMkNfQUxHT0JJVD1tCkBAIC05NjcsOSArOTg0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDAzLDE0ICsxMDE3LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwNjEsNiArMTA4NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNzIsOSArMTA5Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDkyLDYgKzExMTUsNyBAQAogIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTAyLDYgKzExMjYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfQUdQPW0KK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09bQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTEyNSw3ICsxMTUwLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExOTAsNiArMTIxNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjU0LDcgKzEyNzksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xMzUyLDYgKzEzNzYsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTM2OSw2ICsxMzk0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTEzODgsMTAgKzE0MTQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTQxNCwxMCArMTQ0MiwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE0NDMsNyArMTQ3MSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNDc1LDExICsxNTAyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCmluZGV4IDJjNDA3NTIuLjgyNTYzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjM5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NCwxMSArODYsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNCwyOCArMTI3LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTg4LDYgKzE5Miw3IEBACiAjIENPTkZJR19NUEM4NXh4X01EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NTM2X0RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1eHhfRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9SREIgaXMgbm90IHNldAogIyBDT05GSUdfU09DUkFURVMgaXMgbm90IHNldAogIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjQ4LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2MCw2ICsyNjYsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1NCw2ICszNjEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4Myw2ICszOTEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzkwLDcgKzM5OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTY3Nyw5ICs2ODUsMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcyNywxMCArNzM3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODI0LDYgKzgzMSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODc2LDkgKzg4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODk2LDYgKzkwMSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk1NSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk1Niw5ICs5NjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTk3Nyw2ICs5ODYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05ODcsNiArOTk3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDAwLDcgKzEwMTEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA2NSw2ICsxMDc1LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMzQsNyArMTE0NSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTIwMyw2ICsxMjEzLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMjAsNiArMTIzMSw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xMjQwLDcgKzEyNTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTI3MSwxMSArMTI4MiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwppbmRleCA4NDU3MzFkLi45MWQ4NWQ3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjIyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MCAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCmluZGV4IDRmMjI4YTkuLmRlYmUyNjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDEgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0yMiw2ICsyMiw3IEBACiAjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19TUEU9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiBDT05GSUdfUFBDX0JPT0szRV9NTVU9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVAgaXMgbm90IHNldApAQCAtMzYsNiArMzcsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg0LDExICs4NiwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTI2LDIyICsxMjksMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUxLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTYsNiArMjAwLDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjY5LDYgKzI3NSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzcxLDYgKzM3OCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDExLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDIwLDkgKzQyOSw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX09GX1BBUlRTPXkKQEAgLTYzMCw3ICs2MzksOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTY3OCwxMCArNjg5LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzcyLDYgKzc4MCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODI1LDkgKzgzNCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODQ1LDYgKzg1MSwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC04OTQsNiArOTA1LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTA1LDkgKzkxNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MjYsNiArOTM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtOTM2LDYgKzk0Nyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTk0OSw3ICs5NjEsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTA0Miw2ICsxMDUzLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMTEsNyArMTEyMyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTE4MCw2ICsxMTkxLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExOTcsNiArMTIwOSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjE2LDEwICsxMjI5LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEyNDIsMTAgKzEyNTcsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xMjcxLDcgKzEyODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTMwMywxMSArMTMxNywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZwppbmRleCA5MTk2NzI0Li43NDUxNTUwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQyIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NSwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNSwyOSArMTI4LDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5MCw2ICsxOTQsNyBAQAogIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODUzNl9EUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NUEM4NXh4X0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg1eHhfUkRCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ1JBVEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTSTg1NjAgaXMgbm90IHNldAogIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjMsNiArMjY5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArMzY0LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODYsNiArMzk0LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Myw3ICs0MDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02ODEsOSArNjg5LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX0VORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CkBAIC03MzIsMTAgKzc0Miw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgzMSw2ICs4MzgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg4Niw5ICs4OTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkyMSwxNCArOTI2LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC05NzksNiArOTk0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtOTkwLDkgKzEwMDYsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdNT05fREVCVUdfQ0hJUD15CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwMTIsNiArMTAyNiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzNyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzNSw3ICsxMDUxLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTExMDAsNiArMTExNSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMTY5LDcgKzExODUsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEyMzgsNiArMTI1Myw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEyNzEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTI3NSw3ICsxMjkyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEzMDYsMTEgKzEzMjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKaW5kZXggMmU0OWE2ZS4uNjMxZDkyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0MyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CiBDT05GSUdfUFBDX01NVV9OT0hBU0g9eQorQ09ORklHX1BQQ19NTVVfTk9IQVNIXzMyPXkKIENPTkZJR19QUENfQk9PSzNFX01NVT15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CkBAIC0zNiw2ICszNyw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMjUsMjkgKzEyOCwzMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xOTAsNiArMTk0LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1hFU19NUEM4NXh4IGlzIG5vdCBzZXQKQEAgLTI0Niw2ICsyNTEsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYzLDYgKzI2OSw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzU3LDYgKzM2NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg2LDYgKzM5NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zOTMsNyArNDAyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjgxLDkgKzY4OSwxMSBAQAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19FTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldApAQCAtNzMyLDEwICs3NDIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MzEsNiArODM4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04ODYsOSArODk0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05MjEsMTQgKzkyNiwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTc5LDYgKzk5NCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTk5MCw5ICsxMDA2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotQ09ORklHX0hXTU9OX0RFQlVHX0NISVA9eQogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDEyLDYgKzEwMjYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDIyLDYgKzEwMzcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMzUsNyArMTA1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTAwLDYgKzExMTUsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTE2OSw3ICsxMTg1LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMjM4LDYgKzEyNTMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1NSw2ICsxMjcxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTEyNzUsNyArMTI5Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMzA2LDExICsxMzIyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKaW5kZXggMTAyNWRhMi4uNTJhY2JhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC94ZXNfbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjgsMjIgKzEzMSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MSw3ICsxNTMsOSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yMDEsNiArMjA1LDcgQEAKICMgQ09ORklHX01QQzg1eHhfTURTIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzg1MzZfRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NXh4X1JEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT0NSQVRFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LU0k4NTYwIGlzIG5vdCBzZXQKIENPTkZJR19YRVNfTVBDODV4eD15CkBAIC0yNTYsNiArMjYxLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Myw2ICsyNzksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNSw2ICs0MTIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Niw2ICs0NTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NTcsOSArNDY2LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC02MzUsNiArNjQ0LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjc0LDExICs2ODQsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfU0FUQV9BSENJPXkKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzAxLDYgKzcxNCw3IEBACiBDT05GSUdfUEFUQV9BTEk9eQogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3NDIsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MDQsNyArODE5LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04MzQsMTAgKzg1MSw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk1MSw2ICs5NjUsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMDYsOCArMTAyMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDQxLDE0ICsxMDU0LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwOTksNiArMTEyMiw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTAsOSArMTEzNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNTEsNiArMTE3Myw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE4NCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKQEAgLTExODEsNyArMTIwNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwNCw2ICsxMjI3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMjQ5LDYgKzEyNzMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKQEAgLTE0NjYsNiArMTQ5MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTQxLDcgKzE1NjcsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjU4LDYgKzE2ODMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY3NSw2ICsxNzAxLDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE2OTQsMTAgKzE3MjEsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzIwLDEwICsxNzQ5LDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTc0OSw3ICsxNzc4LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzkwLDExICsxODE4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCmluZGV4IDUyN2FkMWEuLjI4OTgwNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ5IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIxICsxMzIsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTIsMTIgKzE1MywxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTYsNiArMjU5LDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjczLDYgKzI3Nyw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDU4LDYgKzQ2NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQ2Nyw5ICs0NzQsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjgwLDYgKzY4Nyw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcxOSwxMiArNzI3LDE1IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNzQ3LDYgKzc1OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzc1LDYgKzc4Nyw3IEBACiAjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODUxLDcgKzg2NCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODgxLDEwICs4OTYsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDE2LDYgKzEwMjgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwNzEsOSArMTA4NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogQ09ORklHX0RTMTY4Mj15Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTExMDYsMTQgKzExMTYsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2NCw2ICsxMTg0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3NSw5ICsxMTk2LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTIxNyw2ICsxMjM2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTIyNyw2ICsxMjQ3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTI0Nyw3ICsxMjY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjcwLDYgKzEyOTAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMzIyLDYgKzEzNDMsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xMzk3LDYgKzE0MTksNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTUwMSw2ICsxNTI0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1NzYsNyArMTYwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE2ODIsNiArMTcwNSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTY5Nyw2ICsxNzIxLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE3MTgsNyArMTc0Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNzYxLDExICsxNzg1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9bQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGNkMzM4ZDQuLmUxOTlkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjoyOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6NDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODgsMTEgKzg5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzAsMjEgKzEzMiwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1MiwxMiArMTUzLDE0IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI1Niw2ICsyNTksNyBAQAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzMsNiArMjc3LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDIyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NTgsNiArNDY0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDY3LDkgKzQ3NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02ODAsNiArNjg3LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNzE5LDEyICs3MjcsMTUgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogQ09ORklHX1NBVEFfU0lMMjQ9eQpAQCAtNzk2LDcgKzgwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODI2LDEwICs4MzksNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05NjEsNiArOTcxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDE2LDkgKzEwMjcsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKIENPTkZJR19EUzE2ODI9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDUxLDE0ICsxMDU5LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDksNiArMTEyNyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMjAsOSArMTEzOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExNjIsNiArMTE3OSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNzIsNiArMTE5MCw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExOTIsNyArMTIxMSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTI2Nyw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTM0Miw2ICsxMzYyLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTE0NDYsNiArMTQ2Nyw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTIxLDcgKzE1NDMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjI3LDYgKzE2NDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDIsNiArMTY2NCw3IEBACiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CkBAIC0xNjYzLDcgKzE2ODYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9bQpAQCAtMTcwNiwxMSArMTcyOCwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPW0KICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwppbmRleCBiYTQ3ODgzLi4zYjBmYmZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MzAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg4LDExICs4OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIxICsxMzMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsMTIgKzE1NCwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCiAjCi0jIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CiAjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0yNTcsNiArMjYwLDcgQEAKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc0LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNTAzLDYgKzUwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogQ09ORklHX1RJUEM9bQogIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU4Miw2ICs1ODgsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC01ODksNyArNTk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjAyLDYgKzYwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjExLDkgKzYxOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX09GX1BBUlRTIGlzIG5vdCBzZXQKQEAgLTc4MCw2ICs3ODcsNyBAQAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC04MTksMTEgKzgyNywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTg0Niw2ICs4NTcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTg3Myw2ICs4ODUsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC05NDksNyArOTYyLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05NzksMTAgKzk5NCw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTExMjAsNiArMTEzMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTE3NSw5ICsxMTg4LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiBDT05GSUdfRFMxNjgyPXkKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTIxMSwxNCArMTIyMSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMjY5LDYgKzEyODksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMjgwLDkgKzEzMDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMzIyLDYgKzEzNDEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzMyLDYgKzEzNTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMzUyLDcgKzEzNzMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNzUsNiArMTM5NSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTE0MjcsNiArMTQ0OCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDIsNiArMTUyNCw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FUTSBpcyBub3Qgc2V0CkBAIC0xNjA3LDYgKzE2MzAsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OSw3ICsxNjkzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3NSw2ICsxNzk4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNzkxLDYgKzE4MTUsNyBAQAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19QUkVFTVBUPXkKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTE4MTAsMTAgKzE4MzUsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTgzNywxMCArMTg2NCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE4NzIsNyArMTg5OSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTE1LDExICsxOTQxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IGE2MWYxODMuLmRlNGQ1MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ1IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzUsNiArMzUsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTI2LDIyICsxMjgsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNDksNiArMTUwLDggQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNTEsNiArMjU0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2OCw2ICsyNzIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM4NSw2ICszOTAsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0MjAsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDIxLDcgKzQyOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0NDAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NDUsOSArNDUyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldApAQCAtNjYyLDYgKzY2OSw3IEBACiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTcwMSwxMSArNzA5LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcyOCw2ICs3MzksNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03NTUsNiArNzY3LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtODE4LDE0ICs4MzEsMTMgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC05MjksNiArOTQxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk4Miw5ICs5OTUsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwMDIsNyArMTAxMiw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIxLDYgKzEwMzAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMxLDYgKzEwNDEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTA3LDYgKzExMTgsNyBAQAogIyBDT05GSUdfTE9HTyBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPXkKIENPTkZJR19TTkRfVElNRVI9eQogQ09ORklHX1NORF9QQ009eQpAQCAtMTIwOSw3ICsxMjIxLDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEzMjksNiArMTM0MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTEzODgsNyArMTQwMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE1MDUsNiArMTUxNiw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTIyLDYgKzE1MzQsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldApAQCAtMTU0MSwxMCArMTU1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTY3LDEwICsxNTgyLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTU5Nyw3ICsxNjEyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2MjksMTEgKzE2NDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCmluZGV4IDcwMTZjZTcuLjc1NGE3OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjQ2IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzYsNiArMzYsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTg3LDExICs4OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMwLDIyICsxMzIsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CkBAIC0xNTMsNyArMTU0LDkgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjUxLDEzICsyNTQsMTMgQEAKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjc1LDYgKzI3OCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtNDA0LDYgKzQwOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzNCw2ICs0MzksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDEsNyArNDQ3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDU0LDYgKzQ1OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU0Niw2ICs1NTIsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4NSwxMSArNTkyLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2MjIsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MzksNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzE1LDcgKzcyNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtNzYzLDEwICs3NzcsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04ODAsNiArODkxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTkzNCw5ICs5NDYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5NjMsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTczLDYgKzk4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTk4Myw2ICs5OTIsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDAyLDYgKzEwMTIsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExMDUsNyArMTExNiw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjgsNiArMTEzOCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTExODAsNiArMTE5MSw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTM1OCw2ICsxMzcwLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0MjgsNyArMTQ0MSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTQ2LDYgKzE1NTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTU2Myw2ICsxNTc2LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKQEAgLTE1ODIsMTAgKzE1OTYsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTYwOCwxMCArMTYyNCwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE2MzgsNyArMTY1NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTY4MCwxMSArMTY5NSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L3NiYzg2NDFkX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCmluZGV4IGY1Y2EyZTAuLjg5OTkxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDo0NSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NywxMSArODgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMCwyMSArMTMyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTUyLDEzICsxNTMsMTUgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwogIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU3LDYgKzI2MCw3IEBACiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3NCw2ICsyNzgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTUwMiw2ICs1MDcsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKIENPTkZJR19USVBDPW0KICMgQ09ORklHX1RJUENfQURWQU5DRUQgaXMgbm90IHNldAogIyBDT05GSUdfVElQQ19ERUJVRyBpcyBub3Qgc2V0CkBAIC01ODEsNiArNTg3LDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTg4LDcgKzU5NSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTYwMSw2ICs2MDcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTYxMCw5ICs2MTcsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9PRl9QQVJUUyBpcyBub3Qgc2V0CkBAIC04MzMsNyArODQwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NjMsMTAgKzg3Miw3IEBACiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk5Niw2ICsxMDAyLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMDQ5LDkgKzEwNTYsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA3MywxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMTE4LDYgKzExMjcsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMTI5LDkgKzExMzksNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMTY0LDYgKzExNzIsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzExODMsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC0xMTk0LDcgKzEyMDQsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtMTI3NCw2ICsxMjgzLDcgQEAKICMgQ09ORklHX09DRlMyX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM0Myw3ICsxMzUzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0NTEsNiArMTQ2MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0NjcsNiArMTQ3Nyw3IEBACiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtMTQ4NiwxMCArMTQ5NywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CkBAIC0xNTE0LDEwICsxNTI3LDEwIEBACiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKQEAgLTE1NTAsNyArMTU2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xNTkzLDExICsxNjA1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCmluZGV4IGFlY2U2YmIuLjA1MmNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA0IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzgsMTEgKzgwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTYsMjggKzExOSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNSwxMCArMjM5LDEwIEBACiAjIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1Niw2ICsyNjAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzOCw2ICszNDMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Nyw2ICszNzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc0LDcgKzM4MSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Nyw2ICszOTMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUzMCwxNiArNTM3LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTgwLDYgKzU4Niw3IEBACiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNTkwLDYgKzU5Nyw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldApAQCAtNzE2LDYgKzcyNCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc3NSw3ICs3ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NDcsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODY0LDYgKzg3Myw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldApAQCAtODgwLDEwICs4OTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldApAQCAtOTA2LDEwICs5MTgsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggODEwNTM2MC4uMGZiNjVhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDowNSAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTIyLDYgKzIyLDcgQEAKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CiBDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEzNSwyMyArMTM4LDI0IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xNjEsMTIgKzE2NSwxNCBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKICMKICMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfU0xPV19XT1JLPXkKICMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTI3NSwxMiArMjgxLDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI5OCw2ICszMDQsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwOSw2ICszMTYsNyBAQAogQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTY3NCwxMCArNjgyLDEyIEBACiAjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAogQ09ORklHX0JUX0hDSUJGVVNCPW0KIENPTkZJR19CVF9IQ0lWSENJPW0KKyMgQ09ORklHX0JUX01SVkwgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC02ODYsNyArNjk2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNjk5LDYgKzcwOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTcxMCw5ICs3MjAsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD1tCiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNzYzLDYgKzc3Myw3IEBACiAjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQogIyBDT05GSUdfTVREX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC04NTcsNiArODY4LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEPW0KIENPTkZJR19TQ1NJXzNXXzlYWFg9bQogQ09ORklHX1NDU0lfQUNBUkQ9bQpAQCAtOTEyLDcgKzkyNCw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC05ODIsNyArOTk2LDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC0xMDEwLDEwICsxMDI2LDcgQEAKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtMTE0NSw2ICsxMTU4LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC0xMjAwLDkgKzEyMTQsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19QQ0Y4NTc0PW0KLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMjIwLDYgKzEyMzEsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049bQogQ09ORklHX0hXTU9OX1ZJRD1tCisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCkBAIC0xMjY5LDYgKzEyODUsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTI4MCw3ICsxMjk3LDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldApAQCAtMTMxNyw2ICsxMzMzLDcgQEAKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMzI3LDYgKzEzNDQsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEzNzgsNiArMTM5Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9bQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CkBAIC0xNTg4LDYgKzE2MDcsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTY2OCw3ICsxNjg4LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTc3MCw3ICsxNzg5LDcgQEAKIENPTkZJR19CSVRSRVZFUlNFPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD1tCi0jIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMTY9bQogQ09ORklHX0NSQ19UMTBESUY9bQogQ09ORklHX0NSQ19JVFVfVD1tCiBDT05GSUdfQ1JDMzI9eQpAQCAtMTc5Nyw2ICsxODE2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTgxNCw2ICsxODM0LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DSz15CkBAIC0xODM0LDExICsxODU1LDEzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CkBAIC0xODUyLDYgKzE4NzUsNyBAQAogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE4NjksNiArMTg5Myw3IEBACiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JJTkdfQlVGRkVSX0JFTkNITUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xODk5LDYgKzE5MjQsNyBAQAogIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWD15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNX1ZBTFVFPTEKQEAgLTE5MTMsNyArMTkzOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD1tCkBAIC0xOTU2LDExICsxOTgxLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9bQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUQ1PXkKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwppbmRleCAwYWE1YjQzLi5lZjVlZGM3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDgyNDhlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDYgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTYsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0xNTAsNiArMTUzLDcgQEAKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKIENPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0yMzMsNiArMjM3LDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNDYsNiArMjUxLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTQsNiArNDAwLDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMSw3ICs0MDgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDEzLDYgKzQxOSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjAwLDcgKzYwNyw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC02NDgsMTAgKzY1Nyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTczNiwxNSArNzQyLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03NjcsNiArNzc3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjgsNiArOTc5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05OTgsMTAgKzEwMTAsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTAyNCw2ICsxMDM4LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTA1Miw3ICsxMDY3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMDk0LDYgKzExMDgsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCmluZGV4IDJjMjkyZTIuLjczZWY5YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo0OSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDcgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NywxMSArNzksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExNSwyOCArMTE4LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjM0LDEwICsyMzgsMTAgQEAKIENPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NSw2ICsyNTksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMzNyw2ICszNDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2Niw2ICszNzIsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzczLDcgKzM4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM4Niw2ICszOTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTUyOSwxNiArNTM2LDE1IEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZFQz15CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQz15CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjExLDcgKzYxNyw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC02NzIsNiArNjc3LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNzMxLDcgKzczNyw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTgwMyw2ICs4MDgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgyMCw2ICs4MjYsNyBAQAogIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKQEAgLTgzNiwxMCArODQzLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKQEAgLTg2MSwxMCArODcwLDEwIEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IDQ1NjcxZTcuLjYzYzNlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjA4IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgzLDExICs4NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTMxLDIyICsxMzMsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NCwxMSArMTU1LDEzIEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwogIwotIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQpAQCAtMjU4LDYgKzI2MSw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNzUsNiArMjc5LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC00ODIsNiArNDg3LDcgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTUxMSw2ICs1MTcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNTE5LDcgKzUyNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUzMiw2ICs1MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDMsOSArNTUwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC03MTEsNiArNzE4LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC03NTAsMTEgKzc1OCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTc3Nyw2ICs3ODgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTgwNCw2ICs4MTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04NzAsNyArODgzLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC05MTgsMTAgKzkzMyw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTEwNDMsNiArMTA1NSw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtMTA5Nyw5ICsxMTEwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMTE3LDYgKzExMjcsMTEgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTE2Niw2ICsxMTgxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTE3Nyw5ICsxMTkzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTExOTgsNiArMTIxMiw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTEyMjcsNyArMTI0Myw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD1tCi0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTI3MSw2ICsxMjg2LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE1MDAsNiArMTUxNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNTY3LDcgKzE1ODQsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjgxLDYgKzE2OTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2OTgsNiArMTcxNSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzE2LDEwICsxNzM0LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE3NDIsNiArMTc2Miw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNzcxLDcgKzE3OTIsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE4MTMsMTEgKzE4MzMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKIENPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01ENT15CiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCmluZGV4IDMwYjY4YmYuLjUyMGIwNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzUKLSMgRnJpIEF1ZyAgNyAwODoxOToxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MDkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODQsMTEgKzg1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMjMsMjggKzEyNSwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDcsNiArMjUwLDcgQEAKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfRkxBVE1FTT15CkBAIC0yNjAsNiArMjY0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zOTAsNiArMzk1LDcgQEAKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Nyw3ICs0MDMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIApAQCAtNDA5LDYgKzQxNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNjA4LDcgKzYxNCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNjE2LDEwICs2MjQsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY4NSw2ICs2OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTc0MCw3ICs3NDYsNiBAQAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03NzEsMTUgKzc3NiwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzk5LDYgKzgwOCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTgwOSw2ICs4MTksNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwMjIsNiArMTAzMyw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwNTIsMTAgKzEwNjQsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTA3OSw2ICsxMDkzLDcgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMDksNyArMTEyNCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE1MSw2ICsxMTY1LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdzdXZkX2RlZmNvbmZpZwppbmRleCAxYWU4NWEzLi40M2MzYzRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ3N1dmRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nc3V2ZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzYsMTEgKzc4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTcsMjcgKzEyMCwyOCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTIzNywxMCArMjQxLDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNTgsNiArMjYyLDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC01NTMsMTYgKzU1OSwxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiAjIENPTkZJR19GU19FTkVUX0hBU19GRUMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfRU5FVF9NRElPX0ZFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjM1LDcgKzY0MCw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MDcsNiArNzExLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc3Niw3ICs3ODEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04NTEsNiArODU1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NjUsNiArODcwLDcgQEAKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODg3LDcgKzg5Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MTgsMTEgKzkyMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IGFhYTQ0MTYuLjUyM2Q1ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDI1ICsxLDI3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAtcmMyCi0jIE1vbiBBcHIgMjAgMTE6MDY6MjUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNAorIyBUaHUgT2N0IDE1IDEwOjMzOjIxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3Igc3VwcG9ydAogIwotQ09ORklHXzZ4eD15CitDT05GSUdfUFBDX0JPT0szU18zMj15CiAjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0JPT0szUz15CitDT05GSUdfNnh4PXkKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19XT1JEX1NJWkU9MzIKQEAgLTMwLDE1ICszMiwxNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CkBAIC01MywxMiArNTcsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVF9BUkNIPXkKIENPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfRFRDPXkKIENPTkZJR19ERUZBVUxUX1VJTUFHRT15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKICMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTc5LDExICs4NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC0xMDMsNyArMTEwLDYgQEAKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQpAQCAtMTE2LDYgKzEyMiwxMyBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CkBAIC0xMjQsMTQgKzEzNywxOSBAQAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CiBDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogIyBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTQ0LDcgKzE2Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0yMDUsNyArMjIzLDcgQEAKIENPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX1BQQ19CRVNUQ09NTV9BVEE9eQogQ09ORklHX1BQQ19CRVNUQ09NTV9GRUM9eQotIyBDT05GSUdfU0lNUExFX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NJTVBMRV9HUElPPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI5LDExICsyNDcsMTMgQEAKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI0OSw5ICsyNjksMTAgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQogQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0yNjUsNiArMjg2LDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX1NFQ0NPTVA9eQogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMzQ5LDYgKzM3MSw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzYzLDYgKzM4Niw3IEBACiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg4LDYgKzQxMiw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtMzk3LDkgKzQyMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNDU4LDYgKzQ4Myw3IEBACiAjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTE5LDcgQEAKIENPTkZJR19PRl9HUElPPXkKIENPTkZJR19PRl9JMkM9eQogQ09ORklHX09GX1NQST15CitDT05GSUdfT0ZfTURJTz15CiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWPXkKICMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldApAQCAtNTI5LDcgKzU1Niw5IEBACiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTUyLDEwICs1ODEsNiBAQAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTcyLDYgKzU5Nyw4IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU4MCw2ICs2MDcsNyBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldApAQCAtNTk5LDcgKzYyNyw2IEBACiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CkBAIC02MTEsMTEgKzYzOCwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYzNyw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2OTYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODQsMTQgKzcxNiwxNyBAQAogIwogCiAjCi0jIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03MzksMTYgKzc3NCwxNyBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiBDT05GSUdfRkVDX01QQzUyeHg9eQogQ09ORklHX0ZFQ19NUEM1Mnh4X01ESU89eQogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg1NCw2ICs4OTAsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09CSVQ9eQpAQCAtODgzLDYgKzkyMCw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CkBAIC05MTAsMTAgKzk0OCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTkzNSw2ICs5NjksMTEgQEAKICMKIENPTkZJR19TUElfU1BJREVWPW0KICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQpAQCAtOTU3LDE2ICs5OTYsMjcgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CkBAIC0xMDE5LDYgKzEwNjksOCBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTAzMSw5ICsxMDgzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC0xMDczLDMxICsxMTIzLDIwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkcml2ZXJzCi0jCi1DT05GSUdfREFCPXkKLSMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQogIyBDT05GSUdfRFJNX1RERlggaXMgbm90IHNldAogIyBDT05GSUdfRFJNX1IxMjggaXMgbm90IHNldApAQCAtMTE2Nyw2ICsxMjA2LDcgQEAKICMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT1tCisjIENPTkZJR19MQ0RfTE1TMjgzR0YwNSBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAogIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAogIyBDT05GSUdfTENEX1RETzI0TSBpcyBub3Qgc2V0CkBAIC0xMTk4LDcgKzEyMzgsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMTcsMTAgKzEyNTYsMTEgQEAKIENPTkZJR19ISURfQ0hFUlJZPXkKICMgQ09ORklHX0hJRF9DSElDT05ZIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQ1lQUkVTUz15Ci0jIENPTkZJR19EUkFHT05SSVNFX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9EUkFHT05SSVNFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTIzMSwxMCArMTI3MSwxMSBAQAogIyBDT05GSUdfSElEX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NPTlkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1NVTlBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9HUkVFTkFTSUEgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NNQVJUSk9ZUExVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAotIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMjYxLDE1ICsxMzAyLDE3IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DPXkKLUNPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QQ0k9eQogQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQz15CiBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPPXkKQEAgLTE0MDAsNiArMTQ0Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTQxMSw2ICsxNDU1LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTE0MzQsNiArMTQ3OSwxMCBAQAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCkBAIC0xNDUzLDEwICsxNTAyLDEzIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTUzMywxMiArMTU4NSwxMiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTE2MjQsNiArMTY3Niw3IEBACiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CitDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE2MzMsNiArMTY4Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNjUwLDEwICsxNzA0LDE0IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtMTY2NSwxMSArMTcyMywxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC0xNjc4LDIzICsxNzM3LDI1IEBACiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VWRU5UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtMTcxOSw3ICsxNzgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNzYxLDExICsxODIxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCBmMjM0MjhjLi5kOGIzNjRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjEwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtMTIzLDI4ICsxMjUsMjkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CiAKICMKICMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCkBAIC0yNDEsNiArMjQ0LDcgQEAKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1OCw2ICsyNjIsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM1MCw2ICszNTUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw2ICszODUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzg2LDcgKzM5Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTM5OSw2ICs0MDUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3OCw2ICs0ODUsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTUxNywxMSArNTI1LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTQzLDYgKzU1NCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTcwLDYgKzU4Miw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY2Niw5ICs2NzksMTEgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTcxNSwxMCArNzMwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODIyLDYgKzgzNCwxMSBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CkBAIC04MzYsOSArODUzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg2MSw2ICs4NzYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC04NzQsNyArODkwLDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTkzOSw2ICs5NTQsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtOTk3LDcgKzEwMTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTEwNjksNiArMTA4NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDg2LDYgKzExMDIsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTEwNyw3ICsxMTI0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExMzgsMTEgKzExNTQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCmluZGV4IDAyNzE2ZjcuLjAwZmFkODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjExIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiAjIENPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTksgaXMgbm90IHNldAogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQEAgLTgyLDExICs4MywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTE2LDI5ICsxMTgsMzAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMTUxLDYgKzE1NCw3IEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15CiBDT05GSUdfTEJEQUY9eQorQ09ORklHX0JMS19ERVZfQlNHPXkKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwpAQCAtMjM2LDYgKzI0MCw3IEBACiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX0ZMQVRNRU09eQpAQCAtMjQ5LDYgKzI1NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzk3LDYgKzQwMyw3IEBACiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDQsNyArNDExLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQxNiw2ICs0MjIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTQ3Nyw3ICs0ODQsNiBAQAogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLSMgQ09ORklHX01URF9TQkM4MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC02MDQsNyArNjEwLDkgQEAKICMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDPXkKQEAgLTY1MiwxMCArNjYwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA0LDYgKzcwOSw3IEBACiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC03MTQsNiArNzIwLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC03OTMsMTUgKzgwMCwxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI0LDYgKzgzNSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTAzMiw2ICsxMDQ0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDY3LDEwICsxMDgwLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTEwOTMsNiArMTEwOCw3IEBACiAjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTExMjEsNyArMTEzNyw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2Myw2ICsxMTc4LDcgQEAKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4M3h4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCmluZGV4IDRhOTZjYjYuLjY0ZGZmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxMiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM1LDYgKzM1LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04NiwxMSArODcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTEyNywyMSArMTI5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTQ5LDYgKzE1MCw4IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjYzLDYgKzI2Niw3IEBACiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yODAsNiArMjg0LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDMsNyArMzQ4LDggQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQogIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKQEAgLTM1OCw3ICszNjQsNyBAQAogIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CiBDT05GSUdfU1lOX0NPT0tJRVM9eQogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9FU1A9eQogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CkBAIC0zNzcsNiArMzgzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDYsNiArNDEzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMyw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjYsNiArNDMzLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MzMsOSArNDQxLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfT0ZfUEFSVFM9eQpAQCAtNjA4LDYgKzYxNiw3IEBACiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NTYsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CRkFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02NzQsNiArNjg2LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzE0LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzc3LDcgKzc5MSw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldApAQCAtODAwLDcgKzgxNiw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC04MjgsMTAgKzg0Myw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTkzNSw2ICs5NDcsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTk5MCw5ICsxMDAzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDI1LDE0ICsxMDM1LDI0IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTEwODMsNiArMTEwMyw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwOTQsOSArMTExNSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTExMzUsNiArMTE1NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTExNDUsNiArMTE2NSw3IEBACiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KQEAgLTExNTgsNyArMTE3OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTE4MSw2ICsxMjAxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTIzMyw2ICsxMjU0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRkhDSV9IQ0QgaXMgbm90IHNldApAQCAtMTI5MSw2ICsxMzEzLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzgsNiArMTM2MSw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzk3LDcgKzE0MjEsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTE0LDYgKzE1MzcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyOSw2ICsxNTUzLDcgQEAKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKQEAgLTE1NTAsNyArMTU3NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xNTkxLDEzICsxNjE1LDE1IEBACiAjCiAjIEhhc2ggbW9kZXMKICMKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNjA1LDE2ICsxNjMxLDE2IEBACiAjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKK0NPTkZJR19DUllQVE9fU0hBMjU2PXkKK0NPTkZJR19DUllQVE9fU0hBNTEyPXkKICMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKIAogIwogIyBDaXBoZXJzCiAjCi0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKaW5kZXggZWU2YWNjNi4uYTEyZTdiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI1OjIwIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKQEAgLTM2LDYgKzM3LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArOTAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTM0LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1Niw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE4OSw2ICsxOTMsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsNyArMjExLDcgQEAKIENPTkZJR19NUEM4NXh4X1JEQj15CiBDT05GSUdfU09DUkFURVM9eQogQ09ORklHX0tTSTg1NjA9eQotIyBDT05GSUdfWEVTX01QQzg1eHggaXMgbm90IHNldAorQ09ORklHX1hFU19NUEM4NXh4PXkKIENPTkZJR19TVFhfR1AzPXkKIENPTkZJR19UUU04NTQwPXkKIENPTkZJR19UUU04NTQxPXkKQEAgLTI1OSwxMCArMjY0LDEwIEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4MCw2ICsyODUsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMwNyw3ICszMTMsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxNSw3ICszMjEsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDUsNyArMzUyLDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM2OSwxMiArMzc2LDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDExLDYgKzQxOCw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0MSw2ICs0NDksNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDgsNyArNDU3LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYxLDYgKzQ2OSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1NCw2ICs1NjMsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5MywxMSArNjAzLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2MzMsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NDcsNiArNjYxLDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzIzLDcgKzczOCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUwLDcgKzc2Nyw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03NzgsMTAgKzc5NCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc5OCw2ICs4MTEsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTg5OCw2ICs5MTIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU1LDkgKzk3MCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTkxLDE1ICsxMDAzLDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIwLDYgKzEwMzYsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMwLDYgKzEwNDcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDQ5LDYgKzEwNjcsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTIsNyArMTE3MSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzUsNiArMTE5Myw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMjcsNiArMTI0Niw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0MSw3ICsxMjYxLDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQyOSw2ICsxNDQ4LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0OTksNyArMTUxOSw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIwLDYgKzE2MzksNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MzcsNiArMTY1Nyw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU2LDEwICsxNjc3LDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODMsMTAgKzE3MDYsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNCw3ICsxNzM3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NTcsMTEgKzE3NzksMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc2OSwxNiArMTc5MywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCmluZGV4IGRiMDgyY2UuLmNkNzBiNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjI2OjAxIDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMjIsNiArMjIsNyBAQAogIyBDT05GSUdfUEhZU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BFPXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKICMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAogQ09ORklHX1NNUD15CkBAIC0zNyw2ICszOCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODksMTEgKzkxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMzIsMjIgKzEzNSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKQEAgLTE1NSw4ICsxNTcsMTAgQEAKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE5Miw2ICsxOTYsNyBAQAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX1BQQ19NU0lfQklUTUFQPXkKIAogIwogIyBQbGF0Zm9ybSBzdXBwb3J0CkBAIC0yMDYsOSArMjExLDEwIEBACiBDT05GSUdfTVBDODV4eF9NRFM9eQogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQorQ09ORklHX01QQzg1eHhfUkRCPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfS1NJODU2MD15Ci0jIENPTkZJR19YRVNfTVBDODV4eCBpcyBub3Qgc2V0CitDT05GSUdfWEVTX01QQzg1eHg9eQogQ09ORklHX1NUWF9HUDM9eQogQ09ORklHX1RRTTg1NDA9eQogQ09ORklHX1RRTTg1NDE9eQpAQCAtMjYxLDExICsyNjcsMTEgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiBDT05GSUdfSU9NTVVfSEVMUEVSPXkKIENPTkZJR19TV0lPVExCPXkKLUNPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI4Myw2ICsyODksNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTMxMCw3ICszMTcsNyBAQAogQ09ORklHX1BDSV9TWVNDQUxMPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NVUFBPUlRTX01TST15Ci0jIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTVNJPXkKICMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKQEAgLTMxOCw3ICszMjUsOCBAQAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfUkFQSURJTz15Ci0jIENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKK0NPTkZJR19SQVBJRElPPXkKK0NPTkZJR19SQVBJRElPX0RJU0NfVElNRU9VVD0zMAogCiAjCiAjIEFkdmFuY2VkIHNldHVwCkBAIC0zNDgsNyArMzU2LDcgQEAKICMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAogIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfS0VZPW0KK0NPTkZJR19ORVRfS0VZPXkKICMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTM3MiwxMiArMzgwLDEyIEBACiBDT05GSUdfQVJQRD15CiAjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX1RVTk5FTD15Ci0jIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQpAQCAtNDE0LDYgKzQyMiw3IEBACiAjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9ITUFDX01ENT15CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0NCw2ICs0NTMsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NTEsNyArNDYxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDY0LDYgKzQ3Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTU1Nyw2ICs1NjcsNyBAQAogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTU5NiwxMSArNjA3LDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX1NBVEFfQUhDST15CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYyMyw2ICs2MzcsNyBAQAogQ09ORklHX1BBVEFfQUxJPXkKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02NTAsNiArNjY1LDcgQEAKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzI2LDcgKzc0Miw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiBDT05GSUdfRlNfRU5FVF9IQVNfU0NDPXkKIENPTkZJR19GU19FTkVUX0hBU19GQ0M9eQpAQCAtNzUzLDcgKzc3MSw2IEBACiBDT05GSUdfRlNMX1BRX01ESU89eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX1VDQ19HRVRIPXkKLSMgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VR0VUSF9UWF9PTl9ERU1BTkQgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CkBAIC03ODEsMTAgKzc5OCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgwMSw2ICs4MTUsNyBAQAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUklPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKQEAgLTkwMSw2ICs5MTYsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtOTU4LDkgKzk3NCw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtOTk0LDE1ICsxMDA3LDE5IEBACiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMDIzLDYgKzEwNDAsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMDMzLDYgKzEwNTEsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMDUyLDYgKzEwNzEsNyBAQAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExNTUsNyArMTE3NSw2IEBACiBDT05GSUdfQUM5N19CVVM9eQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzgsNiArMTE5Nyw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzAsNiArMTI1MCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEU9eQpAQCAtMTI0NCw3ICsxMjY1LDYgQEAKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTQzMiw2ICsxNDUyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE1MDIsNyArMTUyMyw2IEBACiBDT05GSUdfVUZTX0ZTPW0KICMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNjIzLDYgKzE2NDMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2NDAsNiArMTY2MSw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjU5LDEwICsxNjgxLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2ODYsMTAgKzE3MTAsMTAgQEAKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RJU0FCTEVfV0VSUk9SIGlzIG5vdCBzZXQKIENPTkZJR19QUENfV0VSUk9SPXkKIENPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NApAQCAtMTcxNyw3ICsxNzQxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3NjAsMTEgKzE3ODMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTc3MiwxNiArMTc5NywxNiBAQAogIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19TSEExPW0KLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9eQorQ09ORklHX0NSWVBUT19TSEEyNTY9eQorQ09ORklHX0NSWVBUT19TSEE1MTI9eQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogCiAjCiAjIENpcGhlcnMKICMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCA2ODA5YjYxLi40MGQ2ZjA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMTo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTUgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0xNiw2ICsxNiw3IEBACiAjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKIENPTkZJR184eHg9eQogQ09ORklHX1BQQ19NTVVfTk9IQVNIPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSF8zMj15CiAjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQogQ09ORklHX1BQQzMyPXkKQEAgLTI5LDYgKzMwLDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC03NiwxMSArNzgsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTExMywyOCArMTE2LDI5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQogCiAjCiAjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwpAQCAtMjMzLDEwICsyMzcsMTAgQEAKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CiAjIENPTkZJR19JT01NVV9IRUxQRVIgaXMgbm90IHNldAogIyBDT05GSUdfU1dJT1RMQiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI1NCw2ICsyNTgsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM0MCw2ICszNDUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2OSw2ICszNzUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzc2LDcgKzM4Myw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2Nyw2ICs0NzMsOCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogQ09ORklHX0ZTX0VORVRfSEFTX1NDQz15CiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDPXkKQEAgLTQ3NiwxMCArNDg0LDcgQEAKICMgQ09ORklHX0dJQU5GQVIgaXMgbm90IHNldAogIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC01MjAsNiArNTI1LDcgQEAKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CkBAIC01MzAsNiArNTM2LDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CkBAIC01OTUsNiArNjAyLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTYwNSw5ICs2MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjQxLDcgKzY1MSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03MDUsNiArNzE0LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTc2Myw3ICs3NzMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MzYsNiArODQ1LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4NjEsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtODcxLDcgKzg4Miw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MDIsMTEgKzkxMiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IDBlODY4NGEuLjViM2FiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMxOjU4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNiAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04OCwxMSArODksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEzMSwyMiArMTMzLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQpAQCAtMTU0LDcgKzE1NSw5IEBACiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19VU0VfR0VORVJJQ19TTVBfSEVMUEVSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI1MywxMyArMjU2LDEzIEBACiBDT05GSUdfQklORk1UX01JU0M9bQogQ09ORklHX0lPTU1VX0hFTFBFUj15CiBDT05GSUdfU1dJT1RMQj15Ci1DT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFfQUxMX0NQVVMgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI3Nyw2ICsyODAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwNiw2ICs0MTAsNyBAQAogIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAogQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MzYsNiArNDQxLDcgQEAKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQzLDcgKzQ0OSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ1Niw2ICs0NjEsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01NDksNiArNTU1LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC01ODgsMTEgKzU5NSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTUsNiArNjI1LDcgQEAKIENPTkZJR19QQVRBX0FMST15CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjQyLDYgKzY1Myw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcxOCw3ICs3MzAsOSBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKICMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKQEAgLTc2NiwxMCArNzgwLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODgzLDYgKzg5NCw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05MzgsOSArOTUwLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC05NzQsMTUgKzk4MywxOSBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAwMyw2ICsxMDE2LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtMTAxMyw2ICsxMDI3LDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQpAQCAtMTAzMiw2ICsxMDQ3LDcgQEAKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC0xMTM1LDcgKzExNTEsNiBAQAogQ09ORklHX0FDOTdfQlVTPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTU4LDYgKzExNzMsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjEwLDYgKzEyMjYsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKQEAgLTEzODksNiArMTQwNiw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDU5LDcgKzE0NzcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTU3Nyw2ICsxNTk0LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE1OTQsNiArMTYxMiw3IEBACiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNjEzLDEwICsxNjMyLDEyIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKQEAgLTE2MzksMTAgKzE2NjAsMTAgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldAogQ09ORklHX1BQQ19XRVJST1I9eQogQ09ORklHX1BSSU5UX1NUQUNLX0RFUFRIPTY0CkBAIC0xNjY5LDcgKzE2OTAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE3MTEsMTEgKzE3MzEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4ODVfYWRzX2RlZmNvbmZpZwppbmRleCBkYmU4ZTg2OS4uMWRhMzQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM0Ci0jIFdlZCBKdWwgMjkgMjM6MzE6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBUaHUgTm92ICA1IDA4OjIwOjE3IDIwMDkKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIApAQCAtMTYsNiArMTYsNyBAQAogIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CiBDT05GSUdfOHh4PXkKIENPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfMzI9eQogIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFPXkKIENPTkZJR19QUEMzMj15CkBAIC0yOSw2ICszMCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtNzcsMTEgKzc5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTUsMjggKzExOCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0MSwxMCArMjQ1LDEwIEBACiBDT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MzIKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CkBAIC0yNjIsNiArMjY2LDcgQEAKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19QUENfNEtfUEFHRVM9eQogIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CkBAIC0zNDQsNiArMzQ5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNzMsNiArMzc5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM4MCw3ICszODcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC0zOTMsNiArMzk5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NDAsMTYgKzU0NywxNSBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfRU1BQ0xJVEUgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX0hBU19GRUM9eQogQ09ORklHX0ZTX0VORVRfTURJT19GRUM9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYyMiw3ICs2MjgsNiBAQAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjgzLDYgKzY4OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTc0Miw3ICs3NDgsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC04MTQsNiArODE5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04MzEsNiArODM3LDcgQEAKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CkBAIC04NDcsMTAgKzg1NCwxMiBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CkBAIC04NzIsMTAgKzg4MSwxMCBAQAogIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1dFUlJPUj15CiBDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCmluZGV4IDRmODY4MWMuLjIwYmEwY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZwpAQCAtMSw0OSArMSw1OCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI2LXJjMwotIyBUdWUgTWF5IDI3IDE2OjA4OjA2IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzMKKyMgVHVlIE9jdCAgNiAxMDoyNzoxOCAyMDA5CiAjCiBDT05GSUdfUFBDNjQ9eQogCiAjCiAjIFByb2Nlc3NvciBzdXBwb3J0CiAjCitDT05GSUdfUFBDX0JPT0szU182ND15CisjIENPTkZJR19QUENfQk9PSzNFXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfQk9PSzNTPXkKIENPTkZJR19QT1dFUjRfT05MWT15CiBDT05GSUdfUE9XRVI0PXkKICMgQ09ORklHX1RVTkVfQ0VMTCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CisjIENPTkZJR19WU1ggaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19QUENfU1REX01NVV82ND15CiBDT05GSUdfUFBDX01NX1NMSUNFUz15CiAjIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfSEFWRV9QTVVfU1VQUE9SVD15CitDT05GSUdfUFBDX1BFUkZfQ1RSUz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKIENPTkZJR182NEJJVD15CiBDT05GSUdfV09SRF9TSVpFPTY0Ci1DT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBPXkKK0NPTkZJR19ORUVEX1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQogQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQogQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2ND15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVI9eQogQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX09GPXkKQEAgLTUxLDExICs2MCwxNCBAQAogIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19EVEM9eQogIyBDT05GSUdfREVGQVVMVF9VSU1BR0UgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19PRl9QTEFURk9STV9QQ0kgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC03MiwxMCArODQsMjAgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC04NCwxMyArMTA2LDE3IEBACiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTk4LDMyICsxMjQsNTIgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VQT0lOVFM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTMxLDExICsxNzcsMTAgQEAKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNT0QgaXMgbm90IHNldAogQ09ORklHX1NUT1BfTUFDSElORT15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0tfQ09NUEFUPXkKIAogIwpAQCAtMTUwLDE5ICsxOTUsMTQgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX01TSV9CSVRNQVA9eQogCiAjCiAjIFBsYXRmb3JtIHN1cHBvcnQKICMKLUNPTkZJR19QUENfTVVMVElQTEFURk9STT15Ci0jIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSVNFUklFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyeCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfTVBDNTEyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfTUFQTEUgaXMgbm90IHNldAogQ09ORklHX1BQQ19QQVNFTUk9eQpAQCAtMTc4LDggKzIxOCwxMCBAQAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0VMTEVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX1FQQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX05BVElWRT15CitDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORT15CiAjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKIENPTkZJR19NUElDPXkKICMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldApAQCAtMjEzLDYgKzI1NSw3IEBACiAjCiBDT05GSUdfUFBDX1BBU0VNSV9DUFVGUkVRPXkKICMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMjI2LDE2ICsyNjksMTkgQEAKICMgQ09ORklHX0haXzMwMCBpcyBub3Qgc2V0CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAotIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9IUlRJQ0s9eQogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19DT01QQVRfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFPXkKIENPTkZJR19JT01NVV9WTUVSR0U9eQogQ09ORklHX0lPTU1VX0hFTFBFUj15CisjIENPTkZJR19TV0lPVExCIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQpAQCAtMjQzLDYgKzI4OSw3IEBACiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUV9BTExfQ1BVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19OVU1BIGlzIG5vdCBzZXQKK0NPTkZJR19NQVhfQUNUSVZFX1JFR0lPTlM9MjU2CiBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX1NQQVJTRU1FTV9FTkFCTEU9eQpAQCAtMjUzLDIwICszMDAsMjggQEAKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRT15CiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci1DT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKIENPTkZJR19aT05FX0RNQV9GTEFHPTEKIENPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDX0hBU19IQVNIXzY0Sz15CisjIENPTkZJR19QUENfNEtfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzY0S19QQUdFUz15CisjIENPTkZJR19QUENfMjU2S19QQUdFUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj05CiAjIENPTkZJR19QUENfU1VCUEFHRV9QUk9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgogIyBDT05GSUdfUE0gaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQpAQCAtMjg1LDYgKzM0MCw4IEBACiBDT05GSUdfUENJX01TST15CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKIENPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1BDTUNJQT15CkBAIC0zMDEsMTMgKzM1OCwxMCBAQAogQ09ORklHX0VMRUNUUkFfQ0Y9eQogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVMT0NBVEFCTEUgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAwMDAwMDAwMAogQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwMDAwMDAwMDAKIENPTkZJR19QSFlTSUNBTF9TVEFSVD0weDAwMDAwMDAwCi0KLSMKLSMgTmV0d29ya2luZwotIwogQ09ORklHX05FVD15CiAKICMKQEAgLTM1Niw5ICs0MTAsMTEgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAogIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xMQzIgaXMgbm90IHNldApAQCAtMzY4LDI1ICs0MjQsMzIgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKKyMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAKICMKLSMgV2lyZWxlc3MKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5OCwxNSArNDYxLDE5IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogIyBDT05GSUdfTVREX1BBUlRJVElPTlMgaXMgbm90IHNldAogCkBAIC00NzgsMTEgKzU0NSwxNyBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CiBDT05GSUdfT0ZfREVWSUNFPXkKIENPTkZJR19PRl9JMkM9eQorQ09ORklHX09GX01ESU89eQogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKQEAgLTUwMSwyOSArNTc0LDQxIEBACiAjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NX0xFR0FDWT15CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfQ0I3MTBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15Ci1DT05GSUdfQkxLX0RFVl9JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CiBDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFU0NTST15CiBDT05GSUdfSURFX1RBU0tfSU9DVEw9eQogQ09ORklHX0lERV9QUk9DX0ZTPXkKIApAQCAtNTQyLDE0ICs2MjcsMTMgQEAKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9DWTgyQzY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0NTNTUzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0hQVDM0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hQVDM2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0pNSUNST04gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjEzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CkBAIC01NjMsOCArNjQ3LDYgQEAKICMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRF9PTkxZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKQEAgLTU4NiwxMCArNjY4LDYgQEAKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9eQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwogQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKQEAgLTYwNiw2ICs2ODQsOCBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTYxNCwxMSArNjk0LDE2IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CkBAIC02MjYsNyArNzExLDYgQEAKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKQEAgLTYzNywxMCArNzIxLDE0IEBACiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUwyND15CkBAIC02NjIsNiArNzUwLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02OTAsNiArNzc5LDcgQEAKIENPTkZJR19QQVRBX1BDTUNJQT15CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldApAQCAtNzAzLDEyICs3OTMsMTUgQEAKICMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD15CitDT05GSUdfTURfQVVUT0RFVEVDVD15CiBDT05GSUdfTURfTElORUFSPXkKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD15CiBDT05GSUdfTURfUkFJRDQ1Nj15Ci1DT05GSUdfTURfUkFJRDVfUkVTSEFQRT15CisjIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NiBpcyBub3Qgc2V0CitDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0RNPXkKQEAgLTcyNSwxMiArODE4LDE5IEBACiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKICMKKworIworIyBZb3UgY2FuIGVuYWJsZSBvbmUgb3IgYm90aCBGaXJlV2lyZSBkcml2ZXIgc3RhY2tzLgorIworCisjCisjIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMKICMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZJQ0VTX01VTFRJUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZPXkKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NTMsNiArODUzLDkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNzYxLDE5ICs4NjQsMjMgQEAKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfUENJPXkKICMgQ09ORklHX1BDTkVUMzIgaXMgbm90IHNldAogIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldApAQCAtNzgzLDE5ICs4OTAsMjIgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogQ09ORklHX0UxMDAwPXkKLUNPTkZJR19FMTAwMF9OQVBJPXkKLSMgQ09ORklHX0UxMDAwX0RJU0FCTEVfUEFDS0VUX1NQTElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldApAQCAtODA2LDMwICs5MTYsNDAgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiBDT05GSUdfVElHT04zPXkKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAorIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAorIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfVlhHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX05JVSBpcyBub3Qgc2V0CiBDT05GSUdfUEFTRU1JX01BQz15CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODc0LDE3ICs5OTQsMjMgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC05MDAsNiArMTAyNiw3IEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CkBAIC05MjYsMTAgKzEwNTMsMTMgQEAKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD00CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NX1BBU0VNST15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC05NDgsNTcgKzEwNzgsODUgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPQklUPXkKIAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIwogIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BBU0VNST15Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QQVNFTUk9eQorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIwogIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiBDT05GSUdfSFdNT05fVklEPXkKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKQEAgLTEwMDYsMTQgKzExNjQsMTcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC0xMDI4LDEwICsxMTg5LDE0IEBACiBDT05GSUdfU0VOU09SU19MTTkwPXkKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtMTAzOSw2ICsxMjA0LDggQEAKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTEwNTAsNDQgKzEyMTcsNDAgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKIENPTkZJR19EUk09eQorQ09ORklHX0RSTV9LTVNfSEVMUEVSPXkKK0NPTkZJR19EUk1fVFRNPXkKICMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RSTV9SMTI4IGlzIG5vdCBzZXQKIENPTkZJR19EUk1fUkFERU9OPXkKQEAgLTEwOTksNiArMTI2Miw3IEBACiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQpAQCAtMTE0MCw2ICsxMzA0LDcgQEAKICMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDEyICsxMzEzLDE2IEBACiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JQk1fR1hUNDUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DT1JHSSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTExNzcsMTUgKzEzNDYsOSBAQAogQ09ORklHX0xPR09fTElOVVhfTU9OTz15CiBDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLQotIwotIyBTb3VuZAotIwogQ09ORklHX1NPVU5EPXkKLQotIwotIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKLSMKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKQEAgLTExOTgsMjQgKzEzNjEsMjQgQEAKIENPTkZJR19TTkRfUENNX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX1JBV01JRElfU0VRPXkKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgZGV2aWNlcwotIworQ09ORklHX1NORF9QQ0k9eQogIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKQEAgLTEyMzQsNiArMTM5Nyw3IEBACiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1RYRkkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CkBAIC0xMjQ2LDYgKzE0MTAsOCBAQAogIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldApAQCAtMTI2Miw2ICsxNDI4LDcgQEAKICMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAogIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKQEAgLTEyNzcsNTcgKzE0NDQsNjQgQEAKICMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgQUxTQSBQb3dlck1hYyBkZXZpY2VzCi0jCi0KLSMKLSMgQUxTQSBQb3dlclBDIGRldmljZXMKLSMKLQotIwotIyBVU0IgZGV2aWNlcwotIworQ09ORklHX1NORF9QUEM9eQorQ09ORklHX1NORF9VU0I9eQogQ09ORklHX1NORF9VU0JfQVVESU89eQogQ09ORklHX1NORF9VU0JfVVNYMlk9eQogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0Ci0KLSMKLSMgUENNQ0lBIGRldmljZXMKLSMKK0NPTkZJR19TTkRfUENNQ0lBPXkKICMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLQotIwotIyBTeXN0ZW0gb24gQ2hpcCBhdWRpbyBzdXBwb3J0Ci0jCiAjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIFNvQyBhdWRpbyBmb3IgRnJlZXNjYWxlIFNPQ3MKLSMKLQotIwotIyBTb0MgQXVkaW8gZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQCi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbnB1dCBEZXZpY2VzCiAjCiBDT05GSUdfVVNCX0hJRD15Ci0jIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CkBAIC0xMzQzLDE4ICsxNTE3LDI2IEBACiAjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC0xMzYzLDYgKzE1NDUsOCBAQAogQ09ORklHX1VTQl9TTDgxMV9IQ0Q9eQogIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKQEAgLTEzNzAsMjAgKzE1NTQsMjAgQEAKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTM5OSw3ICsxNTgzLDYgQEAKICMKICMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogCiAjCiAjIFVTQiBwb3J0IGRyaXZlcnMKQEAgLTE0MTIsNyArMTU5NSw3IEBACiAjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKQEAgLTE0MjAsNyArMTYwMyw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTQyOSw3ICsxNjExLDE1IEBACiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xNDQzLDYgKzE2MzMsNyBAQAogIyBDT05GSUdfRURBQ19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19FREFDX1BBU0VNST15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC0xNDcyLDYgKzE2NjMsOSBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDgxLDIxICsxNjc1LDMxIEBACiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCiAjCiAjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKIAogIwogIyBvbi1DUFUgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC0xNTA0LDExICsxNzA4LDEzIEBACiAjIENPTkZJR19FWFQyX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldApAQCAtMTUxNiw2ICsxNzIyLDEwIEBACiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNTI1LDYgKzE3MzUsMTEgQEAKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwogIwogQ09ORklHX0lTTzk2NjBfRlM9eQpAQCAtMTU0OSwxNiArMTc2NCwxNCBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQogQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTE1NzgsOCArMTc5MSwxMCBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldApAQCAtMTU5MCwxOCArMTgwNSwxNyBAQAogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQotQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTE2NzIsMjUgKzE4ODYsMzAgQEAKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAogIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKIAogIwogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogQ09ORklHX0NSQ19DQ0lUVD15CiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKIENPTkZJR19DUkNfSVRVX1Q9eQogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAotQ09ORklHX0xJQkNSQzMyQz1tCisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CiBDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CiAKICMKICMgS2VybmVsIGhhY2tpbmcKQEAgLTE3MDAsMTggKzE5MTksMjUgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xNzIxLDI2ICsxOTQ3LDcxIEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX0RFQlVHX1BBR0VBTExPQyBpcyBub3Qgc2V0CitDT05GSUdfTk9QX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfRVZFTlRfVFJBQ0lORz15CitDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKK0NPTkZJR19UUkFDSU5HPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKICMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR0dFUj15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19YTU9OX0RJU0FTU0VNQkxZPXkKK0NPTkZJR19ERUJVR0dFUj15CiAjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTE3NDksMjMgKzIwMjAsMzQgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfWE9SX0JMT0NLUz15CiBDT05GSUdfQVNZTkNfQ09SRT15CiBDT05GSUdfQVNZTkNfTUVNQ1BZPXkKIENPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CiBDT05GSUdfQ1JZUFRPPXkKIAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQ9eQorQ09ORklHX0NSWVBUT19BRUFEMj15CiBDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE3OTMsMTQgKzIwNzUsMjAgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01END15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX1NIQTE9eQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQpAQCAtMTgzMCw3ICsyMTE4LDEzIEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQogIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWY0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCkBAIC0wLDAgKzEsMjE5OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjNQorIyBGcmkgT2N0IDE2IDExOjM3OjE1IDIwMDkKKyMKK0NPTkZJR19QUEM2ND15CisKKyMKKyMgUHJvY2Vzc29yIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19CT09LM1NfNjQgaXMgbm90IHNldAorQ09ORklHX1BQQ19CT09LM0VfNjQ9eQorQ09ORklHX1BQQ19CT09LM0U9eQorQ09ORklHX1BQQ19GUFU9eQorQ09ORklHX0JPT0tFPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CitDT05GSUdfUFBDX01NVV9OT0hBU0hfNjQ9eQorQ09ORklHX1BQQ19CT09LM0VfTU1VPXkKKyMgQ09ORklHX1BQQ19NTV9TTElDRVMgaXMgbm90IHNldAorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQorQ09ORklHX1BQQ19IQVZFX1BNVV9TVVBQT1JUPXkKK0NPTkZJR19QUENfUEVSRl9DVFJTPXkKK0NPTkZJR19TTVA9eQorQ09ORklHX05SX0NQVVM9MzIKK0NPTkZJR182NEJJVD15CitDT05GSUdfV09SRF9TSVpFPTY0CitDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82NEJJVD15CitDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfVElNRV9WU1lTQ0FMTD15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CitDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfQ09NUEFUPXkKK0NPTkZJR19TWVNWSVBDX0NPTVBBVD15CitDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CisjIENPTkZJR19QUENfVURCR18xNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RCU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RUQz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX09GX1BMQVRGT1JNX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0M9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfUE9TSVhfTVFVRVVFX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CisjIENPTkZJR19UQVNLX1hBQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9NjQKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfQ0dST1VQUz15CisjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9GUkVFWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUF9ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0NQVVNFVFM9eQorQ09ORklHX1BST0NfUElEX0NQVVNFVD15CisjIENPTkZJR19DR1JPVVBfQ1BVQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNPVVJDRV9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BFUkZfVVNFX1ZNQUxMT0MgaXMgbm90IHNldAorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKK0NPTkZJR19PUFJPRklMRT15CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlM9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CitDT05GSUdfSEFWRV9ETUFfQVRUUlM9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKK0NPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX1NMT1dfV09SSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0tfQ09NUEFUPXkKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFEyQURTIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FPXkKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CisjIENPTkZJR19VM19EQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CitDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBkcml2ZXJzCisjCisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9FTEY9eQorQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9bQorQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfSU9NTVVfSEVMUEVSPXkKKyMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CisjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfQUxMX0NQVVM9eQorIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTI1NgorQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUD15CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CisjIENPTkZJR19GTEFUTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VNRU1fTUFOVUFMPXkKK0NPTkZJR19TUEFSU0VNRU09eQorQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQorQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKK0NPTkZJR19TUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEU9eQorQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQPXkKKyMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CisjIENPTkZJR19QUENfSEFTX0hBU0hfNjRLIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ18yNTZLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCisjIENPTkZJR19TQ0hFRF9TTVQgaXMgbm90IHNldAorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX1RBUkdFVFM9IiIKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKK0NPTkZJR19JU0FfRE1BX0FQST15CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CitDT05GSUdfUENJX01TST15CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKKyMgQ09ORklHX1lFTlRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BENjcyOSBpcyBub3Qgc2V0CisjIENPTkZJR19JODIwOTIgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUdfUENJPW0KKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTE9DQVRBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weGMwMDAwMDAwMDAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMDAwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX05FVD15CitDT05GSUdfQ09NUEFUX05FVExJTktfTUVTU0FHRVM9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19YRlJNX0lQQ09NUD1tCitDT05GSUdfTkVUX0tFWT1tCisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorQ09ORklHX05FVF9JUElQPXkKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorQ09ORklHX0lORVRfQUg9bQorQ09ORklHX0lORVRfRVNQPW0KK0NPTkZJR19JTkVUX0lQQ09NUD1tCitDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKK0NPTkZJR19JTkVUX0xSTz15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DVF9BQ0NUPXkKK0NPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CitDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUz15CisjIENPTkZJR19ORl9DVF9QUk9UT19EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19ORl9DVF9QUk9UT19HUkU9bQorQ09ORklHX05GX0NUX1BST1RPX1NDVFA9bQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fVURQTElURSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX0FNQU5EQT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0ZUUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0gzMjM9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQorQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCisjIENPTkZJR19ORl9DT05OVFJBQ0tfU0FORSBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVD1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFk9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE9QVFNUUklQPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5CWVRFUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0U9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9OQVRfRlRQPW0KK0NPTkZJR19ORl9OQVRfSVJDPW0KK0NPTkZJR19ORl9OQVRfVEZUUD1tCitDT05GSUdfTkZfTkFUX0FNQU5EQT1tCitDT05GSUdfTkZfTkFUX1BQVFA9bQorQ09ORklHX05GX05BVF9IMzIzPW0KK0NPTkZJR19ORl9OQVRfU0lQPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPXkKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19ST1VURT15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19PRl9ERVZJQ0U9eQorQ09ORklHX09GX0kyQz15CitDT05GSUdfT0ZfTURJTz15CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKK0NPTkZJR19CTEtfREVWX0ZEPXkKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKK0NPTkZJR19JREU9eQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKK0NPTkZJR19JREVfVElNSU5HUz15CitDT05GSUdfSURFX0FUQVBJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0lERV9HRD15CitDT05GSUdfSURFX0dEX0FUQT15CisjIENPTkZJR19JREVfR0RfQVRBUEkgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RFTEtJTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QUk9DX0ZTPXkKKworIworIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCisjCisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9TRkY9eQorCisjCisjIFBDSSBJREUgY2hpcHNldHMgc3VwcG9ydAorIworQ09ORklHX0JMS19ERVZfSURFUENJPXkKK0NPTkZJR19JREVQQ0lfUENJQlVTX09SREVSPXkKKyMgQ09ORklHX0JMS19ERVZfT0ZGQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfR0VORVJJQz15CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1BDST15CisjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0FNRDc0WFg9eQorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TSUlNQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0w4MkMxMDUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RDODZDMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTkVUTElOSz15CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorQ09ORklHX0NIUl9ERVZfU1Q9eQorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CitDT05GSUdfU0NTSV9GQ19BVFRSUz15CitDT05GSUdfU0NTSV9JU0NTSV9BVFRSUz1tCisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1JQX0FUVFJTPXkKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01WU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKK0NPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQorQ09ORklHX1NDU0lfSVBSPXkKK0NPTkZJR19TQ1NJX0lQUl9UUkFDRT15CitDT05GSUdfU0NTSV9JUFJfRFVNUD15CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xQRkM9bQorIyBDT05GSUdfU0NTSV9MUEZDX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKKyMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9TSUwyND15CitDT05GSUdfQVRBX1NGRj15CitDT05GSUdfU0FUQV9TVlc9eQorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BDTUNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9eQorQ09ORklHX01EX0FVVE9ERVRFQ1Q9eQorQ09ORklHX01EX0xJTkVBUj15CitDT05GSUdfTURfUkFJRDA9eQorQ09ORklHX01EX1JBSUQxPXkKK0NPTkZJR19NRF9SQUlEMTA9eQorQ09ORklHX01EX1JBSUQ0NTY9eQorIyBDT05GSUdfTVVMVElDT1JFX1JBSUQ0NTYgaXMgbm90IHNldAorQ09ORklHX01EX1JBSUQ2X1BRPXkKKyMgQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1QgaXMgbm90IHNldAorQ09ORklHX01EX01VTFRJUEFUSD1tCitDT05GSUdfTURfRkFVTFRZPW0KK0NPTkZJR19CTEtfREVWX0RNPXkKKyMgQ09ORklHX0RNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9DUllQVD1tCitDT05GSUdfRE1fU05BUFNIT1Q9bQorQ09ORklHX0RNX01JUlJPUj1tCisjIENPTkZJR19ETV9MT0dfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19ETV9aRVJPPW0KK0NPTkZJR19ETV9NVUxUSVBBVEg9bQorIyBDT05GSUdfRE1fTVVMVElQQVRIX1FMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNX01VTFRJUEFUSF9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ETV9VRVZFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTEzOTQ9eQorQ09ORklHX0lFRUUxMzk0X09IQ0kxMzk0PXkKKyMgQ09ORklHX0lFRUUxMzk0X1BDSUxZTlggaXMgbm90IHNldAorQ09ORklHX0lFRUUxMzk0X1NCUDI9bQorQ09ORklHX0lFRUUxMzk0X0VUSDEzOTRfUk9NX0VOVFJZPXkKK0NPTkZJR19JRUVFMTM5NF9FVEgxMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9SQVdJTz15CitDT05GSUdfSUVFRTEzOTRfVklERU8xMzk0PW0KK0NPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQorIyBDT05GSUdfSUVFRTEzOTRfVkVSQk9TRURFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CitDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlM9eQorIyBDT05GSUdfTUFDX0VNVU1PVVNFQlROIGlzIG5vdCBzZXQKK0NPTkZJR19XSU5ERkFSTT15CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPW0KKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CitDT05GSUdfU1VOR0VNPXkKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CitDT05GSUdfUENORVQzMj15CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorQ09ORklHX0UxMDA9eQorIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CitDT05GSUdfQUNFTklDPXkKK0NPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKKyMgQ09ORklHX0RMMksgaXMgbm90IHNldAorQ09ORklHX0UxMDAwPXkKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQlZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorQ09ORklHX1RJR09OMz15CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDAwPXkKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAorQ09ORklHX0NIRUxTSU9fVDNfREVQRU5EUz15CisjIENPTkZJR19DSEVMU0lPX1QzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfSVhHQkUgaXMgbm90IHNldAorQ09ORklHX0lYR0I9bQorIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFhFTl9OSUMgaXMgbm90IHNldAorIyBDT05GSUdfTklVIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAorQ09ORklHX1RSPXkKK0NPTkZJR19JQk1PTD15CisjIENPTkZJR18zQzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19UTVMzODBUUiBpcyBub3Qgc2V0CitDT05GSUdfV0xBTj15CisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRDT05TT0xFPXkKKyMgQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUUE9MTD15CitDT05GSUdfTkVUUE9MTF9UUkFQPXkKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9bQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU1lOQVBUSUNTX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMiBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ1MgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSFZDX1VEQkcgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9eQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX0hBTkdDSEVDS19USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorQ09ORklHX0kyQ19BTEdPQklUPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0FNRDgxMTE9eQorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0REQz15CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUFDTU9ERVM9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CitDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKK0NPTkZJR19GQl9USUxFQkxJVFRJTkc9eQorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRkJfT0Y9eQorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorQ09ORklHX0ZCX01BVFJPWD15CitDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CitDT05GSUdfRkJfTUFUUk9YX01ZU1RJUVVFPXkKK0NPTkZJR19GQl9NQVRST1hfRz15CitDT05GSUdfRkJfTUFUUk9YX0kyQz1tCitDT05GSUdfRkJfTUFUUk9YX01BVkVOPW0KK0NPTkZJR19GQl9SQURFT049eQorQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQorIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9JQk1fR1hUNDUwMD15CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQorQ09ORklHX1NPVU5EPW0KK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KK0NPTkZJR19TTkRfU0VRVUVOQ0VSPW0KK0NPTkZJR19TTkRfU0VRX0RVTU1ZPW0KK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJNSURJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENJPXkKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NUWEZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9GTTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERBX0lOVEVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSElGSUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JQ0UxNzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTlRFTDhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTFg2NDY0RVMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01BRVNUUk8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhBUlQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX05NMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ1hIUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUklQVElERSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT05JQ1ZJQkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSUE4MlhYX01PREVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WSVJUVU9TTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BQQz15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVVNYMlkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX1BDTUNJQT15CisjIENPTkZJR19TTkRfVlhQT0NLRVQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BEQVVESU9DRiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9ISURERVY9eQorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWEhDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQorIyBDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQorIworCisjCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EPW0KKyMgQ09ORklHX0lORklOSUJBTkRfVVNFUl9NQUQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKK0NPTkZJR19JTkZJTklCQU5EX01USENBPW0KK0NPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9ORVMgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQorIyBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9DTSBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRz15CisjIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHX0RBVEEgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORF9TUlAgaXMgbm90IHNldAorQ09ORklHX0lORklOSUJBTkRfSVNFUj1tCitDT05GSUdfRURBQz15CisKKyMKKyMgUmVwb3J0aW5nIHN1YnN5c3RlbXMKKyMKKyMgQ09ORklHX0VEQUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0VEQUNfTU1fRURBQz15CisjIENPTkZJR19FREFDX0NQQzkyNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CitDT05GSUdfRVhUMl9GU19YSVA9eQorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CitDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRlNfWElQPXkKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQyPXkKKyMgQ09ORklHX0pCRDJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPXkKKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGU19GUz15CitDT05GSUdfSkZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZTX1NFQ1VSSVRZPXkKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19YRlNfRlM9bQorIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FVVE9GUzRfRlM9bQorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfSVNPOTY2MF9GUz15CisjIENPTkZJR19KT0xJRVQgaXMgbm90IHNldAorIyBDT05GSUdfWklTT0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSEZTX0ZTPW0KK0NPTkZJR19IRlNQTFVTX0ZTPW0KKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjJfQUNMPXkKK0NPTkZJR19ORlNEX1YzPXkKK0NPTkZJR19ORlNEX1YzX0FDTD15CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1NVTlJQQ19YUFJUX1JETUE9bQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CitDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT15CitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKK0NPTkZJR19CSU5BUllfUFJJTlRGPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorQ09ORklHX05MQVRUUj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTEFURU5DWVRPUD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0U9eQorQ09ORklHX1JJTkdfQlVGRkVSPXkKK0NPTkZJR19FVkVOVF9UUkFDSU5HPXkKK0NPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQorQ09ORklHX1RSQUNJTkc9eQorQ09ORklHX0dFTkVSSUNfVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19ESVNBQkxFX1dFUlJPUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX1dFUlJPUj15CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CisjIENPTkZJR19QUENfRU1VTEFURURfU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1Q9eQorQ09ORklHX0ZUUl9GSVhVUF9TRUxGVEVTVD15CitDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVD15CitDT05GSUdfWE1PTj15CisjIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX1hNT05fRElTQVNTRU1CTFk9eQorQ09ORklHX0RFQlVHR0VSPXkKK0NPTkZJR19JUlFTVEFDS1M9eQorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfWE9SX0JMT0NLUz15CitDT05GSUdfQVNZTkNfQ09SRT15CitDT05GSUdfQVNZTkNfTUVNQ1BZPXkKK0NPTkZJR19BU1lOQ19YT1I9eQorQ09ORklHX0FTWU5DX1BRPXkKK0NPTkZJR19BU1lOQ19SQUlENl9SRUNPVj15CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQ9bQorQ09ORklHX0NSWVBUT19BRUFEMj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj15CitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQorQ09ORklHX0NSWVBUT19IQVNIPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkc9bQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKK0NPTkZJR19DUllQVE9fQ0NNPW0KK0NPTkZJR19DUllQVE9fR0NNPW0KK0NPTkZJR19DUllQVE9fU0VRSVY9bQorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CitDT05GSUdfQ1JZUFRPX0NUUj1tCisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCitDT05GSUdfQ1JZUFRPX0dIQVNIPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89bQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGZmOTZiYjQuLmI3OTExMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNAotIyBXZWQgSnVsIDI5IDIzOjMyOjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMi1yYzUKKyMgVGh1IE5vdiAgNSAwODoyMDoxNyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM0LDYgKzM0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogIyBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEgaXMgbm90IHNldAorIyBDT05GSUdfTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC04MiwxMSArODMsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTEyMCwyOSArMTIyLDMwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQogQ09ORklHX1NMVUJfREVCVUc9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX0hBVkVfRE1BX0FUVFJTPXkKIENPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTE1NSw2ICsxNTgsNyBAQAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQogQ09ORklHX0xCREFGPXkKK0NPTkZJR19CTEtfREVWX0JTRz15CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKICMKQEAgLTIzOSw2ICsyNDMsNyBAQAogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19GTEFUTUVNPXkKQEAgLTI1Miw2ICsyNTcsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTQwMSw2ICs0MDcsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA4LDcgKzQxNSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogCkBAIC00MjAsNiArNDI2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODEsNyArNDg4LDYgQEAKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci0jIENPTkZJR19NVERfU0JDODI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIApAQCAtNjY0LDcgKzY3MCw5IEBACiAjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9FTUFDTElURSBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAogQ09ORklHX0ZTX0VORVRfSEFTX0ZDQz15CkBAIC03MTIsMTAgKzcyMCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTc2NCw2ICs3NjksNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldApAQCAtNzc0LDYgKzc4MCw3IEBACiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CiBDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQogIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldApAQCAtODU1LDE1ICs4NjIsMTkgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4Niw2ICs4OTcsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC05MDUsNyArOTE3LDYgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKQEAgLTkyMiw2ICs5MzMsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKQEAgLTk0MCw2ICs5NTIsNyBAQAogIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfRVRIPXkKIENPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC0xMTQ4LDYgKzExNjEsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExODMsMTAgKzExOTcsMTIgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpAQCAtMTIwOSw2ICsxMjI1LDcgQEAKICMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTIzNyw3ICsxMjU0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc5LDYgKzEyOTUsNyBAQAogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcnBtYzI4MDBfZGVmY29uZmlnCmluZGV4IDEyOTNjNDYuLmVmNTBjZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BycG1jMjgwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHJwbWMyODAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTggMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNiw2ICszNiw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODUsMTEgKzg2LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMzEsMjggKzEzMywyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0NCwxMiArMjQ3LDEyIEBACiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXSU9UTEIgaXMgbm90IHNldAotQ09ORklHX1BQQ19ORUVEX0RNQV9TWU5DX09QUz15CiBDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKIENPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX01BWF9BQ1RJVkVfUkVHSU9OUz0zMgogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTI2Nyw2ICsyNzAsNyBAQAogQ09ORklHX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogQ09ORklHX1BQQ180S19QQUdFUz15CiAjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKQEAgLTM2MCw2ICszNjQsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM4OSw2ICszOTQsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk2LDcgKzQwMiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQwOSw2ICs0MTQsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02MzMsNiArNjM5LDcgQEAKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJJU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC02NzIsMTEgKzY3OSwxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTY5OCw2ICs3MDgsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3MzYsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC04MjMsOSArODM1LDExIEBACiAjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQzkyMDMxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfWElMSU5YX0VNQUNMSVRFIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiAjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAogIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CkBAIC04NzEsMTAgKzg4NSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTk3Nyw2ICs5ODgsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTEwMzEsOSArMTA0Myw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtMTA1MSw2ICsxMDYwLDExIEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKQEAgLTExMDAsNiArMTExNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKQEAgLTExMTEsOSArMTEyNiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC0xMTMyLDYgKzExNDUsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC0xMTQyLDYgKzExNTYsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiAjIENPTkZJR19BR1AgaXMgbm90IHNldAorQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CkBAIC0xMTYyLDcgKzExNzcsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODYsNiArMTIwMCw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKIENPTkZJR19ISURfS1lFPXkKIENPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKIENPTkZJR19ISURfS0VOU0lOR1RPTj15CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEyMzksNiArMTI1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFIGlzIG5vdCBzZXQKQEAgLTE0MDQsNiArMTQyMCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDYzLDcgKzE0ODAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTE1NzYsNiArMTU5Miw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNTkzLDYgKzE2MTAsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTYxNCw3ICsxNjMyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTE2NDUsMTEgKzE2NjIsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCAyODM4NGRjLi41MjQyNjMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzQKLSMgV2VkIEp1bCAyOSAyMzozMjowMSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFRodSBOb3YgIDUgMDg6MjA6MTkgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC0zNCw2ICszNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKICMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FRURfUEVSX0NQVV9FTUJFRF9GSVJTVF9DSFVOSyBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtODIsMTEgKzgzLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC0xMTgsMjggKzEyMCwyOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKK0NPTkZJR19IQVZFX0RNQV9BVFRSUz15CitDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKIAogIwogIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKQEAgLTI0Myw2ICsyNDYsNyBAQAogQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TPTMyCiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMjYwLDYgKzI2NCw3IEBACiBDT05GSUdfVklSVF9UT19CVVM9eQogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiBDT05GSUdfUFBDXzRLX1BBR0VTPXkKICMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldApAQCAtMzQ5LDYgKzM1NCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzc4LDYgKzM4NCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODUsNyArMzkyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzk4LDYgKzQwNCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDA1LDkgKzQxMiw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogQ09ORklHX01URF9PRl9QQVJUUz15CkBAIC02MTksNiArNjI2LDcgQEAKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtNjU3LDcgKzY2NSw5IEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CkBAIC02NzAsNiArNjgwLDcgQEAKICMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CiBDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTURfUkFJRDZfUFE9eQorIyBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAogIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldApAQCAtNzI5LDEwICs3NDAsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MTMsNiArODIxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC04NjcsOSArODc2LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04ODcsNyArODkzLDYgQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTkwNiw2ICs5MTEsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC05MTYsNiArOTIyLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05NjEsNiArOTY4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfTEUgaXMgbm90IHNldApAQCAtMTE0MSw2ICsxMTQ5LDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyMTAsNyArMTIxOSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CiBDT05GSUdfRVhQT1JURlM9bQogCkBAIC0xMzA3LDYgKzEzMTUsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMzI0LDYgKzEzMzMsNyBAQAogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19QUENfRElTQUJMRV9XRVJST1IgaXMgbm90IHNldApAQCAtMTM0NCw2ICsxMzU0LDggQEAKIENPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19BU1lOQ19NRU1DUFk9eQogQ09ORklHX0FTWU5DX1hPUj15CitDT05GSUdfQVNZTkNfUFE9eQorQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPXkKICMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RldmljZS5oCmluZGV4IDlkYWRlMTUuLjZkOTRkMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kZXZpY2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTE1LDcgKzE1LDE2IEBACiAKIAkvKiBETUEgb3BlcmF0aW9ucyBvbiB0aGF0IGRldmljZSAqLwogCXN0cnVjdCBkbWFfbWFwX29wcwkqZG1hX29wczsKLQl2b2lkCQkJKmRtYV9kYXRhOworCisJLyoKKwkgKiBXaGVuIGFuIGlvbW11IGlzIGluIHVzZSwgZG1hX2RhdGEgaXMgdXNlZCBhcyBhIHB0ciB0byB0aGUgYmFzZSBvZiB0aGUKKwkgKiBpb21tdV90YWJsZS4gIE90aGVyd2lzZSwgaXQgaXMgYSBzaW1wbGUgbnVtZXJpY2FsIG9mZnNldC4KKwkgKi8KKwl1bmlvbiB7CisJCWRtYV9hZGRyX3QJZG1hX29mZnNldDsKKwkJdm9pZAkJKmlvbW11X3RhYmxlX2Jhc2U7CisJfSBkbWFfZGF0YTsKKwogI2lmZGVmIENPTkZJR19TV0lPVExCCiAJZG1hX2FkZHJfdAkJbWF4X2RpcmVjdF9kbWFfYWRkcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBjYjJjYTQxLi5lMjgxZGFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMjYsNyArMjYsNiBAQAogZXh0ZXJuIHZvaWQgZG1hX2RpcmVjdF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCiAJCQkJICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldik7CiAKICNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCiAvKgpAQCAtOTAsNiArODksMjggQEAKIAlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBvcHM7CiB9CiAKKy8qCisgKiBnZXRfZG1hX29mZnNldCgpCisgKgorICogR2V0IHRoZSBkbWEgb2Zmc2V0IG9uIGNvbmZpZ3VyYXRpb25zIHdoZXJlIHRoZSBkbWEgYWRkcmVzcyBjYW4gYmUgZGV0ZXJtaW5lZAorICogZnJvbSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBieSBsb29raW5nIGF0IGEgc2ltcGxlIG9mZnNldC4gIERpcmVjdCBkbWEgYW5kCisgKiBzd2lvdGxiIHVzZSB0aGlzIGZ1bmN0aW9uLCBidXQgaXQgaXMgdHlwaWNhbGx5IG5vdCB1c2VkIGJ5IGltcGxlbWVudGF0aW9ucworICogd2l0aCBhbiBpb21tdS4KKyAqLworc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGdldF9kbWFfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2KQorCQlyZXR1cm4gZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5kbWFfb2Zmc2V0OworCisJcmV0dXJuIFBDSV9EUkFNX09GRlNFVDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kbWFfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBvZmYpCit7CisJaWYgKGRldikKKwkJZGV2LT5hcmNoZGF0YS5kbWFfZGF0YS5kbWFfb2Zmc2V0ID0gb2ZmOworfQorCiAvKiB0aGlzIHdpbGwgYmUgcmVtb3ZlZCBzb29uICovCiAjZGVmaW5lIGZsdXNoX3dyaXRlX2J1ZmZlcnMoKQogCkBAIC0xODEsMTIgKzIwMiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGh5c190b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkcikKIHsKLQlyZXR1cm4gcGFkZHIgKyBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwlyZXR1cm4gcGFkZHIgKyBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHBoeXNfYWRkcl90IGRtYV90b19waHlzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkcikKIHsKLQlyZXR1cm4gZGFkZHIgLSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwlyZXR1cm4gZGFkZHIgLSBnZXRfZG1hX29mZnNldChkZXYpOwogfQogCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXJtd2FyZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKaW5kZXggM2ExNzk4Mi4uMjA3NzhhNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Zpcm13YXJlLmgKQEAgLTM3LDcgKzM3LDcgQEAKICNkZWZpbmUgRldfRkVBVFVSRV9WSU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMDQwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfUkRNQQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwODAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9MTEFOCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDEwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0JVTEsJCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwMjAwMDApCisjZGVmaW5lIEZXX0ZFQVRVUkVfQlVMS19SRU1PVkUJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAyMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9YREFCUglBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDQwMDAwKQogI2RlZmluZSBGV19GRUFUVVJFX01VTFRJVENFCUFTTV9DT05TVCgweDAwMDAwMDAwMDAwODAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfU1BMUEFSCUFTTV9DT05TVCgweDAwMDAwMDAwMDAxMDAwMDApCkBAIC00NSw4ICs0NSw3IEBACiAjZGVmaW5lIEZXX0ZFQVRVUkVfTFBBUgkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDQwMDAwMCkKICNkZWZpbmUgRldfRkVBVFVSRV9QUzNfTFYxCUFTTV9DT05TVCgweDAwMDAwMDAwMDA4MDAwMDApCiAjZGVmaW5lIEZXX0ZFQVRVUkVfQkVBVAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMTAwMDAwMCkKLSNkZWZpbmUgRldfRkVBVFVSRV9CVUxLX1JFTU9WRQlBU01fQ09OU1QoMHgwMDAwMDAwMDAyMDAwMDAwKQotI2RlZmluZSBGV19GRUFUVVJFX0NNTwkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwNDAwMDAwMCkKKyNkZWZpbmUgRldfRkVBVFVSRV9DTU8JCUFTTV9DT05TVCgweDAwMDAwMDAwMDIwMDAwMDApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTU4LDggKzU3LDkgQEAKIAkJRldfRkVBVFVSRV9QRVJGIHwgRldfRkVBVFVSRV9EVU1QIHwgRldfRkVBVFVSRV9JTlRFUlJVUFQgfAogCQlGV19GRUFUVVJFX01JR1JBVEUgfCBGV19GRUFUVVJFX1BFUkZNT04gfCBGV19GRUFUVVJFX0NSUSB8CiAJCUZXX0ZFQVRVUkVfVklPIHwgRldfRkVBVFVSRV9SRE1BIHwgRldfRkVBVFVSRV9MTEFOIHwKLQkJRldfRkVBVFVSRV9CVUxLIHwgRldfRkVBVFVSRV9YREFCUiB8IEZXX0ZFQVRVUkVfTVVMVElUQ0UgfAotCQlGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8IEZXX0ZFQVRVUkVfQ01PLAorCQlGV19GRUFUVVJFX0JVTEtfUkVNT1ZFIHwgRldfRkVBVFVSRV9YREFCUiB8CisJCUZXX0ZFQVRVUkVfTVVMVElUQ0UgfCBGV19GRUFUVVJFX1NQTFBBUiB8IEZXX0ZFQVRVUkVfTFBBUiB8CisJCUZXX0ZFQVRVUkVfQ01PLAogCUZXX0ZFQVRVUkVfUFNFUklFU19BTFdBWVMgPSAwLAogCUZXX0ZFQVRVUkVfSVNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfSVNFUklFUyB8IEZXX0ZFQVRVUkVfTFBBUiwKIAlGV19GRUFUVVJFX0lTRVJJRVNfQUxXQVlTID0gRldfRkVBVFVSRV9JU0VSSUVTIHwgRldfRkVBVFVSRV9MUEFSLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2lvbW11LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCA3NDY0YzBkLi5lZGZjOTgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW9tbXUuaApAQCAtNzAsNiArNzAsMTYgQEAKIAogc3RydWN0IHNjYXR0ZXJsaXN0OwogCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lvbW11X3RhYmxlX2Jhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpiYXNlKQoreworCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEuaW9tbXVfdGFibGVfYmFzZSA9IGJhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2lvbW11X3RhYmxlX2Jhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhLmlvbW11X3RhYmxlX2Jhc2U7Cit9CisKIC8qIEZyZWVzIHRhYmxlIGZvciBhbiBpbmRpdmlkdWFsIGRldmljZSBub2RlICovCiBleHRlcm4gdm9pZCBpb21tdV9mcmVlX3RhYmxlKHN0cnVjdCBpb21tdV90YWJsZSAqdGJsLCBjb25zdCBjaGFyICpub2RlX25hbWUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG1jLmgKaW5kZXggY2NjNjhiNS4uNWE5ZWRlNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BtYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbWMuaApAQCAtMjksNyArMjksNyBAQAogdm9pZCByZWxlYXNlX3BtY19oYXJkd2FyZSh2b2lkKTsKIHZvaWQgcHBjX2VuYWJsZV9wbWNzKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcGNfc2V0X3BtdV9pbnVzZShpbnQgaW51c2UpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS00MHguaAppbmRleCA2YzNlMWY0Li5lYzBiMGIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KICNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLwogI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLworI2RlZmluZQlfUEFHRV9TUEVDSUFMCTB4MDIwCS8qIHNvZnR3YXJlOiBTcGVjaWFsIHBhZ2UgKi8KICNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KICNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KICNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKaW5kZXggOTRlOTc5Ny4uZGQ1ZWE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KICNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDA4CS8qIFNXIGVudHJ5LCBmb3JjZWQgdG8gMCBieSB0aGUgVExCIG1pc3MgKi8KIAogLyogVGhlc2UgZml2ZSBzb2Z0d2FyZSBiaXRzIG11c3QgYmUgbWFza2VkIG91dCB3aGVuIHRoZSBlbnRyeSBpcyBsb2FkZWQKICAqIGludG8gdGhlIFRMQi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IGMzYjY1MDcuLmYyYjM3MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMjUsOSArMjUsNiBAQAogI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKICNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKICNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCiAjaWZuZGVmIF9QQUdFXzRLX1BGTgogI2RlZmluZSBfUEFHRV80S19QRk4JCTAKICNlbmRpZgpAQCAtMTc5LDcgKzE3Niw1IEBACiAjZGVmaW5lIEhBVkVfUEFHRV9BR1AKIAogLyogQWR2ZXJ0aXNlIHN1cHBvcnQgZm9yIF9QQUdFX1NQRUNJQUwgKi8KLSNpZmRlZiBfUEFHRV9TUEVDSUFMCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0jZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDBiOWM5MTMuLjAzYzg2MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTcxMSw2ICs3MTEsOCBAQAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1Xzc1MCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc0NS83NTUgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmYwMDAsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEtaW9tbXUuYwppbmRleCA4N2RkYjNmLi4zNzc3MWE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS1pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLWlvbW11LmMKQEAgLTE4LDcgKzE4LDcgQEAKIHN0YXRpYyB2b2lkICpkbWFfaW9tbXVfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQkgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQogewotCXJldHVybiBpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNpemUsCisJcmV0dXJuIGlvbW11X2FsbG9jX2NvaGVyZW50KGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwKIAkJCQkgICAgZG1hX2hhbmRsZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZmxhZywKIAkJCQkgICAgZGV2X3RvX25vZGUoZGV2KSk7CiB9CkBAIC0yNiw3ICsyNiw3IEBACiBzdGF0aWMgdm9pZCBkbWFfaW9tbXVfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewotCWlvbW11X2ZyZWVfY29oZXJlbnQoZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworCWlvbW11X2ZyZWVfY29oZXJlbnQoZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwogfQogCiAvKiBDcmVhdGVzIFRDRXMgZm9yIGEgdXNlciBwcm92aWRlZCBidWZmZXIuICBUaGUgdXNlciBidWZmZXIgbXVzdCBiZQpAQCAtMzksOCArMzksOCBAQAogCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgcGFnZSwgb2Zmc2V0LCBzaXplLAotCQkJICAgICAgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CisJcmV0dXJuIGlvbW11X21hcF9wYWdlKGRldiwgZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KSwgcGFnZSwgb2Zmc2V0LAorCQkJICAgICAgc2l6ZSwgZGV2aWNlX3RvX21hc2soZGV2KSwgZGlyZWN0aW9uLCBhdHRycyk7CiB9CiAKIApAQCAtNDgsNyArNDgsNyBAQAogCQkJCSBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uLAogCQkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlpb21tdV91bm1hcF9wYWdlKGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9wYWdlKGdldF9pb21tdV90YWJsZV9iYXNlKGRldiksIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbiwKIAkJCSBhdHRycyk7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIGlvbW11X21hcF9zZyhkZXYsIGRldi0+YXJjaGRhdGEuZG1hX2RhdGEsIHNnbGlzdCwgbmVsZW1zLAorCXJldHVybiBpb21tdV9tYXBfc2coZGV2LCBnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywKIAkJCSAgICBkZXZpY2VfdG9fbWFzayhkZXYpLCBkaXJlY3Rpb24sIGF0dHJzKTsKIH0KIApAQCAtNjUsMTQgKzY1LDE0IEBACiAJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JaW9tbXVfdW5tYXBfc2coZGV2LT5hcmNoZGF0YS5kbWFfZGF0YSwgc2dsaXN0LCBuZWxlbXMsIGRpcmVjdGlvbiwKKwlpb21tdV91bm1hcF9zZyhnZXRfaW9tbXVfdGFibGVfYmFzZShkZXYpLCBzZ2xpc3QsIG5lbGVtcywgZGlyZWN0aW9uLAogCQkgICAgICAgYXR0cnMpOwogfQogCiAvKiBXZSBzdXBwb3J0IERNQSB0by9mcm9tIGFueSBtZW1vcnkgcGFnZSB2aWEgdGhlIGlvbW11ICovCiBzdGF0aWMgaW50IGRtYV9pb21tdV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBkZXYtPmFyY2hkYXRhLmRtYV9kYXRhOworCXN0cnVjdCBpb21tdV90YWJsZSAqdGJsID0gZ2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2KTsKIAogCWlmICghdGJsIHx8IHRibC0+aXRfb2Zmc2V0ID4gbWFzaykgewogCQlwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWEuYwppbmRleCAyMWI3ODRkLi42MjE1MDYyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2RtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hLmMKQEAgLTIxLDEzICsyMSw2IEBACiAgKiBkZWZhdWx0IHRoZSBvZmZzZXQgaXMgUENJX0RSQU1fT0ZGU0VULgogICovCiAKLXVuc2lnbmVkIGxvbmcgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2KQotCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZGV2LT5hcmNoZGF0YS5kbWFfZGF0YTsKLQotCXJldHVybiBQQ0lfRFJBTV9PRkZTRVQ7Ci19CiAKIHZvaWQgKmRtYV9kaXJlY3RfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFnKQpAQCAtMzcsNyArMzAsNyBAQAogCXJldCA9IF9fZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZyk7CiAJaWYgKHJldCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX2RpcmVjdF9vZmZzZXQoZGV2KTsKKwkqZG1hX2hhbmRsZSArPSBnZXRfZG1hX29mZnNldChkZXYpOwogCXJldHVybiByZXQ7CiAjZWxzZQogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtNTEsNyArNDQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXQgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2FicyhyZXQpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAogCXJldHVybiByZXQ7CiAjZW5kaWYKQEAgLTc1LDcgKzY4LDcgQEAKIAlpbnQgaTsKIAogCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbnRzLCBpKSB7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJCXNnLT5kbWFfYWRkcmVzcyA9IHNnX3BoeXMoc2cpICsgZ2V0X2RtYV9vZmZzZXQoZGV2KTsKIAkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOwogCQlfX2RtYV9zeW5jX3BhZ2Uoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIGRpcmVjdGlvbik7CiAJfQpAQCAtMTEwLDcgKzEwMyw3IEBACiB7CiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAJX19kbWFfc3luY19wYWdlKHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyKTsKLQlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0ICsgZ2V0X2RtYV9kaXJlY3Rfb2Zmc2V0KGRldik7CisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCArIGdldF9kbWFfb2Zmc2V0KGRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGlyZWN0X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDkwMGUwZWUuLjk3NjMyNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTY1OCw0MiArNjU4LDQzIEBACiAJY21wZGkJcjAsMAogCWNyYW5kYwllcSxjcjEqNCtlcSxlcQogCWJuZQlyZXN0b3JlCi0JLyogaGVyZSB3ZSBhcmUgcHJlZW1wdGluZyB0aGUgY3VycmVudCB0YXNrICovCi0xOgotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWJsCS50cmFjZV9oYXJkaXJxc19vbgotCS8qIE5vdGU6IHdlIGp1c3QgY2xvYmJlcmVkIHIxMCB3aGljaCB1c2VkIHRvIGNvbnRhaW4gdGhlIHByZXZpb3VzCi0JICogTVNSIGJlZm9yZSB0aGUgaGFyZC1kaXNhYmxpbmcgZG9uZSBieSB0aGUgY2FsbGVyIG9mIGRvX3dvcmsuCi0JICogV2UgZG9uJ3QgaGF2ZSB0aGF0IHZhbHVlIGFueW1vcmUsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciBhcwotCSAqIHdlIHdpbGwgaGFyZC1lbmFibGUgdW5jb25kaXRpb25hbGx5LCB3ZSBjYW4ganVzdCByZWxvYWQgdGhlCi0JICogY3VycmVudCBNU1IgaW50byByMTAKKworCS8qIEhlcmUgd2UgYXJlIHByZWVtcHRpbmcgdGhlIGN1cnJlbnQgdGFzay4KKwkgKgorCSAqIEVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBzb2Z0LWRpc2FibGVkLiBXZSBhbHNvIHByb3Blcmx5IG1hcmsKKwkgKiB0aGUgUEFDQSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgaGFyZC1kaXNhYmxlZAorCSAqIGFuZCB0cmFjZSB0aGUgY2hhbmdlCiAJICovCi0JbWZtc3IJcjEwCi0jZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCi0JbGkJcjAsMQorCWxpCXIwLDAKIAlzdGIJcjAsUEFDQVNPRlRJUlFFTihyMTMpCiAJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCVRSQUNFX0RJU0FCTEVfSU5UUworCisJLyogQ2FsbCB0aGUgc2NoZWR1bGVyIHdpdGggc29mdCBJUlFzIG9mZiAqLworMToJYmwJLnByZWVtcHRfc2NoZWR1bGVfaXJxCisKKwkvKiBIYXJkLWRpc2FibGUgaW50ZXJydXB0cyBhZ2FpbiAoYW5kIHVwZGF0ZSBQQUNBKSAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCi0Jd3J0ZWVpCTEKLQlibAkucHJlZW1wdF9zY2hlZHVsZQogCXdydGVlaQkwCiAjZWxzZQotCW9yaQlyMTAscjEwLE1TUl9FRQotCW10bXNyZAlyMTAsMQkJLyogcmVlbmFibGUgaW50ZXJydXB0cyAqLwotCWJsCS5wcmVlbXB0X3NjaGVkdWxlCiAJbWZtc3IJcjEwCi0JY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAotCXJsZGljbAlyMTAscjEwLDQ4LDEJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFnYWluICovCisJcmxkaWNsCXIxMCxyMTAsNDgsMQogCXJvdGxkaQlyMTAscjEwLDE2CiAJbXRtc3JkCXIxMCwxCiAjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0UgKi8KKwlsaQlyMCwwCisJc3RiCXIwLFBBQ0FIQVJESVJRRU4ocjEzKQorCisJLyogUmUtdGVzdCBmbGFncyBhbmQgZXZlbnR1YWxseSBsb29wICovCisJY2xycmRpCXI5LHIxLFRIUkVBRF9TSElGVAogCWxkCXI0LFRJX0ZMQUdTKHI5KQogCWFuZGkuCXIwLHI0LF9USUZfTkVFRF9SRVNDSEVECiAJYm5lCTFiCiAJYglyZXN0b3JlCiAKIHVzZXJfd29yazoKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCiAJd3J0ZWVpCTEKQEAgLTEwMzgsOCArMTAzOSw3IEBACiAJICogV2UgYXJlIGluIGEgbW9kdWxlIHVzaW5nIHRoZSBtb2R1bGUncyBUT0MuCiAJICogU3dpdGNoIHRvIG91ciBUT0MgdG8gcnVuIGluc2lkZSB0aGUgY29yZSBrZXJuZWwuCiAJICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI0LGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcikKLQlsZAlyMiwgOChyNCkKKwlsZAlyMiwgUEFDQVRPQyhyMTMpCiAKIAlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCiAJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2V4Y2VwdGlvbnMtNjRlLlMKaW5kZXggOTA0OGY5Ni4uMjRkY2MwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9leGNlcHRpb25zLTY0ZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZXhjZXB0aW9ucy02NGUuUwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotI2luY2x1ZGUgPGFzbS9yZWcuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLTY0ZS5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vaXJxZmxhZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva2dkYi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKaW5kZXggZmU4ZjcxZC4uNjQxYzc0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9rZ2RiLmMKQEAgLTI4MiwxMiArMjgyLDYgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpwdHIgPSBnZGJfcmVnczsKIAlpbnQgcmVnOwotI2lmZGVmIENPTkZJR19TUEUKLQl1bmlvbiB7Ci0JCXUzMiB2MzJbMl07Ci0JCXU2NCB2NjQ7Ci0JfSBhY2M7Ci0jZW5kaWYKIAogCWZvciAocmVnID0gMDsgcmVnIDwgMzI7IHJlZysrKQogCQlVTlBBQ0s2NChyZWdzLT5ncHJbcmVnXSwgcHRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKaW5kZXggZTlmNDg0MC4uZThkZmRiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2ktY29tbW9uLmMKQEAgLTExMTcsNyArMTExNyw3IEBACiAKIAkJLyogSG9vayB1cCBkZWZhdWx0IERNQSBvcHMgKi8KIAkJc2QtPmRtYV9vcHMgPSBwY2lfZG1hX29wczsKLQkJc2QtPmRtYV9kYXRhID0gKHZvaWQgKilQQ0lfRFJBTV9PRkZTRVQ7CisJCXNldF9kbWFfb2Zmc2V0KCZkZXYtPmRldiwgUENJX0RSQU1fT0ZGU0VUKTsKIAogCQkvKiBBZGRpdGlvbmFsIHBsYXRmb3JtIERNQS9pb21tdSBzZXR1cCAqLwogCQlpZiAocHBjX21kLnBjaV9kbWFfZGV2X3NldHVwKQpAQCAtMTE5MCw3ICsxMTkwLDcgQEAKICAqIFJlcGFyZW50IHJlc291cmNlIGNoaWxkcmVuIG9mIHByIHRoYXQgY29uZmxpY3Qgd2l0aCByZXMKICAqIHVuZGVyIHJlcywgYW5kIG1ha2UgcmVzIHJlcGxhY2UgdGhvc2UgY2hpbGRyZW4uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHJlcGFyZW50X3Jlc291cmNlcyhzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwKK3N0YXRpYyBpbnQgcmVwYXJlbnRfcmVzb3VyY2VzKHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LAogCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CiAJc3RydWN0IHJlc291cmNlICpwLCAqKnBwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggYmE5NDlhMi4uY2NmNTZhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC05Nyw3ICs5Nyw5IEBACiAJICogdG8gZG8gYW4gYXBwcm9wcmlhdGUgVExCIGZsdXNoIGhlcmUgdG9vCiAJICovCiAJaWYgKGJ1cy0+c2VsZikgeworI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGJ1cy0+cmVzb3VyY2VbMF07CisjZW5kaWYKIAogCQlwcl9kZWJ1ZygiSU8gdW5tYXBwaW5nIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJCSBwY2lfbmFtZShidXMtPnNlbGYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYmJjYmFlMS4uODdmMTY2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTExNiwyMCArMTE2LDIzIEBACiBzdGF0aWMgaW5saW5lIHUzMiBwZXJmX2dldF9taXNjX2ZsYWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgbW1jcmEgPSByZWdzLT5kc2lzcjsKKwl1bnNpZ25lZCBsb25nIHNpaHYgPSBNTUNSQV9TSUhWOworCXVuc2lnbmVkIGxvbmcgc2lwciA9IE1NQ1JBX1NJUFI7CiAKIAlpZiAoVFJBUChyZWdzKSAhPSAweGYwMCkKIAkJcmV0dXJuIDA7CS8qIG5vdCBhIFBNVSBpbnRlcnJ1cHQgKi8KIAogCWlmIChwcG11LT5mbGFncyAmIFBQTVVfQUxUX1NJUFIpIHsKLQkJaWYgKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJSFYpCi0JCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19IWVBFUlZJU09SOwotCQlyZXR1cm4gKG1tY3JhICYgUE9XRVI2X01NQ1JBX1NJUFIpID8KLQkJCVBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOworCQlzaWh2ID0gUE9XRVI2X01NQ1JBX1NJSFY7CisJCXNpcHIgPSBQT1dFUjZfTU1DUkFfU0lQUjsKIAl9Ci0JaWYgKG1tY3JhICYgTU1DUkFfU0lIVikKKworCS8qIFBSIGhhcyBwcmlvcml0eSBvdmVyIEhWLCBzbyBvcmRlciBiZWxvdyBpcyBpbXBvcnRhbnQgKi8KKwlpZiAobW1jcmEgJiBzaXByKQorCQlyZXR1cm4gUEVSRl9SRUNPUkRfTUlTQ19VU0VSOworCWlmICgobW1jcmEgJiBzaWh2KSAmJiAoZnJlZXplX2V2ZW50c19rZXJuZWwgIT0gTU1DUjBfRkNIVikpCiAJCXJldHVybiBQRVJGX1JFQ09SRF9NSVNDX0hZUEVSVklTT1I7Ci0JcmV0dXJuIChtbWNyYSAmIE1NQ1JBX1NJUFIpID8gUEVSRl9SRUNPUkRfTUlTQ19VU0VSIDoKLQkJUEVSRl9SRUNPUkRfTUlTQ19LRVJORUw7CisJcmV0dXJuIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwppbmRleCAwYTMyMTY0Li5jOTMwYWMzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTAxNiw5ICsxMDE2LDEzIEBACiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCWludCBjdXJyX2ZyYW1lID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CiAJZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcmV0dXJuX3RvX2hhbmRsZXI7CisJdW5zaWduZWQgbG9uZyBydGggPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKwl1bnNpZ25lZCBsb25nIG1ydGggPSAtMTsKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworCWV4dGVybiB2b2lkIG1vZF9yZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwlydGggPSAqKHVuc2lnbmVkIGxvbmcgKilydGg7CisJbXJ0aCA9ICh1bnNpZ25lZCBsb25nKW1vZF9yZXR1cm5fdG9faGFuZGxlcjsKKwltcnRoID0gKih1bnNpZ25lZCBsb25nICopbXJ0aDsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTEwNDQsNyArMTA0OCw3IEBACiAJCWlmICghZmlyc3RmcmFtZSB8fCBpcCAhPSBscikgewogCQkJcHJpbnRrKCJbIlJFRyJdIFsiUkVHIl0gJXBTIiwgc3AsIGlwLCAodm9pZCAqKWlwKTsKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCi0JCQlpZiAoaXAgPT0gYWRkciAmJiBjdXJyX2ZyYW1lID49IDApIHsKKwkJCWlmICgoaXAgPT0gcnRoIHx8IGlwID09IG1ydGgpICYmIGN1cnJfZnJhbWUgPj0gMCkgewogCQkJCXByaW50aygiICglcFMpIiwKIAkJCQkgICAgICAgKHZvaWQgKiljdXJyZW50LT5yZXRfc3RhY2tbY3Vycl9mcmFtZV0ucmV0KTsKIAkJCQljdXJyX2ZyYW1lLS07CkBAIC0xMTY1LDcgKzExNjksMjIgQEAKIAogdW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyAxVEIgc2VnbWVudHMgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIHJhbmRvbWlzZQorCSAqIHRoZSBoZWFwLCB3ZSBjYW4gcHV0IGl0IGFib3ZlIDFUQiBzbyBpdCBpcyBiYWNrZWQgYnkgYSAxVEIKKwkgKiBzZWdtZW50LiBPdGhlcndpc2UgdGhlIGhlYXAgd2lsbCBiZSBpbiB0aGUgYm90dG9tIDFUQgorCSAqIHdoaWNoIGFsd2F5cyB1c2VzIDI1Nk1CIHNlZ21lbnRzIGFuZCB0aGlzIG1heSByZXN1bHQgaW4gYQorCSAqIHBlcmZvcm1hbmNlIHBlbmFsdHkuCisJICovCisJaWYgKCFpc18zMmJpdF90YXNrKCkgJiYgKG1tdV9oaWdodXNlcl9zc2l6ZSA9PSBNTVVfU0VHU0laRV8xVCkpCisJCWJhc2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBtbS0+YnJrLCAxVUwgPDwgU0lEX1NISUZUXzFUKTsKKyNlbmRpZgorCisJcmV0ID0gUEFHRV9BTElHTihiYXNlICsgYnJrX3JuZCgpKTsKIAogCWlmIChyZXQgPCBtbS0+YnJrKQogCQlyZXR1cm4gbW0tPmJyazsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IDg2NDMzNGIuLmJhZmFjMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwpAQCAtODAwLDcgKzgwMCw3IEBACiAJcm9vdCA9IGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsIEFERFIoIi8iKSk7CiAJaWYgKHJvb3QgIT0gMCkgewogCQkvKiB0cnkgY2FsbGluZyB0aGUgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCBtZXRob2QgKi8KLQkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUuLi4iKTsKKwkJcHJvbV9wcmludGYoIkNhbGxpbmcgaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydC4uLiIpOwogCQlpZiAoY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCAzLCAyLCAmcmV0LAogCQkJCSAgQUREUigiaWJtLGNsaWVudC1hcmNoaXRlY3R1cmUtc3VwcG9ydCIpLAogCQkJCSAgcm9vdCwKQEAgLTgxNCw2ICs4MTQsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWNhbGxfcHJvbSgiY2xvc2UiLCAxLCAwLCByb290KTsKKwkJcHJvbV9wcmludGYoIiBub3QgaW1wbGVtZW50ZWRcbiIpOwogCX0KIAogCS8qIG5vIGlibSxjbGllbnQtYXJjaGl0ZWN0dXJlLXN1cHBvcnQgY2FsbCwgdHJ5IHRoZSBvbGQgd2F5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNzk3ZWE5NS4uMDRmNjM4ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9tbXUtaGFzaDY0Lmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA5MmRjODQ0Li5hMTM2YTExYzQ5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTc3Nyw3ICs3NzcsNyBAQAogCXJldHVybiBwcGNfbWQuc2V0X3J0Y190aW1lKCZ0bSk7CiB9CiAKLXZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCitzdGF0aWMgdm9pZCBfX3JlYWRfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgKnRzKQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdGF0aWMgaW50IGZpcnN0ID0gMTsKQEAgLTgwMCwxMCArODAwLDIzIEBACiAJCXJldHVybjsKIAl9CiAJcHBjX21kLmdldF9ydGNfdGltZSgmdG0pOworCiAJdHMtPnR2X3NlYyA9IG1rdGltZSh0bS50bV95ZWFyKzE5MDAsIHRtLnRtX21vbisxLCB0bS50bV9tZGF5LAogCQkJICAgIHRtLnRtX2hvdXIsIHRtLnRtX21pbiwgdG0udG1fc2VjKTsKIH0KIAordm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlfX3JlYWRfcGVyc2lzdGVudF9jbG9jayh0cyk7CisKKwkvKiBTYW5pdGl6ZSBpdCBpbiBjYXNlIHJlYWwgdGltZSBjbG9jayBpcyBzZXQgYmVsb3cgRVBPQ0ggKi8KKwlpZiAodHMtPnR2X3NlYyA8IDApIHsKKwkJdHMtPnR2X3NlYyA9IDA7CisJCXRzLT50dl9uc2VjID0gMDsKKwl9CisJCQorfQorCiAvKiBjbG9ja3NvdXJjZSBjb2RlICovCiBzdGF0aWMgY3ljbGVfdCBydGNfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwppbmRleCAzZmFhZjI5Li4xMzdkYzIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtNTAsNiArNTAsOSBAQAogLyogTWF4IHN1cHBvcnRlZCBzaXplIGZvciBzeW1ib2wgbmFtZXMgKi8KICNkZWZpbmUgTUFYX1NZTU5BTUUJNjQKIAorLyogVGhlIGFsaWdubWVudCBvZiB0aGUgdkRTTyAqLworI2RlZmluZSBWRFNPX0FMSUdOTUVOVAkoMSA8PCAxNikKKwogZXh0ZXJuIGNoYXIgdmRzbzMyX3N0YXJ0LCB2ZHNvMzJfZW5kOwogc3RhdGljIHZvaWQgKnZkc28zMl9rYmFzZSA9ICZ2ZHNvMzJfc3RhcnQ7CiBzdGF0aWMgdW5zaWduZWQgaW50IHZkc28zMl9wYWdlczsKQEAgLTIzMSwxNSArMjM0LDI4IEBACiAJICogcGljayBhIGJhc2UgYWRkcmVzcyBmb3IgdGhlIHZEU08gaW4gcHJvY2VzcyBzcGFjZS4gV2UgdHJ5IHRvIHB1dCBpdAogCSAqIGF0IHZkc29fYmFzZSB3aGljaCBpcyB0aGUgIm5hdHVyYWwiIGJhc2UgZm9yIGl0LCBidXQgd2UgbWlnaHQgZmFpbAogCSAqIGFuZCBlbmQgdXAgcHV0dGluZyBpdCBlbHNld2hlcmUuCisJICogQWRkIGVub3VnaCB0byB0aGUgc2l6ZSBzbyB0aGF0IHRoZSByZXN1bHQgY2FuIGJlIGFsaWduZWQuCiAJICovCiAJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAl2ZHNvX2Jhc2UgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCB2ZHNvX2Jhc2UsCi0JCQkJICAgICAgdmRzb19wYWdlcyA8PCBQQUdFX1NISUZULCAwLCAwKTsKKwkJCQkgICAgICAodmRzb19wYWdlcyA8PCBQQUdFX1NISUZUKSArCisJCQkJICAgICAgKChWRFNPX0FMSUdOTUVOVCAtIDEpICYgUEFHRV9NQVNLKSwKKwkJCQkgICAgICAwLCAwKTsKIAlpZiAoSVNfRVJSX1ZBTFVFKHZkc29fYmFzZSkpIHsKIAkJcmMgPSB2ZHNvX2Jhc2U7CiAJCWdvdG8gZmFpbF9tbWFwc2VtOwogCX0KIAorCS8qIEFkZCByZXF1aXJlZCBhbGlnbm1lbnQuICovCisJdmRzb19iYXNlID0gQUxJR04odmRzb19iYXNlLCBWRFNPX0FMSUdOTUVOVCk7CisKKwkvKgorCSAqIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgY2FsbGluZworCSAqIGluc3RhbGxfc3BlY2lhbF9tYXBwaW5nIG9yIHRoZSBwZXJmIGNvdW50ZXIgbW1hcCB0cmFja2luZyBjb2RlCisJICogd2lsbCBmYWlsIHRvIHJlY29nbmlzZSBpdCBhcyBhIHZEU08gKHNpbmNlIGFyY2hfdm1hX25hbWUgZmFpbHMpLgorCSAqLworCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKKwogCS8qCiAJICogb3VyIHZtYSBmbGFncyBkb24ndCBoYXZlIFZNX1dSSVRFIHNvIGJ5IGRlZmF1bHQsIHRoZSBwcm9jZXNzIGlzbid0CiAJICogYWxsb3dlZCB0byB3cml0ZSB0aG9zZSBwYWdlcy4KQEAgLTI2MCwxMSArMjc2LDEwIEBACiAJCQkJICAgICBWTV9NQVlSRUFEfFZNX01BWVdSSVRFfFZNX01BWUVYRUN8CiAJCQkJICAgICBWTV9BTFdBWVNEVU1QLAogCQkJCSAgICAgdmRzb19wYWdlbGlzdCk7Ci0JaWYgKHJjKQorCWlmIChyYykgeworCQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSAwOwogCQlnb3RvIGZhaWxfbW1hcHNlbTsKLQotCS8qIFB1dCB2RFNPIGJhc2UgaW50byBtbSBzdHJ1Y3QgKi8KLQljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisJfQogCiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKaW5kZXggOTA0ZWYxMy4uMDU0NmJjZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMjUsNyArMjUsNyBAQAogCS4gPSBBTElHTigxNik7CiAJLnRleHQJCTogewogCQkqKC50ZXh0IC5zdHViIC50ZXh0LiogLmdudS5saW5rb25jZS50LiogX19mdHJfYWx0XyopCi0JfQorCX0JCSAgICAgIAkgICAgICAJCQk6dGV4dAogCVBST1ZJREUoX19ldGV4dCA9IC4pOwogCVBST1ZJREUoX2V0ZXh0ID0gLik7CiAJUFJPVklERShldGV4dCA9IC4pOwpAQCAtNTYsNyArNTYsNyBAQAogCS5maXh1cAkJOiB7ICooLmZpeHVwKSB9CiAKIAkuZHluYW1pYwk6IHsgKiguZHluYW1pYykgfQkJOnRleHQJOmR5bmFtaWMKLQkuZ290CQk6IHsgKiguZ290KSB9CisJLmdvdAkJOiB7ICooLmdvdCkgfQkJCTp0ZXh0CiAJLnBsdAkJOiB7ICooLnBsdCkgfQogCiAJX2VuZCA9IC47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBiYzdiNDFlLi43N2Y2NDIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTEwNTQsNiArMTA1NCw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJdGJsID0ga21hbGxvYyhzaXplb2YoKnRibCksIEdGUF9LRVJORUwpOworCWlmICh0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlvZl9wYXJzZV9kbWFfd2luZG93KGRldi0+ZGV2LmFyY2hkYXRhLm9mX25vZGUsIGRtYV93aW5kb3csCiAJCQkgICAgJnRibC0+aXRfaW5kZXgsICZvZmZzZXQsICZzaXplKTsKQEAgLTEyMzMsNyArMTIzNSw3IEBACiAJCXZpb19jbW9fc2V0X2RtYV9vcHModmlvZGV2KTsKIAllbHNlCiAJCXZpb2Rldi0+ZGV2LmFyY2hkYXRhLmRtYV9vcHMgPSAmZG1hX2lvbW11X29wczsKLQl2aW9kZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHZpb19idWlsZF9pb21tdV90YWJsZSh2aW9kZXYpOworCXNldF9pb21tdV90YWJsZV9iYXNlKCZ2aW9kZXYtPmRldiwgdmlvX2J1aWxkX2lvbW11X3RhYmxlKHZpb2RldikpOwogCXNldF9kZXZfbm9kZSgmdmlvZGV2LT5kZXYsIG9mX25vZGVfdG9fbmlkKG9mX25vZGUpKTsKIAogCS8qIGluaXQgZ2VuZXJpYyAnc3RydWN0IGRldmljZScgZmllbGRzOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDU4ZGE0MDcuLjI3NzM1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogCiBFTlRSWShfc3RleHQpCiAKQEAgLTcxLDEyICs3Miw3IEBACiAJLyogUmVhZC1vbmx5IGRhdGEgKi8KIAlST0RBVEEKIAotCS8qIEV4Y2VwdGlvbiAmIGJ1ZyB0YWJsZXMgKi8KLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0KKwlFWENFUFRJT05fVEFCTEUoMCkKIAogCU5PVEVTIDprZXJuZWwgOm5vdGVzCiAKQEAgLTkzLDEyICs4OSw3IEBACiAgKi8KIAkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAlfX2luaXRfYmVnaW4gPSAuOwotCi0JLmluaXQudGV4dCA6IEFUKEFERFIoLmluaXQudGV4dCkgLSBMT0FEX09GRlNFVCkgewotCQlfc2luaXR0ZXh0ID0gLjsKLQkJSU5JVF9URVhUCi0JCV9laW5pdHRleHQgPSAuOwotCX0gOmtlcm5lbAorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkgOmtlcm5lbAogCiAJLyogLmV4aXQudGV4dCBpcyBkaXNjYXJkZWQgYXQgcnVudGltZSwgbm90IGxpbmsgdGltZSwKIAkgKiB0byBkZWFsIHdpdGggcmVmZXJlbmNlcyBmcm9tIF9fYnVnX3RhYmxlCkBAIC0xMjIsMjMgKzExMywxNiBAQAogI2VuZGlmCiAJfQogCi0JLiA9IEFMSUdOKDE2KTsKIAkuaW5pdC5zZXR1cCA6IEFUKEFERFIoLmluaXQuc2V0dXApIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19zZXR1cF9zdGFydCA9IC47Ci0JCSooLmluaXQuc2V0dXApCi0JCV9fc2V0dXBfZW5kID0gLjsKKwkJSU5JVF9TRVRVUCgxNikKIAl9CiAKIAkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JCX0KKwkJSU5JVF9DQUxMUworCX0KIAogCS5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkJKiguY29uX2luaXRjYWxsLmluaXQpCi0JCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CisJCUNPTl9JTklUQ0FMTAogCX0KIAogCVNFQ1VSSVRZX0lOSVQKQEAgLTE2OSwxNCArMTUzLDEwIEBACiAJCV9fc3RvcF9fX2Z3X2Z0cl9maXh1cCA9IC47CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKKwkJSU5JVF9SQU1fRlMKIAl9Ci0jZW5kaWYKKwogCVBFUkNQVShQQUdFX1NJWkUpCiAKIAkuID0gQUxJR04oOCk7CkBAIC0yNDAsMzYgKzIyMCwyNSBAQAogI2VuZGlmCiAKIAkvKiBUaGUgaW5pdGlhbCB0YXNrIGFuZCBrZXJuZWwgc3RhY2sgKi8KLSNpZmRlZiBDT05GSUdfUFBDMzIKLQkuID0gQUxJR04oODE5Mik7Ci0jZWxzZQotCS4gPSBBTElHTigxNjM4NCk7Ci0jZW5kaWYKIAkuZGF0YS5pbml0X3Rhc2sgOiBBVChBRERSKC5kYXRhLmluaXRfdGFzaykgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmluaXRfdGFzaykKKwkJSU5JVF9UQVNLX0RBVEEoVEhSRUFEX1NJWkUpCiAJfQogCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGEucGFnZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5wYWdlX2FsaWduZWQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJKiguZGF0YS5wYWdlX2FsaWduZWQpCisJCVBBR0VfQUxJR05FRF9EQVRBKFBBR0VfU0laRSkKIAl9CiAKLQkuID0gQUxJR04oTDFfQ0FDSEVfQllURVMpOwogCS5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgewotCQkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQorCQlDQUNIRUxJTkVfQUxJR05FRF9EQVRBKEwxX0NBQ0hFX0JZVEVTKQogCX0KIAotCS4gPSBBTElHTihMMV9DQUNIRV9CWVRFUyk7CiAJLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKSB7Ci0JCSooLmRhdGEucmVhZF9tb3N0bHkpCisJCVJFQURfTU9TVExZX0RBVEEoTDFfQ0FDSEVfQllURVMpCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJLmRhdGFfbm9zYXZlIDogQVQoQUREUiguZGF0YV9ub3NhdmUpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ub3NhdmVfYmVnaW4gPSAuOwotCQkqKC5kYXRhLm5vc2F2ZSkKLQkJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JCV9fbm9zYXZlX2VuZCA9IC47CisJCU5PU0FWRV9EQVRBCiAJfQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CkBAIC0yODAsMTQgKzI0OSw3IEBACiAgKiBBbmQgZmluYWxseSB0aGUgYnNzCiAgKi8KIAotCS5ic3MgOiBBVChBRERSKC5ic3MpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19ic3Nfc3RhcnQgPSAuOwotCQkqKC5zYnNzKSAqKC5zY29tbW9uKQotCQkqKC5keW5ic3MpCi0JCSooLmJzcykKLQkJKihDT01NT04pCi0JCV9fYnNzX3N0b3AgPSAuOwotCX0KKwlCU1NfU0VDVElPTigwLCAwLCAwKQogCiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJX2VuZCA9IC4gOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYyBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmMKaW5kZXggNDdlZTYwMy4uMmFhMzcxZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwga3ZtcHBjX2V4aXRfdGltaW5nX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBrdm1wcGNfZXhpdF90aW1pbmdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGt2bXBwY19leGl0X3RpbWluZ19mb3BzID0gewogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBrdm1wcGNfZXhpdF90aW1pbmdfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaCBiL2FyY2gvcG93ZXJwYy9rdm0vdGltaW5nLmgKaW5kZXggYmIxM2IxZi4uODA2ZWY2NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS90aW1pbmcuaAorKysgYi9hcmNoL3Bvd2VycGMva3ZtL3RpbWluZy5oCkBAIC00OCw3ICs0OCwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19hY2NvdW50X2V4aXRfc3RhdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCB0eXBlKQogewogCS8qIHR5cGUgaGFzIHRvIGJlIGtub3duIGF0IGJ1aWxkIHRpbWUgZm9yIG9wdGltaXphdGlvbiAqLworCisJLyogVGhlIEJVSUxEX0JVR19PTiBiZWxvdyBicmVha3MgaW4gZnVubnkgd2F5cywgY29tbWVudGVkIG91dAorCSAqIGZvciBub3cgLi4uIC1CZW5ICiAJQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHR5cGUpKTsKKwkqLwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgRVhUX0lOVFJfRVhJVFM6CiAJCXZjcHUtPnN0YXQuZXh0X2ludHJfZXhpdHMrKzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCBjMmY5M2RjLi5iZTRmMzRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC0yNSw4ICsyNSw4IEBACiAgKiAgICAgYWxzbyBjbGVhciBtbS0+Y3B1X3ZtX21hc2sgYml0cyB3aGVuIHByb2Nlc3NlcyBhcmUgbWlncmF0ZWQKICAqLwogCi0jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQotI2RlZmluZSBERUJVR19DTEFNUF9MQVNUX0NPTlRFWFQgICAzMQorLy8jZGVmaW5lIERFQlVHX01BUF9DT05TSVNURU5DWQorLy8jZGVmaW5lIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVCAgIDMxCiAvLyNkZWZpbmUgREVCVUdfSEFSREVSCiAKIC8qIFdlIGRvbid0IHVzZSBERUJVRyBiZWNhdXNlIGl0IHRlbmRzIHRvIGJlIGNvbXBpbGVkIGluIGFsd2F5cyBub3dhZGF5cwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKaW5kZXggODNmMTU1MS4uNTMwNDA5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogCisjaW5jbHVkZSAibW11X2RlY2wuaCIKKwogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTE2Niw3ICsxNjgsNyBAQAogICogc3VwcG9ydCBmYWxscyBpbnRvIHRoZSBzYW1lIGNhdGVnb3J5LgogICovCiAKLXN0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUpCitzdGF0aWMgcHRlX3Qgc2V0X3B0ZV9maWx0ZXIocHRlX3QgcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcHRlID0gX19wdGUocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hQVEVGTEFHUyk7CiAJaWYgKHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJiAhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKQEAgLTE3NSw2ICsxNzcsMTcgQEAKIAkJaWYgKCFwZykKIAkJCXJldHVybiBwdGU7CiAJCWlmICghdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKSkgeworI2lmZGVmIENPTkZJR184eHgKKwkJCS8qIE9uIDh4eCwgY2FjaGUgY29udHJvbCBpbnN0cnVjdGlvbnMgKHBhcnRpY3VsYXJseQorCQkJICogImRjYnN0IiBmcm9tIGZsdXNoX2RjYWNoZV9pY2FjaGUpIGZhdWx0IGFzIHdyaXRlCisJCQkgKiBvcGVyYXRpb24gaWYgdGhlcmUgaXMgYW4gdW5wb3B1bGF0ZWQgVExCIGVudHJ5CisJCQkgKiBmb3IgdGhlIGFkZHJlc3MgaW4gcXVlc3Rpb24uIFRvIHdvcmthcm91bmQgdGhhdCwKKwkJCSAqIHdlIGludmFsaWRhdGUgdGhlIFRMQiBoZXJlLCB0aHVzIGF2b2lkaW5nIGRjYnN0CisJCQkgKiBtaXNiZWhhdmlvdXIuCisJCQkgKi8KKwkJCS8qIDh4eCBkb2Vzbid0IGNhcmUgYWJvdXQgUElELCBzaXplIG9yIGluZCBhcmdzICovCisJCQlfdGxiaWxfdmEoYWRkciwgMCwgMCwgMCk7CisjZW5kaWYgLyogQ09ORklHXzh4eCAqLwogCQkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBnKTsKIAkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGctPmZsYWdzKTsKIAkJfQpAQCAtMTk0LDcgKzIwNyw3IEBACiAgKiBhcyB3ZSBkb24ndCBoYXZlIHR3byBiaXRzIHRvIHNwYXJlIGZvciBfUEFHRV9FWEVDIGFuZCBfUEFHRV9IV0VYRUMgc28KICAqIGluc3RlYWQgd2UgImZpbHRlciBvdXQiIHRoZSBleGVjIHBlcm1pc3Npb24gZm9yIG5vbiBjbGVhbiBwYWdlcy4KICAqLwotc3RhdGljIHB0ZV90IHNldF9wdGVfZmlsdGVyKHB0ZV90IHB0ZSkKK3N0YXRpYyBwdGVfdCBzZXRfcHRlX2ZpbHRlcihwdGVfdCBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgcGFnZSAqcGc7CiAKQEAgLTI3Niw3ICsyODksNyBAQAogCSAqIHRoaXMgY29udGV4dCBtaWdodCBub3QgaGF2ZSBiZWVuIGFjdGl2YXRlZCB5ZXQgd2hlbiB0aGlzCiAJICogaXMgY2FsbGVkLgogCSAqLwotCXB0ZSA9IHNldF9wdGVfZmlsdGVyKHB0ZSk7CisJcHRlID0gc2V0X3B0ZV9maWx0ZXIocHRlLCBhZGRyKTsKIAogCS8qIFBlcmZvcm0gdGhlIHNldHRpbmcgb2YgdGhlIFBURSAqLwogCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMgYi9hcmNoL3Bvd2VycGMvbW0vc2xiX2xvdy5TCmluZGV4IGJjNDRkYzQuLjk1Y2UzNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGJfbG93LlMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsYl9sb3cuUwpAQCAtNzIsMTkgKzcyLDE3IEBACiAxOgogI2VuZGlmIC8qIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUCAqLwogCi0JLyogdm1hbGxvYy9pb3JlbWFwIG1hcHBpbmcgZW5jb2RpbmcgYml0cywgdGhlICJsaSIgaW5zdHJ1Y3Rpb25zIGJlbG93Ci0JICogd2lsbCBiZSBwYXRjaGVkIGJ5IHRoZSBrZXJuZWwgYXQgYm9vdAorCS8qIHZtYWxsb2MgbWFwcGluZyBnZXRzIHRoZSBlbmNvZGluZyBmcm9tIHRoZSBQQUNBIGFzIHRoZSBtYXBwaW5nCisJICogY2FuIGJlIGRlbW90ZWQgZnJvbSA2NEsgLT4gNEsgZHluYW1pY2FsbHkgb24gc29tZSBtYWNoaW5lcwogCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQkvKiBjaGVjayB3aGV0aGVyIHRoaXMgaXMgaW4gdm1hbGxvYyBvciBpb3JlbWFwIHNwYWNlICovCiAJY2xybGRpCXIxMSxyMTAsNDgKIAljbXBsZGkJcjExLChWTUFMTE9DX1NJWkUgPj4gMjgpIC0gMQogCWJndAk1ZgogCWxoeglyMTEsUEFDQVZNQUxMT0NTTExQKHIxMykKIAliCTZmCiA1OgotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKLV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCisJLyogSU8gbWFwcGluZyAqLworCV9HTE9CQUwoc2xiX21pc3Nfa2VybmVsX2xvYWRfaW8pCiAJbGkJcjExLDAKIDY6CiBCRUdJTl9GVFJfU0VDVElPTgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3RsYl9sb3dfNjRlLlMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwppbmRleCBlZjFjY2NmLi5mMjg4Mjc5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUworKysgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2xvd182NGUuUwpAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9leGNlcHRpb24tNjRlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBjMzFlNWI1Li5kNDViZTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwpAQCAtNTEsNiArNTEsOCBAQAogLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLwogc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKIAkiaW50ZXJjb250cm9sLGRpZ3N5LW10YyIsCisJIm1hbnJvbGFuZCxtdWNtYzUyIiwKKwkibWFucm9sYW5kLHVjMTAxIiwKIAkicGh5dGVjLHBjbTAzMCIsCiAJInBoeXRlYyxwY20wMzIiLAogCSJwcm9tZXNzLG1vdGlvbnBybyIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L2VwODI0OGUuYwppbmRleCA1MWZjYWU0Li5mOWFlZTE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvZXA4MjQ4ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9lcDgyNDhlLmMKQEAgLTEzMiwxMiArMTMyLDI1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJYnVzLT5pcnEgPSBrbWFsbG9jKHNpemVvZihpbnQpICogUEhZX01BWF9BRERSLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVzLT5pcnEgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2J1czsKKwl9CiAKIAlidXMtPm5hbWUgPSAiZXA4MjQ4ZS1tZGlvLWJpdGJhbmciOwogCWJ1cy0+cGFyZW50ID0gJm9mZGV2LT5kZXY7CiAJc25wcmludGYoYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXgiLCByZXMuc3RhcnQpOwogCi0JcmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBvZmRldi0+bm9kZSk7CisJcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihidXMsIG9mZGV2LT5ub2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9mcmVlX2lycTsKKworCXJldHVybiAwOworZXJyX2ZyZWVfaXJxOgorCWtmcmVlKGJ1cy0+aXJxKTsKK2Vycl9mcmVlX2J1czoKKwlmcmVlX21kaW9fYml0YmFuZyhidXMpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZXA4MjQ4ZV9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9heG9uX21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKaW5kZXggYWNhNTc0MS4uYTg2YzM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2F4b25fbXNpLmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJheG9uX21zaTogY291bGRuJ3QgcGFyc2UgZGNyIHByb3BlcnRpZXMgb24gJXNcbiIsCiAJCQlkbi0+ZnVsbF9uYW1lKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfbXNpYzsKIAl9CiAKIAltc2ljLT5kY3JfaG9zdCA9IGRjcl9tYXAoZG4sIGRjcl9iYXNlLCBkY3JfbGVuKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvYmVhdF9pb21tdS5jCmluZGV4IDkzYjBlZmQuLjM5ZDM2MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9iZWF0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2JlYXRfaW9tbXUuYwpAQCAtNzcsNyArNzcsNyBAQAogc3RhdGljIHZvaWQgY2VsbGViX2RtYV9kZXZfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2KQogewogCWRldi0+YXJjaGRhdGEuZG1hX29wcyA9IGdldF9wY2lfZG1hX29wcygpOwotCWRldi0+YXJjaGRhdGEuZG1hX2RhdGEgPSAodm9pZCAqKWNlbGxlYl9kbWFfZGlyZWN0X29mZnNldDsKKwlzZXRfZG1hX29mZnNldChkZXYsIGNlbGxlYl9kbWFfZGlyZWN0X29mZnNldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNlbGxlYl9wY2lfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggNDE2ZGIxNy4uY2E1YmZkZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTY1NywxNSArNjU3LDEzIEBACiAKIHN0YXRpYyB2b2lkIGNlbGxfZG1hX2Rldl9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9hcmNoZGF0YSAqYXJjaGRhdGEgPSAmZGV2LT5hcmNoZGF0YTsKLQogCS8qIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlLCB0aGVzZSBhcmUgbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSAqLwogCWlmIChnZXRfZG1hX29wcyhkZXYpID09ICZkbWFfaW9tbXVfZml4ZWRfb3BzKQogCQljZWxsX2RtYV9kZXZfc2V0dXBfZml4ZWQoZGV2KTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2lvbW11X29wcykKLQkJYXJjaGRhdGEtPmRtYV9kYXRhID0gY2VsbF9nZXRfaW9tbXVfdGFibGUoZGV2KTsKKwkJc2V0X2lvbW11X3RhYmxlX2Jhc2UoZGV2LCBjZWxsX2dldF9pb21tdV90YWJsZShkZXYpKTsKIAllbHNlIGlmIChnZXRfcGNpX2RtYV9vcHMoKSA9PSAmZG1hX2RpcmVjdF9vcHMpCi0JCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopY2VsbF9kbWFfZGlyZWN0X29mZnNldDsKKwkJc2V0X2RtYV9vZmZzZXQoZGV2LCBjZWxsX2RtYV9kaXJlY3Rfb2Zmc2V0KTsKIAllbHNlCiAJCUJVRygpOwogfQpAQCAtOTczLDExICs5NzEsMTAgQEAKIAogc3RhdGljIHZvaWQgY2VsbF9kbWFfZGV2X3NldHVwX2ZpeGVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X2FyY2hkYXRhICphcmNoZGF0YSA9ICZkZXYtPmFyY2hkYXRhOwogCXU2NCBhZGRyOwogCiAJYWRkciA9IGNlbGxfaW9tbXVfZ2V0X2ZpeGVkX2FkZHJlc3MoZGV2KSArIGRtYV9pb21tdV9maXhlZF9iYXNlOwotCWFyY2hkYXRhLT5kbWFfZGF0YSA9ICh2b2lkICopYWRkcjsKKwlzZXRfZG1hX29mZnNldChkZXYsIGFkZHIpOwogCiAJZGV2X2RiZyhkZXYsICJpb21tdTogZml4ZWQgYWRkciA9ICVsbHhcbiIsIGFkZHIpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggOGYwNzliOC4uODg0ZThiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzcHVmc19hdHRyX29wZW4oaW5vZGUsIGZpbGUsIF9fZ2V0LCBfX3NldCwgX19mbXQpOwlcCiB9CQkJCQkJCQkJXAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBfX2ZvcHMgPSB7CQkJCVwKIAkub3duZXIJID0gVEhJU19NT0RVTEUsCQkJCQkJXAogCS5vcGVuCSA9IF9fZm9wcyAjIyBfb3BlbiwJCQkJCVwKIAkucmVsZWFzZSA9IHNwdWZzX2F0dHJfcmVsZWFzZSwJCQkJCVwKQEAgLTMwOSw3ICszMDksNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWVtX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX21lbV9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX21lbV9tbWFwX2ZhdWx0LAogCS5hY2Nlc3MgPSBzcHVmc19tZW1fbW1hcF9hY2Nlc3MsCiB9OwpAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIHNwdWZzX3BzX2ZhdWx0KHZtYSwgdm1mLCAweDQwMDAsIFNQVUZTX0NOVExfTUFQX1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX2NudGxfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfY250bF9tbWFwX3Ztb3BzID0gewogCS5mYXVsdCA9IHNwdWZzX2NudGxfbW1hcF9mYXVsdCwKIH07CiAKQEAgLTExNDMsNyArMTE0Myw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwxX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwdWZzX3NpZ25hbDFfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19zaWduYWwxX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfc2lnbmFsMl9tbWFwX3Ztb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19zaWduYWwyX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfc2lnbmFsMl9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTM5Nyw3ICsxMzk3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MDAwMCwgU1BVRlNfTVNTX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tc3NfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbXNzX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbXNzX21tYXBfZmF1bHQsCiB9OwogCkBAIC0xNDU4LDcgKzE0NTgsNyBAQAogCXJldHVybiBzcHVmc19wc19mYXVsdCh2bWEsIHZtZiwgMHgwMDAwLCBTUFVGU19QU19NQVBfU0laRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfcHNtYXBfbW1hcF92bW9wcyA9IHsKIAkuZmF1bHQgPSBzcHVmc19wc21hcF9tbWFwX2ZhdWx0LAogfTsKIApAQCAtMTUxNyw3ICsxNTE3LDcgQEAKIAlyZXR1cm4gc3B1ZnNfcHNfZmF1bHQodm1hLCB2bWYsIDB4MzAwMCwgU1BVRlNfTUZDX01BUF9TSVpFKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzcHVmc19tZmNfbW1hcF92bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3B1ZnNfbWZjX21tYXBfdm1vcHMgPSB7CiAJLmZhdWx0ID0gc3B1ZnNfbWZjX21tYXBfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvTWFrZWZpbGUKaW5kZXggY2M3MTYxZi4uY2UwMTQ5MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9NYWtlZmlsZQpAQCAtMSwxOCArMSw5IEBACiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYwogCi1leHRyYS15ICs9IGR0Lm8KLQogb2JqLXkgKz0gZXhjZXB0aW9uLm8KLW9iai15ICs9IGh2bG9nLm8gaHZscGNvbmZpZy5vIGxwYXJkYXRhLm8gc2V0dXAubyBkdF9tb2QubyBtZi5vIGxwZXZlbnRzLm8gXAorb2JqLXkgKz0gaHZsb2cubyBodmxwY29uZmlnLm8gbHBhcmRhdGEubyBzZXR1cC5vIGR0Lm8gbWYubyBscGV2ZW50cy5vIFwKIAlodmNhbGwubyBwcm9jLm8gaHRhYi5vIGlvbW11Lm8gbWlzYy5vIGlycS5vCiBvYmotJChDT05GSUdfUENJKSArPSBwY2kubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc21wLm8KIG9iai0kKENPTkZJR19WSU9QQVRIKSArPSB2aW9wYXRoLm8gdmlvLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrc3ltcy5vCi0KLXF1aWV0X2NtZF9kdF9zdHJpbmdzID0gRFRfU1RSICAkQAotICAgICAgY21kX2R0X3N0cmluZ3MgPSAkKE9CSkNPUFkpIC0tcmVuYW1lLXNlY3Rpb24gLnJvZGF0YS5zdHIxLjg9LmR0X3N0cmluZ3MgXAotCQkJCSQ8ICRACi0KLSQob2JqKS9kdF9tb2QubzoJJChvYmopL2R0Lm8KLQkkKGNhbGwgaWZfY2hhbmdlZCxkdF9zdHJpbmdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwppbmRleCBjNWE4N2E3Li43ZjQ1YTUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZHQuYwpAQCAtNTEsMTEgKzUxLDE2IEBACiAKIC8qCiAgKiBUaGVzZSBhcmUgY3JlYXRlZCBieSB0aGUgbGlua2VyIHNjcmlwdCBhdCB0aGUgc3RhcnQgYW5kIGVuZAotICogb2YgdGhlIHNlY3Rpb24gY29udGFpbmluZyBhbGwgdGhlIHN0cmluZ3MgZnJvbSB0aGlzIGZpbGUuCisgKiBvZiB0aGUgc2VjdGlvbiBjb250YWluaW5nIGFsbCB0aGUgc3RyaW5ncyBtYXJrZWQgd2l0aCB0aGUgRFMgbWFjcm8uCiAgKi8KIGV4dGVybiBjaGFyIF9fZHRfc3RyaW5nc19zdGFydFtdOwogZXh0ZXJuIGNoYXIgX19kdF9zdHJpbmdzX2VuZFtdOwogCisjZGVmaW5lIERTKHMpCSh7CVwKKwlzdGF0aWMgY29uc3QgY2hhciBfX3NbXSBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIuZHRfc3RyaW5ncyIpKSkgPSBzOyBcCisJX19zOwkJXAorfSkKKwogc3RydWN0IGlzZXJpZXNfZmxhdF9kdCB7CiAJc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyIGhlYWRlcjsKIAl1NjQgcmVzZXJ2ZV9tYXBbMl07CkBAIC02NCw5ICs2OSw4IEBACiBzdGF0aWMgdm9pZCAqIF9faW5pdGRhdGEgZHRfZGF0YTsKIAogLyoKLSAqIFB1dHRpbmcgdGhlc2Ugc3RyaW5ncyBoZXJlIGtlZXBzIHRoZW0gb3V0IG9mIHRoZSBzZWN0aW9uCi0gKiB0aGF0IHdlIHJlbmFtZSB0byAuZHRfc3RyaW5ncyB1c2luZyBvYmpjb3B5IGFuZCBjYXB0dXJlCi0gKiBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgorICogUHV0dGluZyB0aGVzZSBzdHJpbmdzIGhlcmUga2VlcHMgdGhlbSBvdXQgb2YgdGhlIC5kdF9zdHJpbmdzIHNlY3Rpb24KKyAqIHRoYXQgd2UgY2FwdHVyZSBmb3IgdGhlIHN0cmluZ3MgYmxvYiBvZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlLgogICovCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX2NwdVtdID0gImNwdSI7CiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX21lbW9yeVtdID0gIm1lbW9yeSI7CkBAIC0xNzMsNyArMTc3LDcgQEAKIAogI2RlZmluZSBkdF9lbmRfbm9kZShkdCkgZHRfcHVzaF91MzIoZHQsIE9GX0RUX0VORF9OT0RFKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZHRfcHJvcChzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3Aoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CkBAIC0xOTEsNDQgKzE5NSwzMiBAQAogCS8qIFRoZSBhY3R1YWwgZGF0YS4gKi8KIAlkdF9wdXNoX2J5dGVzKGR0LCBkYXRhLCBsZW4pOwogfQorI2RlZmluZSBkdF9wcm9wKGR0LCBuYW1lLCBkYXRhLCBsZW4pCV9fZHRfcHJvcCgoZHQpLCBEUyhuYW1lKSwgKGRhdGEpLCAobGVuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3Bfc3RyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAotCQljb25zdCBjaGFyICpkYXRhKQotewotCWR0X3Byb3AoZHQsIG5hbWUsIGRhdGEsIHN0cmxlbihkYXRhKSArIDEpOyAvKiArIDEgZm9yIE5VTEwgKi8KLX0KKyNkZWZpbmUgZHRfcHJvcF9zdHIoZHQsIG5hbWUsIGRhdGEpCVwKKwlkdF9wcm9wKChkdCksIG5hbWUsIChkYXRhKSwgc3RybGVuKChkYXRhKSkgKyAxKTsgLyogKyAxIGZvciBOVUxMICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBkdF9wcm9wX3UzMihzdHJ1Y3QgaXNlcmllc19mbGF0X2R0ICpkdCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyB2b2lkIF9faW5pdCBfX2R0X3Byb3BfdTMyKHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCBjb25zdCBjaGFyICpuYW1lLAogCQl1MzIgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHUzMikpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1MzIpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91MzIoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91MzIoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IF9fbWF5YmVfdW51c2VkIGR0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAotCQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCQl1NjQgZGF0YSkKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21heWJlX3VudXNlZCBfX2R0X3Byb3BfdTY0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LAorCQljb25zdCBjaGFyICpuYW1lLCB1NjQgZGF0YSkKIHsKLQlkdF9wcm9wKGR0LCBuYW1lLCAmZGF0YSwgc2l6ZW9mKHU2NCkpOworCV9fZHRfcHJvcChkdCwgbmFtZSwgJmRhdGEsIHNpemVvZih1NjQpKTsKIH0KKyNkZWZpbmUgZHRfcHJvcF91NjQoZHQsIG5hbWUsIGRhdGEpCV9fZHRfcHJvcF91NjQoKGR0KSwgRFMobmFtZSksIChkYXRhKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTY0X2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHU2NCAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHU2NCkgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91NjRfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTY0KSAqIChuKSkKIAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfdTMyX2xpc3Qoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsCi0JCWNvbnN0IGNoYXIgKm5hbWUsIHUzMiAqZGF0YSwgaW50IG4pCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgZGF0YSwgc2l6ZW9mKHUzMikgKiBuKTsKLX0KKyNkZWZpbmUgZHRfcHJvcF91MzJfbGlzdChkdCwgbmFtZSwgZGF0YSwgbikJXAorCWR0X3Byb3AoKGR0KSwgbmFtZSwgKGRhdGEpLCBzaXplb2YodTMyKSAqIChuKSkKIAotI2lmZGVmIG5vdHlldAotc3RhdGljIHZvaWQgX19pbml0IGR0X3Byb3BfZW1wdHkoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JZHRfcHJvcChkdCwgbmFtZSwgTlVMTCwgMCk7Ci19Ci0jZW5kaWYKKyNkZWZpbmUgZHRfcHJvcF9lbXB0eShkdCwgbmFtZSkJCWR0X3Byb3AoKGR0KSwgbmFtZSwgTlVMTCwgMCkKIAogc3RhdGljIHZvaWQgX19pbml0IGR0X2NwdXMoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCmluZGV4IDZjMWUxMDEuLjlkNTNjYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJcGRuLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCAtMSk7CiAJZWxzZQogCQlrZnJlZSh0YmwpOwotCXBkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IHBkbi0+aW9tbXVfdGFibGU7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJnBkZXYtPmRldiwgcGRuLT5pb21tdV90YWJsZSk7CiB9CiAjZWxzZQogI2RlZmluZSBwY2lfZG1hX2Rldl9zZXR1cF9pc2VyaWVzCU5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9pb21tdS5jCmluZGV4IGEwZmYwM2EuLjdiMWQ2MDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvaW9tbXUuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogI2VuZGlmCiAKLQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9ICZpb21tdV90YWJsZV9pb2JtYXA7CisJc2V0X2lvbW11X3RhYmxlX2Jhc2UoJmRldi0+ZGV2LCAmaW9tbXVfdGFibGVfaW9ibWFwKTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2J1cyAqYikgeyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbG93X2kyYy5jCmluZGV4IDIxMjI2YjcuLjQxNGNhOTg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwpAQCAtNTQwLDggKzU0MCwxMSBAQAogCS8qIE1ha2Ugc3VyZSBJUlEgaXMgZGlzYWJsZWQgKi8KIAlrd193cml0ZV9yZWcocmVnX2llciwgMCk7CiAKLQkvKiBSZXF1ZXN0IGNoaXAgaW50ZXJydXB0ICovCi0JaWYgKHJlcXVlc3RfaXJxKGhvc3QtPmlycSwga3dfaTJjX2lycSwgMCwgImtleXdlc3QgaTJjIiwgaG9zdCkpCisJLyogUmVxdWVzdCBjaGlwIGludGVycnVwdC4gV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndAorCSAqIHdhbnQgdGhhdCBpbnRlcnJ1cHQgZGlzYWJsZWQgYmV0d2VlbiB0aGUgMiBwYXNzZXMgb2YgZHJpdmVyCisJICogc3VzcGVuZCBvciB3ZSdsbCBoYXZlIGlzc3VlcyBydW5uaW5nIHRoZSBwZnVuY3MKKwkgKi8KKwlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBrd19pMmNfaXJxLCBJUlFGX1RJTUVSLCAia2V5d2VzdCBpMmMiLCBob3N0KSkKIAkJaG9zdC0+aXJxID0gTk9fSVJROwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiS2V5V2VzdCBpMmMgQDB4JTA4eCBpcnEgJWQgJXNcbiIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKaW5kZXggYWI2OTkyNS4uOTM3YTU0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2R0bC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJcmV0dXJuIG5fcmVhZCAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdGxfZm9wcyA9IHsKIAkub3BlbgkJPSBkdGxfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZHRsX2ZpbGVfcmVsZWFzZSwKIAkucmVhZAkJPSBkdGxfZmlsZV9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwppbmRleCA1YTcwN2RhLi4wYTE0ZDhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYwpAQCAtNTEsMTEgKzUxLDEwIEBACiAJe0ZXX0ZFQVRVUkVfVklPLAkJImhjYWxsLXZpbyJ9LAogCXtGV19GRUFUVVJFX1JETUEsCQkiaGNhbGwtcmRtYSJ9LAogCXtGV19GRUFUVVJFX0xMQU4sCQkiaGNhbGwtbExBTiJ9LAotCXtGV19GRUFUVVJFX0JVTEssCQkiaGNhbGwtYnVsayJ9LAorCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogCXtGV19GRUFUVVJFX1hEQUJSLAkJImhjYWxsLXhkYWJyIn0sCiAJe0ZXX0ZFQVRVUkVfTVVMVElUQ0UsCQkiaGNhbGwtbXVsdGktdGNlIn0sCiAJe0ZXX0ZFQVRVUkVfU1BMUEFSLAkJImhjYWxsLXNwbHBhciJ9LAotCXtGV19GRUFUVVJFX0JVTEtfUkVNT1ZFLAkiaGNhbGwtYnVsayJ9LAogfTsKIAogLyogQnVpbGQgdXAgdGhlIGZpcm13YXJlIGZlYXR1cmVzIGJpdG1hc2sgdXNpbmcgdGhlIGNvbnRlbnRzIG9mCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IDY2MWM4ZTAuLjFhMDAwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC00ODIsNyArNDgyLDcgQEAKIAkJCQkgICBwaGItPm5vZGUpOwogCQlpb21tdV90YWJsZV9zZXRwYXJtcyhwaGIsIGRuLCB0YmwpOwogCQlQQ0lfRE4oZG4pLT5pb21tdV90YWJsZSA9IGlvbW11X2luaXRfdGFibGUodGJsLCBwaGItPm5vZGUpOwotCQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IFBDSV9ETihkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihkbiktPmlvbW11X3RhYmxlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCWRuID0gZG4tPnBhcmVudDsKIAogCWlmIChkbiAmJiBQQ0lfRE4oZG4pKQotCQlkZXYtPmRldi5hcmNoZGF0YS5kbWFfZGF0YSA9IFBDSV9ETihkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihkbiktPmlvbW11X3RhYmxlKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlvbW11OiBEZXZpY2UgJXMgaGFzIG5vIGlvbW11IHRhYmxlXG4iLAogCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CkBAIC01MzgsNyArNTM4LDcgQEAKIAkgKi8KIAlpZiAoZG1hX3dpbmRvdyA9PSBOVUxMIHx8IHBkbi0+cGFyZW50ID09IE5VTEwpIHsKIAkJcHJfZGVidWcoIiAgbm8gZG1hIHdpbmRvdyBmb3IgZGV2aWNlLCBsaW5raW5nIHRvIHBhcmVudFxuIik7Ci0JCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gUENJX0ROKHBkbiktPmlvbW11X3RhYmxlOworCQlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIFBDSV9ETihwZG4pLT5pb21tdV90YWJsZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogCQlwcl9kZWJ1ZygiICBmb3VuZCBETUEgd2luZG93LCB0YWJsZTogJXBcbiIsIHBjaS0+aW9tbXVfdGFibGUpOwogCX0KIAotCWRldi0+ZGV2LmFyY2hkYXRhLmRtYV9kYXRhID0gcGNpLT5pb21tdV90YWJsZTsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsIHBjaS0+aW9tbXVfdGFibGUpOwogfQogI2Vsc2UgIC8qIENPTkZJR19QQ0kgKi8KICNkZWZpbmUgcGNpX2RtYV9idXNfc2V0dXBfcFNlcmllcwlOVUxMCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKaW5kZXggYmYyZTFhYy4uMTE2NGMzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYwpAQCAtNDMyLDggKzQzMiw2IEBACiAJCS8qIFJlYWQgY29uZmlnIHNwYWNlIGJhY2sgc28gd2UgY2FuIHJlc3RvcmUgYWZ0ZXIgcmVzZXQgKi8KIAkJcmVhZF9tc2lfbXNnKHZpcnEsICZtc2cpOwogCQllbnRyeS0+bXNnID0gbXNnOwotCi0JCXVubWFza19tc2lfaXJxKHZpcnEpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNDE5ZjhhNi4uYjliZjBlZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CkBAIC0yMTksNiArMjIwLDE0IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGljc19zdGFydHVwKHVuc2lnbmVkIGludCB2aXJxKQogeworCS8qCisJICogVGhlIGdlbmVyaWMgTVNJIGNvZGUgcmV0dXJucyB3aXRoIHRoZSBpbnRlcnJ1cHQgZGlzYWJsZWQgb24gdGhlCisJICogY2FyZCwgdXNpbmcgdGhlIE1TSSBtYXNrIGJpdHMuIEZpcm13YXJlIGRvZXNuJ3QgYXBwZWFyIHRvIHVubWFzaworCSAqIGF0IHRoYXQgbGV2ZWwsIHNvIHdlIGRvIGl0IGhlcmUgYnkgaGFuZC4KKwkgKi8KKwlpZiAoaXJxX3RvX2Rlc2ModmlycSktPm1zaV9kZXNjKQorCQl1bm1hc2tfbXNpX2lycSh2aXJxKTsKKwogCS8qIHVubWFzayBpdCAqLwogCXhpY3NfdW5tYXNrX2lycSh2aXJxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9yZWxvY3NfY2hlY2sucGwgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQyNTcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcmVsb2NzX2NoZWNrLnBsCkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCDCqSAyMDA5IElCTSBDb3Jwb3JhdGlvbgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisjIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBzY3JpcHQgY2hlY2tzIHRoZSByZWxjb2F0aW9ucyBvZiBhIHZtbGludXggZm9yICJzdXNwaWNpb3VzIgorIyByZWxvY2F0aW9ucy4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKworaWYgKCQjQVJHViAhPSAxKSB7CisJZGllICIkMCBbcGF0aCB0byBvYmpkdW1wXSBbcGF0aCB0byB2bWxpbnV4XVxuIjsKK30KKworIyBIYXZlIEtidWlsZCBzdXBwbHkgdGhlIHBhdGggdG8gb2JqZHVtcCBzbyB3ZSBoYW5kbGUgY3Jvc3MgY29tcGlsYXRpb24uCitteSAkb2JqZHVtcCA9IHNoaWZ0OworbXkgJHZtbGludXggPSBzaGlmdDsKK215ICRiYWRfcmVsb2NzX2NvdW50ID0gMDsKK215ICRiYWRfcmVsb2NzID0gIiI7CitteSAkb2xkX2JpbnV0aWxzID0gMDsKKworb3BlbihGRCwgIiRvYmpkdW1wIC1SICR2bWxpbnV4fCIpIG9yIGRpZTsKK3doaWxlICg8RkQ+KSB7CisJc3R1ZHkgJF87CisKKwkjIE9ubHkgbG9vayBhdCByZWxjb2F0aW9uIGxpbmVzLgorCW5leHQgaWYgKCEvXHMrUl8vKTsKKworCSMgVGhlc2UgcmVsb2NhdGlvbnMgYXJlIG9rYXkKKwluZXh0IGlmICgvUl9QUEM2NF9SRUxBVElWRS8gb3IgL1JfUFBDNjRfTk9ORS8gb3IKKwkgICAgICAgICAvUl9QUEM2NF9BRERSNjRccyttYWNoXy8pOworCisJIyBJZiB3ZSBzZWUgdGhpcyB0eXBlIG9mIHJlbGNvYXRpb24gaXQncyBhbiBpZGljYXRpb24gdGhhdAorCSMgd2UgL21heS8gYmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgYmludXRpbHMuCisJaWYgKC9SX1BQQzY0X1VBRERSNjQvKSB7CisJCSRvbGRfYmludXRpbHMrKzsKKwl9CisKKwkkYmFkX3JlbG9jc19jb3VudCsrOworCSRiYWRfcmVsb2NzIC49ICRfOworfQorCitpZiAoJGJhZF9yZWxvY3NfY291bnQpIHsKKwlwcmludCAiV0FSTklORzogJGJhZF9yZWxvY3NfY291bnQgYmFkIHJlbG9jYXRpb25zXG4iOworCXByaW50ICRiYWRfcmVsb2NzOworfQorCitpZiAoJG9sZF9iaW51dGlscykgeworCXByaW50ICJXQVJOSU5HOiBZb3UgbmVlZCBhdCBiaW51dGlscyA+PSAyLjE5IHRvIGJ1aWxkIGEgIi4KKwkgICAgICAiQ09ORklHX1JFTENPQVRBQkxFIGtlcm5lbFxuIjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggODk2MzllYy4uYWUzYzRkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCS8qIFdlIG9ubHkgaGF2ZSBvbmUgaW9tbXUgdGFibGUgb24gdGhlIG1hYyBmb3Igbm93LCB3aGljaCBtYWtlcwogCSAqIHRoaW5ncyBzaW1wbGUuIFNldHVwIGFsbCBQQ0kgZGV2aWNlcyB0byBwb2ludCB0byB0aGlzIHRhYmxlCiAJICovCi0JZGV2LT5kZXYuYXJjaGRhdGEuZG1hX2RhdGEgPSAmaW9tbXVfdGFibGVfZGFydDsKKwlzZXRfaW9tbXVfdGFibGVfYmFzZSgmZGV2LT5kZXYsICZpb21tdV90YWJsZV9kYXJ0KTsKIH0KIAogc3RhdGljIHZvaWQgcGNpX2RtYV9idXNfc2V0dXBfZGFydChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDBlMDlhNDUuLmJkYmU5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTMzNSw2ICszMzUsMTYgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW5saW5lIGludCB1bnJlY292ZXJhYmxlX2V4Y3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHXzR4eAorCS8qIFdlIGhhdmUgbm8gTVNSX1JJIGJpdCBvbiA0eHgsIHNvIHdlIHNpbXBseSByZXR1cm4gZmFsc2UgKi8KKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuICgocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IHhtb25fY29yZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGZyb21pcGkpCiB7CiAJaW50IGNtZCA9IDA7CkBAIC0zODgsNyArMzk4LDcgQEAKIAlicCA9IE5VTEw7CiAJaWYgKChyZWdzLT5tc3IgJiAoTVNSX0lSfE1TUl9QUnxNU1JfU0YpKSA9PSAoTVNSX0lSfE1TUl9TRikpCiAJCWJwID0gYXRfYnJlYWtwb2ludChyZWdzLT5uaXApOwotCWlmIChicCB8fCAocmVncy0+bXNyICYgTVNSX1JJKSA9PSAwKQorCWlmIChicCB8fCB1bnJlY292ZXJhYmxlX2V4Y3AocmVncykpCiAJCWZyb21pcGkgPSAwOwogCiAJaWYgKCFmcm9taXBpKSB7CkBAIC0zOTksNyArNDA5LDcgQEAKIAkJCSAgICAgICBjcHUsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbGVhc2Vfb3V0cHV0X2xvY2soKTsKQEAgLTQ5MCw3ICs1MDAsNyBAQAogCQkJcHJpbnRmKCJTdG9wcGVkIGF0IGJyZWFrcG9pbnQgJXggKCIsIEJQX05VTShicCkpOwogCQkJeG1vbl9wcmludF9zeW1ib2wocmVncy0+bmlwLCAiICIsICIpXG4iKTsKIAkJfQotCQlpZiAoKHJlZ3MtPm1zciAmIE1TUl9SSSkgPT0gMCkKKwkJaWYgKHVucmVjb3ZlcmFibGVfZXhjcChyZWdzKSkKIAkJCXByaW50ZigiV0FSTklORzogZXhjZXB0aW9uIGlzIG5vdCByZWNvdmVyYWJsZSwgIgogCQkJICAgICAgICJjYW4ndCBjb250aW51ZVxuIik7CiAJCXJlbW92ZV9icHRzKCk7CkBAIC01MDcsNiArNTE3LDE1IEBACiAJaW5feG1vbiA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CT09LRQorCWlmIChyZWdzLT5tc3IgJiBNU1JfREUpIHsKKwkJYnAgPSBhdF9icmVha3BvaW50KHJlZ3MtPm5pcCk7CisJCWlmIChicCAhPSBOVUxMKSB7CisJCQlyZWdzLT5uaXAgPSAodW5zaWduZWQgbG9uZykgJmJwLT5pbnN0clswXTsKKwkJCWF0b21pY19pbmMoJmJwLT5yZWZfY291bnQpOworCQl9CisJfQorI2Vsc2UKIAlpZiAoKHJlZ3MtPm1zciAmIChNU1JfSVJ8TVNSX1BSfE1TUl9TRikpID09IChNU1JfSVJ8TVNSX1NGKSkgewogCQlicCA9IGF0X2JyZWFrcG9pbnQocmVncy0+bmlwKTsKIAkJaWYgKGJwICE9IE5VTEwpIHsKQEAgLTUyMCw3ICs1MzksNyBAQAogCQkJfQogCQl9CiAJfQotCisjZW5kaWYKIAlpbnNlcnRfY3B1X2JwdHMoKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTg4NCw2ICs5MDMsMTQgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQk9PS0UKK3N0YXRpYyBpbnQgZG9fc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZWdzLT5tc3IgfD0gTVNSX0RFOworCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOworCXJldHVybiAxOworfQorI2Vsc2UKIC8qCiAgKiBTdGVwIGEgc2luZ2xlIGluc3RydWN0aW9uLgogICogU29tZSBpbnN0cnVjdGlvbnMgd2UgZW11bGF0ZSwgb3RoZXJzIHdlIGV4ZWN1dGUgd2l0aCBNU1JfU0Ugc2V0LgpAQCAtOTE0LDYgKzk0MSw3IEBACiAJcmVncy0+bXNyIHw9IE1TUl9TRTsKIAlyZXR1cm4gMTsKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBib290Y21kcyh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggNzA0ZGQzOS4uNzdkZjcyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAkJfQogCQlpZiAoZGlhZzIwNCgodW5zaWduZWQgbG9uZylTVUJDX1NUSUI2IHwKIAkJCSAgICAodW5zaWduZWQgbG9uZylJTkZPX0VYVCwgcGFnZXMsIGJ1ZikgPj0gMCkgewotCQkJZGlhZzIwNF9zdG9yZV9zYyA9IFNVQkNfU1RJQjc7CisJCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNjsKIAkJCWRpYWcyMDRfaW5mb190eXBlID0gSU5GT19FWFQ7CiAJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHV0aW1lLmgKaW5kZXggMjRiMTI0NC4uZjIzOTYxYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdXRpbWUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1dGltZS5oCkBAIC03OCw3ICs3OCw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogY3B1dGltZV90b19tc2Vjcyhjb25zdCBjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMCk7CisJcmV0dXJuIGNwdXRpbWVfZGl2KGNwdXRpbWUsIDQwOTYwMDApOwogfQogCiBzdGF0aWMgaW5saW5lIGNwdXRpbWVfdApAQCAtMTYwLDcgKzE2MCw3IEBACiBzdGF0aWMgaW5saW5lIGNsb2NrX3QKIGNwdXRpbWVfdG9fY2xvY2tfdChjcHV0aW1lX3QgY3B1dGltZSkKIHsKLQlyZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworCXJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZV90CkBAIC0xNzUsNyArMTc1LDcgQEAKIHN0YXRpYyBpbmxpbmUgY2xvY2tfdAogY3B1dGltZTY0X3RvX2Nsb2NrX3QoY3B1dGltZTY0X3QgY3B1dGltZSkKIHsKLSAgICAgICByZXR1cm4gX19kaXYoY3B1dGltZSwgNDA5NjAwMDAwMFVMTCAvIFVTRVJfSFopOworICAgICAgIHJldHVybiBjcHV0aW1lX2RpdihjcHV0aW1lLCA0MDk2MDAwMDAwVUxMIC8gVVNFUl9IWik7CiB9CiAKIHN0cnVjdCBzMzkwX2lkbGVfZGF0YSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGVsYXkuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCmluZGV4IGEzNTZjOTUuLjhhMDk2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kZWxheS5oCkBAIC0xNCwxMCArMTQsMTEgQEAKICNpZm5kZWYgX1MzOTBfREVMQVlfSAogI2RlZmluZSBfUzM5MF9ERUxBWV9ICiAKLWV4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpOwotZXh0ZXJuIHZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKTsKK2V4dGVybiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CitleHRlcm4gdm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2Vjcyk7CiBleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOwogCi0jZGVmaW5lIHVkZWxheShuKSBfX3VkZWxheShuKQorI2RlZmluZSB1ZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pKQorI2RlZmluZSBtZGVsYXkobikgX191ZGVsYXkoKHVuc2lnbmVkIGxvbmcgbG9uZykgKG4pICogMTAwMCkKIAogI2VuZGlmIC8qIGRlZmluZWQoX1MzOTBfREVMQVlfSCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA3NGQwYmJiLi5lODg1NDQyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC05Miw2ICs5MiwxOCBAQAogLyogS2VlcCB0aGlzIHRoZSBsYXN0IGVudHJ5LiAgKi8KICNkZWZpbmUgUl8zOTBfTlVNCTYxCiAKKy8qIEJpdHMgcHJlc2VudCBpbiBBVF9IV0NBUC4gKi8KKyNkZWZpbmUgSFdDQVBfUzM5MF9FU0FOMwkxCisjZGVmaW5lIEhXQ0FQX1MzOTBfWkFSQ0gJMgorI2RlZmluZSBIV0NBUF9TMzkwX1NURkxFCTQKKyNkZWZpbmUgSFdDQVBfUzM5MF9NU0EJCTgKKyNkZWZpbmUgSFdDQVBfUzM5MF9MRElTUAkxNgorI2RlZmluZSBIV0NBUF9TMzkwX0VJTU0JCTMyCisjZGVmaW5lIEhXQ0FQX1MzOTBfREZQCQk2NAorI2RlZmluZSBIV0NBUF9TMzkwX0hQQUdFCTEyOAorI2RlZmluZSBIV0NBUF9TMzkwX0VURjNFSAkyNTYKKyNkZWZpbmUgSFdDQVBfUzM5MF9ISUdIX0dQUlMJNTEyCisKIC8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDUzOTI2M2YuLjk1ZGNmMTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTMxMSw2ICszMTEsMTAgQEAKIAlfX3UzMgkJb3JpZ19ncHIyOwogfSBzMzkwX2NvbXBhdF9yZWdzOwogCit0eXBlZGVmIHN0cnVjdAoreworCV9fdTMyCQlncHJzX2hpZ2hbTlVNX0dQUlNdOworfSBzMzkwX2NvbXBhdF9yZWdzX2hpZ2g7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91Y29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKaW5kZXggZDY5YmVjMC4uY2ZiODc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKQEAgLTksNiArOSwyMSBAQAogI2lmbmRlZiBfQVNNX1MzOTBfVUNPTlRFWFRfSAogI2RlZmluZSBfQVNNX1MzOTBfVUNPTlRFWFRfSAogCisjZGVmaW5lIFVDX0VYVEVOREVECTB4MDAwMDAwMDEKKworI2lmbmRlZiBfX3MzOTB4X18KKworc3RydWN0IHVjb250ZXh0X2V4dGVuZGVkIHsKKwl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CisJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKKwlzdGFja190CQkgIHVjX3N0YWNrOworCV9zaWdyZWdzCSAgdWNfbWNvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkgIHVjX3NpZ21hc2tbMl07CisJdW5zaWduZWQgbG9uZwkgIHVjX2dwcnNfaGlnaFsxNl07Cit9OworCisjZW5kaWYKKwogc3RydWN0IHVjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CiAJc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3NpZ25hbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKaW5kZXggYjUzN2NiMC4uZWVlOTk5OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfc2lnbmFsLmMKQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3Qgc2lnY29udGV4dDMyIHNjOwogCV9zaWdyZWdzMzIgc3JlZ3M7CiAJaW50IHNpZ25vOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiAJX191OCByZXRjb2RlW1MzOTBfU1lTQ0FMTF9TSVpFXTsKIH0gc2lnZnJhbWUzMjsKIApAQCAtNDgsNiArNDksNyBAQAogCV9fdTggcmV0Y29kZVtTMzkwX1NZU0NBTExfU0laRV07CiAJY29tcGF0X3NpZ2luZm9fdCBpbmZvOwogCXN0cnVjdCB1Y29udGV4dDMyIHVjOworCV9fdTMyIGdwcnNfaGlnaFtOVU1fR1BSU107CiB9IHJ0X3NpZ2ZyYW1lMzI7CiAKIGludCBjb3B5X3NpZ2luZm9fdG9fdXNlcjMyKGNvbXBhdF9zaWdpbmZvX3QgX191c2VyICp0bywgc2lnaW5mb190ICpmcm9tKQpAQCAtMzQ0LDYgKzM0NiwzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhdmVfc2lncmVnc19ncHJzX2hpZ2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIF9fdTMyIF9fdXNlciAqdXJlZ3MpCit7CisJX191MzIgZ3Byc19oaWdoW05VTV9HUFJTXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BSUzsgaSsrKQorCQlncHJzX2hpZ2hbaV0gPSByZWdzLT5ncHJzW2ldID4+IDMyOworCisJcmV0dXJuIF9fY29weV90b191c2VyKHVyZWdzLCAmZ3Byc19oaWdoLCBzaXplb2YoZ3Byc19oaWdoKSk7Cit9CisKK3N0YXRpYyBpbnQgcmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChzdHJ1Y3QgcHRfcmVncyAqcmVncywgX191MzIgX191c2VyICp1cmVncykKK3sKKwlfX3UzMiBncHJzX2hpZ2hbTlVNX0dQUlNdOworCWludCBlcnIsIGk7CisKKwllcnIgPSBfX2NvcHlfZnJvbV91c2VyKCZncHJzX2hpZ2gsIHVyZWdzLCBzaXplb2YoZ3Byc19oaWdoKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0dQUlM7IGkrKykKKwkJKihfX3UzMiAqKSZyZWdzLT5ncHJzW2ldID0gZ3Byc19oaWdoW2ldOworCXJldHVybiAwOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc2lncmV0dXJuKHZvaWQpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CkBAIC0zNjMsNiArMzg5LDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCXJldHVybiByZWdzLT5ncHJzWzJdOwogCkBAIC0zOTQsNiArNDIyLDggQEAKIAogCWlmIChyZXN0b3JlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KSkKIAkJZ290byBiYWRmcmFtZTsKKwlpZiAocmVzdG9yZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKSkKKwkJZ290byBiYWRmcmFtZTsKIAogCWVyciA9IF9fZ2V0X3VzZXIoc3Nfc3AsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc3ApOwogCXN0LnNzX3NwID0gY29tcGF0X3B0cihzc19zcCk7CkBAIC00NzQsNiArNTA0LDggQEAKIAogCWlmIChzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CisJaWYgKHNhdmVfc2lncmVnc19ncHJzX2hpZ2gocmVncywgZnJhbWUtPmdwcnNfaGlnaCkpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCWlmIChfX3B1dF91c2VyKCh1bnNpZ25lZCBsb25nKSAmZnJhbWUtPnNyZWdzLCAmZnJhbWUtPnNjLnNyZWdzKSkKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CiAKQEAgLTUyOSwxMyArNTYxLDE0IEBACiAJCWdvdG8gZ2l2ZV9zaWdzZWd2OwogCiAJLyogQ3JlYXRlIHRoZSB1Y29udGV4dC4gICovCi0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgJmZyYW1lLT51Yy51Y19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIoVUNfRVhURU5ERUQsICZmcmFtZS0+dWMudWNfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CiAJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NwKTsKIAllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+Z3Byc1sxNV0pLAogCSAgICAgICAgICAgICAgICAgICZmcmFtZS0+dWMudWNfc3RhY2suc3NfZmxhZ3MpOwogCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnQtPnNhc19zc19zaXplLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNzX3NpemUpOwogCWVyciB8PSBzYXZlX3NpZ3JlZ3MzMihyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0KTsKKwllcnIgfD0gc2F2ZV9zaWdyZWdzX2dwcnNfaGlnaChyZWdzLCBmcmFtZS0+Z3Byc19oaWdoKTsKIAllcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CiAJaWYgKGVycikKIAkJZ290byBnaXZlX3NpZ3NlZ3Y7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggNjgyZmI2OS4uY2JkOTkwMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJLmdsb2JsCXN5czMyX3RydW5jYXRlX3dyYXBwZXIKIHN5czMyX3RydW5jYXRlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCi0JbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZworCWxnZnIJJXIzLCVyMwkJCSMgbG9uZwogCWpnCXN5c190cnVuY2F0ZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAlzeXMzMl9mdHJ1bmNhdGVfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCmluZGV4IGJmOGI0YWUuLmU0OWU5ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkJZGlzYWJsZWRfd2FpdCgwKTsKIAogCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBUT0RfVU5JWF9FUE9DSDsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOwogfQogCiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKQEAgLTE2Nyw2ICsxNjgsMTQgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qIHJlLWluaXRpYWxpemUgY3B1dGltZSBhY2NvdW50aW5nLiAqLworCXNjaGVkX2Nsb2NrX2Jhc2VfY2MgPSBnZXRfY2xvY2soKTsKKwlTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgPSBzY2hlZF9jbG9ja19iYXNlX2NjOworCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKwlTMzkwX2xvd2NvcmUudXNlcl90aW1lciA9IDA7CisJUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciA9IDA7CisJYXNtIHZvbGF0aWxlKCJTUFQgMCglMCkiIDogOiAiYSIgKCZTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXIpKTsKKwogCS8qIHJlLXNldHVwIGJvb3QgY29tbWFuZCBsaW5lIHdpdGggbmV3IGlwbCB2bSBwYXJtcyAqLwogCWlwbF91cGRhdGVfcGFyYW1ldGVycygpOwogCXNldHVwX2Jvb3RfY29tbWFuZF9saW5lKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggZjQzZDJlZS4uNDgyMTVkMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtNTY1LDEwICs1NjUsMTAgQEAKIAlsaAklcjcsMHg4YQkJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0JbAklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg0LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsCSVyOCxfX1RJX3Rhc2soJXI5KQorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjgpLF9fTENfUEVSX0FUTUlECisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hZGRyZXNzKDQsJXI4KSxfX0xDX1BFUl9BRERSRVNTCisJbXZjCV9fVEhSRUFEX3BlcitfX1BFUl9hY2Nlc3NfaWQoMSwlcjgpLF9fTENfUEVSX0FDQ0VTU19JRAogCW9pCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfU0lOR0xFX1NURVAgIyBzZXQgVElGX1NJTkdMRV9TVEVQCiAJVFJBQ0VfSVJRU19PTgogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggYTZmN2IyMC4uOWFmZjFkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTU0MywxMCArNTQzLDEwIEBACiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCiAJbGxnaAklcjcsX19MQ19TVkNfSU5UX0NPREUJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKLQlsZwklcjEsX19USV90YXNrKCVyOSkKLQltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyMSksX19MQ19QRVJfQUREUkVTUwotCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKKwlsZwklcjgsX19USV90YXNrKCVyOSkKKwltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXI4KSxfX0xDX1BFUl9BVE1JRAorCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyOCksX19MQ19QRVJfQUREUkVTUworCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXI4KSxfX0xDX1BFUl9BQ0NFU1NfSUQKIAlvaQlfX1RJX2ZsYWdzKzcoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAogCVRSQUNFX0lSUVNfT04KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYwppbmRleCA1N2JkY2IxLi5mNWZlMzRkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKQEAgLTE4NSw5ICsxODUsNiBAQAogewogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50IHRyYWNlOwogCi0JLyogTm1pJ3MgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4gKi8KLQlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQotCQlnb3RvIG91dDsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKIAkJZ290byBvdXQ7CiAJaWYgKGZ0cmFjZV9wdXNoX3JldHVybl90cmFjZShwYXJlbnQsIGlwLCAmdHJhY2UuZGVwdGgsIDApID09IC1FQlVTWSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IGVlNTdhNDIuLjQ4OTBhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMTU5NSwxMCArMTU5NSw5IEBACiB7CiAJaWYgKHN0cmNtcCh0cmlnZ2VyLT5uYW1lLCBPTl9QQU5JQ19TVFIpID09IDApCiAJCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZWxzZSB7Ci0JCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApOwotCQlmb3IgKDs7KTsKLQl9CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CisJZm9yICg7Oyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHN0b3BfYWN0aW9uID0ge1NIVVRET1dOX0FDVElPTl9TVE9QX1NUUiwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCmluZGV4IGFiMmUzZWQuLjYzOTM4MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYwpAQCAtNTUsNiArNTUsOCBAQAogLyogRnJlZSBtZW1vcnkgcmV0dXJuZWQgZnJvbSBtb2R1bGVfYWxsb2MgKi8KIHZvaWQgbW9kdWxlX2ZyZWUoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKQogeworCXZmcmVlKG1vZC0+YXJjaC5zeW1pbmZvKTsKKwltb2QtPmFyY2guc3ltaW5mbyA9IE5VTEw7CiAJdmZyZWUobW9kdWxlX3JlZ2lvbik7CiB9CiAKQEAgLTQwMiw2ICs0MDQsNyBAQAogCQkgICAgc3RydWN0IG1vZHVsZSAqbWUpCiB7CiAJdmZyZWUobWUtPmFyY2guc3ltaW5mbyk7CisJbWUtPmFyY2guc3ltaW5mbyA9IE5VTEw7CiAJcmV0dXJuIG1vZHVsZV9idWdfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IDgwMmM4YWIuLjA3MjlmMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwpAQCAtMzEsOSArMzEsOSBAQAogCiBzdGF0aWMgaW50IHNob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmh3Y2FwX3N0cls5XSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzEwXSA9IHsKIAkJImVzYW4zIiwgInphcmNoIiwgInN0ZmxlIiwgIm1zYSIsICJsZGlzcCIsICJlaW1tIiwgImRmcCIsCi0JCSJlZGF0IiwgImV0ZjNlaCIKKwkJImVkYXQiLCAiZXRmM2VoIiwgImhpZ2hncHJzIgogCX07CiAJc3RydWN0IF9sb3djb3JlICpsYzsKIAl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CkBAIC00OCw3ICs0OCw3IEBACiAJCQkgICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAogCQkJICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpJTEwMCk7CiAJCXNlcV9wdXRzKG0sICJmZWF0dXJlc1x0OiAiKTsKLQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCiAJCQlpZiAoaHdjYXBfc3RyW2ldICYmIChlbGZfaHdjYXAgJiAoMVVMIDw8IGkpKSkKIAkJCQlzZXFfcHJpbnRmKG0sICIlcyAiLCBod2NhcF9zdHJbaV0pOwogCQlzZXFfcHV0cyhtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3MzOTAva2VybmVsL3B0cmFjZS5jCmluZGV4IGE4NzM4NjcuLjY1M2M2YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTcsNiArNTcsNyBAQAogZW51bSBzMzkwX3JlZ3NldCB7CiAJUkVHU0VUX0dFTkVSQUwsCiAJUkVHU0VUX0ZQLAorCVJFR1NFVF9HRU5FUkFMX0VYVEVOREVELAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTg3OSw2ICs4ODAsNjcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgczM5MF9jb21wYXRfcmVnc19oaWdoX2dldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCSAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJY29tcGF0X3Vsb25nX3QgKmdwcnNfaGlnaDsKKworCWdwcnNfaGlnaCA9IChjb21wYXRfdWxvbmdfdCAqKQorCQkmdGFza19wdF9yZWdzKHRhcmdldCktPmdwcnNbcG9zIC8gc2l6ZW9mKGNvbXBhdF91bG9uZ190KV07CisJaWYgKGtidWYpIHsKKwkJY29tcGF0X3Vsb25nX3QgKmsgPSBrYnVmOworCQl3aGlsZSAoY291bnQgPiAwKSB7CisJCQkqaysrID0gKmdwcnNfaGlnaDsKKwkJCWdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCprKTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbXBhdF91bG9uZ190IF9fdXNlciAqdSA9IHVidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCWlmIChfX3B1dF91c2VyKCpncHJzX2hpZ2gsIHUrKykpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqdSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczM5MF9jb21wYXRfcmVnc19oaWdoX3NldChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB1c2VyX3JlZ3NldCAqcmVnc2V0LAorCQkJCSAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAorCQkJCSAgICAgY29uc3Qgdm9pZCAqa2J1ZiwgY29uc3Qgdm9pZCBfX3VzZXIgKnVidWYpCit7CisJY29tcGF0X3Vsb25nX3QgKmdwcnNfaGlnaDsKKwlpbnQgcmMgPSAwOworCisJZ3Byc19oaWdoID0gKGNvbXBhdF91bG9uZ190ICopCisJCSZ0YXNrX3B0X3JlZ3ModGFyZ2V0KS0+Z3Byc1twb3MgLyBzaXplb2YoY29tcGF0X3Vsb25nX3QpXTsKKwlpZiAoa2J1ZikgeworCQljb25zdCBjb21wYXRfdWxvbmdfdCAqayA9IGtidWY7CisJCXdoaWxlIChjb3VudCA+IDApIHsKKwkJCSpncHJzX2hpZ2ggPSAqaysrOworCQkJKmdwcnNfaGlnaCArPSAyOworCQkJY291bnQgLT0gc2l6ZW9mKCprKTsKKwkJfQorCX0gZWxzZSB7CisJCWNvbnN0IGNvbXBhdF91bG9uZ190ICBfX3VzZXIgKnUgPSB1YnVmOworCQl3aGlsZSAoY291bnQgPiAwICYmICFyYykgeworCQkJdW5zaWduZWQgbG9uZyB3b3JkOworCQkJcmMgPSBfX2dldF91c2VyKHdvcmQsIHUrKyk7CisJCQlpZiAocmMpCisJCQkJYnJlYWs7CisJCQkqZ3Byc19oaWdoID0gd29yZDsKKwkJCSpncHJzX2hpZ2ggKz0gMjsKKwkJCWNvdW50IC09IHNpemVvZigqdSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXQgczM5MF9jb21wYXRfcmVnc2V0c1tdID0gewogCVtSRUdTRVRfR0VORVJBTF0gPSB7CiAJCS5jb3JlX25vdGVfdHlwZSA9IE5UX1BSU1RBVFVTLApAQCAtODk2LDYgKzk1OCwxNCBAQAogCQkuZ2V0ID0gczM5MF9mcHJlZ3NfZ2V0LAogCQkuc2V0ID0gczM5MF9mcHJlZ3Nfc2V0LAogCX0sCisJW1JFR1NFVF9HRU5FUkFMX0VYVEVOREVEXSA9IHsKKwkJLmNvcmVfbm90ZV90eXBlID0gTlRfUFJYU1RBVFVTLAorCQkubiA9IHNpemVvZihzMzkwX2NvbXBhdF9yZWdzX2hpZ2gpIC8gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuc2l6ZSA9IHNpemVvZihjb21wYXRfbG9uZ190KSwKKwkJLmFsaWduID0gc2l6ZW9mKGNvbXBhdF9sb25nX3QpLAorCQkuZ2V0ID0gczM5MF9jb21wYXRfcmVnc19oaWdoX2dldCwKKwkJLnNldCA9IHMzOTBfY29tcGF0X3JlZ3NfaGlnaF9zZXQsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNlcl9yZWdzZXRfdmlldyB1c2VyX3MzOTBfY29tcGF0X3ZpZXcgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggOWVkMTNhMS4uMDYxNDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzI5LDcgKzcyOSw3IEBACiAKIAlpZiAoKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIDIyKSkpCiAJICAgICYmIChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAzMCkpKSkKLQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA4OworCQllbGZfaHdjYXAgfD0gSFdDQVBfUzM5MF9FVEYzRUg7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhZGRpdGlvbmFsIGZhY2lsaXRpZXMgd2l0aCBzdG9yZS1mYWNpbGl0eS1saXN0LWV4dGVuZGVkLgpAQCAtNzQ4LDExICs3NDgsMjAgQEAKIAkgICAgX19zdGZsZSgmZmFjaWxpdHlfbGlzdF9leHRlbmRlZCwgMSkgPiAwKSB7CiAJCWlmICgoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQyKSkpCiAJCSAgICAmJiAoZmFjaWxpdHlfbGlzdF9leHRlbmRlZCAmICgxVUxMIDw8ICg2MyAtIDQ0KSkpKQotCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCA2OworCQkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfREZQOwogCX0KIAorCS8qCisJICogSHVnZSBwYWdlIHN1cHBvcnQgSFdDQVBfUzM5MF9IUEFHRSBpcyBiaXQgNy4KKwkgKi8KIAlpZiAoTUFDSElORV9IQVNfSFBBR0UpCi0JCWVsZl9od2NhcCB8PSAxVUwgPDwgNzsKKwkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSFBBR0U7CisKKwkvKgorCSAqIDY0LWJpdCByZWdpc3RlciBzdXBwb3J0IGZvciAzMS1iaXQgcHJvY2Vzc2VzCisJICogSFdDQVBfUzM5MF9ISUdIX0dQUlMgaXMgYml0IDkuCisJICovCisJZWxmX2h3Y2FwIHw9IEhXQ0FQX1MzOTBfSElHSF9HUFJTOwogCiAJc3dpdGNoIChTMzkwX2xvd2NvcmUuY3B1X2lkLm1hY2hpbmUpIHsKIAljYXNlIDB4OTY3MjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IGM5MzJjYWEuLjkzZTUyMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtNzYsNyArNzYsNiBAQAogCV9fdTMyIHN0YXR1czsKIAogCXN3aXRjaCAoc2lnbmFsX3Byb2Nlc3Nvcl9wcygmc3RhdHVzLCAwLCBjcHUsIHNpZ3Bfc2Vuc2UpKSB7Ci0JY2FzZSBzaWdwX29yZGVyX2NvZGVfYWNjZXB0ZWQ6CiAJY2FzZSBzaWdwX3N0YXR1c19zdG9yZWQ6CiAJCS8qIENoZWNrIGZvciBzdG9wcGVkIGFuZCBjaGVjayBzdG9wIHN0YXRlICovCiAJCWlmIChzdGF0dXMgJiAweDUwKQpAQCAtNjM4LDYgKzYzNyw4IEBACiAJLyogV2FpdCB1bnRpbCB0YXJnZXQgY3B1IGlzIGRvd24gKi8KIAl3aGlsZSAoIWNwdV9zdG9wcGVkKGNwdSkpCiAJCWNwdV9yZWxheCgpOworCXdoaWxlIChzaWduYWxfcHJvY2Vzc29yX3AoMCwgY3B1LCBzaWdwX3NldF9wcmVmaXgpID09IHNpZ3BfYnVzeSkKKwkJdWRlbGF5KDEwKTsKIAlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CiAJcHJfaW5mbygiUHJvY2Vzc29yICVkIHN0b3BwZWRcbiIsIGNwdSk7CiB9CkBAIC02NDUsOCArNjQ2LDggQEAKIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlkbGVfdGFza19leGl0KCk7Ci0Jc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0JQlVHKCk7CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJY3B1X3JlbGF4KCk7CiAJZm9yICg7Oyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3N3c3VzcF9hc202NC5TCmluZGV4IGZlOTI3ZDAuLjBjMjZjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3dzdXNwX2FzbTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zd3N1c3BfYXNtNjQuUwpAQCAtNDMsNyArNDMsNyBAQAogCWxnaGkJJXIxLDB4MTAwMAogCiAJLyogU2F2ZSBDUFUgYWRkcmVzcyAqLwotCXN0YXAJX19MQ19DUFVfQUREUkVTUyglcjEpCisJc3RhcAlfX0xDX0NQVV9BRERSRVNTKCVyMCkKIAogCS8qIFN0b3JlIHJlZ2lzdGVycyAqLwogCW12YwkweDMxOCg0LCVyMSksX19TRl9FTVBUWSglcjE1KQkvKiBtb3ZlIHByZWZpeCB0byBsb3djb3JlICovCkBAIC02OSw4ICs2OSwyMSBAQAogCXN0bWcJJXIwLCVyMTUsMHgyODAoJXIxKQkJLyogc3RvcmUgZ2VuZXJhbCByZWdpc3RlcnMgKi8KIAogCXN0cHQJMHgzMjgoJXIxKQkJCS8qIHN0b3JlIHRpbWVyICovCisJc3RjawlfX1NGX0VNUFRZKCVyMTUpCQkvKiBzdG9yZSBjbG9jayAqLwogCXN0Y2tjCTB4MzMwKCVyMSkJCQkvKiBzdG9yZSBjbG9jayBjb21wYXJhdG9yICovCiAKKwkvKiBVcGRhdGUgY3B1dGltZSBhY2NvdW50aW5nIGJlZm9yZSBnb2luZyB0byBzbGVlcCAqLworCWxnCSVyMCxfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCisJc2xnCSVyMCwweDMyOCglcjEpCisJYWxnCSVyMCxfX0xDX1NZU1RFTV9USU1FUgorCXN0ZwklcjAsX19MQ19TWVNURU1fVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9USU1FUig4KSwweDMyOCglcjEpCisJbGcJJXIwLF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sKKwlzbGcJJXIwLF9fU0ZfRU1QVFkoJXIxNSkKKwlhbGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwlzdGcJJXIwLF9fTENfU1RFQUxfVElNRVIKKwltdmMJX19MQ19MQVNUX1VQREFURV9DTE9DSyg4KSxfX1NGX0VNUFRZKCVyMTUpCisKIAkvKiBBY3RpdmF0ZSBEQVQgKi8KIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQKIApAQCAtMTU5LDggKzE3Miw3IEBACiAJbGFybAklcjEsLkxyZXN1bWVfY3B1CQkvKiBSZXN1bWUgQ1BVIGFkZHJlc3M6IHIyICovCiAJc3RhcAkwKCVyMSkKIAlsbGdoCSVyMiwwKCVyMSkKLQlsZ2hpCSVyMywweDEwMDAKLQlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMykJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KKwlsbGdoCSVyMSxfX0xDX0NQVV9BRERSRVNTKCVyMCkJLyogU3VzcGVuZCBDUFUgYWRkcmVzczogcjEgKi8KIAljZ3IJJXIxLCVyMgogCWplCXJlc3RvcmVfcmVnaXN0ZXJzCQkvKiByMSA9IHIyIC0+IG5vdGhpbmcgdG8gZG8gKi8KIAlsYXJsCSVyNCwuTHJlc3RhcnRfc3VzcGVuZF9wc3cJLyogU2V0IG5ldyByZXN0YXJ0IFBTVyAqLwpAQCAtMTg3LDYgKzE5OSw3IEBACiAJYnJjCTIsNGIJCQkvKiBidXN5LCB0cnkgYWdhaW4gKi8KIDU6CiAJc2lncAklcjksJXIyLF9fU0lHUF9TVE9QCS8qIHN0b3AgcmVzdW1lIChjdXJyZW50KSBDUFUgKi8KKwlicmMJMiw1YgkJCS8qIGJ1c3ksIHRyeSBhZ2FpbiAqLwogNjoJagk2YgogCiByZXN0YXJ0X3N1c3BlbmQ6CkBAIC0xOTQsMTQgKzIwNywxOCBAQAogCWxsZ2gJJXIyLDAoJXIxKQogNzoKIAlzaWdwCSVyOSwlcjIsX19TSUdQX1NFTlNFCS8qIFdhaXQgZm9yIHJlc3VtZSBDUFUgKi8KKwlicmMJOCw3YgkJCS8qIGFjY2VwdGVkLCBzdGF0dXMgMCwgc3RpbGwgcnVubmluZyAqLwogCWJyYwkyLDdiCQkJLyogYnVzeSwgdHJ5IGFnYWluICovCiAJdG1sbAklcjksMHg0MAkJLyogVGVzdCBpZiByZXN1bWUgQ1BVIGlzIHN0b3BwZWQgKi8KIAlqegk3YgogCiByZXN0b3JlX3JlZ2lzdGVyczoKIAkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotCWxnaGkJJXIxMywweDEwMDAJCS8qICVyMSA9IHBvaW50ZXIgdG8gc2F2ZSBhcmFlICovCisJbGdoaQklcjEzLDB4MTAwMAkJLyogJXIxID0gcG9pbnRlciB0byBzYXZlIGFyZWEgKi8KIAorCS8qIElnbm9yZSB0aW1lIHNwZW50IGluIHN1c3BlbmRlZCBzdGF0ZS4gKi8KKwlsbGdmCSVyMSwweDMxOCglcjEzKQorCXN0Y2sJX19MQ19MQVNUX1VQREFURV9DTE9DSyglcjEpCiAJc3B0CTB4MzI4KCVyMTMpCQkvKiByZXByb2dyYW0gdGltZXIgKi8KIAkvL3Nja2MJMHgzMzAoJXIxMykJCS8qIHNldCBjbG9jayBjb21wYXJhdG9yICovCiAKQEAgLTIyOSw5ICsyNDYsNiBAQAogCS8qIExvYWQgb2xkIHN0YWNrICovCiAJbGcJJXIxNSwweDJmOCglcjEzKQogCi0JLyogUG9pbnRlciB0byBzYXZlIGFyZWEgKi8KLQlsZ2hpCSVyMTMsMHgxMDAwCi0KIAkvKiBSZXN0b3JlIHByZWZpeCByZWdpc3RlciAqLwogCXNweAkweDMxOCglcjEzKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCmluZGV4IDQ1YTNlOWEuLmFkZmIzMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdmRzby5jCkBAIC0yNDcsNiArMjQ3LDEzIEBACiAJfQogCiAJLyoKKwkgKiBQdXQgdkRTTyBiYXNlIGludG8gbW0gc3RydWN0LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIGNhbGxpbmcKKwkgKiBpbnN0YWxsX3NwZWNpYWxfbWFwcGluZyBvciB0aGUgcGVyZiBjb3VudGVyIG1tYXAgdHJhY2tpbmcgY29kZQorCSAqIHdpbGwgZmFpbCB0byByZWNvZ25pc2UgaXQgYXMgYSB2RFNPIChzaW5jZSBhcmNoX3ZtYV9uYW1lIGZhaWxzKS4KKwkgKi8KKwljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvX2Jhc2UgPSB2ZHNvX2Jhc2U7CisKKwkvKgogCSAqIG91ciB2bWEgZmxhZ3MgZG9uJ3QgaGF2ZSBWTV9XUklURSBzbyBieSBkZWZhdWx0LCB0aGUgcHJvY2VzcwogCSAqIGlzbid0IGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UgcGFnZXMuCiAJICogZ2RiIGNhbiBicmVhayB0aGF0IHdpdGggcHRyYWNlIGludGVyZmFjZSwgYW5kIHRodXMgdHJpZ2dlciBDT1cKQEAgLTI2NywxNCArMjc0LDcgQEAKIAkJCQkgICAgIFZNX0FMV0FZU0RVTVAsCiAJCQkJICAgICB2ZHNvX3BhZ2VsaXN0KTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0X3VwOwotCi0JLyogUHV0IHZEU08gYmFzZSBpbnRvIG1tIHN0cnVjdCAqLwotCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IHZkc29fYmFzZTsKLQotCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCXJldHVybiAwOwotCisJCWN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc29fYmFzZSA9IDA7CiBvdXRfdXA6CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGJjMTVlZjkuLmE2OGFjMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTUxLDYgKzUxLDcgQEAKIAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwogCV9lc2hhcmVkID0gLjsJCS8qIEVuZCBvZiBzaGFyZWFibGUgZGF0YSAqLworCV9zZGF0YSA9IC47CQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KIAogCUVYQ0VQVElPTl9UQUJMRSgxNikgOmRhdGEKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IGVjNWVlZTcuLjA2Y2NlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAorKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTU4LDcgKzU4LDcgQEAKIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CiBpbnQga3ZtX3MzOTBfaW5qZWN0X3NpZ3Bfc3RvcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBhY3Rpb24pOwogCi1zdGF0aWMgaW5saW5lIGludCBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3N0YXRpYyBpbmxpbmUgbG9uZyBrdm1fczM5MF92Y3B1X2dldF9tZW1zaXplKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlyZXR1cm4gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc2xtCiAJCS0gdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggOTdjMWVjYTguLjc1MmIzNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTI1LDEzICsyNSwxMyBAQAogCWFzbSB2b2xhdGlsZSgiMDogYnJjdCAlMCwwYiIgOiA6ICJkIiAoKGxvb3BzLzIpICsgMSkpOwogfQogCi1zdGF0aWMgdm9pZCBfX3VkZWxheV9kaXNhYmxlZCh1bnNpZ25lZCBsb25nIHVzZWNzKQorc3RhdGljIHZvaWQgX191ZGVsYXlfZGlzYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzaywgY3IwLCBjcjBfc2F2ZWQ7CiAJdTY0IGNsb2NrX3NhdmVkOwogCiAJY2xvY2tfc2F2ZWQgPSBsb2NhbF90aWNrX2Rpc2FibGUoKTsKLQlzZXRfY2xvY2tfY29tcGFyYXRvcihnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMikpOworCXNldF9jbG9ja19jb21wYXJhdG9yKGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKSk7CiAJX19jdGxfc3RvcmUoY3IwX3NhdmVkLCAwLCAwKTsKIAljcjAgPSAoY3IwX3NhdmVkICYgMHhmZmZmMDBlMCkgfCAweDAwMDAwODAwOwogCV9fY3RsX2xvYWQoY3IwICwgMCwgMCk7CkBAIC00NiwyMCArNDYsMjUgQEAKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyB1c2VjcykKK3N0YXRpYyB2b2lkIF9fdWRlbGF5X2VuYWJsZWQodW5zaWduZWQgbG9uZyBsb25nIHVzZWNzKQogewogCXVuc2lnbmVkIGxvbmcgbWFzazsKLQl1NjQgZW5kLCB0aW1lOworCXU2NCBjbG9ja19zYXZlZDsKKwl1NjQgZW5kOwogCiAJbWFzayA9IHBzd19rZXJuZWxfYml0cyB8IFBTV19NQVNLX1dBSVQgfCBQU1dfTUFTS19FWFQgfCBQU1dfTUFTS19JTzsKLQllbmQgPSBnZXRfY2xvY2soKSArICgodTY0KSB1c2VjcyA8PCAxMik7CisJZW5kID0gZ2V0X2Nsb2NrKCkgKyAodXNlY3MgPDwgMTIpOwogCWRvIHsKLQkJdGltZSA9IGVuZCA8IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yID8KLQkJCWVuZCA6IFMzOTBfbG93Y29yZS5jbG9ja19jb21wYXJhdG9yOwotCQlzZXRfY2xvY2tfY29tcGFyYXRvcih0aW1lKTsKKwkJY2xvY2tfc2F2ZWQgPSAwOworCQlpZiAoZW5kIDwgUzM5MF9sb3djb3JlLmNsb2NrX2NvbXBhcmF0b3IpIHsKKwkJCWNsb2NrX3NhdmVkID0gbG9jYWxfdGlja19kaXNhYmxlKCk7CisJCQlzZXRfY2xvY2tfY29tcGFyYXRvcihlbmQpOworCQl9CiAJCXRyYWNlX2hhcmRpcnFzX29uKCk7CiAJCV9fbG9hZF9wc3dfbWFzayhtYXNrKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJaWYgKGNsb2NrX3NhdmVkKQorCQkJbG9jYWxfdGlja19lbmFibGUoY2xvY2tfc2F2ZWQpOwogCX0gd2hpbGUgKGdldF9jbG9jaygpIDwgZW5kKTsKIAlzZXRfY2xvY2tfY29tcGFyYXRvcihTMzkwX2xvd2NvcmUuY2xvY2tfY29tcGFyYXRvcik7CiB9CkBAIC02Nyw3ICs3Miw3IEBACiAvKgogICogV2FpdHMgZm9yICd1c2VjcycgbWljcm9zZWNvbmRzIHVzaW5nIHRoZSBUT0QgY2xvY2sgY29tcGFyYXRvci4KICAqLwotdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCBfX3VkZWxheSh1bnNpZ25lZCBsb25nIGxvbmcgdXNlY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTAxLDExICsxMDYsMTEgQEAKICAqIFNpbXBsZSB1ZGVsYXkgdmFyaWFudC4gVG8gYmUgdXNlZCBvbiBzdGFydHVwIGFuZCByZWJvb3QKICAqIHdoZW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGlzbid0IHdvcmtpbmcuCiAgKi8KLXZvaWQgdWRlbGF5X3NpbXBsZSh1bnNpZ25lZCBsb25nIHVzZWNzKQordm9pZCB1ZGVsYXlfc2ltcGxlKHVuc2lnbmVkIGxvbmcgbG9uZyB1c2VjcykKIHsKIAl1NjQgZW5kOwogCi0JZW5kID0gZ2V0X2Nsb2NrKCkgKyAoKHU2NCkgdXNlY3MgPDwgMTIpOworCWVuZCA9IGdldF9jbG9jaygpICsgKHVzZWNzIDw8IDEyKTsKIAl3aGlsZSAoZ2V0X2Nsb2NrKCkgPCBlbmQpCiAJCWNwdV9yZWxheCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwppbmRleCAzZjE1YWFmLi41OGRhM2Y0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwpAQCAtMzYsNyArMzYsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIGp6ICAgIDdmXG4iCisJCSI5OiBqeiAgICA3ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtNDcsNyArNDcsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDRmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUyKSwwKCUxKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMTA6IlNMUiIgICUwLCU0XG4iCiAJCSIgICJBTFIiICAlMiwlNFxuIgogCQkiNDoiTEhJIiAgJTQsLTFcbiIKIAkJIiAgIkFMUiIgICU0LCUwXG4iCS8qIGNvcHkgcmVtYWluaW5nIHNpemUsIHN1YnRyYWN0IDEgKi8KQEAgLTYxLDcgKzYxLDcgQEAKIAkJIiAgIGogICAgIDhmXG4iCiAJCSI3OiJTTFIiICAlMCwlMFxuIgogCQkiODogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw0YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDRiKSBFWF9UQUJMRSg5YiwyYikgRVhfVEFCTEUoMTBiLDRiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogImQiIChyZWcwKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTgyLDcgKzgyLDcgQEAKIAl0bXAxID0gLTQwOTZVTDsKIAlhc20gdm9sYXRpbGUoCiAJCSIwOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCUwLCUxKSwwKCUyKSwwXG4iCi0JCSIgICBqeiAgICA0ZlxuIgorCQkiNjoganogICAgNGZcbiIKIAkJIjE6IkFMUiIgICUwLCUzXG4iCiAJCSIgICJTTFIiICAlMSwlM1xuIgogCQkiICAiU0xSIiAgJTIsJTNcbiIKQEAgLTkzLDExICs5MywxMSBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSIzOiAuaW5zbiBzcywweGM4MDAwMDAwMDAwMCwwKCU0LCUxKSwwKCUyKSwwXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgorCQkiNzoiU0xSIiAgJTAsJTRcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSI0OiJTTFIiICAlMCwlMFxuIgogCQkiNTogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw1YikKKwkJRVhfVEFCTEUoMGIsMmIpIEVYX1RBQkxFKDNiLDViKSBFWF9UQUJMRSg2YiwyYikgRVhfVEFCTEUoN2IsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCmluZGV4IGQyZmZiYWQuLjA3ZGVhZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKQEAgLTM2LDEyICszNiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGp6ICAgIDhmXG4iCisJCSIxMDpqeiAgICA4ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiMTE6am56ICAgMWJcbiIKIAkJIiAgIGogICAgIDhmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iCS8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtNTAsNyArNTAsNyBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDVmXG4iCiAJCSI0OiBtdmNwICAwKCU0LCUyKSwwKCUxKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjEyOiJTTFIiICAlMCwlNFxuIgogCQkiICAiQUxSIiAgJTIsJTRcbiIKIAkJIjU6IkxISSIgICU0LC0xXG4iCiAJCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCkBAIC02NSw2ICs2NSw3IEBACiAJCSI4OiJTTFIiICAlMCwlMFxuIgogCQkiOTogXG4iCiAJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNWIpCisJCUVYX1RBQkxFKDEwYiwzYikgRVhfVEFCTEUoMTFiLDNiKSBFWF9UQUJMRSgxMmIsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTg1LDEyICs4NiwxMiBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIGp6ICAgIDVmXG4iCisJCSI3OiBqeiAgICA1ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3MgIDAoJTAsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICBqbnogICAxYlxuIgorCQkiODogam56ICAgMWJcbiIKIAkJIiAgIGogICAgIDVmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iIC8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgpAQCAtOTksMTEgKzEwMCwxMiBAQAogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KIAkJIiAgIGpuaCAgIDZmXG4iCiAJCSI0OiBtdmNzICAwKCU0LCUxKSwwKCUyKSwlM1xuIgotCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIjk6IlNMUiIgICUwLCU0XG4iCiAJCSIgICBqICAgICA2ZlxuIgogCQkiNToiU0xSIiAgJTAsJTBcbiIKIAkJIjY6IFxuIgogCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMmIsM2IpIEVYX1RBQkxFKDRiLDZiKQorCQlFWF9UQUJMRSg3YiwzYikgRVhfVEFCTEUoOGIsM2IpIEVYX1RBQkxFKDliLDZiKQogCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBjNjBiZmIzLi4yNzU3YzU2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTI3OSw3ICsyNzksMTAgQEAKIAkvKiBsZXRzIGNoZWNrIGlmIHdlIGFyZSBhbGxvd2VkIHRvIHJlcGxhY2UgdGhlIG1tICovCiAJdGFza19sb2NrKHRzayk7CiAJaWYgKCF0c2stPm1tIHx8IGF0b21pY19yZWFkKCZ0c2stPm1tLT5tbV91c2VycykgPiAxIHx8Ci0JICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0gfHwgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSkgeworI2lmZGVmIENPTkZJR19BSU8KKwkgICAgIWhsaXN0X2VtcHR5KCZ0c2stPm1tLT5pb2N0eF9saXN0KSB8fAorI2VuZGlmCisJICAgIHRzay0+bW0gIT0gdHNrLT5hY3RpdmVfbW0pIHsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjk1LDcgKzI5OCwxMCBAQAogCS8qIE5vdyBsZXRzIGNoZWNrIGFnYWluIGlmIHNvbWV0aGluZyBoYXBwZW5lZCAqLwogCXRhc2tfbG9jayh0c2spOwogCWlmICghdHNrLT5tbSB8fCBhdG9taWNfcmVhZCgmdHNrLT5tbS0+bW1fdXNlcnMpID4gMSB8fAotCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tIHx8ICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkpIHsKKyNpZmRlZiBDT05GSUdfQUlPCisJICAgICFobGlzdF9lbXB0eSgmdHNrLT5tbS0+aW9jdHhfbGlzdCkgfHwKKyNlbmRpZgorCSAgICB0c2stPm1tICE9IHRzay0+YWN0aXZlX21tKSB7CiAJCW1tcHV0KG1tKTsKIAkJdGFza191bmxvY2sodHNrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYjk0MDQyNC4uODhjZGViOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMzcsNyArMzcsNiBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCXNlbGVjdCBIQVZFX0ZUUkFDRV9TWVNDQUxMUwogCXNlbGVjdCBIQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlmIE1NVQpAQCAtMTIyLDYgKzEyMSw5IEBACiAJYm9vbAogCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAorY29uZmlnIFNZU19TVVBQT1JUU19IVUdFVExCRlMKKwlib29sCisKIGNvbmZpZyBTWVNfU1VQUE9SVFNfU01QCiAJYm9vbAogCkBAIC0xOTYsNiArMTk4LDcgQEAKIAlzZWxlY3QgQ1BVX0hBU19TUl9SQgogCXNlbGVjdCBDUFVfSEFTX0ZQVSBpZiAhQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfVE1VCisJc2VsZWN0IFNZU19TVVBQT1JUU19IVUdFVExCRlMgaWYgTU1VCiAKIGNvbmZpZyBDUFVfU0g0QQogCWJvb2wKQEAgLTIxMCw2ICsyMTMsNyBAQAogCWJvb2wKIAlzZWxlY3QgQ1BVX0hBU19GUFUKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1RNVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfSFVHRVRMQkZTIGlmIE1NVQogCiBjb25maWcgQ1BVX1NIWDIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3NoL01ha2VmaWxlIGIvYXJjaC9zaC9NYWtlZmlsZQppbmRleCBmYzUxYTkxLi42NmU0MGFhIDEwMDY0NAotLS0gYS9hcmNoL3NoL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvTWFrZWZpbGUKQEAgLTE5OSw3ICsxOTksNyBAQAogbGlicy0kKENPTkZJR19TVVBFUkgzMikJCTo9IGFyY2gvc2gvbGliLwkkKGxpYnMteSkKIGxpYnMtJChDT05GSUdfU1VQRVJINjQpCQk6PSBhcmNoL3NoL2xpYjY0LyAkKGxpYnMteSkKIAotQk9PVF9UQVJHRVRTID0gdUltYWdlIHVJbWFnZS5iejIgdUltYWdlLmd6IHVJbWFnZS5sem1hIHVJbWFnZS5zcmVjIFwKK0JPT1RfVEFSR0VUUyA9IHVJbWFnZSB1SW1hZ2UuYnoyIHVJbWFnZS5neiB1SW1hZ2UubHptYSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIFwKIAkgICAgICAgekltYWdlIHZtbGludXguc3JlYyByb21JbWFnZQogUEhPTlkgKz0gbWFrZXRvb2xzICQoQk9PVF9UQVJHRVRTKSBGT1JDRQogCkBAIC0yMjUsNiArMjI1LDcgQEAKIAlAZWNobyAnICB2bWxpbnV4LnNyZWMJICAgICAgICAgICAtIENyZWF0ZSBhbiBFTEYgUy1yZWNvcmQnCiAJQGVjaG8gJyogdUltYWdlICAJICAgICAgICAgICAtIEFsaWFzIHRvIGJvb3RhYmxlIFUtQm9vdCBpbWFnZScKIAlAZWNobyAnICB1SW1hZ2Uuc3JlYwkgICAgICAgICAgIC0gQ3JlYXRlIGFuIFMtcmVjb3JkIGZvciBVLUJvb3QnCisJQGVjaG8gJyAgdUltYWdlLmJpbgkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAoYmluKScKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1tYWdpY3BhbmVscjIuYyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCmluZGV4IDBhMzdjOGIuLjk5ZmZjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLW1hZ2ljcGFuZWxyMi5jCkBAIC0yMDUsOCArMjA1LDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG1wcjJfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBzZXQgUGluIFNlbGVjdCBSZWdpc3RlciBBOgogCSAqIC9QQ0NfQ0QxLCAvUENDX0NEMiwgIFBDQ19CVkQxLCBQQ0NfQlZEMiwKIAkgKiAvSU9JUzE2LCAgSVJRNCwJSVJRNSwJICBVU0IxZF9TVVNQRU5ECmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1kcmVhbWNhc3Qvc2V0dXAuYwppbmRleCBlYmU5OTIyLi5hNGI3NDAyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWRyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZHJlYW1jYXN0L3NldHVwLmMKQEAgLTQyLDggKzQyLDYgQEAKIAkvKiBBY2tub3dsZWRnZSBhbnkgcHJldmlvdXMgZXZlbnRzICovCiAJLyogWFhYICovCiAKLQlfX3NldF9pb19wb3J0X2Jhc2UoMHhhMDAwMDAwMCk7Ci0KIAkvKiBBc3NpZ24gYWxsIHZpcnR1YWwgSVJRcyB0byB0aGUgU3lzdGVtIEFTSUMgaW50LiBoYW5kbGVyICovCiAJZm9yIChpID0gSFdfRVZFTlRfSVJRX0JBU0U7IGkgPCBIV19FVkVOVF9JUlFfTUFYOyBpKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3lzdGVtYXNpY19pbnQsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggOTZiYzE2OS4uM2IxY2ViNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3RzYzIwMDcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPHZpZGVvL3NoX21vYmlsZV9sY2RjLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2hfbW9iaWxlX2NldS5oPgpAQCAtMzgsNiArMzksMjAgQEAKICAqICAweDE4MDBfMDAwMCAgTUZJICAgICAgICAgICAgICAxNmJpdAogICovCiAKKy8qIFNXSVRDSAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERTMlsxXSA9IEZsYXNoUk9NIHdyaXRlIHByb3RlY3QgIE9OICAgICA6IHdyaXRlIHByb3RlY3QKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IE5vIHdyaXRlIHByb3RlY3QKKyAqIERTMlsyXSA9IFJNSUkgLyBUUywgU0NJRiAgICAgICAgIE9OICAgICA6IFJNSUkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFRTLCBTQ0lGMworICogRFMyWzNdID0gQ2FtZXJhIC8gVmlkZW8gICAgICAgICAgT04gICAgIDogQ2FtZXJhCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYgICAgOiBOVFNDL1BBTCAoSU4pCisgKiBEUzJbNV0gPSBOVFNDX09VVCBDbG9jayAgICAgICAgICBPTiAgICAgOiBPbiBib2FyZCBPU0MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9GRiAgICA6IFNINzcyNCBEVl9DTEsKKyAqIERTMls2LTddID0gTU1DIC8gU0QgICAgICAgICAgICAgIE9OLU9GRiA6IFNECisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPRkYtT04gOiBNTUMKKyAqLworCiAvKiBIZWFydGJlYXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZF9wb3NbXSA9IHsgMCwgMSwgMiwgMyB9Owogc3RhdGljIHN0cnVjdCBoZWFydGJlYXRfZGF0YSBoZWFydGJlYXRfZGF0YSA9IHsKQEAgLTcwLDcgKzg1LDcgQEAKIAkJLm5hbWUgPSAiYm9vdCBsb2FkZXIiLAogCQkub2Zmc2V0ID0gMCwKIAkJLnNpemUgPSAoNSAqIDEwMjQgKiAxMDI0KSwKLQkJLm1hc2tfZmxhZ3MgPSBNVERfQ0FQX1JPTSwKKwkJLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCiAJfSwgewogCQkubmFtZSA9ICJmcmVlLWFyZWEiLAogCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5ELApAQCAtMTIxLDYgKzEzNiw3IEBACiBzdHJ1Y3Qgc2hfZXRoX3BsYXRfZGF0YSBzaF9ldGhfcGxhdCA9IHsKIAkucGh5ID0gMHgxZiwgLyogU01TQyBMQU44NzAwICovCiAJLmVkbWFjX2VuZGlhbiA9IEVETUFDX0xJVFRMRV9FTkRJQU4sCisJLmV0aGVyX2xpbmtfYWN0aXZlX2xvdyA9IDEKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNoX2V0aF9kZXZpY2UgPSB7CkBAIC0zNzUsNiArMzkxLDQzIEBACiAJfSwKIH07CiAKKy8qIFRvdWNoU2NyZWVuICovCisjZGVmaW5lIElSUTAgMzIKK3N0YXRpYyBpbnQgdHNfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlpbnQgdmFsID0gMDsKKwlncGlvX2ZyZWUoR1BJT19GTl9JTlRDX0lSUTApOworCWdwaW9fcmVxdWVzdChHUElPX1BUWjAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUFRaMCk7CisKKwl2YWwgPSBncGlvX2dldF92YWx1ZShHUElPX1BUWjApOworCisJZ3Bpb19mcmVlKEdQSU9fUFRaMCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKworCXJldHVybiB2YWwgPyAwIDogMTsKK30KKworc3RhdGljIGludCB0c19pbml0KHZvaWQpCit7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSU5UQ19JUlEwLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRzYzIwMDdfcGxhdGZvcm1fZGF0YSB0c2MyMDA3X2luZm8gPSB7CisJLm1vZGVsCQkJPSAyMDA3LAorCS54X3BsYXRlX29obXMJCT0gMTgwLAorCS5nZXRfcGVuZG93bl9zdGF0ZQk9IHRzX2dldF9wZW5kb3duX3N0YXRlLAorCS5pbml0X3BsYXRmb3JtX2h3CT0gdHNfaW5pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdHNfaTJjX2NsaWVudHMgPSB7CisJSTJDX0JPQVJEX0lORk8oInRzYzIwMDciLCAweDQ4KSwKKwkudHlwZQkJPSAidHNjMjAwNyIsCisJLnBsYXRmb3JtX2RhdGEJPSAmdHNjMjAwN19pbmZvLAorCS5pcnEJCT0gSVJRMCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplY292ZWNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmhlYXJ0YmVhdF9kZXZpY2UsCiAJJm5vcl9mbGFzaF9kZXZpY2UsCkBAIC00NTksNiArNTEyLDExIEBACiAjZGVmaW5lIElPRFJJVkVBICAweEE0MDUwMThBCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX3NldHVwKHZvaWQpCiB7CisJLyogZW5hYmxlIFNUQVRVUzAsIFNUQVRVUzIgYW5kIFBEU1RBVFVTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU1RBVFVTMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUERTVEFUVVMsIE5VTEwpOworCiAJLyogZW5hYmxlIFNDSUZBMCAqLwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUYwX1RYRCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRjBfUlhELCBOVUxMKTsKQEAgLTU4OSw2ICs2NDcsMTAgQEAKIAkJICovCiAJCWdwaW9fcmVxdWVzdChHUElPX1BURjQsIE5VTEwpOwogCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QVEY0LCAxKTsKKworCQkvKiBlbmFibGUgVG91Y2hTY3JlZW4gKi8KKwkJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnRzX2kyY19jbGllbnRzLCAxKTsKKwkJc2V0X2lycV90eXBlKElSUTAsIElSUV9UWVBFX0xFVkVMX0xPVyk7CiAJfQogCiAJLyogZW5hYmxlIENFVTAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwppbmRleCAyNWNkZjczNS4uNTI4MDEzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1sYW5kaXNrL2dpby5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbGFuZGlzay9naW8uYwpAQCAtMTQsNyArMTQsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0zNSw3ICszNCw3IEBACiAJaW50IG1pbm9yOwogCWludCByZXQgPSAtRU5PRU5UOwogCi0JbG9ja19rZXJuZWwoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAltaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOwogCWlmIChtaW5vciA8IERFVkNPVU5UKSB7CiAJCWlmIChvcGVuQ250ID4gMCkgewpAQCAtNDUsNyArNDQsNyBAQAogCQkJcmV0ID0gMDsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJcHJlZW1wdF9lbmFibGUoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MCw4ICs1OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2lvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGdpb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdW5zaWduZWQgaW50IGRhdGE7CiAJc3RhdGljIHVuc2lnbmVkIGludCBhZGRyID0gMDsKQEAgLTEyOSw3ICsxMjcsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gZ2lvX29wZW4sCS8qIG9wZW4gKi8KIAkucmVsZWFzZSA9IGdpb19jbG9zZSwJLyogcmVsZWFzZSAqLwotCS5pb2N0bCA9IGdpb19pb2N0bCwJLyogaW9jdGwgKi8KKwkudW5sb2NrZWRfaW9jdGwgPSBnaW9faW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBnaW9faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svZGV2aWNlcy1yc2s3MjAzLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwppbmRleCA0YWYzYTc3Li5jMzc2MTdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9kZXZpY2VzLXJzazcyMDMuYwpAQCAtMTEsMTAgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLXJzay9zZXR1cC5jCmluZGV4IGFmNjRkMDMuLmE1YzBkZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtcnNrL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1yc2svc2V0dXAuYwpAQCAtMTUsMTQgKzE1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpZmRlZiBDT05GSUdfTVRECiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByc2tfcGFydGl0aW9uc1tdID0gewogCXsKIAkJLm5hbWUJCT0gIkJvb3Rsb2FkZXIiLApAQCAtNDEsNiArMzksOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YSA9IHsKKwkucGFydHMJCT0gcnNrX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShyc2tfcGFydGl0aW9ucyksCiAJLndpZHRoCQk9IDIsCiB9OwogCkBAIC02MCw3ICs2MCw4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKmZsYXNoX210ZDsKKyNpZmRlZiBDT05GSUdfTVRECitzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAogc3RhdGljIHN0cnVjdCBtYXBfaW5mbyByc2tfZmxhc2hfbWFwID0gewogCS5uYW1lCQk9ICJSU0srIEZsYXNoIiwKQEAgLTY4LDYgKzY5LDEwIEBACiAJLmJhbmt3aWR0aAk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpmbGFzaF9tdGQ7CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRpdGlvbnM7CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkKIHsKIAlpbnQgbnJfcGFydHMgPSAwOwpAQCAtNzcsMTQgKzgyLDE0IEBACiAJbnJfcGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhmbGFzaF9tdGQsIHByb2JlcywKIAkJCQkJJnBhcnNlZF9wYXJ0aXRpb25zLCAwKTsKIAkvKiBJZiB0aGVyZSBpcyBubyBwYXJ0aXRpb24gdGFibGUsIHVzZWQgdGhlIGhhcmQgY29kZWQgdGFibGUgKi8KLQlpZiAobnJfcGFydHMgPD0gMCkgewotCQlmbGFzaF9kYXRhLnBhcnRzID0gcnNrX3BhcnRpdGlvbnM7Ci0JCWZsYXNoX2RhdGEubnJfcGFydHMgPSBBUlJBWV9TSVpFKHJza19wYXJ0aXRpb25zKTsKLQl9IGVsc2UgeworCWlmIChucl9wYXJ0cyA+IDApIHsKIAkJZmxhc2hfZGF0YS5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCQlmbGFzaF9kYXRhLnBhcnRzID0gcGFyc2VkX3BhcnRpdGlvbnM7CiAJfQogfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbXRkX3BhcnRpdGlvbnModm9pZCkge30KKyNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnNrX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZmbGFzaF9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCmluZGV4IDAwOTczZTAuLmU3OGMzYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzcyNC9zZXR1cC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CiAjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CisjaW5jbHVkZSA8c291bmQvc2hfZnNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hlYXJ0YmVhdC5oPgogI2luY2x1ZGUgPGFzbS9zaF9ldGguaD4KQEAgLTI1NSw2ICsyNTYsNjUgQEAKIAl9LAogfTsKIAorLyogRlNJICovCisvKgorICogRlNJLUEgdXNlIGV4dGVybmFsIGNsb2NrIHdoaWNoIGNhbWUgZnJvbSBhazQ2NHguCisgKiBTbywgd2Ugc2hvdWxkIGNoYW5nZSBwYXJlbnQgb2YgZnNpCisgKi8KKyNkZWZpbmUgRkNMS0FDUgkJMHhhNDE1MDAwOAorc3RhdGljIHZvaWQgZnNpbWNrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBzdGF0dXMgPSBjdHJsX2lubChjbGstPmVuYWJsZV9yZWcpOworCisJLyogdXNlIGV4dGVybmFsIGNsb2NrICovCisJc3RhdHVzICY9IH4weDAwMDAwMGZmOworCXN0YXR1cyB8PSAweDAwMDAwMDgwOworCWN0cmxfb3V0bChzdGF0dXMsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBmc2ltY2tfY2xrX29wcyA9IHsKKwkuaW5pdCA9IGZzaW1ja19pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnNpbWNrYV9jbGsgPSB7CisJLm5hbWUJCT0gImZzaW1ja2FfY2xrIiwKKwkuaWQJCT0gLTEsCisJLm9wcwkJPSAmZnNpbWNrX2Nsa19vcHMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRkNMS0FDUiwKKwkucmF0ZQkJPSAwLCAvKiB1bmtub3duICovCit9OworCitzdHJ1Y3Qgc2hfZnNpX3BsYXRmb3JtX2luZm8gZnNpX2luZm8gPSB7CisJLnBvcnRhX2ZsYWdzID0gU0hfRlNJX0JSU19JTlYgfAorCQkgICAgICAgU0hfRlNJX09VVF9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9JTl9TTEFWRV9NT0RFIHwKKwkJICAgICAgIFNIX0ZTSV9PRk1UKFBDTSkgfAorCQkgICAgICAgU0hfRlNJX0lGTVQoUENNKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZnNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiRlNJIiwKKwkJLnN0YXJ0CT0gMHhGRTNDMDAwMCwKKwkJLmVuZAk9IDB4RkUzQzAyMWQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMTA4LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZzaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2ZzaSIsCisJLmlkCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZzaV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGZzaV9yZXNvdXJjZXMsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZnNpX2luZm8sCisJfSwKK307CisKIC8qIEtFWVNDIGluIFNvQyAoTmVlZHMgU1czMy0yIHNldCB0byBPTikgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2hfa2V5c2NfaW5mbyBrZXlzY19pbmZvID0gewogCS5tb2RlID0gU0hfS0VZU0NfTU9ERV8xLApAQCAtMzk5LDYgKzQ1OSw3IEBACiAJJnNoX2V0aF9kZXZpY2UsCiAJJnNoNzcyNF91c2IwX2hvc3RfZGV2aWNlLAogCSZzaDc3MjRfdXNiMV9nYWRnZXRfZGV2aWNlLAorCSZmc2lfZGV2aWNlLAogfTsKIAogI2RlZmluZSBFRVBST01fT1AgICAweEJBMjA2MDAwCkBAIC00NjYsMTEgKzUyNywxMyBAQAogc3RhdGljIGludCBfX2luaXQgZGV2aWNlc19zZXR1cCh2b2lkKQogewogCXUxNiBzdyA9IGN0cmxfaW53KFNXNDE0MCk7IC8qIHNlbGVjdCBjYW1lcmEsIG1vbml0b3IgKi8KKwlzdHJ1Y3QgY2xrICpmc2lhX2NsazsKIAogCS8qIFJlc2V0IFJlbGVhc2UgKi8KIAljdHJsX291dHcoY3RybF9pbncoRlBHQV9PVVQpICYKIAkJICB+KCgxIDw8IDEpICB8IC8qIExBTiAqLwogCQkgICAgKDEgPDwgNikgIHwgLyogVklERU8gREFDICovCisJCSAgICAoMSA8PCA3KSAgfCAvKiBBSzQ2NDMgKi8KIAkJICAgICgxIDw8IDEyKSB8IC8qIFVTQjAgKi8KIAkJICAgICgxIDw8IDE0KSksIC8qIFJNSUkgKi8KIAkJICBGUEdBX09VVCk7CkBAIC02MDksNiArNjcyLDMyIEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgICAgIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0tFWU9VVDAsICAgICBOVUxMKTsKIAorCS8qIGVuYWJsZSBGU0kgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lNQ0tCLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lNQ0tBLCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQVNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQUJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQUxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQUJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQUxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0FPLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQlNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQlNELCAgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQkJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQkxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQkJDSywgICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lPQkxSQ0ssICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9DTEtBVURJT0JPLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9GU0lJQVNELCAgICBOVUxMKTsKKworCS8qIGNoYW5nZSBwYXJlbnQgb2YgRlNJIEEgKi8KKwlmc2lhX2NsayA9IGNsa19nZXQoTlVMTCwgImZzaWFfY2xrIik7CisJY2xrX3JlZ2lzdGVyKCZmc2ltY2thX2Nsayk7CisJY2xrX3NldF9wYXJlbnQoZnNpYV9jbGssICZmc2ltY2thX2Nsayk7CisJY2xrX3NldF9yYXRlKGZzaWFfY2xrLCAxMTAwMCk7CisJY2xrX3NldF9yYXRlKCZmc2ltY2thX2NsaywgMTEwMDApOworCWNsa19wdXQoZnNpYV9jbGspOworCiAJLyoKIAkgKiBlbmFibGUgU0gtRXRoCiAJICoKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQppbmRleCBhMTMxNjg3Li5jYjhjZjU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib290L01ha2VmaWxlCkBAIC0yMCwxMSArMjAsMTIgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUCT89IDB4MDAwMDEwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQJPz0gMHgwMDAwMTAwMAogCitzdWZmaXgteSA6PSBiaW4KIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfR1pJUCkgIDo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKSA6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkgIDo9IGx6bWEKIAotdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYQordGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hCiBzdWJkaXItIDo9IGNvbXByZXNzZWQgcm9taW1hZ2UKIApAQCAtODgsNiArODksOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLmJpbjogJChvYmopL3ZtbGludXguYmluCisJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLG5vbmUpCisKIE9CSkNPUFlGTEFHU192bWxpbnV4LnNyZWMgOj0gLUkgYmluYXJ5IC1PIHNyZWMKICQob2JqKS92bWxpbnV4LnNyZWM6ICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXgKIAkkKGNhbGwgaWZfY2hhbmdlZCxvYmpjb3B5KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKaW5kZXggNmMzOGE0My4uMmY3OGQwMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTY6MDQ6MTEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIEZyaSBTZXAgMjUgMTE6MjI6NTAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MSwxMSArNjAsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg4LDE4ICs5OCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTA3LDYgKzExOCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTksNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEzNSw3ICsxNTAsNyBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTY5LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjM9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTQzUsMzg0MDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIgogCiAjCkBAIC0zMTYsNyArMzM0LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjQsNiArMzg4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zOTMsNiArNDE4LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDAwLDcgKzQyNiw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMyw2ICs0MzgsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MjIsOSArNDQ4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODAsNiArNTA2LDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC01ODMsNyArNjEwLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYzNywxMiArNjYzLDEwIEBACiAjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAogIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcyNiw2ICs3NTAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzM2LDYgKzc2MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CkBAIC03NTcsOSArNzgzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC03ODAsNiArODAzLDExIEBACiAjCiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKQEAgLTgwNCwxMSArODMyLDE1IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjgsOCArODYwLDEyIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfU1VQUE9SVD15CiAKQEAgLTk1Nyw2ICs5OTMsOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NQST15CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC05OTIsNiArMTAzMCw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtMTAwMyw2ICsxMDQyLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEwNTYsOCArMTA5NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTExMjIsNyArMTE2NCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTEyMDIsNiArMTI0Myw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEyMTIsOCArMTI1NCwxMSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtMTIyMSw2ICsxMjY2LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTIzNCw3ICsxMjgwLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xMjc1LDExICsxMzIwLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzNDEsNSArMTM4OCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9kcmVhbWNhc3RfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKaW5kZXggOTU3MTdhMC4uYWVkYmQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyNDo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxNzo1NjowNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjksNyArMzAsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQwLDYgKzQzLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NiwxOSArOTYsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDgsNiArMTE5LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMCw3ICsxMzUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY3LDYgKzE4Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxOCw2ICsyMzQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMjIsNyArMzM5LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHBhbmljPTMiCiAKICMKQEAgLTM5NSw2ICs0MTMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQyNCw2ICs0NDMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MzEsNyArNDUxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ0LDYgKzQ2Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTYsNyArNTE2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNTYxLDEwICs1ODUsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYwNSwxMyArNjI2LDE0IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfTUFQTEU9eQorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNjc1LDExICs2OTcsMTUgQEAKIENPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MTYsNiArNzQyLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC04MDcsNyArODM0LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTg2MSw4ICs4ODcsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtOTIyLDcgKzk1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtOTQ5LDYgKzk3Niw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NTgsOCArOTg2LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtOTY3LDYgKzk5OCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTk4MCw3ICsxMDEyLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEwMTIsMTEgKzEwNDMsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTA3OSw1ICsxMTEyLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNC1yb21pbWFnZV9kZWZjb25maWcKaW5kZXggOWEyMmM2NC4uMDc3NDkyNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2Vjb3ZlYzI0LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjQtcm9taW1hZ2VfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNwotIyBUdWUgU2VwICA4IDEzOjU2OjE4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU2OjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTU5LDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNzksMTUgKzgwLDkgQEAKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfSU5JVFJBTUZTX1JPT1RfVUlEPTAKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9HSUQ9MAogQ09ORklHX1JEX0daSVA9eQogIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAogIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0daSVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0JaSVAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMDcsMjAgKzEwMiwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQotQ09ORklHX0hBVkVfUEVSRl9DT1VOVEVSUz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0yMzcsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE5LDcgKzMxNCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAiCiAKICMKQEAgLTM4Miw2ICszNzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0MTksNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC01MzAsMTAgKzUyOCw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTYyNSw2ICs2MjAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTcsOSArNjUzLDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC02OTMsMTEgKzY4NiwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTcxNyw2ICs3MTMsNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CkBAIC03NzEsNiArNzY4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC04NzUsNiArODczLDcgQEAKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19GU05PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTk3NSw2ICs5NzQsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtOTg5LDcgKzk4OSw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCmluZGV4IDIwNTBhNzY2Li5hYzY0Njk3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZWNvdmVjMjRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lY292ZWMyNF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM3Ci0jIFdlZCBBdWcgMjYgMDk6MDk6MDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NDU6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNjAsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05NywyMCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMjMyLDYgKzIzMiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMTUsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwLCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L25mcyBpcD1kaGNwIG1lbT0xMjBNIG1lbWNodW5rLnZwdT00bSIKIAogIwpAQCAtMzg4LDYgKzM5MCw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDE3LDYgKzQyMCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQyNCw3ICs0MjgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzcsNiArNDQwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDQ2LDkgKzQ1MCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTA0LDYgKzUwOCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNjY2LDEwICs2NzEsNyBAQAogIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTMsMTEgKzcxNSwxNSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDPXkKQEAgLTc3MSw2ICs3NzcsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtODA0LDkgKzgxMSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtODU2LDExICs4NjAsMTUgQEAKICMKICMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTg4MCw4ICs4ODgsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKQEAgLTkzNiw4ICs5NDYsMTAgQEAKIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVPXkKICMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfSTJDX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRElPX1RFQTU3NjQgaXMgbm90IHNldAogIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKQEAgLTEwMDMsNyArMTAxNSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAyNiw2ICsxMDM3LDcgQEAKICMgQ09ORklHX0hJRF9FWktFWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9HWVJBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfTE9HSVRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfSElEX01JQ1JPU09GVCBpcyBub3Qgc2V0CkBAIC0xMDcwLDYgKzEwODIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKQEAgLTExNjEsNiArMTE3NCw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKIENPTkZJR19NTUNfU1BJPXkKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEyMDgsNiArMTIyMyw3IEBACiAjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMjY1LDYgKzEyODEsNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTMyOSw3ICsxMzQ2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtMTQwOSw2ICsxNDI1LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MjMsNyArMTQ0MCw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0NDYsNyArMTQ2Myw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ4NywxMSArMTUwMywxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzA1X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCmluZGV4IDQ5NzQxNGMuLjg2YzliYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6MzUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiwxNyArMzksMjQgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC03MCwxOCArODAsMTkgQEAKICMgQ09ORklHX0VWRU5URkQgaXMgbm90IHNldAogQ09ORklHX1NITUVNPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtODksNiArMTAwLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0JBU0VfU01BTEw9MQpAQCAtMTI1LDYgKzE0MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTE2NSw3ICsxODEsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTE3Myw2ICsxODgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNTAsNyArMjY2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzIxLDExICszMzgsMTQgQEAKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00MDksNiArNDI5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTQxNiw4ICs0MzcsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC00MjUsNiArNDQ5LDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNDQ5LDQgKzQ3NCw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCmluZGV4IDc3Njg0ZWQuLjRjMGY4MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MjU6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTc6NTc6MzAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iX2Vkb3NrNzc2MCIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTEsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTIsNiArMTIzLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNCw3ICsxMzksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcxLDYgKzE4Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNiw2ICsyMzIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDQsNyArMzIxLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDIwMDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L25mcyBydyBuZnNyb290PTE5Mi4xNjguMC4zOi9zY3JpcHRzL2ZpbGVzeXMgaXA9MTkyLjE2OC4wLjQiCiAKICMKQEAgLTM2Nyw2ICszODUsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM5Niw2ICs0MTUsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MDMsNyArNDIzLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDE2LDYgKzQzNSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDI2LDkgKzQ0Niw5IEBACiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfREVCVUc9eQogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU2MywxMCArNTgzLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjQ5LDYgKzY2Niw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02NTksNiArNjc3LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0g3NzYwPXkKICMgQ09ORklHX0kyQ19TSF9NT0JJTEUgaXMgbm90IHNldApAQCAtNjgwLDIwICs2OTksMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQogQ09ORklHX0kyQ19ERUJVR19BTEdPPXkKIENPTkZJR19JMkNfREVCVUdfQlVTPXkKIENPTkZJR19JMkNfREVCVUdfQ0hJUD15CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzEyLDggKzczMiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTgzNyw4ICs4NTksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC05MDAsNyArOTI0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC05NzQsNiArOTk3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMDEwLDE4ICsxMDM0LDIzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtMTAyOSw2ICsxMDU4LDcgQEAKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC0xMDQ1LDExICsxMDc1LDExIEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjQsNyArMTA5NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15CkBAIC0xMTAwLDExICsxMTI5LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTY4LDUgKzExOTksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKaW5kZXggODgxMTI4ZS4uOWI3ODU1MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI3OjIxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU4OjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsMTEgKzU3LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwxOSArMTAyLDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQyLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE0LDcgKzIzMiw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIyMiw2ICsyMzksNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogCiAjCkBAIC0zNzEsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDIxLDkgKzQ0Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NzcsNiArNDk4LDcgQEAKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQogIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC01NTQsNyArNTc2LDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTYxMCwxMCArNjMxLDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzA1LDExICs3MjMsMTUgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTksNiArODQxLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTg4OCw2ICs5MTEsNyBAQAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtOTMwLDggKzk1NCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTk5Nyw3ICsxMDIzLDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA3MSw2ICsxMDk2LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEwODIsMTEgKzExMDgsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTEwOTYsNiArMTEyNiw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMDksNyArMTE0MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMTQxLDExICsxMTcxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEyMDgsNSArMTI0MCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCmluZGV4IDMyNDlkNDYuLmY1OWJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI4OjEyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE3OjU5OjQ1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKQEAgLTQ2LDExICs1NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODEsMTggKzkxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDAsNiArMTExLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEwNyw3ICsxMjIsNyBAQAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE1NCw2ICsxNjksNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xOTksNiArMjE1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjg4LDcgKzMwNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMyMiw2ICszNDAsNyBAQAogQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CiAjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQVBNX0VNVUxBVElPTj15CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CiAKQEAgLTM5MCw3ICs0MDksNiBAQAogIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtMzk5LDYgKzQxNyw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTQyOCwxMyArNDQ3LDE0IEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfSFA2WFg9eQorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTQ1Miw2ICs0NzIsNyBAQAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTUwNywxMSArNTI4LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYzLDcgKzY4OCw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC03MjUsNyArNzUyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC03ODIsNiArODA4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTc5MSw4ICs4MTgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MDAsNiArODMwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODEzLDcgKzg0NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODU0LDExICs4ODQsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTkyMCw0ICs5NTIsNSBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDktcm9taW1hZ2VfZGVmY29uZmlnCmluZGV4IGMwZjkyNjMuLjAyNTkwZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5LXJvbWltYWdlX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOS1yb21pbWFnZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEtcmM2Ci0jIFRodSBBdWcgMjAgMTU6MDk6MTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MDE6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtNTgsMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC03OCwxNSArNzksOSBAQAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19JTklUUkFNRlNfUk9PVF9VSUQ9MAotQ09ORklHX0lOSVRSQU1GU19ST09UX0dJRD0wCiBDT05GSUdfUkRfR1pJUD15CiAjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CiAjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15Ci0jIENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fQlpJUDIgaXMgbm90IHNldAotIyBDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX0xaTUEgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FOT05fSU5PREVTPXkKQEAgLTEwNiwyMCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE3Myw2ICsxNjcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE5LDYgKzIxNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwMSw3ICsyOTcsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHF1aWV0IgogCiAjCkBAIC0zMjQsNiArMzIxLDcgQEAKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNjIsNiArMzYwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDAxLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDg5LDYgKzQ4OSw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTUyMCw5ICs1MjEsNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTU1NiwxMSArNTU0LDE0IEBACiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNTgwLDYgKzU4MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKQEAgLTcxOCw2ICs3MjAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzMyLDcgKzczNSw3IEBACiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15Ci1DT05GSUdfSEFWRV9GVFJBQ0VfU1lTQ0FMTFM9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9rZnIycjA5X2RlZmNvbmZpZwppbmRleCBjZWY2MTMxLi44YWU2NWQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mva2ZyMnIwOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2tmcjJyMDlfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxLXJjNgotIyBUaHUgQXVnIDIwIDIxOjU4OjUyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjU0OjIyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTYwLDExICs2MCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTAyLDIwICsxMDMsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTkwLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzYsNiArMjM3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE5LDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eTAgY29uc29sZT10dHlTQzEsMTE1MjAwIgogCiAjCkBAIC0zNDMsNiArMzQ2LDcgQEAKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CkBAIC0zODMsNiArMzg3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MjMsNiArNDI4LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDMyLDkgKzQzOCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTAwLDcgKzUwNiwxMiBAQAogIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKIAogIwogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwpAQCAtNTY0LDExICs1NzUsMTUgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CkBAIC02MjEsNiArNjM2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjUzLDkgKzY2OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNjg5LDExICs3MDIsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MTMsNiArNzI5LDcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldApAQCAtODU2LDYgKzg3Myw4IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldApAQCAtOTQxLDYgKzk2MCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMDAyLDYgKzEwMjIsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAxNiw3ICsxMDM3LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCmluZGV4IGJhMDU3MzkuLmMyYTlhMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjoyODo0NSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODowNTo0OSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOSArOTMsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNCw2ICsxMTUsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE2LDcgKzEzMSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjMsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA4LDYgKzIyNCw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NSw3ICszMTIsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQxMSw2ICs0MjksNyBAQAogIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQ0Miw2ICs0NjEsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00NDksNyArNDY5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDYyLDYgKzQ4MSw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTYzMSw2ICs2NTEsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKQEAgLTY1Myw3ICs2NzQsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03MjksNiArNzU0LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC03NTQsMTAgKzc4MCw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg2OCwxMCArODkxLDIwIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtODg2LDkgKzkxOSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05MTAsNiArOTQxLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTkyOCwxMSArOTYwLDExIEBACiBDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19TT1VORD1tCiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKICMgQ09ORklHX1NORCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfUFJJTUU9bQogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTk2MSw2ICs5OTMsNyBAQAogQ09ORklHX0hJRF9FWktFWT1tCiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049bQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD1tCiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDExLDYgKzEwNDQsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTE3Nyw4ICsxMjExLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjUxLDcgKzEyODcsNiBAQAogQ09ORklHX1VGU19GUz1tCiAjIENPTkZJR19VRlNfRlNfV1JJVEUgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPW0KIENPTkZJR19ORlNfVjM9eQpAQCAtMTMzMSw2ICsxMzY2LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTEzNDAsOCArMTM3NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEzNTAsNiArMTM4OSw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMzYzLDcgKzE0MDMsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTM5NSwxMSArMTQzNCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNDYyLDUgKzE1MDMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKaW5kZXggYzBiYzJmZC4uZWMwYzBiNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjI5OjUwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjA5OjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTgzLDE5ICs5MywyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA0LDYgKzExNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTYsNyArMTMxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Myw2ICsxNzgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMDgsNiArMjI0LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk1LDcgKzMxMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtNDExLDYgKzQyOSw3IEBACiAjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDQwLDYgKzQ1OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0Nyw3ICs0NjcsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjAsNiArNDc5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNTcyLDEyICs1OTIsMTQgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC01OTksNiArNjIxLDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CkBAIC02MjcsNiArNjUwLDcgQEAKICMgQ09ORklHX1BBVEFfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NDUsNyArNjY5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzI1LDYgKzc1Myw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzUwLDEwICs3NzksNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NjMsMTAgKzg4OSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTg4MSw5ICs5MTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTA1LDYgKzkzOSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MjMsNyArOTU4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTEwMjEsOCArMTA1NSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA4OSw3ICsxMTI1LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtMTE1NSw2ICsxMTkwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNjQsOCArMTIwMCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExNzQsNiArMTIxMyw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTg3LDcgKzEyMjcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTIxOSwxMSArMTI1OCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjg2LDUgKzEzMjcsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IGM1ODU5ZTguLjc5MDkxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzA6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTA6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTEsMTggKzEwMSwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTExLDYgKzEyMiwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjMsNyArMTM4LDcgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcwLDYgKzE4NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNSw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDYsNyArMzIzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzY4LDYgKzM4Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzk3LDYgKzQxNiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwNCw3ICs0MjQsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTcsNiArNDM2LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTQyOCw5ICs0NDgsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTU4OSwxMCArNjA5LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjMxLDEzICs2NDgsMTUgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogIyBDT05GSUdfTU9VU0VfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CkBAIC03MDEsNiArNzIwLDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNzIxLDExICs3NDUsMTQgQEAKICMKICMgU1BJIEdQSU8gZXhwYW5kZXJzOgogIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MjksOCArODU2LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTkwMCw3ICs5MjksNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC05NzYsNiArMTAwNCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTAwNiwyNCArMTAzNSwzMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTAzNiwxNiArMTA3MSwxNSBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGE0NDMwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNUF9DT0RFPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3Nyw1ICsxMTExLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKaW5kZXggZTVhMjFlMS4uNmJiNTk3NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzE6NTYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MTQ6MzUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NywxOCArOTcsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTEwNiw2ICsxMTcsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTEzLDcgKzEyOCw3IEBACiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYwLDYgKzE3NSw3IEBACiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMj15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTEsNiArMjI3LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvaGRhMSIKIAogIwpAQCAtMzY0LDYgKzM4Miw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzkzLDYgKzQxMiw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQwMCw3ICs0MjAsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTMsNiArNDMyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00OTksMTAgKzUxOSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNTYxLDEwICs1NzgsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTU3NSw5ICs2MDIsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjYyLDggKzY4NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNzI2LDEyICs3NTMsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CkBAIC04MDMsNiArODMwLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTgxMiw4ICs4NDAsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04MjEsNiArODUyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODM0LDcgKzg2Niw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtODc1LDExICs5MDYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTk0Myw1ICs5NzYsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwppbmRleCBiMThjZmQzLi42NTAxODI4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxNjowNjo0OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODoxNzo0MSAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTg5LDE5ICs5OSwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExMSw2ICsxMjMsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIyLDcgKzEzOSw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMzgsNyArMTU1LDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTczLDYgKzE5MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIyNCw2ICsyNDIsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDgsNyArMzI3LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgZWFybHlwcmludGs9c2VyaWFsIGlwPW9uIHJvb3Q9L2Rldi9uZnMgaXA9ZGhjcCIKIAogIwpAQCAtMzI4LDcgKzM0OCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzc2LDYgKzQwMiw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDA2LDYgKzQzMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQxNCw3ICs0NDIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MjcsNiArNDU0LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDM2LDkgKzQ2NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTg1LDcgKzYxMyw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MjEsMTAgKzY0OCw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY1OSwxNCArNjgzLDE5IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQz15CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNzE1LDYgKzc0NCw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTcyNSw2ICs3NTUsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQpAQCAtNzQ2LDE1ICs3NzcsMTcgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CkBAIC03NzcsMTEgKzgxMCwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgwMSw4ICs4MzcsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NRURJQV9TVVBQT1JUPXkKIApAQCAtOTIyLDcgKzk2MCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC05NTIsMTMgKzk4OSwxMyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKLUNPTkZJR19TVVBFUkhfQlVJTFRfSU5fTTY2NTkyPXkKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldApAQCAtMTAxNyw2ICsxMDU0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDY0LDggKzExMDIsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtMTEyNiw3ICsxMTY2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMTYxLDYgKzEyMDAsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNzIsMTEgKzEyMTIsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExODgsNiArMTIzMiw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTAwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjAxLDcgKzEyNDYsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CkBAIC0xMjQwLDExICsxMjg0LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMDgsNSArMTM1NCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZwppbmRleCA2N2VkZDNmLi43ZmMxOTUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3BvbGFyaXNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzM6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjA6NTMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOCw2ICs0MSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwxOCArMTAxLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTEsNiArMTIyLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMyw3ICsxMzgsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTUsNiArMjMxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAyLDcgKzMxOSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0vZGV2L210ZGJsb2NrMiByb290ZnN0eXBlPWpmZnMyIG1lbT02M00gbXRkcGFydHM9cGh5c21hcC1mbGFzaC4wOjB4MDAxMDAwMDAoYm9vdGxvYWRlcilybywweDAwNTAwMDAwKEtlcm5lbClybywweDAwQTAwMDAwKEZpbGVzeXN0ZW0pIgogCiAjCkBAIC0zNjMsNiArMzgxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDMsNiArNDIyLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQpAQCAtNDE0LDkgKzQzNCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NzcsMTAgKzU5Nyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY2NiwxMSArNjgzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzcwLDggKzc5MSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04NDEsNyArODY0LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODc3LDYgKzg5OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MTYsMTggKzkzOSwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU0c9eQogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogQ09ORklHX0ZUUkFDRT15CiAjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldApAQCAtOTM1LDYgKzk2Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtOTQ3LDE2ICs5NzYsMTUgQEAKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAotIyBDT05GSUdfS01FTUNIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15Ci1DT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHgwMDAwMDAwMAorQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4YTQwMDAxNTAKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC05ODcsNSArMTAxNSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCAxMDdhOGUzLi45MDNiMDIxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6MzQ6NDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6MjQ6MzEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDggKzI5LDEwIEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MiwyMCArMTAyLDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPW0KIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE1LDYgKzEyNywxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjYsNyArMTQzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3NCw2ICsxOTEsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMjI5LDYgKzI0Nyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNSw3ICszMzQsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgogCiAjCkBAIC0zOTYsNiArNDE2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKIENPTkZJR19TVFA9bQpAQCAtNDI4LDYgKzQ0OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQzNiw3ICs0NTgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDksNiArNDcwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNDYwLDkgKzQ4Miw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUxMyw2ICs1MzUsNyBAQAogQ09ORklHX01URF9QSFlTTUFQPXkKICMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9HUElPX0FERFIgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTY1MSwxMSArNjc0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjc3LDYgKzcwMiw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNzA0LDYgKzczMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTcyMiw3ICs3NDksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MDQsNiArODM1LDcgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CisjIENPTkZJR19DTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CkBAIC04MjksMTAgKzg2MSw3IEBACiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTg3MywxMyArOTAyLDE3IEBACiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQURQNTU4OCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC05MzMsNiArOTY2LDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC05NjEsNiArOTk1LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hJR0hMQU5ERVI9eQogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKQEAgLTk4NywxOSArMTAyMiwyNiBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtMTA0OSw2ICsxMDkxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RNUDQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RNUDQyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldApAQCAtMTA2MCw3ICsxMTAzLDYgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTEwODEsMTQgKzExMjMsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMTAxLDExICsxMTQ2LDExIEBACiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY5LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMjEsOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODksMTIgKzEzMzcsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzcwLDYgKzE0MTgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDA0LDIxICsxNDUzLDI3IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjcsNiArMTQ4Miw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0NSwxMSArMTUwMSwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTE0NjQsNyArMTUyMCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwNiwxMSArMTU2MSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NzMsNSArMTYzMCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwppbmRleCA4YTNkYzMwLi4yN2ZmNDZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6Mzc6MjAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6Mjk6MjMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTQxLDYgKzQ0LDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTU2LDEyICs2NSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVX1RSQUNFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMjAgKzEwMiwyMiBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xMTcsNiArMTI4LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyOSw3ICsxNDUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTc4LDYgKzE5NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIzMSw3ICsyNDgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMzksNiArMjU1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzM4LDcgKzM1NSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKQEAgLTQxOSw2ICs0MzcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogQ09ORklHX1NUUD1tCkBAIC00NTIsNiArNDcxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDYwLDcgKzQ4MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ3Myw2ICs0OTIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC01OTEsMTEgKzYxMSwxMyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxNyw2ICs2MzksNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY0NCw2ICs2NjcsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NjIsNyArNjg2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzIxLDYgKzc0OSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzQ2LDEwICs3NzUsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03OTAsMTQgKzgxNiwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTg1MSw2ICs4ODIsNyBAQAogQ09ORklHX0RFVlBPUlQ9eQogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTg3OSw2ICs5MTEsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSElHSExBTkRFUj15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKQEAgLTkwNiwxNSArOTM5LDE3IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtOTM1LDE0ICs5NzAsMjQgQEAKICMgUENJIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19CVDhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0xBTkdXRUxMIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtOTkzLDYgKzEwMzgsNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDA0LDkgKzEwNTAsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtMTAyNiwxNCArMTA3MCwxNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTEwOTksMTEgKzExNDYsMTEgQEAKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC0xMTY3LDYgKzEyMTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMTksOCArMTI2NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEyODYsMTIgKzEzMzYsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMzY3LDYgKzE0MTcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDAxLDIyICsxNDUyLDI5IEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTE0MjUsNiArMTQ4Myw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0MiwxMSArMTUwMSwxMSBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHXzRLU1RBQ0tTPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNDYxLDcgKzE1MjAsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTE1MDMsMTEgKzE1NjEsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTcxLDUgKzE2MzEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKaW5kZXggNTVjMzY1Ni4uYzQwZGIxMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjM5OjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM0OjI5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CkBAIC00NSwxMSArNTQsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODYsMTkgKzk2LDIxIEBACiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTEwNyw2ICsxMTksMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CkBAIC0xMTcsNyArMTM0LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yODUsNyArMzAzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCBlYXJseXByaW50az1zZXJpYWwgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC0zMDksNiArMzI4LDcgQEAKICMKIENPTkZJR19QTT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiAjIENPTkZJR19ORVQgaXMgbm90IHNldApAQCAtMzI3LDkgKzM0Nyw5IEBACiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNDk4LDYgKzUxOCwxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC01OTcsNyArNjIyLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZJTEVfTE9DS0lORyBpcyBub3Qgc2V0CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC02MzIsNyArNjU5LDYgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTY2OCw3ICs2OTQsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC02ODYsNiArNzExLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02OTgsMTEgKzcyNCwxNSBAQAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC03MTIsNiArNzQyLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzQxLDQgKzc3Miw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKaW5kZXggNjllNjE5OS4uNWNhYmRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQwOjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM1OjA0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsNyArMjksOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTMsMTkgKzEwMywyMSBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE0LDYgKzEyNiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEyNCw3ICsxNDEsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTcyLDYgKzE4OSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTMwOCw3ICszMjYsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNlcmlhbCBpZ25vcmVfbG9nbGV2ZWwiCiAKICMKQEAgLTMzMiw2ICszNTEsNyBAQAogIwogQ09ORklHX1BNPXkKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19ORVQ9eQpAQCAtMzczLDYgKzM5Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQyNCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMCw3ICs0MzIsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MzIsOSArNDUzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldApAQCAtNTkxLDEwICs2MTIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzksNiArNjk3LDExIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKIENPTkZJR19HUElPTElCPXkKICMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldApAQCAtNjk5LDYgKzcyMiwxMCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03NDEsNyArNzY4LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC03NjQsNiArNzkwLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODExLDYgKzgzOCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTU0LDggKzk4MiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC05OTAsNyArMTAyMCw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CkBAIC0xMDE2LDcgKzEwNDUsNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDkwLDYgKzExMTgsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjksMjIgKzExNTgsMjggQEAKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19ERUJVR19TRz15CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTExNTIsNiArMTE4Nyw3IEBACiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE3MCwxMCArMTIwNiwxMCBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmZlODAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci1DT05GSUdfREVCVUdfQk9PVE1FTT15Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMDMsNSArMTIzOSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCmluZGV4IGM2ZTliMWMuLmY1MjFlODIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjM2OjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw4ICsyOSwxMCBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM5LDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUwLDExICs1OSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04NCwyMCArOTQsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMDcsNiArMTE5LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOCw3ICsxMzUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY1LDYgKzE4Miw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxMCw2ICsyMjgsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMDMsNyArMzIyLDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSBlYXJseXByaW50az1zZXJpYWwiCiAKICMKQEAgLTM3OCw2ICszOTgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MjksNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MTYsNyArNDM4LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDI5LDYgKzQ1MCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KQEAgLTU0MiwxMSArNTY0LDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNTY4LDYgKzU5Miw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNTk1LDYgKzYyMCw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTYxMyw3ICs2MzksMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC02NzMsNiArNzAzLDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTY5NCw2ICs3MjUsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTcxOSwxMCArNzUxLDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODQwLDEwICs4NjksMjAgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC04NjIsOSArOTAxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODgwLDEyICs5MTcsMTUgQEAKIENPTkZJR19NRkRfU001MDE9eQogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCkBAIC05NjksNiArMTAwOSw3IEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiBDT05GSUdfU05EPW0KIENPTkZJR19TTkRfVElNRVI9bQogQ09ORklHX1NORF9QQ009bQpAQCAtMTA3MSw3ICsxMTEyLDYgQEAKIENPTkZJR19BQzk3X0JVUz1tCiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NCw2ICsxMTM0LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtMTE0Miw2ICsxMTgzLDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyMTMsNiArMTI1NSw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC0xMjUyLDYgKzEyOTUsNyBAQAogQ09ORklHX1JUQ19EUlZfUjk3MDE9eQogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyOTMsOCArMTMzNywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTM1Nyw3ICsxNDAzLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xNDIzLDYgKzE0NjgsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE0MzQsMTEgKzE0ODAsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTE0NTAsNiArMTUwMCw3IEBACiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEVfUE9SVD0weGZmZTgwMDAwCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xNDYzLDcgKzE1MTQsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtMTQ5NSwxMSArMTU0NSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTYyLDUgKzE2MTQsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwppbmRleCBiYzEwNDY5Li5hMTU2Y2QxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0MzoxOSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODozOTo0OCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjgsOCArMjksMTAgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODQsMjAgKzk0LDIyIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTA3LDYgKzExOSwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MCBjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgZWFybHlwcmludGs9c2VyaWFsIgogCiAjCkBAIC0zNzgsNiArMzk4LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDgsNiArNDI5LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDE2LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyOSw2ICs0NTAsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCkBAIC00MzgsOSArNDYwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00OTksNiArNTIxLDcgQEAKICMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKQEAgLTYyNywxMSArNjUwLDEzIEBACiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldApAQCAtNjUzLDYgKzY3OCw3IEBACiAjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRQODY3WCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldApAQCAtNjgwLDYgKzcwNiw3IEBACiAjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTY5OCw3ICs3MjUsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC03NTgsNiArNzg5LDcgQEAKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAogIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKQEAgLTc3OSw2ICs4MTEsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKQEAgLTgwNCwxMCArODM3LDcgQEAKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtOTI1LDEwICs5NTUsMjAgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQURDWFggaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CkBAIC05NDcsOSArOTg3LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtOTY1LDEyICsxMDAzLDE1IEBACiBDT05GSUdfTUZEX1NNNTAxPXkKICMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQpAQCAtMTA1NCw2ICsxMDk1LDcgQEAKIENPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC0xMTU2LDcgKzExOTgsNiBAQAogQ09ORklHX0FDOTdfQlVTPW0KIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMTc5LDYgKzEyMjAsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjI3LDYgKzEyNjksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTI5OCw2ICsxMzQxLDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTEzMzcsNiArMTM4MSw3IEBACiBDT05GSUdfUlRDX0RSVl9SOTcwMT15CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTM3OCw4ICsxNDIzLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDQzLDcgKzE0OTAsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX05GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKQEAgLTE1MDksNiArMTU1NSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTUyMCwxMSArMTU2NywxNSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtMTUzNiw2ICsxNTg3LDcgQEAKIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEU9eQogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRV9QT1JUPTB4ZmZlODAwMDAKIENPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE1NDksNyArMTYwMSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xNTgxLDExICsxNjMyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE2NDgsNSArMTcwMSw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwppbmRleCA3NTNmYjI3Li4wNTU1MzZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDM6NTQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NDA6MjUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI4LDcgKzI5LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zOSw2ICs0MiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iX1NESzc3ODAiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTUyLDExICs2MSwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOApAQCAtODgsMjAgKzk4LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMTAsNiArMTIxLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyMiw3ICsxMzcsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3MCw2ICsxODUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODA9eQpAQCAtMjI1LDYgKzI0MSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxNCw3ICszMzEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMTgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHkwIGNvbnNvbGU9dHR5U0MwLDExNTIwMCBpcD1ib290cCByb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjE6L2hvbWUvcm9vdGZzIgogCiAjCkBAIC00MzUsNiArNDUzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00OTYsNiArNTE1LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNTAzLDcgKzUyMyw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTUxNiw2ICs1MzUsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC02NzcsMTIgKzY5NywxNCBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTcwNCw2ICs3MjYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTczMiw2ICs3NTUsNyBAQAogIyBDT05GSUdfUEFUQV9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKQEAgLTc2MCw3ICs3ODQsMTEgQEAKICMKIAogIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KKyMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MDQsMTAgKzgzMiw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtODYyLDEyICs4ODcsMTMgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiBDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CkBAIC04NzUsNiArOTAxLDcgQEAKIENPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CkBAIC05NDcsNiArOTc0LDExIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIENPTkZJR19QT1dFUl9TVVBQTFk9eQogIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk1NCw3ICs5ODYsNiBAQAogIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC05ODYsNiArMTAxNyw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMDcyLDExICsxMTA0LDExIEBACiBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyND15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTT15CiAjIENPTkZJR19TTkQgaXMgbm90IHNldAogQ09ORklHX1NPVU5EX1BSSU1FPXkKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDk5LDYgKzExMzEsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMTQ5LDYgKzExODIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldApAQCAtMTI3OCw2ICsxMzEyLDcgQEAKICMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEzNDUsNyArMTM4MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTE0MjUsNiArMTQ1OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQ2MSwxOCArMTQ5NiwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTE0ODAsNiArMTUyMCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ5NSwxMSArMTUzNiwxMSBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC0xNTE0LDcgKzE1NTUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0hBU0g9eQpAQCAtMTU1MCwxMSArMTU5MCwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTYxNyw1ICsxNjU5LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzIwNl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwppbmRleCA4ZGQyZjEzLi4xY2QxNzc3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ2OjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQ1OjI4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDIsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC01MywxMiArNjIsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVV9UUkFDRT15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTA1LDE5ICsxMTQsMjEgQEAKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTI2LDYgKzEzNywxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEzNyw3ICsxNTMsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTg1LDYgKzIwMSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTMxOSw3ICszMzYsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzMsMTE1MjAwIGlnbm9yZV9sb2dsZXZlbCBlYXJseXByaW50az1zZXJpYWwiCiAKICMKQEAgLTM4OSw2ICs0MDcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxOSw2ICs0MzgsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjYsNyArNDQ2LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDQ4LDkgKzQ2Nyw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01ODgsMTAgKzYwNyw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0NywxMSArNjYzLDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzQ2LDggKzc2NiwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC03ODIsOCArODA0LDYgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX1NZU0NUTD15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKQEAgLTgwOSw3ICs4MjksNiBAQAogQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQpAQCAtODQ2LDYgKzg2NSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04ODIsMjAgKzkwMiwyNyBAQAogQ09ORklHX0RFQlVHX0xJU1Q9eQogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTkwNCw2ICs5MzEsNyBAQAogIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKQEAgLTkyMCwxMCArOTQ4LDEwIEBACiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19EVU1QX0NPREU9eQorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAogCiAjCkBAIC05MzgsNyArOTY2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19IQVNIPXkKQEAgLTk3NCwxMSArMTAwMSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTA0Niw1ICsxMDc1LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwppbmRleCAxOGY0NmRlLi41NTMxNDQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ3OjA3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjQ2OjU1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0dST1VQX1NDSEVEPXkKQEAgLTg4LDE4ICs5OCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDgsNiArMTE5LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExOSw3ICsxMzQsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTM1LDcgKzE1MCw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTY5LDYgKzE4NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw2ICsyMzAsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTYsNyArMzEzLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCIKIAogIwpAQCAtMzE2LDcgKzMzNCwxMiBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfUE1fUlVOVElNRT15CiAjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIApAQCAtMzYwLDYgKzM4Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg5LDYgKzQxMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5Niw3ICs0MjEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MTgsOSArNDQyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU2MCwxMCArNTg0LDcgQEAKIENPTkZJR19NSUk9eQogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY3MSw2ICs2OTIsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC02ODEsNiArNzAzLDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzAyLDIwICs3MjUsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MzQsOCArNzU4LDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNzg4LDYgKzgxNCw3IEBACiAjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORD15CiBDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CkBAIC04MjIsNyArODQ5LDYgQEAKICMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC04NDUsNiArODcxLDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODc3LDYgKzkwNCw3IEBACiBDT05GSUdfVVNCX0RFVklDRUZTPXkKIENPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKICMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CkBAIC04OTEsNiArOTE5LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9JU1AxMTZYX0hDRD15CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC05OTAsOCArMTAxOSwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC0xMDI4LDggKzEwNTksNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNjIsNyArMTA5MSw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTExNDAsNiArMTE2OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xMTQ5LDggKzExNzgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMTYwLDYgKzExOTIsNyBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmUwMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTE3Myw3ICsxMjA2LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTEyMDUsMTEgKzEyMzcsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI3Myw1ICsxMzA3LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwppbmRleCA3MjRiYjc3Li42OTIxYjE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NjE5X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjQ3OjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjUwOjA1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsMTcgKzQwLDI0IEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogCiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTczLDMxICs4MywzNiBAQAogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNDQsNiArMTU5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjYyLDcgKzI3OCw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQ2OSwxMSArNDg2LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNTA3LDcgKzUyOCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC01NTksNyArNTc5LDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNTk0LDcgKzYxNiw2IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQogIyBDT05GSUdfU1lTRlMgaXMgbm90IHNldAotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldApAQCAtNjE5LDcgKzY0MCw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTYzNyw2ICs2NTcsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldApAQCAtNjQ1LDggKzY2NiwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTY1NCw2ICs2NzgsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02ODAsNCArNzA1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKaW5kZXggNmNhNmEyZi4uM2FiYjA2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMjo0ODoxOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxODo1MDo1MiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtODMsMTggKzkzLDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC0xMDIsNiArMTEzLDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExMyw3ICsxMjgsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYwLDYgKzE3NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNSw2ICsyMjEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yODksNyArMzA2LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzU1LDYgKzM3Myw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtMzg0LDYgKzQwMyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTM5MSw3ICs0MTEsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00MDksOSArNDI4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTQ3LDEwICs1NjYsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTY0MiwxMCArNjU4LDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC02NTYsOSArNjgyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTY5Miw3ICs3MTYsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtNzQ2LDcgKzc2OSw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MTUsNyArODQwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC04NDksNiArODczLDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CkBAIC04NTcsOCArODgyLDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtODY2LDYgKzg5NCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTg3OCw3ICs5MDcsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTEwLDExICs5MzgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtOTc5LDUgKzEwMDksNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzEyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCmluZGV4IGI4YWFlMTEuLjFhNDNjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NDk6MDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTM6MzIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiw2ICszOSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg0LDE4ICs5NCwxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTEsNyArMzA4LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvc2RhMSIKIAogIwpAQCAtMzY4LDYgKzM4Niw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDMzLDYgKzQ1Miw3IEBACiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQwLDcgKzQ2MCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2NCw5ICs0ODMsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTk3LDcgKzYxNiw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC02MDUsNiArNjIzLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNjU4LDEwICs2NzcsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTcxOSwxMSArNzM1LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODI4LDggKzg0OCwxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODY2LDggKzg4OCw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtOTAwLDcgKzkyMCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtOTM1LDYgKzk1NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05NjQsMjQgKzk4NCwzMCBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtOTk0LDE0ICsxMDIwLDEzIEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxNiw3ICsxMDQxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTEwNTksMTEgKzEwODMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMTI3LDUgKzExNTMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCmluZGV4IDMwNmUyMWMuLmI4YTNjOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTI6NTA6NDkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTc6MTEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTAsMTEgKzU5LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC04OSwxOCArOTksMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA5LDYgKzEyMCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjAsNyArMTM1LDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2Nyw2ICsxODIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTIsNiArMjI4LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk2LDcgKzMxMyw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTIiCiAKICMKQEAgLTM3Myw2ICszOTEsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQzOCw2ICs0NTcsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQ0NSw3ICs0NjUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NjksOSArNDg4LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTYwNiw2ICs2MjUsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MjEsMTAgKzY0MSw3IEBACiAjIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjcyLDEyICs2ODksMTMgQEAKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0MgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFPXkKICMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldApAQCAtNzI1LDYgKzc0MywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03NjIsNyArNzg1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC03ODUsNiArODA3LDcgQEAKIENPTkZJR19ISURfRVpLRVk9eQogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKKyMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTE9HSVRFQ0g9eQogIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldApAQCAtODMxLDYgKzg1NCw3IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC05MDAsNiArOTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTk2MSw4ICs5ODYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTEwMDIsOCArMTAyOSw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtMTAzNiw3ICsxMDYxLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5NSw2ICsxMTE5LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMjQsMjQgKzExNDksMzAgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTE1NCwxNCArMTE4NSwxMyBAQAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHXzRLU1RBQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTVBfQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTExNzYsNyArMTIwNiw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRD15CkBAIC0xMjE5LDExICsxMjQ4LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTI4Nyw1ICsxMzE4LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwppbmRleCA2MTk0MzgyLi5kNzA5YjdmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEyOjU0OjI0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE4OjU3OjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTIsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MSwxOSArMTAxLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTEzLDYgKzEyNCwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjUsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0MSw3ICsxNTcsNyBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIHR5cGUKQEAgLTE3Niw2ICsxOTIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMzMsNiArMjUwLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzE3LDcgKzMzNSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTMzNiw3ICszNTUsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM4MSw2ICs0MDYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMCw2ICs0MzYsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTcsNyArNDQ0LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMwLDYgKzQ1Niw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDk0LDcgKzUyMSw2IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC01MDIsNiArNTI4LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldApAQCAtNTM1LDEwICs1NjIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU3NywxMiArNjAxLDEzIEBACiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQogQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtNjMxLDEwICs2NTYsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY0NSw5ICs2ODAsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjgxLDcgKzcxNCw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAogCkBAIC03NzgsOCArODEwLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MzksNyArODczLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC04NjYsNiArODk5LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04NzgsOCArOTEyLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg4OSw2ICs5MjYsNyBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTAyLDcgKzk0MCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC05MzQsMTEgKzk3MSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMDAyLDUgKzEwNDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjRfZGVmY29uZmlnCmluZGV4IDNlZTc4M2EwLi41NmIwYjlmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzI0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBNb24gSnVuIDI5IDE2OjI4OjQzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBGcmkgU2VwIDI1IDExOjUwOjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTQyLDYgKzQyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTQsMTEgKzYwLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwyMCArOTgsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKLUNPTkZJR19IQVZFX1BFUkZfQ09VTlRFUlM9eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTQ0LDcgKzE1MCw3IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLSMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQogCiAjCiAjIFN5c3RlbSB0eXBlCkBAIC0xNzgsNiArMTg0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQ9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIyNCw2ICsyMzEsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNDksNiArMjU3LDggQEAKICMKIENPTkZJR19TT0xVVElPTl9FTkdJTkU9eQogQ09ORklHX1NIXzc3MjRfU09MVVRJT05fRU5HSU5FPXkKKyMgQ09ORklHX1NIX0tGUjJSMDkgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUNPVkVDIGlzIG5vdCBzZXQKIAogIwogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgpAQCAtMjY5LDcgKzI3OSwxMCBAQAogIwogIyBETUEgc3VwcG9ydAogIwotIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9ETUFfQVBJPXkKK0NPTkZJR19TSF9ETUE9eQorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9MTIKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIAogIwogIyBDb21wYW5pb24gQ2hpcHMKQEAgLTMwNSw3ICszMTgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHkxIGNvbnNvbGU9dHR5U0MzLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWRoY3AgbWVtY2h1bmsudnB1PTRtIgogCiAjCkBAIC0zMjUsNyArMzM5LDEzIEBACiAjCiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQogIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9SVU5USU1FPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogCkBAIC0zNzMsNiArMzkzLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDIsNiArNDIzLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDA5LDcgKzQzMSw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0NDMsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MzEsOSArNDUzLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00ODksNiArNTExLDcgQEAKICMKICMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAogIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CkBAIC02NDgsMTIgKzY3MSwxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02OTcsMTQgKzcxOCwxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiBDT05GSUdfS0VZQk9BUkRfU0hfS0VZU0M9eQorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKQEAgLTc1NCw2ICs3ODAsNyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNzY0LDYgKzc5MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1NIX01PQklMRT15CkBAIC03ODYsOSArODE0LDYgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MzgsMTEgKzg2MywxNSBAQAogIwogIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtODYyLDggKzg5MSwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldApAQCAtODc2LDI0ICs5MDcsMjQgQEAKIENPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CiAjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19WNEwxX0NPTVBBVD15Ci0jIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fTUVESUE9eQorQ09ORklHX0RWQl9DT1JFPW0KK0NPTkZJR19WSURFT19NRURJQT1tCiAKICMKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSPXkKK0NPTkZJR19NRURJQV9UVU5FUj1tCiAjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAotQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15Ci1DT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT15Ci1DT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz15Ci1DT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPXkKLUNPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9eQotQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD15Ci1DT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9eQorQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCitDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD1tCitDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2MT1tCitDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2Nz1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYPW0KK0NPTkZJR19NRURJQV9UVU5FUl9YQzIwMjg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDNTAwMD1tCitDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDM9bQogQ09ORklHX1ZJREVPX1Y0TDI9eQogQ09ORklHX1ZJREVPQlVGX0dFTj15CiBDT05GSUdfVklERU9CVUZfRE1BX0NPTlRJRz15CkBAIC05MDQsNiArOTM1LDcgQEAKICMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0NkEgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fU0FBNTI0OSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19BVTA4MjggaXMgbm90IHNldAogQ09ORklHX1NPQ19DQU1FUkE9eQogIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSBpcyBub3Qgc2V0CkBAIC05MTksMTUgKzk1MSwxOCBAQAogQ09ORklHX1VTQl9HU1BDQT1tCiAjIENPTkZJR19VU0JfTTU2MDIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUVjA2WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dMODYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9DT05FWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfRVRPTVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX0pFSUxJTkogaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX01BUlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX01SOTczMTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9PVjUxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MzQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1BBQzIwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU045QzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU09OSVhCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TT05JWEogaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDAgaXMgbm90IHNldApAQCAtOTU3LDYgKzk5MiwyNiBAQAogIyBDT05GSUdfVVNCX1NUS1dFQkNBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUzIyNTUgaXMgbm90IHNldAogIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAorQ09ORklHX0RWQl9NQVhfQURBUFRFUlM9OAorIyBDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1RUUENJX0VFUFJPTSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNfU0lBTk9fTURUViBpcyBub3Qgc2V0CisKKyMKKyMgU3VwcG9ydGVkIEZsZXhDb3BJSSAoQjJDMikgQWRhcHRlcnMKKyMKKyMgQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1AgaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMTcsMTAgKzEwNzIsODAgQEAKICMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKyMgQ09ORklHX1NPVU5EX09TU19DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX0pBQ0s9eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUEVSSCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9bQorCisjCisjIFNvQyBBdWRpbyBzdXBwb3J0IGZvciBTdXBlckgKKyMKK0NPTkZJR19TTkRfU09DX1NINF9GU0k9bQorQ09ORklHX1NORF9GU0lfQUs0NjQyPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KK0NPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1M9bQorQ09ORklHX1NORF9TT0NfV01fSFVCUz1tCitDT05GSUdfU05EX1NPQ19BRDE4MzY9bQorQ09ORklHX1NORF9TT0NfQUQxOTM4PW0KK0NPTkZJR19TTkRfU09DX0FENzMzMTE9bQorQ09ORklHX1NORF9TT0NfQUs0MTA0PW0KK0NPTkZJR19TTkRfU09DX0FLNDUzNT1tCitDT05GSUdfU05EX1NPQ19BSzQ2NDI9bQorQ09ORklHX1NORF9TT0NfQ1M0MjcwPW0KK0NPTkZJR19TTkRfU09DX0wzPW0KK0NPTkZJR19TTkRfU09DX1BDTTMwMDg9bQorQ09ORklHX1NORF9TT0NfU1BESUY9bQorQ09ORklHX1NORF9TT0NfU1NNMjYwMj1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyMz1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyNj1tCitDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMzWD1tCitDT05GSUdfU05EX1NPQ19VREExMzRYPW0KK0NPTkZJR19TTkRfU09DX1VEQTEzODA9bQorQ09ORklHX1NORF9TT0NfV004NTEwPW0KK0NPTkZJR19TTkRfU09DX1dNODUyMz1tCitDT05GSUdfU05EX1NPQ19XTTg1ODA9bQorQ09ORklHX1NORF9TT0NfV004NzI4PW0KK0NPTkZJR19TTkRfU09DX1dNODczMT1tCitDT05GSUdfU05EX1NPQ19XTTg3NTA9bQorQ09ORklHX1NORF9TT0NfV004NzUzPW0KK0NPTkZJR19TTkRfU09DX1dNODc3Nj1tCitDT05GSUdfU05EX1NPQ19XTTg5MDA9bQorQ09ORklHX1NORF9TT0NfV004OTAzPW0KK0NPTkZJR19TTkRfU09DX1dNODk0MD1tCitDT05GSUdfU05EX1NPQ19XTTg5NjA9bQorQ09ORklHX1NORF9TT0NfV004OTYxPW0KK0NPTkZJR19TTkRfU09DX1dNODk3MT1tCitDT05GSUdfU05EX1NPQ19XTTg5NzQ9bQorQ09ORklHX1NORF9TT0NfV004OTg4PW0KK0NPTkZJR19TTkRfU09DX1dNODk5MD1tCitDT05GSUdfU05EX1NPQ19XTTg5OTM9bQorQ09ORklHX1NORF9TT0NfV005MDgxPW0KK0NPTkZJR19TTkRfU09DX01BWDk4Nzc9bQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDMsNiArMTE2OCw3IEBACiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldApAQCAtMTA3Miw2ICsxMTk4LDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtMTA4Niw5ICsxMjEzLDExIEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTE1MSw5ICsxMjgwLDQ2IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVD15CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5Nz15CitDT05GSUdfVVNCX1I4QTY2NTk3PXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPW0KK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9FVEhfRUVNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtMTE3Niw2ICsxMzQyLDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogQ09ORklHX01NQ19TUEk9eQogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldApAQCAtMTIyMyw2ICsxMzkxLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEyNzksNiArMTQ0OCw3IEBACiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMzQzLDcgKzE1MTMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNDIzLDYgKzE1OTIsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC0xNDMzLDggKzE2MDMsMTEgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTE0NDIsNiArMTYxNSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE0NTUsNyArMTYyOSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTQ5NiwxMSArMTY2OSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xNTYyLDUgKzE3MzcsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCmluZGV4IDU2NGJmN2IuLjdiYzkyNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDA6MDEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTg6NTg6NTggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtODQsMTggKzk0LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CkBAIC0xMDQsNiArMTE1LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTExNSw3ICsxMzAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTYyLDYgKzE3Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjMsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yOTEsNyArMzA4LDggQEAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAogIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNTgsNiArMzc2LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zODcsNiArNDA2LDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtMzk0LDcgKzQxNCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQxMiw5ICs0MzEsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NjMsNyArNTgyLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5OSwxMCArNjE3LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDA9eQogQ09ORklHX05FVERFVl8xMDAwMD15Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NjUsMTAgKzY4MCwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNjc5LDkgKzcwNCw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiAjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CiAKQEAgLTc2Niw4ICs3ODksMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTgzOCw3ICs4NjMsNiBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogIyBDT05GSUdfTkZTX1YzIGlzIG5vdCBzZXQKQEAgLTg4NSw2ICs5MDksNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC04OTQsOCArOTE5LDExIEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApAQCAtOTAzLDYgKzkzMSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkxNiw3ICs5NDUsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NQU5BR0VSMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldApAQCAtOTQ4LDExICs5NzYsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTAxNiw1ICsxMDQ2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwppbmRleCBlYjQzMWM0Li5jMjBhZTVlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAyOjI2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjAxOjQxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yNyw3ICsyOCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzcsNiArNDAsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDksMTEgKzU4LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTg3LDE4ICs5NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTA3LDYgKzExOCwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTgsNyArMTMzLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2NSw2ICsxODAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNiArMjI2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjk1LDcgKzMxMiw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwIgogCiAjCkBAIC0zODIsNiArNDAwLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MTEsNiArNDMwLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDE4LDcgKzQzOCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQzNiw5ICs0NTUsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NzQsMTAgKzU5Myw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjMyLDEwICs2NDgsMjAgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKQEAgLTY0Niw5ICs2NzIsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03MzQsOCArNzU4LDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC04MDYsNyArODMyLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC04MzMsNiArODU4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTg0Miw4ICs4NjgsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC04NTEsNiArODgwLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtODY0LDcgKzg5NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC04OTYsMTEgKzkyNSwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC05NjUsNSArOTk2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NlNzc4MF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwppbmRleCA3NTZiZWVjLi44MmJhZWVmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjAzOjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjAzOjU5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00OCwxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTgxLDE5ICs5MSwyMCBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKIENPTkZJR19IQVZFX0tQUk9CRVM9eQpAQCAtMTAxLDYgKzExMiwxMSBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMTIsNyArMTI4LDggQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CitDT05GSUdfQkxLX0RFVl9CU0c9eQogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCiAjCkBAIC0xNTksNiArMTc2LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKQEAgLTE5OSw3ICsyMTcsNiBAQAogQ09ORklHX1NQQVJTRU1FTT15CiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIwNyw2ICsyMjQsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yODcsOCArMzA1LDkgQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MTAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15Ci1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAuMTE1MjAwIHJvb3Q9L2Rldi9zZGExIgorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMCwxMTUyMDAgcm9vdD0vZGV2L3NkYTEiCiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM4Miw2ICs0MDEsNyBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zODksNyArNDA5LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAKQEAgLTQwNiw5ICs0MjUsOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01NDksNiArNTY4LDcgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQpAQCAtNTg3LDExICs2MDcsMTMgQEAKICMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiAjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CkBAIC02MTIsNiArNjM0LDcgQEAKICMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BVFA4NjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKQEAgLTYzMCw2ICs2NTMsNyBAQAogIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NDgsOCArNjcyLDEzIEBACiAjCiAKICMKLSMgQSBuZXcgYWx0ZXJuYXRpdmUgRmlyZVdpcmUgc3RhY2sgaXMgYXZhaWxhYmxlIHdpdGggRVhQRVJJTUVOVEFMPXkKKyMgWW91IGNhbiBlbmFibGUgb25lIG9yIGJvdGggRmlyZVdpcmUgZHJpdmVyIHN0YWNrcy4KICMKKworIworIyBTZWUgdGhlIGhlbHAgdGV4dHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNzI0LDEwICs3NTMsNyBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTgyMSwxMCArODQ3LDE5IEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKQEAgLTgzMyw3ICs4NjgsNiBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldApAQCAtODU3LDYgKzg5MSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19WR0FfQVJCPXkKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC05MzcsMTEgKzk3MiwxMSBAQAogQ09ORklHX0xPR09fU1VQRVJIX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9QUklNRT15CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtOTY0LDYgKzk5OSw3IEBACiBDT05GSUdfSElEX0VaS0VZPXkKICMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAogQ09ORklHX0hJRF9HWVJBVElPTj15CisjIENPTkZJR19ISURfVFdJTkhBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfS0VOU0lOR1RPTiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0xPR0lURUNIPXkKICMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKQEAgLTEwMDksNiArMTA0NSw3IEBACiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTEyNDMsNiArMTI4MCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI1Myw4ICsxMjkxLDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEyNjMsNiArMTMwNCw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTEyNzYsNyArMTMxOCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKQEAgLTEzMDksNiArMTM1MCw3IEBACiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMzcxLDUgKzE0MTMsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKaW5kZXggN2ZlZGFhZS4uZGQwZTg5MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA0OjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjA3OjE0IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw3ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTMsMTEgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTkxLDIwICsxMDEsMjIgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9bQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTQsNiArMTI2LDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNiw3ICsxNDMsNyBAQAogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Myw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTgsNiArMjM2LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAyLDcgKzMyMSw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDExNTIwMCBtZW09NjRNIHJvb3Q9L2Rldi9uZnMiCiAKICMKQEAgLTM4Miw2ICs0MDIsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC00MTksNyArNDQxLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDMyLDYgKzQ1Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKQEAgLTU5MSw2ICs2MTMsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC02MDMsNyArNjI2LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjc5LDYgKzcwNiw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzA0LDEwICs3MzIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04MDQsMTAgKzgyOSwyMCBAQAogQ09ORklHX0RFVlBPUlQ9eQogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIwogIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKQEAgLTgyMiw5ICs4NTcsNyBAQAogIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC04NjEsNiArODk0LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTg3OSw3ICs5MTMsNiBAQAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAogQ09ORklHX0hJRF9TVVBQT1JUPXkKIENPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIApAQCAtOTQ0LDggKzk3NywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMTEsMTIgKzEwNDYsMTIgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15CiBDT05GSUdfTkZTRF9WMz15CkBAIC0xMTA4LDYgKzExNDMsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExMTksMTEgKzExNTUsMTUgQEAKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTExMzQsNiArMTE3NCw3IEBACiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMTQ3LDcgKzExODgsNiBAQAogIwogIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKICMKLSMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPXkKIENPTkZJR19DUllQVE9fQUxHQVBJMj15CiBDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQEAgLTExODksMTEgKzEyMjksMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC0xMjU5LDUgKzEzMDEsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCmluZGV4IGMyOTZjYTUuLjY2MjE1NmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDY6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTE6NDkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ5LDExICs1OCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtODcsMTggKzk3LDE5IEBACiBDT05GSUdfRVZFTlRGRD15CiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwNyw2ICsxMTgsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE4LDcgKzEzNCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjUsNiArMTgxLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjEwLDYgKzIyNyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5Miw3ICszMTAsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNzQsNiArMzkzLDcgQEAKICMgQ09ORklHX0lQX05GX0FSUFRBQkxFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDAsNiArNDYwLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldApAQCAtNDQ3LDcgKzQ2OCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQ2OSw5ICs0ODksOSBAQAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC02MDUsMTAgKzYyNSw3IEBACiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNjg2LDYgKzcwMywxMSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CkBAIC03MjMsNyArNzQ1LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKQEAgLTc3NSw4ICs3OTYsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtODEzLDggKzgzNiw2IEBACiBDT05GSUdfUFJPQ19TWVNDVEw9eQogQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApAQCAtODQ3LDcgKzg2OCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtODc0LDYgKzg5NCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtODgzLDggKzkwNCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg5Myw2ICs5MTcsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC05MDYsNyArOTMxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTkzOCwxMSArOTYyLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEwMDYsNSArMTAzMiw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzI0X2dlbmVyaWNfZGVmY29uZmlnCmluZGV4IGJhMjZiZTEuLmUwNjcxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3MjRfZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzcyNF9nZW5lcmljX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA2OjQ4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjE0OjAwIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NiwxNCArNTUsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAogQ09ORklHX1RSRUVfUkNVPXkKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtOTIsMTkgKzk5LDIxIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CitDT05GSUdfRVZFTlRfUFJPRklMRT15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19UUkFDRVBPSU5UUz15Ci1DT05GSUdfTUFSS0VSUz15CiBDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMywxMyArMTIyLDE4IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE2OSw2ICsxODMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyND15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE0LDcgKzIyOSw2IEBACiAjCiAjIE1lbW9yeSBob3RwbHVnIGlzIGN1cnJlbnRseSBpbmNvbXBhdGlibGUgd2l0aCBTb2Z0d2FyZSBTdXNwZW5kCiAjCi1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIyMiw2ICsyMzYsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNDYsNiArMjYxLDggQEAKICMgQm9hcmQgc3VwcG9ydAogIwogIyBDT05GSUdfU0hfNzcyNF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfS0ZSMlIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FQ09WRUMgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0zMTgsNyArMzM1LDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzQ1LDYgKzM2Myw3IEBACiBDT05GSUdfSElCRVJOQVRJT05fTlZTPXkKIENPTkZJR19ISUJFUk5BVElPTj15CiBDT05GSUdfUE1fU1REX1BBUlRJVElPTj0iIgorQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSPXkKIENPTkZJR19DUFVfSURMRV9HT1ZfTUVOVT15CkBAIC00MjcsNiArNDQ2LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTQzNyw2ICs0NTcsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogQ09ORklHX0kyQ19TSF9NT0JJTEU9eQogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CkBAIC00NTYsMjAgKzQ3NywyMSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTQ4OCw4ICs1MTAsMTAgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC01NDAsNiArNTY0LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC01ODcsNyArNjEyLDkgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldApAQCAtNjQyLDYgKzY2OSw3IEBACiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC02NTQsMTEgKzY4MiwxNSBAQAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19SSU5HX0JVRkZFUj15CiBDT05GSUdfRVZFTlRfVFJBQ0lORz15CiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKIENPTkZJR19UUkFDSU5HPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKQEAgLTY2OCw2ICs3MDAsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02OTIsNCArNzI1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKaW5kZXggYjFkOWIyMy4uMTk0ZmY3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc2M3JkcF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzowNzoxNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOToxNTozNyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM3LDYgKzQwLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ4LDExICs1NywxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtOTIsMTkgKzEwMiwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKQEAgLTExNCw2ICsxMjYsMTEgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTI1LDcgKzE0Miw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzMsNiArMTkwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2Mz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIxNCw3ICsyMzIsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yMjIsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzAzLDcgKzMyMSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMiwxMTUyMDAgcm9vdD0vZGV2L3NkYTEgcm9vdGRlbGF5PTEwIgogCiAjCkBAIC0zNzEsNiArMzkwLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00MDEsNiArNDIxLDcgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQpAQCAtNDA5LDcgKzQzMCw2IEBACiAjCiAjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCiAjCi1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKQEAgLTQyMiw2ICs0NDIsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MzEsOSArNDUyLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4OCw2ICs1MDksNyBAQAogQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKIENPTkZJR19NVERfUEhZU01BUD15CiAjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0dQSU9fQUREUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTU2NSw3ICs1ODcsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNjIxLDEwICs2NDIsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03MTYsMTEgKzczNCwxNSBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTgzMCw2ICs4NTIsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtODk5LDYgKzkyMiw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CkBAIC05MjMsNiArOTQ3LDggQEAKICMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC05NTYsOCArOTgyLDEwIEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTAyMiw3ICsxMDUwLDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKICMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0CkBAIC0xMDk2LDYgKzExMjMsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEwNywxMSArMTEzNSwxNSBAQAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldApAQCAtMTEyMSw2ICsxMTUzLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTEzNCw3ICsxMTY3LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTExNjYsMTEgKzExOTgsMTMgQEAKICMKICMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTIzMiw1ICsxMjY2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NzBfZ2VuZXJpY19kZWZjb25maWcKaW5kZXggNDI2YTg4Zi4uMzRiZWQ1NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc3MF9nZW5lcmljX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzcwX2dlbmVyaWNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDg6MDUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6MTc6MTYgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI3LDcgKzI4LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNyw2ICs0MCwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ1LDE0ICs1NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfVFJFRV9SQ1U9eQotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX1JDVV9GQU5PVVQ9MzIKICMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19HUk9VUF9TQ0hFRD15CkBAIC05MSwxOSArOTgsMjEgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQpAQCAtMTEyLDEzICsxMjEsMTggQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTY2LDYgKzE4MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMTAsNyArMjI1LDYgQEAKICMKICMgTWVtb3J5IGhvdHBsdWcgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFNvZnR3YXJlIFN1c3BlbmQKICMKLUNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldApAQCAtMjE4LDYgKzIzMiw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMxMyw3ICszMjgsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMzgsNiArMzU0LDcgQEAKIENPTkZJR19ISUJFUk5BVElPTl9OVlM9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CiBDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQpAQCAtNDIwLDYgKzQzNyw3IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCkBAIC00MzAsNiArNDQ4LDcgQEAKICMKICMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCiAjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfU0hfTU9CSUxFPXkKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNDQ5LDIwICs0NjgsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC00ODEsOCArNTAxLDEwIEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtNTMzLDYgKzU1NSw3IEBACiAjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBSVEMgZHJpdmVycwpAQCAtNTgwLDcgKzYwMyw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTYzNSw2ICs2NjAsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNjQ3LDExICs2NzMsMTUgQEAKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfUklOR19CVUZGRVI9eQogQ09ORklHX0VWRU5UX1RSQUNJTkc9eQogQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CiBDT05GSUdfVFJBQ0lORz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjkxLDcgQEAKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNjg1LDQgKzcxNiw1IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCmluZGV4IGVkMzE2ZjYuLjUxY2JhZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfMzJiaXRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MDg6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIEZyaSBTZXAgMjUgMTE6Mzk6MjAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDggKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKLUNPTkZJR19JT19UUkFQUEVEPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MSwxMCArNDMsMTcgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldApAQCAtNTMsMTEgKzYyLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC02Nyw4ICs3Nyw3IEBACiBDT05GSUdfVVNFUl9TQ0hFRD15CiAjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldApAQCAtNzksNyArODgsNyBAQAogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKQEAgLTkzLDI4ICsxMDIsMzcgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKK0NPTkZJR19FVkVOVF9QUk9GSUxFPXkKK0NPTkZJR19QRVJGX0NPVU5URVJTPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKK0NPTkZJR19UUkFDRVBPSU5UUz15CitDT05GSUdfT1BST0ZJTEU9eQogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfS1BST0JFUz15CitDT05GSUdfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19HQ09WX0tFUk5FTD15CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNyw3ICsxNDUsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzYsNiArMTk0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzNCwxMiBAQAogIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzI1NksgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzRNQiBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV82NE1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzUxMk1CIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKICMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldApAQCAtMjIzLDcgKzI0OCw2IEBACiBDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CiBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQz15CiAjIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKQEAgLTIzMSw2ICsyNTUsNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0yNTYsNiArMjgxLDcgQEAKICMKICMgQ09ORklHX1NIX0hJR0hMQU5ERVIgaXMgbm90IHNldAogQ09ORklHX1NIX1NINzc4NUxDUj15CisjIENPTkZJR19TSF9TSDc3ODVMQ1JfUFQgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0yNjQsMTQgKzI5MCwyOSBAQAogQ09ORklHX1NIX1BDTEtfRlJFUT01MDAwMDAwMAogQ09ORklHX1NIX0NMS19DUEc9eQogQ09ORklHX1RJQ0tfT05FU0hPVD15Ci0jIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CiAKICMKICMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCiAjCi0jIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKK0NPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfU0hfQ1BVX0ZSRVE9eQogCiAjCiAjIERNQSBzdXBwb3J0CkBAIC0yOTksMTIgKzM0MCwxMiBAQAogQ09ORklHX1NDSEVEX0hSVElDSz15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNDT01QPXkKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15CiBDT05GSUdfR1VTQT15Ci0jIENPTkZJR19TUEFSU0VfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19TUEFSU0VfSVJRPXkKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTMxMiw3ICszNTMsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zMjEsOCArMzYzLDcgQEAKIENPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldApAQCAtMzM5LDggKzM4MCwxMyBAQAogIwogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMgKEVYUEVSSU1FTlRBTCkKICMKLSMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISUJFUk5BVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQogQ09ORklHX05FVD15CiAKICMKQEAgLTM5Miw2ICs0MzgsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNCw2ICs0NjEsOCBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldApAQCAtNDIxLDYgKzQ3MCw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQyOSw3ICs0NzksNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NDIsMTggKzQ5MSwxNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTM4LDcgKzU4Niw4IEBACiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CkBAIC01NjEsNyArNjEwLDcgQEAKIENPTkZJR19TQ1NJX0RNQT15CiAjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUFJPQ19GUz15CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCkBAIC01OTEsNiArNjQwLDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYxMiw2ICs2NjIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzOSw2ICs2OTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NTcsNyArNzA5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjkwLDYgKzc0Niw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjk3LDEyICs3NTQsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzM5LDI1ICs3OTEsNDIgQEAKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwogQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CitDT05GSUdfSU5QVVRfRVZCVUc9bQogCiAjCiAjIElucHV0IERldmljZSBEcml2ZXJzCiAjCiBDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NZTkFQVElDU19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKQEAgLTc2Niw3ICs4MzUsMTIgQEAKICMKICMgSGFyZHdhcmUgSS9PIHBvcnRzCiAjCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX0k4MDQyPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTc3Nyw3ICs4NTEsNyBAQAogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQogQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15Ci1DT05GSUdfREVWS01FTT15CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAogCkBAIC03OTYsMTIgKzg3MCwxMCBAQAogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQogIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CitDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04MDksNiArODgxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09QQ0E9eQpAQCAtODM4LDYgKzkxMSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODY0LDIxICs5MzgsNDIgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9XRFQ9eQorIyBDT05GSUdfU0hfV0RUX01NQVAgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwpAQCAtODk2LDE0ICs5OTEsMTcgQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX1ZHQV9BUkIgaXMgbm90IHNldAogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTkxNSwxMiArMTAxMywxMSBAQAogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiAjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9TWVNfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX1NZU19DT1BZQVJFQT1tCi1DT05GSUdfRkJfU1lTX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotQ09ORklHX0ZCX1NZU19GT1BTPW0KLUNPTkZJR19GQl9ERUZFUlJFRF9JTz15CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CkBAIC05NTUsNyArMTA1Miw3IEBACiAjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAotQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KKyMgQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TTTUwMT15CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkBAIC05ODEsMTQgKzEwNzgsMTEyIEBACiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0xPR09fU1VQRVJIX01PTk8gaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19TVVBFUkhfVkdBMTYgaXMgbm90IHNldAotIyBDT05GSUdfTE9HT19TVVBFUkhfQ0xVVDIyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorQ09ORklHX0xPR09fU1VQRVJIX01PTk89eQorQ09ORklHX0xPR09fU1VQRVJIX1ZHQTE2PXkKK0NPTkZJR19MT0dPX1NVUEVSSF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD15CitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NPVU5EX09TU19DT1JFX1BSRUNMQUlNPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfUkFXTUlEST15CitDT05GSUdfU05EX1NFUVVFTkNFUj15CisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKK0NPTkZJR19TTkRfSFJUSU1FUj15CitDT05GSUdfU05EX1NFUV9IUlRJTUVSX0RFRkFVTFQ9eQorQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUz15CisjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUkFXTUlESV9TRVE9eQorQ09ORklHX1NORF9PUEwzX0xJQl9TRVE9eQorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CitDT05GSUdfU05EX01QVTQwMV9VQVJUPXkKK0NPTkZJR19TTkRfT1BMM19MSUI9eQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9QQ0k9eQorIyBDT05GSUdfU05EX0FEMTg4OSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTEk1NDUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVElJWFAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FUSUlYUF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVU4ODEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BVTg4MjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQVcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BWlQzMzI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9CVDg3WCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQ01JUENJPXkKKyMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DVFhGSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01PTkEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRUNITzNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09ESlggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTlMxMzcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FUzE5MzggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VTMTk2OCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hJRklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSUNFMTcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5URUw4WDAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lOVEVMOFgwTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfS09SRzEyMTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xYNjQ2NEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUEVSSCBpcyBub3Qgc2V0CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAwMSwzNCArMTE5NiwzOSBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi1DT05GSUdfSElEX0E0VEVDSD15Ci1DT05GSUdfSElEX0FQUExFPXkKLUNPTkZJR19ISURfQkVMS0lOPXkKLUNPTkZJR19ISURfQ0hFUlJZPXkKLUNPTkZJR19ISURfQ0hJQ09OWT15Ci1DT05GSUdfSElEX0NZUFJFU1M9eQotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotQ09ORklHX0hJRF9FWktFWT15Ci0jIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfR1lSQVRJT049eQotIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAotQ09ORklHX0hJRF9MT0dJVEVDSD15CitDT05GSUdfSElEX0E0VEVDSD1tCitDT05GSUdfSElEX0FQUExFPW0KK0NPTkZJR19ISURfQkVMS0lOPW0KK0NPTkZJR19ISURfQ0hFUlJZPW0KK0NPTkZJR19ISURfQ0hJQ09OWT1tCitDT05GSUdfSElEX0NZUFJFU1M9bQorQ09ORklHX0hJRF9EUkFHT05SSVNFPW0KKyMgQ09ORklHX0RSQUdPTlJJU0VfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT1tCitDT05GSUdfSElEX0tZRT1tCitDT05GSUdfSElEX0dZUkFUSU9OPW0KK0NPTkZJR19ISURfVFdJTkhBTj1tCitDT05GSUdfSElEX0tFTlNJTkdUT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX01JQ1JPU09GVD15Ci1DT05GSUdfSElEX01PTlRFUkVZPXkKLSMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0Ci1DT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKK0NPTkZJR19ISURfTUlDUk9TT0ZUPW0KK0NPTkZJR19ISURfTU9OVEVSRVk9bQorQ09ORklHX0hJRF9OVFJJRz1tCitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KICMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKLUNPTkZJR19ISURfUEVUQUxZTlg9eQotQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15Ci1DT05GSUdfSElEX1NVTlBMVVM9eQotIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorQ09ORklHX0hJRF9HUkVFTkFTSUE9bQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9bQogIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAorQ09ORklHX0hJRF9aRVJPUExVUz1tCisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKQEAgLTEwNDAsMTMgKzEyNDAsMTQgQEAKICMKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwotQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTEwNjEsMTAgKzEyNjIsOCBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9IQ0Q9bQotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfUjhBNjY1OTdfSENEPXkKQEAgLTExMzMsNyArMTMzMiw3IEBACiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAotQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldApAQCAtMTE0Myw3ICsxMzQyLDI5IEBACiAjCiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUMgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycworIworQ09ORklHX01NQ19CTE9DSz15CitDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CisjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAorCisjCisjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfTU1DX1NESENJPW0KKyMgQ09ORklHX01NQ19TREhDSV9QQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TREhDSV9QTFRGTT1tCisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1RJRk1fU0QgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0NCNzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19WSUFfU0RNTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CkBAIC0xMTc5LDYgKzE0MDAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUlRDIGRyaXZlcnMKQEAgLTEyMDMsOSArMTQyNSwyMCBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfRE1BREVWSUNFUz15CisKKyMKKyMgRE1BIERldmljZXMKKyMKICMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VSU89bQorIyBDT05GSUdfVUlPX0NJRiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fQUVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QQ0lfR0VORVJJQyBpcyBub3Qgc2V0CiAKICMKICMgVEkgVkxZTlEKQEAgLTEyMjUsMTMgKzE0NTgsMTUgQEAKICMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfTUJDQUNIRT15CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjc1LDkgKzE1MTAsOSBAQAogQ09ORklHX1NZU0ZTPXkKIENPTkZJR19UTVBGUz15CiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSFVHRVRMQkZTPXkKK0NPTkZJR19IVUdFVExCX1BBR0U9eQorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjk3LDIwICsxNTMyLDIwIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAotQ09ORklHX05GU0RfVjQ9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15CitDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15CkBAIC0xMzczLDg1ICsxNjA4LDY5IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15Ci0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiAjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0Ci0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0Ci1DT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQotIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAotQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19TQ0hFRF9ERUJVRz15Ci0jIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAotIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX1NDSEVEU1RBVFM9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAotIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX0xBVEVOQ1lUT1A9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKLSMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CitDT05GSUdfVFJBQ0VSX01BWF9UUkFDRT15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX0VWRU5UX1RSQUNJTkc9eQorQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVJfQUxMT1dfU1dBUD15CitDT05GSUdfVFJBQ0lORz15CitDT05GSUdfR0VORVJJQ19UUkFDRVI9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKLSMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0lSUVNPRkZfVFJBQ0VSPXkKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9UUkFDRVI9eQorIyBDT05GSUdfRlRSQUNFX1NZU0NBTExTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKICMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKK0NPTkZJR19LTUVNVFJBQ0U9eQorQ09ORklHX1dPUktRVUVVRV9UUkFDRVI9eQogIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fUFJPRklMRVIgaXMgbm90IHNldAorQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUklOR19CVUZGRVJfQkVOQ0hNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15Ci0jIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0JPT1RNRU0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1QX0NPREUgaXMgbm90IHNldAotIyBDT05GSUdfU0hfTk9fQlNTX0lOSVQgaXMgbm90IHNldAorQ09ORklHX0RXQVJGX1VOV0lOREVSPXkKK0NPTkZJR19NQ09VTlQ9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE0NjUsNyArMTY4NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTUwNywxMSArMTcyNSwxMyBAQAogIwogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19WTUFDIGlzIG5vdCBzZXQKIAogIwogIyBEaWdlc3QKICMKICMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE1NTYsNyArMTc3Niw3IEBACiAjCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CitDT05GSUdfQklOQVJZX1BSSU5URj15CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtMTU3Myw1ICsxNzkzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwppbmRleCAwMDRlNmY1Li44YzJjNDdlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjA5OjM0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjIzOjE4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOSw4ICszMCw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15Ci1DT05GSUdfSU9fVFJBUFBFRD15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDEsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTMsMTEgKzYxLDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC05MywxOSArMTAyLDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX09QUk9GSUxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldApAQCAtMTE1LDYgKzEyNSwxMCBAQAogQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIwogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CkBAIC0xMjcsNyArMTQxLDcgQEAKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE3Niw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjQsNiArMjM5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzA2LDcgKzMyMiw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTM4Niw2ICs0MDMsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxNSw2ICs0MzMsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CkBAIC00MjMsNyArNDQyLDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNDM2LDYgKzQ1NCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldApAQCAtNDQ1LDkgKzQ2NCw5IEBACiAjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogQ09ORklHX01URD15CiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci0jIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01ODUsNiArNjA0LDcgQEAKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQogQ09ORklHX1NBVEFfUE1QPXkKICMgQ09ORklHX1NBVEFfQUhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1NJTDI0IGlzIG5vdCBzZXQKQEAgLTYwNiw2ICs2MjYsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTYzMyw2ICs2NTQsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02NTEsNyArNjczLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNjg0LDYgKzcxMCw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNjkxLDEwICs3MTgsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC03NDQsMTMgKzc2OCwxNyBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NIX0tFWVNDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04MDMsNiArODMxLDcgQEAKIENPTkZJR19ERVZQT1JUPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DT01QQVQ9eQogIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiBDT05GSUdfSTJDX0FMR09QQ0E9eQpAQCAtODMyLDYgKzg2MSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtODU4LDIwICs4ODgsMjEgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04OTAsMTQgKzkyMSwxNyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTk4Miw3ICsxMDE2LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMDA1LDYgKzEwMzgsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMDU1LDYgKzEwODksNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTE3Myw2ICsxMjA4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMjI0LDggKzEyNjAsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xMjkxLDEyICsxMzI5LDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTM3Miw2ICsxNDEwLDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTQwNywxOCArMTQ0NiwyMyBAQAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAogIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKQEAgLTE0MjYsNiArMTQ3MCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTQ0MCwxMSArMTQ4NSwxMSBAQAogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ1OSw3ICsxNTA0LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNTAxLDExICsxNTQ1LDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTU2Nyw1ICsxNjEzLDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKaW5kZXggYWQ3ZDYwOS4uOTIxMTVlNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTA6MzMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6Mjc6MTcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTMsNiArMTMsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI2LDcgKzI3LDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNiw2ICszOSwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtNDYsMTEgKzU1LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKQEAgLTc3LDE4ICs4NywxOSBAQAogQ09ORklHX0VWRU5URkQ9eQogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQogQ09ORklHX0hBVkVfS1BST0JFUz15CkBAIC05NiwxMiArMTA3LDE2IEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX0JBU0VfU01BTEw9MQogIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTE0OCw2ICsxNjMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0xOTMsNiArMjA5LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMjc0LDcgKzI5MSw4IEBACiBDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwMjEwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwxMTUyMDAgcm9vdD0xZjAxIG10ZHBhcnRzPXBoeXNfbWFwcGVkX2ZsYXNoOjY0ayhmaXJtKXJvLC0oc3lzKSBuZXRkZXY9MzQsMHgzMDAsZXRoMCAiCiAKICMKQEAgLTMzOSw2ICszNTcsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM2OCw2ICszODcsNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CkBAIC0zNzUsNyArMzk1LDYgQEAKICMKICMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKICMKLUNPTkZJR19NQUM4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTAKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtNTI5LDEwICs1NDgsNyBAQAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMD15CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKK0NPTkZJR19XTEFOPXkKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CiAKQEAgLTU5MSwxMSArNjA3LDE1IEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNjcyLDcgKzY5Miw5IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKQEAgLTcwOSw4ICs3MzEsNiBAQAogQ09ORklHX1BST0NfU1lTQ1RMPXkKIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiAjIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQpAQCAtNzMyLDcgKzc1Miw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKQEAgLTc2OCw2ICs3ODcsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKQEAgLTc3NSw4ICs3OTUsMTEgQEAKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRE1BX0FQSV9ERUJVRyBpcyBub3Qgc2V0CkBAIC03ODUsNiArODA4LDcgQEAKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC03OTcsNyArODIxLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKQEAgLTgyOCwxMSArODUxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTg5NSw1ICs5MjAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKaW5kZXggMjA3YjBjOS4uZTM4NThkNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjExOjAzIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjI5OjI2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0zMCw3ICszMSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtNDAsNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTUsMTIgKzY0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CitDT05GSUdfVFJFRV9SQ1VfVFJBQ0U9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMTEsMTkgKzEyMCwyMSBAQAogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQogCiAjCi0jIFBlcmZvcm1hbmNlIENvdW50ZXJzCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCitDT05GSUdfUEVSRl9FVkVOVFM9eQorQ09ORklHX0VWRU5UX1BST0ZJTEU9eQorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX1RSQUNFUE9JTlRTPXkKLUNPTkZJR19NQVJLRVJTPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiBDT05GSUdfS1BST0JFUz15CkBAIC0xMzUsNiArMTQ2LDExIEBACiBDT05GSUdfVVNFX0dFTkVSSUNfU01QX0hFTFBFUlM9eQogQ09ORklHX0hBVkVfQ0xLPXkKIENPTkZJR19IQVZFX0RNQV9BUElfREVCVUc9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTE0Nyw3ICsxNjMsNyBAQAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19TVE9QX01BQ0hJTkU9eQogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xOTYsNiArMjEyLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjU2LDYgKzI3Myw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTM1Myw3ICszNzEsOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAxMDAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDEwMDAwCi1DT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FX09WRVJXUklURT15CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPWJpb3MgaWdub3JlX2xvZ2xldmVsIgogCiAjCkBAIC00MzgsNiArNDU3LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00ODksNiArNTA5LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC01NjIsNyArNTgzLDYgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0xPV0xFVkVMPXkKICMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU3MCw2ICs1OTAsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogQ09ORklHX0FUQV9TRkY9eQogIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CkBAIC02MDIsMTIgKzYyMywxMCBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC02NzUsNiArNjk0LDcgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiAjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNjg1LDYgKzcwNSw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0hfTU9CSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtNzA2LDkgKzcyNyw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldApAQCAtNzI5LDExICs3NDcsMTUgQEAKICMKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQogIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAogCkBAIC03NjIsOCArNzg0LDEyIEBACiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAorIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCkBAIC04MDgsNiArODM0LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD1tCiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC04NjIsNiArODg5LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15CkBAIC04NzYsMTAgKzkwNCwxMSBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19VU0JfTTY2NTkyPXkKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CkBAIC05MzksNiArOTY4LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05NTAsNiArOTgwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKQEAgLTEwMDIsOCArMTAzMywxMCBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtMTA2Myw3ICsxMDk2LDYgQEAKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CkBAIC0xMTI5LDYgKzExNjEsNyBAQAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTExNjQsMjIgKzExOTcsMjkgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19LUFJPQkVTX1NBTklUWV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKK0NPTkZJR19IQVZFX1NZU0NBTExfVFJBQ0VQT0lOVFM9eQogQ09ORklHX1JJTkdfQlVGRkVSPXkKIENPTkZJR19FVkVOVF9UUkFDSU5HPXkKIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVI9eQorQ09ORklHX1JJTkdfQlVGRkVSX0FMTE9XX1NXQVA9eQogQ09ORklHX1RSQUNJTkc9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CiBDT05GSUdfRlRSQUNFPXkKQEAgLTExODgsNiArMTIyOCw3IEBACiAjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQogIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldApAQCAtMTIwNSwxMCArMTI0NiwxMCBAQAogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19FQVJMWV9QUklOVEs9eQotIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15CisjIENPTkZJR19TVEFDS19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RVTVBfQ09ERT15CisjIENPTkZJR19EV0FSRl9VTldJTkRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9OT19CU1NfSU5JVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjMsNyArMTI2NCw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CkBAIC0xMjU1LDExICsxMjk1LDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTEzMjIsNSArMTM2NCw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCmluZGV4IDJiZTJkNzUuLmNiOTE5YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMS1yYzYKLSMgVGh1IEF1ZyAyMCAxNTowMzowNCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozMzowMCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC01NywxMSArNTcsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtOTUsMjEgKzk2LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15Ci1DT05GSUdfSEFWRV9QRVJGX0NPVU5URVJTPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKQEAgLTE3NSw2ICsxNzUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1NyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CkBAIC0yMjAsNiArMjIxLDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzEyLDcgKzMxNCw4IEBACiBDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwODAwMDAwCiBDT05GSUdfRU5UUllfT0ZGU0VUPTB4MDAwMDEwMDAKICMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAotIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgb3B0aW9ucwpAQCAtMzc0LDYgKzM3Nyw3IEBACiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldApAQCAtNDAzLDYgKzQwNyw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKQEAgLTQxMCw3ICs0MTUsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MTgsMTAgKzYyMiw3IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKIApAQCAtNzE0LDcgKzcxNSw2IEBACiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC03MzYsNiArNzM2LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTgxOCw2ICs4MTksNyBAQAogIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CkBAIC04ODIsNyArODg0LDYgQEAKIENPTkZJR19ST01GU19PTl9CTE9DSz15CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0QgaXMgbm90IHNldApAQCAtOTA5LDYgKzkxMCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC05MjIsNyArOTI0LDcgQEAKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKLUNPTkZJR19IQVZFX0ZUUkFDRV9TWVNDQUxMUz15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQV9BUElfREVCVUcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCmluZGV4IDVkOTcwMjYuLmI5ZmU5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxMjoyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTozNTowMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCw2ICsxNCw3IEBACiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogIyBDT05GSUdfR0VORVJJQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQpAQCAtMjcsNyArMjgsOSBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKIENPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQorQ09ORklHX0FSQ0hfSEFTX0NQVV9JRExFX1dBSVQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQogCiAjCiAjIEdlbmVyYWwgc2V0dXAKQEAgLTM4LDYgKzQxLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0JaSVAyPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk1BPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKQEAgLTQ1LDExICs1NCwxMiBAQAogIwogIyBSQ1UgU3Vic3lzdGVtCiAjCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkBAIC04MywxOCArOTMsMTkgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTEwMyw2ICsxMTQsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTE1LDcgKzEzMCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNjIsNiArMTc3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjA3LDYgKzIyMyw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTI5NCw3ICszMTEsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX09WRVJXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0VYVEVORCBpcyBub3Qgc2V0CiAKICMKICMgQnVzIG9wdGlvbnMKQEAgLTQwMiwxMCArNDIwLDIwIEBACiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CkBAIC00MTYsOSArNDQ0LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTQ5NSw3ICs1MjEsOSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiBDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQpAQCAtNTU5LDcgKzU4Nyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTU3Nyw2ICs2MDQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNTg2LDggKzYxNCwxMSBAQAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTU5NSw2ICs2MjYsNyBAQAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAogIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC02MjMsNCArNjU1LDUgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCmluZGV4IDdhZDA4MGUuLjJjYTc5ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMAotIyBUaHUgSnVuIDE4IDEzOjEyOjU0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMQorIyBUaHUgU2VwIDI0IDE5OjM2OjM2IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE0LDYgKzE0LDcgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CkBAIC0yOCw3ICsyOSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzgsNiArNDEsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MCwxMSArNTksMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKQEAgLTkwLDE5ICsxMDAsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfUEVSRl9DT1VOVEVSUyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQotIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKQEAgLTExMSw2ICsxMjIsMTAgQEAKIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKIENPTkZJR19IQVZFX0NMSz15CiBDT05GSUdfSEFWRV9ETUFfQVBJX0RFQlVHPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKICMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQpAQCAtMTIzLDcgKzEzOCw3IEBACiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0JMT0NLPXkKLSMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xNzAsNiArMTg1LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTcgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldApAQCAtMjE1LDYgKzIzMSw3IEBACiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX0hBVkVfTUxPQ0s9eQogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CisjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAKICMKQEAgLTMwNyw3ICszMjQsOCBAQAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDllMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCiAjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKLUNPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkVfT1ZFUldSSVRFPXkKKyMgQ09ORklHX0NNRExJTkVfRVhURU5EIGlzIG5vdCBzZXQKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDMSwzODQwME44MSByb290PS9kZXYvbmZzIGlwPTo6Ojo6ZXRoMTphdXRvY29uZiBydyIKIAogIwpAQCAtNTA5LDYgKzUyNyw3IEBACiAjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiBDT05GSUdfU1RQPXkKQEAgLTU5NSw2ICs2MTQsNyBAQAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTYwMyw3ICs2MjMsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC02MTYsNiArNjM1LDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9bQpAQCAtNjI4LDkgKzY0OCw5IEBACiBDT05GSUdfTVREPW0KIENPTkZJR19NVERfREVCVUc9eQogQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QQVJUSVRJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKQEAgLTgyMCw2ICs4NDAsNyBAQAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CkBAIC04MzIsNyArODUzLDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtOTMxLDYgKzk1Niw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtOTU2LDEwICs5ODIsNyBAQAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC0xMDg3LDEwICsxMTEwLDIwIEBACiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldApAQCAtMTEwNSw5ICsxMTM4LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKICMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKIApAQCAtMTE0OSw2ICsxMTgwLDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX1ZHQV9BUkI9eQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKQEAgLTExNjcsNyArMTE5OSw2IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIxNyw2ICsxMjQ4LDcgQEAKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTE0MTYsOCArMTQ0OCwxMCBAQAogIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTE0ODksNyArMTUyMyw2IEBACiBDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CkBAIC0xNTkxLDYgKzE2MjQsNyBAQAogQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MjEsMjMgKzE2NTUsMjkgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKIENPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiBDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiAjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CkBAIC0xNjUwLDE0ICsxNjkwLDEzIEBACiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tNRU1DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY3Miw3ICsxNzExLDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEPXkKQEAgLTE3MTUsMTEgKzE3NTMsMTMgQEAKICMKIENPTkZJR19DUllQVE9fSE1BQz15CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiBDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NRDU9eQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CkBAIC0xNzkwLDUgKzE4MzAsNiBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQogQ09ORklHX05MQVRUUj15CiBDT05GSUdfR0VORVJJQ19BVE9NSUM2ND15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCmluZGV4IDYwOGZlNTYuLmIwMTJjYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMwCi0jIFRodSBKdW4gMTggMTM6MTQ6MzYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMxCisjIFRodSBTZXAgMjQgMTk6NDI6MzMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTQsNiArMTQsNyBAQAogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKQEAgLTI5LDcgKzMwLDkgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CiBDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKK0NPTkZJR19BUkNIX0hBU19DUFVfSURMRV9XQUlUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC00MCw2ICs0MywxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9CWklQMj15CitDT05GSUdfSEFWRV9LRVJORUxfTFpNQT15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC01MiwxMSArNjEsMTIgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTkxLDE5ICsxMDEsMjAgQEAKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKK0NPTkZJR19IQVZFX1BFUkZfRVZFTlRTPXkKIAogIwotIyBQZXJmb3JtYW5jZSBDb3VudGVycworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycwogIworQ09ORklHX1BFUkZfRVZFTlRTPXkKKyMgQ09ORklHX1BFUkZfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKLSMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMTMsNiArMTI0LDEwIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTEyNSw3ICsxNDAsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTQxLDcgKzE1Niw3IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKIAogIwogIyBTeXN0ZW0gdHlwZQpAQCAtMTc2LDYgKzE5MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTIzMyw2ICsyNDksNyBAQAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19IQVZFX01MT0NLPXkKIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgogCiAjCkBAIC0zMTQsNyArMzMxLDggQEAKIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKIENPTkZJR19FTlRSWV9PRkZTRVQ9MHgwMDAwMTAwMAotQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORV9PVkVSV1JJVEU9eQorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWRoY3AiCiAKICMKQEAgLTMzNCw3ICszNTIsMTMgQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCiAjCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorQ09ORklHX1BNX1JVTlRJTUU9eQogIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKQEAgLTM4Miw2ICs0MDYsNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTQxMSwxOSArNDM2LDE3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogQ09ORklHX0NGRzgwMjExPXkKKyMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAorIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1NfRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPW0KICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMT15Ci1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfTUFDODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCi0KLSMKLSMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KLSMKIENPTkZJR19NQUM4MDIxMV9SQ19QSUQ9eQogIyBDT05GSUdfTUFDODAyMTFfUkNfTUlOU1RSRUwgaXMgbm90IHNldAogQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEPXkKQEAgLTQ0NCw2ICs0NjcsNyBAQAogIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiAjCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00NTMsOSArNDc3LDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTU5MCw3ICs2MTQsNiBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQk5YMl9JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldApAQCAtNTk4LDYgKzYyMSw3IEBACiAjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorQ09ORklHX0FUQV9WRVJCT1NFX0VSUk9SPXkKIENPTkZJR19TQVRBX1BNUD15CiBDT05GSUdfQVRBX1NGRj15CiAjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKQEAgLTYzMSwxMCArNjU1LDcgQEAKICMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTgotIworQ09ORklHX1dMQU49eQogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiBDT05GSUdfV0xBTl84MDIxMT15CiBDT05GSUdfTElCRVJUQVM9bQpAQCAtNjQ4LDEyICs2NjksMTMgQEAKICMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUjkxNzBfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAogIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV00gaXMgbm90IHNldAogCiAjCkBAIC03NTAsMTAgKzc3MiwyMCBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldApAQCAtNzY0LDkgKzc5Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQogCkBAIC04MTMsNiArODQzLDcgQEAKICMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CiAjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldApAQCAtODI3LDkgKzg1OCw5IEBACiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQotIyBDT05GSUdfU1VQRVJIX09OX0NISVBfUjhBNjY1OTcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAogCiAjCkBAIC04OTMsNiArOTI0LDcgQEAKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTkxNyw2ICs5NDksOCBAQAogIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKQEAgLTk0OSw4ICs5ODMsMTAgQEAKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKQEAgLTEwMTQsNyArMTA1MCw2IEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiAjIENPTkZJR19ORlNfVjMgaXMgbm90IHNldApAQCAtMTA5MSw2ICsxMTI2LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTEwMyw4ICsxMTM5LDExIEBACiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVI9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1Q9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorQ09ORklHX0hBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUz15CiBDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTExMTIsNiArMTE1MSw3IEBACiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfRFdBUkZfVU5XSU5ERVIgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTExMjUsNyArMTE2NSw2IEBACiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtMTE2NywxMSArMTIwNiwxMyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQpAQCAtMTIzNSw1ICsxMjc2LDYgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKIENPTkZJR19OTEFUVFI9eQogQ09ORklHX0dFTkVSSUNfQVRPTUlDNjQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCmluZGV4IGVlMTk4N2UuLjlmOGFlZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzAKLSMgVGh1IEp1biAxOCAxMzoxNToyOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzEKKyMgVGh1IFNlcCAyNCAxOTo0NjoxMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNCwxMSArMTQsMTMgQEAKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1RNVT15CkBAIC0yOSw3ICszMSw5IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQogQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CitDT05GSUdfQVJDSF9IQVNfQ1BVX0lETEVfV0FJVD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzksNiArNDMsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTUE9eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNTQsMTQgKzY0LDEyIEBACiAjCiAjIFJDVSBTdWJzeXN0ZW0KICMKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKIENPTkZJR19UUkVFX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTExMSwyMCArMTE5LDIwIEBACiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CitDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CiAKICMKLSMgUGVyZm9ybWFuY2UgQ291bnRlcnMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKICMKK0NPTkZJR19QRVJGX0VWRU5UUz15CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15Ci0jIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfVFJBQ0VQT0lOVFM9eQotQ09ORklHX01BUktFUlM9eQogIyBDT05GSUdfT1BST0ZJTEUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CkBAIC0xMzQsNiArMTQyLDExIEBACiBDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19HQ09WX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKQEAgLTE0Niw3ICsxNTksNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAorQ09ORklHX0xCREFGPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTk1LDYgKzIwOCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzU3IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKQEAgLTI0NCw3ICsyNTgsNiBAQAogQ09ORklHX0hBVkVfTUVNT1JZX1BSRVNFTlQ9eQogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogIyBDT05GSUdfTUVNT1JZX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogQ09ORklHX01JR1JBVElPTj15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CkBAIC0yNTIsNiArMjY1LDcgQEAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfSEFWRV9NTE9DSz15CiBDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIAogIwpAQCAtMzIyLDYgKzMzNiw3IEBACiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfU0VDQ09NUD15CisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKQEAgLTMzNCw3ICszNDksOCBAQAogQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAogQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAogQ09ORklHX0VOVFJZX09GRlNFVD0weDAwMDAxMDAwCi0jIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9PVkVSV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9FWFRFTkQgaXMgbm90IHNldAogCiAjCiAjIEJ1cyBvcHRpb25zCkBAIC0zNDMsNiArMzU5LDggQEAKICMgQ09ORklHX1NIX1BDSURNQV9OT05DT0hFUkVOVCBpcyBub3Qgc2V0CiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSUVBRVI9eQorIyBDT05GSUdfUENJRV9FQ1JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSUVBRVJfSU5KRUNUIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lFQVNQTT15CiBDT05GSUdfUENJRUFTUE1fREVCVUc9eQogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldApAQCAtMzY3LDYgKzM4NSw3IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElCRVJOQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0lETEU9eQogQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQogQ09ORklHX05FVD15CkBAIC00MjAsNiArNDM5LDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC00NDIsNyArNDYyLDYgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldApAQCAtNDUwLDYgKzQ2OSw3IEBACiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKQEAgLTQ1OCw3ICs0NzgsNiBAQAogIwogIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQogIwotQ09ORklHX01BQzgwMjExX0RFRkFVTFRfUFNfVkFMVUU9MAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CkBAIC00NzEsNiArNDkwLDcgQEAKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIwogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00ODAsOSArNTAwLDkgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs2NDAsNyBAQAogIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CiBDT05GSUdfU0FUQV9QTVA9eQogIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1NJTDI0PXkKQEAgLTY0MSw2ICs2NjIsNyBAQAogIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUUDg2N1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKQEAgLTY2OCw2ICs2OTAsNyBAQAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CkBAIC02ODYsNyArNzA5LDExIEBACiAjCiAKICMKLSMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjIFlvdSBjYW4gZW5hYmxlIG9uZSBvciBib3RoIEZpcmVXaXJlIGRyaXZlciBzdGFja3MuCisjCisKKyMKKyMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtNzgyLDYgKzgwOSw3IEBACiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorIyBDT05GSUdfQ05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldApAQCAtNzg5LDEwICs4MTcsNyBAQAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOCi0jCitDT05GSUdfV0xBTj15CiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAogCkBAIC04NDIsMTQgKzg2NywxOSBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTUFYNzM1OSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9TSF9LRVlTQyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldApAQCAtOTAyLDYgKzkzMiw3IEBACiBDT05GSUdfREVWUE9SVD15CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKICMgQ09ORklHX0kyQ19DSEFSREVWIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogQ09ORklHX0kyQ19BTEdPUENBPXkKQEAgLTkzMSw2ICs5NjIsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NIX01PQklMRSBpcyBub3Qgc2V0CkBAIC05NTgsMTUgKzk5MCwxNyBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKQEAgLTk4NywxNCArMTAyMSwyNCBAQAogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CiAjCiAjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTEFOR1dFTEwgaXMgbm90IHNldAogCiAjCiAjIFNQSSBHUElPIGV4cGFuZGVyczoKICMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIwogIyBDT05GSUdfVzEgaXMgbm90IHNldAogIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTmF0aXZlIGRyaXZlcnMKKyMKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CkBAIC0xMDQ1LDYgKzEwODksNyBAQAogIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CkBAIC0xMDU2LDkgKzExMDEsNyBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotQ09ORklHX1RIRVJNQUxfSFdNT049eQogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTEwNzksOCArMTEyMiwxMCBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogQ09ORklHX01FRElBX1NVUFBPUlQ9eQogCkBAIC0xMDk5LDYgKzExNDQsNyBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfVkdBX0FSQj15CiAjIENPTkZJR19EUk0gaXMgbm90IHNldAogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldApAQCAtMTE4Myw3ICsxMjI5LDYgQEAKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU1VQUE9SVD15CiBDT05GSUdfSElEPXkKLSMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAogCiAjCkBAIC0xMjA2LDYgKzEyNTEsNyBAQAogQ09ORklHX0hJRF9FWktFWT15CiAjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKIENPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CkBAIC0xMjU1LDYgKzEzMDEsNyBAQAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtMTM3Myw2ICsxNDIwLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xNDIyLDYgKzE0NzAsNyBAQAogQ09ORklHX0VYVDRfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQ9eQogIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19KQkQyPXkKQEAgLTE0MzEsOSArMTQ4MCwxMSBAQAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQlRSRlNfRlM9eQogIyBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKIENPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CkBAIC0xNDk5LDEyICsxNTUwLDEyIEBACiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfVjRfMSBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfTE9DS0Q9eQpAQCAtMTU3Niw2ICsxNjI3LDcgQEAKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKQEAgLTE2MTAsMTggKzE2NjIsMjMgQEAKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUj15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVD15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CitDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKIENPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldApAQCAtMTYzMywxMSArMTY5MCwxMSBAQAogQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRT15CiBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFX1BPUlQ9MHhmZmViMDAwMAogQ09ORklHX0VBUkxZX1BSSU5USz15Ci0jIENPTkZJR19ERUJVR19CT09UTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAogIyBDT05GSUdfNEtTVEFDS1MgaXMgbm90IHNldAogIyBDT05GSUdfRFVNUF9DT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RXQVJGX1VOV0lOREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY1Miw3ICsxNzA5LDYgQEAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15CiBDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQogQ09ORklHX0NSWVBUT19BRUFEMj15CkBAIC0xNjk0LDExICsxNzUwLDEzIEBACiAjCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwogQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19NRDU9eQogIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKQEAgLTE3NjQsNSArMTgyMiw2IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CiBDT05GSUdfTkxBVFRSPXkKIENPTkZJR19HRU5FUklDX0FUT01JQzY0PXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcndzZW0uaAppbmRleCAxOTg3ZjNlLi4wNmUyMjUxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3J3c2VtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9yd3NlbS5oCkBAIC00MSw3ICs0MSw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBfX1JXU0VNX0lOSVRJQUxJWkVSKG5hbWUpIFwKLQl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBTUElOX0xPQ0tfVU5MT0NLRUQsIFwKKwl7IFJXU0VNX1VOTE9DS0VEX1ZBTFVFLCBfX1NQSU5fTE9DS19VTkxPQ0tFRCgobmFtZSkud2FpdF9sb2NrKSwgXAogCSAgTElTVF9IRUFEX0lOSVQoKG5hbWUpLndhaXRfbGlzdCkgXAogCSAgX19SV1NFTV9ERVBfTUFQX0lOSVQobmFtZSkgfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ltYXNrLmMKaW5kZXggNmI1ZDE5MS4uYTM1MWVkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbWFzay5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW1hc2suYwpAQCAtNjgsNyArNjgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGltYXNrX2lycV9jaGlwID0gewotCS50eXBlbmFtZQk9ICJTUi5JTUFTSyIsCisJLm5hbWUJCT0gIlNSLklNQVNLIiwKIAkubWFzawkJPSBtYXNrX2ltYXNrX2lycSwKIAkudW5tYXNrCQk9IHVubWFza19pbWFza19pcnEsCiAJLm1hc2tfYWNrCT0gbWFza19pbWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMtc2g1LmMKaW5kZXggNmMwOTJmMS4uMDZlN2UyOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjLXNoNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50Yy1zaDUuYwpAQCAtODUsNyArODUsNyBAQAogc3RhdGljIHZvaWQgZW5kX2ludGNfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGludGNfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIklOVEMiLAorCS5uYW1lID0gIklOVEMiLAogCS5zdGFydHVwID0gc3RhcnR1cF9pbnRjX2lycSwKIAkuc2h1dGRvd24gPSBzaHV0ZG93bl9pbnRjX2lycSwKIAkuZW5hYmxlID0gZW5hYmxlX2ludGNfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCmluZGV4IDAxNTE5MzMuLmJiNDA3ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKQEAgLTE1Miw4ICsxNTIsNiBAQAogCW1vdi5sCTFmLCByMAogCW1vdi5sCUByMCwgcjYKIAotCXN0aQotCiAJbW92LmwJM2YsIHIwCiAJbW92LmwJNGYsIHIxCiAJbW92CXIxNSwgcjQKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggMzUwOTc3NS4uNTQ5MWIwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKyNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTM3Myw2ICszNzQsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5tb2RlID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNtdF9kZXZpY2UsCiAJJnRtdTBfZGV2aWNlLApAQCAtMzg1LDYgKzM5OCw3IEBACiAJJnZwdV9kZXZpY2UsCiAJJnZldV9kZXZpY2UsCiAJJmpwdV9kZXZpY2UsCisJJmRtYV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3MjJfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCAyYzkwMWY0Li4xMmZmNTZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2RtYS1zaC5oPgogCiBzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyB0bXUwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm5hbWUgPSAiVE1VMCIsCkBAIC0yNDAsNiArMjQxLDE4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzgwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZ0bXUwX2RldmljZSwKIAkmdG11MV9kZXZpY2UsCkBAIC0yNDksNiArMjYyLDcgQEAKIAkmdG11NV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCisJJmRtYV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYyBiL2FyY2gvc2gva2VybmVsL2R3YXJmLmMKaW5kZXggYmM0ZDhkNy4uZDc2YTIzMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZHdhcmYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9kd2FyZi5jCkBAIC0yMCwxMSArMjAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2R3YXJmLmg+CiAjaW5jbHVkZSA8YXNtL3Vud2luZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotI2luY2x1ZGUgPGFzbS9kd2FyZi5oPgogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIC8qIFJlc2VydmUgZW5vdWdoIG1lbW9yeSBmb3IgdHdvIHN0YWNrIGZyYW1lcyAqLwpAQCAtNTU1LDkgKzU1NSwzMCBAQAogCSAqIE5PVEU6IHRoZSByZXR1cm4gYWRkcmVzcyBpcyBndWFyYW50ZWVkIHRvIGJlIHNldHVwIGJ5IHRoZQogCSAqIHRpbWUgdGhpcyBmdW5jdGlvbiBtYWtlcyBpdHMgZmlyc3QgZnVuY3Rpb24gY2FsbC4KIAkgKi8KLQlpZiAoIXBjICYmICFwcmV2KQorCWlmICghcGMgfHwgIXByZXYpCiAJCXBjID0gKHVuc2lnbmVkIGxvbmcpY3VycmVudF90ZXh0X2FkZHIoKTsKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwkvKgorCSAqIElmIG91ciBzdGFjayBoYXMgYmVlbiBwYXRjaGVkIGJ5IHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIKKwkgKiB0aGVuIHdlIG1pZ2h0IHNlZSB0aGUgYWRkcmVzcyBvZiByZXR1cm5fdG9faGFuZGxlcigpIHdoZXJlIHdlCisJICogZXhwZWN0ZWQgdG8gZmluZCB0aGUgcmVhbCByZXR1cm4gYWRkcmVzcy4KKwkgKi8KKwlpZiAocGMgPT0gKHVuc2lnbmVkIGxvbmcpJnJldHVybl90b19oYW5kbGVyKSB7CisJCWludCBpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJCS8qCisJCSAqIFdlIGN1cnJlbnRseSBoYXZlIG5vIHdheSBvZiB0cmFja2luZyBob3cgbWFueQorCQkgKiByZXR1cm5fdG9faGFuZGxlcigpJ3Mgd2UndmUgc2Vlbi4gSWYgdGhlcmUgaXMgbW9yZQorCQkgKiB0aGFuIG9uZSBwYXRjaGVkIHJldHVybiBhZGRyZXNzIG9uIG91ciBzdGFjaywKKwkJICogY29tcGxhaW4gbG91ZGx5LgorCQkgKi8KKwkJV0FSTl9PTihpbmRleCA+IDApOworCisJCXBjID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQ7CisJfQorI2VuZGlmCisKIAlmcmFtZSA9IG1lbXBvb2xfYWxsb2MoZHdhcmZfZnJhbWVfcG9vbCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmcmFtZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBhIGR3YXJmIGZyYW1lXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKaW5kZXggNjhkOTIyMy4uM2ViODQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTEyMSw3ICsxMjEsNyBAQAogRU5UUlkocmVzdW1lX3VzZXJzcGFjZSkKIAkhIHI4OiBjdXJyZW50X3RocmVhZF9pbmZvCiAJY2xpCi0JVFJBQ0VfSVJRU19PZkYKKwlUUkFDRV9JUlFTX09GRgogCW1vdi5sCUAoVElfRkxBR1MscjgpLCByMAkJISBjdXJyZW50X3RocmVhZF9pbmZvLT5mbGFncwogCXRzdAkjKF9USUZfV09SS19NQVNLICYgMHhmZiksIHIwCiAJYnQvcwlfX3Jlc3RvcmVfYWxsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCmluZGV4IGEzZGNjNmQuLjJjNDhlMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2Z0cmFjZS5jCkBAIC0yOTEsMzEgKzI5MSw0OCBAQAogCXJldHVybiBzeXNjYWxsc19tZXRhZGF0YVtucl07CiB9CiAKLXZvaWQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoraW50IHN5c2NhbGxfbmFtZV90b19ucihjaGFyICpuYW1lKQoreworCWludCBpOworCisJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBOUl9zeXNjYWxsczsgaSsrKQorCQlpZiAoc3lzY2FsbHNfbWV0YWRhdGFbaV0pCisJCQlpZiAoIXN0cmNtcChzeXNjYWxsc19tZXRhZGF0YVtpXS0+bmFtZSwgbmFtZSkpCisJCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0xOworfQorCit2b2lkIHNldF9zeXNjYWxsX2VudGVyX2lkKGludCBudW0sIGludCBpZCkKK3sKKwlzeXNjYWxsc19tZXRhZGF0YVtudW1dLT5lbnRlcl9pZCA9IGlkOworfQorCit2b2lkIHNldF9zeXNjYWxsX2V4aXRfaWQoaW50IG51bSwgaW50IGlkKQoreworCXN5c2NhbGxzX21ldGFkYXRhW251bV0tPmV4aXRfaWQgPSBpZDsKK30KKworc3RhdGljIGludCBfX2luaXQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQogewogCWludCBpOwogCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICptZXRhOwogCXVuc2lnbmVkIGxvbmcgKipwc3lzX3N5c2NhbGxfdGFibGUgPSAmc3lzX2NhbGxfdGFibGU7Ci0Jc3RhdGljIGF0b21pY190IHJlZnM7Ci0KLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnJlZnMpICE9IDEpCi0JCWdvdG8gZW5kOwogCiAJc3lzY2FsbHNfbWV0YWRhdGEgPSBremFsbG9jKHNpemVvZigqc3lzY2FsbHNfbWV0YWRhdGEpICoKIAkJCQkJRlRSQUNFX1NZU0NBTExfTUFYLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7CiAJCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TWVNDQUxMX01BWDsgaSsrKSB7CiAJCW1ldGEgPSBmaW5kX3N5c2NhbGxfbWV0YShwc3lzX3N5c2NhbGxfdGFibGVbaV0pOwogCQlzeXNjYWxsc19tZXRhZGF0YVtpXSA9IG1ldGE7CiAJfQotCXJldHVybjsKIAotCS8qIFBhcmFub2lkOiBhdm9pZCBvdmVyZmxvdyAqLwotZW5kOgotCWF0b21pY19kZWMoJnJlZnMpOworCXJldHVybiAwOwogfQorYXJjaF9pbml0Y2FsbChhcmNoX2luaXRfZnRyYWNlX3N5c2NhbGxzKTsKICNlbmRpZiAvKiBDT05GSUdfRlRSQUNFX1NZU0NBTExTICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMgYi9hcmNoL3NoL2tlcm5lbC9pb19nZW5lcmljLmMKaW5kZXggNGZmNTA3Mi4uYjhmYTY1MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW9fZ2VuZXJpYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2lvX2dlbmVyaWMuYwpAQCAtMTQ3LDYgKzE0Nyw5IEBACiAKIHZvaWQgX19pb21lbSAqZ2VuZXJpY19pb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IHNpemUpCiB7CisJaWYgKFBYU0VHKGFkZHIpID49IFAxU0VHKQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7CisKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShhZGRyICsgZ2VuZXJpY19pb19iYXNlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwppbmRleCA3Y2I5MzNiLi5lYWM3ZGE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pcnEuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTA2LDcgKzEwNyw3IEBACiBzdGF0aWMgdW5pb24gaXJxX2N0eCAqc29mdGlycV9jdHhbTlJfQ1BVU10gX19yZWFkX21vc3RseTsKICNlbmRpZgogCi1hc21saW5rYWdlIGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIF9faXJxX2VudHJ5IGludCBkb19JUlEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKm9sZF9yZWdzID0gc2V0X2lycV9yZWdzKHJlZ3MpOwogI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwppbmRleCA1NDhmNjYwLi5jYmNlNjM5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaHZlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2h2ZWMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTEzMyw0ICsxMzQsNiBAQAogCiAJaWYgKCFzaF9tdi5tdl9ucl9pcnFzKQogCQlzaF9tdi5tdl9ucl9pcnFzID0gTlJfSVJRUzsKKworCV9fc2V0X2lvX3BvcnRfYmFzZShQMlNFRyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCBmOWQ0NGY4Li45OWI0ZmI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTU0OSw2ICs1NDksOCBAQAogCiAJaWYgKGNwdSA9PSAwKQogCQlzZXFfcHJpbnRmKG0sICJtYWNoaW5lXHRcdDogJXNcbiIsIGdldF9zeXN0ZW1fdHlwZSgpKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIsIGNwdSk7CiAJc2VxX3ByaW50ZihtLCAiY3B1IGZhbWlseVx0OiAlc1xuIiwgaW5pdF91dHNuYW1lKCktPm1hY2hpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zXzMyLmMKaW5kZXggOGRiZTI2Yi4uNDQ0Y2NlMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltc18zMi5jCkBAIC04NCw2ICs4NCwyMSBAQAogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJfaTRfZXZlbik7CiBERUNMQVJFX0VYUE9SVChfX21vdnN0cl9pNF9vZGQpOwogREVDTEFSRV9FWFBPUlQoX19tb3ZzdHJTSTEyX2k0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k4KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kxMik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTYpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTIwKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kyNCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMjgpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTMyKTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0kzNik7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNDApOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTQ0KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k0OCk7CitERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJNTIpOworREVDTEFSRV9FWFBPUlQoX19tb3ZtZW1TSTU2KTsKK0RFQ0xBUkVfRVhQT1JUKF9fbW92bWVtU0k2MCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbV9pNF9ldmVuKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92bWVtX2k0X29kZCk7CiBERUNMQVJFX0VYUE9SVChfX21vdm1lbVNJMTJfaTQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwppbmRleCA2NzI5NzAzLi4zZGIzNzQyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCi0JaWYgKCEoY3VycmVudF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKKwlpZiAoIShib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpKQogCQlyZXR1cm4gMDsKIAogCXNldF91c2VkX21hdGgoKTsKQEAgLTE1OCw3ICsxNTgsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAotCWlmICghKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpCisJaWYgKCEoYm9vdF9jcHVfZGF0YS5mbGFncyAmIENQVV9IQVNfRlBVKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXVzZWRfbWF0aCgpKSB7CkBAIC0xOTksNyArMTk5LDcgQEAKICN1bmRlZiBDT1BZCiAKICNpZmRlZiBDT05GSUdfU0hfRlBVCi0JaWYgKGN1cnJlbnRfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0ZQVSkgeworCWlmIChib290X2NwdV9kYXRhLmZsYWdzICYgQ1BVX0hBU19GUFUpIHsKIAkJaW50IG93bmVkX2ZwOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CiAKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCQllcnIgfD0gX19wdXRfdXNlcihPUl9SMF9SMCwgJmZyYW1lLT5yZXRjb2RlWzZdKTsKIAkJZXJyIHw9IF9fcHV0X3VzZXIoKF9fTlJfcnRfc2lncmV0dXJuKSwgJmZyYW1lLT5yZXRjb2RlWzddKTsKIAkJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPnJldGNvZGU7CisJCWZsdXNoX2ljYWNoZV9yYW5nZShyZWdzLT5wciwgcmVncy0+cHIgKyBzaXplb2YoZnJhbWUtPnJldGNvZGUpKTsKIAl9CiAKIAlpZiAoZXJyKQpAQCAtNDk3LDggKzQ5OCw2IEBACiAJcHJfZGVidWcoIlNJRyBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSUwOGx4IHByPSUwOGx4XG4iLAogCQkgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGZyYW1lLCByZWdzLT5wYywgcmVncy0+cHIpOwogCi0JZmx1c2hfaWNhY2hlX3JhbmdlKHJlZ3MtPnByLCByZWdzLT5wciArIHNpemVvZihmcmFtZS0+cmV0Y29kZSkpOwotCiAJcmV0dXJuIDA7CiAKIGdpdmVfc2lnc2VndjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggNDQyZDhkNC4uMTYwZGIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTM1LDYgKzM1LDggQEAKIHsKIAlzdHJ1Y3Qgc2hfY3B1aW5mbyAqYyA9IGNwdV9kYXRhICsgY3B1OwogCisJbWVtY3B5KGMsICZib290X2NwdV9kYXRhLCBzaXplb2Yoc3RydWN0IHNoX2NwdWluZm8pKTsKKwogCWMtPmxvb3BzX3Blcl9qaWZmeSA9IGxvb3BzX3Blcl9qaWZmeTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYyBiL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggNmFiYTlhZi4uN2EyZWUzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2V4ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vZnB1Lmg+CkBAIC01NCw4ICs1NSw4IEBACiAvKiBiaXRmaWVsZDogMTogd2FybiAyOiBmaXh1cCA0OiBzaWduYWwgLT4gY29tYmluYXRpb25zIDJ8NCAmJiAxfDJ8NCBhcmUgbm90CiAgICB2YWxpZCEgKi8KIHN0YXRpYyBpbnQgc2VfdXNlcm1vZGUgPSAzOwotLyogMDogbm8gd2FybmluZyAxOiBwcmludCBhIHdhcm5pbmcgbWVzc2FnZSAqLwotc3RhdGljIGludCBzZV9rZXJubW9kZV93YXJuID0gMTsKKy8qIDA6IG5vIHdhcm5pbmcgMTogcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQgc2Vfa2Vybm1vZGVfd2FybjsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgY29uc3QgY2hhciAqc2VfdXNlcm1vZGVfYWN0aW9uW10gPSB7CkBAIC0xNTksMTIgKzE2MCwxMiBAQAogCiAJb29wc19lbnRlcigpOwogCi0JY29uc29sZV92ZXJib3NlKCk7CiAJc3Bpbl9sb2NrX2lycSgmZGllX2xvY2spOworCWNvbnNvbGVfdmVyYm9zZSgpOwogCWJ1c3Rfc3BpbmxvY2tzKDEpOwogCiAJcHJpbnRrKCIlczogJTA0bHggWyMlZF1cbiIsIHN0ciwgZXJyICYgMHhmZmZmLCArK2RpZV9jb3VudGVyKTsKLQorCXN5c2ZzX3ByaW50a19sYXN0X2ZpbGUoKTsKIAlwcmludF9tb2R1bGVzKCk7CiAJc2hvd19yZWdzKHJlZ3MpOwogCkBAIC0xODAsNiArMTgxLDcgQEAKIAlidXN0X3NwaW5sb2NrcygwKTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKIAlzcGluX3VubG9ja19pcnEoJmRpZV9sb2NrKTsKKwlvb3BzX2V4aXQoKTsKIAogCWlmIChrZXhlY19zaG91bGRfY3Jhc2goY3VycmVudCkpCiAJCWNyYXNoX2tleGVjKHJlZ3MpOwpAQCAtMTkwLDcgKzE5Miw2IEBACiAJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKIAotCW9vcHNfZXhpdCgpOwogCWRvX2V4aXQoU0lHU0VHVik7CiB9CiAKQEAgLTQ1Miw2ICs0NTMsMTIgQEAKIAl1X2ludCBybTsKIAlpbnQgcmV0LCBpbmRleDsKIAorCS8qCisJICogWFhYOiBXZSBjYW4ndCBoYW5kbGUgbWl4ZWQgMTYvMzItYml0IGluc3RydWN0aW9ucyB5ZXQKKwkgKi8KKwlpZiAoaW5zdHJ1Y3Rpb25fc2l6ZShpbnN0cnVjdGlvbikgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpbmRleCA9IChpbnN0cnVjdGlvbj4+OCkmMTU7CS8qIDB4MEYwMCAqLwogCXJtID0gcmVncy0+cmVnc1tpbmRleF07CiAKQEAgLTYxOSw5ICs2MjYsOSBAQAogCiAJCXNlX3VzZXIgKz0gMTsKIAotI2lmbmRlZiBDT05GSUdfQ1BVX1NIMkEKIAkJc2V0X2ZzKFVTRVJfRFMpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAodTE2ICopKHJlZ3MtPnBjICYgfjEpLCAyKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJmluc3RydWN0aW9uLCAoaW5zbl9zaXplX3QgKikocmVncy0+cGMgJiB+MSksCisJCQkJICAgc2l6ZW9mKGluc3RydWN0aW9uKSkpIHsKIAkJCXNldF9mcyhvbGRmcyk7CiAJCQlnb3RvIHVzcGFjZV9zZWd2OwogCQl9CkBAIC02MzMsNyArNjQwLDYgQEAKIAkJCSAgICAgICAiaW4gXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAogCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKIAkJCSAgICAgICBpbnN0cnVjdGlvbik7Ci0jZW5kaWYKIAogCQlpZiAoc2VfdXNlcm1vZGUgJiAyKQogCQkJZ290byBmaXh1cDsKQEAgLTY3MywxMiArNjc5LDYgQEAKIAl9IGVsc2UgewogCQlzZV9zeXMgKz0gMTsKIAotCQlpZiAoc2Vfa2Vybm1vZGVfd2FybikKLQkJCXByaW50ayhLRVJOX05PVElDRSAiVW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgIgotCQkJICAgICAgICJvbiBiZWhhbGYgb2YgXCIlc1wiIHBpZD0lZCBwYz0weCVwIGlucz0weCUwNGh4XG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKilyZWdzLT5wYywKLQkJCSAgICAgICBpbnN0cnVjdGlvbik7Ci0KIAkJaWYgKHJlZ3MtPnBjICYgMSkKIAkJCWRpZSgidW5hbGlnbmVkIHByb2dyYW0gY291bnRlciIsIHJlZ3MsIGVycm9yX2NvZGUpOwogCkBAIC02OTIsNiArNjkyLDEyIEBACiAJCQlkaWUoImluc24gZmF1bHRpbmcgaW4gZG9fYWRkcmVzc19lcnJvciIsIHJlZ3MsIDApOwogCQl9CiAKKwkJaWYgKHNlX2tlcm5tb2RlX3dhcm4pCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzICIKKwkJCSAgICAgICAib24gYmVoYWxmIG9mIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKKwkJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsICh2b2lkICopcmVncy0+cGMsCisJCQkgICAgICAgaW5zdHJ1Y3Rpb24pOworCiAJCWhhbmRsZV91bmFsaWduZWRfYWNjZXNzKGluc3RydWN0aW9uLCByZWdzLAogCQkJCQkmdXNlcl9tZW1fYWNjZXNzLCAwKTsKIAkJc2V0X2ZzKG9sZGZzKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCA2NGRjMWFkLi43ZjdiNTJmIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJIdWdlVExCIHBhZ2Ugc2l6ZSIKLQlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRSAmJiAoQ1BVX1NINCB8fCBDUFVfU0g1KSAmJiBNTVUKKwlkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRQogCWRlZmF1bHQgSFVHRVRMQl9QQUdFX1NJWkVfMU1CIGlmIFBBR0VfU0laRV82NEtCCiAJZGVmYXVsdCBIVUdFVExCX1BBR0VfU0laRV82NEsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKaW5kZXggYjI0NTNiYi4uYjdmMjM1YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjZGVmaW5lIE1BWF9EQ0FDSEVfUEFHRVMJNjQJLyogWFhYOiBUdW5lIGZvciB3YXlzICovCiAjZGVmaW5lIE1BWF9JQ0FDSEVfUEFHRVMJMzIKIAotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCk7CiAKIC8qCkBAIC00Myw3ICs0Myw3IEBACiAgKiBDYWxsZWQgZnJvbSBrZXJuZWwvbW9kdWxlLmM6c3lzX2luaXRfbW9kdWxlIGFuZCByb3V0aW5lIGZvciBhLm91dCBmb3JtYXQsCiAgKiBzaWduYWwgaGFuZGxlciBjb2RlIGFuZCBrcHJvYmVzIGNvZGUKICAqLwotc3RhdGljIHZvaWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgc2g0X2ZsdXNoX2ljYWNoZV9yYW5nZSh2b2lkICphcmdzKQogewogCXN0cnVjdCBmbHVzaGVyX2RhdGEgKmRhdGEgPSBhcmdzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKQEAgLTcyLDYgKzcyLDcgQEAKIAogCWZvciAodiA9IHN0YXJ0OyB2IDwgZW5kOyB2ICs9IEwxX0NBQ0hFX0JZVEVTKSB7CiAJCXVuc2lnbmVkIGxvbmcgaWNhY2hlYWRkcjsKKwkJaW50IGosIG47CiAKIAkJX19vY2J3Yih2KTsKIApAQCAtNzksOCArODAsMTAgQEAKIAkJCQljcHVfZGF0YS0+aWNhY2hlLmVudHJ5X21hc2spOwogCiAJCS8qIENsZWFyIGktY2FjaGUgbGluZSB2YWxpZC1iaXQgKi8KKwkJbiA9IGJvb3RfY3B1X2RhdGEuaWNhY2hlLm5fYWxpYXNlczsKIAkJZm9yIChpID0gMDsgaSA8IGNwdV9kYXRhLT5pY2FjaGUud2F5czsgaSsrKSB7Ci0JCQlfX3Jhd193cml0ZWwoMCwgaWNhY2hlYWRkcik7CisJCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJCV9fcmF3X3dyaXRlbCgwLCBpY2FjaGVhZGRyICsgKGogKiBQQUdFX1NJWkUpKTsKIAkJCWljYWNoZWFkZHIgKz0gY3B1X2RhdGEtPmljYWNoZS53YXlfaW5jcjsKIAkJfQogCX0KQEAgLTg5LDggKzkyLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgcGh5cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9vbmUodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBwaHlzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGV4ZWNfb2Zmc2V0ID0gMDsKIApAQCAtMTAzLDggKzEwNSw3IEBACiAJCWV4ZWNfb2Zmc2V0ID0gMHgyMDAwMDAwMDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX2ZsdXNoX2NhY2hlXzQwOTYoc3RhcnQgfCBTSF9DQUNIRV9BU1NPQywKLQkJCSAgIFAxU0VHQUREUihwaHlzKSwgZXhlY19vZmZzZXQpOworCV9fZmx1c2hfY2FjaGVfb25lKHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsIFAxU0VHQUREUihwaHlzKSwgZXhlY19vZmZzZXQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIApAQCAtMTI5LDggKzEzMCw4IEBACiAKIAkJLyogTG9vcCBhbGwgdGhlIEQtY2FjaGUgKi8KIAkJbiA9IGJvb3RfY3B1X2RhdGEuZGNhY2hlLm5fYWxpYXNlczsKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSA0MDk2KQotCQkJZmx1c2hfY2FjaGVfNDA5NihhZGRyLCBwaHlzKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9jYWNoZV9vbmUoYWRkciwgcGh5cyk7CiAJfQogCiAJd21iKCk7CkBAIC0zMTgsMTEgKzMxOSwxMSBAQAogCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBELWNhY2hlIHdoZW4gd2UgaGF2ZSBhbGlhcyAqLwogCWlmICgoYWRkcmVzc15waHlzKSAmIGFsaWFzX21hc2spIHsKIAkJLyogTG9vcCA0SyBvZiB0aGUgRC1jYWNoZSAqLwotCQlmbHVzaF9jYWNoZV80MDk2KAorCQlmbHVzaF9jYWNoZV9vbmUoCiAJCQlDQUNIRV9PQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiBhbGlhc19tYXNrKSwKIAkJCXBoeXMpOwogCQkvKiBMb29wIGFub3RoZXIgNEsgb2YgdGhlIEQtY2FjaGUgKi8KLQkJZmx1c2hfY2FjaGVfNDA5NigKKwkJZmx1c2hfY2FjaGVfb25lKAogCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChwaHlzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CkBAIC0zMzcsNyArMzM4LDcgQEAKIAkJICoga2VybmVsIGhhcyBuZXZlciBleGVjdXRlZCB0aGUgY29kZSB0aHJvdWdoIGl0cyBpZGVudGl0eQogCQkgKiB0cmFuc2xhdGlvbi4KIAkJICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoCisJCWZsdXNoX2NhY2hlX29uZSgKIAkJCUNBQ0hFX0lDX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJfQpAQCAtMzkzLDcgKzM5NCw3IEBACiB9CiAKIC8qKgotICogX19mbHVzaF9jYWNoZV80MDk2CisgKiBfX2ZsdXNoX2NhY2hlX29uZQogICoKICAqIEBhZGRyOiAgYWRkcmVzcyBpbiBtZW1vcnkgbWFwcGVkIGNhY2hlIGFycmF5CiAgKiBAcGh5czogIFAxIGFkZHJlc3MgdG8gZmx1c2ggKGhhcyB0byBtYXRjaCB0YWdzIGlmIGFkZHIgaGFzICdBJyBiaXQKQEAgLTQwNiw3ICs0MDcsNyBAQAogICogb3BlcmF0aW9uIChwdXJnZS93cml0ZS1iYWNrKSBpcyBzZWxlY3RlZCBieSB0aGUgbG93ZXIgMiBiaXRzIG9mCiAgKiAncGh5cycuCiAgKi8KLXN0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfNDA5Nih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKK3N0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfb25lKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpCiB7CiAJaW50IHdheV9jb3VudDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCmluZGV4IDJjYWRlZTIuLjI2MDE5MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwpAQCAtNzgsNyArNzgsNyBAQAogLyoKICAqIFdyaXRlYmFjayZJbnZhbGlkYXRlIHRoZSBELWNhY2hlIG9mIHRoZSBwYWdlCiAgKi8KLXN0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX3BhZ2UodW5zaWduZWQgbG9uZyBwaHlzKQorc3RhdGljIHZvaWQgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgX19mbHVzaF9kY2FjaGVfcGFnZSh1bnNpZ25lZCBsb25nIHBoeXMpCiB7CiAJdW5zaWduZWQgbG9uZyB3YXlzLCB3YXlzaXplLCBhZGRyc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlfX2ZsdXNoX2RjYWNoZV9wYWdlKFBIWVNBRERSKHBhZ2VfYWRkcmVzcyhwYWdlKSkpOwogfQogCi1zdGF0aWMgdm9pZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCitzdGF0aWMgdm9pZCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBzaDc3MDVfZmx1c2hfY2FjaGVfYWxsKHZvaWQgKmFyZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jYWNoZS5jIGIvYXJjaC9zaC9tbS9jYWNoZS5jCmluZGV4IDM1YzM3YjcuLmEyZGM3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUuYworKysgYi9hcmNoL3NoL21tL2NhY2hlLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogCQlyZXR1cm47CiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQlpZiAocGZuX3ZhbGlkKHBmbikgJiYgcGFnZV9tYXBwaW5nKHBhZ2UpKSB7CisJaWYgKHBmbl92YWxpZChwZm4pKSB7CiAJCWludCBkaXJ0eSA9IHRlc3RfYW5kX2NsZWFyX2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJCWlmIChkaXJ0eSkgewogCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMjY1LDYgKzI2NSw4IEBACiAKIHZvaWQgX19pbml0IGNwdV9jYWNoZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgaW50IGNhY2hlX2Rpc2FibGVkID0gIShfX3Jhd19yZWFkbChDQ1IpICYgQ0NSX0NBQ0hFX0VOQUJMRSk7CisKIAljb21wdXRlX2FsaWFzKCZib290X2NwdV9kYXRhLmljYWNoZSk7CiAJY29tcHV0ZV9hbGlhcygmYm9vdF9jcHVfZGF0YS5kY2FjaGUpOwogCWNvbXB1dGVfYWxpYXMoJmJvb3RfY3B1X2RhdGEuc2NhY2hlKTsKQEAgLTI3Myw2ICsyNzUsMTMgQEAKIAlfX2ZsdXNoX3B1cmdlX3JlZ2lvbgkJPSBub29wX19mbHVzaF9yZWdpb247CiAJX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbgk9IG5vb3BfX2ZsdXNoX3JlZ2lvbjsKIAorCS8qCisJICogTm8gZmx1c2hpbmcgaXMgbmVjZXNzYXJ5IGluIHRoZSBkaXNhYmxlZCBjYWNoZSBjYXNlIHNvIHdlIGNhbgorCSAqIGp1c3Qga2VlcCB0aGUgbm9vcCBmdW5jdGlvbnMgaW4gbG9jYWxfZmx1c2hfLi4oKSBhbmQgX19mbHVzaF8uLigpCisJICovCisJaWYgKHVubGlrZWx5KGNhY2hlX2Rpc2FibGVkKSkKKwkJZ290byBza2lwOworCiAJaWYgKGJvb3RfY3B1X2RhdGEuZmFtaWx5ID09IENQVV9GQU1JTFlfU0gyKSB7CiAJCWV4dGVybiB2b2lkIF9fd2VhayBzaDJfY2FjaGVfaW5pdCh2b2lkKTsKIApAQCAtMzEyLDUgKzMyMSw2IEBACiAJCXNoNV9jYWNoZV9pbml0KCk7CiAJfQogCitza2lwOgogCWVtaXRfY2FjaGVfcGFyYW1zKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXBfMzIuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCmluZGV4IGMzMjUwNjEuLmE4NmVhYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jCkBAIC04Myw3ICs4Myw3IEBACiAJICoKIAkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgogCSAqLwotCWlmICh1bmxpa2VseShzaXplID49IDB4MTAwMDAwMCkpIHsKKwlpZiAodW5saWtlbHkocGh5c19hZGRyID49IFAxU0VHKSkgewogCQl1bnNpZ25lZCBsb25nIG1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKTsKIAogCQlpZiAobGlrZWx5KG1hcHBlZCkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IGIxYTcxNGEuLmFhZGUzMTEwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BtYi5jCisrKyBiL2FyY2gvc2gvbW0vcG1iLmMKQEAgLTMzLDYgKzMzLDggQEAKIAogI2RlZmluZSBOUl9QTUJfRU5UUklFUwkxNgogCitzdGF0aWMgdm9pZCBfX3BtYl91bm1hcChzdHJ1Y3QgcG1iX2VudHJ5ICopOworCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBtYl9jYWNoZTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHBtYl9tYXA7CiAKQEAgLTIxOCw5ICsyMjAsMTAgQEAKIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKIAkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXN0cnVjdCBwbWJfZW50cnkgKnBtYnA7CisJc3RydWN0IHBtYl9lbnRyeSAqcG1icCwgKnBtYmU7CiAJdW5zaWduZWQgbG9uZyB3YW50ZWQ7CiAJaW50IHBtYl9mbGFncywgaTsKKwlsb25nIGVycjsKIAogCS8qIENvbnZlcnQgdHlwaWNhbCBwZ3Byb3QgdmFsdWUgdG8gdGhlIFBNQiBlcXVpdmFsZW50ICovCiAJaWYgKGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpIHsKQEAgLTIzNiwyMCArMjM5LDIyIEBACiAKIGFnYWluOgogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykgewotCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOwogCQlpbnQgcmV0OwogCiAJCWlmIChzaXplIDwgcG1iX3NpemVzW2ldLnNpemUpCiAJCQljb250aW51ZTsKIAogCQlwbWJlID0gcG1iX2FsbG9jKHZhZGRyLCBwaHlzLCBwbWJfZmxhZ3MgfCBwbWJfc2l6ZXNbaV0uZmxhZyk7Ci0JCWlmIChJU19FUlIocG1iZSkpCi0JCQlyZXR1cm4gUFRSX0VSUihwbWJlKTsKKwkJaWYgKElTX0VSUihwbWJlKSkgeworCQkJZXJyID0gUFRSX0VSUihwbWJlKTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJcmV0ID0gc2V0X3BtYl9lbnRyeShwbWJlKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlwbWJfZnJlZShwbWJlKTsKLQkJCXJldHVybiAtRUJVU1k7CisJCQllcnIgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKIAkJfQogCiAJCXBoeXMJKz0gcG1iX3NpemVzW2ldLnNpemU7CkBAIC0yNjQsMTIgKzI2OSwyNSBAQAogCQkJcG1icC0+bGluayA9IHBtYmU7CiAKIAkJcG1icCA9IHBtYmU7CisKKwkJLyoKKwkJICogSW5zdGVhZCBvZiB0cnlpbmcgc21hbGxlciBzaXplcyBvbiBldmVyeSBpdGVyYXRpb24KKwkJICogKGV2ZW4gaWYgd2Ugc3VjY2VlZCBpbiBhbGxvY2F0aW5nIHNwYWNlKSwgdHJ5IHVzaW5nCisJCSAqIHBtYl9zaXplc1tpXS5zaXplIGFnYWluLgorCQkgKi8KKwkJaS0tOwogCX0KIAogCWlmIChzaXplID49IDB4MTAwMDAwMCkKIAkJZ290byBhZ2FpbjsKIAogCXJldHVybiB3YW50ZWQgLSBzaXplOworCitvdXQ6CisJaWYgKHBtYnApCisJCV9fcG1iX3VubWFwKHBtYnApOworCisJcmV0dXJuIGVycjsKIH0KIAogdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKQpAQCAtMjgzLDEyICszMDEsMTkgQEAKIAlpZiAodW5saWtlbHkoIXBtYmUpKQogCQlyZXR1cm47CiAKKwlfX3BtYl91bm1hcChwbWJlKTsKK30KKworc3RhdGljIHZvaWQgX19wbWJfdW5tYXAoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKIAlXQVJOX09OKCF0ZXN0X2JpdChwbWJlLT5lbnRyeSwgJnBtYl9tYXApKTsKIAogCWRvIHsKIAkJc3RydWN0IHBtYl9lbnRyeSAqcG1ibGluayA9IHBtYmU7CiAKLQkJY2xlYXJfcG1iX2VudHJ5KHBtYmUpOworCQlpZiAocG1iZS0+ZW50cnkgIT0gUE1CX05PX0VOVFJZKQorCQkJY2xlYXJfcG1iX2VudHJ5KHBtYmUpOworCiAJCXBtYmUgPSBwbWJsaW5rLT5saW5rOwogCiAJCXBtYl9mcmVlKHBtYmxpbmspOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDk3ZmNhNDYuLjA1ZWY1MzggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTI2LDYgKzI2LDcgQEAKIAlzZWxlY3QgUlRDX0NMQVNTCiAJc2VsZWN0IFJUQ19EUlZfTTQ4VDU5CiAJc2VsZWN0IEhBVkVfUEVSRl9FVkVOVFMKKwlzZWxlY3QgUEVSRl9VU0VfVk1BTExPQwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwogCXNlbGVjdCBIQVZFX0RNQV9BUElfREVCVUcKIApAQCAtNDgsNiArNDksNyBAQAogCXNlbGVjdCBSVENfRFJWX1NVTjRWCiAJc2VsZWN0IFJUQ19EUlZfU1RBUkZJUkUKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUworCXNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DCiAKIGNvbmZpZyBBUkNIX0RFRkNPTkZJRwogCXN0cmluZwpAQCAtMTAyLDYgKzEwNCw5IEBACiBjb25maWcgTkVFRF9QRVJfQ1BVX0VNQkVEX0ZJUlNUX0NIVU5LCiAJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CiAKK2NvbmZpZyBORUVEX1BFUl9DUFVfUEFHRV9GSVJTVF9DSFVOSworCWRlZl9ib29sIHkgaWYgU1BBUkM2NAorCiBjb25maWcgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJYm9vbAogCWRlZl9ib29sIHkgaWYgU1BBUkM2NApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L2J0Zml4dXBwcmVwLmMgYi9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYwppbmRleCA1MmE0MjA4Li5iYmY5MWI5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvYnRmaXh1cHByZXAuYwpAQCAtNjEsMTQgKzYxLDE0IEBACiB1bnNpZ25lZCBsb25nIGxhc3RmcmVsbm87CiBidGZpeHVwICpsYXN0ZjsKIAotdm9pZCBmYXRhbCh2b2lkKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwotdm9pZCBmYXRhbCh2b2lkKQorc3RhdGljIHZvaWQgZmF0YWwodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3N0YXRpYyB2b2lkIGZhdGFsKHZvaWQpCiB7CiAJZnByaW50ZihzdGRlcnIsICJNYWxmb3JtZWQgb3V0cHV0IGZyb20gb2JqZHVtcFxuJXNcbiIsIGJ1ZmZlcik7CiAJZXhpdCgxKTsKIH0KIAotYnRmaXh1cCAqZmluZChpbnQgdHlwZSwgY2hhciAqbmFtZSkKK3N0YXRpYyBidGZpeHVwICpmaW5kKGludCB0eXBlLCBjaGFyICpuYW1lKQogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKQEAgLTg4LDcgKzg4LDcgQEAKIAlyZXR1cm4gYXJyYXkgKyBsYXN0IC0gMTsKIH0KIAotdm9pZCBzZXRfbW9kZSAoY2hhciAqYnVmZmVyKQorc3RhdGljIHZvaWQgc2V0X21vZGUgKGNoYXIgKmJ1ZmZlcikKIHsKICAgCWZvciAobW9kZSA9IDA7OyBtb2RlKyspCiAJCWlmIChidWZmZXJbbW9kZV0gPCAnMCcgfHwgYnVmZmVyW21vZGVdID4gJzknKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja18zMi5jCmluZGV4IGU4ZGM5YWQuLmFjOTQ0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfMzIuYworKysgYi9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzMyLmMKQEAgLTM1LDE3ICszNSwxNyBAQAogICogYXMgUFJPTSBsb29rcyBmb3IgYS5vdXQgaW1hZ2Ugb25seS4KICAqLwogCi11bnNpZ25lZCBzaG9ydCBsZDIoY2hhciAqcCkKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBsZDIoY2hhciAqcCkKIHsKIAlyZXR1cm4gKHBbMF0gPDwgOCkgfCBwWzFdOwogfQogCi11bnNpZ25lZCBpbnQgbGQ0KGNoYXIgKnApCitzdGF0aWMgdW5zaWduZWQgaW50IGxkNChjaGFyICpwKQogewogCXJldHVybiAocFswXSA8PCAyNCkgfCAocFsxXSA8PCAxNikgfCAocFsyXSA8PCA4KSB8IHBbM107CiB9CiAKLXZvaWQgc3Q0KGNoYXIgKnAsIHVuc2lnbmVkIGludCB4KQorc3RhdGljIHZvaWQgc3Q0KGNoYXIgKnAsIHVuc2lnbmVkIGludCB4KQogewogCXBbMF0gPSB4ID4+IDI0OwogCXBbMV0gPSB4ID4+IDE2OwpAQCAtNTMsNyArNTMsNyBAQAogCXBbM10gPSB4OwogfQogCi12b2lkIHVzYWdlKHZvaWQpCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQogewogCS8qIGZzX2ltZy5neiBpcyBhbiBpbWFnZSBvZiBpbml0aWFsIHJhbWRpc2suICovCiAJZnByaW50ZihzdGRlcnIsICJVc2FnZTogcGlnZ3liYWNrIHZtbGludXguYW91dCBTeXN0ZW0ubWFwIGZzX2ltZy5nelxuIik7CkBAIC02MSw3ICs2MSw3IEBACiAJZXhpdCgxKTsKIH0KIAotdm9pZCBkaWUoY2hhciAqc3RyKQorc3RhdGljIHZvaWQgZGllKGNoYXIgKnN0cikKIHsKIAlwZXJyb3IgKHN0cik7CiAJZXhpdCgxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYyBiL2FyY2gvc3BhcmMvYm9vdC9waWdneWJhY2tfNjQuYwppbmRleCBjNjNmZDFiLi5hMjZhNjg2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2Jvb3QvcGlnZ3liYWNrXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9ib290L3BpZ2d5YmFja182NC5jCkBAIC0zMiw3ICszMiw3IEBACiAvKiBOb3RlOiBydW4gdGhpcyBvbiBhbiBhLm91dCBrZXJuZWwgKHVzZSBlbGZ0b2FvdXQgZm9yIGl0KSwgYXMgUFJPTSBsb29rcyBmb3IgYS5vdXQgaW1hZ2Ugb25sbHkKICAgIHVzYWdlOiBwaWdneWJhY2sgdm1saW51eCBTeXN0ZW0ubWFwIHRhaWwsIHdoZXJlIHRhaWwgaXMgZ3ppcHBlZCBmcyBvZiB0aGUgaW5pdGlhbCByYW1kaXNrICovCiAKLXZvaWQgZGllKGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIGRpZShjaGFyICpzdHIpCiB7CiAJcGVycm9yIChzdHIpOwogCWV4aXQoMSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2hhcmRpcnFfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oCmluZGV4IDRmNjNlZDguLjE2MjAwNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaGFyZGlycV8zMi5oCkBAIC03LDE3ICs3LDcgQEAKICNpZm5kZWYgX19TUEFSQ19IQVJESVJRX0gKICNkZWZpbmUgX19TUEFSQ19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+Ci0KLS8qIGVudHJ5LlMgaXMgc2Vuc2l0aXZlIHRvIHRoZSBvZmZzZXRzIG9mIHRoZXNlIGZpZWxkcyAqLyAvKiBYWFggUDMgSXMgaXQ/ICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQotI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+CS8qIFN0YW5kYXJkIG1hcHBpbmdzIGZvciBpcnFfY3B1c3RhdF90IGFib3ZlICovCi0KICNkZWZpbmUgSEFSRElSUV9CSVRTICAgIDgKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9oYXJkaXJxLmg+CiAKICNlbmRpZiAvKiBfX1NQQVJDX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaXJxXzMyLmgKaW5kZXggZWE0MzA1Ny4uY2JmNDgwMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pcnFfMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lycV8zMi5oCkBAIC02LDEwICs2LDEwIEBACiAjaWZuZGVmIF9TUEFSQ19JUlFfSAogI2RlZmluZSBfU1BBUkNfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAjZGVmaW5lIE5SX0lSUVMgICAgMTYKIAorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKQkoaXJxKQogCiBleHRlcm4gdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IDBmZjkyZmEuLmYzY2I3OTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC00MSw4ICs0MSw4IEBACiAjZGVmaW5lIExPV19PQlBfQUREUkVTUwkJX0FDKDB4MDAwMDAwMDBmMDAwMDAwMCxVTCkKICNkZWZpbmUgSElfT0JQX0FERFJFU1MJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQJCV9BQygweDAwMDAwMDAxMDAwMDAwMDAsVUwpCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQlfQUMoMHgwMDAwMDAwMjAwMDAwMDAwLFVMKQotI2RlZmluZSBWTUVNTUFQX0JBU0UJCV9BQygweDAwMDAwMDAyMDAwMDAwMDAsVUwpCisjZGVmaW5lIFZNQUxMT0NfRU5ECQlfQUMoMHgwMDAwMDEwMDAwMDAwMDAwLFVMKQorI2RlZmluZSBWTUVNTUFQX0JBU0UJCV9BQygweDAwMDAwMTAwMDAwMDAwMDAsVUwpCiAKICNkZWZpbmUgdm1lbW1hcAkJCSgoc3RydWN0IHBhZ2UgKilWTUVNTUFQX0JBU0UpCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IDI1ZTg0OGYuLmQ0N2E5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtNjMsNiArNjMsMTAgQEAKIAkJCSAgICAgOiA6IDogIm1lbW9yeSIpOyBcCiB9IHdoaWxlICgwKQogCisvKiBUaGUga2VybmVsIGFsd2F5cyBleGVjdXRlcyBpbiBUU08gbWVtb3J5IG1vZGVsIHRoZXNlIGRheXMsCisgKiBhbmQgZnVydGhlcm1vcmUgbW9zdCBzcGFyYzY0IGNoaXBzIGltcGxlbWVudCBtb3JlIHN0cmluZ2VudAorICogbWVtb3J5IG9yZGVyaW5nIHRoYW4gcmVxdWlyZWQgYnkgdGhlIHNwZWNpZmljYXRpb25zLgorICovCiAjZGVmaW5lIG1iKCkJbWVtYmFyX3NhZmUoIiNTdG9yZUxvYWQiKQogI2RlZmluZSBybWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQogI2RlZmluZSB3bWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjo6OiJtZW1vcnkiKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdmlvLmgKaW5kZXggNmNkYmY3ZS4uOWQ4M2QzYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS92aW8uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Zpby5oCkBAIC0yNTgsOCArMjU4LDYgQEAKIHN0YXRpYyBpbmxpbmUgdTMyIHZpb19kcmluZ19hdmFpbChzdHJ1Y3QgdmlvX2RyaW5nX3N0YXRlICpkciwKIAkJCQkgIHVuc2lnbmVkIGludCByaW5nX3NpemUpCiB7Ci0JTUFZQkVfQlVJTERfQlVHX09OKCFpc19wb3dlcl9vZl8yKHJpbmdfc2l6ZSkpOwotCiAJcmV0dXJuIChkci0+cGVuZGluZyAtCiAJCSgoZHItPnByb2QgLSBkci0+Y29ucykgJiAocmluZ19zaXplIC0gMSkpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUyBiL2FyY2gvc3BhcmMva2VybmVsL2t0bGIuUwppbmRleCAzZWE2ZThjLi4xZDM2MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9rdGxiLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwva3RsYi5TCkBAIC0yODAsOCArMjgwLDggQEAKIAogI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUAogCS8qIERvIG5vdCB1c2UgdGhlIFRTQiBmb3Igdm1lbW1hcC4gICovCi0JbW92CQkoVk1FTU1BUF9CQVNFID4+IDI0KSwgJWc1Ci0Jc2xseAkJJWc1LCAyNCwgJWc1CisJbW92CQkoVk1FTU1BUF9CQVNFID4+IDQwKSwgJWc1CisJc2xseAkJJWc1LCA0MCwgJWc1CiAJY21wCQklZzQsJWc1CiAJYmdldSxwbgkJJXhjYywga3ZtYXBfdm1lbW1hcAogCSBub3AKQEAgLTI5Myw4ICsyOTMsOCBAQAogCXNldGhpCQklaGkoTU9EVUxFU19WQUREUiksICVnNQogCWNtcAkJJWc0LCAlZzUKIAlibHUscG4JCSV4Y2MsIGt2bWFwX2R0bGJfbG9uZ3BhdGgKLQkgbW92CQkoVk1BTExPQ19FTkQgPj4gMjQpLCAlZzUKLQlzbGx4CQklZzUsIDI0LCAlZzUKKwkgbW92CQkoVk1BTExPQ19FTkQgPj4gNDApLCAlZzUKKwlzbGx4CQklZzUsIDQwLCAlZzUKIAljbXAJCSVnNCwgJWc1CiAJYmdldSxwbgkJJXhjYywga3ZtYXBfZHRsYl9sb25ncGF0aAogCSBub3AKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xkYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKaW5kZXggYWRmNWYyNy4uY2IzYzcyYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGRjLmMKQEAgLTEyNDIsMTMgKzEyNDIsMTMgQEAKIAlzbnByaW50ZihscC0+dHhfaXJxX25hbWUsIExEQ19JUlFfTkFNRV9NQVgsICIlcyBUWCIsIG5hbWUpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEobHAtPmNmZy5yeF9pcnEsIGxkY19yeCwKLQkJCSAgSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9TSEFSRUQsCisJCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCwKIAkJCSAgbHAtPnJ4X2lycV9uYW1lLCBscCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IHJlcXVlc3RfaXJxKGxwLT5jZmcudHhfaXJxLCBsZGNfdHgsCi0JCQkgIElSUUZfU0FNUExFX1JBTkRPTSB8IElSUUZfU0hBUkVELAorCQkJICBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TSEFSRUQsCiAJCQkgIGxwLT50eF9pcnFfbmFtZSwgbHApOwogCWlmIChlcnIpIHsKIAkJZnJlZV9pcnEobHAtPmNmZy5yeF9pcnEsIGxwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCAyZDZhMWIxLi5mYTU5MzZlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC01Niw3ICs1Niw4IEBACiAJc3RydWN0IHBlcmZfZXZlbnQJKmV2ZW50c1tNQVhfSFdFVkVOVFNdOwogCXVuc2lnbmVkIGxvbmcJCXVzZWRfbWFza1tCSVRTX1RPX0xPTkdTKE1BWF9IV0VWRU5UUyldOwogCXVuc2lnbmVkIGxvbmcJCWFjdGl2ZV9tYXNrW0JJVFNfVE9fTE9OR1MoTUFYX0hXRVZFTlRTKV07Ci0JaW50IGVuYWJsZWQ7CisJdTY0CQkJcGNyOworCWludAkJCWVuYWJsZWQ7CiB9OwogREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpID0geyAuZW5hYmxlZCA9IDEsIH07CiAKQEAgLTY4LDggKzY5LDMwIEBACiAjZGVmaW5lIFBJQ19MT1dFUgkweDAyCiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwZXJmX2V2ZW50X2VuY29kZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnBtYXApCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZykgcG1hcC0+ZW5jb2RpbmcgPDwgMTYpIHwgcG1hcC0+cGljX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfZGVjb2RlKHVuc2lnbmVkIGxvbmcgdmFsLCB1MTYgKmVuYywgdTggKm1zaykKK3sKKwkqbXNrID0gdmFsICYgMHhmZjsKKwkqZW5jID0gdmFsID4+IDE2OworfQorCisjZGVmaW5lIEMoeCkgUEVSRl9DT1VOVF9IV19DQUNIRV8jI3gKKworI2RlZmluZSBDQUNIRV9PUF9VTlNVUFBPUlRFRAkweGZmZmUKKyNkZWZpbmUgQ0FDSEVfT1BfTk9OU0VOU0UJMHhmZmZmCisKK3R5cGVkZWYgc3RydWN0IHBlcmZfZXZlbnRfbWFwIGNhY2hlX21hcF90CisJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCQlbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKKwogc3RydWN0IHNwYXJjX3BtdSB7CiAJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwCSooKmV2ZW50X21hcCkoaW50KTsKKwljb25zdCBjYWNoZV9tYXBfdAkJKmNhY2hlX21hcDsKIAlpbnQJCQkJbWF4X2V2ZW50czsKIAlpbnQJCQkJdXBwZXJfc2hpZnQ7CiAJaW50CQkJCWxvd2VyX3NoaWZ0OwpAQCAtODAsMjEgKzEwMywxMDkgQEAKIAlpbnQJCQkJbG93ZXJfbm9wOwogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCB1bHRyYTNpX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIHVsdHJhM19wZXJmbW9uX2V2ZW50X21hcFtdID0gewogCVtQRVJGX0NPVU5UX0hXX0NQVV9DWUNMRVNdID0geyAweDAwMDAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiB9LAogCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSB7IDB4MDAwMSwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCiAJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDB4MDAwOSwgUElDX0xPV0VSIH0sCiAJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMDA5LCBQSUNfVVBQRVIgfSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM2lfZXZlbnRfbWFwKGludCBldmVudF9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgKnVsdHJhM19ldmVudF9tYXAoaW50IGV2ZW50X2lkKQogewotCXJldHVybiAmdWx0cmEzaV9wZXJmbW9uX2V2ZW50X21hcFtldmVudF9pZF07CisJcmV0dXJuICZ1bHRyYTNfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRfaWRdOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSB1bHRyYTNpX3BtdSA9IHsKLQkuZXZlbnRfbWFwCT0gdWx0cmEzaV9ldmVudF9tYXAsCi0JLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKHVsdHJhM2lfcGVyZm1vbl9ldmVudF9tYXApLAorc3RhdGljIGNvbnN0IGNhY2hlX21hcF90IHVsdHJhM19jYWNoZV9tYXAgPSB7CitbQyhMMUQpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwOSwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA5LCBQSUNfVVBQRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MGEsIFBJQ19MT1dFUiB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDBhLCBQSUNfVVBQRVIgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEwxSSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDA5LCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDksIFBJQ19VUFBFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMTCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDBjLCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MGMsIFBJQ19VUFBFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwYywgUElDX0xPV0VSIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MGMsIFBJQ19VUFBFUiB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoRFRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDEyLCBQSUNfVVBQRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoSVRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDExLCBQSUNfVVBQRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoQlBVKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGFyY19wbXUgdWx0cmEzX3BtdSA9IHsKKwkuZXZlbnRfbWFwCT0gdWx0cmEzX2V2ZW50X21hcCwKKwkuY2FjaGVfbWFwCT0gJnVsdHJhM19jYWNoZV9tYXAsCisJLm1heF9ldmVudHMJPSBBUlJBWV9TSVpFKHVsdHJhM19wZXJmbW9uX2V2ZW50X21hcCksCiAJLnVwcGVyX3NoaWZ0CT0gMTEsCiAJLmxvd2VyX3NoaWZ0CT0gNCwKIAkuZXZlbnRfbWFzawk9IDB4M2YsCkBAIC0xMDIsNiArMjEzLDEyMSBAQAogCS5sb3dlcl9ub3AJPSAweDE0LAogfTsKIAorLyogTmlhZ2FyYTEgaXMgdmVyeSBsaW1pdGVkLiAgVGhlIHVwcGVyIFBJQyBpcyBoYXJkLWxvY2tlZCB0byBjb3VudAorICogb25seSBpbnN0cnVjdGlvbnMsIHNvIGl0IGlzIGZyZWUgcnVubmluZyB3aGljaCBjcmVhdGVzIGFsbCBraW5kcyBvZgorICogcHJvYmxlbXMuICBTb21lIGhhcmR3YXJlIGRlc2lnbnMgbWFrZSBvbmUgd29uZGVyIGlmIHRoZSBjcmVhdG9yCisgKiBldmVuIGxvb2tlZCBhdCBob3cgdGhpcyBzdHVmZiBnZXRzIHVzZWQgYnkgc29mdHdhcmUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudF9tYXAgbmlhZ2FyYTFfcGVyZm1vbl9ldmVudF9tYXBbXSA9IHsKKwlbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXSA9IHsgMHgwMCwgUElDX1VQUEVSIH0sCisJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMCwgUElDX1VQUEVSIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10gPSB7IDAsIFBJQ19OT05FIH0sCisJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXSA9IHsgMHgwMywgUElDX0xPV0VSIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpuaWFnYXJhMV9ldmVudF9tYXAoaW50IGV2ZW50X2lkKQoreworCXJldHVybiAmbmlhZ2FyYTFfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRfaWRdOworfQorCitzdGF0aWMgY29uc3QgY2FjaGVfbWFwX3QgbmlhZ2FyYTFfY2FjaGVfbWFwID0geworW0MoTDFEKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMywgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTDFJKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDAsIFBJQ19VUFBFUiB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAyLCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfTk9OU0VOU0UgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTEwpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwNywgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfV1JJVEUpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDA3LCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9QUkVGRVRDSCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhEVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDUsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhJVExCKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDQsIFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhCUFUpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNwYXJjX3BtdSBuaWFnYXJhMV9wbXUgPSB7CisJLmV2ZW50X21hcAk9IG5pYWdhcmExX2V2ZW50X21hcCwKKwkuY2FjaGVfbWFwCT0gJm5pYWdhcmExX2NhY2hlX21hcCwKKwkubWF4X2V2ZW50cwk9IEFSUkFZX1NJWkUobmlhZ2FyYTFfcGVyZm1vbl9ldmVudF9tYXApLAorCS51cHBlcl9zaGlmdAk9IDAsCisJLmxvd2VyX3NoaWZ0CT0gNCwKKwkuZXZlbnRfbWFzawk9IDB4NywKKwkudXBwZXJfbm9wCT0gMHgwLAorCS5sb3dlcl9ub3AJPSAweDAsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwIG5pYWdhcmEyX3BlcmZtb25fZXZlbnRfbWFwW10gPSB7CiAJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSIH0sCiAJW1BFUkZfQ09VTlRfSFdfSU5TVFJVQ1RJT05TXSA9IHsgMHgwMmZmLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIgfSwKQEAgLTExNiwxNCArMzQyLDEwMiBAQAogCXJldHVybiAmbmlhZ2FyYTJfcGVyZm1vbl9ldmVudF9tYXBbZXZlbnRfaWRdOwogfQogCitzdGF0aWMgY29uc3QgY2FjaGVfbWFwX3QgbmlhZ2FyYTJfY2FjaGVfbWFwID0geworW0MoTDFEKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDIwOCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMDIsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1dSSVRFKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgMHgwMjEwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJCVtDKFJFU1VMVF9NSVNTKV0gPSB7IDB4MDMwMiwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJW0MoT1BfUFJFRkVUQ0gpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoTDFJKV0gPSB7CisJW0MoT1BfUkVBRCldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDJmZiwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMDEsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVsgQyhPUF9XUklURSkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX05PTlNFTlNFIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9OT05TRU5TRSB9LAorCX0sCisJWyBDKE9QX1BSRUZFVENIKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKK30sCitbQyhMTCldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyAweDAyMDgsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwMzMwLCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbQyhPUF9XUklURSldID0geworCQlbQyhSRVNVTFRfQUNDRVNTKV0gPSB7IDB4MDIxMCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweDAzMjAsIFBJQ19VUFBFUiB8IFBJQ19MT1dFUiwgfSwKKwl9LAorCVtDKE9QX1BSRUZFVENIKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKERUTEIpXSA9IHsKKwlbQyhPUF9SRUFEKV0gPSB7CisJCVtDKFJFU1VMVF9BQ0NFU1MpXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJW0MoUkVTVUxUX01JU1MpXSA9IHsgMHgwYjA4LCBQSUNfVVBQRVIgfCBQSUNfTE9XRVIsIH0sCisJfSwKKwlbIEMoT1BfV1JJVEUpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCit9LAorW0MoSVRMQildID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyAweGIwNCwgUElDX1VQUEVSIHwgUElDX0xPV0VSLCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK1tDKEJQVSldID0geworCVtDKE9QX1JFQUQpXSA9IHsKKwkJW0MoUkVTVUxUX0FDQ0VTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbQyhSRVNVTFRfTUlTUyldID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCX0sCisJWyBDKE9QX1dSSVRFKSBdID0geworCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSB7IENBQ0hFX09QX1VOU1VQUE9SVEVEIH0sCisJfSwKKwlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7CisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0geyBDQUNIRV9PUF9VTlNVUFBPUlRFRCB9LAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IHsgQ0FDSEVfT1BfVU5TVVBQT1JURUQgfSwKKwl9LAorfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BhcmNfcG11IG5pYWdhcmEyX3BtdSA9IHsKIAkuZXZlbnRfbWFwCT0gbmlhZ2FyYTJfZXZlbnRfbWFwLAorCS5jYWNoZV9tYXAJPSAmbmlhZ2FyYTJfY2FjaGVfbWFwLAogCS5tYXhfZXZlbnRzCT0gQVJSQVlfU0laRShuaWFnYXJhMl9wZXJmbW9uX2V2ZW50X21hcCksCiAJLnVwcGVyX3NoaWZ0CT0gMTksCiAJLmxvd2VyX3NoaWZ0CT0gNiwKIAkuZXZlbnRfbWFzawk9IDB4ZmZmLAogCS5odl9iaXQJCT0gMHg4LAotCS5pcnFfYml0CT0gMHgwMywKKwkuaXJxX2JpdAk9IDB4MzAsCiAJLnVwcGVyX25vcAk9IDB4MjIwLAogCS5sb3dlcl9ub3AJPSAweDIyMCwKIH07CkBAIC0xNTEsMjMgKzQ2NSwzMCBAQAogCQkJICAgICAgc3BhcmNfcG11LT5sb3dlcl9ub3AsIGlkeCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGFyY19wbXVfZW5hYmxlX2V2ZW50KHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsCi0JCQkJCSAgICBpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9lbmFibGVfZXZlbnQoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MsIGludCBpZHgpCiB7CiAJdTY0IHZhbCwgbWFzayA9IG1hc2tfZm9yX2luZGV4KGlkeCk7CiAKLQl2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7Ci0JcGNyX29wcy0+d3JpdGUoKHZhbCAmIH5tYXNrKSB8IGh3Yy0+Y29uZmlnKTsKKwl2YWwgPSBjcHVjLT5wY3I7CisJdmFsICY9IH5tYXNrOworCXZhbCB8PSBod2MtPmNvbmZpZzsKKwljcHVjLT5wY3IgPSB2YWw7CisKKwlwY3Jfb3BzLT53cml0ZShjcHVjLT5wY3IpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3BhcmNfcG11X2Rpc2FibGVfZXZlbnQoc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywKLQkJCQkJICAgICBpbnQgaWR4KQorc3RhdGljIGlubGluZSB2b2lkIHNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KHN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjLCBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCXU2NCBtYXNrID0gbWFza19mb3JfaW5kZXgoaWR4KTsKIAl1NjQgbm9wID0gbm9wX2Zvcl9pbmRleChpZHgpOwotCXU2NCB2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisJdTY0IHZhbDsKIAotCXBjcl9vcHMtPndyaXRlKCh2YWwgJiB+bWFzaykgfCBub3ApOworCXZhbCA9IGNwdWMtPnBjcjsKKwl2YWwgJj0gfm1hc2s7CisJdmFsIHw9IG5vcDsKKwljcHVjLT5wY3IgPSB2YWw7CisKKwlwY3Jfb3BzLT53cml0ZShjcHVjLT5wY3IpOwogfQogCiB2b2lkIGh3X3BlcmZfZW5hYmxlKHZvaWQpCkBAIC0xODIsNyArNTAzLDcgQEAKIAljcHVjLT5lbmFibGVkID0gMTsKIAliYXJyaWVyKCk7CiAKLQl2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisJdmFsID0gY3B1Yy0+cGNyOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9IV0VWRU5UUzsgaSsrKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpjcCA9IGNwdWMtPmV2ZW50c1tpXTsKQEAgLTE5NCw3ICs1MTUsOSBAQAogCQl2YWwgfD0gaHdjLT5jb25maWdfYmFzZTsKIAl9CiAKLQlwY3Jfb3BzLT53cml0ZSh2YWwpOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKIHZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCkBAIC0yMDcsMTAgKzUzMCwxMiBAQAogCiAJY3B1Yy0+ZW5hYmxlZCA9IDA7CiAKLQl2YWwgPSBwY3Jfb3BzLT5yZWFkKCk7CisJdmFsID0gY3B1Yy0+cGNyOwogCXZhbCAmPSB+KFBDUl9VVFJBQ0UgfCBQQ1JfU1RSQUNFIHwKIAkJIHNwYXJjX3BtdS0+aHZfYml0IHwgc3BhcmNfcG11LT5pcnFfYml0KTsKLQlwY3Jfb3BzLT53cml0ZSh2YWwpOworCWNwdWMtPnBjciA9IHZhbDsKKworCXBjcl9vcHMtPndyaXRlKGNwdWMtPnBjcik7CiB9CiAKIHN0YXRpYyB1MzIgcmVhZF9wbWMoaW50IGlkeCkKQEAgLTI0Miw3ICs1NjcsNyBAQAogfQogCiBzdGF0aWMgaW50IHNwYXJjX3BlcmZfZXZlbnRfc2V0X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCi0JCQkJCSBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQorCQkJCSAgICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCXM2NCBsZWZ0ID0gYXRvbWljNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7CiAJczY0IHBlcmlvZCA9IGh3Yy0+c2FtcGxlX3BlcmlvZDsKQEAgLTI4MiwxOSArNjA3LDE5IEBACiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCBjcHVjLT51c2VkX21hc2spKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChjcHVjLCBod2MsIGlkeCk7CiAKIAljcHVjLT5ldmVudHNbaWR4XSA9IGV2ZW50OwogCXNldF9iaXQoaWR4LCBjcHVjLT5hY3RpdmVfbWFzayk7CiAKIAlzcGFyY19wZXJmX2V2ZW50X3NldF9wZXJpb2QoZXZlbnQsIGh3YywgaWR4KTsKLQlzcGFyY19wbXVfZW5hYmxlX2V2ZW50KGh3YywgaWR4KTsKKwlzcGFyY19wbXVfZW5hYmxlX2V2ZW50KGNwdWMsIGh3YywgaWR4KTsKIAlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1NjQgc3BhcmNfcGVyZl9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAotCQkJCSAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YywgaW50IGlkeCkKKwkJCQkgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjLCBpbnQgaWR4KQogewogCWludCBzaGlmdCA9IDY0IC0gMzI7CiAJdTY0IHByZXZfcmF3X2NvdW50LCBuZXdfcmF3X2NvdW50OwpAQCAtMzI0LDcgKzY0OSw3IEBACiAJaW50IGlkeCA9IGh3Yy0+aWR4OwogCiAJY2xlYXJfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spOwotCXNwYXJjX3BtdV9kaXNhYmxlX2V2ZW50KGh3YywgaWR4KTsKKwlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChjcHVjLCBod2MsIGlkeCk7CiAKIAliYXJyaWVyKCk7CiAKQEAgLTMzOCwxOCArNjYzLDI5IEBACiBzdGF0aWMgdm9pZCBzcGFyY19wbXVfcmVhZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKIAlzcGFyY19wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgaHdjLCBod2MtPmlkeCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNwYXJjX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOwogCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OwotCXNwYXJjX3BtdV9lbmFibGVfZXZlbnQoaHdjLCBod2MtPmlkeCk7CisKKwlzcGFyY19wbXVfZW5hYmxlX2V2ZW50KGNwdWMsIGh3YywgaHdjLT5pZHgpOwogfQogCiBzdGF0aWMgYXRvbWljX3QgYWN0aXZlX2V2ZW50cyA9IEFUT01JQ19JTklUKDApOwogc3RhdGljIERFRklORV9NVVRFWChwbWNfZ3JhYl9tdXRleCk7CiAKK3N0YXRpYyB2b2lkIHBlcmZfc3RvcF9ubWlfd2F0Y2hkb2codm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisKKwlzdG9wX25taV93YXRjaGRvZyhOVUxMKTsKKwljcHVjLT5wY3IgPSBwY3Jfb3BzLT5yZWFkKCk7Cit9CisKIHZvaWQgcGVyZl9ldmVudF9ncmFiX3BtYyh2b2lkKQogewogCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZhY3RpdmVfZXZlbnRzKSkKQEAgLTM1OCw3ICs2OTQsNyBAQAogCW11dGV4X2xvY2soJnBtY19ncmFiX211dGV4KTsKIAlpZiAoYXRvbWljX3JlYWQoJmFjdGl2ZV9ldmVudHMpID09IDApIHsKIAkJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA+IDApIHsKLQkJCW9uX2VhY2hfY3B1KHN0b3Bfbm1pX3dhdGNoZG9nLCBOVUxMLCAxKTsKKwkJCW9uX2VhY2hfY3B1KHBlcmZfc3RvcF9ubWlfd2F0Y2hkb2csIE5VTEwsIDEpOwogCQkJQlVHX09OKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSAhPSAwKTsKIAkJfQogCQlhdG9taWNfaW5jKCZhY3RpdmVfZXZlbnRzKTsKQEAgLTM3NSwzMCArNzExLDE2MCBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqc3BhcmNfbWFwX2NhY2hlX2V2ZW50KHU2NCBjb25maWcpCit7CisJdW5zaWduZWQgaW50IGNhY2hlX3R5cGUsIGNhY2hlX29wLCBjYWNoZV9yZXN1bHQ7CisJY29uc3Qgc3RydWN0IHBlcmZfZXZlbnRfbWFwICpwbWFwOworCisJaWYgKCFzcGFyY19wbXUtPmNhY2hlX21hcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwljYWNoZV90eXBlID0gKGNvbmZpZyA+PiAgMCkgJiAweGZmOworCWlmIChjYWNoZV90eXBlID49IFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWNhY2hlX29wID0gKGNvbmZpZyA+PiAgOCkgJiAweGZmOworCWlmIChjYWNoZV9vcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljYWNoZV9yZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisJaWYgKGNhY2hlX3Jlc3VsdCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVgpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJcG1hcCA9ICYoKCpzcGFyY19wbXUtPmNhY2hlX21hcClbY2FjaGVfdHlwZV1bY2FjaGVfb3BdW2NhY2hlX3Jlc3VsdF0pOworCisJaWYgKHBtYXAtPmVuY29kaW5nID09IENBQ0hFX09QX1VOU1VQUE9SVEVEKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKKworCWlmIChwbWFwLT5lbmNvZGluZyA9PSBDQUNIRV9PUF9OT05TRU5TRSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlyZXR1cm4gcG1hcDsKK30KKwogc3RhdGljIHZvaWQgaHdfcGVyZl9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlwZXJmX2V2ZW50X3JlbGVhc2VfcG1jKCk7CiB9CiAKKy8qIE1ha2Ugc3VyZSBhbGwgZXZlbnRzIGNhbiBiZSBzY2hlZHVsZWQgaW50byB0aGUgaGFyZHdhcmUgYXQKKyAqIHRoZSBzYW1lIHRpbWUuICBUaGlzIGlzIHNpbXBsaWZpZWQgYnkgdGhlIGZhY3QgdGhhdCB3ZSBvbmx5CisgKiBuZWVkIHRvIHN1cHBvcnQgMiBzaW11bHRhbmVvdXMgSFcgZXZlbnRzLgorICovCitzdGF0aWMgaW50IHNwYXJjX2NoZWNrX2NvbnN0cmFpbnRzKHVuc2lnbmVkIGxvbmcgKmV2ZW50cywgaW50IG5fZXYpCit7CisJaWYgKG5fZXYgPD0gcGVyZl9tYXhfZXZlbnRzKSB7CisJCXU4IG1zazEsIG1zazI7CisJCXUxNiBkdW1teTsKKworCQlpZiAobl9ldiA9PSAxKQorCQkJcmV0dXJuIDA7CisJCUJVR19PTihuX2V2ICE9IDIpOworCQlwZXJmX2V2ZW50X2RlY29kZShldmVudHNbMF0sICZkdW1teSwgJm1zazEpOworCQlwZXJmX2V2ZW50X2RlY29kZShldmVudHNbMV0sICZkdW1teSwgJm1zazIpOworCisJCS8qIElmIGJvdGggZXZlbnRzIGNhbiBnbyBvbiBhbnkgY291bnRlciwgT0suICAqLworCQlpZiAobXNrMSA9PSAoUElDX1VQUEVSIHwgUElDX0xPV0VSKSAmJgorCQkgICAgbXNrMiA9PSAoUElDX1VQUEVSIHwgUElDX0xPV0VSKSkKKwkJCXJldHVybiAwOworCisJCS8qIElmIG9uZSBldmVudCBpcyBsaW1pdGVkIHRvIGEgc3BlY2lmaWMgY291bnRlciwKKwkJICogYW5kIHRoZSBvdGhlciBjYW4gZ28gb24gYm90aCwgT0suCisJCSAqLworCQlpZiAoKG1zazEgPT0gUElDX1VQUEVSIHx8IG1zazEgPT0gUElDX0xPV0VSKSAmJgorCQkgICAgbXNrMiA9PSAoUElDX1VQUEVSIHwgUElDX0xPV0VSKSkKKwkJCXJldHVybiAwOworCQlpZiAoKG1zazIgPT0gUElDX1VQUEVSIHx8IG1zazIgPT0gUElDX0xPV0VSKSAmJgorCQkgICAgbXNrMSA9PSAoUElDX1VQUEVSIHwgUElDX0xPV0VSKSkKKwkJCXJldHVybiAwOworCisJCS8qIElmIHRoZSBldmVudHMgYXJlIGZpeGVkIHRvIGRpZmZlcmVudCBjb3VudGVycywgT0suICAqLworCQlpZiAoKG1zazEgPT0gUElDX1VQUEVSICYmIG1zazIgPT0gUElDX0xPV0VSKSB8fAorCQkgICAgKG1zazEgPT0gUElDX0xPV0VSICYmIG1zazIgPT0gUElDX1VQUEVSKSkKKwkJCXJldHVybiAwOworCisJCS8qIE90aGVyd2lzZSwgdGhlcmUgaXMgYSBjb25mbGljdC4gICovCisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGNoZWNrX2V4Y2x1ZGVzKHN0cnVjdCBwZXJmX2V2ZW50ICoqZXZ0cywgaW50IG5fcHJldiwgaW50IG5fbmV3KQoreworCWludCBldSA9IDAsIGVrID0gMCwgZWggPSAwOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwlpbnQgaSwgbiwgZmlyc3Q7CisKKwluID0gbl9wcmV2ICsgbl9uZXc7CisJaWYgKG4gPD0gMSkKKwkJcmV0dXJuIDA7CisKKwlmaXJzdCA9IDE7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlldmVudCA9IGV2dHNbaV07CisJCWlmIChmaXJzdCkgeworCQkJZXUgPSBldmVudC0+YXR0ci5leGNsdWRlX3VzZXI7CisJCQllayA9IGV2ZW50LT5hdHRyLmV4Y2x1ZGVfa2VybmVsOworCQkJZWggPSBldmVudC0+YXR0ci5leGNsdWRlX2h2OworCQkJZmlyc3QgPSAwOworCQl9IGVsc2UgaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlciAhPSBldSB8fAorCQkJICAgZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwgIT0gZWsgfHwKKwkJCSAgIGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaHYgIT0gZWgpIHsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9ldmVudHMoc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwLCBpbnQgbWF4X2NvdW50LAorCQkJICBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZ0c1tdLCB1bnNpZ25lZCBsb25nICpldmVudHMpCit7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OworCWludCBuID0gMDsKKworCWlmICghaXNfc29mdHdhcmVfZXZlbnQoZ3JvdXApKSB7CisJCWlmIChuID49IG1heF9jb3VudCkKKwkJCXJldHVybiAtMTsKKwkJZXZ0c1tuXSA9IGdyb3VwOworCQlldmVudHNbbisrXSA9IGdyb3VwLT5ody5ldmVudF9iYXNlOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZ3JvdXAtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkgJiYKKwkJICAgIGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgeworCQkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJCXJldHVybiAtMTsKKwkJCWV2dHNbbl0gPSBldmVudDsKKwkJCWV2ZW50c1tuKytdID0gZXZlbnQtPmh3LmV2ZW50X2Jhc2U7CisJCX0KKwl9CisJcmV0dXJuIG47Cit9CisKIHN0YXRpYyBpbnQgX19od19wZXJmX2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZlbnQtPmF0dHI7CisJc3RydWN0IHBlcmZfZXZlbnQgKmV2dHNbTUFYX0hXRVZFTlRTXTsKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1bnNpZ25lZCBsb25nIGV2ZW50c1tNQVhfSFdFVkVOVFNdOwogCWNvbnN0IHN0cnVjdCBwZXJmX2V2ZW50X21hcCAqcG1hcDsKIAl1NjQgZW5jOworCWludCBuOwogCiAJaWYgKGF0b21pY19yZWFkKCZubWlfYWN0aXZlKSA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGF0dHItPnR5cGUgIT0gUEVSRl9UWVBFX0hBUkRXQVJFKQorCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IQVJEV0FSRSkgeworCQlpZiAoYXR0ci0+Y29uZmlnID49IHNwYXJjX3BtdS0+bWF4X2V2ZW50cykKKwkJCXJldHVybiAtRUlOVkFMOworCQlwbWFwID0gc3BhcmNfcG11LT5ldmVudF9tYXAoYXR0ci0+Y29uZmlnKTsKKwl9IGVsc2UgaWYgKGF0dHItPnR5cGUgPT0gUEVSRl9UWVBFX0hXX0NBQ0hFKSB7CisJCXBtYXAgPSBzcGFyY19tYXBfY2FjaGVfZXZlbnQoYXR0ci0+Y29uZmlnKTsKKwkJaWYgKElTX0VSUihwbWFwKSkKKwkJCXJldHVybiBQVFJfRVJSKHBtYXApOworCX0gZWxzZQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoYXR0ci0+Y29uZmlnID49IHNwYXJjX3BtdS0+bWF4X2V2ZW50cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwZXJmX2V2ZW50X2dyYWJfcG1jKCk7Ci0JZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7Ci0KIAkvKiBXZSBzYXZlIHRoZSBlbmFibGUgYml0cyBpbiB0aGUgY29uZmlnX2Jhc2UuICBTbyB0bwogCSAqIHR1cm4gb2ZmIHNhbXBsaW5nIGp1c3Qgd3JpdGUgJ2NvbmZpZycsIGFuZCB0byBlbmFibGUKIAkgKiB0aGluZ3Mgd3JpdGUgJ2NvbmZpZyB8IGNvbmZpZ19iYXNlJy4KQEAgLTQxMSwxNSArODc3LDM5IEBACiAJaWYgKCFhdHRyLT5leGNsdWRlX2h2KQogCQlod2MtPmNvbmZpZ19iYXNlIHw9IHNwYXJjX3BtdS0+aHZfYml0OwogCisJaHdjLT5ldmVudF9iYXNlID0gcGVyZl9ldmVudF9lbmNvZGUocG1hcCk7CisKKwllbmMgPSBwbWFwLT5lbmNvZGluZzsKKworCW4gPSAwOworCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyICE9IGV2ZW50KSB7CisJCW4gPSBjb2xsZWN0X2V2ZW50cyhldmVudC0+Z3JvdXBfbGVhZGVyLAorCQkJCSAgIHBlcmZfbWF4X2V2ZW50cyAtIDEsCisJCQkJICAgZXZ0cywgZXZlbnRzKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWV2ZW50c1tuXSA9IGh3Yy0+ZXZlbnRfYmFzZTsKKwlldnRzW25dID0gZXZlbnQ7CisKKwlpZiAoY2hlY2tfZXhjbHVkZXMoZXZ0cywgbiwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNwYXJjX2NoZWNrX2NvbnN0cmFpbnRzKGV2ZW50cywgbiArIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRyeSB0byBkbyBhbGwgZXJyb3IgY2hlY2tpbmcgYmVmb3JlIHRoaXMgcG9pbnQsIGFzIHVud2luZGluZworCSAqIHN0YXRlIGFmdGVyIGdyYWJiaW5nIHRoZSBQTUMgaXMgZGlmZmljdWx0LgorCSAqLworCXBlcmZfZXZlbnRfZ3JhYl9wbWMoKTsKKwlldmVudC0+ZGVzdHJveSA9IGh3X3BlcmZfZXZlbnRfZGVzdHJveTsKKwogCWlmICghaHdjLT5zYW1wbGVfcGVyaW9kKSB7CiAJCWh3Yy0+c2FtcGxlX3BlcmlvZCA9IE1BWF9QRVJJT0Q7CiAJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7CiAJCWF0b21pYzY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgaHdjLT5zYW1wbGVfcGVyaW9kKTsKIAl9CiAKLQlwbWFwID0gc3BhcmNfcG11LT5ldmVudF9tYXAoYXR0ci0+Y29uZmlnKTsKLQotCWVuYyA9IHBtYXAtPmVuY29kaW5nOwogCWlmIChwbWFwLT5waWNfbWFzayAmIFBJQ19VUFBFUikgewogCQlod2MtPmlkeCA9IFBJQ19VUFBFUl9JTkRFWDsKIAkJZW5jIDw8PSBzcGFyY19wbXUtPnVwcGVyX3NoaWZ0OwpAQCAtNDcyLDcgKzk2Miw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIHBlcmZfZXZlbnRfbm1pX2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqX19hcmdzKQorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBjbWQsIHZvaWQgKl9fYXJncykKIHsKIAlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSBfX2FyZ3M7CiAJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsKQEAgLTUxMyw3ICsxMDAzLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAxLCAmZGF0YSwgcmVncykpCi0JCQlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChod2MsIGlkeCk7CisJCQlzcGFyY19wbXVfZGlzYWJsZV9ldmVudChjcHVjLCBod2MsIGlkeCk7CiAJfQogCiAJcmV0dXJuIE5PVElGWV9TVE9QOwpAQCAtNTI1LDggKzEwMTUsMTUgQEAKIAogc3RhdGljIGJvb2wgX19pbml0IHN1cHBvcnRlZF9wbXUodm9pZCkKIHsKLQlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhM2kiKSkgewotCQlzcGFyY19wbXUgPSAmdWx0cmEzaV9wbXU7CisJaWYgKCFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTMiKSB8fAorCSAgICAhc3RyY21wKHNwYXJjX3BtdV90eXBlLCAidWx0cmEzKyIpIHx8CisJICAgICFzdHJjbXAoc3BhcmNfcG11X3R5cGUsICJ1bHRyYTNpIikgfHwKKwkgICAgIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgInVsdHJhNCsiKSkgeworCQlzcGFyY19wbXUgPSAmdWx0cmEzX3BtdTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWlmICghc3RyY21wKHNwYXJjX3BtdV90eXBlLCAibmlhZ2FyYSIpKSB7CisJCXNwYXJjX3BtdSA9ICZuaWFnYXJhMV9wbXU7CiAJCXJldHVybiB0cnVlOwogCX0KIAlpZiAoIXN0cmNtcChzcGFyY19wbXVfdHlwZSwgIm5pYWdhcmEyIikpIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2NvbW1vbi5jCmluZGV4IDEzODkxMGMuLmQ4MGE2NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21fY29tbW9uLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9jb21tb24uYwpAQCAtNzksNiArNzksNyBAQAogCiAJZXJyID0gLUVOT0RFVjsKIAorCW11dGV4X2xvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAJd3JpdGVfbG9jaygmZGV2dHJlZV9sb2NrKTsKIAlwcmV2cCA9ICZkcC0+cHJvcGVydGllczsKIAl3aGlsZSAoKnByZXZwKSB7CkBAIC04OCw5ICs4OSw3IEBACiAJCQl2b2lkICpvbGRfdmFsID0gcHJvcC0+dmFsdWU7CiAJCQlpbnQgcmV0OwogCi0JCQltdXRleF9sb2NrKCZvZl9zZXRfcHJvcGVydHlfbXV0ZXgpOwogCQkJcmV0ID0gcHJvbV9zZXRwcm9wKGRwLT5ub2RlLCBuYW1lLCB2YWwsIGxlbik7Ci0JCQltdXRleF91bmxvY2soJm9mX3NldF9wcm9wZXJ0eV9tdXRleCk7CiAKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlpZiAocmV0ID49IDApIHsKQEAgLTEwOSw2ICsxMDgsNyBAQAogCQlwcmV2cCA9ICYoKnByZXZwKS0+bmV4dDsKIAl9CiAJd3JpdGVfdW5sb2NrKCZkZXZ0cmVlX2xvY2spOworCW11dGV4X3VubG9jaygmb2Zfc2V0X3Byb3BlcnR5X211dGV4KTsKIAogCS8qIFhYWCBVcGF0ZSBwcm9jZnMgaWYgbmVjZXNzYXJ5Li4uICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggZmY2ODM3My4uYWEzNjIyMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTE0MjAsNyArMTQyMCw3IEBACiAJZnJlZV9ib290bWVtKF9fcGEocHRyKSwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKK3N0YXRpYyBpbnQgX19pbml0IHBjcHVfY3B1X2Rpc3RhbmNlKHVuc2lnbmVkIGludCBmcm9tLCB1bnNpZ25lZCBpbnQgdG8pCiB7CiAJaWYgKGNwdV90b19ub2RlKGZyb20pID09IGNwdV90b19ub2RlKHRvKSkKIAkJcmV0dXJuIExPQ0FMX0RJU1RBTkNFOwpAQCAtMTQyOCwxOCArMTQyOCw1MyBAQAogCQlyZXR1cm4gUkVNT1RFX0RJU1RBTkNFOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgcGNwdV9wb3B1bGF0ZV9wdGUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2soYWRkcik7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWlmIChwdWRfbm9uZSgqcHVkKSkgeworCQlwbWRfdCAqbmV3OworCisJCW5ldyA9IF9fYWxsb2NfYm9vdG1lbShQQUdFX1NJWkUsIFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJcHVkX3BvcHVsYXRlKCZpbml0X21tLCBwdWQsIG5ldyk7CisJfQorCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpIHsKKwkJcHRlX3QgKm5ldzsKKworCQluZXcgPSBfX2FsbG9jX2Jvb3RtZW0oUEFHRV9TSVpFLCBQQUdFX1NJWkUsIFBBR0VfU0laRSk7CisJCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgbmV3KTsKKwl9Cit9CisKIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfYXJlYXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGRlbHRhOwogCXVuc2lnbmVkIGludCBjcHU7Ci0JaW50IHJjOworCWludCByYyA9IC1FSU5WQUw7CiAKLQlyYyA9IHBjcHVfZW1iZWRfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAotCQkJCSAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCA0IDw8IDIwLAotCQkJCSAgICBwY3B1X2NwdV9kaXN0YW5jZSwgcGNwdV9hbGxvY19ib290bWVtLAotCQkJCSAgICBwY3B1X2ZyZWVfYm9vdG1lbSk7Ci0JaWYgKHJjKQotCQlwYW5pYygiZmFpbGVkIHRvIGluaXRpYWxpemUgZmlyc3QgY2h1bmsgKCVkKSIsIHJjKTsKKwlpZiAocGNwdV9jaG9zZW5fZmMgIT0gUENQVV9GQ19QQUdFKSB7CisJCXJjID0gcGNwdV9lbWJlZF9maXJzdF9jaHVuayhQRVJDUFVfTU9EVUxFX1JFU0VSVkUsCisJCQkJCSAgICBQRVJDUFVfRFlOQU1JQ19SRVNFUlZFLCA0IDw8IDIwLAorCQkJCQkgICAgcGNwdV9jcHVfZGlzdGFuY2UsCisJCQkJCSAgICBwY3B1X2FsbG9jX2Jvb3RtZW0sCisJCQkJCSAgICBwY3B1X2ZyZWVfYm9vdG1lbSk7CisJCWlmIChyYykKKwkJCXByX3dhcm5pbmcoIlBFUkNQVTogJXMgYWxsb2NhdG9yIGZhaWxlZCAoJWQpLCAiCisJCQkJICAgImZhbGxpbmcgYmFjayB0byBwYWdlIHNpemVcbiIsCisJCQkJICAgcGNwdV9mY19uYW1lc1twY3B1X2Nob3Nlbl9mY10sIHJjKTsKKwl9CisJaWYgKHJjIDwgMCkKKwkJcmMgPSBwY3B1X3BhZ2VfZmlyc3RfY2h1bmsoUEVSQ1BVX01PRFVMRV9SRVNFUlZFLAorCQkJCQkgICBwY3B1X2FsbG9jX2Jvb3RtZW0sCisJCQkJCSAgIHBjcHVfZnJlZV9ib290bWVtLAorCQkJCQkgICBwY3B1X3BvcHVsYXRlX3B0ZSk7CisJaWYgKHJjIDwgMCkKKwkJcGFuaWMoImNhbm5vdCBpbml0aWFsaXplIHBlcmNwdSBhcmVhIChlcnI9JWQpIiwgcmMpOwogCiAJZGVsdGEgPSAodW5zaWduZWQgbG9uZylwY3B1X2Jhc2VfYWRkciAtICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydDsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCmluZGV4IGI5NTZmZDcuLmQyMzFjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKQEAgLTYxNyw3ICs2MTcsNyBAQAogCQlyczIgPSBmcHNfcmVndmFsKGYsIFJTMihpbnNuKSk7CiAKIAkJcmRfdmFsID0gMDsKLQkJc3JjMiA9IChyczIgPj4gKG9wZiA9PSBGTVVMOHgxNkFVX09QRikgPyAxNiA6IDApOworCQlzcmMyID0gcnMyID4+IChvcGYgPT0gRk1VTDh4MTZBVV9PUEYgPyAxNiA6IDApOwogCQlmb3IgKGJ5dGUgPSAwOyBieXRlIDwgNDsgYnl0ZSsrKSB7CiAJCQl1MTYgc3JjMSA9IChyczEgPj4gKGJ5dGUgKiA4KSkgJiAweDAwZmY7CiAJCQl1MzIgcHJvZCA9IHNyYzEgKiBzcmMyOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCBhNzBhNWUxLi4xODg2ZDM3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKLQlpZiAocGFnZSAmJiBwYWdlX21hcHBpbmcocGFnZSkpIHsKKwlpZiAocGFnZSkgewogCQl1bnNpZ25lZCBsb25nIHBnX2ZsYWdzOwogCiAJCXBnX2ZsYWdzID0gcGFnZS0+ZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL29wcm9maWxlL2luaXQuYyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCmluZGV4IGY5N2NiOGIuLmY5MDI0YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCisrKyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvaW5pdC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgkvKiBmb3IgSFogKi8KICAKICNpZmRlZiBDT05GSUdfU1BBUkM2NAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCAxNGExMDJlLi5jZjhhOTdmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlICJsaW51eC9pcnFyZXR1cm4uaCIKICNpbmNsdWRlICJsaW51eC9rZC5oIgorI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCiAjaW5jbHVkZSAiY2hhbl9rZXJuLmgiCiAjaW5jbHVkZSAiaXJxX2tlcm4uaCIKICNpbmNsdWRlICJpcnFfdXNlci5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3BvcnRfa2Vybi5jCmluZGV4IDE5OTMwMDguLjRlYmM4YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wb3J0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF9rZXJuLmMKQEAgLTcsNiArNyw3IEBACiAjaW5jbHVkZSAibGludXgvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAibGludXgvbGlzdC5oIgogI2luY2x1ZGUgImxpbnV4L211dGV4LmgiCisjaW5jbHVkZSAibGludXgvd29ya3F1ZXVlLmgiCiAjaW5jbHVkZSAiYXNtL2F0b21pYy5oIgogI2luY2x1ZGUgImluaXQuaCIKICNpbmNsdWRlICJpcnFfa2Vybi5oIgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9jb21tb24ubGRzLlMgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUwppbmRleCAzN2VjYzU1Li5hYzU1YjllIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUworKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2NvbW1vbi5sZHMuUwpAQCAtMTYsMTEgKzE2LDcgQEAKIAogICAuID0gQUxJR04oNDA5Nik7CiAgIC5ub3RlIDogeyAqKC5ub3RlLiopIH0KLSAgX19leF90YWJsZSA6IHsKLQlfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotCSooX19leF90YWJsZSkKLQlfX3N0b3BfX19leF90YWJsZSA9IC47Ci0gIH0KKyAgRVhDRVBUSU9OX1RBQkxFKDApCiAKICAgQlVHX1RBQkxFCiAKQEAgLTQzLDI4ICszOSwxNyBAQAogICB9CiAJCiAgIC5pbml0LnNldHVwIDogewotCV9fc2V0dXBfc3RhcnQgPSAuOwotCSooLmluaXQuc2V0dXApCi0JX19zZXR1cF9lbmQgPSAuOworCUlOSVRfU0VUVVAoMCkKICAgfQogCi0gIC4gPSBBTElHTigzMik7Ci0gIC5kYXRhLnBlcmNwdSA6IHsKLQlfX3Blcl9jcHVfc3RhcnQgPSAuIDsKLQkqKC5kYXRhLnBlcmNwdSkKLQlfX3Blcl9jcHVfZW5kID0gLiA7Ci0gIH0KKyAgUEVSQ1BVKDMyKQogCQogICAuaW5pdGNhbGwuaW5pdCA6IHsKLQlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQlJTklUQ0FMTFMKLQlfX2luaXRjYWxsX2VuZCA9IC47CisJSU5JVF9DQUxMUwogICB9CiAKICAgLmNvbl9pbml0Y2FsbC5pbml0IDogewotCV9fY29uX2luaXRjYWxsX3N0YXJ0ID0gLjsKLQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQlfX2Nvbl9pbml0Y2FsbF9lbmQgPSAuOworCUNPTl9JTklUQ0FMTAogICB9CiAKICAgLnVtbC5pbml0Y2FsbC5pbml0IDogewpAQCAtMTE4LDggKzEwMyw2IEBACiAKICAgIC4gPSBBTElHTig0MDk2KTsKICAgLmluaXQucmFtZnMgOiB7Ci0JX19pbml0cmFtZnNfc3RhcnQgPSAuOwotCSooLmluaXQucmFtZnMpCi0JX19pbml0cmFtZnNfZW5kID0gLjsKKwlJTklUX1JBTV9GUwogICB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwppbmRleCA3MTVhMTg4Li43ZmNhZDU4IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCkBAIC0xNiwxMSArMTYsNyBAQAogICBfdGV4dCA9IC47CiAgIF9zdGV4dCA9IC47CiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0JX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUCi0JX2Vpbml0dGV4dCA9IC47Ci0gIH0KKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQogCiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCkBAIC05Niw4ICs5Miw3IEBACiAgIC5pbml0X2FycmF5ICAgICA6IHsgKiguaW5pdF9hcnJheSkgfQogICAuZmluaV9hcnJheSAgICAgOiB7ICooLmZpbmlfYXJyYXkpIH0KICAgLmRhdGEgICAgICAgICAgIDogewotICAgIC4gPSBBTElHTihLRVJORUxfU1RBQ0tfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KLSAgICAqKC5kYXRhLmluaXRfdGFzaykKKyAgICBJTklUX1RBU0tfREFUQShLRVJORUxfU1RBQ0tfU0laRSkKICAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwogICAgICooLmRhdGEuaW5pdF9pcnFzdGFjaykKICAgICBEQVRBX0RBVEEKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggNDU0Y2RiNC4uMDM5MjcwYiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJsaW51eC9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJsaW51eC9rZXJuZWxfc3RhdC5oIgogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgorI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCiAjaW5jbHVkZSAibGludXgvc2VxX2ZpbGUuaCIKICNpbmNsdWRlICJhcy1sYXlvdXQuaCIKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUyBiL2FyY2gvdW0va2VybmVsL3VtbC5sZHMuUwppbmRleCAyZWJkMzk3Li5lN2E2Y2NhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bWwubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1sLmxkcy5TCkBAIC0yMiwxMSArMjIsNyBAQAogICBfdGV4dCA9IC47CiAgIF9zdGV4dCA9IC47CiAgIF9faW5pdF9iZWdpbiA9IC47Ci0gIC5pbml0LnRleHQgOiB7Ci0JX3Npbml0dGV4dCA9IC47Ci0JSU5JVF9URVhUCi0JX2Vpbml0dGV4dCA9IC47Ci0gIH0KKyAgSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKIAogICAudGV4dCAgICAgIDoKQEAgLTUyLDggKzQ4LDcgQEAKICAgaW5pdC5kYXRhIDogeyBJTklUX0RBVEEgfQogICAuZGF0YSAgICA6CiAgIHsKLSAgICAuID0gQUxJR04oS0VSTkVMX1NUQUNLX1NJWkUpOwkJLyogaW5pdF90YXNrICovCi0gICAgKiguZGF0YS5pbml0X3Rhc2spCisgICAgSU5JVF9UQVNLX0RBVEEoS0VSTkVMX1NUQUNLX1NJWkUpCiAgICAgLiA9IEFMSUdOKEtFUk5FTF9TVEFDS19TSVpFKTsKICAgICAqKC5kYXRhLmluaXRfaXJxc3RhY2spCiAgICAgREFUQV9EQVRBCkBAIC04MSwxOSArNzYsMTAgQEAKICAgX2VkYXRhICA9ICAuOwogICBQUk9WSURFIChlZGF0YSA9IC4pOwogICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgLnNic3MgICAgICA6Ci0gIHsKLSAgIF9fYnNzX3N0YXJ0ID0gLjsKLSAgIFBST1ZJREUoX2Jzc19zdGFydCA9IC4pOwotICAgKiguc2JzcykKLSAgICooLnNjb21tb24pCi0gIH0KLSAgLmJzcyAgICAgICA6Ci0gIHsKLSAgICooLmR5bmJzcykKLSAgICooLmJzcykKLSAgICooQ09NTU9OKQotICB9CisgIF9fYnNzX3N0YXJ0ID0gLjsKKyAgUFJPVklERShfYnNzX3N0YXJ0ID0gLik7CisgIFNCU1MoMCkKKyAgQlNTKDApCiAgIF9lbmQgPSAuOwogICBQUk9WSURFIChlbmQgPSAuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggOTM2OTg3OS4uNzJhY2U5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC04NiwxMCArODYsNiBAQAogY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCi1jb25maWcgRkFTVF9DTVBYQ0hHX0xPQ0FMCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgTU1VCiAJZGVmX2Jvb2wgeQogCkBAIC00MzIsNiArNDI4LDE3IEBACiAJICBvZiBGbGF0IExvZ2ljYWwuICBZb3Ugd2lsbCBuZWVkIGEgbmV3IGx5bnhlci5lbGYgZmlsZSB0byBmbGFzaCB5b3VyCiAJICBmaXJtd2FyZSB3aXRoIC0gc2VuZCBlbWFpbCB0byA8TWFydGluLkJsaWdoQHVzLmlibS5jb20+LgogCitjb25maWcgWDg2X1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFCisJYm9vbAorCSMgTUNFIGNvZGUgY2FsbHMgbWVtb3J5X2ZhaWx1cmUoKToKKwlkZXBlbmRzIG9uIFg4Nl9NQ0UKKwkjIE9uIDMyLWJpdCB0aGlzIGFkZHMgdG9vIGJpZyBvZiBOT0RFU19TSElGVCBhbmQgd2UgcnVuIG91dCBvZiBwYWdlIGZsYWdzOgorCWRlcGVuZHMgb24gIVg4Nl9OVU1BUQorCSMgT24gMzItYml0IFNQQVJTRU1FTSBhZGRzIHRvbyBiaWcgb2YgU0VDVElPTlNfV0lEVEg6CisJZGVwZW5kcyBvbiBYODZfNjQgfHwgIVNQQVJTRU1FTQorCXNlbGVjdCBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFCisJZGVmYXVsdCB5CisKIGNvbmZpZyBYODZfVklTV1MKIAlib29sICJTR0kgMzIwLzU0MCAoVmlzdWFsIFdvcmtzdGF0aW9uKSIKIAlkZXBlbmRzIG9uIFg4Nl8zMiAmJiBQQ0kgJiYgWDg2X01QUEFSU0UgJiYgUENJX0dPRElSRUNUCkBAIC00ODQsNyArNDkxLDcgQEAKIHNvdXJjZSAiYXJjaC94ODYveGVuL0tjb25maWciCiAKIGNvbmZpZyBWTUkKLQlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCIKKwlib29sICJWTUkgR3Vlc3Qgc3VwcG9ydCAoREVQUkVDQVRFRCkiCiAJc2VsZWN0IFBBUkFWSVJUCiAJZGVwZW5kcyBvbiBYODZfMzIKIAktLS1oZWxwLS0tCkBAIC00OTMsNiArNTAwLDE1IEBACiAJICBhdCB0aGUgbW9tZW50KSwgYnkgbGlua2luZyB0aGUga2VybmVsIHRvIGEgR1BMLWVkIFJPTSBtb2R1bGUKIAkgIHByb3ZpZGVkIGJ5IHRoZSBoeXBlcnZpc29yLgogCisJICBBcyBvZiBTZXB0ZW1iZXIgMjAwOSwgVk13YXJlIGhhcyBzdGFydGVkIGEgcGhhc2VkIHJldGlyZW1lbnQKKwkgIG9mIHRoaXMgZmVhdHVyZSBmcm9tIFZNd2FyZSdzIHByb2R1Y3RzLiBQbGVhc2Ugc2VlCisJICBmZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGZvciBkZXRhaWxzLiAgSWYgeW91IGFyZQorCSAgcGxhbm5pbmcgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW5ub3QKKwkgIGxpdmUgbWlncmF0ZSBhIFZNSSBlbmFibGVkIFZNIHRvIGEgZnV0dXJlIFZNd2FyZSBwcm9kdWN0LAorCSAgd2hpY2ggZG9lc24ndCBzdXBwb3J0IFZNSS4gU28gaWYgeW91IGV4cGVjdCB5b3VyIGtlcm5lbCB0bworCSAgc2VhbWxlc3NseSBtaWdyYXRlIHRvIG5ld2VyIFZNd2FyZSBwcm9kdWN0cywga2VlcCB0aGlzCisJICBkaXNhYmxlZC4KKwogY29uZmlnIEtWTV9DTE9DSwogCWJvb2wgIktWTSBwYXJhdmlydHVhbGl6ZWQgY2xvY2siCiAJc2VsZWN0IFBBUkFWSVJUCkBAIC0xNDI3LDEyICsxNDQzLDggQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4gT25seSBlbWJlZGRlZCBzaG91bGQgc2F5IE4gaGVyZS4KIAotY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SX0FMTAotCWJvb2wKLQogY29uZmlnIENDX1NUQUNLUFJPVEVDVE9SCiAJYm9vbCAiRW5hYmxlIC1mc3RhY2stcHJvdGVjdG9yIGJ1ZmZlciBvdmVyZmxvdyBkZXRlY3Rpb24gKEVYUEVSSU1FTlRBTCkiCi0Jc2VsZWN0IENDX1NUQUNLUFJPVEVDVE9SX0FMTAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHRoZSAtZnN0YWNrLXByb3RlY3RvciBHQ0MgZmVhdHVyZS4gVGhpcwogCSAgZmVhdHVyZSBwdXRzLCBhdCB0aGUgYmVnaW5uaW5nIG9mIGZ1bmN0aW9ucywgYSBjYW5hcnkgdmFsdWUgb24KZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuY3B1IGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKaW5kZXggNTI3NTE5Yi4uMjY0OTg0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5jcHUKQEAgLTQwMCw3ICs0MDAsNyBAQAogCiBjb25maWcgWDg2X0NNUFhDSEc2NAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFg4Nl9QQUUgfHwgWDg2XzY0CisJZGVwZW5kcyBvbiAhTTM4NiAmJiAhTTQ4NgogCiAjIHRoaXMgc2hvdWxkIGJlIHNldCBmb3IgYWxsIC1tYXJjaD0uLiBvcHRpb25zIHdoZXJlIHRoZSBjb21waWxlcgogIyBnZW5lcmF0ZXMgY21vdi4KQEAgLTQxMiw2ICs0MTIsNyBAQAogCWludAogCWRlZmF1bHQgIjY0IiBpZiBYODZfNjQKIAlkZWZhdWx0ICI2IiBpZiBYODZfMzIgJiYgWDg2X1A2X05PUAorCWRlZmF1bHQgIjUiIGlmIFg4Nl8zMiAmJiBYODZfQ01QWENIRzY0CiAJZGVmYXVsdCAiNCIgaWYgWDg2XzMyICYmIChYODZfWEFERCB8fCBYODZfQ01QWENIRyB8fCBYODZfQlNXQVAgfHwgWDg2X1dQX1dPUktTX09LKQogCWRlZmF1bHQgIjMiCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggYTAxMmVlOC4uZDJkMjRjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGUKQEAgLTc2LDcgKzc2LDYgQEAKIAljY19oYXNfc3AgOj0gJChzcmN0cmVlKS9zY3JpcHRzL2djYy14ODZfJChCSVRTKS1oYXMtc3RhY2stcHJvdGVjdG9yLnNoCiAgICAgICAgIGlmZXEgKCQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2NfaGFzX3NwKSAkKENDKSAkKGJpYXJjaCkpLHkpCiAgICAgICAgICAgICAgICAgc3RhY2twLXkgOj0gLWZzdGFjay1wcm90ZWN0b3IKLSAgICAgICAgICAgICAgICBzdGFja3AtJChDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfQUxMKSArPSAtZnN0YWNrLXByb3RlY3Rvci1hbGwKICAgICAgICAgICAgICAgICBLQlVJTERfQ0ZMQUdTICs9ICQoc3RhY2twLXkpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAkKHdhcm5pbmcgc3RhY2sgcHJvdGVjdG9yIGVuYWJsZWQgYnV0IG5vIGNvbXBpbGVyIHN1cHBvcnQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfMzIuUwppbmRleCA3NWU0ZjAwLi5mNTQzYjcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzMyLlMKQEAgLTIzLDEzICsyMywxNCBAQAogICovCiAJLnRleHQKIAorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ib290Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLQkuc2VjdGlvbiAiLnRleHQuaGVhZCIsImF4IixAcHJvZ2JpdHMKKwlfX0hFQUQKIEVOVFJZKHN0YXJ0dXBfMzIpCiAJY2xkCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvaGVhZF82NC5TCmluZGV4IGY2MmMyODQuLjA3N2UxYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL2hlYWRfNjQuUwpAQCAtMjQsNiArMjQsNyBAQAogCS5jb2RlMzIKIAkudGV4dAogCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CkBAIC0zMyw3ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0JLnNlY3Rpb24gIi50ZXh0LmhlYWQiCisJX19IRUFECiAJLmNvZGUzMgogRU5UUlkoc3RhcnR1cF8zMikKIAljbGQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5TIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKaW5kZXggY2MzNTNlMS4uZjQxOTNiYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLlMKQEAgLTEsMyArMSw1IEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaD4KKwogT1VUUFVUX0ZPUk1BVChDT05GSUdfT1VUUFVUX0ZPUk1BVCwgQ09ORklHX09VVFBVVF9GT1JNQVQsIENPTkZJR19PVVRQVVRfRk9STUFUKQogCiAjdW5kZWYgaTM4NgpAQCAtMTgsOSArMjAsOSBAQAogCSAqIGFkZHJlc3MgMC4KIAkgKi8KIAkuID0gMDsKLQkudGV4dC5oZWFkIDogeworCS5oZWFkLnRleHQgOiB7CiAJCV9oZWFkID0gLiA7Ci0JCSooLnRleHQuaGVhZCkKKwkJSEVBRF9URVhUCiAJCV9laGVhZCA9IC4gOwogCX0KIAkucm9kYXRhLmNvbXByZXNzZWQgOiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3NldHVwLmxkIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAppbmRleCAwZjZlYzQ1NS4uMDNjMDY4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9zZXR1cC5sZAorKysgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCkBAIC01Myw2ICs1Myw5IEBACiAKIAkvRElTQ0FSRC8gOiB7ICooLm5vdGUqKSB9CiAKKwkvKgorCSAqIFRoZSBBU1NFUlQoKSBzaW5rIHRvIC4gaXMgaW50ZW50aW9uYWwsIGZvciBiaW51dGlscyAyLjE0IGNvbXBhdGliaWxpdHk6CisJICovCiAJLiA9IEFTU0VSVChfZW5kIDw9IDB4ODAwMCwgIlNldHVwIHRvbyBiaWchIik7CiAJLiA9IEFTU0VSVChoZHIgPT0gMHgxZjEsICJUaGUgc2V0dXAgaGVhZGVyIGhhcyB0aGUgd3Jvbmcgb2Zmc2V0ISIpOwogCS8qIE5lY2Vzc2FyeSBmb3IgdGhlIHZlcnktb2xkLWxvYWRlciBjaGVjayB0byB3b3JrLi4uICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYwppbmRleCA1ODVlZGViLi40OWM1NTJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfZ2x1ZS5jCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpCisJaWYgKCFpcnFfZnB1X3VzYWJsZSgpKQogCQllcnIgPSBjcnlwdG9fYWVzX2V4cGFuZF9rZXkoY3R4LCBpbl9rZXksIGtleV9sZW4pOwogCWVsc2UgewogCQlrZXJuZWxfZnB1X2JlZ2luKCk7CkBAIC0xMDMsNyArMTAzLDcgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCA9IGFlc19jdHgoY3J5cHRvX3RmbV9jdHgodGZtKSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpCiAJCWNyeXB0b19hZXNfZW5jcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CiAJZWxzZSB7CiAJCWtlcm5lbF9mcHVfYmVnaW4oKTsKQEAgLTExNiw3ICsxMTYsNyBAQAogewogCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKIAotCWlmIChpcnFfZnB1X3VzYWJsZSgpKQorCWlmICghaXJxX2ZwdV91c2FibGUoKSkKIAkJY3J5cHRvX2Flc19kZWNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKIAllbHNlIHsKIAkJa2VybmVsX2ZwdV9iZWdpbigpOwpAQCAtMzQyLDcgKzM0Miw3IEBACiAJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CiAKLQlpZiAoaXJxX2ZwdV91c2FibGUoKSkgeworCWlmICghaXJxX2ZwdV91c2FibGUoKSkgewogCQlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpjcnlwdGRfcmVxID0KIAkJCWFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKIAkJbWVtY3B5KGNyeXB0ZF9yZXEsIHJlcSwgc2l6ZW9mKCpyZXEpKTsKQEAgLTM2Myw3ICszNjMsNyBAQAogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7CiAJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOwogCi0JaWYgKGlycV9mcHVfdXNhYmxlKCkpIHsKKwlpZiAoIWlycV9mcHVfdXNhYmxlKCkpIHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CiAJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CiAJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCA3NDYxOWM0Li41ODFiMDU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTIxLDggKzIxLDggQEAKICNkZWZpbmUgX19BVURJVF9BUkNIX0xFCSAgIDB4NDAwMDAwMDAKIAogI2lmbmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCi0jZGVmaW5lIHN5c2V4aXRfYXVkaXQgaW50X3JldF9mcm9tX3N5c19jYWxsCi0jZGVmaW5lIHN5c3JldGxfYXVkaXQgaW50X3JldF9mcm9tX3N5c19jYWxsCisjZGVmaW5lIHN5c2V4aXRfYXVkaXQgaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAorI2RlZmluZSBzeXNyZXRsX2F1ZGl0IGlhMzJfcmV0X2Zyb21fc3lzX2NhbGwKICNlbmRpZgogCiAjZGVmaW5lIElBMzJfTlJfc3lzY2FsbHMgKChpYTMyX3N5c2NhbGxfZW5kIC0gaWEzMl9zeXNfY2FsbF90YWJsZSkvOCkKQEAgLTM5LDEyICszOSwxMiBAQAogCS5lbmRtIAogCiAJLyogY2xvYmJlcnMgJWVheCAqLwkKLQkubWFjcm8gIENMRUFSX1JSRUdTIF9yOT1yYXgKKwkubWFjcm8gIENMRUFSX1JSRUdTIG9mZnNldD0wLCBfcjk9cmF4CiAJeG9ybCAJJWVheCwlZWF4Ci0JbW92cQklcmF4LFIxMSglcnNwKQotCW1vdnEJJXJheCxSMTAoJXJzcCkKLQltb3ZxCSVcX3I5LFI5KCVyc3ApCi0JbW92cQklcmF4LFI4KCVyc3ApCisJbW92cQklcmF4LFxvZmZzZXQrUjExKCVyc3ApCisJbW92cQklcmF4LFxvZmZzZXQrUjEwKCVyc3ApCisJbW92cQklXF9yOSxcb2Zmc2V0K1I5KCVyc3ApCisJbW92cQklcmF4LFxvZmZzZXQrUjgoJXJzcCkKIAkuZW5kbQogCiAJLyoKQEAgLTE3Miw2ICsxNzIsMTAgQEAKIAltb3ZsCVJJUC1SMTEoJXJzcCksJWVkeAkJLyogVXNlciAlZWlwICovCiAJQ0ZJX1JFR0lTVEVSIHJpcCxyZHgKIAlSRVNUT1JFX0FSR1MgMSwyNCwxLDEsMSwxCisJeG9ycQklcjgsJXI4CisJeG9ycQklcjksJXI5CisJeG9ycQklcjEwLCVyMTAKKwl4b3JxCSVyMTEsJXIxMQogCXBvcGZxCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04CiAJLypDRklfUkVTVE9SRSByZmxhZ3MqLwpAQCAtMjAwLDkgKzIwNCw5IEBACiAJbW92bCBSREktQVJHT0ZGU0VUKCVyc3ApLCVyOGQJLyogcmVsb2FkIDV0aCBzeXNjYWxsIGFyZyAqLwogCS5lbmRtCiAKLQkubWFjcm8gYXVkaXRzeXNfZXhpdCBleGl0LGVicHNhdmU9UkJQCisJLm1hY3JvIGF1ZGl0c3lzX2V4aXQgZXhpdAogCXRlc3RsICQoX1RJRl9BTExXT1JLX01BU0sgJiB+X1RJRl9TWVNDQUxMX0FVRElUKSxUSV9mbGFncyglcjEwKQotCWpueiBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKKwlqbnogaWEzMl9yZXRfZnJvbV9zeXNfY2FsbAogCVRSQUNFX0lSUVNfT04KIAlzdGkKIAltb3ZsICVlYXgsJWVzaQkJLyogc2Vjb25kIGFyZywgc3lzY2FsbCByZXR1cm4gdmFsdWUgKi8KQEAgLTIxMywxMyArMjE3LDEzIEBACiAJY2FsbCBhdWRpdF9zeXNjYWxsX2V4aXQKIAlHRVRfVEhSRUFEX0lORk8oJXIxMCkKIAltb3ZsIFJBWC1BUkdPRkZTRVQoJXJzcCksJWVheAkvKiByZWxvYWQgc3lzY2FsbCByZXR1cm4gdmFsdWUgKi8KLQltb3ZsIFxlYnBzYXZlLUFSR09GRlNFVCglcnNwKSwlZWJwIC8qIHJlbG9hZCB1c2VyIHJlZ2lzdGVyIHZhbHVlICovCiAJbW92bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksJWVkaQogCWNsaQogCVRSQUNFX0lSUVNfT0ZGCiAJdGVzdGwgJWVkaSxUSV9mbGFncyglcjEwKQotCWpueiBpbnRfd2l0aF9jaGVjawotCWptcCBcZXhpdAorCWp6IFxleGl0CisJQ0xFQVJfUlJFR1MgLUFSR09GRlNFVAorCWptcCBpbnRfd2l0aF9jaGVjawogCS5lbmRtCiAKIHN5c2VudGVyX2F1ZGl0c3lzOgpAQCAtMzI5LDYgKzMzMyw5IEBACiAJQ0ZJX1JFR0lTVEVSIHJpcCxyY3gKIAltb3ZsIEVGTEFHUy1BUkdPRkZTRVQoJXJzcCksJXIxMWQJCiAJLypDRklfUkVHSVNURVIgcmZsYWdzLHIxMSovCisJeG9ycQklcjEwLCVyMTAKKwl4b3JxCSVyOSwlcjkKKwl4b3JxCSVyOCwlcjgKIAlUUkFDRV9JUlFTX09OCiAJbW92bCBSU1AtQVJHT0ZGU0VUKCVyc3ApLCVlc3AKIAlDRklfUkVTVE9SRSByc3AKQEAgLTM0Myw3ICszNTAsNyBAQAogCWptcCBjc3Rhcl9kaXNwYXRjaAogCiBzeXNyZXRsX2F1ZGl0OgotCWF1ZGl0c3lzX2V4aXQgc3lzcmV0bF9mcm9tX3N5c19jYWxsLCBSQ1ggLyogdXNlciAlZWJwIGluIFJDWCBzbG90ICovCisJYXVkaXRzeXNfZXhpdCBzeXNyZXRsX2Zyb21fc3lzX2NhbGwKICNlbmRpZgogCiBjc3Rhcl90cmFjZXN5czoKQEAgLTM1Myw3ICszNjAsNyBAQAogI2VuZGlmCiAJeGNoZ2wgJXI5ZCwlZWJwCiAJU0FWRV9SRVNUCi0JQ0xFQVJfUlJFR1MgcjkKKwlDTEVBUl9SUkVHUyAwLCByOQogCW1vdnEgJC1FTk9TWVMsUkFYKCVyc3ApCS8qIHB0cmFjZSBjYW4gY2hhbmdlIHRoaXMgZm9yIGEgYmFkIHN5c2NhbGwgKi8KIAltb3ZxICVyc3AsJXJkaSAgICAgICAgLyogJnB0X3JlZ3MgLT4gYXJnMSAqLwogCWNhbGwgc3lzY2FsbF90cmFjZV9lbnRlcgpAQCAtNDI1LDYgKzQzMiw4IEBACiAJY2FsbCAqaWEzMl9zeXNfY2FsbF90YWJsZSgsJXJheCw4KSAjIHh4eDogcmlwIHJlbGF0aXZlCiBpYTMyX3N5c3JldDoKIAltb3ZxICVyYXgsUkFYLUFSR09GRlNFVCglcnNwKQoraWEzMl9yZXRfZnJvbV9zeXNfY2FsbDoKKwlDTEVBUl9SUkVHUyAtQVJHT0ZGU0VUCiAJam1wIGludF9yZXRfZnJvbV9zeXNfY2FsbCAKIAogaWEzMl90cmFjZXN5czoJCQkgCkBAIC00NDIsOCArNDUxLDggQEAKIAogaWEzMl9iYWRzeXM6CiAJbW92cSAkMCxPUklHX1JBWC1BUkdPRkZTRVQoJXJzcCkKLQltb3ZxICQtRU5PU1lTLFJBWC1BUkdPRkZTRVQoJXJzcCkKLQlqbXAgaW50X3JldF9mcm9tX3N5c19jYWxsCisJbW92cSAkLUVOT1NZUywlcmF4CisJam1wIGlhMzJfc3lzcmV0CiAKIHF1aWV0X25pX3N5c2NhbGw6CiAJbW92cSAkLUVOT1NZUywlcmF4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCmluZGV4IGFjOTU5OTUuLjRiMTgwODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdS5oCkBAIC0zMSw2ICszMSw3IEBACiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RvbWFpbnModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfc2h1dGRvd24odm9pZCk7CitleHRlcm4gdm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGFtZF9pb21tdV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhbWRfaW9tbXVfZGV0ZWN0KHZvaWQpIHsgfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NoZWNrc3VtXzMyLmgKaW5kZXggN2M1ZWY4Yi4uNDZmYzQ3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY2hlY2tzdW1fMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jaGVja3N1bV8zMi5oCkBAIC0xNjEsNyArMTYxLDggQEAKIAkgICAgImFkY2wgJDAsICUwCTtcbiIKIAkgICAgOiAiPSZyIiAoc3VtKQogCSAgICA6ICJyIiAoc2FkZHIpLCAiciIgKGRhZGRyKSwKLQkgICAgICAiciIgKGh0b25sKGxlbikpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKSk7CisJICAgICAgInIiIChodG9ubChsZW4pKSwgInIiIChodG9ubChwcm90bykpLCAiMCIgKHN1bSkKKwkgICAgOiAibWVtb3J5Iik7CiAKIAlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jbXB4Y2hnXzMyLmgKaW5kZXggODJjZWI3OC4uZWUxOTMxYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY21weGNoZ18zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NtcHhjaGdfMzIuaApAQCAtMzEyLDE5ICszMTIsMjMgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBjbXB4Y2hnXzQ4Nl91NjQodm9sYXRpbGUgdm9pZCAqLCB1NjQsIHU2NCk7CiAKLSNkZWZpbmUgY21weGNoZzY0KHB0ciwgbywgbikJCQkJCQlcCi0oewkJCQkJCQkJCVwKLQlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCi0JaWYgKGxpa2VseShib290X2NwdV9kYXRhLng4NiA+IDQpKQkJCQlcCi0JCV9fcmV0ID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2NtcHhjaGc2NCgocHRyKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShvKSwJCVwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShuKSk7CQlcCi0JZWxzZQkJCQkJCQkJXAotCQlfX3JldCA9IChfX3R5cGVvZl9fKCoocHRyKSkpY21weGNoZ180ODZfdTY0KChwdHIpLAlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobyksCQlcCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobikpOwkJXAotCV9fcmV0OwkJCQkJCQkJXAotfSkKKyNkZWZpbmUgY21weGNoZzY0KHB0ciwgbywgbikJCQkJCVwKKyh7CQkJCQkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OwkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fb2xkID0gKG8pOwkJCQlcCisJX190eXBlb2ZfXygqKHB0cikpIF9fbmV3ID0gKG4pOwkJCQlcCisJYWx0ZXJuYXRpdmVfaW8oImNhbGwgY21weGNoZzhiX2VtdSIsCQkJXAorCQkJImxvY2s7IGNtcHhjaGc4YiAoJSVlc2kpIiAsCQlcCisJCSAgICAgICBYODZfRkVBVFVSRV9DWDgsCQkJCVwKKwkJICAgICAgICI9QSIgKF9fcmV0KSwJCQkJXAorCQkgICAgICAgIlMiICgocHRyKSksICIwIiAoX19vbGQpLAkJXAorCQkgICAgICAgImIiICgodW5zaWduZWQgaW50KV9fbmV3KSwJCVwKKwkJICAgICAgICJjIiAoKHVuc2lnbmVkIGludCkoX19uZXc+PjMyKSkJCVwKKwkJICAgICAgIDogIm1lbW9yeSIpOwkJCQlcCisJX19yZXQ7IH0pCisKKworCiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQlcCiAoewkJCQkJCQkJCVwKIAlfX3R5cGVvZl9fKCoocHRyKSkgX19yZXQ7CQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKaW5kZXggZThkZTJmNi4uNjE3YmQ1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaApAQCAtMjg4LDcgKzI4OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZGVzY19iYXNlKGNvbnN0IHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzYykKIHsKLQlyZXR1cm4gZGVzYy0+YmFzZTAgfCAoKGRlc2MtPmJhc2UxKSA8PCAxNikgfCAoKGRlc2MtPmJhc2UyKSA8PCAyNCk7CisJcmV0dXJuICh1bnNpZ25lZCkoZGVzYy0+YmFzZTAgfCAoKGRlc2MtPmJhc2UxKSA8PCAxNikgfCAoKGRlc2MtPmJhc2UyKSA8PCAyNCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2Rlc2NfYmFzZShzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRlc2MsIHVuc2lnbmVkIGxvbmcgYmFzZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDBlZTc3MGQuLjZhMjVkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTQsNiArMTQsMTIgQEAKICNpbmNsdWRlIDxhc20vc3dpb3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1jb2hlcmVudC5oPgogCisjaWZkZWYgQ09ORklHX0lTQQorIyBkZWZpbmUgSVNBX0RNQV9CSVRfTUFTSyBETUFfQklUX01BU0soMjQpCisjZWxzZQorIyBkZWZpbmUgSVNBX0RNQV9CSVRfTUFTSyBETUFfQklUX01BU0soMzIpCisjZW5kaWYKKwogZXh0ZXJuIGRtYV9hZGRyX3QgYmFkX2RtYV9hZGRyZXNzOwogZXh0ZXJuIGludCBpb21tdV9tZXJnZTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlIHg4Nl9kbWFfZmFsbGJhY2tfZGV2OwpAQCAtMTI0LDEwICsxMzAsOCBAQAogCWlmIChkbWFfYWxsb2NfZnJvbV9jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsICZtZW1vcnkpKQogCQlyZXR1cm4gbWVtb3J5OwogCi0JaWYgKCFkZXYpIHsKKwlpZiAoIWRldikKIAkJZGV2ID0gJng4Nl9kbWFfZmFsbGJhY2tfZGV2OwotCQlnZnAgfD0gR0ZQX0RNQTsKLQl9CiAKIAlpZiAoIWlzX2RldmljZV9kbWFfY2FwYWJsZShkZXYpKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDNiZTAwMDQuLmQ4Mzg5MjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNzk2LDYgKzc5Niw3IEBACiAjZGVmaW5lIEtWTV9BUkNIX1dBTlRfTU1VX05PVElGSUVSCiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKIGludCBrdm1fYWdlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKTsKK3ZvaWQga3ZtX3NldF9zcHRlX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhLCBwdGVfdCBwdGUpOwogaW50IGNwdWlkX21heHBoeWFkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fY3B1X2hhc19pbnRlcnJ1cHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBrdm1fYXJjaF9pbnRlcnJ1cHRfYWxsb3dlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAppbmRleCBiNjA4YTY0Li5mMTM2M2I3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaApAQCAtMTMzLDYgKzEzMyw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3A1X21jZSh2b2lkKSB7fQogI2VuZGlmCiAKK2V4dGVybiB2b2lkICgqeDg2X21jZV9kZWNvZGVfY2FsbGJhY2spKHN0cnVjdCBtY2UgKm0pOworCiB2b2lkIG1jZV9zZXR1cChzdHJ1Y3QgbWNlICptKTsKIHZvaWQgbWNlX2xvZyhzdHJ1Y3QgbWNlICptKTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgc3lzX2RldmljZSwgbWNlX2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCA4YWViY2M0Li5lZmIzODk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTg0MCw0MiArODQwLDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Jhd19sb2NhbF9zYXZlX2ZsYWdzKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmOwotCi0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDogIj1hIihmKQotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLnNhdmVfZmwpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gZjsKKwlyZXR1cm4gUFZPUF9DQUxMRUUwKHVuc2lnbmVkIGxvbmcsIHB2X2lycV9vcHMuc2F2ZV9mbCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmKQogewotCWFzbSB2b2xhdGlsZShwYXJhdmlydF9hbHQoUEFSQVZJUlRfQ0FMTCkKLQkJICAgICA6ICI9YSIoZikKLQkJICAgICA6IFBWX0ZMQUdTX0FSRyhmKSwKLQkJICAgICAgIHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5yZXN0b3JlX2ZsKSwKLQkJICAgICAgIHBhcmF2aXJ0X2Nsb2JiZXIoQ0xCUl9FQVgpCi0JCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisJUFZPUF9WQ0FMTEVFMShwdl9pcnFfb3BzLnJlc3RvcmVfZmwsIGYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9kaXNhYmxlKHZvaWQpCiB7Ci0JYXNtIHZvbGF0aWxlKHBhcmF2aXJ0X2FsdChQQVJBVklSVF9DQUxMKQotCQkgICAgIDoKLQkJICAgICA6IHBhcmF2aXJ0X3R5cGUocHZfaXJxX29wcy5pcnFfZGlzYWJsZSksCi0JCSAgICAgICBwYXJhdmlydF9jbG9iYmVyKENMQlJfRUFYKQotCQkgICAgIDogIm1lbW9yeSIsICJlYXgiLCAiY2MiKTsKKwlQVk9QX1ZDQUxMRUUwKHB2X2lycV9vcHMuaXJxX2Rpc2FibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmF3X2xvY2FsX2lycV9lbmFibGUodm9pZCkKIHsKLQlhc20gdm9sYXRpbGUocGFyYXZpcnRfYWx0KFBBUkFWSVJUX0NBTEwpCi0JCSAgICAgOgotCQkgICAgIDogcGFyYXZpcnRfdHlwZShwdl9pcnFfb3BzLmlycV9lbmFibGUpLAotCQkgICAgICAgcGFyYXZpcnRfY2xvYmJlcihDTEJSX0VBWCkKLQkJICAgICA6ICJtZW1vcnkiLCAiZWF4IiwgImNjIik7CisJUFZPUF9WQ0FMTEVFMChwdl9pcnFfb3BzLmlycV9lbmFibGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19yYXdfbG9jYWxfaXJxX3NhdmUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCmluZGV4IGRkMGY1YjMuLjkzNTc0NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaApAQCAtNDk0LDEwICs0OTQsMTEgQEAKICNkZWZpbmUgRVhUUkFfQ0xPQkJFUlMKICNkZWZpbmUgVkVYVFJBX0NMT0JCRVJTCiAjZWxzZSAgLyogQ09ORklHX1g4Nl82NCAqLworLyogW3JlXWF4IGlzbid0IGFuIGFyZywgYnV0IHRoZSByZXR1cm4gdmFsICovCiAjZGVmaW5lIFBWT1BfVkNBTExfQVJHUwkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19lZGkgPSBfX2VkaSwgX19lc2kgPSBfX2VzaSwJXAotCQlfX2VkeCA9IF9fZWR4LCBfX2VjeCA9IF9fZWN4Ci0jZGVmaW5lIFBWT1BfQ0FMTF9BUkdTCQlQVk9QX1ZDQUxMX0FSR1MsIF9fZWF4CisJCV9fZWR4ID0gX19lZHgsIF9fZWN4ID0gX19lY3gsIF9fZWF4ID0gX19lYXgKKyNkZWZpbmUgUFZPUF9DQUxMX0FSR1MJCVBWT1BfVkNBTExfQVJHUwogCiAjZGVmaW5lIFBWT1BfQ0FMTF9BUkcxKHgpCQkiRCIgKCh1bnNpZ25lZCBsb25nKSh4KSkKICNkZWZpbmUgUFZPUF9DQUxMX0FSRzIoeCkJCSJTIiAoKHVuc2lnbmVkIGxvbmcpKHgpKQpAQCAtNTA5LDYgKzUxMCw3IEBACiAJCQkJIj1jIiAoX19lY3gpCiAjZGVmaW5lIFBWT1BfQ0FMTF9DTE9CQkVSUwlQVk9QX1ZDQUxMX0NMT0JCRVJTLCAiPWEiIChfX2VheCkKIAorLyogdm9pZCBmdW5jdGlvbnMgYXJlIHN0aWxsIGFsbG93ZWQgW3JlXWF4IGZvciBzY3JhdGNoICovCiAjZGVmaW5lIFBWT1BfVkNBTExFRV9DTE9CQkVSUwkiPWEiIChfX2VheCkKICNkZWZpbmUgUFZPUF9DQUxMRUVfQ0xPQkJFUlMJUFZPUF9WQ0FMTEVFX0NMT0JCRVJTCiAKQEAgLTU4Myw4ICs1ODUsOCBAQAogCQkgICAgICAgVkVYVFJBX0NMT0JCRVJTLAkJCQkJXAogCQkgICAgICAgcHJlLCBwb3N0LCAjI19fVkFfQVJHU19fKQogCi0jZGVmaW5lIF9fUFZPUF9WQ0FMTEVFU0FWRShyZXR0eXBlLCBvcCwgcHJlLCBwb3N0LCAuLi4pCQkJXAotCV9fX19QVk9QX0NBTEwocmV0dHlwZSwgb3AuZnVuYywgQ0xCUl9SRVRfUkVHLAkJCVwKKyNkZWZpbmUgX19QVk9QX1ZDQUxMRUVTQVZFKG9wLCBwcmUsIHBvc3QsIC4uLikJCQkJXAorCV9fX19QVk9QX1ZDQUxMKG9wLmZ1bmMsIENMQlJfUkVUX1JFRywJCQkJXAogCQkgICAgICBQVk9QX1ZDQUxMRUVfQ0xPQkJFUlMsICwJCQkJXAogCQkgICAgICBwcmUsIHBvc3QsICMjX19WQV9BUkdTX18pCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCA3YjQ2N2JmLi5kMWY0YTc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yNzcsNiArMjc3LDcgQEAKIHR5cGVkZWYgc3RydWN0IHBhZ2UgKnBndGFibGVfdDsKIAogZXh0ZXJuIHB0ZXZhbF90IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworZXh0ZXJuIHZvaWQgc2V0X254KHZvaWQpOwogZXh0ZXJuIGludCBueF9lbmFibGVkOwogCiAjZGVmaW5lIHBncHJvdF93cml0ZWNvbWJpbmUJcGdwcm90X3dyaXRlY29tYmluZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBjMzQyOWU4Li5jOTc4NjQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtMTAwMCw3ICsxMDAwLDcgQEAKICNkZWZpbmUgdGhyZWFkX3NhdmVkX3BjKHQpCSgqKHVuc2lnbmVkIGxvbmcgKikoKHQpLT50aHJlYWQuc3AgLSA4KSkKIAogI2RlZmluZSB0YXNrX3B0X3JlZ3ModHNrKQkoKHN0cnVjdCBwdF9yZWdzICopKHRzayktPnRocmVhZC5zcDAgLSAxKQotI2RlZmluZSBLU1RLX0VTUCh0c2spCQktMSAvKiBzb3JyeS4gZG9lc24ndCB3b3JrIGZvciBzeXNjYWxsLiAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgS1NUS19FU1Aoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKIGV4dGVybiB2b2lkIHN0YXJ0X3RocmVhZChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBuZXdfaXAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCA2ZjA2OTVkLi40MGUzN2IxMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0xNDMsNiArMTQzLDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9QT1dFUlNBVklOR1NfQkFMQU5DRQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCkBAIC0xNjUsMjEgKzE2NiwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBlYXJseV9jcHVfdG9fbm9kZShpbnQgY3B1KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCAwNGViNmM5Li5kMTQxNGFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgorI2luY2x1ZGUgPGFzbS9pcnFfdmVjdG9ycy5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAKIAogLyoKQEAgLTExNCw3ICsxMTYsNyBAQAogLyoKICAqIFRoZSBsYXJnZXN0IHBvc3NpYmxlIE5BU0lEIG9mIGEgQyBvciBNIGJyaWNrICgrIDIpCiAgKi8KLSNkZWZpbmUgVVZfTUFYX05BU0lEX1ZBTFVFCShVVl9NQVhfTlVNQUxJTktfTk9ERVMgKiAyKQorI2RlZmluZSBVVl9NQVhfTkFTSURfVkFMVUUJKFVWX01BWF9OVU1BTElOS19CTEFERVMgKiAyKQogCiBzdHJ1Y3QgdXZfc2Npcl9zIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKQEAgLTIzMCw2ICsyMzIsMjAgQEAKIAlyZXR1cm4gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShfX3BhKHYpKTsKIH0KIAorLyogZ25vZGUgLT4gcG5vZGUgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dl9ncGFfdG9fZ25vZGUodW5zaWduZWQgbG9uZyBncGEpCit7CisJcmV0dXJuIGdwYSA+PiB1dl9odWJfaW5mby0+bV92YWw7Cit9CisKKy8qIGdwYSAtPiBwbm9kZSAqLworc3RhdGljIGlubGluZSBpbnQgdXZfZ3BhX3RvX3Bub2RlKHVuc2lnbmVkIGxvbmcgZ3BhKQoreworCXVuc2lnbmVkIGxvbmcgbl9tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKworCXJldHVybiB1dl9ncGFfdG9fZ25vZGUoZ3BhKSAmIG5fbWFzazsKK30KKwogLyogcG5vZGUsIG9mZnNldCAtLT4gc29ja2V0IHZpcnR1YWwgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqdXZfcG5vZGVfb2Zmc2V0X3RvX3ZhZGRyKGludCBwbm9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CkBAIC00MjEsOSArNDM3LDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdXZfaHViX3NlbmRfaXBpKGludCBwbm9kZSwgaW50IGFwaWNpZCwgaW50IHZlY3RvcikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIGRtb2RlID0gZGVzdF9GaXhlZDsKKworCWlmICh2ZWN0b3IgPT0gTk1JX1ZFQ1RPUikKKwkJZG1vZGUgPSBkZXN0X05NSTsKIAogCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CiAJCQkoKGFwaWNpZCkgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8CisJCQkoZG1vZGUgPDwgVVZIX0lQSV9JTlRfREVMSVZFUllfTU9ERV9TSEZUKSB8CiAJCQkodmVjdG9yIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwppbmRleCA4YzQ0YzIzLi41OWNkZmE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwpAQCAtNDgsNyArNDgsNyBAQAogCSAqIFA0LCBDb3JlIGFuZCBiZXlvbmQgQ1BVcwogCSAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgKGMtPng4NiA+IDB4NiB8fCAoYy0+eDg2ID09IDYgJiYgYy0+eDg2X21vZGVsID49IDE0KSkpCisJICAgIChjLT54ODYgPiAweGYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAxNCkpKQogCQkJZmxhZ3MtPmJtX2NvbnRyb2wgPSAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3JlYWxtb2RlL3dha2V1cC5sZHMuUwppbmRleCA3ZGEwMGI3Li4wNjBmZmY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9yZWFsbW9kZS93YWtldXAubGRzLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvcmVhbG1vZGUvd2FrZXVwLmxkcy5TCkBAIC01Nyw1ICs1Nyw4IEBACiAJCSooLm5vdGUqKQogCX0KIAorCS8qCisJICogVGhlIEFTU0VSVCgpIHNpbmsgdG8gLiBpcyBpbnRlbnRpb25hbCwgZm9yIGJpbnV0aWxzIDIuMTQgY29tcGF0aWJpbGl0eToKKwkgKi8KIAkuID0gQVNTRVJUKF9lbmQgPD0gV0FLRVVQX1NJWkUsICJXYWtldXAgdG9vIGJpZyEiKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCA5OGYyMzBmLi4wMjg1NTIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xMjIwLDYgKzEyMjAsOCBAQAogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMV0gPSAwOwogCWFtZF9pb21tdV9kZXZfdGFibGVbZGV2aWRdLmRhdGFbMl0gPSAwOwogCisJYW1kX2lvbW11X2FwcGx5X2VycmF0dW1fNjMoZGV2aWQpOworCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXIgKi8KIAlkb21haW4tPmRldl9jbnQgLT0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwppbmRleCBiNGI2MWQ0Li5jMjAwMDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJd3JpdGVsKGN0cmwsIGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NPTlRST0xfT0ZGU0VUKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGlvbW11X2ZlYXR1cmVfZGlzYWJsZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTggYml0KQorc3RhdGljIHZvaWQgaW9tbXVfZmVhdHVyZV9kaXNhYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11LCB1OCBiaXQpCiB7CiAJdTMyIGN0cmw7CiAKQEAgLTUxOSw2ICs1MTksMjYgQEAKIAlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldIHw9ICgxIDw8IF9iaXQpOwogfQogCitzdGF0aWMgaW50IGdldF9kZXZfZW50cnlfYml0KHUxNiBkZXZpZCwgdTggYml0KQoreworCWludCBpID0gKGJpdCA+PiA1KSAmIDB4MDc7CisJaW50IF9iaXQgPSBiaXQgJiAweDFmOworCisJcmV0dXJuIChhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhW2ldICYgKDEgPDwgX2JpdCkpID4+IF9iaXQ7Cit9CisKKwordm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpCit7CisJaW50IHN5c21ndDsKKworCXN5c21ndCA9IGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMSkgfAorCQkgKGdldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfU1lTTUdUMikgPDwgMSk7CisKKwlpZiAoc3lzbWd0ID09IDB4MDEpCisJCXNldF9kZXZfZW50cnlfYml0KGRldmlkLCBERVZfRU5UUllfSVcpOworfQorCiAvKiBXcml0ZXMgdGhlIHNwZWNpZmljIElPTU1VIGZvciBhIGRldmljZSBpbnRvIHRoZSBybG9va3VwIHRhYmxlICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2lvbW11X2Zvcl9kZXZpY2Uoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHUxNiBkZXZpZCkKIHsKQEAgLTU0Nyw2ICs1NjcsOCBAQAogCWlmIChmbGFncyAmIEFDUElfREVWRkxBR19MSU5UMSkKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9MSU5UMV9QQVNTKTsKIAorCWFtZF9pb21tdV9hcHBseV9lcnJhdHVtXzYzKGRldmlkKTsKKwogCXNldF9pb21tdV9mb3JfZGV2aWNlKGlvbW11LCBkZXZpZCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IGY1ZjU4ODYuLjMyNmMyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMzUyLDE0ICszNTIsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZGlyX2FkZHJzKTsgaSsrKSB7CiAJCWFsaWFzLnYgPSB1dl9yZWFkX2xvY2FsX21tcihyZWRpcl9hZGRyc1tpXS5hbGlhcyk7Ci0JCWlmIChhbGlhcy5zLmJhc2UgPT0gMCkgeworCQlpZiAoYWxpYXMucy5lbmFibGUgJiYgYWxpYXMucy5iYXNlID09IDApIHsKIAkJCSpzaXplID0gKDFVTCA8PCBhbGlhcy5zLm1fYWxpYXMpOwogCQkJcmVkaXJlY3QudiA9IHV2X3JlYWRfbG9jYWxfbW1yKHJlZGlyX2FkZHJzW2ldLnJlZGlyZWN0KTsKIAkJCSpiYXNlID0gKHVuc2lnbmVkIGxvbmcpcmVkaXJlY3Qucy5kZXN0X2Jhc2UgPDwgREVTVF9TSElGVDsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlCVUcoKTsKKwkqYmFzZSA9ICpzaXplID0gMDsKIH0KIAogZW51bSBtYXBfdHlwZSB7bWFwX3diLCBtYXBfdWN9OwpAQCAtNjE5LDEyICs2MTksMTIgQEAKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmxvd21lbV9yZW1hcF9iYXNlID0gbG93bWVtX3JlZGlyX2Jhc2U7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5sb3dtZW1fcmVtYXBfdG9wID0gbG93bWVtX3JlZGlyX3NpemU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5tX3ZhbCA9IG1fdmFsOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+bl92YWwgPSBtX3ZhbDsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm5fdmFsID0gbl92YWw7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5udW1hX2JsYWRlX2lkID0gYmxhZGU7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5ibGFkZV9wcm9jZXNzb3JfaWQgPSBsY3B1OwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+cG5vZGUgPSBwbm9kZTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPnBub2RlX21hc2sgPSBwbm9kZV9tYXNrOwotCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z3BhX21hc2sgPSAoMSA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKKwkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdwYV9tYXNrID0gKDFVTCA8PCAobV92YWwgKyBuX3ZhbCkpIC0gMTsKIAkJdXZfY3B1X2h1Yl9pbmZvKGNwdSktPmdub2RlX3VwcGVyID0gZ25vZGVfdXBwZXI7CiAJCXV2X2NwdV9odWJfaW5mbyhjcHUpLT5nbm9kZV9leHRyYSA9IGdub2RlX2V4dHJhOwogCQl1dl9jcHVfaHViX2luZm8oY3B1KS0+Z2xvYmFsX21tcl9iYXNlID0gbW1yX2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggN2Q1YzNiMC4uOGI1ODFkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtNTI2LDE1ICs1MjYsMjEgQEAKIAogc3RhdGljIGludCBhY3BpX2NwdWZyZXFfYmxhY2tsaXN0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQkvKiBodHRwOi8vd3d3LmludGVsLmNvbS9Bc3NldHMvUERGL3NwZWN1cGRhdGUvMzE0NTU0LnBkZgorCS8qIEludGVsIFhlb24gUHJvY2Vzc29yIDcxMDAgU2VyaWVzIFNwZWNpZmljYXRpb24gVXBkYXRlCisJICogaHR0cDovL3d3dy5pbnRlbC5jb20vQXNzZXRzL1BERi9zcGVjdXBkYXRlLzMxNDU1NC5wZGYKIAkgKiBBTDMwOiBBIE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uIChNQ0UpIE9jY3VycmluZyBkdXJpbmcgYW4KIAkgKiBFbmhhbmNlZCBJbnRlbCBTcGVlZFN0ZXAgVGVjaG5vbG9neSBSYXRpbyBDaGFuZ2UgTWF5IENhdXNlCi0JICogQm90aCBQcm9jZXNzb3IgQ29yZXMgdG8gTG9jayBVcCB3aGVuIEhUIGlzIGVuYWJsZWQqLworCSAqIEJvdGggUHJvY2Vzc29yIENvcmVzIHRvIExvY2sgVXAuICovCiAJaWYgKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkgewogCQlpZiAoKGMtPng4NiA9PSAxNSkgJiYKIAkJICAgIChjLT54ODZfbW9kZWwgPT0gNikgJiYKLQkJICAgIChjLT54ODZfbWFzayA9PSA4KSAmJiBzbXRfY2FwYWJsZSgpKQorCQkgICAgKGMtPng4Nl9tYXNrID09IDgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJhY3BpLWNwdWZyZXE6IEludGVsKFIpICIKKwkJCSAgICAiWGVvbihSKSA3MTAwIEVycmF0YSBBTDMwLCBwcm9jZXNzb3JzIG1heSAiCisJCQkgICAgImxvY2sgdXAgb24gZnJlcXVlbmN5IGNoYW5nZXM6IGRpc2FibGluZyAiCisJCQkgICAgImFjcGktY3B1ZnJlcS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CisJCSAgICB9CiAJCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTU0OSwxMyArNTU1LDE4IEBACiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0YXRpYyBpbnQgYmxhY2tsaXN0ZWQ7CisjZW5kaWYKIAogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9jcHVfaW5pdFxuIik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JcmVzdWx0ID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKLQlpZiAocmVzdWx0KQotCQlyZXR1cm4gcmVzdWx0OworCWlmIChibGFja2xpc3RlZCkKKwkJcmV0dXJuIGJsYWNrbGlzdGVkOworCWJsYWNrbGlzdGVkID0gYWNwaV9jcHVmcmVxX2JsYWNrbGlzdChjKTsKKwlpZiAoYmxhY2tsaXN0ZWQpCisJCXJldHVybiBibGFja2xpc3RlZDsKICNlbmRpZgogCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBjZTJlZDNlLi5jYWJkMmZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAJCQltZW1jcHkoZWJsY3IsIHNhbXVlbDJfZWJsY3IsIHNpemVvZihzYW11ZWwyX2VibGNyKSk7CiAJCQlicmVhazsKIAkJY2FzZSAxIC4uLiAxNToKLQkJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX0xPTkdIQVVMX1YxOworCQkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfTE9OR0hBVUxfVjI7CiAJCQlpZiAoYy0+eDg2X21hc2sgPCA4KSB7CiAJCQkJY3B1X21vZGVsID0gQ1BVX1NBTVVFTDI7CiAJCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggNjM5NGFhNS4uM2YxMmRhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEwMjIsNyArMTAyMiw3IEBACiAJCSAqIHNldCBpdCB0byAxIHRvIGF2b2lkIHByb2JsZW1zIGluIHRoZSBmdXR1cmUuCiAJCSAqIEZvciBhbGwgb3RoZXJzIGl0J3MgYSBCSU9TIGJ1Zy4KIAkJICovCi0JCWlmICghYm9vdF9jcHVfZGF0YS54ODYgPT0gMHgxMSkKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ICE9IDB4MTEpCiAJCQlwcmludGsoS0VSTl9FUlIgRldfV0FSTiBQRlggIkludmFsaWQgemVybyB0cmFuc2l0aW9uICIKIAkJCQkibGF0ZW5jeVxuIik7CiAJCW1heF9sYXRlbmN5ID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IDY5MTFlOTEuLjNhZTVhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMjMyLDI4ICsyMzIsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGdldF9mcmVxX2RhdGEgewotCXVuc2lnbmVkIGludCBzcGVlZDsKLQl1bnNpZ25lZCBpbnQgcHJvY2Vzc29yOwotfTsKLQotc3RhdGljIHZvaWQgZ2V0X2ZyZXFfZGF0YSh2b2lkICpfZGF0YSkKK3N0YXRpYyB2b2lkIGdldF9mcmVxX2RhdGEodm9pZCAqX3NwZWVkKQogewotCXN0cnVjdCBnZXRfZnJlcV9kYXRhICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50ICpzcGVlZCA9IF9zcGVlZDsKIAotCWRhdGEtPnNwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koZGF0YS0+cHJvY2Vzc29yKTsKKwkqc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0KHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGdldF9mcmVxX2RhdGEgZGF0YSA9IHsgLnByb2Nlc3NvciA9IGNwdSB9OworCXVuc2lnbmVkIGludCBzcGVlZDsKIAogCS8qIFlvdSdyZSBzdXBwb3NlZCB0byBlbnN1cmUgQ1BVIGlzIG9ubGluZS4gKi8KLQlpZiAoc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZ2V0X2ZyZXFfZGF0YSwgJmRhdGEsIDEpICE9IDApCisJaWYgKHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGdldF9mcmVxX2RhdGEsICZzcGVlZCwgMSkgIT0gMCkKIAkJQlVHKCk7CiAKLQlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIGRhdGEuc3BlZWQpOwotCXJldHVybiBkYXRhLnNwZWVkOworCWRwcmludGsoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgc3BlZWQpOworCXJldHVybiBzcGVlZDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UtaW5qZWN0LmMKaW5kZXggNzAyOWYwZS4uNDcyNzYzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLWluamVjdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS1pbmplY3QuYwpAQCAtOTgsOCArOTgsOSBAQAogfTsKIAogLyogSW5qZWN0IG1jZSBvbiBjdXJyZW50IENQVSAqLwotc3RhdGljIGludCByYWlzZV9sb2NhbChzdHJ1Y3QgbWNlICptKQorc3RhdGljIGludCByYWlzZV9sb2NhbCh2b2lkKQogeworCXN0cnVjdCBtY2UgKm0gPSAmX19nZXRfY3B1X3ZhcihpbmplY3RtKTsKIAlpbnQgY29udGV4dCA9IE1DSl9DVFgobS0+aW5qZWN0X2ZsYWdzKTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgY3B1ID0gbS0+ZXh0Y3B1OwpAQCAtMTY3LDEyICsxNjgsMTIgQEAKIAkJCX0KIAkJCWNwdV9yZWxheCgpOwogCQl9Ci0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogCQlwdXRfY3B1KCk7CiAJCXB1dF9vbmxpbmVfY3B1cygpOwogCX0gZWxzZQogI2VuZGlmCi0JCXJhaXNlX2xvY2FsKG0pOworCQlyYWlzZV9sb2NhbCgpOwogfQogCiAvKiBFcnJvciBpbmplY3Rpb24gaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IDJmNWFhYjIuLjcyMWE3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC04NSw2ICs4NSwxOCBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtY2UsIG1jZXNfc2Vlbik7CiBzdGF0aWMgaW50CQkJY3B1X21pc3Npbmc7CiAKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQoreworCXByX2VtZXJnKCJObyBodW1hbiByZWFkYWJsZSBNQ0UgZGVjb2Rpbmcgc3VwcG9ydCBvbiB0aGlzIENQVSB0eXBlLlxuIik7CisJcHJfZW1lcmcoIlJ1biB0aGUgbWVzc2FnZSB0aHJvdWdoICdtY2Vsb2cgLS1hc2NpaScgdG8gZGVjb2RlLlxuIik7Cit9CisKKy8qCisgKiBDUFUvY2hpcHNldCBzcGVjaWZpYyBFREFDIGNvZGUgY2FuIHJlZ2lzdGVyIGEgY2FsbGJhY2sgaGVyZSB0byBwcmludAorICogTUNFIGVycm9ycyBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm06CisgKi8KK3ZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSkgPSBkZWZhdWx0X2RlY29kZV9tY2U7CitFWFBPUlRfU1lNQk9MKHg4Nl9tY2VfZGVjb2RlX2NhbGxiYWNrKTsKIAogLyogTUNBIGJhbmtzIHBvbGxlZCBieSB0aGUgcGVyaW9kIHBvbGxpbmcgdGltZXIgZm9yIGNvcnJlY3RlZCBldmVudHMgKi8KIERFRklORV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcykgPSB7CkBAIC0xNjUsNDkgKzE3Nyw0NiBAQAogCXNldF9iaXQoMCwgJm1jZV9uZWVkX25vdGlmeSk7CiB9CiAKLXZvaWQgX193ZWFrIGRlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKLXsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB2b2lkIHByaW50X21jZShzdHJ1Y3QgbWNlICptKQogewotCXByaW50ayhLRVJOX0VNRVJHCi0JICAgICAgICJDUFUgJWQ6IE1hY2hpbmUgQ2hlY2sgRXhjZXB0aW9uOiAlMTZMeCBCYW5rICVkOiAlMDE2THhcbiIsCisJcHJfZW1lcmcoIkNQVSAlZDogTWFjaGluZSBDaGVjayBFeGNlcHRpb246ICUxNkx4IEJhbmsgJWQ6ICUwMTZMeFxuIiwKIAkgICAgICAgbS0+ZXh0Y3B1LCBtLT5tY2dzdGF0dXMsIG0tPmJhbmssIG0tPnN0YXR1cyk7CisKIAlpZiAobS0+aXApIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKLQkJICAgICAgICEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAotCQkgICAgICAgbS0+Y3MsIG0tPmlwKTsKKwkJcHJfZW1lcmcoIlJJUCVzICUwMng6PCUwMTZMeD4gIiwKKwkJCSEobS0+bWNnc3RhdHVzICYgTUNHX1NUQVRVU19FSVBWKSA/ICIgIUlORVhBQ1QhIiA6ICIiLAorCQkJCW0tPmNzLCBtLT5pcCk7CisKIAkJaWYgKG0tPmNzID09IF9fS0VSTkVMX0NTKQogCQkJcHJpbnRfc3ltYm9sKCJ7JXN9IiwgbS0+aXApOwotCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiVFNDICVsbHggIiwgbS0+dHNjKTsKLQlpZiAobS0+YWRkcikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiQUREUiAlbGx4ICIsIG0tPmFkZHIpOwotCWlmIChtLT5taXNjKQotCQlwcmludGsoS0VSTl9DT05UICJNSVNDICVsbHggIiwgbS0+bWlzYyk7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKLQkJCW0tPmNwdXZlbmRvciwgbS0+Y3B1aWQsIG0tPnRpbWUsIG0tPnNvY2tldGlkLAotCQkJbS0+YXBpY2lkKTsKIAotCWRlY29kZV9tY2UobSk7CisJcHJfZW1lcmcoIlRTQyAlbGx4ICIsIG0tPnRzYyk7CisJaWYgKG0tPmFkZHIpCisJCXByX2NvbnQoIkFERFIgJWxseCAiLCBtLT5hZGRyKTsKKwlpZiAobS0+bWlzYykKKwkJcHJfY29udCgiTUlTQyAlbGx4ICIsIG0tPm1pc2MpOworCisJcHJfY29udCgiXG4iKTsKKwlwcl9lbWVyZygiUFJPQ0VTU09SICV1OiV4IFRJTUUgJWxsdSBTT0NLRVQgJXUgQVBJQyAleFxuIiwKKwkJbS0+Y3B1dmVuZG9yLCBtLT5jcHVpZCwgbS0+dGltZSwgbS0+c29ja2V0aWQsIG0tPmFwaWNpZCk7CisKKwkvKgorCSAqIFByaW50IG91dCBodW1hbi1yZWFkYWJsZSBkZXRhaWxzIGFib3V0IHRoZSBNQ0UgZXJyb3IsCisJICogKGlmIHRoZSBDUFUgaGFzIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGF0KToKKwkgKi8KKwl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayhtKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbWNlX2hlYWQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5IQVJEV0FSRSBFUlJPUlxuIik7CisJcHJfZW1lcmcoIlxuSEFSRFdBUkUgRVJST1JcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9tY2VfdGFpbCh2b2lkKQogewotCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIGlzIG5vdCBhIHNvZnR3YXJlIHByb2JsZW0hXG4iCi0jaWYgKCFkZWZpbmVkKENPTkZJR19FREFDKSB8fCAhZGVmaW5lZChDT05GSUdfQ1BVX1NVUF9BTUQpKQotCSAgICAgICAiUnVuIHRocm91Z2ggbWNlbG9nIC0tYXNjaWkgdG8gZGVjb2RlIGFuZCBjb250YWN0IHlvdXIgaGFyZHdhcmUgdmVuZG9yXG4iCi0jZW5kaWYKLQkgICAgICAgKTsKKwlwcl9lbWVyZygiVGhpcyBpcyBub3QgYSBzb2Z0d2FyZSBwcm9ibGVtIVxuIik7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpAQCAtMjIxLDYgKzIzMCw3IEBACiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9wYW5pYyh2b2lkKQogewogCWxvbmcgdGltZW91dCA9IFBBTklDX1RJTUVPVVQqVVNFQ19QRVJfU0VDOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXdoaWxlICh0aW1lb3V0LS0gPiAwKQpAQCAtMjg4LDYgKzI5OCw3IEBACiBzdGF0aWMgaW50IG1zcl90b19vZmZzZXQodTMyIG1zcikKIHsKIAl1bnNpZ25lZCBiYW5rID0gX19nZXRfY3B1X3ZhcihpbmplY3RtLmJhbmspOworCiAJaWYgKG1zciA9PSByaXBfbXNyKQogCQlyZXR1cm4gb2Zmc2V0b2Yoc3RydWN0IG1jZSwgaXApOwogCWlmIChtc3IgPT0gTVNSX0lBMzJfTUN4X1NUQVRVUyhiYW5rKSkKQEAgLTMwNSwxMyArMzE2LDI1IEBACiBzdGF0aWMgdTY0IG1jZV9yZG1zcmwodTMyIG1zcikKIHsKIAl1NjQgdjsKKwogCWlmIChfX2dldF9jcHVfdmFyKGluamVjdG0pLmZpbmlzaGVkKSB7CiAJCWludCBvZmZzZXQgPSBtc3JfdG9fb2Zmc2V0KG1zcik7CisKIAkJaWYgKG9mZnNldCA8IDApCiAJCQlyZXR1cm4gMDsKIAkJcmV0dXJuICoodTY0ICopKChjaGFyICopJl9fZ2V0X2NwdV92YXIoaW5qZWN0bSkgKyBvZmZzZXQpOwogCX0KLQlyZG1zcmwobXNyLCB2KTsKKworCWlmIChyZG1zcmxfc2FmZShtc3IsICZ2KSkgeworCQlXQVJOX09OQ0UoMSwgIm1jZTogVW5hYmxlIHRvIHJlYWQgbXNyICVkIVxuIiwgbXNyKTsKKwkJLyoKKwkJICogUmV0dXJuIHplcm8gaW4gY2FzZSB0aGUgYWNjZXNzIGZhdWx0ZWQuIFRoaXMgc2hvdWxkCisJCSAqIG5vdCBoYXBwZW4gbm9ybWFsbHkgYnV0IGNhbiBoYXBwZW4gaWYgdGhlIENQVSBkb2VzCisJCSAqIHNvbWV0aGluZyB3ZWlyZCwgb3IgaWYgdGhlIGNvZGUgaXMgYnVnZ3kuCisJCSAqLworCQl2ID0gMDsKKwl9CisKIAlyZXR1cm4gdjsKIH0KIApAQCAtMzE5LDYgKzM0Miw3IEBACiB7CiAJaWYgKF9fZ2V0X2NwdV92YXIoaW5qZWN0bSkuZmluaXNoZWQpIHsKIAkJaW50IG9mZnNldCA9IG1zcl90b19vZmZzZXQobXNyKTsKKwogCQlpZiAob2Zmc2V0ID49IDApCiAJCQkqKHU2NCAqKSgoY2hhciAqKSZfX2dldF9jcHVfdmFyKGluamVjdG0pICsgb2Zmc2V0KSA9IHY7CiAJCXJldHVybjsKQEAgLTQxNSw3ICs0MzksNyBAQAogCQltLT5pcCA9IG1jZV9yZG1zcmwocmlwX21zcik7CiB9CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgCisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAvKgogICogQ2FsbGVkIGFmdGVyIGludGVycnVwdHMgaGF2ZSBiZWVuIHJlZW5hYmxlZCBhZ2FpbgogICogd2hlbiBhIE1DRSBoYXBwZW5lZCBkdXJpbmcgYW4gaW50ZXJydXB0cyBvZmYgcmVnaW9uCkBAIC0xMTcyLDYgKzExOTYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOworCiAJCWItPmN0bCA9IC0xVUxMOwogCQliLT5pbml0ID0gMTsKIAl9CkBAIC0xMTg5LDcgKzEyMTQsOCBAQAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwogCiAJYiA9IGNhcCAmIE1DR19CQU5LQ05UX01BU0s7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWNlOiBDUFUgc3VwcG9ydHMgJWQgTUNFIGJhbmtzXG4iLCBiKTsKKwlpZiAoIWJhbmtzKQorCQlwcmludGsoS0VSTl9JTkZPICJtY2U6IENQVSBzdXBwb3J0cyAlZCBNQ0UgYmFua3NcbiIsIGIpOwogCiAJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwpAQCAtMTIwMyw2ICsxMjI5LDcgQEAKIAliYW5rcyA9IGI7CiAJaWYgKCFtY2VfYmFua3MpIHsKIAkJaW50IGVyciA9IG1jZV9iYW5rc19pbml0KCk7CisKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMTIzNyw2ICsxMjY0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKCFiLT5pbml0KQogCQkJY29udGludWU7CiAJCXdybXNybChNU1JfSUEzMl9NQ3hfQ1RMKGkpLCBiLT5jdGwpOwpAQCAtMTYyNiw2ICsxNjU0LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkxMSw2ICsxOTQwLDcgQEAKIAkJY21jaV9jbGVhcigpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgMCk7CiAJfQpAQCAtMTkyOCw2ICsxOTU4LDcgQEAKIAkJY21jaV9yZWVuYWJsZSgpOwogCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CiAJCXN0cnVjdCBtY2VfYmFuayAqYiA9ICZtY2VfYmFua3NbaV07CisKIAkJaWYgKGItPmluaXQpCiAJCQl3cm1zcmwoTVNSX0lBMzJfTUN4X0NUTChpKSwgYi0+Y3RsKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCmluZGV4IDg4OWY2NjUuLjdjNzg1NjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbC5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDYzYTU2ZDEuLmIzYTFkYmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMzQsMjAgKzM0LDMxIEBACiAvKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gcmVwb3J0aW5nIHRoZXJtYWwgZXZlbnRzICovCiAjZGVmaW5lIENIRUNLX0lOVEVSVkFMCQkoMzAwICogSFopCiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShfX3U2NCwgbmV4dF9jaGVjaykgPSBJTklUSUFMX0pJRkZJRVM7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdGhlcm1hbF90aHJvdHRsZV9jb3VudCk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoYm9vbCwgdGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpOworLyoKKyAqIEN1cnJlbnQgdGhlcm1hbCB0aHJvdHRsaW5nIHN0YXRlOgorICovCitzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSB7CisJYm9vbAkJCWlzX3Rocm90dGxlZDsKIAotc3RhdGljIGF0b21pY190IHRoZXJtX3Rocm90X2VuCQk9IEFUT01JQ19JTklUKDApOworCXU2NAkJCW5leHRfY2hlY2s7CisJdW5zaWduZWQgbG9uZwkJdGhyb3R0bGVfY291bnQ7CisJdW5zaWduZWQgbG9uZwkJbGFzdF90aHJvdHRsZV9jb3VudDsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSwgdGhlcm1hbF9zdGF0ZSk7CisKK3N0YXRpYyBhdG9taWNfdCB0aGVybV90aHJvdF9lbgk9IEFUT01JQ19JTklUKDApOwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKF9uYW1lKQkJCQlcCiAJc3RhdGljIFNZU0RFVl9BVFRSKF9uYW1lLCAwNDQ0LCB0aGVybV90aHJvdF9zeXNkZXZfc2hvd18jI19uYW1lLCBOVUxMKQogCiAjZGVmaW5lIGRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKG5hbWUpCQkJXAotc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCVwKLQkJCQkJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCVwKLQkJCQkJICAgICAgY2hhciAqYnVmKQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHNzaXplX3QgdGhlcm1fdGhyb3Rfc3lzZGV2X3Nob3dfIyNuYW1lKAkJCQlcCisJCQlzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAkJCQlcCisJCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwJCQlcCisJCQljaGFyICpidWYpCQkJCQlcCiB7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGludCBjcHUgPSBkZXYtPmlkOwkJCQkJXAogCXNzaXplX3QgcmV0OwkJCQkJCQlcCkBAIC01NSw3ICs2Niw3IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CS8qIENQVSBob3RwbHVnICovCQkJXAogCWlmIChjcHVfb25saW5lKGNwdSkpCQkJCQkJXAogCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwJCQkJXAotCQkJICAgICAgcGVyX2NwdSh0aGVybWFsX3Rocm90dGxlXyMjbmFtZSwgY3B1KSk7CVwKKwkJCSAgICAgIHBlcl9jcHUodGhlcm1hbF9zdGF0ZSwgY3B1KS5uYW1lKTsJXAogCWVsc2UJCQkJCQkJCVwKIAkJcmV0ID0gMDsJCQkJCQlcCiAJcHJlZW1wdF9lbmFibGUoKTsJCQkJCQlcCkBAIC02MywxMSArNzQsMTEgQEAKIAlyZXR1cm4gcmV0OwkJCQkJCQlcCiB9CiAKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKGNvdW50KTsKLWRlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKGNvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfc2hvd19mdW5jKHRocm90dGxlX2NvdW50KTsKK2RlZmluZV90aGVybV90aHJvdF9zeXNkZXZfb25lX3JvKHRocm90dGxlX2NvdW50KTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRoZXJtYWxfdGhyb3R0bGVfYXR0cnNbXSA9IHsKLQkmYXR0cl9jb3VudC5hdHRyLAorCSZhdHRyX3Rocm90dGxlX2NvdW50LmF0dHIsCiAJTlVMTAogfTsKIApAQCAtOTMsMzMgKzEwNCwzOSBAQAogICogICAgICAgICAgMSA6IEV2ZW50IHNob3VsZCBiZSBsb2dnZWQgZnVydGhlciwgYW5kIGEgbWVzc2FnZSBoYXMgYmVlbgogICogICAgICAgICAgICAgIHByaW50ZWQgdG8gdGhlIHN5c2xvZy4KICAqLwotc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGludCBjdXJyKQorc3RhdGljIGludCB0aGVybV90aHJvdF9wcm9jZXNzKGJvb2wgaXNfdGhyb3R0bGVkKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JX191NjQgdG1wX2ppZmZzID0gZ2V0X2ppZmZpZXNfNjQoKTsKLQlib29sIHdhc190aHJvdHRsZWQgPSBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfYWN0aXZlKTsKLQlib29sIGlzX3Rocm90dGxlZCA9IF9fZ2V0X2NwdV92YXIodGhlcm1hbF90aHJvdHRsZV9hY3RpdmUpID0gY3VycjsKKwlzdHJ1Y3QgdGhlcm1hbF9zdGF0ZSAqc3RhdGU7CisJdW5zaWduZWQgaW50IHRoaXNfY3B1OworCWJvb2wgd2FzX3Rocm90dGxlZDsKKwl1NjQgbm93OworCisJdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbm93ID0gZ2V0X2ppZmZpZXNfNjQoKTsKKwlzdGF0ZSA9ICZwZXJfY3B1KHRoZXJtYWxfc3RhdGUsIHRoaXNfY3B1KTsKKworCXdhc190aHJvdHRsZWQgPSBzdGF0ZS0+aXNfdGhyb3R0bGVkOworCXN0YXRlLT5pc190aHJvdHRsZWQgPSBpc190aHJvdHRsZWQ7CiAKIAlpZiAoaXNfdGhyb3R0bGVkKQotCQlfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKys7CisJCXN0YXRlLT50aHJvdHRsZV9jb3VudCsrOwogCi0JaWYgKCEod2FzX3Rocm90dGxlZCBeIGlzX3Rocm90dGxlZCkgJiYKLQkgICAgdGltZV9iZWZvcmU2NCh0bXBfamlmZnMsIF9fZ2V0X2NwdV92YXIobmV4dF9jaGVjaykpKQorCWlmICh0aW1lX2JlZm9yZTY0KG5vdywgc3RhdGUtPm5leHRfY2hlY2spICYmCisJCQlzdGF0ZS0+dGhyb3R0bGVfY291bnQgIT0gc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQpCiAJCXJldHVybiAwOwogCi0JX19nZXRfY3B1X3ZhcihuZXh0X2NoZWNrKSA9IHRtcF9qaWZmcyArIENIRUNLX0lOVEVSVkFMOworCXN0YXRlLT5uZXh0X2NoZWNrID0gbm93ICsgQ0hFQ0tfSU5URVJWQUw7CisJc3RhdGUtPmxhc3RfdGhyb3R0bGVfY291bnQgPSBzdGF0ZS0+dGhyb3R0bGVfY291bnQ7CiAKIAkvKiBpZiB3ZSBqdXN0IGVudGVyZWQgdGhlIHRoZXJtYWwgZXZlbnQgKi8KIAlpZiAoaXNfdGhyb3R0bGVkKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIkNQVSVkOiBUZW1wZXJhdHVyZSBhYm92ZSB0aHJlc2hvbGQsICIKLQkJICAgICAgICJjcHUgY2xvY2sgdGhyb3R0bGVkICh0b3RhbCBldmVudHMgPSAlbHUpXG4iLAotCQkgICAgICAgY3B1LCBfX2dldF9jcHVfdmFyKHRoZXJtYWxfdGhyb3R0bGVfY291bnQpKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVJWQ6IFRlbXBlcmF0dXJlIGFib3ZlIHRocmVzaG9sZCwgY3B1IGNsb2NrIHRocm90dGxlZCAodG90YWwgZXZlbnRzID0gJWx1KVxuIiwgdGhpc19jcHUsIHN0YXRlLT50aHJvdHRsZV9jb3VudCk7CiAKIAkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQlyZXR1cm4gMTsKIAl9CiAJaWYgKHdhc190aHJvdHRsZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgY3B1KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6IFRlbXBlcmF0dXJlL3NwZWVkIG5vcm1hbFxuIiwgdGhpc19jcHUpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTIxMyw3ICsyMzAsNyBAQAogCV9fdTY0IG1zcl92YWw7CiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKLQlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpKQorCWlmICh0aGVybV90aHJvdF9wcm9jZXNzKChtc3JfdmFsICYgVEhFUk1fU1RBVFVTX1BST0NIT1QpICE9IDApKQogCQltY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KG1zcl92YWwpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYwppbmRleCAzMTU3MzhjLi43M2M4NmRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKQEAgLTg0Niw3ICs4NDYsNyBAQAogCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CiAKIAlyYW5nZV9zdW1zID0gc3VtX3JhbmdlcyhyYW5nZSwgbnJfcmFuZ2UpOwotCXByaW50ayhLRVJOX0lORk8gInRvdGFsIFJBTSBjb3ZlcnJlZDogJWxkTVxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKIAkgICAgICAgcmFuZ2Vfc3VtcyA+PiAoMjAgLSBQQUdFX1NISUZUKSk7CiAKIAlpZiAobXRycl9jaHVua19zaXplICYmIG10cnJfZ3Jhbl9zaXplKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IGYwNGU3MjUuLjNjMWIxMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC05NiwxNyArOTYsMjQgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKIAljaGFyICpwdHI7CiAJY2hhciBsaW5lW0xJTkVfU0laRV07CisJaW50IGxlbmd0aDsKIAlzaXplX3QgbGluZWxlbjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKLQlpZiAoIWxlbikKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW1zZXQobGluZSwgMCwgTElORV9TSVpFKTsKLQlpZiAobGVuID4gTElORV9TSVpFKQotCQlsZW4gPSBMSU5FX1NJWkU7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGxpbmUsIGJ1ZiwgbGVuIC0gMSkpCisKKwlsZW5ndGggPSBsZW47CisJbGVuZ3RoLS07CisKKwlpZiAobGVuZ3RoID4gTElORV9TSVpFIC0gMSkKKwkJbGVuZ3RoID0gTElORV9TSVpFIC0gMTsKKworCWlmIChsZW5ndGggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcihsaW5lLCBidWYsIGxlbmd0aCkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJbGluZWxlbiA9IHN0cmxlbihsaW5lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggYTNjN2FkYi4uYjU4MDFjMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTE3OTAsNiArMTc5MCw5IEBACiB2b2lkIHNldF9wZXJmX2V2ZW50X3BlbmRpbmcodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlpZiAoIXg4Nl9wbXUuYXBpYyB8fCAheDg2X3BtdV9pbml0aWFsaXplZCgpKQorCQlyZXR1cm47CisKIAlhcGljLT5zZW5kX0lQSV9zZWxmKExPQ0FMX1BFTkRJTkdfVkVDVE9SKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggZjdjZGIzYi4uY2Q5N2NlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC0xNiw2ICsxNiwyMiBAQAogLyogU3RvcmVzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGVsZiBoZWFkZXIgb2YgY3Jhc2ggaW1hZ2UuICovCiB1bnNpZ25lZCBsb25nIGxvbmcgZWxmY29yZWhkcl9hZGRyID0gRUxGQ09SRV9BRERSX01BWDsKIAorc3RhdGljIGlubGluZSBib29sIGlzX2NyYXNoZWRfcGZuX3ZhbGlkKHVuc2lnbmVkIGxvbmcgcGZuKQoreworI2lmbmRlZiBDT05GSUdfWDg2X1BBRQorCS8qCisJICogbm9uLVBBRSBrZHVtcCBrZXJuZWwgZXhlY3V0ZWQgZnJvbSBhIFBBRSBvbmUgd2lsbCBjcm9wIGhpZ2ggcHRlCisJICogYml0cyBhbmQgcG9rZSB1bndhbnRlZCBzcGFjZSBjb3VudGluZyBhZ2FpbiBmcm9tIGFkZHJlc3MgMCwgd2UKKwkgKiBkb24ndCB3YW50IHRoYXQuIHB0ZSBtdXN0IGZpdCBpbnRvIHVuc2lnbmVkIGxvbmcuIEluIGZhY3QgdGhlCisJICogdGVzdCBjaGVja3MgaGlnaCAxMiBiaXRzIGZvciBiZWluZyB6ZXJvIChwZm4gd2lsbCBiZSBzaGlmdGVkIGxlZnQKKwkgKiBieSBQQUdFX1NISUZUKS4KKwkgKi8KKwlyZXR1cm4gcHRlX3BmbihwZm5fcHRlKHBmbiwgX19wZ3Byb3QoMCkpKSA9PSBwZm47CisjZWxzZQorCXJldHVybiB0cnVlOworI2VuZGlmCit9CisKIC8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCkBAIC00MSw2ICs1Nyw5IEBACiAJaWYgKCFjc2l6ZSkKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWlzX2NyYXNoZWRfcGZuX3ZhbGlkKHBmbikpCisJCXJldHVybiAtRUZBVUxUOworCiAJdmFkZHIgPSBrbWFwX2F0b21pY19wZm4ocGZuLCBLTV9QVEUwKTsKIAogCWlmICghdXNlcmJ1ZikgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggODU0MTliYi4uZDE3ZDQ4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMzc4LDggKzEzNzgsOCBAQAogCWlmIChtYiA8IDE2KQogCQlyZXR1cm4gMTAyNCoxMDI0OwogCi0JLyogVG8gMzJNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLwotCXJldHVybiAzMioxMDI0KjEwMjQ7CisJLyogVG8gNjRNQiBmb3IgYW55dGhpbmcgYWJvdmUgdGhhdCAqLworCXJldHVybiA2NCoxMDI0KjEwMjQ7CiB9CiAKICNkZWZpbmUgTUFYX1JFU09VUkNFX1NJWkUgKChyZXNvdXJjZV9zaXplX3QpLTEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKaW5kZXggMmFjZmQzZi4uYjljODMwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMTc4LDYgKzE3OCwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfY29uc29sZV9yZWdpc3RlcihzdHJ1Y3QgY29uc29sZSAqY29uLCBpbnQga2VlcF9lYXJseSkKIHsKKwlpZiAoZWFybHlfY29uc29sZS0+aW5kZXggIT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRVJST1I6IGVhcmx5cHJpbnRrPSAlcyBhbHJlYWR5IHVzZWRcbiIsCisJCSAgICAgICBjb24tPm5hbWUpOworCQlyZXR1cm47CisJfQogCWVhcmx5X2NvbnNvbGUgPSBjb247CiAJaWYgKGtlZXBfZWFybHkpCiAJCWVhcmx5X2NvbnNvbGUtPmZsYWdzICY9IH5DT05fQk9PVDsKQEAgLTIwMSw4ICsyMDYsMTEgQEAKIAogCXdoaWxlICgqYnVmICE9ICdcMCcpIHsKIAkJaWYgKCFzdHJuY21wKGJ1ZiwgInNlcmlhbCIsIDYpKSB7Ci0JCQllYXJseV9zZXJpYWxfaW5pdChidWYgKyA2KTsKKwkJCWJ1ZiArPSA2OworCQkJZWFybHlfc2VyaWFsX2luaXQoYnVmKTsKIAkJCWVhcmx5X2NvbnNvbGVfcmVnaXN0ZXIoJmVhcmx5X3NlcmlhbF9jb25zb2xlLCBrZWVwKTsKKwkJCWlmICghc3RybmNtcChidWYsICIsdHR5UyIsIDUpKQorCQkJCWJ1ZiArPSA1OwogCQl9CiAJCWlmICghc3RybmNtcChidWYsICJ0dHlTIiwgNCkpIHsKIAkJCWVhcmx5X3NlcmlhbF9pbml0KGJ1ZiArIDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2VmaS5jIGIvYXJjaC94ODYva2VybmVsL2VmaS5jCmluZGV4IGFkNWJkOTguLmNkY2ZiMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWZpLmMKQEAgLTQ1NCw4ICs0NTQsMTAgQEAKIAlpZiAoYWRkX2VmaV9tZW1tYXApCiAJCWRvX2FkZF9lZmlfbWVtbWFwKCk7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeDg2X3BsYXRmb3JtLmdldF93YWxsY2xvY2sgPSBlZmlfZ2V0X3RpbWU7CiAJeDg2X3BsYXRmb3JtLnNldF93YWxsY2xvY2sgPSBlZmlfc2V0X3J0Y19tbXNzOworI2VuZGlmCiAKIAkvKiBTZXR1cCBmb3IgRUZJIHJ1bnRpbWUgc2VydmljZSAqLwogCXJlYm9vdF90eXBlID0gQk9PVF9FRkk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwppbmRleCAyMThhYWQ3Li4wNTBjMjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKQEAgLTc5LDcgKzc5LDcgQEAKICAqIGFueSBwYXJ0aWN1bGFyIEdEVCBsYXlvdXQsIGJlY2F1c2Ugd2UgbG9hZCBvdXIgb3duIGFzIHNvb24gYXMgd2UKICAqIGNhbi4KICAqLwotLnNlY3Rpb24gLnRleHQuaGVhZCwiYXgiLEBwcm9nYml0cworX19IRUFECiBFTlRSWShzdGFydHVwXzMyKQogCS8qIHRlc3QgS0VFUF9TRUdNRU5UUyBmbGFnIHRvIHNlZSBpZiB0aGUgYm9vdGxvYWRlciBpcyBhc2tpbmcKIAkJdXMgdG8gbm90IHJlbG9hZCBzZWdtZW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZDBiYzBhMS4uNzgwY2Q5MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCkBAIC00MCw3ICs0MCw3IEBACiBMM19TVEFSVF9LRVJORUwgPSBwdWRfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKQogCiAJLnRleHQKLQkuc2VjdGlvbiAudGV4dC5oZWFkCisJX19IRUFECiAJLmNvZGU2NAogCS5nbG9ibCBzdGFydHVwXzY0CiBzdGFydHVwXzY0OgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pMzg2X2tzeW1zXzMyLmMKaW5kZXggNDNjZWM2Yi4uOWMzYmQ0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2kzODZfa3N5bXNfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Nl9rc3ltc18zMi5jCkBAIC0xMCw2ICsxMCwxNiBAQAogRVhQT1JUX1NZTUJPTChtY291bnQpOwogI2VuZGlmCiAKKy8qCisgKiBOb3RlLCB0aGlzIGlzIGEgcHJvdG90eXBlIHRvIGdldCBhdCB0aGUgc3ltYm9sIGZvcgorICogdGhlIGV4cG9ydCwgYnV0IGRvbnQgdXNlIGl0IGZyb20gQyBjb2RlLCBpdCBpcyB1c2VkCisgKiBieSBhc3NlbWJseSBjb2RlIGFuZCBpcyBub3QgdXNpbmcgQyBjYWxsaW5nIGNvbnZlbnRpb24hCisgKi8KKyNpZm5kZWYgQ09ORklHX1g4Nl9DTVBYQ0hHNjQKK2V4dGVybiB2b2lkIGNtcHhjaGc4Yl9lbXUodm9pZCk7CitFWFBPUlRfU1lNQk9MKGNtcHhjaGc4Yl9lbXUpOworI2VuZGlmCisKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDc0NjU2ZDEuLjA0YmJkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTYzLDEwICs2MywxMCBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaikKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBpcnFfc3RhdHMoaiktPmlycV9zcHVyaW91c19jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBTcHVyaW91cyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDTlQiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlcmZfaXJxcyk7Ci0Jc2VxX3ByaW50ZihwLCAiICBQZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHNcbiIpOworCXNlcV9wcmludGYocCwgIiAgUGVyZm9ybWFuY2UgbW9uaXRvcmluZyBpbnRlcnJ1cHRzXG4iKTsKIAlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJQTkQiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3BlbmRpbmdfaXJxcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYwppbmRleCAzNjZiYWExLi5mNGM1MzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKQEAgLTMxNyw2ICszMTcsMTIgQEAKIAkJcmV0dXJuIFVDT0RFX05GT1VORDsKIAl9CiAKKwlpZiAoKih1MzIgKilmaXJtd2FyZS0+ZGF0YSAhPSBVQ09ERV9NQUdJQykgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogaW52YWxpZCBVQ09ERV9NQUdJQyAoMHglMDh4KVxuIiwKKwkJICAgICAgICoodTMyICopZmlybXdhcmUtPmRhdGEpOworCQlyZXR1cm4gVUNPREVfRVJST1I7CisJfQorCiAJcmV0ID0gZ2VuZXJpY19sb2FkX21pY3JvY29kZShjcHUsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSk7CiAKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDY0YjgzOGUuLmE2ZTgwNGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAvKgogICogVGhpcyB2YXJpYWJsZSBiZWNvbWVzIDEgaWYgaW9tbXU9cHQgaXMgcGFzc2VkIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLgotICogSWYgdGhpcyB2YXJpYWJsZSBpcyAxLCBJT01NVSBpbXBsZW1lbnRhdGlvbnMgZG8gbm8gRE1BIHJhbnNsYXRpb24gZm9yCisgKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGltcGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAgKiBkZXZpY2VzIGFuZCBhbGxvdyBldmVyeSBkZXZpY2UgdG8gYWNjZXNzIHRvIHdob2xlIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBpcwogICogdXNlZnVsIGlmIGEgdXNlciB3YW50IHRvIHVzZSBhbiBJT01NVSBvbmx5IGZvciBLVk0gZGV2aWNlIGFzc2lnbm1lbnQgdG8KICAqIGd1ZXN0cyBhbmQgbm90IGZvciBkcml2ZXIgZG1hIHRyYW5zbGF0aW9uLgpAQCAtNDUsMTIgKzQ1LDEwIEBACiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzcyBfX3JlYWRfbW9zdGx5ID0gMDsKIEVYUE9SVF9TWU1CT0woYmFkX2RtYV9hZGRyZXNzKTsKIAotLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKLSAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCi0gICB0byBvbGRlciBpMzg2LiAqLworLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiAqLwogc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldiA9IHsKIAkuaW5pdF9uYW1lID0gImZhbGxiYWNrIGRldmljZSIsCi0JLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwkuY29oZXJlbnRfZG1hX21hc2sgPSBJU0FfRE1BX0JJVF9NQVNLLAogCS5kbWFfbWFzayA9ICZ4ODZfZG1hX2ZhbGxiYWNrX2Rldi5jb2hlcmVudF9kbWFfbWFzaywKIH07CiBFWFBPUlRfU1lNQk9MKHg4Nl9kbWFfZmFsbGJhY2tfZGV2KTsKQEAgLTMxMSw3ICszMDksNyBAQAogCWFtZF9pb21tdV9zaHV0ZG93bigpOwogfQogLyogTXVzdCBleGVjdXRlIGFmdGVyIFBDSSBzdWJzeXN0ZW0gKi8KLWZzX2luaXRjYWxsKHBjaV9pb21tdV9pbml0KTsKK3Jvb3Rmc19pbml0Y2FsbChwY2lfaW9tbXVfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAvKiBNYW55IFZJQSBicmlkZ2VzIHNlZW0gdG8gY29ycnVwdCBkYXRhIGZvciBEQUMuIERpc2FibGUgaXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwppbmRleCA5OGE4MjdlLi5hN2YxYjY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWdhcnRfNjQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYWQ1MzViNi4uZWI2MmNiYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC02NjQsMyArNjY0LDggQEAKIAlyZXR1cm4gZG9fYXJjaF9wcmN0bChjdXJyZW50LCBjb2RlLCBhZGRyKTsKIH0KIAordW5zaWduZWQgbG9uZyBLU1RLX0VTUChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfSUEzMikpID8KKwkJCSh0YXNrX3B0X3JlZ3ModGFzayktPnNwKSA6ICgodGFzayktPnRocmVhZC51c2Vyc3ApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCmluZGV4IDI3MzQ5ZjkuLmY5MzA3ODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rib290Lmg+CiAjaW5jbHVkZSA8YWNwaS9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTQzNSw2ICs0MzYsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTWFjQm9va1BybzUiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIEFwcGxlIE1hY21pbmkzLDEgKi8KKwkJLmNhbGxiYWNrID0gc2V0X3BjaV9yZWJvb3QsCisJCS5pZGVudCA9ICJBcHBsZSBNYWNtaW5pMywxIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY21pbmkzLDEiKSwKKwkJfSwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCBlMDlmMGUyLi4yYTM0ZjljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNjYwLDYgKzY2MCwxMyBAQAogCQl9LAogCX0sCiAJeworCQkuY2FsbGJhY2sgPSBkbWlfbG93X21lbW9yeV9jb3JydXB0aW9uLAorCQkuaWRlbnQgPSAiUGhvZW5peC9NU0MgQklPUyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIlBob2VuaXgvTVNDIiksCisJCX0sCisJfSwKKwl7CiAJLyoKIAkgKiBBTUkgQklPUyB3aXRoIGxvdyBtZW1vcnkgY29ycnVwdGlvbiB3YXMgZm91bmQgb24gSW50ZWwgREc0NUlEIGJvYXJkLgogCSAqIEl0IGhhc2UgZGlmZmVyZW50IERNSV9CSU9TX1ZFTkRPUiA9ICJJbnRlbCBDb3JwLiIsIGZvciBub3cgd2Ugd2lsbApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKaW5kZXggZGNiMDBkMi4uYmUyNTczNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGltZS5jCkBAIC0zOCw3ICszOCw4IEBACiAjaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIAkJcmV0dXJuICoodW5zaWduZWQgbG9uZyAqKShyZWdzLT5icCArIHNpemVvZihsb25nKSk7CiAjZWxzZQotCQl1bnNpZ25lZCBsb25nICpzcCA9ICh1bnNpZ25lZCBsb25nICopcmVncy0+c3A7CisJCXVuc2lnbmVkIGxvbmcgKnNwID0KKwkJCSh1bnNpZ25lZCBsb25nICopa2VybmVsX3N0YWNrX3BvaW50ZXIocmVncyk7CiAJCS8qCiAJCSAqIFJldHVybiBhZGRyZXNzIGlzIGVpdGhlciBkaXJlY3RseSBhdCBzdGFjayBwb2ludGVyCiAJCSAqIG9yIGFib3ZlIGEgc2F2ZWQgZmxhZ3MuIEVmbGFncyBoYXMgYml0cyAyMi0zMSB6ZXJvLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDUwM2MxZjIuLjE3NDBjODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTIzLDggKzIzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYmF1X2NvbnRyb2wJKip1dl9iYXVfdGFibGVfYmFzZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQJCQl1dl9iYXVfcmV0cnlfbGltaXQgX19yZWFkX21vc3RseTsKIAotLyogcG9zaXRpb24gb2YgcG5vZGUgKHdoaWNoIGlzIG5hc2lkPj4xKTogKi8KLXN0YXRpYyBpbnQJCQl1dl9uc2hpZnQgX19yZWFkX21vc3RseTsKIC8qIGJhc2UgcG5vZGUgaW4gdGhpcyBwYXJ0aXRpb24gKi8KIHN0YXRpYyBpbnQJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSBfX3JlYWRfbW9zdGx5OwogCkBAIC03MjMsNyArNzIxLDcgQEAKIAlCVUdfT04oIWFkcCk7CiAKIAlwYSA9IHV2X2dwYShhZHApOyAvKiBuZWVkIHRoZSByZWFsIG5hc2lkKi8KLQluID0gcGEgPj4gdXZfbnNoaWZ0OworCW4gPSB1dl9ncGFfdG9fcG5vZGUocGEpOwogCW0gPSBwYSAmIHV2X21tYXNrOwogCiAJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfTEJfQkFVX1NCX0RFU0NSSVBUT1JfQkFTRSwKQEAgLTc3OCw3ICs3NzYsNyBAQAogCSAqIG5lZWQgdGhlIHBub2RlIG9mIHdoZXJlIHRoZSBtZW1vcnkgd2FzIHJlYWxseSBhbGxvY2F0ZWQKIAkgKi8KIAlwYSA9IHV2X2dwYShwcXApOwotCXBuID0gcGEgPj4gdXZfbnNoaWZ0OworCXBuID0gdXZfZ3BhX3RvX3Bub2RlKHBhKTsKIAl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsCiAJCQkgICAgICBVVkhfTEJfQkFVX0lOVERfUEFZTE9BRF9RVUVVRV9GSVJTVCwKIAkJCSAgICAgICgodW5zaWduZWQgbG9uZylwbiA8PCBVVl9QQVlMT0FEUV9QTk9ERV9TSElGVCkgfApAQCAtODQzLDggKzg0MSw3IEBACiAJCQkJICAgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGN1cl9jcHUpKTsKIAogCXV2X2JhdV9yZXRyeV9saW1pdCA9IDE7Ci0JdXZfbnNoaWZ0ID0gdXZfaHViX2luZm8tPm5fdmFsOwotCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKKwl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm1fdmFsKSAtIDE7CiAJbmJsYWRlcyA9IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsKIAogCXV2X2JhdV90YWJsZV9iYXNlcyA9IChzdHJ1Y3QgYmF1X2NvbnRyb2wgKiopCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmUuYwppbmRleCA2OTlmN2VlLi5jZDAyMjEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lLmMKQEAgLTMsOCArMywxNiBAQAogI2luY2x1ZGUgPGFzbS90cmFtcG9saW5lLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KIAorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChDT05GSUdfQUNQSV9TTEVFUCkKKyNkZWZpbmUgX190cmFtcGluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhCisjZWxzZQorI2RlZmluZSBfX3RyYW1waW5pdCBfX2NwdWluaXQKKyNkZWZpbmUgX190cmFtcGluaXRkYXRhIF9fY3B1aW5pdGRhdGEKKyNlbmRpZgorCiAvKiByZWFkeSBmb3IgeDg2XzY0IGFuZCB4ODYgKi8KLXVuc2lnbmVkIGNoYXIgKl9fY3B1aW5pdGRhdGEgdHJhbXBvbGluZV9iYXNlID0gX192YShUUkFNUE9MSU5FX0JBU0UpOwordW5zaWduZWQgY2hhciAqX190cmFtcGluaXRkYXRhIHRyYW1wb2xpbmVfYmFzZSA9IF9fdmEoVFJBTVBPTElORV9CQVNFKTsKIAogdm9pZCBfX2luaXQgcmVzZXJ2ZV90cmFtcG9saW5lX21lbW9yeSh2b2lkKQogewpAQCAtMjYsNyArMzQsNyBAQAogICogYm9vdHN0cmFwIGludG8gdGhlIHBhZ2UgY29uY2VybmVkLiBUaGUgY2FsbGVyCiAgKiBoYXMgbWFkZSBzdXJlIGl0J3Mgc3VpdGFibHkgYWxpZ25lZC4KICAqLwotdW5zaWduZWQgbG9uZyBfX2NwdWluaXQgc2V0dXBfdHJhbXBvbGluZSh2b2lkKQordW5zaWduZWQgbG9uZyBfX3RyYW1waW5pdCBzZXR1cF90cmFtcG9saW5lKHZvaWQpCiB7CiAJbWVtY3B5KHRyYW1wb2xpbmVfYmFzZSwgdHJhbXBvbGluZV9kYXRhLCBUUkFNUE9MSU5FX1NJWkUpOwogCXJldHVybiB2aXJ0X3RvX3BoeXModHJhbXBvbGluZV9iYXNlKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhbXBvbGluZV82NC5TCmluZGV4IDU5NmQ1NGMuLjNhZjJkZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90cmFtcG9saW5lXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYW1wb2xpbmVfNjQuUwpAQCAtMzIsOCArMzIsMTIgQEAKICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KIAorI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCisuc2VjdGlvbiAucm9kYXRhLCAiYSIsIEBwcm9nYml0cworI2Vsc2UKIC8qIFdlIGNhbiBmcmVlIHVwIHRoZSB0cmFtcG9saW5lIGFmdGVyIGJvb3R1cCBpZiBjcHUgaG90cGx1ZyBpcyBub3Qgc3VwcG9ydGVkLiAqLwogX19DUFVJTklUUk9EQVRBCisjZW5kaWYKIC5jb2RlMTYKIAogRU5UUlkodHJhbXBvbGluZV9kYXRhKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCBhNjY1YzcxLi43ZTM3ZGNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAogLyoKICAqIFRoZSBJRFQgaGFzIHRvIGJlIHBhZ2UtYWxpZ25lZCB0byBzaW1wbGlmeSB0aGUgUGVudGl1bQotICogRjAgMEYgYnVnIHdvcmthcm91bmQuLiBXZSBoYXZlIGEgc3BlY2lhbCBsaW5rIHNlZ21lbnQKLSAqIGZvciB0aGlzLgorICogRjAgMEYgYnVnIHdvcmthcm91bmQuCiAgKi8KLWdhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10KLQlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaWR0IikpKSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKK2dhdGVfZGVzYyBpZHRfdGFibGVbTlJfVkVDVE9SU10gX19wYWdlX2FsaWduZWRfZGF0YSA9IHsgeyB7IHsgMCwgMCB9IH0gfSwgfTsKICNlbmRpZgogCiBERUNMQVJFX0JJVE1BUCh1c2VkX3ZlY3RvcnMsIE5SX1ZFQ1RPUlMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY19zeW5jLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwppbmRleCAwMjdiNWI0Li5mMzc5MzA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjX3N5bmMuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCXJldHVybjsKIAogCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKSkgewotCQlwcl9pbmZvKCJTa2lwcGluZyBzeW5jaHJvbml6YXRpb24gY2hlY2tzIGFzIFRTQyBpcyByZWxpYWJsZS5cbiIpOworCQlwcmludGtfb25jZShLRVJOX0lORk8gIlNraXBwaW5nIHN5bmNocm9uaXphdGlvbiBjaGVja3MgYXMgVFNDIGlzIHJlbGlhYmxlLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCAzMWU2ZjZjLi5kNDMwZTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAogCXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCA9IDE7CiAJcHZfaW5mby5rZXJuZWxfcnBsID0ga2VybmVsX2NzICYgU0VHTUVOVF9SUExfTUFTSzsKLQlwdl9pbmZvLm5hbWUgPSAidm1pIjsKKwlwdl9pbmZvLm5hbWUgPSAidm1pIFtkZXByZWNhdGVkXSI7CiAKIAlwdl9pbml0X29wcy5wYXRjaCA9IHZtaV9wYXRjaDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBhNDZhY2NjLi4zYzY4ZmUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjUsMTcgKzY1LDExIEBACiAjZW5kaWYKIAogCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhICovCi0KLQkvKiBib290c3RyYXBwaW5nIGNvZGUgKi8KLQkudGV4dC5oZWFkIDogQVQoQUREUigudGV4dC5oZWFkKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV90ZXh0ID0gLjsKLQkJKigudGV4dC5oZWFkKQotCX0gOnRleHQgPSAweDkwOTAKLQotCS8qIFRoZSByZXN0IG9mIHRoZSB0ZXh0ICovCiAJLnRleHQgOiAgQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCQlfdGV4dCA9IC47CisJCS8qIGJvb3RzdHJhcHBpbmcgY29kZSAqLworCQlIRUFEX1RFWFQKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCS8qIG5vdCByZWFsbHkgbmVlZGVkLCBhbHJlYWR5IHBhZ2UgYWxpZ25lZCAqLwogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJKigudGV4dC5wYWdlX2FsaWduZWQpCiAjZW5kaWYKQEAgLTk0LDEzICs4OCw3IEBACiAKIAlOT1RFUyA6dGV4dCA6bm90ZQogCi0JLyogRXhjZXB0aW9uIHRhYmxlICovCi0JLiA9IEFMSUdOKDE2KTsKLQlfX2V4X3RhYmxlIDogQVQoQUREUihfX2V4X3RhYmxlKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9fc3RhcnRfX19leF90YWJsZSA9IC47Ci0JCSooX19leF90YWJsZSkKLQkJX19zdG9wX19fZXhfdGFibGUgPSAuOwotCX0gOnRleHQgPSAweDkwOTAKKwlFWENFUFRJT05fVEFCTEUoMTYpIDp0ZXh0ID0gMHg5MDkwCiAKIAlST19EQVRBKFBBR0VfU0laRSkKIApAQCAtMTE4LDcgKzEwNiw2IEBACiAjZW5kaWYKIAogCQlQQUdFX0FMSUdORURfREFUQShQQUdFX1NJWkUpCi0JCSooLmRhdGEuaWR0KQogCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUykKIApAQCAtMTM1LDI0ICsxMjIsMjEgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKICNkZWZpbmUgVlNZU0NBTExfQUREUiAoLTEwKjEwMjQqMTAyNCkKLSNkZWZpbmUgVlNZU0NBTExfUEhZU19BRERSICgoTE9BREFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCi0jZGVmaW5lIFZTWVNDQUxMX1ZJUlRfQUREUiAoKEFERFIoLmRhdGEpICsgU0laRU9GKC5kYXRhKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUdFX1NJWkUgLSAxKSAmIH4oUEFHRV9TSVpFIC0gMSkpCiAKLSNkZWZpbmUgVkxPQURfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfUEhZU19BRERSKQorI2RlZmluZSBWTE9BRF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzAgKyBMT0FEX09GRlNFVCkKICNkZWZpbmUgVkxPQUQoeCkgKEFERFIoeCkgLSBWTE9BRF9PRkZTRVQpCiAKLSNkZWZpbmUgVlZJUlRfT0ZGU0VUIChWU1lTQ0FMTF9BRERSIC0gVlNZU0NBTExfVklSVF9BRERSKQorI2RlZmluZSBWVklSVF9PRkZTRVQgKFZTWVNDQUxMX0FERFIgLSBfX3ZzeXNjYWxsXzApCiAjZGVmaW5lIFZWSVJUKHgpIChBRERSKHgpIC0gVlZJUlRfT0ZGU0VUKQogCisJLiA9IEFMSUdOKDQwOTYpOworCV9fdnN5c2NhbGxfMCA9IC47CisKIAkuID0gVlNZU0NBTExfQUREUjsKLQkudnN5c2NhbGxfMCA6IEFUKFZTWVNDQUxMX1BIWVNfQUREUikgeworCS52c3lzY2FsbF8wIDogQVQoVkxPQUQoLnZzeXNjYWxsXzApKSB7CiAJCSooLnZzeXNjYWxsXzApCiAJfSA6dXNlcgogCi0JX192c3lzY2FsbF8wID0gVlNZU0NBTExfVklSVF9BRERSOwotCiAJLiA9IEFMSUdOKENPTkZJR19YODZfTDFfQ0FDSEVfQllURVMpOwogCS52c3lzY2FsbF9mbiA6IEFUKFZMT0FEKC52c3lzY2FsbF9mbikpIHsKIAkJKigudnN5c2NhbGxfZm4pCkBAIC0xOTIsMTEgKzE3Niw5IEBACiAJCSooLnZzeXNjYWxsXzMpCiAJfQogCi0JLiA9IFZTWVNDQUxMX1ZJUlRfQUREUiArIFBBR0VfU0laRTsKKwkuID0gX192c3lzY2FsbF8wICsgUEFHRV9TSVpFOwogCiAjdW5kZWYgVlNZU0NBTExfQUREUgotI3VuZGVmIFZTWVNDQUxMX1BIWVNfQUREUgotI3VuZGVmIFZTWVNDQUxMX1ZJUlRfQUREUgogI3VuZGVmIFZMT0FEX09GRlNFVAogI3VuZGVmIFZMT0FECiAjdW5kZWYgVlZJUlRfT0ZGU0VUCkBAIC0yMTksMzYgKzIwMSwxMiBAQAogCVBFUkNQVV9WQUREUigwLCA6cGVyY3B1KQogI2VuZGlmCiAKLQkuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9zaW5pdHRleHQgPSAuOwotCQlJTklUX1RFWFQKLQkJX2Vpbml0dGV4dCA9IC47Ci0JfQorCUlOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJOmluaXQKICNlbmRpZgogCi0JLmluaXQuZGF0YSA6IEFUKEFERFIoLmluaXQuZGF0YSkgLSBMT0FEX09GRlNFVCkgewotCQlJTklUX0RBVEEKLQl9Ci0KLQkuID0gQUxJR04oMTYpOwotCS5pbml0LnNldHVwIDogQVQoQUREUiguaW5pdC5zZXR1cCkgLSBMT0FEX09GRlNFVCkgewotCQlfX3NldHVwX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5zZXR1cCkKLQkJX19zZXR1cF9lbmQgPSAuOwotCX0KLQkuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19pbml0Y2FsbF9zdGFydCA9IC47Ci0JCUlOSVRDQUxMUwotCQlfX2luaXRjYWxsX2VuZCA9IC47Ci0JfQotCi0JLmNvbl9pbml0Y2FsbC5pbml0IDogQVQoQUREUiguY29uX2luaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKLQkJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwotCQkqKC5jb25faW5pdGNhbGwuaW5pdCkKLQkJX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQl9CisJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCiAKIAkueDg2X2NwdV9kZXYuaW5pdCA6IEFUKEFERFIoLng4Nl9jcHVfZGV2LmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX194ODZfY3B1X2Rldl9zdGFydCA9IC47CkBAIC0yNTYsOCArMjE0LDYgQEAKIAkJX194ODZfY3B1X2Rldl9lbmQgPSAuOwogCX0KIAotCVNFQ1VSSVRZX0lOSVQKLQogCS4gPSBBTElHTig4KTsKIAkucGFyYWluc3RydWN0aW9ucyA6IEFUKEFERFIoLnBhcmFpbnN0cnVjdGlvbnMpIC0gTE9BRF9PRkZTRVQpIHsKIAkJX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKQEAgLTI4OCwxNSArMjQ0LDYgQEAKIAkJRVhJVF9EQVRBCiAJfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JLmluaXQucmFtZnMgOiBBVChBRERSKC5pbml0LnJhbWZzKSAtIExPQURfT0ZGU0VUKSB7Ci0JCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKLQkJKiguaW5pdC5yYW1mcykKLQkJX19pbml0cmFtZnNfZW5kID0gLjsKLQl9Ci0jZW5kaWYKLQogI2lmICFkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8ICFkZWZpbmVkKENPTkZJR19TTVApCiAJUEVSQ1BVKFBBR0VfU0laRSkKICNlbmRpZgpAQCAtMzU4LDYgKzMwNSw5IEBACiAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKKy8qCisgKiBUaGUgQVNTRVJUKCkgc2luayB0byAuIGlzIGludGVudGlvbmFsLCBmb3IgYmludXRpbHMgMi4xNCBjb21wYXRpYmlsaXR5OgorICovCiAuID0gQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAogCSAgICJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCmluZGV4IDgyYWQ1MjMuLjE0NGU3ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9pODI1NC5jCisrKyBiL2FyY2gveDg2L2t2bS9pODI1NC5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkgKiBpdHNlbGYgd2l0aCB0aGUgaW5pdGlhbCBjb3VudCBhbmQgY29udGludWVzIGNvdW50aW5nCiAJICogZnJvbSB0aGVyZS4KIAkgKi8KLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZwcy0+cGl0X3RpbWVyLnRpbWVyKTsKKwlyZW1haW5pbmcgPSBocnRpbWVyX2dldF9yZW1haW5pbmcoJnBzLT5waXRfdGltZXIudGltZXIpOwogCWVsYXBzZWQgPSBwcy0+cGl0X3RpbWVyLnBlcmlvZCAtIGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CiAJZWxhcHNlZCA9IG1vZF82NChlbGFwc2VkLCBwcy0+cGl0X3RpbWVyLnBlcmlvZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggMWFlNWNlYi4uMjNjMjE3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWlmIChhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZW1haW5pbmcgPSBocnRpbWVyX2V4cGlyZXNfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CisJcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZhcGljLT5sYXBpY190aW1lci50aW1lcik7CiAJaWYgKGt0aW1lX3RvX25zKHJlbWFpbmluZykgPCAwKQogCQlyZW1haW5pbmcgPSBrdGltZV9zZXQoMCwgMCk7CiAKQEAgLTY2NCw3ICs2NjQsNyBAQAogewogCWt0aW1lX3Qgbm93ID0gYXBpYy0+bGFwaWNfdGltZXIudGltZXIuYmFzZS0+Z2V0X3RpbWUoKTsKIAotCWFwaWMtPmxhcGljX3RpbWVyLnBlcmlvZCA9IGFwaWNfZ2V0X3JlZyhhcGljLCBBUElDX1RNSUNUKSAqCisJYXBpYy0+bGFwaWNfdGltZXIucGVyaW9kID0gKHU2NClhcGljX2dldF9yZWcoYXBpYywgQVBJQ19UTUlDVCkgKgogCQkgICAgQVBJQ19CVVNfQ1lDTEVfTlMgKiBhcGljLT5kaXZpZGVfY291bnQ7CiAJYXRvbWljX3NldCgmYXBpYy0+bGFwaWNfdGltZXIucGVuZGluZywgMCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCBlY2E0MWFlLi44MThiOTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNTYsNiArMTU2LDggQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgIm1tdXRyYWNlLmgiCiAKKyNkZWZpbmUgU1BURV9IT1NUX1dSSVRFQUJMRSAoMVVMTCA8PCBQVF9GSVJTVF9BVkFJTF9CSVRTX1NISUZUKQorCiAjZGVmaW5lIFNIQURPV19QVF9JTkRFWChhZGRyLCBsZXZlbCkgUFQ2NF9JTkRFWChhZGRyLCBsZXZlbCkKIAogc3RydWN0IGt2bV9ybWFwX2Rlc2MgewpAQCAtNjM0LDkgKzYzNiw3IEBACiAJaWYgKCpzcHRlICYgc2hhZG93X2FjY2Vzc2VkX21hc2spCiAJCWt2bV9zZXRfcGZuX2FjY2Vzc2VkKHBmbik7CiAJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpCi0JCWt2bV9yZWxlYXNlX3Bmbl9kaXJ0eShwZm4pOwotCWVsc2UKLQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CisJCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7CiAJcm1hcHAgPSBnZm5fdG9fcm1hcChrdm0sIHNwLT5nZm5zW3NwdGUgLSBzcC0+c3B0XSwgc3AtPnJvbGUubGV2ZWwpOwogCWlmICghKnJtYXBwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicm1hcF9yZW1vdmU6ICVwICVsbHggMC0+QlVHXG4iLCBzcHRlLCAqc3B0ZSk7CkBAIC03NDgsNyArNzQ4LDggQEAKIAlyZXR1cm4gd3JpdGVfcHJvdGVjdGVkOwogfQogCi1zdGF0aWMgaW50IGt2bV91bm1hcF9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQorc3RhdGljIGludCBrdm1fdW5tYXBfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl1NjQgKnNwdGU7CiAJaW50IG5lZWRfdGxiX2ZsdXNoID0gMDsKQEAgLTc2Myw4ICs3NjQsNDcgQEAKIAlyZXR1cm4gbmVlZF90bGJfZmx1c2g7CiB9CiAKK3N0YXRpYyBpbnQga3ZtX3NldF9wdGVfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBuZWVkX2ZsdXNoID0gMDsKKwl1NjQgKnNwdGUsIG5ld19zcHRlOworCXB0ZV90ICpwdGVwID0gKHB0ZV90ICopZGF0YTsKKwlwZm5fdCBuZXdfcGZuOworCisJV0FSTl9PTihwdGVfaHVnZSgqcHRlcCkpOworCW5ld19wZm4gPSBwdGVfcGZuKCpwdGVwKTsKKwlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIE5VTEwpOworCXdoaWxlIChzcHRlKSB7CisJCUJVR19PTighaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlKSk7CisJCXJtYXBfcHJpbnRrKCJrdm1fc2V0X3B0ZV9ybWFwcDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7CisJCW5lZWRfZmx1c2ggPSAxOworCQlpZiAocHRlX3dyaXRlKCpwdGVwKSkgeworCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKKwkJCV9fc2V0X3NwdGUoc3B0ZSwgc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpOworCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCW5ld19zcHRlID0gKnNwdGUgJn4gKFBUNjRfQkFTRV9BRERSX01BU0spOworCQkJbmV3X3NwdGUgfD0gKHU2NCluZXdfcGZuIDw8IFBBR0VfU0hJRlQ7CisKKwkJCW5ld19zcHRlICY9IH5QVF9XUklUQUJMRV9NQVNLOworCQkJbmV3X3NwdGUgJj0gflNQVEVfSE9TVF9XUklURUFCTEU7CisJCQlpZiAoaXNfd3JpdGVibGVfcHRlKCpzcHRlKSkKKwkJCQlrdm1fc2V0X3Bmbl9kaXJ0eShzcHRlX3RvX3Bmbigqc3B0ZSkpOworCQkJX19zZXRfc3B0ZShzcHRlLCBuZXdfc3B0ZSk7CisJCQlzcHRlID0gcm1hcF9uZXh0KGt2bSwgcm1hcHAsIHNwdGUpOworCQl9CisJfQorCWlmIChuZWVkX2ZsdXNoKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGt2bV9oYW5kbGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsCi0JCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHApKQorCQkJICB1bnNpZ25lZCBsb25nIGRhdGEsCisJCQkgIGludCAoKmhhbmRsZXIpKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyAqcm1hcHAsCisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpKQogewogCWludCBpLCBqOwogCWludCByZXR2YWwgPSAwOwpAQCAtNzg2LDEzICs4MjYsMTUgQEAKIAkJaWYgKGh2YSA+PSBzdGFydCAmJiBodmEgPCBlbmQpIHsKIAkJCWdmbl90IGdmbl9vZmZzZXQgPSAoaHZhIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CiAKLQkJCXJldHZhbCB8PSBoYW5kbGVyKGt2bSwgJm1lbXNsb3QtPnJtYXBbZ2ZuX29mZnNldF0pOworCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLCAmbWVtc2xvdC0+cm1hcFtnZm5fb2Zmc2V0XSwKKwkJCQkJICBkYXRhKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytqKSB7CiAJCQkJaW50IGlkeCA9IGdmbl9vZmZzZXQ7CiAJCQkJaWR4IC89IEtWTV9QQUdFU19QRVJfSFBBR0UoUFRfRElSRUNUT1JZX0xFVkVMICsgaik7CiAJCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAotCQkJCQkmbWVtc2xvdC0+bHBhZ2VfaW5mb1tqXVtpZHhdLnJtYXBfcGRlKTsKKwkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSwKKwkJCQkJZGF0YSk7CiAJCQl9CiAJCX0KIAl9CkBAIC04MDIsMTAgKzg0NCwxNiBAQAogCiBpbnQga3ZtX3VubWFwX2h2YShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgaHZhKQogewotCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwga3ZtX3VubWFwX3JtYXBwKTsKKwlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIDAsIGt2bV91bm1hcF9ybWFwcCk7CiB9CiAKLXN0YXRpYyBpbnQga3ZtX2FnZV9ybWFwcChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgKnJtYXBwKQordm9pZCBrdm1fc2V0X3NwdGVfaHZhKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBodmEsIHB0ZV90IHB0ZSkKK3sKKwlrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgKHVuc2lnbmVkIGxvbmcpJnB0ZSwga3ZtX3NldF9wdGVfcm1hcHApOworfQorCitzdGF0aWMgaW50IGt2bV9hZ2Vfcm1hcHAoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nICpybWFwcCwKKwkJCSB1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdTY0ICpzcHRlOwogCWludCB5b3VuZyA9IDA7CkBAIC04NDEsMTMgKzg4OSwxMyBAQAogCWdmbiA9IHVuYWxpYXNfZ2ZuKHZjcHUtPmt2bSwgZ2ZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKHZjcHUtPmt2bSwgZ2ZuLCBzcC0+cm9sZS5sZXZlbCk7CiAKLQlrdm1fdW5tYXBfcm1hcHAodmNwdS0+a3ZtLCBybWFwcCk7CisJa3ZtX3VubWFwX3JtYXBwKHZjcHUtPmt2bSwgcm1hcHAsIDApOwogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwogfQogCiBpbnQga3ZtX2FnZV9odmEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGh2YSkKIHsKLQlyZXR1cm4ga3ZtX2hhbmRsZV9odmEoa3ZtLCBodmEsIGt2bV9hZ2Vfcm1hcHApOworCXJldHVybiBrdm1faGFuZGxlX2h2YShrdm0sIGh2YSwgMCwga3ZtX2FnZV9ybWFwcCk7CiB9CiAKICNpZmRlZiBNTVVfREVCVUcKQEAgLTE3NTYsNyArMTgwNCw3IEBACiAJCSAgICB1bnNpZ25lZCBwdGVfYWNjZXNzLCBpbnQgdXNlcl9mYXVsdCwKIAkJICAgIGludCB3cml0ZV9mYXVsdCwgaW50IGRpcnR5LCBpbnQgbGV2ZWwsCiAJCSAgICBnZm5fdCBnZm4sIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSwKLQkJICAgIGJvb2wgY2FuX3Vuc3luYykKKwkJICAgIGJvb2wgY2FuX3Vuc3luYywgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJdTY0IHNwdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xNzgzLDYgKzE4MzEsOSBAQAogCQlzcHRlIHw9IGt2bV94ODZfb3BzLT5nZXRfbXRfbWFzayh2Y3B1LCBnZm4sCiAJCQlrdm1faXNfbW1pb19wZm4ocGZuKSk7CiAKKwlpZiAocmVzZXRfaG9zdF9wcm90ZWN0aW9uKQorCQlzcHRlIHw9IFNQVEVfSE9TVF9XUklURUFCTEU7CisKIAlzcHRlIHw9ICh1NjQpcGZuIDw8IFBBR0VfU0hJRlQ7CiAKIAlpZiAoKHB0ZV9hY2Nlc3MgJiBBQ0NfV1JJVEVfTUFTSykKQEAgLTE4MjgsNyArMTg3OSw4IEBACiAJCQkgdW5zaWduZWQgcHRfYWNjZXNzLCB1bnNpZ25lZCBwdGVfYWNjZXNzLAogCQkJIGludCB1c2VyX2ZhdWx0LCBpbnQgd3JpdGVfZmF1bHQsIGludCBkaXJ0eSwKIAkJCSBpbnQgKnB0d3JpdGUsIGludCBsZXZlbCwgZ2ZuX3QgZ2ZuLAotCQkJIHBmbl90IHBmbiwgYm9vbCBzcGVjdWxhdGl2ZSkKKwkJCSBwZm5fdCBwZm4sIGJvb2wgc3BlY3VsYXRpdmUsCisJCQkgYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb24pCiB7CiAJaW50IHdhc19ybWFwcGVkID0gMDsKIAlpbnQgd2FzX3dyaXRlYmxlID0gaXNfd3JpdGVibGVfcHRlKCpzcHRlcCk7CkBAIC0xODYwLDcgKzE5MTIsOCBAQAogCX0KIAogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzcHRlcCwgcHRlX2FjY2VzcywgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCi0JCSAgICAgIGRpcnR5LCBsZXZlbCwgZ2ZuLCBwZm4sIHNwZWN1bGF0aXZlLCB0cnVlKSkgeworCQkgICAgICBkaXJ0eSwgbGV2ZWwsIGdmbiwgcGZuLCBzcGVjdWxhdGl2ZSwgdHJ1ZSwKKwkJICAgICAgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKSkgewogCQlpZiAod3JpdGVfZmF1bHQpCiAJCQkqcHR3cml0ZSA9IDE7CiAJCWt2bV94ODZfb3BzLT50bGJfZmx1c2godmNwdSk7CkBAIC0xODc3LDggKzE5MzAsNyBAQAogCXBhZ2VfaGVhZGVyX3VwZGF0ZV9zbG90KHZjcHUtPmt2bSwgc3B0ZXAsIGdmbik7CiAJaWYgKCF3YXNfcm1hcHBlZCkgewogCQlybWFwX2NvdW50ID0gcm1hcF9hZGQodmNwdSwgc3B0ZXAsIGdmbik7Ci0JCWlmICghaXNfcm1hcF9zcHRlKCpzcHRlcCkpCi0JCQlrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuKTsKKwkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHBmbik7CiAJCWlmIChybWFwX2NvdW50ID4gUk1BUF9SRUNZQ0xFX1RIUkVTSE9MRCkKIAkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewpAQCAtMTkwOSw3ICsxOTYxLDcgQEAKIAkJaWYgKGl0ZXJhdG9yLmxldmVsID09IGxldmVsKSB7CiAJCQltbXVfc2V0X3NwdGUodmNwdSwgaXRlcmF0b3Iuc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCiAJCQkJICAgICAwLCB3cml0ZSwgMSwgJnB0X3dyaXRlLAotCQkJCSAgICAgbGV2ZWwsIGdmbiwgcGZuLCBmYWxzZSk7CisJCQkJICAgICBsZXZlbCwgZ2ZuLCBwZm4sIGZhbHNlLCB0cnVlKTsKIAkJCSsrdmNwdS0+c3RhdC5wZl9maXhlZDsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGQyZmVjOWMuLjcyNTU4ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNzMsOSArMjczLDEzIEBACiAJaWYgKG1tdV9ub3RpZmllcl9yZXRyeSh2Y3B1LCB2Y3B1LT5hcmNoLnVwZGF0ZV9wdGUubW11X3NlcSkpCiAJCXJldHVybjsKIAlrdm1fZ2V0X3BmbihwZm4pOworCS8qCisJICogd2UgY2FsbCBtbXVfc2V0X3NwdGUoKSB3aXRoIHJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IHRydWUgYmVhY3VzZSB0aGF0CisJICogdmNwdS0+YXJjaC51cGRhdGVfcHRlLnBmbiB3YXMgZmV0Y2hlZCBmcm9tIGdldF91c2VyX3BhZ2VzKHdyaXRlID0gMSkuCisJICovCiAJbW11X3NldF9zcHRlKHZjcHUsIHNwdGUsIHBhZ2UtPnJvbGUuYWNjZXNzLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkgICAgIGdwdGUgJiBQVF9ESVJUWV9NQVNLLCBOVUxMLCBQVF9QQUdFX1RBQkxFX0xFVkVMLAotCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUpOworCQkgICAgIGdwdGVfdG9fZ2ZuKGdwdGUpLCBwZm4sIHRydWUsIHRydWUpOwogfQogCiAvKgpAQCAtMzA4LDcgKzMxMiw3IEBACiAJCQkJICAgICB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKIAkJCQkgICAgIGd3LT5wdGVzW2d3LT5sZXZlbC0xXSAmIFBUX0RJUlRZX01BU0ssCiAJCQkJICAgICBwdHdyaXRlLCBsZXZlbCwKLQkJCQkgICAgIGd3LT5nZm4sIHBmbiwgZmFsc2UpOworCQkJCSAgICAgZ3ctPmdmbiwgcGZuLCBmYWxzZSwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC01NTgsNiArNTYyLDcgQEAKIHN0YXRpYyBpbnQgRk5BTUUoc3luY19wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwKQogewogCWludCBpLCBvZmZzZXQsIG5yX3ByZXNlbnQ7CisJYm9vbCByZXNldF9ob3N0X3Byb3RlY3Rpb247CiAKIAlvZmZzZXQgPSBucl9wcmVzZW50ID0gMDsKIApAQCAtNTk1LDkgKzYwMCwxNiBAQAogCiAJCW5yX3ByZXNlbnQrKzsKIAkJcHRlX2FjY2VzcyA9IHNwLT5yb2xlLmFjY2VzcyAmIEZOQU1FKGdwdGVfYWNjZXNzKSh2Y3B1LCBncHRlKTsKKwkJaWYgKCEoc3AtPnNwdFtpXSAmIFNQVEVfSE9TVF9XUklURUFCTEUpKSB7CisJCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKKwkJCXJlc2V0X2hvc3RfcHJvdGVjdGlvbiA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXNldF9ob3N0X3Byb3RlY3Rpb24gPSAxOworCQl9CiAJCXNldF9zcHRlKHZjcHUsICZzcC0+c3B0W2ldLCBwdGVfYWNjZXNzLCAwLCAwLAogCQkJIGlzX2RpcnR5X2dwdGUoZ3B0ZSksIFBUX1BBR0VfVEFCTEVfTEVWRUwsIGdmbiwKLQkJCSBzcHRlX3RvX3BmbihzcC0+c3B0W2ldKSwgdHJ1ZSwgZmFsc2UpOworCQkJIHNwdGVfdG9fcGZuKHNwLT5zcHRbaV0pLCB0cnVlLCBmYWxzZSwKKwkJCSByZXNldF9ob3N0X3Byb3RlY3Rpb24pOwogCX0KIAogCXJldHVybiAhbnJfcHJlc2VudDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCA5NDRjYzljLi5jMTc0MDRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC03NjcsNiArNzY3LDggQEAKIAkJcmR0c2NsbCh0c2NfdGhpcyk7CiAJCWRlbHRhID0gdmNwdS0+YXJjaC5ob3N0X3RzYyAtIHRzY190aGlzOwogCQlzdm0tPnZtY2ItPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKKwkJaWYgKGlzX25lc3RlZChzdm0pKQorCQkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKIAkJdmNwdS0+Y3B1ID0gY3B1OwogCQlrdm1fbWlncmF0ZV90aW1lcnModmNwdSk7CiAJCXN2bS0+YXNpZF9nZW5lcmF0aW9uID0gMDsKQEAgLTIwNTcsMTAgKzIwNTksMTQgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQ7CiAKLQkJcmR0c2NsbCh0c2MpOwotCQkqZGF0YSA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ICsgdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQl0c2Nfb2Zmc2V0ID0gc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJZWxzZQorCQkJdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0OworCisJCSpkYXRhID0gdHNjX29mZnNldCArIG5hdGl2ZV9yZWFkX3RzYygpOwogCQlicmVhazsKIAl9CiAJY2FzZSBNU1JfSzZfU1RBUjoKQEAgLTIxNDYsMTAgKzIxNTIsMTcgQEAKIAogCXN3aXRjaCAoZWN4KSB7CiAJY2FzZSBNU1JfSUEzMl9UU0M6IHsKLQkJdTY0IHRzYzsKKwkJdTY0IHRzY19vZmZzZXQgPSBkYXRhIC0gbmF0aXZlX3JlYWRfdHNjKCk7CisJCXU2NCBnX3RzY19vZmZzZXQgPSAwOwogCi0JCXJkdHNjbGwodHNjKTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSBkYXRhIC0gdHNjOworCQlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJCWdfdHNjX29mZnNldCA9IHN2bS0+dm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IC0KKwkJCQkgICAgICAgc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldDsKKwkJCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0OworCQl9CisKKwkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgPSB0c2Nfb2Zmc2V0ICsgZ190c2Nfb2Zmc2V0OworCiAJCWJyZWFrOwogCX0KIAljYXNlIE1TUl9LNl9TVEFSOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IGYzODEyMDEuLmVkNTNiNDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTcwOSw3ICs3MDksNyBAQAogCWlmICh2Y3B1LT5jcHUgIT0gY3B1KSB7CiAJCXZjcHVfY2xlYXIodm14KTsKIAkJa3ZtX21pZ3JhdGVfdGltZXJzKHZjcHUpOwotCQl2cGlkX3N5bmNfdmNwdV9hbGwodm14KTsKKwkJc2V0X2JpdChLVk1fUkVRX1RMQl9GTFVTSCwgJnZjcHUtPnJlcXVlc3RzKTsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJbGlzdF9hZGQoJnZteC0+bG9jYWxfdmNwdXNfbGluaywKIAkJCSAmcGVyX2NwdSh2Y3B1c19vbl9jcHUsIGNwdSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGJlNDUxZWU0NC4uYWUwN2QyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMTU5MSw2ICsxNTkxLDggQEAKIAogCWlmIChjcHVpZC0+bmVudCA8IDEpCiAJCWdvdG8gb3V0OworCWlmIChjcHVpZC0+bmVudCA+IEtWTV9NQVhfQ1BVSURfRU5UUklFUykKKwkJY3B1aWQtPm5lbnQgPSBLVk1fTUFYX0NQVUlEX0VOVFJJRVM7CiAJciA9IC1FTk9NRU07CiAJY3B1aWRfZW50cmllcyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyKSAqIGNwdWlkLT5uZW50KTsKIAlpZiAoIWNwdWlkX2VudHJpZXMpCkBAIC0xNjkwLDcgKzE2OTIsNyBAQAogCXVuc2lnbmVkIGJhbmtfbnVtID0gbWNnX2NhcCAmIDB4ZmYsIGJhbms7CiAKIAlyID0gLUVJTlZBTDsKLQlpZiAoIWJhbmtfbnVtKQorCWlmICghYmFua19udW0gfHwgYmFua19udW0gPj0gS1ZNX01BWF9NQ0VfQkFOS1MpCiAJCWdvdG8gb3V0OwogCWlmIChtY2dfY2FwICYgfihLVk1fTUNFX0NBUF9TVVBQT1JURUQgfCAweGZmIHwgMHhmZjAwMDApKQogCQlnb3RvIG91dDsKQEAgLTQwNDksNyArNDA1MSw3IEBACiAJcmV0dXJuIGt2bV93cml0ZV9ndWVzdF92aXJ0KGR0YWJsZS5iYXNlICsgaW5kZXgqOCwgc2VnX2Rlc2MsIHNpemVvZigqc2VnX2Rlc2MpLCB2Y3B1KTsKIH0KIAotc3RhdGljIHUzMiBnZXRfdHNzX2Jhc2VfYWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCitzdGF0aWMgZ3BhX3QgZ2V0X3Rzc19iYXNlX2FkZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKnNlZ19kZXNjKQogewogCXUzMiBiYXNlX2FkZHIgPSBnZXRfZGVzY19iYXNlKHNlZ19kZXNjKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9NYWtlZmlsZSBiL2FyY2gveDg2L2xpYi9NYWtlZmlsZQppbmRleCA5ZTYwOTIwLi44NWY1ZGI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xNiw3ICsxNiw5IEBACiAgICAgICAgIGxpYi15ICs9IGNoZWNrc3VtXzMyLm8KICAgICAgICAgbGliLXkgKz0gc3Ryc3RyXzMyLm8KICAgICAgICAgbGliLXkgKz0gc2VtYXBob3JlXzMyLm8gc3RyaW5nXzMyLm8KLQoraWZuZXEgKCQoQ09ORklHX1g4Nl9DTVBYQ0hHNjQpLHkpCisgICAgICAgIGxpYi15ICs9IGNtcHhjaGc4Yl9lbXUubworZW5kaWYKICAgICAgICAgbGliLSQoQ09ORklHX1g4Nl9VU0VfM0ROT1cpICs9IG1teF8zMi5vCiBlbHNlCiAgICAgICAgIG9iai15ICs9IGlvXzY0Lm8gaW9tYXBfY29weV82NC5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvY21weGNoZzhiX2VtdS5TIGIvYXJjaC94ODYvbGliL2NtcHhjaGc4Yl9lbXUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhjYjcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbGliL2NtcHhjaGc4Yl9lbXUuUwpAQCAtMCwwICsxLDU3IEBACisvKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqCW9mIHRoZSBMaWNlbnNlLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KKyNpbmNsdWRlIDxhc20vZnJhbWUuaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisKKworLnRleHQKKworLyoKKyAqIElucHV0czoKKyAqICVlc2kgOiBtZW1vcnkgbG9jYXRpb24gdG8gY29tcGFyZQorICogJWVheCA6IGxvdyAzMiBiaXRzIG9mIG9sZCB2YWx1ZQorICogJWVkeCA6IGhpZ2ggMzIgYml0cyBvZiBvbGQgdmFsdWUKKyAqICVlYnggOiBsb3cgMzIgYml0cyBvZiBuZXcgdmFsdWUKKyAqICVlY3ggOiBoaWdoIDMyIGJpdHMgb2YgbmV3IHZhbHVlCisgKi8KK0VOVFJZKGNtcHhjaGc4Yl9lbXUpCitDRklfU1RBUlRQUk9DCisKKyMKKyMgRW11bGF0ZSAnY21weGNoZzhiICglZXNpKScgb24gVVAgZXhjZXB0IHdlIGRvbid0CisjIHNldCB0aGUgd2hvbGUgWkYgdGhpbmcgKGNhbGxlciB3aWxsIGp1c3QgY29tcGFyZQorIyBlYXg6ZWR4IHdpdGggdGhlIGV4cGVjdGVkIHZhbHVlKQorIworY21weGNoZzhiX2VtdToKKwlwdXNoZmwKKwljbGkKKworCWNtcGwgICglZXNpKSwgJWVheAorCWpuZSBub3Rfc2FtZQorCWNtcGwgNCglZXNpKSwgJWVkeAorCWpuZSBoYWxmX3NhbWUKKworCW1vdmwgJWVieCwgICglZXNpKQorCW1vdmwgJWVjeCwgNCglZXNpKQorCisJcG9wZmwKKwlyZXQKKworIG5vdF9zYW1lOgorCW1vdmwgICglZXNpKSwgJWVheAorIGhhbGZfc2FtZToKKwltb3ZsIDQoJWVzaSksICVlZHgKKworCXBvcGZsCisJcmV0CisKK0NGSV9FTkRQUk9DCitFTkRQUk9DKGNtcHhjaGc4Yl9lbXUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZSBiL2FyY2gveDg2L21tL01ha2VmaWxlCmluZGV4IDliNWE5ZjUuLjA2NjMwZDIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L21tL01ha2VmaWxlCkBAIC0xLDkgKzEsMTAgQEAKIG9iai15CTo9ICBpbml0Lm8gaW5pdF8kKEJJVFMpLm8gZmF1bHQubyBpb3JlbWFwLm8gZXh0YWJsZS5vIHBhZ2VhdHRyLm8gbW1hcC5vIFwKLQkgICAgcGF0Lm8gcGd0YWJsZS5vIHBoeXNhZGRyLm8gZ3VwLm8KKwkgICAgcGF0Lm8gcGd0YWJsZS5vIHBoeXNhZGRyLm8gZ3VwLm8gc2V0dXBfbngubwogCiAjIE1ha2Ugc3VyZSBfX3BoeXNfYWRkciBoYXMgbm8gc3RhY2twcm90ZWN0b3IKIG5vc3RhY2twIDo9ICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKQogQ0ZMQUdTX3BoeXNhZGRyLm8JCTo9ICQobm9zdGFja3ApCitDRkxBR1Nfc2V0dXBfbngubwkJOj0gJChub3N0YWNrcCkKIAogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHRsYi5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCAwNjA3MTE5Li43M2ZmZDU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC0yOCw2OSArMjgsNiBAQAogI2VuZGlmCiA7CiAKLWludCBueF9lbmFibGVkOwotCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQotc3RhdGljIGludCBkaXNhYmxlX254IF9fY3B1aW5pdGRhdGE7Ci0KLS8qCi0gKiBub2V4ZWMgPSBvbnxvZmYKLSAqCi0gKiBDb250cm9sIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzIGZvciBwcm9jZXNzZXMuCi0gKgotICogb24gICAgICBFbmFibGUKLSAqIG9mZiAgICAgRGlzYWJsZQotICovCi1zdGF0aWMgaW50IF9faW5pdCBub2V4ZWNfc2V0dXAoY2hhciAqc3RyKQotewotCWlmICghc3RyKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXN0cm5jbXAoc3RyLCAib24iLCAyKSkgewotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9OWDsKLQkJZGlzYWJsZV9ueCA9IDA7Ci0JfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJvZmYiLCAzKSkgewotCQlkaXNhYmxlX254ID0gMTsKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX05YOwotCX0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJub2V4ZWMiLCBub2V4ZWNfc2V0dXApOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotc3RhdGljIHZvaWQgX19pbml0IHNldF9ueCh2b2lkKQotewotCXVuc2lnbmVkIGludCB2WzRdLCBsLCBoOwotCi0JaWYgKGNwdV9oYXNfcGFlICYmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPiAweDgwMDAwMDAxKSkgewotCQljcHVpZCgweDgwMDAwMDAxLCAmdlswXSwgJnZbMV0sICZ2WzJdLCAmdlszXSk7Ci0KLQkJaWYgKCh2WzNdICYgKDEgPDwgMjApKSAmJiAhZGlzYWJsZV9ueCkgewotCQkJcmRtc3IoTVNSX0VGRVIsIGwsIGgpOwotCQkJbCB8PSBFRkVSX05YOwotCQkJd3Jtc3IoTVNSX0VGRVIsIGwsIGgpOwotCQkJbnhfZW5hYmxlZCA9IDE7Ci0JCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9OWDsKLQkJfQotCX0KLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X254KHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXZvaWQgX19jcHVpbml0IGNoZWNrX2VmZXIodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGVmZXI7Ci0KLQlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQotCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgX19pbml0IGZpbmRfZWFybHlfdGFibGVfc3BhY2UodW5zaWduZWQgbG9uZyBlbmQsIGludCB1c2VfcHNlLAogCQkJCQkgIGludCB1c2VfZ2JwYWdlcykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCAzMzRlNjNjLi4yZmViOWJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0xNzAsOCArMTcwLDcgQEAKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBoeXNfYWRkciwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKShwaHlzX2FkZHIgKyBzaXplKSwKIAkJCQlwcm90X3ZhbCwgbmV3X3Byb3RfdmFsKTsKLQkJCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCQkJcmV0dXJuIE5VTEw7CisJCQlnb3RvIGVycl9mcmVlX21lbXR5cGU7CiAJCX0KIAkJcHJvdF92YWwgPSBuZXdfcHJvdF92YWw7CiAJfQpAQCAtMTk3LDI2ICsxOTYsMjUgQEAKIAkgKi8KIAlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CiAJaWYgKCFhcmVhKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJfZnJlZV9tZW10eXBlOwogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBhcmVhLT5hZGRyOwogCi0JaWYgKGtlcm5lbF9tYXBfc3luY19tZW10eXBlKHBoeXNfYWRkciwgc2l6ZSwgcHJvdF92YWwpKSB7Ci0JCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCQlmcmVlX3ZtX2FyZWEoYXJlYSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAoa2VybmVsX21hcF9zeW5jX21lbXR5cGUocGh5c19hZGRyLCBzaXplLCBwcm90X3ZhbCkpCisJCWdvdG8gZXJyX2ZyZWVfYXJlYTsKIAotCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UodmFkZHIsIHZhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkgewotCQlmcmVlX21lbXR5cGUocGh5c19hZGRyLCBwaHlzX2FkZHIgKyBzaXplKTsKLQkJZnJlZV92bV9hcmVhKGFyZWEpOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZSh2YWRkciwgdmFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIHByb3QpKQorCQlnb3RvIGVycl9mcmVlX2FyZWE7CiAKIAlyZXRfYWRkciA9ICh2b2lkIF9faW9tZW0gKikgKHZhZGRyICsgb2Zmc2V0KTsKIAltbWlvdHJhY2VfaW9yZW1hcCh1bmFsaWduZWRfcGh5c19hZGRyLCB1bmFsaWduZWRfc2l6ZSwgcmV0X2FkZHIpOwogCiAJcmV0dXJuIHJldF9hZGRyOworZXJyX2ZyZWVfYXJlYToKKwlmcmVlX3ZtX2FyZWEoYXJlYSk7CitlcnJfZnJlZV9tZW10eXBlOgorCWZyZWVfbWVtdHlwZShwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOworCXJldHVybiBOVUxMOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC5jIGIvYXJjaC94ODYvbW0vcGF0LmMKaW5kZXggNzI1N2NmMy4uZTc4Y2QwZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGF0LmMKKysrIGIvYXJjaC94ODYvbW0vcGF0LmMKQEAgLTgxLDYgKzgxLDcgQEAKIHZvaWQgcGF0X2luaXQodm9pZCkKIHsKIAl1NjQgcGF0OworCWJvb2wgYm9vdF9jcHUgPSAhYm9vdF9wYXRfc3RhdGU7CiAKIAlpZiAoIXBhdF9lbmFibGVkKQogCQlyZXR1cm47CkBAIC0xMjIsOCArMTIzLDEwIEBACiAJCXJkbXNybChNU1JfSUEzMl9DUl9QQVQsIGJvb3RfcGF0X3N0YXRlKTsKIAogCXdybXNybChNU1JfSUEzMl9DUl9QQVQsIHBhdCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAieDg2IFBBVCBlbmFibGVkOiBjcHUgJWQsIG9sZCAweCVMeCwgbmV3IDB4JUx4XG4iLAotCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGJvb3RfcGF0X3N0YXRlLCBwYXQpOworCisJaWYgKGJvb3RfY3B1KQorCQlwcmludGsoS0VSTl9JTkZPICJ4ODYgUEFUIGVuYWJsZWQ6IGNwdSAlZCwgb2xkIDB4JUx4LCBuZXcgMHglTHhcbiIsCisJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIGJvb3RfcGF0X3N0YXRlLCBwYXQpOwogfQogCiAjdW5kZWYgUEFUCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9zZXR1cF9ueC5jIGIvYXJjaC94ODYvbW0vc2V0dXBfbnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTNkOGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vc2V0dXBfbnguYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKK2ludCBueF9lbmFibGVkOworCisjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfUEFFKQorc3RhdGljIGludCBkaXNhYmxlX254IF9fY3B1aW5pdGRhdGE7CisKKy8qCisgKiBub2V4ZWMgPSBvbnxvZmYKKyAqCisgKiBDb250cm9sIG5vbi1leGVjdXRhYmxlIG1hcHBpbmdzIGZvciBwcm9jZXNzZXMuCisgKgorICogb24gICAgICBFbmFibGUKKyAqIG9mZiAgICAgRGlzYWJsZQorICovCitzdGF0aWMgaW50IF9faW5pdCBub2V4ZWNfc2V0dXAoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXN0cm5jbXAoc3RyLCAib24iLCAyKSkgeworCQlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9OWDsKKwkJZGlzYWJsZV9ueCA9IDA7CisJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJvZmYiLCAzKSkgeworCQlkaXNhYmxlX254ID0gMTsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgJj0gfl9QQUdFX05YOworCX0KKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJub2V4ZWMiLCBub2V4ZWNfc2V0dXApOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQordm9pZCBfX2luaXQgc2V0X254KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZbNF0sIGwsIGg7CisKKwlpZiAoY3B1X2hhc19wYWUgJiYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+IDB4ODAwMDAwMDEpKSB7CisJCWNwdWlkKDB4ODAwMDAwMDEsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKKworCQlpZiAoKHZbM10gJiAoMSA8PCAyMCkpICYmICFkaXNhYmxlX254KSB7CisJCQlyZG1zcihNU1JfRUZFUiwgbCwgaCk7CisJCQlsIHw9IEVGRVJfTlg7CisJCQl3cm1zcihNU1JfRUZFUiwgbCwgaCk7CisJCQlueF9lbmFibGVkID0gMTsKKwkJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOworCQl9CisJfQorfQorI2Vsc2UKK3ZvaWQgc2V0X254KHZvaWQpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKK3ZvaWQgX19jcHVpbml0IGNoZWNrX2VmZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGVmZXI7CisKKwlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOworCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQorCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2kzODYuYyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKaW5kZXggNTJlNjJlNS4uYjIyZDEzYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2kzODYuYworKysgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgbGF0KTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwY2lfbW1hcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBjaV9tbWFwX29wcyA9IHsKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMgYi9hcmNoL3g4Ni94ZW4vZGVidWdmcy5jCmluZGV4IGI1MzIyNWQuLmUxMzNjZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9kZWJ1Z2ZzLmMKKysrIGIvYXJjaC94ODYveGVuL2RlYnVnZnMuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHUzMl9hcnJheV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdTMyX2FycmF5X2ZvcHMgPSB7CiAJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJLm9wZW4JPSB1MzJfYXJyYXlfb3BlbiwKIAkucmVsZWFzZT0geGVuX2FycmF5X3JlbGVhc2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKaW5kZXggNTQ0ZWI3NC4uZGZiZjcwZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwpAQCAtMTc4LDYgKzE3OCw3IEBACiBzdGF0aWMgdm9pZCB4ZW5fY3B1aWQodW5zaWduZWQgaW50ICpheCwgdW5zaWduZWQgaW50ICpieCwKIAkJICAgICAgdW5zaWduZWQgaW50ICpjeCwgdW5zaWduZWQgaW50ICpkeCkKIHsKKwl1bnNpZ25lZCBtYXNrZWJ4ID0gfjA7CiAJdW5zaWduZWQgbWFza2VjeCA9IH4wOwogCXVuc2lnbmVkIG1hc2tlZHggPSB+MDsKIApAQCAtMTg1LDkgKzE4NiwxNiBAQAogCSAqIE1hc2sgb3V0IGluY29udmVuaWVudCBmZWF0dXJlcywgdG8gdHJ5IGFuZCBkaXNhYmxlIGFzIG1hbnkKIAkgKiB1bnN1cHBvcnRlZCBrZXJuZWwgc3Vic3lzdGVtcyBhcyBwb3NzaWJsZS4KIAkgKi8KLQlpZiAoKmF4ID09IDEpIHsKKwlzd2l0Y2ggKCpheCkgeworCWNhc2UgMToKIAkJbWFza2VjeCA9IGNwdWlkX2xlYWYxX2VjeF9tYXNrOwogCQltYXNrZWR4ID0gY3B1aWRfbGVhZjFfZWR4X21hc2s7CisJCWJyZWFrOworCisJY2FzZSAweGI6CisJCS8qIFN1cHByZXNzIGV4dGVuZGVkIHRvcG9sb2d5IHN0dWZmICovCisJCW1hc2tlYnggPSAwOworCQlicmVhazsKIAl9CiAKIAlhc20oWEVOX0VNVUxBVEVfUFJFRklYICJjcHVpZCIKQEAgLTE5Nyw2ICsyMDUsNyBAQAogCQkgICI9ZCIgKCpkeCkKIAkJOiAiMCIgKCpheCksICIyIiAoKmN4KSk7CiAKKwkqYnggJj0gbWFza2VieDsKIAkqY3ggJj0gbWFza2VjeDsKIAkqZHggJj0gbWFza2VkeDsKIH0KQEAgLTEwNzUsNiArMTA4NCw4IEBACiAJICogU2V0IHVwIHNvbWUgcGFnZXRhYmxlIHN0YXRlIGJlZm9yZSBzdGFydGluZyB0byBzZXQgYW55IHB0ZXMuCiAJICovCiAKKwl4ZW5faW5pdF9tbXVfb3BzKCk7CisKIAkvKiBQcmV2ZW50IHVud2FudGVkIGJpdHMgZnJvbSBiZWluZyBzZXQgaW4gUFRFcy4gKi8KIAlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfR0xPQkFMOwogCWlmICgheGVuX2luaXRpYWxfZG9tYWluKCkpCkBAIC0xMDgyLDYgKzEwOTMsMTEgQEAKIAogCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX0lPTUFQOwogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIFdvcmsgb3V0IGlmIHdlIHN1cHBvcnQgTlggKi8KKwljaGVja19lZmVyKCk7CisjZW5kaWYKKwogCXhlbl9zZXR1cF9mZWF0dXJlcygpOwogCiAJLyogR2V0IG1mbiBsaXN0ICovCkBAIC0xMDk0LDcgKzExMTAsNiBAQAogCSAqLwogCXhlbl9zZXR1cF9zdGFja3Byb3RlY3RvcigpOwogCi0JeGVuX2luaXRfbW11X29wcygpOwogCXhlbl9pbml0X2lycV9vcHMoKTsKIAl4ZW5faW5pdF9jcHVpZF9tYXNrKCk7CiAKQEAgLTExMjMsMTEgKzExMzgsNiBAQAogCiAJcGdkID0gKHBnZF90ICopeGVuX3N0YXJ0X2luZm8tPnB0X2Jhc2U7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JLyogV29yayBvdXQgaWYgd2Ugc3VwcG9ydCBOWCAqLwotCWNoZWNrX2VmZXIoKTsKLSNlbmRpZgotCiAJLyogRG9uJ3QgZG8gdGhlIGZ1bGwgdmNwdV9pbmZvIHBsYWNlbWVudCBzdHVmZiB1bnRpbCB3ZSBoYXZlIGEKIAkgICBwb3NzaWJsZSBtYXAgYW5kIGEgbm9uLWR1bW15IHNoYXJlZF9pbmZvLiAqLwogCXBlcl9jcHUoeGVuX3ZjcHUsIDApID0gJkhZUEVSVklTT1Jfc2hhcmVkX2luZm8tPnZjcHVfaW5mb1swXTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCmluZGV4IDE5MDg1ZmYuLjE5ZjdkZjMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwpAQCAtMTMsNiArMTMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDkyMWI2ZmYuLjliNTI2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNSw2ICsxNSw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CkBAIC0xMDcsNDEgKzEwOSwxOCBAQAogCiAgIC5maXh1cCAgIDogeyAqKC5maXh1cCkgfQogCi0gIC4gPSBBTElHTigxNik7Ci0KLSAgX19leF90YWJsZSA6IHsKLSAgICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOwotICAgICooX19leF90YWJsZSkKLSAgICBfX3N0b3BfX19leF90YWJsZSA9IC47Ci0gIH0KLQorICBFWENFUFRJT05fVEFCTEUoMTYpCiAgIC8qIERhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUpOwogICBfZmRhdGEgPSAuOwotICAuZGF0YSA6Ci0gIHsKLSAgICBEQVRBX0RBVEEKLSAgICBDT05TVFJVQ1RPUlMKLSAgICAuID0gQUxJR04oWENIQUxfSUNBQ0hFX0xJTkVTSVpFKTsKLSAgICAqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQotICB9Ci0KKyAgUldfREFUQV9TRUNUSU9OKFhDSEFMX0lDQUNIRV9MSU5FU0laRSwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsKIAotICAvKiBUaGUgaW5pdGlhbCB0YXNrICovCi0gIC4gPSBBTElHTig4MTkyKTsKLSAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQotCiAgIC8qIEluaXRpYWxpemF0aW9uIGNvZGUgYW5kIGRhdGE6ICovCiAKLSAgLiA9IEFMSUdOKDEgPDwgMTIpOworICAuID0gQUxJR04oUEFHRV9TSVpFKTsKICAgX19pbml0X2JlZ2luID0gLjsKLSAgLmluaXQudGV4dCA6IHsKLSAgCV9zaW5pdHRleHQgPSAuOwotCUlOSVRfVEVYVAotCV9laW5pdHRleHQgPSAuOwotICB9CisgIElOSVRfVEVYVF9TRUNUSU9OKFBBR0VfU0laRSkKIAogICAuaW5pdC5kYXRhIDoKICAgewpAQCAtMTY4LDM2ICsxNDcsMTUgQEAKIAkJICAgLkRlYnVnSW50ZXJydXB0VmVjdG9yLnRleHQpOwogICAKICAgICBfX2Jvb3RfcmVsb2NfdGFibGVfZW5kID0gQUJTT0xVVEUoLikgOworCisgICAgSU5JVF9TRVRVUChYQ0hBTF9JQ0FDSEVfTElORVNJWkUpCisgICAgSU5JVF9DQUxMUworICAgIENPTl9JTklUQ0FMTAorICAgIFNFQ1VSSVRZX0lOSVRDQUxMCisgICAgSU5JVF9SQU1fRlMKICAgfQogCi0gIC4gPSBBTElHTihYQ0hBTF9JQ0FDSEVfTElORVNJWkUpOwotCi0gIF9fc2V0dXBfc3RhcnQgPSAuOwotICAuaW5pdC5zZXR1cCA6IHsgKiguaW5pdC5zZXR1cCkgfQotICBfX3NldHVwX2VuZCA9IC47Ci0KLSAgX19pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5pbml0Y2FsbC5pbml0IDogewotCUlOSVRDQUxMUwotICB9Ci0gIF9faW5pdGNhbGxfZW5kID0gLjsKLQotICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47Ci0gIC5jb25faW5pdGNhbGwuaW5pdCA6IHsgKiguY29uX2luaXRjYWxsLmluaXQpIH0KLSAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKLQotICBTRUNVUklUWV9JTklUCi0KLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotICAuID0gQUxJR04oNDA5Nik7Ci0gIF9faW5pdHJhbWZzX3N0YXJ0ID0uOwotICAuaW5pdC5yYW1mcyA6IHsgKiguaW5pdC5yYW1mcykgfQotICBfX2luaXRyYW1mc19lbmQgPSAuOwotI2VuZGlmCi0KLSAgUEVSQ1BVKDQwOTYpCi0KKyAgUEVSQ1BVKFBBR0VfU0laRSkKIAogICAvKiBXZSBuZWVkIHRoaXMgZHVtbXkgc2VnbWVudCBoZXJlICovCiAKQEAgLTI1MiwxNiArMjEwLDExIEBACiAJCSAgLkRvdWJsZUV4Y2VwdGlvblZlY3Rvci5saXRlcmFsKQogCiAgIC4gPSAoTE9BREFERFIoIC5Eb3VibGVFeGNlcHRpb25WZWN0b3IudGV4dCApICsgU0laRU9GKCAuRG91YmxlRXhjZXB0aW9uVmVjdG9yLnRleHQgKSArIDMpICYgfiAzOwotICAuID0gQUxJR04oMSA8PCAxMik7CisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwogCiAgIF9faW5pdF9lbmQgPSAuOwogCi0gIC4gPSBBTElHTig4MTkyKTsKLQotICAvKiBCU1Mgc2VjdGlvbiAqLwotICBfYnNzX3N0YXJ0ID0gLjsKLSAgLmJzcyA6IHsgKiguYnNzLnBhZ2VfYWxpZ25lZCkgKiguYnNzKSB9Ci0gIF9ic3NfZW5kID0gLjsKKyAgQlNTX1NFQ1RJT04oMCwgODE5MiwgMCkKIAogICBfZW5kID0gLjsKIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWJhcnJpZXIuYyBiL2Jsb2NrL2Jsay1iYXJyaWVyLmMKaW5kZXggNjU5M2FiMy4uODg3M2I5YiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWJhcnJpZXIuYworKysgYi9ibG9jay9ibGstYmFycmllci5jCkBAIC0zNTAsNiArMzUwLDcgQEAKIAogCWlmIChiaW8tPmJpX3ByaXZhdGUpCiAJCWNvbXBsZXRlKGJpby0+YmlfcHJpdmF0ZSk7CisJX19mcmVlX3BhZ2UoYmlvX3BhZ2UoYmlvKSk7CiAKIAliaW9fcHV0KGJpbyk7CiB9CkBAIC0zNzIsMzAgKzM3Myw1MCBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmRldik7CiAJaW50IHR5cGUgPSBmbGFncyAmIERJU0NBUkRfRkxfQkFSUklFUiA/CiAJCURJU0NBUkRfQkFSUklFUiA6IERJU0NBUkRfTk9CQVJSSUVSOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmICghcS0+cHJlcGFyZV9kaXNjYXJkX2ZuKQorCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXdoaWxlIChucl9zZWN0cyAmJiAhcmV0KSB7Ci0JCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19hbGxvYyhnZnBfbWFzaywgMCk7Ci0JCWlmICghYmlvKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXVuc2lnbmVkIGludCBzZWN0b3Jfc2l6ZSA9IHEtPmxpbWl0cy5sb2dpY2FsX2Jsb2NrX3NpemU7CisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzID0KKwkJCW1pbihxLT5saW1pdHMubWF4X2Rpc2NhcmRfc2VjdG9ycywgVUlOVF9NQVggPj4gOSk7CiAKKwkJYmlvID0gYmlvX2FsbG9jKGdmcF9tYXNrLCAxKTsKKwkJaWYgKCFiaW8pCisJCQlnb3RvIG91dDsKKwkJYmlvLT5iaV9zZWN0b3IgPSBzZWN0b3I7CiAJCWJpby0+YmlfZW5kX2lvID0gYmxrZGV2X2Rpc2NhcmRfZW5kX2lvOwogCQliaW8tPmJpX2JkZXYgPSBiZGV2OwogCQlpZiAoZmxhZ3MgJiBESVNDQVJEX0ZMX1dBSVQpCiAJCQliaW8tPmJpX3ByaXZhdGUgPSAmd2FpdDsKIAotCQliaW8tPmJpX3NlY3RvciA9IHNlY3RvcjsKKwkJLyoKKwkJICogQWRkIGEgemVyb2VkIG9uZS1zZWN0b3IgcGF5bG9hZCBhcyB0aGF0J3Mgd2hhdAorCQkgKiBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgbmVlZC4gIElmIHdlJ2xsIGV2ZXIgbmVlZAorCQkgKiBtb3JlIHRoZSBpbnRlcmZhY2Ugd2lsbCBuZWVkIHJldmlzaXRpbmcuCisJCSAqLworCQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0X2ZyZWVfYmlvOworCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgc2VjdG9yX3NpemUsIDApIDwgc2VjdG9yX3NpemUpCisJCQlnb3RvIG91dF9mcmVlX3BhZ2U7CiAKLQkJaWYgKG5yX3NlY3RzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpIHsKLQkJCWJpby0+Ymlfc2l6ZSA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpIDw8IDk7Ci0JCQlucl9zZWN0cyAtPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKLQkJCXNlY3RvciArPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKTsKKwkJLyoKKwkJICogQW5kIG92ZXJyaWRlIHRoZSBiaW8gc2l6ZSAtIHRoZSB3YXkgZGlzY2FyZCB3b3JrcyB3ZQorCQkgKiB0b3VjaCBtYW55IG1vcmUgYmxvY2tzIG9uIGRpc2sgdGhhbiB0aGUgYWN0dWFsIHBheWxvYWQKKwkJICogbGVuZ3RoLgorCQkgKi8KKwkJaWYgKG5yX3NlY3RzID4gbWF4X2Rpc2NhcmRfc2VjdG9ycykgeworCQkJYmlvLT5iaV9zaXplID0gbWF4X2Rpc2NhcmRfc2VjdG9ycyA8PCA5OworCQkJbnJfc2VjdHMgLT0gbWF4X2Rpc2NhcmRfc2VjdG9yczsKKwkJCXNlY3RvciArPSBtYXhfZGlzY2FyZF9zZWN0b3JzOwogCQl9IGVsc2UgewogCQkJYmlvLT5iaV9zaXplID0gbnJfc2VjdHMgPDwgOTsKIAkJCW5yX3NlY3RzID0gMDsKQEAgLTQxNCw1ICs0MzUsMTEgQEAKIAkJYmlvX3B1dChiaW8pOwogCX0KIAlyZXR1cm4gcmV0Oworb3V0X2ZyZWVfcGFnZToKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK291dF9mcmVlX2JpbzoKKwliaW9fcHV0KGJpbyk7CitvdXQ6CisJcmV0dXJuIC1FTk9NRU07CiB9CiBFWFBPUlRfU1lNQk9MKGJsa2Rldl9pc3N1ZV9kaXNjYXJkKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDgxMzUyMjguLjcxZGE1MTEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImJsay5oIgogCiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKGJsb2NrX3JlbWFwKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoYmxvY2tfcnFfcmVtYXApOwogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MX0dQTChibG9ja19iaW9fY29tcGxldGUpOwogCiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pOwpAQCAtMTAyOSw3ICsxMDMwLDcgQEAKIAlpZiAobm93ID09IHBhcnQtPnN0YW1wKQogCQlyZXR1cm47CiAKLQlpZiAocGFydC0+aW5fZmxpZ2h0KSB7CisJaWYgKHBhcnRfaW5fZmxpZ2h0KHBhcnQpKSB7CiAJCV9fcGFydF9zdGF0X2FkZChjcHUsIHBhcnQsIHRpbWVfaW5fcXVldWUsCiAJCQkJcGFydF9pbl9mbGlnaHQocGFydCkgKiAobm93IC0gcGFydC0+c3RhbXApKTsKIAkJX19wYXJ0X3N0YXRfYWRkKGNwdSwgcGFydCwgaW9fdGlja3MsIChub3cgLSBwYXJ0LT5zdGFtcCkpOwpAQCAtMTEyNCw3ICsxMTI1LDYgQEAKIAkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RJU0NBUkQ7CiAJCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSkKIAkJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKLQkJcmVxLT5xLT5wcmVwYXJlX2Rpc2NhcmRfZm4ocmVxLT5xLCByZXEpOwogCX0gZWxzZSBpZiAodW5saWtlbHkoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfQkFSUklFUikpKQogCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfSEFSREJBUlJJRVI7CiAKQEAgLTExNjEsNyArMTE2MSw3IEBACiAJY29uc3QgdW5zaWduZWQgaW50IGZmID0gYmlvLT5iaV9ydyAmIFJFUV9GQUlMRkFTVF9NQVNLOwogCWludCByd19mbGFnczsKIAotCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJiBiaW9faGFzX2RhdGEoYmlvKSAmJgorCWlmIChiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19CQVJSSUVSKSAmJgogCSAgICAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwogCQlyZXR1cm4gMDsKQEAgLTE0MzcsNyArMTQzNyw4IEBACiAJCQlnb3RvIGVuZF9pbzsKIAkJfQogCi0JCWlmICh1bmxpa2VseShucl9zZWN0b3JzID4gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkpKSB7CisJCWlmICh1bmxpa2VseSghYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgJiYKKwkJCSAgICAgbnJfc2VjdG9ycyA+IHF1ZXVlX21heF9od19zZWN0b3JzKHEpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJiaW8gdG9vIGJpZyBkZXZpY2UgJXMgKCV1ID4gJXUpXG4iLAogCQkJICAgICAgIGJkZXZuYW1lKGJpby0+YmlfYmRldiwgYiksCiAJCQkgICAgICAgYmlvX3NlY3RvcnMoYmlvKSwKQEAgLTE0NzAsNyArMTQ3MSw3IEBACiAJCQlnb3RvIGVuZF9pbzsKIAogCQlpZiAoYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfRElTQ0FSRCkgJiYKLQkJICAgICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwkJICAgICFibGtfcXVldWVfZGlzY2FyZChxKSkgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCQlnb3RvIGVuZF9pbzsKIAkJfQpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCA4MzQxM2ZmLi42NmQ0YWE4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtMzQsMjMgKzM0LDYgQEAKIEVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3ByZXBfcnEpOwogCiAvKioKLSAqIGJsa19xdWV1ZV9zZXRfZGlzY2FyZCAtIHNldCBhIGRpc2NhcmRfc2VjdG9ycyBmdW5jdGlvbiBmb3IgcXVldWUKLSAqIEBxOgkJcXVldWUKLSAqIEBkZm46CXByZXBhcmVfZGlzY2FyZCBmdW5jdGlvbgotICoKLSAqIEl0J3MgcG9zc2libGUgZm9yIGEgcXVldWUgdG8gcmVnaXN0ZXIgYSBkaXNjYXJkIGNhbGxiYWNrIHdoaWNoIGlzIHVzZWQKLSAqIHRvIHRyYW5zZm9ybSBhIGRpc2NhcmQgcmVxdWVzdCBpbnRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGUKLSAqIGhhcmR3YXJlLiBJZiBub25lIGlzIHJlZ2lzdGVyZWQsIHRoZW4gZGlzY2FyZCByZXF1ZXN0cyBhcmUgZmFpbGVkCi0gKiB3aXRoICVFT1BOT1RTVVBQLgotICoKLSAqLwotdm9pZCBibGtfcXVldWVfc2V0X2Rpc2NhcmQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHByZXBhcmVfZGlzY2FyZF9mbiAqZGZuKQotewotCXEtPnByZXBhcmVfZGlzY2FyZF9mbiA9IGRmbjsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3NldF9kaXNjYXJkKTsKLQotLyoqCiAgKiBibGtfcXVldWVfbWVyZ2VfYnZlYyAtIHNldCBhIG1lcmdlX2J2ZWMgZnVuY3Rpb24gZm9yIHF1ZXVlCiAgKiBAcToJCXF1ZXVlCiAgKiBAbWJmbjoJbWVyZ2VfYnZlY19mbgpAQCAtMTExLDcgKzk0LDkgQEAKIAlsaW0tPm1heF9od19zZWdtZW50cyA9IE1BWF9IV19TRUdNRU5UUzsKIAlsaW0tPnNlZ19ib3VuZGFyeV9tYXNrID0gQkxLX1NFR19CT1VOREFSWV9NQVNLOwogCWxpbS0+bWF4X3NlZ21lbnRfc2l6ZSA9IE1BWF9TRUdNRU5UX1NJWkU7Ci0JbGltLT5tYXhfc2VjdG9ycyA9IGxpbS0+bWF4X2h3X3NlY3RvcnMgPSBTQUZFX01BWF9TRUNUT1JTOworCWxpbS0+bWF4X3NlY3RvcnMgPSBCTEtfREVGX01BWF9TRUNUT1JTOworCWxpbS0+bWF4X2h3X3NlY3RvcnMgPSBJTlRfTUFYOworCWxpbS0+bWF4X2Rpc2NhcmRfc2VjdG9ycyA9IFNBRkVfTUFYX1NFQ1RPUlM7CiAJbGltLT5sb2dpY2FsX2Jsb2NrX3NpemUgPSBsaW0tPnBoeXNpY2FsX2Jsb2NrX3NpemUgPSBsaW0tPmlvX21pbiA9IDUxMjsKIAlsaW0tPmJvdW5jZV9wZm4gPSAodW5zaWduZWQgbG9uZykoQkxLX0JPVU5DRV9BTlkgPj4gUEFHRV9TSElGVCk7CiAJbGltLT5hbGlnbm1lbnRfb2Zmc2V0ID0gMDsKQEAgLTE2NCw2ICsxNDksNyBAQAogCXEtPnVucGx1Z190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcTsKIAogCWJsa19zZXRfZGVmYXVsdF9saW1pdHMoJnEtPmxpbWl0cyk7CisJYmxrX3F1ZXVlX21heF9zZWN0b3JzKHEsIFNBRkVfTUFYX1NFQ1RPUlMpOwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGVyIGRpZG4ndCBzdXBwbHkgYSBsb2NrLCBmYWxsIGJhY2sgdG8gb3VyIGVtYmVkZGVkCkBAIC0yNTQsNiArMjQwLDE4IEBACiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyk7CiAKIC8qKgorICogYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMgLSBzZXQgbWF4IHNlY3RvcnMgZm9yIGEgc2luZ2xlIGRpc2NhcmQKKyAqIEBxOiAgdGhlIHJlcXVlc3QgcXVldWUgZm9yIHRoZSBkZXZpY2UKKyAqIEBtYXhfZGlzY2FyZF9zZWN0b3JzOiBtYXhpbXVtIG51bWJlciBvZiBzZWN0b3JzIHRvIGRpc2NhcmQKKyAqKi8KK3ZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKQoreworCXEtPmxpbWl0cy5tYXhfZGlzY2FyZF9zZWN0b3JzID0gbWF4X2Rpc2NhcmRfc2VjdG9yczsKK30KK0VYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMpOworCisvKioKICAqIGJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyAtIHNldCBtYXggcGh5cyBzZWdtZW50cyBmb3IgYSByZXF1ZXN0IGZvciB0aGlzIHF1ZXVlCiAgKiBAcTogIHRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCiAgKiBAbWF4X3NlZ21lbnRzOiAgbWF4IG51bWJlciBvZiBzZWdtZW50cwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCBiNzhjOWMzLi44YTZkODFhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiAJaWYgKHJldCkgewogCQlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9SRU1PVkUpOwogCQlrb2JqZWN0X2RlbCgmcS0+a29iaik7CisJCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGlza190b19kZXYoZGlzaykpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNDY1LDExICs0NjYsMTEgQEAKIAlpZiAoV0FSTl9PTighcSkpCiAJCXJldHVybjsKIAotCWlmIChxLT5yZXF1ZXN0X2ZuKSB7CisJaWYgKHEtPnJlcXVlc3RfZm4pCiAJCWVsdl91bnJlZ2lzdGVyX3F1ZXVlKHEpOwogCi0JCWtvYmplY3RfdWV2ZW50KCZxLT5rb2JqLCBLT0JKX1JFTU9WRSk7Ci0JCWtvYmplY3RfZGVsKCZxLT5rb2JqKTsKLQkJa29iamVjdF9wdXQoJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKLQl9CisJa29iamVjdF91ZXZlbnQoJnEtPmtvYmosIEtPQkpfUkVNT1ZFKTsKKwlrb2JqZWN0X2RlbCgmcS0+a29iaik7CisJYmxrX3RyYWNlX3JlbW92ZV9zeXNmcyhkaXNrX3RvX2RldihkaXNrKSk7CisJa29iamVjdF9wdXQoJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10YWcuYyBiL2Jsb2NrL2Jsay10YWcuYwppbmRleCAyZTVjZmViLi42YjBmNTJjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstdGFnLmMKKysrIGIvYmxvY2svYmxrLXRhZy5jCkBAIC0zNTksNyArMzU5LDcgQEAKIAkJbWF4X2RlcHRoIC09IDI7CiAJCWlmICghbWF4X2RlcHRoKQogCQkJbWF4X2RlcHRoID0gMTsKLQkJaWYgKHEtPmluX2ZsaWdodFswXSA+IG1heF9kZXB0aCkKKwkJaWYgKHEtPmluX2ZsaWdodFtCTEtfUldfQVNZTkNdID4gbWF4X2RlcHRoKQogCQkJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCAxY2E4MTNiLi5hYTFlOTUzIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCXVuc2lnbmVkIGludCBjZnFfc2xpY2VbMl07CiAJdW5zaWduZWQgaW50IGNmcV9zbGljZV9hc3luY19ycTsKIAl1bnNpZ25lZCBpbnQgY2ZxX3NsaWNlX2lkbGU7CisJdW5zaWduZWQgaW50IGNmcV9sYXRlbmN5OwogCiAJc3RydWN0IGxpc3RfaGVhZCBjaWNfbGlzdDsKIApAQCAtMTgwLDYgKzE4MSw4IEBACiAJICogRmFsbGJhY2sgZHVtbXkgY2ZxcSBmb3IgZXh0cmVtZSBPT00gY29uZGl0aW9ucwogCSAqLwogCXN0cnVjdCBjZnFfcXVldWUgb29tX2NmcXE7CisKKwl1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3N5bmNfcnE7CiB9OwogCiBlbnVtIGNmcXFfc3RhdGVfZmxhZ3MgewpAQCAtMTkzLDYgKzE5Niw3IEBACiAJQ0ZRX0NGUVFfRkxBR19zbGljZV9uZXcsCS8qIG5vIHJlcXVlc3RzIGRpc3BhdGNoZWQgaW4gc2xpY2UgKi8KIAlDRlFfQ0ZRUV9GTEFHX3N5bmMsCQkvKiBzeW5jaHJvbm91cyBxdWV1ZSAqLwogCUNGUV9DRlFRX0ZMQUdfY29vcCwJCS8qIGhhcyBkb25lIGEgY29vcCBqdW1wIG9mIHRoZSBxdWV1ZSAqLworCUNGUV9DRlFRX0ZMQUdfY29vcF9wcmVlbXB0LAkvKiBjb29wIHByZWVtcHQgKi8KIH07CiAKICNkZWZpbmUgQ0ZRX0NGUVFfRk5TKG5hbWUpCQkJCQkJXApAQCAtMjE5LDYgKzIyMyw3IEBACiBDRlFfQ0ZRUV9GTlMoc2xpY2VfbmV3KTsKIENGUV9DRlFRX0ZOUyhzeW5jKTsKIENGUV9DRlFRX0ZOUyhjb29wKTsKK0NGUV9DRlFRX0ZOUyhjb29wX3ByZWVtcHQpOwogI3VuZGVmIENGUV9DRlFRX0ZOUwogCiAjZGVmaW5lIGNmcV9sb2dfY2ZxcShjZnFkLCBjZnFxLCBmbXQsIGFyZ3MuLi4pCVwKQEAgLTIyNyw3ICsyMzIsNyBAQAogCWJsa19hZGRfdHJhY2VfbXNnKChjZnFkKS0+cXVldWUsICJjZnEgIiBmbXQsICMjYXJncykKIAogc3RhdGljIHZvaWQgY2ZxX2Rpc3BhdGNoX2luc2VydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLXN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqLCBpbnQsCitzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2dldF9xdWV1ZShzdHJ1Y3QgY2ZxX2RhdGEgKiwgYm9vbCwKIAkJCQkgICAgICAgc3RydWN0IGlvX2NvbnRleHQgKiwgZ2ZwX3QpOwogc3RhdGljIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ZxX2NpY19sb29rdXAoc3RydWN0IGNmcV9kYXRhICosCiAJCQkJCQlzdHJ1Y3QgaW9fY29udGV4dCAqKTsKQEAgLTIzOCwyNyArMjQzLDI0IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9xdWV1ZSAqY2ljX3RvX2NmcXEoc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMsCi0JCQkJCSAgICBpbnQgaXNfc3luYykKKwkJCQkJICAgIGJvb2wgaXNfc3luYykKIHsKLQlyZXR1cm4gY2ljLT5jZnFxWyEhaXNfc3luY107CisJcmV0dXJuIGNpYy0+Y2ZxcVtpc19zeW5jXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNpY19zZXRfY2ZxcShzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYywKLQkJCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBpbnQgaXNfc3luYykKKwkJCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBib29sIGlzX3N5bmMpCiB7Ci0JY2ljLT5jZnFxWyEhaXNfc3luY10gPSBjZnFxOworCWNpYy0+Y2ZxcVtpc19zeW5jXSA9IGNmcXE7CiB9CiAKIC8qCiAgKiBXZSByZWdhcmQgYSByZXF1ZXN0IGFzIFNZTkMsIGlmIGl0J3MgZWl0aGVyIGEgcmVhZCBvciBoYXMgdGhlIFNZTkMgYml0CiAgKiBzZXQgKGluIHdoaWNoIGNhc2UgaXQgY291bGQgYWxzbyBiZSBkaXJlY3QgV1JJVEUpLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjZnFfYmlvX3N5bmMoc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGlubGluZSBib29sIGNmcV9iaW9fc3luYyhzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQgfHwgYmlvX3J3X2ZsYWdnZWQoYmlvLCBCSU9fUldfU1lOQ0lPKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gYmlvX2RhdGFfZGlyKGJpbykgPT0gUkVBRCB8fCBiaW9fcndfZmxhZ2dlZChiaW8sIEJJT19SV19TWU5DSU8pOwogfQogCiAvKgpAQCAtMjg1LDcgKzI4Nyw3IEBACiAgKiBpZiBhIHF1ZXVlIGlzIG1hcmtlZCBzeW5jIGFuZCBoYXMgc3luYyBpbyBxdWV1ZWQuIEEgc3luYyBxdWV1ZSB3aXRoIGFzeW5jCiAgKiBpbyBvbmx5LCBzaG91bGQgbm90IGdldCBmdWxsIHN5bmMgc2xpY2UgbGVuZ3RoLgogICovCi1zdGF0aWMgaW5saW5lIGludCBjZnFfcHJpb19zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBzeW5jLAorc3RhdGljIGlubGluZSBpbnQgY2ZxX3ByaW9fc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIHN5bmMsCiAJCQkJIHVuc2lnbmVkIHNob3J0IHByaW8pCiB7CiAJY29uc3QgaW50IGJhc2Vfc2xpY2UgPSBjZnFkLT5jZnFfc2xpY2Vbc3luY107CkBAIC0zMTMsNyArMzE1LDcgQEAKICAqIGlzbid0IHZhbGlkIHVudGlsIHRoZSBmaXJzdCByZXF1ZXN0IGZyb20gdGhlIGRpc3BhdGNoIGlzIGFjdGl2YXRlZAogICogYW5kIHRoZSBzbGljZSB0aW1lIHNldC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgY2ZxX3NsaWNlX3VzZWQoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjZnFfc2xpY2VfdXNlZChzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCiAJCXJldHVybiAwOwpAQCAtNDg4LDcgKzQ5MCw3IEBACiAgKiB3ZSB3aWxsIHNlcnZpY2UgdGhlIHF1ZXVlcy4KICAqLwogc3RhdGljIHZvaWQgY2ZxX3NlcnZpY2VfdHJlZV9hZGQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJCSBpbnQgYWRkX2Zyb250KQorCQkJCSBib29sIGFkZF9mcm9udCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqKnAsICpwYXJlbnQ7CiAJc3RydWN0IGNmcV9xdWV1ZSAqX19jZnFxOwpAQCAtNTA0LDExICs1MDYsMjAgQEAKIAkJfSBlbHNlCiAJCQlyYl9rZXkgKz0gamlmZmllczsKIAl9IGVsc2UgaWYgKCFhZGRfZnJvbnQpIHsKKwkJLyoKKwkJICogR2V0IG91ciByYiBrZXkgb2Zmc2V0LiBTdWJ0cmFjdCBhbnkgcmVzaWR1YWwgc2xpY2UKKwkJICogdmFsdWUgY2FycmllZCBmcm9tIGxhc3Qgc2VydmljZS4gQSBuZWdhdGl2ZSByZXNpZAorCQkgKiBjb3VudCBpbmRpY2F0ZXMgc2xpY2Ugb3ZlcnJ1biwgYW5kIHRoaXMgc2hvdWxkIHBvc2l0aW9uCisJCSAqIHRoZSBuZXh0IHNlcnZpY2UgdGltZSBmdXJ0aGVyIGF3YXkgaW4gdGhlIHRyZWUuCisJCSAqLwogCQlyYl9rZXkgPSBjZnFfc2xpY2Vfb2Zmc2V0KGNmcWQsIGNmcXEpICsgamlmZmllczsKLQkJcmJfa2V5ICs9IGNmcXEtPnNsaWNlX3Jlc2lkOworCQlyYl9rZXkgLT0gY2ZxcS0+c2xpY2VfcmVzaWQ7CiAJCWNmcXEtPnNsaWNlX3Jlc2lkID0gMDsKLQl9IGVsc2UKLQkJcmJfa2V5ID0gMDsKKwl9IGVsc2UgeworCQlyYl9rZXkgPSAtSFo7CisJCV9fY2ZxcSA9IGNmcV9yYl9maXJzdCgmY2ZxZC0+c2VydmljZV90cmVlKTsKKwkJcmJfa2V5ICs9IF9fY2ZxcSA/IF9fY2ZxcS0+cmJfa2V5IDogamlmZmllczsKKwl9CiAKIAlpZiAoIVJCX0VNUFRZX05PREUoJmNmcXEtPnJiX25vZGUpKSB7CiAJCS8qCkBAIC01NDIsNyArNTUzLDcgQEAKIAkJCW4gPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoY2ZxX2NsYXNzX2lkbGUoY2ZxcSkgPiBjZnFfY2xhc3NfaWRsZShfX2NmcXEpKQogCQkJbiA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZSBpZiAocmJfa2V5IDwgX19jZnFxLT5yYl9rZXkpCisJCWVsc2UgaWYgKHRpbWVfYmVmb3JlKHJiX2tleSwgX19jZnFxLT5yYl9rZXkpKQogCQkJbiA9ICYoKnApLT5yYl9sZWZ0OwogCQllbHNlCiAJCQluID0gJigqcCktPnJiX3JpZ2h0OwpAQCAtODIyLDggKzgzMywxMCBAQAogCSAqIHJlcG9zaXRpb24gaW4gZmlmbyBpZiBuZXh0IGlzIG9sZGVyIHRoYW4gcnEKIAkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJnJxLT5xdWV1ZWxpc3QpICYmICFsaXN0X2VtcHR5KCZuZXh0LT5xdWV1ZWxpc3QpICYmCi0JICAgIHRpbWVfYmVmb3JlKG5leHQtPnN0YXJ0X3RpbWUsIHJxLT5zdGFydF90aW1lKSkKKwkgICAgdGltZV9iZWZvcmUocnFfZmlmb190aW1lKG5leHQpLCBycV9maWZvX3RpbWUocnEpKSkgewogCQlsaXN0X21vdmUoJnJxLT5xdWV1ZWxpc3QsICZuZXh0LT5xdWV1ZWxpc3QpOworCQlycV9zZXRfZmlmb190aW1lKHJxLCBycV9maWZvX3RpbWUobmV4dCkpOworCX0KIAogCWNmcV9yZW1vdmVfcmVxdWVzdChuZXh0KTsKIH0KQEAgLTgzOSw3ICs4NTIsNyBAQAogCSAqIERpc2FsbG93IG1lcmdlIG9mIGEgc3luYyBiaW8gaW50byBhbiBhc3luYyByZXF1ZXN0LgogCSAqLwogCWlmIChjZnFfYmlvX3N5bmMoYmlvKSAmJiAhcnFfaXNfc3luYyhycSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIExvb2t1cCB0aGUgY2ZxcSB0aGF0IHRoaXMgYmlvIHdpbGwgYmUgcXVldWVkIHdpdGguIEFsbG93CkBAIC04NDcsMTMgKzg2MCwxMCBAQAogCSAqLwogCWNpYyA9IGNmcV9jaWNfbG9va3VwKGNmcWQsIGN1cnJlbnQtPmlvX2NvbnRleHQpOwogCWlmICghY2ljKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGZhbHNlOwogCiAJY2ZxcSA9IGNpY190b19jZnFxKGNpYywgY2ZxX2Jpb19zeW5jKGJpbykpOwotCWlmIChjZnFxID09IFJRX0NGUVEocnEpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOworCXJldHVybiBjZnFxID09IFJRX0NGUVEocnEpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NmcV9zZXRfYWN0aXZlX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKQEAgLTg4MSw3ICs4OTEsNyBAQAogICovCiBzdGF0aWMgdm9pZAogX19jZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCSAgICBpbnQgdGltZWRfb3V0KQorCQkgICAgYm9vbCB0aW1lZF9vdXQpCiB7CiAJY2ZxX2xvZ19jZnFxKGNmcWQsIGNmcXEsICJzbGljZSBleHBpcmVkIHQ9JWQiLCB0aW1lZF9vdXQpOwogCkBAIC05MDksNyArOTE5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfc2xpY2VfZXhwaXJlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCB0aW1lZF9vdXQpCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZxX3NsaWNlX2V4cGlyZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBib29sIHRpbWVkX291dCkKIHsKIAlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY2ZxZC0+YWN0aXZlX3F1ZXVlOwogCkBAIC05MzcsMTAgKzk0NywxMyBAQAogewogCWlmICghY2ZxcSkgewogCQljZnFxID0gY2ZxX2dldF9uZXh0X3F1ZXVlKGNmcWQpOwotCQlpZiAoY2ZxcSkKKwkJaWYgKGNmcXEgJiYgIWNmcV9jZnFxX2Nvb3BfcHJlZW1wdChjZnFxKSkKIAkJCWNmcV9jbGVhcl9jZnFxX2Nvb3AoY2ZxcSk7CiAJfQogCisJaWYgKGNmcXEpCisJCWNmcV9jbGVhcl9jZnFxX2Nvb3BfcHJlZW1wdChjZnFxKTsKKwogCV9fY2ZxX3NldF9hY3RpdmVfcXVldWUoY2ZxZCwgY2ZxcSk7CiAJcmV0dXJuIGNmcXE7CiB9CkBAIC0xMDIxLDcgKzEwMzQsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX2Nsb3NlX2Nvb3BlcmF0b3Ioc3RydWN0IGNmcV9kYXRhICpjZnFkLAogCQkJCQkgICAgICBzdHJ1Y3QgY2ZxX3F1ZXVlICpjdXJfY2ZxcSwKLQkJCQkJICAgICAgaW50IHByb2JlKQorCQkJCQkgICAgICBib29sIHByb2JlKQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7CiAKQEAgLTEwODUsNiArMTA5OCwxNSBAQAogCWlmICghY2ljIHx8ICFhdG9taWNfcmVhZCgmY2ljLT5pb2MtPm5yX3Rhc2tzKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBJZiBvdXIgYXZlcmFnZSB0aGluayB0aW1lIGlzIGxhcmdlciB0aGFuIHRoZSByZW1haW5pbmcgdGltZQorCSAqIHNsaWNlLCB0aGVuIGRvbid0IGlkbGUuIFRoaXMgYXZvaWRzIG92ZXJydW5uaW5nIHRoZSBhbGxvdHRlZAorCSAqIHRpbWUgc2xpY2UuCisJICovCisJaWYgKHNhbXBsZV92YWxpZChjaWMtPnR0aW1lX3NhbXBsZXMpICYmCisJICAgIChjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzIDwgY2ljLT50dGltZV9tZWFuKSkKKwkJcmV0dXJuOworCiAJY2ZxX21hcmtfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7CiAKIAkvKgpAQCAtMTEyNCw5ICsxMTQ2LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpjZnFfY2hlY2tfZmlmbyhzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewotCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IGNmcXEtPmNmcWQ7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWludCBmaWZvOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IE5VTEw7CiAKIAlpZiAoY2ZxX2NmcXFfZmlmb19leHBpcmUoY2ZxcSkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTEzNiwxMyArMTE1NiwxMSBAQAogCWlmIChsaXN0X2VtcHR5KCZjZnFxLT5maWZvKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmaWZvID0gY2ZxX2NmcXFfc3luYyhjZnFxKTsKIAlycSA9IHJxX2VudHJ5X2ZpZm8oY2ZxcS0+Zmlmby5uZXh0KTsKLQotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBycS0+c3RhcnRfdGltZSArIGNmcWQtPmNmcV9maWZvX2V4cGlyZVtmaWZvXSkpCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHJxX2ZpZm9fdGltZShycSkpKQogCQlycSA9IE5VTEw7CiAKLQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgImZpZm89JXAiLCBycSk7CisJY2ZxX2xvZ19jZnFxKGNmcXEtPmNmcWQsIGNmcXEsICJmaWZvPSVwIiwgcnEpOwogCXJldHVybiBycTsKIH0KIApAQCAtMTI0MywxNiArMTI2MSw4MyBAQAogCXJldHVybiBkaXNwYXRjaGVkOwogfQogCitzdGF0aWMgYm9vbCBjZnFfbWF5X2Rpc3BhdGNoKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3sKKwl1bnNpZ25lZCBpbnQgbWF4X2Rpc3BhdGNoOworCisJLyoKKwkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTworCSAqLworCWlmIChjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJiBjZnFkLT5ycV9pbl9kcml2ZXJbQkxLX1JXX0FTWU5DXSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGFuIGFzeW5jIHF1ZXVlIGFuZCB3ZSBoYXZlIHN5bmMgSU8gaW4gZmxpZ2h0LCBsZXQgaXQgd2FpdAorCSAqLworCWlmIChjZnFkLT5zeW5jX2ZsaWdodCAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07CisJaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQorCQltYXhfZGlzcGF0Y2ggPSAxOworCisJLyoKKwkgKiBEb2VzIHRoaXMgY2ZxcSBhbHJlYWR5IGhhdmUgdG9vIG11Y2ggSU8gaW4gZmxpZ2h0PworCSAqLworCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IG1heF9kaXNwYXRjaCkgeworCQkvKgorCQkgKiBpZGxlIHF1ZXVlIG11c3QgYWx3YXlzIG9ubHkgaGF2ZSBhIHNpbmdsZSBJTyBpbiBmbGlnaHQKKwkJICovCisJCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKKwkJCXJldHVybiBmYWxzZTsKKworCQkvKgorCQkgKiBXZSBoYXZlIG90aGVyIHF1ZXVlcywgZG9uJ3QgYWxsb3cgbW9yZSBJTyBmcm9tIHRoaXMgb25lCisJCSAqLworCQlpZiAoY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFNvbGUgcXVldWUgdXNlciwgYWxsb3cgYmlnZ2VyIHNsaWNlCisJCSAqLworCQltYXhfZGlzcGF0Y2ggKj0gNDsKKwl9CisKKwkvKgorCSAqIEFzeW5jIHF1ZXVlcyBtdXN0IHdhaXQgYSBiaXQgYmVmb3JlIGJlaW5nIGFsbG93ZWQgZGlzcGF0Y2guCisJICogV2UgYWxzbyByYW1wIHVwIHRoZSBkaXNwYXRjaCBkZXB0aCBncmFkdWFsbHkgZm9yIGFzeW5jIElPLAorCSAqIGJhc2VkIG9uIHRoZSBsYXN0IHN5bmMgSU8gd2Ugc2VydmljZWQKKwkgKi8KKwlpZiAoIWNmcV9jZnFxX3N5bmMoY2ZxcSkgJiYgY2ZxZC0+Y2ZxX2xhdGVuY3kpIHsKKwkJdW5zaWduZWQgbG9uZyBsYXN0X3N5bmMgPSBqaWZmaWVzIC0gY2ZxZC0+bGFzdF9lbmRfc3luY19ycTsKKwkJdW5zaWduZWQgaW50IGRlcHRoOworCisJCWRlcHRoID0gbGFzdF9zeW5jIC8gY2ZxZC0+Y2ZxX3NsaWNlWzFdOworCQlpZiAoIWRlcHRoICYmICFjZnFxLT5kaXNwYXRjaGVkKQorCQkJZGVwdGggPSAxOworCQlpZiAoZGVwdGggPCBtYXhfZGlzcGF0Y2gpCisJCQltYXhfZGlzcGF0Y2ggPSBkZXB0aDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIGJlbG93IHRoZSBjdXJyZW50IG1heCwgYWxsb3cgYSBkaXNwYXRjaAorCSAqLworCXJldHVybiBjZnFxLT5kaXNwYXRjaGVkIDwgbWF4X2Rpc3BhdGNoOworfQorCiAvKgogICogRGlzcGF0Y2ggYSByZXF1ZXN0IGZyb20gY2ZxcSwgbW92aW5nIHRoZW0gdG8gdGhlIHJlcXVlc3QgcXVldWUKICAqIGRpc3BhdGNoIGxpc3QuCiAgKi8KLXN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3N0YXRpYyBib29sIGNmcV9kaXNwYXRjaF9yZXF1ZXN0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKIAlCVUdfT04oUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSk7CiAKKwlpZiAoIWNmcV9tYXlfZGlzcGF0Y2goY2ZxZCwgY2ZxcSkpCisJCXJldHVybiBmYWxzZTsKKwogCS8qCiAJICogZm9sbG93IGV4cGlyZWQgcGF0aCwgZWxzZSBnZXQgZmlyc3QgbmV4dCBhdmFpbGFibGUKIAkgKi8KQEAgLTEyNzEsNiArMTM1Niw4IEBACiAJCWF0b21pY19sb25nX2luYygmY2ljLT5pb2MtPnJlZmNvdW50KTsKIAkJY2ZxZC0+YWN0aXZlX2NpYyA9IGNpYzsKIAl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTEyODEsNyArMTM2OCw2IEBACiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKLQl1bnNpZ25lZCBpbnQgbWF4X2Rpc3BhdGNoOwogCiAJaWYgKCFjZnFkLT5idXN5X3F1ZXVlcykKIAkJcmV0dXJuIDA7CkBAIC0xMjk0LDQ4ICsxMzgwLDExIEBACiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBEcmFpbiBhc3luYyByZXF1ZXN0cyBiZWZvcmUgd2Ugc3RhcnQgc3luYyBJTworCSAqIERpc3BhdGNoIGEgcmVxdWVzdCBmcm9tIHRoaXMgY2ZxcSwgaWYgaXQgaXMgYWxsb3dlZAogCSAqLwotCWlmIChjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKSAmJiBjZnFkLT5ycV9pbl9kcml2ZXJbQkxLX1JXX0FTWU5DXSkKKwlpZiAoIWNmcV9kaXNwYXRjaF9yZXF1ZXN0KGNmcWQsIGNmcXEpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBhbiBhc3luYyBxdWV1ZSBhbmQgd2UgaGF2ZSBzeW5jIElPIGluIGZsaWdodCwgbGV0IGl0IHdhaXQKLQkgKi8KLQlpZiAoY2ZxZC0+c3luY19mbGlnaHQgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCXJldHVybiAwOwotCi0JbWF4X2Rpc3BhdGNoID0gY2ZxZC0+Y2ZxX3F1YW50dW07Ci0JaWYgKGNmcV9jbGFzc19pZGxlKGNmcXEpKQotCQltYXhfZGlzcGF0Y2ggPSAxOwotCi0JLyoKLQkgKiBEb2VzIHRoaXMgY2ZxcSBhbHJlYWR5IGhhdmUgdG9vIG11Y2ggSU8gaW4gZmxpZ2h0PwotCSAqLwotCWlmIChjZnFxLT5kaXNwYXRjaGVkID49IG1heF9kaXNwYXRjaCkgewotCQkvKgotCQkgKiBpZGxlIHF1ZXVlIG11c3QgYWx3YXlzIG9ubHkgaGF2ZSBhIHNpbmdsZSBJTyBpbiBmbGlnaHQKLQkJICovCi0JCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJCXJldHVybiAwOwotCi0JCS8qCi0JCSAqIFdlIGhhdmUgb3RoZXIgcXVldWVzLCBkb24ndCBhbGxvdyBtb3JlIElPIGZyb20gdGhpcyBvbmUKLQkJICovCi0JCWlmIChjZnFkLT5idXN5X3F1ZXVlcyA+IDEpCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiB3ZSBhcmUgdGhlIG9ubHkgcXVldWUsIGFsbG93IHVwIHRvIDQgdGltZXMgb2YgJ3F1YW50dW0nCi0JCSAqLwotCQlpZiAoY2ZxcS0+ZGlzcGF0Y2hlZCA+PSA0ICogbWF4X2Rpc3BhdGNoKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBEaXNwYXRjaCBhIHJlcXVlc3QgZnJvbSB0aGlzIGNmcXEKLQkgKi8KLQljZnFfZGlzcGF0Y2hfcmVxdWVzdChjZnFkLCBjZnFxKTsKIAljZnFxLT5zbGljZV9kaXNwYXRjaCsrOwogCWNmcV9jbGVhcl9jZnFxX211c3RfZGlzcGF0Y2goY2ZxcSk7CiAKQEAgLTE2MzUsNyArMTY4NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9pbml0X2NmcXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkJICBwaWRfdCBwaWQsIGludCBpc19zeW5jKQorCQkJICBwaWRfdCBwaWQsIGJvb2wgaXNfc3luYykKIHsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5yYl9ub2RlKTsKIAlSQl9DTEVBUl9OT0RFKCZjZnFxLT5wX25vZGUpOwpAQCAtMTY1NSw3ICsxNzA0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgotY2ZxX2ZpbmRfYWxsb2NfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBpbnQgaXNfc3luYywKK2NmcV9maW5kX2FsbG9jX3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLAogCQkgICAgIHN0cnVjdCBpb19jb250ZXh0ICppb2MsIGdmcF90IGdmcF9tYXNrKQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsICpuZXdfY2ZxcSA9IE5VTEw7CkBAIC0xNzE5LDcgKzE3NjgsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNmcV9xdWV1ZSAqCi1jZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgaW50IGlzX3N5bmMsIHN0cnVjdCBpb19jb250ZXh0ICppb2MsCitjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgYm9vbCBpc19zeW5jLCBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCSAgICAgIGdmcF90IGdmcF9tYXNrKQogewogCWNvbnN0IGludCBpb3ByaW8gPSB0YXNrX2lvcHJpbyhpb2MpOwpAQCAtMTk1MSwxMCArMjAwMCwxMyBAQAogCWVuYWJsZV9pZGxlID0gb2xkX2lkbGUgPSBjZnFfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKIAogCWlmICghYXRvbWljX3JlYWQoJmNpYy0+aW9jLT5ucl90YXNrcykgfHwgIWNmcWQtPmNmcV9zbGljZV9pZGxlIHx8Ci0JICAgIChjZnFkLT5od190YWcgJiYgQ0lDX1NFRUtZKGNpYykpKQorCSAgICAoIWNmcWQtPmNmcV9sYXRlbmN5ICYmIGNmcWQtPmh3X3RhZyAmJiBDSUNfU0VFS1koY2ljKSkpCiAJCWVuYWJsZV9pZGxlID0gMDsKIAllbHNlIGlmIChzYW1wbGVfdmFsaWQoY2ljLT50dGltZV9zYW1wbGVzKSkgewotCQlpZiAoY2ljLT50dGltZV9tZWFuID4gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCisJCXVuc2lnbmVkIGludCBzbGljZV9pZGxlID0gY2ZxZC0+Y2ZxX3NsaWNlX2lkbGU7CisJCWlmIChzYW1wbGVfdmFsaWQoY2ljLT5zZWVrX3NhbXBsZXMpICYmIENJQ19TRUVLWShjaWMpKQorCQkJc2xpY2VfaWRsZSA9IG1zZWNzX3RvX2ppZmZpZXMoQ0ZRX01JTl9UVCk7CisJCWlmIChjaWMtPnR0aW1lX21lYW4gPiBzbGljZV9pZGxlKQogCQkJZW5hYmxlX2lkbGUgPSAwOwogCQllbHNlCiAJCQllbmFibGVfaWRsZSA9IDE7CkBAIC0xOTczLDcgKzIwMjUsNyBAQAogICogQ2hlY2sgaWYgbmV3X2NmcXEgc2hvdWxkIHByZWVtcHQgdGhlIGN1cnJlbnRseSBhY3RpdmUgcXVldWUuIFJldHVybiAwIGZvcgogICogbm8gb3IgaWYgd2UgYXJlbid0IHN1cmUsIGEgMSB3aWxsIGNhdXNlIGEgcHJlZW1wdC4KICAqLwotc3RhdGljIGludAorc3RhdGljIGJvb2wKIGNmcV9zaG91bGRfcHJlZW1wdChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKm5ld19jZnFxLAogCQkgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC0xOTgxLDQ4ICsyMDMzLDU2IEBACiAKIAljZnFxID0gY2ZxZC0+YWN0aXZlX3F1ZXVlOwogCWlmICghY2ZxcSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChjZnFfc2xpY2VfdXNlZChjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJaWYgKGNmcV9jbGFzc19pZGxlKG5ld19jZnFxKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBmYWxzZTsKIAogCWlmIChjZnFfY2xhc3NfaWRsZShjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJLyoKIAkgKiBpZiB0aGUgbmV3IHJlcXVlc3QgaXMgc3luYywgYnV0IHRoZSBjdXJyZW50bHkgcnVubmluZyBxdWV1ZSBpcwogCSAqIG5vdCwgbGV0IHRoZSBzeW5jIHJlcXVlc3QgaGF2ZSBwcmlvcml0eS4KIAkgKi8KIAlpZiAocnFfaXNfc3luYyhycSkgJiYgIWNmcV9jZnFxX3N5bmMoY2ZxcSkpCi0JCXJldHVybiAxOworCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCiAJICogU28gYm90aCBxdWV1ZXMgYXJlIHN5bmMuIExldCB0aGUgbmV3IHJlcXVlc3QgZ2V0IGRpc2sgdGltZSBpZgogCSAqIGl0J3MgYSBtZXRhZGF0YSByZXF1ZXN0IGFuZCB0aGUgY3VycmVudCBxdWV1ZSBpcyBkb2luZyByZWd1bGFyIElPLgogCSAqLwogCWlmIChycV9pc19tZXRhKHJxKSAmJiAhY2ZxcS0+bWV0YV9wZW5kaW5nKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIHRydWU7CiAKIAkvKgogCSAqIEFsbG93IGFuIFJUIHJlcXVlc3QgdG8gcHJlLWVtcHQgYW4gb25nb2luZyBub24tUlQgY2ZxcSB0aW1lc2xpY2UuCiAJICovCiAJaWYgKGNmcV9jbGFzc19ydChuZXdfY2ZxcSkgJiYgIWNmcV9jbGFzc19ydChjZnFxKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybiB0cnVlOwogCiAJaWYgKCFjZnFkLT5hY3RpdmVfY2ljIHx8ICFjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgogCSAqIGlmIHRoaXMgcmVxdWVzdCBpcyBhcy1nb29kIGFzIG9uZSB3ZSB3b3VsZCBleHBlY3QgZnJvbSB0aGUKIAkgKiBjdXJyZW50IGNmcXEsIGxldCBpdCBwcmVlbXB0CiAJICovCi0JaWYgKGNmcV9ycV9jbG9zZShjZnFkLCBycSkpCi0JCXJldHVybiAxOworCWlmIChjZnFfcnFfY2xvc2UoY2ZxZCwgcnEpICYmICghY2ZxX2NmcXFfY29vcChuZXdfY2ZxcSkgfHwKKwkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPT0gMSkpIHsKKwkJLyoKKwkJICogTWFyayBuZXcgcXVldWUgY29vcF9wcmVlbXB0LCBzbyBpdHMgY29vcCBmbGFnIHdpbGwgbm90IGJlCisJCSAqIGNsZWFyZWQgd2hlbiBuZXcgcXVldWUgZ2V0cyBzY2hlZHVsZWQgYXQgdGhlIHZlcnkgZmlyc3QgdGltZQorCQkgKi8KKwkJY2ZxX21hcmtfY2ZxcV9jb29wX3ByZWVtcHQobmV3X2NmcXEpOworCQljZnFfbWFya19jZnFxX2Nvb3AobmV3X2NmcXEpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qCkBAIC0yMTA3LDYgKzIxNjcsNyBAQAogCiAJY2ZxX2FkZF9ycV9yYihycSk7CiAKKwlycV9zZXRfZmlmb190aW1lKHJxLCBqaWZmaWVzICsgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlW3JxX2lzX3N5bmMocnEpXSk7CiAJbGlzdF9hZGRfdGFpbCgmcnEtPnF1ZXVlbGlzdCwgJmNmcXEtPmZpZm8pOwogCiAJY2ZxX3JxX2VucXVldWVkKGNmcWQsIGNmcXEsIHJxKTsKQEAgLTIxNTcsOCArMjIxOCwxMCBAQAogCWlmIChjZnFfY2ZxcV9zeW5jKGNmcXEpKQogCQljZnFkLT5zeW5jX2ZsaWdodC0tOwogCi0JaWYgKHN5bmMpCisJaWYgKHN5bmMpIHsKIAkJUlFfQ0lDKHJxKS0+bGFzdF9lbmRfcmVxdWVzdCA9IG5vdzsKKwkJY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IG5vdzsKKwl9CiAKIAkvKgogCSAqIElmIHRoaXMgaXMgdGhlIGFjdGl2ZSBxdWV1ZSwgY2hlY2sgaWYgaXQgbmVlZHMgdG8gYmUgZXhwaXJlZCwKQEAgLTIyODQsNyArMjM0Nyw3IEBACiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAJY29uc3QgaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOwotCWNvbnN0IGludCBpc19zeW5jID0gcnFfaXNfc3luYyhycSk7CisJY29uc3QgYm9vbCBpc19zeW5jID0gcnFfaXNfc3luYyhycSk7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNDgwLDggKzI1NDMsOSBAQAogCWNmcWQtPmNmcV9zbGljZVsxXSA9IGNmcV9zbGljZV9zeW5jOwogCWNmcWQtPmNmcV9zbGljZV9hc3luY19ycSA9IGNmcV9zbGljZV9hc3luY19ycTsKIAljZnFkLT5jZnFfc2xpY2VfaWRsZSA9IGNmcV9zbGljZV9pZGxlOworCWNmcWQtPmNmcV9sYXRlbmN5ID0gMTsKIAljZnFkLT5od190YWcgPSAxOwotCisJY2ZxZC0+bGFzdF9lbmRfc3luY19ycSA9IGppZmZpZXM7CiAJcmV0dXJuIGNmcWQ7CiB9CiAKQEAgLTI1NDksNiArMjYxMyw3IEBACiBTSE9XX0ZVTkNUSU9OKGNmcV9zbGljZV9zeW5jX3Nob3csIGNmcWQtPmNmcV9zbGljZVsxXSwgMSk7CiBTSE9XX0ZVTkNUSU9OKGNmcV9zbGljZV9hc3luY19zaG93LCBjZnFkLT5jZnFfc2xpY2VbMF0sIDEpOwogU0hPV19GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfcnFfc2hvdywgY2ZxZC0+Y2ZxX3NsaWNlX2FzeW5jX3JxLCAwKTsKK1NIT1dfRlVOQ1RJT04oY2ZxX2xvd19sYXRlbmN5X3Nob3csIGNmcWQtPmNmcV9sYXRlbmN5LCAwKTsKICN1bmRlZiBTSE9XX0ZVTkNUSU9OCiAKICNkZWZpbmUgU1RPUkVfRlVOQ1RJT04oX19GVU5DLCBfX1BUUiwgTUlOLCBNQVgsIF9fQ09OVikJCQlcCkBAIC0yNTgwLDYgKzI2NDUsNyBAQAogU1RPUkVfRlVOQ1RJT04oY2ZxX3NsaWNlX2FzeW5jX3N0b3JlLCAmY2ZxZC0+Y2ZxX3NsaWNlWzBdLCAxLCBVSU5UX01BWCwgMSk7CiBTVE9SRV9GVU5DVElPTihjZnFfc2xpY2VfYXN5bmNfcnFfc3RvcmUsICZjZnFkLT5jZnFfc2xpY2VfYXN5bmNfcnEsIDEsCiAJCVVJTlRfTUFYLCAwKTsKK1NUT1JFX0ZVTkNUSU9OKGNmcV9sb3dfbGF0ZW5jeV9zdG9yZSwgJmNmcWQtPmNmcV9sYXRlbmN5LCAwLCAxLCAwKTsKICN1bmRlZiBTVE9SRV9GVU5DVElPTgogCiAjZGVmaW5lIENGUV9BVFRSKG5hbWUpIFwKQEAgLTI1OTUsNiArMjY2MSw3IEBACiAJQ0ZRX0FUVFIoc2xpY2VfYXN5bmMpLAogCUNGUV9BVFRSKHNsaWNlX2FzeW5jX3JxKSwKIAlDRlFfQVRUUihzbGljZV9pZGxlKSwKKwlDRlFfQVRUUihsb3dfbGF0ZW5jeSksCiAJX19BVFRSX05VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NvbXBhdF9pb2N0bC5jIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKaW5kZXggNzg2NWEzNC4uOWJkMDg2YyAxMDA2NDQKLS0tIGEvYmxvY2svY29tcGF0X2lvY3RsLmMKKysrIGIvYmxvY2svY29tcGF0X2lvY3RsLmMKQEAgLTIxLDYgKzIxLDExIEBACiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF9pbnRfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOwogfQogCitzdGF0aWMgaW50IGNvbXBhdF9wdXRfdWludCh1bnNpZ25lZCBsb25nIGFyZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlyZXR1cm4gcHV0X3VzZXIodmFsLCAoY29tcGF0X3VpbnRfdCBfX3VzZXIgKiljb21wYXRfcHRyKGFyZykpOworfQorCiBzdGF0aWMgaW50IGNvbXBhdF9wdXRfbG9uZyh1bnNpZ25lZCBsb25nIGFyZywgbG9uZyB2YWwpCiB7CiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGNvbXBhdF9sb25nX3QgX191c2VyICopY29tcGF0X3B0cihhcmcpKTsKQEAgLTczNCw2ICs3MzksMTQgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSERJT19HRVRHRU86CiAJCXJldHVybiBjb21wYXRfaGRpb19nZXRnZW8oZGlzaywgYmRldiwgY29tcGF0X3B0cihhcmcpKTsKKwljYXNlIEJMS1BCU1pHRVQ6CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLSU9NSU46CisJCXJldHVybiBjb21wYXRfcHV0X3VpbnQoYXJnLCBiZGV2X2lvX21pbihiZGV2KSk7CisJY2FzZSBCTEtJT09QVDoKKwkJcmV0dXJuIGNvbXBhdF9wdXRfdWludChhcmcsIGJkZXZfaW9fb3B0KGJkZXYpKTsKKwljYXNlIEJMS0FMSUdOT0ZGOgorCQlyZXR1cm4gY29tcGF0X3B1dF9pbnQoYXJnLCBiZGV2X2FsaWdubWVudF9vZmZzZXQoYmRldikpOwogCWNhc2UgQkxLRkxTQlVGOgogCWNhc2UgQkxLUk9TRVQ6CiAJY2FzZSBCTEtESVNDQVJEOgpkaWZmIC0tZ2l0IGEvYmxvY2svZWxldmF0b3IuYyBiL2Jsb2NrL2VsZXZhdG9yLmMKaW5kZXggMTk3NWI2MS4uYTg0NzA0NiAxMDA2NDQKLS0tIGEvYmxvY2svZWxldmF0b3IuYworKysgYi9ibG9jay9lbGV2YXRvci5jCkBAIC0xMDU5LDkgKzEwNTksNyBAQAogCQlyZXR1cm4gY291bnQ7CiAKIAlzdHJsY3B5KGVsZXZhdG9yX25hbWUsIG5hbWUsIHNpemVvZihlbGV2YXRvcl9uYW1lKSk7Ci0Jc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSk7Ci0KLQllID0gZWxldmF0b3JfZ2V0KGVsZXZhdG9yX25hbWUpOworCWUgPSBlbGV2YXRvcl9nZXQoc3Ryc3RyaXAoZWxldmF0b3JfbmFtZSkpOwogCWlmICghZSkgewogCQlwcmludGsoS0VSTl9FUlIgImVsZXZhdG9yOiB0eXBlICVzIG5vdCBmb3VuZFxuIiwgZWxldmF0b3JfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYmxvY2svaW9jdGwuYyBiL2Jsb2NrL2lvY3RsLmMKaW5kZXggZDNlNmI1OC4uMWY0ZDFkZSAxMDA2NDQKLS0tIGEvYmxvY2svaW9jdGwuYworKysgYi9ibG9jay9pb2N0bC5jCkBAIC0xMzgsNiArMTM4LDExIEBACiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOwogfQogCitzdGF0aWMgaW50IHB1dF91aW50KHVuc2lnbmVkIGxvbmcgYXJnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiBwdXRfdXNlcih2YWwsICh1bnNpZ25lZCBpbnQgX191c2VyICopYXJnKTsKK30KKwogc3RhdGljIGludCBwdXRfbG9uZyh1bnNpZ25lZCBsb25nIGFyZywgbG9uZyB2YWwpCiB7CiAJcmV0dXJuIHB1dF91c2VyKHZhbCwgKGxvbmcgX191c2VyICopYXJnKTsKQEAgLTI2MywxMCArMjY4LDE4IEBACiAJCXJldHVybiBwdXRfbG9uZyhhcmcsIChiZGktPnJhX3BhZ2VzICogUEFHRV9DQUNIRV9TSVpFKSAvIDUxMik7CiAJY2FzZSBCTEtST0dFVDoKIAkJcmV0dXJuIHB1dF9pbnQoYXJnLCBiZGV2X3JlYWRfb25seShiZGV2KSAhPSAwKTsKLQljYXNlIEJMS0JTWkdFVDogLyogZ2V0IHRoZSBsb2dpY2FsIGJsb2NrIHNpemUgKGNmLiBCTEtTU1pHRVQpICovCisJY2FzZSBCTEtCU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2Ugc29mdCBibG9jayBzaXplIChjZi4gQkxLU1NaR0VUKSAqLwogCQlyZXR1cm4gcHV0X2ludChhcmcsIGJsb2NrX3NpemUoYmRldikpOwotCWNhc2UgQkxLU1NaR0VUOiAvKiBnZXQgYmxvY2sgZGV2aWNlIGhhcmR3YXJlIHNlY3RvciBzaXplICovCisJY2FzZSBCTEtTU1pHRVQ6IC8qIGdldCBibG9jayBkZXZpY2UgbG9naWNhbCBibG9jayBzaXplICovCiAJCXJldHVybiBwdXRfaW50KGFyZywgYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldikpOworCWNhc2UgQkxLUEJTWkdFVDogLyogZ2V0IGJsb2NrIGRldmljZSBwaHlzaWNhbCBibG9jayBzaXplICovCisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfcGh5c2ljYWxfYmxvY2tfc2l6ZShiZGV2KSk7CisJY2FzZSBCTEtJT01JTjoKKwkJcmV0dXJuIHB1dF91aW50KGFyZywgYmRldl9pb19taW4oYmRldikpOworCWNhc2UgQkxLSU9PUFQ6CisJCXJldHVybiBwdXRfdWludChhcmcsIGJkZXZfaW9fb3B0KGJkZXYpKTsKKwljYXNlIEJMS0FMSUdOT0ZGOgorCQlyZXR1cm4gcHV0X2ludChhcmcsIGJkZXZfYWxpZ25tZW50X29mZnNldChiZGV2KSk7CiAJY2FzZSBCTEtTRUNUR0VUOgogCQlyZXR1cm4gcHV0X3VzaG9ydChhcmcsIHF1ZXVlX21heF9zZWN0b3JzKGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKSk7CiAJY2FzZSBCTEtSQVNFVDoKZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IGQ5YWE3MzMuLjBhNTVkYTcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hc3luY190eC9hc3luY19wcS5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKaW5kZXggYjg4ZGI2ZC4uNmI1Y2M0ZiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKKysrIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3BxLmMKQEAgLTI2LDE0ICsyNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2FzeW5jX3R4Lmg+CiAKIC8qKgotICogc2NyaWJibGUgLSBzcGFjZSB0byBob2xkIHRocm93YXdheSBQIGJ1ZmZlciBmb3Igc3luY2hyb25vdXMgZ2VuX3N5bmRyb21lCisgKiBwcV9zY3JpYmJsZV9wYWdlIC0gc3BhY2UgdG8gaG9sZCB0aHJvd2F3YXkgUCBvciBRIGJ1ZmZlciBmb3IKKyAqIHN5bmNocm9ub3VzIGdlbl9zeW5kcm9tZQogICovCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNjcmliYmxlOwotCi1zdGF0aWMgYm9vbCBpc19yYWlkNl96ZXJvX2Jsb2NrKHN0cnVjdCBwYWdlICpwKQotewotCXJldHVybiBwID09ICh2b2lkICopIHJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKLX0KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqcHFfc2NyaWJibGVfcGFnZTsKIAogLyogdGhlIHN0cnVjdCBwYWdlICpibG9ja3NbXSBwYXJhbWV0ZXIgcGFzc2VkIHRvIGFzeW5jX2dlbl9zeW5kcm9tZSgpCiAgKiBhbmQgYXN5bmNfc3luZHJvbWVfdmFsKCkgY29udGFpbnMgdGhlICdQJyBkZXN0aW5hdGlvbiBhZGRyZXNzIGF0CkBAIC04Myw3ICs3OSw3IEBACiAJICogc291cmNlcyBhbmQgdXBkYXRlIHRoZSBjb2VmZmljaWVudHMgYWNjb3JkaW5nbHkKIAkgKi8KIAlmb3IgKGkgPSAwLCBpZHggPSAwOyBpIDwgc3JjX2NudDsgaSsrKSB7Ci0JCWlmIChpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpCisJCWlmIChibG9ja3NbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlkbWFfc3JjW2lkeF0gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIGJsb2Nrc1tpXSwgb2Zmc2V0LCBsZW4sCiAJCQkJCSAgICBETUFfVE9fREVWSUNFKTsKQEAgLTE2MCw5ICsxNTYsOSBAQAogCQlzcmNzID0gKHZvaWQgKiopIGJsb2NrczsKIAogCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKSB7Ci0JCWlmIChpc19yYWlkNl96ZXJvX2Jsb2NrKGJsb2Nrc1tpXSkpIHsKKwkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKSB7CiAJCQlCVUdfT04oaSA+IGRpc2tzIC0gMyk7IC8qIFAgb3IgUSBjYW4ndCBiZSB6ZXJvICovCi0JCQlzcmNzW2ldID0gYmxvY2tzW2ldOworCQkJc3Jjc1tpXSA9ICh2b2lkKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CiAJCX0gZWxzZQogCQkJc3Jjc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pICsgb2Zmc2V0OwogCX0KQEAgLTE4NiwxMCArMTgyLDE0IEBACiAgKiBibG9ja3NbZGlza3MtMV0gdG8gTlVMTC4gIFdoZW4gUCBvciBRIGlzIG9taXR0ZWQgJ2xlbicgbXVzdCBiZSA8PQogICogUEFHRV9TSVpFIGFzIGEgdGVtcG9yYXJ5IGJ1ZmZlciBvZiB0aGlzIHNpemUgaXMgdXNlZCBpbiB0aGUKICAqIHN5bmNocm9ub3VzIHBhdGguICAnZGlza3MnIGFsd2F5cyBhY2NvdW50cyBmb3IgYm90aCBkZXN0aW5hdGlvbgotICogYnVmZmVycy4KKyAqIGJ1ZmZlcnMuICBJZiBhbnkgc291cmNlIGJ1ZmZlcnMgKGJsb2Nrc1tpXSB3aGVyZSBpIDwgZGlza3MgLSAyKSBhcmUKKyAqIHNldCB0byBOVUxMIHRob3NlIGJ1ZmZlcnMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSByYWlkNl96ZXJvX3BhZ2UKKyAqIGluIHRoZSBzeW5jaHJvbm91cyBwYXRoIGFuZCBvbWl0dGVkIGluIHRoZSBoYXJkd2FyZS1hc3luY2hyb25vdXMKKyAqIHBhdGguCiAgKgogICogJ2Jsb2Nrcycgbm90ZTogaWYgc3VibWl0LT5zY3JpYmJsZSBpcyBOVUxMIHRoZW4gdGhlIGNvbnRlbnRzIG9mCi0gKiAnYmxvY2tzJyBtYXkgYmUgb3ZlcnJpZGRlbgorICogJ2Jsb2NrcycgbWF5IGJlIG92ZXJ3cml0dGVuIHRvIHBlcmZvcm0gYWRkcmVzcyBjb252ZXJzaW9ucworICogKGRtYV9tYXBfcGFnZSgpIG9yIHBhZ2VfYWRkcmVzcygpKS4KICAqLwogc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKIGFzeW5jX2dlbl9zeW5kcm9tZShzdHJ1Y3QgcGFnZSAqKmJsb2NrcywgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IGRpc2tzLApAQCAtMjI3LDExICsyMjcsMTEgQEAKIAlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAKIAlpZiAoIVAoYmxvY2tzLCBkaXNrcykpIHsKLQkJUChibG9ja3MsIGRpc2tzKSA9IHNjcmliYmxlOworCQlQKGJsb2NrcywgZGlza3MpID0gcHFfc2NyaWJibGVfcGFnZTsKIAkJQlVHX09OKGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSk7CiAJfQogCWlmICghUShibG9ja3MsIGRpc2tzKSkgewotCQlRKGJsb2NrcywgZGlza3MpID0gc2NyaWJibGU7CisJCVEoYmxvY2tzLCBkaXNrcykgPSBwcV9zY3JpYmJsZV9wYWdlOwogCQlCVUdfT04obGVuICsgb2Zmc2V0ID4gUEFHRV9TSVpFKTsKIAl9CiAJZG9fc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCBvZmZzZXQsIGRpc2tzLCBsZW4sIHN1Ym1pdCk7CkBAIC0yNjUsOCArMjY1LDEwIEBACiAJCQkJCQkgICAgICBsZW4pOwogCXN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UgPSBjaGFuID8gY2hhbi0+ZGV2aWNlIDogTlVMTDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCXVuc2lnbmVkIGNoYXIgY29lZnNbZGlza3MtMl07CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3MgPSBzdWJtaXQtPmNiX2ZuID8gRE1BX1BSRVBfSU5URVJSVVBUIDogMDsKIAlkbWFfYWRkcl90ICpkbWFfc3JjID0gTlVMTDsKKwlpbnQgc3JjX2NudCA9IDA7CiAKIAlCVUdfT04oZGlza3MgPCA0KTsKIApAQCAtMjg1LDIyICsyODcsMzIgQEAKIAkJCSBfX2Z1bmNfXywgZGlza3MsIGxlbik7CiAJCWlmICghUChibG9ja3MsIGRpc2tzKSkKIAkJCWRtYV9mbGFncyB8PSBETUFfUFJFUF9QUV9ESVNBQkxFX1A7CisJCWVsc2UKKwkJCXBxWzBdID0gZG1hX21hcF9wYWdlKGRldiwgUChibG9ja3MsIGRpc2tzKSwKKwkJCQkJICAgICBvZmZzZXQsIGxlbiwKKwkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKIAkJaWYgKCFRKGJsb2NrcywgZGlza3MpKQogCQkJZG1hX2ZsYWdzIHw9IERNQV9QUkVQX1BRX0RJU0FCTEVfUTsKKwkJZWxzZQorCQkJcHFbMV0gPSBkbWFfbWFwX3BhZ2UoZGV2LCBRKGJsb2NrcywgZGlza3MpLAorCQkJCQkgICAgIG9mZnNldCwgbGVuLAorCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOworCiAJCWlmIChzdWJtaXQtPmZsYWdzICYgQVNZTkNfVFhfRkVOQ0UpCiAJCQlkbWFfZmxhZ3MgfD0gRE1BX1BSRVBfRkVOQ0U7Ci0JCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKQogCQkJaWYgKGxpa2VseShibG9ja3NbaV0pKSB7Ci0JCQkJQlVHX09OKGlzX3JhaWQ2X3plcm9fYmxvY2soYmxvY2tzW2ldKSk7Ci0JCQkJZG1hX3NyY1tpXSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKLQkJCQkJCQkgIG9mZnNldCwgbGVuLAotCQkJCQkJCSAgRE1BX1RPX0RFVklDRSk7CisJCQkJZG1hX3NyY1tzcmNfY250XSA9IGRtYV9tYXBfcGFnZShkZXYsIGJsb2Nrc1tpXSwKKwkJCQkJCQkJb2Zmc2V0LCBsZW4sCisJCQkJCQkJCURNQV9UT19ERVZJQ0UpOworCQkJCWNvZWZzW3NyY19jbnRdID0gcmFpZDZfZ2ZleHBbaV07CisJCQkJc3JjX2NudCsrOwogCQkJfQogCiAJCWZvciAoOzspIHsKIAkJCXR4ID0gZGV2aWNlLT5kZXZpY2VfcHJlcF9kbWFfcHFfdmFsKGNoYW4sIHBxLCBkbWFfc3JjLAotCQkJCQkJCSAgICBkaXNrcyAtIDIsCi0JCQkJCQkJICAgIHJhaWQ2X2dmZXhwLAorCQkJCQkJCSAgICBzcmNfY250LAorCQkJCQkJCSAgICBjb2VmcywKIAkJCQkJCQkgICAgbGVuLCBwcXJlcywKIAkJCQkJCQkgICAgZG1hX2ZsYWdzKTsKIAkJCWlmIChsaWtlbHkodHgpKQpAQCAtMzczLDkgKzM4NSw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFzeW5jX3BxX2luaXQodm9pZCkKIHsKLQlzY3JpYmJsZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJcHFfc2NyaWJibGVfcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiAKLQlpZiAoc2NyaWJibGUpCisJaWYgKHBxX3NjcmliYmxlX3BhZ2UpCiAJCXJldHVybiAwOwogCiAJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHJlcXVpcmVkIHNwYXJlIHBhZ2VcbiIsIF9fZnVuY19fKTsKQEAgLTM4NSw3ICszOTcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXN5bmNfcHFfZXhpdCh2b2lkKQogewotCXB1dF9wYWdlKHNjcmliYmxlKTsKKwlwdXRfcGFnZShwcV9zY3JpYmJsZV9wYWdlKTsKIH0KIAogbW9kdWxlX2luaXQoYXN5bmNfcHFfaW5pdCk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfcmFpZDZfcmVjb3YuYyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCmluZGV4IDZkNzNkZGUuLjk0M2YyYWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCisrKyBiL2NyeXB0by9hc3luY190eC9hc3luY19yYWlkNl9yZWNvdi5jCkBAIC0xMzEsOCArMTMxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzQoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNChpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmEsICpiOwpAQCAtMTQzLDggKzE0Myw4IEBACiAJdm9pZCAqY2JfcGFyYW0gPSBzdWJtaXQtPmNiX3BhcmFtOwogCXZvaWQgKnNjcmliYmxlID0gc3VibWl0LT5zY3JpYmJsZTsKIAotCXAgPSBibG9ja3NbNC0yXTsKLQlxID0gYmxvY2tzWzQtMV07CisJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKKwlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCiAJYSA9IGJsb2Nrc1tmYWlsYV07CiAJYiA9IGJsb2Nrc1tmYWlsYl07CkBAIC0xNzAsOCArMTcwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCi1fXzJkYXRhX3JlY292XzUoc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgc3RydWN0IHBhZ2UgKipibG9ja3MsCi0JICAgICAgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKK19fMmRhdGFfcmVjb3ZfNShpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCisJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogewogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCXN0cnVjdCBwYWdlICpwLCAqcSwgKmcsICpkcCwgKmRxOwpAQCAtMTgxLDIxICsxODEsMjIgQEAKIAlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2JfZm4gPSBzdWJtaXQtPmNiX2ZuOwogCXZvaWQgKmNiX3BhcmFtID0gc3VibWl0LT5jYl9wYXJhbTsKIAl2b2lkICpzY3JpYmJsZSA9IHN1Ym1pdC0+c2NyaWJibGU7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKGdvb2QpOwotCWludCBpOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJZ29vZF9zcmNzID0gMDsKKwlnb29kID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGRpc2tzLTI7IGkrKykgeworCQlpZiAoYmxvY2tzW2ldID09IE5VTEwpCisJCQljb250aW51ZTsKIAkJaWYgKGkgPT0gZmFpbGEgfHwgaSA9PSBmYWlsYikKIAkJCWNvbnRpbnVlOwotCQllbHNlIHsKLQkJCWdvb2QgPSBpOwotCQkJYnJlYWs7Ci0JCX0KKwkJZ29vZCA9IGk7CisJCWdvb2Rfc3JjcysrOwogCX0KLQlCVUdfT04oaSA+PSAzKTsKKwlCVUdfT04oZ29vZF9zcmNzID4gMSk7CiAKLQlwID0gYmxvY2tzWzUtMl07Ci0JcSA9IGJsb2Nrc1s1LTFdOworCXAgPSBibG9ja3NbZGlza3MtMl07CisJcSA9IGJsb2Nrc1tkaXNrcy0xXTsKIAlnID0gYmxvY2tzW2dvb2RdOwogCiAJLyogQ29tcHV0ZSBzeW5kcm9tZSB3aXRoIHplcm8gZm9yIHRoZSBtaXNzaW5nIGRhdGEgcGFnZXMKQEAgLTI2MywxMCArMjY0LDEwIEBACiAJICogZGVsdGEgcCBhbmQgZGVsdGEgcQogCSAqLwogCWRwID0gYmxvY2tzW2ZhaWxhXTsKLQlibG9ja3NbZmFpbGFdID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJYmxvY2tzW2ZhaWxhXSA9IE5VTEw7CiAJYmxvY2tzW2Rpc2tzLTJdID0gZHA7CiAJZHEgPSBibG9ja3NbZmFpbGJdOwotCWJsb2Nrc1tmYWlsYl0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwlibG9ja3NbZmFpbGJdID0gTlVMTDsKIAlibG9ja3NbZGlza3MtMV0gPSBkcTsKIAogCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLCBzY3JpYmJsZSk7CkBAIC0zMjMsNiArMzI0LDggQEAKIGFzeW5jX3JhaWQ2XzJkYXRhX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwKIAkJCXN0cnVjdCBwYWdlICoqYmxvY2tzLCBzdHJ1Y3QgYXN5bmNfc3VibWl0X2N0bCAqc3VibWl0KQogeworCWludCBub25femVyb19zcmNzLCBpOworCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoZmFpbGIgPCBmYWlsYSkKIAkJc3dhcChmYWlsYSwgZmFpbGIpOwpAQCAtMzM0LDExICszMzcsMTMgQEAKIAkgKi8KIAlpZiAoIXN1Ym1pdC0+c2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCAqKSByYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisJCQllbHNlCisJCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOwogCiAJCXJhaWQ2XzJkYXRhX3JlY292KGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBwdHJzKTsKIApAQCAtMzQ3LDE5ICszNTIsMzAgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc3dpdGNoIChkaXNrcykgewotCWNhc2UgNDoKKwlub25femVyb19zcmNzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMiAmJiBub25femVyb19zcmNzIDwgNDsgaSsrKQorCQlpZiAoYmxvY2tzW2ldKQorCQkJbm9uX3plcm9fc3JjcysrOworCXN3aXRjaCAobm9uX3plcm9fc3JjcykgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCS8qIFRoZXJlIG11c3QgYmUgYXQgbGVhc3QgMiBzb3VyY2VzIC0gdGhlIGZhaWxlZCBkZXZpY2VzLiAqLworCQlCVUcoKTsKKworCWNhc2UgMjoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgemVybyBzb3VyY2UgcHEKIAkJICogb3BlcmF0aW9uIChpbiBjb250cmFzdCB0byB0aGUgc3luY2hyb25vdXMgY2FzZSksIHNvCi0JCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSA0IGRpc2sgc3BlY2lhbCBjYXNlCisJCSAqIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA0IGRpc2sgYXJyYXkgd2l0aAorCQkgKiBib3RoIGRhdGEgZGlza3MgbWlzc2luZy4KIAkJICovCi0JCXJldHVybiBfXzJkYXRhX3JlY292XzQoYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOwotCWNhc2UgNToKKwkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNChkaXNrcywgYnl0ZXMsIGZhaWxhLCBmYWlsYiwgYmxvY2tzLCBzdWJtaXQpOworCWNhc2UgMzoKIAkJLyogZG1hIGRldmljZXMgZG8gbm90IHVuaWZvcm1seSB1bmRlcnN0YW5kIGEgc2luZ2xlCiAJCSAqIHNvdXJjZSBwcSBvcGVyYXRpb24gKGluIGNvbnRyYXN0IHRvIHRoZSBzeW5jaHJvbm91cwotCQkgKiBjYXNlKSwgc28gZXhwbGljaXRseSBoYW5kbGUgdGhlIDUgZGlzayBzcGVjaWFsIGNhc2UKKwkJICogY2FzZSksIHNvIGV4cGxpY2l0bHkgaGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSA1IGRpc2sKKwkJICogYXJyYXkgd2l0aCAyIG9mIDMgZGF0YSBkaXNrcyBtaXNzaW5nLgogCQkgKi8KLQkJcmV0dXJuIF9fMmRhdGFfcmVjb3ZfNShieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CisJCXJldHVybiBfXzJkYXRhX3JlY292XzUoZGlza3MsIGJ5dGVzLCBmYWlsYSwgZmFpbGIsIGJsb2Nrcywgc3VibWl0KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gX18yZGF0YV9yZWNvdl9uKGRpc2tzLCBieXRlcywgZmFpbGEsIGZhaWxiLCBibG9ja3MsIHN1Ym1pdCk7CiAJfQpAQCAtMzg1LDYgKzQwMSw3IEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNiX2ZuID0gc3VibWl0LT5jYl9mbjsKIAl2b2lkICpjYl9wYXJhbSA9IHN1Ym1pdC0+Y2JfcGFyYW07CiAJdm9pZCAqc2NyaWJibGUgPSBzdWJtaXQtPnNjcmliYmxlOworCWludCBnb29kX3NyY3MsIGdvb2QsIGk7CiAJc3RydWN0IHBhZ2UgKnNyY3NbMl07CiAKIAlwcl9kZWJ1ZygiJXM6IGRpc2tzOiAlZCBsZW46ICV6dVxuIiwgX19mdW5jX18sIGRpc2tzLCBieXRlcyk7CkBAIC0zOTQsMTEgKzQxMSwxMyBAQAogCSAqLwogCWlmICghc2NyaWJibGUpIHsKIAkJdm9pZCAqKnB0cnMgPSAodm9pZCAqKikgYmxvY2tzOwotCQlpbnQgaTsKIAogCQlhc3luY190eF9xdWllc2NlKCZzdWJtaXQtPmRlcGVuZF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQotCQkJcHRyc1tpXSA9IHBhZ2VfYWRkcmVzcyhibG9ja3NbaV0pOworCQkJaWYgKGJsb2Nrc1tpXSA9PSBOVUxMKQorCQkJCXB0cnNbaV0gPSAodm9pZCopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQkJZWxzZQorCQkJCXB0cnNbaV0gPSBwYWdlX2FkZHJlc3MoYmxvY2tzW2ldKTsKIAogCQlyYWlkNl9kYXRhcF9yZWNvdihkaXNrcywgYnl0ZXMsIGZhaWxhLCBwdHJzKTsKIApAQCAtNDA3LDYgKzQyNiwyMCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlnb29kX3NyY3MgPSAwOworCWdvb2QgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlza3MtMjsgaSsrKSB7CisJCWlmIChpID09IGZhaWxhKQorCQkJY29udGludWU7CisJCWlmIChibG9ja3NbaV0pIHsKKwkJCWdvb2QgPSBpOworCQkJZ29vZF9zcmNzKys7CisJCQlpZiAoZ29vZF9zcmNzID4gMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlCVUdfT04oZ29vZF9zcmNzID09IDApOworCiAJcCA9IGJsb2Nrc1tkaXNrcy0yXTsKIAlxID0gYmxvY2tzW2Rpc2tzLTFdOwogCkBAIC00MTQsMTQgKzQ0NywxMyBAQAogCSAqIFVzZSB0aGUgZGVhZCBkYXRhIHBhZ2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGRlbHRhIHEKIAkgKi8KIAlkcSA9IGJsb2Nrc1tmYWlsYV07Ci0JYmxvY2tzW2ZhaWxhXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWJsb2Nrc1tmYWlsYV0gPSBOVUxMOwogCWJsb2Nrc1tkaXNrcy0xXSA9IGRxOwogCi0JLyogaW4gdGhlIDQgZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQotCSAqIG11bHRpcGxpY2F0aW9uCisJLyogaW4gdGhlIDQtZGlzayBjYXNlIHdlIG9ubHkgbmVlZCB0byBwZXJmb3JtIGEgc2luZ2xlIHNvdXJjZQorCSAqIG11bHRpcGxpY2F0aW9uIHdpdGggdGhlIG9uZSBnb29kIGRhdGEgYmxvY2suCiAJICovCi0JaWYgKGRpc2tzID09IDQpIHsKLQkJaW50IGdvb2QgPSBmYWlsYSA9PSAwID8gMSA6IDA7CisJaWYgKGdvb2Rfc3JjcyA9PSAxKSB7CiAJCXN0cnVjdCBwYWdlICpnID0gYmxvY2tzW2dvb2RdOwogCiAJCWluaXRfYXN5bmNfc3VibWl0KHN1Ym1pdCwgQVNZTkNfVFhfRkVOQ0UsIHR4LCBOVUxMLCBOVUxMLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IGI0NTlhOTAuLjc5MTgyZGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTQ0LDIwICs0NCwyMyBAQAogCXZvaWQgKmNiX3BhcmFtX29yaWcgPSBzdWJtaXQtPmNiX3BhcmFtOwogCWVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3Nfb3JpZyA9IHN1Ym1pdC0+ZmxhZ3M7CiAJZW51bSBkbWFfY3RybF9mbGFncyBkbWFfZmxhZ3M7Ci0JaW50IHhvcl9zcmNfY250OworCWludCB4b3Jfc3JjX2NudCA9IDA7CiAJZG1hX2FkZHJfdCBkbWFfZGVzdDsKIAogCS8qIG1hcCB0aGUgZGVzdCBiaWRyZWN0aW9uYWwgaW4gY2FzZSBpdCBpcyByZS11c2VkIGFzIGEgc291cmNlICovCiAJZG1hX2Rlc3QgPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIGRlc3QsIG9mZnNldCwgbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgewogCQkvKiBvbmx5IG1hcCB0aGUgZGVzdCBvbmNlICovCisJCWlmICghc3JjX2xpc3RbaV0pCisJCQljb250aW51ZTsKIAkJaWYgKHVubGlrZWx5KHNyY19saXN0W2ldID09IGRlc3QpKSB7Ci0JCQlkbWFfc3JjW2ldID0gZG1hX2Rlc3Q7CisJCQlkbWFfc3JjW3hvcl9zcmNfY250KytdID0gZG1hX2Rlc3Q7CiAJCQljb250aW51ZTsKIAkJfQotCQlkbWFfc3JjW2ldID0gZG1hX21hcF9wYWdlKGRtYS0+ZGV2LCBzcmNfbGlzdFtpXSwgb2Zmc2V0LAotCQkJCQkgIGxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWRtYV9zcmNbeG9yX3NyY19jbnQrK10gPSBkbWFfbWFwX3BhZ2UoZG1hLT5kZXYsIHNyY19saXN0W2ldLCBvZmZzZXQsCisJCQkJCQkgICAgICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCX0KKwlzcmNfY250ID0geG9yX3NyY19jbnQ7CiAKIAl3aGlsZSAoc3JjX2NudCkgewogCQlzdWJtaXQtPmZsYWdzID0gZmxhZ3Nfb3JpZzsKQEAgLTEyMyw3ICsxMjYsNyBAQAogCSAgICBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgc3RydWN0IGFzeW5jX3N1Ym1pdF9jdGwgKnN1Ym1pdCkKIHsKIAlpbnQgaTsKLQlpbnQgeG9yX3NyY19jbnQ7CisJaW50IHhvcl9zcmNfY250ID0gMDsKIAlpbnQgc3JjX29mZiA9IDA7CiAJdm9pZCAqZGVzdF9idWY7CiAJdm9pZCAqKnNyY3M7CkBAIC0xMzUsOCArMTM4LDkgQEAKIAogCS8qIGNvbnZlcnQgdG8gYnVmZmVyIHBvaW50ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKLQkJc3Jjc1tpXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7Ci0KKwkJaWYgKHNyY19saXN0W2ldKQorCQkJc3Jjc1t4b3Jfc3JjX2NudCsrXSA9IHBhZ2VfYWRkcmVzcyhzcmNfbGlzdFtpXSkgKyBvZmZzZXQ7CisJc3JjX2NudCA9IHhvcl9zcmNfY250OwogCS8qIHNldCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCiAJZGVzdF9idWYgPSBwYWdlX2FkZHJlc3MoZGVzdCkgKyBvZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggZGQ4NzI5ZC4uOTNkMmM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTIxMSw2ICsyMTEsMTggQEAKIAlzZWxlY3QgQUNQSV9DT05UQUlORVIKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1IKKwl0cmlzdGF0ZSAiUHJvY2Vzc29yIEFnZ3JlZ2F0b3IiCisJZGVwZW5kcyBvbiBBQ1BJX1BST0NFU1NPUgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBYODYKKwloZWxwCisJICBBQ1BJIDQuMCBkZWZpbmVzIHByb2Nlc3NvciBBZ2dyZWdhdG9yLCB3aGljaCBlbmFibGVzIE9TIHRvIHBlcmZvcm0KKwkgIHNwZWNpZmljIHByb2Nlc3NvciBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHRoYXQgYXBwbGllcyB0byBhbGwKKwkgIHByb2Nlc3NvcnMgaW4gdGhlIHBsYXRmb3JtLiBDdXJyZW50bHkgb25seSBsb2dpY2FsIHByb2Nlc3NvciBpZGxpbmcKKwkgIGlzIGRlZmluZWQsIHdoaWNoIGlzIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gVGhpcyBkcml2ZXIKKwkgIHN1cHBvcnRzIHRoZSBuZXcgZGV2aWNlLgorCiBjb25maWcgQUNQSV9USEVSTUFMCiAJdHJpc3RhdGUgIlRoZXJtYWwgWm9uZSIKIAlkZXBlbmRzIG9uIEFDUElfUFJPQ0VTU09SCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggODJjZDQ5ZC4uNzcwMjExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNjIsMyArNjIsNSBAQAogcHJvY2Vzc29yLXkJCQk6PSBwcm9jZXNzb3JfY29yZS5vIHByb2Nlc3Nvcl90aHJvdHRsaW5nLm8KIHByb2Nlc3Nvci15CQkJKz0gcHJvY2Vzc29yX2lkbGUubyBwcm9jZXNzb3JfdGhlcm1hbC5vCiBwcm9jZXNzb3ItJChDT05GSUdfQ1BVX0ZSRVEpCSs9IHByb2Nlc3Nvcl9wZXJmbGliLm8KKworb2JqLSQoQ09ORklHX0FDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1IpICs9IGFjcGlfcGFkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOThiOTY5MC4uYjZlZDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKIAkJCQkJCSAgZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsCiAJCQkJCQkgICh1MzIpIGFjLT5zdGF0ZSk7CisJCWFjcGlfbm90aWZpZXJfY2FsbF9jaGFpbihkZXZpY2UsIGV2ZW50LCAodTMyKSBhYy0+c3RhdGUpOwogI2lmZGVmIENPTkZJR19BQ1BJX1NZU0ZTX1BPV0VSCiAJCWtvYmplY3RfdWV2ZW50KCZhYy0+Y2hhcmdlci5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDJjZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGlfcGFkLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qCisgKiBhY3BpX3BhZC5jIEFDUEkgUHJvY2Vzc29yIEFnZ3JlZ2F0b3IgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorCisjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfQ0xBU1MJInByb2Nlc3Nvcl9hZ2dyZWdhdG9yIgorI2RlZmluZSBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0RFVklDRV9OQU1FICJQcm9jZXNzb3IgQWdncmVnYXRvciIKKyNkZWZpbmUgQUNQSV9QUk9DRVNTT1JfQUdHUkVHQVRPUl9OT1RJRlkgMHg4MAorc3RhdGljIERFRklORV9NVVRFWChpc29sYXRlZF9jcHVzX2xvY2spOworCisjZGVmaW5lIE1XQUlUX1NVQlNUQVRFX01BU0sJKDB4ZikKKyNkZWZpbmUgTVdBSVRfQ1NUQVRFX01BU0sJKDB4ZikKKyNkZWZpbmUgTVdBSVRfU1VCU1RBVEVfU0laRQkoNCkKKyNkZWZpbmUgQ1BVSURfTVdBSVRfTEVBRiAoNSkKKyNkZWZpbmUgQ1BVSUQ1X0VDWF9FWFRFTlNJT05TX1NVUFBPUlRFRCAoMHgxKQorI2RlZmluZSBDUFVJRDVfRUNYX0lOVEVSUlVQVF9CUkVBSwkoMHgyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcG93ZXJfc2F2aW5nX213YWl0X2VheDsKK3N0YXRpYyB2b2lkIHBvd2VyX3NhdmluZ19td2FpdF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGVheCwgZWJ4LCBlY3gsIGVkeDsKKwl1bnNpZ25lZCBpbnQgaGlnaGVzdF9jc3RhdGUgPSAwOworCXVuc2lnbmVkIGludCBoaWdoZXN0X3N1YmNzdGF0ZSA9IDA7CisJaW50IGk7CisKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NV0FJVCkpCisJCXJldHVybjsKKwlpZiAoYm9vdF9jcHVfZGF0YS5jcHVpZF9sZXZlbCA8IENQVUlEX01XQUlUX0xFQUYpCisJCXJldHVybjsKKworCWNwdWlkKENQVUlEX01XQUlUX0xFQUYsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCisJaWYgKCEoZWN4ICYgQ1BVSUQ1X0VDWF9FWFRFTlNJT05TX1NVUFBPUlRFRCkgfHwKKwkgICAgIShlY3ggJiBDUFVJRDVfRUNYX0lOVEVSUlVQVF9CUkVBSykpCisJCXJldHVybjsKKworCWVkeCA+Pj0gTVdBSVRfU1VCU1RBVEVfU0laRTsKKwlmb3IgKGkgPSAwOyBpIDwgNyAmJiBlZHg7IGkrKywgZWR4ID4+PSBNV0FJVF9TVUJTVEFURV9TSVpFKSB7CisJCWlmIChlZHggJiBNV0FJVF9TVUJTVEFURV9NQVNLKSB7CisJCQloaWdoZXN0X2NzdGF0ZSA9IGk7CisJCQloaWdoZXN0X3N1YmNzdGF0ZSA9IGVkeCAmIE1XQUlUX1NVQlNUQVRFX01BU0s7CisJCX0KKwl9CisJcG93ZXJfc2F2aW5nX213YWl0X2VheCA9IChoaWdoZXN0X2NzdGF0ZSA8PCBNV0FJVF9TVUJTVEFURV9TSVpFKSB8CisJCShoaWdoZXN0X3N1YmNzdGF0ZSAtIDEpOworCisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQljbG9ja2V2ZW50c19ub3RpZnkoQ0xPQ0tfRVZUX05PVElGWV9CUk9BRENBU1RfT04sICZpKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfVElNRSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCS8qCisJCSAqIEFNRCBGYW0xMGggVFNDIHdpbGwgdGljayBpbiBhbGwKKwkJICogQy9QL1MwL1MxIHN0YXRlcyB3aGVuIHRoaXMgYml0IGlzIHNldC4KKwkJICovCisJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9OU1RPUF9UU0MpKQorCQkJcmV0dXJuOworCisJCS8qRkFMTCBUSFJPVUdIKi8KKwlkZWZhdWx0OgorCQkvKiBUU0MgY291bGQgaGFsdCBpbiBpZGxlLCBzbyBub3RpZnkgdXNlcnMgKi8KKwkJbWFya190c2NfdW5zdGFibGUoIlRTQyBoYWx0cyBpbiBpZGxlIik7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNwdV93ZWlnaHRbTlJfQ1BVU107CitzdGF0aWMgaW50IHRza19pbl9jcHVbTlJfQ1BVU10gPSB7WzAgLi4uIE5SX0NQVVMtMV0gPSAtMX07CitzdGF0aWMgREVDTEFSRV9CSVRNQVAocGFkX2J1c3lfY3B1c19iaXRzLCBOUl9DUFVTKTsKK3N0YXRpYyB2b2lkIHJvdW5kX3JvYmluX2NwdSh1bnNpZ25lZCBpbnQgdHNrX2luZGV4KQoreworCXN0cnVjdCBjcHVtYXNrICpwYWRfYnVzeV9jcHVzID0gdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpOworCWNwdW1hc2tfdmFyX3QgdG1wOworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBtaW5fd2VpZ2h0ID0gLTEsIHByZWZlcnJlZF9jcHU7CisKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXAsIEdGUF9LRVJORUwpKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWNwdW1hc2tfY2xlYXIodG1wKTsKKwlmb3JfZWFjaF9jcHUoY3B1LCBwYWRfYnVzeV9jcHVzKQorCQljcHVtYXNrX29yKHRtcCwgdG1wLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpKTsKKwljcHVtYXNrX2FuZG5vdCh0bXAsIGNwdV9vbmxpbmVfbWFzaywgdG1wKTsKKwkvKiBhdm9pZCBIVCBzaWJpbGluZ3MgaWYgcG9zc2libGUgKi8KKwlpZiAoY3B1bWFza19lbXB0eSh0bXApKQorCQljcHVtYXNrX2FuZG5vdCh0bXAsIGNwdV9vbmxpbmVfbWFzaywgcGFkX2J1c3lfY3B1cyk7CisJaWYgKGNwdW1hc2tfZW1wdHkodG1wKSkgeworCQltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJCXJldHVybjsKKwl9CisJZm9yX2VhY2hfY3B1KGNwdSwgdG1wKSB7CisJCWlmIChjcHVfd2VpZ2h0W2NwdV0gPCBtaW5fd2VpZ2h0KSB7CisJCQltaW5fd2VpZ2h0ID0gY3B1X3dlaWdodFtjcHVdOworCQkJcHJlZmVycmVkX2NwdSA9IGNwdTsKKwkJfQorCX0KKworCWlmICh0c2tfaW5fY3B1W3Rza19pbmRleF0gIT0gLTEpCisJCWNwdW1hc2tfY2xlYXJfY3B1KHRza19pbl9jcHVbdHNrX2luZGV4XSwgcGFkX2J1c3lfY3B1cyk7CisJdHNrX2luX2NwdVt0c2tfaW5kZXhdID0gcHJlZmVycmVkX2NwdTsKKwljcHVtYXNrX3NldF9jcHUocHJlZmVycmVkX2NwdSwgcGFkX2J1c3lfY3B1cyk7CisJY3B1X3dlaWdodFtwcmVmZXJyZWRfY3B1XSsrOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIGNwdW1hc2tfb2YocHJlZmVycmVkX2NwdSkpOworfQorCitzdGF0aWMgdm9pZCBleGl0X3JvdW5kX3JvYmluKHVuc2lnbmVkIGludCB0c2tfaW5kZXgpCit7CisJc3RydWN0IGNwdW1hc2sgKnBhZF9idXN5X2NwdXMgPSB0b19jcHVtYXNrKHBhZF9idXN5X2NwdXNfYml0cyk7CisJY3B1bWFza19jbGVhcl9jcHUodHNrX2luX2NwdVt0c2tfaW5kZXhdLCBwYWRfYnVzeV9jcHVzKTsKKwl0c2tfaW5fY3B1W3Rza19pbmRleF0gPSAtMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpZGxlX3BjdCA9IDU7IC8qIHBlcmNlbnRhZ2UgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfcm9iaW5fdGltZSA9IDEwOyAvKiBzZWNvbmQgKi8KK3N0YXRpYyBpbnQgcG93ZXJfc2F2aW5nX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsuc2NoZWRfcHJpb3JpdHkgPSAxfTsKKwlpbnQgZG9fc2xlZXA7CisJdW5zaWduZWQgaW50IHRza19pbmRleCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisJdTY0IGxhc3RfamlmZmllcyA9IDA7CisKKwlzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCwgU0NIRURfUlIsICZwYXJhbSk7CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlpbnQgY3B1OworCQl1NjQgZXhwaXJlX3RpbWU7CisKKwkJdHJ5X3RvX2ZyZWV6ZSgpOworCisJCS8qIHJvdW5kIHJvYmluIHRvIGNwdXMgKi8KKwkJaWYgKGxhc3RfamlmZmllcyArIHJvdW5kX3JvYmluX3RpbWUgKiBIWiA8IGppZmZpZXMpIHsKKwkJCWxhc3RfamlmZmllcyA9IGppZmZpZXM7CisJCQlyb3VuZF9yb2Jpbl9jcHUodHNrX2luZGV4KTsKKwkJfQorCisJCWRvX3NsZWVwID0gMDsKKworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyAmPSB+VFNfUE9MTElORzsKKwkJLyoKKwkJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAorCQkgKiBORUVEX1JFU0NIRUQ6CisJCSAqLworCQlzbXBfbWIoKTsKKworCQlleHBpcmVfdGltZSA9IGppZmZpZXMgKyBIWiAqICgxMDAgLSBpZGxlX3BjdCkgLyAxMDA7CisKKwkJd2hpbGUgKCFuZWVkX3Jlc2NoZWQoKSkgeworCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwkJCWNsb2NrZXZlbnRzX25vdGlmeShDTE9DS19FVlRfTk9USUZZX0JST0FEQ0FTVF9FTlRFUiwKKwkJCQkmY3B1KTsKKwkJCXN0b3BfY3JpdGljYWxfdGltaW5ncygpOworCisJCQlfX21vbml0b3IoKHZvaWQgKikmY3VycmVudF90aHJlYWRfaW5mbygpLT5mbGFncywgMCwgMCk7CisJCQlzbXBfbWIoKTsKKwkJCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCQkJX19td2FpdChwb3dlcl9zYXZpbmdfbXdhaXRfZWF4LCAxKTsKKworCQkJc3RhcnRfY3JpdGljYWxfdGltaW5ncygpOworCQkJY2xvY2tldmVudHNfbm90aWZ5KENMT0NLX0VWVF9OT1RJRllfQlJPQURDQVNUX0VYSVQsCisJCQkJJmNwdSk7CisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwkJCWlmIChqaWZmaWVzID4gZXhwaXJlX3RpbWUpIHsKKwkJCQlkb19zbGVlcCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOworCisJCS8qCisJCSAqIGN1cnJlbnQgc2NoZWRfcnQgaGFzIHRocmVzaG9sZCBmb3IgcnQgdGFzayBydW5uaW5nIHRpbWUuCisJCSAqIFdoZW4gYSBydCB0YXNrIHVzZXMgOTUlIENQVSB0aW1lLCB0aGUgcnQgdGhyZWFkIHdpbGwgYmUKKwkJICogc2NoZWR1bGVkIG91dCBmb3IgNSUgQ1BVIHRpbWUgdG8gbm90IHN0YXJ2ZSBvdGhlciB0YXNrcy4gQnV0CisJCSAqIHRoZSBtZWNoYW5pc20gb25seSB3b3JrcyB3aGVuIGFsbCBDUFVzIGhhdmUgUlQgdGFzayBydW5uaW5nLAorCQkgKiBhcyBpZiBvbmUgQ1BVIGhhc24ndCBSVCB0YXNrLCBSVCB0YXNrIGZyb20gb3RoZXIgQ1BVcyB3aWxsCisJCSAqIGJvcnJvdyBDUFUgdGltZSBmcm9tIHRoaXMgQ1BVIGFuZCBjYXVzZSBSVCB0YXNrIHVzZSA+IDk1JQorCQkgKiBDUFUgdGltZS4gVG8gbWFrZSAnYXZvaWQgc3RhcmF0aW9uJyB3b3JrLCB0YWtlcyBhIG5hcCBoZXJlLgorCQkgKi8KKwkJaWYgKGRvX3NsZWVwKQorCQkJc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZShIWiAqIGlkbGVfcGN0IC8gMTAwKTsKKwl9CisKKwlleGl0X3JvdW5kX3JvYmluKHRza19pbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBzX3Rza3NbTlJfQ1BVU107CitzdGF0aWMgdW5zaWduZWQgaW50IHBzX3Rza19udW07CitzdGF0aWMgaW50IGNyZWF0ZV9wb3dlcl9zYXZpbmdfdGFzayh2b2lkKQoreworCXBzX3Rza3NbcHNfdHNrX251bV0gPSBrdGhyZWFkX3J1bihwb3dlcl9zYXZpbmdfdGhyZWFkLAorCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXBzX3Rza19udW0sCisJCSJwb3dlcl9zYXZpbmcvJWQiLCBwc190c2tfbnVtKTsKKwlpZiAocHNfdHNrc1twc190c2tfbnVtXSkgeworCQlwc190c2tfbnVtKys7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9wb3dlcl9zYXZpbmdfdGFzayh2b2lkKQoreworCWlmIChwc190c2tfbnVtID4gMCkgeworCQlwc190c2tfbnVtLS07CisJCWt0aHJlYWRfc3RvcChwc190c2tzW3BzX3Rza19udW1dKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wb3dlcl9zYXZpbmdfdGFza19udW0odW5zaWduZWQgaW50IG51bSkKK3sKKwlpZiAobnVtID4gcHNfdHNrX251bSkgeworCQl3aGlsZSAocHNfdHNrX251bSA8IG51bSkgeworCQkJaWYgKGNyZWF0ZV9wb3dlcl9zYXZpbmdfdGFzaygpKQorCQkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAobnVtIDwgcHNfdHNrX251bSkgeworCQl3aGlsZSAocHNfdHNrX251bSA+IG51bSkKKwkJCWRlc3Ryb3lfcG93ZXJfc2F2aW5nX3Rhc2soKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfaWRsZV9jcHVzKHVuc2lnbmVkIGludCBudW1fY3B1cykKK3sKKwlnZXRfb25saW5lX2NwdXMoKTsKKworCW51bV9jcHVzID0gbWluX3QodW5zaWduZWQgaW50LCBudW1fY3B1cywgbnVtX29ubGluZV9jcHVzKCkpOworCXNldF9wb3dlcl9zYXZpbmdfdGFza19udW0obnVtX2NwdXMpOworCisJcHV0X29ubGluZV9jcHVzKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhY3BpX3BhZF9pZGxlX2NwdXNfbnVtKHZvaWQpCit7CisJcmV0dXJuIHBzX3Rza19udW07Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX3JydGltZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobnVtIDwgMSB8fCBudW0gPj0gMTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJvdW5kX3JvYmluX3RpbWUgPSBudW07CisJbXV0ZXhfdW5sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfcnJ0aW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkIiwgcm91bmRfcm9iaW5fdGltZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIocnJ0aW1lLCBTX0lSVUdPfFNfSVdVU1IsCisJYWNwaV9wYWRfcnJ0aW1lX3Nob3csCisJYWNwaV9wYWRfcnJ0aW1lX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZXBjdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgbnVtOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZudW0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobnVtIDwgMSB8fCBudW0gPj0gMTAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdXRleF9sb2NrKCZpc29sYXRlZF9jcHVzX2xvY2spOworCWlkbGVfcGN0ID0gbnVtOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfcGFkX2lkbGVwY3Rfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQiLCBpZGxlX3BjdCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaWRsZXBjdCwgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX2lkbGVwY3Rfc2hvdywKKwlhY3BpX3BhZF9pZGxlcGN0X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWNwaV9wYWRfaWRsZWNwdXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlhY3BpX3BhZF9pZGxlX2NwdXMobnVtKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhY3BpX3BhZF9pZGxlY3B1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBjcHVtYXNrX3NjbnByaW50ZihidWYsIFBBR0VfU0laRSwKKwkJdG9fY3B1bWFzayhwYWRfYnVzeV9jcHVzX2JpdHMpKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihpZGxlY3B1cywgU19JUlVHT3xTX0lXVVNSLAorCWFjcGlfcGFkX2lkbGVjcHVzX3Nob3csCisJYWNwaV9wYWRfaWRsZWNwdXNfc3RvcmUpOworCitzdGF0aWMgaW50IGFjcGlfcGFkX2FkZF9zeXNmcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVjcHVzKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZXBjdCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX3JydGltZSk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZWNwdXMpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaWRsZXBjdCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pZGxlY3B1cyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2lkbGVwY3QpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9ycnRpbWUpOworfQorCisvKiBRdWVyeSBmaXJtd2FyZSBob3cgbWFueSBDUFVzIHNob3VsZCBiZSBpZGxlICovCitzdGF0aWMgaW50IGFjcGlfcGFkX3B1cihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqbnVtX2NwdXMpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlOworCWludCByZXYsIG51bSwgcmV0ID0gLUVJTlZBTDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9QVVIiLCBOVUxMLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRUlOVkFMOworCXBhY2thZ2UgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAocGFja2FnZS0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSB8fCBwYWNrYWdlLT5wYWNrYWdlLmNvdW50ICE9IDIpCisJCWdvdG8gb3V0OworCXJldiA9IHBhY2thZ2UtPnBhY2thZ2UuZWxlbWVudHNbMF0uaW50ZWdlci52YWx1ZTsKKwludW0gPSBwYWNrYWdlLT5wYWNrYWdlLmVsZW1lbnRzWzFdLmludGVnZXIudmFsdWU7CisJaWYgKHJldiAhPSAxKQorCQlnb3RvIG91dDsKKwkqbnVtX2NwdXMgPSBudW07CisJcmV0ID0gMDsKK291dDoKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuIHJldDsKK30KKworLyogTm90aWZ5IGZpcm13YXJlIGhvdyBtYW55IENQVXMgYXJlIGlkbGUgKi8KK3N0YXRpYyB2b2lkIGFjcGlfcGFkX29zdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0LAorCXVpbnQzMl90IGlkbGVfY3B1cykKK3sKKwl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbM10gPSB7CisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJCXsudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSLH0sCisJCXsudHlwZSA9IEFDUElfVFlQRV9CVUZGRVIsfSwKKwl9OworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0ID0gezMsIHBhcmFtc307CisKKwlwYXJhbXNbMF0uaW50ZWdlci52YWx1ZSA9IEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZOworCXBhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlID0gIHN0YXQ7CisJcGFyYW1zWzJdLmJ1ZmZlci5sZW5ndGggPSA0OworCXBhcmFtc1syXS5idWZmZXIucG9pbnRlciA9ICh2b2lkICopJmlkbGVfY3B1czsKKwlhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NUIiwgJmFyZ19saXN0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9wYWRfaGFuZGxlX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJaW50IG51bV9jcHVzLCByZXQ7CisJdWludDMyX3QgaWRsZV9jcHVzOworCisJbXV0ZXhfbG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKwlpZiAoYWNwaV9wYWRfcHVyKGhhbmRsZSwgJm51bV9jcHVzKSkgeworCQltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJCXJldHVybjsKKwl9CisJcmV0ID0gYWNwaV9wYWRfaWRsZV9jcHVzKG51bV9jcHVzKTsKKwlpZGxlX2NwdXMgPSBhY3BpX3BhZF9pZGxlX2NwdXNfbnVtKCk7CisJaWYgKCFyZXQpCisJCWFjcGlfcGFkX29zdChoYW5kbGUsIDAsIGlkbGVfY3B1cyk7CisJZWxzZQorCQlhY3BpX3BhZF9vc3QoaGFuZGxlLCAxLCAwKTsKKwltdXRleF91bmxvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfcGFkX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwKKwl2b2lkICpkYXRhKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfTk9USUZZOgorCQlhY3BpX3BhZF9oYW5kbGVfbm90aWZ5KGhhbmRsZSk7CisJCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZGV2aWNlLCBldmVudCwgMCk7CisJCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAorCQkJZGV2X25hbWUoJmRldmljZS0+ZGV2KSwgZXZlbnQsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HIlVuc3VwcG9ydGVkIGV2ZW50IFsweCV4XVxuIiwgZXZlbnQpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfREVWSUNFX05BTUUpOworCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9SX0NMQVNTKTsKKworCWlmIChhY3BpX3BhZF9hZGRfc3lzZnMoZGV2aWNlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCisJCUFDUElfREVWSUNFX05PVElGWSwgYWNwaV9wYWRfbm90aWZ5LCBkZXZpY2UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlhY3BpX3BhZF9yZW1vdmVfc3lzZnMoZGV2aWNlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNwaV9wYWRfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAorCWludCB0eXBlKQoreworCW11dGV4X2xvY2soJmlzb2xhdGVkX2NwdXNfbG9jayk7CisJYWNwaV9wYWRfaWRsZV9jcHVzKDApOworCW11dGV4X3VubG9jaygmaXNvbGF0ZWRfY3B1c19sb2NrKTsKKworCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQlBQ1BJX0RFVklDRV9OT1RJRlksIGFjcGlfcGFkX25vdGlmeSk7CisJYWNwaV9wYWRfcmVtb3ZlX3N5c2ZzKGRldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcGFkX2RldmljZV9pZHNbXSA9IHsKKwl7IkFDUEkwMDBDIiwgMH0sCisJeyIiLCAwfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHBhZF9kZXZpY2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3BhZF9kcml2ZXIgPSB7CisJLm5hbWUgPSAicHJvY2Vzc29yX2FnZ3JlZ2F0b3IiLAorCS5jbGFzcyA9IEFDUElfUFJPQ0VTU09SX0FHR1JFR0FUT1JfQ0xBU1MsCisJLmlkcyA9IHBhZF9kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3BhZF9hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3BhZF9yZW1vdmUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFkX2luaXQodm9pZCkKK3sKKwlwb3dlcl9zYXZpbmdfbXdhaXRfaW5pdCgpOworCWlmIChwb3dlcl9zYXZpbmdfbXdhaXRfZWF4ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9wYWRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFjcGlfcGFkX2V4aXQodm9pZCkKK3sKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9wYWRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWNwaV9wYWRfaW5pdCk7Cittb2R1bGVfZXhpdChhY3BpX3BhZF9leGl0KTsKK01PRFVMRV9BVVRIT1IoIlNoYW9odWEgTGk8c2hhb2h1YS5saUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIEFnZ3JlZ2F0b3IgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29uZmlnLmgKaW5kZXggOGU2NzllZi4uYTQ0NzFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbmZpZy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb25maWcuaApAQCAtMTAzLDkgKzEwMyw5IEBACiAKICNkZWZpbmUgQUNQSV9NQVhfUkVGRVJFTkNFX0NPVU5UICAgICAgICAweDEwMDAKIAotLyogU2l6ZSBvZiBjYWNoZWQgbWVtb3J5IG1hcHBpbmcgZm9yIHN5c3RlbSBtZW1vcnkgb3BlcmF0aW9uIHJlZ2lvbiAqLworLyogRGVmYXVsdCBwYWdlIHNpemUgZm9yIHVzZSBpbiBtYXBwaW5nIG1lbW9yeSBmb3Igb3BlcmF0aW9uIHJlZ2lvbnMgKi8KIAotI2RlZmluZSBBQ1BJX1NZU01FTV9SRUdJT05fV0lORE9XX1NJWkUgIDQwOTYKKyNkZWZpbmUgQUNQSV9ERUZBVUxUX1BBR0VfU0laRSAgICAgICAgICA0MDk2CS8qIE11c3QgYmUgcG93ZXIgb2YgMiAqLwogCiAvKiBvd25lcl9pZCB0cmFja2luZy4gOCBlbnRyaWVzIGFsbG93cyBmb3IgMjU1IG93bmVyX2lkcyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKaW5kZXggM2E1NGI3My4uMmJkODNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwpAQCAtNzcsNyArNzcsOCBAQAogCXZvaWQgKmxvZ2ljYWxfYWRkcl9wdHIgPSBOVUxMOwogCXN0cnVjdCBhY3BpX21lbV9zcGFjZV9jb250ZXh0ICptZW1faW5mbyA9IHJlZ2lvbl9jb250ZXh0OwogCXUzMiBsZW5ndGg7Ci0JYWNwaV9zaXplIHdpbmRvd19zaXplOworCWFjcGlfc2l6ZSBtYXBfbGVuZ3RoOworCWFjcGlfc2l6ZSBwYWdlX2JvdW5kYXJ5X21hcF9sZW5ndGg7CiAjaWZkZWYgQUNQSV9NSVNBTElHTk1FTlRfTk9UX1NVUFBPUlRFRAogCXUzMiByZW1haW5kZXI7CiAjZW5kaWYKQEAgLTE0NCwyNSArMTQ1LDM5IEBACiAJCX0KIAogCQkvKgotCQkgKiBEb24ndCBhdHRlbXB0IHRvIG1hcCBtZW1vcnkgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbiwgYW5kCi0JCSAqIGNvbnN0cmFpbiB0aGUgbWF4aW11bSBtYXBwaW5nIHNpemUgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUuCisJCSAqIEF0dGVtcHQgdG8gbWFwIGZyb20gdGhlIHJlcXVlc3RlZCBhZGRyZXNzIHRvIHRoZSBlbmQgb2YgdGhlIHJlZ2lvbi4KKwkJICogSG93ZXZlciwgd2Ugd2lsbCBuZXZlciBtYXAgbW9yZSB0aGFuIG9uZSBwYWdlLCBub3Igd2lsbCB3ZSBjcm9zcworCQkgKiBhIHBhZ2UgYm91bmRhcnkuCiAJCSAqLwotCQl3aW5kb3dfc2l6ZSA9IChhY3BpX3NpemUpCisJCW1hcF9sZW5ndGggPSAoYWNwaV9zaXplKQogCQkgICAgKChtZW1faW5mby0+YWRkcmVzcyArIG1lbV9pbmZvLT5sZW5ndGgpIC0gYWRkcmVzcyk7CiAKLQkJaWYgKHdpbmRvd19zaXplID4gQUNQSV9TWVNNRU1fUkVHSU9OX1dJTkRPV19TSVpFKSB7Ci0JCQl3aW5kb3dfc2l6ZSA9IEFDUElfU1lTTUVNX1JFR0lPTl9XSU5ET1dfU0laRTsKKwkJLyoKKwkJICogSWYgbWFwcGluZyB0aGUgZW50aXJlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSByZWdpb24gd2lsbCBjcm9zcworCQkgKiBhIHBhZ2UgYm91bmRhcnksIGp1c3QgbWFwIHVwIHRvIHRoZSBwYWdlIGJvdW5kYXJ5LCBkbyBub3QgY3Jvc3MuCisJCSAqIE9uIHNvbWUgc3lzdGVtcywgY3Jvc3NpbmcgYSBwYWdlIGJvdW5kYXJ5IHdoaWxlIG1hcHBpbmcgcmVnaW9ucworCQkgKiBjYW4gY2F1c2Ugd2FybmluZ3MgaWYgdGhlIHBhZ2VzIGhhdmUgZGlmZmVyZW50IGF0dHJpYnV0ZXMKKwkJICogZHVlIHRvIHJlc291cmNlIG1hbmFnZW1lbnQKKwkJICovCisJCXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCA9CisJCSAgICBBQ1BJX1JPVU5EX1VQKGFkZHJlc3MsIEFDUElfREVGQVVMVF9QQUdFX1NJWkUpIC0gYWRkcmVzczsKKworCQlpZiAoIXBhZ2VfYm91bmRhcnlfbWFwX2xlbmd0aCkgeworCQkJcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoID0gQUNQSV9ERUZBVUxUX1BBR0VfU0laRTsKKwkJfQorCisJCWlmIChtYXBfbGVuZ3RoID4gcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoKSB7CisJCQltYXBfbGVuZ3RoID0gcGFnZV9ib3VuZGFyeV9tYXBfbGVuZ3RoOwogCQl9CiAKIAkJLyogQ3JlYXRlIGEgbmV3IG1hcHBpbmcgc3RhcnRpbmcgYXQgdGhlIGFkZHJlc3MgZ2l2ZW4gKi8KIAotCQltZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcyA9Ci0JCQlhY3BpX29zX21hcF9tZW1vcnkoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWRkcmVzcywgd2luZG93X3NpemUpOworCQltZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcyA9IGFjcGlfb3NfbWFwX21lbW9yeSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhZGRyZXNzLCBtYXBfbGVuZ3RoKTsKIAkJaWYgKCFtZW1faW5mby0+bWFwcGVkX2xvZ2ljYWxfYWRkcmVzcykgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIkNvdWxkIG5vdCBtYXAgbWVtb3J5IGF0ICU4LjhYJTguOFgsIHNpemUgJVgiLAogCQkJCSAgICBBQ1BJX0ZPUk1BVF9OQVRJVkVfVUlOVChhZGRyZXNzKSwKLQkJCQkgICAgKHUzMikgd2luZG93X3NpemUpKTsKKwkJCQkgICAgKHUzMikgbWFwX2xlbmd0aCkpOwogCQkJbWVtX2luZm8tPm1hcHBlZF9sZW5ndGggPSAwOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJCX0KQEAgLTE3MCw3ICsxODUsNyBAQAogCQkvKiBTYXZlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBtYXBwaW5nIHNpemUgKi8KIAogCQltZW1faW5mby0+bWFwcGVkX3BoeXNpY2FsX2FkZHJlc3MgPSBhZGRyZXNzOwotCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IHdpbmRvd19zaXplOworCQltZW1faW5mby0+bWFwcGVkX2xlbmd0aCA9IG1hcF9sZW5ndGg7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCAxMzVmYmZlLi43NDExOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC05NCwzNiArOTQsMzMgQEAKIAogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19nZXRfZGV2aWNlKTsKIAorYWNwaV9zdGF0dXMgYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX1NUQSIsIE5VTEwsIHN0YSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQorCQlyZXR1cm4gQUVfT0s7CisKKwlpZiAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgeworCQkqc3RhID0gQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8CisJCSAgICAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKKwkJcmV0dXJuIEFFX09LOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCiBpbnQgYWNwaV9idXNfZ2V0X3N0YXR1cyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc3RhID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YTsKIAorCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAmc3RhKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBFdmFsdWF0ZSBfU1RBIGlmIHByZXNlbnQuCi0JICovCi0JaWYgKGRldmljZS0+ZmxhZ3MuZHluYW1pY19zdGF0dXMpIHsKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9TVEEiLCBOVUxMLCAmc3RhKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gKGludClzdGE7Ci0JfQotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gQUNQSSBzcGVjIHNvbWUgZGV2aWNlIGNhbiBiZSBwcmVzZW50IGFuZCBmdW5jdGlvbmFsCi0JICogZXZlbiBpZiB0aGUgcGFyZW50IGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGlvbmFsLgotCSAqIEluIHN1Y2ggY29uZGl0aW9ucyB0aGUgY2hpbGQgZGV2aWNlIHNob3VsZCBub3QgaW5oZXJpdCB0aGUgc3RhdHVzCi0JICogZnJvbSB0aGUgcGFyZW50LgotCSAqLwotCWVsc2UKLQkJU1RSVUNUX1RPX0lOVChkZXZpY2UtPnN0YXR1cykgPQotCQkgICAgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfVUkgICAgICB8IEFDUElfU1RBX0RFVklDRV9GVU5DVElPTklORzsKKwlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9IChpbnQpIHN0YTsKIAogCWlmIChkZXZpY2UtPnN0YXR1cy5mdW5jdGlvbmFsICYmICFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBbJXNdIHN0YXR1cyBbJTA4eF06ICIKQEAgLTEzNSwxMCArMTMyLDggQEAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJEZXZpY2UgWyVzXSBzdGF0dXMgWyUwOHhdXG4iLAogCQkJICBkZXZpY2UtPnBucC5idXNfaWQsCiAJCQkgICh1MzIpIFNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpKSk7Ci0KIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19nZXRfc3RhdHVzKTsKIAogdm9pZCBhY3BpX2J1c19wcml2YXRlX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggOTMzNWI4Ny4uMGM5YzZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtMjUxLDYgKzI1MSw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0ZTsKIAorCWlmICghbGlkX2RldmljZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIobGlkX2RldmljZS0+aGFuZGxlLCAiX0xJRCIsIE5VTEwsCiAJCQkJICAgICAgICZzdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggM2EyY2ZlZi4uNzMzOGI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBkZXBlbmRlbnRfZGV2aWNlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhvdHBsdWdfZGV2aWNlczsKIAotCXN0cnVjdCBsaXN0X2hlYWQgc2liaWxpbmc7CisJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRvY2tfZGV2aWNlOwogfTsKIHN0YXRpYyBMSVNUX0hFQUQoZG9ja19zdGF0aW9ucyk7CkBAIC0yNzUsNyArMjc1LDcgQEAKIAogCWlmIChpc19kb2NrKGhhbmRsZSkpCiAJCXJldHVybiAxOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJaWYgKGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKSkKIAkJCXJldHVybiAxOwogCX0KQEAgLTYxOSw3ICs2MTksNyBAQAogCSAqIG1ha2Ugc3VyZSB0aGlzIGhhbmRsZSBpcyBmb3IgYSBkZXZpY2UgZGVwZW5kZW50IG9uIHRoZSBkb2NrLAogCSAqIHRoaXMgd291bGQgaW5jbHVkZSB0aGUgZG9jayBzdGF0aW9uIGl0c2VsZgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJLyoKIAkJICogQW4gQVRBIGJheSBjYW4gYmUgaW4gYSBkb2NrIGFuZCBpdHNlbGYgY2FuIGJlIGVqZWN0ZWQKIAkJICogc2VwZXJhdGVseSwgc28gdGhlcmUgYXJlIHR3byAnZG9jayBzdGF0aW9ucycgd2hpY2ggbmVlZCB0aGUKQEAgLTY1MSw3ICs2NTEsNyBAQAogCWlmICghZG9ja19zdGF0aW9uX2NvdW50KQogCQlyZXR1cm47CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmlsaW5nKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKSB7CiAJCWRkID0gZmluZF9kb2NrX2RlcGVuZGVudF9kZXZpY2UoZG9ja19zdGF0aW9uLCBoYW5kbGUpOwogCQlpZiAoZGQpCiAJCQlkb2NrX2RlbF9ob3RwbHVnX2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCWlmIChldmVudCAhPSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0sgJiYgZXZlbnQgIT0gQUNQSV9OT1RJRllfREVWSUNFX0NIRUNLCiAJICAgJiYgZXZlbnQgIT0gQUNQSV9OT1RJRllfRUpFQ1RfUkVRVUVTVCkKIAkJcmV0dXJuIDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb2NrX3N0YXRpb24sICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2libGluZykgewogCQlpZiAoZG9ja19zdGF0aW9uLT5oYW5kbGUgPT0gaGFuZGxlKSB7CiAJCQlzdHJ1Y3QgZG9ja19kYXRhICpkb2NrX2RhdGE7CiAKQEAgLTk1OCw3ICs5NTgsNyBAQAogCWRvY2tfc3RhdGlvbi0+bGFzdF9kb2NrX3RpbWUgPSBqaWZmaWVzIC0gSFo7CiAJSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+ZGVwZW5kZW50X2RldmljZXMpOwogCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPmhvdHBsdWdfZGV2aWNlcyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRvY2tfc3RhdGlvbi0+c2liaWxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZkb2NrX3N0YXRpb24tPnNpYmxpbmcpOwogCXNwaW5fbG9ja19pbml0KCZkb2NrX3N0YXRpb24tPmRkX2xvY2spOwogCW11dGV4X2luaXQoJmRvY2tfc3RhdGlvbi0+aHBfbG9jayk7CiAJQVRPTUlDX0lOSVRfTk9USUZJRVJfSEVBRCgmZG9ja19ub3RpZmllcl9saXN0KTsKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJYWRkX2RvY2tfZGVwZW5kZW50X2RldmljZShkb2NrX3N0YXRpb24sIGRkKTsKIAogCWRvY2tfc3RhdGlvbl9jb3VudCsrOwotCWxpc3RfYWRkKCZkb2NrX3N0YXRpb24tPnNpYmlsaW5nLCAmZG9ja19zdGF0aW9ucyk7CisJbGlzdF9hZGQoJmRvY2tfc3RhdGlvbi0+c2libGluZywgJmRvY2tfc3RhdGlvbnMpOwogCXJldHVybiAwOwogCiBkb2NrX2FkZF9lcnJfdW5yZWdpc3RlcjoKQEAgLTExNDksNyArMTE0OSw3IEBACiAJc3RydWN0IGRvY2tfc3RhdGlvbiAqdG1wOwogCiAJdW5yZWdpc3Rlcl9hY3BpX2J1c19ub3RpZmllcigmZG9ja19hY3BpX25vdGlmaWVyKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZG9ja19zdGF0aW9uLCB0bXAsICZkb2NrX3N0YXRpb25zLCBzaWJpbGluZykKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZG9ja19zdGF0aW9uLCB0bXAsICZkb2NrX3N0YXRpb25zLCBzaWJsaW5nKQogCQlkb2NrX3JlbW92ZShkb2NrX3N0YXRpb24pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZWMuYyBiL2RyaXZlcnMvYWNwaS9lYy5jCmluZGV4IGY3MDc5NjAuLmJhZWYyOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9lYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9lYy5jCkBAIC0xMTksNiArMTE5LDggQEAKIH0gKmJvb3RfZWMsICpmaXJzdF9lYzsKIAogc3RhdGljIGludCBFQ19GTEFHU19NU0k7IC8qIE91dC1vZi1zcGVjIE1TSSBjb250cm9sbGVyICovCitzdGF0aWMgaW50IEVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQ7IC8qIEFTVVN0ZWMgRUNEVHMgbmVlZCB0byBiZSB2YWxpZGF0ZWQgKi8KK3N0YXRpYyBpbnQgRUNfRkxBR1NfU0tJUF9EU0RUX1NDQU47IC8qIE5vdCBhbGwgQklPUyBzdXJ2aXZlIGVhcmx5IERTRFQgc2NhbiAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBNYW5hZ2VtZW50CkBAIC0yMzIsMTAgKzIzNCw4IEBACiAJCQl9CiAJCQlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7CiAJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7Ci0JCWlmICghZWMtPmN1cnItPmlycV9jb3VudCB8fAotCQkgICAgKGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpICYgQUNQSV9FQ19GTEFHX0lCRikpCisJCWlmIChhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSAmIEFDUElfRUNfRkxBR19JQkYpCiAJCQlicmVhazsKLQkJLyogdHJ5IHJlc3RhcnQgY29tbWFuZCBpZiB3ZSBnZXQgYW55IGZhbHNlIGludGVycnVwdHMgKi8KIAkJcHJfZGVidWcoUFJFRklYICJjb250cm9sbGVyIHJlc2V0LCByZXN0YXJ0IHRyYW5zYWN0aW9uXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5jdXJyX2xvY2ssIGZsYWdzKTsKIAkJc3RhcnRfdHJhbnNhY3Rpb24oZWMpOwpAQCAtODk5LDYgKzg5OSw0NCBAQAogCXsiIiwgMH0sCiB9OwogCisvKiBTb21lIEJJT1MgZG8gbm90IHN1cnZpdmUgZWFybHkgRFNEVCBzY2FuLCBza2lwIGl0ICovCitzdGF0aWMgaW50IGVjX3NraXBfZHNkdF9zY2FuKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19TS0lQX0RTRFRfU0NBTiA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIEFTVVN0ZWsgb2Z0ZW4gc3VwcGxpZXMgdXMgd2l0aCBicm9rZW4gRUNEVCwgdmFsaWRhdGUgaXQgKi8KK3N0YXRpYyBpbnQgZWNfdmFsaWRhdGVfZWNkdChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJRUNfRkxBR1NfVkFMSURBVEVfRUNEVCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qIE1TSSBFQyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudCwgZW5hYmxlIGl0ICovCitzdGF0aWMgaW50IGVjX2ZsYWdfbXNpKGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlFQ19GTEFHU19NU0kgPSAxOworCUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBlY19kbWlfdGFibGVbXSA9IHsKKwl7CisJZWNfc2tpcF9kc2R0X3NjYW4sICJDb21wYWwgSkZMOTIiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkNPTVBBTCIpLAorCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIkpGTDkyIikgfSwgTlVMTH0sCisJeworCWVjX2ZsYWdfbXNpLCAiTVNJIGhhcmR3YXJlIiwgeworCURNSV9NQVRDSChETUlfQklPU19WRU5ET1IsICJNaWNyby1TdGFyIiksCisJRE1JX01BVENIKERNSV9DSEFTU0lTX1ZFTkRPUiwgIk1JQ1JPLVN0YXIiKSB9LCBOVUxMfSwKKwl7CisJZWNfdmFsaWRhdGVfZWNkdCwgIkFTVVMgaGFyZHdhcmUiLCB7CisJRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwgIkFTVVMiKSB9LCBOVUxMfSwKKwl7fSwKK307CisKKwogaW50IF9faW5pdCBhY3BpX2VjX2VjZHRfcHJvYmUodm9pZCkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC05MTEsMTEgKzk0OSw3IEBACiAJLyoKIAkgKiBHZW5lcmF0ZSBhIGJvb3QgZWMgY29udGV4dAogCSAqLwotCWlmIChkbWlfbmFtZV9pbl92ZW5kb3JzKCJNaWNyby1TdGFyIikgfHwKLQkgICAgZG1pX25hbWVfaW5fdmVuZG9ycygiTm90ZWJvb2siKSkgewotCQlwcl9pbmZvKFBSRUZJWCAiRW5hYmxpbmcgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIEVDIGZyb20gTVNJLlxuIik7Ci0JCUVDX0ZMQUdTX01TSSA9IDE7Ci0JfQorCWRtaV9jaGVja19zeXN0ZW0oZWNfZG1pX3RhYmxlKTsKIAlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19FQ0RULCAxLAogCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmVjZHRfcHRyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTkyNiw3ICs5NjAsNyBAQAogCQlib290X2VjLT5oYW5kbGUgPSBBQ1BJX1JPT1RfT0JKRUNUOwogCQlhY3BpX2dldF9oYW5kbGUoQUNQSV9ST09UX09CSkVDVCwgZWNkdF9wdHItPmlkLCAmYm9vdF9lYy0+aGFuZGxlKTsKIAkJLyogRG9uJ3QgdHJ1c3QgRUNEVCwgd2hpY2ggY29tZXMgZnJvbSBBU1VTVGVrICovCi0JCWlmICghZG1pX25hbWVfaW5fdmVuZG9ycygiQVNVUyIpICYmIEVDX0ZMQUdTX01TSSA9PSAwKQorCQlpZiAoIUVDX0ZMQUdTX1ZBTElEQVRFX0VDRFQpCiAJCQlnb3RvIGluc3RhbGw7CiAJCXNhdmVkX2VjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfZWMpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzYXZlZF9lYykKQEAgLTkzNCw2ICs5NjgsMTAgQEAKIAkJbWVtY3B5KHNhdmVkX2VjLCBib290X2VjLCBzaXplb2Yoc3RydWN0IGFjcGlfZWMpKTsKIAkvKiBmYWxsIHRocm91Z2ggKi8KIAl9CisKKwlpZiAoRUNfRkxBR1NfU0tJUF9EU0RUX1NDQU4pCisJCXJldHVybiAtRU5PREVWOworCiAJLyogVGhpcyB3b3JrYXJvdW5kIGlzIG5lZWRlZCBvbmx5IG9uIHNvbWUgYnJva2VuIG1hY2hpbmVzLAogCSAqIHdoaWNoIHJlcXVpcmUgZWFybHkgRUMsIGJ1dCBmYWlsIHRvIHByb3ZpZGUgRUNEVCAqLwogCXByaW50ayhLRVJOX0RFQlVHIFBSRUZJWCAiTG9vayB1cCBFQyBpbiBEU0RUXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9vc2wuYyBiL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA1NjMzYjg2Li43YzFjNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvb3NsLmMKKysrIGIvZHJpdmVycy9hY3BpL29zbC5jCkBAIC0xMTYxLDcgKzExNjEsMTMgQEAKIAkJCSAgICAgICByZXNfbGlzdF9lbGVtLT5uYW1lLAogCQkJICAgICAgIChsb25nIGxvbmcpIHJlc19saXN0X2VsZW0tPnN0YXJ0LAogCQkJICAgICAgIChsb25nIGxvbmcpIHJlc19saXN0X2VsZW0tPmVuZCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBEZXZpY2UgbmVlZHMgYW4gQUNQSSBkcml2ZXJcbiIpOworCQkJaWYgKGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPT0gRU5GT1JDRV9SRVNPVVJDRVNfTEFYKQorCQkJCXByaW50ayhLRVJOX05PVElDRSAiQUNQSTogVGhpcyBjb25mbGljdCBtYXkiCisJCQkJICAgICAgICIgY2F1c2UgcmFuZG9tIHByb2JsZW1zIGFuZCBzeXN0ZW0iCisJCQkJICAgICAgICIgaW5zdGFiaWxpdHlcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogSWYgYW4gQUNQSSBkcml2ZXIgaXMgYXZhaWxhYmxlIgorCQkJICAgICAgICIgZm9yIHRoaXMgZGV2aWNlLCB5b3Ugc2hvdWxkIHVzZSBpdCBpbnN0ZWFkIG9mIgorCQkJICAgICAgICIgdGhlIG5hdGl2ZSBkcml2ZXJcbiIpOwogCQl9CiAJCWlmIChhY3BpX2VuZm9yY2VfcmVzb3VyY2VzID09IEVORk9SQ0VfUkVTT1VSQ0VTX1NUUklDVCkKIAkJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCmluZGV4IDMxMTIyMjEuLjFhZjgwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jCkBAIC0zODksNiArMzg5LDE3IEBACiAKIAkJcGJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlOwogCQlwY2lfZGV2X3B1dChwZGV2KTsKKworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZm9yIGEgbm9uLVBDSSBkZXZpY2UgdGhhdCBoYXMgYQorCQkgKiBQQ0kgcGFyZW50IChlZy4gYSBkaXNrIHVuZGVyIGEgUENJIFNBVEEgY29udHJvbGxlcikuICBJbiB0aGF0CisJCSAqIGNhc2UgcGRldi0+c3Vib3JkaW5hdGUgd2lsbCBiZSBOVUxMIGZvciB0aGUgcGFyZW50LgorCQkgKi8KKwkJaWYgKCFwYnVzKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJOb3QgYSBQQ0ktdG8tUENJIGJyaWRnZVxuIik7CisJCQlwZGV2ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CiAJfQogb3V0OgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0bXAsICZkZXZpY2VfbGlzdCwgbm9kZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wb3dlcl9tZXRlci5jIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKaW5kZXggZTZiZmQ3Ny4uMmVmNzAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKKysrIGIvZHJpdmVycy9hY3BpL3Bvd2VyX21ldGVyLmMKQEAgLTI5NCw3ICsyOTQsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIGRhdGE7CisJLyogX1BUUCByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uemVybyBvdGhlcndpc2UgKi8KKwlpZiAoZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3RyaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCmluZGV4IGQwZDU1MGQuLmQwZDI1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2MuYwpAQCAtMzkzLDExICszOTMsMTMgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAljaGFyIHN0cmJ1Zls1XTsKIAljaGFyIHN0cls1XSA9ICIiOwotCWludCBsZW4gPSBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gY291bnQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpmb3VuZF9kZXYgPSBOVUxMOwogCiAJaWYgKGxlbiA+IDQpCiAJCWxlbiA9IDQ7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKHN0cmJ1ZiwgYnVmZmVyLCBsZW4pKQogCQlyZXR1cm4gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggYzJkNGQ2ZS4uZWM3NDJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCSAgICAubm90aWZpZXJfY2FsbCA9IGFjcGlfY3B1X3NvZnRfbm90aWZ5LAogfTsKIAotc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fY3B1aW5pdCBhY3BpX3Byb2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC04NjMsMTMgKzg2Myw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9zeXNmczsKIAl9CiAKLQlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIiVzIFslc10gKHN1cHBvcnRzIiwKLQkJICAgICAgIGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCQlwcmludGsoIiAlZCB0aHJvdHRsaW5nIHN0YXRlcyIsIHByLT50aHJvdHRsaW5nLnN0YXRlX2NvdW50KTsKLQkJcHJpbnRrKCIpXG4iKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3JlbW92ZV9zeXNmczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggY2M2MWE2Mi4uYmJkMDY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTExNjYsNyArMTE2Niw2IEBACiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAjZW5kaWYKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWlmIChib290X29wdGlvbl9pZGxlX292ZXJyaWRlKQogCQlyZXR1cm4gMDsKQEAgLTEyMTQsMTMgKzEyMTMsNiBAQAogCQlhY3BpX3Byb2Nlc3Nvcl9zZXR1cF9jcHVpZGxlKHByKTsKIAkJaWYgKGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KSkKIAkJCXJldHVybiAtRUlPOwotCi0JCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJDUFUlZCAocG93ZXIgc3RhdGVzOiIsIHByLT5pZCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gcHItPnBvd2VyLmNvdW50OyBpKyspCi0JCQlpZiAocHItPnBvd2VyLnN0YXRlc1tpXS52YWxpZCkKLQkJCQlwcmludGsoIiBDJWRbQyVkXSIsIGksCi0JCQkJICAgICAgIHByLT5wb3dlci5zdGF0ZXNbaV0udHlwZSk7Ci0JCXByaW50aygiKVxuIik7CiAJfQogI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCS8qICdwb3dlcicgW1JdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IDRjNmMxNGMuLjFjNWQ3YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC0xMTMzLDE1ICsxMTMzLDE1IEBACiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmcgKnB0aHJvdHRsaW5nOwogCisJaWYgKCFwcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJwYmxrX2FkZHJlc3NbMHglMDh4XSBkdXR5X29mZnNldFslZF0gZHV0eV93aWR0aFslZF1cbiIsCiAJCQkgIHByLT50aHJvdHRsaW5nLmFkZHJlc3MsCiAJCQkgIHByLT50aHJvdHRsaW5nLmR1dHlfb2Zmc2V0LAogCQkJICBwci0+dGhyb3R0bGluZy5kdXR5X3dpZHRoKSk7CiAKLQlpZiAoIXByKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qCiAJICogRXZhbHVhdGUgX1BUQywgX1RTUyBhbmQgX1RQQwogCSAqIFRoZXkgbXVzdCBhbGwgYmUgcHJlc2VudCBvciBub25lIG9mIHRoZW0gY2FuIGJlIHVzZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCA0MDhlYmRlLi4xNGE3NDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgQUNQSV9CVVNfSElECQkJIkxOWFNZQlVTIgogI2RlZmluZSBBQ1BJX0JVU19ERVZJQ0VfTkFNRQkJIlN5c3RlbSBCdXMiCiAKKyNkZWZpbmUgQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpICAgICghKGRldmljZSktPnBhcmVudCkKKwogc3RhdGljIExJU1RfSEVBRChhY3BpX2RldmljZV9saXN0KTsKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9idXNfaWRfbGlzdCk7CiBERUZJTkVfTVVURVgoYWNwaV9kZXZpY2VfbG9jayk7CkBAIC00Myw0MCArNDUsMTkgQEAKIHsKIAlpbnQgbGVuOwogCWludCBjb3VudDsKLQotCWlmICghYWNwaV9kZXYtPmZsYWdzLmhhcmR3YXJlX2lkICYmICFhY3BpX2Rldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpCi0JCXJldHVybiAtRU5PREVWOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAogCWxlbiA9IHNucHJpbnRmKG1vZGFsaWFzLCBzaXplLCAiYWNwaToiKTsKIAlzaXplIC09IGxlbjsKIAotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpIHsKLQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJIGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWQsICZhY3BpX2Rldi0+cG5wLmlkcywgbGlzdCkgeworCQljb3VudCA9IHNucHJpbnRmKCZtb2RhbGlhc1tsZW5dLCBzaXplLCAiJXM6IiwgaWQtPmlkKTsKIAkJaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+PSBzaXplKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxlbiArPSBjb3VudDsKIAkJc2l6ZSAtPSBjb3VudDsKIAl9CiAKLQlpZiAoYWNwaV9kZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQljaWRfbGlzdCA9IGFjcGlfZGV2LT5wbnAuY2lkX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJY291bnQgPSBzbnByaW50ZigmbW9kYWxpYXNbbGVuXSwgc2l6ZSwgIiVzOiIsCi0JCQkJCSBjaWRfbGlzdC0+aWRzW2ldLnN0cmluZyk7Ci0JCQlpZiAoY291bnQgPCAwIHx8IGNvdW50ID49IHNpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICIlcyBjaWRbJWldIGV4Y2VlZHMgZXZlbnQgYnVmZmVyIHNpemUiLAotCQkJCSAgICAgICBhY3BpX2Rldi0+cG5wLmRldmljZV9uYW1lLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWxlbiArPSBjb3VudDsKLQkJCXNpemUgLT0gY291bnQ7Ci0JCX0KLQl9Ci0KIAltb2RhbGlhc1tsZW5dID0gJ1wwJzsKIAlyZXR1cm4gbGVuOwogfQpAQCAtMTgzLDcgKzE2NCw3IEBACiBhY3BpX2RldmljZV9oaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBhY3BpX2Rldi0+cG5wLmhhcmR3YXJlX2lkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaGlkLCAwNDQ0LCBhY3BpX2RldmljZV9oaWRfc2hvdywgTlVMTCk7CiAKQEAgLTIxOSwxNyArMjAwLDEzIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCkgewotCQlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfaGlkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGVuZDsKIAotCWlmIChkZXYtPmZsYWdzLmhhcmR3YXJlX2lkIHx8IGRldi0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMpIHsKLQkJcmVzdWx0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0KKwlyZXN1bHQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOworCWlmIChyZXN1bHQpCisJCWdvdG8gZW5kOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIElmIGRldmljZSBoYXMgX0VKMCwgJ2VqZWN0JyBmaWxlIGlzIGNyZWF0ZWQgdGhhdCBpcyB1c2VkIHRvIHRyaWdnZXIKQEAgLTI1NSwxMSArMjMyLDggQEAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9lamVjdCk7CiAKLQlpZiAoZGV2LT5mbGFncy5oYXJkd2FyZV9pZCB8fCBkZXYtPmZsYWdzLmNvbXBhdGlibGVfaWRzKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwotCi0JaWYgKGRldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9oaWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2hpZCk7CiAJaWYgKGRldi0+aGFuZGxlKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+ZGV2LCAmZGV2X2F0dHJfcGF0aCk7CiB9CkBAIC0yNzEsNiArMjQ1LDcgQEAKIAkJCSAgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZHMpCiB7CiAJY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkICppZDsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaHdpZDsKIAogCS8qCiAJICogSWYgdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gbG9hZCBkZXZpY2UKQEAgLTI3OSw0MCArMjU0LDMwIEBACiAJaWYgKCFkZXZpY2UtPnN0YXR1cy5wcmVzZW50KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmIChkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkKSB7Ci0JCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykgewotCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwgZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpKQorCWZvciAoaWQgPSBpZHM7IGlkLT5pZFswXTsgaWQrKykKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShod2lkLCAmZGV2aWNlLT5wbnAuaWRzLCBsaXN0KQorCQkJaWYgKCFzdHJjbXAoKGNoYXIgKikgaWQtPmlkLCBod2lkLT5pZCkpCiAJCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlpZiAoZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcykgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpjaWRfbGlzdCA9IGRldmljZS0+cG5wLmNpZF9saXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGlkID0gaWRzOyBpZC0+aWRbMF07IGlkKyspIHsKLQkJCS8qIGNvbXBhcmUgbXVsdGlwbGUgX0NJRCBlbnRyaWVzIGFnYWluc3QgZHJpdmVyIGlkcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGNpZF9saXN0LT5jb3VudDsgaSsrKSB7Ci0JCQkJaWYgKCFzdHJjbXAoKGNoYXIqKWlkLT5pZCwKLQkJCQkJICAgIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKSkKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCX0KLQl9CiAKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0woYWNwaV9tYXRjaF9kZXZpY2VfaWRzKTsKIAorc3RhdGljIHZvaWQgYWNwaV9mcmVlX2lkcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWQsIHRtcCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkgeworCQlrZnJlZShpZC0+aWQpOworCQlrZnJlZShpZCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKIAotCWtmcmVlKGFjcGlfZGV2LT5wbnAuY2lkX2xpc3QpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MuaGFyZHdhcmVfaWQpCi0JCWtmcmVlKGFjcGlfZGV2LT5wbnAuaGFyZHdhcmVfaWQpOwotCWlmIChhY3BpX2Rldi0+ZmxhZ3MudW5pcXVlX2lkKQotCQlrZnJlZShhY3BpX2Rldi0+cG5wLnVuaXF1ZV9pZCk7CisJYWNwaV9mcmVlX2lkcyhhY3BpX2Rldik7CiAJa2ZyZWUoYWNwaV9kZXYpOwogfQogCkBAIC0zNzgsMTUgKzM0MywxMyBAQAogc3RhdGljIGludCBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQljaGFyICpoaWQ7CiAKLQloaWQgPSBhY3BpX2RldmljZV9oaWQoZGV2aWNlKTsKLQlpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCiAJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKIAkJCQkJCSAgICAgZGV2aWNlKTsKLQllbHNlIGlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJZWxzZSBpZiAoZGV2aWNlLT5kZXZpY2VfdHlwZSA9PSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJICAgICBhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQsCkBAIC00MDQsMTAgKzM2NywxMCBAQAogCiBzdGF0aWMgdm9pZCBhY3BpX2RldmljZV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCWlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfUE9XRVJfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKLQllbHNlIGlmICghc3RyY21wKGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKSkKKwllbHNlIGlmIChkZXZpY2UtPmRldmljZV90eXBlID09IEFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OKQogCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAogCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKIAllbHNlCkBAIC00NzQsMTIgKzQzNywxMiBAQAogCS51ZXZlbnQJCT0gYWNwaV9kZXZpY2VfdWV2ZW50LAogfTsKIAotc3RhdGljIGludCBhY3BpX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCQkgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQpCitzdGF0aWMgaW50IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXN1bHQ7CiAJc3RydWN0IGFjcGlfZGV2aWNlX2J1c19pZCAqYWNwaV9kZXZpY2VfYnVzX2lkLCAqbmV3X2J1c19pZDsKIAlpbnQgZm91bmQgPSAwOworCiAJLyoKIAkgKiBMaW5rYWdlCiAJICogLS0tLS0tLQpAQCAtNTAxLDggKzQ2NCw5IEBACiAJICogSWYgZmFpbGVkLCBjcmVhdGUgb25lIGFuZCBsaW5rIGl0IGludG8gYWNwaV9idXNfaWRfbGlzdAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWNwaV9kZXZpY2VfYnVzX2lkLCAmYWNwaV9idXNfaWRfbGlzdCwgbm9kZSkgewotCQlpZighc3RyY21wKGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkPyBkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA6ICJkZXZpY2UiKSkgewotCQkJYWNwaV9kZXZpY2VfYnVzX2lkLT5pbnN0YW5jZV9ubyArKzsKKwkJaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfYnVzX2lkLT5idXNfaWQsCisJCQkgICAgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpKSB7CisJCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vKys7CiAJCQlmb3VuZCA9IDE7CiAJCQlrZnJlZShuZXdfYnVzX2lkKTsKIAkJCWJyZWFrOwpAQCAtNTEwLDcgKzQ3NCw3IEBACiAJfQogCWlmICghZm91bmQpIHsKIAkJYWNwaV9kZXZpY2VfYnVzX2lkID0gbmV3X2J1c19pZDsKLQkJc3RyY3B5KGFjcGlfZGV2aWNlX2J1c19pZC0+YnVzX2lkLCBkZXZpY2UtPmZsYWdzLmhhcmR3YXJlX2lkID8gZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgOiAiZGV2aWNlIik7CisJCXN0cmNweShhY3BpX2RldmljZV9idXNfaWQtPmJ1c19pZCwgYWNwaV9kZXZpY2VfaGlkKGRldmljZSkpOwogCQlhY3BpX2RldmljZV9idXNfaWQtPmluc3RhbmNlX25vID0gMDsKIAkJbGlzdF9hZGRfdGFpbCgmYWNwaV9kZXZpY2VfYnVzX2lkLT5ub2RlLCAmYWNwaV9idXNfaWRfbGlzdCk7CiAJfQpAQCAtNTI0LDcgKzQ4OCw3IEBACiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIAogCWlmIChkZXZpY2UtPnBhcmVudCkKLQkJZGV2aWNlLT5kZXYucGFyZW50ID0gJnBhcmVudC0+ZGV2OworCQlkZXZpY2UtPmRldi5wYXJlbnQgPSAmZGV2aWNlLT5wYXJlbnQtPmRldjsKIAlkZXZpY2UtPmRldi5idXMgPSAmYWNwaV9idXNfdHlwZTsKIAlkZXZpY2UtPmRldi5yZWxlYXNlID0gJmFjcGlfZGV2aWNlX3JlbGVhc2U7CiAJcmVzdWx0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkZXZpY2UtPmRldik7CkBAIC02NjQsNiArNjI4LDMzIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlIEVudW1lcmF0aW9uCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHN0cnVjdCBhY3BpX2RldmljZSAqYWNwaV9idXNfZ2V0X3BhcmVudChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXQ7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisKKwkvKgorCSAqIEZpeGVkIGhhcmR3YXJlIGRldmljZXMgZG8gbm90IGFwcGVhciBpbiB0aGUgbmFtZXNwYWNlIGFuZCBkbyBub3QKKwkgKiBoYXZlIGhhbmRsZXMsIGJ1dCB3ZSBmYWJyaWNhdGUgYWNwaV9kZXZpY2VzIGZvciB0aGVtLCBzbyB3ZSBoYXZlCisJICogdG8gZGVhbCB3aXRoIHRoZW0gc3BlY2lhbGx5LgorCSAqLworCWlmIChoYW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuIGFjcGlfcm9vdDsKKworCWRvIHsKKwkJc3RhdHVzID0gYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJmhhbmRsZSk7CisJCWlmIChzdGF0dXMgPT0gQUVfTlVMTF9FTlRSWSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gYWNwaV9yb290OworCisJCXJldCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0dXJuIGRldmljZTsKKwl9IHdoaWxlICgxKTsKK30KKwogYWNwaV9zdGF0dXMKIGFjcGlfYnVzX2dldF9lamQoYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2hhbmRsZSAqZWpkKQogewpAQCAtODc2LDExICs4NjcsNiBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy5keW5hbWljX3N0YXR1cyA9IDE7CiAKLQkvKiBQcmVzZW5jZSBvZiBfQ0lEIGluZGljYXRlcyAnY29tcGF0aWJsZV9pZHMnICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0NJRCIsICZ0ZW1wKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCWRldmljZS0+ZmxhZ3MuY29tcGF0aWJsZV9pZHMgPSAxOwotCiAJLyogUHJlc2VuY2Ugb2YgX1JNViBpbmRpY2F0ZXMgJ3JlbW92YWJsZScgKi8KIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfUk1WIiwgJnRlbXApOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKQEAgLTkxOCw4ICs5MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9nZXRfYnVzaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkJICBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2VfZ2V0X2J1c2lkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWNoYXIgYnVzX2lkWzVdID0geyAnPycsIDAgfTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBzaXplb2YoYnVzX2lkKSwgYnVzX2lkIH07CkBAIC05MzEsMTAgKzkxNiwxMiBAQAogCSAqIFRoZSBkZXZpY2UncyBCdXMgSUQgaXMgc2ltcGx5IHRoZSBvYmplY3QgbmFtZS4KIAkgKiBUQkQ6IFNob3VsZG4ndCB0aGlzIHZhbHVlIGJlIHVuaXF1ZSAod2l0aGluIHRoZSBBQ1BJIG5hbWVzcGFjZSk/CiAJICovCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKKwlpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UpKSB7CiAJCXN0cmNweShkZXZpY2UtPnBucC5idXNfaWQsICJBQ1BJIik7Ci0JCWJyZWFrOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChkZXZpY2UtPmRldmljZV90eXBlKSB7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlBXUkYiKTsKIAkJYnJlYWs7CkBAIC05NDIsNyArOTI5LDcgQEAKIAkJc3RyY3B5KGRldmljZS0+cG5wLmJ1c19pZCwgIlNMUEYiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfU0lOR0xFX05BTUUsICZidWZmZXIpOworCQlhY3BpX2dldF9uYW1lKGRldmljZS0+aGFuZGxlLCBBQ1BJX1NJTkdMRV9OQU1FLCAmYnVmZmVyKTsKIAkJLyogQ2xlYW4gdXAgdHJhaWxpbmcgdW5kZXJzY29yZXMgKGlmIGFueSkgKi8KIAkJZm9yIChpID0gMzsgaSA+IDE7IGktLSkgewogCQkJaWYgKGJ1c19pZFtpXSA9PSAnXycpCkBAIC0xMDAwLDIwNCArOTg3LDEzNCBAQAogCXJldHVybiBhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRENLIiwgJnRtcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0KgotYWNwaV9hZGRfY2lkKAotCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICAgICAgICAgKmluZm8sCi0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWQgICAgICAgICAqbmV3X2NpZCkKK2NoYXIgKmFjcGlfZGV2aWNlX2hpZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICAgICpjaWQ7Ci0JY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dF9pZF9zdHJpbmc7Ci0JYWNwaV9zaXplICAgICAgICAgICAgICAgICAgICAgICBjaWRfbGVuZ3RoOwotCWFjcGlfc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NpZF9sZW5ndGg7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICpoaWQ7CiAKKwloaWQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2UtPnBucC5pZHMsIHN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkLCBsaXN0KTsKKwlyZXR1cm4gaGlkLT5pZDsKK30KK0VYUE9SVF9TWU1CT0woYWNwaV9kZXZpY2VfaGlkKTsKIAotCS8qIEFsbG9jYXRlIG5ldyBDSUQgbGlzdCB3aXRoIHJvb20gZm9yIHRoZSBuZXcgQ0lEICovCitzdGF0aWMgdm9pZCBhY3BpX2FkZF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqZGV2X2lkKQoreworCXN0cnVjdCBhY3BpX2hhcmR3YXJlX2lkICppZDsKIAotCWlmICghbmV3X2NpZCkKLQkJbmV3X2NpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QubGlzdF9zaXplOwotCWVsc2UgaWYgKGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5saXN0X3NpemUpCi0JCW5ld19jaWRfbGVuZ3RoID0gaW5mby0+Y29tcGF0aWJsZV9pZF9saXN0Lmxpc3Rfc2l6ZSArCi0JCQluZXdfY2lkLT5sZW5ndGggKyBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWQpOwotCWVsc2UKLQkJbmV3X2NpZF9sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCkgKyBuZXdfY2lkLT5sZW5ndGg7CisJaWQgPSBrbWFsbG9jKHNpemVvZigqaWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlkKQorCQlyZXR1cm47CiAKLQljaWQgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChuZXdfY2lkX2xlbmd0aCk7Ci0JaWYgKCFjaWQpIHsKLQkJcmV0dXJuIE5VTEw7CisJaWQtPmlkID0ga21hbGxvYyhzdHJsZW4oZGV2X2lkKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghaWQtPmlkKSB7CisJCWtmcmVlKGlkKTsKKwkJcmV0dXJuOwogCX0KIAotCWNpZC0+bGlzdF9zaXplID0gbmV3X2NpZF9sZW5ndGg7Ci0JY2lkLT5jb3VudCA9IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsKLQlpZiAobmV3X2NpZCkKLQkJY2lkLT5jb3VudCsrOwotCW5leHRfaWRfc3RyaW5nID0gKGNoYXIgKikgY2lkLT5pZHMgKyAoY2lkLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCkpOwotCi0JLyogQ29weSBhbGwgZXhpc3RpbmcgQ0lEcyAqLwotCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5jb3VudDsgaSsrKSB7Ci0JCWNpZF9sZW5ndGggPSBpbmZvLT5jb21wYXRpYmxlX2lkX2xpc3QuaWRzW2ldLmxlbmd0aDsKLQkJY2lkLT5pZHNbaV0uc3RyaW5nID0gbmV4dF9pZF9zdHJpbmc7Ci0JCWNpZC0+aWRzW2ldLmxlbmd0aCA9IGNpZF9sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIGluZm8tPmNvbXBhdGlibGVfaWRfbGlzdC5pZHNbaV0uc3RyaW5nLAotCQkJY2lkX2xlbmd0aCk7Ci0KLQkJbmV4dF9pZF9zdHJpbmcgKz0gY2lkX2xlbmd0aDsKLQl9Ci0KLQkvKiBBcHBlbmQgdGhlIG5ldyBDSUQgKi8KLQotCWlmIChuZXdfY2lkKSB7Ci0JCWNpZC0+aWRzW2ldLnN0cmluZyA9IG5leHRfaWRfc3RyaW5nOwotCQljaWQtPmlkc1tpXS5sZW5ndGggPSBuZXdfY2lkLT5sZW5ndGg7Ci0KLQkJQUNQSV9NRU1DUFkobmV4dF9pZF9zdHJpbmcsIG5ld19jaWQtPnN0cmluZywgbmV3X2NpZC0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gY2lkOworCXN0cmNweShpZC0+aWQsIGRldl9pZCk7CisJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZkZXZpY2UtPnBucC5pZHMpOwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2RldmljZV9zZXRfaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCi0JCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgICAgICBpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NldF9pZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbyA9IE5VTEw7Ci0JY2hhciAqaGlkID0gTlVMTDsKLQljaGFyICp1aWQgPSBOVUxMOwotCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gTlVMTDsKLQljaGFyICpjaWRfYWRkID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZGV2aWNlX2luZm8gKmluZm87CisJc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CisJaW50IGk7CiAKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKGRldmljZS0+ZGV2aWNlX3R5cGUpIHsKIAljYXNlIEFDUElfQlVTX1RZUEVfREVWSUNFOgotCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhoYW5kbGUsICZpbmZvKTsKKwkJaWYgKEFDUElfSVNfUk9PVF9ERVZJQ0UoZGV2aWNlKSkgeworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1NZU1RFTV9ISUQpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoQUNQSV9JU19ST09UX0RFVklDRShkZXZpY2UtPnBhcmVudCkpIHsKKwkJCS8qIFxfU0JfLCB0aGUgb25seSByb290LWxldmVsIG5hbWVzcGFjZSBkZXZpY2UgKi8KKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CVVNfSElEKTsKKwkJCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOworCQkJc3RyY3B5KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywgQUNQSV9CVVNfQ0xBU1MpOworCQkJYnJlYWs7CisJCX0KKworCQlzdGF0dXMgPSBhY3BpX2dldF9vYmplY3RfaW5mbyhkZXZpY2UtPmhhbmRsZSwgJmluZm8pOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiVzOiBFcnJvciByZWFkaW5nIGRldmljZSBpbmZvXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0hJRCkKLQkJCWhpZCA9IGluZm8tPmhhcmR3YXJlX2lkLnN0cmluZzsKLQkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9VSUQpCi0JCQl1aWQgPSBpbmZvLT51bmlxdWVfaWQuc3RyaW5nOwotCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nKTsKKwkJaWYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9DSUQpIHsKIAkJCWNpZF9saXN0ID0gJmluZm8tPmNvbXBhdGlibGVfaWRfbGlzdDsKKwkJCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykKKwkJCQlhY3BpX2FkZF9pZChkZXZpY2UsIGNpZF9saXN0LT5pZHNbaV0uc3RyaW5nKTsKKwkJfQogCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0FEUikgewogCQkJZGV2aWNlLT5wbnAuYnVzX2FkZHJlc3MgPSBpbmZvLT5hZGRyZXNzOwogCQkJZGV2aWNlLT5mbGFncy5idXNfYWRkcmVzcyA9IDE7CiAJCX0KIAotCQkvKiBJZiB3ZSBoYXZlIGEgdmlkZW8vYmF5L2RvY2sgZGV2aWNlLCBhZGQgb3VyIHNlbGZkZWZpbmVkCi0JCSAgIEhJRCB0byB0aGUgQ0lEIGxpc3QuIExpa2UgdGhhdCB0aGUgdmlkZW8vYmF5L2RvY2sgZHJpdmVycwotCQkgICB3aWxsIGdldCBhdXRvbG9hZGVkIGFuZCB0aGUgZGV2aWNlIG1pZ2h0IHN0aWxsIG1hdGNoCi0JCSAgIGFnYWluc3QgYW5vdGhlciBkcml2ZXIuCi0JCSovCisJCWtmcmVlKGluZm8pOworCisJCS8qCisJCSAqIFNvbWUgZGV2aWNlcyBkb24ndCByZWxpYWJseSBoYXZlIF9ISURzICYgX0NJRHMsIHNvIGFkZAorCQkgKiBzeW50aGV0aWMgSElEcyB0byBtYWtlIHN1cmUgZHJpdmVycyBjYW4gZmluZCB0aGVtLgorCQkgKi8KIAkJaWYgKGFjcGlfaXNfdmlkZW9fZGV2aWNlKGRldmljZSkpCi0JCQljaWRfYWRkID0gQUNQSV9WSURFT19ISUQ7CisJCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfVklERU9fSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfYmF5X21hdGNoKGRldmljZSkpKQotCQkJY2lkX2FkZCA9IEFDUElfQkFZX0hJRDsKKwkJCWFjcGlfYWRkX2lkKGRldmljZSwgQUNQSV9CQVlfSElEKTsKIAkJZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZG9ja19tYXRjaChkZXZpY2UpKSkKLQkJCWNpZF9hZGQgPSBBQ1BJX0RPQ0tfSElEOworCQkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0RPQ0tfSElEKTsKIAogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfUE9XRVI6Ci0JCWhpZCA9IEFDUElfUE9XRVJfSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUE9XRVJfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjoKLQkJaGlkID0gQUNQSV9QUk9DRVNTT1JfT0JKRUNUX0hJRDsKLQkJYnJlYWs7Ci0JY2FzZSBBQ1BJX0JVU19UWVBFX1NZU1RFTToKLQkJaGlkID0gQUNQSV9TWVNURU1fSElEOworCQlhY3BpX2FkZF9pZChkZXZpY2UsIEFDUElfUFJPQ0VTU09SX09CSkVDVF9ISUQpOwogCQlicmVhazsKIAljYXNlIEFDUElfQlVTX1RZUEVfVEhFUk1BTDoKLQkJaGlkID0gQUNQSV9USEVSTUFMX0hJRDsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX1RIRVJNQUxfSElEKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1BPV0VSX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1BPV0VSRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTjoKLQkJaGlkID0gQUNQSV9CVVRUT05fSElEX1NMRUVQRjsKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCBBQ1BJX0JVVFRPTl9ISURfU0xFRVBGKTsKIAkJYnJlYWs7CiAJfQogCiAJLyoKLQkgKiBcX1NCCi0JICogLS0tLQotCSAqIEZpeCBmb3IgdGhlIHN5c3RlbSByb290IGJ1cyBkZXZpY2UgLS0gdGhlIG9ubHkgcm9vdC1sZXZlbCBkZXZpY2UuCisJICogV2UgYnVpbGQgYWNwaV9kZXZpY2VzIGZvciBzb21lIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIF9ISUQgb3IgX0NJRCwKKwkgKiBlLmcuLCBQQ0kgYnJpZGdlcyBhbmQgc2xvdHMuICBEcml2ZXJzIGNhbid0IGJpbmQgdG8gdGhlc2Ugb2JqZWN0cywKKwkgKiBidXQgd2UgZG8gdXNlIHRoZW0gaW5kaXJlY3RseSBieSB0cmF2ZXJzaW5nIHRoZSBhY3BpX2RldmljZSB0cmVlLgorCSAqIFRoaXMgZ2VuZXJpYyBJRCBpc24ndCB1c2VmdWwgZm9yIGRyaXZlciBiaW5kaW5nLCBidXQgaXQgcHJvdmlkZXMKKwkgKiB0aGUgdXNlZnVsIHByb3BlcnR5IHRoYXQgImV2ZXJ5IGFjcGlfZGV2aWNlIGhhcyBhbiBJRC4iCiAJICovCi0JaWYgKCgoYWNwaV9oYW5kbGUpcGFyZW50ID09IEFDUElfUk9PVF9PQkpFQ1QpICYmICh0eXBlID09IEFDUElfQlVTX1RZUEVfREVWSUNFKSkgewotCQloaWQgPSBBQ1BJX0JVU19ISUQ7Ci0JCXN0cmNweShkZXZpY2UtPnBucC5kZXZpY2VfbmFtZSwgQUNQSV9CVVNfREVWSUNFX05BTUUpOwotCQlzdHJjcHkoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLCBBQ1BJX0JVU19DTEFTUyk7Ci0JfQotCi0JaWYgKGhpZCkgewotCQlkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCA9IEFDUElfQUxMT0NBVEVfWkVST0VEKHN0cmxlbiAoaGlkKSArIDEpOwotCQlpZiAoZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC5oYXJkd2FyZV9pZCwgaGlkKTsKLQkJCWRldmljZS0+ZmxhZ3MuaGFyZHdhcmVfaWQgPSAxOwotCQl9Ci0JfQotCWlmICghZGV2aWNlLT5mbGFncy5oYXJkd2FyZV9pZCkKLQkJZGV2aWNlLT5wbnAuaGFyZHdhcmVfaWQgPSAiIjsKLQotCWlmICh1aWQpIHsKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gQUNQSV9BTExPQ0FURV9aRVJPRUQoc3RybGVuICh1aWQpICsgMSk7Ci0JCWlmIChkZXZpY2UtPnBucC51bmlxdWVfaWQpIHsKLQkJCXN0cmNweShkZXZpY2UtPnBucC51bmlxdWVfaWQsIHVpZCk7Ci0JCQlkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCA9IDE7Ci0JCX0KLQl9Ci0JaWYgKCFkZXZpY2UtPmZsYWdzLnVuaXF1ZV9pZCkKLQkJZGV2aWNlLT5wbnAudW5pcXVlX2lkID0gIiI7Ci0KLQlpZiAoY2lkX2xpc3QgfHwgY2lkX2FkZCkgewotCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZF9saXN0ICpsaXN0OwotCi0JCWlmIChjaWRfYWRkKSB7Ci0JCQlzdHJ1Y3QgYWNwaWNhX2RldmljZV9pZCBjaWQ7Ci0JCQljaWQubGVuZ3RoID0gc3RybGVuIChjaWRfYWRkKSArIDE7Ci0JCQljaWQuc3RyaW5nID0gY2lkX2FkZDsKLQotCQkJbGlzdCA9IGFjcGlfYWRkX2NpZChpbmZvLCAmY2lkKTsKLQkJfSBlbHNlIHsKLQkJCWxpc3QgPSBhY3BpX2FkZF9jaWQoaW5mbywgTlVMTCk7Ci0JCX0KLQotCQlpZiAobGlzdCkgewotCQkJZGV2aWNlLT5wbnAuY2lkX2xpc3QgPSBsaXN0OwotCQkJaWYgKGNpZF9hZGQpCi0JCQkJZGV2aWNlLT5mbGFncy5jb21wYXRpYmxlX2lkcyA9IDE7Ci0JCX0KLQl9Ci0KLQlrZnJlZShpbmZvKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5wbnAuaWRzKSkKKwkJYWNwaV9hZGRfaWQoZGV2aWNlLCAiZGV2aWNlIik7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQorc3RhdGljIGludCBhY3BpX2RldmljZV9zZXRfY29udGV4dChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlpbnQgcmVzdWx0ID0gMDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKIAkvKgogCSAqIENvbnRleHQKIAkgKiAtLS0tLS0tCiAJICogQXR0YWNoIHRoaXMgJ3N0cnVjdCBhY3BpX2RldmljZScgdG8gdGhlIEFDUEkgb2JqZWN0LiAgVGhpcyBtYWtlcwotCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBOb3RlIHRoYXQgd2UgbmVlZAotCSAqIHRvIGJlIGNhcmVmdWwgd2l0aCBmaXhlZC1mZWF0dXJlIGRldmljZXMgYXMgdGhleSBhbGwgYXR0YWNoIHRvIHRoZQotCSAqIHJvb3Qgb2JqZWN0LgorCSAqIHJlc29sdXRpb25zIGZyb20gaGFuZGxlLT5kZXZpY2UgdmVyeSBlZmZpY2llbnQuICBGaXhlZCBoYXJkd2FyZQorCSAqIGRldmljZXMgaGF2ZSBubyBoYW5kbGVzLCBzbyB3ZSBza2lwIHRoZW0uCiAJICovCi0JaWYgKHR5cGUgIT0gQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04gJiYKLQkgICAgdHlwZSAhPSBBQ1BJX0JVU19UWVBFX1NMRUVQX0JVVFRPTikgewotCQlzdGF0dXMgPSBhY3BpX2F0dGFjaF9kYXRhKGRldmljZS0+aGFuZGxlLAotCQkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoIWRldmljZS0+aGFuZGxlKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIGF0dGFjaGluZyBkZXZpY2UgZGF0YVxuIik7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQl9Ci0JfQotCXJldHVybiByZXN1bHQ7CisJc3RhdHVzID0gYWNwaV9hdHRhY2hfZGF0YShkZXZpY2UtPmhhbmRsZSwKKwkJCQkgIGFjcGlfYnVzX2RhdGFfaGFuZGxlciwgZGV2aWNlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgYXR0YWNoaW5nIGRldmljZSBkYXRhXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIGludCBhY3BpX2J1c19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXYsIGludCBybWRldmljZSkKQEAgLTEyMjMsMTcgKzExNDAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotYWNwaV9hZGRfc2luZ2xlX29iamVjdChzdHJ1Y3QgYWNwaV9kZXZpY2UgKipjaGlsZCwKLQkJICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqcGFyZW50LCBhY3BpX2hhbmRsZSBoYW5kbGUsIGludCB0eXBlLAotCQkJc3RydWN0IGFjcGlfYnVzX29wcyAqb3BzKQorc3RhdGljIGludCBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAorCQkJCSAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgdHlwZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZyBzdGEsCisJCQkJICBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCi0KLQlpZiAoIWNoaWxkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKIAlkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldmljZSkgewpAQCAtMTI0MSw3NSArMTE1NSwzMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5wbnAuaWRzKTsKKwlkZXZpY2UtPmRldmljZV90eXBlID0gdHlwZTsKIAlkZXZpY2UtPmhhbmRsZSA9IGhhbmRsZTsKLQlkZXZpY2UtPnBhcmVudCA9IHBhcmVudDsKKwlkZXZpY2UtPnBhcmVudCA9IGFjcGlfYnVzX2dldF9wYXJlbnQoaGFuZGxlKTsKIAlkZXZpY2UtPmJ1c19vcHMgPSAqb3BzOyAvKiB3b3Jrcm91bmQgZm9yIG5vdCBjYWxsIC5zdGFydCAqLworCVNUUlVDVF9UT19JTlQoZGV2aWNlLT5zdGF0dXMpID0gc3RhOwogCi0KLQlhY3BpX2RldmljZV9nZXRfYnVzaWQoZGV2aWNlLCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX2dldF9idXNpZChkZXZpY2UpOwogCiAJLyoKIAkgKiBGbGFncwogCSAqIC0tLS0tCi0JICogR2V0IHByaW9yIHRvIGNhbGxpbmcgYWNwaV9idXNfZ2V0X3N0YXR1cygpIHNvIHdlIGtub3cgd2hldGhlcgotCSAqIG9yIG5vdCBfU1RBIGlzIHByZXNlbnQuICBOb3RlIHRoYXQgd2Ugb25seSBsb29rIGZvciBvYmplY3QKLQkgKiBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzIHVudGlsIHdlIGtub3cgdGhlIGRldmljZSBpcwotCSAqIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgorCSAqIE5vdGUgdGhhdCB3ZSBvbmx5IGxvb2sgZm9yIG9iamVjdCBoYW5kbGVzIC0tIGNhbm5vdCBldmFsdWF0ZSBvYmplY3RzCisJICogdW50aWwgd2Uga25vdyB0aGUgZGV2aWNlIGlzIHByZXNlbnQgYW5kIHByb3Blcmx5IGluaXRpYWxpemVkLgogCSAqLwogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9mbGFncyhkZXZpY2UpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCiAJLyoKLQkgKiBTdGF0dXMKLQkgKiAtLS0tLS0KLQkgKiBTZWUgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50LiAgV2UgYWx3YXlzIGFzc3VtZSB0aGF0IG5vbi1EZXZpY2UKLQkgKiBhbmQgbm9uLVByb2Nlc3NvciBvYmplY3RzIChlLmcuIHRoZXJtYWwgem9uZXMsIHBvd2VyIHJlc291cmNlcywKLQkgKiBldGMuKSBhcmUgcHJlc2VudCwgZnVuY3Rpb25pbmcsIGV0Yy4gKGF0IGxlYXN0IHdoZW4gcGFyZW50IG9iamVjdAotCSAqIGlzIHByZXNlbnQpLiAgTm90ZSB0aGF0IF9TVEEgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgZm9yIHNvbWUKLQkgKiBvYmplY3RzIChlLmcuIHBvd2VyIHJlc291cmNlcykgc28gd2UgbmVlZCB0byBiZSBjYXJlZnVsIGhvdyB3ZSB1c2UKLQkgKiBpdC4KLQkgKi8KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOgotCWNhc2UgQUNQSV9CVVNfVFlQRV9ERVZJQ0U6Ci0JCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9zdGF0dXMoZGV2aWNlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShyZXN1bHQpKSB7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQkJZ290byBlbmQ7Ci0JCX0KLQkJLyoKLQkJICogV2hlbiB0aGUgZGV2aWNlIGlzIG5laXRoZXIgcHJlc2VudCBub3IgZnVuY3Rpb25hbCwgdGhlCi0JCSAqIGRldmljZSBzaG91bGQgbm90IGJlIGFkZGVkIHRvIExpbnV4IEFDUEkgZGV2aWNlIHRyZWUuCi0JCSAqIFdoZW4gdGhlIHN0YXR1cyBvZiB0aGUgZGV2aWNlIGlzIG5vdCBwcmVzZW50IGJ1dCBmdW5jdGluYWwsCi0JCSAqIGl0IHNob3VsZCBiZSBhZGRlZCB0byBMaW51eCBBQ1BJIHRyZWUuIEZvciBleGFtcGxlIDogYmF5Ci0JCSAqIGRldmljZSAsIGRvY2sgZGV2aWNlLgotCQkgKiBJbiBzdWNoIGNvbmRpdGlvbnMgaXQgaXMgdW5uY2Vzc2FyeSB0byBjaGVjayB3aGV0aGVyIGl0IGlzCi0JCSAqIGJheSBkZXZpY2Ugb3IgZG9jayBkZXZpY2UuCi0JCSAqLwotCQlpZiAoIWRldmljZS0+c3RhdHVzLnByZXNlbnQgJiYgIWRldmljZS0+c3RhdHVzLmZ1bmN0aW9uYWwpIHsKLQkJCXJlc3VsdCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlTVFJVQ1RfVE9fSU5UKGRldmljZS0+c3RhdHVzKSA9Ci0JCSAgICBBQ1BJX1NUQV9ERVZJQ0VfUFJFU0VOVCB8IEFDUElfU1RBX0RFVklDRV9FTkFCTEVEIHwKLQkJICAgIEFDUElfU1RBX0RFVklDRV9VSSAgICAgIHwgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HOwotCQlicmVhazsKLQl9Ci0KLQkvKgogCSAqIEluaXRpYWxpemUgRGV2aWNlCiAJICogLS0tLS0tLS0tLS0tLS0tLS0KIAkgKiBUQkQ6IFN5bmNoIHdpdGggQ29yZSdzIGVudW1lcmF0aW9uL2luaXRpYWxpemF0aW9uIHByb2Nlc3MuCiAJICovCi0KLQkvKgotCSAqIEhhcmR3YXJlIElELCBVbmlxdWUgSUQsICYgQnVzIEFkZHJlc3MKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0JYWNwaV9kZXZpY2Vfc2V0X2lkKGRldmljZSwgcGFyZW50LCBoYW5kbGUsIHR5cGUpOworCWFjcGlfZGV2aWNlX3NldF9pZChkZXZpY2UpOwogCiAJLyoKIAkgKiBQb3dlciBNYW5hZ2VtZW50CkBAIC0xMzQxLDEwICsxMjExLDEwIEBACiAJCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoKHJlc3VsdCA9IGFjcGlfZGV2aWNlX3NldF9jb250ZXh0KGRldmljZSwgdHlwZSkpKQorCWlmICgocmVzdWx0ID0gYWNwaV9kZXZpY2Vfc2V0X2NvbnRleHQoZGV2aWNlKSkpCiAJCWdvdG8gZW5kOwogCi0JcmVzdWx0ID0gYWNwaV9kZXZpY2VfcmVnaXN0ZXIoZGV2aWNlLCBwYXJlbnQpOworCXJlc3VsdCA9IGFjcGlfZGV2aWNlX3JlZ2lzdGVyKGRldmljZSk7CiAKIAkvKgogCSAqIEJpbmQgX0FEUi1CYXNlZCBEZXZpY2VzIHdoZW4gaG90IGFkZApAQCAtMTM1NSwxNjUgKzEyMjUsMTQzIEBACiAJfQogCiBlbmQ6Ci0JaWYgKCFyZXN1bHQpCisJaWYgKCFyZXN1bHQpIHsKKwkJYWNwaV9nZXRfbmFtZShoYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCSJBZGRpbmcgJXMgWyVzXSBwYXJlbnQgJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmRldiksCisJCQkgKGNoYXIgKikgYnVmZmVyLnBvaW50ZXIsCisJCQkgZGV2aWNlLT5wYXJlbnQgPyBkZXZfbmFtZSgmZGV2aWNlLT5wYXJlbnQtPmRldikgOgorCQkJCQkgICIobnVsbCkiKSk7CisJCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAkJKmNoaWxkID0gZGV2aWNlOwotCWVsc2UKKwl9IGVsc2UKIAkJYWNwaV9kZXZpY2VfcmVsZWFzZSgmZGV2aWNlLT5kZXYpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBhY3BpX2J1c19zY2FuKHN0cnVjdCBhY3BpX2RldmljZSAqc3RhcnQsIHN0cnVjdCBhY3BpX2J1c19vcHMgKm9wcykKKyNkZWZpbmUgQUNQSV9TVEFfREVGQVVMVCAoQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQgfCBBQ1BJX1NUQV9ERVZJQ0VfRU5BQkxFRCB8IFwKKwkJCSAgQUNQSV9TVEFfREVWSUNFX1VJICAgICAgfCBBQ1BJX1NUQV9ERVZJQ0VfRlVOQ1RJT05JTkcpCisKK3N0YXRpYyBpbnQgYWNwaV9idXNfdHlwZV9hbmRfc3RhdHVzKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICp0eXBlLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpjaGlsZCA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgcGhhbmRsZSA9IE5VTEw7Ci0JYWNwaV9oYW5kbGUgY2hhbmRsZSA9IE5VTEw7Ci0JYWNwaV9vYmplY3RfdHlwZSB0eXBlID0gMDsKLQl1MzIgbGV2ZWwgPSAxOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX29iamVjdF90eXBlIGFjcGlfdHlwZTsKIAorCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoaGFuZGxlLCAmYWNwaV90eXBlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFzdGFydCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBzdGFydDsKLQlwaGFuZGxlID0gc3RhcnQtPmhhbmRsZTsKLQotCS8qCi0JICogUGFyc2UgdGhyb3VnaCB0aGUgQUNQSSBuYW1lc3BhY2UsIGlkZW50aWZ5IGFsbCAnZGV2aWNlcycsIGFuZAotCSAqIGNyZWF0ZSBhIG5ldyAnc3RydWN0IGFjcGlfZGV2aWNlJyBmb3IgZWFjaC4KLQkgKi8KLQl3aGlsZSAoKGxldmVsID4gMCkgJiYgcGFyZW50KSB7Ci0KLQkJc3RhdHVzID0gYWNwaV9nZXRfbmV4dF9vYmplY3QoQUNQSV9UWVBFX0FOWSwgcGhhbmRsZSwKLQkJCQkJICAgICAgY2hhbmRsZSwgJmNoYW5kbGUpOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgc2NvcGUgaXMgZXhoYXVzdGVkIHRoZW4gbW92ZSBvdXIgd2F5IGJhY2sgdXAuCi0JCSAqLwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWxldmVsLS07Ci0JCQljaGFuZGxlID0gcGhhbmRsZTsKLQkJCWFjcGlfZ2V0X3BhcmVudChwaGFuZGxlLCAmcGhhbmRsZSk7Ci0JCQlpZiAocGFyZW50LT5wYXJlbnQpCi0JCQkJcGFyZW50ID0gcGFyZW50LT5wYXJlbnQ7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXN0YXR1cyA9IGFjcGlfZ2V0X3R5cGUoY2hhbmRsZSwgJnR5cGUpOworCXN3aXRjaCAoYWNwaV90eXBlKSB7CisJY2FzZSBBQ1BJX1RZUEVfQU5ZOgkJLyogZm9yIEFDUElfUk9PVF9PQkpFQ1QgKi8KKwljYXNlIEFDUElfVFlQRV9ERVZJQ0U6CisJCSp0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7CisJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9zdGF0dXNfaGFuZGxlKGhhbmRsZSwgc3RhKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogSWYgdGhpcyBpcyBhIHNjb3BlIG9iamVjdCB0aGVuIHBhcnNlIGl0IChkZXB0aC1maXJzdCkuCi0JCSAqLwotCQlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfU0NPUEUpIHsKLQkJCWxldmVsKys7Ci0JCQlwaGFuZGxlID0gY2hhbmRsZTsKLQkJCWNoYW5kbGUgPSBOVUxMOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gb2JqZWN0cyB0aGF0IHdlIGNvbnNpZGVyICdkZXZpY2VzJy4KLQkJICovCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEFDUElfVFlQRV9ERVZJQ0U6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9ERVZJQ0U7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUFJPQ0VTU09SOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1RIRVJNQUw6Ci0JCQl0eXBlID0gQUNQSV9CVVNfVFlQRV9USEVSTUFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgotCQkJdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG9wcy0+YWNwaV9vcF9hZGQpCi0JCQlzdGF0dXMgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZjaGlsZCwgcGFyZW50LAotCQkJCWNoYW5kbGUsIHR5cGUsIG9wcyk7Ci0JCWVsc2UKLQkJCXN0YXR1cyA9IGFjcGlfYnVzX2dldF9kZXZpY2UoY2hhbmRsZSwgJmNoaWxkKTsKLQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BST0NFU1NPUjoKKwkJKnR5cGUgPSBBQ1BJX0JVU19UWVBFX1BST0NFU1NPUjsKKwkJc3RhdHVzID0gYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoaGFuZGxlLCBzdGEpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQljb250aW51ZTsKLQotCQlpZiAob3BzLT5hY3BpX29wX3N0YXJ0ICYmICEob3BzLT5hY3BpX29wX2FkZCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChjaGlsZCk7Ci0JCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgZGV2aWNlIGlzIHByZXNlbnQsIGVuYWJsZWQsIGFuZCBmdW5jdGlvbmluZyB0aGVuCi0JCSAqIHBhcnNlIGl0cyBzY29wZSAoZGVwdGgtZmlyc3QpLiAgTm90ZSB0aGF0IHdlIG5lZWQgdG8KLQkJICogcmVwcmVzZW50IGFic2VudCBkZXZpY2VzIHRvIGZhY2lsaXRhdGUgUG5QIG5vdGlmaWNhdGlvbnMKLQkJICogLS0gYnV0IG9ubHkgdGhlIHN1YnRyZWUgaGVhZCAobm90IGFsbCBvZiBpdHMgY2hpbGRyZW4sCi0JCSAqIHdoaWNoIHdpbGwgYmUgZW51bWVyYXRlZCB3aGVuIHRoZSBwYXJlbnQgaXMgaW5zZXJ0ZWQpLgotCQkgKgotCQkgKiBUQkQ6IE5lZWQgbm90aWZpY2F0aW9ucyBhbmQgb3RoZXIgZGV0ZWN0aW9uIG1lY2hhbmlzbXMKLQkJICogICAgICBpbiBwbGFjZSBiZWZvcmUgd2UgY2FuIGZ1bGx5IGltcGxlbWVudCB0aGlzLgotCQkgKi8KLQkJIC8qCi0JCSAqIFdoZW4gdGhlIGRldmljZSBpcyBub3QgcHJlc2VudCBidXQgZnVuY3Rpb25hbCwgaXQgaXMgYWxzbwotCQkgKiBuZWNlc3NhcnkgdG8gc2NhbiB0aGUgY2hpbGRyZW4gb2YgdGhpcyBkZXZpY2UuCi0JCSAqLwotCQlpZiAoY2hpbGQtPnN0YXR1cy5wcmVzZW50IHx8ICghY2hpbGQtPnN0YXR1cy5wcmVzZW50ICYmCi0JCQkJCWNoaWxkLT5zdGF0dXMuZnVuY3Rpb25hbCkpIHsKLQkJCXN0YXR1cyA9IGFjcGlfZ2V0X25leHRfb2JqZWN0KEFDUElfVFlQRV9BTlksIGNoYW5kbGUsCi0JCQkJCQkgICAgICBOVUxMLCBOVUxMKTsKLQkJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkJCWxldmVsKys7Ci0JCQkJcGhhbmRsZSA9IGNoYW5kbGU7Ci0JCQkJY2hhbmRsZSA9IE5VTEw7Ci0JCQkJcGFyZW50ID0gY2hpbGQ7Ci0JCQl9Ci0JCX0KKwkJCXJldHVybiAtRU5PREVWOworCQlicmVhazsKKwljYXNlIEFDUElfVFlQRV9USEVSTUFMOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfVEhFUk1BTDsKKwkJKnN0YSA9IEFDUElfU1RBX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgQUNQSV9UWVBFX1BPV0VSOgorCQkqdHlwZSA9IEFDUElfQlVTX1RZUEVfUE9XRVI7CisJCSpzdGEgPSBBQ1BJX1NUQV9ERUZBVUxUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYnVzX2NoZWNrX2FkZChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsdmwsCisJCQkJICAgICAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKK3sKKwlzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMgPSBjb250ZXh0OworCWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGE7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2U7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBhY3BpX2J1c190eXBlX2FuZF9zdGF0dXMoaGFuZGxlLCAmdHlwZSwgJnN0YSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIEFFX09LOworCisJaWYgKCEoc3RhICYgQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQpICYmCisJICAgICEoc3RhICYgQUNQSV9TVEFfREVWSUNFX0ZVTkNUSU9OSU5HKSkKKwkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisKKwkvKgorCSAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYW4gYWNwaV9kZXZpY2UgZnJvbSBhIHByZXZpb3VzIGVudW1lcmF0aW9uLiAgSWYKKwkgKiBzbywgd2UgbmVlZG4ndCBhZGQgaXQgYWdhaW4sIGJ1dCB3ZSBtYXkgc3RpbGwgaGF2ZSB0byBzdGFydCBpdC4KKwkgKi8KKwlkZXZpY2UgPSBOVUxMOworCWFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKKwlpZiAob3BzLT5hY3BpX29wX2FkZCAmJiAhZGV2aWNlKQorCQlhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGhhbmRsZSwgdHlwZSwgc3RhLCBvcHMpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCisJaWYgKG9wcy0+YWNwaV9vcF9zdGFydCAmJiAhKG9wcy0+YWNwaV9vcF9hZGQpKSB7CisJCXN0YXR1cyA9IGFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChkZXZpY2UpOworCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCQlyZXR1cm4gQUVfQ1RSTF9ERVBUSDsKKwl9CisKKwlpZiAoISpyZXR1cm5fdmFsdWUpCisJCSpyZXR1cm5fdmFsdWUgPSBkZXZpY2U7CisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW4oYWNwaV9oYW5kbGUgaGFuZGxlLCBzdHJ1Y3QgYWNwaV9idXNfb3BzICpvcHMsCisJCQkgc3RydWN0IGFjcGlfZGV2aWNlICoqY2hpbGQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXZvaWQgKmRldmljZSA9IE5VTEw7CisKKwlzdGF0dXMgPSBhY3BpX2J1c19jaGVja19hZGQoaGFuZGxlLCAwLCBvcHMsICZkZXZpY2UpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBoYW5kbGUsIEFDUElfVUlOVDMyX01BWCwKKwkJCQkgICAgYWNwaV9idXNfY2hlY2tfYWRkLCBvcHMsICZkZXZpY2UpOworCisJaWYgKGNoaWxkKQorCQkqY2hpbGQgPSBkZXZpY2U7CisJcmV0dXJuIDA7Cit9CisKIGludAogYWNwaV9idXNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqKmNoaWxkLAogCSAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpwYXJlbnQsIGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHR5cGUpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAogCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CiAJb3BzLmFjcGlfb3BfYWRkID0gMTsKIAotCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoY2hpbGQsIHBhcmVudCwgaGFuZGxlLCB0eXBlLCAmb3BzKTsKLQlpZiAoIXJlc3VsdCkKLQkJcmVzdWx0ID0gYWNwaV9idXNfc2NhbigqY2hpbGQsICZvcHMpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlhY3BpX2J1c19zY2FuKGhhbmRsZSwgJm9wcywgY2hpbGQpOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhY3BpX2J1c19hZGQpOwogCiBpbnQgYWNwaV9idXNfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAorCW1lbXNldCgmb3BzLCAwLCBzaXplb2Yob3BzKSk7CisJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwogCi0JaWYgKCFkZXZpY2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmVzdWx0ID0gYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KGRldmljZSk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKLQkJb3BzLmFjcGlfb3Bfc3RhcnQgPSAxOwotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGRldmljZSwgJm9wcyk7Ci0JfQotCXJldHVybiByZXN1bHQ7CisJYWNwaV9idXNfc2NhbihkZXZpY2UtPmhhbmRsZSwgJm9wcywgTlVMTCk7CisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFjcGlfYnVzX3N0YXJ0KTsKIApAQCAtMTU3MiwxNSArMTQyMCwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9idXNfdHJpbSk7CiAKLXN0YXRpYyBpbnQgYWNwaV9idXNfc2Nhbl9maXhlZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKnJvb3QpCitzdGF0aWMgaW50IGFjcGlfYnVzX3NjYW5fZml4ZWQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7CiAJc3RydWN0IGFjcGlfYnVzX29wcyBvcHM7CiAKLQlpZiAoIXJvb3QpCi0JCXJldHVybiAtRU5PREVWOwotCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKQEAgLTE1ODksMTYgKzE0MzQsMTYgQEAKIAkgKiBFbnVtZXJhdGUgYWxsIGZpeGVkLWZlYXR1cmUgZGV2aWNlcy4KIAkgKi8KIAlpZiAoKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfUE9XRVJfQlVUVE9OKSA9PSAwKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgYWNwaV9yb290LAotCQkJCQkJTlVMTCwKKwkJcmVzdWx0ID0gYWNwaV9hZGRfc2luZ2xlX29iamVjdCgmZGV2aWNlLCBOVUxMLAogCQkJCQkJQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04sCisJCQkJCQlBQ1BJX1NUQV9ERUZBVUxULAogCQkJCQkJJm9wcyk7CiAJfQogCiAJaWYgKChhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX1NMRUVQX0JVVFRPTikgPT0gMCkgewotCQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZkZXZpY2UsIGFjcGlfcm9vdCwKLQkJCQkJCU5VTEwsCisJCXJlc3VsdCA9IGFjcGlfYWRkX3NpbmdsZV9vYmplY3QoJmRldmljZSwgTlVMTCwKIAkJCQkJCUFDUElfQlVTX1RZUEVfU0xFRVBfQlVUVE9OLAorCQkJCQkJQUNQSV9TVEFfREVGQVVMVCwKIAkJCQkJCSZvcHMpOwogCX0KIApAQCAtMTYyMSwyNCArMTQ2NiwxNSBAQAogCX0KIAogCS8qCi0JICogQ3JlYXRlIHRoZSByb290IGRldmljZSBpbiB0aGUgYnVzJ3MgZGV2aWNlIHRyZWUKLQkgKi8KLQlyZXN1bHQgPSBhY3BpX2FkZF9zaW5nbGVfb2JqZWN0KCZhY3BpX3Jvb3QsIE5VTEwsIEFDUElfUk9PVF9PQkpFQ1QsCi0JCQkJCUFDUElfQlVTX1RZUEVfU1lTVEVNLCAmb3BzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIERvbmU7Ci0KLQkvKgogCSAqIEVudW1lcmF0ZSBkZXZpY2VzIGluIHRoZSBBQ1BJIG5hbWVzcGFjZS4KIAkgKi8KLQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuX2ZpeGVkKGFjcGlfcm9vdCk7CisJcmVzdWx0ID0gYWNwaV9idXNfc2NhbihBQ1BJX1JPT1RfT0JKRUNULCAmb3BzLCAmYWNwaV9yb290KTsKIAogCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBhY3BpX2J1c19zY2FuKGFjcGlfcm9vdCwgJm9wcyk7CisJCXJlc3VsdCA9IGFjcGlfYnVzX3NjYW5fZml4ZWQoKTsKIAogCWlmIChyZXN1bHQpCiAJCWFjcGlfZGV2aWNlX3VucmVnaXN0ZXIoYWNwaV9yb290LCBBQ1BJX0JVU19SRU1PVkFMX05PUk1BTCk7CiAKLURvbmU6CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKaW5kZXggYTkwYWZjYy4uNGNjMWI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL3NsZWVwLmMKQEAgLTQxMyw2ICs0MTMsMzAgQEAKIAkJfSwKIAl9LAogCXsKKwkuY2FsbGJhY2sgPSBpbml0X3NldF9zY2lfZW5fb25fcmVzdW1lLAorCS5pZGVudCA9ICJIZXdsZXR0LVBhY2thcmQgUGF2aWxpb24gZHY0IiwKKwkubWF0Y2hlcyA9IHsKKwkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSGV3bGV0dC1QYWNrYXJkIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiSFAgUGF2aWxpb24gZHY0IiksCisJCX0sCisJfSwKKwl7CisJLmNhbGxiYWNrID0gaW5pdF9zZXRfc2NpX2VuX29uX3Jlc3VtZSwKKwkuaWRlbnQgPSAiSGV3bGV0dC1QYWNrYXJkIFBhdmlsaW9uIGR2NyIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NyIpLAorCQl9LAorCX0sCisJeworCS5jYWxsYmFjayA9IGluaXRfc2V0X3NjaV9lbl9vbl9yZXN1bWUsCisJLmlkZW50ID0gIkhld2xldHQtUGFja2FyZCBDb21wYXEgUHJlc2FyaW8gQ1E0MCBOb3RlYm9vayBQQyIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkhld2xldHQtUGFja2FyZCIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNvbXBhcSBQcmVzYXJpbyBDUTQwIE5vdGVib29rIFBDIiksCisJCX0sCisJfSwKKwl7CiAJLmNhbGxiYWNrID0gaW5pdF9vbGRfc3VzcGVuZF9vcmRlcmluZywKIAkuaWRlbnQgPSAiUGFuYXNvbmljIENGNTEtMkwiLAogCS5tYXRjaGVzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCA5NGIxYTRjLi4wNWRmZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBhY3BpX3ZpZGVvX2RldmljZV93cml0ZV9icmlnaHRuZXNzKHN0cnVjdCBmaWxlICpmaWxlLAogCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3Nfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMTEwOSw3ICsxMTA5LDEyIEBACiAJICovCiAKIAkvKiBEb2VzIHRoaXMgZGV2aWNlIHN1cHBvcnQgdmlkZW8gc3dpdGNoaW5nPyAqLwotCWlmICh2aWRlby0+Y2FwLl9ET1MpIHsKKwlpZiAodmlkZW8tPmNhcC5fRE9TIHx8IHZpZGVvLT5jYXAuX0RPRCkgeworCQlpZiAoIXZpZGVvLT5jYXAuX0RPUykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcKKwkJCQkiQUNQSSglcykgZGVmaW5lcyBfRE9EIGJ1dCBub3QgX0RPU1xuIiwKKwkJCQlhY3BpX2RldmljZV9iaWQodmlkZW8tPmRldmljZSkpOworCQl9CiAJCXZpZGVvLT5mbGFncy5tdWx0aWhlYWQgPSAxOwogCQlzdGF0dXMgPSAwOwogCX0KQEAgLTEyMTgsNyArMTIyMyw3IEBACiAJdTMyIHN0YXRlID0gMDsKIAogCi0JaWYgKCFkZXYgfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIWRldiB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoc3RyLCBidWZmZXIsIGNvdW50KSkKQEAgLTEyNzUsNyArMTI4MCw3IEBACiAJaW50IGk7CiAKIAotCWlmICghZGV2IHx8ICFkZXYtPmJyaWdodG5lc3MgfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIWRldiB8fCAhZGV2LT5icmlnaHRuZXNzIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTU1Nyw3ICsxNTYyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgb3B0LCBvcHRpb25zOwogCiAKLQlpZiAoIXZpZGVvIHx8IGNvdW50ICsgMSA+IHNpemVvZiBzdHIpCisJaWYgKCF2aWRlbyB8fCBjb3VudCA+PSBzaXplb2Yoc3RyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdGF0dXMgPSBhY3BpX3ZpZGVvX2J1c19QT1NUX29wdGlvbnModmlkZW8sICZvcHRpb25zKTsKQEAgLTE1OTcsNyArMTYwMiw3IEBACiAJdW5zaWduZWQgbG9uZyBvcHQ7CiAKIAotCWlmICghdmlkZW8gfHwgY291bnQgKyAxID4gc2l6ZW9mIHN0cikKKwlpZiAoIXZpZGVvIHx8IGNvdW50ID49IHNpemVvZihzdHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihzdHIsIGJ1ZmZlciwgY291bnQpKQpAQCAtMTk4Niw2ICsxOTkxLDEwIEBACiAKIAlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldmljZSwgbGV2ZWxfbmV4dCk7CiAKKwlpZiAoIXJlc3VsdCkKKwkJYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZShkZXZpY2UtPmJhY2tsaWdodCwKKwkJCQkgICAgICAgQkFDS0xJR0hUX1VQREFURV9IT1RLRVkpOworCiBvdXQ6CiAJaWYgKHJlc3VsdCkKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIHN3aXRjaCB0aGUgYnJpZ2h0bmVzc1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMgYi9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKaW5kZXggNzAzMmYyNS4uNTc1NTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIERvZXMgdGhpcyBkZXZpY2UgYWJsZSB0byBzdXBwb3J0IHZpZGVvIHN3aXRjaGluZyA/ICovCi0JaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5oYW5kbGUsICJfRE9EIiwgJmhfZHVtbXkpKSAmJgorCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKIAkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQogCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IGFjZDExNjIuLmEzMjQxYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTEyMiw2ICsxMjIsNyBAQAogCUhPU1RfVkVSU0lPTgkJPSAweDEwLCAvKiBBSENJIHNwZWMuIHZlcnNpb24gY29tcGxpYW5jeSAqLwogCUhPU1RfRU1fTE9DCQk9IDB4MWMsIC8qIEVuY2xvc3VyZSBNYW5hZ2VtZW50IGxvY2F0aW9uICovCiAJSE9TVF9FTV9DVEwJCT0gMHgyMCwgLyogRW5jbG9zdXJlIE1hbmFnZW1lbnQgQ29udHJvbCAqLworCUhPU1RfQ0FQMgkJPSAweDI0LCAvKiBob3N0IGNhcGFiaWxpdGllcywgZXh0ZW5kZWQgKi8KIAogCS8qIEhPU1RfQ1RMIGJpdHMgKi8KIAlIT1NUX1JFU0VUCQk9ICgxIDw8IDApLCAgLyogcmVzZXQgY29udHJvbGxlcjsgc2VsZi1jbGVhciAqLwpAQCAtMTI5LDE2ICsxMzAsMjkgQEAKIAlIT1NUX0FIQ0lfRU4JCT0gKDEgPDwgMzEpLCAvKiBBSENJIGVuYWJsZWQgKi8KIAogCS8qIEhPU1RfQ0FQIGJpdHMgKi8KKwlIT1NUX0NBUF9TWFMJCT0gKDEgPDwgNSksICAvKiBTdXBwb3J0cyBFeHRlcm5hbCBTQVRBICovCiAJSE9TVF9DQVBfRU1TCQk9ICgxIDw8IDYpLCAgLyogRW5jbG9zdXJlIE1hbmFnZW1lbnQgc3VwcG9ydCAqLwotCUhPU1RfQ0FQX1NTQwkJPSAoMSA8PCAxNCksIC8qIFNsdW1iZXIgY2FwYWJsZSAqLworCUhPU1RfQ0FQX0NDQwkJPSAoMSA8PCA3KSwgIC8qIENvbW1hbmQgQ29tcGxldGlvbiBDb2FsZXNjaW5nICovCisJSE9TVF9DQVBfUEFSVAkJPSAoMSA8PCAxMyksIC8qIFBhcnRpYWwgc3RhdGUgY2FwYWJsZSAqLworCUhPU1RfQ0FQX1NTQwkJPSAoMSA8PCAxNCksIC8qIFNsdW1iZXIgc3RhdGUgY2FwYWJsZSAqLworCUhPU1RfQ0FQX1BJT19NVUxUSQk9ICgxIDw8IDE1KSwgLyogUElPIG11bHRpcGxlIERSUSBzdXBwb3J0ICovCisJSE9TVF9DQVBfRkJTCQk9ICgxIDw8IDE2KSwgLyogRklTLWJhc2VkIHN3aXRjaGluZyBzdXBwb3J0ICovCiAJSE9TVF9DQVBfUE1QCQk9ICgxIDw8IDE3KSwgLyogUG9ydCBNdWx0aXBsaWVyIHN1cHBvcnQgKi8KKwlIT1NUX0NBUF9PTkxZCQk9ICgxIDw8IDE4KSwgLyogU3VwcG9ydHMgQUhDSSBtb2RlIG9ubHkgKi8KIAlIT1NUX0NBUF9DTE8JCT0gKDEgPDwgMjQpLCAvKiBDb21tYW5kIExpc3QgT3ZlcnJpZGUgc3VwcG9ydCAqLworCUhPU1RfQ0FQX0xFRAkJPSAoMSA8PCAyNSksIC8qIFN1cHBvcnRzIGFjdGl2aXR5IExFRCAqLwogCUhPU1RfQ0FQX0FMUE0JCT0gKDEgPDwgMjYpLCAvKiBBZ2dyZXNzaXZlIExpbmsgUE0gc3VwcG9ydCAqLwogCUhPU1RfQ0FQX1NTUwkJPSAoMSA8PCAyNyksIC8qIFN0YWdnZXJlZCBTcGluLXVwICovCisJSE9TVF9DQVBfTVBTCQk9ICgxIDw8IDI4KSwgLyogTWVjaGFuaWNhbCBwcmVzZW5jZSBzd2l0Y2ggKi8KIAlIT1NUX0NBUF9TTlRGCQk9ICgxIDw8IDI5KSwgLyogU05vdGlmaWNhdGlvbiByZWdpc3RlciAqLwogCUhPU1RfQ0FQX05DUQkJPSAoMSA8PCAzMCksIC8qIE5hdGl2ZSBDb21tYW5kIFF1ZXVlaW5nICovCiAJSE9TVF9DQVBfNjQJCT0gKDEgPDwgMzEpLCAvKiBQQ0kgREFDICg2NC1iaXQgRE1BKSBzdXBwb3J0ICovCiAKKwkvKiBIT1NUX0NBUDIgYml0cyAqLworCUhPU1RfQ0FQMl9CT0gJCT0gKDEgPDwgMCksICAvKiBCSU9TL09TIGhhbmRvZmYgc3VwcG9ydGVkICovCisJSE9TVF9DQVAyX05WTUhDSQk9ICgxIDw8IDEpLCAgLyogTlZNSENJIHN1cHBvcnRlZCAqLworCUhPU1RfQ0FQMl9BUFNUCQk9ICgxIDw8IDIpLCAgLyogQXV0b21hdGljIHBhcnRpYWwgdG8gc2x1bWJlciAqLworCiAJLyogcmVnaXN0ZXJzIGZvciBlYWNoIFNBVEEgcG9ydCAqLwogCVBPUlRfTFNUX0FERFIJCT0gMHgwMCwgLyogY29tbWFuZCBsaXN0IERNQSBhZGRyICovCiAJUE9SVF9MU1RfQUREUl9ISQk9IDB4MDQsIC8qIGNvbW1hbmQgbGlzdCBETUEgYWRkciBoaSAqLwpAQCAtMjY3LDggKzI4MSwxMCBAQAogc3RydWN0IGFoY2lfaG9zdF9wcml2IHsKIAl1bnNpZ25lZCBpbnQJCWZsYWdzOwkJLyogQUhDSV9IRkxBR18qICovCiAJdTMyCQkJY2FwOwkJLyogY2FwIHRvIHVzZSAqLworCXUzMgkJCWNhcDI7CQkvKiBjYXAyIHRvIHVzZSAqLwogCXUzMgkJCXBvcnRfbWFwOwkvKiBwb3J0IG1hcCB0byB1c2UgKi8KIAl1MzIJCQlzYXZlZF9jYXA7CS8qIHNhdmVkIGluaXRpYWwgY2FwICovCisJdTMyCQkJc2F2ZWRfY2FwMjsJLyogc2F2ZWQgaW5pdGlhbCBjYXAyICovCiAJdTMyCQkJc2F2ZWRfcG9ydF9tYXA7CS8qIHNhdmVkIGluaXRpYWwgcG9ydF9tYXAgKi8KIAl1MzIgCQkJZW1fbG9jOyAvKiBlbmNsb3N1cmUgbWFuYWdlbWVudCBsb2NhdGlvbiAqLwogfTsKQEAgLTMzMSwxMiArMzQ3LDE1IEBACiAKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcHMoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2hvc3RfY2FwMihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19wb3J0X2NtZChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKIAogREVWSUNFX0FUVFIoYWhjaV9ob3N0X2NhcHMsIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X2NhcHMsIE5VTEwpOworREVWSUNFX0FUVFIoYWhjaV9ob3N0X2NhcDIsIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X2NhcDIsIE5VTEwpOwogREVWSUNFX0FUVFIoYWhjaV9ob3N0X3ZlcnNpb24sIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X3ZlcnNpb24sIE5VTEwpOwogREVWSUNFX0FUVFIoYWhjaV9wb3J0X2NtZCwgU19JUlVHTywgYWhjaV9zaG93X3BvcnRfY21kLCBOVUxMKTsKIApAQCAtMzQ1LDYgKzM2NCw3IEBACiAJJmRldl9hdHRyX2VtX21lc3NhZ2VfdHlwZSwKIAkmZGV2X2F0dHJfZW1fbWVzc2FnZSwKIAkmZGV2X2F0dHJfYWhjaV9ob3N0X2NhcHMsCisJJmRldl9hdHRyX2FoY2lfaG9zdF9jYXAyLAogCSZkZXZfYXR0cl9haGNpX2hvc3RfdmVyc2lvbiwKIAkmZGV2X2F0dHJfYWhjaV9wb3J0X2NtZCwKIAlOVUxMCkBAIC00NDcsNyArNDY3LDggQEAKIAlbYm9hcmRfYWhjaV9zYjYwMF0gPQogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUwgfAotCQkJCSBBSENJX0hGTEFHX05PX01TSSB8IEFIQ0lfSEZMQUdfU0VDVDI1NSksCisJCQkJIEFIQ0lfSEZMQUdfTk9fTVNJIHwgQUhDSV9IRkxBR19TRUNUMjU1IHwKKwkJCQkgQUhDSV9IRkxBR18zMkJJVF9PTkxZKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LApAQCAtNTU0LDcgKzU3NSw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIDB4NDM5NSksIGJvYXJkX2FoY2lfc2I3MDAgfSwgLyogQVRJIFNCNzAwLzgwMCAqLwogCiAJLyogQU1EICovCi0JeyBQQ0lfVkRFVklDRShBTUQsIDB4NzgwMCksIGJvYXJkX2FoY2kgfSwgLyogQU1EIFNCOTAwICovCisJeyBQQ0lfVkRFVklDRShBTUQsIDB4NzgwMCksIGJvYXJkX2FoY2kgfSwgLyogQU1EIEh1ZHNvbi0yICovCiAJLyogQU1EIGlzIHVzaW5nIFJBSUQgY2xhc3Mgb25seSBmb3IgYWhjaSBjb250cm9sbGVycyAqLwogCXsgUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJICBQQ0lfQ0xBU1NfU1RPUkFHRV9SQUlEIDw8IDgsIDB4ZmZmZmZmLCBib2FyZF9haGNpIH0sCkBAIC01ODQsNiArNjA1LDcgQEAKIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTU5KSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTVhKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTViKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNjcgKi8KKwl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwNTgwKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTGludXggSUQgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YwKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YxKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KIAl7IFBDSV9WREVWSUNFKE5WSURJQSwgMHgwN2YyKSwgYm9hcmRfYWhjaV95ZXNuY3EgfSwJLyogTUNQNzMgKi8KQEAgLTczMiw2ICs3NTQsMTYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgaHByaXYtPmNhcCk7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFoY2lfc2hvd19ob3N0X2NhcDIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhdGFfc2hvc3RfdG9fcG9ydChzaG9zdCk7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgaHByaXYtPmNhcDIpOworfQorCiBzdGF0aWMgc3NpemVfdCBhaGNpX3Nob3dfaG9zdF92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNzcxLDcgKzgwMyw3IEBACiAJCQkJICAgICBzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2KQogewogCXZvaWQgX19pb21lbSAqbW1pbyA9IHBjaW1faW9tYXBfdGFibGUocGRldilbQUhDSV9QQ0lfQkFSXTsKLQl1MzIgY2FwLCBwb3J0X21hcDsKKwl1MzIgY2FwLCBjYXAyLCB2ZXJzLCBwb3J0X21hcDsKIAlpbnQgaTsKIAlpbnQgbXY7CiAKQEAgLTc4NCw2ICs4MTYsMTQgQEAKIAlocHJpdi0+c2F2ZWRfY2FwID0gY2FwID0gcmVhZGwobW1pbyArIEhPU1RfQ0FQKTsKIAlocHJpdi0+c2F2ZWRfcG9ydF9tYXAgPSBwb3J0X21hcCA9IHJlYWRsKG1taW8gKyBIT1NUX1BPUlRTX0lNUEwpOwogCisJLyogQ0FQMiByZWdpc3RlciBpcyBvbmx5IGRlZmluZWQgZm9yIEFIQ0kgMS4yIGFuZCBsYXRlciAqLworCXZlcnMgPSByZWFkbChtbWlvICsgSE9TVF9WRVJTSU9OKTsKKwlpZiAoKHZlcnMgPj4gMTYpID4gMSB8fAorCSAgICgodmVycyA+PiAxNikgPT0gMSAmJiAodmVycyAmIDB4RkZGRikgPj0gMHgyMDApKQorCQlocHJpdi0+c2F2ZWRfY2FwMiA9IGNhcDIgPSByZWFkbChtbWlvICsgSE9TVF9DQVAyKTsKKwllbHNlCisJCWhwcml2LT5zYXZlZF9jYXAyID0gY2FwMiA9IDA7CisKIAkvKiBzb21lIGNoaXBzIGhhdmUgZXJyYXRhIHByZXZlbnRpbmcgNjRiaXQgdXNlICovCiAJaWYgKChjYXAgJiBIT1NUX0NBUF82NCkgJiYgKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSkpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCkBAIC04NjksNiArOTA5LDcgQEAKIAogCS8qIHJlY29yZCB2YWx1ZXMgdG8gdXNlIGR1cmluZyBvcGVyYXRpb24gKi8KIAlocHJpdi0+Y2FwID0gY2FwOworCWhwcml2LT5jYXAyID0gY2FwMjsKIAlocHJpdi0+cG9ydF9tYXAgPSBwb3J0X21hcDsKIH0KIApAQCAtODg3LDYgKzkyOCw4IEBACiAJdm9pZCBfX2lvbWVtICptbWlvID0gaG9zdC0+aW9tYXBbQUhDSV9QQ0lfQkFSXTsKIAogCXdyaXRlbChocHJpdi0+c2F2ZWRfY2FwLCBtbWlvICsgSE9TVF9DQVApOworCWlmIChocHJpdi0+c2F2ZWRfY2FwMikKKwkJd3JpdGVsKGhwcml2LT5zYXZlZF9jYXAyLCBtbWlvICsgSE9TVF9DQVAyKTsKIAl3cml0ZWwoaHByaXYtPnNhdmVkX3BvcnRfbWFwLCBtbWlvICsgSE9TVF9QT1JUU19JTVBMKTsKIAkodm9pZCkgcmVhZGwobW1pbyArIEhPU1RfUE9SVFNfSU1QTCk7CS8qIGZsdXNoICovCiB9CkBAIC0yNTM0LDEzICsyNTc3LDE0IEBACiAJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaG9zdC0+ZGV2KTsKIAl2b2lkIF9faW9tZW0gKm1taW8gPSBob3N0LT5pb21hcFtBSENJX1BDSV9CQVJdOwotCXUzMiB2ZXJzLCBjYXAsIGltcGwsIHNwZWVkOworCXUzMiB2ZXJzLCBjYXAsIGNhcDIsIGltcGwsIHNwZWVkOwogCWNvbnN0IGNoYXIgKnNwZWVkX3M7CiAJdTE2IGNjOwogCWNvbnN0IGNoYXIgKnNjY19zOwogCiAJdmVycyA9IHJlYWRsKG1taW8gKyBIT1NUX1ZFUlNJT04pOwogCWNhcCA9IGhwcml2LT5jYXA7CisJY2FwMiA9IGhwcml2LT5jYXAyOwogCWltcGwgPSBocHJpdi0+cG9ydF9tYXA7CiAKIAlzcGVlZCA9IChjYXAgPj4gMjApICYgMHhmOwpAQCAtMjU4MywyNSArMjYyNywyOSBAQAogCQkiZmxhZ3M6ICIKIAkJIiVzJXMlcyVzJXMlcyVzIgogCQkiJXMlcyVzJXMlcyVzJXMiCi0JCSIlc1xuIgorCQkiJXMlcyVzJXMlcyVzXG4iCiAJCSwKIAotCQljYXAgJiAoMSA8PCAzMSkgPyAiNjRiaXQgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAzMCkgPyAibmNxICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjkpID8gInNudGYgIiA6ICIiLAotCQljYXAgJiAoMSA8PCAyOCkgPyAiaWxjayAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDI3KSA/ICJzdGFnICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjYpID8gInBtICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMjUpID8gImxlZCAiIDogIiIsCi0KLQkJY2FwICYgKDEgPDwgMjQpID8gImNsbyAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE5KSA/ICJueiAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE4KSA/ICJvbmx5ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgMTcpID8gInBtcCAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDE1KSA/ICJwaW8gIiA6ICIiLAotCQljYXAgJiAoMSA8PCAxNCkgPyAic2x1bSAiIDogIiIsCi0JCWNhcCAmICgxIDw8IDEzKSA/ICJwYXJ0ICIgOiAiIiwKLQkJY2FwICYgKDEgPDwgNikgPyAiZW1zICI6ICIiCisJCWNhcCAmIEhPU1RfQ0FQXzY0ID8gIjY0Yml0ICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfTkNRID8gIm5jcSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1NOVEYgPyAic250ZiAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX01QUyA/ICJpbGNrICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU1NTID8gInN0YWcgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9BTFBNID8gInBtICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfTEVEID8gImxlZCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0NMTyA/ICJjbG8gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9PTkxZID8gIm9ubHkgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9QTVAgPyAicG1wICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfRkJTID8gImZicyAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1BJT19NVUxUSSA/ICJwaW8gIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9TU0MgPyAic2x1bSAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX1BBUlQgPyAicGFydCAiIDogIiIsCisJCWNhcCAmIEhPU1RfQ0FQX0NDQyA/ICJjY2MgIiA6ICIiLAorCQljYXAgJiBIT1NUX0NBUF9FTVMgPyAiZW1zICIgOiAiIiwKKwkJY2FwICYgSE9TVF9DQVBfU1hTID8gInN4cyAiIDogIiIsCisJCWNhcDIgJiBIT1NUX0NBUDJfQVBTVCA/ICJhcHN0ICIgOiAiIiwKKwkJY2FwMiAmIEhPU1RfQ0FQMl9OVk1IQ0kgPyAibnZtcCAiIDogIiIsCisJCWNhcDIgJiBIT1NUX0NBUDJfQk9IID8gImJvaCAiIDogIiIKIAkJKTsKIH0KIApAQCAtMjY1MCwxNyArMjY5OCwxNSBAQAogCX0KIH0KIAotLyoKLSAqIFNCNjAwIGFoY2kgY29udHJvbGxlciBvbiBjZXJ0YWluIGJvYXJkcyBjYW4ndCBkbyA2NGJpdCBETUEgd2l0aAotICogb2xkZXIgQklPUy4KLSAqLwotc3RhdGljIGJvb2wgYWhjaV9zYjYwMF8zMmJpdF9vbmx5KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorLyogb25seSBzb21lIFNCNjAwIGFoY2kgY29udHJvbGxlcnMgY2FuIGRvIDY0Yml0IERNQSAqLworc3RhdGljIGJvb2wgYWhjaV9zYjYwMF9lbmFibGVfNjRiaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN5c2lkc1tdID0gewogCQkvKgogCQkgKiBUaGUgb2xkZXN0IHZlcnNpb24ga25vd24gdG8gYmUgYnJva2VuIGlzIDA5MDEgYW5kCiAJCSAqIHdvcmtpbmcgaXMgMTUwMSB3aGljaCB3YXMgcmVsZWFzZWQgb24gMjAwNy0xMC0yNi4KLQkJICogRm9yY2UgMzJiaXQgRE1BIG9uIGFueXRoaW5nIG9sZGVyIHRoYW4gMTUwMS4KKwkJICogRW5hYmxlIDY0Yml0IERNQSBvbiAxNTAxIGFuZCBhbnl0aGluZyBuZXdlci4KKwkJICoKIAkJICogUGxlYXNlIHJlYWQgYmtvIzk0MTIgZm9yIG1vcmUgaW5mby4KIAkJICovCiAJCXsKQEAgLTI2NzMsNDYgKzI3MTksNTcgQEAKIAkJCS5kcml2ZXJfZGF0YSA9ICIyMDA3MTAyNiIsCS8qIHl5eXltbWRkICovCiAJCX0sCiAJCS8qCi0JCSAqIEl0J3MgeWV0IHVua25vd24gd2hldGhlciBtb3JlIHJlY2VudCBCSU9TIGZpeGVzIHRoZQotCQkgKiBwcm9ibGVtLiAgQmxhY2tsaXN0IHRoZSB3aG9sZSBib2FyZCBmb3IgdGhlIHRpbWUKLQkJICogYmVpbmcuICBQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIHRocmVhZCBmb3IgbW9yZQotCQkgKiBpbmZvLgorCQkgKiBBbGwgQklPUyB2ZXJzaW9ucyBmb3IgdGhlIE1TSSBLOUEyIFBsYXRpbnVtIChNUy03Mzc2KQorCQkgKiBzdXBwb3J0IDY0Yml0IERNQS4KIAkJICoKLQkJICogaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUubGludXguaWRlLzQyMzI2CisJCSAqIEJJT1MgdmVyc2lvbnMgZWFybGllciB0aGFuIDEuNSBoYWQgdGhlIE1hbnVmYWN0dXJlciBETUkKKwkJICogZmllbGRzIGFzICJNSUNSTy1TVEFSIElOVEVSQU5USU9OQUwgQ08uLExURCIuCisJCSAqIFRoaXMgc3BlbGxpbmcgbWlzdGFrZSB3YXMgZml4ZWQgaW4gQklPUyB2ZXJzaW9uIDEuNSwgc28KKwkJICogMS41IGFuZCBsYXRlciBoYXZlIHRoZSBNYW51ZmFjdHVyZXIgYXMKKwkJICogIk1JQ1JPLVNUQVIgSU5URVJOQVRJT05BTCBDTy4sTFREIi4KKwkJICogU28gdHJ5IHRvIG1hdGNoIG9uIERNSV9CT0FSRF9WRU5ET1Igb2YgIk1JQ1JPLVNUQVIgSU5URVIiLgorCQkgKgorCQkgKiBCSU9TIHZlcnNpb25zIGVhcmxpZXIgdGhhbiAxLjkgaGFkIGEgQm9hcmQgUHJvZHVjdCBOYW1lCisJCSAqIERNSSBmaWVsZCBvZiAiTVMtNzM3NiIuIFRoaXMgd2FzIGNoYW5nZWQgdG8gYmUKKwkJICogIks5QTIgUGxhdGludW0gKE1TLTczNzYpIiBpbiB2ZXJzaW9uIDEuOSwgYnV0IHdlIGNhbiBzdGlsbAorCQkgKiBtYXRjaCBvbiBETUlfQk9BUkRfTkFNRSBvZiAiTVMtNzM3NiIuCiAJCSAqLwogCQl7Ci0JCQkuaWRlbnQgPSAiR2lnYWJ5dGUgR0EtTUE2OVZNLVMyIiwKKwkJCS5pZGVudCA9ICJNU0kgSzlBMiBQbGF0aW51bSIsCiAJCQkubWF0Y2hlcyA9IHsKIAkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwKLQkJCQkJICAiR2lnYWJ5dGUgVGVjaG5vbG9neSBDby4sIEx0ZC4iKSwKLQkJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJHQS1NQTY5Vk0tUzIiKSwKKwkJCQkJICAiTUlDUk8tU1RBUiBJTlRFUiIpLAorCQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk1TLTczNzYiKSwKIAkJCX0sCiAJCX0sCiAJCXsgfQogCX07CiAJY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKm1hdGNoOworCWludCB5ZWFyLCBtb250aCwgZGF0ZTsKKwljaGFyIGJ1Zls5XTsKIAogCW1hdGNoID0gZG1pX2ZpcnN0X21hdGNoKHN5c2lkcyk7CiAJaWYgKHBkZXYtPmJ1cy0+bnVtYmVyICE9IDAgfHwgcGRldi0+ZGV2Zm4gIT0gUENJX0RFVkZOKDB4MTIsIDApIHx8CiAJICAgICFtYXRjaCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG1hdGNoLT5kcml2ZXJfZGF0YSkgewotCQlpbnQgeWVhciwgbW9udGgsIGRhdGU7Ci0JCWNoYXIgYnVmWzldOworCWlmICghbWF0Y2gtPmRyaXZlcl9kYXRhKQorCQlnb3RvIGVuYWJsZV82NGJpdDsKIAotCQlkbWlfZ2V0X2RhdGUoRE1JX0JJT1NfREFURSwgJnllYXIsICZtb250aCwgJmRhdGUpOwotCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA0ZCUwMmQlMDJkIiwgeWVhciwgbW9udGgsIGRhdGUpOworCWRtaV9nZXRfZGF0ZShETUlfQklPU19EQVRFLCAmeWVhciwgJm1vbnRoLCAmZGF0ZSk7CisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNGQlMDJkJTAyZCIsIHllYXIsIG1vbnRoLCBkYXRlKTsKIAotCQlpZiAoc3RyY21wKGJ1ZiwgbWF0Y2gtPmRyaXZlcl9kYXRhKSA+PSAwKQotCQkJcmV0dXJuIGZhbHNlOwotCisJaWYgKHN0cmNtcChidWYsIG1hdGNoLT5kcml2ZXJfZGF0YSkgPj0gMCkKKwkJZ290byBlbmFibGVfNjRiaXQ7CisJZWxzZSB7CiAJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcGRldi0+ZGV2LCAiJXM6IEJJT1MgdG9vIG9sZCwgIgogCQkJICAgImZvcmNpbmcgMzJiaXQgRE1BLCB1cGRhdGUgQklPU1xuIiwgbWF0Y2gtPmlkZW50KTsKLQl9IGVsc2UKLQkJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogdGhpcyBib2FyZCBjYW4ndCAiCi0JCQkgICAiZG8gNjRiaXQgRE1BLCBmb3JjaW5nIDMyYml0XG4iLCBtYXRjaC0+aWRlbnQpOworCQlyZXR1cm4gZmFsc2U7CisJfQogCitlbmFibGVfNjRiaXQ6CisJZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsICZwZGV2LT5kZXYsICIlczogZW5hYmxpbmcgNjRiaXQgRE1BXG4iLAorCQkgICBtYXRjaC0+aWRlbnQpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0yODU4LDYgKzI5MTUsNTUgQEAKIAlyZXR1cm4gcGRldi0+YnVzLT5udW1iZXIgPT0gKHZhbCA+PiA4KSAmJiBwZGV2LT5kZXZmbiA9PSAodmFsICYgMHhmZik7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVRBX0FDUEkKK3N0YXRpYyB2b2lkIGFoY2lfZ3RmX2ZpbHRlcl93b3JrYXJvdW5kKHN0cnVjdCBhdGFfaG9zdCAqaG9zdCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgc3lzaWRzW10gPSB7CisJCS8qCisJCSAqIEFzcGlyZSAzODEwVCBpc3N1ZXMgYSBidW5jaCBvZiBTQVRBIGVuYWJsZSBjb21tYW5kcworCQkgKiB2aWEgX0dURiBpbmNsdWRpbmcgYW4gaW52YWxpZCBvbmUgYW5kIG9uZSB3aGljaCBpcworCQkgKiByZWplY3RlZCBieSB0aGUgZGV2aWNlLiAgQW1vbmcgdGhlIHN1Y2Nlc3NmdWwgb25lcworCQkgKiBpcyBGUERNQSBub24temVybyBvZmZzZXQgZW5hYmxlIHdoaWNoIHdoZW4gZW5hYmxlZAorCQkgKiBvbmx5IG9uIHRoZSBkcml2ZSBzaWRlIGxlYWRzIHRvIE5DUSBjb21tYW5kCisJCSAqIGZhaWx1cmVzLiAgRmlsdGVyIGl0IG91dC4KKwkJICovCisJCXsKKwkJCS5pZGVudCA9ICJBc3BpcmUgMzgxMFQiLAorCQkJLm1hdGNoZXMgPSB7CisJCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQXNwaXJlIDM4MTBUIiksCisJCQl9LAorCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKilBVEFfQUNQSV9GSUxURVJfRlBETUFfT0ZGU0VULAorCQl9LAorCQl7IH0KKwl9OworCWNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICpkbWkgPSBkbWlfZmlyc3RfbWF0Y2goc3lzaWRzKTsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyOworCWludCBpOworCisJaWYgKCFkbWkpCisJCXJldHVybjsKKworCWZpbHRlciA9ICh1bnNpZ25lZCBsb25nKWRtaS0+ZHJpdmVyX2RhdGE7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sIGhvc3QtPmRldiwKKwkJICAgImFwcGx5aW5nIGV4dHJhIEFDUEkgX0dURiBmaWx0ZXIgMHgleCBmb3IgJXNcbiIsCisJCSAgIGZpbHRlciwgZG1pLT5pZGVudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+bl9wb3J0czsgaSsrKSB7CisJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKKwkJc3RydWN0IGF0YV9saW5rICpsaW5rOworCQlzdHJ1Y3QgYXRhX2RldmljZSAqZGV2OworCisJCWF0YV9mb3JfZWFjaF9saW5rKGxpbmssIGFwLCBFREdFKQorCQkJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEFMTCkKKwkJCQlkZXYtPmd0Zl9maWx0ZXIgfD0gZmlsdGVyOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYWhjaV9ndGZfZmlsdGVyX3dvcmthcm91bmQoc3RydWN0IGF0YV9ob3N0ICpob3N0KQore30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGFoY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CkBAIC0yOTI2LDkgKzMwMzIsOSBAQAogCWlmIChib2FyZF9pZCA9PSBib2FyZF9haGNpX3NiNzAwICYmIHBkZXYtPnJldmlzaW9uID49IDB4NDApCiAJCWhwcml2LT5mbGFncyAmPSB+QUhDSV9IRkxBR19JR05fU0VSUl9JTlRFUk5BTDsKIAotCS8qIGFwcGx5IHNiNjAwIDMyYml0IG9ubHkgcXVpcmsgKi8KLQlpZiAoYWhjaV9zYjYwMF8zMmJpdF9vbmx5KHBkZXYpKQotCQlocHJpdi0+ZmxhZ3MgfD0gQUhDSV9IRkxBR18zMkJJVF9PTkxZOworCS8qIG9ubHkgc29tZSBTQjYwMHMgY2FuIGRvIDY0Yml0IERNQSAqLworCWlmIChhaGNpX3NiNjAwX2VuYWJsZV82NGJpdChwZGV2KSkKKwkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHXzMyQklUX09OTFk7CiAKIAlpZiAoKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSB8fCBwY2lfZW5hYmxlX21zaShwZGV2KSkKIAkJcGNpX2ludHgocGRldiwgMSk7CkBAIC0zMDIzLDYgKzMxMjksOSBAQAogCS8qIGFwcGx5IHdvcmthcm91bmQgZm9yIEFTVVMgUDVXIERIIERlbHV4ZSBtYWluYm9hcmQgKi8KIAlhaGNpX3A1d2RoX3dvcmthcm91bmQoaG9zdCk7CiAKKwkvKiBhcHBseSBndGYgZmlsdGVyIHF1aXJrICovCisJYWhjaV9ndGZfZmlsdGVyX3dvcmthcm91bmQoaG9zdCk7CisKIAkvKiBpbml0aWFsaXplIGFkYXB0ZXIgKi8KIAlyYyA9IGFoY2lfY29uZmlndXJlX2RtYV9tYXNrcyhwZGV2LCBocHJpdi0+Y2FwICYgSE9TVF9DQVBfNjQpOwogCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtYWNwaS5jCmluZGV4IDAxOTY0YjYuLmIwODgyY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWFjcGkuYwpAQCAtMjAsMTkgKzIwLDkgQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAotZW51bSB7Ci0JQVRBX0FDUElfRklMVEVSX1NFVFhGRVIJPSAxIDw8IDAsCi0JQVRBX0FDUElfRklMVEVSX0xPQ0sJPSAxIDw8IDEsCi0JQVRBX0FDUElfRklMVEVSX0RJUE0JPSAxIDw8IDIsCi0KLQlBVEFfQUNQSV9GSUxURVJfREVGQVVMVAk9IEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSIHwKLQkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLIHwKLQkJCQkgIEFUQV9BQ1BJX0ZJTFRFUl9ESVBNLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBhdGFfYWNwaV9ndGZfZmlsdGVyID0gQVRBX0FDUElfRklMVEVSX0RFRkFVTFQ7Cit1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlciA9IEFUQV9BQ1BJX0ZJTFRFUl9ERUZBVUxUOwogbW9kdWxlX3BhcmFtX25hbWVkKGFjcGlfZ3RmX2ZpbHRlciwgYXRhX2FjcGlfZ3RmX2ZpbHRlciwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoYWNwaV9ndGZfZmlsdGVyLCAiZmlsdGVyIG1hc2sgZm9yIEFDUEkgX0dURiBjb21tYW5kcywgc2V0IHRvIGZpbHRlciBvdXQgKDB4MT1zZXQgeGZlcm1vZGUsIDB4Mj1sb2NrL2ZyZWV6ZSBsb2NrLCAweDQ9RElQTSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoYWNwaV9ndGZfZmlsdGVyLCAiZmlsdGVyIG1hc2sgZm9yIEFDUEkgX0dURiBjb21tYW5kcywgc2V0IHRvIGZpbHRlciBvdXQgKDB4MT1zZXQgeGZlcm1vZGUsIDB4Mj1sb2NrL2ZyZWV6ZSBsb2NrLCAweDQ9RElQTSwgMHg4PUZQRE1BIG5vbi16ZXJvIG9mZnNldCwgMHgxMD1GUERNQSBETUEgU2V0dXAgRklTIGF1dG8tYWN0aXZhdGUpIik7CiAKICNkZWZpbmUgTk9fUE9SVF9NVUxUCQkweGZmZmYKICNkZWZpbmUgU0FUQV9BRFIocm9vdCwgcG1wKQkoKChyb290KSA8PCAxNikgfCAocG1wKSkKQEAgLTYxMywxMCArNjAzLDExIEBACiAJdGYtPmNvbW1hbmQgPSBndGYtPnRmWzZdOwkvKiAweDFmNyAqLwogfQogCi1zdGF0aWMgaW50IGF0YV9hY3BpX2ZpbHRlcl90Zihjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwKK3N0YXRpYyBpbnQgYXRhX2FjcGlfZmlsdGVyX3RmKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnB0ZikKIHsKLQlpZiAoYXRhX2FjcGlfZ3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSKSB7CisJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSKSB7CiAJCS8qIGxpYmF0YSBkb2Vzbid0IHVzZSBBQ1BJIHRvIGNvbmZpZ3VyZSB0cmFuc2ZlciBtb2RlLgogCQkgKiBJdCB3aWxsIG9ubHkgY29uZnVzZSBkZXZpY2UgY29uZmlndXJhdGlvbi4gIFNraXAuCiAJCSAqLwpAQCAtNjI1LDcgKzYxNiw3IEBACiAJCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoYXRhX2FjcGlfZ3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLKSB7CisJaWYgKGRldi0+Z3RmX2ZpbHRlciAmIEFUQV9BQ1BJX0ZJTFRFUl9MT0NLKSB7CiAJCS8qIEJJT1Mgd3JpdGVycywgc29ycnkgYnV0IHdlIGRvbid0IHdhbm5hIGxvY2sKIAkJICogZmVhdHVyZXMgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgc2FpZCBzby4KIAkJICovCkBAIC02NDcsMTIgKzYzOCwyMyBAQAogCQkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKGF0YV9hY3BpX2d0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRElQTSkgeworCWlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9GRUFUVVJFUyAmJgorCSAgICB0Zi0+ZmVhdHVyZSA9PSBTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSkgewogCQkvKiBpbmhpYml0IGVuYWJsaW5nIERJUE0gKi8KLQkJaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX0ZFQVRVUkVTICYmCi0JCSAgICB0Zi0+ZmVhdHVyZSA9PSBTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSAmJgorCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0RJUE0gJiYKIAkJICAgIHRmLT5uc2VjdCA9PSBTQVRBX0RJUE0pCiAJCQlyZXR1cm4gMTsKKworCQkvKiBpbmhpYml0IEZQRE1BIG5vbi16ZXJvIG9mZnNldCAqLworCQlpZiAoZGV2LT5ndGZfZmlsdGVyICYgQVRBX0FDUElfRklMVEVSX0ZQRE1BX09GRlNFVCAmJgorCQkgICAgKHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX09GRlNFVCB8fAorCQkgICAgIHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX0lOX09SREVSKSkKKwkJCXJldHVybiAxOworCisJCS8qIGluaGliaXQgRlBETUEgYXV0byBhY3RpdmF0aW9uICovCisJCWlmIChkZXYtPmd0Zl9maWx0ZXIgJiBBVEFfQUNQSV9GSUxURVJfRlBETUFfQUEgJiYKKwkJICAgIHRmLT5uc2VjdCA9PSBTQVRBX0ZQRE1BX0FBKQorCQkJcmV0dXJuIDE7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03MDQsNyArNzA2LDcgQEAKIAkJcHB0ZiA9ICZwdGY7CiAJfQogCi0JaWYgKCFhdGFfYWNwaV9maWx0ZXJfdGYoJnRmLCBwcHRmKSkgeworCWlmICghYXRhX2FjcGlfZmlsdGVyX3RmKGRldiwgJnRmLCBwcHRmKSkgewogCQlydGYgPSB0ZjsKIAkJZXJyX21hc2sgPSBhdGFfZXhlY19pbnRlcm5hbChkZXYsICZydGYsIE5VTEwsCiAJCQkJCSAgICAgRE1BX05PTkUsIE5VTEwsIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMGRkYWY0My4uZGM3MjY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00OTE5LDEwICs0OTE5LDExIEBACiAgKi8KIHZvaWQgYXRhX3FjX2ZyZWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKLQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CiAJdW5zaWduZWQgaW50IHRhZzsKIAogCVdBUk5fT05fT05DRShxYyA9PSBOVUxMKTsgLyogYXRhX3FjX2Zyb21fdGFnIF9taWdodF8gcmV0dXJuIE5VTEwgKi8KKwlhcCA9IHFjLT5hcDsKIAogCXFjLT5mbGFncyA9IDA7CiAJdGFnID0gcWMtPnRhZzsKQEAgLTQ5MzQsMTEgKzQ5MzUsMTMgQEAKIAogdm9pZCBfX2F0YV9xY19jb21wbGV0ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7Ci0Jc3RydWN0IGF0YV9saW5rICpsaW5rID0gcWMtPmRldi0+bGluazsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwOworCXN0cnVjdCBhdGFfbGluayAqbGluazsKIAogCVdBUk5fT05fT05DRShxYyA9PSBOVUxMKTsgLyogYXRhX3FjX2Zyb21fdGFnIF9taWdodF8gcmV0dXJuIE5VTEwgKi8KIAlXQVJOX09OX09OQ0UoIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpOworCWFwID0gcWMtPmFwOworCWxpbmsgPSBxYy0+ZGV2LT5saW5rOwogCiAJaWYgKGxpa2VseShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0RNQU1BUCkpCiAJCWF0YV9zZ19jbGVhbihxYyk7CkBAIC01MDI4LDEyICs1MDMxLDE0IEBACiAJCQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19GQUlMRUQ7CiAKIAkJaWYgKHVubGlrZWx5KHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRkFJTEVEKSkgewotCQkJaWYgKCFhdGFfdGFnX2ludGVybmFsKHFjLT50YWcpKSB7Ci0JCQkJLyogYWx3YXlzIGZpbGwgcmVzdWx0IFRGIGZvciBmYWlsZWQgcWMgKi8KLQkJCQlmaWxsX3Jlc3VsdF90ZihxYyk7CisJCQkvKiBhbHdheXMgZmlsbCByZXN1bHQgVEYgZm9yIGZhaWxlZCBxYyAqLworCQkJZmlsbF9yZXN1bHRfdGYocWMpOworCisJCQlpZiAoIWF0YV90YWdfaW50ZXJuYWwocWMtPnRhZykpCiAJCQkJYXRhX3FjX3NjaGVkdWxlX2VoKHFjKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCQllbHNlCisJCQkJX19hdGFfcWNfY29tcGxldGUocWMpOworCQkJcmV0dXJuOwogCQl9CiAKIAkJV0FSTl9PTl9PTkNFKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKTsKQEAgLTU1OTEsNiArNTU5Niw5IEBACiAKIAkJZGV2LT5saW5rID0gbGluazsKIAkJZGV2LT5kZXZubyA9IGRldiAtIGxpbmstPmRldmljZTsKKyNpZmRlZiBDT05GSUdfQVRBX0FDUEkKKwkJZGV2LT5ndGZfZmlsdGVyID0gYXRhX2FjcGlfZ3RmX2ZpbHRlcjsKKyNlbmRpZgogCQlhdGFfZGV2X2luaXQoZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGEwNDQ4OGYuLmJiYTJhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0yNjY3LDE0ICsyNjY3LDE0IEBACiAJCWRldi0+cGlvX21vZGUgPSBYRkVSX1BJT18wOwogCQlkZXYtPmZsYWdzICY9IH5BVEFfREZMQUdfU0xFRVBJTkc7CiAKLQkJaWYgKCFhdGFfcGh5c19saW5rX29mZmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKLQkJCS8qIGFwcGx5IGNsYXNzIG92ZXJyaWRlICovCi0JCQlpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9BVEEpCi0JCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfQVRBOwotCQkJZWxzZSBpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9TRU1CKQotCQkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX1NFTUJfVU5TVVA7Ci0JCX0gZWxzZQotCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKKwkJaWYgKGF0YV9waHlzX2xpbmtfb2ZmbGluZShhdGFfZGV2X3BoeXNfbGluayhkZXYpKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGFwcGx5IGNsYXNzIG92ZXJyaWRlICovCisJCWlmIChsZmxhZ3MgJiBBVEFfTEZMQUdfQVNTVU1FX0FUQSkKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX0FUQTsKKwkJZWxzZSBpZiAobGZsYWdzICYgQVRBX0xGTEFHX0FTU1VNRV9TRU1CKQorCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfU0VNQl9VTlNVUDsKIAl9CiAKIAkvKiByZWNvcmQgY3VycmVudCBsaW5rIHNwZWVkICovCkBAIC0yNzEzLDM0ICsyNzEzLDQ4IEBACiAJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0VIX1BFTkRJTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCi0JLyogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgorCS8qCisJICogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgogCSAqIEhvdHBsdWcgY291bGQgaGF2ZSBoYXBwZW5lZCBkdXJpbmcgcmVzZXQgYW5kIHNvbWUKIAkgKiBjb250cm9sbGVycyBmYWlsIHRvIHdhaXQgd2hpbGUgYSBkcml2ZSBpcyBzcGlubmluZyB1cCBhZnRlcgogCSAqIGJlaW5nIGhvdHBsdWdnZWQgY2F1c2luZyBtaXNkZXRlY3Rpb24uICBCeSBjcm9zcyBjaGVja2luZwotCSAqIGxpbmsgb25saW5lbmVzcyBhbmQgY2xhc3NpZmljYXRpb24gcmVzdWx0LCB0aG9zZSBjb25kaXRpb25zCi0JICogY2FuIGJlIHJlbGlhYmx5IGRldGVjdGVkIGFuZCByZXRyaWVkLgorCSAqIGxpbmsgb24vb2ZmbGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCwgdGhvc2UKKwkgKiBjb25kaXRpb25zIGNhbiBiZSByZWxpYWJseSBkZXRlY3RlZCBhbmQgcmV0cmllZC4KIAkgKi8KIAlucl91bmtub3duID0gMDsKIAlhdGFfZm9yX2VhY2hfZGV2KGRldiwgbGluaywgQUxMKSB7Ci0JCS8qIGNvbnZlcnQgYWxsIEFUQV9ERVZfVU5LTk9XTiB0byBBVEFfREVWX05PTkUgKi8KLQkJaWYgKGNsYXNzZXNbZGV2LT5kZXZub10gPT0gQVRBX0RFVl9VTktOT1dOKSB7Ci0JCQljbGFzc2VzW2Rldi0+ZGV2bm9dID0gQVRBX0RFVl9OT05FOwotCQkJaWYgKGF0YV9waHlzX2xpbmtfb25saW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKQorCQlpZiAoYXRhX3BoeXNfbGlua19vbmxpbmUoYXRhX2Rldl9waHlzX2xpbmsoZGV2KSkpIHsKKwkJCWlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgeworCQkJCWF0YV9kZXZfcHJpbnRrKGRldiwgS0VSTl9ERUJVRywgImxpbmsgb25saW5lICIKKwkJCQkJICAgICAgICJidXQgZGV2aWNlIG1pc2NsYXNzaWZlZFxuIik7CisJCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKIAkJCQlucl91bmtub3duKys7CisJCQl9CisJCX0gZWxzZSBpZiAoYXRhX3BoeXNfbGlua19vZmZsaW5lKGF0YV9kZXZfcGh5c19saW5rKGRldikpKSB7CisJCQlpZiAoYXRhX2NsYXNzX2VuYWJsZWQoY2xhc3Nlc1tkZXYtPmRldm5vXSkpCisJCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAibGluayBvZmZsaW5lLCAiCisJCQkJCSAgICAgICAiY2xlYXJpbmcgY2xhc3MgJWQgdG8gTk9ORVxuIiwKKwkJCQkJICAgICAgIGNsYXNzZXNbZGV2LT5kZXZub10pOworCQkJY2xhc3Nlc1tkZXYtPmRldm5vXSA9IEFUQV9ERVZfTk9ORTsKKwkJfSBlbHNlIGlmIChjbGFzc2VzW2Rldi0+ZGV2bm9dID09IEFUQV9ERVZfVU5LTk9XTikgeworCQkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX0RFQlVHLCAibGluayBzdGF0dXMgdW5rbm93biwgIgorCQkJCSAgICAgICAiY2xlYXJpbmcgVU5LTk9XTiB0byBOT05FXG4iKTsKKwkJCWNsYXNzZXNbZGV2LT5kZXZub10gPSBBVEFfREVWX05PTkU7CiAJCX0KIAl9CiAKIAlpZiAoY2xhc3NpZnkgJiYgbnJfdW5rbm93bikgewogCQlpZiAodHJ5IDwgbWF4X3RyaWVzKSB7CiAJCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLCAibGluayBvbmxpbmUgYnV0ICIKLQkJCQkgICAgICAgImRldmljZSBtaXNjbGFzc2lmaWVkLCByZXRyeWluZ1xuIik7CisJCQkJCSIlZCBkZXZpY2VzIG1pc2NsYXNzaWZpZWQsIHJldHJ5aW5nXG4iLAorCQkJCQlucl91bmtub3duKTsKIAkJCWZhaWxlZF9saW5rID0gbGluazsKIAkJCXJjID0gLUVBR0FJTjsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9XQVJOSU5HLAotCQkJICAgICAgICJsaW5rIG9ubGluZSBidXQgZGV2aWNlIG1pc2NsYXNzaWZpZWQsICIKLQkJCSAgICAgICAiZGV2aWNlIGRldGVjdGlvbiBtaWdodCBmYWlsXG4iKTsKKwkJCQkibGluayBvbmxpbmUgYnV0ICVkIGRldmljZXMgbWlzY2xhc3NpZmllZCwgIgorCQkJCSJkZXZpY2UgZGV0ZWN0aW9uIG1pZ2h0IGZhaWxcbiIsIG5yX3Vua25vd24pOwogCX0KIAogCS8qIHJlc2V0IHN1Y2Nlc3NmdWwsIHNjaGVkdWxlIHJldmFsaWRhdGlvbiAqLwpAQCAtMjk2NywxMiArMjk4MSwxNCBAQAogCSAqIGRldmljZSBkZXRlY3Rpb24gbWVzc2FnZXMgYmFja3dhcmRzLgogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBBTEwpIHsKLQkJaWYgKCEobmV3X21hc2sgJiAoMSA8PCBkZXYtPmRldm5vKSkgfHwKLQkJICAgIGRldi0+Y2xhc3MgPT0gQVRBX0RFVl9QTVApCisJCWlmICghKG5ld19tYXNrICYgKDEgPDwgZGV2LT5kZXZubykpKQogCQkJY29udGludWU7CiAKIAkJZGV2LT5jbGFzcyA9IGVoYy0+Y2xhc3Nlc1tkZXYtPmRldm5vXTsKIAorCQlpZiAoZGV2LT5jbGFzcyA9PSBBVEFfREVWX1BNUCkKKwkJCWNvbnRpbnVlOworCiAJCWVoYy0+aS5mbGFncyB8PSBBVEFfRUhJX1BSSU5USU5GTzsKIAkJcmMgPSBhdGFfZGV2X2NvbmZpZ3VyZShkZXYpOwogCQllaGMtPmkuZmxhZ3MgJj0gfkFUQV9FSElfUFJJTlRJTkZPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLmggYi9kcml2ZXJzL2F0YS9saWJhdGEuaAppbmRleCBiZThlMjYyLi44MjNlNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEuaAorKysgYi9kcml2ZXJzL2F0YS9saWJhdGEuaApAQCAtMTE4LDYgKzExOCw4IEBACiAKIC8qIGxpYmF0YS1hY3BpLmMgKi8KICNpZmRlZiBDT05GSUdfQVRBX0FDUEkKK2V4dGVybiB1bnNpZ25lZCBpbnQgYXRhX2FjcGlfZ3RmX2ZpbHRlcjsKKwogZXh0ZXJuIHZvaWQgYXRhX2FjcGlfYXNzb2NpYXRlX3NhdGFfcG9ydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9hY3BpX2Fzc29jaWF0ZShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwogZXh0ZXJuIHZvaWQgYXRhX2FjcGlfZGlzc29jaWF0ZShzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggZmM5YzVkNi4uMTQzMmRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAogCWlmIChwcmludF9pbmZvICYmIGFkZXYtPmNsYXNzID09IEFUQV9ERVZfQVRBUEkgJiYgIWFsaV9hdGFwaV9kbWEpIHsKIAkJYXRhX2Rldl9wcmludGsoYWRldiwgS0VSTl9XQVJOSU5HLAotCQkJICAgICAgICJXQVJOSU5HOiBBVEFQSSBETUEgZGlzYWJsZWQgZm9yIHJlbGlhYmxpdHkgaXNzdWVzLiAgSXQgY2FuIGJlIGVuYWJsZWRcbiIpOworCQkJICAgICAgICJXQVJOSU5HOiBBVEFQSSBETUEgZGlzYWJsZWQgZm9yIHJlbGlhYmlsaXR5IGlzc3Vlcy4gIEl0IGNhbiBiZSBlbmFibGVkXG4iKTsKIAkJYXRhX2Rldl9wcmludGsoYWRldiwgS0VSTl9XQVJOSU5HLAogCQkJICAgICAgICJXQVJOSU5HOiB2aWEgcGF0YV9hbGkuYXRhcGlfZG1hIG1vZHBhcmFtIG9yIGNvcnJlc3BvbmRpbmcgc3lzZnMgbm9kZS5cbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IGFhNGIzZjYuLmFlNDQ1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJeyBQQ0lfVkRFVklDRShBVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9JREUpLCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgfSwKIAl7IFBDSV9WREVWSUNFKEFUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERSksIH0sCi0JeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERSksIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgfSwKIAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0cDg2N3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCmluZGV4IDc5OTBkZTkuLjZmZTdkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRwODY3eC5jCkBAIC0xMTgsMjAgKzExOCwxMyBAQAogCWludAkJcGNpNjZtaHo7CiB9OwogCi1zdGF0aWMgaW5saW5lIHU4IGF0cDg2N3hfc3BlZWRfdG9fbW9kZSh1OCBzcGVlZCkKLXsKLQlyZXR1cm4gc3BlZWQgLSBYRkVSX1VETUFfMCArIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIGF0cDg2N3hfc2V0X2RtYW1vZGUoc3RydWN0IGF0YV9wb3J0ICphcCwgc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYJPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXN0cnVjdCBhdHA4Njd4X3ByaXYgKmRwID0gYXAtPnByaXZhdGVfZGF0YTsKIAl1OCBzcGVlZCA9IGFkZXYtPmRtYV9tb2RlOwogCXU4IGI7Ci0JdTggbW9kZTsKLQotCW1vZGUgPSBhdHA4Njd4X3NwZWVkX3RvX21vZGUoc3BlZWQpOworCXU4IG1vZGUgPSBzcGVlZCAtIFhGRVJfVURNQV8wICsgMTsKIAogCS8qCiAJICogRG9jIDYuNi45OiBkZWNyZWFzZSB0aGUgdWRtYSBtb2RlIHZhbHVlIGJ5IDEgZm9yIHNhZmVyIFVETUEgc3BlZWQKQEAgLTE1NiwyNSArMTQ5LDM4IEBACiAJaW93cml0ZTgoYiwgZHAtPmRtYV9tb2RlKTsKIH0KIAotc3RhdGljIGludCBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQodW5zaWduZWQgaW50IGNsaykKK3N0YXRpYyBpbnQgYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKHN0cnVjdCBhdGFfcG9ydCAqYXAsCisJdW5zaWduZWQgaW50IGNsaykKIHsKKwlzdHJ1Y3QgYXRwODY3eF9wcml2ICpkcCA9IGFwLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciBjbG9ja3MgPSBjbGs7CiAKKwkvKgorCSAqIERvYyA2LjYuOTogaW5jcmVhc2UgdGhlIGNsb2NrIHZhbHVlIGJ5IDEgZm9yIHNhZmVyIFBJTyBzcGVlZAorCSAqIG9uIDY2TUh6IGJ1cworCSAqLworCWlmIChkcC0+cGNpNjZtaHopCisJCWNsb2NrcysrOworCiAJc3dpdGNoIChjbG9ja3MpIHsKIAljYXNlIDA6CiAJCWNsb2NrcyA9IDE7CiAJCWJyZWFrOwotCWNhc2UgMSAuLi4gNzoKLQkJYnJlYWs7Ci0JY2FzZSA4IC4uLiAxMjoKLQkJY2xvY2tzID0gNzsKKwljYXNlIDEgLi4uIDY6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFUUDg2N1g6IGFjdGl2ZSAlZGNsayBpcyBpbnZhbGlkLiAiCi0JCQkiVXNpbmcgZGVmYXVsdCA4Y2xrLlxuIiwgY2xrKTsKLQkJY2xvY2tzID0gMDsJLyogOCBjbGsgKi8KKwkJCSJVc2luZyAxMmNsay5cbiIsIGNsayk7CisJY2FzZSA5IC4uLiAxMjoKKwkJY2xvY2tzID0gNzsJLyogMTIgY2xrICovCiAJCWJyZWFrOworCWNhc2UgNzoKKwljYXNlIDg6CS8qIGRlZmF1bHQgOCBjbGsgKi8KKwkJY2xvY2tzID0gMDsKKwkJZ290byBhY3RpdmVfY2xvY2tfc2hpZnRfZG9uZTsKIAl9CisKK2FjdGl2ZV9jbG9ja19zaGlmdF9kb25lOgogCXJldHVybiBjbG9ja3MgPDwgQVRQODY3WF9JT19QSU9TUERfQUNUSVZFX1NISUZUOwogfQogCkBAIC0xODgsMjAgKzE5NCwyMCBAQAogCQlicmVhazsKIAljYXNlIDEgLi4uIDExOgogCQlicmVhazsKLQljYXNlIDEyOgotCQljbG9ja3MgPSAwOwotCQlicmVhazsKLQljYXNlIDEzOiBjYXNlIDE0OgotCQktLWNsb2NrczsKKwljYXNlIDEzOgorCWNhc2UgMTQ6CisJCS0tY2xvY2tzOwkvKiBieSB0aGUgc3BlYyAqLwogCQlicmVhazsKIAljYXNlIDE1OgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVFA4NjdYOiByZWNvdmVyICVkY2xrIGlzIGludmFsaWQuICIKLQkJCSJVc2luZyBkZWZhdWx0IDE1Y2xrLlxuIiwgY2xrKTsKLQkJY2xvY2tzID0gMDsJLyogMTIgY2xrICovCisJCQkiVXNpbmcgZGVmYXVsdCAxMmNsay5cbiIsIGNsayk7CisJY2FzZSAxMjoJLyogZGVmYXVsdCAxMiBjbGsgKi8KKwkJY2xvY2tzID0gMDsKIAkJYnJlYWs7CiAJfQorCiAJcmV0dXJuIGNsb2NrcyA8PCBBVFA4NjdYX0lPX1BJT1NQRF9SRUNPVkVSX1NISUZUOwogfQogCkBAIC0yMzAsMjUgKzIzNiwzOCBAQAogCQliID0gKGIgJiB+QVRQODY3WF9JT19ETUFNT0RFX01TVFJfTUFTSyk7CiAJaW93cml0ZTgoYiwgZHAtPmRtYV9tb2RlKTsKIAotCWIgPSBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQodC5hY3RpdmUpIHwKLQkJYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlY292ZXIpOwotCWlmIChkcC0+cGNpNjZtaHopCi0JCWIgKz0gMHgxMDsKKwliID0gYXRwODY3eF9nZXRfYWN0aXZlX2Nsb2Nrc19zaGlmdGVkKGFwLCB0LmFjdGl2ZSkgfAorCSAgICBhdHA4Njd4X2dldF9yZWNvdmVyX2Nsb2Nrc19zaGlmdGVkKHQucmVjb3Zlcik7CiAKIAlpZiAoYWRldi0+ZGV2bm8gJiAxKQogCQlpb3dyaXRlOChiLCBkcC0+c2xhdmVfcGlvc3BkKTsKIAllbHNlCiAJCWlvd3JpdGU4KGIsIGRwLT5tc3RyX3Bpb3NwZCk7CiAKLQkvKgotCSAqIHVzZSB0aGUgc2FtZSB2YWx1ZSBmb3IgY29tYW5kIHRpbWluZyBhcyBmb3IgUElPIHRpbWltZwotCSAqLworCWIgPSBhdHA4Njd4X2dldF9hY3RpdmVfY2xvY2tzX3NoaWZ0ZWQoYXAsIHQuYWN0OGIpIHwKKwkgICAgYXRwODY3eF9nZXRfcmVjb3Zlcl9jbG9ja3Nfc2hpZnRlZCh0LnJlYzhiKTsKKwogCWlvd3JpdGU4KGIsIGRwLT5laWdodGJfcGlvc3BkKTsKIH0KIAorc3RhdGljIGludCBhdHA4Njd4X2NhYmxlX292ZXJyaWRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVJUT1AgJiYKKwkJKHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdBIHx8CisJCSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QikpIHsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGF0cDg2N3hfY2FibGVfZGV0ZWN0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKKworCWlmIChhdHA4Njd4X2NhYmxlX292ZXJyaWRlKHBkZXYpKQorCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDBfU0hPUlQ7CisKKwlyZXR1cm4gQVRBX0NCTF9QQVRBX1VOSzsKIH0KIAogc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYXRwODY3eF9zaHQgPSB7CkBAIC00NzEsNyArNDkwLDYgQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb184Njd4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhdHA4Njd4X29wcywKIAl9OwpAQCAtNTE1LDYgKzUzMywyMyBAQAogCXJldHVybiByYzsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBhdHA4Njd4X3JlaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCWludCByYzsKKworCXJjID0gYXRhX3BjaV9kZXZpY2VfZG9fcmVzdW1lKHBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJYXRwODY3eF9maXh1cChob3N0KTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRwODY3eF9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkRFVklDRShBUlRPUCwgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjdBKSwJMCB9LAogCXsgUENJX1ZERVZJQ0UoQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY3QiksCTAgfSwKQEAgLTUyNiw2ICs1NjEsMTAgQEAKIAkuaWRfdGFibGUgCT0gYXRwODY3eF9wY2lfdGJsLAogCS5wcm9iZSAJCT0gYXRwODY3eF9pbml0X29uZSwKIAkucmVtb3ZlCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZAk9IGF0YV9wY2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdHA4Njd4X3JlaW5pdF9vbmUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0cDg2N3hfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggZjQ5ODE0ZC4uM2JiZWQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yMzUsOCArMjM1LDcgQEAKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNjMTIwMF9wb3J0X29wcwogCX07Ci0JLyogQ2FuJ3QgZW5hYmxlIHBvcnQgMiB5ZXQsIHNlZSB0b3AgY29tbWVudHMgKi8KLQljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKIAogCXJldHVybiBhdGFfcGNpX3NmZl9pbml0X29uZShkZXYsIHBwaSwgJnNjMTIwMF9zaHQsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKaW5kZXggNDU2NTdjYS4uODg5ODRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJjeDcwMCIsCVBDSV9ERVZJQ0VfSURfVklBX0NYNzAwLCAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKIAl7ICJ2dDY0MTAiLAlQQ0lfREVWSUNFX0lEX1ZJQV82NDEwLCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfCBWSUFfTk9fRU5BQkxFUyB9LAotCXsgInZ0NjQxNSIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTUsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB8IFZJQV9OT19FTkFCTEVTIH0sCisJeyAidnQ2NDE1IiwJUENJX0RFVklDRV9JRF9WSUFfNjQxNSwgICAgIDB4MDAsIDB4ZmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIHwgVklBX05PX0VOQUJMRVMgfSwKIAl7ICJ2dDgyMzdhIiwJUENJX0RFVklDRV9JRF9WSUFfODIzN0EsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM3IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNywgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM1IiwJUENJX0RFVklDRV9JRF9WSUFfODIzNSwgICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggMTdmOWZmOS4uNmY1MDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtMTM4Miw2ICsxMzgyLDI1IEBACiAJICovCiAJaWYgKHBwLT5wcF9mbGFncyAmIE1WX1BQX0ZMQUdfREVMQVlFRF9FSCkKIAkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCisJLyogUElPIGNvbW1hbmRzIG5lZWQgZXhjbHVzaXZlIGxpbms6IG5vIG90aGVyIGNvbW1hbmRzIFtETUEgb3IgUElPXQorCSAqIGNhbiBydW4gY29uY3VycmVudGx5LgorCSAqIHNldCBleGNsX2xpbmsgd2hlbiB3ZSB3YW50IHRvIHNlbmQgYSBQSU8gY29tbWFuZCBpbiBETUEgbW9kZQorCSAqIG9yIGEgbm9uLU5DUSBjb21tYW5kIGluIE5DUSBtb2RlLgorCSAqIFdoZW4gd2UgcmVjZWl2ZSBhIGNvbW1hbmQgZnJvbSB0aGF0IGxpbmssIGFuZCB0aGVyZSBhcmUgbm8KKwkgKiBvdXRzdGFuZGluZyBjb21tYW5kcywgbWFyayBhIGZsYWcgdG8gY2xlYXIgZXhjbF9saW5rIGFuZCBsZXQKKwkgKiB0aGUgY29tbWFuZCBnbyB0aHJvdWdoLgorCSAqLworCWlmICh1bmxpa2VseShhcC0+ZXhjbF9saW5rKSkgeworCQlpZiAobGluayA9PSBhcC0+ZXhjbF9saW5rKSB7CisJCQlpZiAoYXAtPm5yX2FjdGl2ZV9saW5rcykKKwkJCQlyZXR1cm4gQVRBX0RFRkVSX1BPUlQ7CisJCQlxYy0+ZmxhZ3MgfD0gQVRBX1FDRkxBR19DTEVBUl9FWENMOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCX0KKwogCS8qCiAJICogSWYgdGhlIHBvcnQgaXMgY29tcGxldGVseSBpZGxlLCB0aGVuIGFsbG93IHRoZSBuZXcgcWMuCiAJICovCkBAIC0xMzk1LDggKzE0MTQsMTQgQEAKIAkgKiBkb2Vzbid0IGFsbG93IGl0LgogCSAqLwogCWlmICgocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19FRE1BX0VOKSAmJgotCSAgICAocHAtPnBwX2ZsYWdzICYgTVZfUFBfRkxBR19OQ1FfRU4pICYmIGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkKLQkJcmV0dXJuIDA7CisJICAgIChwcC0+cHBfZmxhZ3MgJiBNVl9QUF9GTEFHX05DUV9FTikpIHsKKwkJaWYgKGF0YV9pc19uY3EocWMtPnRmLnByb3RvY29sKSkKKwkJCXJldHVybiAwOworCQllbHNlIHsKKwkJCWFwLT5leGNsX2xpbmsgPSBsaW5rOworCQkJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOworCQl9CisJfQogCiAJcmV0dXJuIEFUQV9ERUZFUl9QT1JUOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9udi5jIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCmluZGV4IDg2YTQwNTguLjFlYjRlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX252LmMKQEAgLTE1OTQsOSArMTU5NCwyMSBAQAogCSAgICAhYXRhX2Rldl9lbmFibGVkKGxpbmstPmRldmljZSkpCiAJCXNhdGFfbGlua19oYXJkcmVzZXQobGluaywgc2F0YV9kZWJfdGltaW5nX2hvdHBsdWcsIGRlYWRsaW5lLAogCQkJCSAgICBOVUxMLCBOVUxMKTsKLQllbHNlIGlmICghKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUVVJRVQpKQotCQlhdGFfbGlua19wcmludGsobGluaywgS0VSTl9JTkZPLAotCQkJCSJudjogc2tpcHBpbmcgaGFyZHJlc2V0IG9uIG9jY3VwaWVkIHBvcnRcbiIpOworCWVsc2UgeworCQljb25zdCB1bnNpZ25lZCBsb25nICp0aW1pbmcgPSBzYXRhX2VoY19kZWJfdGltaW5nKGVoYyk7CisJCWludCByYzsKKworCQlpZiAoIShlaGMtPmkuZmxhZ3MgJiBBVEFfRUhJX1FVSUVUKSkKKwkJCWF0YV9saW5rX3ByaW50ayhsaW5rLCBLRVJOX0lORk8sICJudjogc2tpcHBpbmcgIgorCQkJCQkiaGFyZHJlc2V0IG9uIG9jY3VwaWVkIHBvcnRcbiIpOworCisJCS8qIG1ha2Ugc3VyZSB0aGUgbGluayBpcyBvbmxpbmUgKi8KKwkJcmMgPSBzYXRhX2xpbmtfcmVzdW1lKGxpbmssIHRpbWluZywgZGVhZGxpbmUpOworCQkvKiB3aGluZSBhYm91dCBwaHkgcmVzdW1lIGZhaWx1cmUgYnV0IHByb2NlZWQgKi8KKwkJaWYgKHJjICYmIHJjICE9IC1FT1BOT1RTVVBQKQorCQkJYXRhX2xpbmtfcHJpbnRrKGxpbmssIEtFUk5fV0FSTklORywgImZhaWxlZCB0byByZXN1bWUgIgorCQkJCQkibGluayAoZXJybm89JWQpXG4iLCByYyk7CisJfQogCiAJLyogZGV2aWNlIHNpZ25hdHVyZSBhY3F1aXNpdGlvbiBpcyB1bnJlbGlhYmxlICovCiAJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvc2F0YV92aWEuYwppbmRleCBiZGQ0M2M3Li4wMmVmZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKQEAgLTkzLDcgKzkzLDYgQEAKIAl7IFBDSV9WREVWSUNFKFZJQSwgMHg3MzcyKSwgdnQ2NDIwIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIDB4NTI4NyksIHZ0ODI1MSB9LCAvKiAyIHNhdGEgY2hubHMgKE1hc3Rlci9TbGF2ZSkgKi8KIAl7IFBDSV9WREVWSUNFKFZJQSwgMHg5MDAwKSwgdnQ4MjUxIH0sCi0JeyBQQ0lfVkRFVklDRShWSUEsIDB4OTA0MCksIHZ0ODI1MSB9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2J1cy5jIGIvZHJpdmVycy9iYXNlL2J1cy5jCmluZGV4IDk3M2JmMmEuLjYzYzE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9idXMuYworKysgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKQEAgLTY4OSwxNSArNjg5LDE5IEBACiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRyaXZlcl9hZGRfYXR0cnMoJXMpIGZhaWxlZFxuIiwKIAkJCV9fZnVuY19fLCBkcnYtPm5hbWUpOwogCX0KLQllcnJvciA9IGFkZF9iaW5kX2ZpbGVzKGRydik7Ci0JaWYgKGVycm9yKSB7Ci0JCS8qIERpdHRvICovCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGFkZF9iaW5kX2ZpbGVzKCVzKSBmYWlsZWRcbiIsCi0JCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKworCWlmICghZHJ2LT5zdXBwcmVzc19iaW5kX2F0dHJzKSB7CisJCWVycm9yID0gYWRkX2JpbmRfZmlsZXMoZHJ2KTsKKwkJaWYgKGVycm9yKSB7CisJCQkvKiBEaXR0byAqLworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYWRkX2JpbmRfZmlsZXMoJXMpIGZhaWxlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHJ2LT5uYW1lKTsKKwkJfQogCX0KIAogCWtvYmplY3RfdWV2ZW50KCZwcml2LT5rb2JqLCBLT0JKX0FERCk7CiAJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyOgogCWtmcmVlKGRydi0+cCk7CiAJZHJ2LT5wID0gTlVMTDsKQEAgLTcyMCw3ICs3MjQsOCBAQAogCWlmICghZHJ2LT5idXMpCiAJCXJldHVybjsKIAotCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CisJaWYgKCFkcnYtPnN1cHByZXNzX2JpbmRfYXR0cnMpCisJCXJlbW92ZV9iaW5kX2ZpbGVzKGRydik7CiAJZHJpdmVyX3JlbW92ZV9hdHRycyhkcnYtPmJ1cywgZHJ2KTsKIAlkcml2ZXJfcmVtb3ZlX2ZpbGUoZHJ2LCAmZHJpdmVyX2F0dHJfdWV2ZW50KTsKIAlrbGlzdF9yZW1vdmUoJmRydi0+cC0+a25vZGVfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kcml2ZXIuYyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwppbmRleCBlZDJlYmQzLi5mMzY3ODg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKKysrIGIvZHJpdmVycy9iYXNlL2RyaXZlci5jCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJcHV0X2RyaXZlcihvdGhlcik7CiAJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IERyaXZlciAnJXMnIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCwgIgogCQkJImFib3J0aW5nLi4uXG4iLCBkcnYtPm5hbWUpOwotCQlyZXR1cm4gLUVFWElTVDsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXQgPSBidXNfYWRkX2RyaXZlcihkcnYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCBlZDE1NmExMy4uNGZhOTU0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTUyMSwxMSArNTIxLDE1IEBACiB7CiAJaW50IHJldHZhbCwgY29kZTsKIAorCS8qIG1ha2Ugc3VyZSBkcml2ZXIgd29uJ3QgaGF2ZSBiaW5kL3VuYmluZCBhdHRyaWJ1dGVzICovCisJZHJ2LT5kcml2ZXIuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWU7CisKIAkvKiB0ZW1wb3Jhcnkgc2VjdGlvbiB2aW9sYXRpb24gZHVyaW5nIHByb2JlKCkgKi8KIAlkcnYtPnByb2JlID0gcHJvYmU7CiAJcmV0dmFsID0gY29kZSA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogCi0JLyogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZworCS8qCisJICogRml4dXAgdGhhdCBzZWN0aW9uIHZpb2xhdGlvbiwgYmVpbmcgcGFyYW5vaWQgYWJvdXQgY29kZSBzY2FubmluZwogCSAqIHRoZSBsaXN0IG9mIGRyaXZlcnMgaW4gb3JkZXIgdG8gcHJvYmUgbmV3IGRldmljZXMuICBDaGVjayB0byBzZWUKIAkgKiBpZiB0aGUgcHJvYmUgd2FzIHN1Y2Nlc3NmdWwsIGFuZCBtYWtlIHN1cmUgYW55IGZvcmNlZCBwcm9iZXMgb2YKIAkgKiBuZXcgZGV2aWNlcyBmYWlsLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggZTBkYzQwNy4uOGFhMjQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCkBAIC01MTEsNiArNTExLDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOworCXRyYW5zaXRpb25fc3RhcnRlZCA9IGZhbHNlOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5wcmV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKaW5kZXggMzg1NTZmNi4uYTc3MDQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCkBAIC01MSw4ICs1MSw2IEBACiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkhXG4iKTsKLQogCWlmIChkZXYtPnBvd2VyLnJ1bnRpbWVfZXJyb3IpCiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJZWxzZSBpZiAoZGV2LT5wb3dlci5pZGxlX25vdGlmaWNhdGlvbikKQEAgLTkzLDggKzkxLDYgQEAKIAl3YWtlX3VwX2FsbCgmZGV2LT5wb3dlci53YWl0X3F1ZXVlKTsKIAogIG91dDoKLQlkZXZfZGJnKGRldiwgIl9fcG1fcnVudGltZV9pZGxlKCkgcmV0dXJucyAlZCFcbiIsIHJldHZhbCk7Ci0KIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA2ZmE3YjBmLi5lYjRmYTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC02NDIyLDE2ICs2NDIzLDEwIEBACiAgIHJldHVybiB0cnVlOwogfQogCi0KLS8qCi0gIERBQzk2MF9Qcm9jUmVhZFN0YXR1cyBpbXBsZW1lbnRzIHJlYWRpbmcgL3Byb2MvcmQvc3RhdHVzLgotKi8KLQotc3RhdGljIGludCBEQUM5NjBfUHJvY1JlYWRTdGF0dXMoY2hhciAqUGFnZSwgY2hhciAqKlN0YXJ0LCBvZmZfdCBPZmZzZXQsCi0JCQkJIGludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogICB1bnNpZ25lZCBjaGFyICpTdGF0dXNNZXNzYWdlID0gIk9LXG4iOwotICBpbnQgQ29udHJvbGxlck51bWJlciwgQnl0ZXNBdmFpbGFibGU7CisgIGludCBDb250cm9sbGVyTnVtYmVyOwogICBmb3IgKENvbnRyb2xsZXJOdW1iZXIgPSAwOwogICAgICAgIENvbnRyb2xsZXJOdW1iZXIgPCBEQUM5NjBfQ29udHJvbGxlckNvdW50OwogICAgICAgIENvbnRyb2xsZXJOdW1iZXIrKykKQEAgLTY0NDQsNTIgKzY0MzksNDkgQEAKIAkgIGJyZWFrOwogCX0KICAgICB9Ci0gIEJ5dGVzQXZhaWxhYmxlID0gc3RybGVuKFN0YXR1c01lc3NhZ2UpIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJlN0YXR1c01lc3NhZ2VbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisgIHNlcV9wdXRzKG0sIFN0YXR1c01lc3NhZ2UpOworICByZXR1cm4gMDsKIH0KIAotCi0vKgotICBEQUM5NjBfUHJvY1JlYWRJbml0aWFsU3RhdHVzIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi9pbml0aWFsX3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkSW5pdGlhbFN0YXR1cyhjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkJaW50IENvdW50LCBpbnQgKkVPRiwgdm9pZCAqRGF0YSkKK3N0YXRpYyBpbnQgZGFjOTYwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLSAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIERhdGE7Ci0gIGludCBCeXRlc0F2YWlsYWJsZSA9IENvbnRyb2xsZXItPkluaXRpYWxTdGF0dXNMZW5ndGggLSBPZmZzZXQ7Ci0gIGlmIChDb3VudCA+PSBCeXRlc0F2YWlsYWJsZSkKLSAgICB7Ci0gICAgICBDb3VudCA9IEJ5dGVzQXZhaWxhYmxlOwotICAgICAgKkVPRiA9IHRydWU7Ci0gICAgfQotICBpZiAoQ291bnQgPD0gMCkgcmV0dXJuIDA7Ci0gICpTdGFydCA9IFBhZ2U7Ci0gIG1lbWNweShQYWdlLCAmQ29udHJvbGxlci0+Q29tYmluZWRTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF9wcm9jX3Nob3csIE5VTEwpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYWM5NjBfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCi0vKgotICBEQUM5NjBfUHJvY1JlYWRDdXJyZW50U3RhdHVzIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi9jdXJyZW50X3N0YXR1cy4KLSovCi0KLXN0YXRpYyBpbnQgREFDOTYwX1Byb2NSZWFkQ3VycmVudFN0YXR1cyhjaGFyICpQYWdlLCBjaGFyICoqU3RhcnQsIG9mZl90IE9mZnNldCwKLQkJCQkJaW50IENvdW50LCBpbnQgKkVPRiwgdm9pZCAqRGF0YSkKK3N0YXRpYyBpbnQgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOworCURBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKW0tPnByaXZhdGU7CisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPkluaXRpYWxTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPkNvbWJpbmVkU3RhdHVzQnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYWM5NjBfaW5pdGlhbF9zdGF0dXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYWM5NjBfaW5pdGlhbF9zdGF0dXNfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKyAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIG0tPnByaXZhdGU7CiAgIHVuc2lnbmVkIGNoYXIgKlN0YXR1c01lc3NhZ2UgPQogICAgICJObyBSZWJ1aWxkIG9yIENvbnNpc3RlbmN5IENoZWNrIGluIFByb2dyZXNzXG4iOwogICBpbnQgUHJvZ3Jlc3NNZXNzYWdlTGVuZ3RoID0gc3RybGVuKFN0YXR1c01lc3NhZ2UpOwotICBpbnQgQnl0ZXNBdmFpbGFibGU7CiAgIGlmIChqaWZmaWVzICE9IENvbnRyb2xsZXItPkxhc3RDdXJyZW50U3RhdHVzVGltZSkKICAgICB7CiAgICAgICBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoID0gMDsKQEAgLTY1MTMsNDkgKzY1MDUsNDEgQEAKIAl9CiAgICAgICBDb250cm9sbGVyLT5MYXN0Q3VycmVudFN0YXR1c1RpbWUgPSBqaWZmaWVzOwogICAgIH0KLSAgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5DdXJyZW50U3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJc2VxX3ByaW50ZihtLCAiJS4qcyIsIENvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNMZW5ndGgsIENvbnRyb2xsZXItPkN1cnJlbnRTdGF0dXNCdWZmZXIpOworCXJldHVybiAwOwogfQogCi0KLS8qCi0gIERBQzk2MF9Qcm9jUmVhZFVzZXJDb21tYW5kIGltcGxlbWVudHMgcmVhZGluZyAvcHJvYy9yZC9jTi91c2VyX2NvbW1hbmQuCi0qLwotCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jUmVhZFVzZXJDb21tYW5kKGNoYXIgKlBhZ2UsIGNoYXIgKipTdGFydCwgb2ZmX3QgT2Zmc2V0LAotCQkJCSAgICAgIGludCBDb3VudCwgaW50ICpFT0YsIHZvaWQgKkRhdGEpCitzdGF0aWMgaW50IGRhYzk2MF9jdXJyZW50X3N0YXR1c19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSAoREFDOTYwX0NvbnRyb2xsZXJfVCAqKSBEYXRhOwotICBpbnQgQnl0ZXNBdmFpbGFibGUgPSBDb250cm9sbGVyLT5Vc2VyU3RhdHVzTGVuZ3RoIC0gT2Zmc2V0OwotICBpZiAoQ291bnQgPj0gQnl0ZXNBdmFpbGFibGUpCi0gICAgewotICAgICAgQ291bnQgPSBCeXRlc0F2YWlsYWJsZTsKLSAgICAgICpFT0YgPSB0cnVlOwotICAgIH0KLSAgaWYgKENvdW50IDw9IDApIHJldHVybiAwOwotICAqU3RhcnQgPSBQYWdlOwotICBtZW1jcHkoUGFnZSwgJkNvbnRyb2xsZXItPlVzZXJTdGF0dXNCdWZmZXJbT2Zmc2V0XSwgQ291bnQpOwotICByZXR1cm4gQ291bnQ7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF9jdXJyZW50X3N0YXR1c19wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCi0vKgotICBEQUM5NjBfUHJvY1dyaXRlVXNlckNvbW1hbmQgaW1wbGVtZW50cyB3cml0aW5nIC9wcm9jL3JkL2NOL3VzZXJfY29tbWFuZC4KLSovCitzdGF0aWMgaW50IGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKiltLT5wcml2YXRlOwogCi1zdGF0aWMgaW50IERBQzk2MF9Qcm9jV3JpdGVVc2VyQ29tbWFuZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwlzZXFfcHJpbnRmKG0sICIlLipzIiwgQ29udHJvbGxlci0+VXNlclN0YXR1c0xlbmd0aCwgQ29udHJvbGxlci0+VXNlclN0YXR1c0J1ZmZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRhYzk2MF91c2VyX2NvbW1hbmRfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIHNzaXplX3QgZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqQnVmZmVyLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIENvdW50LCB2b2lkICpEYXRhKQorCQkJCSAgICAgICBzaXplX3QgQ291bnQsIGxvZmZfdCAqcG9zKQogewotICBEQUM5NjBfQ29udHJvbGxlcl9UICpDb250cm9sbGVyID0gKERBQzk2MF9Db250cm9sbGVyX1QgKikgRGF0YTsKKyAgREFDOTYwX0NvbnRyb2xsZXJfVCAqQ29udHJvbGxlciA9IChEQUM5NjBfQ29udHJvbGxlcl9UICopIFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKICAgdW5zaWduZWQgY2hhciBDb21tYW5kQnVmZmVyWzgwXTsKICAgaW50IExlbmd0aDsKICAgaWYgKENvdW50ID4gc2l6ZW9mKENvbW1hbmRCdWZmZXIpLTEpIHJldHVybiAtRUlOVkFMOwpAQCAtNjU3Miw2ICs2NTU2LDE0IEBACiAJICAgID8gQ291bnQgOiAtRUJVU1kpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZGFjOTYwX3VzZXJfY29tbWFuZF9wcm9jX3dyaXRlLAorfTsKIAogLyoKICAgREFDOTYwX0NyZWF0ZVByb2NFbnRyaWVzIGNyZWF0ZXMgdGhlIC9wcm9jL3JkLy4uLiBlbnRyaWVzIGZvciB0aGUKQEAgLTY1ODYsMjMgKzY1NzgsMTcgQEAKIAogCWlmIChEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5ID09IE5VTEwpIHsKICAgCQlEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5ID0gcHJvY19ta2RpcigicmQiLCBOVUxMKTsKLSAgCQlTdGF0dXNQcm9jRW50cnkgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzdGF0dXMiLCAwLAorICAJCVN0YXR1c1Byb2NFbnRyeSA9IHByb2NfY3JlYXRlKCJzdGF0dXMiLCAwLAogCQkJCQkgICBEQUM5NjBfUHJvY0RpcmVjdG9yeUVudHJ5LAotCQkJCQkgICBEQUM5NjBfUHJvY1JlYWRTdGF0dXMsIE5VTEwpOworCQkJCQkgICAmZGFjOTYwX3Byb2NfZm9wcyk7CiAJfQogCiAgICAgICBzcHJpbnRmKENvbnRyb2xsZXItPkNvbnRyb2xsZXJOYW1lLCAiYyVkIiwgQ29udHJvbGxlci0+Q29udHJvbGxlck51bWJlcik7CiAgICAgICBDb250cm9sbGVyUHJvY0VudHJ5ID0gcHJvY19ta2RpcihDb250cm9sbGVyLT5Db250cm9sbGVyTmFtZSwKIAkJCQkgICAgICAgREFDOTYwX1Byb2NEaXJlY3RvcnlFbnRyeSk7Ci0gICAgICBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJpbml0aWFsX3N0YXR1cyIsIDAsIENvbnRyb2xsZXJQcm9jRW50cnksCi0JCQkgICAgIERBQzk2MF9Qcm9jUmVhZEluaXRpYWxTdGF0dXMsIENvbnRyb2xsZXIpOwotICAgICAgY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiY3VycmVudF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LAotCQkJICAgICBEQUM5NjBfUHJvY1JlYWRDdXJyZW50U3RhdHVzLCBDb250cm9sbGVyKTsKLSAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5ID0KLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJ1c2VyX2NvbW1hbmQiLCBTX0lXVVNSIHwgU19JUlVTUiwKLQkJCSAgICAgICBDb250cm9sbGVyUHJvY0VudHJ5LCBEQUM5NjBfUHJvY1JlYWRVc2VyQ29tbWFuZCwKLQkJCSAgICAgICBDb250cm9sbGVyKTsKLSAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5LT53cml0ZV9wcm9jID0gREFDOTYwX1Byb2NXcml0ZVVzZXJDb21tYW5kOworICAgICAgcHJvY19jcmVhdGVfZGF0YSgiaW5pdGlhbF9zdGF0dXMiLCAwLCBDb250cm9sbGVyUHJvY0VudHJ5LCAmZGFjOTYwX2luaXRpYWxfc3RhdHVzX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CisgICAgICBwcm9jX2NyZWF0ZV9kYXRhKCJjdXJyZW50X3N0YXR1cyIsIDAsIENvbnRyb2xsZXJQcm9jRW50cnksICZkYWM5NjBfY3VycmVudF9zdGF0dXNfcHJvY19mb3BzLCBDb250cm9sbGVyKTsKKyAgICAgIFVzZXJDb21tYW5kUHJvY0VudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgidXNlcl9jb21tYW5kIiwgU19JV1VTUiB8IFNfSVJVU1IsIENvbnRyb2xsZXJQcm9jRW50cnksICZkYWM5NjBfdXNlcl9jb21tYW5kX3Byb2NfZm9wcywgQ29udHJvbGxlcik7CiAgICAgICBDb250cm9sbGVyLT5Db250cm9sbGVyUHJvY0VudHJ5ID0gQ29udHJvbGxlclByb2NFbnRyeTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDI0YzNlMjEuLjYzOTllNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTM2LDkgKzM2LDExIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC02Niw2ICs2OCwxMiBAQAogTU9EVUxFX1ZFUlNJT04oIjMuNi4yMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IGNjaXNzX2FsbG93X2hwc2E7Cittb2R1bGVfcGFyYW0oY2Npc3NfYWxsb3dfaHBzYSwgaW50LCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhjY2lzc19hbGxvd19ocHNhLAorCSJQcmV2ZW50IGNjaXNzIGRyaXZlciBmcm9tIGFjY2Vzc2luZyBoYXJkd2FyZSBrbm93biB0byBiZSAiCisJIiBzdXBwb3J0ZWQgYnkgdGhlIGhwc2EgZHJpdmVyIik7CisKICNpbmNsdWRlICJjY2lzc19jbWQuaCIKICNpbmNsdWRlICJjY2lzcy5oIgogI2luY2x1ZGUgPGxpbnV4L2NjaXNzX2lvY3RsLmg+CkBAIC05OSw4ICsxMDcsNiBAQAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRSwgICAgIDB4MTAzQywgMHgzMjQ5fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0UsICAgICAweDEwM0MsIDB4MzI0QX0sCiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NFLCAgICAgMHgxMDNDLCAweDMyNEJ9LAotCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0FOWV9JRCwJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKLQkJUENJX0NMQVNTX1NUT1JBR0VfUkFJRCA8PCA4LCAweGZmZmYgPDwgOCwgMH0sCiAJezAsfQogfTsKIApAQCAtMTIxLDggKzEyNyw2IEBACiAJezB4NDA5RDBFMTEsICJTbWFydCBBcnJheSA2NDAwIEVNIiwgJlNBNV9hY2Nlc3N9LAogCXsweDQwOTEwRTExLCAiU21hcnQgQXJyYXkgNmkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIyNTEwM0MsICJTbWFydCBBcnJheSBQNjAwIiwgJlNBNV9hY2Nlc3N9LAotCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKLQl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNTEwM0MsICJTbWFydCBBcnJheSBQNDAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjExMTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTIxMDNDLCAiU21hcnQgQXJyYXkgRTIwMCIsICZTQTVfYWNjZXNzfSwKQEAgLTEzMCw2ICsxMzQsMTAgQEAKIAl7MHgzMjE0MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyMTUxMDNDLCAiU21hcnQgQXJyYXkgRTIwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzNzEwM0MsICJTbWFydCBBcnJheSBFNTAwIiwgJlNBNV9hY2Nlc3N9LAorLyogY29udHJvbGxlcnMgYmVsb3cgdGhpcyBsaW5lIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGUgaHBzYSBkcml2ZXIuICovCisjZGVmaW5lIEhQU0FfQk9VTkRBUlkgMHgzMjIzMTAzQworCXsweDMyMjMxMDNDLCAiU21hcnQgQXJyYXkgUDgwMCIsICZTQTVfYWNjZXNzfSwKKwl7MHgzMjM0MTAzQywgIlNtYXJ0IEFycmF5IFA0MDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIzRDEwM0MsICJTbWFydCBBcnJheSBQNzAwbSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjQxMTAzQywgIlNtYXJ0IEFycmF5IFAyMTIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0MzEwM0MsICJTbWFydCBBcnJheSBQNDEwIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTM4LDcgKzE0Niw2IEBACiAJezB4MzI0OTEwM0MsICJTbWFydCBBcnJheSBQODEyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDMyNEExMDNDLCAiU21hcnQgQXJyYXkgUDcxMm0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MzI0QjEwM0MsICJTbWFydCBBcnJheSBQNzExbSIsICZTQTVfYWNjZXNzfSwKLQl7MHhGRkZGMTAzQywgIlVua25vd24gU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCiB9OwogCiAvKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCkBAIC0xNTUsNiArMTYyLDEwIEBACiAKIHN0YXRpYyBjdGxyX2luZm9fdCAqaGJhW01BWF9DVExSXTsKIAorc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY2Npc3Nfc2Nhbl90aHJlYWQ7CitzdGF0aWMgREVGSU5FX01VVEVYKHNjYW5fbXV0ZXgpOworc3RhdGljIExJU1RfSEVBRChzY2FuX3EpOworCiBzdGF0aWMgdm9pZCBkb19jY2lzc19yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19jY2lzc19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGNjaXNzX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKTsKQEAgLTE2NCw5ICsxNzUsOSBAQAogc3RhdGljIGludCBjY2lzc19nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pOwogCiBzdGF0aWMgaW50IGNjaXNzX3JldmFsaWRhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2spOwotc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUpOworc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUsIGludCB2aWFfaW9jdGwpOwogc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgsCi0JCQkgICBpbnQgY2xlYXJfYWxsKTsKKwkJCSAgIGludCBjbGVhcl9hbGwsIGludCB2aWFfaW9jdGwpOwogCiBzdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBpbnQgd2l0aGlycSwKIAkJCXNlY3Rvcl90ICp0b3RhbF9zaXplLCB1bnNpZ25lZCBpbnQgKmJsb2NrX3NpemUpOwpAQCAtMTg5LDggKzIwMCwxMyBAQAogc3RhdGljIGludCBwcm9jZXNzX3NlbmRjbWRfZXJyb3IoY3Rscl9pbmZvX3QgKmgsIENvbW1hbmRMaXN0X3N0cnVjdCAqYyk7CiAKIHN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHModW5zaWduZWQgbG9uZyBjdGxyKTsKK3N0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBpbnQgc2Nhbl90aHJlYWQodm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IGNoZWNrX2Zvcl91bml0X2F0dGVudGlvbihjdGxyX2luZm9fdCAqaCwgQ29tbWFuZExpc3Rfc3RydWN0ICpjKTsKK3N0YXRpYyB2b2lkIGNjaXNzX2hiYV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBjY2lzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgY2Npc3NfZnJlZV9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCBpbnQgZHJ2X2luZGV4KTsKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgY2Npc3NfcHJvY2luaXQoaW50IGkpOwpAQCAtMjQ1LDcgKzI2MSwxMCBAQAogCiAjaW5jbHVkZSAiY2Npc3Nfc2NzaS5jIgkJLyogRm9yIFNDU0kgdGFwZSBzdXBwb3J0ICovCiAKLSNkZWZpbmUgUkFJRF9VTktOT1dOIDYKK3N0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCisJIlVOS05PV04iCit9OworI2RlZmluZSBSQUlEX1VOS05PV04gKHNpemVvZihyYWlkX2xhYmVsKSAvIHNpemVvZihyYWlkX2xhYmVsWzBdKS0xKQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIApAQCAtMjU1LDkgKzI3NCw2IEBACiAjZGVmaW5lIEVOR19HSUcgMTAwMDAwMDAwMAogI2RlZmluZSBFTkdfR0lHX0ZBQ1RPUiAoRU5HX0dJRy81MTIpCiAjZGVmaW5lIEVOR0FHRV9TQ1NJCSJlbmdhZ2Ugc2NzaSIKLXN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCi0JIlVOS05PV04iCi19OwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2NjaXNzOwogCkBAIC0zMTgsNyArMzM0LDcgQEAKIAljdGxyX2luZm9fdCAqaCA9IHNlcS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBjdGxyID0gaC0+Y3RscjsKIAlsb2ZmX3QgKnBvcyA9IHY7Ci0JZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9ICZoLT5kcnZbKnBvc107CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IGgtPmRydlsqcG9zXTsKIAogCWlmICgqcG9zID4gaC0+aGlnaGVzdF9sdW4pCiAJCXJldHVybiAwOwpAQCAtMzMxLDcgKzM0Nyw3IEBACiAJdm9sX3N6X2ZyYWMgKj0gMTAwOwogCXNlY3Rvcl9kaXYodm9sX3N6X2ZyYWMsIEVOR19HSUdfRkFDVE9SKTsKIAotCWlmIChkcnYtPnJhaWRfbGV2ZWwgPiA1KQorCWlmIChkcnYtPnJhaWRfbGV2ZWwgPCAwIHx8IGRydi0+cmFpZF9sZXZlbCA+IFJBSURfVU5LTk9XTikKIAkJZHJ2LT5yYWlkX2xldmVsID0gUkFJRF9VTktOT1dOOwogCXNlcV9wcmludGYoc2VxLCAiY2Npc3MvYyVkZCVkOiIKIAkJCSJcdCU0dS4lMDJ1R0JcdFJBSUQgJXNcbiIsCkBAIC00MjYsNyArNDQyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjY2lzc19wcm9jX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjY2lzc19wcm9jX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgID0gY2Npc3Nfc2VxX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKQEAgLTQ1NCw5ICs0NzAsMTkgQEAKICNkZWZpbmUgdG9faGJhKG4pIGNvbnRhaW5lcl9vZihuLCBzdHJ1Y3QgY3Rscl9pbmZvLCBkZXYpCiAjZGVmaW5lIHRvX2RydihuKSBjb250YWluZXJfb2YobiwgZHJpdmVfaW5mb19zdHJ1Y3QsIGRldikKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBjY2lzc19ob3N0X3R5cGUgPSB7Ci0JLm5hbWUJCT0gImNjaXNzX2hvc3QiLAotfTsKK3N0YXRpYyBzc2l6ZV90IGhvc3Rfc3RvcmVfcmVzY2FuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjdGxyX2luZm8gKmggPSB0b19oYmEoZGV2KTsKKworCWFkZF90b19zY2FuX2xpc3QoaCk7CisJd2FrZV91cF9wcm9jZXNzKGNjaXNzX3NjYW5fdGhyZWFkKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmgtPnNjYW5fd2FpdCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CitERVZJQ0VfQVRUUihyZXNjYW4sIFNfSVdVU1IsIE5VTEwsIGhvc3Rfc3RvcmVfcmVzY2FuKTsKIAogc3RhdGljIHNzaXplX3QgZGV2X3Nob3dfdW5pcXVlX2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01NjAsMTEgKzU4NiwxMDEgQEAKIH0KIERFVklDRV9BVFRSKHJldiwgU19JUlVHTywgZGV2X3Nob3dfcmV2LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QgY2Npc3Nfc2hvd19sdW5pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gdG9fZHJ2KGRldik7CisJc3RydWN0IGN0bHJfaW5mbyAqaCA9IHRvX2hiYShkcnYtPmRldi5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciBsdW5pZFs4XTsKKworCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAoaC0+YnVzeV9jb25maWd1cmluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFkcnYtPmhlYWRzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoQ0NJU1NfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOworCQlyZXR1cm4gLUVOT1RUWTsKKwl9CisJbWVtY3B5KGx1bmlkLCBkcnYtPkx1bklELCBzaXplb2YobHVuaWQpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIjB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCWx1bmlkWzBdLCBsdW5pZFsxXSwgbHVuaWRbMl0sIGx1bmlkWzNdLAorCQlsdW5pZFs0XSwgbHVuaWRbNV0sIGx1bmlkWzZdLCBsdW5pZFs3XSk7Cit9CitERVZJQ0VfQVRUUihsdW5pZCwgU19JUlVHTywgY2Npc3Nfc2hvd19sdW5pZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGNjaXNzX3Nob3dfcmFpZF9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRydi0+ZGV2LnBhcmVudCk7CisJaW50IHJhaWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAoaC0+YnVzeV9jb25maWd1cmluZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmFpZCA9IGRydi0+cmFpZF9sZXZlbDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlpZiAocmFpZCA8IDAgfHwgcmFpZCA+IFJBSURfVU5LTk9XTikKKwkJcmFpZCA9IFJBSURfVU5LTk9XTjsKKworCXJldHVybiBzbnByaW50ZihidWYsIHN0cmxlbihyYWlkX2xhYmVsW3JhaWRdKSArIDcsICJSQUlEICVzXG4iLAorCQkJcmFpZF9sYWJlbFtyYWlkXSk7Cit9CitERVZJQ0VfQVRUUihyYWlkX2xldmVsLCBTX0lSVUdPLCBjY2lzc19zaG93X3JhaWRfbGV2ZWwsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBjY2lzc19zaG93X3VzYWdlX2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWRyaXZlX2luZm9fc3RydWN0ICpkcnYgPSB0b19kcnYoZGV2KTsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gdG9faGJhKGRydi0+ZGV2LnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJaWYgKGgtPmJ1c3lfY29uZmlndXJpbmcpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWNvdW50ID0gZHJ2LT51c2FnZV9jb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCAyMCwgIiVkXG4iLCBjb3VudCk7Cit9CitERVZJQ0VfQVRUUih1c2FnZV9jb3VudCwgU19JUlVHTywgY2Npc3Nfc2hvd191c2FnZV9jb3VudCwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjY2lzc19ob3N0X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3Jlc2Nhbi5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNjaXNzX2hvc3RfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBjY2lzc19ob3N0X2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmNjaXNzX2hvc3RfYXR0cl9ncm91cHNbXSA9IHsKKwkmY2Npc3NfaG9zdF9hdHRyX2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX3R5cGUgY2Npc3NfaG9zdF90eXBlID0geworCS5uYW1lCQk9ICJjY2lzc19ob3N0IiwKKwkuZ3JvdXBzCQk9IGNjaXNzX2hvc3RfYXR0cl9ncm91cHMsCisJLnJlbGVhc2UJPSBjY2lzc19oYmFfcmVsZWFzZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjY2lzc19kZXZfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfdW5pcXVlX2lkLmF0dHIsCiAJJmRldl9hdHRyX21vZGVsLmF0dHIsCiAJJmRldl9hdHRyX3ZlbmRvci5hdHRyLAogCSZkZXZfYXR0cl9yZXYuYXR0ciwKKwkmZGV2X2F0dHJfbHVuaWQuYXR0ciwKKwkmZGV2X2F0dHJfcmFpZF9sZXZlbC5hdHRyLAorCSZkZXZfYXR0cl91c2FnZV9jb3VudC5hdHRyLAogCU5VTEwKIH07CiAKQEAgLTU4MCwxMiArNjk2LDI0IEBACiBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGNjaXNzX2Rldl90eXBlID0gewogCS5uYW1lCQk9ICJjY2lzc19kZXZpY2UiLAogCS5ncm91cHMJCT0gY2Npc3NfZGV2X2F0dHJfZ3JvdXBzLAorCS5yZWxlYXNlCT0gY2Npc3NfZGV2aWNlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIGNjaXNzX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJjY2lzcyIsCiB9OwogCisvKgorICogY2Npc3NfaGJhX3JlbGVhc2UgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudAorICogb2YgaC0+ZGV2IGdvZXMgdG8gemVyby4KKyAqLworc3RhdGljIHZvaWQgY2Npc3NfaGJhX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qCisJICogbm90aGluZyB0byBkbywgYnV0IG5lZWQgdGhpcyB0byBhdm9pZCBhIHdhcm5pbmcKKwkgKiBhYm91dCBub3QgaGF2aW5nIGEgcmVsZWFzZSBoYW5kbGVyIGZyb20gbGliL2tyZWYuYy4KKwkgKi8KK30KIAogLyoKICAqIEluaXRpYWxpemUgc3lzZnMgZW50cnkgZm9yIGVhY2ggY29udHJvbGxlci4gIFRoaXMgc2V0cyB1cCBhbmQgcmVnaXN0ZXJzCkBAIC02MDksNiArNzM3LDE2IEBACiBzdGF0aWMgdm9pZCBjY2lzc19kZXN0cm95X2hiYV9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCWRldmljZV9kZWwoJmgtPmRldik7CisJcHV0X2RldmljZSgmaC0+ZGV2KTsgLyogZmluYWwgcHV0LiAqLworfQorCisvKiBjY2lzc19kZXZpY2VfcmVsZWFzZSBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50CisgKiBvZiBoLT5kcnZbeF1kZXYgZ29lcyB0byB6ZXJvLgorICovCitzdGF0aWMgdm9pZCBjY2lzc19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiA9IHRvX2RydihkZXYpOworCWtmcmVlKGRydik7CiB9CiAKIC8qCkBAIC02MTcsMjQgKzc1NSwzOSBAQAogICogL3N5cy9idXMvcGNpL2RldmljZXMvPGRldi9jY2lzIy8uIFdlIGFsc28gY3JlYXRlIGEgbGluayBmcm9tCiAgKiAvc3lzL2Jsb2NrL2NjaXNzIWMjZCMgdG8gdGhpcyBlbnRyeS4KICAqLwotc3RhdGljIGludCBjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoc3RydWN0IGN0bHJfaW5mbyAqaCwKLQkJCQkgICAgICAgZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiwKK3N0YXRpYyBsb25nIGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCQkJCSAgICAgICBpbnQgZHJ2X2luZGV4KQogewotCWRldmljZV9pbml0aWFsaXplKCZkcnYtPmRldik7Ci0JZHJ2LT5kZXYudHlwZSA9ICZjY2lzc19kZXZfdHlwZTsKLQlkcnYtPmRldi5idXMgPSAmY2Npc3NfYnVzX3R5cGU7Ci0JZGV2X3NldF9uYW1lKCZkcnYtPmRldiwgImMlZGQlZCIsIGgtPmN0bHIsIGRydl9pbmRleCk7Ci0JZHJ2LT5kZXYucGFyZW50ID0gJmgtPmRldjsKLQlyZXR1cm4gZGV2aWNlX2FkZCgmZHJ2LT5kZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmIChoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2aWNlX2luaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWRldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OworCWRldmljZV9pbml0aWFsaXplKGRldik7CisJZGV2LT50eXBlID0gJmNjaXNzX2Rldl90eXBlOworCWRldi0+YnVzID0gJmNjaXNzX2J1c190eXBlOworCWRldl9zZXRfbmFtZShkZXYsICJjJWRkJWQiLCBoLT5jdGxyLCBkcnZfaW5kZXgpOworCWRldi0+cGFyZW50ID0gJmgtPmRldjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+ZGV2aWNlX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gZGV2aWNlX2FkZChkZXYpOwogfQogCiAvKgogICogUmVtb3ZlIHN5c2ZzIGVudHJpZXMgZm9yIGEgbG9naWNhbCBkcml2ZS4KICAqLwotc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2KQorc3RhdGljIHZvaWQgY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgZHJ2X2luZGV4LAorCWludCBjdGxyX2V4aXRpbmcpCiB7Ci0JZGV2aWNlX2RlbCgmZHJ2LT5kZXYpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OworCisJLyogc3BlY2lhbCBjYXNlIGZvciBjKmQwLCB3ZSBvbmx5IGRlc3Ryb3kgaXQgb24gY29udHJvbGxlciBleGl0ICovCisJaWYgKGRydl9pbmRleCA9PSAwICYmICFjdGxyX2V4aXRpbmcpCisJCXJldHVybjsKKworCWRldmljZV9kZWwoZGV2KTsKKwlwdXRfZGV2aWNlKGRldik7IC8qIHRoZSAiZmluYWwiIHB1dC4gKi8KKwloLT5kcnZbZHJ2X2luZGV4XSA9IE5VTEw7CiB9CiAKIC8qCkBAIC03NTEsNyArOTA0LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiY2Npc3Nfb3BlbiAlc1xuIiwgYmRldi0+YmRfZGlzay0+ZGlza19uYW1lKTsKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCi0JaWYgKGhvc3QtPmJ1c3lfaW5pdGlhbGl6aW5nIHx8IGRydi0+YnVzeV9jb25maWd1cmluZykKKwlpZiAoZHJ2LT5idXN5X2NvbmZpZ3VyaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCS8qCiAJICogUm9vdCBpcyBhbGxvd2VkIHRvIG9wZW4gcmF3IHZvbHVtZSB6ZXJvIGV2ZW4gaWYgaXQncyBub3QgY29uZmlndXJlZApAQCAtNzY3LDcgKzkyMCw4IEBACiAJCQlpZiAoTUlOT1IoYmRldi0+YmRfZGV2KSAmIDB4MGYpIHsKIAkJCQlyZXR1cm4gLUVOWElPOwogCQkJCS8qIGlmIGl0IGlzLCBtYWtlIHN1cmUgd2UgaGF2ZSBhIExVTiBJRCAqLwotCQkJfSBlbHNlIGlmIChkcnYtPkx1bklEID09IDApIHsKKwkJCX0gZWxzZSBpZiAobWVtY21wKGRydi0+THVuSUQsIENUTFJfTFVOSUQsCisJCQkJc2l6ZW9mKGRydi0+THVuSUQpKSkgewogCQkJCXJldHVybiAtRU5YSU87CiAJCQl9CiAJCX0KQEAgLTExMzIsMTIgKzEyODYsMTMgQEAKIAljYXNlIENDSVNTX0RFUkVHRElTSzoKIAljYXNlIENDSVNTX1JFR05FV0Q6CiAJY2FzZSBDQ0lTU19SRVZBTElEVk9MUzoKLQkJcmV0dXJuIHJlYnVpbGRfbHVuX3RhYmxlKGhvc3QsIDApOworCQlyZXR1cm4gcmVidWlsZF9sdW5fdGFibGUoaG9zdCwgMCwgMSk7CiAKIAljYXNlIENDSVNTX0dFVExVTklORk86ewogCQkJTG9ndm9sSW5mb19zdHJ1Y3QgbHVuaW5mbzsKIAotCQkJbHVuaW5mby5MdW5JRCA9IGRydi0+THVuSUQ7CisJCQltZW1jcHkoJmx1bmluZm8uTHVuSUQsIGRydi0+THVuSUQsCisJCQkJc2l6ZW9mKGx1bmluZm8uTHVuSUQpKTsKIAkJCWx1bmluZm8ubnVtX29wZW5zID0gZHJ2LT51c2FnZV9jb3VudDsKIAkJCWx1bmluZm8ubnVtX3BhcnRzID0gMDsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmx1bmluZm8sCkBAIC0xNDc1LDcgKzE2MzAsMTAgQEAKIAkJLyogbWFrZSBzdXJlIHRoZSBkaXNrIGhhcyBiZWVuIGFkZGVkIGFuZCB0aGUgZHJpdmUgaXMgcmVhbAogCQkgKiBiZWNhdXNlIHRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIHRoZSBtaWRkbGUgb2YgaW5pdF9vbmUuCiAJCSAqLwotCQlpZiAoIShoLT5kcnZbY3Vycl9xdWV1ZV0ucXVldWUpIHx8ICEoaC0+ZHJ2W2N1cnJfcXVldWVdLmhlYWRzKSkKKwkJaWYgKCFoLT5kcnZbY3Vycl9xdWV1ZV0pCisJCQljb250aW51ZTsKKwkJaWYgKCEoaC0+ZHJ2W2N1cnJfcXVldWVdLT5xdWV1ZSkgfHwKKwkJCSEoaC0+ZHJ2W2N1cnJfcXVldWVdLT5oZWFkcykpCiAJCQljb250aW51ZTsKIAkJYmxrX3N0YXJ0X3F1ZXVlKGgtPmdlbmRpc2tbY3Vycl9xdWV1ZV0tPnF1ZXVlKTsKIApAQCAtMTUzMiwxMyArMTY5MCwxMSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbG9nX3VuaXRfdG9fc2NzaTNhZGRyKGN0bHJfaW5mb190ICpoLCB1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLAotCXVpbnQzMl90IGxvZ191bml0KQorc3RhdGljIGlubGluZSB2b2lkIGxvZ191bml0X3RvX3Njc2kzYWRkcihjdGxyX2luZm9fdCAqaCwKKwl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCB1aW50MzJfdCBsb2dfdW5pdCkKIHsKLQlsb2dfdW5pdCA9IGgtPmRydltsb2dfdW5pdF0uTHVuSUQgJiAweDAzZmZmOwotCW1lbXNldCgmc2NzaTNhZGRyWzRdLCAwLCA0KTsKLQltZW1jcHkoJnNjc2kzYWRkclswXSwgJmxvZ191bml0LCA0KTsKLQlzY3NpM2FkZHJbM10gfD0gMHg0MDsKKwltZW1jcHkoc2NzaTNhZGRyLCBoLT5kcnZbbG9nX3VuaXRdLT5MdW5JRCwKKwkJc2l6ZW9mKGgtPmRydltsb2dfdW5pdF0tPkx1bklEKSk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgU0NTSSB2ZW5kb3IsIG1vZGVsLCBhbmQgcmV2aXNpb24gb2YgYSBsb2dpY2FsIGRyaXZlCkBAIC0xNjE1LDE2ICsxNzcxLDIzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBjY2lzc19hZGRfZGlzayhjdGxyX2luZm9fdCAqaCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCisvKgorICogY2Npc3NfYWRkX2Rpc2sgc2V0cyB1cCB0aGUgYmxvY2sgZGV2aWNlIHF1ZXVlIGZvciBhIGxvZ2ljYWwgZHJpdmUKKyAqLworc3RhdGljIGludCBjY2lzc19hZGRfZGlzayhjdGxyX2luZm9fdCAqaCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJaW50IGRydl9pbmRleCkKIHsKIAlkaXNrLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGRvX2NjaXNzX3JlcXVlc3QsICZoLT5sb2NrKTsKKwlpZiAoIWRpc2stPnF1ZXVlKQorCQlnb3RvIGluaXRfcXVldWVfZmFpbHVyZTsKIAlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImNjaXNzL2MlZGQlZCIsIGgtPmN0bHIsIGRydl9pbmRleCk7CiAJZGlzay0+bWFqb3IgPSBoLT5tYWpvcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGRydl9pbmRleCA8PCBOV0RfU0hJRlQ7CiAJZGlzay0+Zm9wcyA9ICZjY2lzc19mb3BzOwotCWRpc2stPnByaXZhdGVfZGF0YSA9ICZoLT5kcnZbZHJ2X2luZGV4XTsKLQlkaXNrLT5kcml2ZXJmc19kZXYgPSAmaC0+ZHJ2W2Rydl9pbmRleF0uZGV2OworCWlmIChjY2lzc19jcmVhdGVfbGRfc3lzZnNfZW50cnkoaCwgZHJ2X2luZGV4KSkKKwkJZ290byBjbGVhbnVwX3F1ZXVlOworCWRpc2stPnByaXZhdGVfZGF0YSA9IGgtPmRydltkcnZfaW5kZXhdOworCWRpc2stPmRyaXZlcmZzX2RldiA9ICZoLT5kcnZbZHJ2X2luZGV4XS0+ZGV2OwogCiAJLyogU2V0IHVwIHF1ZXVlIGluZm9ybWF0aW9uICovCiAJYmxrX3F1ZXVlX2JvdW5jZV9saW1pdChkaXNrLT5xdWV1ZSwgaC0+cGRldi0+ZG1hX21hc2spOwpAQCAtMTY0MiwxNCArMTgwNSwyMSBAQAogCWRpc2stPnF1ZXVlLT5xdWV1ZWRhdGEgPSBoOwogCiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShkaXNrLT5xdWV1ZSwKLQkJCQkgICAgIGgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUpOworCQkJCSAgICAgaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUpOwogCiAJLyogTWFrZSBzdXJlIGFsbCBxdWV1ZSBkYXRhIGlzIHdyaXR0ZW4gb3V0IGJlZm9yZSAqLwotCS8qIHNldHRpbmcgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUsIGFzIHNldHRpbmcgdGhpcyAqLworCS8qIHNldHRpbmcgaC0+ZHJ2W2Rydl9pbmRleF0tPnF1ZXVlLCBhcyBzZXR0aW5nIHRoaXMgKi8KIAkvKiBhbGxvd3MgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHN0YXJ0IHRoZSBxdWV1ZSAqLwogCXdtYigpOwotCWgtPmRydltkcnZfaW5kZXhdLnF1ZXVlID0gZGlzay0+cXVldWU7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPnF1ZXVlID0gZGlzay0+cXVldWU7CiAJYWRkX2Rpc2soZGlzayk7CisJcmV0dXJuIDA7CisKK2NsZWFudXBfcXVldWU6CisJYmxrX2NsZWFudXBfcXVldWUoZGlzay0+cXVldWUpOworCWRpc2stPnF1ZXVlID0gTlVMTDsKK2luaXRfcXVldWVfZmFpbHVyZToKKwlyZXR1cm4gLTE7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgdXNhZ2VfY291bnQgb2YgdGhlIGRyaXZlIHRvIGJlIHVwZGF0ZWQvYWRkZWQuCkBAIC0xNjYyLDcgKzE4MzIsOCBAQAogICogaXMgYWxzbyB0aGUgY29udHJvbGxlciBub2RlLiAgQW55IGNoYW5nZXMgdG8gZGlzayAwIHdpbGwgc2hvdyB1cCBvbgogICogdGhlIG5leHQgcmVib290LgogICovCi1zdGF0aWMgdm9pZCBjY2lzc191cGRhdGVfZHJpdmVfaW5mbyhpbnQgY3RsciwgaW50IGRydl9pbmRleCwgaW50IGZpcnN0X3RpbWUpCitzdGF0aWMgdm9pZCBjY2lzc191cGRhdGVfZHJpdmVfaW5mbyhpbnQgY3RsciwgaW50IGRydl9pbmRleCwgaW50IGZpcnN0X3RpbWUsCisJaW50IHZpYV9pb2N0bCkKIHsKIAljdGxyX2luZm9fdCAqaCA9IGhiYVtjdGxyXTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKQEAgLTE2NzIsMjEgKzE4NDMsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcmV0ID0gMDsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2aW5mbzsKLQlpbnQgd2FzX29ubHlfY29udHJvbGxlcl9ub2RlOwogCiAJLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBkaXNrIGFuZCBtb2RpZnkgdGhlIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIAlpbnFfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWRydmluZm8gPSBrbWFsbG9jKHNpemVvZigqZHJ2aW5mbyksIEdGUF9LRVJORUwpOworCWRydmluZm8gPSBremFsbG9jKHNpemVvZigqZHJ2aW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbnFfYnVmZiA9PSBOVUxMIHx8IGRydmluZm8gPT0gTlVMTCkKIAkJZ290byBtZW1fbXNnOwogCi0JLyogU2VlIGlmIHdlJ3JlIHRyeWluZyB0byB1cGRhdGUgdGhlICJjb250cm9sbGVyIG5vZGUiCi0JICogdGhpcyB3aWxsIGhhcHBlbiB0aGUgd2hlbiB0aGUgZmlyc3QgbG9naWNhbCBkcml2ZSBnZXRzCi0JICogY3JlYXRlZCBieSBBQ1UuCi0JICovCi0Jd2FzX29ubHlfY29udHJvbGxlcl9ub2RlID0gKGRydl9pbmRleCA9PSAwICYmCi0JCQkJaC0+ZHJ2WzBdLnJhaWRfbGV2ZWwgPT0gLTEpOwotCiAJLyogdGVzdGluZyB0byBzZWUgaWYgMTYtYnl0ZSBDREJzIGFyZSBhbHJlYWR5IGJlaW5nIHVzZWQgKi8KIAlpZiAoaC0+Y2Npc3NfcmVhZCA9PSBDQ0lTU19SRUFEXzE2KSB7CiAJCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoaC0+Y3RsciwgZHJ2X2luZGV4LCAxLApAQCAtMTcxOSwxNiArMTg4MiwxOSBAQAogCQkJCWRydmluZm8tPm1vZGVsLCBkcnZpbmZvLT5yZXYpOwogCWNjaXNzX2dldF9zZXJpYWxfbm8oY3RsciwgZHJ2X2luZGV4LCAxLCBkcnZpbmZvLT5zZXJpYWxfbm8sCiAJCQlzaXplb2YoZHJ2aW5mby0+c2VyaWFsX25vKSk7CisJLyogU2F2ZSB0aGUgbHVuaWQgaW4gY2FzZSB3ZSBkZXJlZ2lzdGVyIHRoZSBkaXNrLCBiZWxvdy4gKi8KKwltZW1jcHkoZHJ2aW5mby0+THVuSUQsIGgtPmRydltkcnZfaW5kZXhdLT5MdW5JRCwKKwkJc2l6ZW9mKGRydmluZm8tPkx1bklEKSk7CiAKIAkvKiBJcyBpdCB0aGUgc2FtZSBkaXNrIHdlIGFscmVhZHkga25vdywgYW5kIG5vdGhpbmcncyBjaGFuZ2VkPyAqLwotCWlmIChoLT5kcnZbZHJ2X2luZGV4XS5yYWlkX2xldmVsICE9IC0xICYmCisJaWYgKGgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsICE9IC0xICYmCiAJCSgobWVtY21wKGRydmluZm8tPnNlcmlhbF9ubywKLQkJCQloLT5kcnZbZHJ2X2luZGV4XS5zZXJpYWxfbm8sIDE2KSA9PSAwKSAmJgotCQlkcnZpbmZvLT5ibG9ja19zaXplID09IGgtPmRydltkcnZfaW5kZXhdLmJsb2NrX3NpemUgJiYKLQkJZHJ2aW5mby0+bnJfYmxvY2tzID09IGgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2NrcyAmJgotCQlkcnZpbmZvLT5oZWFkcyA9PSBoLT5kcnZbZHJ2X2luZGV4XS5oZWFkcyAmJgotCQlkcnZpbmZvLT5zZWN0b3JzID09IGgtPmRydltkcnZfaW5kZXhdLnNlY3RvcnMgJiYKLQkJZHJ2aW5mby0+Y3lsaW5kZXJzID09IGgtPmRydltkcnZfaW5kZXhdLmN5bGluZGVycykpCisJCQkJaC0+ZHJ2W2Rydl9pbmRleF0tPnNlcmlhbF9ubywgMTYpID09IDApICYmCisJCWRydmluZm8tPmJsb2NrX3NpemUgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPmJsb2NrX3NpemUgJiYKKwkJZHJ2aW5mby0+bnJfYmxvY2tzID09IGgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MgJiYKKwkJZHJ2aW5mby0+aGVhZHMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPmhlYWRzICYmCisJCWRydmluZm8tPnNlY3RvcnMgPT0gaC0+ZHJ2W2Rydl9pbmRleF0tPnNlY3RvcnMgJiYKKwkJZHJ2aW5mby0+Y3lsaW5kZXJzID09IGgtPmRydltkcnZfaW5kZXhdLT5jeWxpbmRlcnMpKQogCQkJLyogVGhlIGRpc2sgaXMgdW5jaGFuZ2VkLCBub3RoaW5nIHRvIHVwZGF0ZSAqLwogCQkJZ290byBmcmVlcmV0OwogCkBAIC0xNzM4LDE4ICsxOTA0LDE3IEBACiAJICogSWYgdGhlIGRpc2sgYWxyZWFkeSBleGlzdHMgdGhlbiBkZXJlZ2lzdGVyIGl0IGJlZm9yZSBwcm9jZWVkaW5nCiAJICogKHVubGVzcyBpdCdzIHRoZSBmaXJzdCBkaXNrIChmb3IgdGhlIGNvbnRyb2xsZXIgbm9kZSkuCiAJICovCi0JaWYgKGgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgIT0gLTEgJiYgZHJ2X2luZGV4ICE9IDApIHsKKwlpZiAoaC0+ZHJ2W2Rydl9pbmRleF0tPnJhaWRfbGV2ZWwgIT0gLTEgJiYgZHJ2X2luZGV4ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGlzayAlZCBoYXMgY2hhbmdlZC5cbiIsIGRydl9pbmRleCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJaC0+ZHJ2W2Rydl9pbmRleF0uYnVzeV9jb25maWd1cmluZyA9IDE7CisJCWgtPmRydltkcnZfaW5kZXhdLT5idXN5X2NvbmZpZ3VyaW5nID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShDQ0lTU19MT0NLKGgtPmN0bHIpLCBmbGFncyk7CiAKLQkJLyogZGVyZWdpc3Rlcl9kaXNrIHNldHMgaC0+ZHJ2W2Rydl9pbmRleF0ucXVldWUgPSBOVUxMCisJCS8qIGRlcmVnaXN0ZXJfZGlzayBzZXRzIGgtPmRydltkcnZfaW5kZXhdLT5xdWV1ZSA9IE5VTEwKIAkJICogd2hpY2gga2VlcHMgdGhlIGludGVycnVwdCBoYW5kbGVyIGZyb20gc3RhcnRpbmcKIAkJICogdGhlIHF1ZXVlLgogCQkgKi8KLQkJcmV0ID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGRydl9pbmRleCwgMCk7Ci0JCWgtPmRydltkcnZfaW5kZXhdLmJ1c3lfY29uZmlndXJpbmcgPSAwOworCQlyZXQgPSBkZXJlZ2lzdGVyX2Rpc2soaCwgZHJ2X2luZGV4LCAwLCB2aWFfaW9jdGwpOwogCX0KIAogCS8qIElmIHRoZSBkaXNrIGlzIGluIHVzZSByZXR1cm4gKi8KQEAgLTE3NTcsMjIgKzE5MjIsMzEgQEAKIAkJZ290byBmcmVlcmV0OwogCiAJLyogU2F2ZSB0aGUgbmV3IGluZm9ybWF0aW9uIGZyb20gY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeQotCSAqIGFuZCBzZXJpYWwgbnVtYmVyIGlucXVpcnkuCisJICogYW5kIHNlcmlhbCBudW1iZXIgaW5xdWlyeS4gIElmIHRoZSBkaXNrIHdhcyBkZXJlZ2lzdGVyZWQKKwkgKiBhYm92ZSwgdGhlbiBoLT5kcnZbZHJ2X2luZGV4XSB3aWxsIGJlIE5VTEwuCiAJICovCi0JaC0+ZHJ2W2Rydl9pbmRleF0uYmxvY2tfc2l6ZSA9IGRydmluZm8tPmJsb2NrX3NpemU7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0ubnJfYmxvY2tzID0gZHJ2aW5mby0+bnJfYmxvY2tzOwotCWgtPmRydltkcnZfaW5kZXhdLmhlYWRzID0gZHJ2aW5mby0+aGVhZHM7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uc2VjdG9ycyA9IGRydmluZm8tPnNlY3RvcnM7Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uY3lsaW5kZXJzID0gZHJ2aW5mby0+Y3lsaW5kZXJzOwotCWgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgPSBkcnZpbmZvLT5yYWlkX2xldmVsOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5zZXJpYWxfbm8sIGRydmluZm8tPnNlcmlhbF9ubywgMTYpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS52ZW5kb3IsIGRydmluZm8tPnZlbmRvciwgVkVORE9SX0xFTiArIDEpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5tb2RlbCwgZHJ2aW5mby0+bW9kZWwsIE1PREVMX0xFTiArIDEpOwotCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS5yZXYsIGRydmluZm8tPnJldiwgUkVWX0xFTiArIDEpOworCWlmIChoLT5kcnZbZHJ2X2luZGV4XSA9PSBOVUxMKSB7CisJCWRydmluZm8tPmRldmljZV9pbml0aWFsaXplZCA9IDA7CisJCWgtPmRydltkcnZfaW5kZXhdID0gZHJ2aW5mbzsKKwkJZHJ2aW5mbyA9IE5VTEw7IC8qIHNvIGl0IHdvbid0IGJlIGZyZWVkIGJlbG93LiAqLworCX0gZWxzZSB7CisJCS8qIHNwZWNpYWwgY2FzZSBmb3IgY3hkMCAqLworCQloLT5kcnZbZHJ2X2luZGV4XS0+YmxvY2tfc2l6ZSA9IGRydmluZm8tPmJsb2NrX3NpemU7CisJCWgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MgPSBkcnZpbmZvLT5ucl9ibG9ja3M7CisJCWgtPmRydltkcnZfaW5kZXhdLT5oZWFkcyA9IGRydmluZm8tPmhlYWRzOworCQloLT5kcnZbZHJ2X2luZGV4XS0+c2VjdG9ycyA9IGRydmluZm8tPnNlY3RvcnM7CisJCWgtPmRydltkcnZfaW5kZXhdLT5jeWxpbmRlcnMgPSBkcnZpbmZvLT5jeWxpbmRlcnM7CisJCWgtPmRydltkcnZfaW5kZXhdLT5yYWlkX2xldmVsID0gZHJ2aW5mby0+cmFpZF9sZXZlbDsKKwkJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5zZXJpYWxfbm8sIGRydmluZm8tPnNlcmlhbF9ubywgMTYpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPnZlbmRvciwgZHJ2aW5mby0+dmVuZG9yLAorCQkJVkVORE9SX0xFTiArIDEpOworCQltZW1jcHkoaC0+ZHJ2W2Rydl9pbmRleF0tPm1vZGVsLCBkcnZpbmZvLT5tb2RlbCwgTU9ERUxfTEVOICsgMSk7CisJCW1lbWNweShoLT5kcnZbZHJ2X2luZGV4XS0+cmV2LCBkcnZpbmZvLT5yZXYsIFJFVl9MRU4gKyAxKTsKKwl9CiAKIAkrK2gtPm51bV9sdW5zOwogCWRpc2sgPSBoLT5nZW5kaXNrW2Rydl9pbmRleF07Ci0Jc2V0X2NhcGFjaXR5KGRpc2ssIGgtPmRydltkcnZfaW5kZXhdLm5yX2Jsb2Nrcyk7CisJc2V0X2NhcGFjaXR5KGRpc2ssIGgtPmRydltkcnZfaW5kZXhdLT5ucl9ibG9ja3MpOwogCiAJLyogSWYgaXQncyBub3QgZGlzayAwIChkcnZfaW5kZXggIT0gMCkKIAkgKiBvciBpZiBpdCB3YXMgZGlzayAwLCBidXQgdGhlcmUgd2FzIHByZXZpb3VzbHkKQEAgLTE3ODAsOCArMTk1NCwxNSBAQAogCSAqIChyYWlkX2xldmUgPT0gLTEpIHRoZW4gd2Ugd2FudCB0byB1cGRhdGUgdGhlCiAJICogbG9naWNhbCBkcml2ZSdzIGluZm9ybWF0aW9uLgogCSAqLwotCWlmIChkcnZfaW5kZXggfHwgZmlyc3RfdGltZSkKLQkJY2Npc3NfYWRkX2Rpc2soaCwgZGlzaywgZHJ2X2luZGV4KTsKKwlpZiAoZHJ2X2luZGV4IHx8IGZpcnN0X3RpbWUpIHsKKwkJaWYgKGNjaXNzX2FkZF9kaXNrKGgsIGRpc2ssIGRydl9pbmRleCkgIT0gMCkgeworCQkJY2Npc3NfZnJlZV9nZW5kaXNrKGgsIGRydl9pbmRleCk7CisJCQljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiVkIGNvdWxkIG5vdCB1cGRhdGUgIgorCQkJCSJkaXNrICVkXG4iLCBoLT5jdGxyLCBkcnZfaW5kZXgpOworCQkJLS1oLT5udW1fbHVuczsKKwkJfQorCX0KIAogZnJlZXJldDoKIAlrZnJlZShpbnFfYnVmZik7CkBAIC0xNzkzLDI4ICsxOTc0LDcwIEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIHRoZSBmaXJzdCBpbmRleCBvZiB0aGUgY29udHJvbGxlcnMgZHJpdmUgYXJyYXkKLSAqIHRoYXQgaGFzIGEgLTEgZm9yIHRoZSByYWlkX2xldmVsIGFuZCB3aWxsIHJldHVybiB0aGF0IGluZGV4LiAgVGhpcyBpcwotICogd2hlcmUgbmV3IGRyaXZlcyB3aWxsIGJlIGFkZGVkLiAgSWYgdGhlIGluZGV4IHRvIGJlIHJldHVybmVkIGlzIGdyZWF0ZXIKLSAqIHRoYW4gdGhlIGhpZ2hlc3RfbHVuIGluZGV4IGZvciB0aGUgY29udHJvbGxlciB0aGVuIGhpZ2hlc3RfbHVuIGlzIHNldAotICogdG8gdGhpcyBuZXcgaW5kZXguICBJZiB0aGVyZSBhcmUgbm8gYXZhaWxhYmxlIGluZGV4ZXMgdGhlbiAtMSBpcyByZXR1cm5lZC4KLSAqICJjb250cm9sbGVyX25vZGUiIGlzIHVzZWQgdG8ga25vdyBpZiB0aGlzIGlzIGEgcmVhbCBsb2dpY2FsIGRyaXZlLCBvciBqdXN0Ci0gKiB0aGUgY29udHJvbGxlciBub2RlLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoaXMgY291bnRzIHRvd2FyZHMgaGlnaGVzdF9sdW4uCisgKiB0aGF0IGhhcyBhIG51bGwgZHJ2IHBvaW50ZXIgYW5kIGFsbG9jYXRlIHRoZSBkcml2ZSBpbmZvIHN0cnVjdCBhbmQKKyAqIHdpbGwgcmV0dXJuIHRoYXQgaW5kZXggICBUaGlzIGlzIHdoZXJlIG5ldyBkcml2ZXMgd2lsbCBiZSBhZGRlZC4KKyAqIElmIHRoZSBpbmRleCB0byBiZSByZXR1cm5lZCBpcyBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3RfbHVuIGluZGV4IGZvcgorICogdGhlIGNvbnRyb2xsZXIgdGhlbiBoaWdoZXN0X2x1biBpcyBzZXQgKiB0byB0aGlzIG5ldyBpbmRleC4KKyAqIElmIHRoZXJlIGFyZSBubyBhdmFpbGFibGUgaW5kZXhlcyBvciBpZiB0aGEgYWxsb2NhdGlvbiBmYWlscywgdGhlbiAtMQorICogaXMgcmV0dXJuZWQuICAqICJjb250cm9sbGVyX25vZGUiIGlzIHVzZWQgdG8ga25vdyBpZiB0aGlzIGlzIGEgcmVhbAorICogbG9naWNhbCBkcml2ZSwgb3IganVzdCB0aGUgY29udHJvbGxlciBub2RlLCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoaXMKKyAqIGNvdW50cyB0b3dhcmRzIGhpZ2hlc3RfbHVuLgogICovCi1zdGF0aWMgaW50IGNjaXNzX2ZpbmRfZnJlZV9kcml2ZV9pbmRleChpbnQgY3RsciwgaW50IGNvbnRyb2xsZXJfbm9kZSkKK3N0YXRpYyBpbnQgY2Npc3NfYWxsb2NfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGNvbnRyb2xsZXJfbm9kZSkKIHsKIAlpbnQgaTsKKwlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OwogCisJLyogU2VhcmNoIGZvciBhbiBlbXB0eSBzbG90IGZvciBvdXIgZHJpdmUgaW5mbyAqLwogCWZvciAoaSA9IDA7IGkgPCBDSVNTX01BWF9MVU47IGkrKykgewotCQlpZiAoaGJhW2N0bHJdLT5kcnZbaV0ucmFpZF9sZXZlbCA9PSAtMSkgewotCQkJaWYgKGkgPiBoYmFbY3Rscl0tPmhpZ2hlc3RfbHVuKQotCQkJCWlmICghY29udHJvbGxlcl9ub2RlKQotCQkJCQloYmFbY3Rscl0tPmhpZ2hlc3RfbHVuID0gaTsKKworCQkvKiBpZiBub3QgY3hkMCBjYXNlLCBhbmQgaXQncyBvY2N1cGllZCwgc2tpcCBpdC4gKi8KKwkJaWYgKGgtPmRydltpXSAmJiBpICE9IDApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgaXQncyBjeGQwIGNhc2UsIGFuZCBkcnYgaXMgYWxsb2MnZWQgYWxyZWFkeSwgYW5kIGEKKwkJICogZGlzayBpcyBjb25maWd1cmVkIHRoZXJlLCBza2lwIGl0LgorCQkgKi8KKwkJaWYgKGkgPT0gMCAmJiBoLT5kcnZbaV0gJiYgaC0+ZHJ2W2ldLT5yYWlkX2xldmVsICE9IC0xKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogV2UndmUgZm91bmQgYW4gZW1wdHkgc2xvdC4gIFVwZGF0ZSBoaWdoZXN0X2x1bgorCQkgKiBwcm92aWRlZCB0aGlzIGlzbid0IGp1c3QgdGhlIGZha2UgY3hkMCBjb250cm9sbGVyIG5vZGUuCisJCSAqLworCQlpZiAoaSA+IGgtPmhpZ2hlc3RfbHVuICYmICFjb250cm9sbGVyX25vZGUpCisJCQloLT5oaWdoZXN0X2x1biA9IGk7CisKKwkJLyogSWYgYWRkaW5nIGEgcmVhbCBkaXNrIGF0IGN4ZDAsIGFuZCBpdCdzIGFscmVhZHkgYWxsb2MnZWQgKi8KKwkJaWYgKGkgPT0gMCAmJiBoLT5kcnZbaV0gIT0gTlVMTCkKIAkJCXJldHVybiBpOwotCQl9CisKKwkJLyoKKwkJICogRm91bmQgYW4gZW1wdHkgc2xvdCwgbm90IGFscmVhZHkgYWxsb2MnZWQuICBBbGxvY2F0ZSBpdC4KKwkJICogTWFyayBpdCB3aXRoIHJhaWRfbGV2ZWwgPT0gLTEsIHNvIHdlIGtub3cgaXQncyBuZXcgbGF0ZXIgb24uCisJCSAqLworCQlkcnYgPSBremFsbG9jKHNpemVvZigqZHJ2KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZHJ2KQorCQkJcmV0dXJuIC0xOworCQlkcnYtPnJhaWRfbGV2ZWwgPSAtMTsgLyogc28gd2Uga25vdyBpdCdzIG5ldyAqLworCQloLT5kcnZbaV0gPSBkcnY7CisJCXJldHVybiBpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIGNjaXNzX2ZyZWVfZHJpdmVfaW5mbyhjdGxyX2luZm9fdCAqaCwgaW50IGRydl9pbmRleCkKK3sKKwlrZnJlZShoLT5kcnZbZHJ2X2luZGV4XSk7CisJaC0+ZHJ2W2Rydl9pbmRleF0gPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjY2lzc19mcmVlX2dlbmRpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgpCit7CisJcHV0X2Rpc2soaC0+Z2VuZGlza1tkcnZfaW5kZXhdKTsKKwloLT5nZW5kaXNrW2Rydl9pbmRleF0gPSBOVUxMOworfQorCiAvKiBjY2lzc19hZGRfZ2VuZGlzayBmaW5kcyBhIGZyZWUgaGJhW10tPmRydiBzdHJ1Y3R1cmUKICAqIGFuZCBhbGxvY2F0ZXMgYSBnZW5kaXNrIGlmIG5lZWRlZCwgYW5kIHNldHMgdGhlIGx1bmlkCiAgKiBpbiB0aGUgZHJ2aW5mbyBzdHJ1Y3R1cmUuICAgSXQgcmV0dXJucyB0aGUgaW5kZXggaW50bwpAQCAtMTgyNCwxMyArMjA0NywxNSBAQAogICogYSBtZWFucyB0byB0YWxrIHRvIHRoZSBjb250cm9sbGVyIGluIGNhc2Ugbm8gbG9naWNhbAogICogZHJpdmVzIGhhdmUgeWV0IGJlZW4gY29uZmlndXJlZC4KICAqLwotc3RhdGljIGludCBjY2lzc19hZGRfZ2VuZGlzayhjdGxyX2luZm9fdCAqaCwgX191MzIgbHVuaWQsIGludCBjb250cm9sbGVyX25vZGUpCitzdGF0aWMgaW50IGNjaXNzX2FkZF9nZW5kaXNrKGN0bHJfaW5mb190ICpoLCB1bnNpZ25lZCBjaGFyIGx1bmlkW10sCisJaW50IGNvbnRyb2xsZXJfbm9kZSkKIHsKIAlpbnQgZHJ2X2luZGV4OwogCi0JZHJ2X2luZGV4ID0gY2Npc3NfZmluZF9mcmVlX2RyaXZlX2luZGV4KGgtPmN0bHIsIGNvbnRyb2xsZXJfbm9kZSk7CisJZHJ2X2luZGV4ID0gY2Npc3NfYWxsb2NfZHJpdmVfaW5mbyhoLCBjb250cm9sbGVyX25vZGUpOwogCWlmIChkcnZfaW5kZXggPT0gLTEpCiAJCXJldHVybiAtMTsKKwogCS8qQ2hlY2sgaWYgdGhlIGdlbmRpc2sgbmVlZHMgdG8gYmUgYWxsb2NhdGVkICovCiAJaWYgKCFoLT5nZW5kaXNrW2Rydl9pbmRleF0pIHsKIAkJaC0+Z2VuZGlza1tkcnZfaW5kZXhdID0KQEAgLTE4MzksMjMgKzIwNjQsMjQgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiY2Npc3MlZDogY291bGQgbm90ICIKIAkJCQkiYWxsb2NhdGUgYSBuZXcgZGlzayAlZFxuIiwKIAkJCQloLT5jdGxyLCBkcnZfaW5kZXgpOwotCQkJcmV0dXJuIC0xOworCQkJZ290byBlcnJfZnJlZV9kcml2ZV9pbmZvOwogCQl9CiAJfQotCWgtPmRydltkcnZfaW5kZXhdLkx1bklEID0gbHVuaWQ7Ci0JaWYgKGNjaXNzX2NyZWF0ZV9sZF9zeXNmc19lbnRyeShoLCAmaC0+ZHJ2W2Rydl9pbmRleF0sIGRydl9pbmRleCkpCisJbWVtY3B5KGgtPmRydltkcnZfaW5kZXhdLT5MdW5JRCwgbHVuaWQsCisJCXNpemVvZihoLT5kcnZbZHJ2X2luZGV4XS0+THVuSUQpKTsKKwlpZiAoY2Npc3NfY3JlYXRlX2xkX3N5c2ZzX2VudHJ5KGgsIGRydl9pbmRleCkpCiAJCWdvdG8gZXJyX2ZyZWVfZGlzazsKLQogCS8qIERvbid0IG5lZWQgdG8gbWFyayB0aGlzIGJ1c3kgYmVjYXVzZSBub2JvZHkgKi8KIAkvKiBlbHNlIGtub3dzIGFib3V0IHRoaXMgZGlzayB5ZXQgdG8gY29udGVuZCAqLwogCS8qIGZvciBhY2Nlc3MgdG8gaXQuICovCi0JaC0+ZHJ2W2Rydl9pbmRleF0uYnVzeV9jb25maWd1cmluZyA9IDA7CisJaC0+ZHJ2W2Rydl9pbmRleF0tPmJ1c3lfY29uZmlndXJpbmcgPSAwOwogCXdtYigpOwogCXJldHVybiBkcnZfaW5kZXg7CiAKIGVycl9mcmVlX2Rpc2s6Ci0JcHV0X2Rpc2soaC0+Z2VuZGlza1tkcnZfaW5kZXhdKTsKLQloLT5nZW5kaXNrW2Rydl9pbmRleF0gPSBOVUxMOworCWNjaXNzX2ZyZWVfZ2VuZGlzayhoLCBkcnZfaW5kZXgpOworZXJyX2ZyZWVfZHJpdmVfaW5mbzoKKwljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE4NzIsMjEgKzIwOTgsMjUgQEAKIAlpZiAoaC0+Z2VuZGlza1swXSAhPSBOVUxMKSAvKiBhbHJlYWR5IGRpZCB0aGlzPyBUaGVuIGJhaWwuICovCiAJCXJldHVybjsKIAotCWRydl9pbmRleCA9IGNjaXNzX2FkZF9nZW5kaXNrKGgsIDAsIDEpOwotCWlmIChkcnZfaW5kZXggPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3MlZDogY291bGQgbm90ICIKLQkJCSJhZGQgZGlzayAwLlxuIiwgaC0+Y3Rscik7Ci0JCXJldHVybjsKLQl9Ci0JaC0+ZHJ2W2Rydl9pbmRleF0uYmxvY2tfc2l6ZSA9IDUxMjsKLQloLT5kcnZbZHJ2X2luZGV4XS5ucl9ibG9ja3MgPSAwOwotCWgtPmRydltkcnZfaW5kZXhdLmhlYWRzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5zZWN0b3JzID0gMDsKLQloLT5kcnZbZHJ2X2luZGV4XS5jeWxpbmRlcnMgPSAwOwotCWgtPmRydltkcnZfaW5kZXhdLnJhaWRfbGV2ZWwgPSAtMTsKLQltZW1zZXQoaC0+ZHJ2W2Rydl9pbmRleF0uc2VyaWFsX25vLCAwLCAxNik7CisJZHJ2X2luZGV4ID0gY2Npc3NfYWRkX2dlbmRpc2soaCwgQ1RMUl9MVU5JRCwgMSk7CisJaWYgKGRydl9pbmRleCA9PSAtMSkKKwkJZ290byBlcnJvcjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+YmxvY2tfc2l6ZSA9IDUxMjsKKwloLT5kcnZbZHJ2X2luZGV4XS0+bnJfYmxvY2tzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+aGVhZHMgPSAwOworCWgtPmRydltkcnZfaW5kZXhdLT5zZWN0b3JzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+Y3lsaW5kZXJzID0gMDsKKwloLT5kcnZbZHJ2X2luZGV4XS0+cmFpZF9sZXZlbCA9IC0xOworCW1lbXNldChoLT5kcnZbZHJ2X2luZGV4XS0+c2VyaWFsX25vLCAwLCAxNik7CiAJZGlzayA9IGgtPmdlbmRpc2tbZHJ2X2luZGV4XTsKLQljY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpOworCWlmIChjY2lzc19hZGRfZGlzayhoLCBkaXNrLCBkcnZfaW5kZXgpID09IDApCisJCXJldHVybjsKKwljY2lzc19mcmVlX2dlbmRpc2soaCwgZHJ2X2luZGV4KTsKKwljY2lzc19mcmVlX2RyaXZlX2luZm8oaCwgZHJ2X2luZGV4KTsKK2Vycm9yOgorCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzJWQ6IGNvdWxkIG5vdCAiCisJCSJhZGQgZGlzayAwLlxuIiwgaC0+Y3Rscik7CisJcmV0dXJuOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGFuZCByZW1vdmUgbG9naWNhbCBkcml2ZXMgZnJvbSB0aGUgTG9naWNhbApAQCAtMTg5Nyw3ICsyMTI3LDggQEAKICAqIElOUFVUCiAgKiBoCQk9IFRoZSBjb250cm9sbGVyIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbnMgb24KICAqLwotc3RhdGljIGludCByZWJ1aWxkX2x1bl90YWJsZShjdGxyX2luZm9fdCAqaCwgaW50IGZpcnN0X3RpbWUpCitzdGF0aWMgaW50IHJlYnVpbGRfbHVuX3RhYmxlKGN0bHJfaW5mb190ICpoLCBpbnQgZmlyc3RfdGltZSwKKwlpbnQgdmlhX2lvY3RsKQogewogCWludCBjdGxyID0gaC0+Y3RscjsKIAlpbnQgbnVtX2x1bnM7CkBAIC0xOTA3LDcgKzIxMzgsNyBAQAogCWludCBpOwogCWludCBkcnZfZm91bmQ7CiAJaW50IGRydl9pbmRleCA9IDA7Ci0JX191MzIgbHVuaWQgPSAwOworCXVuc2lnbmVkIGNoYXIgbHVuaWRbOF0gPSBDVExSX0xVTklEOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCkBAIC0xOTYwLDEzICsyMTkxLDEzIEBACiAJCWRydl9mb3VuZCA9IDA7CiAKIAkJLyogc2tpcCBob2xlcyBpbiB0aGUgYXJyYXkgZnJvbSBhbHJlYWR5IGRlbGV0ZWQgZHJpdmVzICovCi0JCWlmIChoLT5kcnZbaV0ucmFpZF9sZXZlbCA9PSAtMSkKKwkJaWYgKGgtPmRydltpXSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJZm9yIChqID0gMDsgaiA8IG51bV9sdW5zOyBqKyspIHsKLQkJCW1lbWNweSgmbHVuaWQsICZsZF9idWZmLT5MVU5bal1bMF0sIDQpOwotCQkJbHVuaWQgPSBsZTMyX3RvX2NwdShsdW5pZCk7Ci0JCQlpZiAoaC0+ZHJ2W2ldLkx1bklEID09IGx1bmlkKSB7CisJCQltZW1jcHkobHVuaWQsICZsZF9idWZmLT5MVU5bal1bMF0sIHNpemVvZihsdW5pZCkpOworCQkJaWYgKG1lbWNtcChoLT5kcnZbaV0tPkx1bklELCBsdW5pZCwKKwkJCQlzaXplb2YobHVuaWQpKSA9PSAwKSB7CiAJCQkJZHJ2X2ZvdW5kID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTE5NzQsMTEgKzIyMDUsMTEgQEAKIAkJaWYgKCFkcnZfZm91bmQpIHsKIAkJCS8qIERlcmVnaXN0ZXIgaXQgZnJvbSB0aGUgT1MsIGl0J3MgZ29uZS4gKi8KIAkJCXNwaW5fbG9ja19pcnFzYXZlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJCWgtPmRydltpXS5idXN5X2NvbmZpZ3VyaW5nID0gMTsKKwkJCWgtPmRydltpXS0+YnVzeV9jb25maWd1cmluZyA9IDE7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKENDSVNTX0xPQ0soaC0+Y3RsciksIGZsYWdzKTsKLQkJCXJldHVybl9jb2RlID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGksIDEpOwotCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeSgmaC0+ZHJ2W2ldKTsKLQkJCWgtPmRydltpXS5idXN5X2NvbmZpZ3VyaW5nID0gMDsKKwkJCXJldHVybl9jb2RlID0gZGVyZWdpc3Rlcl9kaXNrKGgsIGksIDEsIHZpYV9pb2N0bCk7CisJCQlpZiAoaC0+ZHJ2W2ldICE9IE5VTEwpCisJCQkJaC0+ZHJ2W2ldLT5idXN5X2NvbmZpZ3VyaW5nID0gMDsKIAkJfQogCX0KIApAQCAtMTk5MiwxNyArMjIyMywxNiBAQAogCiAJCWRydl9mb3VuZCA9IDA7CiAKLQkJbWVtY3B5KCZsdW5pZCwgJmxkX2J1ZmYtPkxVTltpXVswXSwgNCk7Ci0JCWx1bmlkID0gbGUzMl90b19jcHUobHVuaWQpOwotCisJCW1lbWNweShsdW5pZCwgJmxkX2J1ZmYtPkxVTltpXVswXSwgc2l6ZW9mKGx1bmlkKSk7CiAJCS8qIEZpbmQgaWYgdGhlIExVTiBpcyBhbHJlYWR5IGluIHRoZSBkcml2ZSBhcnJheQogCQkgKiBvZiB0aGUgZHJpdmVyLiAgSWYgc28gdGhlbiB1cGRhdGUgaXRzIGluZm8KIAkJICogaWYgbm90IGluIHVzZS4gIElmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gZmluZAogCQkgKiB0aGUgZmlyc3QgZnJlZSBpbmRleCBhbmQgYWRkIGl0LgogCQkgKi8KIAkJZm9yIChqID0gMDsgaiA8PSBoLT5oaWdoZXN0X2x1bjsgaisrKSB7Ci0JCQlpZiAoaC0+ZHJ2W2pdLnJhaWRfbGV2ZWwgIT0gLTEgJiYKLQkJCQloLT5kcnZbal0uTHVuSUQgPT0gbHVuaWQpIHsKKwkJCWlmIChoLT5kcnZbal0gIT0gTlVMTCAmJgorCQkJCW1lbWNtcChoLT5kcnZbal0tPkx1bklELCBsdW5pZCwKKwkJCQkJc2l6ZW9mKGgtPmRydltqXS0+THVuSUQpKSA9PSAwKSB7CiAJCQkJZHJ2X2luZGV4ID0gajsKIAkJCQlkcnZfZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtMjAxNSw3ICsyMjQ1LDggQEAKIAkJCWlmIChkcnZfaW5kZXggPT0gLTEpCiAJCQkJZ290byBmcmVlcmV0OwogCQl9Ci0JCWNjaXNzX3VwZGF0ZV9kcml2ZV9pbmZvKGN0bHIsIGRydl9pbmRleCwgZmlyc3RfdGltZSk7CisJCWNjaXNzX3VwZGF0ZV9kcml2ZV9pbmZvKGN0bHIsIGRydl9pbmRleCwgZmlyc3RfdGltZSwKKwkJCXZpYV9pb2N0bCk7CiAJfQkJLyogZW5kIGZvciAqLwogCiBmcmVlcmV0OgpAQCAtMjAzMiw2ICsyMjYzLDI1IEBACiAJZ290byBmcmVlcmV0OwogfQogCitzdGF0aWMgdm9pZCBjY2lzc19jbGVhcl9kcml2ZV9pbmZvKGRyaXZlX2luZm9fc3RydWN0ICpkcml2ZV9pbmZvKQoreworCS8qIHplcm8gb3V0IHRoZSBkaXNrIHNpemUgaW5mbyAqLworCWRyaXZlX2luZm8tPm5yX2Jsb2NrcyA9IDA7CisJZHJpdmVfaW5mby0+YmxvY2tfc2l6ZSA9IDA7CisJZHJpdmVfaW5mby0+aGVhZHMgPSAwOworCWRyaXZlX2luZm8tPnNlY3RvcnMgPSAwOworCWRyaXZlX2luZm8tPmN5bGluZGVycyA9IDA7CisJZHJpdmVfaW5mby0+cmFpZF9sZXZlbCA9IC0xOworCW1lbXNldChkcml2ZV9pbmZvLT5zZXJpYWxfbm8sIDAsIHNpemVvZihkcml2ZV9pbmZvLT5zZXJpYWxfbm8pKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+bW9kZWwsIDAsIHNpemVvZihkcml2ZV9pbmZvLT5tb2RlbCkpOworCW1lbXNldChkcml2ZV9pbmZvLT5yZXYsIDAsIHNpemVvZihkcml2ZV9pbmZvLT5yZXYpKTsKKwltZW1zZXQoZHJpdmVfaW5mby0+dmVuZG9yLCAwLCBzaXplb2YoZHJpdmVfaW5mby0+dmVuZG9yKSk7CisJLyoKKwkgKiBkb24ndCBjbGVhciB0aGUgTFVOSUQgdGhvdWdoLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIHdoaWNoCisJICogb25lIHRoaXMgb25lIGlzLgorCSAqLworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVyZWdpc3RlciB0aGUgZGlzayBhbmQgaXQncyBxdWV1ZSBmcm9tIHRoZQogICoga2VybmVsLiAgSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY29udHJvbGxlciBsb2NrIGhlbGQgYW5kIHRoZQogICogZHJ2IHN0cnVjdHVyZXMgYnVzeV9jb25maWd1cmluZyBmbGFnIHNldC4gIEl0J3MgcGFyYW1ldGVycyBhcmU6CkBAIC0yMDQ2LDQzICsyMjk2LDQ4IEBACiAgKiAgICAgICAgICAgICB0aGUgZGlzayBpbiBwcmVwYXJhdGlvbiBmb3IgcmUtYWRkaW5nIGl0LiAgSW4gdGhpcyBjYXNlCiAgKiAgICAgICAgICAgICB0aGUgaGlnaGVzdF9sdW4gc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkIGFuZCB0aGUgTHVuSUQKICAqICAgICAgICAgICAgIHNob3VsZCBub3QgYmUgY2xlYXJlZC4KKyAqIHZpYV9pb2N0bAorICogICAgVGhpcyBpbmRpY2F0ZXMgd2hldGhlciB3ZSd2ZSByZWFjaGVkIHRoaXMgcGF0aCB2aWEgaW9jdGwuCisgKiAgICBUaGlzIGFmZmVjdHMgdGhlIG1heGltdW0gdXNhZ2UgY291bnQgYWxsb3dlZCBmb3IgYzBkMCB0byBiZSBtZXNzZWQgd2l0aC4KKyAqICAgIElmIHRoaXMgcGF0aCBpcyByZWFjaGVkIHZpYSBpb2N0bCgpLCB0aGVuIHRoZSBtYXhfdXNhZ2VfY291bnQgd2lsbAorICogICAgYmUgMSwgYXMgdGhlIHByb2Nlc3MgY2FsbGluZyBpb2N0bCgpIGhhcyBnb3QgdG8gaGF2ZSB0aGUgZGV2aWNlIG9wZW4uCisgKiAgICBJZiB3ZSBnZXQgaGVyZSB2aWEgc3lzZnMsIHRoZW4gdGhlIG1heCB1c2FnZSBjb3VudCB3aWxsIGJlIHplcm8uCiAqLwogc3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soY3Rscl9pbmZvX3QgKmgsIGludCBkcnZfaW5kZXgsCi0JCQkgICBpbnQgY2xlYXJfYWxsKQorCQkJICAgaW50IGNsZWFyX2FsbCwgaW50IHZpYV9pb2N0bCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKIAlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2OworCWludCByZWNhbGN1bGF0ZV9oaWdoZXN0X2x1bjsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWRydiA9ICZoLT5kcnZbZHJ2X2luZGV4XTsKKwlkcnYgPSBoLT5kcnZbZHJ2X2luZGV4XTsKIAlkaXNrID0gaC0+Z2VuZGlza1tkcnZfaW5kZXhdOwogCiAJLyogbWFrZSBzdXJlIGxvZ2ljYWwgdm9sdW1lIGlzIE5PVCBpcyB1c2UgKi8KIAlpZiAoY2xlYXJfYWxsIHx8IChoLT5nZW5kaXNrWzBdID09IGRpc2spKSB7Ci0JCWlmIChkcnYtPnVzYWdlX2NvdW50ID4gMSkKKwkJaWYgKGRydi0+dXNhZ2VfY291bnQgPiB2aWFfaW9jdGwpCiAJCQlyZXR1cm4gLUVCVVNZOwogCX0gZWxzZSBpZiAoZHJ2LT51c2FnZV9jb3VudCA+IDApCiAJCXJldHVybiAtRUJVU1k7CiAKKwlyZWNhbGN1bGF0ZV9oaWdoZXN0X2x1biA9IChkcnYgPT0gaC0+ZHJ2W2gtPmhpZ2hlc3RfbHVuXSk7CisKIAkvKiBpbnZhbGlkYXRlIHRoZSBkZXZpY2VzIGFuZCBkZXJlZ2lzdGVyIHRoZSBkaXNrLiAgSWYgaXQgaXMgZGlzawogCSAqIHplcm8gZG8gbm90IGRlcmVnaXN0ZXIgaXQgYnV0IGp1c3QgemVybyBvdXQgaXQncyB2YWx1ZXMuICBUaGlzCiAJICogYWxsb3dzIHVzIHRvIGRlbGV0ZSBkaXNrIHplcm8gYnV0IGtlZXAgdGhlIGNvbnRyb2xsZXIgcmVnaXN0ZXJlZC4KIAkgKi8KIAlpZiAoaC0+Z2VuZGlza1swXSAhPSBkaXNrKSB7CiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0+cXVldWU7Ci0JCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKQorCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkgeworCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShoLCBkcnZfaW5kZXgsIDApOwogCQkJZGVsX2dlbmRpc2soZGlzayk7Ci0JCWlmIChxKSB7Ci0JCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKLQkJCS8qIFNldCBkcnYtPnF1ZXVlIHRvIE5VTEwgc28gdGhhdCB3ZSBkbyBub3QgdHJ5Ci0JCQkgKiB0byBjYWxsIGJsa19zdGFydF9xdWV1ZSBvbiB0aGlzIHF1ZXVlIGluIHRoZQotCQkJICogaW50ZXJydXB0IGhhbmRsZXIKLQkJCSAqLwotCQkJZHJ2LT5xdWV1ZSA9IE5VTEw7CiAJCX0KKwkJaWYgKHEpCisJCQlibGtfY2xlYW51cF9xdWV1ZShxKTsKIAkJLyogSWYgY2xlYXJfYWxsIGlzIHNldCB0aGVuIHdlIGFyZSBkZWxldGluZyB0aGUgbG9naWNhbAogCQkgKiBkcml2ZSwgbm90IGp1c3QgcmVmcmVzaGluZyBpdHMgaW5mby4gIEZvciBkcml2ZXMKIAkJICogb3RoZXIgdGhhbiBkaXNrIDAgd2Ugd2lsbCBjYWxsIHB1dF9kaXNrLiAgV2UgZG8gbm90CkBAIC0yMTA1LDM0ICsyMzYwLDIwIEBACiAJCX0KIAl9IGVsc2UgewogCQlzZXRfY2FwYWNpdHkoZGlzaywgMCk7CisJCWNjaXNzX2NsZWFyX2RyaXZlX2luZm8oZHJ2KTsKIAl9CiAKIAktLWgtPm51bV9sdW5zOwotCS8qIHplcm8gb3V0IHRoZSBkaXNrIHNpemUgaW5mbyAqLwotCWRydi0+bnJfYmxvY2tzID0gMDsKLQlkcnYtPmJsb2NrX3NpemUgPSAwOwotCWRydi0+aGVhZHMgPSAwOwotCWRydi0+c2VjdG9ycyA9IDA7Ci0JZHJ2LT5jeWxpbmRlcnMgPSAwOwotCWRydi0+cmFpZF9sZXZlbCA9IC0xOwkvKiBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgZmxhZyB2YXJpYWJsZSB0bwotCQkJCSAqIGluZGljYXRlIHRoYXQgdGhpcyBlbGVtZW50IG9mIHRoZSBkcml2ZQotCQkJCSAqIGFycmF5IGlzIGZyZWUuCi0JCQkJICovCiAKLQlpZiAoY2xlYXJfYWxsKSB7Ci0JCS8qIGNoZWNrIHRvIHNlZSBpZiBpdCB3YXMgdGhlIGxhc3QgZGlzayAqLwotCQlpZiAoZHJ2ID09IGgtPmRydiArIGgtPmhpZ2hlc3RfbHVuKSB7Ci0JCQkvKiBpZiBzbywgZmluZCB0aGUgbmV3IGhpZ2h0ZXN0IGx1biAqLwotCQkJaW50IGksIG5ld2hpZ2hlc3QgPSAtMTsKLQkJCWZvciAoaSA9IDA7IGkgPD0gaC0+aGlnaGVzdF9sdW47IGkrKykgewotCQkJCS8qIGlmIHRoZSBkaXNrIGhhcyBzaXplID4gMCwgaXQgaXMgYXZhaWxhYmxlICovCi0JCQkJaWYgKGgtPmRydltpXS5oZWFkcykKLQkJCQkJbmV3aGlnaGVzdCA9IGk7Ci0JCQl9Ci0JCQloLT5oaWdoZXN0X2x1biA9IG5ld2hpZ2hlc3Q7CisJLyogaWYgaXQgd2FzIHRoZSBsYXN0IGRpc2ssIGZpbmQgdGhlIG5ldyBoaWdodGVzdCBsdW4gKi8KKwlpZiAoY2xlYXJfYWxsICYmIHJlY2FsY3VsYXRlX2hpZ2hlc3RfbHVuKSB7CisJCWludCBpLCBuZXdoaWdoZXN0ID0gLTE7CisJCWZvciAoaSA9IDA7IGkgPD0gaC0+aGlnaGVzdF9sdW47IGkrKykgeworCQkJLyogaWYgdGhlIGRpc2sgaGFzIHNpemUgPiAwLCBpdCBpcyBhdmFpbGFibGUgKi8KKwkJCWlmIChoLT5kcnZbaV0gJiYgaC0+ZHJ2W2ldLT5oZWFkcykKKwkJCQluZXdoaWdoZXN0ID0gaTsKIAkJfQotCi0JCWRydi0+THVuSUQgPSAwOworCQloLT5oaWdoZXN0X2x1biA9IG5ld2hpZ2hlc3Q7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjQ3OSw4ICsyNzIwLDYgQEAKIAl9IGVsc2UgewkJLyogR2V0IGdlb21ldHJ5IGZhaWxlZCAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogcmVhZGluZyBnZW9tZXRyeSBmYWlsZWRcbiIpOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIgICAgICBoZWFkcz0lZCwgc2VjdG9ycz0lZCwgY3lsaW5kZXJzPSVkXG5cbiIsCi0JICAgICAgIGRydi0+aGVhZHMsIGRydi0+c2VjdG9ycywgZHJ2LT5jeWxpbmRlcnMpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjUxNCw5ICsyNzUzLDYgQEAKIAkJKnRvdGFsX3NpemUgPSAwOwogCQkqYmxvY2tfc2l6ZSA9IEJMT0NLX1NJWkU7CiAJfQotCWlmICgqdG90YWxfc2l6ZSAhPSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIgICAgICBibG9ja3M9ICVsbHUgYmxvY2tfc2l6ZT0gJWRcbiIsCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpKnRvdGFsX3NpemUrMSwgKmJsb2NrX3NpemUpOwogCWtmcmVlKGJ1Zik7CiB9CiAKQEAgLTI1NjgsNyArMjgwNCw4IEBACiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKIAlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKLQkJaWYgKGgtPmRydltsb2d2b2xdLkx1bklEID09IGRydi0+THVuSUQpIHsKKwkJaWYgKG1lbWNtcChoLT5kcnZbbG9ndm9sXS0+THVuSUQsIGRydi0+THVuSUQsCisJCQlzaXplb2YoZHJ2LT5MdW5JRCkpID09IDApIHsKIAkJCUZPVU5EID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMDUzLDggKzMyOTAsNyBAQAogCS8qIFRoZSBmaXJzdCAyIGJpdHMgYXJlIHJlc2VydmVkIGZvciBjb250cm9sbGVyIGVycm9yIHJlcG9ydGluZy4gKi8KIAljLT5IZWFkZXIuVGFnLmxvd2VyID0gKGMtPmNtZGluZGV4IDw8IDMpOwogCWMtPkhlYWRlci5UYWcubG93ZXIgfD0gMHgwNDsJLyogZmxhZyBmb3IgZGlyZWN0IGxvb2t1cC4gKi8KLQljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Wb2xJZCA9IGRydi0+THVuSUQ7Ci0JYy0+SGVhZGVyLkxVTi5Mb2dEZXYuTW9kZSA9IDE7CisJbWVtY3B5KCZjLT5IZWFkZXIuTFVOLCBkcnYtPkx1bklELCBzaXplb2YoZHJ2LT5MdW5JRCkpOwogCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTA7CS8vIDEyIGJ5dGUgY29tbWFuZHMgbm90IGluIEZXIHlldDsKIAljLT5SZXF1ZXN0LlR5cGUuVHlwZSA9IFRZUEVfQ01EOwkvLyBJdCBpcyBhIGNvbW1hbmQuCiAJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwpAQCAtMzIzMiwyMCArMzQ2OCwxMjEgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKKy8qKgorICogYWRkX3RvX3NjYW5fbGlzdCgpIC0gYWRkIGNvbnRyb2xsZXIgdG8gcmVzY2FuIHF1ZXVlCisgKiBAaDoJCSAgICAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogQWRkcyB0aGUgY29udHJvbGxlciB0byB0aGUgcmVzY2FuIHF1ZXVlIGlmIG5vdCBhbHJlYWR5IG9uIHRoZSBxdWV1ZS4KKyAqCisgKiByZXR1cm5zIDEgaWYgYWRkZWQgdG8gdGhlIHF1ZXVlLCAwIGlmIHNraXBwZWQgKGNvdWxkIGJlIG9uIHRoZQorICogcXVldWUgYWxyZWFkeSwgb3IgdGhlIGNvbnRyb2xsZXIgY291bGQgYmUgaW5pdGlhbGl6aW5nIG9yIHNodXR0aW5nCisgKiBkb3duKS4KKyAqKi8KK3N0YXRpYyBpbnQgYWRkX3RvX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaDsKKwlpbnQgZm91bmQgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGgtPmJ1c3lfaW5pdGlhbGl6aW5nKQorCQlyZXR1cm4gMDsKKworCWlmICghbXV0ZXhfdHJ5bG9jaygmaC0+YnVzeV9zaHV0dGluZ19kb3duKSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlc3RfaCwgJnNjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmb3VuZCAmJiAhaC0+YnVzeV9zY2FubmluZykgeworCQlJTklUX0NPTVBMRVRJT04oaC0+c2Nhbl93YWl0KTsKKwkJbGlzdF9hZGRfdGFpbCgmaC0+c2Nhbl9saXN0LCAmc2Nhbl9xKTsKKwkJcmV0ID0gMTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzY2FuX211dGV4KTsKKwltdXRleF91bmxvY2soJmgtPmJ1c3lfc2h1dHRpbmdfZG93bik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlbW92ZV9mcm9tX3NjYW5fbGlzdCgpIC0gcmVtb3ZlIGNvbnRyb2xsZXIgZnJvbSByZXNjYW4gcXVldWUKKyAqIEBoOgkJCSAgIFBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIuCisgKgorICogUmVtb3ZlcyB0aGUgY29udHJvbGxlciBmcm9tIHRoZSByZXNjYW4gcXVldWUgaWYgcHJlc2VudC4gQmxvY2tzIGlmCisgKiB0aGUgY29udHJvbGxlciBpcyBjdXJyZW50bHkgY29uZHVjdGluZyBhIHJlc2Nhbi4KKyAqKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX3NjYW5fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoKQoreworCXN0cnVjdCBjdGxyX2luZm8gKnRlc3RfaCwgKnRtcF9oOworCWludCBzY2FubmluZyA9IDA7CisKKwltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGVzdF9oLCB0bXBfaCwgJnNjYW5fcSwgc2Nhbl9saXN0KSB7CisJCWlmICh0ZXN0X2ggPT0gaCkgeworCQkJbGlzdF9kZWwoJmgtPnNjYW5fbGlzdCk7CisJCQljb21wbGV0ZV9hbGwoJmgtPnNjYW5fd2FpdCk7CisJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgmaC0+YnVzeV9zY2FubmluZykKKwkJc2Nhbm5pbmcgPSAwOworCW11dGV4X3VubG9jaygmc2Nhbl9tdXRleCk7CisKKwlpZiAoc2Nhbm5pbmcpCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmgtPnNjYW5fd2FpdCk7Cit9CisKKy8qKgorICogc2Nhbl90aHJlYWQoKSAtIGtlcm5lbCB0aHJlYWQgdXNlZCB0byByZXNjYW4gY29udHJvbGxlcnMKKyAqIEBkYXRhOgkgSWdub3JlZC4KKyAqCisgKiBBIGtlcm5lbCB0aHJlYWQgdXNlZCBzY2FuIGZvciBkcml2ZSB0b3BvbG9neSBjaGFuZ2VzIG9uCisgKiBjb250cm9sbGVycy4gVGhlIHRocmVhZCBwcm9jZXNzZXMgb25seSBvbmUgY29udHJvbGxlciBhdCBhIHRpbWUKKyAqIHVzaW5nIGEgcXVldWUuICBDb250cm9sbGVycyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlIHVzaW5nCisgKiBhZGRfdG9fc2Nhbl9saXN0KCkgYW5kIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUgZWl0aGVyIGFmdGVyIGRvbmUKKyAqIHByb2Nlc3Npbmcgb3IgdXNpbmcgcmVtb3ZlX2Zyb21fc2Nhbl9saXN0KCkuCisgKgorICogcmV0dXJucyAwLgorICoqLwogc3RhdGljIGludCBzY2FuX3RocmVhZCh2b2lkICpkYXRhKQogewotCWN0bHJfaW5mb190ICpoID0gZGF0YTsKLQlpbnQgcmM7Ci0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7Ci0JaC0+cmVzY2FuX3dhaXQgPSAmd2FpdDsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoOwogCi0JZm9yICg7OykgewotCQlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmd2FpdCk7CisJd2hpbGUgKDEpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGUoKTsKIAkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwotCQlpZiAoIXJjKQotCQkJcmVidWlsZF9sdW5fdGFibGUoaCwgMCk7CisKKwkJd2hpbGUgKDEpIHsKKwkJCW11dGV4X2xvY2soJnNjYW5fbXV0ZXgpOworCQkJaWYgKGxpc3RfZW1wdHkoJnNjYW5fcSkpIHsKKwkJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQloID0gbGlzdF9lbnRyeShzY2FuX3EubmV4dCwKKwkJCQkgICAgICAgc3RydWN0IGN0bHJfaW5mbywKKwkJCQkgICAgICAgc2Nhbl9saXN0KTsKKwkJCWxpc3RfZGVsKCZoLT5zY2FuX2xpc3QpOworCQkJaC0+YnVzeV9zY2FubmluZyA9IDE7CisJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCisJCQlpZiAoaCkgeworCQkJCXJlYnVpbGRfbHVuX3RhYmxlKGgsIDAsIDApOworCQkJCWNvbXBsZXRlX2FsbCgmaC0+c2Nhbl93YWl0KTsKKwkJCQltdXRleF9sb2NrKCZzY2FuX211dGV4KTsKKwkJCQloLT5idXN5X3NjYW5uaW5nID0gMDsKKwkJCQltdXRleF91bmxvY2soJnNjYW5fbXV0ZXgpOworCQkJfQorCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNjgsOCArMzYwNSw4IEBACiAJY2FzZSBSRVBPUlRfTFVOU19DSEFOR0VEOgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzcyVkOiByZXBvcnQgTFVOIGRhdGEgIgogCQkJImNoYW5nZWRcbiIsIGgtPmN0bHIpOwotCQlpZiAoaC0+cmVzY2FuX3dhaXQpCi0JCQljb21wbGV0ZShoLT5yZXNjYW5fd2FpdCk7CisJCWFkZF90b19zY2FuX2xpc3QoaCk7CisJCXdha2VfdXBfcHJvY2VzcyhjY2lzc19zY2FuX3RocmVhZCk7CiAJCXJldHVybiAxOwogCWJyZWFrOwogCWNhc2UgUE9XRVJfT1JfUkVTRVQ6CkBAIC0zNDIyLDcgKzM3NTksMjcgQEAKIAlfX3U2NCBjZmdfb2Zmc2V0OwogCV9fdTMyIGNmZ19iYXNlX2FkZHI7CiAJX191NjQgY2ZnX2Jhc2VfYWRkcl9pbmRleDsKLQlpbnQgaSwgZXJyOworCWludCBpLCBwcm9kX2luZGV4LCBlcnI7CisKKwlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8CisJCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2R1Y3RzKTsgaSsrKSB7CisJCS8qIFN0YW5kIGFzaWRlIGZvciBocHNhIGRyaXZlciBvbiByZXF1ZXN0ICovCisJCWlmIChjY2lzc19hbGxvd19ocHNhICYmIHByb2R1Y3RzW2ldLmJvYXJkX2lkID09IEhQU0FfQk9VTkRBUlkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKQorCQkJYnJlYWs7CisJfQorCXByb2RfaW5kZXggPSBpOworCWlmIChwcm9kX2luZGV4ID09IEFSUkFZX1NJWkUocHJvZHVjdHMpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkidW5yZWNvZ25pemVkIGJvYXJkIElEOiAweCUwOGx4LCBpZ25vcmluZy5cbiIsCisJCQkodW5zaWduZWQgbG9uZykgYm9hcmRfaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgY29udHJvbGxlciBoYXMgYmVlbiBkaXNhYmxlZCAqLwogCS8qIEJFRk9SRSB0cnlpbmcgdG8gZW5hYmxlIGl0ICovCkBAIC0zNDQ2LDExICszODAzLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKLQlzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKLQlib2FyZF9pZCA9ICgoKF9fdTMyKSAoc3Vic3lzdGVtX2RldmljZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8Ci0JCSAgICBzdWJzeXN0ZW1fdmVuZG9yX2lkKTsKLQogI2lmZGVmIENDSVNTX0RFQlVHCiAJcHJpbnRrKCJjb21tYW5kID0gJXhcbiIsIGNvbW1hbmQpOwogCXByaW50aygiaXJxID0gJXhcbiIsIHBkZXYtPmlycSk7CkBAIC0zNDg5LDcgKzM4NDEsNyBAQAogCQlpZiAoc2NyYXRjaHBhZCA9PSBDQ0lTU19GSVJNV0FSRV9SRUFEWSkKIAkJCWJyZWFrOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gMTApOwkvKiB3YWl0IDEwMG1zICovCisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxMDApKTsJLyogd2FpdCAxMDBtcyAqLwogCX0KIAlpZiAoc2NyYXRjaHBhZCAhPSBDQ0lTU19GSVJNV0FSRV9SRUFEWSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogQm9hcmQgbm90IHJlYWR5LiAgVGltZWQgb3V0LlxuIik7CkBAIC0zNTM2LDE0ICszODg4LDkgQEAKIAkgKiBsZWF2ZSBhIGxpdHRsZSByb29tIGZvciBpb2N0bCBjYWxscy4KIAkgKi8KIAljLT5tYXhfY29tbWFuZHMgPSByZWFkbCgmKGMtPmNmZ3RhYmxlLT5DbWRzT3V0TWF4KSk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvZHVjdHMpOyBpKyspIHsKLQkJaWYgKGJvYXJkX2lkID09IHByb2R1Y3RzW2ldLmJvYXJkX2lkKSB7Ci0JCQljLT5wcm9kdWN0X25hbWUgPSBwcm9kdWN0c1tpXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ldLmFjY2Vzcyk7Ci0JCQljLT5ucl9jbWRzID0gYy0+bWF4X2NvbW1hbmRzIC0gNDsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCWMtPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW3Byb2RfaW5kZXhdLnByb2R1Y3RfbmFtZTsKKwljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW3Byb2RfaW5kZXhdLmFjY2Vzcyk7CisJYy0+bnJfY21kcyA9IGMtPm1heF9jb21tYW5kcyAtIDQ7CiAJaWYgKChyZWFkYigmYy0+Y2ZndGFibGUtPlNpZ25hdHVyZVswXSkgIT0gJ0MnKSB8fAogCSAgICAocmVhZGIoJmMtPmNmZ3RhYmxlLT5TaWduYXR1cmVbMV0pICE9ICdJJykgfHwKIAkgICAgKHJlYWRiKCZjLT5jZmd0YWJsZS0+U2lnbmF0dXJlWzJdKSAhPSAnUycpIHx8CkBAIC0zNTUyLDI3ICszODk5LDYgQEAKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KLQkvKiBXZSBkaWRuJ3QgZmluZCB0aGUgY29udHJvbGxlciBpbiBvdXIgbGlzdC4gV2Uga25vdyB0aGUKLQkgKiBzaWduYXR1cmUgaXMgdmFsaWQuIElmIGl0J3MgYW4gSFAgZGV2aWNlIGxldCdzIHRyeSB0bwotCSAqIGJpbmQgdG8gdGhlIGRldmljZSBhbmQgZmlyZSBpdCB1cC4gT3RoZXJ3aXNlIHdlIGJhaWwuCi0JICovCi0JaWYgKGkgPT0gQVJSQVlfU0laRShwcm9kdWN0cykpIHsKLQkJaWYgKHN1YnN5c3RlbV92ZW5kb3JfaWQgPT0gUENJX1ZFTkRPUl9JRF9IUCkgewotCQkJYy0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbaS0xXS5wcm9kdWN0X25hbWU7Ci0JCQljLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2ktMV0uYWNjZXNzKTsKLQkJCWMtPm5yX2NtZHMgPSBjLT5tYXhfY29tbWFuZHMgLSA0OwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFRoaXMgaXMgYW4gdW5rbm93biAiCi0JCQkJIlNtYXJ0IEFycmF5IGNvbnRyb2xsZXIuXG4iCi0JCQkJImNjaXNzOiBQbGVhc2UgdXBkYXRlIHRvIHRoZSBsYXRlc3QgZHJpdmVyICIKLQkJCQkiYXZhaWxhYmxlIGZyb20gd3d3LmhwLmNvbS5cbiIpOwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IFNvcnJ5LCBJIGRvbid0IGtub3cgaG93IgotCQkJCSIgdG8gYWNjZXNzIHRoZSBTbWFydCBBcnJheSBjb250cm9sbGVyICUwOGx4XG4iCi0JCQkJCSwgKHVuc2lnbmVkIGxvbmcpYm9hcmRfaWQpOwotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKLQkJfQotCX0KICNpZmRlZiBDT05GSUdfWDg2CiAJewogCQkvKiBOZWVkIHRvIGVuYWJsZSBwcmVmZXRjaCBpbiB0aGUgU0NTSSBjb3JlIGZvciA2NDAwIGluIHg4NiAqLwpAQCAtMzYxNSw3ICszOTQxLDcgQEAKIAkJCWJyZWFrOwogCQkvKiBkZWxheSBhbmQgdHJ5IGFnYWluICovCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoMTApOworCQlzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoMSkpOwogCX0KIAogI2lmZGVmIENDSVNTX0RFQlVHCkBAIC0zNjY5LDE1ICszOTk1LDE2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2hiYShpbnQgaSkKK3N0YXRpYyB2b2lkIGZyZWVfaGJhKGludCBuKQogewotCWN0bHJfaW5mb190ICpwID0gaGJhW2ldOwotCWludCBuOworCWN0bHJfaW5mb190ICpoID0gaGJhW25dOworCWludCBpOwogCi0JaGJhW2ldID0gTlVMTDsKLQlmb3IgKG4gPSAwOyBuIDwgQ0lTU19NQVhfTFVOOyBuKyspCi0JCXB1dF9kaXNrKHAtPmdlbmRpc2tbbl0pOwotCWtmcmVlKHApOworCWhiYVtuXSA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IGgtPmhpZ2hlc3RfbHVuICsgMTsgaSsrKQorCQlpZiAoaC0+Z2VuZGlza1tpXSAhPSBOVUxMKQorCQkJcHV0X2Rpc2soaC0+Z2VuZGlza1tpXSk7CisJa2ZyZWUoaCk7CiB9CiAKIC8qIFNlbmQgYSBtZXNzYWdlIENEQiB0byB0aGUgZmlybXdhcmUuICovCkBAIC0zOTE4LDE0ICs0MjQ1LDE3IEBACiAJaGJhW2ldLT5idXN5X2luaXRpYWxpemluZyA9IDE7CiAJSU5JVF9ITElTVF9IRUFEKCZoYmFbaV0tPmNtcFEpOwogCUlOSVRfSExJU1RfSEVBRCgmaGJhW2ldLT5yZXFRKTsKKwltdXRleF9pbml0KCZoYmFbaV0tPmJ1c3lfc2h1dHRpbmdfZG93bik7CiAKIAlpZiAoY2Npc3NfcGNpX2luaXQoaGJhW2ldLCBwZGV2KSAhPSAwKQotCQlnb3RvIGNsZWFuMDsKKwkJZ290byBjbGVhbl9ub19yZWxlYXNlX3JlZ2lvbnM7CiAKIAlzcHJpbnRmKGhiYVtpXS0+ZGV2bmFtZSwgImNjaXNzJWQiLCBpKTsKIAloYmFbaV0tPmN0bHIgPSBpOwogCWhiYVtpXS0+cGRldiA9IHBkZXY7CiAKKwlpbml0X2NvbXBsZXRpb24oJmhiYVtpXS0+c2Nhbl93YWl0KTsKKwogCWlmIChjY2lzc19jcmVhdGVfaGJhX3N5c2ZzX2VudHJ5KGhiYVtpXSkpCiAJCWdvdG8gY2xlYW4wOwogCkBAIC00MDAxLDggKzQzMzEsNyBAQAogCWhiYVtpXS0+bnVtX2x1bnMgPSAwOwogCWhiYVtpXS0+aGlnaGVzdF9sdW4gPSAtMTsKIAlmb3IgKGogPSAwOyBqIDwgQ0lTU19NQVhfTFVOOyBqKyspIHsKLQkJaGJhW2ldLT5kcnZbal0ucmFpZF9sZXZlbCA9IC0xOwotCQloYmFbaV0tPmRydltqXS5xdWV1ZSA9IE5VTEw7CisJCWhiYVtpXS0+ZHJ2W2pdID0gTlVMTDsKIAkJaGJhW2ldLT5nZW5kaXNrW2pdID0gTlVMTDsKIAl9CiAKQEAgLTQwMzUsMTQgKzQzNjQsOCBAQAogCiAJaGJhW2ldLT5jY2lzc19tYXhfc2VjdG9ycyA9IDIwNDg7CiAKKwlyZWJ1aWxkX2x1bl90YWJsZShoYmFbaV0sIDEsIDApOwogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwotCi0JcmVidWlsZF9sdW5fdGFibGUoaGJhW2ldLCAxKTsKLQloYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkID0ga3RocmVhZF9ydW4oc2Nhbl90aHJlYWQsIGhiYVtpXSwKLQkJCQkiY2Npc3Nfc2NhbiUwMmQiLCBpKTsKLQlpZiAoSVNfRVJSKGhiYVtpXS0+Y2Npc3Nfc2Nhbl90aHJlYWQpKQotCQlyZXR1cm4gUFRSX0VSUihoYmFbaV0tPmNjaXNzX3NjYW5fdGhyZWFkKTsKLQogCXJldHVybiAxOwogCiBjbGVhbjQ6CkBAIC00MDYyLDE4ICs0Mzg1LDE0IEBACiBjbGVhbjE6CiAJY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoaGJhW2ldKTsKIGNsZWFuMDoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworY2xlYW5fbm9fcmVsZWFzZV9yZWdpb25zOgogCWhiYVtpXS0+YnVzeV9pbml0aWFsaXppbmcgPSAwOwotCS8qIGNsZWFudXAgYW55IHF1ZXVlcyB0aGF0IG1heSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKi8KLQlmb3IgKGo9MDsgaiA8PSBoYmFbaV0tPmhpZ2hlc3RfbHVuOyBqKyspewotCQlkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2ID0gJihoYmFbaV0tPmRydltqXSk7Ci0JCWlmIChkcnYtPnF1ZXVlKQotCQkJYmxrX2NsZWFudXBfcXVldWUoZHJ2LT5xdWV1ZSk7Ci0JfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgb21pdCBwY2lfZGlzYWJsZV9kZXZpY2UoKTogaXQgZG9lcyBzb21ldGhpbmcgbmFzdHkgdG8KIAkgKiBTbWFydCBBcnJheSBjb250cm9sbGVycyB0aGF0IHBjaV9lbmFibGVfZGV2aWNlIGRvZXMgbm90IHVuZG8KIAkgKi8KLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlmcmVlX2hiYShpKTsKIAlyZXR1cm4gLTE7CkBAIC00MTI1LDggKzQ0NDQsOSBAQAogCQlyZXR1cm47CiAJfQogCi0Ja3RocmVhZF9zdG9wKGhiYVtpXS0+Y2Npc3Nfc2Nhbl90aHJlYWQpOworCW11dGV4X2xvY2soJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKIAorCXJlbW92ZV9mcm9tX3NjYW5fbGlzdChoYmFbaV0pOwogCXJlbW92ZV9wcm9jX2VudHJ5KGhiYVtpXS0+ZGV2bmFtZSwgcHJvY19jY2lzcyk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoaGJhW2ldLT5tYWpvciwgaGJhW2ldLT5kZXZuYW1lKTsKIApAQCAtNDEzNiw4ICs0NDU2LDEwIEBACiAJCWlmIChkaXNrKSB7CiAJCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stPnF1ZXVlOwogCi0JCQlpZiAoZGlzay0+ZmxhZ3MgJiBHRU5IRF9GTF9VUCkKKwkJCWlmIChkaXNrLT5mbGFncyAmIEdFTkhEX0ZMX1VQKSB7CisJCQkJY2Npc3NfZGVzdHJveV9sZF9zeXNmc19lbnRyeShoYmFbaV0sIGosIDEpOwogCQkJCWRlbF9nZW5kaXNrKGRpc2spOworCQkJfQogCQkJaWYgKHEpCiAJCQkJYmxrX2NsZWFudXBfcXVldWUocSk7CiAJCX0KQEAgLTQxNzAsNiArNDQ5Miw3IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJY2Npc3NfZGVzdHJveV9oYmFfc3lzZnNfZW50cnkoaGJhW2ldKTsKKwltdXRleF91bmxvY2soJmhiYVtpXS0+YnVzeV9zaHV0dGluZ19kb3duKTsKIAlmcmVlX2hiYShpKTsKIH0KIApAQCAtNDIwMiwxNSArNDUyNSwyNSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwkvKiBTdGFydCB0aGUgc2NhbiB0aHJlYWQgKi8KKwljY2lzc19zY2FuX3RocmVhZCA9IGt0aHJlYWRfcnVuKHNjYW5fdGhyZWFkLCBOVUxMLCAiY2Npc3Nfc2NhbiIpOworCWlmIChJU19FUlIoY2Npc3Nfc2Nhbl90aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIoY2Npc3Nfc2Nhbl90aHJlYWQpOworCQlnb3RvIGVycl9idXNfdW5yZWdpc3RlcjsKKwl9CisKIAkvKiBSZWdpc3RlciBmb3Igb3VyIFBDSSBkZXZpY2VzICovCiAJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY2Npc3NfcGNpX2RyaXZlcik7CiAJaWYgKGVycikKLQkJZ290byBlcnJfYnVzX3JlZ2lzdGVyOworCQlnb3RvIGVycl90aHJlYWRfc3RvcDsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiAKLWVycl9idXNfcmVnaXN0ZXI6CitlcnJfdGhyZWFkX3N0b3A6CisJa3RocmVhZF9zdG9wKGNjaXNzX3NjYW5fdGhyZWFkKTsKK2Vycl9idXNfdW5yZWdpc3RlcjoKIAlidXNfdW5yZWdpc3RlcigmY2Npc3NfYnVzX3R5cGUpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNDIyNyw2ICs0NTYwLDcgQEAKIAkJCWNjaXNzX3JlbW92ZV9vbmUoaGJhW2ldLT5wZGV2KTsKIAkJfQogCX0KKwlrdGhyZWFkX3N0b3AoY2Npc3Nfc2Nhbl90aHJlYWQpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvY2Npc3MiLCBOVUxMKTsKIAlidXNfdW5yZWdpc3RlcigmY2Npc3NfYnVzX3R5cGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5oIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCmluZGV4IDA2YTVkYjIuLjMxNTI0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIENDSVNTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgImNjaXNzX2NtZC5oIgogCkBAIC0yOSw3ICszMCw3IEBACiB9OwogdHlwZWRlZiBzdHJ1Y3QgX2RyaXZlX2luZm9fc3RydWN0CiB7Ci0gCV9fdTMyICAgTHVuSUQ7CQorCXVuc2lnbmVkIGNoYXIgTHVuSURbOF07CiAJaW50IAl1c2FnZV9jb3VudDsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CiAJc2VjdG9yX3QgbnJfYmxvY2tzOwpAQCAtNTEsNiArNTIsNyBAQAogCWNoYXIgdmVuZG9yW1ZFTkRPUl9MRU4gKyAxXTsgLyogU0NTSSB2ZW5kb3Igc3RyaW5nICovCiAJY2hhciBtb2RlbFtNT0RFTF9MRU4gKyAxXTsgICAvKiBTQ1NJIG1vZGVsIHN0cmluZyAqLwogCWNoYXIgcmV2W1JFVl9MRU4gKyAxXTsgICAgICAgLyogU0NTSSByZXZpc2lvbiBzdHJpbmcgKi8KKwljaGFyIGRldmljZV9pbml0aWFsaXplZDsgICAgIC8qIGluZGljYXRlcyB3aGV0aGVyIGRldiBpcyBpbml0aWFsaXplZCAqLwogfSBkcml2ZV9pbmZvX3N0cnVjdDsKIAogc3RydWN0IGN0bHJfaW5mbyAKQEAgLTg2LDcgKzg4LDcgQEAKIAlCWVRFCWNjaXNzX3JlYWRfY2FwYWNpdHk7CiAKIAkvLyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGxvZ2ljYWwgdm9sdW1lCi0JZHJpdmVfaW5mb19zdHJ1Y3QgZHJ2W0NJU1NfTUFYX0xVTl07CisJZHJpdmVfaW5mb19zdHJ1Y3QgKmRydltDSVNTX01BWF9MVU5dOwogCiAJc3RydWN0IGFjY2Vzc19tZXRob2QgYWNjZXNzOwogCkBAIC0xMDgsNiArMTEwLDggQEAKIAlpbnQJCQlucl9mcmVlczsgCiAJaW50CQkJYnVzeV9jb25maWd1cmluZzsKIAlpbnQJCQlidXN5X2luaXRpYWxpemluZzsKKwlpbnQJCQlidXN5X3NjYW5uaW5nOworCXN0cnVjdCBtdXRleAkJYnVzeV9zaHV0dGluZ19kb3duOwogCiAJLyogVGhpcyBlbGVtZW50IGhvbGRzIHRoZSB6ZXJvIGJhc2VkIHF1ZXVlIG51bWJlciBvZiB0aGUgbGFzdAogCSAqIHF1ZXVlIHRvIGJlIHN0YXJ0ZWQuICBJdCBpcyB1c2VkIGZvciBmYWlybmVzcy4KQEAgLTEyMiw4ICsxMjYsOCBAQAogCS8qIGFuZCBzYXZlZCBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwogI2VuZGlmCiAJdW5zaWduZWQgY2hhciBhbGl2ZTsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqcmVzY2FuX3dhaXQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpjY2lzc19zY2FuX3RocmVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNjYW5fbGlzdDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzY2FuX3dhaXQ7CiAJc3RydWN0IGRldmljZSBkZXY7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKaW5kZXggYjgyZDQzOC4uNjQyMjY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpAQCAtMTc3LDcgKzE3OCw2IEBACiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIHZvaWQgaWRhX3Byb2Npbml0KGludCBpKTsKLXN0YXRpYyBpbnQgaWRhX3Byb2NfZ2V0X2luZm8oY2hhciAqYnVmZmVyLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwogI2Vsc2UKIHN0YXRpYyB2b2lkIGlkYV9wcm9jaW5pdChpbnQgaSkge30KICNlbmRpZgpAQCAtMjA2LDYgKzIwNiw3IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19hcnJheTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkYV9wcm9jX2ZvcHM7CiAKIC8qCiAgKiBHZXQgdXMgYSBmaWxlIGluIC9wcm9jL2FycmF5IHRoYXQgc2F5cyBzb21ldGhpbmcgYWJvdXQgZWFjaCBjb250cm9sbGVyLgpAQCAtMjE4LDE5ICsyMTksMTYgQEAKIAkJaWYgKCFwcm9jX2FycmF5KSByZXR1cm47CiAJfQogCi0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeShoYmFbaV0tPmRldm5hbWUsIDAsIHByb2NfYXJyYXksCi0JCQkgICAgICAgaWRhX3Byb2NfZ2V0X2luZm8sIGhiYVtpXSk7CisJcHJvY19jcmVhdGVfZGF0YShoYmFbaV0tPmRldm5hbWUsIDAsIHByb2NfYXJyYXksICZpZGFfcHJvY19mb3BzLCBoYmFbaV0pOwogfQogCiAvKgogICogUmVwb3J0IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY29udHJvbGxlci4KICAqLwotc3RhdGljIGludCBpZGFfcHJvY19nZXRfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaWRhX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0Jb2ZmX3QgcG9zID0gMDsKLQlvZmZfdCBsZW4gPSAwOwotCWludCBzaXplLCBpLCBjdGxyOwotCWN0bHJfaW5mb190ICpoID0gKGN0bHJfaW5mb190KilkYXRhOworCWludCBpLCBjdGxyOworCWN0bHJfaW5mb190ICpoID0gKGN0bHJfaW5mb190KiltLT5wcml2YXRlOwogCWRydl9pbmZvX3QgKmRydjsKICNpZmRlZiBDUFFfUFJPQ19QUklOVF9RVUVVRVMKIAljbWRsaXN0X3QgKmM7CkBAIC0yMzgsNyArMjM2LDcgQEAKICNlbmRpZgogCiAJY3RsciA9IGgtPmN0bHI7Ci0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyLCAiJXM6ICBDb21wYXEgJXMgQ29udHJvbGxlclxuIgorCXNlcV9wcmludGYobSwgIiVzOiAgQ29tcGFxICVzIENvbnRyb2xsZXJcbiIKIAkJIiAgICAgICBCb2FyZCBJRDogMHglMDhseFxuIgogCQkiICAgICAgIEZpcm13YXJlIFJldmlzaW9uOiAlYyVjJWMlY1xuIgogCQkiICAgICAgIENvbnRyb2xsZXIgU2lnOiAweCUwOGx4XG4iCkBAIC0yNTgsNTUgKzI1Niw1NCBAQAogCQloLT5sb2dfZHJpdmVzLCBoLT5waHlzX2RyaXZlcywKIAkJaC0+UWRlcHRoLCBoLT5tYXhRc2luY2Vpbml0KTsKIAotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKLQkKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiTG9naWNhbCBEcml2ZSBJbmZvOlxuIik7Ci0JcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCXNlcV9wdXRzKG0sICJMb2dpY2FsIERyaXZlIEluZm86XG4iKTsKIAogCWZvcihpPTA7IGk8aC0+bG9nX2RyaXZlczsgaSsrKSB7CiAJCWRydiA9ICZoLT5kcnZbaV07Ci0JCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJpZGEvYyVkZCVkOiBibGtzej0lZCBucl9ibGtzPSVkXG4iLAorCQlzZXFfcHJpbnRmKG0sICJpZGEvYyVkZCVkOiBibGtzej0lZCBucl9ibGtzPSVkXG4iLAogCQkJCWN0bHIsIGksIGRydi0+YmxrX3NpemUsIGRydi0+bnJfYmxrcyk7Ci0JCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKIAl9CiAKICNpZmRlZiBDUFFfUFJPQ19QUklOVF9RVUVVRVMKIAlzcGluX2xvY2tfaXJxc2F2ZShJREFfTE9DSyhoLT5jdGxyKSwgZmxhZ3MpOyAKLQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiXG5DdXJyZW50IFF1ZXVlczpcbiIpOwotCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0cyhtLCAiXG5DdXJyZW50IFF1ZXVlczpcbiIpOwogCiAJYyA9IGgtPnJlcVE7Ci0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgInJlcVEgPSAlcCIsIGMpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3ByaW50ZihtLCAicmVxUSA9ICVwIiwgYyk7CiAJaWYgKGMpIGM9Yy0+bmV4dDsKIAl3aGlsZShjICYmIGMgIT0gaC0+cmVxUSkgewotCQlzaXplID0gc3ByaW50ZihidWZmZXIrbGVuLCAiLT4lcCIsIGMpOwotCQlwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJCXNlcV9wcmludGYobSwgIi0+JXAiLCBjKTsKIAkJYz1jLT5uZXh0OwogCX0KIAogCWMgPSBoLT5jbXBROwotCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICJcbmNtcFEgPSAlcCIsIGMpOyBwb3MgKz0gc2l6ZTsgbGVuICs9IHNpemU7CisJc2VxX3ByaW50ZihtLCAiXG5jbXBRID0gJXAiLCBjKTsKIAlpZiAoYykgYz1jLT5uZXh0OwogCXdoaWxlKGMgJiYgYyAhPSBoLT5jbXBRKSB7Ci0JCXNpemUgPSBzcHJpbnRmKGJ1ZmZlcitsZW4sICItPiVwIiwgYyk7Ci0JCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwkJc2VxX3ByaW50ZihtLCAiLT4lcCIsIGMpOwogCQljPWMtPm5leHQ7CiAJfQogCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIlxuIik7IHBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKElEQV9MT0NLKGgtPmN0bHIpLCBmbGFncyk7IAogI2VuZGlmCi0Jc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIm5yX2FsbG9jcyA9ICVkXG5ucl9mcmVlcyA9ICVkXG4iLAorCXNlcV9wcmludGYobSwgIm5yX2FsbG9jcyA9ICVkXG5ucl9mcmVlcyA9ICVkXG4iLAogCQkJaC0+bnJfYWxsb2NzLCBoLT5ucl9mcmVlcyk7Ci0JcG9zICs9IHNpemU7IGxlbiArPSBzaXplOwotCi0JKmVvZiA9IDE7Ci0JKnN0YXJ0ID0gYnVmZmVyK29mZnNldDsKLQlsZW4gLT0gb2Zmc2V0OwotCWlmIChsZW4+bGVuZ3RoKQotCQlsZW4gPSBsZW5ndGg7Ci0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpZGFfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpZGFfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRhX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaWRhX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoZWlzYSwgaW50LCBOVUxMLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggZWRkYTllYS4uYmQxMTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTk0OSw3ICs5NDksNyBAQAogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7CiAJLyogVGhpcyBpcyBzYWZlOiBvcGVuKCkgaXMgc3RpbGwgaG9sZGluZyBhIHJlZmVyZW5jZS4gKi8KIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLQlpZiAobWF4X3BhcnQgPiAwKQorCWlmIChtYXhfcGFydCA+IDAgJiYgYmRldikKIAkJaW9jdGxfYnlfYmRldihiZGV2LCBCTEtSUlBBUlQsIDApOwogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdmlydGlvX2Jsay5jIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKaW5kZXggNDNmMTkzOC4uNTEwNDJmMGJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay92aXJ0aW9fYmxrLmMKQEAgLTMsNyArMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2Jsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKQEAgLTE4MywzNCArMTgyLDYgQEAKIAkJdmJsay0+dnEtPnZxX29wcy0+a2ljayh2YmxrLT52cSk7CiB9CiAKLS8qIHJldHVybiBBVEEgaWRlbnRpZnkgZGF0YQotICovCi1zdGF0aWMgaW50IHZpcnRibGtfaWRlbnRpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHZvaWQgKmFyZ3ApCi17Ci0Jc3RydWN0IHZpcnRpb19ibGsgKnZibGsgPSBkaXNrLT5wcml2YXRlX2RhdGE7Ci0Jdm9pZCAqb3BhcXVlOwotCWludCBlcnIgPSAtRU5PTUVNOwotCi0Jb3BhcXVlID0ga21hbGxvYyhWSVJUSU9fQkxLX0lEX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9wYXF1ZSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSB2aXJ0aW9fY29uZmlnX2J1Zih2YmxrLT52ZGV2LCBWSVJUSU9fQkxLX0ZfSURFTlRJRlksCi0JCW9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZywgaWRlbnRpZnkpLCBvcGFxdWUsCi0JCVZJUlRJT19CTEtfSURfQllURVMpOwotCi0JaWYgKGVycikKLQkJZ290byBvdXRfa2ZyZWU7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZ3AsIG9wYXF1ZSwgVklSVElPX0JMS19JRF9CWVRFUykpCi0JCWVyciA9IC1FRkFVTFQ7Ci0KLW91dF9rZnJlZToKLQlrZnJlZShvcGFxdWUpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyB2b2lkIHZpcnRibGtfcHJlcGFyZV9mbHVzaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKIHsKIAlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfTElOVVhfQkxPQ0s7CkBAIC0yMjIsMTAgKzE5Myw2IEBACiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LT5iZF9kaXNrOwogCXN0cnVjdCB2aXJ0aW9fYmxrICp2YmxrID0gZGlzay0+cHJpdmF0ZV9kYXRhOwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopZGF0YTsKLQotCWlmIChjbWQgPT0gSERJT19HRVRfSURFTlRJVFkpCi0JCXJldHVybiB2aXJ0YmxrX2lkZW50aWZ5KGRpc2ssIGFyZ3ApOwogCiAJLyoKIAkgKiBPbmx5IGFsbG93IHRoZSBnZW5lcmljIFNDU0kgaW9jdGxzIGlmIHRoZSBob3N0IGNhbiBzdXBwb3J0IGl0LgpAQCAtMjMzLDcgKzIwMCw4IEBACiAJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmJsay0+dmRldiwgVklSVElPX0JMS19GX1NDU0kpKQogCQlyZXR1cm4gLUVOT1RUWTsKIAotCXJldHVybiBzY3NpX2NtZF9pb2N0bChkaXNrLT5xdWV1ZSwgZGlzaywgbW9kZSwgY21kLCBhcmdwKTsKKwlyZXR1cm4gc2NzaV9jbWRfaW9jdGwoZGlzay0+cXVldWUsIGRpc2ssIG1vZGUsIGNtZCwKKwkJCSAgICAgICh2b2lkIF9fdXNlciAqKWRhdGEpOwogfQogCiAvKiBXZSBwcm92aWRlIGdldGdlbyBvbmx5IHRvIHBsZWFzZSBzb21lIG9sZCBib290bG9hZGVyL3BhcnRpdGlvbmluZyB0b29scyAqLwpAQCAtMzMyLDcgKzMwMCw2IEBACiAJfQogCiAJdmJsay0+ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHZibGs7Ci0JcXVldWVfZmxhZ19zZXRfdW5sb2NrZWQoUVVFVUVfRkxBR19WSVJULCB2YmxrLT5kaXNrLT5xdWV1ZSk7CiAKIAlpZiAoaW5kZXggPCAyNikgewogCQlzcHJpbnRmKHZibGstPmRpc2stPmRpc2tfbmFtZSwgInZkJWMiLCAnYScgKyBpbmRleCAlIDI2KTsKQEAgLTQ0NSw3ICs0MTIsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBmZWF0dXJlc1tdID0gewogCVZJUlRJT19CTEtfRl9CQVJSSUVSLCBWSVJUSU9fQkxLX0ZfU0VHX01BWCwgVklSVElPX0JMS19GX1NJWkVfTUFYLAogCVZJUlRJT19CTEtfRl9HRU9NRVRSWSwgVklSVElPX0JMS19GX1JPLCBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUsCi0JVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9JREVOVElGWSwgVklSVElPX0JMS19GX0ZMVVNICisJVklSVElPX0JMS19GX1NDU0ksIFZJUlRJT19CTEtfRl9GTFVTSAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCmluZGV4IDdiYTkxYWEuLjQ0YmM4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtNTkxLDYgKzU5MSw3IEBACiAJCXJldHVybiAwOwogCiAJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmZGF0YS0+d2FrZXIpOwogCiAJY2xlYXJfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAljbGVhcl9iaXQoQlRVU0JfQlVMS19SVU5OSU5HLCAmZGF0YS0+ZmxhZ3MpOwpAQCAtNTk5LDExICs2MDAsMTMgQEAKIAlidHVzYl9zdG9wX3RyYWZmaWMoZGF0YSk7CiAJZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRhdGEtPmludGYpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gMDsKKwkJZ290byBmYWlsZWQ7CiAKIAlkYXRhLT5pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7CiAKK2ZhaWxlZDoKKwl1c2Jfc2N1dHRsZV9hbmNob3JlZF91cmJzKCZkYXRhLT5kZWZlcnJlZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggMDhhNmY1MC4uNmFhZDk5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBjb25maWcgU1gKIAl0cmlzdGF0ZSAiU3BlY2lhbGl4IFNYIChhbmQgU0kpIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNFUklBTF9OT05TVEFOREFSRCAmJiAoUENJIHx8IEVJU0EgfHwgSVNBKQorCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJEICYmIChQQ0kgfHwgRUlTQSB8fCBJU0EpICYmIEJST0tFTgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTWCBhbmQgU0kgbXVsdGlwb3J0IHNlcmlhbCBjYXJkcy4KIAkgIFBsZWFzZSByZWFkIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vc2VyaWFsL3N4LnR4dD4gZm9yIGRldGFpbHMuCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogY29uZmlnIFJJTwogCXRyaXN0YXRlICJTcGVjaWFsaXggUklPIHN5c3RlbSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0VSSUFMX05PTlNUQU5EQVJECisJZGVwZW5kcyBvbiBTRVJJQUxfTk9OU1RBTkRBUkQgJiYgQlJPS0VOCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNwZWNpYWxpeCBSSU8sIGEgc21hcnQgc2VyaWFsIGNhcmQgd2hpY2gKIAkgIGRyaXZlcyBhbiBvdXRib2FyZCBib3ggdGhhdCBjYW4gc3VwcG9ydCB1cCB0byAxMjggcG9ydHMuICBQcm9kdWN0CkBAIC0zOTUsNyArMzk1LDcgQEAKIAogY29uZmlnIEEyMjMyCiAJdHJpc3RhdGUgIkNvbW1vZG9yZSBBMjIzMiBzZXJpYWwgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBaT1JSTyAmJiBCUk9LRU5fT05fU01QCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgWk9SUk8gJiYgQlJPS0VOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gc3VwcG9ydHMgdGhlIDIyMzIgNy1wb3J0IHNlcmlhbCBjYXJkIHNoaXBwZWQgd2l0aCB0aGUKIAkgIEFtaWdhIDIwMDAgYW5kIG90aGVyIFpvcnJvLWJ1cyBtYWNoaW5lcywgZGF0aW5nIGZyb20gMTk4OS4gIEF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oIGIvZHJpdmVycy9jaGFyL2FncC9hZ3AuaAppbmRleCBkNmYzNmMwLi44NzBmMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWdwLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogc3RydWN0IGFncF9icmlkZ2VfZGF0YSB7CiAJY29uc3Qgc3RydWN0IGFncF92ZXJzaW9uICp2ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCBhZ3BfYnJpZGdlX2RyaXZlciAqZHJpdmVyOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogCXZvaWQgKnByZXZpb3VzX3NpemU7CiAJdm9pZCAqY3VycmVudF9zaXplOwogCXZvaWQgKmRldl9wcml2YXRlX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbHBoYS1hZ3AuYwppbmRleCA1ZWE0ZGE4Li5kZDg0YWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FscGhhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxwaGEtYWdwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAl7IDAsIDAsIDAgfSwgLyogZmlsbGVkIGluIGJ5IGFscGhhX2NvcmVfYWdwX3NldHVwICovCiB9OwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYWxwaGFfY29yZV9hZ3Bfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhbHBoYV9jb3JlX2FncF92bV9vcHMgPSB7CiAJLmZhdWx0ID0gYWxwaGFfY29yZV9hZ3Bfdm1fZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA0MDY4NDY3Li4xMGUxZjAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTExNjEsMTIgKzExNjEsNiBAQAogCiAJaW50ZWxfaTl4eF9zZXR1cF9mbHVzaCgpOwogCi0jaWZkZWYgVVNFX1BDSV9ETUFfQVBJIAotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGludGVsX3ByaXZhdGUucGNpZGV2LCBETUFfQklUX01BU0soMzYpKSkKLQkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKLQkJCSJzZXQgZ2Z4IGRldmljZSBkbWEgbWFzayAzNmJpdCBmYWlsZWQhXG4iKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NTYsNiArMjQ1MCwxMSBAQAogCQkJCSZicmlkZ2UtPm1vZGUpOwogCX0KIAorCWlmIChicmlkZ2UtPmRyaXZlci0+bWFza19tZW1vcnkgPT0gaW50ZWxfaTk2NV9tYXNrX21lbW9yeSkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2soaW50ZWxfcHJpdmF0ZS5wY2lkZXYsIERNQV9CSVRfTUFTSygzNikpKQorCQkJZGV2X2VycigmaW50ZWxfcHJpdmF0ZS5wY2lkZXYtPmRldiwKKwkJCQkic2V0IGdmeCBkZXZpY2UgZG1hIG1hc2sgMzZiaXQgZmFpbGVkIVxuIik7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYnJpZGdlKTsKIAlyZXR1cm4gYWdwX2FkZF9icmlkZ2UoYnJpZGdlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvcGFyaXNjLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKaW5kZXggNjBhYjc1MS4uMWMxMjkyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9wYXJpc2MtYWdwLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCS5jb25maWd1cmUJCT0gcGFyaXNjX2FncF9jb25maWd1cmUsCiAJLmZldGNoX3NpemUJCT0gcGFyaXNjX2FncF9mZXRjaF9zaXplLAogCS50bGJfZmx1c2gJCT0gcGFyaXNjX2FncF90bGJmbHVzaCwKLQkubWFza19tZW1vcnkJCT0gcGFyaXNjX2FncF9wYWdlX21hc2tfbWVtb3J5LAorCS5tYXNrX21lbW9yeQkJPSBwYXJpc2NfYWdwX21hc2tfbWVtb3J5LAogCS5tYXNrcwkJCT0gcGFyaXNjX2FncF9tYXNrcywKIAkuYWdwX2VuYWJsZQkJPSBwYXJpc2NfYWdwX2VuYWJsZSwKIAkuY2FjaGVfZmx1c2gJCT0gZ2xvYmFsX2NhY2hlX2ZsdXNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYyBiL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKaW5kZXggYWFjYTQwMi4uNGY1NjhjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYworKysgYi9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAlyZXR1cm4gYXMgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXBtX2Jpb3NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFwbV9iaW9zX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5yZWFkCQk9IGFwbV9yZWFkLAogCS5wb2xsCQk9IGFwbV9wb2xsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwppbmRleCA3M2EwNzY1Li5mZTJjYjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYXBwbGljb20uYworKysgYi9kcml2ZXJzL2NoYXIvYXBwbGljb20uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2JmaW4tb3RwLmMgYi9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYwppbmRleCBlM2RkMjRiLi44MzZkNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbi1vdHAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAjIGRlZmluZSBiZmluX290cF9pb2N0bCBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmZpbl9vdHBfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJmaW5fb3RwX2ZvcHMgPSB7CiAJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLnVubG9ja2VkX2lvY3RsID0gYmZpbl9vdHBfaW9jdGwsCiAJLnJlYWQgICAgICAgICAgID0gYmZpbl9vdHBfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggZGY1MDM4Yi4uNDI1NDQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTMzNTQsNyArMzM1NCw3IEBACiAJCQljb250aW51ZTsKIAkJfQogI2lmZGVmIE1PRFVMRQotCQlpZiAoaXNwYXJhbSAmJiBpcnFbaV0pCisJCWlmIChpc3BhcmFtICYmIGkgPCBOUl9DQVJEUyAmJiBpcnFbaV0pCiAJCQljeV9pc2FfaXJxID0gaXJxW2ldOwogCQllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kdGxrLmMgYi9kcml2ZXJzL2NoYXIvZHRsay5jCmluZGV4IDUyZTA2NTguLjA0NWM5MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kdGxrLmMKKysrIGIvZHJpdmVycy9jaGFyL2R0bGsuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGZvciAtRUJVU1kgKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogZm9yIHJlcXVlc3RfcmVnaW9uICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogZm9yIGxvb3BzX3Blcl9qaWZmeSAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4JLyogY3ljbGVfa2VybmVsX2xvY2soKSAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogZm9yIGluYl9wLCBvdXRiX3AsIGluYiwgb3V0YiwgZXRjLiAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGZvciBnZXRfdXNlciwgZXRjLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggOWQ1ODllMy4uZGRlNTEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDllNGU1NjkuLmQ0MDBjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfc2VyaWFsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VucnRjLmMgYi9kcml2ZXJzL2NoYXIvZ2VucnRjLmMKaW5kZXggYWFjMDk4NS4uMzFlN2M5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2dlbnJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5ydGMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBSVENfVkVSU0lPTgkiMS4wNyIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggMjVjZTE1Yi4uYTYzMmYyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTY3OCw3ICs2NzgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaHZjX3BvbGwpOwogCiAvKioKLSAqIGh2Y19yZXNpemUoKSAtIFVwZGF0ZSB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSBpbmZvcm1hdGlvbi4KKyAqIF9faHZjX3Jlc2l6ZSgpIC0gVXBkYXRlIHRlcm1pbmFsIHdpbmRvdyBzaXplIGluZm9ybWF0aW9uLgogICogQGhwOgkJSFZDIGNvbnNvbGUgcG9pbnRlcgogICogQHdzOgkJVGVybWluYWwgd2luZG93IHNpemUgc3RydWN0dXJlCiAgKgpAQCAtNjg3LDEyICs2ODcsMTIgQEAKICAqCiAgKiBMb2NraW5nOglMb2NraW5nIGZyZWU7IHRoZSBmdW5jdGlvbiBNVVNUIGJlIGNhbGxlZCBob2xkaW5nIGhwLT5sb2NrCiAgKi8KLXZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKQordm9pZCBfX2h2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKIHsKIAlocC0+d3MgPSB3czsKIAlzY2hlZHVsZV93b3JrKCZocC0+dHR5X3Jlc2l6ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChodmNfcmVzaXplKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faHZjX3Jlc2l6ZSk7CiAKIC8qCiAgKiBUaGlzIGt0aHJlYWQgaXMgZWl0aGVyIHBvbGxpbmcgb3IgaW50ZXJydXB0IGRyaXZlbi4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmggYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAppbmRleCAzYzg1ZDc4Li4xMDk1MGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBIVkNfQ09OU09MRV9ICiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYXggbnVtYmVyIG9mIGNvbnNvbGUgYWRhcHRlcnMgdGhhdCBjYW4vd2lsbCBiZSBmb3VuZCBhcwpAQCAtODgsNyArODksMTYgQEAKIHZvaWQgaHZjX2tpY2sodm9pZCk7CiAKIC8qIFJlc2l6ZSBodmMgdHR5IHRlcm1pbmFsIHdpbmRvdyAqLwotZXh0ZXJuIHZvaWQgaHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKK2V4dGVybiB2b2lkIF9faHZjX3Jlc2l6ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHAsIHN0cnVjdCB3aW5zaXplIHdzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGh2Y19yZXNpemUoc3RydWN0IGh2Y19zdHJ1Y3QgKmhwLCBzdHJ1Y3Qgd2luc2l6ZSB3cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwLT5sb2NrLCBmbGFncyk7CisJX19odmNfcmVzaXplKGhwLCB3cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHAtPmxvY2ssIGZsYWdzKTsKK30KIAogLyogZGVmYXVsdCBub3RpZmllciBmb3IgaXJxIGJhc2VkIG5vdGlmaWNhdGlvbiAqLwogZXh0ZXJuIGludCBub3RpZmllcl9hZGRfaXJxKHN0cnVjdCBodmNfc3RydWN0ICpocCwgaW50IGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCAwZWNhYzdlLi5iOGE1ZDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMjczLDcgKzI3Myw5IEBACiAJY2FzZSBNU0dfVFlQRV9XSU5TSVpFOgogCQlpZiAocmItPm1idWYtPmRhdGFsZW4gIT0gc2l6ZW9mKHN0cnVjdCB3aW5zaXplKSkKIAkJCWJyZWFrOwotCQlodmNfcmVzaXplKHByaXYtPmh2YywgKigoc3RydWN0IHdpbnNpemUgKikgcmItPm1idWYtPmRhdGEpKTsKKwkJLyogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBodmMgaXMgbG9ja2VkLCB3aGljaAorCQkgKiBpcyB0aGUgY2FzZSB3aGVuIGNhbGxlZCBmcm9tIGh2Y19pdWN2X2dldF9jaGFycygpICovCisJCV9faHZjX3Jlc2l6ZShwcml2LT5odmMsICooKHN0cnVjdCB3aW5zaXplICopIHJiLT5tYnVmLT5kYXRhKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBNU0dfVFlQRV9FUlJPUjoJLyogaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3hlbi5jCmluZGV4IGViYTk5OWYuLmE2ZWUzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfeGVuLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y194ZW4uYwpAQCAtNTUsNyArNTUsNyBAQAogCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobih4ZW5fc3RhcnRfaW5mby0+Y29uc29sZS5kb21VLmV2dGNobik7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBfX3dyaXRlX2NvbnNvbGUoY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgeGVuY29uc19pbnRlcmZhY2UgKmludGYgPSB4ZW5jb25zX2ludGVyZmFjZSgpOwogCVhFTkNPTlNfUklOR19JRFggY29ucywgcHJvZDsKQEAgLTc2LDYgKzc2LDI5IEBACiAJcmV0dXJuIHNlbnQ7CiB9CiAKK3N0YXRpYyBpbnQgd3JpdGVfY29uc29sZSh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQgPSBsZW47CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgd2hvbGUgYnVmZmVyIGlzIGVtaXR0ZWQsIHBvbGxpbmcgaWYKKwkgKiBuZWNlc3NhcnkuICBXZSBkb24ndCBldmVyIHdhbnQgdG8gcmVseSBvbiB0aGUgaHZjIGRhZW1vbgorCSAqIGJlY2F1c2UgdGhlIG1vc3QgaW50ZXJlc3RpbmcgY29uc29sZSBvdXRwdXQgaXMgd2hlbiB0aGUKKwkgKiBrZXJuZWwgaXMgY3JpcHBsZWQuCisJICovCisJd2hpbGUgKGxlbikgeworCQlpbnQgc2VudCA9IF9fd3JpdGVfY29uc29sZShkYXRhLCBsZW4pOworCQkKKwkJZGF0YSArPSBzZW50OworCQlsZW4gLT0gc2VudDsKKworCQlpZiAodW5saWtlbHkobGVuKSkKKwkJCUhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF95aWVsZCwgTlVMTCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCByZWFkX2NvbnNvbGUodWludDMyX3QgdnRlcm1ubywgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCB4ZW5jb25zX2ludGVyZmFjZSAqaW50ZiA9IHhlbmNvbnNfaW50ZXJmYWNlKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggMDBkZDNkZS4uMDZhYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFyZXMpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKIAkJCQkgcGRldi0+bmFtZSk7CiAJaWYgKG1lbSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTEyNCw3ICsxMjQsNyBAQAogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBtZW0pOwotCXJuZ19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlybmdfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXJuZ19iYXNlKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3ZpcnRpby1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCmluZGV4IDk2Mjk2OGYuLjkxNTE1N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdmlydGlvLXJuZy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fcm5nLmg+CiAKIC8qIFRoZSBob3N0IHdpbGwgZmlsbCBhbnkgYnVmZmVyIHdlIGdpdmUgaXQgd2l0aCBzd2VldCwgc3dlZXQgcmFuZG9tbmVzcy4gIFdlCkBAIC0xMTcsNyArMTE2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgdmlydHJuZ19yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJdmRldi0+Y29uZmlnLT5yZXNldCh2ZGV2KTsKIAlod3JuZ191bnJlZ2lzdGVyKCZ2aXJ0aW9faHdybmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA0MWZjMTFkLi42NTU0NWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwbWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggMDkwNTA3OS4uZWM1ZTNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IGFiMmYzMzQuLjQwMjgzOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTE5LDYgKzE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNmM4YjY1ZC4uYTA3NGZjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtbWFwX21lbV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfbWVtX29wcyA9IHsKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIAkuYWNjZXNzID0gZ2VuZXJpY19hY2Nlc3NfcGh5cwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXNwZWMuYyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCmluZGV4IDMwZjA5NWEuLjE5OTcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9tc3BlYy5jCisrKyBiL2RyaXZlcnMvY2hhci9tc3BlYy5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1zcGVjX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXNwZWNfdm1fb3BzID0gewogCS5vcGVuID0gbXNwZWNfb3BlbiwKIAkuY2xvc2UgPSBtc3BlY19jbG9zZSwKIAkuZmF1bHQgPSBtc3BlY19mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCBlYzU4ZDhjLi5kMzQwMGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcHR5LmMgYi9kcml2ZXJzL2NoYXIvcHR5LmMKaW5kZXggNTM3NjFjZS4uNjJmMjgyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI2MSw2ICsyNjIsOSBAQAogCXJldHVybiAwOwogfQogCisvKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLworI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUworCiBzdGF0aWMgaW50IHB0eV9pbnN0YWxsKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKm9fdHR5OwpAQCAtMzEwLDI0ICszMTQsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wcyA9IHsKLQkuaW5zdGFsbCA9IHB0eV9pbnN0YWxsLAotCS5vcGVuID0gcHR5X29wZW4sCi0JLmNsb3NlID0gcHR5X2Nsb3NlLAotCS53cml0ZSA9IHB0eV93cml0ZSwKLQkud3JpdGVfcm9vbSA9IHB0eV93cml0ZV9yb29tLAotCS5mbHVzaF9idWZmZXIgPSBwdHlfZmx1c2hfYnVmZmVyLAotCS5jaGFyc19pbl9idWZmZXIgPSBwdHlfY2hhcnNfaW5fYnVmZmVyLAotCS51bnRocm90dGxlID0gcHR5X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zID0gcHR5X3NldF90ZXJtaW9zLAotCS5yZXNpemUgPSBwdHlfcmVzaXplCi19OwotCi0vKiBUcmFkaXRpb25hbCBCU0QgZGV2aWNlcyAqLwotI2lmZGVmIENPTkZJR19MRUdBQ1lfUFRZUwotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKLQogc3RhdGljIGludCBwdHlfYnNkX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMzQxLDcgKzMyNywxMiBAQAogc3RhdGljIGludCBsZWdhY3lfY291bnQgPSBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVDsKIG1vZHVsZV9wYXJhbShsZWdhY3lfY291bnQsIGludCwgMCk7CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgcHR5X29wc19ic2QgPSB7CisvKgorICogVGhlIG1hc3RlciBzaWRlIG9mIGEgcHR5IGNhbiBkbyBUSU9DU1BUTENLIGFuZCB0aHVzCisgKiBoYXMgcHR5X2JzZF9pb2N0bC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBtYXN0ZXJfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKIAkub3BlbiA9IHB0eV9vcGVuLAogCS5jbG9zZSA9IHB0eV9jbG9zZSwKIAkud3JpdGUgPSBwdHlfd3JpdGUsCkBAIC0zNTQsOCArMzQ1LDIzIEBACiAJLnJlc2l6ZSA9IHB0eV9yZXNpemUKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2xhdmVfcHR5X29wc19ic2QgPSB7CisJLmluc3RhbGwgPSBwdHlfaW5zdGFsbCwKKwkub3BlbiA9IHB0eV9vcGVuLAorCS5jbG9zZSA9IHB0eV9jbG9zZSwKKwkud3JpdGUgPSBwdHlfd3JpdGUsCisJLndyaXRlX3Jvb20gPSBwdHlfd3JpdGVfcm9vbSwKKwkuZmx1c2hfYnVmZmVyID0gcHR5X2ZsdXNoX2J1ZmZlciwKKwkuY2hhcnNfaW5fYnVmZmVyID0gcHR5X2NoYXJzX2luX2J1ZmZlciwKKwkudW50aHJvdHRsZSA9IHB0eV91bnRocm90dGxlLAorCS5zZXRfdGVybWlvcyA9IHB0eV9zZXRfdGVybWlvcywKKwkucmVzaXplID0gcHR5X3Jlc2l6ZQorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGxlZ2FjeV9wdHlfaW5pdCh2b2lkKQogeworCXN0cnVjdCB0dHlfZHJpdmVyICpwdHlfZHJpdmVyLCAqcHR5X3NsYXZlX2RyaXZlcjsKKwogCWlmIChsZWdhY3lfY291bnQgPD0gMCkKIAkJcmV0dXJuOwogCkBAIC0zODMsNyArMzg5LDcgQEAKIAlwdHlfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19vc3BlZWQgPSAzODQwMDsKIAlwdHlfZHJpdmVyLT5mbGFncyA9IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAJcHR5X2RyaXZlci0+b3RoZXIgPSBwdHlfc2xhdmVfZHJpdmVyOwotCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfZHJpdmVyLCAmcHR5X29wcyk7CisJdHR5X3NldF9vcGVyYXRpb25zKHB0eV9kcml2ZXIsICZtYXN0ZXJfcHR5X29wc19ic2QpOwogCiAJcHR5X3NsYXZlX2RyaXZlci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwdHlfc2xhdmVfZHJpdmVyLT5kcml2ZXJfbmFtZSA9ICJwdHlfc2xhdmUiOwpAQCAtMzk5LDcgKzQwNSw3IEBACiAJcHR5X3NsYXZlX2RyaXZlci0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MgfAogCQkJCQlUVFlfRFJJVkVSX1JFQUxfUkFXOwogCXB0eV9zbGF2ZV9kcml2ZXItPm90aGVyID0gcHR5X2RyaXZlcjsKLQl0dHlfc2V0X29wZXJhdGlvbnMocHR5X3NsYXZlX2RyaXZlciwgJnB0eV9vcHMpOworCXR0eV9zZXRfb3BlcmF0aW9ucyhwdHlfc2xhdmVfZHJpdmVyLCAmc2xhdmVfcHR5X29wc19ic2QpOwogCiAJaWYgKHR0eV9yZWdpc3Rlcl9kcml2ZXIocHR5X2RyaXZlcikpCiAJCXBhbmljKCJDb3VsZG4ndCByZWdpc3RlciBwdHkgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9jbWQuYwppbmRleCAwMWYyNjU0Li5mMTIxMzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTMyLDYgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NDMzOTU1Li43ODA1MDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtMzEsNiArMzEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwppbmRleCAyZmI0OWU4Li40N2ZhYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgX19FWFBMSUNJVF9ERUZfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGUwZDBmOGIuLmJjNGFiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jIGIvZHJpdmVycy9jaGFyL3Nlcl9hMjIzMi5jCmluZGV4IDMzYTJiNTMuLjk2MTA4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJfYTIyMzIuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyX2EyMjMyLmMKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYyBiL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYwppbmRleCA1OTQyYTlkLi40NTIzNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKKysrIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCkBAIC0yMjAsOCArMjIwLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChsb25nKWluZm8gPCAobG9uZykoJmN5X3BvcnRbMF0pCi0JICAgIHx8IChsb25nKSgmY3lfcG9ydFtOUl9QT1JUU10pIDwgKGxvbmcpaW5mbykgeworCWlmIChpbmZvIDwgJmN5X3BvcnRbMF0gfHwgaW5mbyA+PSAmY3lfcG9ydFtOUl9QT1JUU10pIHsKIAkJcHJpbnRrKCJXYXJuaW5nOiBjeWNsYWRlc19wb3J0IG91dCBvZiByYW5nZSBmb3IgKCVzKSBpbiAlc1xuIiwKIAkJCQluYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CkBAIC01MjAsMTUgKzUxOSwxMyBAQAogCQlwYW5pYygiVHhJbnQgb24gZGVidWcgcG9ydCEhISIpOwogCX0KICNlbmRpZgotCi0JaW5mbyA9ICZjeV9wb3J0W2NoYW5uZWxdOwotCiAJLyogdmFsaWRhdGUgdGhlIHBvcnQgbnVtYmVyIChhcyBjb25maWd1cmVkIGFuZCBvcGVuKSAqLwogCWlmICgoY2hhbm5lbCA8IDApIHx8IChOUl9QT1JUUyA8PSBjaGFubmVsKSkgewogCQliYXNlX2FkZHJbQ3lJRVJdICY9IH4oQ3lUeE1wdHkgfCBDeVR4UmR5KTsKIAkJYmFzZV9hZGRyW0N5VEVPSVJdID0gQ3lOT1RSQU5TOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQorCWluZm8gPSAmY3lfcG9ydFtjaGFubmVsXTsKIAlpbmZvLT5sYXN0X2FjdGl2ZSA9IGppZmZpZXM7CiAJaWYgKGluZm8tPnR0eSA9PSAwKSB7CiAJCWJhc2VfYWRkcltDeUlFUl0gJj0gfihDeVR4TXB0eSB8IEN5VHhSZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGZkM2RjZWQuLjhjMjYyYWFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jCisrKyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwpAQCAtMzYsNiArMzYsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCA1M2U1MDRmLi5kYjZkY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtMjcsNiArMjcsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGxjbGsuYyBiL2RyaXZlcnMvY2hhci90bGNsay5jCmluZGV4IDhmMjI4NGIuLjgwZWE2YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90bGNsay5jCisrKyBiL2RyaXZlcnMvY2hhci90bGNsay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50aygpICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIGV2ZXJ5dGhpbmcuLi4gKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiBlcnJvciBjb2RlcyAqLworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKaW5kZXggNDVkNTgwMC4uNDdjMmQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCkBAIC02OTYsOCArNjk2LDcgQEAKIAogCWNtZC5oZWFkZXIuaW4gPSBwY3JyZWFkX2hlYWRlcjsKIAljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOwotCUJVR19PTihjbWQuaGVhZGVyLmluLmxlbmd0aCA+IFJFQURfUENSX1JFU1VMVF9TSVpFKTsKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBjbWQuaGVhZGVyLmluLmxlbmd0aCwKKwlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBSRUFEX1BDUl9SRVNVTFRfU0laRSwKIAkJCSAgImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOwogCiAJaWYgKHJjID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYwppbmRleCAzMTA4OTkxLi42NmZhNGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKQEAgLTQwMiwyOCArNDAyLDI2IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdHR5X3N0cnVjdCwgYnVmLndvcmsud29yayk7CiAJdW5zaWduZWQgbG9uZyAJZmxhZ3M7CiAJc3RydWN0IHR0eV9sZGlzYyAqZGlzYzsKLQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGJ1ZiwgKmhlYWQ7Ci0JY2hhciAqY2hhcl9idWY7Ci0JdW5zaWduZWQgY2hhciAqZmxhZ19idWY7CiAKIAlkaXNjID0gdHR5X2xkaXNjX3JlZih0dHkpOwogCWlmIChkaXNjID09IE5VTEwpCS8qICAhVFRZX0xESVNDICovCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7Ci0JLyogU28gd2Uga25vdyBhIGZsdXNoIGlzIHJ1bm5pbmcgKi8KLQlzZXRfYml0KFRUWV9GTFVTSElORywgJnR0eS0+ZmxhZ3MpOwotCWhlYWQgPSB0dHktPmJ1Zi5oZWFkOwotCWlmIChoZWFkICE9IE5VTEwpIHsKLQkJdHR5LT5idWYuaGVhZCA9IE5VTEw7Ci0JCWZvciAoOzspIHsKLQkJCWludCBjb3VudCA9IGhlYWQtPmNvbW1pdCAtIGhlYWQtPnJlYWQ7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncykpIHsKKwkJc3RydWN0IHR0eV9idWZmZXIgKmhlYWQ7CisJCXdoaWxlICgoaGVhZCA9IHR0eS0+YnVmLmhlYWQpICE9IE5VTEwpIHsKKwkJCWludCBjb3VudDsKKwkJCWNoYXIgKmNoYXJfYnVmOworCQkJdW5zaWduZWQgY2hhciAqZmxhZ19idWY7CisKKwkJCWNvdW50ID0gaGVhZC0+Y29tbWl0IC0gaGVhZC0+cmVhZDsKIAkJCWlmICghY291bnQpIHsKIAkJCQlpZiAoaGVhZC0+bmV4dCA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQl0YnVmID0gaGVhZDsKLQkJCQloZWFkID0gaGVhZC0+bmV4dDsKLQkJCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCB0YnVmKTsKKwkJCQl0dHktPmJ1Zi5oZWFkID0gaGVhZC0+bmV4dDsKKwkJCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCBoZWFkKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIExkaXNjIG9yIHVzZXIgaXMgdHJ5aW5nIHRvIGZsdXNoIHRoZSBidWZmZXJzCkBAIC00NDUsOSArNDQzLDkgQEAKIAkJCQkJCQlmbGFnX2J1ZiwgY291bnQpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnR0eS0+YnVmLmxvY2ssIGZsYWdzKTsKIAkJfQotCQkvKiBSZXN0b3JlIHRoZSBxdWV1ZSBoZWFkICovCi0JCXR0eS0+YnVmLmhlYWQgPSBoZWFkOworCQljbGVhcl9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncyk7CiAJfQorCiAJLyogV2UgbWF5IGhhdmUgYSBkZWZlcnJlZCByZXF1ZXN0IHRvIGZsdXNoIHRoZSBpbnB1dCBidWZmZXIsCiAJICAgaWYgc28gcHVsbCB0aGUgY2hhaW4gdW5kZXIgdGhlIGxvY2sgYW5kIGVtcHR5IHRoZSBxdWV1ZSAqLwogCWlmICh0ZXN0X2JpdChUVFlfRkxVU0hQRU5ESU5HLCAmdHR5LT5mbGFncykpIHsKQEAgLTQ1NSw3ICs0NTMsNiBAQAogCQljbGVhcl9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpOwogCQl3YWtlX3VwKCZ0dHktPnJlYWRfd2FpdCk7CiAJfQotCWNsZWFyX2JpdChUVFlfRkxVU0hJTkcsICZ0dHktPmZsYWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAl0dHlfbGRpc2NfZGVyZWYoZGlzYyk7CkBAIC00NzEsNyArNDY4LDcgQEAKICAqLwogdm9pZCB0dHlfZmx1c2hfdG9fbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlmbHVzaF90b19sZGlzYygmdHR5LT5idWYud29yay53b3JrKTsKKwlmbHVzaF9kZWxheWVkX3dvcmsoJnR0eS0+YnVmLndvcmspOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBlYTE4YTEyLi41OTQ5OWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0xMzg5LDcgKzEzODksNyBAQAogICoJb2YgdHR5cyB0aGF0IHRoZSBkcml2ZXIga2VlcHMuCiAgKgogICoJVGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgZnJvbSBhIHdvcmsgcXVldWUgc28gdGhhdCB0aGUgZHJpdmVyIHByaXZhdGUKLSAqCXNodXRkb3duIG9wcyBjYW4gc2xlZXAgKG5lZWRlZCBmb3IgVVNCIGF0IGxlYXN0KQorICoJY2xlYW51cCBvcHMgY2FuIHNsZWVwIChuZWVkZWQgZm9yIFVTQiBhdCBsZWFzdCkKICAqLwogc3RhdGljIHZvaWQgcmVsZWFzZV9vbmVfdHR5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTEzOTcsMTAgKzEzOTcsOSBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHR0eV9zdHJ1Y3QsIGhhbmd1cF93b3JrKTsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyID0gdHR5LT5kcml2ZXI7CiAKLQlpZiAodHR5LT5vcHMtPnNodXRkb3duKQotCQl0dHktPm9wcy0+c2h1dGRvd24odHR5KTsKLQllbHNlCi0JCXR0eV9zaHV0ZG93bih0dHkpOworCWlmICh0dHktPm9wcy0+Y2xlYW51cCkKKwkJdHR5LT5vcHMtPmNsZWFudXAodHR5KTsKKwogCXR0eS0+bWFnaWMgPSAwOwogCXR0eV9kcml2ZXJfa3JlZl9wdXQoZHJpdmVyKTsKIAltb2R1bGVfcHV0KGRyaXZlci0+b3duZXIpOwpAQCAtMTQxNSw2ICsxNDE0LDEyIEBACiBzdGF0aWMgdm9pZCBxdWV1ZV9yZWxlYXNlX29uZV90dHkoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdHR5X3N0cnVjdCwga3JlZik7CisKKwlpZiAodHR5LT5vcHMtPnNodXRkb3duKQorCQl0dHktPm9wcy0+c2h1dGRvd24odHR5KTsKKwllbHNlCisJCXR0eV9zaHV0ZG93bih0dHkpOworCiAJLyogVGhlIGhhbmd1cCBxdWV1ZSBpcyBub3cgZnJlZSBzbyB3ZSBjYW4gcmV1c2UgaXQgcmF0aGVyIHRoYW4KIAkgICB3YXN0ZSBhIGNodW5rIG9mIG1lbW9yeSBmb3IgZWFjaCBwb3J0ICovCiAJSU5JVF9XT1JLKCZ0dHktPmhhbmd1cF93b3JrLCByZWxlYXNlX29uZV90dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCmluZGV4IGFhZmRiYWUuLmZlYjU1MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKQEAgLTUxOCw3ICs1MTgsNyBAQAogc3RhdGljIGludCB0dHlfbGRpc2NfaGFsdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWNsZWFyX2JpdChUVFlfTERJU0MsICZ0dHktPmZsYWdzKTsKLQlyZXR1cm4gY2FuY2VsX2RlbGF5ZWRfd29yaygmdHR5LT5idWYud29yayk7CisJcmV0dXJuIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHR5LT5idWYud29yayk7CiB9CiAKIC8qKgpAQCAtNzU2LDEyICs3NTYsOSBAQAogCSAqIE5fVFRZLgogCSAqLwogCWlmICh0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpIHsKLQkJLyogTWFrZSBzdXJlIHRoZSBvbGQgbGRpc2MgaXMgcXVpZXNjZW50ICovCi0JCXR0eV9sZGlzY19oYWx0KHR0eSk7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAkJLyogQXZvaWQgcmFjaW5nIHNldF9sZGlzYyBvciB0dHlfbGRpc2NfcmVsZWFzZSAqLwogCQltdXRleF9sb2NrKCZ0dHktPmxkaXNjX211dGV4KTsKKwkJdHR5X2xkaXNjX2hhbHQodHR5KTsKIAkJaWYgKHR0eS0+bGRpc2MpIHsJLyogTm90IHlldCBjbG9zZWQgKi8KIAkJCS8qIFN3aXRjaCBiYWNrIHRvIE5fVFRZICovCiAJCQl0dHlfbGRpc2NfcmVpbml0KHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X3BvcnQuYyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCmluZGV4IGE0YmJiMjguLjJlODU1MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfcG9ydC5jCkBAIC0yMjEsNiArMjIxLDkgQEAKIAkgICB0aGUgcG9ydCBoYXMganVzdCBodW5nIHVwIG9yIGlzIGluIGFub3RoZXIgZXJyb3Igc3RhdGUgKi8KIAlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fAogCQkJKHR0eS0+ZmxhZ3MgJiAoMSA8PCBUVFlfSU9fRVJST1IpKSkgeworCQkvKiBJbmRpY2F0ZSB3ZSBhcmUgb3BlbiAqLworCQlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ0JBVUQpCisJCQl0dHlfcG9ydF9yYWlzZV9kdHJfcnRzKHBvcnQpOwogCQlwb3J0LT5mbGFncyB8PSBBU1lOQ19OT1JNQUxfQUNUSVZFOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCmluZGV4IDBkMzI4YjUuLmEwMzVhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpby5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uc29sZS5oPgogI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggMjljNjUxYS4uZWQ4NmQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTk4MSw4ICs5ODEsMTAgQEAKIAkJCWdvdG8gZXBlcm07CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2c2EsIChzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUgX191c2VyICopYXJnLAotCQkJCQkJc2l6ZW9mKHN0cnVjdCB2dF9zZXRhY3RpdmF0ZSkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCXNpemVvZihzdHJ1Y3QgdnRfc2V0YWN0aXZhdGUpKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gb3V0OworCQl9CiAJCWlmICh2c2EuY29uc29sZSA9PSAwIHx8IHZzYS5jb25zb2xlID4gTUFYX05SX0NPTlNPTEVTKQogCQkJcmV0ID0gLUVOWElPOwogCQllbHNlIHsKQEAgLTE1MzAsNyArMTUzMiw3IEBACiAKIAljYXNlIFBJT19VTklNQVA6CiAJY2FzZSBHSU9fVU5JTUFQOgotCQlyZXQgPSBkb191bmltYXBfaW9jdGwoY21kLCB1cCwgcGVybSwgdmMpOworCQlyZXQgPSBjb21wYXRfdW5pbWFwX2lvY3RsKGNtZCwgdXAsIHBlcm0sIHZjKTsKIAkJYnJlYWs7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jIGIvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCmluZGV4IGY0MGFiNjkuLjQ4NDZkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYworKysgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKQEAgLTU1OSw3ICs1NTksNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh3aWNhcF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHdpY2FwX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLndyaXRlID0gaHdpY2FwX3dyaXRlLAogCS5yZWFkID0gaHdpY2FwX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCAzOTM4Yzc4Li5mZjU3YzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTQxLDcgKzQxLDcgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiwgY3B1ZnJlcV9jcHVfZGF0YSk7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAvKiBUaGlzIG9uZSBrZWVwcyB0cmFjayBvZiB0aGUgcHJldmlvdXNseSBzZXQgZ292ZXJub3Igb2YgYSByZW1vdmVkIENQVSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICosIGNwdWZyZXFfY3B1X2dvdmVybm9yKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW0NQVUZSRVFfTkFNRV9MRU5dLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CiAjZW5kaWYKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY3B1ZnJlcV9kcml2ZXJfbG9jayk7CiAKQEAgLTc3NCwxMCArNzc0LDEyIEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGo7Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlpZiAocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KSkgewotCQlwb2xpY3ktPmdvdmVybm9yID0gcGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgY3B1KTsKKwlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqZ292OworCisJZ292ID0gX19maW5kX2dvdmVybm9yKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpOworCWlmIChnb3YpIHsKKwkJcG9saWN5LT5nb3Zlcm5vciA9IGdvdjsKIAkJZHByaW50aygiUmVzdG9yaW5nIGdvdmVybm9yICVzIGZvciBjcHUgJWRcbiIsCiAJCSAgICAgICBwb2xpY3ktPmdvdmVybm9yLT5uYW1lLCBjcHUpOwogCX0KQEAgLTk0OSwxMCArOTUxLDEzIEBACiBzdGF0aWMgaW50IGNwdWZyZXFfYWRkX2RldihzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldCA9IDAsIGZvdW5kID0gMDsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBqOworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWludCBzaWJsaW5nOworI2VuZGlmCiAKIAlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJcmV0dXJuIDA7CkBAIC05OTksNyArMTAwNCwxOSBAQAogCUlOSVRfV09SSygmcG9saWN5LT51cGRhdGUsIGhhbmRsZV91cGRhdGUpOwogCiAJLyogU2V0IGdvdmVybm9yIGJlZm9yZSAtPmluaXQsIHNvIHRoYXQgZHJpdmVyIGNvdWxkIGNoZWNrIGl0ICovCi0JcG9saWN5LT5nb3Zlcm5vciA9IENQVUZSRVFfREVGQVVMVF9HT1ZFUk5PUjsKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KHNpYmxpbmcpIHsKKwkJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcCA9IHBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgc2libGluZyk7CisJCWlmIChjcCAmJiBjcC0+Z292ZXJub3IgJiYKKwkJICAgIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgY3AtPnJlbGF0ZWRfY3B1cykpKSB7CisJCQlwb2xpY3ktPmdvdmVybm9yID0gY3AtPmdvdmVybm9yOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAoIWZvdW5kKQorCQlwb2xpY3ktPmdvdmVybm9yID0gQ1BVRlJFUV9ERUZBVUxUX0dPVkVSTk9SOwogCS8qIGNhbGwgZHJpdmVyLiBGcm9tIHRoZW4gb24gdGhlIGNwdWZyZXEgbXVzdCBiZSBhYmxlCiAJICogdG8gYWNjZXB0IGFsbCBjYWxscyB0byAtPnZlcmlmeSBhbmQgLT5zZXRwb2xpY3kgZm9yIHRoaXMgQ1BVCiAJICovCkBAIC0xMTExLDcgKzExMjgsOCBAQAogI2lmZGVmIENPTkZJR19TTVAKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCXBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkgPSBkYXRhLT5nb3Zlcm5vcjsKKwlzdHJuY3B5KHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSksIGRhdGEtPmdvdmVybm9yLT5uYW1lLAorCQkJQ1BVRlJFUV9OQU1FX0xFTik7CiAjZW5kaWYKIAogCS8qIGlmIHdlIGhhdmUgb3RoZXIgQ1BVcyBzdGlsbCByZWdpc3RlcmVkLCB3ZSBuZWVkIHRvIHVubGluayB0aGVtLApAQCAtMTEzNSw3ICsxMTUzLDggQEAKIAkJCQljb250aW51ZTsKIAkJCWRwcmludGsoInJlbW92aW5nIGxpbmsgZm9yIGNwdSAldVxuIiwgaik7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0JCQlwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBqKSA9IGRhdGEtPmdvdmVybm9yOworCQkJc3RybmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBqKSwKKwkJCQlkYXRhLT5nb3Zlcm5vci0+bmFtZSwgQ1BVRlJFUV9OQU1FX0xFTik7CiAjZW5kaWYKIAkJCWNwdV9zeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoaik7CiAJCQlzeXNmc19yZW1vdmVfbGluaygmY3B1X3N5c19kZXYtPmtvYmosICJjcHVmcmVxIik7CkBAIC0xNjA2LDkgKzE2MjUsMjIgQEAKIAogdm9pZCBjcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKmdvdmVybm9yKQogeworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWludCBjcHU7CisjZW5kaWYKKwogCWlmICghZ292ZXJub3IpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgeworCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQkJY29udGludWU7CisJCWlmICghc3RyY21wKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSksIGdvdmVybm9yLT5uYW1lKSkKKwkJCXN0cmNweShwZXJfY3B1KGNwdWZyZXFfY3B1X2dvdmVybm9yLCBjcHUpLCAiXDAiKTsKKwl9CisjZW5kaWYKKwogCW11dGV4X2xvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwogCWxpc3RfZGVsKCZnb3Zlcm5vci0+Z292ZXJub3JfbGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX2NvbnNlcnZhdGl2ZS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKaW5kZXggYmMzM2RkYy4uYzdiMDgxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMKQEAgLTExNiw5ICsxMTYsOSBAQAogCiAJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOwogCWlmICh3YWxsKQotCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisJCSp3YWxsID0gKGNwdXRpbWU2NF90KWppZmZpZXNfdG9fdXNlY3MoY3VyX3dhbGxfdGltZSk7CiAKLQlyZXR1cm4gaWRsZV90aW1lOworCXJldHVybiAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhpZGxlX3RpbWUpOzsKIH0KIAogc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBnZXRfY3B1X2lkbGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LCBjcHV0aW1lNjRfdCAqd2FsbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCmluZGV4IDA3MTY5OWQuLjRiMzRhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwpAQCAtMTMzLDkgKzEzMyw5IEBACiAKIAlpZGxlX3RpbWUgPSBjcHV0aW1lNjRfc3ViKGN1cl93YWxsX3RpbWUsIGJ1c3lfdGltZSk7CiAJaWYgKHdhbGwpCi0JCSp3YWxsID0gY3VyX3dhbGxfdGltZTsKKwkJKndhbGwgPSAoY3B1dGltZTY0X3QpamlmZmllc190b191c2VjcyhjdXJfd2FsbF90aW1lKTsKIAotCXJldHVybiBpZGxlX3RpbWU7CisJcmV0dXJuIChjcHV0aW1lNjRfdClqaWZmaWVzX3RvX3VzZWNzKGlkbGVfdGltZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY3B1dGltZTY0X3QgZ2V0X2NwdV9pZGxlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgY3B1dGltZTY0X3QgKndhbGwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUuYwppbmRleCBhZDQxZjE5Li4xMmZkZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMKQEAgLTc2LDggKzc2LDExIEBACiAjZW5kaWYKIAkvKiBhc2sgdGhlIGdvdmVybm9yIGZvciB0aGUgbmV4dCBzdGF0ZSAqLwogCW5leHRfc3RhdGUgPSBjcHVpZGxlX2N1cnJfZ292ZXJub3ItPnNlbGVjdChkZXYpOwotCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwlpZiAobmVlZF9yZXNjaGVkKCkpIHsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCQlyZXR1cm47CisJfQorCiAJdGFyZ2V0X3N0YXRlID0gJmRldi0+c3RhdGVzW25leHRfc3RhdGVdOwogCiAJLyogZW50ZXIgdGhlIHN0YXRlIGFuZCB1cGRhdGUgc3RhdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jCmluZGV4IDc2Y2I2YjMuLjBhZjgwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stc2hhLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwpAQCAtMjQsNiArMjQsMTIgQEAKICNpbmNsdWRlIDxhc20vaTM4Ny5oPgogI2luY2x1ZGUgInBhZGxvY2suaCIKIAorI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBTVEFDS19BTElHTiAxNgorI2Vsc2UKKyNkZWZpbmUgU1RBQ0tfQUxJR04gNAorI2VuZGlmCisKIHN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjIHsKIAlzdHJ1Y3Qgc2hhc2hfZGVzYyBmYWxsYmFjazsKIH07CkBAIC02NCw3ICs3MCw5IEBACiAJLyogV2UgY2FuJ3Qgc3RvcmUgZGlyZWN0bHkgdG8gKm91dCBhcyBpdCBtYXkgYmUgdW5hbGlnbmVkLiAqLwogCS8qIEJUVyBEb24ndCByZWR1Y2UgdGhlIGJ1ZmZlciBzaXplIGJlbG93IDEyOCBCeXRlcyEKIAkgKiAgICAgUGFkTG9jayBtaWNyb2NvZGUgbmVlZHMgaXQgdGhhdCBiaWcuICovCi0JY2hhciByZXN1bHRbMTI4XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQURMT0NLX0FMSUdOTUVOVCkpKTsKKwljaGFyIGJ1ZlsxMjggKyBQQURMT0NLX0FMSUdOTUVOVCAtIFNUQUNLX0FMSUdOXSBfX2F0dHJpYnV0ZV9fCisJCSgoYWxpZ25lZChTVEFDS19BTElHTikpKTsKKwljaGFyICpyZXN1bHQgPSBQVFJfQUxJR04oJmJ1ZlswXSwgUEFETE9DS19BTElHTk1FTlQpOwogCXN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJc3RydWN0IHNoYTFfc3RhdGUgc3RhdGU7CiAJdW5zaWduZWQgaW50IHNwYWNlOwpAQCAtMTI4LDcgKzEzNiw5IEBACiAJLyogV2UgY2FuJ3Qgc3RvcmUgZGlyZWN0bHkgdG8gKm91dCBhcyBpdCBtYXkgYmUgdW5hbGlnbmVkLiAqLwogCS8qIEJUVyBEb24ndCByZWR1Y2UgdGhlIGJ1ZmZlciBzaXplIGJlbG93IDEyOCBCeXRlcyEKIAkgKiAgICAgUGFkTG9jayBtaWNyb2NvZGUgbmVlZHMgaXQgdGhhdCBiaWcuICovCi0JY2hhciByZXN1bHRbMTI4XSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZChQQURMT0NLX0FMSUdOTUVOVCkpKTsKKwljaGFyIGJ1ZlsxMjggKyBQQURMT0NLX0FMSUdOTUVOVCAtIFNUQUNLX0FMSUdOXSBfX2F0dHJpYnV0ZV9fCisJCSgoYWxpZ25lZChTVEFDS19BTElHTikpKTsKKwljaGFyICpyZXN1bHQgPSBQVFJfQUxJR04oJmJ1ZlswXSwgUEFETE9DS19BTElHTk1FTlQpOwogCXN0cnVjdCBwYWRsb2NrX3NoYV9kZXNjICpkY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAJc3RydWN0IHNoYTI1Nl9zdGF0ZSBzdGF0ZTsKIAl1bnNpZ25lZCBpbnQgc3BhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvS2NvbmZpZyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCmluZGV4IDAyMTI3ZTUuLjU1YzljNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvZWRhYy9LY29uZmlnCkBAIC00Nyw2ICs0NywxOCBAQAogCSAgU291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgZGVidWdnaW5nIG1lc3NhZ2UKIAkgIHByaW50ZWQgd2lsbCBiZSBhZGRlZCB0byBkZWJ1Z2dpbmcgbWVzc2FnZS4KIAorIGNvbmZpZyBFREFDX0RFQ09ERV9NQ0UKKwl0cmlzdGF0ZSAiRGVjb2RlIE1DRXMgaW4gaHVtYW4tcmVhZGFibGUgZm9ybSAob25seSBvbiBBTUQgZm9yIG5vdykiCisJZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCAmJiBYODZfTUNFCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgRW5hYmxlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGRlY29kZSBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbnMKKwkgIG9jY3VyaW5nIG9uIHlvdXIgbWFjaGluZSBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLgorCisJICBZb3Ugc2hvdWxkIGRlZmluaXRlbHkgc2F5IFkgaGVyZSBpbiBjYXNlIHlvdSB3YW50IHRvIGRlY29kZSBNQ0VzCisJICB3aGljaCBvY2N1ciByZWFsbHkgZWFybHkgdXBvbiBib290LCBiZWZvcmUgdGhlIG1vZHVsZSBpbmZyYXN0cnVjdHVyZQorCSAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuCisKIGNvbmZpZyBFREFDX01NX0VEQUMKIAl0cmlzdGF0ZSAiTWFpbiBNZW1vcnkgRURBQyAoRXJyb3IgRGV0ZWN0aW9uIEFuZCBDb3JyZWN0aW9uKSByZXBvcnRpbmciCiAJaGVscApAQCAtNTksNyArNzEsNyBAQAogCiBjb25maWcgRURBQ19BTUQ2NAogCXRyaXN0YXRlICJBTUQ2NCAoT3B0ZXJvbiwgQXRobG9uNjQpIEs4LCBGMTBoLCBGMTFoIgotCWRlcGVuZHMgb24gRURBQ19NTV9FREFDICYmIEs4X05CICYmIFg4Nl82NCAmJiBQQ0kgJiYgQ1BVX1NVUF9BTUQKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBLOF9OQiAmJiBYODZfNjQgJiYgUENJICYmIEVEQUNfREVDT0RFX01DRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGVycm9yIGRldGVjdGlvbiBhbmQgY29ycmVjdGlvbiBvbiB0aGUgQU1EIDY0CiAJICBGYW1pbGllcyBvZiBNZW1vcnkgQ29udHJvbGxlcnMgKEs4LCBGMTBoIGFuZCBGMTFoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL01ha2VmaWxlIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCmluZGV4IDdhNDczYmIuLmJjNWRjMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAgLTYsNyArNiw2IEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgogIwogCi0KIG9iai0kKENPTkZJR19FREFDKQkJCTo9IGVkYWNfc3R1Yi5vCiBvYmotJChDT05GSUdfRURBQ19NTV9FREFDKQkJKz0gZWRhY19jb3JlLm8KIApAQCAtMTcsOSArMTYsNyBAQAogZWRhY19jb3JlLW9ianMJKz0gZWRhY19wY2kubyBlZGFjX3BjaV9zeXNmcy5vCiBlbmRpZgogCi1pZmRlZiBDT05GSUdfQ1BVX1NVUF9BTUQKLWVkYWNfY29yZS1vYmpzICArPSBlZGFjX21jZV9hbWQubwotZW5kaWYKK29iai0kKENPTkZJR19FREFDX0RFQ09ERV9NQ0UpCQkrPSBlZGFjX21jZV9hbWQubwogCiBvYmotJChDT05GSUdfRURBQ19BTUQ3NlgpCQkrPSBhbWQ3NnhfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19DUEM5MjUpCQkrPSBjcGM5MjVfZWRhYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwppbmRleCA0ZTU1MWU2Li5hMzg4MzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKQEAgLTE1LDggKzE1LDggQEAKIAogLyogTG9va3VwIHRhYmxlIGZvciBhbGwgcG9zc2libGUgTUMgY29udHJvbCBpbnN0YW5jZXMgKi8KIHN0cnVjdCBhbWQ2NF9wdnQ7Ci1zdGF0aWMgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpX2xvb2t1cFtNQVhfTlVNTk9ERVNdOwotc3RhdGljIHN0cnVjdCBhbWQ2NF9wdnQgKnB2dF9sb29rdXBbTUFYX05VTU5PREVTXTsKK3N0YXRpYyBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2lfbG9va3VwW0VEQUNfTUFYX05VTU5PREVTXTsKK3N0YXRpYyBzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnRfbG9va3VwW0VEQUNfTUFYX05VTU5PREVTXTsKIAogLyoKICAqIFNlZSBGMng4MCBmb3IgSzggYW5kIEYyeFsxLDBdODAgZm9yIEZhbTEwIGFuZCBsYXRlci4gVGhlIHRhYmxlIGJlbG93IGlzIG9ubHkKQEAgLTE4OSw3ICsxODksMTAgQEAKIC8qIE1hcCBmcm9tIGEgQ1NST1cgZW50cnkgdG8gdGhlIG1hc2sgZW50cnkgdGhhdCBvcGVyYXRlcyBvbiBpdCAqLwogc3RhdGljIGlubGluZSB1MzIgYW1kNjRfbWFwX3RvX2Rjc19tYXNrKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCwgaW50IGNzcm93KQogewotCXJldHVybiBjc3JvdyA+PiAocHZ0LT5udW1fZGNzbSA+PiAzKTsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmICYmIHB2dC0+ZXh0X21vZGVsIDwgT1BURVJPTl9DUFVfUkVWX0YpCisJCXJldHVybiBjc3JvdzsKKwllbHNlCisJCXJldHVybiBjc3JvdyA+PiAxOwogfQogCiAvKiByZXR1cm4gdGhlICdiYXNlJyBhZGRyZXNzIHRoZSBpJ3RoIENTIGVudHJ5IG9mIHRoZSAnZGN0JyBEUkFNIGNvbnRyb2xsZXIgKi8KQEAgLTI3OSwyOSArMjgyLDI2IEBACiAJaW50bHZfZW4gPSBwdnQtPmRyYW1fSW50bHZFblswXTsKIAogCWlmIChpbnRsdl9lbiA9PSAwKSB7Ci0JCWZvciAobm9kZV9pZCA9IDA7IDsgKSB7CisJCWZvciAobm9kZV9pZCA9IDA7IG5vZGVfaWQgPCBEUkFNX1JFR19DT1VOVDsgbm9kZV9pZCsrKSB7CiAJCQlpZiAoYW1kNjRfYmFzZV9saW1pdF9tYXRjaChwdnQsIHN5c19hZGRyLCBub2RlX2lkKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKCsrbm9kZV9pZCA+PSBEUkFNX1JFR19DT1VOVCkKLQkJCQlnb3RvIGVycl9ub19tYXRjaDsKKwkJCQlnb3RvIGZvdW5kOwogCQl9Ci0JCWdvdG8gZm91bmQ7CisJCWdvdG8gZXJyX25vX21hdGNoOwogCX0KIAotCWlmICh1bmxpa2VseSgoaW50bHZfZW4gIT0gKDB4MDEgPDwgOCkpICYmCi0JCSAgICAgKGludGx2X2VuICE9ICgweDAzIDw8IDgpKSAmJgotCQkgICAgIChpbnRsdl9lbiAhPSAoMHgwNyA8PCA4KSkpKSB7CisJaWYgKHVubGlrZWx5KChpbnRsdl9lbiAhPSAweDAxKSAmJgorCQkgICAgIChpbnRsdl9lbiAhPSAweDAzKSAmJgorCQkgICAgIChpbnRsdl9lbiAhPSAweDA3KSkpIHsKIAkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywgImp1bmsgdmFsdWUgb2YgMHgleCBleHRyYWN0ZWQgZnJvbSAiCiAJCQkgICAgICJJbnRsdkVuIGZpZWxkIG9mIERSQU0gQmFzZSBSZWdpc3RlciBmb3Igbm9kZSAwOiAiCi0JCQkgICAgICJUaGlzIHByb2JhYmx5IGluZGljYXRlcyBhIEJJT1MgYnVnLlxuIiwgaW50bHZfZW4pOworCQkJICAgICAidGhpcyBwcm9iYWJseSBpbmRpY2F0ZXMgYSBCSU9TIGJ1Zy5cbiIsIGludGx2X2VuKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJYml0cyA9ICgoKHUzMikgc3lzX2FkZHIpID4+IDEyKSAmIGludGx2X2VuOwogCiAJZm9yIChub2RlX2lkID0gMDsgOyApIHsKLQkJaWYgKChwdnQtPmRyYW1fbGltaXRbbm9kZV9pZF0gJiBpbnRsdl9lbikgPT0gYml0cykKKwkJaWYgKChwdnQtPmRyYW1fSW50bHZTZWxbbm9kZV9pZF0gJiBpbnRsdl9lbikgPT0gYml0cykKIAkJCWJyZWFrOwkvKiBpbnRsdl9zZWwgZmllbGQgbWF0Y2hlcyAqLwogCiAJCWlmICgrK25vZGVfaWQgPj0gRFJBTV9SRUdfQ09VTlQpCkBAIC0zMTEsMTAgKzMxMSwxMCBAQAogCS8qIHNhbml0eSB0ZXN0IGZvciBzeXNfYWRkciAqLwogCWlmICh1bmxpa2VseSghYW1kNjRfYmFzZV9saW1pdF9tYXRjaChwdnQsIHN5c19hZGRyLCBub2RlX2lkKSkpIHsKIAkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJCSAgIiVzKCk6IHN5c19hZGRyIDB4JWx4IGZhbGxzIG91dHNpZGUgYmFzZS9saW1pdCAiCi0JCQkgICJhZGRyZXNzIHJhbmdlIGZvciBub2RlICVkIHdpdGggbm9kZSBpbnRlcmxlYXZpbmcgIgotCQkJICAiZW5hYmxlZC5cbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzeXNfYWRkciwKLQkJCSAgbm9kZV9pZCk7CisJCQkgICAgICIlcygpOiBzeXNfYWRkciAweCVsbHggZmFsbHMgb3V0c2lkZSBiYXNlL2xpbWl0ICIKKwkJCSAgICAgImFkZHJlc3MgcmFuZ2UgZm9yIG5vZGUgJWQgd2l0aCBub2RlIGludGVybGVhdmluZyAiCisJCQkgICAgICJlbmFibGVkLlxuIiwKKwkJCSAgICAgX19mdW5jX18sIHN5c19hZGRyLCBub2RlX2lkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0zNzcsNyArMzc3LDcgQEAKIAkgKiBiYXNlL21hc2sgcmVnaXN0ZXIgcGFpciwgdGVzdCB0aGUgY29uZGl0aW9uIHNob3duIG5lYXIgdGhlIHN0YXJ0IG9mCiAJICogc2VjdGlvbiAzLjUuNCAocC4gODQsIEJLREcgIzI2MDk0LCBLOCwgcmV2QS1FKS4KIAkgKi8KLQlmb3IgKGNzcm93ID0gMDsgY3Nyb3cgPCBDSElQU0VMRUNUX0NPVU5UOyBjc3JvdysrKSB7CisJZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgcHZ0LT5jc19jb3VudDsgY3Nyb3crKykgewogCiAJCS8qIFRoaXMgRFJBTSBjaGlwIHNlbGVjdCBpcyBkaXNhYmxlZCBvbiB0aGlzIG5vZGUgKi8KIAkJaWYgKChwdnQtPmRjc2IwW2Nzcm93XSAmIEs4X0RDU0JfQ1NfRU5BQkxFKSA9PSAwKQpAQCAtNzM0LDcgKzczNCw3IEBACiAJdTY0IGJhc2UsIG1hc2s7CiAKIAlwdnQgPSBtY2ktPnB2dF9pbmZvOwotCUJVR19PTigoY3Nyb3cgPCAwKSB8fCAoY3Nyb3cgPj0gQ0hJUFNFTEVDVF9DT1VOVCkpOworCUJVR19PTigoY3Nyb3cgPCAwKSB8fCAoY3Nyb3cgPj0gcHZ0LT5jc19jb3VudCkpOwogCiAJYmFzZSA9IGJhc2VfZnJvbV9kY3RfYmFzZShwdnQsIGNzcm93KTsKIAltYXNrID0gbWFza19mcm9tX2RjdF9tYXNrKHB2dCwgY3Nyb3cpOwpAQCAtOTYyLDM1ICs5NjIsMjcgQEAKICAqLwogc3RhdGljIHZvaWQgYW1kNjRfc2V0X2RjdF9iYXNlX2FuZF9tYXNrKHN0cnVjdCBhbWQ2NF9wdnQgKnB2dCkKIHsKLQlpZiAocHZ0LT5leHRfbW9kZWwgPj0gT1BURVJPTl9DUFVfUkVWX0YpIHsKKworCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYgJiYgcHZ0LT5leHRfbW9kZWwgPCBPUFRFUk9OX0NQVV9SRVZfRikgeworCQlwdnQtPmRjc2JfYmFzZQkJPSBSRVZfRV9EQ1NCX0JBU0VfQklUUzsKKwkJcHZ0LT5kY3NtX21hc2sJCT0gUkVWX0VfRENTTV9NQVNLX0JJVFM7CisJCXB2dC0+ZGNzX21hc2tfbm90dXNlZAk9IFJFVl9FX0RDU19OT1RVU0VEX0JJVFM7CisJCXB2dC0+ZGNzX3NoaWZ0CQk9IFJFVl9FX0RDU19TSElGVDsKKwkJcHZ0LT5jc19jb3VudAkJPSA4OworCQlwdnQtPm51bV9kY3NtCQk9IDg7CisJfSBlbHNlIHsKIAkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0ZfRjFYaF9EQ1NCX0JBU0VfQklUUzsKIAkJcHZ0LT5kY3NtX21hc2sJCT0gUkVWX0ZfRjFYaF9EQ1NNX01BU0tfQklUUzsKIAkJcHZ0LT5kY3NfbWFza19ub3R1c2VkCT0gUkVWX0ZfRjFYaF9EQ1NfTk9UVVNFRF9CSVRTOwogCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRl9GMVhoX0RDU19TSElGVDsKIAotCQlzd2l0Y2ggKGJvb3RfY3B1X2RhdGEueDg2KSB7Ci0JCWNhc2UgMHhmOgotCQkJcHZ0LT5udW1fZGNzbSA9IFJFVl9GX0RDU01fQ09VTlQ7Ci0JCQlicmVhazsKLQotCQljYXNlIDB4MTA6Ci0JCQlwdnQtPm51bV9kY3NtID0gRjEwX0RDU01fQ09VTlQ7Ci0JCQlicmVhazsKLQotCQljYXNlIDB4MTE6Ci0JCQlwdnQtPm51bV9kY3NtID0gRjExX0RDU01fQ09VTlQ7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJYW1kNjRfcHJpbnRrKEtFUk5fRVJSLCAiVW5zdXBwb3J0ZWQgZmFtaWx5IVxuIik7Ci0JCQlicmVhazsKKwkJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4MTEpIHsKKwkJCXB2dC0+Y3NfY291bnQgPSA0OworCQkJcHZ0LT5udW1fZGNzbSA9IDI7CisJCX0gZWxzZSB7CisJCQlwdnQtPmNzX2NvdW50ID0gODsKKwkJCXB2dC0+bnVtX2Rjc20gPSA0OwogCQl9Ci0JfSBlbHNlIHsKLQkJcHZ0LT5kY3NiX2Jhc2UJCT0gUkVWX0VfRENTQl9CQVNFX0JJVFM7Ci0JCXB2dC0+ZGNzbV9tYXNrCQk9IFJFVl9FX0RDU01fTUFTS19CSVRTOwotCQlwdnQtPmRjc19tYXNrX25vdHVzZWQJPSBSRVZfRV9EQ1NfTk9UVVNFRF9CSVRTOwotCQlwdnQtPmRjc19zaGlmdAkJPSBSRVZfRV9EQ1NfU0hJRlQ7Ci0JCXB2dC0+bnVtX2Rjc20JCT0gUkVWX0VfRENTTV9DT1VOVDsKIAl9CiB9CiAKQEAgLTEwMDMsNyArOTk1LDcgQEAKIAogCWFtZDY0X3NldF9kY3RfYmFzZV9hbmRfbWFzayhwdnQpOwogCi0JZm9yIChjcyA9IDA7IGNzIDwgQ0hJUFNFTEVDVF9DT1VOVDsgY3MrKykgeworCWZvciAoY3MgPSAwOyBjcyA8IHB2dC0+Y3NfY291bnQ7IGNzKyspIHsKIAkJcmVnID0gSzhfRENTQjAgKyAoY3MgKiA0KTsKIAkJZXJyID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHB2dC0+ZHJhbV9mMl9jdGwsIHJlZywKIAkJCQkJCSZwdnQtPmRjc2IwW2NzXSk7CkBAIC0xMTkzLDcgKzExODUsNyBAQAogCSAqIGRpZmZlcmVudCBmcm9tIHRoZSBub2RlIHRoYXQgZGV0ZWN0ZWQgdGhlIGVycm9yLgogCSAqLwogCXNyY19tY2kgPSBmaW5kX21jX2J5X3N5c19hZGRyKG1jaSwgU3lzdGVtQWRkcmVzcyk7Ci0JaWYgKHNyY19tY2kpIHsKKwlpZiAoIXNyY19tY2kpIHsKIAkJYW1kNjRfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsCiAJCQkgICAgICJmYWlsZWQgdG8gbWFwIGVycm9yIGFkZHJlc3MgMHglbHggdG8gYSBub2RlXG4iLAogCQkJICAgICAodW5zaWduZWQgbG9uZylTeXN0ZW1BZGRyZXNzKTsKQEAgLTEzNzYsOCArMTM2OCw4IEBACiAKIAlwdnQtPmRyYW1fSW50bHZFbltkcmFtXSA9IChsb3dfYmFzZSA+PiA4KSAmIDB4NzsKIAotCXB2dC0+ZHJhbV9iYXNlW2RyYW1dID0gKCgoKCh1NjQpIGhpZ2hfYmFzZSAmIDB4MDAwMDAwRkYpIDw8IDMyKSB8Ci0JCQkJKCh1NjQpIGxvd19iYXNlICYgMHhGRkZGMDAwMCkpKSA8PCA4OworCXB2dC0+ZHJhbV9iYXNlW2RyYW1dID0gKCgodTY0KWhpZ2hfYmFzZSAmIDB4MDAwMDAwRkYpIDw8IDQwKSB8CisJCQkgICAgICAgKCgodTY0KWxvd19iYXNlICAmIDB4RkZGRjAwMDApIDw8IDgpOwogCiAJbG93X29mZnNldCA9IEs4X0RSQU1fTElNSVRfTE9XICsgKGRyYW0gPDwgMyk7CiAJaGlnaF9vZmZzZXQgPSBGMTBfRFJBTV9MSU1JVF9ISUdIICsgKGRyYW0gPDwgMyk7CkBAIC0xMzk4LDkgKzEzOTAsOSBAQAogCSAqIEV4dHJhY3QgYWRkcmVzcyB2YWx1ZXMgYW5kIGZvcm0gYSBMSU1JVCBhZGRyZXNzLiBMaW1pdCBpcyB0aGUgSElHSEVTVAogCSAqIG1lbW9yeSBsb2NhdGlvbiBvZiB0aGUgcmVnaW9uLCBzbyBsb3cgMjQgYml0cyBuZWVkIHRvIGJlIGFsbCBvbmVzLgogCSAqLwotCWxvd19saW1pdCB8PSAweDAwMDBGRkZGOwotCXB2dC0+ZHJhbV9saW1pdFtkcmFtXSA9Ci0JCSgoKCh1NjQpIGhpZ2hfbGltaXQgPDwgMzIpICsgKHU2NCkgbG93X2xpbWl0KSA8PCA4KSB8ICgweEZGKTsKKwlwdnQtPmRyYW1fbGltaXRbZHJhbV0gPSAoKCh1NjQpaGlnaF9saW1pdCAmIDB4MDAwMDAwRkYpIDw8IDQwKSB8CisJCQkJKCgodTY0KSBsb3dfbGltaXQgJiAweEZGRkYwMDAwKSA8PCA4KSB8CisJCQkJMHgwMEZGRkZGRjsKIH0KIAogc3RhdGljIHZvaWQgZjEwX3JlYWRfZHJhbV9jdGxfcmVnaXN0ZXIoc3RydWN0IGFtZDY0X3B2dCAqcHZ0KQpAQCAtMTU2Niw3ICsxNTU4LDcgQEAKIAogCWRlYnVnZjEoIklucHV0QWRkcj0weCV4ICBjaGFubmVsc2VsZWN0PSVkXG4iLCBpbl9hZGRyLCBjcyk7CiAKLQlmb3IgKGNzcm93ID0gMDsgY3Nyb3cgPCBDSElQU0VMRUNUX0NPVU5UOyBjc3JvdysrKSB7CisJZm9yIChjc3JvdyA9IDA7IGNzcm93IDwgcHZ0LT5jc19jb3VudDsgY3Nyb3crKykgewogCiAJCWNzX2Jhc2UgPSBhbWQ2NF9nZXRfZGN0X2Jhc2UocHZ0LCBjcywgY3Nyb3cpOwogCQlpZiAoIShjc19iYXNlICYgSzhfRENTQl9DU19FTkFCTEUpKQpAQCAtMjI2Miw3ICsyMjU0LDcgQEAKIHsKIAl1MzIgZWMgID0gRVJST1JfQ09ERShpbmZvLT5uYnNsKTsKIAl1MzIgeGVjID0gRVhUX0VSUk9SX0NPREUoaW5mby0+bmJzbCk7Ci0JaW50IGVjY190eXBlID0gaW5mby0+bmJzaCAmICgweDMgPDwgMTMpOworCWludCBlY2NfdHlwZSA9IChpbmZvLT5uYnNoID4+IDEzKSAmIDB4MzsKIAogCS8qIEJhaWwgZWFybHkgb3V0IGlmIHRoaXMgd2FzIGFuICdvYnNlcnZlZCcgZXJyb3IgKi8KIAlpZiAoUFAoZWMpID09IEs4X05CU0xfUFBfT0JTKQpAQCAtMjQ5Nyw3ICsyNDg5LDcgQEAKICAqIE5PVEU6IENQVSBSZXZpc2lvbiBEZXBlbmRlbnQgY29kZQogICoKICAqIElucHV0OgotICoJQGNzcm93X25yIENoaXBTZWxlY3QgUm93IE51bWJlciAoMC4uQ0hJUFNFTEVDVF9DT1VOVC0xKQorICoJQGNzcm93X25yIENoaXBTZWxlY3QgUm93IE51bWJlciAoMC4ucHZ0LT5jc19jb3VudC0xKQogICoJazggcHJpdmF0ZSBwb2ludGVyIHRvIC0tPgogICoJCQlEUkFNIEJhbmsgQWRkcmVzcyBtYXBwaW5nIHJlZ2lzdGVyCiAgKgkJCW5vZGVfaWQKQEAgLTI1NzcsNyArMjU2OSw3IEBACiAJCShwdnQtPm5iY2ZnICYgSzhfTkJDRkdfRUNDX0VOQUJMRSkgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiCiAJCSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQ0hJUFNFTEVDVF9DT1VOVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHB2dC0+Y3NfY291bnQ7IGkrKykgewogCQljc3JvdyA9ICZtY2ktPmNzcm93c1tpXTsKIAogCQlpZiAoKHB2dC0+ZGNzYjBbaV0gJiBLOF9EQ1NCX0NTX0VOQUJMRSkgPT0gMCkgewpAQCAtMjk4OCw3ICsyOTgwLDcgQEAKIAkJZ290byBlcnJfZXhpdDsKIAogCXJldCA9IC1FTk9NRU07Ci0JbWNpID0gZWRhY19tY19hbGxvYygwLCBDSElQU0VMRUNUX0NPVU5ULCBwdnQtPmNoYW5uZWxfY291bnQsIG5vZGVfaWQpOworCW1jaSA9IGVkYWNfbWNfYWxsb2MoMCwgcHZ0LT5jc19jb3VudCwgcHZ0LT5jaGFubmVsX2NvdW50LCBub2RlX2lkKTsKIAlpZiAoIW1jaSkKIAkJZ290byBlcnJfZXhpdDsKIApAQCAtMzE3MSw3ICszMTYzLDcgQEAKIAlvcHN0YXRlX2luaXQoKTsKIAogCWlmIChjYWNoZV9rOF9ub3J0aGJyaWRnZXMoKSA8IDApCi0JCWdvdG8gZXJyX2V4aXQ7CisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ2NF9wY2lfZHJpdmVyKTsKIAlpZiAoZXJyKQpAQCAtMzE5Nyw4ICszMTg5LDYgQEAKIAogZXJyXzJuZF9zdGFnZToKIAlkZWJ1Z2YwKCIybmQgc3RhZ2UgZmFpbGVkXG4iKTsKLQotZXJyX2V4aXQ6CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ2NF9wY2lfZHJpdmVyKTsKIAogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAppbmRleCA4ZWEwN2UyLi5jNmYzNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKQEAgLTEzMiw2ICsxMzIsOCBAQAogI2RlZmluZSBFREFDX0FNRDY0X1ZFUlNJT04JCSIgVmVyOiAzLjIuMCAiIF9fREFURV9fCiAjZGVmaW5lIEVEQUNfTU9EX1NUUgkJCSJhbWQ2NF9lZGFjIgogCisjZGVmaW5lIEVEQUNfTUFYX05VTU5PREVTCQk4CisKIC8qIEV4dGVuZGVkIE1vZGVsIGZyb20gQ1BVSUQsIGZvciBDUFUgUmV2aXNpb24gbnVtYmVycyAqLwogI2RlZmluZSBPUFRFUk9OX0NQVV9MRV9SRVZfQwkJMAogI2RlZmluZSBPUFRFUk9OX0NQVV9SRVZfRAkJMQpAQCAtMTQyLDcgKzE0NCw3IEBACiAjZGVmaW5lIE9QVEVST05fQ1BVX1JFVl9GQQkJNQogCiAvKiBIYXJkd2FyZSBsaW1pdCBvbiBDaGlwU2VsZWN0IHJvd3MgcGVyIE1DIGFuZCBwcm9jZXNzb3JzIHBlciBzeXN0ZW0gKi8KLSNkZWZpbmUgQ0hJUFNFTEVDVF9DT1VOVAkJOAorI2RlZmluZSBNQVhfQ1NfQ09VTlQJCQk4CiAjZGVmaW5lIERSQU1fUkVHX0NPVU5UCQkJOAogCiAKQEAgLTE5Myw3ICsxOTUsNiBAQAogICovCiAjZGVmaW5lIFJFVl9FX0RDU0JfQkFTRV9CSVRTCQkoMHhGRkUwRkUwMFVMTCkKICNkZWZpbmUgUkVWX0VfRENTX1NISUZUCQkJNAotI2RlZmluZSBSRVZfRV9EQ1NNX0NPVU5UCQk4CiAKICNkZWZpbmUgUkVWX0ZfRjFYaF9EQ1NCX0JBU0VfQklUUwkoMHgxRkY4M0ZFMFVMTCkKICNkZWZpbmUgUkVWX0ZfRjFYaF9EQ1NfU0hJRlQJCTgKQEAgLTIwNCw5ICsyMDUsNiBAQAogICovCiAjZGVmaW5lIFJFVl9GX0RDU0JfQkFTRV9CSVRTCQkoMHgxRkY4M0ZFMFVMTCkKICNkZWZpbmUgUkVWX0ZfRENTX1NISUZUCQkJOAotI2RlZmluZSBSRVZfRl9EQ1NNX0NPVU5UCQk0Ci0jZGVmaW5lIEYxMF9EQ1NNX0NPVU5UCQkJNAotI2RlZmluZSBGMTFfRENTTV9DT1VOVAkJCTIKIAogLyogRFJBTSBDUyBNYXNrIFJlZ2lzdGVycyAqLwogI2RlZmluZSBLOF9EQ1NNMAkJCTB4NjAKQEAgLTM3NCwxMyArMzcyLDExIEBACiAKICNkZWZpbmUgU0VUX05CX0RSQU1fSU5KRUNUSU9OX1dSSVRFKHdvcmQsIGJpdHMpICBcCiAJCQkJCShCSVQoKCh3b3JkKSAmIDB4RikgKyAyMCkgfCBcCi0JCQkJCUJJVCgxNykgfCAgXAotCQkJCQkoKGJpdHMpICYgMHhGKSkKKwkJCQkJQklUKDE3KSB8IGJpdHMpCiAKICNkZWZpbmUgU0VUX05CX0RSQU1fSU5KRUNUSU9OX1JFQUQod29yZCwgYml0cykgIFwKIAkJCQkJKEJJVCgoKHdvcmQpICYgMHhGKSArIDIwKSB8IFwKLQkJCQkJQklUKDE2KSB8ICBcCi0JCQkJCSgoYml0cykgJiAweEYpKQorCQkJCQlCSVQoMTYpIHwgIGJpdHMpCiAKICNkZWZpbmUgSzhfTkJDQVAJCQkweEU4CiAjZGVmaW5lIEs4X05CQ0FQX0NPUkVTCQkJKEJJVCgxMil8QklUKDEzKSkKQEAgLTQ0NSwxMiArNDQxLDEyIEBACiAJdTMyIGRiYW0xOwkJLyogRFJBTSBCYXNlIEFkZHJlc3MgTWFwcGluZyByZWcgZm9yIERDVDEgKi8KIAogCS8qIERSQU0gQ1MgQmFzZSBBZGRyZXNzIFJlZ2lzdGVycyBGMnhbMSwwXVs1Qzo0MF0gKi8KLQl1MzIgZGNzYjBbQ0hJUFNFTEVDVF9DT1VOVF07Ci0JdTMyIGRjc2IxW0NISVBTRUxFQ1RfQ09VTlRdOworCXUzMiBkY3NiMFtNQVhfQ1NfQ09VTlRdOworCXUzMiBkY3NiMVtNQVhfQ1NfQ09VTlRdOwogCiAJLyogRFJBTSBDUyBNYXNrIFJlZ2lzdGVycyBGMnhbMSwwXVs2Qzo2MF0gKi8KLQl1MzIgZGNzbTBbQ0hJUFNFTEVDVF9DT1VOVF07Ci0JdTMyIGRjc20xW0NISVBTRUxFQ1RfQ09VTlRdOworCXUzMiBkY3NtMFtNQVhfQ1NfQ09VTlRdOworCXUzMiBkY3NtMVtNQVhfQ1NfQ09VTlRdOwogCiAJLyoKIAkgKiBEZWNvZGVkIHBhcnRzIG9mIERSQU0gQkFTRSBhbmQgTElNSVQgUmVnaXN0ZXJzCkBAIC00NzAsNiArNDY2LDcgQEAKIAkgKi8KIAl1MzIgZGNzYl9iYXNlOwkJLyogRENTQiBiYXNlIGJpdHMgKi8KIAl1MzIgZGNzbV9tYXNrOwkJLyogRENTTSBtYXNrIGJpdHMgKi8KKwl1MzIgY3NfY291bnQ7CQkvKiBudW0gY2hpcCBzZWxlY3RzICg9PSBudW0gRENTQiByZWdpc3RlcnMpICovCiAJdTMyIG51bV9kY3NtOwkJLyogTnVtYmVyIG9mIERDU00gcmVnaXN0ZXJzICovCiAJdTMyIGRjc19tYXNrX25vdHVzZWQ7CS8qIERDU00gbm90dXNlZCBtYXNrIGJpdHMgKi8KIAl1MzIgZGNzX3NoaWZ0OwkJLyogRENTQiBhbmQgRENTTSBzaGlmdCB2YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWNfaW5qLmMgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYwppbmRleCBkMzY3NWI3Li4yOWYxZjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhY19pbmouYwpAQCAtMSw1ICsxLDExIEBACiAjaW5jbHVkZSAiYW1kNjRfZWRhYy5oIgogCitzdGF0aWMgc3NpemVfdCBhbWQ2NF9pbmplY3Rfc2VjdGlvbl9zaG93KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhbWQ2NF9wdnQgKnB2dCA9IG1jaS0+cHZ0X2luZm87CisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgcHZ0LT5pbmplY3Rpb24uc2VjdGlvbik7Cit9CisKIC8qCiAgKiBzdG9yZSBlcnJvciBpbmplY3Rpb24gc2VjdGlvbiB2YWx1ZSB3aGljaCByZWZlcnMgdG8gb25lIG9mIDQgMTYtYnl0ZSBzZWN0aW9ucwogICogd2l0aGluIGEgNjQtYnl0ZSBjYWNoZWxpbmUKQEAgLTE1LDEyICsyMSwyNiBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZ2YWx1ZSk7CiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CisKKwkJaWYgKHZhbHVlID4gMykgeworCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCQkgICAgICIlczogaW52YWxpZCBzZWN0aW9uIDB4JWx4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJcHZ0LT5pbmplY3Rpb24uc2VjdGlvbiA9ICh1MzIpIHZhbHVlOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFtZDY0X2luamVjdF93b3JkX3Nob3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBwdnQtPmluamVjdGlvbi53b3JkKTsKK30KKwogLyoKICAqIHN0b3JlIGVycm9yIGluamVjdGlvbiB3b3JkIHZhbHVlIHdoaWNoIHJlZmVycyB0byBvbmUgb2YgOSAxNi1iaXQgd29yZCBvZiB0aGUKICAqIDE2LWJ5dGUgKDEyOC1iaXQgKyBFQ0MgYml0cykgc2VjdGlvbgpAQCAtMzcsMTQgKzU3LDI1IEBACiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZ2YWx1ZSk7CiAJaWYgKHJldCAhPSAtRUlOVkFMKSB7CiAKLQkJdmFsdWUgPSAodmFsdWUgPD0gOCkgPyB2YWx1ZSA6IDA7Ci0JCXB2dC0+aW5qZWN0aW9uLndvcmQgPSAodTMyKSB2YWx1ZTsKKwkJaWYgKHZhbHVlID4gOCkgeworCQkJYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCQkgICAgICIlczogaW52YWxpZCB3b3JkIDB4JWx4XG4iLAorCQkJCSAgICAgX19mdW5jX18sIHZhbHVlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAKKwkJcHZ0LT5pbmplY3Rpb24ud29yZCA9ICh1MzIpIHZhbHVlOwogCQlyZXR1cm4gY291bnQ7CiAJfQogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFtZDY0X2luamVjdF9lY2NfdmVjdG9yX3Nob3coc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFtZDY0X3B2dCAqcHZ0ID0gbWNpLT5wdnRfaW5mbzsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCBwdnQtPmluamVjdGlvbi5iaXRfbWFwKTsKK30KKwogLyoKICAqIHN0b3JlIDE2IGJpdCBlcnJvciBpbmplY3Rpb24gdmVjdG9yIHdoaWNoIGVuYWJsZXMgaW5qZWN0aW5nIGVycm9ycyB0byB0aGUKICAqIGNvcnJlc3BvbmRpbmcgYml0IHdpdGhpbiB0aGUgZXJyb3IgaW5qZWN0aW9uIHdvcmQgYWJvdmUuIFdoZW4gdXNlZCBkdXJpbmcgYQpAQCAtNjAsOCArOTEsMTQgQEAKIAlyZXQgPSBzdHJpY3Rfc3RydG91bChkYXRhLCAxNiwgJnZhbHVlKTsKIAlpZiAocmV0ICE9IC1FSU5WQUwpIHsKIAotCQlwdnQtPmluamVjdGlvbi5iaXRfbWFwID0gKHUzMikgdmFsdWUgJiAweEZGRkY7CisJCWlmICh2YWx1ZSAmIDB4RkZGRjAwMDApIHsKKwkJCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsCisJCQkJICAgICAiJXM6IGludmFsaWQgRWNjVmVjdG9yOiAweCVseFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCB2YWx1ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCisJCXB2dC0+aW5qZWN0aW9uLmJpdF9tYXAgPSAodTMyKSB2YWx1ZTsKIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtMTQ3LDcgKzE4NCw3IEBACiAJCQkubmFtZSA9ICJpbmplY3Rfc2VjdGlvbiIsCiAJCQkubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUikKIAkJfSwKLQkJLnNob3cgPSBOVUxMLAorCQkuc2hvdyA9IGFtZDY0X2luamVjdF9zZWN0aW9uX3Nob3csCiAJCS5zdG9yZSA9IGFtZDY0X2luamVjdF9zZWN0aW9uX3N0b3JlLAogCX0sCiAJewpAQCAtMTU1LDcgKzE5Miw3IEBACiAJCQkubmFtZSA9ICJpbmplY3Rfd29yZCIsCiAJCQkubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUikKIAkJfSwKLQkJLnNob3cgPSBOVUxMLAorCQkuc2hvdyA9IGFtZDY0X2luamVjdF93b3JkX3Nob3csCiAJCS5zdG9yZSA9IGFtZDY0X2luamVjdF93b3JkX3N0b3JlLAogCX0sCiAJewpAQCAtMTYzLDcgKzIwMCw3IEBACiAJCQkubmFtZSA9ICJpbmplY3RfZWNjX3ZlY3RvciIsCiAJCQkubW9kZSA9IChTX0lSVUdPIHwgU19JV1VTUikKIAkJfSwKLQkJLnNob3cgPSBOVUxMLAorCQkuc2hvdyA9IGFtZDY0X2luamVjdF9lY2NfdmVjdG9yX3Nob3csCiAJCS5zdG9yZSA9IGFtZDY0X2luamVjdF9lY2NfdmVjdG9yX3N0b3JlLAogCX0sCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNlX2FtZC5jCmluZGV4IDBjMjFjMzcuLjcxM2VkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jZV9hbWQuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tY2VfYW1kLmMKQEAgLTMsNiArMyw3IEBACiAKIHN0YXRpYyBib29sIHJlcG9ydF9nYXJ0X2Vycm9yczsKIHN0YXRpYyB2b2lkICgqbmJfYnVzX2RlY29kZXIpKGludCBub2RlX2lkLCBzdHJ1Y3QgZXJyX3JlZ3MgKnJlZ3MpOworc3RhdGljIHZvaWQgKCpvcmlnX21jZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSk7CiAKIHZvaWQgYW1kX3JlcG9ydF9nYXJ0X2Vycm9ycyhib29sIHYpCiB7CkBAIC0zNjIsNyArMzYzLDcgQEAKIAkJcHJfd2FybmluZygiSHVoPyBVbmtub3duIE1DRSBlcnJvciAweCV4XG4iLCBlYyk7CiB9CiAKLXZvaWQgZGVjb2RlX21jZShzdHJ1Y3QgbWNlICptKQorc3RhdGljIHZvaWQgYW1kX2RlY29kZV9tY2Uoc3RydWN0IG1jZSAqbSkKIHsKIAlzdHJ1Y3QgZXJyX3JlZ3MgcmVnczsKIAlpbnQgbm9kZSwgZWNjOwpAQCAtNDIwLDMgKzQyMSwzMiBAQAogCiAJYW1kX2RlY29kZV9lcnJfY29kZShtLT5zdGF0dXMgJiAweGZmZmYpOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBtY2VfYW1kX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFdlIGNhbiBkZWNvZGUgTUNFcyBmb3IgT3B0ZXJvbiBhbmQgbGF0ZXIgQ1BVczoKKwkgKi8KKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgJiYKKwkgICAgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4ZikpIHsKKwkJLyogc2FmZSB0aGUgZGVmYXVsdCBkZWNvZGUgbWNlIGNhbGxiYWNrICovCisJCW9yaWdfbWNlX2NhbGxiYWNrID0geDg2X21jZV9kZWNvZGVfY2FsbGJhY2s7CisKKwkJeDg2X21jZV9kZWNvZGVfY2FsbGJhY2sgPSBhbWRfZGVjb2RlX21jZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKG1jZV9hbWRfaW5pdCk7CisKKyNpZmRlZiBNT0RVTEUKK3N0YXRpYyB2b2lkIF9fZXhpdCBtY2VfYW1kX2V4aXQodm9pZCkKK3sKKwl4ODZfbWNlX2RlY29kZV9jYWxsYmFjayA9IG9yaWdfbWNlX2NhbGxiYWNrOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBNQ0UgZGVjb2RlciIpOworTU9EVUxFX0FMSUFTKCJlZGFjLW1jZS1hbWQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9leGl0KG1jZV9hbWRfZXhpdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCmluZGV4IGQzMzUwODZmLi43N2E5NTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvaTUwMDBfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9pNTAwMF9lZGFjLmMKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8xLCB3aGVyZSwKIAkJCQkJJnB2dC0+YjFfbXRyW3Nsb3Rfcm93XSk7CiAJCQlkZWJ1Z2YyKCJNVFIlZCB3aGVyZT0weCV4IEIxIHZhbHVlPTB4JXhcbiIsIHNsb3Rfcm93LAotCQkJCXdoZXJlLCBwdnQtPmIwX210cltzbG90X3Jvd10pOworCQkJCXdoZXJlLCBwdnQtPmIxX210cltzbG90X3Jvd10pOwogCQl9IGVsc2UgewogCQkJcHZ0LT5iMV9tdHJbc2xvdF9yb3ddID0gMDsKIAkJfQpAQCAtMTIzMiw3ICsxMjMyLDcgQEAKIAlzdHJ1Y3QgY3Nyb3dfaW5mbyAqcF9jc3JvdzsKIAlpbnQgZW1wdHksIGNoYW5uZWxfY291bnQ7CiAJaW50IG1heF9jc3Jvd3M7Ci0JaW50IG10cjsKKwlpbnQgbXRyLCBtdHIxOwogCWludCBjc3Jvd19tZWdzOwogCWludCBjaGFubmVsOwogCWludCBjc3JvdzsKQEAgLTEyNTEsOSArMTI1MSwxMCBAQAogCiAJCS8qIHVzZSBicmFuY2ggMCBmb3IgdGhlIGJhc2lzICovCiAJCW10ciA9IHB2dC0+YjBfbXRyW2Nzcm93ID4+IDFdOworCQltdHIxID0gcHZ0LT5iMV9tdHJbY3Nyb3cgPj4gMV07CiAKIAkJLyogaWYgbm8gRElNTVMgb24gdGhpcyByb3csIGNvbnRpbnVlICovCi0JCWlmICghTVRSX0RJTU1TX1BSRVNFTlQobXRyKSkKKwkJaWYgKCFNVFJfRElNTVNfUFJFU0VOVChtdHIpICYmICFNVFJfRElNTVNfUFJFU0VOVChtdHIxKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZBS0UgT1VUIFZBTFVFUywgRklYTUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTU0MDBfZWRhYy5jCmluZGV4IGIwOGI2ZDguLmY5OWQxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTQwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1NDAwX2VkYWMuYwpAQCAtNDYsOSArNDYsMTAgQEAKIC8qIExpbWl0cyBmb3IgaTU0MDAgKi8KICNkZWZpbmUgTlVNX01UUlNfUEVSX0JSQU5DSAk0CiAjZGVmaW5lIENIQU5ORUxTX1BFUl9CUkFOQ0gJMgorI2RlZmluZSBNQVhfRElNTVNfUEVSX0NIQU5ORUwJTlVNX01UUlNfUEVSX0JSQU5DSAogI2RlZmluZQlNQVhfQ0hBTk5FTFMJCTQKLSNkZWZpbmUgTUFYX0RJTU1TCQkoTUFYX0NIQU5ORUxTICogNCkJLyogVXAgdG8gNCBESU1NJ3MgcGVyIGNoYW5uZWwgKi8KLSNkZWZpbmUgTUFYX0NTUk9XUwkJKE1BWF9ESU1NUyAqIDIpCQkvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisvKiBtYXggcG9zc2libGUgY3Nyb3dzIHBlciBjaGFubmVsICovCisjZGVmaW5lIE1BWF9DU1JPV1MJCShNQVhfRElNTVNfUEVSX0NIQU5ORUwpCiAKIC8qIERldmljZSAxNiwKICAqIEZ1bmN0aW9uIDA6IFN5c3RlbSBBZGRyZXNzCkBAIC0zMzEsNyArMzMyLDYgQEAKIAogc3RydWN0IGk1NDAwX2RpbW1faW5mbyB7CiAJaW50IG1lZ2FieXRlczsJCS8qIHNpemUsIDAgbWVhbnMgbm90IHByZXNlbnQgICovCi0JaW50IGR1YWxfcmFuazsKIH07CiAKIC8qIGRyaXZlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC04NDksMTEgKzg0OSw5IEBACiAJaW50IG47CiAKIAkvKiBUaGVyZSBpcyBvbmUgTVRSIGZvciBlYWNoIHNsb3QgcGFpciBvZiBGQi1ESU1NcywKLQkgICBFYWNoIHNsb3QgbWF5IGhhdmUgb25lIG9yIHR3byByYW5rcyAoMiBjc3Jvd3MpLAogCSAgIEVhY2ggc2xvdCBwYWlyIG1heSBiZSBhdCBicmFuY2ggMCBvciBicmFuY2ggMS4KLQkgICBTbywgY3Nyb3cgc2hvdWxkIGJlIGRpdmlkZWQgYnkgZWlnaHQKIAkgKi8KLQluID0gY3Nyb3cgPj4gMzsKKwluID0gY3Nyb3c7CiAKIAlpZiAobiA+PSBOVU1fTVRSU19QRVJfQlJBTkNIKSB7CiAJCWRlYnVnZjAoIkVSUk9SOiB0cnlpbmcgdG8gYWNjZXNzIGFuIGludmFsaWQgY3Nyb3c6ICVkXG4iLApAQCAtOTA1LDI1ICs5MDMsMjIgQEAKIAkJYW1iX3ByZXNlbnRfcmVnID0gZGV0ZXJtaW5lX2FtYl9wcmVzZW50X3JlZyhwdnQsIGNoYW5uZWwpOwogCiAJCS8qIERldGVybWluZSBpZiB0aGVyZSBpcyBhIERJTU0gcHJlc2VudCBpbiB0aGlzIERJTU0gc2xvdCAqLwotCQlpZiAoYW1iX3ByZXNlbnRfcmVnICYgKDEgPDwgKGNzcm93ID4+IDEpKSkgewotCQkJZGluZm8tPmR1YWxfcmFuayA9IE1UUl9ESU1NX1JBTksobXRyKTsKKwkJaWYgKGFtYl9wcmVzZW50X3JlZyAmICgxIDw8IGNzcm93KSkgeworCQkJLyogU3RhcnQgd2l0aCB0aGUgbnVtYmVyIG9mIGJpdHMgZm9yIGEgQmFuaworCQkJICogb24gdGhlIERSQU0gKi8KKwkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7CisJCQkvKiBBZGQgdGhlbnVtYmVyIG9mIFJPVyBiaXRzICovCisJCQlhZGRyQml0cyArPSBNVFJfRElNTV9ST1dTX0FERFJfQklUUyhtdHIpOworCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX0NPTFNfQUREUl9CSVRTKG10cik7CisJCQkvKiBhZGQgdGhlIG51bWJlciBvZiBSQU5LIGJpdHMgKi8KKwkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JBTksobXRyKTsKIAotCQkJaWYgKCEoKGRpbmZvLT5kdWFsX3JhbmsgPT0gMCkgJiYKLQkJCQkoKGNzcm93ICYgMHgxKSA9PSAweDEpKSkgewotCQkJCS8qIFN0YXJ0IHdpdGggdGhlIG51bWJlciBvZiBiaXRzIGZvciBhIEJhbmsKLQkJCQkgKiBvbiB0aGUgRFJBTSAqLwotCQkJCWFkZHJCaXRzID0gTVRSX0RSQU1fQkFOS1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogQWRkIHRoZW51bWJlciBvZiBST1cgYml0cyAqLwotCQkJCWFkZHJCaXRzICs9IE1UUl9ESU1NX1JPV1NfQUREUl9CSVRTKG10cik7Ci0JCQkJLyogYWRkIHRoZSBudW1iZXIgb2YgQ09MVU1OIGJpdHMgKi8KLQkJCQlhZGRyQml0cyArPSBNVFJfRElNTV9DT0xTX0FERFJfQklUUyhtdHIpOworCQkJYWRkckJpdHMgKz0gNjsJLyogYWRkIDY0IGJpdHMgcGVyIERJTU0gKi8KKwkJCWFkZHJCaXRzIC09IDIwOwkvKiBkaXZpZGUgYnkgMl5eMjAgKi8KKwkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KIAotCQkJCWFkZHJCaXRzICs9IDY7CS8qIGFkZCA2NCBiaXRzIHBlciBESU1NICovCi0JCQkJYWRkckJpdHMgLT0gMjA7CS8qIGRpdmlkZSBieSAyXl4yMCAqLwotCQkJCWFkZHJCaXRzIC09IDM7CS8qIDggYml0cyBwZXIgYnl0ZXMgKi8KLQotCQkJCWRpbmZvLT5tZWdhYnl0ZXMgPSAxIDw8IGFkZHJCaXRzOwotCQkJfQorCQkJZGluZm8tPm1lZ2FieXRlcyA9IDEgPDwgYWRkckJpdHM7CiAJCX0KIAl9CiB9CkBAIC05NTEsMTIgKzk0NiwxMiBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogU2NhbiBhbGwgdGhlIGFjdHVhbCBDU1JPV1MgKHdoaWNoIGlzICMgb2YgRElNTVMgKiAyKQorCS8qIFNjYW4gYWxsIHRoZSBhY3R1YWwgQ1NST1dTCiAJICogYW5kIGNhbGN1bGF0ZSB0aGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRElNTQogCSAqIFN0YXJ0IHdpdGggdGhlIGhpZ2hlc3QgY3Nyb3cgZmlyc3QsIHRvIGRpc3BsYXkgaXQgZmlyc3QKIAkgKiBhbmQgd29yayB0b3dhcmQgdGhlIDB0aCBjc3JvdwogCSAqLwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCWZvciAoY3Nyb3cgPSBtYXhfY3Nyb3dzIC0gMTsgY3Nyb3cgPj0gMDsgY3Nyb3ctLSkgewogCiAJCS8qIG9uIGFuIG9kZCBjc3JvdywgZmlyc3Qgb3V0cHV0IGEgJ2JvdW5kYXJ5JyBtYXJrZXIsCkBAIC0xMDY0LDcgKzEwNTksNyBAQAogCiAJLyogR2V0IHRoZSBzZXQgb2YgTVRSWzAtM10gcmVncyBieSBlYWNoIGJyYW5jaCAqLwogCWZvciAoc2xvdF9yb3cgPSAwOyBzbG90X3JvdyA8IE5VTV9NVFJTX1BFUl9CUkFOQ0g7IHNsb3Rfcm93KyspIHsKLQkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MzIpKTsKKwkJaW50IHdoZXJlID0gTVRSMCArIChzbG90X3JvdyAqIHNpemVvZih1MTYpKTsKIAogCQkvKiBCcmFuY2ggMCBzZXQgb2YgTVRSIHJlZ2lzdGVycyAqLwogCQlwY2lfcmVhZF9jb25maWdfd29yZChwdnQtPmJyYW5jaF8wLCB3aGVyZSwKQEAgLTExNDYsNyArMTE0MSw3IEBACiAJcHZ0ID0gbWNpLT5wdnRfaW5mbzsKIAogCWNoYW5uZWxfY291bnQgPSBwdnQtPm1heGNoOwotCW1heF9jc3Jvd3MgPSBwdnQtPm1heGRpbW1wZXJjaCAqIDI7CisJbWF4X2Nzcm93cyA9IHB2dC0+bWF4ZGltbXBlcmNoOwogCiAJZW1wdHkgPSAxOwkJLyogQXNzdW1lIE5PIG1lbW9yeSAqLwogCkBAIC0xMjE1LDI4ICsxMjEwLDYgQEAKIH0KIAogLyoKLSAqIGk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2Nzcm93cywgJm51bV9jaGFubmVscykKLSAqCi0gKglhc2sgdGhlIGRldmljZSBob3cgbWFueSBjaGFubmVscyBhcmUgcHJlc2VudCBhbmQgaG93IG1hbnkgQ1NST1dTCi0gKgkgYXMgd2VsbAotICovCi1zdGF0aWMgdm9pZCBpNTQwMF9nZXRfZGltbV9hbmRfY2hhbm5lbF9jb3VudHMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCWludCAqbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQlpbnQgKm51bV9jaGFubmVscykKLXsKLQl1OCB2YWx1ZTsKLQotCS8qIE5lZWQgdG8gcmV0cmlldmUganVzdCBob3cgbWFueSBjaGFubmVscyBhbmQgZGltbXMgcGVyIGNoYW5uZWwgYXJlCi0JICogc3VwcG9ydGVkIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2xsZXIKLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBNQVhESU1NUEVSQ0gsICZ2YWx1ZSk7Ci0JKm51bV9kaW1tc19wZXJfY2hhbm5lbCA9IChpbnQpdmFsdWUgKiAyOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgTUFYQ0gsICZ2YWx1ZSk7Ci0JKm51bV9jaGFubmVscyA9IChpbnQpdmFsdWU7Ci19Ci0KLS8qCiAgKglpNTQwMF9wcm9iZTEJUHJvYmUgZm9yIE9ORSBpbnN0YW5jZSBvZiBkZXZpY2UgdG8gc2VlIGlmIGl0IGlzCiAgKgkJCXByZXNlbnQuCiAgKglyZXR1cm46CkBAIC0xMjYzLDIyICsxMjM2LDE2IEBACiAJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIEFzayB0aGUgZGV2aWNlcyBmb3IgdGhlIG51bWJlciBvZiBDU1JPV1MgYW5kIENIQU5ORUxTIHNvCi0JICogdGhhdCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBtZW1vcnkgcmVzb3VyY2VzLCBldGMKLQkgKgotCSAqIFRoZSBDaGlwc2V0IHdpbGwgcmVwb3J0IHdoYXQgaXQgY2FuIGhhbmRsZSB3aGljaCB3aWxsIGJlIGdyZWF0ZXIKLQkgKiBvciBlcXVhbCB0byB3aGF0IHRoZSBtb3RoZXJib2FyZCBtYW51ZmFjdHVyZXIgd2lsbCBpbXBsZW1lbnQuCi0JICoKLQkgKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKKwkvKiBBcyB3ZSBkb24ndCBoYXZlIGEgbW90aGVyYm9hcmQgaWRlbnRpZmljYXRpb24gcm91dGluZSB0byBkZXRlcm1pbmUKIAkgKiBhY3R1YWwgbnVtYmVyIG9mIHNsb3RzL2RpbW1zIHBlciBjaGFubmVsLCB3ZSB0aHVzIHV0aWxpemUgdGhlCiAJICogcmVzb3VyY2UgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjaGlwc2V0LiBUaHVzLCB3ZSBtaWdodCBoYXZlCiAJICogaGF2ZSBtb3JlIERJTU1zIHBlciBjaGFubmVsIHRoYW4gYWN0dWFsbHkgb24gdGhlIG1vYm8sIGJ1dCB0aGlzCiAJICogYWxsb3dzIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCB1cHRvIHRoZSBjaGlwc2V0IG1heCwgd2l0aG91dAogCSAqIHNvbWUgZmFuY3kgbW9ibyBkZXRlcm1pbmF0aW9uLgogCSAqLwotCWk1NDAwX2dldF9kaW1tX2FuZF9jaGFubmVsX2NvdW50cyhwZGV2LCAmbnVtX2RpbW1zX3Blcl9jaGFubmVsLAotCQkJCQkmbnVtX2NoYW5uZWxzKTsKLQludW1fY3Nyb3dzID0gbnVtX2RpbW1zX3Blcl9jaGFubmVsICogMjsKKwludW1fZGltbXNfcGVyX2NoYW5uZWwgPSBNQVhfRElNTVNfUEVSX0NIQU5ORUw7CisJbnVtX2NoYW5uZWxzID0gTUFYX0NIQU5ORUxTOworCW51bV9jc3Jvd3MgPSBudW1fZGltbXNfcGVyX2NoYW5uZWw7CiAKIAlkZWJ1Z2YwKCJNQzogJXMoKTogTnVtYmVyIG9mIC0gQ2hhbm5lbHM9ICVkICBESU1NUz0gJWQgIENTUk9XUz0gJWRcbiIsCiAJCV9fZnVuY19fLCBudW1fY2hhbm5lbHMsIG51bV9kaW1tc19wZXJfY2hhbm5lbCwgbnVtX2Nzcm93cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggMTU3ZjY1MC4uY2YyNzQwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjYsNyArMjYsOSBAQAogI2luY2x1ZGUgIm1wYzg1eHhfZWRhYy5oIgogCiBzdGF0aWMgaW50IGVkYWNfZGV2X2lkeDsKKyNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW50IGVkYWNfcGNpX2lkeDsKKyNlbmRpZgogc3RhdGljIGludCBlZGFjX21jX2lkeDsKIAogc3RhdGljIHUzMiBvcmlnX2Rkcl9lcnJfZGlzYWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IGNlZDE4NmQuLjUwODkzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvc2JwMi5jIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKaW5kZXggNTBmMDE3Ni4uOThkYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9zYnAyLmMKQEAgLTE4OCwxNCArMTg4LDcgQEAKIC8qIEltcG9zc2libGUgbG9naW5faWQsIHRvIGRldGVjdCBsb2dvdXQgYXR0ZW1wdCBiZWZvcmUgc3VjY2Vzc2Z1bCBsb2dpbiAqLwogI2RlZmluZSBJTlZBTElEX0xPR0lOX0lEIDB4MTAwMDAKIAotLyoKLSAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKLSAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAotICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCi0gKi8KLSNkZWZpbmUgU0JQMl9NSU5fTE9HSU5fT1JCX1RJTUVPVVQJNTAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX01BWF9MT0dJTl9PUkJfVElNRU9VVAk0MDAwMFUJLyogVGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQlAyX09SQl9USU1FT1VUCQkyMDAwVQkvKiBUaW1lb3V0IGluIG1zICovCisjZGVmaW5lIFNCUDJfT1JCX1RJTUVPVVQJCTIwMDBVCQkvKiBUaW1lb3V0IGluIG1zICovCiAjZGVmaW5lIFNCUDJfT1JCX05VTEwJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFNCUDJfUkVUUllfTElNSVQJCTB4ZgkJLyogMTUgcmV0cmllcyAqLwogI2RlZmluZSBTQlAyX0NZQ0xFX0xJTUlUCQkoMHhjOCA8PCAxMikJLyogMjAwIDEyNXVzIGN5Y2xlcyAqLwpAQCAtMTAzNCw3ICsxMDI3LDYgQEAKIHsKIAlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOwogCWludCBrZXksIHZhbHVlOwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXJlY3RvcnkpOwogCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKQEAgLTEwNTksMTcgKzEwNTEsNyBAQAogCiAJCWNhc2UgU0JQMl9DU1JfVU5JVF9DSEFSQUNURVJJU1RJQ1M6CiAJCQkvKiB0aGUgdGltZW91dCB2YWx1ZSBpcyBzdG9yZWQgaW4gNTAwbXMgdW5pdHMgKi8KLQkJCXRpbWVvdXQgPSAoKHVuc2lnbmVkIGludCkgdmFsdWUgPj4gOCAmIDB4ZmYpICogNTAwOwotCQkJdGltZW91dCA9IG1heCh0aW1lb3V0LCBTQlAyX01JTl9MT0dJTl9PUkJfVElNRU9VVCk7Ci0JCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9Ci0JCQkJICBtaW4odGltZW91dCwgU0JQMl9NQVhfTE9HSU5fT1JCX1RJTUVPVVQpOwotCi0JCQlpZiAodGltZW91dCA+IHRndC0+bWd0X29yYl90aW1lb3V0KQotCQkJCWZ3X25vdGlmeSgiJXM6IGNvbmZpZyByb20gY29udGFpbnMgJWRzICIKLQkJCQkJICAibWFuYWdlbWVudCBPUkIgdGltZW91dCwgbGltaXRpbmcgIgotCQkJCQkgICJ0byAlZHNcbiIsIHRndC0+YnVzX2lkLAotCQkJCQkgIHRpbWVvdXQgLyAxMDAwLAotCQkJCQkgIHRndC0+bWd0X29yYl90aW1lb3V0IC8gMTAwMCk7CisJCQl0Z3QtPm1ndF9vcmJfdGltZW91dCA9ICh2YWx1ZSA+PiA4ICYgMHhmZikgKiA1MDA7CiAJCQlicmVhazsKIAogCQljYXNlIFNCUDJfQ1NSX0xPR0lDQUxfVU5JVF9OVU1CRVI6CkBAIC0xMDg3LDYgKzEwNjksMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFBlciBzZWN0aW9uIDcuNC44IG9mIHRoZSBTQlAtMiBzcGVjLCBhIG1ndF9PUkJfdGltZW91dCB2YWx1ZSBjYW4gYmUKKyAqIHByb3ZpZGVkIGluIHRoZSBjb25maWcgcm9tLiBNb3N0IGRldmljZXMgZG8gcHJvdmlkZSBhIHZhbHVlLCB3aGljaAorICogd2UnbGwgdXNlIGZvciBsb2dpbiBtYW5hZ2VtZW50IG9yYnMsIGJ1dCB3aXRoIHNvbWUgc2FuZSBsaW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dChzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCkKK3sKKwl1bnNpZ25lZCBpbnQgdGltZW91dCA9IHRndC0+bWd0X29yYl90aW1lb3V0OworCisJaWYgKHRpbWVvdXQgPiA0MDAwMCkKKwkJZndfbm90aWZ5KCIlczogJWRzIG1ndF9PUkJfdGltZW91dCBsaW1pdGVkIHRvIDQwc1xuIiwKKwkJCSAgdGd0LT5idXNfaWQsIHRpbWVvdXQgLyAxMDAwKTsKKworCXRndC0+bWd0X29yYl90aW1lb3V0ID0gY2xhbXBfdmFsKHRpbWVvdXQsIDUwMDAsIDQwMDAwKTsKK30KKwogc3RhdGljIHZvaWQgc2JwMl9pbml0X3dvcmthcm91bmRzKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LCB1MzIgbW9kZWwsCiAJCQkJICB1MzIgZmlybXdhcmVfcmV2aXNpb24pCiB7CkBAIC0xMTcxLDYgKzExNjksNyBAQAogCQkJICAgICAgICZmaXJtd2FyZV9yZXZpc2lvbikgPCAwKQogCQlnb3RvIGZhaWxfdGd0X3B1dDsKIAorCXNicDJfY2xhbXBfbWFuYWdlbWVudF9vcmJfdGltZW91dCh0Z3QpOwogCXNicDJfaW5pdF93b3JrYXJvdW5kcyh0Z3QsIG1vZGVsLCBmaXJtd2FyZV9yZXZpc2lvbik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwppbmRleCA0MjBhOTZlLi4wNTFkMWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQuYwpAQCAtOTM5LDcgKzkzOSw3IEBACiAKIAlpZiAoaWJmdF9hZGRyKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImlCRlQgZGV0ZWN0ZWQgYXQgMHglbGx4LlxuIiwKLQkJICAgICAgICh1NjQpdmlydF90b19waHlzKCh2b2lkICopaWJmdF9hZGRyKSk7CisJCSAgICAgICAodTY0KWlzYV92aXJ0X3RvX2J1cyhpYmZ0X2FkZHIpKTsKIAogCQlyYyA9IGliZnRfY2hlY2tfZGV2aWNlKCk7CiAJCWlmIChyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCmluZGV4IGQ1M2ZiYmYuLmRmYjE1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAJCSAqIHNvIHNraXAgdGhhdCBhcmVhICovCiAJCWlmIChwb3MgPT0gVkdBX01FTSkKIAkJCXBvcyArPSBWR0FfU0laRTsKLQkJdmlydCA9IHBoeXNfdG9fdmlydChwb3MpOworCQl2aXJ0ID0gaXNhX2J1c190b192aXJ0KHBvcyk7CiAJCWlmIChtZW1jbXAodmlydCwgSUJGVF9TSUdOLCBJQkZUX1NJR05fTEVOKSA9PSAwKSB7CiAJCQl1bnNpZ25lZCBsb25nICphZGRyID0KLQkJCSAgICAodW5zaWduZWQgbG9uZyAqKXBoeXNfdG9fdmlydChwb3MgKyA0KTsKKwkJCSAgICAodW5zaWduZWQgbG9uZyAqKWlzYV9idXNfdG9fdmlydChwb3MgKyA0KTsKIAkJCWxlbiA9ICphZGRyOwogCQkJLyogaWYgdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUgZXh0ZW5kcyBwYXN0IDFNLAogCQkJICogdGhlIHRhYmxlIGNhbm5vdCBiZSB2YWxpZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IGJiMTFhNDIuLjUwZGUwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjYxLDcgKzY2MSw3IEBACiAKIAkJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZ3Bpb19jbGFzcywgZGVzYy0+Y2hpcC0+ZGV2LCBNS0RFVigwLCAwKSwKIAkJCQlkZXNjLCBpb25hbWUgPyBpb25hbWUgOiAiZ3BpbyVkIiwgZ3Bpbyk7Ci0JCWlmIChkZXYpIHsKKwkJaWYgKCFJU19FUlIoZGV2KSkgewogCQkJaWYgKGRpcmVjdGlvbl9tYXlfY2hhbmdlKQogCQkJCXN0YXR1cyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAogCQkJCQkJJmdwaW9fYXR0cl9ncm91cCk7CkBAIC02NzksNyArNjc5LDcgQEAKIAkJCWlmIChzdGF0dXMgIT0gMCkKIAkJCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOwogCQl9IGVsc2UKLQkJCXN0YXR1cyA9IC1FTk9ERVY7CisJCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJCWlmIChzdGF0dXMgPT0gMCkKIAkJCXNldF9iaXQoRkxBR19FWFBPUlQsICZkZXNjLT5mbGFncyk7CiAJfQpAQCAtODAwLDExICs4MDAsMTEgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZncGlvX2NsYXNzLCBjaGlwLT5kZXYsIE1LREVWKDAsIDApLCBjaGlwLAogCQkJCSJncGlvY2hpcCVkIiwgY2hpcC0+YmFzZSk7Ci0JaWYgKGRldikgeworCWlmICghSVNfRVJSKGRldikpIHsKIAkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCiAJCQkJJmdwaW9jaGlwX2F0dHJfZ3JvdXApOwogCX0gZWxzZQotCQlzdGF0dXMgPSAtRU5PREVWOworCQlzdGF0dXMgPSBQVFJfRVJSKGRldik7CiAJY2hpcC0+ZXhwb3J0ZWQgPSAoc3RhdHVzID09IDApOwogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAKQEAgLTE0ODcsNyArMTQ4Nyw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdwaW9saWJfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdwaW9saWJfb3BlcmF0aW9ucyA9IHsKIAkub3BlbgkJPSBncGlvbGliX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vdHdsNDAzMC1ncGlvLmMKaW5kZXggYWZhZDE0Ny4uNDkzODRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3R3bDQwMzAtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90d2w0MDMwLWdwaW8uYwpAQCAtNDYwLDcgKzQ2MCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorLyogQ2Fubm90IHVzZSBfX2RldmV4aXQgYXMgZ3Bpb190d2w0MDMwX3Byb2JlKCkgY2FsbHMgdXMgKi8KK3N0YXRpYyBpbnQgZ3Bpb190d2w0MDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgc3RhdHVzOwpAQCAtNDkzLDcgKzQ5NCw3IEBACiAJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfZ3BpbyIsCiAJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5wcm9iZQkJPSBncGlvX3R3bDQwMzBfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChncGlvX3R3bDQwMzBfcmVtb3ZlKSwKKwkucmVtb3ZlCQk9IGdwaW9fdHdsNDAzMF9yZW1vdmUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBncGlvX3R3bDQwMzBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwppbmRleCBiYTcyOGFkLi41Y2FlMGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNDgyLDYgKzQ4Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnVzZXJfbW9kZXMsIGhlYWQpCiAJCWRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUpOwogCisJa2ZyZWUoY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZSk7CiAJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJZHJtX21vZGVfb2JqZWN0X3B1dChkZXYsICZjb25uZWN0b3ItPmJhc2UpOwogCWxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOwpAQCAtMTU1NSw4ICsxNTU2LDYgQEAKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CiAJaW50IHJldCA9IDA7CiAKLQlEUk1fREVCVUdfS01TKCJcbiIpOwotCiAJaWYgKCFyZXEtPmZsYWdzKSB7CiAJCURSTV9FUlJPUigibm8gb3BlcmF0aW9uIHNldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IGZlODY5NzQuLmJiZmQxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2NydGMuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAKIHN0YXRpYyB2b2lkIGRybV9tb2RlX3ZhbGlkYXRlX2ZsYWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgICBpbnQgZmxhZ3MpCkBAIC05MCw3ICs5MSwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtb2RlLCB0LCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKIAkJbW9kZS0+c3RhdHVzID0gTU9ERV9VTlZFUklGSUVEOwogCi0JY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3ItPmZ1bmNzLT5kZXRlY3QoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSkgeworCQlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQllbHNlCisJCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+Zm9yY2UpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5mb3JjZShjb25uZWN0b3IpOworCX0gZWxzZQorCQljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IpOwogCiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKSB7CiAJCURSTV9ERUJVR19LTVMoIiVzIGlzIGRpc2Nvbm5lY3RlZFxuIiwKQEAgLTI2Nyw2ICsyNzYsNjYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGJvb2wgZHJtX2hhc19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3IgKmZiX2hlbHBfY29ubiA9IGNvbm5lY3Rvci0+ZmJfaGVscGVyX3ByaXZhdGU7CisJc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlICpjbWRsaW5lX21vZGU7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIGZhbHNlOworCisJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCXJldHVybiBjbWRsaW5lX21vZGUtPnNwZWNpZmllZDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpkcm1fcGlja19jbWRsaW5lX21vZGUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7CisKKwlpZiAoIWZiX2hlbHBfY29ubikKKwkJcmV0dXJuIG1vZGU7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKGNtZGxpbmVfbW9kZS0+c3BlY2lmaWVkID09IGZhbHNlKQorCQlyZXR1cm4gbW9kZTsKKworCS8qIGF0dGVtcHQgdG8gZmluZCBhIG1hdGNoaW5nIG1vZGUgaW4gdGhlIGxpc3Qgb2YgbW9kZXMKKwkgKiAgd2UgaGF2ZSBnb3R0ZW4gc28gZmFyLCBpZiBub3QgYWRkIGEgQ1ZUIG1vZGUgdGhhdCBjb25mb3JtcworCSAqLworCWlmIChjbWRsaW5lX21vZGUtPnJiIHx8IGNtZGxpbmVfbW9kZS0+bWFyZ2lucykKKwkJZ290byBjcmVhdGVfbW9kZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpIHsKKwkJLyogY2hlY2sgd2lkdGgvaGVpZ2h0ICovCisJCWlmIChtb2RlLT5oZGlzcGxheSAhPSBjbWRsaW5lX21vZGUtPnhyZXMgfHwKKwkJICAgIG1vZGUtPnZkaXNwbGF5ICE9IGNtZGxpbmVfbW9kZS0+eXJlcykKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkKSB7CisJCQlpZiAobW9kZS0+dnJlZnJlc2ggIT0gY21kbGluZV9tb2RlLT5yZWZyZXNoKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlKSB7CisJCQlpZiAoIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gbW9kZTsKKwl9CisKK2NyZWF0ZV9tb2RlOgorCW1vZGUgPSBkcm1fY3Z0X21vZGUoY29ubmVjdG9yLT5kZXYsIGNtZGxpbmVfbW9kZS0+eHJlcywKKwkJCSAgICBjbWRsaW5lX21vZGUtPnlyZXMsCisJCQkgICAgY21kbGluZV9tb2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IGNtZGxpbmVfbW9kZS0+cmVmcmVzaCA6IDYwLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+cmIsIGNtZGxpbmVfbW9kZS0+aW50ZXJsYWNlLAorCQkJICAgIGNtZGxpbmVfbW9kZS0+bWFyZ2lucyk7CisJZHJtX21vZGVfc2V0X2NydGNpbmZvKG1vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCWxpc3RfYWRkKCZtb2RlLT5oZWFkLCAmY29ubmVjdG9yLT5tb2Rlcyk7CisJcmV0dXJuIG1vZGU7Cit9CisKIHN0YXRpYyBib29sIGRybV9jb25uZWN0b3JfZW5hYmxlZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIHN0cmljdCkKIHsKIAlib29sIGVuYWJsZTsKQEAgLTMxNywxMCArMzg2LDE2IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCURSTV9ERUJVR19LTVMoImxvb2tpbmcgZm9yIHByZWZlcnJlZCBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKLQkJCSAgY29ubmVjdG9yLT5iYXNlLmlkKTsKKwkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgY21kbGluZSBtb2RlIG9uIGNvbm5lY3RvciAlZFxuIiwKKwkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CiAKLQkJbW9kZXNbaV0gPSBkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCk7CisJCS8qIGdvdCBmb3IgY29tbWFuZCBsaW5lIG1vZGUgZmlyc3QgKi8KKwkJbW9kZXNbaV0gPSBkcm1fcGlja19jbWRsaW5lX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJaWYgKCFtb2Rlc1tpXSkgeworCQkJRFJNX0RFQlVHX0tNUygibG9va2luZyBmb3IgcHJlZmVycmVkIG1vZGUgb24gY29ubmVjdG9yICVkXG4iLAorCQkJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCk7CisJCQltb2Rlc1tpXSA9IGRybV9oYXNfcHJlZmVycmVkX21vZGUoY29ubmVjdG9yLCB3aWR0aCwgaGVpZ2h0KTsKKwkJfQogCQkvKiBObyBwcmVmZXJyZWQgbW9kZXMsIHBpY2sgb25lIG9mZiB0aGUgbGlzdCAqLwogCQlpZiAoIW1vZGVzW2ldICYmICFsaXN0X2VtcHR5KCZjb25uZWN0b3ItPm1vZGVzKSkgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2Rlc1tpXSwgJmNvbm5lY3Rvci0+bW9kZXMsIGhlYWQpCkBAIC0zNjksNiArNDQ0LDggQEAKIAlteV9zY29yZSA9IDE7CiAJaWYgKGNvbm5lY3Rvci0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKQogCQlteV9zY29yZSsrOworCWlmIChkcm1faGFzX2NtZGxpbmVfbW9kZShjb25uZWN0b3IpKQorCQlteV9zY29yZSsrOwogCWlmIChkcm1faGFzX3ByZWZlcnJlZF9tb2RlKGNvbm5lY3Rvciwgd2lkdGgsIGhlaWdodCkpCiAJCW15X3Njb3JlKys7CiAKQEAgLTk0Myw2ICsxMDIwLDggQEAKIHsKIAlpbnQgY291bnQgPSAwOwogCisJZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoZGV2KTsKKwogCWNvdW50ID0gZHJtX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZGV2LAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAogCQkJCQkJIGRldi0+bW9kZV9jb25maWcubWF4X2hlaWdodCk7CkBAIC05NTAsNyArMTAyOSw3IEBACiAJLyoKIAkgKiB3ZSBzaG91bGRuJ3QgZW5kIHVwIHdpdGggbm8gbW9kZXMgaGVyZS4KIAkgKi8KLQlXQVJOKCFjb3VudCwgIkNvbm5lY3RlZCBjb25uZWN0b3Igd2l0aCAwIG1vZGVzXG4iKTsKKwlXQVJOKCFjb3VudCwgIk5vIGNvbm5lY3RvcnMgcmVwb3J0ZWQgY29ubmVjdGVkIHdpdGggbW9kZXNcbiIpOwogCiAJZHJtX3NldHVwX2NydGNzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggOTBkNzZiYS4uY2VhNjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEwOSw3ICsxMDksOSBAQAogCiAKIC8qIFZhbGlkIEVESUQgaGVhZGVyIGhhcyB0aGVzZSBieXRlcyAqLwotc3RhdGljIHU4IGVkaWRfaGVhZGVyW10gPSB7IDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAgfTsKK3N0YXRpYyBjb25zdCB1OCBlZGlkX2hlYWRlcltdID0geworCTB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAKK307CiAKIC8qKgogICogZWRpZF9pc192YWxpZCAtIHNhbml0eSBjaGVjayBFRElEIGRhdGEKQEAgLTUwMCw2ICs1MDIsMTkgQEAKIAl9CiAJcmV0dXJuIG1vZGU7CiB9CisKKy8qCisgKiAwIGlzIHJlc2VydmVkLiAgVGhlIHNwZWMgc2F5cyAweDAxIGZpbGwgZm9yIHVudXNlZCB0aW1pbmdzLiAgU29tZSBvbGQKKyAqIG1vbml0b3JzIGZpbGwgd2l0aCBhc2NpaSBzcGFjZSAoMHgyMCkgaW5zdGVhZC4KKyAqLworc3RhdGljIGludAorYmFkX3N0ZF90aW1pbmcodTggYSwgdTggYikKK3sKKwlyZXR1cm4gKGEgPT0gMHgwMCAmJiBiID09IDB4MDApIHx8CisJICAgICAgIChhID09IDB4MDEgJiYgYiA9PSAweDAxKSB8fAorCSAgICAgICAoYSA9PSAweDIwICYmIGIgPT0gMHgyMCk7Cit9CisKIC8qKgogICogZHJtX21vZGVfc3RkIC0gY29udmVydCBzdGFuZGFyZCBtb2RlIGluZm8gKHdpZHRoLCBoZWlnaHQsIHJlZnJlc2gpIGludG8gbW9kZQogICogQHQ6IHN0YW5kYXJkIHRpbWluZyBwYXJhbXMKQEAgLTUxMyw2ICs1MjgsNyBAQAogICovCiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGVfc3RkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgc3RydWN0IHN0ZF90aW1pbmcgKnQsCisJCQkJICAgICAgaW50IHJldmlzaW9uLAogCQkJCSAgICAgIGludCB0aW1pbmdfbGV2ZWwpCiB7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7CkBAIC01MjMsMTQgKzUzOSwyMCBAQAogCXVuc2lnbmVkIHZmcmVxID0gKHQtPnZmcmVxX2FzcGVjdCAmIEVESURfVElNSU5HX1ZGUkVRX01BU0spCiAJCT4+IEVESURfVElNSU5HX1ZGUkVRX1NISUZUOwogCisJaWYgKGJhZF9zdGRfdGltaW5nKHQtPmhzaXplLCB0LT52ZnJlcV9hc3BlY3QpKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIEFjY29yZGluZyB0byB0aGUgRURJRCBzcGVjLCB0aGUgaGRpc3BsYXkgPSBoc2l6ZSAqIDggKyAyNDggKi8KIAloc2l6ZSA9IHQtPmhzaXplICogOCArIDI0ODsKIAkvKiB2cmVmcmVzaF9yYXRlID0gdmZyZXEgKyA2MCAqLwogCXZyZWZyZXNoX3JhdGUgPSB2ZnJlcSArIDYwOwogCS8qIHRoZSB2ZGlzcGxheSBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBhc3BlY3QgcmF0aW8gKi8KLQlpZiAoYXNwZWN0X3JhdGlvID09IDApCi0JCXZzaXplID0gKGhzaXplICogMTApIC8gMTY7Ci0JZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCisJaWYgKGFzcGVjdF9yYXRpbyA9PSAwKSB7CisJCWlmIChyZXZpc2lvbiA8IDMpCisJCQl2c2l6ZSA9IGhzaXplOworCQllbHNlCisJCQl2c2l6ZSA9IChoc2l6ZSAqIDEwKSAvIDE2OworCX0gZWxzZSBpZiAoYXNwZWN0X3JhdGlvID09IDEpCiAJCXZzaXplID0gKGhzaXplICogMykgLyA0OwogCWVsc2UgaWYgKGFzcGVjdF9yYXRpbyA9PSAyKQogCQl2c2l6ZSA9IChoc2l6ZSAqIDQpIC8gNTsKQEAgLTUzOCw3ICs1NjAsOCBAQAogCQl2c2l6ZSA9IChoc2l6ZSAqIDkpIC8gMTY7CiAJLyogSERUViBoYWNrICovCiAJaWYgKGhzaXplID09IDEzNjAgJiYgdnNpemUgPT0gNzY1ICYmIHZyZWZyZXNoX3JhdGUgPT0gNjApIHsKLQkJbW9kZSA9IGRybV9jdnRfbW9kZShkZXYsIGhzaXplLCB2c2l6ZSwgdnJlZnJlc2hfcmF0ZSwgMCwgMCk7CisJCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDAsCisJCQkJICAgIGZhbHNlKTsKIAkJbW9kZS0+aGRpc3BsYXkgPSAxMzY2OwogCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gMTsKIAkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfZW5kIC0gMTsKQEAgLTU1Nyw3ICs1ODAsOCBAQAogCQltb2RlID0gZHJtX2d0Zl9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBMRVZFTF9DVlQ6Ci0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBoc2l6ZSwgdnNpemUsIHZyZWZyZXNoX3JhdGUsIDAsIDApOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgaHNpemUsIHZzaXplLCB2cmVmcmVzaF9yYXRlLCAwLCAwLAorCQkJCSAgICBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gbW9kZTsKQEAgLTYwMiw2ICs2MjYsMTIgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJLyogaXQgaXMgaW5jb3JyZWN0IGlmIGhzeW5jL3ZzeW5jIHdpZHRoIGlzIHplcm8gKi8KKwlpZiAoIWhzeW5jX3B1bHNlX3dpZHRoIHx8ICF2c3luY19wdWxzZV93aWR0aCkgeworCQlEUk1fREVCVUdfS01TKCJJbmNvcnJlY3QgRGV0YWlsZWQgdGltaW5nLiAiCisJCQkJIldyb25nIEhzeW5jL1ZzeW5jIHB1bHNlIHdpZHRoXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZGV2KTsKIAlpZiAoIW1vZGUpCiAJCXJldHVybiBOVUxMOwpAQCAtNjIzLDYgKzY1MywxNSBAQAogCW1vZGUtPnZzeW5jX2VuZCA9IG1vZGUtPnZzeW5jX3N0YXJ0ICsgdnN5bmNfcHVsc2Vfd2lkdGg7CiAJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyB2Ymxhbms7CiAKKwkvKiBwZXJmb3JtIHRoZSBiYXNpYyBjaGVjayBmb3IgdGhlIGRldGFpbGVkIHRpbWluZyAqLworCWlmIChtb2RlLT5oc3luY19lbmQgPiBtb2RlLT5odG90YWwgfHwKKwkJbW9kZS0+dnN5bmNfZW5kID4gbW9kZS0+dnRvdGFsKSB7CisJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBtb2RlKTsKKwkJRFJNX0RFQlVHX0tNUygiSW5jb3JyZWN0IGRldGFpbGVkIHRpbWluZy4gIgorCQkJCSJTeW5jIGlzIGJleW9uZCB0aGUgYmxhbmsuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CiAKIAlpZiAocHQtPm1pc2MgJiBEUk1fRURJRF9QVF9JTlRFUkxBQ0VEKQpAQCAtNzc5LDcgKzgxOCw3IEBACiAJCQljb250aW51ZTsKIAogCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgJmVkaWQtPnN0YW5kYXJkX3RpbWluZ3NbaV0sCi0JCQkJCXRpbWluZ19sZXZlbCk7CisJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLCB0aW1pbmdfbGV2ZWwpOwogCQlpZiAobmV3bW9kZSkgewogCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwogCQkJbW9kZXMrKzsKQEAgLTgyOSwxMyArODY4LDEzIEBACiAJCQljYXNlIEVESURfREVUQUlMX01PTklUT1JfQ1BEQVRBOgogCQkJCWJyZWFrOwogCQkJY2FzZSBFRElEX0RFVEFJTF9TVERfTU9ERVM6Ci0JCQkJLyogRml2ZSBtb2RlcyBwZXIgZGV0YWlsZWQgc2VjdGlvbiAqLwotCQkJCWZvciAoaiA9IDA7IGogPCA1OyBpKyspIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgNjsgaSsrKSB7CiAJCQkJCXN0cnVjdCBzdGRfdGltaW5nICpzdGQ7CiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJCXN0ZCA9ICZkYXRhLT5kYXRhLnRpbWluZ3Nbal07CiAJCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkJICAgICAgIGVkaWQtPnJldmlzaW9uLAogCQkJCQkJCSAgICAgICB0aW1pbmdfbGV2ZWwpOwogCQkJCQlpZiAobmV3bW9kZSkgewogCQkJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5ld21vZGUpOwpAQCAtOTY0LDcgKzEwMDMsOSBAQAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuZXdtb2RlOwogCiAJCQkJc3RkID0gJmRhdGEtPmRhdGEudGltaW5nc1tqXTsKLQkJCQluZXdtb2RlID0gZHJtX21vZGVfc3RkKGRldiwgc3RkLCB0aW1pbmdfbGV2ZWwpOworCQkJCW5ld21vZGUgPSBkcm1fbW9kZV9zdGQoZGV2LCBzdGQsCisJCQkJCQkgICAgICAgZWRpZC0+cmV2aXNpb24sCisJCQkJCQkgICAgICAgdGltaW5nX2xldmVsKTsKIAkJCQlpZiAobmV3bW9kZSkgewogCQkJCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbmV3bW9kZSk7CiAJCQkJCW1vZGVzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCAyYzQ2NzEzLi5kYzhlMzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTQwLDYgKzQwLDE5OSBAQAogCiBzdGF0aWMgTElTVF9IRUFEKGtlcm5lbF9mYl9oZWxwZXJfbGlzdCk7CiAKK2ludCBkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwljb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25uZWN0b3ItPmZiX2hlbHBlcl9wcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2FkZF9jb25uZWN0b3IpOworCitzdGF0aWMgaW50IG15X2F0b2koY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgdmFsID0gMDsKKworCWZvciAoOzsgbmFtZSsrKSB7CisJCXN3aXRjaCAoKm5hbWUpIHsKKwkJY2FzZSAnMCcgLi4uICc5JzoKKwkJCXZhbCA9IDEwKnZhbCsoKm5hbWUtJzAnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIHZhbDsKKwkJfQorCX0KK30KKworLyoqCisgKiBkcm1fZmJfaGVscGVyX2Nvbm5lY3Rvcl9wYXJzZV9jb21tYW5kX2xpbmUgLSBwYXJzZSBjb21tYW5kIGxpbmUgZm9yIGNvbm5lY3RvcgorICogQGNvbm5lY3RvciAtIGNvbm5lY3RvciB0byBwYXJzZSBsaW5lIGZvcgorICogQG1vZGVfb3B0aW9uIC0gcGVyIGNvbm5lY3RvciBtb2RlIG9wdGlvbgorICoKKyAqIFRoaXMgcGFyc2VzIHRoZSBjb25uZWN0b3Igc3BlY2lmaWMgdGhlbiBnZW5lcmljIGNvbW1hbmQgbGluZXMgZm9yCisgKiBtb2RlcyBhbmQgb3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGNvbm5lY3Rvci4KKyAqCisgKiBUaGlzIHVzZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgZmIgbW9kZWRiLmMsIGV4Y2VwdCBmb3IgZXh0cmEKKyAqCTx4cmVzPng8eXJlcz5bTV1bUl1bLTxicHA+XVtAPHJlZnJlc2g+XVtpXVttXVtlRGRdCisgKgorICogZW5hYmxlL2VuYWJsZSBEaWdpdGFsL2Rpc2FibGUgYml0IGF0IHRoZSBlbmQKKyAqLworc3RhdGljIGJvb2wgZHJtX2ZiX2hlbHBlcl9jb25uZWN0b3JfcGFyc2VfY29tbWFuZF9saW5lKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqbW9kZV9vcHRpb24pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgbmFtZWxlbjsKKwlpbnQgcmVzX3NwZWNpZmllZCA9IDAsIGJwcF9zcGVjaWZpZWQgPSAwLCByZWZyZXNoX3NwZWNpZmllZCA9IDA7CisJdW5zaWduZWQgaW50IHhyZXMgPSAwLCB5cmVzID0gMCwgYnBwID0gMzIsIHJlZnJlc2ggPSAwOworCWludCB5cmVzX3NwZWNpZmllZCA9IDAsIGN2dCA9IDAsIHJiID0gMCwgaW50ZXJsYWNlID0gMCwgbWFyZ2lucyA9IDA7CisJaW50IGk7CisJZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIGZvcmNlID0gRFJNX0ZPUkNFX1VOU1BFQ0lGSUVEOworCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCWlmICghZmJfaGVscF9jb25uKQorCQlyZXR1cm4gZmFsc2U7CisKKwljbWRsaW5lX21vZGUgPSAmZmJfaGVscF9jb25uLT5jbWRsaW5lX21vZGU7CisJaWYgKCFtb2RlX29wdGlvbikKKwkJbW9kZV9vcHRpb24gPSBmYl9tb2RlX29wdGlvbjsKKworCWlmICghbW9kZV9vcHRpb24pIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSBmYWxzZTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCW5hbWUgPSBtb2RlX29wdGlvbjsKKwluYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWZvciAoaSA9IG5hbWVsZW4tMTsgaSA+PSAwOyBpLS0pIHsKKwkJc3dpdGNoIChuYW1lW2ldKSB7CisJCWNhc2UgJ0AnOgorCQkJbmFtZWxlbiA9IGk7CisJCQlpZiAoIXJlZnJlc2hfc3BlY2lmaWVkICYmICFicHBfc3BlY2lmaWVkICYmCisJCQkgICAgIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJcmVmcmVzaCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJcmVmcmVzaF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQluYW1lbGVuID0gaTsKKwkJCWlmICghYnBwX3NwZWNpZmllZCAmJiAheXJlc19zcGVjaWZpZWQpIHsKKwkJCQlicHAgPSBteV9hdG9pKCZuYW1lW2krMV0pOworCQkJCWJwcF9zcGVjaWZpZWQgPSAxOworCQkJCWlmIChjdnQgfHwgcmIpCisJCQkJCWN2dCA9IDA7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJY2FzZSAneCc6CisJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKSB7CisJCQkJeXJlcyA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJeXJlc19zcGVjaWZpZWQgPSAxOworCQkJfSBlbHNlCisJCQkJZ290byBkb25lOworCQljYXNlICcwJyAuLi4gJzknOgorCQkJYnJlYWs7CisJCWNhc2UgJ00nOgorCQkJaWYgKCF5cmVzX3NwZWNpZmllZCkKKwkJCQljdnQgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ1InOgorCQkJaWYgKCFjdnQpCisJCQkJcmIgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJaWYgKCFjdnQpCisJCQkJbWFyZ2lucyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlpZiAoIWN2dCkKKwkJCQlpbnRlcmxhY2UgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT047CisJCQlicmVhazsKKwkJY2FzZSAnRCc6CisJCQlpZiAoKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHx8CisJCQkgICAgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgIT0gRFJNX01PREVfQ09OTkVDVE9SX0hETUlCKSkKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTjsKKwkJCWVsc2UKKwkJCQlmb3JjZSA9IERSTV9GT1JDRV9PTl9ESUdJVEFMOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJZm9yY2UgPSBEUk1fRk9SQ0VfT0ZGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJaWYgKGkgPCAwICYmIHlyZXNfc3BlY2lmaWVkKSB7CisJCXhyZXMgPSBteV9hdG9pKG5hbWUpOworCQlyZXNfc3BlY2lmaWVkID0gMTsKKwl9Citkb25lOgorCisJRFJNX0RFQlVHX0tNUygiY21kbGluZSBtb2RlIGZvciBjb25uZWN0b3IgJXMgJWR4JWRAJWRIeiVzJXMlc1xuIiwKKwkJZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCB4cmVzLCB5cmVzLAorCQkocmVmcmVzaCkgPyByZWZyZXNoIDogNjAsIChyYikgPyAiIHJlZHVjZWQgYmxhbmtpbmciIDoKKwkJIiIsIChtYXJnaW5zKSA/ICIgd2l0aCBtYXJnaW5zIiA6ICIiLCAoaW50ZXJsYWNlKSA/CisJCSIgaW50ZXJsYWNlZCIgOiAiIik7CisKKwlpZiAoZm9yY2UpIHsKKwkJY29uc3QgY2hhciAqczsKKwkJc3dpdGNoIChmb3JjZSkgeworCQljYXNlIERSTV9GT1JDRV9PRkY6IHMgPSAiT0ZGIjsgYnJlYWs7CisJCWNhc2UgRFJNX0ZPUkNFX09OX0RJR0lUQUw6IHMgPSAiT04gLSBkaWciOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBEUk1fRk9SQ0VfT046IHMgPSAiT04iOyBicmVhazsKKwkJfQorCisJCURSTV9JTkZPKCJmb3JjaW5nICVzIGNvbm5lY3RvciAlc1xuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvciksIHMpOworCQljb25uZWN0b3ItPmZvcmNlID0gZm9yY2U7CisJfQorCisJaWYgKHJlc19zcGVjaWZpZWQpIHsKKwkJY21kbGluZV9tb2RlLT5zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPnhyZXMgPSB4cmVzOworCQljbWRsaW5lX21vZGUtPnlyZXMgPSB5cmVzOworCX0KKworCWlmIChyZWZyZXNoX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPnJlZnJlc2hfc3BlY2lmaWVkID0gdHJ1ZTsKKwkJY21kbGluZV9tb2RlLT5yZWZyZXNoID0gcmVmcmVzaDsKKwl9CisKKwlpZiAoYnBwX3NwZWNpZmllZCkgeworCQljbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQgPSB0cnVlOworCQljbWRsaW5lX21vZGUtPmJwcCA9IGJwcDsKKwl9CisJY21kbGluZV9tb2RlLT5yYiA9IHJiID8gdHJ1ZSA6IGZhbHNlOworCWNtZGxpbmVfbW9kZS0+Y3Z0ID0gY3Z0ICA/IHRydWUgOiBmYWxzZTsKKwljbWRsaW5lX21vZGUtPmludGVybGFjZSA9IGludGVybGFjZSA/IHRydWUgOiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9wYXJzZV9jb21tYW5kX2xpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWNoYXIgKm9wdGlvbiA9IE5VTEw7CisKKwkJLyogZG8gc29tZXRoaW5nIG9uIHJldHVybiAtIHR1cm4gb2ZmIGNvbm5lY3RvciBtYXliZSAqLworCQlpZiAoZmJfZ2V0X29wdGlvbnMoZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpLCAmb3B0aW9uKSkKKwkJCWNvbnRpbnVlOworCisJCWRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZShjb25uZWN0b3IsIG9wdGlvbik7CisJfQorCXJldHVybiAwOworfQorCiBib29sIGRybV9mYl9oZWxwZXJfZm9yY2Vfa2VybmVsX21vZGUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CkBAIC04Nyw2ICsyODAsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Jlc3RvcmUpOwogCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCiBzdGF0aWMgdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmlnbm9yZWQpCiB7CiAJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CkBAIC0xMDMsNiArMjk3LDcgQEAKIAkuaGVscF9tc2cgPSAiZm9yY2UtZmIoVikiLAogCS5hY3Rpb25fbXNnID0gIlJlc3RvcmUgZnJhbWVidWZmZXIgY29uc29sZSIsCiB9OworI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGRybV9mYl9oZWxwZXJfb24oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC0yNTksNiArNDU0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCk7CiAKK3N0YXRpYyBpbnQgc2V0Y29scmVnKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAorCQkgICAgIHUxNiBibHVlLCB1MTYgcmVnbm8sIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOworCWludCBwaW5kZXg7CisKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfVFJVRUNPTE9SKSB7CisJCXUzMiAqcGFsZXR0ZTsKKwkJdTMyIHZhbHVlOworCQkvKiBwbGFjZSBjb2xvciBpbiBwc3VlZG9wYWxldHRlICovCisJCWlmIChyZWdubyA+IDE2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBhbGV0dGUgPSAodTMyICopaW5mby0+cHNldWRvX3BhbGV0dGU7CisJCXJlZCA+Pj0gKDE2IC0gaW5mby0+dmFyLnJlZC5sZW5ndGgpOworCQlncmVlbiA+Pj0gKDE2IC0gaW5mby0+dmFyLmdyZWVuLmxlbmd0aCk7CisJCWJsdWUgPj49ICgxNiAtIGluZm8tPnZhci5ibHVlLmxlbmd0aCk7CisJCXZhbHVlID0gKHJlZCA8PCBpbmZvLT52YXIucmVkLm9mZnNldCkgfAorCQkJKGdyZWVuIDw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQpIHwKKwkJCShibHVlIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCXBhbGV0dGVbcmVnbm9dID0gdmFsdWU7CisJCXJldHVybiAwOworCX0KKworCXBpbmRleCA9IHJlZ25vOworCisJaWYgKGZiLT5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQlwaW5kZXggPSByZWdubyA8PCAzOworCisJCWlmIChmYi0+ZGVwdGggPT0gMTYgJiYgcmVnbm8gPiA2MykKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZmItPmRlcHRoID09IDE1ICYmIHJlZ25vID4gMzEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoZmItPmRlcHRoID09IDE2KSB7CisJCQl1MTYgciwgZywgYjsKKwkJCWludCBpOworCQkJaWYgKHJlZ25vIDwgMzIpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgcmVkLAorCQkJCQkJZ3JlZW4sIGJsdWUsIHBpbmRleCArIGkpOworCQkJfQorCisJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9nZXQoY3J0YywgJnIsCisJCQkJCQkgICAgJmcsICZiLAorCQkJCQkJICAgIHBpbmRleCA+PiAxKTsKKworCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCQlmYl9oZWxwZXItPmZ1bmNzLT5nYW1tYV9zZXQoY3J0YywgciwKKwkJCQkJCQkgICAgZ3JlZW4sIGIsCisJCQkJCQkJICAgIChwaW5kZXggPj4gMSkgKyBpKTsKKwkJfQorCX0KKworCWlmIChmYi0+ZGVwdGggIT0gMTYpCisJCWZiX2hlbHBlci0+ZnVuY3MtPmdhbW1hX3NldChjcnRjLCByZWQsIGdyZWVuLCBibHVlLCBwaW5kZXgpOworCXJldHVybiAwOworfQorCitpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjbWFwKHN0cnVjdCBmYl9jbWFwICpjbWFwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyID0gaW5mby0+cGFyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKKwl1MTYgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnRyYW5zcDsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJaW50IGksIHJjID0gMDsKKwlpbnQgc3RhcnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykgeworCQkJaWYgKGNydGMtPmJhc2UuaWQgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0uY3J0Y19pZCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBmYl9oZWxwZXItPmNydGNfY291bnQpCisJCQljb250aW51ZTsKKworCQlyZWQgPSBjbWFwLT5yZWQ7CisJCWdyZWVuID0gY21hcC0+Z3JlZW47CisJCWJsdWUgPSBjbWFwLT5ibHVlOworCQl0cmFuc3AgPSBjbWFwLT50cmFuc3A7CisJCXN0YXJ0ID0gY21hcC0+c3RhcnQ7CisKKwkJZm9yIChpID0gMDsgaSA8IGNtYXAtPmxlbjsgaSsrKSB7CisJCQl1MTYgaHJlZCwgaGdyZWVuLCBoYmx1ZSwgaHRyYW5zcCA9IDB4ZmZmZjsKKworCQkJaHJlZCA9ICpyZWQrKzsKKwkJCWhncmVlbiA9ICpncmVlbisrOworCQkJaGJsdWUgPSAqYmx1ZSsrOworCisJCQlpZiAodHJhbnNwKQorCQkJCWh0cmFuc3AgPSAqdHJhbnNwKys7CisKKwkJCXJjID0gc2V0Y29scmVnKGNydGMsIGhyZWQsIGhncmVlbiwgaGJsdWUsIHN0YXJ0KyssIGluZm8pOworCQkJaWYgKHJjKQorCQkJCXJldHVybiByYzsKKwkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKKwl9CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3NldGNtYXApOworCiBpbnQgZHJtX2ZiX2hlbHBlcl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sCiAJCQkgICAgdW5zaWduZWQgcmVkLAogCQkJICAgIHVuc2lnbmVkIGdyZWVuLApAQCAtMjcwLDEwICs1NjgsMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmJfaGVscGVyLT5kZXY7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCWludCBpOworCWludCByZXQ7CisKKwlpZiAocmVnbm8gPiAyNTUpCisJCXJldHVybiAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKLQkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBmYl9oZWxwZXItPmZiOwotCisJCXN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgKmNydGNfZnVuY3MgPSBjcnRjLT5oZWxwZXJfcHJpdmF0ZTsKIAkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CiAJCQlpZiAoY3J0Yy0+YmFzZS5pZCA9PSBmYl9oZWxwZXItPmNydGNfaW5mb1tpXS5jcnRjX2lkKQogCQkJCWJyZWFrOwpAQCAtMjgxLDM1ICs1ODIsMTEgQEAKIAkJaWYgKGkgPT0gZmJfaGVscGVyLT5jcnRjX2NvdW50KQogCQkJY29udGludWU7CiAKLQkJaWYgKHJlZ25vID4gMjU1KQotCQkJcmV0dXJuIDE7CisJCXJldCA9IHNldGNvbHJlZyhjcnRjLCByZWQsIGdyZWVuLCBibHVlLCByZWdubywgaW5mbyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCWlmIChmYi0+ZGVwdGggPT0gOCkgewotCQkJZmJfaGVscGVyLT5mdW5jcy0+Z2FtbWFfc2V0KGNydGMsIHJlZCwgZ3JlZW4sIGJsdWUsIHJlZ25vKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJaWYgKHJlZ25vIDwgMTYpIHsKLQkJCXN3aXRjaCAoZmItPmRlcHRoKSB7Ci0JCQljYXNlIDE1OgotCQkJCWZiLT5wc2V1ZG9fcGFsZXR0ZVtyZWdub10gPSAoKHJlZCAmIDB4ZjgwMCkgPj4gMSkgfAotCQkJCQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAotCQkJCQkoKGJsdWUgJiAweGY4MDApID4+IDExKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMTY6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9IChyZWQgJiAweGY4MDApIHwKLQkJCQkJKChncmVlbiAmIDB4ZmMwMCkgPj4gIDUpIHwKLQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4gMTEpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyNDoKLQkJCWNhc2UgMzI6Ci0JCQkJZmItPnBzZXVkb19wYWxldHRlW3JlZ25vXSA9Ci0JCQkJCSgoKHJlZCA+PiA4KSAmIDB4ZmYpIDw8IGluZm8tPnZhci5yZWQub2Zmc2V0KSB8Ci0JCQkJCSgoKGdyZWVuID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmdyZWVuLm9mZnNldCkgfAotCQkJCQkoKChibHVlID4+IDgpICYgMHhmZikgPDwgaW5mby0+dmFyLmJsdWUub2Zmc2V0KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQorCQljcnRjX2Z1bmNzLT5sb2FkX2x1dChjcnRjKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00MzAsNyArNzA3LDcgQEAKIAogCQlpZiAoY3J0Yy0+ZmIgPT0gZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQuZmIpIHsKIAkJCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCQkJcmV0ID0gY3J0Yy0+ZnVuY3MtPnNldF9jb25maWcoJmZiX2hlbHBlci0+Y3J0Y19pbmZvLT5tb2RlX3NldCk7CisJCQlyZXQgPSBjcnRjLT5mdW5jcy0+c2V0X2NvbmZpZygmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKQEAgLTQ3OSwxMSArNzU2LDE0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXkpOwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSkKIHsKIAlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CkBAIC00OTcsOCArNzc3LDQ4IEBACiAJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7CiAJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZXNldCA9IE5VTEw7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcjsKKwl1aW50MzJfdCBzdXJmYWNlX2RlcHRoID0gMjQsIHN1cmZhY2VfYnBwID0gMzI7CiAKKwkvKiBpZiBkcml2ZXIgcGlja3MgOCBvciAxNiBieSBkZWZhdWx0IHVzZSB0aGF0CisJICAgZm9yIGJvdGggZGVwdGgvYnBwICovCisJaWYgKHByZWZlcnJlZF9icHAgIT0gc3VyZmFjZV9icHApIHsKKwkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gcHJlZmVycmVkX2JwcDsKKwl9CiAJLyogZmlyc3QgdXAgZ2V0IGEgY291bnQgb2YgY3J0Y3Mgbm93IGluIHVzZSBhbmQgbmV3IG1pbi9tYXhlcyB3aWR0aC9oZWlnaHRzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBkcm1fZmJfaGVscGVyX2Nvbm5lY3RvciAqZmJfaGVscF9jb25uID0gY29ubmVjdG9yLT5mYl9oZWxwZXJfcHJpdmF0ZTsKKworCQlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgKmNtZGxpbmVfbW9kZTsKKworCQlpZiAoIWZiX2hlbHBfY29ubikKKwkJCWNvbnRpbnVlOworCQkKKwkJY21kbGluZV9tb2RlID0gJmZiX2hlbHBfY29ubi0+Y21kbGluZV9tb2RlOworCisJCWlmIChjbWRsaW5lX21vZGUtPmJwcF9zcGVjaWZpZWQpIHsKKwkJCXN3aXRjaCAoY21kbGluZV9tb2RlLT5icHApIHsKKwkJCWNhc2UgODoKKwkJCQlzdXJmYWNlX2RlcHRoID0gc3VyZmFjZV9icHAgPSA4OworCQkJCWJyZWFrOworCQkJY2FzZSAxNToKKwkJCQlzdXJmYWNlX2RlcHRoID0gMTU7CisJCQkJc3VyZmFjZV9icHAgPSAxNjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTY6CisJCQkJc3VyZmFjZV9kZXB0aCA9IHN1cmZhY2VfYnBwID0gMTY7CisJCQkJYnJlYWs7CisJCQljYXNlIDI0OgorCQkJCXN1cmZhY2VfZGVwdGggPSBzdXJmYWNlX2JwcCA9IDI0OworCQkJCWJyZWFrOworCQkJY2FzZSAzMjoKKwkJCQlzdXJmYWNlX2RlcHRoID0gMjQ7CisJCQkJc3VyZmFjZV9icHAgPSAzMjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGRybV9oZWxwZXJfY3J0Y19pbl91c2UoY3J0YykpIHsKIAkJCWlmIChjcnRjLT5kZXNpcmVkX21vZGUpIHsKQEAgLTUyNyw3ICs4NDcsOCBAQAogCS8qIGRvIHdlIGhhdmUgYW4gZmIgYWxyZWFkeT8gKi8KIAlpZiAobGlzdF9lbXB0eSgmZGV2LT5tb2RlX2NvbmZpZy5mYl9rZXJuZWxfbGlzdCkpIHsKIAkJcmV0ID0gKCpmYl9jcmVhdGUpKGRldiwgZmJfd2lkdGgsIGZiX2hlaWdodCwgc3VyZmFjZV93aWR0aCwKLQkJCQkgICBzdXJmYWNlX2hlaWdodCwgJmZiKTsKKwkJCQkgICBzdXJmYWNlX2hlaWdodCwgc3VyZmFjZV9kZXB0aCwgc3VyZmFjZV9icHAsCisJCQkJICAgJmZiKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQluZXdfZmIgPSAxOwpAQCAtNjE4LDEwICs5MzksMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9mcmVlKTsKIAotdm9pZCBkcm1fZmJfaGVscGVyX2ZpbGxfZml4KHN0cnVjdCBmYl9pbmZvICppbmZvLCB1aW50MzJfdCBwaXRjaCkKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpCiB7CiAJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJaW5mby0+Zml4LnZpc3VhbCA9IGRlcHRoID09IDggPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IgOgorCQlGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWluZm8tPmZpeC50eXBlX2F1eCA9IDA7CiAJaW5mby0+Zml4LnhwYW5zdGVwID0gMTsgLyogZG9pbmcgaXQgaW4gaHcgKi8KIAlpbmZvLT5maXgueXBhbnN0ZXAgPSAxOyAvKiBkb2luZyBpdCBpbiBodyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tb2Rlcy5jCmluZGV4IDQ5NDA0Y2UuLjUxZjY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgSFZfRkFDVE9SCQkJMTAwMAogc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9jdnRfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaGRpc3BsYXksCiAJCQkJICAgICAgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCi0JCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQpCisJCQkJICAgICAgYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucykKIHsKIAkvKiAxKSB0b3AvYm90dG9tIG1hcmdpbiBzaXplICglIG9mIGhlaWdodCkgLSBkZWZhdWx0OiAxLjgsICovCiAjZGVmaW5lCUNWVF9NQVJHSU5fUEVSQ0VOVEFHRQkJMTgKQEAgLTEwMSw3ICsxMDEsNiBAQAogCS8qIFBpeGVsIENsb2NrIHN0ZXAgKGtIeikgKi8KICNkZWZpbmUgQ1ZUX0NMT0NLX1NURVAJCQkyNTAKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX21vZGU7Ci0JYm9vbCBtYXJnaW5zID0gZmFsc2U7CiAJdW5zaWduZWQgaW50IHZmaWVsZHJhdGUsIGhwZXJpb2Q7CiAJaW50IGhkaXNwbGF5X3JuZCwgaG1hcmdpbiwgdmRpc3BsYXlfcm5kLCB2bWFyZ2luLCB2c3luYzsKIAlpbnQgaW50ZXJsYWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCmluZGV4IDdlMWZiZTUuLjRhYzkwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKQEAgLTM2OSwyOCArMzY5LDI4IEBACiB9CiAKIC8qKiBBR1AgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKIH07CiAKIC8qKiBTaGFyZWQgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2htX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX3NobV9vcHMgPSB7CiAJLmZhdWx0ID0gZHJtX3ZtX3NobV9mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9zaG1fY2xvc2UsCiB9OwogCiAvKiogRE1BIHZpcnR1YWwgbWVtb3J5IG9wZXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZHJtX3ZtX2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRybV92bV9kbWFfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9kbWFfZmF1bHQsCiAJLm9wZW4gPSBkcm1fdm1fb3BlbiwKIAkuY2xvc2UgPSBkcm1fdm1fY2xvc2UsCiB9OwogCiAvKiogU2NhdHRlci1nYXRoZXIgdmlydHVhbCBtZW1vcnkgb3BlcmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkcm1fdm1fc2dfb3BzID0gewogCS5mYXVsdCA9IGRybV92bV9zZ19mYXVsdCwKIAkub3BlbiA9IGRybV92bV9vcGVuLAogCS5jbG9zZSA9IGRybV92bV9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCmluZGV4IDQ1ZDUwN2UuLmU1YjEzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwpAQCAtMTIyNyw4ICsxMjI3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBUcnkgdG8gc2V0IHVwIEZCQyB3aXRoIGEgcmVhc29uYWJsZSBjb21wcmVzc2VkIGJ1ZmZlciBzaXplICovCi0JaWYgKElTX01PQklMRShkZXYpICYmIChJU19JOVhYKGRldikgfHwgSVNfSTk2NUcoZGV2KSB8fCBJU19HTTQ1KGRldikpICYmCi0JICAgIGk5MTVfcG93ZXJzYXZlKSB7CisJaWYgKEk5MTVfSEFTX0ZCQyhkZXYpICYmIGk5MTVfcG93ZXJzYXZlKSB7CiAJCWludCBjZmJfc2l6ZTsKIAogCQkvKiBUcnkgdG8gZ2V0IGFuIDhNIGJ1ZmZlci4uLiAqLwpAQCAtMTQ2OCw2ICsxNDY3LDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+ZXJyb3JfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gMDsKIAogCXJldCA9IGRybV92YmxhbmtfaW5pdChkZXYsIEk5MTVfTlVNX1BJUEUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBiOTM4MTRjLi43ZjQzNmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTg5LDcgKzg5LDggQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JZGV2X3ByaXYtPnN1c3BlbmRlZCA9IDE7CisJLyogTW9kZXNldCBvbiByZXN1bWUsIG5vdCBsaWQgZXZlbnRzICovCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKIAogCXJldHVybiAwOwogfQpAQCAtMTI0LDcgKzEyNSw3IEBACiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAl9CiAKLQlkZXZfcHJpdi0+c3VzcGVuZGVkID0gMDsKKwlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAwOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGIyNGIyZDEuLjU3MjA0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMjAyLDYgKzIwMiw3IEBACiAJc3BpbmxvY2tfdCB1c2VyX2lycV9sb2NrOwogCS8qKiBSZWZjb3VudCBmb3IgaTkxNV91c2VyX2lycV9nZXQoKSB2ZXJzdXMgaTkxNV91c2VyX2lycV9wdXQoKS4gKi8KIAlpbnQgdXNlcl9pcnFfcmVmY291bnQ7CisJdTMyIHRyYWNlX2lycV9zZXFubzsKIAkvKiogQ2FjaGVkIHZhbHVlIG9mIElNUiB0byBhdm9pZCByZWFkcyBpbiB1cGRhdGluZyB0aGUgYml0ZmllbGQgKi8KIAl1MzIgaXJxX21hc2tfcmVnOwogCXUzMiBwaXBlc3RhdFsyXTsKQEAgLTI3Myw3ICsyNzQsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIGRpc3BsYXk7CiAKIAkvKiBSZWdpc3RlciBzdGF0ZSAqLwotCWJvb2wgc3VzcGVuZGVkOworCWJvb2wgbW9kZXNldF9vbl9saWQ7CiAJdTggc2F2ZUxCQjsKIAl1MzIgc2F2ZURTUEFDTlRSOwogCXUzMiBzYXZlRFNQQkNOVFI7CkBAIC0yOTUsNiArMjk2LDEyIEBACiAJdTMyIHNhdmVWQkxBTktfQTsKIAl1MzIgc2F2ZVZTWU5DX0E7CiAJdTMyIHNhdmVCQ0xSUEFUX0E7CisJdTMyIHNhdmVUUkFOU19IVE9UQUxfQTsKKwl1MzIgc2F2ZVRSQU5TX0hCTEFOS19BOworCXUzMiBzYXZlVFJBTlNfSFNZTkNfQTsKKwl1MzIgc2F2ZVRSQU5TX1ZUT1RBTF9BOworCXUzMiBzYXZlVFJBTlNfVkJMQU5LX0E7CisJdTMyIHNhdmVUUkFOU19WU1lOQ19BOwogCXUzMiBzYXZlUElQRUFTVEFUOwogCXUzMiBzYXZlRFNQQVNUUklERTsKIAl1MzIgc2F2ZURTUEFTSVpFOwpAQCAtMzAzLDggKzMxMCwxMSBAQAogCXUzMiBzYXZlRFNQQVNVUkY7CiAJdTMyIHNhdmVEU1BBVElMRU9GRjsKIAl1MzIgc2F2ZVBGSVRfUEdNX1JBVElPUzsKKwl1MzIgc2F2ZUJMQ19ISVNUX0NUTDsKIAl1MzIgc2F2ZUJMQ19QV01fQ1RMOwogCXUzMiBzYXZlQkxDX1BXTV9DVEwyOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMOworCXUzMiBzYXZlQkxDX0NQVV9QV01fQ1RMMjsKIAl1MzIgc2F2ZUZQQjA7CiAJdTMyIHNhdmVGUEIxOwogCXUzMiBzYXZlRFBMTF9COwpAQCAtMzE2LDYgKzMyNiwxMiBAQAogCXUzMiBzYXZlVkJMQU5LX0I7CiAJdTMyIHNhdmVWU1lOQ19COwogCXUzMiBzYXZlQkNMUlBBVF9COworCXUzMiBzYXZlVFJBTlNfSFRPVEFMX0I7CisJdTMyIHNhdmVUUkFOU19IQkxBTktfQjsKKwl1MzIgc2F2ZVRSQU5TX0hTWU5DX0I7CisJdTMyIHNhdmVUUkFOU19WVE9UQUxfQjsKKwl1MzIgc2F2ZVRSQU5TX1ZCTEFOS19COworCXUzMiBzYXZlVFJBTlNfVlNZTkNfQjsKIAl1MzIgc2F2ZVBJUEVCU1RBVDsKIAl1MzIgc2F2ZURTUEJTVFJJREU7CiAJdTMyIHNhdmVEU1BCU0laRTsKQEAgLTM0MSw2ICszNTcsNyBAQAogCXUzMiBzYXZlUEZJVF9DT05UUk9MOwogCXUzMiBzYXZlX3BhbGV0dGVfYVsyNTZdOwogCXUzMiBzYXZlX3BhbGV0dGVfYlsyNTZdOworCXUzMiBzYXZlRFBGQ19DQl9CQVNFOwogCXUzMiBzYXZlRkJDX0NGQl9CQVNFOwogCXUzMiBzYXZlRkJDX0xMX0JBU0U7CiAJdTMyIHNhdmVGQkNfQ09OVFJPTDsKQEAgLTM0OCw2ICszNjUsMTIgQEAKIAl1MzIgc2F2ZUlFUjsKIAl1MzIgc2F2ZUlJUjsKIAl1MzIgc2F2ZUlNUjsKKwl1MzIgc2F2ZURFSUVSOworCXUzMiBzYXZlREVJTVI7CisJdTMyIHNhdmVHVElFUjsKKwl1MzIgc2F2ZUdUSU1SOworCXUzMiBzYXZlRkRJX1JYQV9JTVI7CisJdTMyIHNhdmVGRElfUlhCX0lNUjsKIAl1MzIgc2F2ZUNBQ0hFX01PREVfMDsKIAl1MzIgc2F2ZURfU1RBVEU7CiAJdTMyIHNhdmVEU1BDTEtfR0FURV9EOwpAQCAtMzgxLDYgKzQwNCwxNiBAQAogCXUzMiBzYXZlUElQRUJfRFBfTElOS19NOwogCXUzMiBzYXZlUElQRUFfRFBfTElOS19OOwogCXUzMiBzYXZlUElQRUJfRFBfTElOS19OOworCXUzMiBzYXZlRkRJX1JYQV9DVEw7CisJdTMyIHNhdmVGRElfVFhBX0NUTDsKKwl1MzIgc2F2ZUZESV9SWEJfQ1RMOworCXUzMiBzYXZlRkRJX1RYQl9DVEw7CisJdTMyIHNhdmVQRkFfQ1RMXzE7CisJdTMyIHNhdmVQRkJfQ1RMXzE7CisJdTMyIHNhdmVQRkFfV0lOX1NaOworCXUzMiBzYXZlUEZCX1dJTl9TWjsKKwl1MzIgc2F2ZVBGQV9XSU5fUE9TOworCXUzMiBzYXZlUEZCX1dJTl9QT1M7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgZHJtX21tIGd0dF9zcGFjZTsKQEAgLTQ5MSw2ICs1MjQsOCBAQAogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BoeXNfb2JqZWN0ICpwaHlzX29ianNbSTkxNV9NQVhfUEhZU19PQkpFQ1RdOwogCX0gbW07CiAJc3RydWN0IHNkdm9fZGV2aWNlX21hcHBpbmcgc2R2b19tYXBwaW5nc1syXTsKKwkvKiBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBMVkRTX0JPUkRFUiBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QgKi8KKwl1bnNpZ25lZCBpbnQgbHZkc19ib3JkZXJfYml0czsKIAogCS8qIFJlY2xvY2tpbmcgc3VwcG9ydCAqLwogCWJvb2wgcmVuZGVyX3JlY2xvY2tfYXZhaWw7CkBAIC02NjUsNiArNzAwLDcgQEAKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIHZvaWQgaTkxNV91c2VyX2lycV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pOwogdm9pZCBpOTE1X3VzZXJfaXJxX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfZW5hYmxlX2ludGVycnVwdCAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKQEAgLTk3OSw3ICsxMDE1LDEwIEBACiAKICNkZWZpbmUgSEFTX0ZXX0JMQyhkZXYpIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikgfHwgSVNfSUdETkcoZGV2KSkKICNkZWZpbmUgSEFTX1BJUEVfQ1hTUihkZXYpIChJU19HNFgoZGV2KSB8fCBJU19JR0RORyhkZXYpKQotI2RlZmluZSBJOTE1X0hBU19GQkMoZGV2KSAoSVNfTU9CSUxFKGRldikgJiYgKElTX0k5WFgoZGV2KSB8fCBJU19JOTY1RyhkZXYpKSkKKyNkZWZpbmUgSTkxNV9IQVNfRkJDKGRldikgKElTX01PQklMRShkZXYpICYmIFwKKwkJCSAgIChJU19JOVhYKGRldikgfHwgSVNfR000NShkZXYpKSAmJiBcCisJCQkgICAhSVNfSUdEKGRldikgJiYgXAorCQkJICAgIUlTX0lHRE5HKGRldikpCiAKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDQwNzI3ZDQuLmFiZmMyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzZXFubzsKIAotCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlKQorCWlmICghZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlIHx8IGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QpKQogCQlyZXR1cm47CiAKIAlzZXFubyA9IGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpOwpAQCAtMTc5NCw2ICsxNzk0LDEyIEBACiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQorCisJaWYgKHVubGlrZWx5IChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vICYmCisJCSAgICAgIGk5MTVfc2Vxbm9fcGFzc2VkKGRldl9wcml2LT50cmFjZV9pcnFfc2Vxbm8sIHNlcW5vKSkpIHsKKwkJaTkxNV91c2VyX2lycV9wdXQoZGV2KTsKKwkJZGV2X3ByaXYtPnRyYWNlX2lycV9zZXFubyA9IDA7CisJfQogfQogCiB2b2lkCkBAIC0zMzUyLDcgKzMzNTgsNyBAQAogCWV4ZWNfc3RhcnQgPSAodWludDMyX3QpIGV4ZWNfb2Zmc2V0ICsgZXhlYy0+YmF0Y2hfc3RhcnRfb2Zmc2V0OwogCWV4ZWNfbGVuID0gKHVpbnQzMl90KSBleGVjLT5iYXRjaF9sZW47CiAKLQl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3N1Ym1pdChkZXYsIGRldl9wcml2LT5tbS5uZXh0X2dlbV9zZXFubyk7CisJdHJhY2VfaTkxNV9nZW1fcmVxdWVzdF9zdWJtaXQoZGV2LCBkZXZfcHJpdi0+bW0ubmV4dF9nZW1fc2Vxbm8gKyAxKTsKIAogCWNvdW50ID0gbmJveCA/IG5ib3ggOiAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA0ZGZlZWM3Li5jM2NlZmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTcyNSw2ICs3MjUsMTYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCit2b2lkIGk5MTVfdHJhY2VfaXJxX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgc2Vxbm8pCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1faTkxNV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID09IDApCisJCWk5MTVfdXNlcl9pcnFfZ2V0KGRldik7CisKKwlkZXZfcHJpdi0+dHJhY2VfaXJxX3NlcW5vID0gc2Vxbm87Cit9CisKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IGlycV9ucikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggMDQ2NmRkYi4uMTY4N2VkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC05NjgsNiArOTY4LDggQEAKICNkZWZpbmUgICBMVkRTX1BPUlRfRU4JCQkoMSA8PCAzMSkKIC8qIFNlbGVjdHMgcGlwZSBCIGZvciBMVkRTIGRhdGEuICBNdXN0IGJlIHNldCBvbiBwcmUtOTY1LiAqLwogI2RlZmluZSAgIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKy8qIEVuYWJsZSBib3JkZXIgZm9yIHVuc2NhbGVkIChvciBhc3BlY3Qtc2NhbGVkKSBkaXNwbGF5ICovCisjZGVmaW5lICAgTFZEU19CT1JERVJfRU5BQkxFCQkoMSA8PCAxNSkKIC8qCiAgKiBFbmFibGVzIHRoZSBBMC1BMiBkYXRhIHBhaXJzIGFuZCBDTEtBLCBjb250YWluaW5nIDE4IGJpdHMgb2YgY29sb3IgZGF0YSBwZXIKICAqIHBpeGVsLgpAQCAtMTA3OCw2ICsxMDgwLDggQEAKICNkZWZpbmUgICBCQUNLTElHSFRfRFVUWV9DWUNMRV9TSElGVAkJKDApCiAjZGVmaW5lICAgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfTUFTSwkJKDB4ZmZmZikKIAorI2RlZmluZSBCTENfSElTVF9DVEwJCTB4NjEyNjAKKwogLyogVFYgcG9ydCBjb250cm9sICovCiAjZGVmaW5lIFRWX0NUTAkJCTB4NjgwMDAKIC8qKiBFbmFibGVzIHRoZSBUViBlbmNvZGVyICovCkBAIC0xNzgwLDYgKzE3ODQsMTEgQEAKICNkZWZpbmUgICBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUw8PDIpIC8qIDk2NSBvciBsYXRlciAqLwogI2RlZmluZSAgIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMJCSgxVUw8PDEpCiAjZGVmaW5lICAgUElQRV9PVkVSTEFZX1VQREFURURfU1RBVFVTCQkoMVVMPDwwKQorI2RlZmluZSAgIFBJUEVfQlBDX01BU0sgCQkJKDcgPDwgNSkgLyogSXJvbmxha2UgKi8KKyNkZWZpbmUgICBQSVBFXzhCUEMJCQkJKDAgPDwgNSkKKyNkZWZpbmUgICBQSVBFXzEwQlBDCQkJCSgxIDw8IDUpCisjZGVmaW5lICAgUElQRV82QlBDCQkJCSgyIDw8IDUpCisjZGVmaW5lICAgUElQRV8xMkJQQwkJCQkoMyA8PCA1KQogCiAjZGVmaW5lIERTUEFSQgkJCTB4NzAwMzAKICNkZWZpbmUgICBEU1BBUkJfQ1NUQVJUX01BU0sJKDB4N2YgPDwgNykKQEAgLTE3OTAsMTcgKzE3OTksMjkgQEAKICNkZWZpbmUgICBEU1BBUkJfQUVORF9TSElGVAkwCiAKICNkZWZpbmUgRFNQRlcxCQkJMHg3MDAzNAorI2RlZmluZSAgIERTUEZXX1NSX1NISUZUCTIzCisjZGVmaW5lICAgRFNQRldfQ1VSU09SQl9TSElGVAkxNgorI2RlZmluZSAgIERTUEZXX1BMQU5FQl9TSElGVAk4CiAjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgICBEU1BGV19DVVJTT1JBX01BU0sJMHgwMDAwM2YwMAorI2RlZmluZSAgIERTUEZXX0NVUlNPUkFfU0hJRlQJMTYKICNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2RlZmluZSAgIERTUEZXX0hQTExfU1JfRU4JKDE8PDMxKQorI2RlZmluZSAgIERTUEZXX0NVUlNPUl9TUl9TSElGVAkyNAogI2RlZmluZSAgIElHRF9TRUxGX1JFRlJFU0hfRU4JKDE8PDMwKQogCiAvKiBGSUZPIHdhdGVybWFyayBzaXplcyBldGMgKi8KKyNkZWZpbmUgRzRYX0ZJRk9fTElORV9TSVpFCTY0CiAjZGVmaW5lIEk5MTVfRklGT19MSU5FX1NJWkUJNjQKICNkZWZpbmUgSTgzMF9GSUZPX0xJTkVfU0laRQkzMgorCisjZGVmaW5lIEc0WF9GSUZPX1NJWkUJCTEyNwogI2RlZmluZSBJOTQ1X0ZJRk9fU0laRQkJMTI3IC8qIDk0NSAmIDk2NSAqLwogI2RlZmluZSBJOTE1X0ZJRk9fU0laRQkJOTUKICNkZWZpbmUgSTg1NUdNX0ZJRk9fU0laRQkxMjcgLyogSW4gY2FjaGVsaW5lcyAqLwogI2RlZmluZSBJODMwX0ZJRk9fU0laRQkJOTUKKworI2RlZmluZSBHNFhfTUFYX1dNCQkweDNmCiAjZGVmaW5lIEk5MTVfTUFYX1dNCQkweDNmCiAKICNkZWZpbmUgSUdEX0RJU1BMQVlfRklGTwk1MTIgLyogaW4gNjRieXRlIHVuaXQgKi8KQEAgLTIwMzAsNiArMjA1MSwxMSBAQAogI2RlZmluZSBQRkFfQ1RMXzEgICAgICAgICAgICAgICAweDY4MDgwCiAjZGVmaW5lIFBGQl9DVExfMSAgICAgICAgICAgICAgIDB4Njg4ODAKICNkZWZpbmUgIFBGX0VOQUJMRSAgICAgICAgICAgICAgKDE8PDMxKQorI2RlZmluZSAgUEZfRklMVEVSX01BU0sJCSgzPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9QUk9HUkFNTUVECSgwPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9NRURfM3gzCSgxPDwyMykKKyNkZWZpbmUgIFBGX0ZJTFRFUl9FREdFX0VOSEFOQ0UJKDI8PDIzKQorI2RlZmluZSAgUEZfRklMVEVSX0VER0VfU09GVEVOCSgzPDwyMykKICNkZWZpbmUgUEZBX1dJTl9TWgkJMHg2ODA3NAogI2RlZmluZSBQRkJfV0lOX1NaCQkweDY4ODc0CiAjZGVmaW5lIFBGQV9XSU5fUE9TCQkweDY4MDcwCkBAIC0yMTQ5LDExICsyMTc1LDExIEBACiAjZGVmaW5lICBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX01BU0sJCSgzPDwxMykKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9ESVNBQkxFICAgICAgICAgICAgICAgICgwPDwxMSkKICNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9FTkFCTEUgICAgICAgICAgICAgICAgICgyPDwxMSkKLSNkZWZpbmUgIERSRUZfU1NDX1NPVVJDRV9NQVNLCQkJKDI8PDExKQorI2RlZmluZSAgRFJFRl9TU0NfU09VUkNFX01BU0sJCQkoMzw8MTEpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRElTQUJMRSAgICAgICAgICAoMDw8OSkKICNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX0NLNTA1X0VOQUJMRQkJKDE8PDkpCiAjZGVmaW5lICBEUkVGX05PTlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgICAoMjw8OSkKLSNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMjw8OSkKKyNkZWZpbmUgIERSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLCQkoMzw8OSkKICNkZWZpbmUgIERSRUZfU1VQRVJTUFJFQURfU09VUkNFX0RJU0FCTEUgICAgICAgICgwPDw3KQogI2RlZmluZSAgRFJFRl9TVVBFUlNQUkVBRF9TT1VSQ0VfRU5BQkxFICAgICAgICAgKDI8PDcpCiAjZGVmaW5lICBEUkVGX1NTQzRfRE9XTlNQUkVBRCAgICAgICAgICAgICAgICAgICAoMDw8NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYmQ2ZDhkOS4uOTkyZDU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTMyLDExICszMiwxNSBAQAogc3RhdGljIGJvb2wgaTkxNV9waXBlX2VuYWJsZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgZW51bSBwaXBlIHBpcGUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIJZHBsbF9yZWc7CiAKLQlpZiAocGlwZSA9PSBQSVBFX0EpCi0JCXJldHVybiAoSTkxNV9SRUFEKERQTExfQSkgJiBEUExMX1ZDT19FTkFCTEUpOwotCWVsc2UKLQkJcmV0dXJuIChJOTE1X1JFQUQoRFBMTF9CKSAmIERQTExfVkNPX0VOQUJMRSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9yZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gUENIX0RQTExfQTogUENIX0RQTExfQjsKKwl9IGVsc2UgeworCQlkcGxsX3JlZyA9IChwaXBlID09IFBJUEVfQSkgPyBEUExMX0E6IERQTExfQjsKKwl9CisKKwlyZXR1cm4gKEk5MTVfUkVBRChkcGxsX3JlZykgJiBEUExMX1ZDT19FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZCBpOTE1X3NhdmVfcGFsZXR0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIHBpcGUgcGlwZSkKQEAgLTQ5LDYgKzUzLDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTY4LDYgKzc1LDkgQEAKIAlpZiAoIWk5MTVfcGlwZV9lbmFibGVkKGRldiwgcGlwZSkpCiAJCXJldHVybjsKIAorCWlmIChJU19JR0RORyhkZXYpKQorCQlyZWcgPSAocGlwZSA9PSBQSVBFX0EpID8gTEdDX1BBTEVUVEVfQSA6IExHQ19QQUxFVFRFX0I7CisKIAlpZiAocGlwZSA9PSBQSVBFX0EpCiAJCWFycmF5ID0gZGV2X3ByaXYtPnNhdmVfcGFsZXR0ZV9hOwogCWVsc2UKQEAgLTIzMiwxMCArMjQyLDE2IEBACiAJLyogUGlwZSAmIHBsYW5lIEEgaW5mbyAqLwogCWRldl9wcml2LT5zYXZlUElQRUFDT05GID0gSTkxNV9SRUFEKFBJUEVBQ09ORik7CiAJZGV2X3ByaXYtPnNhdmVQSVBFQVNSQyA9IEk5MTVfUkVBRChQSVBFQVNSQyk7Ci0JZGV2X3ByaXYtPnNhdmVGUEEwID0gSTkxNV9SRUFEKEZQQTApOwotCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChGUEExKTsKLQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOwotCWlmIChJU19JOTY1RyhkZXYpKQorCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChQQ0hfRlBBMCk7CisJCWRldl9wcml2LT5zYXZlRlBBMSA9IEk5MTVfUkVBRChQQ0hfRlBBMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9BID0gSTkxNV9SRUFEKFBDSF9EUExMX0EpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlRlBBMCA9IEk5MTVfUkVBRChGUEEwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEExID0gSTkxNV9SRUFEKEZQQTEpOworCQlkZXZfcHJpdi0+c2F2ZURQTExfQSA9IEk5MTVfUkVBRChEUExMX0EpOworCX0KKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVEUExMX0FfTUQgPSBJOTE1X1JFQUQoRFBMTF9BX01EKTsKIAlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9BID0gSTkxNV9SRUFEKEhUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZUhCTEFOS19BID0gSTkxNV9SRUFEKEhCTEFOS19BKTsKQEAgLTI0Myw3ICsyNTksMjQgQEAKIAlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BID0gSTkxNV9SRUFEKFZUT1RBTF9BKTsKIAlkZXZfcHJpdi0+c2F2ZVZCTEFOS19BID0gSTkxNV9SRUFEKFZCTEFOS19BKTsKIAlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgPSBJOTE1X1JFQUQoVlNZTkNfQSk7Ci0JZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EgPSBJOTE1X1JFQUQoQkNMUlBBVF9BKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCWRldl9wcml2LT5zYXZlQkNMUlBBVF9BID0gSTkxNV9SRUFEKEJDTFJQQVRfQSk7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZUZESV9UWEFfQ1RMID0gSTkxNV9SRUFEKEZESV9UWEFfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCA9IEk5MTVfUkVBRChGRElfUlhBX0NUTCk7CisKKwkJZGV2X3ByaXYtPnNhdmVQRkFfQ1RMXzEgPSBJOTE1X1JFQUQoUEZBX0NUTF8xKTsKKwkJZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaID0gSTkxNV9SRUFEKFBGQV9XSU5fU1opOworCQlkZXZfcHJpdi0+c2F2ZVBGQV9XSU5fUE9TID0gSTkxNV9SRUFEKFBGQV9XSU5fUE9TKTsKKworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9BID0gSTkxNV9SRUFEKFRSQU5TX0hUT1RBTF9BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQSA9IEk5MTVfUkVBRChUUkFOU19IQkxBTktfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSA9IEk5MTVfUkVBRChUUkFOU19IU1lOQ19BKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQSA9IEk5MTVfUkVBRChUUkFOU19WVE9UQUxfQSk7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0EgPSBJOTE1X1JFQUQoVFJBTlNfVkJMQU5LX0EpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EgPSBJOTE1X1JFQUQoVFJBTlNfVlNZTkNfQSk7CisJfQogCiAJZGV2X3ByaXYtPnNhdmVEU1BBQ05UUiA9IEk5MTVfUkVBRChEU1BBQ05UUik7CiAJZGV2X3ByaXYtPnNhdmVEU1BBU1RSSURFID0gSTkxNV9SRUFEKERTUEFTVFJJREUpOwpAQCAtMjYwLDEwICsyOTMsMTYgQEAKIAkvKiBQaXBlICYgcGxhbmUgQiBpbmZvICovCiAJZGV2X3ByaXYtPnNhdmVQSVBFQkNPTkYgPSBJOTE1X1JFQUQoUElQRUJDT05GKTsKIAlkZXZfcHJpdi0+c2F2ZVBJUEVCU1JDID0gSTkxNV9SRUFEKFBJUEVCU1JDKTsKLQlkZXZfcHJpdi0+c2F2ZUZQQjAgPSBJOTE1X1JFQUQoRlBCMCk7Ci0JZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKEZQQjEpOwotCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKFBDSF9GUEIwKTsKKwkJZGV2X3ByaXYtPnNhdmVGUEIxID0gSTkxNV9SRUFEKFBDSF9GUEIxKTsKKwkJZGV2X3ByaXYtPnNhdmVEUExMX0IgPSBJOTE1X1JFQUQoUENIX0RQTExfQik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVGUEIwID0gSTkxNV9SRUFEKEZQQjApOworCQlkZXZfcHJpdi0+c2F2ZUZQQjEgPSBJOTE1X1JFQUQoRlBCMSk7CisJCWRldl9wcml2LT5zYXZlRFBMTF9CID0gSTkxNV9SRUFEKERQTExfQik7CisJfQorCWlmIChJU19JOTY1RyhkZXYpICYmICFJU19JR0RORyhkZXYpKQogCQlkZXZfcHJpdi0+c2F2ZURQTExfQl9NRCA9IEk5MTVfUkVBRChEUExMX0JfTUQpOwogCWRldl9wcml2LT5zYXZlSFRPVEFMX0IgPSBJOTE1X1JFQUQoSFRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlSEJMQU5LX0IgPSBJOTE1X1JFQUQoSEJMQU5LX0IpOwpAQCAtMjcxLDcgKzMxMCwyNCBAQAogCWRldl9wcml2LT5zYXZlVlRPVEFMX0IgPSBJOTE1X1JFQUQoVlRPVEFMX0IpOwogCWRldl9wcml2LT5zYXZlVkJMQU5LX0IgPSBJOTE1X1JFQUQoVkJMQU5LX0IpOwogCWRldl9wcml2LT5zYXZlVlNZTkNfQiA9IEk5MTVfUkVBRChWU1lOQ19CKTsKLQlkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSA9IEk5MTVfUkVBRChCQ0xSUEFUX0EpOworCWlmICghSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0IgPSBJOTE1X1JFQUQoQkNMUlBBVF9CKTsKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlRkRJX1RYQl9DVEwgPSBJOTE1X1JFQUQoRkRJX1RYQl9DVEwpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMID0gSTkxNV9SRUFEKEZESV9SWEJfQ1RMKTsKKworCQlkZXZfcHJpdi0+c2F2ZVBGQl9DVExfMSA9IEk5MTVfUkVBRChQRkJfQ1RMXzEpOworCQlkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1ogPSBJOTE1X1JFQUQoUEZCX1dJTl9TWik7CisJCWRldl9wcml2LT5zYXZlUEZCX1dJTl9QT1MgPSBJOTE1X1JFQUQoUEZCX1dJTl9QT1MpOworCisJCWRldl9wcml2LT5zYXZlVFJBTlNfSFRPVEFMX0IgPSBJOTE1X1JFQUQoVFJBTlNfSFRPVEFMX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX0hCTEFOS19CID0gSTkxNV9SRUFEKFRSQU5TX0hCTEFOS19CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CID0gSTkxNV9SRUFEKFRSQU5TX0hTWU5DX0IpOworCQlkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZUT1RBTF9CID0gSTkxNV9SRUFEKFRSQU5TX1ZUT1RBTF9CKTsKKwkJZGV2X3ByaXYtPnNhdmVUUkFOU19WQkxBTktfQiA9IEk5MTVfUkVBRChUUkFOU19WQkxBTktfQik7CisJCWRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQiA9IEk5MTVfUkVBRChUUkFOU19WU1lOQ19CKTsKKwl9CiAKIAlkZXZfcHJpdi0+c2F2ZURTUEJDTlRSID0gSTkxNV9SRUFEKERTUEJDTlRSKTsKIAlkZXZfcHJpdi0+c2F2ZURTUEJTVFJJREUgPSBJOTE1X1JFQUQoRFNQQlNUUklERSk7CkBAIC0yOTAsMjMgKzM0Niw0MSBAQAogc3RhdGljIHZvaWQgaTkxNV9yZXN0b3JlX21vZGVzZXRfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgZHBsbF9hX3JlZywgZnBhMF9yZWcsIGZwYTFfcmVnOworCWludCBkcGxsX2JfcmVnLCBmcGIwX3JlZywgZnBiMV9yZWc7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKIAkJcmV0dXJuOwogCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZHBsbF9hX3JlZyA9IFBDSF9EUExMX0E7CisJCWRwbGxfYl9yZWcgPSBQQ0hfRFBMTF9COworCQlmcGEwX3JlZyA9IFBDSF9GUEEwOworCQlmcGIwX3JlZyA9IFBDSF9GUEIwOworCQlmcGExX3JlZyA9IFBDSF9GUEExOworCQlmcGIxX3JlZyA9IFBDSF9GUEIxOworCX0gZWxzZSB7CisJCWRwbGxfYV9yZWcgPSBEUExMX0E7CisJCWRwbGxfYl9yZWcgPSBEUExMX0I7CisJCWZwYTBfcmVnID0gRlBBMDsKKwkJZnBiMF9yZWcgPSBGUEIwOworCQlmcGExX3JlZyA9IEZQQTE7CisJCWZwYjFfcmVnID0gRlBCMTsKKwl9CisKIAkvKiBQaXBlICYgcGxhbmUgQSBpbmZvICovCiAJLyogUHJpbWUgdGhlIGNsb2NrICovCiAJaWYgKGRldl9wcml2LT5zYXZlRFBMTF9BICYgRFBMTF9WQ09fRU5BQkxFKSB7Ci0JCUk5MTVfV1JJVEUoRFBMTF9BLCBkZXZfcHJpdi0+c2F2ZURQTExfQSAmCisJCUk5MTVfV1JJVEUoZHBsbF9hX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0EgJgogCQkJICAgfkRQTExfVkNPX0VOQUJMRSk7CiAJCURSTV9VREVMQVkoMTUwKTsKIAl9Ci0JSTkxNV9XUklURShGUEEwLCBkZXZfcHJpdi0+c2F2ZUZQQTApOwotCUk5MTVfV1JJVEUoRlBBMSwgZGV2X3ByaXYtPnNhdmVGUEExKTsKKwlJOTE1X1dSSVRFKGZwYTBfcmVnLCBkZXZfcHJpdi0+c2F2ZUZQQTApOworCUk5MTVfV1JJVEUoZnBhMV9yZWcsIGRldl9wcml2LT5zYXZlRlBBMSk7CiAJLyogQWN0dWFsbHkgZW5hYmxlIGl0ICovCi0JSTkxNV9XUklURShEUExMX0EsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKKwlJOTE1X1dSSVRFKGRwbGxfYV9yZWcsIGRldl9wcml2LT5zYXZlRFBMTF9BKTsKIAlEUk1fVURFTEFZKDE1MCk7Ci0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoRFBMTF9BX01ELCBkZXZfcHJpdi0+c2F2ZURQTExfQV9NRCk7CiAJRFJNX1VERUxBWSgxNTApOwogCkBAIC0zMTcsNyArMzkxLDI0IEBACiAJSTkxNV9XUklURShWVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVWVE9UQUxfQSk7CiAJSTkxNV9XUklURShWQkxBTktfQSwgZGV2X3ByaXYtPnNhdmVWQkxBTktfQSk7CiAJSTkxNV9XUklURShWU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVZTWU5DX0EpOwotCUk5MTVfV1JJVEUoQkNMUlBBVF9BLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQSk7CisJaWYgKCFJU19JR0RORyhkZXYpKQorCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgZGV2X3ByaXYtPnNhdmVCQ0xSUEFUX0EpOworCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShGRElfUlhBX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0NUTCk7CisJCUk5MTVfV1JJVEUoRkRJX1RYQV9DVEwsIGRldl9wcml2LT5zYXZlRkRJX1RYQV9DVEwpOworCisJCUk5MTVfV1JJVEUoUEZBX0NUTF8xLCBkZXZfcHJpdi0+c2F2ZVBGQV9DVExfMSk7CisJCUk5MTVfV1JJVEUoUEZBX1dJTl9TWiwgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1NaKTsKKwkJSTkxNV9XUklURShQRkFfV0lOX1BPUywgZGV2X3ByaXYtPnNhdmVQRkFfV0lOX1BPUyk7CisKKwkJSTkxNV9XUklURShUUkFOU19IVE9UQUxfQSwgZGV2X3ByaXYtPnNhdmVUUkFOU19IVE9UQUxfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfSEJMQU5LX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSEJMQU5LX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX0hTWU5DX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfSFNZTkNfQSk7CisJCUk5MTVfV1JJVEUoVFJBTlNfVlRPVEFMX0EsIGRldl9wcml2LT5zYXZlVFJBTlNfVlRPVEFMX0EpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZCTEFOS19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZCTEFOS19BKTsKKwkJSTkxNV9XUklURShUUkFOU19WU1lOQ19BLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX1ZTWU5DX0EpOworCX0KIAogCS8qIFJlc3RvcmUgcGxhbmUgaW5mbyAqLwogCUk5MTVfV1JJVEUoRFNQQVNJWkUsIGRldl9wcml2LT5zYXZlRFNQQVNJWkUpOwpAQCAtMzM5LDE0ICs0MzAsMTQgQEAKIAogCS8qIFBpcGUgJiBwbGFuZSBCIGluZm8gKi8KIAlpZiAoZGV2X3ByaXYtPnNhdmVEUExMX0IgJiBEUExMX1ZDT19FTkFCTEUpIHsKLQkJSTkxNV9XUklURShEUExMX0IsIGRldl9wcml2LT5zYXZlRFBMTF9CICYKKwkJSTkxNV9XUklURShkcGxsX2JfcmVnLCBkZXZfcHJpdi0+c2F2ZURQTExfQiAmCiAJCQkgICB+RFBMTF9WQ09fRU5BQkxFKTsKIAkJRFJNX1VERUxBWSgxNTApOwogCX0KLQlJOTE1X1dSSVRFKEZQQjAsIGRldl9wcml2LT5zYXZlRlBCMCk7Ci0JSTkxNV9XUklURShGUEIxLCBkZXZfcHJpdi0+c2F2ZUZQQjEpOworCUk5MTVfV1JJVEUoZnBiMF9yZWcsIGRldl9wcml2LT5zYXZlRlBCMCk7CisJSTkxNV9XUklURShmcGIxX3JlZywgZGV2X3ByaXYtPnNhdmVGUEIxKTsKIAkvKiBBY3R1YWxseSBlbmFibGUgaXQgKi8KLQlJOTE1X1dSSVRFKERQTExfQiwgZGV2X3ByaXYtPnNhdmVEUExMX0IpOworCUk5MTVfV1JJVEUoZHBsbF9iX3JlZywgZGV2X3ByaXYtPnNhdmVEUExMX0IpOwogCURSTV9VREVMQVkoMTUwKTsKIAlpZiAoSVNfSTk2NUcoZGV2KSkKIAkJSTkxNV9XUklURShEUExMX0JfTUQsIGRldl9wcml2LT5zYXZlRFBMTF9CX01EKTsKQEAgLTM1OSw3ICs0NTAsMjQgQEAKIAlJOTE1X1dSSVRFKFZUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVZUT1RBTF9CKTsKIAlJOTE1X1dSSVRFKFZCTEFOS19CLCBkZXZfcHJpdi0+c2F2ZVZCTEFOS19CKTsKIAlJOTE1X1dSSVRFKFZTWU5DX0IsIGRldl9wcml2LT5zYXZlVlNZTkNfQik7Ci0JSTkxNV9XUklURShCQ0xSUEFUX0IsIGRldl9wcml2LT5zYXZlQkNMUlBBVF9CKTsKKwlpZiAoIUlTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCBkZXZfcHJpdi0+c2F2ZUJDTFJQQVRfQik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKEZESV9SWEJfQ1RMLCBkZXZfcHJpdi0+c2F2ZUZESV9SWEJfQ1RMKTsKKwkJSTkxNV9XUklURShGRElfVFhCX0NUTCwgZGV2X3ByaXYtPnNhdmVGRElfVFhCX0NUTCk7CisKKwkJSTkxNV9XUklURShQRkJfQ1RMXzEsIGRldl9wcml2LT5zYXZlUEZCX0NUTF8xKTsKKwkJSTkxNV9XUklURShQRkJfV0lOX1NaLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fU1opOworCQlJOTE1X1dSSVRFKFBGQl9XSU5fUE9TLCBkZXZfcHJpdi0+c2F2ZVBGQl9XSU5fUE9TKTsKKworCQlJOTE1X1dSSVRFKFRSQU5TX0hUT1RBTF9CLCBkZXZfcHJpdi0+c2F2ZVRSQU5TX0hUT1RBTF9CKTsKKwkJSTkxNV9XUklURShUUkFOU19IQkxBTktfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IQkxBTktfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfSFNZTkNfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19IU1lOQ19CKTsKKwkJSTkxNV9XUklURShUUkFOU19WVE9UQUxfQiwgZGV2X3ByaXYtPnNhdmVUUkFOU19WVE9UQUxfQik7CisJCUk5MTVfV1JJVEUoVFJBTlNfVkJMQU5LX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVkJMQU5LX0IpOworCQlJOTE1X1dSSVRFKFRSQU5TX1ZTWU5DX0IsIGRldl9wcml2LT5zYXZlVFJBTlNfVlNZTkNfQik7CisJfQogCiAJLyogUmVzdG9yZSBwbGFuZSBpbmZvICovCiAJSTkxNV9XUklURShEU1BCU0laRSwgZGV2X3ByaXYtPnNhdmVEU1BCU0laRSk7CkBAIC00MDQsMjEgKzUxMiw0MyBAQAogCQlkZXZfcHJpdi0+c2F2ZUNVUlNJWkUgPSBJOTE1X1JFQUQoQ1VSU0laRSk7CiAKIAkvKiBDUlQgc3RhdGUgKi8KLQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVBRFBBID0gSTkxNV9SRUFEKFBDSF9BRFBBKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUFEUEEgPSBJOTE1X1JFQUQoQURQQSk7CisJfQogCiAJLyogTFZEUyBzdGF0ZSAqLwotCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBGSVRfUEdNX1JBVElPUyA9IEk5MTVfUkVBRChQRklUX1BHTV9SQVRJT1MpOwotCWRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwpOwotCWlmIChJU19JOTY1RyhkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX0NUTDIpOwotCWlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQotCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wgPSBJOTE1X1JFQUQoUENIX1BQX0NPTlRST0wpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gSTkxNV9SRUFEKEJMQ19QV01fUENIX0NUTDEpOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMiA9IEk5MTVfUkVBRChCTENfUFdNX1BDSF9DVEwyKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwgPSBJOTE1X1JFQUQoQkxDX1BXTV9DUFVfQ1RMKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOworCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoUENIX0xWRFMpOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCA9IEk5MTVfUkVBRChQUF9DT05UUk9MKTsKKwkJZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MgPSBJOTE1X1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKwkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCk7CisJCWRldl9wcml2LT5zYXZlQkxDX0hJU1RfQ1RMID0gSTkxNV9SRUFEKEJMQ19ISVNUX0NUTCk7CisJCWlmIChJU19JOTY1RyhkZXYpKQorCQkJZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTDIgPSBJOTE1X1JFQUQoQkxDX1BXTV9DVEwyKTsKKwkJaWYgKElTX01PQklMRShkZXYpICYmICFJU19JODMwKGRldikpCisJCQlkZXZfcHJpdi0+c2F2ZUxWRFMgPSBJOTE1X1JFQUQoTFZEUyk7CisJfQorCisJaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJZGV2X3ByaXYtPnNhdmVQRklUX0NPTlRST0wgPSBJOTE1X1JFQUQoUEZJVF9DT05UUk9MKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOwotCWRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PRkZfREVMQVlTKTsKLQlkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IgPSBJOTE1X1JFQUQoUFBfRElWSVNPUik7CisKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQQ0hfUFBfT05fREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTID0gSTkxNV9SRUFEKFBDSF9QUF9PRkZfREVMQVlTKTsKKwkJZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SID0gSTkxNV9SRUFEKFBDSF9QUF9ESVZJU09SKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyA9IEk5MTVfUkVBRChQUF9PTl9ERUxBWVMpOworCQlkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMgPSBJOTE1X1JFQUQoUFBfT0ZGX0RFTEFZUyk7CisJCWRldl9wcml2LT5zYXZlUFBfRElWSVNPUiA9IEk5MTVfUkVBRChQUF9ESVZJU09SKTsKKwl9CiAKIAkvKiBEaXNwbGF5IFBvcnQgc3RhdGUgKi8KIAlpZiAoU1VQUE9SVFNfSU5URUdSQVRFRF9EUChkZXYpKSB7CkBAIC00MzcsMTYgKzU2NywyMyBAQAogCS8qIEZJWE1FOiBzYXZlIFRWICYgU0RWTyBzdGF0ZSAqLwogCiAJLyogRkJDIHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UgPSBJOTE1X1JFQUQoRkJDX0NGQl9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKLQlkZXZfcHJpdi0+c2F2ZUZCQ19DT05UUk9MMiA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTDIpOwotCWRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZGV2X3ByaXYtPnNhdmVEUEZDX0NCX0JBU0UgPSBJOTE1X1JFQUQoRFBGQ19DQl9CQVNFKTsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+c2F2ZUZCQ19DRkJfQkFTRSA9IEk5MTVfUkVBRChGQkNfQ0ZCX0JBU0UpOworCQlkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFID0gSTkxNV9SRUFEKEZCQ19MTF9CQVNFKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIgPSBJOTE1X1JFQUQoRkJDX0NPTlRST0wyKTsKKwkJZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCA9IEk5MTVfUkVBRChGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVWR0EwID0gSTkxNV9SRUFEKFZHQTApOwogCWRldl9wcml2LT5zYXZlVkdBMSA9IEk5MTVfUkVBRChWR0ExKTsKIAlkZXZfcHJpdi0+c2F2ZVZHQV9QRCA9IEk5MTVfUkVBRChWR0FfUEQpOwotCWRldl9wcml2LT5zYXZlVkdBQ05UUkwgPSBJOTE1X1JFQUQoVkdBQ05UUkwpOworCWlmIChJU19JR0RORyhkZXYpKQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKENQVV9WR0FDTlRSTCk7CisJZWxzZQorCQlkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMID0gSTkxNV9SRUFEKFZHQUNOVFJMKTsKIAogCWk5MTVfc2F2ZV92Z2EoZGV2KTsKIH0KQEAgLTQ4NSwyMiArNjIyLDQxIEBACiAJCUk5MTVfV1JJVEUoQ1VSU0laRSwgZGV2X3ByaXYtPnNhdmVDVVJTSVpFKTsKIAogCS8qIENSVCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJSTkxNV9XUklURShQQ0hfQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoQURQQSwgZGV2X3ByaXYtPnNhdmVBRFBBKTsKIAogCS8qIExWRFMgc3RhdGUgKi8KLQlpZiAoSVNfSTk2NUcoZGV2KSkKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSUdETkcoZGV2KSkKIAkJSTkxNV9XUklURShCTENfUFdNX0NUTDIsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwyKTsKLQlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKKworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCUk5MTVfV1JJVEUoUENIX0xWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7CisJfSBlbHNlIGlmIChJU19NT0JJTEUoZGV2KSAmJiAhSVNfSTgzMChkZXYpKQogCQlJOTE1X1dSSVRFKExWRFMsIGRldl9wcml2LT5zYXZlTFZEUyk7Ci0JaWYgKCFJU19JODMwKGRldikgJiYgIUlTXzg0NUcoZGV2KSkKKworCWlmICghSVNfSTgzMChkZXYpICYmICFJU184NDVHKGRldikgJiYgIUlTX0lHRE5HKGRldikpCiAJCUk5MTVfV1JJVEUoUEZJVF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CiAKLQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwotCUk5MTVfV1JJVEUoQkxDX1BXTV9DVEwsIGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwpOwotCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7Ci0JSTkxNV9XUklURShQUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOwotCUk5MTVfV1JJVEUoUFBfRElWSVNPUiwgZGV2X3ByaXYtPnNhdmVQUF9ESVZJU09SKTsKLQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwxLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKwkJSTkxNV9XUklURShCTENfUFdNX1BDSF9DVEwyLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMMik7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19DUFVfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX1BXTV9DUFVfQ1RMMiwgZGV2X3ByaXYtPnNhdmVCTENfQ1BVX1BXTV9DVEwyKTsKKwkJSTkxNV9XUklURShQQ0hfUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX09GRl9ERUxBWVMsIGRldl9wcml2LT5zYXZlUFBfT0ZGX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUENIX1BQX0RJVklTT1IsIGRldl9wcml2LT5zYXZlUFBfRElWSVNPUik7CisJCUk5MTVfV1JJVEUoUENIX1BQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfSBlbHNlIHsKKwkJSTkxNV9XUklURShQRklUX1BHTV9SQVRJT1MsIGRldl9wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKKwkJSTkxNV9XUklURShCTENfUFdNX0NUTCwgZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCk7CisJCUk5MTVfV1JJVEUoQkxDX0hJU1RfQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19ISVNUX0NUTCk7CisJCUk5MTVfV1JJVEUoUFBfT05fREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09OX0RFTEFZUyk7CisJCUk5MTVfV1JJVEUoUFBfT0ZGX0RFTEFZUywgZGV2X3ByaXYtPnNhdmVQUF9PRkZfREVMQVlTKTsKKwkJSTkxNV9XUklURShQUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOworCQlJOTE1X1dSSVRFKFBQX0NPTlRST0wsIGRldl9wcml2LT5zYXZlUFBfQ09OVFJPTCk7CisJfQogCiAJLyogRGlzcGxheSBQb3J0IHN0YXRlICovCiAJaWYgKFNVUFBPUlRTX0lOVEVHUkFURURfRFAoZGV2KSkgewpAQCAtNTExLDEzICs2NjcsMjIgQEAKIAkvKiBGSVhNRTogcmVzdG9yZSBUViAmIFNEVk8gc3RhdGUgKi8KIAogCS8qIEZCQyBpbmZvICovCi0JSTkxNV9XUklURShGQkNfQ0ZCX0JBU0UsIGRldl9wcml2LT5zYXZlRkJDX0NGQl9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKLQlJOTE1X1dSSVRFKEZCQ19DT05UUk9MMiwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTDIpOwotCUk5MTVfV1JJVEUoRkJDX0NPTlRST0wsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wpOworCWlmIChJU19HTTQ1KGRldikpIHsKKwkJZzR4X2Rpc2FibGVfZmJjKGRldik7CisJCUk5MTVfV1JJVEUoRFBGQ19DQl9CQVNFLCBkZXZfcHJpdi0+c2F2ZURQRkNfQ0JfQkFTRSk7CisJfSBlbHNlIHsKKwkJaTh4eF9kaXNhYmxlX2ZiYyhkZXYpOworCQlJOTE1X1dSSVRFKEZCQ19DRkJfQkFTRSwgZGV2X3ByaXYtPnNhdmVGQkNfQ0ZCX0JBU0UpOworCQlJOTE1X1dSSVRFKEZCQ19MTF9CQVNFLCBkZXZfcHJpdi0+c2F2ZUZCQ19MTF9CQVNFKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTDIsIGRldl9wcml2LT5zYXZlRkJDX0NPTlRST0wyKTsKKwkJSTkxNV9XUklURShGQkNfQ09OVFJPTCwgZGV2X3ByaXYtPnNhdmVGQkNfQ09OVFJPTCk7CisJfQogCiAJLyogVkdBIHN0YXRlICovCi0JSTkxNV9XUklURShWR0FDTlRSTCwgZGV2X3ByaXYtPnNhdmVWR0FDTlRSTCk7CisJaWYgKElTX0lHRE5HKGRldikpCisJCUk5MTVfV1JJVEUoQ1BVX1ZHQUNOVFJMLCBkZXZfcHJpdi0+c2F2ZVZHQUNOVFJMKTsKKwllbHNlCisJCUk5MTVfV1JJVEUoVkdBQ05UUkwsIGRldl9wcml2LT5zYXZlVkdBQ05UUkwpOwogCUk5MTVfV1JJVEUoVkdBMCwgZGV2X3ByaXYtPnNhdmVWR0EwKTsKIAlJOTE1X1dSSVRFKFZHQTEsIGRldl9wcml2LT5zYXZlVkdBMSk7CiAJSTkxNV9XUklURShWR0FfUEQsIGRldl9wcml2LT5zYXZlVkdBX1BEKTsKQEAgLTU0Myw4ICs3MDgsMTcgQEAKIAlpOTE1X3NhdmVfZGlzcGxheShkZXYpOwogCiAJLyogSW50ZXJydXB0IHN0YXRlICovCi0JZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKLQlkZXZfcHJpdi0+c2F2ZUlNUiA9IEk5MTVfUkVBRChJTVIpOworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCWRldl9wcml2LT5zYXZlREVJRVIgPSBJOTE1X1JFQUQoREVJRVIpOworCQlkZXZfcHJpdi0+c2F2ZURFSU1SID0gSTkxNV9SRUFEKERFSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVHVElFUiA9IEk5MTVfUkVBRChHVElFUik7CisJCWRldl9wcml2LT5zYXZlR1RJTVIgPSBJOTE1X1JFQUQoR1RJTVIpOworCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKKwkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnNhdmVJRVIgPSBJOTE1X1JFQUQoSUVSKTsKKwkJZGV2X3ByaXYtPnNhdmVJTVIgPSBJOTE1X1JFQUQoSU1SKTsKKwl9CiAKIAkvKiBDbG9jayBnYXRpbmcgc3RhdGUgKi8KIAlkZXZfcHJpdi0+c2F2ZURfU1RBVEUgPSBJOTE1X1JFQUQoRF9TVEFURSk7CkBAIC02MDksOCArNzgzLDE3IEBACiAJaTkxNV9yZXN0b3JlX2Rpc3BsYXkoZGV2KTsKIAogCS8qIEludGVycnVwdCBzdGF0ZSAqLwotCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOwotCUk5MTVfV1JJVEUgKElNUiwgIGRldl9wcml2LT5zYXZlSU1SKTsKKwlpZiAoSVNfSUdETkcoZGV2KSkgeworCQlJOTE1X1dSSVRFKERFSUVSLCBkZXZfcHJpdi0+c2F2ZURFSUVSKTsKKwkJSTkxNV9XUklURShERUlNUiwgZGV2X3ByaXYtPnNhdmVERUlNUik7CisJCUk5MTVfV1JJVEUoR1RJRVIsIGRldl9wcml2LT5zYXZlR1RJRVIpOworCQlJOTE1X1dSSVRFKEdUSU1SLCBkZXZfcHJpdi0+c2F2ZUdUSU1SKTsKKwkJSTkxNV9XUklURShGRElfUlhBX0lNUiwgZGV2X3ByaXYtPnNhdmVGRElfUlhBX0lNUik7CisJCUk5MTVfV1JJVEUoRkRJX1JYQl9JTVIsIGRldl9wcml2LT5zYXZlRkRJX1JYQl9JTVIpOworCX0gZWxzZSB7CisJCUk5MTVfV1JJVEUgKElFUiwgZGV2X3ByaXYtPnNhdmVJRVIpOworCQlJOTE1X1dSSVRFIChJTVIsICBkZXZfcHJpdi0+c2F2ZUlNUik7CisJfQogCiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJSTkxNV9XUklURSAoRF9TVEFURSwgZGV2X3ByaXYtPnNhdmVEX1NUQVRFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfdHJhY2UuaAppbmRleCA1NTY3YTQwLi4wMTg0MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3RyYWNlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV90cmFjZS5oCkBAIC0xNTgsMTYgKzE1OCwxNyBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKKwkJCSAgIGk5MTVfdHJhY2VfaXJxX2dldChkZXYsIHNlcW5vKTsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3RfZmx1c2gsCkBAIC0xNzgsMjAgKzE3OSwyMCBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8sIGZsdXNoX2RvbWFpbnMsIGludmFsaWRhdGVfZG9tYWlucyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgX19maWVsZCh1MzIsIGZsdXNoX2RvbWFpbnMpCiAJCQkgICAgIF9fZmllbGQodTMyLCBpbnZhbGlkYXRlX2RvbWFpbnMpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgIF9fZW50cnktPmZsdXNoX2RvbWFpbnMgPSBmbHVzaF9kb21haW5zOwogCQkJICAgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zID0gaW52YWxpZGF0ZV9kb21haW5zOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUsIGZsdXNoPSUwNHgsIGludmFsaWRhdGU9JTA0eCIsCisJICAgIFRQX3ByaW50aygiZGV2PSV1LCBzZXFubz0ldSwgZmx1c2g9JTA0eCwgaW52YWxpZGF0ZT0lMDR4IiwKIAkJICAgICAgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubywKIAkJICAgICAgX19lbnRyeS0+Zmx1c2hfZG9tYWlucywgX19lbnRyeS0+aW52YWxpZGF0ZV9kb21haW5zKQogKTsKQEAgLTIwNCwxNiArMjA1LDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUsCkBAIC0yMjMsMTYgKzIyNCwxNiBAQAogCSAgICBUUF9BUkdTKGRldiwgc2Vxbm8pLAogCiAJICAgIFRQX1NUUlVDVF9fZW50cnkoCi0JCQkgICAgIF9fZmllbGQoc3RydWN0IGRybV9kZXZpY2UgKiwgZGV2KQorCQkJICAgICBfX2ZpZWxkKHUzMiwgZGV2KQogCQkJICAgICBfX2ZpZWxkKHUzMiwgc2Vxbm8pCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgX19lbnRyeS0+c2Vxbm8gPSBzZXFubzsKIAkJCSAgICksCiAKLQkgICAgVFBfcHJpbnRrKCJkZXY9JXAsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUsIHNlcW5vPSV1IiwgX19lbnRyeS0+ZGV2LCBfX2VudHJ5LT5zZXFubykKICk7CiAKIFRSQUNFX0VWRU5UKGk5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9iZWdpbiwKQEAgLTI0MiwxNiArMjQzLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9nZW1fcmVxdWVzdF93YWl0X2VuZCwKQEAgLTI2MSwxNiArMjYyLDE2IEBACiAJICAgIFRQX0FSR1MoZGV2LCBzZXFubyksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgIF9fZmllbGQodTMyLCBzZXFubykKIAkJCSAgICAgKSwKIAogCSAgICBUUF9mYXN0X2Fzc2lnbigKLQkJCSAgIF9fZW50cnktPmRldiA9IGRldjsKKwkJCSAgIF9fZW50cnktPmRldiA9IGRldi0+cHJpbWFyeS0+aW5kZXg7CiAJCQkgICBfX2VudHJ5LT5zZXFubyA9IHNlcW5vOwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQorCSAgICBUUF9wcmludGsoImRldj0ldSwgc2Vxbm89JXUiLCBfX2VudHJ5LT5kZXYsIF9fZW50cnktPnNlcW5vKQogKTsKIAogVFJBQ0VfRVZFTlQoaTkxNV9yaW5nX3dhaXRfYmVnaW4sCkBAIC0yODAsMTQgKzI4MSwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiBUUkFDRV9FVkVOVChpOTE1X3Jpbmdfd2FpdF9lbmQsCkBAIC0yOTcsMTQgKzI5OCwxNCBAQAogCSAgICBUUF9BUkdTKGRldiksCiAKIAkgICAgVFBfU1RSVUNUX19lbnRyeSgKLQkJCSAgICAgX19maWVsZChzdHJ1Y3QgZHJtX2RldmljZSAqLCBkZXYpCisJCQkgICAgIF9fZmllbGQodTMyLCBkZXYpCiAJCQkgICAgICksCiAKIAkgICAgVFBfZmFzdF9hc3NpZ24oCi0JCQkgICBfX2VudHJ5LT5kZXYgPSBkZXY7CisJCQkgICBfX2VudHJ5LT5kZXYgPSBkZXYtPnByaW1hcnktPmluZGV4OwogCQkJICAgKSwKIAotCSAgICBUUF9wcmludGsoImRldj0lcCIsIF9fZW50cnktPmRldikKKwkgICAgVFBfcHJpbnRrKCJkZXY9JXUiLCBfX2VudHJ5LT5kZXYpCiApOwogCiAjZW5kaWYgLyogX0k5MTVfVFJBQ0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwppbmRleCA0MzM3NDE0Li45NmNkMjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCkBAIC0zNTEsMjAgKzM1MSwxOCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBiZGJfZHJpdmVyX2ZlYXR1cmVzICpkcml2ZXI7CiAKLQkvKiBzZXQgZGVmYXVsdCBmb3IgY2hpcHMgd2l0aG91dCBlRFAgKi8KLQlpZiAoIVNVUFBPUlRTX0VEUChkZXYpKSB7Ci0JCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KIAlkcml2ZXIgPSBmaW5kX3NlY3Rpb24oYmRiLCBCREJfRFJJVkVSX0ZFQVRVUkVTKTsKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkKKwlpZiAoZHJpdmVyICYmIFNVUFBPUlRTX0VEUChkZXYpICYmCisJICAgIGRyaXZlci0+bHZkc19jb25maWcgPT0gQkRCX0RSSVZFUl9GRUFUVVJFX0VEUCkgewogCQlkZXZfcHJpdi0+ZWRwX3N1cHBvcnQgPSAxOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5lZHBfc3VwcG9ydCA9IDA7CisJfQogCi0JaWYgKGRyaXZlci0+ZHVhbF9mcmVxdWVuY3kpCisJaWYgKGRyaXZlciAmJiBkcml2ZXItPmR1YWxfZnJlcXVlbmN5KQogCQlkZXZfcHJpdi0+cmVuZGVyX3JlY2xvY2tfYXZhaWwgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXggOTNmZjZjMC4uM2JhNjU0NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTk0Myw2ICs5NDMsNyBAQAogICAgIGNsb2NrLm0gPSA1ICogKGNsb2NrLm0xICsgMikgKyAoY2xvY2subTIgKyAyKTsKICAgICBjbG9jay5wID0gKGNsb2NrLnAxICogY2xvY2sucDIpOwogICAgIGNsb2NrLmRvdCA9IDk2MDAwICogY2xvY2subSAvIChjbG9jay5uICsgMikgLyBjbG9jay5wOworICAgIGNsb2NrLnZjbyA9IDA7CiAgICAgbWVtY3B5KGJlc3RfY2xvY2ssICZjbG9jaywgc2l6ZW9mKGludGVsX2Nsb2NrX3QpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyNjAsOSArMTI2MSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFByZS1pOTY1IG5lZWRzIHRvIGluc3RhbGwgYSBmZW5jZSBmb3IgdGlsZWQgc2Nhbi1vdXQgKi8KLQlpZiAoIUlTX0k5NjVHKGRldikgJiYKLQkgICAgb2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FICYmCisJLyogSW5zdGFsbCBhIGZlbmNlIGZvciB0aWxlZCBzY2FuLW91dC4gUHJlLWk5NjUgYWx3YXlzIG5lZWRzIGEgZmVuY2UsCisJICogd2hlcmVhcyA5NjUrIG9ubHkgcmVxdWlyZXMgYSBmZW5jZSBpZiB1c2luZyBmcmFtZWJ1ZmZlciBjb21wcmVzc2lvbi4KKwkgKiBGb3Igc2ltcGxpY2l0eSwgd2UgYWx3YXlzIGluc3RhbGwgYSBmZW5jZSBhcyB0aGUgY29zdCBpcyBub3QgdGhhdCBvbmVyb3VzLgorCSAqLworCWlmIChvYmpfcHJpdi0+ZmVuY2VfcmVnID09IEk5MTVfRkVOQ0VfUkVHX05PTkUgJiYKIAkgICAgb2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZV9yZWcob2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC0xNTEzLDcgKzE1MTYsNyBAQAogCQkvKiBFbmFibGUgcGFuZWwgZml0dGluZyBmb3IgTFZEUyAqLwogCQlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJCXRlbXAgPSBJOTE1X1JFQUQocGZfY3RsX3JlZyk7Ci0JCQlJOTE1X1dSSVRFKHBmX2N0bF9yZWcsIHRlbXAgfCBQRl9FTkFCTEUpOworCQkJSTkxNV9XUklURShwZl9jdGxfcmVnLCB0ZW1wIHwgUEZfRU5BQkxFIHwgUEZfRklMVEVSX01FRF8zeDMpOwogCiAJCQkvKiBjdXJyZW50bHkgZnVsbCBhc3BlY3QgKi8KIAkJCUk5MTVfV1JJVEUocGZfd2luX3BvcywgMCk7CkBAIC0xODAxLDYgKzE4MDQsOCBAQAogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKKwkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKKwogCQkvKiBFbmFibGUgdGhlIERQTEwgKi8KIAkJdGVtcCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAJCWlmICgodGVtcCAmIERQTExfVkNPX0VOQUJMRSkgPT0gMCkgewpAQCAtMTgzOCw3ICsxODQzLDYgQEAKIAogCQkvKiBHaXZlIHRoZSBvdmVybGF5IHNjYWxlciBhIGNoYW5jZSB0byBlbmFibGUgaWYgaXQncyBvbiB0aGlzIHBpcGUgKi8KIAkJLy9pbnRlbF9jcnRjX2RwbXNfdmlkZW8oY3J0YywgdHJ1ZSk7IFRPRE8KLQkJaW50ZWxfdXBkYXRlX3dhdGVybWFya3MoZGV2KTsKIAlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlpbnRlbF91cGRhdGVfd2F0ZXJtYXJrcyhkZXYpOwpAQCAtMjA4Miw3ICsyMDg2LDcgQEAKICNkZWZpbmUgTElOS19OIDB4ODAwMDAKIAogc3RhdGljIHZvaWQKLWlnZG5nX2NvbXB1dGVfbV9uKGludCBieXRlc19wZXJfcGl4ZWwsIGludCBubGFuZXMsCitpZ2RuZ19jb21wdXRlX21fbihpbnQgYml0c19wZXJfcGl4ZWwsIGludCBubGFuZXMsCiAJCWludCBwaXhlbF9jbG9jaywgaW50IGxpbmtfY2xvY2ssCiAJCXN0cnVjdCBmZGlfbV9uICptX24pCiB7CkBAIC0yMDkyLDcgKzIwOTYsOCBAQAogCiAJdGVtcCA9ICh1NjQpIERBVEFfTiAqIHBpeGVsX2Nsb2NrOwogCXRlbXAgPSBkaXZfdTY0KHRlbXAsIGxpbmtfY2xvY2spOwotCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYnl0ZXNfcGVyX3BpeGVsLCBubGFuZXMpOworCW1fbi0+Z21jaF9tID0gZGl2X3U2NCh0ZW1wICogYml0c19wZXJfcGl4ZWwsIG5sYW5lcyk7CisJbV9uLT5nbWNoX20gPj49IDM7IC8qIGNvbnZlcnQgdG8gYnl0ZXNfcGVyX3BpeGVsICovCiAJbV9uLT5nbWNoX24gPSBEQVRBX047CiAJZmRpX3JlZHVjZV9yYXRpbygmbV9uLT5nbWNoX20sICZtX24tPmdtY2hfbik7CiAKQEAgLTIxNDAsNiArMjE0NSwxMyBAQAogCUlHRF9DVVJTT1JfR1VBUkRfV00sCiAJSUdEX0ZJRk9fTElORV9TSVpFCiB9Oworc3RhdGljIHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zIGc0eF93bV9pbmZvID0geworCUc0WF9GSUZPX1NJWkUsCisJRzRYX01BWF9XTSwKKwlHNFhfTUFYX1dNLAorCTIsCisJRzRYX0ZJRk9fTElORV9TSVpFLAorfTsKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBpOTQ1X3dtX2luZm8gPSB7CiAJSTk0NV9GSUZPX1NJWkUsCiAJSTkxNV9NQVhfV00sCkBAIC0yNDMwLDE3ICsyNDQyLDc0IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHVudXNlZCwgaW50IHVudXNlZDIsCi0JCQkgIGludCB1bnVzZWQzLCBpbnQgdW51c2VkNCkKK3N0YXRpYyB2b2lkIGc0eF91cGRhdGVfd20oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgIGludCBwbGFuZWFfY2xvY2ssCisJCQkgIGludCBwbGFuZWJfY2xvY2ssIGludCBzcl9oZGlzcGxheSwgaW50IHBpeGVsX3NpemUpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgZndfYmxjX3NlbGYgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpOworCWludCB0b3RhbF9zaXplLCBjYWNoZWxpbmVfc2l6ZTsKKwlpbnQgcGxhbmVhX3dtLCBwbGFuZWJfd20sIGN1cnNvcmFfd20sIGN1cnNvcmJfd20sIGN1cnNvcl9zcjsKKwlzdHJ1Y3QgaW50ZWxfd2F0ZXJtYXJrX3BhcmFtcyBwbGFuZWFfcGFyYW1zLCBwbGFuZWJfcGFyYW1zOworCXVuc2lnbmVkIGxvbmcgbGluZV90aW1lX3VzOworCWludCBzcl9jbG9jaywgc3JfZW50cmllcyA9IDAsIGVudHJpZXNfcmVxdWlyZWQ7CiAKLQlpZiAoaTkxNV9wb3dlcnNhdmUpCi0JCWZ3X2JsY19zZWxmIHw9IEZXX0JMQ19TRUxGX0VOOwotCWVsc2UKLQkJZndfYmxjX3NlbGYgJj0gfkZXX0JMQ19TRUxGX0VOOwotCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmKTsKKwkvKiBDcmVhdGUgY29waWVzIG9mIHRoZSBiYXNlIHNldHRpbmdzIGZvciBlYWNoIHBpcGUgKi8KKwlwbGFuZWFfcGFyYW1zID0gcGxhbmViX3BhcmFtcyA9IGc0eF93bV9pbmZvOworCisJLyogR3JhYiBhIGNvdXBsZSBvZiBnbG9iYWwgdmFsdWVzIGJlZm9yZSB3ZSBvdmVyd3JpdGUgdGhlbSAqLworCXRvdGFsX3NpemUgPSBwbGFuZWFfcGFyYW1zLmZpZm9fc2l6ZTsKKwljYWNoZWxpbmVfc2l6ZSA9IHBsYW5lYV9wYXJhbXMuY2FjaGVsaW5lX3NpemU7CisKKwkvKgorCSAqIE5vdGU6IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJmbG93IGZvciB2YXJpb3VzIGNsb2NrICYKKwkgKiBsYXRlbmN5IHZhbHVlcy4KKwkgKiBjbG9ja3MgZ28gZnJvbSBhIGZldyB0aG91c2FuZCB0byBzZXZlcmFsIGh1bmRyZWQgdGhvdXNhbmQuCisJICogbGF0ZW5jeSBpcyB1c3VhbGx5IGEgZmV3IHRob3VzYW5kCisJICovCisJZW50cmllc19yZXF1aXJlZCA9ICgocGxhbmVhX2Nsb2NrIC8gMTAwMCkgKiBwaXhlbF9zaXplICogbGF0ZW5jeV9ucykgLworCQkxMDAwOworCWVudHJpZXNfcmVxdWlyZWQgLz0gRzRYX0ZJRk9fTElORV9TSVpFOworCXBsYW5lYV93bSA9IGVudHJpZXNfcmVxdWlyZWQgKyBwbGFuZWFfcGFyYW1zLmd1YXJkX3NpemU7CisKKwllbnRyaWVzX3JlcXVpcmVkID0gKChwbGFuZWJfY2xvY2sgLyAxMDAwKSAqIHBpeGVsX3NpemUgKiBsYXRlbmN5X25zKSAvCisJCTEwMDA7CisJZW50cmllc19yZXF1aXJlZCAvPSBHNFhfRklGT19MSU5FX1NJWkU7CisJcGxhbmViX3dtID0gZW50cmllc19yZXF1aXJlZCArIHBsYW5lYl9wYXJhbXMuZ3VhcmRfc2l6ZTsKKworCWN1cnNvcmFfd20gPSBjdXJzb3JiX3dtID0gMTY7CisJY3Vyc29yX3NyID0gMzI7CisKKwlEUk1fREVCVUcoIkZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZFxuIiwgcGxhbmVhX3dtLCBwbGFuZWJfd20pOworCisJLyogQ2FsYyBzciBlbnRyaWVzIGZvciBvbmUgcGxhbmUgY29uZmlncyAqLworCWlmIChzcl9oZGlzcGxheSAmJiAoIXBsYW5lYV9jbG9jayB8fCAhcGxhbmViX2Nsb2NrKSkgeworCQkvKiBzZWxmLXJlZnJlc2ggaGFzIG11Y2ggaGlnaGVyIGxhdGVuY3kgKi8KKwkJY29uc3Qgc3RhdGljIGludCBzcl9sYXRlbmN5X25zID0gMTIwMDA7CisKKwkJc3JfY2xvY2sgPSBwbGFuZWFfY2xvY2sgPyBwbGFuZWFfY2xvY2sgOiBwbGFuZWJfY2xvY2s7CisJCWxpbmVfdGltZV91cyA9ICgoc3JfaGRpc3BsYXkgKiAxMDAwKSAvIHNyX2Nsb2NrKTsKKworCQkvKiBVc2UgbnMvdXMgdGhlbiBkaXZpZGUgdG8gcHJlc2VydmUgcHJlY2lzaW9uICovCisJCXNyX2VudHJpZXMgPSAoKChzcl9sYXRlbmN5X25zIC8gbGluZV90aW1lX3VzKSArIDEpICoKKwkJCSAgICAgIHBpeGVsX3NpemUgKiBzcl9oZGlzcGxheSkgLyAxMDAwOworCQlzcl9lbnRyaWVzID0gcm91bmR1cChzcl9lbnRyaWVzIC8gY2FjaGVsaW5lX3NpemUsIDEpOworCQlEUk1fREVCVUcoInNlbGYtcmVmcmVzaCBlbnRyaWVzOiAlZFxuIiwgc3JfZW50cmllcyk7CisJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKKwlEUk1fREVCVUcoIlNldHRpbmcgRklGTyB3YXRlcm1hcmtzIC0gQTogJWQsIEI6ICVkLCBTUiAlZFxuIiwKKwkJICBwbGFuZWFfd20sIHBsYW5lYl93bSwgc3JfZW50cmllcyk7CisKKwlwbGFuZWFfd20gJj0gMHgzZjsKKwlwbGFuZWJfd20gJj0gMHgzZjsKKworCUk5MTVfV1JJVEUoRFNQRlcxLCAoc3JfZW50cmllcyA8PCBEU1BGV19TUl9TSElGVCkgfAorCQkgICAoY3Vyc29yYl93bSA8PCBEU1BGV19DVVJTT1JCX1NISUZUKSB8CisJCSAgIChwbGFuZWJfd20gPDwgRFNQRldfUExBTkVCX1NISUZUKSB8IHBsYW5lYV93bSk7CisJSTkxNV9XUklURShEU1BGVzIsIChJOTE1X1JFQUQoRFNQRlcyKSAmIERTUEZXX0NVUlNPUkFfTUFTSykgfAorCQkgICAoY3Vyc29yYV93bSA8PCBEU1BGV19DVVJTT1JBX1NISUZUKSk7CisJLyogSFBMTCBvZmYgaW4gU1IgaGFzIHNvbWUgaXNzdWVzIG9uIEc0eC4uLiBkaXNhYmxlIGl0ICovCisJSTkxNV9XUklURShEU1BGVzMsIChJOTE1X1JFQUQoRFNQRlczKSAmIH5EU1BGV19IUExMX1NSX0VOKSB8CisJCSAgIChjdXJzb3Jfc3IgPDwgRFNQRldfQ1VSU09SX1NSX1NISUZUKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5NjVfdXBkYXRlX3dtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCB1bnVzZWQsIGludCB1bnVzZWQyLApAQCAtMjU4Niw2ICsyNjU1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHBsYW5lYV9jbG9jayA9IDAsIHBsYW5lYl9jbG9jayA9IDAsIHNyX2Nsb2NrID0gMDsKIAlpbnQgZW5hYmxlZCA9IDAsIHBpeGVsX3NpemUgPSAwOwogCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20pCisJCXJldHVybjsKKwogCS8qIEdldCB0aGUgY2xvY2sgY29uZmlnIGZyb20gYm90aCBwbGFuZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKQEAgLTI3NjMsNyArMjgzNSw3IEBACiAKIAkvKiBGREkgbGluayAqLwogCWlmIChJU19JR0RORyhkZXYpKSB7Ci0JCWludCBsYW5lLCBsaW5rX2J3OworCQlpbnQgbGFuZSwgbGlua19idywgYnBwOwogCQkvKiBlRFAgZG9lc24ndCByZXF1aXJlIEZESSBsaW5rLCBzbyBqdXN0IHNldCBEUCBNL04KIAkJICAgYWNjb3JkaW5nIHRvIGN1cnJlbnQgbGluayBjb25maWcgKi8KIAkJaWYgKGlzX2VkcCkgewpAQCAtMjc4MiwxMCArMjg1NCw3MiBAQAogCQkJbGFuZSA9IDQ7CiAJCQlsaW5rX2J3ID0gMjcwMDAwOwogCQl9Ci0JCWlnZG5nX2NvbXB1dGVfbV9uKDMsIGxhbmUsIHRhcmdldF9jbG9jaywKKworCQkvKiBkZXRlcm1pbmUgcGFuZWwgY29sb3IgZGVwdGggKi8KKwkJdGVtcCA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOworCisJCXN3aXRjaCAodGVtcCAmIFBJUEVfQlBDX01BU0spIHsKKwkJY2FzZSBQSVBFXzhCUEM6CisJCQlicHAgPSAyNDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfMTBCUEM6CisJCQlicHAgPSAzMDsKKwkJCWJyZWFrOworCQljYXNlIFBJUEVfNkJQQzoKKwkJCWJwcCA9IDE4OworCQkJYnJlYWs7CisJCWNhc2UgUElQRV8xMkJQQzoKKwkJCWJwcCA9IDM2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVua25vd24gcGlwZSBicGMgdmFsdWVcbiIpOworCQkJYnBwID0gMjQ7CisJCX0KKworCQlpZ2RuZ19jb21wdXRlX21fbihicHAsIGxhbmUsIHRhcmdldF9jbG9jaywKIAkJCQkgIGxpbmtfYncsICZtX24pOwogCX0KIAorCS8qIElyb25sYWtlOiB0cnkgdG8gc2V0dXAgZGlzcGxheSByZWYgY2xvY2sgYmVmb3JlIERQTEwKKwkgKiBlbmFibGluZy4gVGhpcyBpcyBvbmx5IHVuZGVyIGRyaXZlcidzIGNvbnRyb2wgYWZ0ZXIKKwkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKKwkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCisJICovCisJaWYgKElTX0lHRE5HKGRldikpIHsKKwkJdGVtcCA9IEk5MTVfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJLyogQWx3YXlzIGVuYWJsZSBub25zcHJlYWQgc291cmNlICovCisJCXRlbXAgJj0gfkRSRUZfTk9OU1BSRUFEX1NPVVJDRV9NQVNLOworCQl0ZW1wIHw9IERSRUZfTk9OU1BSRUFEX1NPVVJDRV9FTkFCTEU7CisJCUk5MTVfV1JJVEUoUENIX0RSRUZfQ09OVFJPTCwgdGVtcCk7CisJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKworCQl0ZW1wICY9IH5EUkVGX1NTQ19TT1VSQ0VfTUFTSzsKKwkJdGVtcCB8PSBEUkVGX1NTQ19TT1VSQ0VfRU5BQkxFOworCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJdWRlbGF5KDIwMCk7CisKKwkJaWYgKGlzX2VkcCkgeworCQkJaWYgKGRldl9wcml2LT5sdmRzX3VzZV9zc2MpIHsKKwkJCQl0ZW1wIHw9IERSRUZfU1NDMV9FTkFCTEU7CisJCQkJSTkxNV9XUklURShQQ0hfRFJFRl9DT05UUk9MLCB0ZW1wKTsKKwkJCQlQT1NUSU5HX1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CisKKwkJCQl1ZGVsYXkoMjAwKTsKKworCQkJCXRlbXAgJj0gfkRSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfTUFTSzsKKwkJCQl0ZW1wIHw9IERSRUZfQ1BVX1NPVVJDRV9PVVRQVVRfRE9XTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0gZWxzZSB7CisJCQkJdGVtcCB8PSBEUkVGX0NQVV9TT1VSQ0VfT1VUUFVUX05PTlNQUkVBRDsKKwkJCQlJOTE1X1dSSVRFKFBDSF9EUkVGX0NPTlRST0wsIHRlbXApOworCQkJCVBPU1RJTkdfUkVBRChQQ0hfRFJFRl9DT05UUk9MKTsKKwkJCX0KKwkJfQorCX0KKwogCWlmIChJU19JR0QoZGV2KSkgewogCQlmcCA9ICgxIDw8IGNsb2NrLm4pIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOwogCQlpZiAoaGFzX3JlZHVjZWRfY2xvY2spCkBAIC0yOTM2LDYgKzMwNzAsOCBAQAogCiAJCWx2ZHMgPSBJOTE1X1JFQUQobHZkc19yZWcpOwogCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQIHwgTFZEU19QSVBFQl9TRUxFQ1Q7CisJCS8qIHNldCB0aGUgY29ycmVzcG9uc2RpbmcgTFZEU19CT1JERVIgYml0ICovCisJCWx2ZHMgfD0gZGV2X3ByaXYtPmx2ZHNfYm9yZGVyX2JpdHM7CiAJCS8qIFNldCB0aGUgQjAtQjMgZGF0YSBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHdoZXRoZXIgd2UncmUgZ29pbmcgdG8KIAkJICogc2V0IHRoZSBEUExMcyBmb3IgZHVhbC1jaGFubmVsIG1vZGUgb3Igbm90LgogCQkgKi8KQEAgLTMwOTUsNyArMzIzMSw2IEBACiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpibzsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CiAJaW50IHBpcGUgPSBpbnRlbF9jcnRjLT5waXBlOwotCWludCBwbGFuZSA9IGludGVsX2NydGMtPnBsYW5lOwogCXVpbnQzMl90IGNvbnRyb2wgPSAocGlwZSA9PSAwKSA/IENVUkFDTlRSIDogQ1VSQkNOVFI7CiAJdWludDMyX3QgYmFzZSA9IChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRTsKIAl1aW50MzJfdCB0ZW1wID0gSTkxNV9SRUFEKGNvbnRyb2wpOwpAQCAtMzE4Miw5ICszMzE3LDYgQEAKIAkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoaW50ZWxfY3J0Yy0+Y3Vyc29yX2JvKTsKIAl9CiAKLQlpZiAoKElTX0k5NjVHKGRldikgfHwgcGxhbmUgPT0gMCkpCi0JCWludGVsX3VwZGF0ZV9mYmMoY3J0YywgJmNydGMtPm1vZGUpOwotCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IGFkZHI7CkBAIC0zMjQ0LDYgKzMzNzYsMTYgQEAKIAlpbnRlbF9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDg7CiB9CiAKK3ZvaWQgaW50ZWxfY3J0Y19mYl9nYW1tYV9nZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pCit7CisJc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOworCisJKnJlZCA9IGludGVsX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA4OworCSpncmVlbiA9IGludGVsX2NydGMtPmx1dF9nW3JlZ25vXSA8PCA4OworCSpibHVlID0gaW50ZWxfY3J0Yy0+bHV0X2JbcmVnbm9dIDw8IDg7Cit9CisKIHN0YXRpYyB2b2lkIGludGVsX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJIHUxNiAqYmx1ZSwgdWludDMyX3Qgc2l6ZSkKIHsKQEAgLTM4MzUsNiArMzk3Nyw3IEBACiAJLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAogCS5wcmVwYXJlID0gaW50ZWxfY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSBpbnRlbF9jcnRjX2NvbW1pdCwKKwkubG9hZF9sdXQgPSBpbnRlbF9jcnRjX2xvYWRfbHV0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBpbnRlbF9jcnRjX2Z1bmNzID0gewpAQCAtNDExNyw3ICs0MjYwLDkgQEAKIAkgKiBEaXNhYmxlIGNsb2NrIGdhdGluZyByZXBvcnRlZCB0byB3b3JrIGluY29ycmVjdGx5IGFjY29yZGluZyB0byB0aGUKIAkgKiBzcGVjcywgYnV0IGVuYWJsZSBhcyBtdWNoIGVsc2UgYXMgd2UgY2FuLgogCSAqLwotCWlmIChJU19HNFgoZGV2KSkgeworCWlmIChJU19JR0RORyhkZXYpKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKElTX0c0WChkZXYpKSB7CiAJCXVpbnQzMl90IGRzcGNsa19nYXRlOwogCQlJOTE1X1dSSVRFKFJFTkNMS19HQVRFX0QxLCAwKTsKIAkJSTkxNV9XUklURShSRU5DTEtfR0FURV9EMiwgVkZfVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfApAQCAtNDIwNSw3ICs0MzUwLDkgQEAKIAkJCWk4MzBfZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQ7CiAKIAkvKiBGb3IgRklGTyB3YXRlcm1hcmsgdXBkYXRlcyAqLwotCWlmIChJU19HNFgoZGV2KSkKKwlpZiAoSVNfSUdETkcoZGV2KSkKKwkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gTlVMTDsKKwllbHNlIGlmIChJU19HNFgoZGV2KSkKIAkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gZzR4X3VwZGF0ZV93bTsKIAllbHNlIGlmIChJU19JOTY1RyhkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBpOTY1X3VwZGF0ZV93bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IGY0ODU2YTUuLmQ4MzQ0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiB7CiAJc3RydWN0IGludGVsX2RwX3ByaXYgICAqZHBfcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAKLQlEUk1fRVJST1IoImkyY19pbml0ICVzXG4iLCBuYW1lKTsKKwlEUk1fREVCVUdfS01TKCJpMmNfaW5pdCAlc1xuIiwgbmFtZSk7CiAJZHBfcHJpdi0+YWxnby5ydW5uaW5nID0gZmFsc2U7CiAJZHBfcHJpdi0+YWxnby5hZGRyZXNzID0gMDsKIAlkcF9wcml2LT5hbGdvLmF1eF9jaCA9IGludGVsX2RwX2kyY19hdXhfY2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDhhYTRiN2YuLmVmNjFmZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0xNzUsNiArMTc1LDggQEAKIGV4dGVybiB2b2lkIGludGVsZmJfcmVzdG9yZSh2b2lkKTsKIGV4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2IHJlZCwgdTE2IGdyZWVuLAogCQkJCSAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIGludGVsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkJICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKTsKIAogZXh0ZXJuIGludCBpbnRlbF9mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZCAqbW9kZV9jbWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwppbmRleCA3YmE0YTIzLi4yYjBmZTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKQEAgLTYwLDEwICs2MCwxMiBAQAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAogCS5mYl9wYW5fZGlzcGxheSA9IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCiAJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9ibGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyBpbnRlbF9mYl9oZWxwZXJfZnVuY3MgPSB7CiAJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZmJfZ2FtbWFfc2V0LAorCS5nYW1tYV9nZXQgPSBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIApAQCAtMTEwLDYgKzExMiw3IEBACiBzdGF0aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGZiX3dpZHRoLAogCQkJICB1aW50MzJfdCBmYl9oZWlnaHQsIHVpbnQzMl90IHN1cmZhY2Vfd2lkdGgsCiAJCQkgIHVpbnQzMl90IHN1cmZhY2VfaGVpZ2h0LAorCQkJICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLCB1aW50MzJfdCBzdXJmYWNlX2JwcCwKIAkJCSAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CkBAIC0xMjIsMTIgKzEyNSwxNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKIAlpbnQgc2l6ZSwgcmV0LCBtbWlvX2JhciA9IElTX0k5WFgoZGV2KSA/IDAgOiAxOwogCisJLyogd2UgZG9uJ3QgZG8gcGFja2VkIDI0YnBwICovCisJaWYgKHN1cmZhY2VfYnBwID09IDI0KQorCQlzdXJmYWNlX2JwcCA9IDMyOworCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwogCi0JbW9kZV9jbWQuYnBwID0gMzI7CisJbW9kZV9jbWQuYnBwID0gc3VyZmFjZV9icHA7CiAJbW9kZV9jbWQucGl0Y2ggPSBBTElHTihtb2RlX2NtZC53aWR0aCAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KSwgNjQpOwotCW1vZGVfY21kLmRlcHRoID0gMjQ7CisJbW9kZV9jbWQuZGVwdGggPSBzdXJmYWNlX2RlcHRoOwogCiAJc2l6ZSA9IG1vZGVfY21kLnBpdGNoICogbW9kZV9jbWQuaGVpZ2h0OwogCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjA1LDcgKzIxMiw3IEBACiAKIC8vCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKLQlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCk7CisJZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2gsIGZiLT5kZXB0aCk7CiAJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihpbmZvLCBmYiwgZmJfd2lkdGgsIGZiX2hlaWdodCk7CiAKIAkvKiBGSVhNRTogd2UgcmVhbGx5IHNob3VsZG4ndCBleHBvc2UgbW1pbyBzcGFjZSBhdCBhbGwgKi8KQEAgLTI0Myw3ICsyNTAsNyBAQAogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoIlxuIik7Ci0JcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCBpbnRlbGZiX2NyZWF0ZSk7CisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoZGV2LCAzMiwgaW50ZWxmYl9jcmVhdGUpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGludGVsZmJfcHJvYmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IGZhMzA0ZTEuLjY2M2FiNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJY29ubmVjdG9yID0gJmludGVsX291dHB1dC0+YmFzZTsKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZpbnRlbF9oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKLQkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKTsKKwkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJmludGVsX2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKIAlpbnRlbF9vdXRwdXQtPnR5cGUgPSBJTlRFTF9PVVRQVVRfSERNSTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCA5OGFlM2Q3Li4wNTU5OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0zODAsNyArMzgwLDcgQEAKIAkJCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19zdGFydCArIHZzeW5jX3BvczsKIAkJLyoga2VlcCB0aGUgdnN5bmMgd2lkdGggY29uc3RhbnQgKi8KIAkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPQotCQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX3N0YXJ0ICsgdnN5bmNfd2lkdGg7CisJCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCArIHZzeW5jX3dpZHRoOwogCQlib3JkZXIgPSAxOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX1NDQUxFX0FTUEVDVDoKQEAgLTUyNiw2ICs1MjYsMTQgQEAKIAlsdmRzX3ByaXYtPnBmaXRfY29udHJvbCA9IHBmaXRfY29udHJvbDsKIAlsdmRzX3ByaXYtPnBmaXRfcGdtX3JhdGlvcyA9IHBmaXRfcGdtX3JhdGlvczsKIAkvKgorCSAqIFdoZW4gdGhlcmUgZXhpc3RzIHRoZSBib3JkZXIsIGl0IG1lYW5zIHRoYXQgdGhlIExWRFNfQk9SRFIKKwkgKiBzaG91bGQgYmUgZW5hYmxlZC4KKwkgKi8KKwlpZiAoYm9yZGVyKQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyB8PSBMVkRTX0JPUkRFUl9FTkFCTEU7CisJZWxzZQorCQlkZXZfcHJpdi0+bHZkc19ib3JkZXJfYml0cyAmPSB+KExWRFNfQk9SREVSX0VOQUJMRSk7CisJLyoKIAkgKiBYWFg6IEl0IHdvdWxkIGJlIG5pY2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQogCSAqIHBhbmVscyB0byByZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQogCSAqIHVzZXIncyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgpAQCAtNjU2LDYgKzY2NCwxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogTGlkIGV2ZW50cy4gTm90ZSB0aGUgdXNlIG9mICdtb2Rlc2V0X29uX2xpZCc6CisgKiAgLSB3ZSBzZXQgaXQgb24gbGlkIGNsb3NlLCBhbmQgcmVzZXQgaXQgb24gb3BlbgorICogIC0gd2UgdXNlIGl0IGFzIGEgIm9ubHkgb25jZSIgYml0IChpZSB3ZSBpZ25vcmUKKyAqICAgIGR1cGxpY2F0ZSBldmVudHMgd2hlcmUgaXQgd2FzIGFscmVhZHkgcHJvcGVybHkKKyAqICAgIHNldC9yZXNldCkKKyAqICAtIHRoZSBzdXNwZW5kL3Jlc3VtZSBwYXRocyB3aWxsIGFsc28gc2V0IGl0IHRvCisgKiAgICB6ZXJvLCBzaW5jZSB0aGV5IHJlc3RvcmUgdGhlIG1vZGUgKCJsaWQgb3BlbiIpLgorICovCiBzdGF0aWMgaW50IGludGVsX2xpZF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCiAJCQkgICAgdm9pZCAqdW51c2VkKQogewpAQCAtNjYzLDEzICs2ODAsMTkgQEAKIAkJY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgbGlkX25vdGlmaWVyKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsKIAotCWlmIChhY3BpX2xpZF9vcGVuKCkgJiYgIWRldl9wcml2LT5zdXNwZW5kZWQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Ci0JCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlpZiAoIWFjcGlfbGlkX29wZW4oKSkgeworCQlkZXZfcHJpdi0+bW9kZXNldF9vbl9saWQgPSAxOworCQlyZXR1cm4gTk9USUZZX09LOwogCX0KIAotCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldl9wcml2LT5kZXYpOworCWlmICghZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJZGV2X3ByaXYtPm1vZGVzZXRfb25fbGlkID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwogCiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCmluZGV4IGM2NGVhYjQuLjljYTkxNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwpAQCAtMTA4Miw3ICsxMDgyLDggQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxMCkKKwlpZiAodHZfbW9kZSAmJiBhYnModHZfbW9kZS0+cmVmcmVzaCAtIGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpICogMTAwMCkKKwkJCQk8IDEwMDApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2ViM2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACitta3JlZ3RhYmxlCisqX3JlZ19zYWZlLmgKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKaW5kZXggMDlhMjg5MjMuLmI1NzEzZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtNDksNyArNDksNyBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCmluZGV4IDVkNDAyMDguLmMxMWRkZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKQEAgLTIzMTQsNyArMjMxNCw3IEBACiAJVUNIQVIgdWNTU19TdGVwOwogCVVDSEFSIHVjU1NfRGVsYXk7CiAJVUNIQVIgdWNTU19JZDsKLQlVQ0hBUiB1Y1JlY29tbWFuZGVkUmVmX0RpdjsKKwlVQ0hBUiB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKIAlVQ0hBUiB1Y1NTX1JhbmdlOwkvKiBpdCB3YXMgcmVzZXJ2ZWQgZm9yIFYxMSAqLwogfSBBVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IDZhMDE1OTIuLmMxNTI4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC0zMSwxMCArMzEsNiBAQAogI2luY2x1ZGUgImF0b20uaCIKICNpbmNsdWRlICJhdG9tLWJpdHMuaCIKIAotLyogZXZpbCBidXQgaW5jbHVkaW5nIGF0b21iaW9zLmggaXMgbXVjaCB3b3JzZSAqLwotYm9vbCByYWRlb25fYXRvbV9nZXRfdHZfdGltaW5ncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGluZGV4LAotCQkJCVNFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gKmNydGNfdGltaW5nLAotCQkJCWludDMyX3QgKnBpeGVsX2Nsb2NrKTsKIHN0YXRpYyB2b2lkIGF0b21iaW9zX292ZXJzY2FuX3NldHVwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQpAQCAtMjQ4LDE4ICsyNDQsMTggQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCiAJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMSk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDEpOwogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDApOwogCQlicmVhazsKIAljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKIAljYXNlIERSTV9NT0RFX0RQTVNfU1VTUEVORDoKIAljYXNlIERSTV9NT0RFX0RQTVNfT0ZGOgogCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIDEpOwotCQlhdG9tYmlvc19lbmFibGVfY3J0YyhjcnRjLCAwKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKIAkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAwKTsKKwkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjcwLDU5ICsyNjYsMTQ3IEBACiAKIHN0YXRpYyB2b2lkCiBhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgICAgU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTICogY3J0Y19wYXJhbSkKKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBjb252X3BhcmFtOworCVNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUyBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVXNpbmdEVERUaW1pbmcpOworCXUxNiBtaXNjID0gMDsKIAotCWNvbnZfcGFyYW0udXNIX1NpemUgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU2l6ZSk7Ci0JY29udl9wYXJhbS51c0hfQmxhbmtpbmdfVGltZSA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9CbGFua2luZ19UaW1lKTsKLQljb252X3BhcmFtLnVzVl9TaXplID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1NpemUpOwotCWNvbnZfcGFyYW0udXNWX0JsYW5raW5nX1RpbWUgPQotCSAgICBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfQmxhbmtpbmdfVGltZSk7Ci0JY29udl9wYXJhbS51c0hfU3luY09mZnNldCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9TeW5jT2Zmc2V0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9TeW5jT2Zmc2V0ID0gY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+dXNWX1N5bmNPZmZzZXQpOwotCWNvbnZfcGFyYW0udXNWX1N5bmNXaWR0aCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9TeW5jV2lkdGgpOwotCWNvbnZfcGFyYW0uc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0KLQkgICAgY3B1X3RvX2xlMTYoY3J0Y19wYXJhbS0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKLQljb252X3BhcmFtLnVjQ1JUQyA9IGNydGNfcGFyYW0tPnVjQ1JUQzsKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy51c0hfU2l6ZSA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaGRpc3BsYXkpOworCWFyZ3MudXNIX0JsYW5raW5nX1RpbWUgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hibGFua19lbmQgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KTsKKwlhcmdzLnVzVl9TaXplID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfQmxhbmtpbmdfVGltZSA9CisJICAgIGNwdV90b19sZTE2KG1vZGUtPmNydGNfdmJsYW5rX2VuZCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNIX1N5bmNPZmZzZXQgPQorCQljcHVfdG9fbGUxNihtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9TeW5jT2Zmc2V0ID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1vZGUtPmNydGNfdmRpc3BsYXkpOworCWFyZ3MudXNWX1N5bmNXaWR0aCA9CisJCWNwdV90b19sZTE2KG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJLyphcmdzLnVjSF9Cb3JkZXIgPSBtb2RlLT5oYm9yZGVyOyovCisJLyphcmdzLnVjVl9Cb3JkZXIgPSBtb2RlLT52Ym9yZGVyOyovCisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05WU1lOQykKKwkJbWlzYyB8PSBBVE9NX1ZTWU5DX1BPTEFSSVRZOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTkhTWU5DKQorCQltaXNjIHw9IEFUT01fSFNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19DU1lOQykKKwkJbWlzYyB8PSBBVE9NX0NPTVBPU0lURVNZTkM7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpCisJCW1pc2MgfD0gQVRPTV9JTlRFUkxBQ0U7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQltaXNjIHw9IEFUT01fRE9VQkxFX0NMT0NLX01PREU7CisKKwlhcmdzLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGNwdV90b19sZTE2KG1pc2MpOworCWFyZ3MudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAKIAlwcmludGsoImV4ZWN1dGluZyBzZXQgY3J0YyBkdGQgdGltaW5nXG4iKTsKLQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZjb252X3BhcmFtKTsKKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAotdm9pZCBhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoc3RydWN0IGRybV9jcnRjICpjcnRjLAotCQkJICAgICAgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqCi0JCQkgICAgICBjcnRjX3BhcmFtKQorc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfdGltaW5nKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNvbnZfcGFyYW07CisJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldENSVENfVGltaW5nKTsKKwl1MTYgbWlzYyA9IDA7CiAKLQljb252X3BhcmFtLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c0hfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzSF9EaXNwKTsKLQljb252X3BhcmFtLnVzSF9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzSF9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c0hfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9Ub3RhbCk7Ci0JY29udl9wYXJhbS51c1ZfRGlzcCA9IGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnVzVl9EaXNwKTsKLQljb252X3BhcmFtLnVzVl9TeW5jU3RhcnQgPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1N0YXJ0KTsKLQljb252X3BhcmFtLnVzVl9TeW5jV2lkdGggPSBjcHVfdG9fbGUxNihjcnRjX3BhcmFtLT51c1ZfU3luY1dpZHRoKTsKLQljb252X3BhcmFtLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9Ci0JICAgIGNwdV90b19sZTE2KGNydGNfcGFyYW0tPnN1c01vZGVNaXNjSW5mby51c0FjY2Vzcyk7Ci0JY29udl9wYXJhbS51Y0NSVEMgPSBjcnRjX3BhcmFtLT51Y0NSVEM7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuUmlnaHQgPSBjcnRjX3BhcmFtLT51Y092ZXJzY2FuUmlnaHQ7Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuTGVmdCA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5MZWZ0OwotCWNvbnZfcGFyYW0udWNPdmVyc2NhbkJvdHRvbSA9IGNydGNfcGFyYW0tPnVjT3ZlcnNjYW5Cb3R0b207Ci0JY29udl9wYXJhbS51Y092ZXJzY2FuVG9wID0gY3J0Y19wYXJhbS0+dWNPdmVyc2NhblRvcDsKLQljb252X3BhcmFtLnVjUmVzZXJ2ZWQgPSBjcnRjX3BhcmFtLT51Y1Jlc2VydmVkOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLnVzSF9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfaHRvdGFsKTsKKwlhcmdzLnVzSF9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oZGlzcGxheSk7CisJYXJncy51c0hfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19zdGFydCk7CisJYXJncy51c0hfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0KTsKKwlhcmdzLnVzVl9Ub3RhbCA9IGNwdV90b19sZTE2KG1vZGUtPmNydGNfdnRvdGFsKTsKKwlhcmdzLnVzVl9EaXNwID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192ZGlzcGxheSk7CisJYXJncy51c1ZfU3luY1N0YXJ0ID0gY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19zdGFydCk7CisJYXJncy51c1ZfU3luY1dpZHRoID0KKwkJY3B1X3RvX2xlMTYobW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKKworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQorCQltaXNjIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7CisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCisJCW1pc2MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQorCQltaXNjIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJbWlzYyB8PSBBVE9NX0lOVEVSTEFDRTsKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCW1pc2MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKKworCWFyZ3Muc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzID0gY3B1X3RvX2xlMTYobWlzYyk7CisJYXJncy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAogCXByaW50aygiZXhlY3V0aW5nIHNldCBjcnRjIHRpbWluZ1xuIik7Ci0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmY29udl9wYXJhbSk7CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Cit9CisKK3N0YXRpYyB2b2lkIGF0b21iaW9zX3NldF9zcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBlbmFibGUpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CisJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSBOVUxMOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMKTsKKwlFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiBhcmdzOworCUVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgbGVnYWN5X2FyZ3M7CisJdWludDE2X3QgcGVyY2VudGFnZSA9IDA7CisJdWludDhfdCB0eXBlID0gMCwgc3RlcCA9IDAsIGRlbGF5ID0gMCwgcmFuZ2UgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgeworCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJCS8qIG9ubHkgZW5hYmxlIHNwcmVhZCBzcGVjdHJ1bSBvbiBMVkRTICovCisJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CisJCQkJZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OworCQkJCWlmIChkaWcgJiYgZGlnLT5zcykgeworCQkJCQlwZXJjZW50YWdlID0gZGlnLT5zcy0+cGVyY2VudGFnZTsKKwkJCQkJdHlwZSA9IGRpZy0+c3MtPnR5cGU7CisJCQkJCXN0ZXAgPSBkaWctPnNzLT5zdGVwOworCQkJCQlkZWxheSA9IGRpZy0+c3MtPmRlbGF5OworCQkJCQlyYW5nZSA9IGRpZy0+c3MtPnJhbmdlOworCQkJCX0gZWxzZSBpZiAoZW5hYmxlKQorCQkJCQlyZXR1cm47CisJCQl9IGVsc2UgaWYgKGVuYWJsZSkKKwkJCQlyZXR1cm47CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmFkZW9uX2VuY29kZXIpCisJCXJldHVybjsKKworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwkJYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOworCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcCA9IHN0ZXA7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bURlbGF5ID0gZGVsYXk7CisJCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVJhbmdlID0gcmFuZ2U7CisJCWFyZ3MudWNQcGxsID0gcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJYXJncy51Y0VuYWJsZSA9IGVuYWJsZTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZsZWdhY3lfYXJncywgMCwgc2l6ZW9mKGxlZ2FjeV9hcmdzKSk7CisJCWxlZ2FjeV9hcmdzLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7CisJCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKKwkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOworCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKKwkJbGVnYWN5X2FyZ3MudWNFbmFibGUgPSBlbmFibGU7CisJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmxlZ2FjeV9hcmdzKTsKKwl9CiB9CiAKIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCkBAIC0zMzMsMTIgKzQxNywxMyBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IE5VTEw7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IE5VTEw7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNldFBpeGVsQ2xvY2spOworCWludCBpbmRleDsKIAlTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKnNwYzFfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgKnNwYzJfcHRyOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjMgKnNwYzNfcHRyOwotCXVpbnQzMl90IHNjbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IHBsbF9jbG9jayA9IG1vZGUtPmNsb2NrOworCXVpbnQzMl90IGFkanVzdGVkX2Nsb2NrOwogCXVpbnQzMl90IHJlZl9kaXYgPSAwLCBmYl9kaXYgPSAwLCBmcmFjX2ZiX2RpdiA9IDAsIHBvc3RfZGl2ID0gMDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsOwogCWludCBwbGxfZmxhZ3MgPSAwOwpAQCAtMzQ2LDggKzQzMSw2IEBACiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCiAJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJdWludDMyX3Qgc3NfY250bDsKLQogCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkKQEAgLTM1OCwxNSArNDQxLDYgQEAKIAkJCXBsbF9mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9ISUdIX0ZCX0RJVjsKIAkJZWxzZQogCQkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCi0JCS8qIGRpc2FibGUgc3ByZWFkIHNwZWN0cnVtIGNsb2NraW5nIGZvciBub3cgLS0gdGhhbmtzIEhlZHkgTGFtYXJyICovCi0JCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7Ci0JCQlzc19jbnRsID0gUlJFRzMyKEFWSVZPX1AxUExMX0lOVF9TU19DTlRMKTsKLQkJCVdSRUczMihBVklWT19QMVBMTF9JTlRfU1NfQ05UTCwgc3NfY250bCAmIH4xKTsKLQkJfSBlbHNlIHsKLQkJCXNzX2NudGwgPSBSUkVHMzIoQVZJVk9fUDJQTExfSU5UX1NTX0NOVEwpOwotCQkJV1JFRzMyKEFWSVZPX1AyUExMX0lOVF9TU19DTlRMLCBzc19jbnRsICYgfjEpOwotCQl9CiAJfSBlbHNlIHsKIAkJcGxsX2ZsYWdzIHw9IFJBREVPTl9QTExfTEVHQUNZOwogCkBAIC0zOTMsMTQgKzQ2Nyw0MyBAQAogCQl9CiAJfQogCisJLyogRENFMysgaGFzIGFuIEFkanVzdERpc3BsYXlQbGwgdGhhdCB3aWxsIGFkanVzdCB0aGUgcGl4ZWwgY2xvY2sKKwkgKiBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgZW5jb2Rlci90cmFuc21pdHRlciB0byB3b3JrIGFyb3VuZAorCSAqIHNwZWNpYWwgaHcgcmVxdWlyZW1lbnRzLgorCSAqLworCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKKwkJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04gYWRqdXN0X3BsbF9hcmdzOworCisJCWlmICghZW5jb2RlcikKKwkJCXJldHVybjsKKworCQltZW1zZXQoJmFkanVzdF9wbGxfYXJncywgMCwgc2l6ZW9mKGFkanVzdF9wbGxfYXJncykpOworCQlhZGp1c3RfcGxsX2FyZ3MudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CisJCWFkanVzdF9wbGxfYXJncy51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJYWRqdXN0X3BsbF9hcmdzLnVjRW5jb2RlTW9kZSA9IGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2Rlcik7CisKKwkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBBZGp1c3REaXNwbGF5UGxsKTsKKwkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsCisJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhZGp1c3RfcGxsX2FyZ3MpOworCQlhZGp1c3RlZF9jbG9jayA9IGxlMTZfdG9fY3B1KGFkanVzdF9wbGxfYXJncy51c1BpeGVsQ2xvY2spICogMTA7CisJfSBlbHNlIHsKKwkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJgorCQkgICAgKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkID09IEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EVk8xKSkKKwkJCWFkanVzdGVkX2Nsb2NrID0gbW9kZS0+Y2xvY2sgKiAyOworCQllbHNlCisJCQlhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrOworCX0KKwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDFwbGw7CiAJZWxzZQogCQlwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywgJnNjbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCiAJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2LCBwbGxfZmxhZ3MpOwogCisJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRQaXhlbENsb2NrKTsKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LAogCQkJICAgICAgJmNyZXYpOwogCkBAIC00MDksNyArNTEyLDcgQEAKIAkJc3dpdGNoIChjcmV2KSB7CiAJCWNhc2UgMToKIAkJCXNwYzFfcHRyID0gKFBJWEVMX0NMT0NLX1BBUkFNRVRFUlMgKikgJiBhcmdzLnNQQ0xLSW5wdXQ7Ci0JCQlzcGMxX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoc2Nsb2NrKTsKKwkJCXNwYzFfcHRyLT51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCXNwYzFfcHRyLT51c1JlZkRpdiA9IGNwdV90b19sZTE2KHJlZl9kaXYpOwogCQkJc3BjMV9wdHItPnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwogCQkJc3BjMV9wdHItPnVjRnJhY0ZiRGl2ID0gZnJhY19mYl9kaXY7CkBAIC00MjIsNyArNTI1LDcgQEAKIAkJY2FzZSAyOgogCQkJc3BjMl9wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjMl9wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMyX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMyX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzJfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzJfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNDM3LDcgKzU0MCw3IEBACiAJCQkJcmV0dXJuOwogCQkJc3BjM19wdHIgPQogCQkJICAgIChQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzICopICYgYXJncy5zUENMS0lucHV0OwotCQkJc3BjM19wdHItPnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHNjbG9jayk7CisJCQlzcGMzX3B0ci0+dXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYobW9kZS0+Y2xvY2sgLyAxMCk7CiAJCQlzcGMzX3B0ci0+dXNSZWZEaXYgPSBjcHVfdG9fbGUxNihyZWZfZGl2KTsKIAkJCXNwYzNfcHRyLT51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCXNwYzNfcHRyLT51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwpAQCAtNTI3LDYgKzYzMCwxNiBAQAogCQlXUkVHMzIoQVZJVk9fRDFWR0FfQ09OVFJPTCwgMCk7CiAJZWxzZQogCQlXUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCwgMCk7CisKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkKSB7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQlXUkVHMzIoUjcwMF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJfSBlbHNlIHsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdILCAwKTsKKwkJCVdSRUczMihSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CisJfQogCVdSRUczMihBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uKTsKIAlXUkVHMzIoQVZJVk9fRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKwpAQCAtNTYzLDYgKzY3NiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTc0LDEzNCArNjkxLDI0IEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIGNydGNfdGltaW5nOwotCWludCBuZWVkX3R2X3RpbWluZ3MgPSAwOwotCWJvb2wgcmV0OwogCiAJLyogVE9ETyBjb2xvciB0aWxpbmcgKi8KLQltZW1zZXQoJmNydGNfdGltaW5nLCAwLCBzaXplb2YoY3J0Y190aW1pbmcpKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKSB7Ci0JCS8qIGZpbmQgdHYgc3RkICovCi0JCWlmIChlbmNvZGVyLT5jcnRjID09IGNydGMpIHsKLQkJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKLQotCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkgewotCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RhYyAqdHZfZGFjID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwotCQkJCWlmICh0dl9kYWMpIHsKLQkJCQkJaWYgKHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQ19KIHx8Ci0JCQkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAxOwotCQkJCQllbHNlCi0JCQkJCQluZWVkX3R2X3RpbWluZ3MgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljcnRjX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQlpZiAobmVlZF90dl90aW1pbmdzKSB7Ci0JCXJldCA9IHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHJkZXYsIG5lZWRfdHZfdGltaW5ncyAtIDEsCi0JCQkJCQkgJmNydGNfdGltaW5nLCAmYWRqdXN0ZWRfbW9kZS0+Y2xvY2spOwotCQlpZiAocmV0ID09IGZhbHNlKQotCQkJbmVlZF90dl90aW1pbmdzID0gMDsKLQl9Ci0KLQlpZiAoIW5lZWRfdHZfdGltaW5ncykgewotCQljcnRjX3RpbWluZy51c0hfVG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2h0b3RhbDsKLQkJY3J0Y190aW1pbmcudXNIX0Rpc3AgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5OwotCQljcnRjX3RpbWluZy51c0hfU3luY1N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJY3J0Y190aW1pbmcudXNIX1N5bmNXaWR0aCA9Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtIGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQ7Ci0KLQkJY3J0Y190aW1pbmcudXNWX1RvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWw7Ci0JCWNydGNfdGltaW5nLnVzVl9EaXNwID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJY3J0Y190aW1pbmcudXNWX1N5bmNTdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQ7Ci0JCWNydGNfdGltaW5nLnVzVl9TeW5jV2lkdGggPQotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0OwotCi0JCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fVlNZTkNfUE9MQVJJVFk7Ci0KLQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9IU1lOQ19QT0xBUklUWTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJY3J0Y190aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9IEFUT01fQ09NUE9TSVRFU1lOQzsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCWNydGNfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PSBBVE9NX0lOVEVSTEFDRTsKLQotCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQljcnRjX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0gQVRPTV9ET1VCTEVfQ0xPQ0tfTU9ERTsKLQl9Ci0KKwlhdG9tYmlvc19zZXRfc3MoY3J0YywgMCk7CiAJYXRvbWJpb3NfY3J0Y19zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCAmY3J0Y190aW1pbmcpOworCWF0b21iaW9zX3NldF9zcyhjcnRjLCAxKTsKKwlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWVsc2UgewotCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkgewotCQkJU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIGNydGNfZHRkX3RpbWluZzsKLQkJCW1lbXNldCgmY3J0Y19kdGRfdGltaW5nLCAwLCBzaXplb2YoY3J0Y19kdGRfdGltaW5nKSk7Ci0KLQkJCS8qIHNldHVwIEZQIHNoYWRvdyByZWdzIG9uIFI0eHggKi8KLQkJCWNydGNfZHRkX3RpbWluZy51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU2l6ZSA9IGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX1NpemUgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5OwotCQkJY3J0Y19kdGRfdGltaW5nLnVzSF9CbGFua2luZ19UaW1lID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hibGFua19lbmQgLQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7Ci0JCQljcnRjX2R0ZF90aW1pbmcudXNWX0JsYW5raW5nX1RpbWUgPQotCQkJICAgIGFkanVzdGVkX21vZGUtPmNydGNfdmJsYW5rX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY09mZnNldCA9Ci0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheTsKLQkJCWNydGNfZHRkX3RpbWluZy51c0hfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQkJCWNydGNfZHRkX3RpbWluZy51c1ZfU3luY1dpZHRoID0KLQkJCSAgICBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCAtCi0JCQkgICAgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQkJCS8qIGNydGNfZHRkX3RpbWluZy51Y0hfQm9yZGVyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYm9yZGVyOyAqLwotCQkJLyogY3J0Y19kdGRfdGltaW5nLnVjVl9Cb3JkZXIgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3Zib3JkZXI7ICovCi0KLQkJCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9WU1lOQ19QT0xBUklUWTsKLQotCQkJaWYgKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0hTWU5DX1BPTEFSSVRZOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0NTWU5DKQotCQkJCWNydGNfZHRkX3RpbWluZy5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MgfD0KLQkJCQkgICAgQVRPTV9DT01QT1NJVEVTWU5DOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJCQljcnRjX2R0ZF90aW1pbmcuc3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzIHw9Ci0JCQkJICAgIEFUT01fSU5URVJMQUNFOwotCi0JCQlpZiAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCi0JCQkJY3J0Y19kdGRfdGltaW5nLnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyB8PQotCQkJCSAgICBBVE9NX0RPVUJMRV9DTE9DS19NT0RFOwotCi0JCQlhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKGNydGMsICZjcnRjX2R0ZF90aW1pbmcpOwotCQl9CisJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKQorCQkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAkJcmFkZW9uX2xlZ2FjeV9hdG9tX3NldF9zdXJmYWNlKGNydGMpOwogCX0KIAlhdG9tYmlvc19vdmVyc2Nhbl9zZXR1cChjcnRjLCBtb2RlLCBhZGp1c3RlZF9tb2RlKTsKIAlhdG9tYmlvc19zY2FsZXJfc2V0dXAoY3J0Yyk7Ci0JcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczMyw2ICs3NDAsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gYXRvbWJpb3NfY3J0Y19zZXRfYmFzZSwKIAkucHJlcGFyZSA9IGF0b21iaW9zX2NydGNfcHJlcGFyZSwKIAkuY29tbWl0ID0gYXRvbWJpb3NfY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiB2b2lkIHJhZGVvbl9hdG9tYmlvc19pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCmluZGV4IGUyYjkyYzQuLmQ0ZTZlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaApAQCAtNTcsMTMgKzU3LDQgQEAKICNkZWZpbmUJVkdBX1JFTkRFUl9DT05UUk9MCQkJCTB4MDMwMAogI2RlZmluZQkJVkdBX1ZTVEFUVVNfQ05UTF9NQVNLCQkJCTB4MDAwMzAwMDAKIAotLyogQVZJVk8gZGlzYWJsZSBWR0EgcmVuZGVyaW5nICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX2F2aXZvX3ZnYV9yZW5kZXJfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1MzIgdmdhX3JlbmRlcjsKLQl2Z2FfcmVuZGVyID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7Ci0JdmdhX3JlbmRlciAmPSB+VkdBX1ZTVEFUVVNfQ05UTF9NQVNLOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXIpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKaW5kZXggZmIyMTFlNS4uMGQ3OTU3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ta3JlZ3RhYmxlLmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogCWNoYXIgKmdwdV9wcmVmaXg7CiB9OwogCi1zdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXRfbmV3KHVuc2lnbmVkIG8pCitzdGF0aWMgc3RydWN0IG9mZnNldCAqb2Zmc2V0X25ldyh1bnNpZ25lZCBvKQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIApAQCAtNTczLDEyICs1NzMsMTIgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIHRhYmxlX29mZnNldF9hZGQoc3RydWN0IHRhYmxlICp0LCBzdHJ1Y3Qgb2Zmc2V0ICpvZmZzZXQpCitzdGF0aWMgdm9pZCB0YWJsZV9vZmZzZXRfYWRkKHN0cnVjdCB0YWJsZSAqdCwgc3RydWN0IG9mZnNldCAqb2Zmc2V0KQogewogCWxpc3RfYWRkX3RhaWwoJm9mZnNldC0+bGlzdCwgJnQtPm9mZnNldHMpOwogfQogCi12b2lkIHRhYmxlX2luaXQoc3RydWN0IHRhYmxlICp0KQorc3RhdGljIHZvaWQgdGFibGVfaW5pdChzdHJ1Y3QgdGFibGUgKnQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPm9mZnNldHMpOwogCXQtPm9mZnNldF9tYXggPSAwOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJdC0+dGFibGUgPSBOVUxMOwogfQogCi12b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyB2b2lkIHRhYmxlX3ByaW50KHN0cnVjdCB0YWJsZSAqdCkKIHsKIAl1bnNpZ25lZCBubGxvb3AsIGksIGosIG4sIGMsIGlkOwogCkBAIC02MTEsNyArNjExLDcgQEAKIAlwcmludGYoIn07XG4iKTsKIH0KIAotaW50IHRhYmxlX2J1aWxkKHN0cnVjdCB0YWJsZSAqdCkKK3N0YXRpYyBpbnQgdGFibGVfYnVpbGQoc3RydWN0IHRhYmxlICp0KQogewogCXN0cnVjdCBvZmZzZXQgKm9mZnNldDsKIAl1bnNpZ25lZCBpLCBtOwpAQCAtNjMxLDcgKzYzMSw3IEBACiB9CiAKIHN0YXRpYyBjaGFyIGdwdV9uYW1lWzEwXTsKLWludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorc3RhdGljIGludCBwYXJzZXJfYXV0aChzdHJ1Y3QgdGFibGUgKnQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCUZJTEUgKmZpbGU7CiAJcmVnZXhfdCBtYXNrX3JleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKaW5kZXggYmU1MWM1Zi4uYzllOTNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCiAjaW5jbHVkZSAicjEwMGQuaCIKKyNpbmNsdWRlICJyczEwMGQuaCIKKyNpbmNsdWRlICJydjIwMGQuaCIKKyNpbmNsdWRlICJydjI1MGQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC02MCwxOCArNjMsNyBAQAogCiAvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgogICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KICAqLwotaW50IHIyMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2dwdV93YWl0X2Zvcl92c3luYzIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZGVidWdmc19tY19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBQQ0kgR0FSVApAQCAtMTUyLDEzNiArMTQ0LDYgQEAKIAlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogfQogCi0KLS8qCi0gKiBNQwotICovCi12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IG92MF9zY2FsZV9jbnRsLCBjcnRjX2V4dF9jbnRsLCBjcnRjX2dlbl9jbnRsLCBjcnRjMl9nZW5fY250bDsKLQotCS8qIEZJWE1FOiBpcyB0aGlzIGZ1bmN0aW9uIGNvcnJlY3QgZm9yIHJzMTAwLHJzMjAwLHJzMzAwID8gKi8KLQlpZiAocjEwMF9ndWlfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBHVUkgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCi0JLyogc3RvcCBkaXNwbGF5IGFuZCBtZW1vcnkgYWNjZXNzICovCi0Jb3YwX3NjYWxlX2NudGwgPSBSUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX09WMF9TQ0FMRV9DTlRMLCBvdjBfc2NhbGVfY250bCAmIH5SQURFT05fU0NBTEVSX0VOQUJMRSk7Ci0JY3J0Y19leHRfY250bCA9IFJSRUczMihSQURFT05fQ1JUQ19FWFRfQ05UTCk7Ci0JV1JFRzMyKFJBREVPTl9DUlRDX0VYVF9DTlRMLCBjcnRjX2V4dF9jbnRsIHwgUkFERU9OX0NSVENfRElTUExBWV9ESVMpOwotCWNydGNfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwpOwotCi0JcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMocmRldik7Ci0KLQlXUkVHMzIoUkFERU9OX0NSVENfR0VOX0NOVEwsCi0JICAgICAgIChjcnRjX2dlbl9jbnRsICYgfihSQURFT05fQ1JUQ19DVVJfRU4gfCBSQURFT05fQ1JUQ19JQ09OX0VOKSkgfAotCSAgICAgICBSQURFT05fQ1JUQ19ESVNQX1JFUV9FTl9CIHwgUkFERU9OX0NSVENfRVhUX0RJU1BfRU4pOwotCi0JaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpKSB7Ci0JCWNydGMyX2dlbl9jbnRsID0gUlJFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCk7Ci0KLQkJcjEwMF9ncHVfd2FpdF9mb3JfdnN5bmMyKHJkZXYpOwotCQlXUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMLAotCQkgICAgICAgKGNydGMyX2dlbl9jbnRsICYKLQkJICAgICAgICB+KFJBREVPTl9DUlRDMl9DVVJfRU4gfCBSQURFT05fQ1JUQzJfSUNPTl9FTikpIHwKLQkJICAgICAgIFJBREVPTl9DUlRDMl9ESVNQX1JFUV9FTl9CKTsKLQl9Ci0KLQl1ZGVsYXkoNTAwKTsKLX0KLQotdm9pZCByMTAwX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCXIgPSByMTAwX2RlYnVnZnNfbWNfaW5mb19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUjEwMCBNQyAhXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCS8qIE5vdmVsbCBidWcgMjA0ODgyIGZvciBSTjUwL002L003IHdpdGggOC8xNi8zMk1CIFZSQU0sCi0JICogaWYgdGhlIGFwZXJ0dXJlIGlzIDY0TUIgYnV0IHdlIGhhdmUgMzJNQiBWUkFNCi0JICogd2UgcmVwb3J0IG9ubHkgMzJNQiBWUkFNIGJ1dCB3ZSBoYXZlIHRvIHNldCBNQ19GQl9MT0NBVElPTgotCSAqIHRvIDY0TUIsIG90aGVyd2lzZSB0aGUgZ3B1IGFjY2lkZW50aWFsbHkgZGllcyAqLwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0KLQkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKLQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFJBREVPTl9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7Ci0JCVdSRUczMihSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JfSBlbHNlIHsKLQkJV1JFRzMyKFJBREVPTl9NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzIoUkFERU9OX0FHUF9CQVNFLCAwKTsKLQl9Ci0KLQl0bXAgPSBSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKSAmIFJBREVPTl9IRFBfQVBFUl9DTlRMOwotCXRtcCB8PSAoNyA8PCAyOCk7Ci0JV1JFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgdG1wIHwgUkFERU9OX0hEUF9TT0ZUX1JFU0VUIHwgUkFERU9OX0hEUF9SRUFEX0JVRkZFUl9JTlZBTElEQVRFKTsKLQkodm9pZClSUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMKTsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXApOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotfQotCi1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXIxMDBfZ3B1X2luaXQocmRldik7Ci0JLyogRGlzYWJsZSBnYXJ0IHdoaWNoIGFsc28gZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIxMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyMTAwX21jX3NldHVwKHJkZXYpOwotCXJldHVybiAwOwotfQotCi12b2lkIHIxMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogSW50ZXJydXB0cwotICovCiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CkBAIC0zMjQsNyArMTg2LDcgQEAKIAogaW50IHIxMDBfaXJxX3Byb2Nlc3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdWludDMyX3Qgc3RhdHVzOworCXVpbnQzMl90IHN0YXR1cywgbXNpX3JlYXJtOwogCiAJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCWlmICghc3RhdHVzKSB7CkBAIC0zNDcsNiArMjA5LDIxIEBACiAJCX0KIAkJc3RhdHVzID0gcjEwMF9pcnFfYWNrKHJkZXYpOwogCX0KKwlpZiAocmRldi0+bXNpX2VuYWJsZWQpIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1JTNDAwOgorCQljYXNlIENISVBfUlM0ODA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSAmIH5SUzQwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9BSUNfQ05UTCwgbXNpX3JlYXJtIHwgUlM0MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1OCwxMCArMjM1LDYgQEAKIAkJcmV0dXJuIFJSRUczMihSQURFT05fQ1JUQzJfQ1JOVF9GUkFNRSk7CiB9CiAKLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjEwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMzc3LDE2ICsyNTAsMTIgQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fU1dfSU5UX0ZJUkUpOwogfQogCi0KLS8qCi0gKiBXcml0ZWJhY2sKLSAqLwogaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKKwkJciA9IHJhZGVvbl9vYmplY3RfY3JlYXRlKHJkZXYsIE5VTEwsIFJBREVPTl9HUFVfUEFHRV9TSVpFLAogCQkJCQkgdHJ1ZSwKIAkJCQkJIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKIAkJCQkJIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKQEAgLTUwNCwxMCArMzczLDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotCi0vKgotICogQ1AKLSAqLwogc3RhdGljIGludCByMTAwX2NwX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTYxMiw2ICs0NzcsNyBAQAogCX0KIAlyZXR1cm4gZXJyOwogfQorCiBzdGF0aWMgdm9pZCByMTAwX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKQEAgLTcxMiwxOSArNTc4LDE5IEBACiAJaW5kaXJlY3QxX3N0YXJ0ID0gMTY7CiAJLyogY3Agc2V0dXAgKi8KIAlXUkVHMzIoMHg3MTgsIHByZV93cml0ZV90aW1lciB8IChwcmVfd3JpdGVfbGltaXQgPDwgMjgpKTsKLQlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JICAgICAgIFJBREVPTl9CVUZfU1dBUF8zMkJJVCB8Ci0jZW5kaWYKLQkgICAgICAgUkVHX1NFVChSQURFT05fUkJfQlVGU1osIHJiX2J1ZnN6KSB8CisJdG1wID0gKFJFR19TRVQoUkFERU9OX1JCX0JVRlNaLCByYl9idWZzeikgfAogCSAgICAgICBSRUdfU0VUKFJBREVPTl9SQl9CTEtTWiwgcmJfYmxrc3opIHwKIAkgICAgICAgUkVHX1NFVChSQURFT05fTUFYX0ZFVENILCBtYXhfZmV0Y2gpIHwKIAkgICAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJdG1wIHw9IFJBREVPTl9CVUZfU1dBUF8zMkJJVDsKKyNlbmRpZgorCVdSRUczMihSQURFT05fQ1BfUkJfQ05UTCwgdG1wKTsKKwogCS8qIFNldCByaW5nIGFkZHJlc3MgKi8KIAlEUk1fSU5GTygicmFkZW9uOiByaW5nIGF0IDB4JTAxNmxYXG4iLCAodW5zaWduZWQgbG9uZylyZGV2LT5jcC5ncHVfYWRkcik7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9CQVNFLCByZGV2LT5jcC5ncHVfYWRkcik7CiAJLyogRm9yY2UgcmVhZCAmIHdyaXRlIHB0ciB0byAwICovCi0JdG1wID0gUlJFRzMyKFJBREVPTl9DUF9SQl9DTlRMKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX0NOVEwsIHRtcCB8IFJBREVPTl9SQl9SUFRSX1dSX0VOQSk7CiAJV1JFRzMyKFJBREVPTl9DUF9SQl9SUFRSX1dSLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NQX1JCX1dQVFIsIDApOwpAQCAtODYzLDEzICs3MjksMTEgQEAKIHZvaWQgcjEwMF9jc19kdW1wX3BhY2tldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGlkeDsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeDsKIAlmb3IgKGkgPSAwOyBpIDw9IChwa3QtPmNvdW50ICsgMSk7IGkrKywgaWR4KyspIHsKIAkJRFJNX0lORk8oImliWyVkXT0weCUwOFhcbiIsIGlkeCwgaWJbaWR4XSk7CkBAIC04OTYsNyArNzYwLDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTM5LDcgKzgwMyw2IEBACiAgKi8KIGludCByMTAwX2NzX3BhY2tldF9wYXJzZV92bGluZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGM7CkBAIC05NDcsOCArODEwLDkgQEAKIAlpbnQgY3J0Y19pZDsKIAlpbnQgcjsKIAl1aW50MzJfdCBoZWFkZXIsIGhfaWR4LCByZWc7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOwogCi0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CisJaWIgPSBwLT5pYi0+cHRyOwogCiAJLyogcGFyc2UgdGhlIHdhaXQgdW50aWwgKi8KIAlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJndhaXRyZWxvYywgcC0+aWR4KTsKQEAgLTk2MywyNCArODI3LDI0IEBACiAJCXJldHVybiByOwogCX0KIAotCWlmIChpYl9jaHVuay0+a2RhdGFbd2FpdHJlbG9jLmlkeCArIDFdICE9IFJBREVPTl9XQUlUX0NSVENfVkxJTkUpIHsKKwlpZiAocmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0cmVsb2MuaWR4ICsgMSkgIT0gUkFERU9OX1dBSVRfQ1JUQ19WTElORSkgewogCQlEUk1fRVJST1IoInZsaW5lIHdhaXQgaGFkIGlsbGVnYWwgd2FpdCB1bnRpbFxuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlyZXR1cm4gcjsKIAl9CiAKIAkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLwotCXIgPSByMTAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKKwlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2UocCwgJnAzcmVsb2MsIHAtPmlkeCArIHdhaXRyZWxvYy5jb3VudCArIDIpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIAogCWhfaWR4ID0gcC0+aWR4IC0gMjsKLQlwLT5pZHggKz0gd2FpdHJlbG9jLmNvdW50OwotCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50OworCXAtPmlkeCArPSB3YWl0cmVsb2MuY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKIAotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF07Ci0JY3J0Y19pZCA9IGliX2NodW5rLT5rZGF0YVtoX2lkeCArIDVdOwotCXJlZyA9IGliX2NodW5rLT5rZGF0YVtoX2lkeF0gPj4gMjsKKwloZWFkZXIgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4KTsKKwljcnRjX2lkID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBoX2lkeCArIDUpOworCXJlZyA9IENQX1BBQ0tFVDBfR0VUX1JFRyhoZWFkZXIpOwogCW11dGV4X2xvY2soJnAtPnJkZXYtPmRkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAlvYmogPSBkcm1fbW9kZV9vYmplY3RfZmluZChwLT5yZGV2LT5kZGV2LCBjcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQyk7CiAJaWYgKCFvYmopIHsKQEAgLTk5NCwxNiArODU4LDE2IEBACiAKIAlpZiAoIWNydGMtPmVuYWJsZWQpIHsKIAkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgd2FpdCB1bnRpbCAqLwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7Ci0JCWliX2NodW5rLT5rZGF0YVtoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyAyXSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgM10gPSBQQUNLRVQyKDApOwogCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CiAJCXN3aXRjaCAocmVnKSB7CiAJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EID4+IDI7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKLQkJCWhlYWRlciAmPSBSMzAwX0NQX1BBQ0tFVDBfUkVHX01BU0s7CisJCQloZWFkZXIgJj0gflIzMDBfQ1BfUEFDS0VUMF9SRUdfTUFTSzsKIAkJCWhlYWRlciB8PSBSQURFT05fQ1JUQzJfR1VJX1RSSUdfVkxJTkUgPj4gMjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMSw4ICs4NzUsOCBAQAogCQkJciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHhdID0gaGVhZGVyOwotCQlpYl9jaHVuay0+a2RhdGFbaF9pZHggKyAzXSB8PSBSQURFT05fRU5HX0RJU1BMQVlfU0VMRUNUX0NSVEMxOworCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgM10gfD0gUkFERU9OX0VOR19ESVNQTEFZX1NFTEVDVF9DUlRDMTsKIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CkBAIC0xMDMzLDcgKzg5Nyw2IEBACiBpbnQgcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCSAgICAgIHN0cnVjdCByYWRlb25fY3NfcmVsb2MgKipjc19yZWxvYykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICpyZWxvY3NfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgcDNyZWxvYzsKIAl1bnNpZ25lZCBpZHg7CkBAIC0xMDQ0LDcgKzkwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHIxMDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMDU3LDcgKzkxOSw3IEBACiAJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgJnAzcmVsb2MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTEyNiw3ICs5ODgsNiBAQAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCSAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMTM0LDExICs5OTUsMTMgQEAKIAlpbnQgcjsKIAlpbnQgaSwgZmFjZTsKIAl1MzIgdGlsZV9mbGFncyA9IDA7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOwogCisJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMTY2LDggKzEwMjksOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPnpiLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTE3OCw4ICsxMDQxLDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT5jYlswXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT5jYlswXS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhPRkZTRVRfMDoKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8xOgpAQCAtMTE5Miw3ICsxMDU1LDcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMF8wOgpAQCAtMTIwOCw4ICsxMDcxLDggQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMF0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CkBAIC0xMjI1LDggKzEwODgsOCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzWzFdLmN1YmVfaW5mb1tpXS5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1sxXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDJfMDoKQEAgLTEyNDIsMTIgKzExMDUsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWJfY2h1bmstPmtkYXRhW2lkeF07Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMl0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTI2MywxNyArMTEyNiwxNyBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUkFERU9OX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKLQkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOworCQl0cmFjay0+Y2JbMF0ucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fQ09MT1JQSVRDSF9NQVNLOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0RFUFRIUElUQ0g6Ci0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKKwkJdHJhY2stPnpiLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DTlRMOgotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKIAkJY2FzZSA3OgogCQljYXNlIDg6CiAJCWNhc2UgOToKQEAgLTEyOTEsMTMgKzExNTQsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbG9yIGJ1ZmZlciBmb3JtYXQgKCVkKSAhXG4iLAotCQkJCSAgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9aX0VOQUJMRSk7CisJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKLQkJc3dpdGNoIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4ZikgeworCQlzd2l0Y2ggKGlkeF92YWx1ZSAmIDB4ZikgewogCQljYXNlIDA6CiAJCQl0cmFjay0+emIuY3BwID0gMjsKIAkJCWJyZWFrOwpAQCAtMTMyMSw0NCArMTE4NCw0NCBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZUWF9GTVQ6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVEVYX1NJWkVfMDoKIAljYXNlIFJBREVPTl9QUF9URVhfU0laRV8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9TSVpFXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwotCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArIDMyOworCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMDoKIAljYXNlIFJBREVPTl9QUF9UWEZJTFRFUl8xOgogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzI6CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gMjQ7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9NQVhfTUlQX0xFVkVMX01BU0spCisJCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpZHhfdmFsdWUgJiBSQURFT05fTUFYX01JUF9MRVZFTF9NQVNLKQogCQkJCQkJID4+IFJBREVPTl9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0xMzY2LDE2ICsxMjI5LDE2IEBACiAJY2FzZSBSQURFT05fUFBfVFhGT1JNQVRfMToKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9UWEZPUk1BVF8wKSAvIDI0OwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfTk9OX1BPV0VSMikgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS51c2VfcGl0Y2ggPSAxOwogCQl9IGVsc2UgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDA7Ci0JCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX1dJRFRIX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9XSURUSF9NQVNLKTsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAxIDw8ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOworCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gUkFERU9OX1RYRk9STUFUX0hFSUdIVF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX01BU0spOwogCQl9Ci0JCWlmIChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9DVUJJQ19NQVBfRU5BQkxFKQorCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0NVQklDX01BUF9FTkFCTEUpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udGV4X2Nvb3JkX3R5cGUgPSAyOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlICYgUkFERU9OX1RYRk9STUFUX0ZPUk1BVF9NQVNLKSkgewogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9JODoKIAkJY2FzZSBSQURFT05fVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFJBREVPTl9UWEZPUk1BVF9ZODoKQEAgLTE0MDIsMTMgKzEyNjUsMTMgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzI6Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0bXAgPSBpZHhfdmFsdWU7CiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX0NVQklDX0ZBQ0VTXzApIC8gNDsKIAkJZm9yIChmYWNlID0gMDsgZmFjZSA8IDQ7IGZhY2UrKykgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlXS53aWR0aCA9IDEgPDwgKCh0bXAgPj4gKGZhY2UgKiA4KSkgJiAweGYpOwpAQCAtMTQyNywxNSArMTI5MCwxNCBAQAogCQkJCQkgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJCQkJIHN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXVuc2lnbmVkIGlkeDsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAlpZHggPSBwa3QtPmlkeCArIDE7Ci0JaWYgKChpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgMSkgPiByYWRlb25fb2JqZWN0X3NpemUocm9iaikpIHsKKwl2YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMik7CisJaWYgKCh2YWx1ZSArIDEpID4gcmFkZW9uX29iamVjdF9zaXplKHJvYmopKSB7CiAJCURSTV9FUlJPUigiW2RybV0gQnVmZmVyIHRvbyBzbWFsbCBmb3IgUEFDS0VUMyBJTkRYX0JVRkZFUiAiCiAJCQkgICIobmVlZCAldSBoYXZlICVsdSkgIVxuIiwKLQkJCSAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArIDEsCisJCQkgIHZhbHVlICsgMSwKIAkJCSAgcmFkZW9uX29iamVjdF9zaXplKHJvYmopKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ0NSw1OSArMTMwNywyMCBAQAogc3RhdGljIGludCByMTAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CiAJaW50IHI7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7CiAJc3dpdGNoIChwa3QtPm9wY29kZSkgewogCWNhc2UgUEFDS0VUM18zRF9MT0FEX1ZCUE5UUjoKLQkJYyA9IGliX2NodW5rLT5rZGF0YVtpZHgrK107Ci0JCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKLQkJZm9yIChpID0gMDsgaSA8IChjIC0gMSk7IGkgKz0gMiwgaWR4ICs9IDMpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMl0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzJdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI0OwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKLQkJfQotCQlpZiAoYyAmIDEpIHsKLQkJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQlpZiAocikgewotCQkJCURSTV9FUlJPUigiTm8gcmVsb2MgZm9yIHBhY2tldDMgJWRcbiIsCi0JCQkJCSAgcGt0LT5vcGNvZGUpOwotCQkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJCWliW2lkeCsxXSA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gODsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7Ci0JCX0KKwkJciA9IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihwLCBwa3QsIGlkeCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19JTkRYX0JVRkZFUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE1MDYsNyArMTMyOSw3IEBACiAJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeCsxXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTE1MjAsMjcgKzEzNDMsMjcgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT5udW1fYXJyYXlzID0gMTsKLQkJdHJhY2stPnZ0eF9zaXplID0gcjEwMF9nZXRfdnR4X3NpemUoaWJfY2h1bmstPmtkYXRhW2lkeCsyXSk7CisJCXRyYWNrLT52dHhfc2l6ZSA9IHIxMDBfZ2V0X3Z0eF9zaXplKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikpOwogCiAJCXRyYWNrLT5hcnJheXNbMF0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+YXJyYXlzWzBdLmVzaXplID0gdHJhY2stPnZ0eF9zaXplOwogCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT5tYXhfaW5keCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzEpOwogCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrM107CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzMpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EOgotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4KzFdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHgrMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQgLSAxOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQpAQCAtMTU0OCwxMSArMTM3MSwxMSBAQAogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbi1wYWNrZXQgdmVydGV4IGRhdGEgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTU1EXzI6Ci0JCWlmICgoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQpICYgMHgzKSAhPSAzKSB7CisJCWlmICgoKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSA+PiA0KSAmIDB4MykgIT0gMykgewogCQkJRFJNX0VSUk9SKCJQUklNX1dBTEsgbXVzdCBiZSAzIGZvciBJTU1EIGRyYXdcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJdHJhY2stPmltbWRfZHdvcmRzID0gcGt0LT5jb3VudDsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKQEAgLTE1NjAsMjggKzEzODMsMjggQEAKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgdXNpbmcgaW4tcGFja2V0IHZlcnRleCBkYXRhICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfVkJVRl8yOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKKwkJdHJhY2stPnZhcF92Zl9jbnRsID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOwogCQkvKiB0cmlnZ2VycyBkcmF3aW5nIG9mIHZlcnRleCBidWZmZXJzIHNldHVwIGVsc2V3aGVyZSAqLwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX0lORFhfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCQlicmVhazsKIAkJLyogdHJpZ2dlcnMgZHJhd2luZyB1c2luZyBpbmRpY2VzIHRvIHZlcnRleCBidWZmZXIgKi8KIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAkJYnJlYWs7CiAJCS8qIHRyaWdnZXJzIGRyYXdpbmcgb2YgdmVydGV4IGJ1ZmZlcnMgc2V0dXAgZWxzZXdoZXJlICovCiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CkBAIC0yMDMzLDcgKzE4NTYsNyBAQAogCXIxMDBfcGxsX2VycmF0YV9hZnRlcl9kYXRhKHJkZXYpOwogfQogCi1pbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpZiAoQVNJQ19JU19STjUwKHJkZXYpKSB7CiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcm41MF9yZWdfc2FmZV9ibTsKQEAgLTIwNDIsOSArMTg2NSw4IEBACiAJCXJkZXYtPmNvbmZpZy5yMTAwLnJlZ19zYWZlX2JtID0gcjEwMF9yZWdfc2FmZV9ibTsKIAkJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjEwMF9yZWdfc2FmZV9ibSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIHIyMDBfaW5pdChyZGV2KTsKKwkJcjIwMF9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CiAJfQotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjM0Miw5ICsyMTY0LDExIEBACiAJCW1vZGUxID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1swXS0+YmFzZS5tb2RlOwogCQlwaXhlbF9ieXRlczEgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMF0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAl9Ci0JaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7Ci0JCW1vZGUyID0gJnJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5tb2RlOwotCQlwaXhlbF9ieXRlczIgPSByZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UuZmItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKKwkJaWYgKHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5lbmFibGVkKSB7CisJCQltb2RlMiA9ICZyZGV2LT5tb2RlX2luZm8uY3J0Y3NbMV0tPmJhc2UubW9kZTsKKwkJCXBpeGVsX2J5dGVzMiA9IHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXS0+YmFzZS5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OworCQl9CiAJfQogCiAJbWluX21lbV9lZmYuZnVsbCA9IHJmaXhlZF9jb25zdF84KDApOwpAQCAtMjU1NSw3ICsyMzc5LDcgQEAKIAkvKgogCSAgRmluZCB0aGUgdG90YWwgbGF0ZW5jeSBmb3IgdGhlIGRpc3BsYXkgZGF0YS4KIAkqLwotCWRpc3BfbGF0ZW5jeV9vdmVyaGVhZC5mdWxsID0gcmZpeGVkX2NvbnN0KDgwKTsKKwlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9jb25zdCg4KTsKIAlkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCA9IHJmaXhlZF9kaXYoZGlzcF9sYXRlbmN5X292ZXJoZWFkLCBzY2xrX2ZmKTsKIAltY19sYXRlbmN5X21jbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X21jbGsuZnVsbDsKIAltY19sYXRlbmN5X3NjbGsuZnVsbCArPSBkaXNwX2xhdGVuY3lfb3ZlcmhlYWQuZnVsbCArIGN1cl9sYXRlbmN5X3NjbGsuZnVsbDsKQEAgLTI3NTMsOCArMjU3NywxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHIxMDBfY3NfdHJhY2tfdGV4dHVyZV9wcmludChzdHJ1Y3QgcjEwMF9jc190cmFja190ZXh0dXJlICp0KQogewogCURSTV9FUlJPUigicGl0Y2ggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnBpdGNoKTsKKwlEUk1fRVJST1IoInVzZV9waXRjaCAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT51c2VfcGl0Y2gpOwogCURSTV9FUlJPUigid2lkdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPndpZHRoKTsKKwlEUk1fRVJST1IoIndpZHRoXzExICAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT53aWR0aF8xMSk7CiAJRFJNX0VSUk9SKCJoZWlnaHQgICAgICAgICAgICAgICAgICAgICAlZFxuIiwgdC0+aGVpZ2h0KTsKKwlEUk1fRVJST1IoImhlaWdodF8xMSAgICAgICAgICAgICAgICAgICVkXG4iLCB0LT5oZWlnaHRfMTEpOwogCURSTV9FUlJPUigibnVtIGxldmVscyAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPm51bV9sZXZlbHMpOwogCURSTV9FUlJPUigiZGVwdGggICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPnR4ZGVwdGgpOwogCURSTV9FUlJPUigiYnBwICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIsIHQtPmNwcCk7CkBAIC0yODE0LDE1ICsyNjQxLDE3IEBACiAJCQkJZWxzZQogCQkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLnBpdGNoIC8gKDEgPDwgaSk7CiAJCQl9IGVsc2UgewotCQkJCXcgPSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGggLyAoMSA8PCBpKTsKKwkJCQl3ID0gdHJhY2stPnRleHR1cmVzW3VdLndpZHRoOwogCQkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQkJdyB8PSB0cmFjay0+dGV4dHVyZXNbdV0ud2lkdGhfMTE7CisJCQkJdyA9IHcgLyAoMSA8PCBpKTsKIAkJCQlpZiAodHJhY2stPnRleHR1cmVzW3VdLnJvdW5kdXBfdykKIAkJCQkJdyA9IHJvdW5kdXBfcG93X29mX3R3byh3KTsKIAkJCX0KLQkJCWggPSB0cmFjay0+dGV4dHVyZXNbdV0uaGVpZ2h0IC8gKDEgPDwgaSk7CisJCQloID0gdHJhY2stPnRleHR1cmVzW3VdLmhlaWdodDsKIAkJCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkKIAkJCQloIHw9IHRyYWNrLT50ZXh0dXJlc1t1XS5oZWlnaHRfMTE7CisJCQloID0gaCAvICgxIDw8IGkpOwogCQkJaWYgKHRyYWNrLT50ZXh0dXJlc1t1XS5yb3VuZHVwX2gpCiAJCQkJaCA9IHJvdW5kdXBfcG93X29mX3R3byhoKTsKIAkJCXNpemUgKz0gdyAqIGg7CkBAIC0zMTU3LDcgKzI5ODYsNyBAQAogCVdSRUczMihSXzAwMDc0MF9DUF9DU1FfQ05UTCwgMCk7CiAKIAkvKiBTYXZlIGZldyBDUlRDIHJlZ2lzdGVycyAqLwotCXNhdmUtPkdFTk1PX1dUID0gUlJFRzMyKFJfMDAwM0MwX0dFTk1PX1dUKTsKKwlzYXZlLT5HRU5NT19XVCA9IFJSRUc4KFJfMDAwM0MyX0dFTk1PX1dUKTsKIAlzYXZlLT5DUlRDX0VYVF9DTlRMID0gUlJFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwpOwogCXNhdmUtPkNSVENfR0VOX0NOVEwgPSBSUkVHMzIoUl8wMDAwNTBfQ1JUQ19HRU5fQ05UTCk7CiAJc2F2ZS0+Q1VSX09GRlNFVCA9IFJSRUczMihSXzAwMDI2MF9DVVJfT0ZGU0VUKTsKQEAgLTMxNjcsNyArMjk5Niw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBWR0EgYXBlcnR1cmUgYWNjZXNzICovCi0JV1JFRzMyKFJfMDAwM0MwX0dFTk1PX1dULCBDXzAwMDNDMF9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBDXzAwMDNDMl9WR0FfUkFNX0VOICYgc2F2ZS0+R0VOTU9fV1QpOwogCS8qIERpc2FibGUgY3Vyc29yLCBvdmVybGF5LCBjcnRjICovCiAJV1JFRzMyKFJfMDAwMjYwX0NVUl9PRkZTRVQsIHNhdmUtPkNVUl9PRkZTRVQgfCBTXzAwMDI2MF9DVVJfTE9DSygxKSk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwgfApAQCAtMzE5OSwxMCArMzAyOCwyNjQgQEAKIAkJCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKIAl9CiAJLyogUmVzdG9yZSBDUlRDIHJlZ2lzdGVycyAqLwotCVdSRUczMihSXzAwMDNDMF9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOworCVdSRUc4KFJfMDAwM0MyX0dFTk1PX1dULCBzYXZlLT5HRU5NT19XVCk7CiAJV1JFRzMyKFJfMDAwMDU0X0NSVENfRVhUX0NOVEwsIHNhdmUtPkNSVENfRVhUX0NOVEwpOwogCVdSRUczMihSXzAwMDA1MF9DUlRDX0dFTl9DTlRMLCBzYXZlLT5DUlRDX0dFTl9DTlRMKTsKIAlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykpIHsKIAkJV1JFRzMyKFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMLCBzYXZlLT5DUlRDMl9HRU5fQ05UTCk7CiAJfQogfQorCit2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBSUkVHOChSXzAwMDNDMl9HRU5NT19XVCk7CisJV1JFRzgoUl8wMDAzQzJfR0VOTU9fV1QsIENfMDAwM0MyX1ZHQV9SQU1fRU4gJiB0bXApOworfQorCitzdGF0aWMgdm9pZCByMTAwX2RlYnVnZnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyID0gcjEwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSByMTAwX21jIGRlYnVnZnMgZmlsZS5cbiIpOworfQorCitzdGF0aWMgdm9pZCByMTAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IHIxMDBfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlyMTAwX21jX3N0b3AocmRldiwgJnNhdmUpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKFJfMDAwMTRDX01DX0FHUF9MT0NBVElPTiwKKwkJCVNfMDAwMTRDX01DX0FHUF9TVEFSVChyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMTRDX01DX0FHUF9UT1AocmRldi0+bWMuZ3R0X2VuZCA+PiAxNikpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIGxvd2VyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKTsKKwkJaWYgKHJkZXYtPmZhbWlseSA+IENISVBfUlYyMDApCisJCQlXUkVHMzIoUl8wMDAxNUNfQUdQX0JBU0VfMiwKKwkJCQl1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSAmIDB4ZmYpOworCX0gZWxzZSB7CisJCVdSRUczMihSXzAwMDE0Q19NQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoUl8wMDAxNzBfQUdQX0JBU0UsIDApOworCQlpZiAocmRldi0+ZmFtaWx5ID4gQ0hJUF9SVjIwMCkKKwkJCVdSRUczMihSXzAwMDE1Q19BR1BfQkFTRV8yLCAwKTsKKwl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyMTAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpCisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZW91dC5cbiIpOworCS8qIFByb2dyYW0gTUMsIHNob3VsZCBiZSBhIDMyYml0cyBsaW1pdGVkIGFkZHJlc3Mgc3BhY2UgKi8KKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHIxMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjI1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMjgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX0RJU1AxKDEpIHwgU18wMDAwMERfRk9SQ0VfRElTUDIoMSk7CisJV1JFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwsIHRtcCk7Cit9CisKK3N0YXRpYyBpbnQgcjEwMF9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcjEwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXIxMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjEwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMTAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYmVmb3JlIGRvaW5nIHJlc2V0ICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByMTAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByMTAwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9jcF9kaXNhYmxlKHJkZXYpOworCXIxMDBfd2JfZGlzYWJsZShyZGV2KTsKKwlyMTAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpCisJCXIxMDBfcGNpX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByMTAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcjEwMF9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQl0bXAgPSBHXzAwMDE1Q19NQ19GQl9TVEFSVChSUkVHMzIoUl8wMDAxNUNfTkJfVE9NKSk7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSB0bXAgPDwgMTY7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOworCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7CisJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIHsKKwkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOworCQl9CisJfQorCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiAwOworfQorCitpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogUmVnaXN0ZXIgZGVidWdmcyBmaWxlIHNwZWNpZmljIHRvIHRoaXMgZ3JvdXAgb2YgYXNpY3MgKi8KKwlyMTAwX2RlYnVnZnMocmRldik7CisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIxMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIxMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkgeworCQlyID0gcjEwMF9wY2lfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlyMTAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjEwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXIxMDBfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJCXIxMDBfcGNpX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggNzBhODJlZC4uMGRhZjBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTg0LDYgKzg0LDggQEAKIAkJICAgICAgIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCiAJCSAgICAgICB1bnNpZ25lZCBpZHgsIHVuc2lnbmVkIHJlZyk7CiAKKworCiBzdGF0aWMgaW5saW5lIGludCByMTAwX3JlbG9jX3BpdGNoX29mZnNldChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCQkgIHVuc2lnbmVkIGlkeCwKQEAgLTkzLDkgKzk1LDcgQEAKIAl1MzIgdGlsZV9mbGFncyA9IDA7CiAJdTMyIHRtcDsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKLQotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOworCXUzMiB2YWx1ZTsKIAogCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJaWYgKHIpIHsKQEAgLTEwNCw3ICsxMDQsOCBAQAogCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7CiAJCXJldHVybiByOwogCX0KLQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDAzZmZmZmY7CisJdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJdG1wID0gdmFsdWUgJiAweDAwM2ZmZmZmOwogCXRtcCArPSAoKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCkgPj4gMTApOwogCiAJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUFDUk8pCkBAIC0xMTksNiArMTIwLDY0IEBACiAJfQogCiAJdG1wIHw9IHRpbGVfZmxhZ3M7Ci0JcC0+aWItPnB0cltpZHhdID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzZmMwMDAwMCkgfCB0bXA7CisJcC0+aWItPnB0cltpZHhdID0gKHZhbHVlICYgMHgzZmMwMDAwMCkgfCB0bXA7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHIxMDBfcGFja2V0M19sb2FkX3ZicG50cihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKKwkJCQkJICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJICAgaW50IGlkeCkKK3sKKwl1bnNpZ25lZCBjLCBpOworCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOworCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKKwlpbnQgciA9IDA7CisJdm9sYXRpbGUgdWludDMyX3QgKmliOworCXUzMiBpZHhfdmFsdWU7CisKKwlpYiA9IHAtPmliLT5wdHI7CisJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKKwljID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKykgJiAweDFGOworCXRyYWNrLT5udW1fYXJyYXlzID0gYzsKKwlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCSAgcGt0LT5vcGNvZGUpOworCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOworCQkJcmV0dXJuIHI7CisJCX0KKwkJaWR4X3ZhbHVlID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisKKwkJdHJhY2stPmFycmF5c1tpICsgMF0uZXNpemUgPSBpZHhfdmFsdWUgPj4gODsKKwkJdHJhY2stPmFycmF5c1tpICsgMF0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOworCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKKwkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWliW2lkeCsyXSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+YXJyYXlzW2kgKyAxXS5lc2l6ZSA9IGlkeF92YWx1ZSA+PiAyNDsKKwkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgJj0gMHg3RjsKKwl9CisJaWYgKGMgJiAxKSB7CisJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAorCQkJCQkgIHBrdC0+b3Bjb2RlKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4KzFdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAxKSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplID0gaWR4X3ZhbHVlID4+IDg7CisJCXRyYWNrLT5hcnJheXNbaSArIDBdLmVzaXplICY9IDB4N0Y7CisJfQorCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwZC5oCmluZGV4IGM0YjI1N2UuLmRmMjlhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDBkLmgKQEAgLTM4MSw2ICszODEsMjQgQEAKICNkZWZpbmUgICBTXzAwMDA1NF9WQ1JUQ19JRFhfTUFTVEVSKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDI0KQogI2RlZmluZSAgIEdfMDAwMDU0X1ZDUlRDX0lEWF9NQVNURVIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4N0YpCiAjZGVmaW5lICAgQ18wMDAwNTRfVkNSVENfSURYX01BU1RFUiAgICAgICAgICAgICAgICAgICAgMHg4MEZGRkZGRgorI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNENfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNEMKKyNkZWZpbmUgICBTXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE0Q19NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNENfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTRDX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE0Q19NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMTcwX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTcwCisjZGVmaW5lICAgU18wMDAxNzBfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDE3MF9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIFJfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgIDB4MDAwMjNDCiAjZGVmaW5lICAgU18wMDAyM0NfRElTUExBWV9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKQEAgLTQwMywyNSArNDIxLDI1IEBACiAjZGVmaW5lICAgU18wMDAzNjBfQ1VSMl9MT0NLKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQogI2RlZmluZSAgIEdfMDAwMzYwX0NVUjJfTE9DSyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDM2MF9DVVIyX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCi0jZGVmaW5lIFJfMDAwM0MwX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCi0jZGVmaW5lICAgU18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCi0jZGVmaW5lICAgR18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYzCi0jZGVmaW5lICAgU18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCi0jZGVmaW5lICAgR18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAzQzBfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgotI2RlZmluZSAgIFNfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQotI2RlZmluZSAgIEdfMDAwM0MwX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQotI2RlZmluZSAgIENfMDAwM0MwX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKLSNkZWZpbmUgICBTXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKLSNkZWZpbmUgICBHXzAwMDNDMF9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDNDMF9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lIFJfMDAwM0MyX0dFTk1PX1dUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0MwCisjZGVmaW5lICAgU18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfR0VOTU9fTU9OT19BRERSRVNTX0IgICAgICAgICAgICAgICAgMHhGRQorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9SQU1fRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9SQU1fRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkQKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfQ0tTRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfQ0tTRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweEYzCisjZGVmaW5lICAgU18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzQzJfT0REX0VWRU5fTURfUEdTRUwgICAgICAgICAgICAgICAgICAgMHhERgorI2RlZmluZSAgIFNfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwM0MyX1ZHQV9IU1lOQ19QT0woeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwM0MyX1ZHQV9IU1lOQ19QT0wgICAgICAgICAgICAgICAgICAgICAgIDB4QkYKKyNkZWZpbmUgICBTXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDNDMl9WR0FfVlNZTkNfUE9MKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDNDMl9WR0FfVlNZTkNfUE9MICAgICAgICAgICAgICAgICAgICAgICAweDdGCiAjZGVmaW5lIFJfMDAwM0Y4X0NSVEMyX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwM0Y4CiAjZGVmaW5lICAgU18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCiAjZGVmaW5lICAgR18wMDAzRjhfQ1JUQzJfREJMX1NDQU5fRU4oeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCkBAIC01NDUsNiArNTYzLDQ2IEBACiAjZGVmaW5lICAgU18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkZGRkYpIDw8IDUpCiAjZGVmaW5lICAgR18wMDA3NzRfU0NSQVRDSF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDdGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDA3NzRfU0NSQVRDSF9BRERSICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRgorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCiAjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQogI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKQEAgLTYwNCw0ICs2NjIsNTMgQEAKICNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgogCisKKyNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQKKyNkZWZpbmUgICBTXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9TQ0xLX1NSQ19TRUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDAwRF9TQ0xLX1NSQ19TRUwgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY4CisjZGVmaW5lICAgU18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfVENMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfVENMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjhGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0NQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfQ1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0hEUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSERQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0RJU1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9ESVNQKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRElTUCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfSURDVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1ZJUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVklQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RBTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVEFNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RETSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVERNICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwppbmRleCA1NjhjNzRiLi5lYjc0MGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtOTYsNyArOTYsNiBAQAogCQkgICAgICAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJICAgICAgIHVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcmVsb2MgKnJlbG9jOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrICp0cmFjazsKIAl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CkBAIC0xMDUsMTEgKzEwNCwxMSBAQAogCWludCBpOwogCWludCBmYWNlOwogCXUzMiB0aWxlX2ZsYWdzID0gMDsKKwl1MzIgaWR4X3ZhbHVlOwogCiAJaWIgPSBwLT5pYi0+cHRyOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXRyYWNrID0gKHN0cnVjdCByMTAwX2NzX3RyYWNrICopcC0+dHJhY2s7Ci0KKwlpZHhfdmFsdWUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIFJBREVPTl9DUlRDX0dVSV9UUklHX1ZMSU5FOgogCQlyID0gcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CkBAIC0xMzcsOCArMTM2LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTE0OSw4ICsxNDgsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMToKQEAgLTE2Niw3ICsxNjUsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX09GRlNFVF9GMV8wOgpAQCAtMjA4LDEyICsyMDcsMTIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1tmYWNlIC0gMV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgotCQl0cmFjay0+bWF4eSA9ICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMjI5LDE3ICsyMjgsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFJBREVPTl9DT0xPUl9NSUNST1RJTEVfRU5BQkxFOwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT5jYlswXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgotCQl0cmFjay0+emIucGl0Y2ggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CisJCXRyYWNrLT56Yi5waXRjaCA9IGlkeF92YWx1ZSAmIFJBREVPTl9ERVBUSFBJVENIX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfQ05UTDoKLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gUkFERU9OX1JCM0RfQ09MT1JfRk9STUFUX1NISUZUKSAmIDB4MWYpIHsKKwkJc3dpdGNoICgoaWR4X3ZhbHVlID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSB7CiAJCWNhc2UgNzoKIAkJY2FzZSA4OgogCQljYXNlIDk6CkBAIC0yNTcsMTggKzI1NiwxOCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IFJBREVPTl9SQjNEX0NPTE9SX0ZPUk1BVF9TSElGVCkgJiAweDFmKSk7CisJCQkJICAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgeworCQlpZiAoaWR4X3ZhbHVlICYgUkFERU9OX0RFUFRIWFlfT0ZGU0VUX0VOQUJMRSkgewogCQkJRFJNX0VSUk9SKCJObyBzdXBwb3J0IGZvciBkZXB0aCB4eSBvZmZzZXQgaW4ga21zXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPnpfZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmIFJBREVPTl9aX0VOQUJMRSk7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlNURU5DSUxDTlRMOgotCQlzd2l0Y2ggKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhmKSB7CisJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CiAJCWNhc2UgMDoKIAkJCXRyYWNrLT56Yi5jcHAgPSAyOwogCQkJYnJlYWs7CkBAIC0yOTIsMjcgKzI5MSwyNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ05UTDoKIAkJewotCQkJdWludDMyX3QgdGVtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDQ7CisJCQl1aW50MzJfdCB0ZW1wID0gaWR4X3ZhbHVlID4+IDQ7CiAJCQlmb3IgKGkgPSAwOyBpIDwgdHJhY2stPm51bV90ZXh0dXJlOyBpKyspCiAJCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSAhISh0ZW1wICYgKDEgPDwgaSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMTBjOgogCQkvKiBWQVBfVkZfTUFYX1ZUWF9JTkRYICovCi0JCXRyYWNrLT5tYXhfaW5keCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgwMEZGRkZGRlVMOworCQl0cmFjay0+bWF4X2luZHggPSBpZHhfdmFsdWUgJiAweDAwRkZGRkZGVUw7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzA6Ci0JCXRyYWNrLT52dHhfc2l6ZSA9IHIyMDBfZ2V0X3Z0eF9zaXplXzAoaWJfY2h1bmstPmtkYXRhW2lkeF0pOworCQl0cmFjay0+dnR4X3NpemUgPSByMjAwX2dldF92dHhfc2l6ZV8wKGlkeF92YWx1ZSk7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9TRV9WVFhfRk1UXzE6Ci0JCXRyYWNrLT52dHhfc2l6ZSArPSByMjAwX2dldF92dHhfc2l6ZV8xKGliX2NodW5rLT5rZGF0YVtpZHhdKTsKKwkJdHJhY2stPnZ0eF9zaXplICs9IHIyMDBfZ2V0X3Z0eF9zaXplXzEoaWR4X3ZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYU0laRV8wOgogCWNhc2UgUjIwMF9QUF9UWFNJWkVfMToKQEAgLTMyMSw4ICszMjAsOCBAQAogCWNhc2UgUjIwMF9QUF9UWFNJWkVfNDoKIAljYXNlIFIyMDBfUFBfVFhTSVpFXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWFNJWkVfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1VTSVpFX01BU0spICsgMTsKKwkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9ICgoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9WU0laRV9NQVNLKSA+PiBSQURFT05fVEVYX1ZTSVpFX1NISUZUKSArIDE7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzA6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMToKQEAgLTMzMSw3ICszMzAsNyBAQAogCWNhc2UgUjIwMF9QUF9UWFBJVENIXzQ6CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKLQkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAzMjsKKwkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUjIwMF9QUF9UWEZJTFRFUl8xOgpAQCAtMzQwLDEyICszMzksMTIgQEAKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYRklMVEVSXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS5udW1fbGV2ZWxzID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIFIyMDBfTUFYX01JUF9MRVZFTF9NQVNLKQorCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9ICgoaWR4X3ZhbHVlICYgUjIwMF9NQVhfTUlQX0xFVkVMX01BU0spCiAJCQkJCQkgPj4gUjIwMF9NQVhfTUlQX0xFVkVMX1NISUZUKTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIzKSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKLQkJdG1wID0gKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDI3KSAmIDB4NzsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAyNykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNikKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJYnJlYWs7CkBAIC0zNjQsOCArMzYzLDggQEAKIAljYXNlIFIyMDBfUFBfVFhGT1JNQVRfWF80OgogCWNhc2UgUjIwMF9QUF9UWEZPUk1BVF9YXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF9YXzApIC8gMzI7Ci0JCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDc7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweDM7CisJCXRyYWNrLT50ZXh0dXJlc1tpXS50eGRlcHRoID0gaWR4X3ZhbHVlICYgMHg3OworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDE2KSAmIDB4MzsKIAkJLyogMkQsIDNELCBDVUJFICovCiAJCXN3aXRjaCAodG1wKSB7CiAJCWNhc2UgMDoKQEAgLTM4OSwxNCArMzg4LDE0IEBACiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzQ6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzU6CiAJCWkgPSAocmVnIC0gUjIwMF9QUF9UWEZPUk1BVF8wKSAvIDMyOwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSMjAwX1RYRk9STUFUX05PTl9QT1dFUjIpIHsKKwkJaWYgKGlkeF92YWx1ZSAmIFIyMDBfVFhGT1JNQVRfTk9OX1BPV0VSMikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9IDE7CiAJCX0gZWxzZSB7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gMDsKLQkJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfV0lEVEhfU0hJRlQpICYgUkFERU9OX1RYRk9STUFUX1dJRFRIX01BU0spOwotCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IFJBREVPTl9UWEZPUk1BVF9XSURUSF9TSElGVCkgJiBSQURFT05fVFhGT1JNQVRfV0lEVEhfTUFTSyk7CisJCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiBSQURFT05fVFhGT1JNQVRfSEVJR0hUX1NISUZUKSAmIFJBREVPTl9UWEZPUk1BVF9IRUlHSFRfTUFTSyk7CiAJCX0KLQkJc3dpdGNoICgoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiBSQURFT05fVFhGT1JNQVRfRk9STUFUX01BU0spKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIFJBREVPTl9UWEZPUk1BVF9GT1JNQVRfTUFTSykpIHsKIAkJY2FzZSBSMjAwX1RYRk9STUFUX0k4OgogCQljYXNlIFIyMDBfVFhGT1JNQVRfUkdCMzMyOgogCQljYXNlIFIyMDBfVFhGT1JNQVRfWTg6CkBAIC00MjQsOCArNDIzLDggQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jcHAgPSA0OwogCQkJYnJlYWs7CiAJCX0KLQkJdHJhY2stPnRleHR1cmVzW2ldLmN1YmVfaW5mb1s0XS53aWR0aCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAweGYpOwotCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOworCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzA6CiAJY2FzZSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzE6CkBAIC00MzMsNyArNDMyLDcgQEAKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfMzoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfRkFDRVNfNToKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRtcCA9IGlkeF92YWx1ZTsKIAkJaSA9IChyZWcgLSBSMjAwX1BQX0NVQklDX0ZBQ0VTXzApIC8gMzI7CiAJCWZvciAoZmFjZSA9IDA7IGZhY2UgPCA0OyBmYWNlKyspIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKQEAgLTQ0OCw5ICs0NDcsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyZGV2LT5jb25maWcucjEwMC5yZWdfc2FmZV9ibSA9IHIyMDBfcmVnX3NhZmVfYm07CiAJcmRldi0+Y29uZmlnLnIxMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjIwMF9yZWdfc2FmZV9ibSk7Ci0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGJiMTUxZWMuLjJmNDNlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC0zMyw0MyArMzMsMTYgQEAKICNpbmNsdWRlICJyYWRlb25fZHJtLmgiCiAjaW5jbHVkZSAicjEwMF90cmFjay5oIgogI2luY2x1ZGUgInIzMDBkLmgiCi0KKyNpbmNsdWRlICJydjM1MGQuaCIKICNpbmNsdWRlICJyMzAwX3JlZ19zYWZlLmgiCiAKLS8qIHIzMDAscjM1MCxydjM1MCxydjM3MCxydjM4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotaW50IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19zZXR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX2NzX3BhY2tldF9wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAotCQkJIHVuc2lnbmVkIGlkeCk7Ci1pbnQgcjEwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnApOwotaW50IHIxMDBfY3NfcGFyc2VfcGFja2V0MChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCSAgc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKLQkJCSAgY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCi0JCQkgIHJhZGVvbl9wYWNrZXQwX2NoZWNrX3QgY2hlY2spOwotaW50IHIxMDBfY3NfdHJhY2tfY2hlY2tfcGt0M19pbmR4X2J1ZmZlcihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKLQkJCQkJIHN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCi0JCQkJCSBzdHJ1Y3QgcmFkZW9uX29iamVjdCAqcm9iaik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByMzAwLHIzNTAscnYzNTAscnYzNzAscnYzODAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCi12b2lkIHIzMDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQorLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0bzogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiAKIC8qCiAgKiBydjM3MCxydjM4MCBQQ0lFIEdBUlQKICAqLworc3RhdGljIGludCBydjM3MF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQwLDcgKzExMyw3IEBACiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDQwOTY7CisJdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CkBAIC0xODIsNTkgKzE1NSw2IEBACiAJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIH0KIAotLyoKLSAqIE1DCi0gKi8KLWludCByMzAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0KLQlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7Ci0JfQotCi0JcjMwMF9ncHVfaW5pdChyZGV2KTsKLQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0JfQotCi0JLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIERpc2FibGluZyBBR1BcbiIpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKLQkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl9Ci0JfQotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIHI7Ci0JfQotCi0JLyogUHJvZ3JhbSBHUFUgbWVtb3J5IHNwYWNlICovCi0JcjEwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHIzMDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JcjEwMF9tY19zZXR1cChyZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByMzAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEZlbmNlIGVtaXNzaW9uCi0gKi8KIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewpAQCAtMjYwLDEwICsxODAsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIGludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCiAJCSAgdWludDY0X3QgZHN0X29mZnNldCwKQEAgLTU4MiwxMSArNDk4LDYgQEAKIAlyMTAwX3ZyYW1faW5pdF9zaXplcyhyZGV2KTsKIH0KIAotCi0vKgotICogUENJRSBMYW5lcwotICovCi0KIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcykKIHsKIAl1aW50MzJfdCBsaW5rX3dpZHRoX2NudGwsIG1hc2s7CkBAIC02NDYsMTAgKzU1Nyw2IEBACiAKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC02ODAsNyArNTg3LDcgQEAKIH07CiAjZW5kaWYKIAotaW50IHJ2MzcwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcnYzNzBfcGNpZV9nYXJ0X2luZm9fbGlzdCwgMSk7CkBAIC02ODksMjUgKzU5NiwyMiBAQAogI2VuZGlmCiB9CiAKLQotLyoKLSAqIENTIGZ1bmN0aW9ucwotICovCiBzdGF0aWMgaW50IHIzMDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKIAkJdW5zaWduZWQgaWR4LCB1bnNpZ25lZCByZWcpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1aW50MzJfdCB0bXAsIHRpbGVfZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGk7CiAJaW50IHI7CisJdTMyIGlkeF92YWx1ZTsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAl0cmFjayA9IChzdHJ1Y3QgcjEwMF9jc190cmFjayAqKXAtPnRyYWNrOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6CiAJY2FzZSBSQURFT05fQ1JUQ19HVUlfVFJJR19WTElORToKQEAgLTczOCw4ICs2NDIsOCBAQAogCQkJcmV0dXJuIHI7CiAJCX0KIAkJdHJhY2stPmNiW2ldLnJvYmogPSByZWxvYy0+cm9iajsKLQkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOwotCQlpYltpZHhdID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJdHJhY2stPmNiW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIzMDBfWkJfREVQVEhPRkZTRVQ6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC03NTAsOCArNjU0LDggQEAKIAkJCXJldHVybiByOwogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCXRyYWNrLT56Yi5vZmZzZXQgPSBpYl9jaHVuay0+a2RhdGFbaWR4XTsKLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgogCWNhc2UgUjMwMF9UWF9PRkZTRVRfMCs0OgpAQCAtNzc3LDMyICs2ODEsMzIgQEAKIAkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKIAkJCXJldHVybiByOwogCQl9Ci0JCWliW2lkeF0gPSBpYl9jaHVuay0+a2RhdGFbaWR4XSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCWJyZWFrOwogCS8qIFRyYWNrZWQgcmVnaXN0ZXJzICovCiAJY2FzZSAweDIwODQ6CiAJCS8qIFZBUF9WRl9DTlRMICovCi0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpZHhfdmFsdWU7CiAJCWJyZWFrOwogCWNhc2UgMHgyMEI0OgogCQkvKiBWQVBfVlRYX1NJWkUgKi8KLQkJdHJhY2stPnZ0eF9zaXplID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGOworCQl0cmFjay0+dnR4X3NpemUgPSBpZHhfdmFsdWUgJiAweDdGOwogCQlicmVhazsKIAljYXNlIDB4MjEzNDoKIAkJLyogVkFQX1ZGX01BWF9WVFhfSU5EWCAqLwotCQl0cmFjay0+bWF4X2luZHggPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MDBGRkZGRkZVTDsKKwkJdHJhY2stPm1heF9pbmR4ID0gaWR4X3ZhbHVlICYgMHgwMEZGRkZGRlVMOwogCQlicmVhazsKIAljYXNlIDB4NDNFNDoKIAkJLyogU0NfU0NJU1NPUjEgKi8KLQkJdHJhY2stPm1heHkgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDEzKSAmIDB4MUZGRikgKyAxOworCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDEzKSAmIDB4MUZGRikgKyAxOwogCQlpZiAocC0+cmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjUxNSkgewogCQkJdHJhY2stPm1heHkgLT0gMTQ0MDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCi0JCXRyYWNrLT5udW1fY2IgPSAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDUpICYgMHgzKSArIDE7CisJCXRyYWNrLT5udW1fY2IgPSAoKGlkeF92YWx1ZSA+PiA1KSAmIDB4MykgKyAxOwogCQlicmVhazsKIAljYXNlIDB4NEUzODoKIAljYXNlIDB4NEUzQzoKQEAgLTgyNSwxMyArNzI5LDEzIEBACiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQogCQkJdGlsZV9mbGFncyB8PSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEU7CiAKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiB+KDB4NyA8PCAxNik7CisJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJaSA9IChyZWcgLSAweDRFMzgpID4+IDI7Ci0JCXRyYWNrLT5jYltpXS5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZFOwotCQlzd2l0Y2ggKCgoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjEpICYgMHhGKSkgeworCQl0cmFjay0+Y2JbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkU7CisJCXN3aXRjaCAoKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSkgewogCQljYXNlIDk6CiAJCWNhc2UgMTE6CiAJCWNhc2UgMTI6CkBAIC04NTQsMTMgKzc1OCwxMyBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3IgYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoKGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDIxKSAmIDB4RikpOworCQkJCSAgKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIDB4NEYwMDoKIAkJLyogWkJfQ05UTCAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAyKSB7CisJCWlmIChpZHhfdmFsdWUgJiAyKSB7CiAJCQl0cmFjay0+el9lbmFibGVkID0gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCXRyYWNrLT56X2VuYWJsZWQgPSBmYWxzZTsKQEAgLTg2OCw3ICs3NzIsNyBAQAogCQlicmVhazsKIAljYXNlIDB4NEYxMDoKIAkJLyogWkJfRk9STUFUICovCi0JCXN3aXRjaCAoKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHhGKSkgeworCQlzd2l0Y2ggKChpZHhfdmFsdWUgJiAweEYpKSB7CiAJCWNhc2UgMDoKIAkJY2FzZSAxOgogCQkJdHJhY2stPnpiLmNwcCA9IDI7CkBAIC04NzgsNyArNzgyLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHogYnVmZmVyIGZvcm1hdCAoJWQpICFcbiIsCi0JCQkJICAoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweEYpKTsKKwkJCQkgIChpZHhfdmFsdWUgJiAweEYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtODk3LDE3ICs4MDEsMTcgQEAKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfREVQVEhNSUNST1RJTEVfVElMRUQ7OwogCi0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgfigweDcgPDwgMTYpOworCQl0bXAgPSBpZHhfdmFsdWUgJiB+KDB4NyA8PCAxNik7CiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCi0JCXRyYWNrLT56Yi5waXRjaCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZDOworCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkM7CiAJCWJyZWFrOwogCWNhc2UgMHg0MTA0OgogCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQkJYm9vbCBlbmFibGVkOwogCi0JCQllbmFibGVkID0gISEoaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCBpKSk7CisJCQllbmFibGVkID0gISEoaWR4X3ZhbHVlICYgKDEgPDwgaSkpOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmVuYWJsZWQgPSBlbmFibGVkOwogCQl9CiAJCWJyZWFrOwpAQCAtOTI5LDkgKzgzMyw5IEBACiAJY2FzZSAweDQ0RkM6CiAJCS8qIFRYX0ZPUk1BVDFfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NEMwKSA+PiAyOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjUpICYgMHgzOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI1KSAmIDB4MzsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnRleF9jb29yZF90eXBlID0gdG1wOwotCQlzd2l0Y2ggKChpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4MUYpKSB7CisJCXN3aXRjaCAoKGlkeF92YWx1ZSAmIDB4MUYpKSB7CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWDg6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWTRYNDoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aM1kzWDI6CkBAIC05NzEsNyArODc1LDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIHRleHR1cmUgZm9ybWF0ICV1XG4iLAotCQkJCSAgKGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgxRikpOworCQkJCSAgKGlkeF92YWx1ZSAmIDB4MUYpKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTk5NCwxMSArODk4LDExIEBACiAJY2FzZSAweDQ0M0M6CiAJCS8qIFRYX0ZJTFRFUjBfWzAtMTVdICovCiAJCWkgPSAocmVnIC0gMHg0NDAwKSA+PiAyOwotCQl0bXAgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSAmIDB4NzsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX3cgPSBmYWxzZTsKIAkJfQotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMykgJiAweDc7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMykgJiAweDc7CiAJCWlmICh0bXAgPT0gMiB8fCB0bXAgPT0gNCB8fCB0bXAgPT0gNikgewogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOwogCQl9CkBAIC0xMDIxLDEyICs5MjUsMTIgQEAKIAljYXNlIDB4NDUzQzoKIAkJLyogVFhfRk9STUFUMl9bMC0xNV0gKi8KIAkJaSA9IChyZWcgLSAweDQ1MDApID4+IDI7Ci0JCXRtcCA9IGliX2NodW5rLT5rZGF0YVtpZHhdICYgMHgzRkZGOworCQl0bXAgPSBpZHhfdmFsdWUgJiAweDNGRkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5waXRjaCA9IHRtcCArIDE7CiAJCWlmIChwLT5yZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSkgewotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNSkgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE1KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoXzExID0gdG1wOwotCQkJdG1wID0gKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxNikgJiAxKSA8PCAxMTsKKwkJCXRtcCA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDEpIDw8IDExOwogCQkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodF8xMSA9IHRtcDsKIAkJfQogCQlicmVhazsKQEAgLTEwNDgsMTUgKzk1MiwxNSBAQAogCWNhc2UgMHg0NEJDOgogCQkvKiBUWF9GT1JNQVQwX1swLTE1XSAqLwogCQlpID0gKHJlZyAtIDB4NDQ4MCkgPj4gMjsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAweDdGRjsKKwkJdG1wID0gaWR4X3ZhbHVlICYgMHg3RkY7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS53aWR0aCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAxMSkgJiAweDdGRjsKKwkJdG1wID0gKGlkeF92YWx1ZSA+PiAxMSkgJiAweDdGRjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLmhlaWdodCA9IHRtcCArIDE7Ci0JCXRtcCA9IChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNikgJiAweEY7CisJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjYpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ubnVtX2xldmVscyA9IHRtcDsKLQkJdG1wID0gaWJfY2h1bmstPmtkYXRhW2lkeF0gJiAoMSA8PCAzMSk7CisJCXRtcCA9IGlkeF92YWx1ZSAmICgxIDw8IDMxKTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnVzZV9waXRjaCA9ICEhdG1wOwotCQl0bXAgPSAoaWJfY2h1bmstPmtkYXRhW2lkeF0gPj4gMjIpICYgMHhGOworCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDIyKSAmIDB4RjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnR4ZGVwdGggPSB0bXA7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9aUEFTU19BRERSOgpAQCAtMTA2Nyw3ICs5NzEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4XSA9IGliX2NodW5rLT5rZGF0YVtpZHhdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSAweDRiZTg6CiAJCS8qIHZhbGlkIHJlZ2lzdGVyIG9ubHkgb24gUlY1MzAgKi8KQEAgLTEwODUsNjAgKzk4OSwyMCBAQAogc3RhdGljIGludCByMzAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0KQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwotCiAJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CiAJc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrOwogCXZvbGF0aWxlIHVpbnQzMl90ICppYjsKIAl1bnNpZ25lZCBpZHg7Ci0JdW5zaWduZWQgaSwgYzsKIAlpbnQgcjsKIAogCWliID0gcC0+aWItPnB0cjsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlpZHggPSBwa3QtPmlkeCArIDE7CiAJdHJhY2sgPSAoc3RydWN0IHIxMDBfY3NfdHJhY2sgKilwLT50cmFjazsKIAlzd2l0Y2gocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfM0RfTE9BRF9WQlBOVFI6Ci0JCWMgPSBpYl9jaHVuay0+a2RhdGFbaWR4KytdICYgMHgxRjsKLQkJdHJhY2stPm51bV9hcnJheXMgPSBjOwotCQlmb3IgKGkgPSAwOyBpIDwgKGMgLSAxKTsgaSs9MiwgaWR4Kz0zKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCWlmIChyKSB7Ci0JCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgcGFja2V0MyAlZFxuIiwKLQkJCQkJICBwa3QtPm9wY29kZSk7Ci0JCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwotCQkJCXJldHVybiByOwotCQkJfQotCQkJaWJbaWR4KzJdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsyXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0ucm9iaiA9IHJlbG9jLT5yb2JqOwotCQkJdHJhY2stPmFycmF5c1tpICsgMV0uZXNpemUgPSBpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiAyNDsKLQkJCXRyYWNrLT5hcnJheXNbaSArIDFdLmVzaXplICY9IDB4N0Y7Ci0JCX0KLQkJaWYgKGMgJiAxKSB7Ci0JCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJaWYgKHIpIHsKLQkJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBwYWNrZXQzICVkXG4iLAotCQkJCQkgIHBrdC0+b3Bjb2RlKTsKLQkJCQlyMTAwX2NzX2R1bXBfcGFja2V0KHAsIHBrdCk7Ci0JCQkJcmV0dXJuIHI7Ci0JCQl9Ci0JCQlpYltpZHgrMV0gPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5yb2JqID0gcmVsb2MtPnJvYmo7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSA9IGliX2NodW5rLT5rZGF0YVtpZHhdID4+IDg7Ci0JCQl0cmFjay0+YXJyYXlzW2kgKyAwXS5lc2l6ZSAmPSAweDdGOwotCQl9CisJCXIgPSByMTAwX3BhY2tldDNfbG9hZF92YnBudHIocCwgcGt0LCBpZHgpOworCQlpZiAocikKKwkJCXJldHVybiByOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfSU5EWF9CVUZGRVI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xMTQ3LDcgKzEwMTEsNyBAQAogCQkJcjEwMF9jc19kdW1wX3BhY2tldChwLCBwa3QpOwogCQkJcmV0dXJuIHI7CiAJCX0KLQkJaWJbaWR4KzFdID0gaWJfY2h1bmstPmtkYXRhW2lkeCsxXSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOworCQlpYltpZHgrMV0gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrX3BrdDNfaW5keF9idWZmZXIocCwgcGt0LCByZWxvYy0+cm9iaik7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKQEAgLTExNTgsMTEgKzEwMjIsMTEgQEAKIAkJLyogTnVtYmVyIG9mIGR3b3JkcyBpcyB2dHhfc2l6ZSAqIChudW1fdmVydGljZXMgLSAxKQogCQkgKiBQUklNX1dBTEsgbXVzdCBiZSBlcXVhbCB0byAzIHZlcnRleCBkYXRhIGluIGVtYmVkZGVkCiAJCSAqIGluIGNtZCBzdHJlYW0gKi8KLQkJaWYgKCgoaWJfY2h1bmstPmtkYXRhW2lkeCsxXSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpID4+IDQpICYgMHgzKSAhPSAzKSB7CiAJCQlEUk1fRVJST1IoIlBSSU1fV0FMSyBtdXN0IGJlIDMgZm9yIElNTUQgZHJhd1xuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4KzFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQl0cmFjay0+aW1tZF9kd29yZHMgPSBwa3QtPmNvdW50IC0gMTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewpAQCAtMTE3MywxMSArMTAzNywxMSBAQAogCQkvKiBOdW1iZXIgb2YgZHdvcmRzIGlzIHZ0eF9zaXplICogKG51bV92ZXJ0aWNlcyAtIDEpCiAJCSAqIFBSSU1fV0FMSyBtdXN0IGJlIGVxdWFsIHRvIDMgdmVydGV4IGRhdGEgaW4gZW1iZWRkZWQKIAkJICogaW4gY21kIHN0cmVhbSAqLwotCQlpZiAoKChpYl9jaHVuay0+a2RhdGFbaWR4XSA+PiA0KSAmIDB4MykgIT0gMykgeworCQlpZiAoKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCkgPj4gNCkgJiAweDMpICE9IDMpIHsKIAkJCURSTV9FUlJPUigiUFJJTV9XQUxLIG11c3QgYmUgMyBmb3IgSU1NRCBkcmF3XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXRyYWNrLT5pbW1kX2R3b3JkcyA9IHBrdC0+Y291bnQ7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKQEAgLTExODUsMjggKzEwNDksMjggQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19WQlVGOgotCQl0cmFjay0+dmFwX3ZmX2NudGwgPSBpYl9jaHVuay0+a2RhdGFbaWR4ICsgMV07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMSk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM18zRF9EUkFXX1ZCVUZfMjoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeF07CisJCXRyYWNrLT52YXBfdmZfY250bCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAkJciA9IHIxMDBfY3NfdHJhY2tfY2hlY2socC0+cmRldiwgdHJhY2spOwogCQlpZiAocikgewogCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzXzNEX0RSQVdfSU5EWDoKLQkJdHJhY2stPnZhcF92Zl9jbnRsID0gaWJfY2h1bmstPmtkYXRhW2lkeCArIDFdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOwogCQlyID0gcjEwMF9jc190cmFja19jaGVjayhwLT5yZGV2LCB0cmFjayk7CiAJCWlmIChyKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfM0RfRFJBV19JTkRYXzI6Ci0JCXRyYWNrLT52YXBfdmZfY250bCA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCQl0cmFjay0+dmFwX3ZmX2NudGwgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CiAJCXIgPSByMTAwX2NzX3RyYWNrX2NoZWNrKHAtPnJkZXYsIHRyYWNrKTsKIAkJaWYgKHIpIHsKIAkJCXJldHVybiByOwpAQCAtMTI2NSwxMiArMTEyOSw2IEBACiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm1fc2l6ZSA9IEFSUkFZX1NJWkUocjMwMF9yZWdfc2FmZV9ibSk7CiB9CiAKLWludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JcjMwMF9zZXRfcmVnX3NhZmUocmRldik7Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgcjMwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKQEAgLTEzMDQsMyArMTE2MiwxOTggQEAKIAkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CiAJcjEwMF9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogfQorCit2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CisJLyogV2UgbmVlZCB0byBmb3JjZSBvbiBzb21lIG9mIHRoZSBibG9jayAqLworCXRtcCA9IFJSRUczMl9QTEwoUl8wMDAwMERfU0NMS19DTlRMKTsKKwl0bXAgfD0gU18wMDAwMERfRk9SQ0VfQ1AoMSkgfCBTXzAwMDAwRF9GT1JDRV9WSVAoMSk7CisJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM1MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWMzgwKSkKKwkJdG1wIHw9IFNfMDAwMDBEX0ZPUkNFX1ZBUCgxKTsKKwlXUkVHMzJfUExMKFJfMDAwMDBEX1NDTEtfQ05UTCwgdG1wKTsKK30KKworc3RhdGljIGludCByMzAwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyMzAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyMzAwX2dwdV9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCisJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0kpIHsKKwkJciA9IHIxMDBfcGNpX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcjEwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByMzAwX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBNYWtlIHN1ciBHQVJUIGFyZSBub3Qgd29ya2luZyAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogcG9zdCAqLworCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXIzMDBfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwlyZXR1cm4gcjMwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcjEwMF9pcnFfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSSkKKwkJcjEwMF9wY2lfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHIzMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMzAwX3N1c3BlbmQocmRldik7CisJcjEwMF9jcF9maW5pKHJkZXYpOworCXIxMDBfd2JfZmluaShyZGV2KTsKKwlyMTAwX2liX2ZpbmkocmRldik7CisJcmFkZW9uX2dlbV9maW5pKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQlyMTAwX3BjaV9nYXJ0X2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJLyogRGlzYWJsZSBWR0EgKi8KKwlyMTAwX3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgY29tYmlvcyBmb3IgUlM0MDAvUlM0ODAgR1BVXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJciA9IHJhZGVvbl9jb21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsCisJCQkiR1BVIHJlc2V0IGZhaWxlZCAhICgweEU0MD0weCUwOFgsIDB4N0MwPTB4JTA4WClcbiIsCisJCQlSUkVHMzIoUl8wMDBFNDBfUkJCTV9TVEFUVVMpLAorCQkJUlJFRzMyKFJfMDAwN0MwX0NQX1NUQVQpKTsKKwl9CisJLyogY2hlY2sgaWYgY2FyZHMgYXJlIHBvc3RlZCBvciBub3QgKi8KKwlpZiAoIXJhZGVvbl9jYXJkX3Bvc3RlZChyZGV2KSAmJiByZGV2LT5iaW9zKSB7CisJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOworCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7CisJfQorCS8qIFNldCBhc2ljIGVycmF0YSAqLworCXIzMDBfZXJyYXRhKHJkZXYpOworCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXIzMDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKKwkJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKSB7CisJCXIgPSByMTAwX3BjaV9nYXJ0X2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByMzAwX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcjMwMF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJKQorCQkJcjEwMF9wY2lfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwZC5oCmluZGV4IGQ0ZmEzZWIuLjRjNzMxMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBkLmgKQEAgLTk2LDYgKzk2LDIxMSBAQAogI2RlZmluZSAgIFNfMDAwMTcwX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAwMDE3MF9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCiAjZGVmaW5lICAgQ18wMDAxNzBfQUdQX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKIAogCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCmluZGV4IDQ5YTJmZGMuLjFjZWZkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jCkBAIC0xNTUsNiArMTU1LDkgQEAKIHN0YXRpYyB2b2lkIHI0MjBfY2xvY2tfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBzY2xrX2NudGw7CisKKwlpZiAocmFkZW9uX2R5bmNsa3MgIT0gLTEgJiYgcmFkZW9uX2R5bmNsa3MpCisJCXJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcocmRldiwgMSk7CiAJc2Nsa19jbnRsID0gUlJFRzMyX1BMTChSXzAwMDAwRF9TQ0xLX0NOVEwpOwogCXNjbGtfY250bCB8PSBTXzAwMDAwRF9GT1JDRV9DUCgxKSB8IFNfMDAwMDBEX0ZPUkNFX1ZJUCgxKTsKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUjQyMCkKQEAgLTE2Nyw2ICsxNzAsOCBAQAogCWludCByOwogCiAJcjMwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayAqLworCXI0MjBfY2xvY2tfcmVzdW1lKHJkZXYpOwogCS8qIEluaXRpYWxpemUgR0FSVCAoaW5pdGlhbGl6ZSBhZnRlciBUVE0gc28gd2UgY2FuIGFsbG9jYXRlCiAJICogbWVtb3J5IHRocm91Z2ggVFRNIGJ1dCBmaW5hbGl6ZSBhZnRlciBUVE0pICovCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKQEAgLTI2Nyw3ICsyNzIsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJLyogSW5pdGlhbGl6ZSBzY3JhdGNoIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwpAQCAtMzA3LDYgKzMxMSw4IEBACiAJfQogCS8qIEluaXRpYWxpemUgY2xvY2tzICovCiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOwogCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwogCXIzMDBfdnJhbV9pbmZvKHJkZXYpOwogCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjBkLmgKaW5kZXggYTQ4YTdkYi4uZmM3OGQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMGQuaApAQCAtMjEyLDkgKzIxMiw5IEBACiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0UyKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9FMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCi0jZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQotI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1NFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKLSNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9TRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX1ZBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9WQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCiAjZGVmaW5lICAgU18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQogI2RlZmluZSAgIEdfMDAwMDBEX0ZPUkNFX0lEQ1QoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKICNkZWZpbmUgICBDXzAwMDAwRF9GT1JDRV9JRENUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCkBAIC0yMjQsMjQgKzIyNCwyNCBAQAogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NSKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1BYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RYKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1JCKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfUkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1VTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1RWX1NDTEsoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfVFZfU0NMSyAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgotI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVQlBJQyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKLSNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCi0jZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1VCUElDICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX1NVKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfU1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgogI2RlZmluZSAgIFNfMDAwMDBEX0ZPUkNFX09WMCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKICNkZWZpbmUgICBHXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCiAjZGVmaW5lICAgQ18wMDAwMERfRk9SQ0VfT1YwICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCmluZGV4IGUxZDVlMDMuLjdiYWE3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKQEAgLTM4NCw5ICszODQsMTYgQEAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9USUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMCkKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxR1JQSF9NQUNST19BRERSRVNTX01PREUgICAgICAgICAgICAgICAgICAoMSA8PCAyMSkKIAorLyogVGhlIFI3eHggKl9ISUdIIHN1cmZhY2UgcmVncyBhcmUgYmFja3dhcmRzOyB0aGUgRDEgcmVncyBhcmUgaW4gdGhlIEQyCisgKiBibG9jayBhbmQgdmljZSB2ZXJzYS4gIFRoaXMgYXBwbGllcyB0byBHUlBILCBDVVIsIGV0Yy4KKyAqLwogI2RlZmluZSBBVklWT19EMUdSUEhfTFVUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEwOAogI2RlZmluZSBBVklWT19EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgIDB4NjExMAorI2RlZmluZSBSNzAwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjkxNAorI2RlZmluZSBSNzAwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAgICAgICAgICAgIDB4NjExNAogI2RlZmluZSBBVklWT19EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgICAgICAgICAgICAgIDB4NjExOAorI2RlZmluZSBSNzAwX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjkxYworI2RlZmluZSBSNzAwX0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjExYwogI2RlZmluZSBBVklWT19EMUdSUEhfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyMAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyNAogI2RlZmluZSBBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjEyOApAQCAtNDA0LDYgKzQxMSw4IEBACiAjICAgICAgIGRlZmluZSBBVklWT19EMUNVUlNPUl9NT0RFX01BU0sgICAgICAgICAoMyA8PCA4KQogIyAgICAgICBkZWZpbmUgQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCAgICAgICAgMgogI2RlZmluZSBBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgMHg2NDA4CisjZGVmaW5lIFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAweDZjMGMKKyNkZWZpbmUgUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCAgICAgICAgIDB4NjQwYwogI2RlZmluZSBBVklWT19EMUNVUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHg2NDEwCiAjZGVmaW5lIEFWSVZPX0QxQ1VSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAweDY0MTQKICNkZWZpbmUgQVZJVk9fRDFDVVJfSE9UX1NQT1QgICAgICAgICAgICAgICAgICAgIDB4NjQxOApAQCAtNDQ1LDYgKzQ1NCw4IEBACiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTICAgICAgICAgICAgICAweDY1MzQKICMgICAgICAgZGVmaW5lIEFWSVZPX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICgxIDw8IDQpCiAjZGVmaW5lIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQgICAgICAgICAgICAweDY1MzgKKyNkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVRVUyAgICAgICAgICAgICAgIDB4NjUzYworIyAgICAgICBkZWZpbmUgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVQgICAgICAgICAgKDEgPDwgMTIpCiAjZGVmaW5lIEFWSVZPX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDY1NDAKICMgICAgICAgZGVmaW5lIEFWSVZPX0QxTU9ERV9JTlRfTUFTSyAgICAgICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBBVklWT19EMk1PREVfSU5UX01BU0sgICAgICAgICAgICAoMSA8PCA4KQpAQCAtNTAyLDYgKzUxMyw3IEBACiAKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgIDB4NmQzNAogI2RlZmluZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EICAgICAgICAgICAgMHg2ZDM4CisjZGVmaW5lIEFWSVZPX0QyTU9ERV9WTElORV9TVEFUVVMgICAgICAgICAgICAgICAweDZkM2MKICNkZWZpbmUgQVZJVk9fRDJNT0RFX1ZJRVdQT1JUX1NUQVJUICAgICAgICAgICAgIDB4NmQ4MAogI2RlZmluZSBBVklWT19EMk1PREVfVklFV1BPUlRfU0laRSAgICAgICAgICAgICAgMHg2ZDg0CiAjZGVmaW5lIEFWSVZPX0QyTU9ERV9FWFRfT1ZFUlNDQU5fTEVGVF9SSUdIVCAgICAweDZkODgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggZDRiMGI5ZC4uZjc0MzUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTI2LDEwOCArMjYsMTMgQEAKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLwogI2luY2x1ZGUgImRybVAuaCIKLSNpbmNsdWRlICJyYWRlb25fcmVnLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAiYXRvbS5oIgorI2luY2x1ZGUgInI1MjBkLmgiCiAKLS8qIHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHI1MjAscnY1MzAscnY1NjAscnY1NzAscjU4MCAqLwogCi0vKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvOgotICogcjUyMCxydjUzMCxydjU2MCxydjU3MCxyNTgwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLwotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcjUyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0JaWYgKHJ2NTE1X2RlYnVnZnNfcGlwZXNfaW5mb19pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgcGlwZXMgIVxuIik7Ci0JfQotCWlmIChydjUxNV9kZWJ1Z2ZzX2dhX2luZm9faW5pdChyZGV2KSkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIHBpcGVzICFcbiIpOwotCX0KLQotCXI1MjBfZ3B1X2luaXQocmRldik7Ci0JcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gRGlzYWJsaW5nIEFHUFxuIik7Ci0JCQlyZGV2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKLQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUjUyMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUjUyMF9NQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKFI1MjBfTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQkJdG1wID0gUkVHX1NFVChSNTIwX01DX0FHUF9UT1AsIHRtcCA+PiAxNik7Ci0JCXRtcCB8PSBSRUdfU0VUKFI1MjBfTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoUjUyMF9NQ19BR1BfTE9DQVRJT04sIHRtcCk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSk7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JCVdSRUczMl9NQyhSNTIwX01DX0FHUF9CQVNFLCAwKTsKLQkJV1JFRzMyX01DKFI1MjBfTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIHI1MjBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQotaW50IHI1MjBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcjUyMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGk7CiAJdWludDMyX3QgdG1wOwpAQCAtMTQzLDEyICs0OCwxMiBAQAogCXJldHVybiAtMTsKIH0KIAotdm9pZCByNTIwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcjUyMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwogCiAJcjEwMF9oZHBfcmVzZXQocmRldik7Ci0JcnM2MDBfZGlzYWJsZV92Z2EocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogCS8qCiAJICogRFNUX1BJUEVfQ09ORklHCQkweDE3MEMKIAkgKiBHQl9USUxFX0NPTkZJRwkJMHg0MDE4CkBAIC0xODYsMTAgKzkxLDYgQEAKIAl9CiB9CiAKLQotLyoKLSAqIFZSQU0gaW5mbwotICovCiBzdGF0aWMgdm9pZCByNTIwX3ZyYW1fZ2V0X3R5cGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDMyX3QgdG1wOwpAQCAtMjMzLDcgKzEzNCwxNjkgQEAKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwogfQogCi12b2lkIHI1MjBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjUyMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUocmRldik7CisJc3RydWN0IHJ2NTE1X21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisKKwkvKiBXYWl0IGZvciBtYyBpZGxlICovCisJaWYgKHI1MjBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisJLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCisJV1JFRzMyKFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7CisJLyogUHJvZ3JhbSBNQywgc2hvdWxkIGJlIGEgMzJiaXRzIGxpbWl0ZWQgYWRkcmVzcyBzcGFjZSAqLworCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiwKKwkJCVNfMDAwMDA0X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJCVNfMDAwMDA0X01DX0ZCX1RPUChyZGV2LT5tYy52cmFtX2VuZCA+PiAxNikpOworCVdSRUczMihSXzAwMDEzNF9IRFBfRkJfTE9DQVRJT04sCisJCVNfMDAwMTM0X0hEUF9GQl9TVEFSVChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDE2KSk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLAorCQkJU18wMDAwMDVfTUNfQUdQX1NUQVJUKHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDVfTUNfQUdQX1RPUChyZGV2LT5tYy5ndHRfZW5kID4+IDE2KSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNl9BR1BfQkFTRSwgbG93ZXJfMzJfYml0cyhyZGV2LT5tYy5hZ3BfYmFzZSkpOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwKKwkJCVNfMDAwMDA3X0FHUF9CQVNFX0FERFJfMih1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSkpOworCX0gZWxzZSB7CisJCVdSRUczMl9NQyhSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04sIDB4RkZGRkZGRkYpOworCQlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCQlXUkVHMzJfTUMoUl8wMDAwMDdfQUdQX0JBU0VfMiwgMCk7CisJfQorCisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKK30KKworc3RhdGljIGludCByNTIwX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyNTIwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcjUyMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHI1MjBfc3RhcnR1cChyZGV2KTsKK30KKworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXI1MjBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnY1MTVfZGVidWdmcyhyZGV2KTsKKwkvKiBGZW5jZSBkcml2ZXIgKi8KKwlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2lycV9rbXNfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogTWVtb3J5IG1hbmFnZXIgKi8KKwlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gcnYzNzBfcGNpZV9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcjUyMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJ2NTE1X3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJ2MzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MjBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhZjYxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMGQuaApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SNTIwRF9IX18KKyNkZWZpbmUgX19SNTIwRF9IX18KKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDBFNDBfUkJCTV9ISUJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCQk1fSElCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDBFNDBfU0tJRF9DRkJVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1NLSURfQ0ZCVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX1ZGX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9WRl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworCisjZGVmaW5lIFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAwMDRfTUNfRkJfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkZGRgorI2RlZmluZSBSXzAwMDAwNV9NQ19BR1BfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAweDAwMDAwNQorI2RlZmluZSAgIFNfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA1X01DX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDZfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDYKKyNkZWZpbmUgICBTXzAwMDAwNl9BR1BfQkFTRV9BRERSKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDA2X0FHUF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwMDdfQUdQX0JBU0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDcKKyNkZWZpbmUgICBTXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwN19BR1BfQkFTRV9BRERSXzIoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDAwN19BR1BfQkFTRV9BRERSXzIgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwppbmRleCBlYWIzMWMxLi4yNzhmNjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYwpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9tb2RlLmgiCiAjaW5jbHVkZSAicjYwMGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUEZQX1VDT0RFX1NJWkUgNTc2CiAjZGVmaW5lIFBNNF9VQ09ERV9TSVpFIDE3OTIKQEAgLTY1LDE2ICs2NSwxMSBAQAogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiByNjAwLHJ2NjEwLHJ2NjMwLHJ2NjIwLHJ2NjM1LHJ2NjcwCi0gKgotICogU29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgbWlnaHQgYmUgdXNlZCBieSBuZXdlciBBU0lDcy4KLSAqLworLyogcjYwMCxydjYxMCxydjYzMCxydjYyMCxydjYzNSxydjY3MCAqLwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHI2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KIC8qCiAgKiBSNjAwIFBDSUUgR0FSVAogICovCkBAIC0xNjgsNyArMTYzLDcgQEAKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TRU1fQ05UTCwgdG1wIHwgRU5BQkxFX1NFTUFQSE9SRV9NT0RFKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOwotCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAocmRldi0+bWMuZ3R0X2VuZCAtIDEpID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCByZGV2LT5nYXJ0LnRhYmxlX2FkZHIgPj4gMTIpOwogCVdSRUczMihWTV9DT05URVhUMF9DTlRMLCBFTkFCTEVfQ09OVEVYVCB8IFBBR0VfVEFCTEVfREVQVEgoMCkgfAogCQkJCVJBTkdFX1BST1RFQ1RJT05fRkFVTFRfRU5BQkxFX0RFRkFVTFQpOwpAQCAtMjI1LDYgKzIyMCw0MCBAQAogCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiB9CiAKK3ZvaWQgcjYwMF9hZ3BfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUXzAoMCkgfCBCQU5LX1NFTEVDVF8xKDEpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSkgfAorCQlFTkFCTEVfV0FJVF9MMl9RVUVSWTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9TWVNfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9SRF9IRFBfQ05UTCwgdG1wIHwgRU5BQkxFX0wxX1NUUklDVF9PUkRFUklORyk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfSERQX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfUkRfQV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNEX1dSX0FfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DRF9SRF9CX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0RfV1JfQl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1dSX0dGWF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9MMV9UTEJfTUNCX1JEX1BETUFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTDFfVExCX01DQl9XUl9QRE1BX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfUkRfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJV1JFRzMyKE1DX1ZNX0wxX1RMQl9NQ0JfV1JfU0VNX0NOVEwsIHRtcCB8IEVOQUJMRV9TRU1BUEhPUkVfTU9ERSk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKwogaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwpAQCAtMjQwLDE0ICsyNjksOSBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgcjYwMF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgdm9pZCByNjAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CiAJdTMyIHRtcDsKIAlpbnQgaSwgajsKIApAQCAtMjYxLDk5ICsyODUsNjQgQEAKIAl9CiAJV1JFRzMyKEhEUF9SRUdfQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApOwogCi0JZDF2Z2FfY29udHJvbCA9IFJSRUczMihEMVZHQV9DT05UUk9MKTsKLQlkMnZnYV9jb250cm9sID0gUlJFRzMyKEQyVkdBX0NPTlRST0wpOwotCXZnYV9yZW5kZXJfY29udHJvbCA9IFJSRUczMihWR0FfUkVOREVSX0NPTlRST0wpOwotCXZnYV9oZHBfY29udHJvbCA9IFJSRUczMihWR0FfSERQX0NPTlRST0wpOwotCWQxY3J0Y19jb250cm9sID0gUlJFRzMyKEQxQ1JUQ19DT05UUk9MKTsKLQlkMmNydGNfY29udHJvbCA9IFJSRUczMihEMkNSVENfQ09OVFJPTCk7Ci0Jb2xkX3ZyYW1fc3RhcnQgPSAodTY0KShSUkVHMzIoTUNfVk1fRkJfTE9DQVRJT04pICYgMHhGRkZGKSA8PCAyNDsKLQluZXdfZDFncnBoX3ByaW1hcnkgPSBSUkVHMzIoRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDFncnBoX3NlY29uZGFyeSA9IFJSRUczMihEMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQluZXdfZDFncnBoX3NlY29uZGFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QyZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCi0JLyogU3RvcCBhbGwgdmlkZW8gKi8KLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQotCW1kZWxheSgxKTsKKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSAoZG9lc24ndCBleGlzdCBiZWZvcmUgUjYwMCkgKi8KIAlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOwotCiAJLyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gKi8KLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKLQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgKHJkZXYtPm1jLnZyYW1fZW5kIC0gMSkgPj4gMTIpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKHJkZXYtPm1jLnZyYW1fc3RhcnQgPCByZGV2LT5tYy5ndHRfc3RhcnQpIHsKKwkJCS8qIFZSQU0gYmVmb3JlIEFHUCAqLworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9lbmQgPj4gMTIpOworCQl9IGVsc2UgeworCQkJLyogVlJBTSBhZnRlciBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJCXJkZXYtPm1jLnZyYW1fZW5kID4+IDEyKTsKKwkJfQorCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKLQlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9TSVpFLCByZGV2LT5tYy5tY192cmFtX3NpemUgfCAweDNGRik7CiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxNik7Ci0JCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAyMik7CisJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMjIpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIDApOwogCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgMHgwRkZGRkZGRik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCAweDBGRkZGRkZGKTsKIAl9Ci0JV1JFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QxZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDJncnBoX3ByaW1hcnkpOwotCVdSRUczMihEMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9zZWNvbmRhcnkpOwotCVdSRUczMihWR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7Ci0KLQkvKiBVbmxvY2sgaG9zdCBhY2Nlc3MgKi8KLQlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCB2Z2FfaGRwX2NvbnRyb2wpOwotCi0JbWRlbGF5KDEpOwogCWlmIChyNjAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiW2RybV0gTUMgbm90IGlkbGUgIVxuIik7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CiAJfQotCi0JLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDEpOwotCVdSRUczMihEMUNSVENfQ09OVFJPTCwgZDFjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgZDJjcnRjX2NvbnRyb2wpOwotCVdSRUczMihEMUNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMkNSVENfVVBEQVRFX0xPQ0ssIDApOwotCVdSRUczMihEMVZHQV9DT05UUk9MLCBkMXZnYV9jb250cm9sKTsKLQlXUkVHMzIoRDJWR0FfQ09OVFJPTCwgZDJ2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgdmdhX3JlbmRlcl9jb250cm9sKTsKLQorCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7CiAJLyogd2UgbmVlZCB0byBvd24gVlJBTSwgc28gdHVybiBvZmYgdGhlIFZHQSByZW5kZXJlciBoZXJlCiAJICogdG8gc3RvcCBpdCBvdmVyd3JpdGluZyBvdXIgb2JqZWN0cyAqLwotCXJhZGVvbl9hdml2b192Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCiBpbnQgcjYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKIAl1MzIgdG1wOwotCWludCBjaGFuc2l6ZTsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKIAl0bXAgPSBSUkVHMzIoUkFNQ0ZHKTsKIAlpZiAodG1wICYgQ0hBTlNJWkVfT1ZFUlJJREUpIHsKQEAgLTM2MywyMyArMzUyLDM2IEBACiAJfSBlbHNlIHsKIAkJY2hhbnNpemUgPSAzMjsKIAl9Ci0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1I2MDApIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDggKiBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNjcwKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSA0ICogY2hhbnNpemU7Ci0JfSBlbHNlIGlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8Ci0JCQkocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MjApKSB7Ci0JCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBjaGFuc2l6ZTsKLQl9IGVsc2UgaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzMCkgfHwKLQkJCShyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYzNSkpIHsKLQkJcmRldi0+bWMudnJhbV93aWR0aCA9IDIgKiBjaGFuc2l6ZTsKKwl0bXAgPSBSUkVHMzIoQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKIAl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC00MDcsNDAgKzQwOSwzNCBAQAogCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwIHx8IHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgotCQkJCQkJCQkweEZGRkYpIDw8IDI0OwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKLQkJCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KLQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKLQkJCQkgKiBnYXJ0IHNpemUKLQkJCQkgKi8KLQkJCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7Ci0JCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKLQkJCQl9IGVsc2UgewotCQkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSB0bXA7Ci0JCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOwotCQkJCX0KLQkJCX0KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CisJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmCisJCQkJCQkJMHhGRkZGKSA8PCAyNDsKKwkJdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLmd0dF9zaXplKSB7CisJCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQl9IGVsc2UgaWYgKHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKKwkJCS8qIEVub3VnaCBwbGFjZSBiZWZvcmUgdnJhbSAqLworCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKIAkJfSBlbHNlIHsKLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJhZGVvbl9nYXJ0X3NpemUgKiAxMDI0ICogMTAyNDsKKwkJCS8qIE5vdCBlbm91Z2ggcGxhY2UgYWZ0ZXIgb3IgYmVmb3JlIHNocmluaworCQkJICogZ2FydCBzaXplCisJCQkgKi8KKwkJCWlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID4gKDB4RkZGRkZGRkZVTCAtIHRtcCkpIHsKKwkJCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAwOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJCX0gZWxzZSB7CisJCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCQkJCXJkZXYtPm1jLmd0dF9zaXplID0gMHhGRkZGRkZGRlVMIC0gdG1wOworCQkJfQogCQl9CisJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKIAl9CiAJcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplOworCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7CiAJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZTsKKwlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTQ1Niw2ICs0NTIsNyBAQAogICovCiBpbnQgcjYwMF9ncHVfc29mdF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX2J1c3lfbWFzayA9IFNfMDA4MDEwX1ZDX0JVU1koMSkgfCBTXzAwODAxMF9WR1RfQlVTWV9OT19ETUEoMSkgfAogCQkJCVNfMDA4MDEwX1ZHVF9CVVNZKDEpIHwgU18wMDgwMTBfVEEwM19CVVNZKDEpIHwKIAkJCQlTXzAwODAxMF9UQ19CVVNZKDEpIHwgU18wMDgwMTBfU1hfQlVTWSgxKSB8CkBAIC00NzMsMTMgKzQ3MCwyNSBAQAogCQkJU18wMDgwMTRfQ0IwX0JVU1koMSkgfCBTXzAwODAxNF9DQjFfQlVTWSgxKSB8CiAJCQlTXzAwODAxNF9DQjJfQlVTWSgxKSB8IFNfMDA4MDE0X0NCM19CVVNZKDEpOwogCXUzMiBzcmJtX3Jlc2V0ID0gMDsKKwl1MzIgdG1wOwogCisJZGV2X2luZm8ocmRldi0+ZGV2LCAiR1BVIHNvZnRyZXNldCBcbiIpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMTBfR1JCTV9TVEFUVVM9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTBfR1JCTV9TVEFUVVMpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDE0X0dSQk1fU1RBVFVTMj0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDAwRTUwX1NSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOworCX0KIAkvKiBEaXNhYmxlIENQIHBhcnNpbmcvcHJlZmV0Y2hpbmcgKi8KIAlXUkVHMzIoUl8wMDg2RDhfQ1BfTUVfQ05UTCwgU18wMDg2RDhfQ1BfTUVfSEFMVCgweGZmKSk7CiAJLyogQ2hlY2sgaWYgYW55IG9mIHRoZSByZW5kZXJpbmcgYmxvY2sgaXMgYnVzeSBhbmQgcmVzZXQgaXQgKi8KIAlpZiAoKFJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykgJiBncmJtX2J1c3lfbWFzaykgfHwKIAkgICAgKFJSRUczMihSXzAwODAxNF9HUkJNX1NUQVRVUzIpICYgZ3JibTJfYnVzeV9tYXNrKSkgewotCQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NSKDEpIHwKKwkJdG1wID0gU18wMDgwMjBfU09GVF9SRVNFVF9DUigxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX0RCKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfQ0IoMSkgfAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9QQSgxKSB8CkBAIC00OTEsMTQgKzUwMCwxOCBAQAogCQkJU18wMDgwMjBfU09GVF9SRVNFVF9UQygxKSB8CiAJCQlTXzAwODAyMF9TT0ZUX1JFU0VUX1RBKDEpIHwKIAkJCVNfMDA4MDIwX1NPRlRfUkVTRVRfVkMoMSkgfAotCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSkpOworCQkJU18wMDgwMjBfU09GVF9SRVNFVF9WR1QoMSk7CisJCWRldl9pbmZvKHJkZXYtPmRldiwgIiAgUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUPTB4JTA4WFxuIiwgdG1wKTsKKwkJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkJKHZvaWQpUlJFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCk7CiAJCXVkZWxheSg1MCk7CiAJCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwogCQkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl9CiAJLyogUmVzZXQgQ1AgKHdlIGFsd2F5cyByZXNldCBDUCkgKi8KLQlXUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VULCBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpKTsKKwl0bXAgPSBTXzAwODAyMF9TT0ZUX1JFU0VUX0NQKDEpOworCWRldl9pbmZvKHJkZXYtPmRldiwgIlJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVD0weCUwOFhcbiIsIHRtcCk7CisJV1JFRzMyKFJfMDA4MDIwX0dSQk1fU09GVF9SRVNFVCwgdG1wKTsKIAkodm9pZClSUkVHMzIoUl8wMDgwMjBfR1JCTV9TT0ZUX1JFU0VUKTsKIAl1ZGVsYXkoNTApOwogCVdSRUczMihSXzAwODAyMF9HUkJNX1NPRlRfUkVTRVQsIDApOwpAQCAtNTI2LDYgKzUzOSwxNCBAQAogCQlzcmJtX3Jlc2V0IHw9IFNfMDAwRTYwX1NPRlRfUkVTRVRfUkxDKDEpOwogCWlmIChHXzAwMEU1MF9TRU1fQlVTWShSUkVHMzIoUl8wMDBFNTBfU1JCTV9TVEFUVVMpKSkKIAkJc3JibV9yZXNldCB8PSBTXzAwMEU2MF9TT0ZUX1JFU0VUX1NFTSgxKTsKKwlpZiAoR18wMDBFNTBfQklGX0JVU1koUlJFRzMyKFJfMDAwRTUwX1NSQk1fU1RBVFVTKSkpCisJCXNyYm1fcmVzZXQgfD0gU18wMDBFNjBfU09GVF9SRVNFVF9CSUYoMSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQ9MHglMDhYXG4iLCBzcmJtX3Jlc2V0KTsKKwlXUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VULCBzcmJtX3Jlc2V0KTsKKwkodm9pZClSUkVHMzIoUl8wMDBFNjBfU1JCTV9TT0ZUX1JFU0VUKTsKKwl1ZGVsYXkoNTApOworCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIDApOworCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCVdSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQsIHNyYm1fcmVzZXQpOwogCSh2b2lkKVJSRUczMihSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQpOwogCXVkZWxheSg1MCk7CkBAIC01MzMsNiArNTU0LDE3IEBACiAJKHZvaWQpUlJFRzMyKFJfMDAwRTYwX1NSQk1fU09GVF9SRVNFVCk7CiAJLyogV2FpdCBhIGxpdHRsZSBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duICovCiAJdWRlbGF5KDUwKTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICIgIFJfMDA4MDEwX0dSQk1fU1RBVFVTPTB4JTA4WFxuIiwKKwkJUlJFRzMyKFJfMDA4MDEwX0dSQk1fU1RBVFVTKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxNF9HUkJNX1NUQVRVUzI9MHglMDhYXG4iLAorCQlSUkVHMzIoUl8wMDgwMTRfR1JCTV9TVEFUVVMyKSk7CisJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwMEU1MF9TUkJNX1NUQVRVUz0weCUwOFhcbiIsCisJCVJSRUczMihSXzAwMEU1MF9TUkJNX1NUQVRVUykpOworCS8qIEFmdGVyIHJlc2V0IHdlIG5lZWQgdG8gcmVpbml0IHRoZSBhc2ljIGFzIEdQVSBvZnRlbiBlbmR1cCBpbiBhbgorCSAqIGluY29oZXJlbnQgc3RhdGUuCisJICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJcnY1MTVfbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODI2LDcgKzg1OCw4IEBACiAJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjMwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYxMCkgfHwKIAkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MjApIHx8Ci0JICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSkgeworCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkgfHwKKwkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM4ODApKSB7CiAJCVdSRUczMihEQl9ERUJVRywgUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOwogCX0gZWxzZSB7CiAJCVdSRUczMihEQl9ERUJVRywgMCk7CkBAIC04NDMsNyArODc2LDggQEAKIAl0bXAgPSBSUkVHMzIoU1FfTVNfRklGT19TSVpFUyk7CiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJdG1wID0gKENBQ0hFX0ZJRk9fU0laRSgweGEpIHwKIAkJICAgICAgIEZFVENIX0ZJRk9fSElXQVRFUigweGEpIHwKIAkJICAgICAgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKQEAgLTg4Niw3ICs5MjAsOCBAQAogCQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMoMCkpOwogCX0gZWxzZSBpZiAoKChyZGV2LT5mYW1pbHkpID09IENISVBfUlY2MTApIHx8CiAJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjIwKSB8fAotCQkgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApIHx8CisJCSAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTODgwKSkgewogCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KIAkJc3FfY29uZmlnICY9IH5WQ19FTkFCTEU7CiAKQEAgLTk0Myw3ICs5NzgsOCBAQAogCiAJaWYgKCgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JWNjEwKSB8fAogCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SVjYyMCkgfHwKLQkgICAgKChyZGV2LT5mYW1pbHkpID09IENISVBfUlM3ODApKSB7CisJICAgICgocmRldi0+ZmFtaWx5KSA9PSBDSElQX1JTNzgwKSB8fAorCSAgICAoKHJkZXYtPmZhbWlseSkgPT0gQ0hJUF9SUzg4MCkpIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKSk7CiAJfSBlbHNlIHsKIAkJV1JFRzMyKFZHVF9DQUNIRV9JTlZBTElEQVRJT04sIENBQ0hFX0lOVkFMSURBVElPTihWQ19BTkRfVEMpKTsKQEAgLTk2OSw4ICsxMDA1LDkgQEAKIAl0bXAgPSByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMgKiAxNjsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjYxMDoKLQljYXNlIENISVBfUlM3ODA6CiAJY2FzZSBDSElQX1JWNjIwOgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CiAJCXRtcCArPSAzMjsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjcwOgpAQCAtMTAxMSw4ICsxMDQ4LDkgQEAKIAogCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CiAJY2FzZSBDSElQX1JWNjEwOgotCWNhc2UgQ0hJUF9SUzc4MDoKIAljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKIAkJdG1wID0gVENfTDJfU0laRSg4KTsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNjMwOgpAQCAtMTIzNCwxOSArMTI3MiwxNyBAQAogCiAJLyogU2V0IHJpbmcgYnVmZmVyIHNpemUgKi8KIAlyYl9idWZzeiA9IGRybV9vcmRlcihyZGV2LT5jcC5yaW5nX3NpemUgLyA4KTsKKwl0bXAgPSBSQl9OT19VUERBVEUgfCAoZHJtX29yZGVyKFJBREVPTl9HUFVfUEFHRV9TSVpFLzgpIDw8IDgpIHwgcmJfYnVmc3o7CiAjaWZkZWYgX19CSUdfRU5ESUFOCi0JV1JFRzMyKENQX1JCX0NOVEwsIEJVRl9TV0FQXzMyQklUIHwgUkJfTk9fVVBEQVRFIHwKLQkJKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOwotI2Vsc2UKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKGRybV9vcmRlcig0MDk2LzgpIDw8IDgpIHwgcmJfYnVmc3opOworCXRtcCB8PSBCVUZfU1dBUF8zMkJJVDsKICNlbmRpZgorCVdSRUczMihDUF9SQl9DTlRMLCB0bXApOwogCVdSRUczMihDUF9TRU1fV0FJVF9USU1FUiwgMHg0KTsKIAogCS8qIFNldCB0aGUgd3JpdGUgcG9pbnRlciBkZWxheSAqLwogCVdSRUczMihDUF9SQl9XUFRSX0RFTEFZLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KLQl0bXAgPSBSUkVHMzIoQ1BfUkJfQ05UTCk7CiAJV1JFRzMyKENQX1JCX0NOVEwsIHRtcCB8IFJCX1JQVFJfV1JfRU5BKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9XUiwgMCk7CiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwpAQCAtMTM0MywzMiArMTM3OSw0NyBAQAogCXJldHVybiByOwogfQogCi0vKgotICogV3JpdGViYWNrCi0gKi8KLWludCByNjAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlXUkVHMzIoU0NSQVRDSF9VTVNLLCAwKTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7CisJCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKKwl9Cit9CisKK3ZvaWQgcjYwMF93Yl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKKwlpZiAocmRldi0+d2Iud2Jfb2JqKSB7CisJCXJhZGVvbl9vYmplY3RfdW5yZWYoJnJkZXYtPndiLndiX29iaik7CisJCXJkZXYtPndiLndiID0gTlVMTDsKKwkJcmRldi0+d2Iud2Jfb2JqID0gTlVMTDsKKwl9Cit9CisKK2ludCByNjAwX3diX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKIAogCWlmIChyZGV2LT53Yi53Yl9vYmogPT0gTlVMTCkgewotCQlyID0gcmFkZW9uX29iamVjdF9jcmVhdGUocmRldiwgTlVMTCwgNDA5NiwKLQkJCQkJIHRydWUsCi0JCQkJCSBSQURFT05fR0VNX0RPTUFJTl9HVFQsCi0JCQkJCSBmYWxzZSwgJnJkZXYtPndiLndiX29iaik7CisJCXIgPSByYWRlb25fb2JqZWN0X2NyZWF0ZShyZGV2LCBOVUxMLCBSQURFT05fR1BVX1BBR0VfU0laRSwgdHJ1ZSwKKwkJCQlSQURFT05fR0VNX0RPTUFJTl9HVFQsIGZhbHNlLCAmcmRldi0+d2Iud2Jfb2JqKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gY3JlYXRlIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CiAJCQlyZXR1cm4gcjsKIAkJfQotCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLAotCQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCwKLQkJCQkgICAgICAmcmRldi0+d2IuZ3B1X2FkZHIpOworCQlyID0gcmFkZW9uX29iamVjdF9waW4ocmRldi0+d2Iud2Jfb2JqLCBSQURFT05fR0VNX0RPTUFJTl9HVFQsCisJCQkJJnJkZXYtPndiLmdwdV9hZGRyKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gcGluIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCQlyID0gcmFkZW9uX29iamVjdF9rbWFwKHJkZXYtPndiLndiX29iaiwgKHZvaWQgKiopJnJkZXYtPndiLndiKTsKIAkJaWYgKHIpIHsKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFdCIGJ1ZmZlciAoJWQpLlxuIiwgcik7CisJCQlyNjAwX3diX2ZpbmkocmRldik7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KQEAgLTEzNzksMjEgKzE0MzAsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpZiAocmRldi0+d2Iud2Jfb2JqKSB7Ci0JCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPndiLndiX29iaik7Ci0JCXJhZGVvbl9vYmplY3RfdW5waW4ocmRldi0+d2Iud2Jfb2JqKTsKLQkJcmFkZW9uX29iamVjdF91bnJlZigmcmRldi0+d2Iud2Jfb2JqKTsKLQkJcmRldi0+d2Iud2IgPSBOVUxMOwotCQlyZGV2LT53Yi53Yl9vYmogPSBOVUxMOwotCX0KLX0KLQotCi0vKgotICogQ1MKLSAqLwogdm9pZCByNjAwX2ZlbmNlX3JpbmdfZW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CkBAIC0xNDE3LDggKzE0NTMsOCBAQAogCQkgICB1aW50NjRfdCBzcmNfb2Zmc2V0LCB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICB1bnNpZ25lZCBudW1fcGFnZXMsIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogNDA5Nik7Ci0JcjYwMF9rbXNfYmxpdF9jb3B5KHJkZXYsIHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIG51bV9wYWdlcyAqIDQwOTYpOworCXI2MDBfYmxpdF9wcmVwYXJlX2NvcHkocmRldiwgbnVtX3BhZ2VzICogUkFERU9OX0dQVV9QQUdFX1NJWkUpOworCXI2MDBfa21zX2JsaXRfY29weShyZGV2LCBzcmNfb2Zmc2V0LCBkc3Rfb2Zmc2V0LCBudW1fcGFnZXMgKiBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAJcjYwMF9ibGl0X2RvbmVfY29weShyZGV2LCBmZW5jZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDcwLDExICsxNTA2LDE0IEBACiB7CiAJaW50IHI7CiAKLQlyNjAwX2dwdV9yZXNldChyZGV2KTsKLQlyNjAwX21jX3Jlc3VtZShyZGV2KTsKLQlyID0gcjYwMF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwlyNjAwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyNjAwX2FncF9lbmFibGUocmRldik7CisJfSBlbHNlIHsKKwkJciA9IHI2MDBfcGNpZV9nYXJ0X2VuYWJsZShyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTE0OTMsOSArMTUzMiw4IEBACiAJciA9IHI2MDBfY3BfcmVzdW1lKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gcjYwMF93Yl9pbml0KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKKwkvKiB3cml0ZSBiYWNrIGJ1ZmZlciBhcmUgbm90IHZpdGFsIHNvIGRvbid0IHdvcnJ5IGFib3V0IGZhaWx1cmUgKi8KKwlyNjAwX3diX2VuYWJsZShyZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxNywxNSArMTU1NSwxMiBAQAogewogCWludCByOwogCi0JaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKLQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQl9CisJLyogRG8gbm90IHJlc2V0IEdQVSBiZWZvcmUgcG9zdGluZywgb24gcjYwMCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC0xNTM4LDcgKzE1NzMsNyBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJcmV0dXJuIHI7CkBAIC0xNTQ2LDEzICsxNTgxLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLQogaW50IHI2MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KIAlyNjAwX2NwX3N0b3AocmRldik7CiAJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKLQorCXI2MDBfd2JfZGlzYWJsZShyZGV2KTsKIAlyNjAwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKQEAgLTE1NjksNyArMTYwMyw2IEBACiB7CiAJaW50IHI7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gdHJ1ZTsKIAlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNTg2LDggKzE2MTksMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAkvKiBNdXN0IGJlIGFuIEFUT01CSU9TICovCi0JaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpCisJaWYgKCFyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFI2MDAgR1BVXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXIgPSByYWRlb25fYXRvbWJpb3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0xNjAwLDI0ICsxNjM1LDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHI2MDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTY0NiwxMiArMTY3NywxMCBAQAogCiAJciA9IHI2MDBfc3RhcnR1cChyZGV2KTsKIAlpZiAocikgewotCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCQkvKiBSZXRyeSB3aXRoIGRpc2FibGluZyBBR1AgKi8KLQkJCXI2MDBfZmluaShyZGV2KTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmV0dXJuIHI2MDBfaW5pdChyZGV2KTsKLQkJfQorCQlyNjAwX3N1c3BlbmQocmRldik7CisJCXI2MDBfd2JfZmluaShyZGV2KTsKKwkJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwkJcjYwMF9wY2llX2dhcnRfZmluaShyZGV2KTsKIAkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCX0KIAlpZiAocmRldi0+YWNjZWxfd29ya2luZykgewpAQCAtMTY2MCw3ICsxNjg5LDcgQEAKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBJQiBwb29sICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKIAkJfQotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7CisJCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJCWlmIChyKSB7CiAJCQlEUk1fRVJST1IoInJhZGVvbjogZmFpbGxlZCB0ZXN0aW5nIElCICglZCkuXG4iLCByKTsKIAkJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKQEAgLTE2NzYsMTkgKzE3MDUsMTUgQEAKIAogCXI2MDBfYmxpdF9maW5pKHJkZXYpOwogCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJcjYwMF93Yl9maW5pKHJkZXYpOwogCXI2MDBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpCi0JCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOwotCWVsc2UKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKIAlrZnJlZShyZGV2LT5iaW9zKTsKIAlyZGV2LT5iaW9zID0gTlVMTDsKIAlyYWRlb25fZHVtbXlfcGFnZV9maW5pKHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKaW5kZXggZDk4OGVlYy4uNWVhNDMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCkBAIC03NzQsMTEgKzc3NCwxMCBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGNiX2Zvcm1hdCwgdGV4X2Zvcm1hdDsKKwlpbnQgc3gyLCBzeTIsIGR4MiwgZHkyOwogCXU2NCB2Yl9hZGRyOwogCXUzMiAqdmI7CiAKLQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7Ci0KIAlpZiAoKGRldl9wcml2LT5ibGl0X3ZiLT51c2VkICsgNDgpID4gZGV2X3ByaXYtPmJsaXRfdmItPnRvdGFsKSB7CiAKIAkJcjYwMF9ub21tX3B1dF92YihkZXYpOwpAQCAtNzg3LDE5ICs3ODYsMTMgQEAKIAkJCXJldHVybjsKIAogCQlzZXRfc2hhZGVycyhkZXYpOwotCQl2YiA9IHI2MDBfbm9tbV9nZXRfdmJfcHRyKGRldik7CiAJfQorCXZiID0gcjYwMF9ub21tX2dldF92Yl9wdHIoZGV2KTsKIAotCWlmIChjcHAgPT0gNCkgewotCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7Ci0JfSBlbHNlIGlmIChjcHAgPT0gMikgewotCQljYl9mb3JtYXQgPSBDT0xPUl81XzZfNTsKLQkJdGV4X2Zvcm1hdCA9IEZNVF81XzZfNTsKLQl9IGVsc2UgewotCQljYl9mb3JtYXQgPSBDT0xPUl84OwotCQl0ZXhfZm9ybWF0ID0gRk1UXzg7Ci0JfQorCXN4MiA9IHN4ICsgdzsKKwlzeTIgPSBzeSArIGg7CisJZHgyID0gZHggKyB3OworCWR5MiA9IGR5ICsgaDsKIAogCXZiWzBdID0gaTJmKGR4KTsKIAl2YlsxXSA9IGkyZihkeSk7CkBAIC04MDcsMzEgKzgwMCw0NiBAQAogCXZiWzNdID0gaTJmKHN5KTsKIAogCXZiWzRdID0gaTJmKGR4KTsKLQl2Yls1XSA9IGkyZihkeSArIGgpOworCXZiWzVdID0gaTJmKGR5Mik7CiAJdmJbNl0gPSBpMmYoc3gpOwotCXZiWzddID0gaTJmKHN5ICsgaCk7CisJdmJbN10gPSBpMmYoc3kyKTsKIAotCXZiWzhdID0gaTJmKGR4ICsgdyk7Ci0JdmJbOV0gPSBpMmYoZHkgKyBoKTsKLQl2YlsxMF0gPSBpMmYoc3ggKyB3KTsKLQl2YlsxMV0gPSBpMmYoc3kgKyBoKTsKKwl2Yls4XSA9IGkyZihkeDIpOworCXZiWzldID0gaTJmKGR5Mik7CisJdmJbMTBdID0gaTJmKHN4Mik7CisJdmJbMTFdID0gaTJmKHN5Mik7CisKKwlzd2l0Y2goY3BwKSB7CisJY2FzZSA0OgorCQljYl9mb3JtYXQgPSBDT0xPUl84XzhfOF84OworCQl0ZXhfZm9ybWF0ID0gRk1UXzhfOF84Xzg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2JfZm9ybWF0ID0gQ09MT1JfNV82XzU7CisJCXRleF9mb3JtYXQgPSBGTVRfNV82XzU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNiX2Zvcm1hdCA9IENPTE9SXzg7CisJCXRleF9mb3JtYXQgPSBGTVRfODsKKwkJYnJlYWs7CisJfQogCiAJLyogc3JjICovCiAJc2V0X3RleF9yZXNvdXJjZShkZXZfcHJpdiwgdGV4X2Zvcm1hdCwKIAkJCSBzcmNfcGl0Y2ggLyBjcHAsCi0JCQkgc3kgKyBoLCBzcmNfcGl0Y2ggLyBjcHAsCisJCQkgc3kyLCBzcmNfcGl0Y2ggLyBjcHAsCiAJCQkgc3JjX2dwdV9hZGRyKTsKIAogCWNwX3NldF9zdXJmYWNlX3N5bmMoZGV2X3ByaXYsCi0JCQkgICAgUjYwMF9UQ19BQ1RJT05fRU5BLCAoc3JjX3BpdGNoICogKHN5ICsgaCkpLCBzcmNfZ3B1X2FkZHIpOworCQkJICAgIFI2MDBfVENfQUNUSU9OX0VOQSwgc3JjX3BpdGNoICogc3kyLCBzcmNfZ3B1X2FkZHIpOwogCiAJLyogZHN0ICovCiAJc2V0X3JlbmRlcl90YXJnZXQoZGV2X3ByaXYsIGNiX2Zvcm1hdCwKLQkJCSAgZHN0X3BpdGNoIC8gY3BwLCBkeSArIGgsCisJCQkgIGRzdF9waXRjaCAvIGNwcCwgZHkyLAogCQkJICBkc3RfZ3B1X2FkZHIpOwogCiAJLyogc2Npc3NvcnMgKi8KLQlzZXRfc2Npc3NvcnMoZGV2X3ByaXYsIGR4LCBkeSwgZHggKyB3LCBkeSArIGgpOworCXNldF9zY2lzc29ycyhkZXZfcHJpdiwgZHgsIGR5LCBkeDIsIGR5Mik7CiAKIAkvKiBWZXJ0ZXggYnVmZmVyIHNldHVwICovCiAJdmJfYWRkciA9IGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ICsKQEAgLTg0NCw3ICs4NTIsNyBAQAogCiAJY3Bfc2V0X3N1cmZhY2Vfc3luYyhkZXZfcHJpdiwKIAkJCSAgICBSNjAwX0NCX0FDVElPTl9FTkEgfCBSNjAwX0NCMF9ERVNUX0JBU0VfRU5BLAotCQkJICAgIGRzdF9waXRjaCAqIChkeSArIGgpLCBkc3RfZ3B1X2FkZHIpOworCQkJICAgIGRzdF9waXRjaCAqIGR5MiwgZHN0X2dwdV9hZGRyKTsKIAogCWRldl9wcml2LT5ibGl0X3ZiLT51c2VkICs9IDEyICogNDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggYWNhZTMzZS4uZGJmNzE2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjYyMCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzgwKSB8fAotCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlM3ODApIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzg4MCkgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNzEwKSkKIAkJc3FfY29uZmlnID0gMDsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IDMzYjg5Y2QuLjBkODIwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInI2MDBkLmgiCi0jaW5jbHVkZSAiYXZpdm9kLmgiCiAKIHN0YXRpYyBpbnQgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvY19tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKTsKQEAgLTU3LDcgKzU2LDcgQEAKIAkJCSAgaWR4LCBpYl9jaHVuay0+bGVuZ3RoX2R3KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWhlYWRlciA9IGliX2NodW5rLT5rZGF0YVtpZHhdOworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKIAlwa3QtPmlkeCA9IGlkeDsKIAlwa3QtPnR5cGUgPSBDUF9QQUNLRVRfR0VUX1RZUEUoaGVhZGVyKTsKIAlwa3QtPmNvdW50ID0gQ1BfUEFDS0VUX0dFVF9DT1VOVChoZWFkZXIpOwpAQCAtOTgsNyArOTcsNiBAQAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpCiB7Ci0Jc3RydWN0IHJhZGVvbl9jc19jaHVuayAqaWJfY2h1bms7CiAJc3RydWN0IHJhZGVvbl9jc19jaHVuayAqcmVsb2NzX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfcGFja2V0IHAzcmVsb2M7CiAJdW5zaWduZWQgaWR4OwpAQCAtMTA5LDcgKzEwNyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAkqY3NfcmVsb2MgPSBOVUxMOwotCWliX2NodW5rID0gJnAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdOwogCXJlbG9jc19jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfcmVsb2NzX2lkeF07CiAJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZwM3JlbG9jLCBwLT5pZHgpOwogCWlmIChyKSB7CkBAIC0xMjEsNyArMTE4LDcgQEAKIAkJCSAgcDNyZWxvYy5pZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWR4ID0gaWJfY2h1bmstPmtkYXRhW3AzcmVsb2MuaWR4ICsgMV07CisJaWR4ID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBwM3JlbG9jLmlkeCArIDEpOwogCWlmIChpZHggPj0gcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpIHsKIAkJRFJNX0VSUk9SKCJSZWxvY3MgYXQgJWQgYWZ0ZXIgcmVsb2NhdGlvbnMgY2h1bmsgZW5kICVkICFcbiIsCiAJCQkgIGlkeCwgcmVsb2NzX2NodW5rLT5sZW5ndGhfZHcpOwpAQCAtMTQ2LDcgKzE0Myw2IEBACiBzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2Nfbm9tbShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQkJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqKmNzX3JlbG9jKQogewotCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliX2NodW5rOwogCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKnJlbG9jc19jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jOwogCXVuc2lnbmVkIGlkeDsKQEAgLTE1Nyw3ICsxNTMsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJKmNzX3JlbG9jID0gTlVMTDsKLQlpYl9jaHVuayA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKIAlyZWxvY3NfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX3JlbG9jc19pZHhdOwogCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4KTsKIAlpZiAocikgewpAQCAtMTY5LDcgKzE2NCw3IEBACiAJCQkgIHAzcmVsb2MuaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlkeCA9IGliX2NodW5rLT5rZGF0YVtwM3JlbG9jLmlkeCArIDFdOworCWlkeCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgcDNyZWxvYy5pZHggKyAxKTsKIAlpZiAoaWR4ID49IHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KSB7CiAJCURSTV9FUlJPUigiUmVsb2NzIGF0ICVkIGFmdGVyIHJlbG9jYXRpb25zIGNodW5rIGVuZCAlZCAhXG4iLAogCQkJICBpZHgsIHJlbG9jc19jaHVuay0+bGVuZ3RoX2R3KTsKQEAgLTE4MSwxMyArMTc2LDEzNiBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfcGFja2V0X25leHRfdmxpbmUoKSAtIHBhcnNlIHVzZXJzcGFjZSBWTElORSBwYWNrZXQKKyAqIEBwYXJzZXI6CQlwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0LgorICoKKyAqIFVzZXJzcGFjZSBzZW5kcyBhIHNwZWNpYWwgc2VxdWVuY2UgZm9yIFZMSU5FIHdhaXRzLgorICogUEFDS0VUMCAtIFZMSU5FX1NUQVJUX0VORCArIHZhbHVlCisgKiBQQUNLRVQzIC0gV0FJVF9SRUdfTUVNIHBvbGwgdmxpbmUgc3RhdHVzIHJlZworICogUkVMT0MgKFAzKSAtIGNydGNfaWQgaW4gcmVsb2MuCisgKgorICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgdGhpcyBhbmQgcmVsb2NhdGVzIHRoZSBWTElORSBTVEFSVCBFTkQKKyAqIGFuZCBXQUlUX1JFR19NRU0gcGFja2V0cyB0byB0aGUgY29ycmVjdCBjcnRjLgorICogSXQgYWxzbyBkZXRlY3RzIGEgc3dpdGNoZWQgb2ZmIGNydGMgYW5kIG51bGxzIG91dCB0aGUKKyAqIHdhaXQgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgaW50IHI2MDBfY3NfcGFja2V0X3BhcnNlX3ZsaW5lKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCBwM3JlbG9jLCB3YWl0X3JlZ19tZW07CisJaW50IGNydGNfaWQ7CisJaW50IHI7CisJdWludDMyX3QgaGVhZGVyLCBoX2lkeCwgcmVnLCB3YWl0X3JlZ19tZW1faW5mbzsKKwl2b2xhdGlsZSB1aW50MzJfdCAqaWI7CisKKwlpYiA9IHAtPmliLT5wdHI7CisKKwkvKiBwYXJzZSB0aGUgV0FJVF9SRUdfTUVNICovCisJciA9IHI2MDBfY3NfcGFja2V0X3BhcnNlKHAsICZ3YWl0X3JlZ19tZW0sIHAtPmlkeCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogY2hlY2sgaXRzIGEgV0FJVF9SRUdfTUVNICovCisJaWYgKHdhaXRfcmVnX21lbS50eXBlICE9IFBBQ0tFVF9UWVBFMyB8fAorCSAgICB3YWl0X3JlZ19tZW0ub3Bjb2RlICE9IFBBQ0tFVDNfV0FJVF9SRUdfTUVNKSB7CisJCURSTV9FUlJPUigidmxpbmUgd2FpdCBtaXNzaW5nIFdBSVRfUkVHX01FTSBzZWdtZW50XG4iKTsKKwkJciA9IC1FSU5WQUw7CisJCXJldHVybiByOworCX0KKworCXdhaXRfcmVnX21lbV9pbmZvID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCB3YWl0X3JlZ19tZW0uaWR4ICsgMSk7CisJLyogYml0IDQgaXMgcmVnICgwKSBvciBtZW0gKDEpICovCisJaWYgKHdhaXRfcmVnX21lbV9pbmZvICYgMHgxMCkgeworCQlEUk1fRVJST1IoInZsaW5lIFdBSVRfUkVHX01FTSB3YWl0aW5nIG9uIE1FTSByYXRoZXIgdGhhbiBSRUdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCS8qIHdhaXRpbmcgZm9yIHZhbHVlIHRvIGJlIGVxdWFsICovCisJaWYgKCh3YWl0X3JlZ19tZW1faW5mbyAmIDB4NykgIT0gMHgzKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGZ1bmN0aW9uIG5vdCBlcXVhbFxuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisJaWYgKChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIHdhaXRfcmVnX21lbS5pZHggKyAyKSA8PCAyKSAhPSBBVklWT19EMU1PREVfVkxJTkVfU1RBVFVTKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCByZWdcbiIpOworCQlyID0gLUVJTlZBTDsKKwkJcmV0dXJuIHI7CisJfQorCisJaWYgKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgd2FpdF9yZWdfbWVtLmlkeCArIDUpICE9IEFWSVZPX0QxTU9ERV9WTElORV9TVEFUKSB7CisJCURSTV9FUlJPUigidmxpbmUgV0FJVF9SRUdfTUVNIGJhZCBiaXQgbWFza1xuIik7CisJCXIgPSAtRUlOVkFMOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBqdW1wIG92ZXIgdGhlIE5PUCAqLworCXIgPSByNjAwX2NzX3BhY2tldF9wYXJzZShwLCAmcDNyZWxvYywgcC0+aWR4ICsgd2FpdF9yZWdfbWVtLmNvdW50ICsgMik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaF9pZHggPSBwLT5pZHggLSAyOworCXAtPmlkeCArPSB3YWl0X3JlZ19tZW0uY291bnQgKyAyOworCXAtPmlkeCArPSBwM3JlbG9jLmNvdW50ICsgMjsKKworCWhlYWRlciA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaF9pZHgpOworCWNydGNfaWQgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGhfaWR4ICsgMiArIDcgKyAxKTsKKwlyZWcgPSBDUF9QQUNLRVQwX0dFVF9SRUcoaGVhZGVyKTsKKwltdXRleF9sb2NrKCZwLT5yZGV2LT5kZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQocC0+cmRldi0+ZGRldiwgY3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMpOworCWlmICghb2JqKSB7CisJCURSTV9FUlJPUigiY2Fubm90IGZpbmQgY3J0YyAlZFxuIiwgY3J0Y19pZCk7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJY3J0YyA9IG9ial90b19jcnRjKG9iaik7CisJcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKKwljcnRjX2lkID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJLyogaWYgdGhlIENSVEMgaXNuJ3QgZW5hYmxlZCAtIHdlIG5lZWQgdG8gbm9wIG91dCB0aGUgV0FJVF9SRUdfTUVNICovCisJCWliW2hfaWR4ICsgMl0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDNdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA0XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgNV0gPSBQQUNLRVQyKDApOworCQlpYltoX2lkeCArIDZdID0gUEFDS0VUMigwKTsKKwkJaWJbaF9pZHggKyA3XSA9IFBBQ0tFVDIoMCk7CisJCWliW2hfaWR4ICsgOF0gPSBQQUNLRVQyKDApOworCX0gZWxzZSBpZiAoY3J0Y19pZCA9PSAxKSB7CisJCXN3aXRjaCAocmVnKSB7CisJCWNhc2UgQVZJVk9fRDFNT0RFX1ZMSU5FX1NUQVJUX0VORDoKKwkJCWhlYWRlciAmPSB+UjYwMF9DUF9QQUNLRVQwX1JFR19NQVNLOworCQkJaGVhZGVyIHw9IEFWSVZPX0QyTU9ERV9WTElORV9TVEFSVF9FTkQgPj4gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJ1bmtub3duIGNydGMgcmVsb2NcbiIpOworCQkJciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpYltoX2lkeF0gPSBoZWFkZXI7CisJCWliW2hfaWR4ICsgNF0gPSBBVklWT19EMk1PREVfVkxJTkVfU1RBVFVTID4+IDI7CisJfQorb3V0OgorCW11dGV4X3VubG9jaygmcC0+cmRldi0+ZGRldi0+bW9kZV9jb25maWcubXV0ZXgpOworCXJldHVybiByOworfQorCiBzdGF0aWMgaW50IHI2MDBfcGFja2V0MF9jaGVjayhzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwKIAkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3BhY2tldCAqcGt0LAogCQkJCXVuc2lnbmVkIGlkeCwgdW5zaWduZWQgcmVnKQogeworCWludCByOworCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIEFWSVZPX0QxTU9ERV9WTElORV9TVEFSVF9FTkQ6Ci0JY2FzZSBBVklWT19EMk1PREVfVkxJTkVfU1RBUlRfRU5EOgorCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2VfdmxpbmUocCk7CisJCWlmIChyKSB7CisJCQlEUk1fRVJST1IoIk5vIHJlbG9jIGZvciBpYlslZF09MHglMDRYXG4iLAorCQkJCQlpZHgsIHJlZyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCkBAIC0yMTgsMTcgKzMzNiwxOCBAQAogc3RhdGljIGludCByNjAwX3BhY2tldDNfY2hlY2soc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsCiAJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCkKIHsKLQlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKIAlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICpyZWxvYzsKIAl2b2xhdGlsZSB1MzIgKmliOwogCXVuc2lnbmVkIGlkeDsKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIHN0YXJ0X3JlZywgZW5kX3JlZywgcmVnOwogCWludCByOworCXUzMiBpZHhfdmFsdWU7CiAKIAlpYiA9IHAtPmliLT5wdHI7Ci0JaWJfY2h1bmsgPSAmcC0+Y2h1bmtzW3AtPmNodW5rX2liX2lkeF07CiAJaWR4ID0gcGt0LT5pZHggKyAxOworCWlkeF92YWx1ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwogCXN3aXRjaCAocGt0LT5vcGNvZGUpIHsKIAljYXNlIFBBQ0tFVDNfU1RBUlRfM0RfQ01EQlVGOgogCQlpZiAocC0+ZmFtaWx5ID49IENISVBfUlY3NzAgfHwgcGt0LT5jb3VudCkgewpAQCAtMjU5LDggKzM3OCw4IEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWliW2lkeCswXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsxXSA9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOworCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CisJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfQVVUTzoKIAkJaWYgKHBrdC0+Y291bnQgIT0gMSkgewpAQCAtMjgxLDE0ICs0MDAsMTQgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCS8qIGJpdCA0IGlzIHJlZyAoMCkgb3IgbWVtICgxKSAqLwotCQlpZiAoaWJfY2h1bmstPmtkYXRhW2lkeCswXSAmIDB4MTApIHsKKwkJaWYgKGlkeF92YWx1ZSAmIDB4MTApIHsKIAkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CiAJCQlpZiAocikgewogCQkJCURSTV9FUlJPUigiYmFkIFdBSVRfUkVHX01FTVxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpYltpZHgrMV0gKz0gKHUzMikocmVsb2MtPmxvYmouZ3B1X29mZnNldCAmIDB4ZmZmZmZmZmYpOwotCQkJaWJbaWR4KzJdID0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQlpYltpZHgrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQzoKQEAgLTI5Nyw4ICs0MTYsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJLyogMHhmZmZmZmZmZi8weDAgaXMgZmx1c2ggYWxsIGNhY2hlIGZsYWcgKi8KLQkJaWYgKGliX2NodW5rLT5rZGF0YVtpZHgrMV0gIT0gMHhmZmZmZmZmZiB8fAotCQkgICAgaWJfY2h1bmstPmtkYXRhW2lkeCsyXSAhPSAwKSB7CisJCWlmIChyYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpICE9IDB4ZmZmZmZmZmYgfHwKKwkJICAgIHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMikgIT0gMCkgewogCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKIAkJCWlmIChyKSB7CiAJCQkJRFJNX0VSUk9SKCJiYWQgU1VSRkFDRV9TWU5DXG4iKTsKQEAgLTMxOSw3ICs0MzgsNyBAQAogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWJbaWR4KzFdICs9ICh1MzIpKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgJiAweGZmZmZmZmZmKTsKLQkJCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJCWliW2lkeCsyXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRVZFTlRfV1JJVEVfRU9QOgpAQCAtMzMzLDEwICs0NTIsMTAgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWliW2lkeCsxXSArPSAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7Ci0JCWliW2lkeCsyXSB8PSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJaWJbaWR4KzJdICs9IHVwcGVyXzMyX2JpdHMocmVsb2MtPmxvYmouZ3B1X29mZnNldCkgJiAweGZmOwogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUc6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX0VORCkgfHwKQEAgLTM0Nyw2ICs0NjYsMjMgQEAKIAkJZm9yIChpID0gMDsgaSA8IHBrdC0+Y291bnQ7IGkrKykgewogCQkJcmVnID0gc3RhcnRfcmVnICsgKDQgKiBpKTsKIAkJCXN3aXRjaCAocmVnKSB7CisJCQljYXNlIFNRX0VTR1NfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1ZTX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfRVNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9HU1RNUF9SSU5HX0JBU0U6CisJCQljYXNlIFNRX1ZTVE1QX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUFNUTVBfUklOR19CQVNFOgorCQkJY2FzZSBTUV9GQlVGX1JJTkdfQkFTRToKKwkJCWNhc2UgU1FfUkVEVUNfUklOR19CQVNFOgorCQkJY2FzZSBTWF9NRU1PUllfRVhQT1JUX0JBU0U6CisJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCQlpZiAocikgeworCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09ORklHX1JFRyAiCisJCQkJCQkJIjB4JTA0WFxuIiwgcmVnKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWliW2lkeCsxK2ldICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQkJYnJlYWs7CiAJCQljYXNlIENQX0NPSEVSX0JBU0U6CiAJCQkJLyogdXNlIFBBQ0tFVDNfU1VSRkFDRV9TWU5DICovCiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTYsNyArNDkyLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0NPTlRFWFRfUkVHX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ09OVEVYVF9SRUdfRU5EKSB8fApAQCAtMzY4LDYgKzUwNCw3IEBACiAJCQlyZWcgPSBzdGFydF9yZWcgKyAoNCAqIGkpOwogCQkJc3dpdGNoIChyZWcpIHsKIAkJCWNhc2UgREJfREVQVEhfQkFTRToKKwkJCWNhc2UgREJfSFRJTEVfREFUQV9CQVNFOgogCQkJY2FzZSBDQl9DT0xPUjBfQkFTRToKIAkJCWNhc2UgQ0JfQ09MT1IxX0JBU0U6CiAJCQljYXNlIENCX0NPTE9SMl9CQVNFOgpAQCAtNDIxLDcgKzU1OCw3IEBACiAJCQlEUk1fRVJST1IoImJhZCBTRVRfUkVTT1VSQ0VcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX1JFU09VUkNFX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9SRVNPVVJDRV9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1JFU09VUkNFX0VORCkgfHwKQEAgLTQzMCw3ICs1NjcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgewotCQkJc3dpdGNoIChHX19TUV9WVFhfQ09OU1RBTlRfVFlQRShpYltpZHgrKGkqNykrNisxXSkpIHsKKwkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUocmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKGkqNykrNisxKSkpIHsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgogCQkJCS8qIHRleCBiYXNlICovCiAJCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTQ1NSw3ICs1OTIsNyBAQAogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrMF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZmZmZmZmZik7Ci0JCQkJaWJbaWR4KzErKGkqNykrMl0gfD0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CisJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCQkJYnJlYWs7CiAJCQljYXNlIFNRX1RFWF9WVFhfSU5WQUxJRF9URVhUVVJFOgogCQkJY2FzZSBTUV9URVhfVlRYX0lOVkFMSURfQlVGRkVSOgpAQCAtNDY2LDcgKzYwMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9BTFVfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfQUxVX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9BTFVfQ09OU1RfRU5EKSB8fApAQCAtNDc2LDcgKzYxMyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9CT09MX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQk9PTF9DT05TVF9PRkZTRVQ7CisJCXN0YXJ0X3JlZyA9IChpZHhfdmFsdWUgPDwgMikgKyBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVDsKIAkJZW5kX3JlZyA9IDQgKiBwa3QtPmNvdW50ICsgc3RhcnRfcmVnIC0gNDsKIAkJaWYgKChzdGFydF9yZWcgPCBQQUNLRVQzX1NFVF9CT09MX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQk9PTF9DT05TVF9FTkQpIHx8CkBAIC00ODYsNyArNjIzLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1Q6Ci0JCXN0YXJ0X3JlZyA9IChpYltpZHgrMF0gPDwgMikgKyBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUOwogCQllbmRfcmVnID0gNCAqIHBrdC0+Y291bnQgKyBzdGFydF9yZWcgLSA0OwogCQlpZiAoKHN0YXJ0X3JlZyA8IFBBQ0tFVDNfU0VUX0xPT1BfQ09OU1RfT0ZGU0VUKSB8fAogCQkgICAgKHN0YXJ0X3JlZyA+PSBQQUNLRVQzX1NFVF9MT09QX0NPTlNUX0VORCkgfHwKQEAgLTQ5Niw3ICs2MzMsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19TRVRfQ1RMX0NPTlNUOgotCQlzdGFydF9yZWcgPSAoaWJbaWR4KzBdIDw8IDIpICsgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVDsKKwkJc3RhcnRfcmVnID0gKGlkeF92YWx1ZSA8PCAyKSArIFBBQ0tFVDNfU0VUX0NUTF9DT05TVF9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfQ1RMX0NPTlNUX09GRlNFVCkgfHwKIAkJICAgIChzdGFydF9yZWcgPj0gUEFDS0VUM19TRVRfQ1RMX0NPTlNUX0VORCkgfHwKQEAgLTUxMCw3ICs2NDcsNyBAQAogCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1NBTVBMRVJcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJc3RhcnRfcmVnID0gKGliW2lkeCswXSA8PCAyKSArIFBBQ0tFVDNfU0VUX1NBTVBMRVJfT0ZGU0VUOworCQlzdGFydF9yZWcgPSAoaWR4X3ZhbHVlIDw8IDIpICsgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQ7CiAJCWVuZF9yZWcgPSA0ICogcGt0LT5jb3VudCArIHN0YXJ0X3JlZyAtIDQ7CiAJCWlmICgoc3RhcnRfcmVnIDwgUEFDS0VUM19TRVRfU0FNUExFUl9PRkZTRVQpIHx8CiAJCSAgICAoc3RhcnRfcmVnID49IFBBQ0tFVDNfU0VUX1NBTVBMRVJfRU5EKSB8fApAQCAtNjAyLDYgKzczOSw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3MpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5jaHVua3M7IGkrKykgewogCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rZGF0YSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua3BhZ2VbMV0pOwogCX0KIAlrZnJlZShwYXJzZXItPmNodW5rcyk7CiAJa2ZyZWUocGFyc2VyLT5jaHVua3NfYXJyYXkpOwpAQCAtNjM5LDcgKzc3OCw2IEBACiAJICogdW5jYWNoZWQpLiAqLwogCWliX2NodW5rID0gJnBhcnNlci5jaHVua3NbcGFyc2VyLmNodW5rX2liX2lkeF07CiAJcGFyc2VyLmliLT5sZW5ndGhfZHcgPSBpYl9jaHVuay0+bGVuZ3RoX2R3OwotCW1lbWNweSgodm9pZCAqKXBhcnNlci5pYi0+cHRyLCBpYl9jaHVuay0+a2RhdGEsIGliX2NodW5rLT5sZW5ndGhfZHcqNCk7CiAJKmwgPSBwYXJzZXIuaWItPmxlbmd0aF9kdzsKIAlyID0gcjYwMF9jc19wYXJzZSgmcGFyc2VyKTsKIAlpZiAocikgewpAQCAtNjQ3LDYgKzc4NSwxMiBAQAogCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOwogCQlyZXR1cm4gcjsKIAl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyNjAwX2NzX3BhcnNlcl9maW5pKCZwYXJzZXIsIHIpOworCQlyZXR1cm4gcjsKKwl9CiAJcjYwMF9jc19wYXJzZXJfZmluaSgmcGFyc2VyLCByKTsKIAlyZXR1cm4gcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCA0YTkwMjhhLi4yN2FiNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC0xMTksNiArMTE5LDcgQEAKICNkZWZpbmUJREJfREVCVUcJCQkJCTB4OTgzMAogI2RlZmluZQkJUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUJCQkoMSA8PCAzMSkKICNkZWZpbmUJREJfREVQVEhfQkFTRQkJCQkJMHgyODAwQworI2RlZmluZQlEQl9IVElMRV9EQVRBX0JBU0UJCQkJMHgyODAxNAogI2RlZmluZQlEQl9XQVRFUk1BUktTCQkJCQkweDk4MzgKICNkZWZpbmUJCURFUFRIX0ZSRUUoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCURFUFRIX0ZMVVNIKHgpCQkJCQkoKHgpIDw8IDUpCkBAIC0xNzEsNiArMTcyLDE0IEBACiAjZGVmaW5lIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzE0CiAjICAgICAgIGRlZmluZSBOVU1fR1NfU1RBQ0tfRU5UUklFUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQogIyAgICAgICBkZWZpbmUgTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFNRX0VTR1NfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM0MAorI2RlZmluZSBTUV9HU1ZTX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNDgKKyNkZWZpbmUgU1FfRVNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzUwCisjZGVmaW5lIFNRX0dTVE1QX1JJTkdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM1OAorI2RlZmluZSBTUV9WU1RNUF9SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNjAKKyNkZWZpbmUgU1FfUFNUTVBfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YzY4CisjZGVmaW5lIFNRX0ZCVUZfUklOR19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGM3MAorI2RlZmluZSBTUV9SRURVQ19SSU5HX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjNzgKIAogI2RlZmluZSBHUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAKICMgICAgICAgZGVmaW5lIEdSQk1fUkVBRF9USU1FT1VUKHgpICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQpAQCAtMjcxLDYgKzI4MCwxMCBAQAogI2RlZmluZQlQQ0lFX1BPUlRfSU5ERVgJCQkJCTB4MDAzOAogI2RlZmluZQlQQ0lFX1BPUlRfREFUQQkJCQkJMHgwMDNDCiAKKyNkZWZpbmUgQ0hNQVAJCQkJCQkweDIwMDQKKyNkZWZpbmUJCU5PT0ZDSEFOX1NISUZUCQkJCQkxMgorI2RlZmluZQkJTk9PRkNIQU5fTUFTSwkJCQkJMHgwMDAwMzAwMAorCiAjZGVmaW5lIFJBTUNGRwkJCQkJCTB4MjQwOAogI2RlZmluZQkJTk9PRkJBTktfU0hJRlQJCQkJCTAKICNkZWZpbmUJCU5PT0ZCQU5LX01BU0sJCQkJCTB4MDAwMDAwMDEKQEAgLTM1Miw2ICszNjUsNyBAQAogCiAKICNkZWZpbmUJU1hfTUlTQwkJCQkJCTB4MjgzNTAKKyNkZWZpbmUJU1hfTUVNT1JZX0VYUE9SVF9CQVNFCQkJCTB4OTAxMAogI2RlZmluZQlTWF9ERUJVR18xCQkJCQkweDkwNTQKICNkZWZpbmUJCVNNWF9FVkVOVF9SRUxFQVNFCQkJCSgxIDw8IDApCiAjZGVmaW5lCQlFTkFCTEVfTkVXX1NNWF9BRERSRVNTCQkJCSgxIDw8IDE2KQpAQCAtNjQzLDYgKzY1Nyw3IEBACiAjZGVmaW5lCQlHXzAwMEU1MF9NQ0RXX0JVU1koeCkJCQkoKCh4KSA+PiAxMykgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfU0VNX0JVU1koeCkJCQkoKCh4KSA+PiAxNCkgJiAxKQogI2RlZmluZQkJR18wMDBFNTBfUkxDX0JVU1koeCkJCQkoKCh4KSA+PiAxNSkgJiAxKQorI2RlZmluZQkJR18wMDBFNTBfQklGX0JVU1koeCkJCQkoKCh4KSA+PiAyOSkgJiAxKQogI2RlZmluZQlSXzAwMEU2MF9TUkJNX1NPRlRfUkVTRVQJCQkweDBFNjAKICNkZWZpbmUJCVNfMDAwRTYwX1NPRlRfUkVTRVRfQklGKHgpCQkoKCh4KSAmIDEpIDw8IDEpCiAjZGVmaW5lCQlTXzAwMEU2MF9TT0ZUX1JFU0VUX0NHKHgpCQkoKCh4KSAmIDEpIDw8IDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA2MzExYjEzLi43NTdmNWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTQ0LDYgKzQ0LDI0IEBACiAgKgktIFRFU1RJTkcsIFRFU1RJTkcsIFRFU1RJTkcKICAqLwogCisvKiBJbml0aWFsaXphdGlvbiBwYXRoOgorICogIFdlIGV4cGVjdCB0aGF0IGFjY2VsZXJhdGlvbiBpbml0aWFsaXphdGlvbiBtaWdodCBmYWlsIGZvciB2YXJpb3VzCisgKiAgcmVhc29ucyBldmVuIHRob3VnaHQgd2Ugd29yayBoYXJkIHRvIG1ha2UgaXQgd29ya3Mgb24gbW9zdAorICogIGNvbmZpZ3VyYXRpb25zLiBJbiBvcmRlciB0byBzdGlsbCBoYXZlIGEgd29ya2luZyB1c2Vyc3BhY2UgaW4gc3VjaAorICogIHNpdHVhdGlvbiB0aGUgaW5pdCBwYXRoIG11c3Qgc3VjY2VlZCB1cCB0byB0aGUgbWVtb3J5IGNvbnRyb2xsZXIKKyAqICBpbml0aWFsaXphdGlvbiBwb2ludC4gRmFpbHVyZSBiZWZvcmUgdGhpcyBwb2ludCBhcmUgY29uc2lkZXJlZCBhcworICogIGZhdGFsIGVycm9yLiBIZXJlIGlzIHRoZSBpbml0IGNhbGxjaGFpbiA6CisgKiAgICAgIHJhZGVvbl9kZXZpY2VfaW5pdCAgcGVyZm9ybSBjb21tb24gc3RydWN0dXJlLCBtdXRleCBpbml0aWFsaXphdGlvbgorICogICAgICBhc2ljX2luaXQgICAgICAgICAgIHNldHVwIHRoZSBHUFUgbWVtb3J5IGxheW91dCBhbmQgcGVyZm9ybSBhbGwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgdGltZSBpbml0aWFsaXphdGlvbiAoZmFpbHVyZSBpbiB0aGlzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJlIGNvbnNpZGVyZWQgZmF0YWwpCisgKiAgICAgIGFzaWNfc3RhcnR1cCAgICAgICAgc2V0dXAgdGhlIEdQVSBhY2NlbGVyYXRpb24sIGluIG9yZGVyIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93IGd1aWRlbGluZSB0aGUgZmlyc3QgdGhpbmcgdGhpcworICogICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNob3VsZCBkbyBpcyBzZXR0aW5nIHRoZSBHUFUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgY29udHJvbGxlciAob25seSBNQyBzZXR1cCBmYWlsdXJlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGNvbnNpZGVyZWQgYXMgZmF0YWwpCisgKi8KKwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpAQCAtMTIxLDYgKzEzOSwxMCBAQAogCXVpbnQzMl90IGRlZmF1bHRfc2NsazsKIH07CiAKKy8qCisgKiBQb3dlciBtYW5hZ2VtZW50CisgKi8KK2ludCByYWRlb25fcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qCiAgKiBGZW5jZXMuCkBAIC0yNTgsNiArMjgwLDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2dhcnRfdGFibGVfdnJhbQl2cmFtOwogfTsKIAorI2RlZmluZSBSQURFT05fR1BVX1BBR0VfU0laRSA0MDk2CisKIHN0cnVjdCByYWRlb25fZ2FydCB7CiAJZG1hX2FkZHJfdAkJCXRhYmxlX2FkZHI7CiAJdW5zaWduZWQJCQludW1fZ3B1X3BhZ2VzOwpAQCAtMzQyLDcgKzM2Niw3IEBACiAJdW5zaWduZWQgbG9uZwkJaWR4OwogCXVpbnQ2NF90CQlncHVfYWRkcjsKIAlzdHJ1Y3QgcmFkZW9uX2ZlbmNlCSpmZW5jZTsKLQl2b2xhdGlsZSB1aW50MzJfdAkqcHRyOworCXVpbnQzMl90CSpwdHI7CiAJdWludDMyX3QJCWxlbmd0aF9kdzsKIH07CiAKQEAgLTQxNSw3ICs0MzksMTIgQEAKIHN0cnVjdCByYWRlb25fY3NfY2h1bmsgewogCXVpbnQzMl90CQljaHVua19pZDsKIAl1aW50MzJfdAkJbGVuZ3RoX2R3OworCWludCBrcGFnZV9pZHhbMl07CisJdWludDMyX3QgICAgICAgICAgICAgICAgKmtwYWdlWzJdOwogCXVpbnQzMl90CQkqa2RhdGE7CisJdm9pZCBfX3VzZXIgKnVzZXJfcHRyOworCWludCBsYXN0X2NvcGllZF9wYWdlOworCWludCBsYXN0X3BhZ2VfaW5kZXg7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciB7CkBAIC00MzgsOCArNDY3LDM4IEBACiAJc3RydWN0IHJhZGVvbl9pYgkqaWI7CiAJdm9pZAkJCSp0cmFjazsKIAl1bnNpZ25lZAkJZmFtaWx5OworCWludCBwYXJzZXJfZXJyb3I7CiB9OwogCitleHRlcm4gaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpOworZXh0ZXJuIGludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKKworCitzdGF0aWMgaW5saW5lIHUzMiByYWRlb25fZ2V0X2liX3ZhbHVlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaWR4KQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwl1MzIgcGdfaWR4LCBwZ19vZmZzZXQ7CisJdTMyIGlkeF92YWx1ZSA9IDA7CisJaW50IG5ld19wYWdlOworCisJcGdfaWR4ID0gKGlkeCAqIDQpIC8gUEFHRV9TSVpFOworCXBnX29mZnNldCA9IChpZHggKiA0KSAlIFBBR0VfU0laRTsKKworCWlmIChpYmMtPmtwYWdlX2lkeFswXSA9PSBwZ19pZHgpCisJCXJldHVybiBpYmMtPmtwYWdlWzBdW3BnX29mZnNldC80XTsKKwlpZiAoaWJjLT5rcGFnZV9pZHhbMV0gPT0gcGdfaWR4KQorCQlyZXR1cm4gaWJjLT5rcGFnZVsxXVtwZ19vZmZzZXQvNF07CisKKwluZXdfcGFnZSA9IHJhZGVvbl9jc191cGRhdGVfcGFnZXMocCwgcGdfaWR4KTsKKwlpZiAobmV3X3BhZ2UgPCAwKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IG5ld19wYWdlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZHhfdmFsdWUgPSBpYmMtPmtwYWdlW25ld19wYWdlXVtwZ19vZmZzZXQvNF07CisJcmV0dXJuIGlkeF92YWx1ZTsKK30KKwogc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgewogCXVuc2lnbmVkCWlkeDsKIAl1bnNpZ25lZAl0eXBlOwpAQCAtNTM3LDE4ICs1OTYsOCBAQAogCXZvaWQgKCpmaW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqc3VzcGVuZCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCXZvaWQgKCplcnJhdGEpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqdnJhbV9pbmZvKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnZnYV9zZXRfc3RhdGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIAlpbnQgKCpncHVfcmVzZXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCptY19pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKm1jX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCp3Yl9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0Jdm9pZCAoKndiX2ZpbmkpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQlpbnQgKCpnYXJ0X2luaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9maW5pKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0JaW50ICgqZ2FydF9lbmFibGUpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQl2b2lkICgqZ2FydF9kaXNhYmxlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKmdhcnRfdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqZ2FydF9zZXRfcGFnZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIAlpbnQgKCpjcF9pbml0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgcmluZ19zaXplKTsKQEAgLTU1OCw3ICs2MDcsNiBAQAogCXZvaWQgKCpyaW5nX3N0YXJ0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqcmluZ190ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnJpbmdfaWJfZXhlY3V0ZSkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLQlpbnQgKCppYl90ZXN0KShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJaW50ICgqaXJxX3NldCkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCWludCAoKmlycV9wcm9jZXNzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdTMyICgqZ2V0X3ZibGFua19jb3VudGVyKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwpAQCAtNTc5LDcgKzYyNyw5IEBACiAJCSAgICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAogCQkgICAgdW5zaWduZWQgbnVtX3BhZ2VzLAogCQkgICAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworCXVpbnQzMl90ICgqZ2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCXZvaWQgKCpzZXRfZW5naW5lX2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKKwl1aW50MzJfdCAoKmdldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAl2b2lkICgqc2V0X21lbW9yeV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IG1lbV9jbG9jayk7CiAJdm9pZCAoKnNldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIAl2b2lkICgqc2V0X2Nsb2NrX2dhdGluZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwpAQCAtNzM2LDEyICs3ODYsMTIgQEAKIAlib29sCQkJCXNodXRkb3duOwogCWJvb2wJCQkJc3VzcGVuZDsKIAlib29sCQkJCW5lZWRfZG1hMzI7Ci0JYm9vbAkJCQluZXdfaW5pdF9wYXRoOwogCWJvb2wJCQkJYWNjZWxfd29ya2luZzsKIAlzdHJ1Y3QgcmFkZW9uX3N1cmZhY2VfcmVnIHN1cmZhY2VfcmVnc1tSQURFT05fR0VNX01BWF9TVVJGQUNFU107CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICptZV9mdzsJLyogYWxsIGZhbWlseSBNRSBmaXJtd2FyZSAqLwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZwX2Z3OwkvKiByNi83MDAgUEZQIGZpcm13YXJlICovCiAJc3RydWN0IHI2MDBfYmxpdCByNjAwX2JsaXQ7CisJaW50IG1zaV9lbmFibGVkOyAvKiBtc2kgZW5hYmxlZCAqLwogfTsKIAogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTg5NiwyOCArOTQ2LDE0IEBACiAjZGVmaW5lIHJhZGVvbl9yZXN1bWUocmRldikgKHJkZXYpLT5hc2ljLT5yZXN1bWUoKHJkZXYpKQogI2RlZmluZSByYWRlb25fc3VzcGVuZChyZGV2KSAocmRldiktPmFzaWMtPnN1c3BlbmQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fY3NfcGFyc2UocCkgcmRldi0+YXNpYy0+Y3NfcGFyc2UoKHApKQotI2RlZmluZSByYWRlb25fZXJyYXRhKHJkZXYpIChyZGV2KS0+YXNpYy0+ZXJyYXRhKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3ZyYW1faW5mbyhyZGV2KSAocmRldiktPmFzaWMtPnZyYW1faW5mbygocmRldikpCiAjZGVmaW5lIHJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKSAocmRldiktPmFzaWMtPnZnYV9zZXRfc3RhdGUoKHJkZXYpLCAoc3RhdGUpKQogI2RlZmluZSByYWRlb25fZ3B1X3Jlc2V0KHJkZXYpIChyZGV2KS0+YXNpYy0+Z3B1X3Jlc2V0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5tY19pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX21jX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT5tY19maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT53Yl9pbml0KChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX3diX2ZpbmkocmRldikgKHJkZXYpLT5hc2ljLT53Yl9maW5pKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dwdV9nYXJ0X2luaXQocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0X2luaXQoKHJkZXYpKQotI2RlZmluZSByYWRlb25fZ3B1X2dhcnRfZmluaShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZW5hYmxlKChyZGV2KSkKLSNkZWZpbmUgcmFkZW9uX2dhcnRfZGlzYWJsZShyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nYXJ0X3RsYl9mbHVzaChyZGV2KSAocmRldiktPmFzaWMtPmdhcnRfdGxiX2ZsdXNoKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgcCkgKHJkZXYpLT5hc2ljLT5nYXJ0X3NldF9wYWdlKChyZGV2KSwgKGkpLCAocCkpCi0jZGVmaW5lIHJhZGVvbl9jcF9pbml0KHJkZXYscnNpemUpIChyZGV2KS0+YXNpYy0+Y3BfaW5pdCgocmRldiksIChyc2l6ZSkpCi0jZGVmaW5lIHJhZGVvbl9jcF9maW5pKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZmluaSgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpIChyZGV2KS0+YXNpYy0+Y3BfZGlzYWJsZSgocmRldikpCiAjZGVmaW5lIHJhZGVvbl9jcF9jb21taXQocmRldikgKHJkZXYpLT5hc2ljLT5jcF9jb21taXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ19zdGFydChyZGV2KSAocmRldiktPmFzaWMtPnJpbmdfc3RhcnQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fcmluZ190ZXN0KHJkZXYpIChyZGV2KS0+YXNpYy0+cmluZ190ZXN0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3JpbmdfaWJfZXhlY3V0ZShyZGV2LCBpYikgKHJkZXYpLT5hc2ljLT5yaW5nX2liX2V4ZWN1dGUoKHJkZXYpLCAoaWIpKQotI2RlZmluZSByYWRlb25faWJfdGVzdChyZGV2KSAocmRldiktPmFzaWMtPmliX3Rlc3QoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3NldChyZGV2KSAocmRldiktPmFzaWMtPmlycV9zZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25faXJxX3Byb2Nlc3MocmRldikgKHJkZXYpLT5hc2ljLT5pcnFfcHJvY2VzcygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXIocmRldiwgY3J0YykgKHJkZXYpLT5hc2ljLT5nZXRfdmJsYW5rX2NvdW50ZXIoKHJkZXYpLCAoY3J0YykpCkBAIC05MjUsNyArOTYxLDkgQEAKICNkZWZpbmUgcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5X2JsaXQoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weV9kbWEocmRldiwgcywgZCwgbnAsIGYpIChyZGV2KS0+YXNpYy0+Y29weV9kbWEoKHJkZXYpLCAocyksIChkKSwgKG5wKSwgKGYpKQogI2RlZmluZSByYWRlb25fY29weShyZGV2LCBzLCBkLCBucCwgZikgKHJkZXYpLT5hc2ljLT5jb3B5KChyZGV2KSwgKHMpLCAoZCksIChucCksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikgKHJkZXYpLT5hc2ljLT5nZXRfZW5naW5lX2Nsb2NrKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9lbmdpbmVfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfZW5naW5lX2Nsb2NrKChyZGV2KSwgKGUpKQorI2RlZmluZSByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSAocmRldiktPmFzaWMtPmdldF9tZW1vcnlfY2xvY2soKHJkZXYpKQogI2RlZmluZSByYWRlb25fc2V0X21lbW9yeV9jbG9jayhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9lbmdpbmVfY2xvY2soKHJkZXYpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfcGNpZV9sYW5lcyhyZGV2LCBsKSAocmRldiktPmFzaWMtPnNldF9wY2llX2xhbmVzKChyZGV2KSwgKGwpKQogI2RlZmluZSByYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9jbG9ja19nYXRpbmcoKHJkZXYpLCAoZSkpCkBAIC05NDMsNiArOTgxLDggQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9zY3JhdGNoX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX3N1cmZhY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9jc19wYXJzZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCwgdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZCByYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MCAqLwogc3RydWN0IHIxMDBfbWNfc2F2ZSB7CkBAIC05NzQsMjMgKzEwMTQsNzEgQEAKIGV4dGVybiB2b2lkIHIxMDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMTAwX3diX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCByMTAwX3diX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX3JiMmRfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMTAwX2NwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9jc190cmFja19jaGVja19wa3QzX2luZHhfYnVmZmVyKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCQkJc3RydWN0IHJhZGVvbl9jc19wYWNrZXQgKnBrdCwKKwkJCQkJCXN0cnVjdCByYWRlb25fb2JqZWN0ICpyb2JqKTsKK2V4dGVybiBpbnQgcjEwMF9jc19wYXJzZV9wYWNrZXQwKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJY29uc3QgdW5zaWduZWQgKmF1dGgsIHVuc2lnbmVkIG4sCisJCQkJcmFkZW9uX3BhY2tldDBfY2hlY2tfdCBjaGVjayk7CitleHRlcm4gaW50IHIxMDBfY3NfcGFja2V0X3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAorCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QsCisJCQkJdW5zaWduZWQgaWR4KTsKKworLyogcnYyMDAscnYyNTAscnYyODAgKi8KK2V4dGVybiB2b2lkIHIyMDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiBleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9jbG9ja19zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyogcjQyMCxyNDIzLHJ2NDEwICovCitleHRlcm4gaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdTMyIHI0MjBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTMyIHJlZyk7CiBleHRlcm4gdm9pZCByNDIwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcsIHUzMiB2KTsKIGV4dGVybiBpbnQgcjQyMF9kZWJ1Z2ZzX3BpcGVzX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKiBydjUxNSAqLworc3RydWN0IHJ2NTE1X21jX3NhdmUgeworCXUzMiBkMXZnYV9jb250cm9sOworCXUzMiBkMnZnYV9jb250cm9sOworCXUzMiB2Z2FfcmVuZGVyX2NvbnRyb2w7CisJdTMyIHZnYV9oZHBfY29udHJvbDsKKwl1MzIgZDFjcnRjX2NvbnRyb2w7CisJdTMyIGQyY3J0Y19jb250cm9sOworfTsKIGV4dGVybiB2b2lkIHJ2NTE1X2JhbmR3aWR0aF9hdml2b191cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJ2NTE1X3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCBydjUxNV9tY19zdG9wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSAqc2F2ZSk7CitleHRlcm4gdm9pZCBydjUxNV9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKTsKK2V4dGVybiB2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHJ2NTE1X3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczQwMCAqLworZXh0ZXJuIGludCByczQwMF9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2FkanVzdF9zaXplKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczQwMF9nYXJ0X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCisvKiByczYwMCAqLworZXh0ZXJuIHZvaWQgcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfaXJxX3NldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHJzNjkwLCByczc0MCAqLwogZXh0ZXJuIHZvaWQgcnM2OTBfbGluZV9idWZmZXJfYWRqdXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMTAwOSw4ICsxMDk3LDkgQEAKIGV4dGVybiB2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiBpbnQgcjYwMF93Yl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHI2MDBfd2JfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfd2JfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX3NjcmF0Y2hfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfYmxpdF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCA4OTY4Zjc4Li5jMThmYmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC0zMSwzOCArMzEsMzAgQEAKIC8qCiAgKiBjb21tb24gZnVuY3Rpb25zCiAgKi8KK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgZW5nX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIAordWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7Cit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgbWVtX2Nsb2NrKTsKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSk7CiAKIC8qCiAgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwLHIyMDAscnYyNTAscnMzMDAscnYyODAKICAqLwotaW50IHIxMDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjIwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHIxMDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHVpbnQzMl90IHIxMDBfbW1fcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcjEwMF9tbV93cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwotdm9pZCByMTAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcjEwMF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKTsKIGludCByMTAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByMTAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwotaW50IHIxMDBfd2JfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfd2JfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9wY2lfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9wY2lfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMTAwX3BjaV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIxMDBfcGNpX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByMTAwX2NwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMTAwX2NwX2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX2NwX2NvbW1pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHIxMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTgzLDMzICs3NSwyMSBAQAogaW50IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcpOwogdm9pZCByMTAwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByMTAwX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpOwotaW50IHIxMDBfaWJfdGVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcjEwMF9yaW5nX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHIxMDBfYXNpYyA9IHsKIAkuaW5pdCA9ICZyMTAwX2luaXQsCi0JLmVycmF0YSA9ICZyMTAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnIxMDBfdnJhbV9pbmZvLAorCS5maW5pID0gJnIxMDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyMTAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyMTAwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMTAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyMTAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjEwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyMTAwX3BjaV9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnIxMDBfcGNpX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcjEwMF9wY2lfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjEwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0xMTgsNyArOTgsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gTlVMTCwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0xMzEsNTUgKzExMywzOCBAQAogLyoKICAqIHIzMDAscjM1MCxydjM1MCxydjM4MAogICovCi1pbnQgcjMwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjMwMF9lcnJhdGEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjMwMF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHIzMDBfZmVuY2VfcmluZ19lbWl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7Ci1pbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCBydjM3MF9wY2llX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnYzNzBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7Ci11aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7Ci12b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKLXZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7Ci1pbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKLQkJICB1aW50NjRfdCBzcmNfb2Zmc2V0LAotCQkgIHVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCSAgdW5zaWduZWQgbnVtX3BhZ2VzLAotCQkgIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKLQorZXh0ZXJuIGludCByMzAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcjMwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByMzAwX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gdm9pZCByMzAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9mZW5jZV9yaW5nX2VtaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOworZXh0ZXJuIGludCByMzAwX2NzX3BhcnNlKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKTsKK2V4dGVybiB2b2lkIHJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKK2V4dGVybiB1aW50MzJfdCBydjM3MF9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CitleHRlcm4gdm9pZCBydjM3MF9wY2llX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CitleHRlcm4gdm9pZCBydjM3MF9zZXRfcGNpZV9sYW5lcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKK2V4dGVybiBpbnQgcjMwMF9jb3B5X2RtYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCXVpbnQ2NF90IHNyY19vZmZzZXQsCisJCQl1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkJdW5zaWduZWQgbnVtX3BhZ2VzLAorCQkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcjMwMF9lcnJhdGEsCi0JLnZyYW1faW5mbyA9ICZyMzAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyMzAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjMwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjMwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcjMwMF9tY19pbml0LAotCS5tY19maW5pID0gJnIzMDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcjEwMF9wY2lfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcjEwMF9wY2lfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnIxMDBfcGNpX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMTg4LDcgKzE1Myw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKQEAgLTIwOSwyNiArMTc2LDE0IEBACiAJLmZpbmkgPSAmcjQyMF9maW5pLAogCS5zdXNwZW5kID0gJnI0MjBfc3VzcGVuZCwKIAkucmVzdW1lID0gJnI0MjBfcmVzdW1lLAotCS5lcnJhdGEgPSBOVUxMLAotCS52cmFtX2luZm8gPSBOVUxMLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSBOVUxMLAotCS53Yl9maW5pID0gTlVMTCwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSBOVUxMLAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjM3LDcgKzE5Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMjUwLDQyICsyMDcsMjcgQEAKIC8qCiAgKiByczQwMCxyczQ4MAogICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNDAwX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM0MDBfZ2FydF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNDAwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcjMwMF9pbml0LAotCS5lcnJhdGEgPSAmcnM0MDBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnM0MDBfdnJhbV9pbmZvLAorCS5pbml0ID0gJnJzNDAwX2luaXQsCisJLmZpbmkgPSAmcnM0MDBfZmluaSwKKwkuc3VzcGVuZCA9ICZyczQwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcnM0MDBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAotCS5tY19pbml0ID0gJnJzNDAwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcnM0MDBfbWNfZmluaSwKLQkud2JfaW5pdCA9ICZyMTAwX3diX2luaXQsCi0JLndiX2ZpbmkgPSAmcjEwMF93Yl9maW5pLAotCS5nYXJ0X2luaXQgPSAmcnM0MDBfZ2FydF9pbml0LAotCS5nYXJ0X2ZpbmkgPSAmcnM0MDBfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZyczQwMF9nYXJ0X2VuYWJsZSwKLQkuZ2FydF9kaXNhYmxlID0gJnJzNDAwX2dhcnRfZGlzYWJsZSwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcnM0MDBfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM0MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9ICZyMTAwX2NwX2luaXQsCi0JLmNwX2ZpbmkgPSAmcjEwMF9jcF9maW5pLAotCS5jcF9kaXNhYmxlID0gJnIxMDBfY3BfZGlzYWJsZSwKIAkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAogCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtMjk0LDcgKzIzNiw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gTlVMTCwKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCkBAIC0zMDcsMTggKzI1MSwxMyBAQAogLyoKICAqIHJzNjAwLgogICovCi1pbnQgcnM2MDBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnM2MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9pcnFfcHJvY2VzcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7Ci1pbnQgcnM2MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByczYwMF9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcik7CiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwpAQCAtMzI2LDI4ICsyNjUsMTcgQEAKIHZvaWQgcnM2MDBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjAwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjAwX3ZyYW1faW5mbywKKwkuZmluaSA9ICZyczYwMF9maW5pLAorCS5zdXNwZW5kID0gJnJzNjAwX3N1c3BlbmQsCisJLnJlc3VtZSA9ICZyczYwMF9yZXN1bWUsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAogCS5ncHVfcmVzZXQgPSAmcjMwMF9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnM2MDBfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZyczYwMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZyczYwMF9nYXJ0X2luaXQsCi0JLmdhcnRfZmluaSA9ICZyczYwMF9nYXJ0X2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gJnJzNjAwX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnM2MDBfZ2FydF9kaXNhYmxlLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyczYwMF9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcjMwMF9yaW5nX3N0YXJ0LAogCS5yaW5nX3Rlc3QgPSAmcjEwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyMTAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyMTAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcnM2MDBfaXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmcnM2MDBfaXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZyczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCkBAIC0zNTYsNyArMjg0LDkgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtMzY3LDM3ICsyOTcsMjYgQEAKIC8qCiAgKiByczY5MCxyczc0MAogICovCi12b2lkIHJzNjkwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnM2OTBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjkwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByczY5MF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHJzNjkwX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnM2OTBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnM2OTBfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnM2OTBfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIHJzNjkwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnM2MDBfaW5pdCwKLQkuZXJyYXRhID0gJnJzNjkwX2VycmF0YSwKLQkudnJhbV9pbmZvID0gJnJzNjkwX3ZyYW1faW5mbywKKwkuaW5pdCA9ICZyczY5MF9pbml0LAorCS5maW5pID0gJnJzNjkwX2ZpbmksCisJLnN1c3BlbmQgPSAmcnM2OTBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJzNjkwX3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyMzAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyczY5MF9tY19pbml0LAotCS5tY19maW5pID0gJnJzNjkwX21jX2ZpbmksCi0JLndiX2luaXQgPSAmcjEwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnIxMDBfd2JfZmluaSwKLQkuZ2FydF9pbml0ID0gJnJzNDAwX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJzNDAwX2dhcnRfZmluaSwKLQkuZ2FydF9lbmFibGUgPSAmcnM0MDBfZ2FydF9lbmFibGUsCi0JLmdhcnRfZGlzYWJsZSA9ICZyczQwMF9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSAmcjEwMF9jcF9pbml0LAotCS5jcF9maW5pID0gJnIxMDBfY3BfZmluaSwKLQkuY3BfZGlzYWJsZSA9ICZyMTAwX2NwX2Rpc2FibGUsCiAJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKIAkucmluZ19zdGFydCA9ICZyMzAwX3Jpbmdfc3RhcnQsCiAJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnIxMDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyczYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyczYwMF9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJnJzNjAwX2dldF92YmxhbmtfY291bnRlciwKQEAgLTQwNiw3ICszMjUsOSBAQAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCiAJLmNvcHkgPSAmcjMwMF9jb3B5X2RtYSwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKQEAgLTQyMCw0MSArMzQxLDI5IEBACiAgKiBydjUxNQogICovCiBpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIHJ2NTE1X2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdWludDMyX3QgcnY1MTVfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIHZvaWQgcnY1MTVfbWNfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1aW50MzJfdCBydjUxNV9wY2llX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJ2NTE1X3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIHZvaWQgcnY1MTVfYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBydjUxNV9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcnY1MTVfYXNpYyA9IHsKIAkuaW5pdCA9ICZydjUxNV9pbml0LAotCS5lcnJhdGEgPSAmcnY1MTVfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcnY1MTVfdnJhbV9pbmZvLAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnJ2NTE1X3Jlc3VtZSwKIAkudmdhX3NldF9zdGF0ZSA9ICZyMTAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZydjUxNV9ncHVfcmVzZXQsCi0JLm1jX2luaXQgPSAmcnY1MTVfbWNfaW5pdCwKLQkubWNfZmluaSA9ICZydjUxNV9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNDYzLDcgKzM3Miw5IEBACiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCisJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLApAQCAtNDc2LDM1ICszODcsMjEgQEAKIC8qCiAgKiByNTIwLHJ2NTMwLHJ2NTYwLHJ2NTcwLHI1ODAKICAqLwotdm9pZCByNTIwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI1MjBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByNTIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNTIwX2JhbmR3aWR0aF91cGRhdGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworaW50IHI1MjBfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgcjUyMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByNTIwX2FzaWMgPSB7Ci0JLmluaXQgPSAmcnY1MTVfaW5pdCwKLQkuZXJyYXRhID0gJnI1MjBfZXJyYXRhLAotCS52cmFtX2luZm8gPSAmcjUyMF92cmFtX2luZm8sCisJLmluaXQgPSAmcjUyMF9pbml0LAorCS5maW5pID0gJnJ2NTE1X2ZpbmksCisJLnN1c3BlbmQgPSAmcnY1MTVfc3VzcGVuZCwKKwkucmVzdW1lID0gJnI1MjBfcmVzdW1lLAogCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKIAkuZ3B1X3Jlc2V0ID0gJnJ2NTE1X2dwdV9yZXNldCwKLQkubWNfaW5pdCA9ICZyNTIwX21jX2luaXQsCi0JLm1jX2ZpbmkgPSAmcjUyMF9tY19maW5pLAotCS53Yl9pbml0ID0gJnIxMDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyMTAwX3diX2ZpbmksCi0JLmdhcnRfaW5pdCA9ICZydjM3MF9wY2llX2dhcnRfaW5pdCwKLQkuZ2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pLAotCS5nYXJ0X2VuYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZW5hYmxlLAotCS5nYXJ0X2Rpc2FibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2Rpc2FibGUsCiAJLmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAotCS5jcF9pbml0ID0gJnIxMDBfY3BfaW5pdCwKLQkuY3BfZmluaSA9ICZyMTAwX2NwX2ZpbmksCi0JLmNwX2Rpc2FibGUgPSAmcjEwMF9jcF9kaXNhYmxlLAogCS5jcF9jb21taXQgPSAmcjEwMF9jcF9jb21taXQsCiAJLnJpbmdfc3RhcnQgPSAmcnY1MTVfcmluZ19zdGFydCwKIAkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAogCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCi0JLmliX3Rlc3QgPSAmcjEwMF9pYl90ZXN0LAogCS5pcnFfc2V0ID0gJnJzNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnJzNjAwX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyLApAQCAtNTEzLDEzICs0MTAsMTUgQEAKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAogCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gJnJ2MzcwX3NldF9wY2llX2xhbmVzLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHIxMDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAvKgpAQCAtNTUyLDM3ICs0NTEsMjMgQEAKIAkJCSB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG9ial9zaXplKTsKIGludCByNjAwX2NsZWFyX3N1cmZhY2VfcmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgcmVnKTsKIHZvaWQgcjYwMF9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKLWludCByNjAwX2liX3Rlc3Qoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHI2MDBfcmluZ190ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByNjAwX2NvcHlfYmxpdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJICAgdW5zaWduZWQgbnVtX3BhZ2VzLCBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjYwMF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnI2MDBfaW5pdCwKIAkuZmluaSA9ICZyNjAwX2ZpbmksCiAJLnN1c3BlbmQgPSAmcjYwMF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcjYwMF9yZXN1bWUsCiAJLmNwX2NvbW1pdCA9ICZyNjAwX2NwX2NvbW1pdCwKLQkudnJhbV9pbmZvID0gTlVMTCwKIAkudmdhX3NldF9zdGF0ZSA9ICZyNjAwX3ZnYV9zZXRfc3RhdGUsCiAJLmdwdV9yZXNldCA9ICZyNjAwX2dwdV9yZXNldCwKLQkubWNfaW5pdCA9IE5VTEwsCi0JLm1jX2ZpbmkgPSBOVUxMLAotCS53Yl9pbml0ID0gJnI2MDBfd2JfaW5pdCwKLQkud2JfZmluaSA9ICZyNjAwX3diX2ZpbmksCi0JLmdhcnRfZW5hYmxlID0gTlVMTCwKLQkuZ2FydF9kaXNhYmxlID0gTlVMTCwKIAkuZ2FydF90bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCi0JLmNwX2luaXQgPSBOVUxMLAotCS5jcF9maW5pID0gTlVMTCwKLQkuY3BfZGlzYWJsZSA9IE5VTEwsCi0JLnJpbmdfc3RhcnQgPSBOVUxMLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCiAJLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKLQkuaWJfdGVzdCA9ICZyNjAwX2liX3Rlc3QsCiAJLmlycV9zZXQgPSAmcjYwMF9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZyNjAwX2lycV9wcm9jZXNzLAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjYwMF9mZW5jZV9yaW5nX2VtaXQsCkBAIC01OTAsMTMgKzQ3NSwxNSBAQAogCS5jb3B5X2JsaXQgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHlfZG1hID0gJnI2MDBfY29weV9ibGl0LAogCS5jb3B5ID0gJnI2MDBfY29weV9ibGl0LAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAotCS5iYW5kd2lkdGhfdXBkYXRlID0gJnI1MjBfYmFuZHdpZHRoX3VwZGF0ZSwKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZydjUxNV9iYW5kd2lkdGhfdXBkYXRlLAogfTsKIAogLyoKQEAgLTYwOSwzMCArNDk2LDE3IEBACiBpbnQgcnY3NzBfZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyBydjc3MF9hc2ljID0gewotCS5lcnJhdGEgPSBOVUxMLAogCS5pbml0ID0gJnJ2NzcwX2luaXQsCiAJLmZpbmkgPSAmcnY3NzBfZmluaSwKIAkuc3VzcGVuZCA9ICZydjc3MF9zdXNwZW5kLAogCS5yZXN1bWUgPSAmcnY3NzBfcmVzdW1lLAogCS5jcF9jb21taXQgPSAmcjYwMF9jcF9jb21taXQsCi0JLnZyYW1faW5mbyA9IE5VTEwsCiAJLmdwdV9yZXNldCA9ICZydjc3MF9ncHVfcmVzZXQsCiAJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAotCS5tY19pbml0ID0gTlVMTCwKLQkubWNfZmluaSA9IE5VTEwsCi0JLndiX2luaXQgPSAmcjYwMF93Yl9pbml0LAotCS53Yl9maW5pID0gJnI2MDBfd2JfZmluaSwKLQkuZ2FydF9lbmFibGUgPSBOVUxMLAotCS5nYXJ0X2Rpc2FibGUgPSBOVUxMLAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKLQkuY3BfaW5pdCA9IE5VTEwsCi0JLmNwX2ZpbmkgPSBOVUxMLAotCS5jcF9kaXNhYmxlID0gTlVMTCwKLQkucmluZ19zdGFydCA9IE5VTEwsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKIAkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAotCS5pYl90ZXN0ID0gJnI2MDBfaWJfdGVzdCwKIAkuaXJxX3NldCA9ICZyNjAwX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJnI2MDBfaXJxX3Byb2Nlc3MsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKQEAgLTY0MCwxMyArNTE0LDE1IEBACiAJLmNvcHlfYmxpdCA9ICZyNjAwX2NvcHlfYmxpdCwKIAkuY29weV9kbWEgPSAmcjYwMF9jb3B5X2JsaXQsCiAJLmNvcHkgPSAmcjYwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAogCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCi0JLmJhbmR3aWR0aF91cGRhdGUgPSAmcjUyMF9iYW5kd2lkdGhfdXBkYXRlLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCmluZGV4IDc0Mzc0MjEuLjJlZDg4YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYwpAQCAtNDYsNyArNDYsOCBAQAogCQkJICB1aW50MzJfdCBzdXBwb3J0ZWRfZGV2aWNlLAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCi0JCQkgIGJvb2wgbGlua2IsIHVpbnQzMl90IGlncF9sYW5lX2luZm8pOworCQkJICBib29sIGxpbmtiLCB1aW50MzJfdCBpZ3BfbGFuZV9pbmZvLAorCQkJICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTE5Myw2ICsxOTQsMjMgQEAKIAlEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQKIH07CiAKK2NvbnN0IHVpbnQxNl90IHN1cHBvcnRlZF9kZXZpY2VzX2Nvbm5lY3Rvcl9vYmplY3RfaWRfY29udmVydFtdID0geworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfTk9ORSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSwgLyogbm90IGFsbCBib2FyZHMgc3VwcG9ydCBETCAqLworCUNPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9ELCAvKiBub3QgYWxsIGJvYXJkcyBzdXBwb3J0IERMICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EsIC8qIHRlY2huaWNhbGx5IERWSS1BICovCisJQ09OTkVDVE9SX09CSkVDVF9JRF9DT01QT1NJVEUsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8sCisJQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTLAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfOVBJTl9ESU4sCisJQ09OTkVDVE9SX09CSkVDVF9JRF85UElOX0RJTiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JULAorCUNPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0EsCisJQ09OTkVDVE9SX09CSkVDVF9JRF9IRE1JX1RZUEVfQiwKKwlDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTworfTsKKwogY29uc3QgaW50IG9iamVjdF9jb25uZWN0b3JfY29udmVydFtdID0gewogCURSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duLAogCURSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLApAQCAtMjI5LDcgKzI0Nyw3IEBACiAJQVRPTV9PQkpFQ1RfSEVBREVSICpvYmpfaGVhZGVyOwogCWludCBpLCBqLCBwYXRoX3NpemUsIGRldmljZV9zdXBwb3J0OwogCWludCBjb25uZWN0b3JfdHlwZTsKLQl1aW50MTZfdCBpZ3BfbGFuZV9pbmZvLCBjb25uX2lkOworCXVpbnQxNl90IGlncF9sYW5lX2luZm8sIGNvbm5faWQsIGNvbm5lY3Rvcl9vYmplY3RfaWQ7CiAJYm9vbCBsaW5rYjsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjIGRkY19idXM7CiAKQEAgLTI3MiwxNSArMjkwLDEzIEBACiAJCQkgICAgKGxlMTZfdG9fY3B1KHBhdGgtPnVzQ29ubk9iamVjdElkKSAmCiAJCQkgICAgIE9CSkVDVF9UWVBFX01BU0spID4+IE9CSkVDVF9UWVBFX1NISUZUOwogCi0JCQlpZiAoKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJICAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCkKLQkJCSAgICB8fCAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09Ci0JCQkJQVRPTV9ERVZJQ0VfVFYyX1NVUFBPUlQpCi0JCQkgICAgfHwgKGxlMTZfdG9fY3B1KHBhdGgtPnVzRGV2aWNlVGFnKSA9PQotCQkJCUFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQorCQkJLyogVE9ETyBDViBzdXBwb3J0ICovCisJCQlpZiAobGUxNl90b19jcHUocGF0aC0+dXNEZXZpY2VUYWcpID09CisJCQkJQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgJiYKKwkJCS8qIElHUCBjaGlwcyAqLworCQkJaWYgKChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApICYmCiAJCQkgICAgKGNvbl9vYmpfaWQgPT0KIAkJCSAgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9QQ0lFX0NPTk5FQ1RPUikpIHsKIAkJCQl1aW50MTZfdCBpZ3Bfb2Zmc2V0ID0gMDsKQEAgLTMxNCw2ICszMzAsNyBAQAogCQkJCQkJY29ubmVjdG9yX3R5cGUgPQogCQkJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydAogCQkJCQkJICAgIFtjdF07CisJCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY3Q7CiAJCQkJCQlpZ3BfbGFuZV9pbmZvID0KIAkJCQkJCSAgICBzbG90X2NvbmZpZyAmIDB4ZmZmZjsKIAkJCQkJfSBlbHNlCkBAIC0zMjQsNiArMzQxLDcgQEAKIAkJCQlpZ3BfbGFuZV9pbmZvID0gMDsKIAkJCQljb25uZWN0b3JfdHlwZSA9CiAJCQkJICAgIG9iamVjdF9jb25uZWN0b3JfY29udmVydFtjb25fb2JqX2lkXTsKKwkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29uX29ial9pZDsKIAkJCX0KIAogCQkJaWYgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duKQpAQCAtNDI4LDcgKzQ0Niw4IEBACiAJCQkJCQkgIGxlMTZfdG9fY3B1KHBhdGgtPgogCQkJCQkJCSAgICAgIHVzRGV2aWNlVGFnKSwKIAkJCQkJCSAgY29ubmVjdG9yX3R5cGUsICZkZGNfYnVzLAotCQkJCQkJICBsaW5rYiwgaWdwX2xhbmVfaW5mbyk7CisJCQkJCQkgIGxpbmtiLCBpZ3BfbGFuZV9pbmZvLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogCQl9CiAJfQpAQCAtNDM4LDYgKzQ1Nyw0NSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdWludDE2X3QgYXRvbWJpb3NfZ2V0X2Nvbm5lY3Rvcl9vYmplY3RfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSBpbnQgY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgdWludDE2X3QgZGV2aWNlcykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfSBlbHNlIGlmICgoKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB8fAorCQkgICAgKGNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEKSkgJiYKKwkJICAgKGRldmljZXMgJiBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpKSAgeworCQlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwkJc3RydWN0IGF0b21fY29udGV4dCAqY3R4ID0gbW9kZV9pbmZvLT5hdG9tX2NvbnRleHQ7CisJCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIFhUTURTX0luZm8pOworCQl1aW50MTZfdCBzaXplLCBkYXRhX29mZnNldDsKKwkJdWludDhfdCBmcmV2LCBjcmV2OworCQlBVE9NX1hUTURTX0lORk8gKnh0bWRzOworCisJCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIoY3R4LCBpbmRleCwgJnNpemUsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKKwkJeHRtZHMgPSAoQVRPTV9YVE1EU19JTkZPICopKGN0eC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKKworCQlpZiAoeHRtZHMtPnVjU3VwcG9ydGVkTGluayAmIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LKSB7CisJCQlpZiAoY29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9JOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJfSBlbHNlIHsKKwkJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRDsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBzdXBwb3J0ZWRfZGV2aWNlc19jb25uZWN0b3Jfb2JqZWN0X2lkX2NvbnZlcnQKKwkJCVtjb25uZWN0b3JfdHlwZV07CisJfQorfQorCiBzdHJ1Y3QgYmlvc19jb25uZWN0b3IgewogCWJvb2wgdmFsaWQ7CiAJdWludDE2X3QgbGluZV9tdXg7CkBAIC01OTYsMTQgKzY1NCwyMCBAQAogCiAJLyogYWRkIHRoZSBjb25uZWN0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0U7IGkrKykgewotCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKQorCQlpZiAoYmlvc19jb25uZWN0b3JzW2ldLnZhbGlkKSB7CisJCQl1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkID0KKwkJCQlhdG9tYmlvc19nZXRfY29ubmVjdG9yX29iamVjdF9pZChkZXYsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uY29ubmVjdG9yX3R5cGUsCisJCQkJCQkgICAgICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcyk7CiAJCQlyYWRlb25fYWRkX2F0b21fY29ubmVjdG9yKGRldiwKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLmxpbmVfbXV4LAogCQkJCQkJICBiaW9zX2Nvbm5lY3RvcnNbaV0uZGV2aWNlcywKIAkJCQkJCSAgYmlvc19jb25uZWN0b3JzW2ldLgogCQkJCQkJICBjb25uZWN0b3JfdHlwZSwKIAkJCQkJCSAgJmJpb3NfY29ubmVjdG9yc1tpXS5kZGNfYnVzLAotCQkJCQkJICBmYWxzZSwgMCk7CisJCQkJCQkgIGZhbHNlLCAwLAorCQkJCQkJICBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKKwkJfQogCX0KIAogCXJhZGVvbl9saW5rX2VuY29kZXJfY29ubmVjdG9yKGRldik7CkBAIC02NDQsOCArNzA4LDEyIEBACiAJCSAgICBsZTE2X3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvLnVzUmVmZXJlbmNlQ2xvY2spOwogCQlwMXBsbC0+cmVmZXJlbmNlX2RpdiA9IDA7CiAKLQkJcDFwbGwtPnBsbF9vdXRfbWluID0KLQkJICAgIGxlMTZfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udXNNaW5QaXhlbENsb2NrUExMX091dHB1dCk7CisJCWlmIChjcmV2IDwgMikKKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKKwkJZWxzZQorCQkJcDFwbGwtPnBsbF9vdXRfbWluID0KKwkJCQlsZTMyX3RvX2NwdShmaXJtd2FyZV9pbmZvLT5pbmZvXzEyLnVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQpOwogCQlwMXBsbC0+cGxsX291dF9tYXggPQogCQkgICAgbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mby51bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0KTsKIApAQCAtNjU0LDYgKzcyMiwxNiBAQAogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQkJZWxzZQogCQkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDIwMDAwOworCQl9IGVsc2UgaWYgKHAxcGxsLT5wbGxfb3V0X21pbiA+IDY0ODAwKSB7CisJCQkvKiBMaW1pdGluZyB0aGUgcGxsIG91dHB1dCByYW5nZSBpcyBhIGdvb2QgdGhpbmcgZ2VuZXJhbGx5IGFzCisJCQkgKiBpdCBsaW1pdHMgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBwbGwgY29tYmluYXRpb25zIGZvciBhIGdpdmVuCisJCQkgKiBmcmVxdWVuY3kgcHJlc3VtYWJseSB0byB0aGUgb25lcyB0aGF0IHdvcmsgYmVzdCBvbiBlYWNoIGNhcmQuCisJCQkgKiBIb3dldmVyLCBjZXJ0YWluIGR1YWxsaW5rIERWSSBtb25pdG9ycyBzZWVtIHRvIGxpa2UKKwkJCSAqIHBsbCBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBiZSBsaW1pdGVkIGJ5IHRoaXMgYXQgbGVhc3Qgb24KKwkJCSAqIHByZS1EQ0UgMy4wIHI2eHggaGFyZHdhcmUuICBUaGlzIG1pZ2h0IG5lZWQgdG8gYmUgYWRqdXN0ZWQgcGVyCisJCQkgKiBmYW1pbHkuCisJCQkgKi8KKwkJCXAxcGxsLT5wbGxfb3V0X21pbiA9IDY0ODAwOwogCQl9CiAKIAkJcDFwbGwtPnBsbF9pbl9taW4gPQpAQCAtNzcwLDYgKzg0OCw0NiBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKHN0cnVjdAorCQkJCQkJCSAgcmFkZW9uX2VuY29kZXIKKwkJCQkJCQkgICplbmNvZGVyLAorCQkJCQkJCSAgaW50IGlkKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5iYXNlLmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgUFBMTF9TU19JbmZvKTsKKwl1aW50MTZfdCBkYXRhX29mZnNldDsKKwlzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKnNzX2luZm87CisJdWludDhfdCBmcmV2LCBjcmV2OworCXN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MgPSBOVUxMOworCisJaWYgKGlkID4gQVRPTV9NQVhfU1NfRU5UUlkpCisJCXJldHVybiBOVUxMOworCisJYXRvbV9wYXJzZV9kYXRhX2hlYWRlcihtb2RlX2luZm8tPmF0b21fY29udGV4dCwgaW5kZXgsIE5VTEwsICZmcmV2LAorCQkJICAgICAgICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJc3NfaW5mbyA9CisJICAgIChzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCk7CisKKwlpZiAoc3NfaW5mbykgeworCQlzcyA9CisJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2F0b21fc3MpLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXNzKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3MtPnBlcmNlbnRhZ2UgPSBsZTE2X3RvX2NwdShzc19pbmZvLT5hc1NTX0luZm9baWRdLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKKwkJc3MtPnR5cGUgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU3ByZWFkU3BlY3RydW1UeXBlOworCQlzcy0+c3RlcCA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19TdGVwOworCQlzcy0+ZGVsYXkgPSBzc19pbmZvLT5hc1NTX0luZm9baWRdLnVjU1NfRGVsYXk7CisJCXNzLT5yYW5nZSA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNTU19SYW5nZTsKKwkJc3MtPnJlZmRpdiA9IHNzX2luZm8tPmFzU1NfSW5mb1tpZF0udWNSZWNvbW1lbmRlZFJlZl9EaXY7CisJfQorCXJldHVybiBzczsKK30KKwogdW5pb24gbHZkc19pbmZvIHsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIGluZm87CiAJc3RydWN0IF9BVE9NX0xWRFNfSU5GT19WMTIgaW5mb18xMjsKQEAgLTgwMSwyNyArOTE5LDMxIEBACiAJCWlmICghbHZkcykKIAkJCXJldHVybiBOVUxMOwogCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmRvdGNsb2NrID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuY2xvY2sgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNQaXhDbGspICogMTA7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hBY3RpdmUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQWN0aXZlKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUuaGJsYW5rID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSEJsYW5raW5nX1RpbWUpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5ob3ZlcnBsdXMgPQotCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY09mZnNldCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSFN5bmNXaWR0aCk7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnZibGFuayA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZCbGFua2luZ19UaW1lKTsKLQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzVlN5bmNPZmZzZXQpOwotCQlsdmRzLT5uYXRpdmVfbW9kZS52c3luY193aWR0aCA9Ci0JCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c1ZTeW5jV2lkdGgpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5odG90YWwgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hCbGFua2luZ19UaW1lKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgPSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSArCisJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0hTeW5jT2Zmc2V0KTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUuaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNIU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWQmxhbmtpbmdfVGltZSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX3N0YXJ0ID0gbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfZW5kID0gbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnNMQ0RUaW1pbmcudXNWU3luY1dpZHRoKTsKIAkJbHZkcy0+cGFuZWxfcHdyX2RlbGF5ID0KIAkJICAgIGxlMTZfdG9fY3B1KGx2ZHNfaW5mby0+aW5mby51c09mZkRlbGF5SW5Ncyk7CiAJCWx2ZHMtPmx2ZHNfbWlzYyA9IGx2ZHNfaW5mby0+aW5mby51Y0xWRFNfTWlzYzsKKwkJLyogc2V0IGNydGMgdmFsdWVzICovCisJCWRybV9tb2RlX3NldF9jcnRjaW5mbygmbHZkcy0+bmF0aXZlX21vZGUsIENSVENfSU5URVJMQUNFX0hBTFZFX1YpOworCisJCWx2ZHMtPnNzID0gcmFkZW9uX2F0b21iaW9zX2dldF9zc19pbmZvKGVuY29kZXIsIGx2ZHNfaW5mby0+aW5mby51Y1NTX0lkKTsKIAogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0KQEAgLTg2MCw4ICs5ODIsNyBAQAogfQogCiBib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCi0JCQkJU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiAqY3J0Y190aW1pbmcsCi0JCQkJaW50MzJfdCAqcGl4ZWxfY2xvY2spCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9tb2RlX2luZm8gKm1vZGVfaW5mbyA9ICZyZGV2LT5tb2RlX2luZm87CiAJQVRPTV9BTkFMT0dfVFZfSU5GTyAqdHZfaW5mbzsKQEAgLTg2OSw3ICs5OTAsNyBAQAogCUFUT01fRFREX0ZPUk1BVCAqZHRkX3RpbWluZ3M7CiAJaW50IGRhdGFfaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBBbmFsb2dUVl9JbmZvKTsKIAl1OCBmcmV2LCBjcmV2OwotCXVpbnQxNl90IGRhdGFfb2Zmc2V0OworCXUxNiBkYXRhX29mZnNldCwgbWlzYzsKIAogCWF0b21fcGFyc2VfZGF0YV9oZWFkZXIobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQsIGRhdGFfaW5kZXgsIE5VTEwsICZmcmV2LCAmY3JldiwgJmRhdGFfb2Zmc2V0KTsKIApAQCAtODc5LDI4ICsxMDAwLDM3IEBACiAJCWlmIChpbmRleCA+IE1BWF9TVVBQT1JURURfVFZfVElNSU5HKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCWNydGNfdGltaW5nLT51c0hfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzSF9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzSF9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c0hfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfVG90YWwpOworCQltb2RlLT5jcnRjX2hkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9EaXNwKTsKKwkJbW9kZS0+Y3J0Y19oc3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX0hfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y19oc3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19IX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfSF9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT51c1ZfVG90YWwgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1RvdGFsKTsKLQkJY3J0Y190aW1pbmctPnVzVl9EaXNwID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKLQkJY3J0Y190aW1pbmctPnVzVl9TeW5jU3RhcnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCk7Ci0JCWNydGNfdGltaW5nLT51c1ZfU3luY1dpZHRoID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX3Z0b3RhbCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfVG90YWwpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9EaXNwKTsKKwkJbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX1ZfU3luY1N0YXJ0KTsKKwkJbW9kZS0+Y3J0Y192c3luY19lbmQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19WX1N5bmNTdGFydCkgKworCQkJbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS51c0NSVENfVl9TeW5jV2lkdGgpOwogCi0JCWNydGNfdGltaW5nLT5zdXNNb2RlTWlzY0luZm8gPSB0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnN1c01vZGVNaXNjSW5mbzsKKwkJbW9kZS0+ZmxhZ3MgPSAwOworCQltaXNjID0gbGUxNl90b19jcHUodHZfaW5mby0+YU1vZGVUaW1pbmdzW2luZGV4XS5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOworCQlpZiAobWlzYyAmIEFUT01fVlNZTkNfUE9MQVJJVFkpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX05WU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0hTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OSFNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9DT01QT1NJVEVTWU5DKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19DU1lOQzsKKwkJaWYgKG1pc2MgJiBBVE9NX0lOVEVSTEFDRSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CiAKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5SaWdodCA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuUmlnaHQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkxlZnQgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhbkxlZnQpOwotCQljcnRjX3RpbWluZy0+dWNPdmVyc2NhbkJvdHRvbSA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNDUlRDX092ZXJzY2FuQm90dG9tKTsKLQkJY3J0Y190aW1pbmctPnVjT3ZlcnNjYW5Ub3AgPSBsZTE2X3RvX2NwdSh0dl9pbmZvLT5hTW9kZVRpbWluZ3NbaW5kZXhdLnVzQ1JUQ19PdmVyc2NhblRvcCk7Ci0JCSpwaXhlbF9jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOworCQltb2RlLT5jbG9jayA9IGxlMTZfdG9fY3B1KHR2X2luZm8tPmFNb2RlVGltaW5nc1tpbmRleF0udXNQaXhlbENsb2NrKSAqIDEwOwogCiAJCWlmIChpbmRleCA9PSAxKSB7CiAJCQkvKiBQQUwgdGltaW5ncyBhcHBlYXIgdG8gaGF2ZSB3cm9uZyB2YWx1ZXMgZm9yIHRvdGFscyAqLwotCQkJY3J0Y190aW1pbmctPnVzSF9Ub3RhbCAtPSAxOwotCQkJY3J0Y190aW1pbmctPnVzVl9Ub3RhbCAtPSAxOworCQkJbW9kZS0+Y3J0Y19odG90YWwgLT0gMTsKKwkJCW1vZGUtPmNydGNfdnRvdGFsIC09IDE7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAyOgpAQCAtOTA5LDE3ICsxMDM5LDM2IEBACiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJZHRkX3RpbWluZ3MgPSAmdHZfaW5mb192MV8yLT5hTW9kZVRpbWluZ3NbaW5kZXhdOwotCQljcnRjX3RpbWluZy0+dXNIX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNIQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c0hfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNIX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hTeW5jV2lkdGgpOwotCQljcnRjX3RpbWluZy0+dXNWX1RvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKyBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQmxhbmtpbmdfVGltZSk7Ci0JCWNydGNfdGltaW5nLT51c1ZfRGlzcCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNTdGFydCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZBY3RpdmUpICsgbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVlN5bmNPZmZzZXQpOwotCQljcnRjX3RpbWluZy0+dXNWX1N5bmNXaWR0aCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c1ZTeW5jV2lkdGgpOworCQltb2RlLT5jcnRjX2h0b3RhbCA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpICsKKwkJCWxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hCbGFua2luZ19UaW1lKTsKKwkJbW9kZS0+Y3J0Y19oZGlzcGxheSA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT51c0hBY3RpdmUpOworCQltb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSEFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNPZmZzZXQpOworCQltb2RlLT5jcnRjX2hzeW5jX2VuZCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzSFN5bmNXaWR0aCk7CiAKLQkJY3J0Y190aW1pbmctPnN1c01vZGVNaXNjSW5mby51c0FjY2VzcyA9IGxlMTZfdG9fY3B1KGR0ZF90aW1pbmdzLT5zdXNNb2RlTWlzY0luZm8udXNBY2Nlc3MpOwotCQkqcGl4ZWxfY2xvY2sgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNQaXhDbGspICogMTA7CisJCW1vZGUtPmNydGNfdnRvdGFsID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSkgKworCQkJbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkJsYW5raW5nX1RpbWUpOworCQltb2RlLT5jcnRjX3ZkaXNwbGF5ID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzVkFjdGl2ZSk7CisJCW1vZGUtPmNydGNfdnN5bmNfc3RhcnQgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWQWN0aXZlKSArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY09mZnNldCk7CisJCW1vZGUtPmNydGNfdnN5bmNfZW5kID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCArCisJCQlsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+dXNWU3luY1dpZHRoKTsKKworCQltb2RlLT5mbGFncyA9IDA7CisJCW1pc2MgPSBsZTE2X3RvX2NwdShkdGRfdGltaW5ncy0+c3VzTW9kZU1pc2NJbmZvLnVzQWNjZXNzKTsKKwkJaWYgKG1pc2MgJiBBVE9NX1ZTWU5DX1BPTEFSSVRZKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19OVlNZTkM7CisJCWlmIChtaXNjICYgQVRPTV9IU1lOQ19QT0xBUklUWSkKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfTkhTWU5DOworCQlpZiAobWlzYyAmIEFUT01fQ09NUE9TSVRFU1lOQykKKwkJCW1vZGUtPmZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfQ1NZTkM7CisJCWlmIChtaXNjICYgQVRPTV9JTlRFUkxBQ0UpCisJCQltb2RlLT5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKKwkJaWYgKG1pc2MgJiBBVE9NX0RPVUJMRV9DTE9DS19NT0RFKQorCQkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19EQkxTQ0FOOworCisJCW1vZGUtPmNsb2NrID0gbGUxNl90b19jcHUoZHRkX3RpbWluZ3MtPnVzUGl4Q2xrKSAqIDEwOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHRydWU7CkBAIC05ODQsNiArMTEzMywyNCBAQAogCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOwogfQogCit1aW50MzJfdCByYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCUdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBhcmdzOworCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEdldEVuZ2luZUNsb2NrKTsKKworCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmFyZ3MpOworCXJldHVybiBhcmdzLnVsUmV0dXJuRW5naW5lQ2xvY2s7Cit9CisKK3VpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJR0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CisJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0TWVtb3J5Q2xvY2spOworCisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJcmV0dXJuIGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jazsKK30KKwogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCSAgdWludDMyX3QgZW5nX2Nsb2NrKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmVuY2htYXJrLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwppbmRleCAyZTkzOGY3Li4xMGJkNTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iZW5jaG1hcmsuYwpAQCAtNjMsNyArNjMsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5X2RtYShyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQpAQCAtODgsNyArODgsNyBAQAogCQlpZiAocikgewogCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQotCQlyID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzYWRkciwgZGFkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weV9ibGl0KHJkZXYsIHNhZGRyLCBkYWRkciwgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLCBmZW5jZSk7CiAJCWlmIChyKSB7CiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKaW5kZXggOTZlMzdhNi4uOTA2OTIxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYwpAQCAtMzMsMTIgKzMzLDQ3IEBACiAvKgogICogQklPUy4KICAqLworCisvKiBJZiB5b3UgYm9vdCBhbiBJR1AgYm9hcmQgd2l0aCBhIGRpc2NyZXRlIGNhcmQgYXMgdGhlIHByaW1hcnksCisgKiB0aGUgSUdQIHJvbSBpcyBub3QgYWNjZXNzaWJsZSB2aWEgdGhlIHJvbSBiYXIgYXMgdGhlIElHUCByb20gaXMKKyAqIHBhcnQgb2YgdGhlIHN5c3RlbSBiaW9zLiAgT24gYm9vdCwgdGhlIHN5c3RlbSBiaW9zIHB1dHMgYQorICogY29weSBvZiB0aGUgaWdwIHJvbSBhdCB0aGUgc3RhcnQgb2YgdnJhbSBpZiBhIGRpc2NyZXRlIGNhcmQgaXMKKyAqIHByZXNlbnQuCisgKi8KK3N0YXRpYyBib29sIGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXVpbnQ4X3QgX19pb21lbSAqYmlvczsKKwlyZXNvdXJjZV9zaXplX3QgdnJhbV9iYXNlOworCXJlc291cmNlX3NpemVfdCBzaXplID0gMjU2ICogMTAyNDsgLyogPz8/ICovCisKKwlyZGV2LT5iaW9zID0gTlVMTDsKKwl2cmFtX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOworCWJpb3MgPSBpb3JlbWFwKHZyYW1fYmFzZSwgc2l6ZSk7CisJaWYgKCFiaW9zKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwIHx8IGJpb3NbMF0gIT0gMHg1NSB8fCBiaW9zWzFdICE9IDB4YWEpIHsKKwkJaW91bm1hcChiaW9zKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZGV2LT5iaW9zID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocmRldi0+YmlvcyA9PSBOVUxMKSB7CisJCWlvdW5tYXAoYmlvcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJbWVtY3B5KHJkZXYtPmJpb3MsIGJpb3MsIHNpemUpOworCWlvdW5tYXAoYmlvcyk7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdWludDhfdCBfX2lvbWVtICpiaW9zOwogCXNpemVfdCBzaXplOwogCiAJcmRldi0+YmlvcyA9IE5VTEw7CisJLyogWFhYOiBzb21lIGNhcmRzIG1heSByZXR1cm4gMCBmb3Igcm9tIHNpemU/IGRkeCBoYXMgYSB3b3JrYXJvdW5kICovCiAJYmlvcyA9IHBjaV9tYXBfcm9tKHJkZXYtPnBkZXYsICZzaXplKTsKIAlpZiAoIWJpb3MpIHsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzQxLDcgKzM3Niw5IEBACiAKIHN0YXRpYyBib29sIHJhZGVvbl9yZWFkX2Rpc2FibGVkX2Jpb3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJldHVybiBpZ3BfcmVhZF9iaW9zX2Zyb21fdnJhbShyZGV2KTsKKwllbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjc3MCkKIAkJcmV0dXJuIHI3MDBfcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCiAJCXJldHVybiByNjAwX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKQEAgLTM1Niw3ICszOTMsMTIgQEAKIAlib29sIHI7CiAJdWludDE2X3QgdG1wOwogCi0JciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlyID0gaWdwX3JlYWRfYmlvc19mcm9tX3ZyYW0ocmRldik7CisJCWlmIChyID09IGZhbHNlKQorCQkJciA9IHJhZGVvbl9yZWFkX2Jpb3MocmRldik7CisJfSBlbHNlCisJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOwogCWlmIChyID09IGZhbHNlKSB7CiAJCXIgPSByYWRlb25fcmVhZF9kaXNhYmxlZF9iaW9zKHJkZXYpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggMTUyZWVmMS4uYTgxMzU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJhdG9tLmgiCiAKIC8qIDEwIGtoeiAqLwotc3RhdGljIHVpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3VpbnQzMl90IHJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqc3BsbCA9ICZyZGV2LT5jbG9jay5zcGxsOwogCXVpbnQzMl90IGZiX2RpdiwgcmVmX2RpdiwgcG9zdF9kaXYsIHNjbGs7CkBAIC00MTEsNyArNDExLDcgQEAKIAkJCQkJUjMwMF9QSVhDTEtfVFJBTlNfQUxXQVlTX09OYiB8CiAJCQkJCVIzMDBfUElYQ0xLX1RWT19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAotCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYik7CisJCQkJCVIzMDBfUDJHMkNMS19EQUNfQUxXQVlTX09OYik7CiAJCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQkJfSBlbHNlIGlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjM1MCkgewogCQkJCXRtcCA9IFJSRUczMl9QTEwoUjMwMF9TQ0xLX0NOVEwyKTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCQkJCQlSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkJUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCQlSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJCVIzMDBfUDJHMkNMS19BTFdBWVNfT05iKTsKKwkJCQkJUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iKTsKIAkJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAKIAkJCQl0bXAgPSBSUkVHMzJfUExMKFJBREVPTl9NQ0xLX01JU0MpOwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCQkJIFIzMDBfUElYQ0xLX1RSQU5TX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1BJWENMS19UVk9fQUxXQVlTX09OYiB8CiAJCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKLQkJCQkgUjMwMF9QMkcyQ0xLX0FMV0FZU19PTmIgfAorCQkJCSBSMzAwX1AyRzJDTEtfREFDX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX0RJU1BfREFDX1BJWENMS19EQUMyX0JMQU5LX09GRik7CiAJCQlXUkVHMzJfUExMKFJBREVPTl9QSVhDTEtTX0NOVEwsIHRtcCk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzNTApIHsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQkJCSBSMzAwX1BJWENMS19UUkFOU19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9QSVhDTEtfVFZPX0FMV0FZU19PTmIgfAogCQkJCSBSMzAwX1AyRzJDTEtfQUxXQVlTX09OYiB8Ci0JCQkJIFIzMDBfUDJHMkNMS19BTFdBWVNfT05iIHwKKwkJCQkgUjMwMF9QMkcyQ0xLX0RBQ19BTFdBWVNfT05iIHwKIAkJCQkgUjMwMF9ESVNQX0RBQ19QSVhDTEtfREFDMl9CTEFOS19PRkYpOwogCQkJV1JFRzMyX1BMTChSQURFT05fUElYQ0xLU19DTlRMLCB0bXApOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDc0ODI2NWEuLjUyNTNjYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTQ5LDcgKzQ5LDggQEAKIAkJCSAgICB1aW50MzJfdCBjb25uZWN0b3JfaWQsCiAJCQkgICAgdWludDMyX3Qgc3VwcG9ydGVkX2RldmljZSwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cyk7CisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKTsKIAogLyogZnJvbSByYWRlb25fbGVnYWN5X2VuY29kZXIuYyAqLwogZXh0ZXJuIHZvaWQKQEAgLTgwOCwyNSArODA5LDI1IEBACiAJbHZkcy0+cGFuZWxfYmxvbl9kZWxheSA9IChsdmRzX3NzX2dlbl9jbnRsID4+IFJBREVPTl9MVkRTX1BXUlNFUV9ERUxBWTJfU0hJRlQpICYgMHhmOwogCiAJaWYgKGZwX3ZlcnRfc3RyZXRjaCAmIFJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFKQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKChmcF92ZXJ0X3N0cmV0Y2ggJiBSQURFT05fVkVSVF9QQU5FTF9TSVpFKSA+PgogCQkgICAgIFJBREVPTl9WRVJUX1BBTkVMX1NISUZUKSArIDE7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPQogCQkgICAgKFJSRUczMihSQURFT05fQ1JUQ19WX1RPVEFMX0RJU1ApID4+IDE2KSArIDE7CiAKIAlpZiAoZnBfaG9yel9zdHJldGNoICYgUkFERU9OX0hPUlpfU1RSRVRDSF9FTkFCTEUpCi0JCWx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPQorCQlsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSA9CiAJCSAgICAoKChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9QQU5FTF9TSVpFKSA+PgogCQkgICAgICBSQURFT05fSE9SWl9QQU5FTF9TSElGVCkgKyAxKSAqIDg7CiAJZWxzZQotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0KKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPQogCQkgICAgKChSUkVHMzIoUkFERU9OX0NSVENfSF9UT1RBTF9ESVNQKSA+PiAxNikgKyAxKSAqIDg7CiAKLQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMgPCA2NDApIHx8Ci0JICAgIChsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzIDwgNDgwKSkgewotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzID0gNjQwOwotCQlsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzID0gNDgwOworCWlmICgobHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPCA2NDApIHx8CisJICAgIChsdmRzLT5uYXRpdmVfbW9kZS52ZGlzcGxheSA8IDQ4MCkpIHsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSA2NDA7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gNDgwOwogCX0KIAogCXBwbGxfZGl2X3NlbCA9IFJSRUc4KFJBREVPTl9DTE9DS19DTlRMX0lOREVYICsgMSkgJiAweDM7CkBAIC04NDYsOCArODQ3LDggQEAKIAlsdmRzLT5wYW5lbF92Y2NfZGVsYXkgPSAyMDA7CiAKIAlEUk1fSU5GTygiUGFuZWwgaW5mbyBkZXJpdmVkIGZyb20gcmVnaXN0ZXJzXG4iKTsKLQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcywKLQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSwKKwkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KTsKIAogCXJldHVybiBsdmRzOwogfQpAQCAtODgyLDExICs4ODMsMTEgQEAKIAogCQlEUk1fSU5GTygiUGFuZWwgSUQgU3RyaW5nOiAlc1xuIiwgc3RtcCk7CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDE5KTsKLQkJbHZkcy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyA9IFJCSU9TMTYobGNkX2luZm8gKyAweDFiKTsKKwkJbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXkgPSBSQklPUzE2KGxjZF9pbmZvICsgMHgxOSk7CisJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5ID0gUkJJT1MxNihsY2RfaW5mbyArIDB4MWIpOwogCi0JCURSTV9JTkZPKCJQYW5lbCBTaXplICVkeCVkXG4iLCBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF94cmVzLAotCQkJIGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3lyZXMpOworCQlEUk1fSU5GTygiUGFuZWwgU2l6ZSAlZHglZFxuIiwgbHZkcy0+bmF0aXZlX21vZGUuaGRpc3BsYXksCisJCQkgbHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCiAJCWx2ZHMtPnBhbmVsX3ZjY19kZWxheSA9IFJCSU9TMTYobGNkX2luZm8gKyAweDJjKTsKIAkJaWYgKGx2ZHMtPnBhbmVsX3ZjY19kZWxheSA+IDIwMDAgfHwgbHZkcy0+cGFuZWxfdmNjX2RlbGF5IDwgMCkKQEAgLTk0NCwyNyArOTQ1LDI1IEBACiAJCQlpZiAodG1wID09IDApCiAJCQkJYnJlYWs7CiAKLQkJCWlmICgoUkJJT1MxNih0bXApID09IGx2ZHMtPm5hdGl2ZV9tb2RlLnBhbmVsX3hyZXMpICYmCisJCQlpZiAoKFJCSU9TMTYodG1wKSA9PSBsdmRzLT5uYXRpdmVfbW9kZS5oZGlzcGxheSkgJiYKIAkJCSAgICAoUkJJT1MxNih0bXAgKyAyKSA9PQotCQkJICAgICBsdmRzLT5uYXRpdmVfbW9kZS5wYW5lbF95cmVzKSkgewotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhibGFuayA9Ci0JCQkJICAgIChSQklPUzE2KHRtcCArIDE3KSAtIFJCSU9TMTYodG1wICsgMTkpKSAqIDg7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuaG92ZXJwbHVzID0KLQkJCQkgICAgKFJCSU9TMTYodG1wICsgMjEpIC0gUkJJT1MxNih0bXAgKyAxOSkgLQotCQkJCSAgICAgMSkgKiA4OwotCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmhzeW5jX3dpZHRoID0KLQkJCQkgICAgUkJJT1M4KHRtcCArIDIzKSAqIDg7CisJCQkgICAgIGx2ZHMtPm5hdGl2ZV9tb2RlLnZkaXNwbGF5KSkgeworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmh0b3RhbCA9IFJCSU9TMTYodG1wICsgMTcpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19zdGFydCA9IFJCSU9TMTYodG1wICsgMjEpICogODsKKwkJCQlsdmRzLT5uYXRpdmVfbW9kZS5oc3luY19lbmQgPSAoUkJJT1M4KHRtcCArIDIzKSArCisJCQkJCQkJICAgICAgIFJCSU9TMTYodG1wICsgMjEpKSAqIDg7CiAKLQkJCQlsdmRzLT5uYXRpdmVfbW9kZS52YmxhbmsgPSAoUkJJT1MxNih0bXAgKyAyNCkgLQotCQkJCQkJCSAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudm92ZXJwbHVzID0KLQkJCQkgICAgKChSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKSAtCi0JCQkJICAgICBSQklPUzE2KHRtcCArIDI2KSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfd2lkdGggPQotCQkJCSAgICAoKFJCSU9TMTYodG1wICsgMjgpICYgMHhmODAwKSA+PiAxMSk7Ci0JCQkJbHZkcy0+bmF0aXZlX21vZGUuZG90Y2xvY2sgPQotCQkJCSAgICBSQklPUzE2KHRtcCArIDkpICogMTA7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnRvdGFsID0gUkJJT1MxNih0bXAgKyAyNCk7CisJCQkJbHZkcy0+bmF0aXZlX21vZGUudnN5bmNfc3RhcnQgPSBSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmOworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLnZzeW5jX2VuZCA9CisJCQkJCSgoUkJJT1MxNih0bXAgKyAyOCkgJiAweGY4MDApID4+IDExKSArCisJCQkJCShSQklPUzE2KHRtcCArIDI4KSAmIDB4N2ZmKTsKKworCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmNsb2NrID0gUkJJT1MxNih0bXAgKyA5KSAqIDEwOwogCQkJCWx2ZHMtPm5hdGl2ZV9tb2RlLmZsYWdzID0gMDsKKwkJCQkvKiBzZXQgY3J0YyB2YWx1ZXMgKi8KKwkJCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJmx2ZHMtPm5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKKwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTExNzgsNyArMTE3Nyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSBpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfTU9CSUxJVFkpIHsKIAkJCS8qIExWRFMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0xDRF9HUElPX01BU0spOwpAQCAtMTE5MCw3ICsxMTkwLDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCiAJCQkvKiBWR0EgLSBwcmltYXJ5IGRhYyAqLwogCQkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19WR0FfRERDKTsKQEAgLTEyMDIsNyArMTIwMyw4IEBACiAJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKIAkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfVkdBLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBEVkktSSAtIHR2IGRhYywgaW50IHRtZHMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fRFZJX0REQyk7CkBAIC0xMjIwLDcgKzEyMjIsOCBAQAogCQkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JKTsKIAogCQkJLyogVkdBIC0gcHJpbWFyeSBkYWMgKi8KIAkJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CkBAIC0xMjMyLDcgKzEyMzUsOCBAQAogCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQl9CiAKIAkJaWYgKHJkZXYtPmZhbWlseSAhPSBDSElQX1IxMDAgJiYgcmRldi0+ZmFtaWx5ICE9IENISVBfUjIwMCkgewpAQCAtMTI0NSw3ICsxMjQ5LDggQEAKIAkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1RfSUJPT0s6CkBAIC0xMjU5LDcgKzEyNjQsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUywgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9MVkRTKTsKIAkJLyogVkdBIC0gVFYgREFDICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTI2OCw3ICsxMjc0LDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMjc3LDcgKzEyODQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0VYVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGV4dGVybmFsIHRtZHMpXG4iLApAQCAtMTI5MCw3ICsxMjk4LDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGV4dCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTMwMywxMCArMTMxMiwxMiBAQAogCQkJCQkJCQlBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCS8qIFhYWCBzb21lIGFyZSBTTCAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAxLAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwKIAkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYyk7CisJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzE1LDcgKzEzMjYsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX0lOVEVSTkFMOgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAocG93ZXJib29rIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTMyOCw3ICsxMzQwLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIERWSS1JIC0gcHJpbWFyeSBkYWMsIGludCB0bWRzICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM0NCw3ICsxMzU3LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzUzLDcgKzEzNjcsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfUE9XRVJCT09LX1ZHQToKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKHBvd2VyYm9vayB2Z2EpXG4iLApAQCAtMTM2Niw3ICsxMzgxLDggQEAKIAkJCQkJCQkJMCksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0xWRFMsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfTFZEUyk7CiAJCS8qIFZHQSAtIHByaW1hcnkgZGFjICovCiAJCWRkY19pMmMgPSBjb21iaW9zX3NldHVwX2kyY19idXMoUkFERU9OX0dQSU9fVkdBX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTM3NSw3ICsxMzkxLDggQEAKIAkJCQkJCQkJMSksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xMzg0LDcgKzE0MDEsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfTUlOSV9FWFRFUk5BTDoKIAkJRFJNX0lORk8oIkNvbm5lY3RvciBUYWJsZTogJWQgKG1pbmkgZXh0ZXJuYWwgdG1kcylcbiIsCkBAIC0xNDAxLDEwICsxNDE5LDEyIEBACiAJCQkJCQkJCUFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKKwkJLyogWFhYIGFyZSBhbnkgREw/ICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCiAJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAogCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJLCAmZGRjX2kyYywKKwkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQxMyw3ICsxNDMzLDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX01JTklfSU5URVJOQUw6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChtaW5pIGludGVybmFsIHRtZHMpXG4iLApAQCAtMTQzMyw3ICsxNDU0LDggQEAKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMCwKIAkJCQkJICAgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8CiAJCQkJCSAgICBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNDQyLDcgKzE0NjQsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWNhc2UgQ1RfSU1BQ19HNV9JU0lHSFQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChpbWFjIGc1IGlzaWdodClcbiIsCkBAIC0xNDU1LDcgKzE0NzgsOCBAQAogCQkJCQkJCQkwKSwKIAkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCAwLCBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCi0JCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfRCk7CiAJCS8qIFZHQSAtIHR2IGRhYyAqLwogCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX0RWSV9EREMpOwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKQEAgLTE0NjQsNyArMTQ4OCw4IEBACiAJCQkJCQkJCTIpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBUViAtIFRWIERBQyAqLwogCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKIAkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQoZGV2LApAQCAtMTQ3Myw3ICsxNDk4LDggQEAKIAkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDIsIEFUT01fREVWSUNFX1RWMV9TVVBQT1JULAogCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKLQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TVklERU8pOwogCQlicmVhazsKIAljYXNlIENUX0VNQUM6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgVGFibGU6ICVkIChlbWFjKVxuIiwKQEAgLTE0ODYsNyArMTUxMiw4IEBACiAJCQkJCQkJCTEpLAogCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKLQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjKTsKKwkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9WR0EpOwogCQkvKiBWR0EgLSB0diBkYWMgKi8KIAkJZGRjX2kyYyA9IGNvbWJpb3Nfc2V0dXBfaTJjX2J1cyhSQURFT05fR1BJT19DUlQyX0REQyk7CiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTQ5NSw3ICsxNTIyLDggQEAKIAkJCQkJCQkJMiksCiAJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMSwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAotCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMpOworCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1ZHQSk7CiAJCS8qIFRWIC0gVFYgREFDICovCiAJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LAogCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCkBAIC0xNTA0LDcgKzE1MzIsOCBAQAogCQkJCQkgIEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKTsKIAkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgMiwgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCiAJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAotCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9JTkZPKCJDb25uZWN0b3IgdGFibGU6ICVkIChpbnZhbGlkKVxuIiwKQEAgLTE1ODEsMTEgKzE2MTAsNjMgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgcmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwkvKiBBY2VyIDUxMDIgaGFzIG5vbi1leGlzdGVudCBUViBwb3J0ICovCisJaWYgKGRldi0+cGRldi0+ZGV2aWNlID09IDB4NTk3NSAmJgorCSAgICBkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDI1ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAwOWYpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEhQIGRjNTc1MCBoYXMgbm9uLWV4aXN0ZW50IFRWIHBvcnQgKi8KKwlpZiAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg1OTc0ICYmCisJICAgIGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwM2MgJiYKKwkgICAgZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MjgwYSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBjb21iaW9zX2NoZWNrX2RsX2R2aShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaXNfZHZpX2QpCit7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IGV4dF90bWRzX2luZm87CisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCWlmIChpc19kdmlfZCkKKwkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCQllbHNlCisJCQlyZXR1cm4gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwl9CisJZXh0X3RtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfRVhUX1RNRFNfSU5GT19UQUJMRSk7CisJaWYgKGV4dF90bWRzX2luZm8pIHsKKwkJdWludDhfdCByZXYgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyk7CisJCXVpbnQ4X3QgZmxhZ3MgPSBSQklPUzgoZXh0X3RtZHNfaW5mbyArIDQgKyA1KTsKKwkJaWYgKHJldiA+PSAzKSB7CisJCQlpZiAoaXNfZHZpX2QpCisJCQkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9EOworCQkJZWxzZQorCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJfSBlbHNlIHsKKwkJCWlmIChmbGFncyAmIDEpIHsKKwkJCQlpZiAoaXNfZHZpX2QpCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRDsKKwkJCQllbHNlCisJCQkJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaXNfZHZpX2QpCisJCXJldHVybiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EOworCWVsc2UKKwkJcmV0dXJuIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0k7Cit9CisKIGJvb2wgcmFkZW9uX2dldF9sZWdhY3lfY29ubmVjdG9yX2luZm9fZnJvbV9iaW9zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IGNvbm5faW5mbywgZW50cnksIGRldmljZXM7Ci0JdWludDE2X3QgdG1wOworCXVpbnQxNl90IHRtcCwgY29ubmVjdG9yX29iamVjdF9pZDsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2RkYyBkZGNfdHlwZTsKIAllbnVtIHJhZGVvbl9jb21iaW9zX2Nvbm5lY3RvciBjb25uZWN0b3I7CiAJaW50IGkgPSAwOwpAQCAtMTYyOCw4ICsxNzA5LDkgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcmFkZW9uX2FwcGx5X2xlZ2FjeV9xdWlya3MoZGV2LCBpLCAmY29ubmVjdG9yLAotCQkJCQkJICAgJmRkY19pMmMpOworCQkJaWYgKCFyYWRlb25fYXBwbHlfbGVnYWN5X3F1aXJrcyhkZXYsIGksICZjb25uZWN0b3IsCisJCQkJCQkgICAgICAgJmRkY19pMmMpKQorCQkJCWNvbnRpbnVlOwogCiAJCQlzd2l0Y2ggKGNvbm5lY3RvcikgewogCQkJY2FzZSBDT05ORUNUT1JfUFJPUFJJRVRBUllfTEVHQUNZOgpAQCAtMTY0NCw3ICsxNzI2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1JUX0xFR0FDWToKIAkJCQlpZiAodG1wICYgMHgxKSB7CkBAIC0xNjY5LDcgKzE3NTIsOCBAQAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgQ09OTkVDVE9SX0RWSV9JX0xFR0FDWToKIAkJCQlkZXZpY2VzID0gMDsKQEAgLTE2OTgsNiArMTc4Miw3IEBACiAJCQkJCQkJCSAgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCwKIAkJCQkJCQkJICAgMCksCiAJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKTsKKwkJCQkJY29ubmVjdG9yX29iamVjdF9pZCA9IGNvbWJpb3NfY2hlY2tfZGxfZHZpKGRldiwgMCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJZGV2aWNlcyB8PSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQ7CiAJCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2VuY29kZXIoZGV2LApAQCAtMTcwNiwxOSArMTc5MSwyNCBAQAogCQkJCQkJCQkgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkJCSAgIDApLAogCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCk7CisJCQkJCWNvbm5lY3Rvcl9vYmplY3RfaWQgPSBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9JOwogCQkJCX0KIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LAogCQkJCQkJCSAgICBpLAogCQkJCQkJCSAgICBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfRFZJX0RfTEVHQUNZOgotCQkJCWlmICgodG1wID4+IDQpICYgMHgxKQorCQkJCWlmICgodG1wID4+IDQpICYgMHgxKSB7CiAJCQkJCWRldmljZXMgPSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQ7Ci0JCQkJZWxzZQorCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gY29tYmlvc19jaGVja19kbF9kdmkoZGV2LCAxKTsKKwkJCQl9IGVsc2UgewogCQkJCQlkZXZpY2VzID0gQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUOworCQkJCQljb25uZWN0b3Jfb2JqZWN0X2lkID0gQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSTsKKwkJCQl9CiAJCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCiAJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKIAkJCQkJCQkgIChkZXYsIGRldmljZXMsIDApLApAQCAtMTcyNiw3ICsxODE2LDggQEAKIAkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCBpLCBkZXZpY2VzLAogCQkJCQkJCSAgICBsZWdhY3lfY29ubmVjdG9yX2NvbnZlcnQKIAkJCQkJCQkgICAgW2Nvbm5lY3Rvcl0sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBDT05ORUNUT1JfQ1RWX0xFR0FDWToKIAkJCWNhc2UgQ09OTkVDVE9SX1NUVl9MRUdBQ1k6CkBAIC0xNzQwLDcgKzE4MzEsOCBAQAogCQkJCQkJCSAgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKIAkJCQkJCQkgICAgbGVnYWN5X2Nvbm5lY3Rvcl9jb252ZXJ0CiAJCQkJCQkJICAgIFtjb25uZWN0b3JdLAotCQkJCQkJCSAgICAmZGRjX2kyYyk7CisJCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCURSTV9FUlJPUigiVW5rbm93biBjb25uZWN0b3IgdHlwZTogJWRcbiIsCkBAIC0xNzcyLDEwICsxODY0LDI5IEBACiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwKIAkJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQsCiAJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksCi0JCQkJCQkgICAgJmRkY19pMmMpOworCQkJCQkJICAgICZkZGNfaTJjLAorCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0kpOwogCQl9IGVsc2UgewotCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7Ci0JCQlyZXR1cm4gZmFsc2U7CisJCQl1aW50MTZfdCBjcnRfaW5mbyA9CisJCQkJY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CisJCQlEUk1fREVCVUcoIkZvdW5kIENSVCB0YWJsZSwgYXNzdW1pbmcgVkdBIGNvbm5lY3RvclxuIik7CisJCQlpZiAoY3J0X2luZm8pIHsKKwkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkgIHJhZGVvbl9nZXRfZW5jb2Rlcl9pZChkZXYsCisJCQkJCQkJCQkJQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCQkJCTEpLAorCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUKTsKKwkJCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKFJBREVPTl9HUElPX1ZHQV9EREMpOworCQkJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsCisJCQkJCQkJICAgIDAsCisJCQkJCQkJICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCwKKwkJCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX1ZHQSwKKwkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfVkdBKTsKKwkJCX0gZWxzZSB7CisJCQkJRFJNX0RFQlVHKCJObyBjb25uZWN0b3IgaW5mbyBmb3VuZFxuIik7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQogCQl9CiAJfQogCkBAIC0xODcwLDcgKzE5ODEsOCBAQAogCQkJCQkJICAgIDUsCiAJCQkJCQkgICAgQVRPTV9ERVZJQ0VfTENEMV9TVVBQT1JULAogCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTLAotCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQkJCSAgICAmZGRjX2kyYywKKwkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0xWRFMpOwogCQl9CiAJfQogCkBAIC0xODgwLDE2ICsxOTkyLDE5IEBACiAJCSAgICBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCQlpZiAodHZfaW5mbykgewogCQkJaWYgKFJCSU9TOCh0dl9pbmZvICsgNikgPT0gJ1QnKSB7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCi0JCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKLQkJCQkJCQkgIChkZXYsCi0JCQkJCQkJICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgMiksCi0JCQkJCQkJICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCk7Ci0JCQkJcmFkZW9uX2FkZF9sZWdhY3lfY29ubmVjdG9yKGRldiwgNiwKLQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCi0JCQkJCQkJICAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8sCi0JCQkJCQkJICAgICZkZGNfaTJjKTsKKwkJCQlpZiAocmFkZW9uX2FwcGx5X2xlZ2FjeV90dl9xdWlya3MoZGV2KSkgeworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfaWQKKwkJCQkJCQkJICAoZGV2LAorCQkJCQkJCQkgICBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCwKKwkJCQkJCQkJICAgMiksCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpOworCQkJCQlyYWRlb25fYWRkX2xlZ2FjeV9jb25uZWN0b3IoZGV2LCA2LAorCQkJCQkJCQkgICAgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQsCisJCQkJCQkJCSAgICBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPLAorCQkJCQkJCQkgICAgJmRkY19pMmMsCisJCQkJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX1NWSURFTyk7CisJCQkJfQogCQkJfQogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCmluZGV4IGFmMWQ1NTEuLmZjZTRjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtX2VkaWQuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgImF0b20uaCIKQEAgLTE3NywyNSArMTc4LDEyIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSBOVUxMOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICE9IDAgJiYKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgIT0gMCAmJgotCSAgICBuYXRpdmVfbW9kZS0+ZG90Y2xvY2sgIT0gMCkgewotCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRldik7Ci0KLQkJbW9kZS0+aGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQotCQltb2RlLT5odG90YWwgPSBtb2RlLT5oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCW1vZGUtPmhzeW5jX3N0YXJ0ID0gbW9kZS0+aGRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQltb2RlLT5oc3luY19lbmQgPSBtb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJbW9kZS0+dnRvdGFsID0gbW9kZS0+dmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQltb2RlLT52c3luY19zdGFydCA9IG1vZGUtPnZkaXNwbGF5ICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJbW9kZS0+dnN5bmNfZW5kID0gbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCW1vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOwotCQltb2RlLT5mbGFncyA9IDA7Ci0KKwlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPnZkaXNwbGF5ICE9IDAgJiYKKwkgICAgbmF0aXZlX21vZGUtPmNsb2NrICE9IDApIHsKKwkJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG5hdGl2ZV9tb2RlKTsKIAkJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEIHwgRFJNX01PREVfVFlQRV9EUklWRVI7CiAJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOwogCkBAIC0yMDksNyArMTk3LDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAJaW50IGk7CiAJc3RydWN0IG1vZGVfc2l6ZSB7CiAJCWludCB3OwpAQCAtMjM1LDE3ICsyMjMsMjIgQEAKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IDE3OyBpKyspIHsKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSB7CisJCQlpZiAoY29tbW9uX21vZGVzW2ldLncgPiAxMDI0IHx8CisJCQkgICAgY29tbW9uX21vZGVzW2ldLmggPiA3NjgpCisJCQkJY29udGludWU7CisJCX0KIAkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewotCQkJaWYgKGNvbW1vbl9tb2Rlc1tpXS53ID4gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgfHwKLQkJCSAgICBjb21tb25fbW9kZXNbaV0uaCA+IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzIHx8Ci0JCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICYmCi0JCQkgICAgIGNvbW1vbl9tb2Rlc1tpXS5oID09IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSkKKwkJCWlmIChjb21tb25fbW9kZXNbaV0udyA+IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSB8fAorCQkJICAgIGNvbW1vbl9tb2Rlc1tpXS5oID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5IHx8CisJCQkgICAgKGNvbW1vbl9tb2Rlc1tpXS53ID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAmJgorCQkJICAgICBjb21tb25fbW9kZXNbaV0uaCA9PSBuYXRpdmVfbW9kZS0+dmRpc3BsYXkpKQogCQkJCWNvbnRpbnVlOwogCQl9CiAJCWlmIChjb21tb25fbW9kZXNbaV0udyA8IDMyMCB8fCBjb21tb25fbW9kZXNbaV0uaCA8IDIwMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1vZGUgPSBkcm1fY3Z0X21vZGUoZGV2LCBjb21tb25fbW9kZXNbaV0udywgY29tbW9uX21vZGVzW2ldLmgsIDYwLCBmYWxzZSwgZmFsc2UpOworCQltb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgY29tbW9uX21vZGVzW2ldLncsIGNvbW1vbl9tb2Rlc1tpXS5oLCA2MCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKIAl9CiB9CkBAIC0zNDMsMjggKzMzNiwyMyBAQAogCQkJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9CXRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOwogCiAJLyogVHJ5IHRvIGdldCBuYXRpdmUgbW9kZSBkZXRhaWxzIGZyb20gRURJRCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICp0LCAqbW9kZTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBoZWFkKSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgJiYKLQkJCSAgICBtb2RlLT52ZGlzcGxheSA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgewotCQkJCW5hdGl2ZV9tb2RlLT5oYmxhbmsgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aG92ZXJwbHVzID0gbW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKLQkJCQluYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGggPSBtb2RlLT5oc3luY19lbmQgLSBtb2RlLT5oc3luY19zdGFydDsKLQkJCQluYXRpdmVfbW9kZS0+dmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZvdmVycGx1cyA9IG1vZGUtPnZzeW5jX3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Ci0JCQkJbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Ci0JCQkJbmF0aXZlX21vZGUtPmRvdGNsb2NrID0gbW9kZS0+Y2xvY2s7CisJCQlpZiAobW9kZS0+aGRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICYmCisJCQkgICAgbW9kZS0+dmRpc3BsYXkgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCQkJKm5hdGl2ZV9tb2RlID0gKm1vZGU7CisJCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKG5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAkJCQlEUk1fSU5GTygiRGV0ZXJtaW5lZCBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMgZnJvbSBFRElEXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAoIW5hdGl2ZV9tb2RlLT5kb3RjbG9jaykgeworCWlmICghbmF0aXZlX21vZGUtPmNsb2NrKSB7CiAJCURSTV9JTkZPKCJObyBMVkRTIG5hdGl2ZSBtb2RlIGRldGFpbHMsIGRpc2FibGluZyBSTVhcbiIpOwogCQlyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgPSBSTVhfT0ZGOwogCX0KQEAgLTQwOSwxMyArMzk3LDY0IEBACiBzdGF0aWMgaW50IHJhZGVvbl9sdmRzX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisKKwlpZiAoKG1vZGUtPmhkaXNwbGF5IDwgMzIwKSB8fCAobW9kZS0+dmRpc3BsYXkgPCAyNDApKQorCQlyZXR1cm4gTU9ERV9QQU5FTDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBBVklWTyBoYXJkd2FyZSBzdXBwb3J0cyBkb3duc2NhbGluZyBtb2RlcyBsYXJnZXIgdGhhbiB0aGUgcGFuZWwKKwkJICogdG8gdGhlIHBhbmVsIHNpemUsIGJ1dCBJJ20gbm90IHN1cmUgdGhpcyBpcyBkZXNpcmFibGUuCisJCSAqLworCQlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gbmF0aXZlX21vZGUtPmhkaXNwbGF5KSB8fAorCQkgICAgKG1vZGUtPnZkaXNwbGF5ID4gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCXJldHVybiBNT0RFX1BBTkVMOworCisJCS8qIGlmIHNjYWxpbmcgaXMgZGlzYWJsZWQsIGJsb2NrIG5vbi1uYXRpdmUgbW9kZXMgKi8KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSA9PSBSTVhfT0ZGKSB7CisJCQlpZiAoKG1vZGUtPmhkaXNwbGF5ICE9IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkgfHwKKwkJCSAgICAobW9kZS0+dmRpc3BsYXkgIT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KSkKKwkJCQlyZXR1cm4gTU9ERV9QQU5FTDsKKwkJfQorCX0KKwogCXJldHVybiBNT0RFX09LOwogfQogCiBzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByYWRlb25fbHZkc19kZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9IHJhZGVvbl9iZXN0X3NpbmdsZV9lbmNvZGVyKGNvbm5lY3Rvcik7CisJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKworCWlmIChlbmNvZGVyKSB7CisJCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm5hdGl2ZV9tb2RlID0gJnJhZGVvbl9lbmNvZGVyLT5uYXRpdmVfbW9kZTsKKworCQkvKiBjaGVjayBpZiBwYW5lbCBpcyB2YWxpZCAqLworCQlpZiAobmF0aXZlX21vZGUtPmhkaXNwbGF5ID49IDMyMCAmJiBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPj0gMjQwKQorCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisKKwl9CisKKwkvKiBjaGVjayBmb3IgZWRpZCBhcyB3ZWxsICovCisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCWVsc2UgeworCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykgeworCQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IGRybV9nZXRfZWRpZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKKwkJCQkJCQkgICAgICAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CisJCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0KIAkvKiBjaGVjayBhY3BpIGxpZCBzdGF0dXMgPz8/ICovCisKIAlyYWRlb25fY29ubmVjdG9yX3VwZGF0ZV9zY3JhdGNoX3JlZ3MoY29ubmVjdG9yLCByZXQpOwogCXJldHVybiByZXQ7CiB9CkBAIC00MjYsNiArNDY1LDggQEAKIAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQlyYWRlb25faTJjX2Rlc3Ryb3kocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyk7CisJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCisJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2KTsKIAlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwogCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwpAQCAtNDk1LDYgKzUzNiw4IEBACiBzdGF0aWMgaW50IHJhZGVvbl92Z2FfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisJLyogWFhYIHZlcmlmeSBhZ2FpbnN0IG1heCBEQUMgb3V0cHV0IGZyZXF1ZW5jeSAqLwogCXJldHVybiBNT0RFX09LOwogfQogCkBAIC01MTMsOSArNTU2LDMyIEBACiAJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCWRyZXQgPSByYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpOwogCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKLQlpZiAoZHJldCkKLQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Ci0JZWxzZSB7CisJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KKwkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKKworCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCURSTV9FUlJPUigiRERDIHJlc3BvbmRlZCBidXQgbm90IEVESUQgZm91bmQgZm9yICVzXG4iLAorCQkJCSAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwkJfSBlbHNlIHsKKwkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gISEocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKworCQkJLyogc29tZSBvZW1zIGhhdmUgYm9hcmRzIHdpdGggc2VwYXJhdGUgZGlnaXRhbCBhbmQgYW5hbG9nIGNvbm5lY3RvcnMKKwkJCSAqIHdpdGggYSBzaGFyZWQgZGRjIGxpbmUgKG9mdGVuIHZnYSArIGhkbWkpCisJCQkgKi8KKwkJCWlmIChyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCAmJiByYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjKSB7CisJCQkJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CisJCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJfQorCX0gZWxzZSB7CiAJCWlmIChyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QpIHsKIAkJCWVuY29kZXJfZnVuY3MgPSBlbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZTsKIAkJCXJldCA9IGVuY29kZXJfZnVuY3MtPmRldGVjdChlbmNvZGVyLCBjb25uZWN0b3IpOwpAQCAtNTU5LDcgKzYyNSw3IEBACiAJCXJhZGVvbl9hZGRfY29tbW9uX21vZGVzKGVuY29kZXIsIGNvbm5lY3Rvcik7CiAJZWxzZSB7CiAJCS8qIG9ubHkgODAweDYwMCBpcyBzdXBwb3J0ZWQgcmlnaHQgbm93IG9uIHByZS1hdml2byBjaGlwcyAqLwotCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UpOworCQl0dl9tb2RlID0gZHJtX2N2dF9tb2RlKGRldiwgODAwLCA2MDAsIDYwLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAkJdHZfbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CiAJCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCB0dl9tb2RlKTsKIAl9CkBAIC01NjksNiArNjM1LDggQEAKIHN0YXRpYyBpbnQgcmFkZW9uX3R2X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKIHsKKwlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gMTAyNCkgfHwgKG1vZGUtPnZkaXNwbGF5ID4gNzY4KSkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CiAJcmV0dXJuIE1PREVfT0s7CiB9CiAKQEAgLTY0Myw2ICs3MTEsMTAgQEAKIAlkcmV0ID0gcmFkZW9uX2RkY19wcm9iZShyYWRlb25fY29ubmVjdG9yKTsKIAlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3RvciwgMCk7CiAJaWYgKGRyZXQpIHsKKwkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKKwkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CisJCX0KIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CiAJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLCAwKTsKQEAgLTY1MywxMCArNzI1LDE1IEBACiAJCX0gZWxzZSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT51c2VfZGlnaXRhbCA9ICEhKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCk7CiAKLQkJCS8qIGlmIHRoaXMgaXNuJ3QgYSBkaWdpdGFsIG1vbml0b3IKLQkJCSAgIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBhbnkKLQkJCSAgIFRWIGNvbmZsaWN0cyAqLwotCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCQkvKiBzb21lIG9lbXMgaGF2ZSBib2FyZHMgd2l0aCBzZXBhcmF0ZSBkaWdpdGFsIGFuZCBhbmFsb2cgY29ubmVjdG9ycworCQkJICogd2l0aCBhIHNoYXJlZCBkZGMgbGluZSAob2Z0ZW4gdmdhICsgaGRtaSkKKwkJCSAqLworCQkJaWYgKCghcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpICYmIHJhZGVvbl9jb25uZWN0b3ItPnNoYXJlZF9kZGMpIHsKKwkJCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gTlVMTDsKKwkJCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwkJCX0gZWxzZQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogCQl9CiAJfQogCkBAIC03NDMsOSArODIwLDM2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHJhZGVvbl9kdmlfZm9yY2Uoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT04pCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gZmFsc2U7CisJaWYgKGNvbm5lY3Rvci0+Zm9yY2UgPT0gRFJNX0ZPUkNFX09OX0RJR0lUQUwpCisJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gdHJ1ZTsKK30KKworc3RhdGljIGludCByYWRlb25fZHZpX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJLyogWFhYIGNoZWNrIG1vZGUgYmFuZHdpZHRoICovCisKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgJiYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKSkgeworCQlpZiAoKHJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9EVUFMX0xJTktfRFZJX0kpIHx8CisJCSAgICAocmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX29iamVjdF9pZCA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfRCkgfHwKKwkJICAgIChyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfSERNSV9UWVBFX0IpKQorCQkJcmV0dXJuIE1PREVfT0s7CisJCWVsc2UKKwkJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCXJldHVybiBNT0RFX09LOworfQorCiBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0gewogCS5nZXRfbW9kZXMgPSByYWRlb25fZHZpX2dldF9tb2RlcywKLQkubW9kZV92YWxpZCA9IHJhZGVvbl92Z2FfbW9kZV92YWxpZCwKKwkubW9kZV92YWxpZCA9IHJhZGVvbl9kdmlfbW9kZV92YWxpZCwKIAkuYmVzdF9lbmNvZGVyID0gcmFkZW9uX2R2aV9lbmNvZGVyLAogfTsKIApAQCAtNzU1LDYgKzg1OSw3IEBACiAJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCiAJLnNldF9wcm9wZXJ0eSA9IHJhZGVvbl9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5LAogCS5kZXN0cm95ID0gcmFkZW9uX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5mb3JjZSA9IHJhZGVvbl9kdmlfZm9yY2UsCiB9OwogCiB2b2lkCkBAIC03NjQsMTMgKzg2OSwxNiBAQAogCQkJICBpbnQgY29ubmVjdG9yX3R5cGUsCiAJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMsCiAJCQkgIGJvb2wgbGlua2IsCi0JCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8pCisJCQkgIHVpbnQzMl90IGlncF9sYW5lX2luZm8sCisJCQkgIHVpbnQxNl90IGNvbm5lY3Rvcl9vYmplY3RfaWQpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKnJhZGVvbl9kaWdfY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWJvb2wgc2hhcmVkX2RkYyA9IGZhbHNlOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTc4Myw2ICs4OTEsMTMgQEAKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgfD0gc3VwcG9ydGVkX2RldmljZTsKIAkJCXJldHVybjsKIAkJfQorCQlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyAmJiBpMmNfYnVzLT52YWxpZCkgeworCQkJaWYgKG1lbWNtcCgmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+cmVjLCBpMmNfYnVzLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYykpID09IDApIHsKKwkJCQlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCQlzaGFyZWRfZGRjID0gdHJ1ZTsKKwkJCX0KKwkJfQogCX0KIAogCXJhZGVvbl9jb25uZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwpAQCAtNzkzLDI3ICs5MDgsMzUgQEAKIAogCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9pZCA9IGNvbm5lY3Rvcl9pZDsKIAlyYWRlb25fY29ubmVjdG9yLT5kZXZpY2VzID0gc3VwcG9ydGVkX2RldmljZTsKKwlyYWRlb25fY29ubmVjdG9yLT5zaGFyZWRfZGRjID0gc2hhcmVkX2RkYzsKKwlyYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkID0gY29ubmVjdG9yX29iamVjdF9pZDsKIAlzd2l0Y2ggKGNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl92Z2FfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiVkdBIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CiAJCX0KKwkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKIAkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUE6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTgyNyw3ICs5NTAsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJEVkkiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTgzNyw2ICs5NjIsNyBAQAogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmNvaGVyZW50X21vZGVfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOworCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKQEAgLTg1MCw3ICs5NzYsOSBAQAogCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+aWdwX2xhbmVfaW5mbyA9IGlncF9sYW5lX2luZm87CiAJCXJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2ID0gcmFkZW9uX2RpZ19jb25uZWN0b3I7CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2R2aV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJIRE1JIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCkBAIC04NjksNyArOTk3LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFAiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKQEAgLTg4MiwxMSArMTAxMiwxNCBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46CiAJCWlmIChyYWRlb25fdHYgPT0gMSkgewogCQkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdHZfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZmFpbGVkOworCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKKwkJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAorCQkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAorCQkJCQkJICAgICAgMSk7CiAJCX0KLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCi0JCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5sb2FkX2RldGVjdF9wcm9wZXJ0eSwKLQkJCQkJICAgICAgMSk7CiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCXJhZGVvbl9kaWdfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcpLCBHRlBfS0VSTkVMKTsKQEAgLTg5Niw3ICsxMDI5LDkgQEAKIAkJcmFkZW9uX2RpZ19jb25uZWN0b3ItPmlncF9sYW5lX2luZm8gPSBpZ3BfbGFuZV9pbmZvOwogCQlyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdiA9IHJhZGVvbl9kaWdfY29ubmVjdG9yOwogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiTFZEUyIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQpAQCAtOTI2LDEyICsxMDYxLDE0IEBACiAJCQkgICAgdWludDMyX3QgY29ubmVjdG9yX2lkLAogCQkJICAgIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsCiAJCQkgICAgaW50IGNvbm5lY3Rvcl90eXBlLAotCQkJICAgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKmkyY19idXMpCisJCQkgICAgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqaTJjX2J1cywKKwkJCSAgICB1aW50MTZfdCBjb25uZWN0b3Jfb2JqZWN0X2lkKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yOwogCXVpbnQzMl90IHN1YnBpeGVsX29yZGVyID0gU3ViUGl4ZWxOb25lOworCWludCByZXQ7CiAKIAkvKiBmaXhtZSAtIHR2L2N2L2RpbiAqLwogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfVW5rbm93bikKQEAgLTk1NCwyNyArMTA5MSwzNCBAQAogCiAJcmFkZW9uX2Nvbm5lY3Rvci0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yX2lkOwogCXJhZGVvbl9jb25uZWN0b3ItPmRldmljZXMgPSBzdXBwb3J0ZWRfZGV2aWNlOworCXJhZGVvbl9jb25uZWN0b3ItPmNvbm5lY3Rvcl9vYmplY3RfaWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOwogCXN3aXRjaCAoY29ubmVjdG9yX3R5cGUpIHsKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9WR0E6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX3ZnYV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJWR0EiKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJCQlnb3RvIGZhaWxlZDsKIAkJfQorCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgcmRldi0+bW9kZV9pbmZvLmxvYWRfZGV0ZWN0X3Byb3BlcnR5LAogCQkJCQkgICAgICAxKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKIAkJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9mdW5jcywgY29ubmVjdG9yX3R5cGUpOwotCQlkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fdmdhX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWQ7CiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfY3JlYXRlKGRldiwgaTJjX2J1cywgIkRWSSIpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQogCQkJCWdvdG8gZmFpbGVkOwogCQl9CisJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCSAgICAgIDEpOwpAQCAtOTgyLDExICsxMTI2LDE0IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgogCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9kdmlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCBpMmNfYnVzLCAiRFZJIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTk5OCw3ICsxMTQ1LDEwIEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjoKIAkJaWYgKHJhZGVvbl90diA9PSAxKSB7CiAJCQlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCAmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfZnVuY3MsIGNvbm5lY3Rvcl90eXBlKTsKLQkJCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCXJldCA9IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl90dl9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBmYWlsZWQ7CisJCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkgICAgICByZGV2LT5tb2RlX2luZm8ubG9hZF9kZXRlY3RfcHJvcGVydHksCiAJCQkJCQkgICAgICAxKTsKQEAgLTEwMDYsNyArMTE1Niw5IEBACiAJCWJyZWFrOwogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6CiAJCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2x2ZHNfY29ubmVjdG9yX2Z1bmNzLCBjb25uZWN0b3JfdHlwZSk7Ci0JCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgJnJhZGVvbl9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MpOworCQlyZXQgPSBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbGVkOwogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2NyZWF0ZShkZXYsIGkyY19idXMsICJMVkRTIik7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYwppbmRleCAxMmY1OTkwLi41YWIyY2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKQEAgLTE0MiwxNSArMTQyLDMxIEBACiAJCX0KIAogCQlwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ID0gdXNlcl9jaHVuay5sZW5ndGhfZHc7Ci0JCWNkYXRhID0gKHVpbnQzMl90ICopKHVuc2lnbmVkIGxvbmcpdXNlcl9jaHVuay5jaHVua19kYXRhOworCQlwLT5jaHVua3NbaV0udXNlcl9wdHIgPSAodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZyl1c2VyX2NodW5rLmNodW5rX2RhdGE7CiAKLQkJc2l6ZSA9IHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiBzaXplb2YodWludDMyX3QpOwotCQlwLT5jaHVua3NbaV0ua2RhdGEgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLCBjZGF0YSwgc2l6ZSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOworCQljZGF0YSA9ICh1aW50MzJfdCAqKSh1bnNpZ25lZCBsb25nKXVzZXJfY2h1bmsuY2h1bmtfZGF0YTsKKwkJaWYgKHAtPmNodW5rc1tpXS5jaHVua19pZCAhPSBSQURFT05fQ0hVTktfSURfSUIpIHsKKwkJCXNpemUgPSBwLT5jaHVua3NbaV0ubGVuZ3RoX2R3ICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJCXAtPmNodW5rc1tpXS5rZGF0YSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAocC0+Y2h1bmtzW2ldLmtkYXRhID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIocC0+Y2h1bmtzW2ldLmtkYXRhLAorCQkJCQkgICAgICAgcC0+Y2h1bmtzW2ldLnVzZXJfcHRyLCBzaXplKSkgeworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQl9IGVsc2UgeworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzBdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlWzFdID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQkJaWYgKHAtPmNodW5rc1tpXS5rcGFnZVswXSA9PSBOVUxMIHx8IHAtPmNodW5rc1tpXS5rcGFnZVsxXSA9PSBOVUxMKSB7CisJCQkJa2ZyZWUocC0+Y2h1bmtzW2ldLmtwYWdlWzBdKTsKKwkJCQlrZnJlZShwLT5jaHVua3NbaV0ua3BhZ2VbMV0pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFswXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmtwYWdlX2lkeFsxXSA9IC0xOworCQkJcC0+Y2h1bmtzW2ldLmxhc3RfY29waWVkX3BhZ2UgPSAtMTsKKwkJCXAtPmNodW5rc1tpXS5sYXN0X3BhZ2VfaW5kZXggPSAoKHAtPmNodW5rc1tpXS5sZW5ndGhfZHcgKiA0KSAtIDEpIC8gUEFHRV9TSVpFOwogCQl9CiAJfQogCWlmIChwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XS5sZW5ndGhfZHcgPiAoMTYgKiAxMDI0KSkgewpAQCAtMTkwLDYgKzIwNiw4IEBACiAJa2ZyZWUocGFyc2VyLT5yZWxvY3NfcHRyKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGFyc2VyLT5uY2h1bmtzOyBpKyspIHsKIAkJa2ZyZWUocGFyc2VyLT5jaHVua3NbaV0ua2RhdGEpOworCQlrZnJlZShwYXJzZXItPmNodW5rc1tpXS5rcGFnZVswXSk7CisJCWtmcmVlKHBhcnNlci0+Y2h1bmtzW2ldLmtwYWdlWzFdKTsKIAl9CiAJa2ZyZWUocGFyc2VyLT5jaHVua3MpOwogCWtmcmVlKHBhcnNlci0+Y2h1bmtzX2FycmF5KTsKQEAgLTIzOCw4ICsyNTYsMTQgQEAKIAkgKiB1bmNhY2hlZCkuICovCiAJaWJfY2h1bmsgPSAmcGFyc2VyLmNodW5rc1twYXJzZXIuY2h1bmtfaWJfaWR4XTsKIAlwYXJzZXIuaWItPmxlbmd0aF9kdyA9IGliX2NodW5rLT5sZW5ndGhfZHc7Ci0JbWVtY3B5KCh2b2lkICopcGFyc2VyLmliLT5wdHIsIGliX2NodW5rLT5rZGF0YSwgaWJfY2h1bmstPmxlbmd0aF9kdyo0KTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlKCZwYXJzZXIpOworCWlmIChyIHx8IHBhcnNlci5wYXJzZXJfZXJyb3IpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOworCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CisJCW11dGV4X3VubG9jaygmcmRldi0+Y3NfbXV0ZXgpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHJhZGVvbl9jc19maW5pc2hfcGFnZXMoJnBhcnNlcik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIGNvbW1hbmQgc3RyZWFtICFcbiIpOwogCQlyYWRlb25fY3NfcGFyc2VyX2ZpbmkoJnBhcnNlciwgcik7CkBAIC0yNTQsMyArMjc4LDY0IEBACiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5jc19tdXRleCk7CiAJcmV0dXJuIHI7CiB9CisKK2ludCByYWRlb25fY3NfZmluaXNoX3BhZ2VzKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPD0gaWJjLT5sYXN0X3BhZ2VfaW5kZXg7IGkrKykgeworCQlpZiAoaSA9PSBpYmMtPmxhc3RfcGFnZV9pbmRleCkgeworCQkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCQl9CisJCQorCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBzaXplKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJhZGVvbl9jc191cGRhdGVfcGFnZXMoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIGludCBwZ19pZHgpCit7CisJaW50IG5ld19wYWdlOworCXN0cnVjdCByYWRlb25fY3NfY2h1bmsgKmliYyA9ICZwLT5jaHVua3NbcC0+Y2h1bmtfaWJfaWR4XTsKKwlpbnQgaTsKKwlpbnQgc2l6ZSA9IFBBR0VfU0laRTsKKworCWZvciAoaSA9IGliYy0+bGFzdF9jb3BpZWRfcGFnZSArIDE7IGkgPCBwZ19pZHg7IGkrKykgeworCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKHAtPmliLT5wdHIgKyAoaSAqIChQQUdFX1NJWkUvNCkpLAorCQkJCSAgICAgICBpYmMtPnVzZXJfcHRyICsgKGkgKiBQQUdFX1NJWkUpLAorCQkJCSAgICAgICBQQUdFX1NJWkUpKSB7CisJCQlwLT5wYXJzZXJfZXJyb3IgPSAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwluZXdfcGFnZSA9IGliYy0+a3BhZ2VfaWR4WzBdIDwgaWJjLT5rcGFnZV9pZHhbMV0gPyAwIDogMTsKKworCWlmIChwZ19pZHggPT0gaWJjLT5sYXN0X3BhZ2VfaW5kZXgpIHsKKwkJc2l6ZSA9IChpYmMtPmxlbmd0aF9kdyAqIDQpICUgUEFHRV9TSVpFOworCQkJaWYgKHNpemUgPT0gMCkKKwkJCQlzaXplID0gUEFHRV9TSVpFOworCX0KKworCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoaWJjLT5rcGFnZVtuZXdfcGFnZV0sCisJCQkgICAgICAgaWJjLT51c2VyX3B0ciArIChwZ19pZHggKiBQQUdFX1NJWkUpLAorCQkJICAgICAgIHNpemUpKSB7CisJCXAtPnBhcnNlcl9lcnJvciA9IC1FRkFVTFQ7CisJCXJldHVybiAwOworCX0KKworCS8qIGNvcHkgdG8gSUIgaGVyZSAqLworCW1lbWNweSgodm9pZCAqKShwLT5pYi0+cHRyKyhwZ19pZHgqKFBBR0VfU0laRS80KSkpLCBpYmMtPmtwYWdlW25ld19wYWdlXSwgc2l6ZSk7CisKKwlpYmMtPmxhc3RfY29waWVkX3BhZ2UgPSBwZ19pZHg7CisJaWJjLT5rcGFnZV9pZHhbbmV3X3BhZ2VdID0gcGdfaWR4OworCisJcmV0dXJuIG5ld19wYWdlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCBiMTNjNzllLi4yODc3MmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMTA5LDkgKzEwOSwxNSBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKKwkJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkKKwkJCQlXUkVHMzIoUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CisJCQllbHNlCisJCQkJV1JFRzMyKFI3MDBfRDFDVVJfU1VSRkFDRV9BRERSRVNTX0hJR0gsIDApOworCQl9CiAJCVdSRUczMihBVklWT19EMUNVUl9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGdwdV9hZGRyKTsKLQllbHNlIHsKKwl9IGVsc2UgewogCQlyYWRlb25fY3J0Yy0+bGVnYWN5X2N1cnNvcl9vZmZzZXQgPSBncHVfYWRkciAtIHJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHI7CiAJCS8qIG9mZnNldCBpcyBmcm9tIERJU1AoMilfQkFTRV9BRERSRVNTICovCiAJCVdSRUczMihSQURFT05fQ1VSX09GRlNFVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgcmFkZW9uX2NydGMtPmxlZ2FjeV9jdXJzb3Jfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggZGFmNWRiNy4uZTNmOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTMyMiwxMCArMzIyLDYgQEAKIAljYXNlIENISVBfUlYzODA6CiAJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljOwogCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKIAkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CiAJCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKIAkJfQpAQCAtNDQ4LDIwICs0NDQsMjQgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHN0cnVjdCBjYXJkX2luZm8gYXRvbV9jYXJkX2luZm8gPSB7Ci0JLmRldiA9IE5VTEwsCi0JLnJlZ19yZWFkID0gY2FpbF9yZWdfcmVhZCwKLQkucmVnX3dyaXRlID0gY2FpbF9yZWdfd3JpdGUsCi0JLm1jX3JlYWQgPSBjYWlsX21jX3JlYWQsCi0JLm1jX3dyaXRlID0gY2FpbF9tY193cml0ZSwKLQkucGxsX3JlYWQgPSBjYWlsX3BsbF9yZWFkLAotCS5wbGxfd3JpdGUgPSBjYWlsX3BsbF93cml0ZSwKLX07Ci0KIGludCByYWRlb25fYXRvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlhdG9tX2NhcmRfaW5mby5kZXYgPSByZGV2LT5kZGV2OwotCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQgPSBhdG9tX3BhcnNlKCZhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm8gPQorCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF0b21fY2FyZF9pbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJkZXYtPm1vZGVfaW5mby5hdG9tX2NhcmRfaW5mbyA9IGF0b21fY2FyZF9pbmZvOworCWF0b21fY2FyZF9pbmZvLT5kZXYgPSByZGV2LT5kZGV2OworCWF0b21fY2FyZF9pbmZvLT5yZWdfcmVhZCA9IGNhaWxfcmVnX3JlYWQ7CisJYXRvbV9jYXJkX2luZm8tPnJlZ193cml0ZSA9IGNhaWxfcmVnX3dyaXRlOworCWF0b21fY2FyZF9pbmZvLT5tY19yZWFkID0gY2FpbF9tY19yZWFkOworCWF0b21fY2FyZF9pbmZvLT5tY193cml0ZSA9IGNhaWxfbWNfd3JpdGU7CisJYXRvbV9jYXJkX2luZm8tPnBsbF9yZWFkID0gY2FpbF9wbGxfcmVhZDsKKwlhdG9tX2NhcmRfaW5mby0+cGxsX3dyaXRlID0gY2FpbF9wbGxfd3JpdGU7CisKKwlyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0ID0gYXRvbV9wYXJzZShhdG9tX2NhcmRfaW5mbywgcmRldi0+Ymlvcyk7CiAJcmFkZW9uX2F0b21faW5pdGlhbGl6ZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2LT5kZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ2OSw2ICs0NjksNyBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwlrZnJlZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jYXJkX2luZm8pOwogfQogCiBpbnQgcmFkZW9uX2NvbWJpb3NfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTQ4NSw3ICs0ODYsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCByYWRlb25fdmdhX3NldF9kZWNvZGUodm9pZCAqY29va2llLCBib29sIHN0YXRlKQogewogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY29va2llOwotCiAJcmFkZW9uX3ZnYV9zZXRfc3RhdGUocmRldiwgc3RhdGUpOwogCWlmIChzdGF0ZSkKIAkJcmV0dXJuIFZHQV9SU1JDX0xFR0FDWV9JTyB8IFZHQV9SU1JDX0xFR0FDWV9NRU0gfApAQCAtNDkzLDYgKzQ5MywyOSBAQAogCWVsc2UKIAkJcmV0dXJuIFZHQV9SU1JDX05PUk1BTF9JTyB8IFZHQV9SU1JDX05PUk1BTF9NRU07CiB9CisKK3ZvaWQgcmFkZW9uX2FncF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CisJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0lFIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwl9IGVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNTE1IHx8CisJCQlyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjM4MCB8fAorCQkJcmRldi0+ZmFtaWx5ID09IENISVBfUlY0MTAgfHwKKwkJCXJkZXYtPmZhbWlseSA9PSBDSElQX1I0MjMpIHsKKwkJRFJNX0lORk8oIkZvcmNpbmcgQUdQIHRvIFBDSUUgbW9kZVxuIik7CisJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKKwl9IGVsc2UgeworCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOworCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOworCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydF9zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlOworCX0KK30KKwogLyoKICAqIFJhZGVvbiBkZXZpY2UuCiAgKi8KQEAgLTUzMSwyOSArNTU0LDcgQEAKIAl9CiAKIAlpZiAocmFkZW9uX2FncG1vZGUgPT0gLTEpIHsKLQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SVjUxNSB8fAotCQkgICAgcmRldi0+ZmFtaWx5ID09IENISVBfUlYzODAgfHwKLQkJICAgIHJkZXYtPmZhbWlseSA9PSBDSElQX1JWNDEwIHx8Ci0JCSAgICByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNDIzKSB7Ci0JCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKLQkJCXJkZXYtPmZsYWdzIHw9IFJBREVPTl9JU19QQ0lFOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnJ2MzcwX3BjaWVfZ2FydF9pbml0OwotCQkJcmRldi0+YXNpYy0+Z2FydF9maW5pID0gJnJ2MzcwX3BjaWVfZ2FydF9maW5pOwotCQkJcmRldi0+YXNpYy0+Z2FydF9lbmFibGUgPSAmcnYzNzBfcGNpZV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZydjM3MF9wY2llX2dhcnRfZGlzYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKLQkJfSBlbHNlIHsKLQkJCURSTV9JTkZPKCJGb3JjaW5nIEFHUCB0byBQQ0kgbW9kZVxuIik7Ci0JCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwotCQkJcmRldi0+YXNpYy0+Z2FydF9pbml0ID0gJnIxMDBfcGNpX2dhcnRfaW5pdDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZmluaSA9ICZyMTAwX3BjaV9nYXJ0X2Zpbmk7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X2VuYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2VuYWJsZTsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfZGlzYWJsZSA9ICZyMTAwX3BjaV9nYXJ0X2Rpc2FibGU7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3RsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKLQkJfQorCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CiAJfQogCiAJLyogc2V0IERNQSBtYXNrICsgbmVlZF9kbWEzMiBmbGFncy4KQEAgLTU4NSwxMTEgKzU4NiwyNiBAQAogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIGJhc2U6IDB4JTA4WFxuIiwgKHVpbnQzMl90KXJkZXYtPnJtbWlvX2Jhc2UpOwogCURSTV9JTkZPKCJyZWdpc3RlciBtbWlvIHNpemU6ICV1XG4iLCAodW5zaWduZWQpcmRldi0+cm1taW9fc2l6ZSk7CiAKLQlyZGV2LT5uZXdfaW5pdF9wYXRoID0gZmFsc2U7Ci0JciA9IHJhZGVvbl9pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQogCS8qIGlmIHdlIGhhdmUgPiAxIFZHQSBjYXJkcywgdGhlbiBkaXNhYmxlIHRoZSByYWRlb24gVkdBIHJlc291cmNlcyAqLwotCXIgPSB2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHIpIHsKLQkJcmV0dXJuIC1FSU5WQUw7CisJLyogdGhpcyB3aWxsIGZhaWwgZm9yIGNhcmRzIHRoYXQgYXJlbid0IFZHQSBjbGFzcyBkZXZpY2VzLCBqdXN0CisJICogaWdub3JlIGl0ICovCisJdmdhX2NsaWVudF9yZWdpc3RlcihyZGV2LT5wZGV2LCByZGV2LCBOVUxMLCByYWRlb25fdmdhX3NldF9kZWNvZGUpOworCisJciA9IHJhZGVvbl9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1AgJiYgIXJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJLyogQWNjZWxlcmF0aW9uIG5vdCB3b3JraW5nIG9uIEFHUCBjYXJkIHRyeSBhZ2FpbgorCQkgKiB3aXRoIGZhbGxiYWNrIHRvIFBDSSBvciBQQ0lFIEdBUlQKKwkJICovCisJCXJhZGVvbl9ncHVfcmVzZXQocmRldik7CisJCXJhZGVvbl9maW5pKHJkZXYpOworCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCXIgPSByYWRlb25faW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKIAl9Ci0KLQlpZiAoIXJkZXYtPm5ld19pbml0X3BhdGgpIHsKLQkJLyogU2V0dXAgZXJyYXRhIGZsYWdzICovCi0JCXJhZGVvbl9lcnJhdGEocmRldik7Ci0JCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KLQkJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKLQkJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwotCQlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOwotCi0JCS8qIEJJT1MqLwotCQlpZiAoIXJhZGVvbl9nZXRfYmlvcyhyZGV2KSkgewotCQkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXIgPSByYWRlb25fY29tYmlvc19pbml0KHJkZXYpOwotCQkJaWYgKHIpIHsKLQkJCQlyZXR1cm4gcjsKLQkJCX0KLQkJfQotCQkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCi0JCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7Ci0JCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCQl9Ci0JCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCi0JCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKLQkJCURSTV9JTkZPKCJHUFUgbm90IHBvc3RlZC4gcG9zdGluZyBub3cuLi5cbiIpOwotCQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCQkJfSBlbHNlIHsKLQkJCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCQl9Ci0JCX0KLQkJLyogR2V0IGNsb2NrICYgdnJhbSBpbmZvcm1hdGlvbiAqLwotCQlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7Ci0JCXJhZGVvbl92cmFtX2luZm8ocmRldik7Ci0JCS8qIEluaXRpYWxpemUgY2xvY2tzICovCi0JCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCi0JCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JCXIgPSByYWRlb25fbWNfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEZlbmNlIGRyaXZlciAqLwotCQlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQkvKiBNZW1vcnkgbWFuYWdlciAqLwotCQlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmV0dXJuIHI7Ci0JCX0KLQkJciA9IHJhZGVvbl9ncHVfZ2FydF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiByOwotCQkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQotCQkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KLQkJciA9IHJhZGVvbl9nYXJ0X2VuYWJsZShyZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJCXIgPSByYWRlb25fZ2VtX2luaXQocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogMU0gcmluZyBidWZmZXIgKi8KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIDEwMjQgKiAxMDI0KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gMDsKLQkJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7Ci0JCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOwotCQlpZiAocikKLQkJCXJldHVybiAwOwotCQlyID0gcmFkZW9uX2liX3Rlc3QocmRldik7Ci0JCWlmIChyKQotCQkJcmV0dXJuIDA7Ci0JCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOwotCX0KLQlEUk1fSU5GTygicmFkZW9uOiBrZXJuZWwgbW9kZXNldHRpbmcgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLlxuIik7CiAJaWYgKHJhZGVvbl90ZXN0aW5nKSB7CiAJCXJhZGVvbl90ZXN0X21vdmVzKHJkZXYpOwogCX0KQEAgLTcwMywzMiArNjE5LDggQEAKIHsKIAlEUk1fSU5GTygicmFkZW9uOiBmaW5pc2hpbmcgZGV2aWNlLlxuIik7CiAJcmRldi0+c2h1dGRvd24gPSB0cnVlOwotCS8qIE9yZGVyIG1hdHRlciBzbyBiZWNhcmVmdWxsIGlmIHlvdSByZWFycmFuZ2UgYW55dGhpbmdzICovCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9pYl9wb29sX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jcF9maW5pKHJkZXYpOwotCQlyYWRlb25fd2JfZmluaShyZGV2KTsKLQkJcmFkZW9uX2dwdV9nYXJ0X2ZpbmkocmRldik7Ci0JCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKLQkJcmFkZW9uX21jX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCi0JCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKLSNlbmRpZgotCQlyYWRlb25faXJxX2ttc19maW5pKHJkZXYpOwotCQl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7Ci0JCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKLQkJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCQlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXJhZGVvbl9jb21iaW9zX2ZpbmkocmRldik7Ci0JCX0KLQkJa2ZyZWUocmRldi0+Ymlvcyk7Ci0JCXJkZXYtPmJpb3MgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9maW5pKHJkZXYpOwotCX0KKwlyYWRlb25fZmluaShyZGV2KTsKKwl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIE5VTEwsIE5VTEwsIE5VTEwpOwogCWlvdW5tYXAocmRldi0+cm1taW8pOwogCXJkZXYtPnJtbWlvID0gTlVMTDsKIH0KQEAgLTc2OCwxNCArNjYwLDcgQEAKIAogCXJhZGVvbl9zYXZlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCi0JaWYgKCFyZGV2LT5uZXdfaW5pdF9wYXRoKSB7Ci0JCXJhZGVvbl9jcF9kaXNhYmxlKHJkZXYpOwotCQlyYWRlb25fZ2FydF9kaXNhYmxlKHJkZXYpOwotCQlyZGV2LT5pcnEuc3dfaW50ID0gZmFsc2U7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9zdXNwZW5kKHJkZXYpOwotCX0KKwlyYWRlb25fc3VzcGVuZChyZGV2KTsKIAkvKiBldmljdCByZW1haW5pbmcgdnJhbSBtZW1vcnkgKi8KIAlyYWRlb25fb2JqZWN0X2V2aWN0X3ZyYW0ocmRldik7CiAKQEAgLTc5NCw3ICs2NzksNiBAQAogaW50IHJhZGVvbl9yZXN1bWVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByOwogCiAJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwpAQCAtODA0LDQzICs2ODgsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7Ci0JLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLwotCWlmICghcmRldi0+bmV3X2luaXRfcGF0aCkgewotCQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkJLyogRklYTUU6IHdoYXQgZG8gd2Ugd2FudCB0byBkbyBoZXJlID8gKi8KLQkJfQotCQkvKiBwb3N0IGNhcmQgKi8KLQkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgewotCQkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlyYWRlb25fY29tYmlvc19hc2ljX2luaXQocmRldi0+ZGRldik7Ci0JCX0KLQkJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KLQkJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKLQkJaWYgKHIpIHsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJCXJldHVybiByOwotCQl9Ci0JCS8qIEVuYWJsZSBJUlEgKi8KLQkJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7Ci0JCXJhZGVvbl9pcnFfc2V0KHJkZXYpOwotCQkvKiBJbml0aWFsaXplIEdQVSBNZW1vcnkgQ29udHJvbGxlciAqLwotCQlyID0gcmFkZW9uX21jX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlyID0gcmFkZW9uX2dhcnRfZW5hYmxlKHJkZXYpOwotCQlpZiAocikgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJciA9IHJhZGVvbl9jcF9pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7Ci0JCWlmIChyKSB7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7Ci0JCXJhZGVvbl9yZXN1bWUocmRldik7Ci0JfQotb3V0OgorCXJhZGVvbl9yZXN1bWUocmRldik7CiAJcmFkZW9uX3Jlc3RvcmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CiAJZmJfc2V0X3N1c3BlbmQocmRldi0+ZmJkZXZfaW5mbywgMCk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IDVkODE0MWIuLmM4NWRmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTEwNiw1MSArMTA2LDQ0IEBACiAJCWxlZ2FjeV9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCi0vKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIFJhbmRSICovCisvKiogU2V0cyB0aGUgY29sb3IgcmFtcHMgb24gYmVoYWxmIG9mIGZiY29uICovCiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCSAgICAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCi0JaWYgKHJlZ25vID09IDApCi0JCURSTV9ERUJVRygiZ2FtbWEgc2V0ICVkXG4iLCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CiAJcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA9IHJlZCA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPSBncmVlbiA+PiA2OwogCXJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPSBibHVlID4+IDY7CiB9CiAKKy8qKiBHZXRzIHRoZSBjb2xvciByYW1wcyBvbiBiZWhhbGYgb2YgZmJjb24gKi8KK3ZvaWQgcmFkZW9uX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCisJCQkgICAgICB1MTYgKmJsdWUsIGludCByZWdubykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CisKKwkqcmVkID0gcmFkZW9uX2NydGMtPmx1dF9yW3JlZ25vXSA8PCA2OworCSpncmVlbiA9IHJhZGVvbl9jcnRjLT5sdXRfZ1tyZWdub10gPDwgNjsKKwkqYmx1ZSA9IHJhZGVvbl9jcnRjLT5sdXRfYltyZWdub10gPDwgNjsKK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX2NydGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUxNiAqZ3JlZW4sCiAJCQkJICB1MTYgKmJsdWUsIHVpbnQzMl90IHNpemUpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwotCWludCBpLCBqOworCWludCBpOwogCiAJaWYgKHNpemUgIT0gMjU2KSB7CiAJCXJldHVybjsKIAl9Ci0JaWYgKGNydGMtPmZiID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KIAotCWlmIChjcnRjLT5mYi0+ZGVwdGggPT0gMTYpIHsKLQkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKLQkJCWlmIChpIDw9IDMxKSB7Ci0JCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X3JbaSAqIDggKyBqXSA9IHJlZFtpXSA+PiA2OwotCQkJCQlyYWRlb25fY3J0Yy0+bHV0X2JbaSAqIDggKyBqXSA9IGJsdWVbaV0gPj4gNjsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQkJCXJhZGVvbl9jcnRjLT5sdXRfZ1tpICogNCArIGpdID0gZ3JlZW5baV0gPj4gNjsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJcmFkZW9uX2NydGMtPmx1dF9yW2ldID0gcmVkW2ldID4+IDY7Ci0JCQlyYWRlb25fY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA2OwotCQkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwotCQl9CisJLyogdXNlcnNwYWNlIHBhbGV0dGVzIGFyZSBhbHdheXMgY29ycmVjdCBhcyBpcyAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlyYWRlb25fY3J0Yy0+bHV0X3JbaV0gPSByZWRbaV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9nW2ldID0gZ3JlZW5baV0gPj4gNjsKKwkJcmFkZW9uX2NydGMtPmx1dF9iW2ldID0gYmx1ZVtpXSA+PiA2OwogCX0KLQogCXJhZGVvbl9jcnRjX2xvYWRfbHV0KGNydGMpOwogfQogCkBAIC0zNDEsMjcgKzMzNCwxOSBAQAogCiBpbnQgcmFkZW9uX2RkY19nZXRfbW9kZXMoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGVkaWQgKmVkaWQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCiAJCXJldHVybiAtMTsKIAlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDEpOwotCQllZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7CisJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKIAkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3IsIDApOwotCX0gZWxzZQotCQllZGlkID0gcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZDsKKwl9CiAKLQlpZiAoZWRpZCkgewotCQkvKiB1cGRhdGUgZGlnaXRhbCBiaXRzIGhlcmUgKi8KLQkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKLQkJCXJhZGVvbl9jb25uZWN0b3ItPnVzZV9kaWdpdGFsID0gMTsKLQkJZWxzZQotCQkJcmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwgPSAwOwotCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIGVkaWQpOwotCQlrZnJlZShlZGlkKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOworCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsIE5VTEwpOwpAQCAtNzI0LDcgKzcwOSwxMSBAQAogCWlmIChyZXQpIHsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JLyogYWxsb2NhdGUgY3J0Y3MgLSBUT0RPIHNpbmdsZSBjcnRjICovCisKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCW51bV9jcnRjID0gMTsKKworCS8qIGFsbG9jYXRlIGNydGNzICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9jcnRjOyBpKyspIHsKIAkJcmFkZW9uX2NydGNfaW5pdChyZGV2LT5kZGV2LCBpKTsKIAl9CkBAIC03NjQsNyArNzUzLDcgQEAKIAkJCXJhZGVvbl9jcnRjLT5ybXhfdHlwZSA9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZTsKIAkJCW1lbWNweSgmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlLAogCQkJCSZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGUsCi0JCQkJc2l6ZW9mKHN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUpKTsKKwkJCQlzaXplb2Yoc3RydWN0IGRybV9kaXNwbGF5X21vZGUpKTsKIAkJCWZpcnN0ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSkgewpAQCAtNzgyLDEwICs3NzEsMTAgQEAKIAlpZiAocmFkZW9uX2NydGMtPnJteF90eXBlICE9IFJNWF9PRkYpIHsKIAkJZml4ZWQyMF8xMiBhLCBiOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS52ZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeHJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUuaGRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+dnNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoY3J0Yy0+bW9kZS5oZGlzcGxheSk7Ci0JCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUucGFuZWxfeXJlcyk7CisJCWIuZnVsbCA9IHJmaXhlZF9jb25zdChyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGUudmRpc3BsYXkpOwogCQlyYWRlb25fY3J0Yy0+aHNjLmZ1bGwgPSByZml4ZWRfZGl2KGEsIGIpOwogCX0gZWxzZSB7CiAJCXJhZGVvbl9jcnRjLT52c2MuZnVsbCA9IHJmaXhlZF9jb25zdCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggNTBmY2U0OS4uN2Y1MGZiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTYyLDkgKzYyLDYgQEAKIGludCByYWRlb25fZHJpdmVyX2lycV9wb3N0aW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIHJhZGVvbl9kcml2ZXJfaXJxX3VuaW5zdGFsbF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpcnFyZXR1cm5fdCByYWRlb25fZHJpdmVyX2lycV9oYW5kbGVyX2ttcyhEUk1fSVJRX0FSR1MpOwotaW50IHJhZGVvbl9tYXN0ZXJfY3JlYXRlX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyKTsKLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpOwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogaW50IHJhZGVvbl9nZW1fb2JqZWN0X2luaXQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpAQCAtMjYwLDggKzI1Nyw2IEBACiAJLmdldF92YmxhbmtfY291bnRlciA9IHJhZGVvbl9nZXRfdmJsYW5rX2NvdW50ZXJfa21zLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92Ymxhbmtfa21zLAogCS5kaXNhYmxlX3ZibGFuayA9IHJhZGVvbl9kaXNhYmxlX3ZibGFua19rbXMsCi0JLm1hc3Rlcl9jcmVhdGUgPSByYWRlb25fbWFzdGVyX2NyZWF0ZV9rbXMsCi0JLm1hc3Rlcl9kZXN0cm95ID0gcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcywKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAkuZGVidWdmc19pbml0ID0gcmFkZW9uX2RlYnVnZnNfaW5pdCwKIAkuZGVidWdmc19jbGVhbnVwID0gcmFkZW9uX2RlYnVnZnNfY2xlYW51cCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDYyMTY0NjcuLmQ0MmJjNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtMzEsNiArMzEsMTAgQEAKIAogZXh0ZXJuIGludCBhdG9tX2RlYnVnOwogCisvKiBldmlsIGJ1dCBpbmNsdWRpbmcgYXRvbWJpb3MuaCBpcyBtdWNoIHdvcnNlICovCitib29sIHJhZGVvbl9hdG9tX2dldF90dl90aW1pbmdzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaW5kZXgsCisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworCiB1aW50MzJfdAogcmFkZW9uX2dldF9lbmNvZGVyX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UsIHVpbnQ4X3QgZGFjKQogewpAQCAtMTY3LDQ5ICsxNzEsMTcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2VuY29kZXItPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fZW5jb2Rlci0+bmF0aXZlX21vZGU7CiAKLQlpZiAobW9kZS0+aGRpc3BsYXkgPCBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyB8fAotCSAgICBtb2RlLT52ZGlzcGxheSA8IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzKSB7Ci0JCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aG92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT52dG90YWwgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcyArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQkJLyogdXBkYXRlIGNydGMgdmFsdWVzICovCi0JCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgQ1JUQ19JTlRFUkxBQ0VfSEFMVkVfVik7Ci0JCQkvKiBhZGp1c3QgY3J0YyB2YWx1ZXMgKi8KLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5oYmxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX2hzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+aHN5bmNfd2lkdGg7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3Z0b3RhbCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dmJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19zdGFydCA9IGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ICsgbmF0aXZlX21vZGUtPnZzeW5jX3dpZHRoOwotCQl9IGVsc2UgewotCQkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyBuYXRpdmVfbW9kZS0+aGJsYW5rOwotCQkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcyArIG5hdGl2ZV9tb2RlLT5ob3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5oc3luY19lbmQgPSBhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgbmF0aXZlX21vZGUtPnZibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0ID0gbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgKyBuYXRpdmVfbW9kZS0+dm92ZXJwbHVzOwotCQkJYWRqdXN0ZWRfbW9kZS0+dnN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+dnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7Ci0JCQkvKiB1cGRhdGUgY3J0YyB2YWx1ZXMgKi8KLQkJCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKLQkJCS8qIGFkanVzdCBjcnRjIHZhbHVlcyAqLwotCQkJYWRqdXN0ZWRfbW9kZS0+Y3J0Y19odG90YWwgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhibGFuazsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfc3RhcnQgPSBhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5ICsgbmF0aXZlX21vZGUtPmhvdmVycGx1czsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCArIG5hdGl2ZV9tb2RlLT5oc3luY193aWR0aDsKLQkJCWFkanVzdGVkX21vZGUtPmNydGNfdnRvdGFsID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52Ymxhbms7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIG5hdGl2ZV9tb2RlLT52b3ZlcnBsdXM7Ci0JCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX2VuZCA9IGFkanVzdGVkX21vZGUtPmNydGNfdnN5bmNfc3RhcnQgKyBuYXRpdmVfbW9kZS0+dnN5bmNfd2lkdGg7CisJaWYgKG1vZGUtPmhkaXNwbGF5IDwgbmF0aXZlX21vZGUtPmhkaXNwbGF5IHx8CisJICAgIG1vZGUtPnZkaXNwbGF5IDwgbmF0aXZlX21vZGUtPnZkaXNwbGF5KSB7CisJCWludCBtb2RlX2lkID0gYWRqdXN0ZWRfbW9kZS0+YmFzZS5pZDsKKwkJKmFkanVzdGVkX21vZGUgPSAqbmF0aXZlX21vZGU7CisJCWlmICghQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQkJYWRqdXN0ZWRfbW9kZS0+aGRpc3BsYXkgPSBtb2RlLT5oZGlzcGxheTsKKwkJCWFkanVzdGVkX21vZGUtPnZkaXNwbGF5ID0gbW9kZS0+dmRpc3BsYXk7CiAJCX0KLQkJYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgPSBuYXRpdmVfbW9kZS0+ZmxhZ3M7Ci0JCWFkanVzdGVkX21vZGUtPmNsb2NrID0gbmF0aXZlX21vZGUtPmRvdGNsb2NrOworCQlhZGp1c3RlZF9tb2RlLT5iYXNlLmlkID0gbW9kZV9pZDsKIAl9CiB9CiAKQEAgLTIxOSw3ICsxOTEsMTEgQEAKIAkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5ybXhfdHlwZSAhPSBSTVhfT0ZGKQpAQCAtMjMwLDYgKzIwNiwxOCBAQAogCSAgICAmJiAobW9kZS0+Y3J0Y192c3luY19zdGFydCA8IChtb2RlLT5jcnRjX3ZkaXNwbGF5ICsgMikpKQogCQlhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0ID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSArIDI7CiAKKwlpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpIHsKKwkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjICp0dl9kYWMgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCWlmICh0dl9kYWMpIHsKKwkJCWlmICh0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfTlRTQyB8fAorCQkJICAgIHR2X2RhYy0+dHZfc3RkID09IFRWX1NURF9OVFNDX0ogfHwKKwkJCSAgICB0dl9kYWMtPnR2X3N0ZCA9PSBUVl9TVERfUEFMX00pCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMCwgYWRqdXN0ZWRfbW9kZSk7CisJCQllbHNlCisJCQkJcmFkZW9uX2F0b21fZ2V0X3R2X3RpbWluZ3MocmRldiwgMSwgYWRqdXN0ZWRfbW9kZSk7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDYxLDcgKzQ0OSw3IEBACiAJCWNhc2UgMToKIAkJCWFyZ3MudjEudWNNaXNjID0gMDsKIAkJCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYxLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQpKSB7CkBAIC00ODYsNyArNDc0LDcgQEAKIAkJCQlpZiAoZGlnLT5jb2hlcmVudF9tb2RlKQogCQkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQ7CiAJCQl9Ci0JCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKIAkJCQlhcmdzLnYyLnVjTWlzYyB8PSBQQU5FTF9FTkNPREVSX01JU0NfSERNSV9UWVBFOwogCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CiAJCQlhcmdzLnYyLnVjVHJ1bmNhdGUgPSAwOwpAQCAtNTQ0LDcgKzUzMiw3IEBACiAJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQjogLyogSERNSS1CIGlzIGJhc2ljYWxseSBETC1EVkk7IGFuYWxvZyB3b3JrcyBmaW5lICovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZSBpZiAocmFkZW9uX2Nvbm5lY3Rvci0+dXNlX2RpZ2l0YWwpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFZJOwpAQCAtNTU0LDcgKzU0Miw3IEBACiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKIAljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKIAlkZWZhdWx0OgotCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IoKHN0cnVjdCBlZGlkICopY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyKSkKKwkJaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CiAJCWVsc2UKIAkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC01NjYsNyArNTU0LDcgQEAKIAkJLyppZiAocmFkZW9uX291dHB1dC0+TW9uVHlwZSA9PSBNVF9EUCkKIAkJICByZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7CiAJCSAgZWxzZSovCi0JCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcigoc3RydWN0IGVkaWQgKiljb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIpKQorCQlpZiAoZHJtX2RldGVjdF9oZG1pX21vbml0b3IocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfSERNSTsKIAkJZWxzZQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTczNCwxNCArNzIyLDE3IEBACiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwgJmNyZXYpOwogCiAJYXJncy52MS51Y0FjdGlvbiA9IGFjdGlvbjsKLQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgeworCQlhcmdzLnYxLnVzSW5pdEluZm8gPSByYWRlb25fY29ubmVjdG9yLT5jb25uZWN0b3Jfb2JqZWN0X2lkOworCX0gZWxzZSB7CisJCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApCisJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAyKSAvIDEwKTsKKwkJZWxzZQorCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CisJfQogCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWlmIChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgPiAxNjUwMDApIHsKLQkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAqIDEwICogMikgLyAxMDApOwotCQkJYXJncy52Mi5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwotCQl9IGVsc2UgewotCQkJYXJncy52Mi51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNigocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrICogMTAgKiA0KSAvIDEwMCk7Ci0JCX0KKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKKwkJCWFyZ3MudjIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDIpIC8gMTApOwogCQlpZiAoZGlnLT5kaWdfYmxvY2spCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKQEAgLTc2Niw3ICs3NTcsNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwotCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KChyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2spIC8gMTApOwogCiAJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKIAkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CkBAIC04NzQsMTYgKzg2NCw5IEBACiAJRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiBhcmdzOwogCWludCBpbmRleCA9IDA7CiAJYm9vbCBpc19kaWcgPSBmYWxzZTsKLQlpbnQgZGV2aWNlczsKIAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAotCS8qIG9uIERQTVMgb2ZmIHdlIGhhdmUgbm8gaWRlYSBpZiBhY3RpdmUgZGV2aWNlIGlzIG1lYW5pbmdmdWwgKi8KLQlpZiAobW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OICYmICFyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSkKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzOwotCWVsc2UKLQkJZGV2aWNlcyA9IHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlOwotCiAJRFJNX0RFQlVHKCJlbmNvZGVyIGRwbXMgJWQgdG8gbW9kZSAlZCwgZGV2aWNlcyAlMDh4LCBhY3RpdmVfZGV2aWNlcyAlMDh4XG4iLAogCQkgIHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkLCBtb2RlLCByYWRlb25fZW5jb2Rlci0+ZGV2aWNlcywKIAkJICByYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSk7CkBAIC05MTQsMTggKzg5NywxOCBAQAogCQlicmVhazsKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0RBQzE6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfREFDMToKLQkJaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCkpCisJCWlmIChyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKIAkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVFYxT3V0cHV0Q29udHJvbCk7Ci0JCWVsc2UgaWYgKGRldmljZXMgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX0NWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBDVjFPdXRwdXRDb250cm9sKTsKIAkJZWxzZQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBEQUMxT3V0cHV0Q29udHJvbCk7CiAJCWJyZWFrOwogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfREFDMjoKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9EQUMyOgotCQlpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkKKwkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBUVjFPdXRwdXRDb250cm9sKTsKLQkJZWxzZSBpZiAoZGV2aWNlcyAmIChBVE9NX0RFVklDRV9DVl9TVVBQT1JUKSkKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPmFjdGl2ZV9kZXZpY2UgJiAoQVRPTV9ERVZJQ0VfQ1ZfU1VQUE9SVCkpCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIENWMU91dHB1dENvbnRyb2wpOwogCQllbHNlCiAJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERBQzJPdXRwdXRDb250cm9sKTsKQEAgLTExMDQsOCArMTA4NywxMSBAQAogCX0KIAogCS8qIHNldCBzY2FsZXIgY2xlYXJzIHRoaXMgb24gc29tZSBjaGlwcyAqLwotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpICYmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOworCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgeworCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCisJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUzLDYgKzExMzksNyBAQAogCiAJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCiAJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKKwkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQpOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVApOwogCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFKTsKIAkJYnJlYWs7CkBAIC0xMjY4LDggKzEyNTUsNiBAQAogewogCXJhZGVvbl9hdG9tX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9hdG9tX2VuY29kZXJfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0KLQlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTM0NSw2ICsxMzMwLDcgQEAKIHZvaWQKIHJhZGVvbl9hZGRfYXRvbV9lbmNvZGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGVuY29kZXJfaWQsIHVpbnQzMl90IHN1cHBvcnRlZF9kZXZpY2UpCiB7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyOwogCkBAIC0xMzY0LDcgKzEzNTAsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYwppbmRleCA5NDRlNGZhLi5iMzhjNGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKQEAgLTU1LDYgKzU1LDcgQEAKIAkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfcGFuX2Rpc3BsYXkgPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAogCS5mYl9ibGFuayA9IGRybV9mYl9oZWxwZXJfYmxhbmssCisJLmZiX3NldGNtYXAgPSBkcm1fZmJfaGVscGVyX3NldGNtYXAsCiB9OwogCiAvKioKQEAgLTEyMywxMSArMTI0LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyByYWRlb25fZmJfaGVscGVyX2Z1bmNzID0gewogCS5nYW1tYV9zZXQgPSByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQsCisJLmdhbW1hX2dldCA9IHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldCwKIH07CiAKIGludCByYWRlb25mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJICAgIHVpbnQzMl90IGZiX3dpZHRoLCB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCSAgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLCB1aW50MzJfdCBzdXJmYWNlX2hlaWdodCwKKwkJICAgIHVpbnQzMl90IHN1cmZhY2VfZGVwdGgsIHVpbnQzMl90IHN1cmZhY2VfYnBwLAogCQkgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqKmZiX3ApCiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMTQ1LDEzICsxNDgsMTkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlib29sIGZiX3RpbGVkID0gZmFsc2U7IC8qIHVzZWZ1bCBmb3IgdGVzdGluZyAqLwogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOworCWludCBjcnRjX2NvdW50OwogCiAJbW9kZV9jbWQud2lkdGggPSBzdXJmYWNlX3dpZHRoOwogCW1vZGVfY21kLmhlaWdodCA9IHN1cmZhY2VfaGVpZ2h0OwotCW1vZGVfY21kLmJwcCA9IDMyOworCisJLyogYXZpdm8gY2FuJ3Qgc2Nhbm91dCByZWFsIDI0YnBwICovCisJaWYgKChzdXJmYWNlX2JwcCA9PSAyNCkgJiYgQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJc3VyZmFjZV9icHAgPSAzMjsKKworCW1vZGVfY21kLmJwcCA9IHN1cmZhY2VfYnBwOwogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLnBpdGNoID0gcmFkZW9uX2FsaWduX3BpdGNoKHJkZXYsIG1vZGVfY21kLndpZHRoLCBtb2RlX2NtZC5icHAsIGZiX3RpbGVkKSAqICgobW9kZV9jbWQuYnBwICsgMSkgLyA4KTsKLQltb2RlX2NtZC5kZXB0aCA9IDI0OworCW1vZGVfY21kLmRlcHRoID0gc3VyZmFjZV9kZXB0aDsKIAogCXNpemUgPSBtb2RlX2NtZC5waXRjaCAqIG1vZGVfY21kLmhlaWdodDsKIAlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwpAQCAtMjE2LDcgKzIyNSwxMSBAQAogCXJmYmRldiA9IGluZm8tPnBhcjsKIAlyZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZyYWRlb25fZmJfaGVscGVyX2Z1bmNzOwogCXJmYmRldi0+aGVscGVyLmRldiA9IGRldjsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcmZiZGV2LT5oZWxwZXIsIDIsCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQljcnRjX2NvdW50ID0gMTsKKwllbHNlCisJCWNydGNfY291bnQgPSAyOworCXJldCA9IGRybV9mYl9oZWxwZXJfaW5pdF9jcnRjX2NvdW50KCZyZmJkZXYtPmhlbHBlciwgY3J0Y19jb3VudCwKIAkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMjMzLDcgKzI0Niw3IEBACiAKIAlzdHJjcHkoaW5mby0+Zml4LmlkLCAicmFkZW9uZHJtZmIiKTsKIAotCWRybV9mYl9oZWxwZXJfZmlsbF9maXgoaW5mbywgZmItPnBpdGNoKTsKKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+ZmJvcHMgPSAmcmFkZW9uZmJfb3BzOwpAQCAtMjkwLDEzICszMDMsMjYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY2hhciAqbW9kZV9vcHRpb247CitpbnQgcmFkZW9uX3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKwogaW50IHJhZGVvbmZiX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShkZXYsICZyYWRlb25mYl9jcmVhdGUpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGRybV9mYl9oZWxwZXJfc2luZ2xlX2ZiX3Byb2JlKGRldiwgMzIsICZyYWRlb25mYl9jcmVhdGUpOwogfQotRVhQT1JUX1NZTUJPTChyYWRlb25mYl9wcm9iZSk7CiAKIGludCByYWRlb25mYl9yZW1vdmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKaW5kZXggYTkzMWFmMC4uYTY4ZDc1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpAQCAtMTQwLDE1ICsxNDAsMTUgQEAKIAkJV0FSTigxLCAidHJ5aW5nIHRvIHVuYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQl0ID0gb2Zmc2V0IC8gNDA5NjsKLQlwID0gdCAvIChQQUdFX1NJWkUgLyA0MDk2KTsKKwl0ID0gb2Zmc2V0IC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CisJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrLCBwKyspIHsKIAkJaWYgKHJkZXYtPmdhcnQucGFnZXNbcF0pIHsKIAkJCXBjaV91bm1hcF9wYWdlKHJkZXYtPnBkZXYsIHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSAwOwotCQkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyA0MDk2KTsgaisrLCB0KyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewogCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIDApOwogCQkJfQogCQl9CkBAIC0xNjksOCArMTY5LDggQEAKIAkJRFJNX0VSUk9SKCJ0cnlpbmcgdG8gYmluZCBtZW1vcnkgdG8gdW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXQgPSBvZmZzZXQgLyA0MDk2OwotCXAgPSB0IC8gKFBBR0VfU0laRSAvIDQwOTYpOworCXQgPSBvZmZzZXQgLyBSQURFT05fR1BVX1BBR0VfU0laRTsKKwlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7CiAJCS8qIHdlIG5lZWQgdG8gc3VwcG9ydCBsYXJnZSBtZW1vcnkgY29uZmlndXJhdGlvbnMgKi8KQEAgLTE4NSw5ICsxODUsOSBAQAogCQl9CiAJCXJkZXYtPmdhcnQucGFnZXNbcF0gPSBwYWdlbGlzdFtpXTsKIAkJcGFnZV9iYXNlID0gcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdOwotCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIDQwOTYpOyBqKyssIHQrKykgeworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKIAkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSk7Ci0JCQlwYWdlX2Jhc2UgKz0gNDA5NjsKKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMjAwLDE0ICsyMDAsMTQgQEAKIAlpZiAocmRldi0+Z2FydC5wYWdlcykgewogCQlyZXR1cm4gMDsKIAl9Ci0JLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gNDA5NiAqLwotCWlmIChQQUdFX1NJWkUgPCA0MDk2KSB7CisJLyogV2UgbmVlZCBQQUdFX1NJWkUgPj0gUkFERU9OX0dQVV9QQUdFX1NJWkUgKi8KKwlpZiAoUEFHRV9TSVpFIDwgUkFERU9OX0dQVV9QQUdFX1NJWkUpIHsKIAkJRFJNX0VSUk9SKCJQYWdlIHNpemUgaXMgc21hbGxlciB0aGFuIEdQVSBwYWdlIHNpemUhXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIENvbXB1dGUgdGFibGUgc2l6ZSAqLwogCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUEFHRV9TSVpFOwotCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gNDA5NjsKKwlyZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMgPSByZGV2LT5tYy5ndHRfc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCURSTV9JTkZPKCJHQVJUOiBudW0gY3B1IHBhZ2VzICV1LCBudW0gZ3B1IHBhZ2VzICV1XG4iLAogCQkgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzLCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXMpOwogCS8qIEFsbG9jYXRlIHBhZ2VzIHRhYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggMTg0MTE0NS4uYTBmZTYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtODMsMTEgKzgzLDIyIEBACiBpbnQgcmFkZW9uX2lycV9rbXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgciA9IDA7CisJaW50IG51bV9jcnRjID0gMjsKIAotCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgMik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCQludW1fY3J0YyA9IDE7CisKKwlyID0gZHJtX3ZibGFua19pbml0KHJkZXYtPmRkZXYsIG51bV9jcnRjKTsKIAlpZiAocikgewogCQlyZXR1cm4gcjsKIAl9CisJLyogZW5hYmxlIG1zaSAqLworCXJkZXYtPm1zaV9lbmFibGVkID0gMDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlYzODApIHsKKwkJaW50IHJldCA9IHBjaV9lbmFibGVfbXNpKHJkZXYtPnBkZXYpOworCQlpZiAoIXJldCkKKwkJCXJkZXYtPm1zaV9lbmFibGVkID0gMTsKKwl9CiAJZHJtX2lycV9pbnN0YWxsKHJkZXYtPmRkZXYpOwogCXJkZXYtPmlycS5pbnN0YWxsZWQgPSB0cnVlOwogCURSTV9JTkZPKCJyYWRlb246IGlycSBpbml0aWFsaXplZC5cbiIpOwpAQCAtOTksNSArMTEwLDcgQEAKIAlpZiAocmRldi0+aXJxLmluc3RhbGxlZCkgewogCQlyZGV2LT5pcnEuaW5zdGFsbGVkID0gZmFsc2U7CiAJCWRybV9pcnFfdW5pbnN0YWxsKHJkZXYtPmRkZXYpOworCQlpZiAocmRldi0+bXNpX2VuYWJsZWQpCisJCQlwY2lfZGlzYWJsZV9tc2kocmRldi0+cGRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCA3MDliZDg5Li5iYTEyODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjAxLDU1ICsyMDEsNiBAQAogCiAKIC8qCi0gKiBGb3IgbXVsdGlwbGUgbWFzdGVyIChsaWtlIG11bHRpcGxlIFgpLgotICovCi1zdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSB7Ci0JZHJtX2xvY2FsX21hcF90ICpzYXJlYTsKLQlkcm1fcmFkZW9uX3NhcmVhX3QgKnNhcmVhX3ByaXY7Ci19OwotCi1pbnQgcmFkZW9uX21hc3Rlcl9jcmVhdGVfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2OwotCXVuc2lnbmVkIGxvbmcgc2FyZWFwYWdlOwotCWludCByZXQ7Ci0KLQltYXN0ZXJfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCptYXN0ZXJfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKiBwcmVidWlsZCB0aGUgU0FSRUEgKi8KLQlzYXJlYXBhZ2UgPSBtYXhfdCh1bnNpZ25lZCBsb25nLCBTQVJFQV9NQVgsIFBBR0VfU0laRSk7Ci0JcmV0ID0gZHJtX2FkZG1hcChkZXYsIDAsIHNhcmVhcGFnZSwgX0RSTV9TSE0sCi0JCQkgX0RSTV9DT05UQUlOU19MT0NLLAotCQkJICZtYXN0ZXJfcHJpdi0+c2FyZWEpOwotCWlmIChyZXQpIHsKLQkJRFJNX0VSUk9SKCJTQVJFQSBzZXR1cCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdiA9IG1hc3Rlcl9wcml2LT5zYXJlYS0+aGFuZGxlICsgc2l6ZW9mKHN0cnVjdCBkcm1fc2FyZWEpOwotCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZkN1cnJlbnRQYWdlID0gMDsKLQltYXN0ZXItPmRyaXZlcl9wcml2ID0gbWFzdGVyX3ByaXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmFkZW9uX21hc3Rlcl9kZXN0cm95X2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkcm1fbWFzdGVyICptYXN0ZXIpCi17Ci0Jc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gbWFzdGVyLT5kcml2ZXJfcHJpdjsKLQotCWlmIChtYXN0ZXJfcHJpdiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG1hc3Rlcl9wcml2LT5zYXJlYSkgewotCQlkcm1fcm1tYXBfbG9ja2VkKGRldiwgbWFzdGVyX3ByaXYtPnNhcmVhKTsKLQl9Ci0Ja2ZyZWUobWFzdGVyX3ByaXYpOwotCW1hc3Rlci0+ZHJpdmVyX3ByaXYgPSBOVUxMOwotfQotCi0KLS8qCiAgKiBJT0NUTC4KICAqLwogaW50IHJhZGVvbl9kbWFfaW9jdGxfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCAyYjk5N2ExLi44ZDBiN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAl1MzIgZnBfaG9yel9zdHJldGNoLCBmcF92ZXJ0X3N0cmV0Y2gsIGZwX2hvcnpfdmVydF9hY3RpdmU7CiAJdTMyIGZwX2hfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y19oX3RvdGFsX2Rpc3A7CiAJdTMyIGZwX3Zfc3luY19zdHJ0X3dpZCwgZnBfY3J0Y192X3RvdGFsX2Rpc3A7Ci0Jc3RydWN0IHJhZGVvbl9uYXRpdmVfbW9kZSAqbmF0aXZlX21vZGUgPSAmcmFkZW9uX2NydGMtPm5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpuYXRpdmVfbW9kZSA9ICZyYWRlb25fY3J0Yy0+bmF0aXZlX21vZGU7CiAKIAlmcF92ZXJ0X3N0cmV0Y2ggPSBSUkVHMzIoUkFERU9OX0ZQX1ZFUlRfU1RSRVRDSCkgJgogCQkoUkFERU9OX1ZFUlRfU1RSRVRDSF9SRVNFUlZFRCB8CkBAIC05NSwxOSArOTUsMTkgQEAKIAogCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAwOwogCi0JaWYgKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzID09IDAgfHwKLQkgICAgbmF0aXZlX21vZGUtPnBhbmVsX3lyZXMgPT0gMCkgeworCWlmIChuYXRpdmVfbW9kZS0+aGRpc3BsYXkgPT0gMCB8fAorCSAgICBuYXRpdmVfbW9kZS0+dmRpc3BsYXkgPT0gMCkgewogCQloc2NhbGUgPSBmYWxzZTsKIAkJdnNjYWxlID0gZmFsc2U7CiAJfSBlbHNlIHsKLQkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcykKLQkJCXhyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeHJlczsKLQkJaWYgKHlyZXMgPiBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKLQkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlczsKKwkJaWYgKHhyZXMgPiBuYXRpdmVfbW9kZS0+aGRpc3BsYXkpCisJCQl4cmVzID0gbmF0aXZlX21vZGUtPmhkaXNwbGF5OworCQlpZiAoeXJlcyA+IG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkKKwkJCXlyZXMgPSBuYXRpdmVfbW9kZS0+dmRpc3BsYXk7CiAKLQkJaWYgKHhyZXMgPT0gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMpCisJCWlmICh4cmVzID09IG5hdGl2ZV9tb2RlLT5oZGlzcGxheSkKIAkJCWhzY2FsZSA9IGZhbHNlOwotCQlpZiAoeXJlcyA9PSBuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykKKwkJaWYgKHlyZXMgPT0gbmF0aXZlX21vZGUtPnZkaXNwbGF5KQogCQkJdnNjYWxlID0gZmFsc2U7CiAJfQogCkBAIC0xMTksMTEgKzExOSwxMSBAQAogCQllbHNlIHsKIAkJCWluYyA9IChmcF9ob3J6X3N0cmV0Y2ggJiBSQURFT05fSE9SWl9BVVRPX1JBVElPX0lOQykgPyAxIDogMDsKIAkJCXNjYWxlID0gKCh4cmVzICsgaW5jKSAqIFJBREVPTl9IT1JaX1NUUkVUQ0hfUkFUSU9fTUFYKQotCQkJCS8gbmF0aXZlX21vZGUtPnBhbmVsX3hyZXMgKyAxOworCQkJCS8gbmF0aXZlX21vZGUtPmhkaXNwbGF5ICsgMTsKIAkJCWZwX2hvcnpfc3RyZXRjaCB8PSAoKChzY2FsZSkgJiBSQURFT05fSE9SWl9TVFJFVENIX1JBVElPX01BU0spIHwKIAkJCQkJUkFERU9OX0hPUlpfU1RSRVRDSF9CTEVORCB8CiAJCQkJCVJBREVPTl9IT1JaX1NUUkVUQ0hfRU5BQkxFIHwKLQkJCQkJKChuYXRpdmVfbW9kZS0+cGFuZWxfeHJlcy84LTEpIDw8IDE2KSk7CisJCQkJCSgobmF0aXZlX21vZGUtPmhkaXNwbGF5LzgtMSkgPDwgMTYpKTsKIAkJfQogCiAJCWlmICghdnNjYWxlKQpAQCAtMTMxLDExICsxMzEsMTEgQEAKIAkJZWxzZSB7CiAJCQlpbmMgPSAoZnBfdmVydF9zdHJldGNoICYgUkFERU9OX1ZFUlRfQVVUT19SQVRJT19JTkMpID8gMSA6IDA7CiAJCQlzY2FsZSA9ICgoeXJlcyArIGluYykgKiBSQURFT05fVkVSVF9TVFJFVENIX1JBVElPX01BWCkKLQkJCQkvIG5hdGl2ZV9tb2RlLT5wYW5lbF95cmVzICsgMTsKKwkJCQkvIG5hdGl2ZV9tb2RlLT52ZGlzcGxheSArIDE7CiAJCQlmcF92ZXJ0X3N0cmV0Y2ggfD0gKCgoc2NhbGUpICYgUkFERU9OX1ZFUlRfU1RSRVRDSF9SQVRJT19NQVNLKSB8CiAJCQkJCVJBREVPTl9WRVJUX1NUUkVUQ0hfRU5BQkxFIHwKIAkJCQkJUkFERU9OX1ZFUlRfU1RSRVRDSF9CTEVORCB8Ci0JCQkJCSgobmF0aXZlX21vZGUtPnBhbmVsX3lyZXMtMSkgPDwgMTIpKTsKKwkJCQkJKChuYXRpdmVfbW9kZS0+dmRpc3BsYXktMSkgPDwgMTIpKTsKIAkJfQogCQlicmVhazsKIAljYXNlIFJNWF9DRU5URVI6CkBAIC0xNzUsOCArMTc1LDggQEAKIAkJCQkJCT8gUkFERU9OX0NSVENfVl9TWU5DX1BPTAogCQkJCQkJOiAwKSkpOwogCi0JCWZwX2hvcnpfdmVydF9hY3RpdmUgPSAoKChuYXRpdmVfbW9kZS0+cGFuZWxfeXJlcykgJiAweGZmZikgfAotCQkJCSgoKG5hdGl2ZV9tb2RlLT5wYW5lbF94cmVzIC8gOCkgJiAweDFmZikgPDwgMTYpKTsKKwkJZnBfaG9yel92ZXJ0X2FjdGl2ZSA9ICgoKG5hdGl2ZV9tb2RlLT52ZGlzcGxheSkgJiAweGZmZikgfAorCQkJCSgoKG5hdGl2ZV9tb2RlLT5oZGlzcGxheSAvIDgpICYgMHgxZmYpIDw8IDE2KSk7CiAJCWJyZWFrOwogCWNhc2UgUk1YX09GRjoKIAlkZWZhdWx0OgpAQCAtNTMyLDYgKzUzMiwxMCBAQAogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIob2xkX2ZiKTsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2ZiLT5vYmopOwogCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY0LDYgKzY2OCw5IEBACiAKIAkJV1JFRzMyKFJBREVPTl9ESVNQMl9NRVJHRV9DTlRMLCBkaXNwMl9tZXJnZV9jbnRsKTsKIAkJV1JFRzMyKFJBREVPTl9DUlRDMl9HRU5fQ05UTCwgY3J0YzJfZ2VuX2NudGwpOworCisJCVdSRUczMihSQURFT05fRlBfSDJfU1lOQ19TVFJUX1dJRCwgY3J0Y19oX3N5bmNfc3RydF93aWQpOworCQlXUkVHMzIoUkFERU9OX0ZQX1YyX1NZTkNfU1RSVF9XSUQsIGNydGNfdl9zeW5jX3N0cnRfd2lkKTsKIAl9IGVsc2UgewogCQl1aW50MzJfdCBjcnRjX2dlbl9jbnRsOwogCQl1aW50MzJfdCBjcnRjX2V4dF9jbnRsOwpAQCAtMTAxNSwxNCArMTAyMiwxMSBAQAogCQkJCSBpbnQgeCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBUT0RPIFRWICovCiAJcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKIAlyYWRlb25fc2V0X2NydGNfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwogCXJhZGVvbl9zZXRfcGxsKGNydGMsIGFkanVzdGVkX21vZGUpOwotCXJhZGVvbl9iYW5kd2lkdGhfdXBkYXRlKHJkZXYpOwogCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA9PSAwKSB7CiAJCXJhZGVvbl9sZWdhY3lfcm14X21vZGVfc2V0KGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOwogCX0gZWxzZSB7CkBAIC0xMDUzLDYgKzEwNTcsNyBAQAogCS5tb2RlX3NldF9iYXNlID0gcmFkZW9uX2NydGNfc2V0X2Jhc2UsCiAJLnByZXBhcmUgPSByYWRlb25fY3J0Y19wcmVwYXJlLAogCS5jb21taXQgPSByYWRlb25fY3J0Y19jb21taXQsCisJLmxvYWRfbHV0ID0gcmFkZW9uX2NydGNfbG9hZF9sdXQsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggYjE1NDdmNy4uMDAzODIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTEwNyw4ICsxMDcsNiBAQAogCWVsc2UKIAkJcmFkZW9uX2NvbWJpb3Nfb3V0cHV0X2xvY2soZW5jb2RlciwgdHJ1ZSk7CiAJcmFkZW9uX2xlZ2FjeV9sdmRzX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCi0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfbHZkc19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTkyLDYgKzE5MCw4IEBACiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOwogCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCWlmIChyYWRlb25fZW5jb2Rlci0+cm14X3R5cGUgIT0gUk1YX09GRikKQEAgLTIxOCw3ICsyMTgsOCBAQAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtMjcyLDcgKzI3Myw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC00NjgsNyArNDY4LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdG1kc19pbnRfZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09GRik7Ci0JcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl9sZWdhY3lfdG1kc19pbnRfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKQEAgLTU0Myw2ICs1NDIsMTQgQEAKIAogICAgIGZwX2dlbl9jbnRsICY9IH4oUkFERU9OX0ZQX0ZQT04gfCBSQURFT05fRlBfVE1EU19FTik7CiAKKyAgICBmcF9nZW5fY250bCAmPSB+KFJBREVPTl9GUF9STVhfSFZTWU5DX0NPTlRST0xfRU4gfAorCQkgICAgIFJBREVPTl9GUF9ERlBfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRfU1lOQ19TRUwgfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX0xPQ0tfOERPVCB8CisJCSAgICAgUkFERU9OX0ZQX1VTRV9TSEFET1dfRU4gfAorCQkgICAgIFJBREVPTl9GUF9DUlRDX1VTRV9TSEFET1dfVkVORCB8CisJCSAgICAgUkFERU9OX0ZQX0NSVF9TWU5DX0FMVCk7CisKICAgICBpZiAoMSkgLyogIEZJWE1FIHJnYkJpdHMgPT0gOCAqLwogCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfUEFORUxfRk9STUFUOyAgLyogMjQgYml0IGZvcm1hdCAqLwogICAgIGVsc2UKQEAgLTU1Niw3ICs1NjMsNyBAQAogCQkgICAgZWxzZQogCQkJICAgIGZwX2dlbl9jbnRsIHw9IFIyMDBfRlBfU09VUkNFX1NFTF9DUlRDMTsKIAkgICAgfSBlbHNlCi0JCSAgICBmcF9nZW5fY250bCB8PSBSQURFT05fRlBfU0VMX0NSVEMxOworCQkgICAgZnBfZ2VuX2NudGwgJj0gflJBREVPTl9GUF9TRUxfQ1JUQzI7CiAgICAgfSBlbHNlIHsKIAkgICAgaWYgKEFTSUNfSVNfUjMwMChyZGV2KSB8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMjAwKSB7CiAJCSAgICBmcF9nZW5fY250bCAmPSB+UjIwMF9GUF9TT1VSQ0VfU0VMX01BU0s7CkBAIC01OTMsNyArNjAwLDggQEAKIAkJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewotCisJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLworCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogCWRybV9tb2RlX3NldF9jcnRjaW5mbyhhZGp1c3RlZF9tb2RlLCAwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtNjM2LDcgKzY0NCw2IEBACiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19vdXRwdXRfbG9jayhlbmNvZGVyLCB0cnVlKTsKIAlyYWRlb25fbGVnYWN5X3RtZHNfZXh0X2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfZXh0X2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCkBAIC03MzUsNyArNzQyLDggQEAKIAkJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAogCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7Ci0KKwkvKiBzZXQgdGhlIGFjdGl2ZSBlbmNvZGVyIHRvIGNvbm5lY3RvciByb3V0aW5nICovCisJcmFkZW9uX2VuY29kZXJfc2V0X2FjdGl2ZV9kZXZpY2UoZW5jb2Rlcik7CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOwogCiAJcmV0dXJuIHRydWU7CkBAIC04MzksNyArODQ3LDYgQEAKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX291dHB1dF9sb2NrKGVuY29kZXIsIHRydWUpOwogCXJhZGVvbl9sZWdhY3lfdHZfZGFjX2RwbXMoZW5jb2RlciwgRFJNX01PREVfRFBNU19PRkYpOwotCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtODgxLDcgKzg4OCw3IEBACiAJCQkJCVI0MjBfVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUjQyMF9UVl9EQUNfUkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKLQkJCQkJUjQyMF9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkJUjQyMF9UVl9EQUNfQkRBQ1BEIHwKIAkJCQkJUjQyMF9UVl9EQUNfVFZFTkFCTEUpOwogCQl9IGVsc2UgewogCQkJdHZfZGFjX2NudGwgJj0gfihSQURFT05fVFZfREFDX1NURF9NQVNLIHwKQEAgLTg4OSw3ICs4OTYsNyBAQAogCQkJCQlSQURFT05fVFZfREFDX0RBQ0FESl9NQVNLIHwKIAkJCQkJUkFERU9OX1RWX0RBQ19SREFDUEQgfAogCQkJCQlSQURFT05fVFZfREFDX0dEQUNQRCB8Ci0JCQkJCVJBREVPTl9UVl9EQUNfR0RBQ1BEKTsKKwkJCQkJUkFERU9OX1RWX0RBQ19CREFDUEQpOwogCQl9CiAKIAkJLyogIEZJWE1FIFRWICovCkBAIC0xMzE4LDcgKzEzMjUsMTAgQEAKIAkJcmV0dXJuOwogCiAJZW5jb2RlciA9ICZyYWRlb25fZW5jb2Rlci0+YmFzZTsKLQllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDB4MzsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fU0lOR0xFX0NSVEMpCisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOworCWVsc2UKKwkJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSAweDM7CiAJZW5jb2Rlci0+cG9zc2libGVfY2xvbmVzID0gMDsKIAogCXJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdiA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKaW5kZXggNTcwYTU4Ny4uYWNlNzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaApAQCAtMTcyLDYgKzE3Miw3IEBACiAKIHN0cnVjdCByYWRlb25fbW9kZV9pbmZvIHsKIAlzdHJ1Y3QgYXRvbV9jb250ZXh0ICphdG9tX2NvbnRleHQ7CisJc3RydWN0IGNhcmRfaW5mbyAqYXRvbV9jYXJkX2luZm87CiAJZW51bSByYWRlb25fY29ubmVjdG9yX3RhYmxlIGNvbm5lY3Rvcl90YWJsZTsKIAlib29sIG1vZGVfY29uZmlnX2luaXRpYWxpemVkOwogCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbMl07CkBAIC0xODYsMTcgKzE4Nyw2IEBACiAKIH07CiAKLXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgewotCS8qIHByZWZlcnJlZCBtb2RlICovCi0JdWludDMyX3QgcGFuZWxfeHJlcywgcGFuZWxfeXJlczsKLQl1aW50MzJfdCBob3ZlcnBsdXMsIGhzeW5jX3dpZHRoOwotCXVpbnQzMl90IGhibGFuazsKLQl1aW50MzJfdCB2b3ZlcnBsdXMsIHZzeW5jX3dpZHRoOwotCXVpbnQzMl90IHZibGFuazsKLQl1aW50MzJfdCBkb3RjbG9jazsKLQl1aW50MzJfdCBmbGFnczsKLX07Ci0KICNkZWZpbmUgTUFYX0hfQ09ERV9USU1JTkdfTEVOIDMyCiAjZGVmaW5lIE1BWF9WX0NPREVfVElNSU5HX0xFTiAzMgogCkBAIC0yMjgsNyArMjE4LDcgQEAKIAllbnVtIHJhZGVvbl9ybXhfdHlwZSBybXhfdHlwZTsKIAlmaXhlZDIwXzEyIHZzYzsKIAlmaXhlZDIwXzEyIGhzYzsKLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjIHsKQEAgLTI0OCw3ICsyMzgsNyBAQAogCWJvb2wgICAgIHVzZV9iaW9zX2RpdmlkZXJzOwogCXVpbnQzMl90IGx2ZHNfZ2VuX2NudGw7CiAJLyogcGFuZWwgbW9kZSAqLwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfdHZfZGFjIHsKQEAgLTI3MSw2ICsyNjEsMTYgQEAKIAlzdHJ1Y3QgcmFkZW9uX3RtZHNfcGxsIHRtZHNfcGxsWzRdOwogfTsKIAorLyogc3ByZWFkIHNwZWN0cnVtICovCitzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgeworCXVpbnQxNl90IHBlcmNlbnRhZ2U7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3Qgc3RlcDsKKwl1aW50OF90IGRlbGF5OworCXVpbnQ4X3QgcmFuZ2U7CisJdWludDhfdCByZWZkaXY7Cit9OworCiBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgewogCS8qIGF0b20gZGlnICovCiAJYm9vbCBjb2hlcmVudF9tb2RlOwpAQCAtMjc4LDggKzI3OCw5IEBACiAJLyogYXRvbSBsdmRzICovCiAJdWludDMyX3QgbHZkc19taXNjOwogCXVpbnQxNl90IHBhbmVsX3B3cl9kZWxheTsKKwlzdHJ1Y3QgcmFkZW9uX2F0b21fc3MgKnNzOwogCS8qIHBhbmVsIG1vZGUgKi8KLQlzdHJ1Y3QgcmFkZW9uX25hdGl2ZV9tb2RlIG5hdGl2ZV9tb2RlOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIG5hdGl2ZV9tb2RlOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGFjIHsKQEAgLTI5NCw3ICsyOTUsNyBAQAogCXVpbnQzMl90IGZsYWdzOwogCXVpbnQzMl90IHBpeGVsX2Nsb2NrOwogCWVudW0gcmFkZW9uX3JteF90eXBlIHJteF90eXBlOwotCXN0cnVjdCByYWRlb25fbmF0aXZlX21vZGUgbmF0aXZlX21vZGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CiAJdm9pZCAqZW5jX3ByaXY7CiB9OwogCkBAIC0zMDgsMTIgKzMwOSwxNSBAQAogCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKIAl1aW50MzJfdCBkZXZpY2VzOwogCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmRkY19idXM7CisJLyogc29tZSBzeXN0ZW1zIGhhdmUgYSBhbiBoZG1pIGFuZCB2Z2EgcG9ydCB3aXRoIGEgc2hhcmVkIGRkYyBsaW5lICovCisJYm9vbCBzaGFyZWRfZGRjOwogCWJvb2wgdXNlX2RpZ2l0YWw7CiAJLyogd2UgbmVlZCB0byBtaW5kIHRoZSBFRElEIGJldHdlZW4gZGV0ZWN0CiAJICAgYW5kIGdldCBtb2RlcyBkdWUgdG8gYW5hbG9nL2RpZ2l0YWwvdHZlbmNvZGVyICovCiAJc3RydWN0IGVkaWQgKmVkaWQ7CiAJdm9pZCAqY29uX3ByaXY7CiAJYm9vbCBkYWNfbG9hZF9kZXRlY3Q7CisJdWludDE2X3QgY29ubmVjdG9yX29iamVjdF9pZDsKIH07CiAKIHN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgewpAQCAtNDA3LDYgKzQxMSw4IEBACiByYWRlb25fY29tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgYm9vbCBvbik7CiBleHRlcm4gdm9pZCByYWRlb25fY3J0Y19mYl9nYW1tYV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCiAJCQkJICAgICB1MTYgYmx1ZSwgaW50IHJlZ25vKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAorCQkJCSAgICAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOwogc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqcmFkZW9uX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKIAkJCQkJCSAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwppbmRleCA3M2FmNDYzLi4xZjA1NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYwpAQCAtNDAwLDExICs0MDAsOSBAQAogaW50IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCAqbG9iajsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCi0JbGlzdF9mb3JfZWFjaChpLCBoZWFkKSB7Ci0JCWxvYmogPSBsaXN0X2VudHJ5KGksIHN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobG9iaiwgaGVhZCwgbGlzdCl7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyID0gcmFkZW9uX29iamVjdF9yZXNlcnZlKGxvYmotPnJvYmosIHRydWUpOwogCQkJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKQEAgLTQyMCwxMyArNDE4LDEwIEBACiB2b2lkIHJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwotCXN0cnVjdCBsaXN0X2hlYWQgKmk7CiAKLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCWlmICghbG9iai0+cm9iai0+cGluX2NvdW50KSB7CiAJCQlyYWRlb25fb2JqZWN0X3VucmVzZXJ2ZShsb2JqLT5yb2JqKTsKLQkJfSBlbHNlIHsKIAkJfQogCX0KIH0KQEAgLTQzNiw3ICs0MzEsNiBAQAogCXN0cnVjdCByYWRlb25fb2JqZWN0X2xpc3QgKmxvYmo7CiAJc3RydWN0IHJhZGVvbl9vYmplY3QgKnJvYmo7CiAJc3RydWN0IHJhZGVvbl9mZW5jZSAqb2xkX2ZlbmNlID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppOwogCWludCByOwogCiAJciA9IHJhZGVvbl9vYmplY3RfbGlzdF9yZXNlcnZlKGhlYWQpOwpAQCAtNDQ0LDggKzQzOCw3IEBACiAJCXJhZGVvbl9vYmplY3RfbGlzdF91bnJlc2VydmUoaGVhZCk7CiAJCXJldHVybiByOwogCX0KLQlsaXN0X2Zvcl9lYWNoKGksIGhlYWQpIHsKLQkJbG9iaiA9IGxpc3RfZW50cnkoaSwgc3RydWN0IHJhZGVvbl9vYmplY3RfbGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2JqLCBoZWFkLCBsaXN0KSB7CiAJCXJvYmogPSBsb2JqLT5yb2JqOwogCQlpZiAoIXJvYmotPnBpbl9jb3VudCkgewogCQkJaWYgKGxvYmotPndkb21haW4pIHsKQEAgLTQ4MiwxMCArNDc1LDggQEAKIHsKIAlzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0ICpsb2JqOwogCXN0cnVjdCByYWRlb25fZmVuY2UgKm9sZF9mZW5jZSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaTsKIAotCWxpc3RfZm9yX2VhY2goaSwgaGVhZCkgewotCQlsb2JqID0gbGlzdF9lbnRyeShpLCBzdHJ1Y3QgcmFkZW9uX29iamVjdF9saXN0LCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvYmosIGhlYWQsIGxpc3QpIHsKIAkJb2xkX2ZlbmNlID0gKHN0cnVjdCByYWRlb25fZmVuY2UgKilsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqOwogCQlsb2JqLT5yb2JqLT50b2JqLnN5bmNfb2JqID0gTlVMTDsKIAkJaWYgKG9sZF9mZW5jZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxNDZjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJyYWRlb24uaCIKKworaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworCitpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQocmRldikpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBDUCAhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlYnVnZnMgaW5mbworICovCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzZXFfcHJpbnRmKG0sICJlbmdpbmUgY2xvY2s6ICV1MCBIelxuIiwgcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldikpOworCXNlcV9wcmludGYobSwgIm1lbW9yeSBjbG9jazogJXUwIEh6XG4iLCByYWRlb25fZ2V0X21lbW9yeV9jbG9jayhyZGV2KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9wbV9pbmZvX2xpc3RbXSA9IHsKKwl7InJhZGVvbl9wbV9pbmZvIiwgcmFkZW9uX2RlYnVnZnNfcG1faW5mbywgMCwgTlVMTH0sCit9OworI2VuZGlmCisKK2ludCByYWRlb25fZGVidWdmc19wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXJldHVybiByYWRlb25fZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX3BtX2luZm9fbGlzdCwgQVJSQVlfU0laRShyYWRlb25fcG1faW5mb19saXN0KSk7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCmluZGV4IDIxZGE4NzEuLjI5YWI3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JlZy5oCkBAIC0yOTAsNiArMjkwLDggQEAKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMICAgICAgICAgICAgICAgICAgICAgMHgwMDMwCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX01BU1RFUl9ESVMgICAgICAgICAoMSA8PCA2KQogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19CSU9TX0RJU19ST00gICAgICAgKDEgPDwgMTIpCisjCWRlZmluZSBSUzYwMF9CVVNfTUFTVEVSX0RJUwkgICAgICgxIDw8IDE0KQorIwlkZWZpbmUgUlM2MDBfTVNJX1JFQVJNCQkgICAgICgxIDw8IDIwKSAvKiByczYwMC9yczY5MC9yczc0MCAqLwogIyAgICAgICBkZWZpbmUgUkFERU9OX0JVU19SRF9ESVNDQVJEX0VOICAgICAgKDEgPDwgMjQpCiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JEX0FCT1JUX0VOICAgICAgICAoMSA8PCAyNSkKICMgICAgICAgZGVmaW5lIFJBREVPTl9CVVNfTVNUUl9ESVNDT05ORUNUX0VOICgxIDw8IDI4KQpAQCAtMjk3LDYgKzI5OSw5IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1JFQURfQlVSU1QgICAgICAgICAoMSA8PCAzMCkKICNkZWZpbmUgUkFERU9OX0JVU19DTlRMMSAgICAgICAgICAgICAgICAgICAgMHgwMDM0CiAjICAgICAgIGRlZmluZSBSQURFT05fQlVTX1dBSVRfT05fTE9DS19FTiAgICAoMSA8PCA0KQorLyogcnYzNzAvcnYzODAsIHJ2NDEwLCByNDIzL3I0MzAvcjQ4MCwgcjV4eCAqLworI2RlZmluZSBSQURFT05fTVNJX1JFQVJNX0VOCQkgICAgMHgwMTYwCisjCWRlZmluZSBSVjM3MF9NU0lfUkVBUk1fRU4JICAgICAoMSA8PCAwKQogCiAvKiAjZGVmaW5lIFJBREVPTl9QQ0lFX0lOREVYICAgICAgICAgICAgICAgICAgIDB4MDAzMCAqLwogLyogI2RlZmluZSBSQURFT05fUENJRV9EQVRBICAgICAgICAgICAgICAgICAgICAweDAwMzQgKi8KQEAgLTMzMTEsNiArMzMxNiw3IEBACiAjZGVmaW5lIFJBREVPTl9BSUNfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4MDFkMAogIyAgICAgICBkZWZpbmUgUkFERU9OX1BDSUdBUlRfVFJBTlNMQVRFX0VOICAgICAoMSA8PCAwKQogIyAgICAgICBkZWZpbmUgUkFERU9OX0RJU19PVVRfT0ZfUENJX0dBUlRfQUNDRVNTICAgICAoMSA8PCAxKQorIwlkZWZpbmUgUlM0MDBfTVNJX1JFQVJNCSAgICAgICAgICAgICAgICAoMSA8PCAzKSAvKiByczQwMC9yczQ4MCAqLwogI2RlZmluZSBSQURFT05fQUlDX0xPX0FERFIgICAgICAgICAgICAgICAgICAweDAxZGMKICNkZWZpbmUgUkFERU9OX0FJQ19QVF9CQVNFCQkweDAxZDgKICNkZWZpbmUgUkFERU9OX0FJQ19ISV9BRERSCQkweDAxZTAKQEAgLTMzMzMsNiArMzMzOSw3IEBACiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BWF9EV09SRFMgICAgICAgICAgKDEgPDwgMTIpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUjMwMF9DUF9QQUNLRVQwX1JFR19NQVNLICAgICAgICAgICAgIDB4MDAwMDFmZmYKKyMgICAgICAgZGVmaW5lIFI2MDBfQ1BfUEFDS0VUMF9SRUdfTUFTSyAgICAgICAgICAgICAweDAwMDBmZmZmCiAjICAgICAgIGRlZmluZSBSQURFT05fQ1BfUEFDS0VUMV9SRUcwX01BU0sgICAgICAgICAgMHgwMDAwMDdmZgogIyAgICAgICBkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDFfUkVHMV9NQVNLICAgICAgICAgIDB4MDAzZmY4MDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDAzYzMzY2YuLmY4YTQ2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkvKiBOdW1iZXIgb2YgdGVzdHMgPQogCSAqIChUb3RhbCBHVFQgLSBJQiBwb29sIC0gd3JpdGViYWNrIHBhZ2UgLSByaW5nIGJ1ZmZlcikgLyB0ZXN0IHNpemUKIAkgKi8KLQluID0gKHJkZXYtPm1jLmd0dF9zaXplIC0gUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0IC0gNDA5NiAtCisJbiA9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCAtIFJBREVPTl9HUFVfUEFHRV9TSVpFIC0KIAkgICAgIHJkZXYtPmNwLnJpbmdfc2l6ZSkgLyBzaXplOwogCiAJZ3R0X29iaiA9IGt6YWxsb2MobiAqIHNpemVvZigqZ3R0X29iaiksIEdGUF9LRVJORUwpOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CiAKLQkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIGd0dF9hZGRyLCB2cmFtX2FkZHIsIHNpemUgLyA0MDk2LCBmZW5jZSk7CisJCXIgPSByYWRlb25fY29weShyZGV2LCBndHRfYWRkciwgdnJhbV9hZGRyLCBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsIGZlbmNlKTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigiRmFpbGVkIEdUVC0+VlJBTSBjb3B5ICVkXG4iLCBpKTsKIAkJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCX0KIAotCQlyID0gcmFkZW9uX2NvcHkocmRldiwgdnJhbV9hZGRyLCBndHRfYWRkciwgc2l6ZSAvIDQwOTYsIGZlbmNlKTsKKwkJciA9IHJhZGVvbl9jb3B5KHJkZXYsIHZyYW1fYWRkciwgZ3R0X2FkZHIsIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwgZmVuY2UpOwogCQlpZiAocikgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgVlJBTS0+R1RUIGNvcHkgJWRcbiIsIGkpOwogCQkJZ290byBvdXRfY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggYWNkODg5Yy4uMTM4MWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTI5NSw2ICsyOTUsMTIgQEAKIAlpZiAodW5saWtlbHkocikpIHsKIAkJcmV0dXJuIHI7CiAJfQorCisJciA9IHR0bV90dF9zZXRfcGxhY2VtZW50X2NhY2hpbmcoYm8tPnR0bSwgdG1wX21lbS5wbGFjZW1lbnQpOworCWlmICh1bmxpa2VseShyKSkgeworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KKwogCXIgPSB0dG1fdHRfYmluZChiby0+dHRtLCAmdG1wX21lbSk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC01MzAsNyArNTM2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCByYWRlb25fdHRtX3ZtX29wczsKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnR0bV92bV9vcHMgPSBOVUxMOworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdHRtX3ZtX29wcyA9IE5VTEw7CiAKIHN0YXRpYyBpbnQgcmFkZW9uX3R0bV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CkBAIC02ODksOSArNjk1LDYgQEAKIAogI2RlZmluZSBSQURFT05fREVCVUdGU19NRU1fVFlQRVMgMgogCi1zdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107Ci1zdGF0aWMgY2hhciByYWRlb25fbWVtX3R5cGVzX25hbWVzW1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU11bMzJdOwotCiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBzdGF0aWMgaW50IHJhZGVvbl9tbV9kdW1wX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKIHsKQEAgLTcxMSw5ICs3MTQsMTEgQEAKIAogc3RhdGljIGludCByYWRlb25fdHRtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKKwlzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX21lbV90eXBlc19saXN0W1JBREVPTl9ERUJVR0ZTX01FTV9UWVBFU107CisJc3RhdGljIGNoYXIgcmFkZW9uX21lbV90eXBlc19uYW1lc1tSQURFT05fREVCVUdGU19NRU1fVFlQRVNdWzMyXTsKIAl1bnNpZ25lZCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJZm9yIChpID0gMDsgaSA8IFJBREVPTl9ERUJVR0ZTX01FTV9UWVBFUzsgaSsrKSB7CiAJCWlmIChpID09IDApCiAJCQlzcHJpbnRmKHJhZGVvbl9tZW1fdHlwZXNfbmFtZXNbaV0sICJyYWRlb25fdnJhbV9tbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczEwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhOTEzYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnMxMDBkLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzEwMERfSF9fCisjZGVmaW5lIF9fUlMxMDBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCmluZGV4IGEzZmJkYWQuLmNhMDM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKQEAgLTI3LDI3ICsyNywxMiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxkcm0vZHJtUC5oPgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJyczQwMGQuaCIKIAotLyogcnM0MDAscnM0ODAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcjEwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisvKiBUaGlzIGZpbGVzIGdhdGhlciBmdW5jdGlvbnMgc3BlY2lmaWNzIHRvIDogcnM0MDAscnM0ODAgKi8KK3N0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19wY2llX2dhcnRfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczQwMCxyczQ4MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM0MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLQotLyoKLSAqIEdBUlQgZnVuY3Rpb25zLgotICovCiB2b2lkIHJzNDAwX2dhcnRfYWRqdXN0X3NpemUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogQ2hlY2sgZ2FydCBzaXplICovCkBAIC0yMzgsNjEgKzIyMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotLyoKLSAqIE1DIGZ1bmN0aW9ucy4KLSAqLwotaW50IHJzNDAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JdWludDMyX3QgdG1wOwotCWludCByOwotCi0JaWYgKHIxMDBfZGVidWdmc19yYmJtX2luaXQocmRldikpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOwotCX0KLQotCXJzNDAwX2dwdV9pbml0KHJkZXYpOwotCXJzNDAwX2dhcnRfZGlzYWJsZShyZGV2KTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uICs9IChyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiAmPSB+KHJkZXYtPm1jLmd0dF9zaXplIC0gMSk7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQlyMTAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwotCX0KLQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUkFERU9OX01DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSQURFT05fTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMihSQURFT05fTUNfRkJfTE9DQVRJT04sIHRtcCk7Ci0JdG1wID0gUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCkgfCBSQURFT05fSFBfTElOX1JEX0NBQ0hFX0RJUzsKLQlXUkVHMzIoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCB0bXAgfCBSQURFT05fSERQX1NPRlRfUkVTRVQgfCBSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwotCSh2b2lkKVJSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwpOwotCVdSRUczMihSQURFT05fSE9TVF9QQVRIX0NOVEwsIHRtcCk7Ci0JKHZvaWQpUlJFRzMyKFJBREVPTl9IT1NUX1BBVEhfQ05UTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczQwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBHbG9iYWwgR1BVIGZ1bmN0aW9ucwotICovCi12b2lkIHJzNDAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczQwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM0MDAgPyAqLwpAQCAtMzA1LDEwICsyMzUsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlyczQwMF9nYXJ0X2FkanVzdF9zaXplKHJkZXYpOwpAQCAtMzE5LDEwICsyNDUsNiBAQAogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOwogfQogCi0KLS8qCi0gKiBJbmRpcmVjdCByZWdpc3RlcnMgYWNjZXNzb3IKLSAqLwogdWludDMyX3QgcnM0MDBfbWNfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKQogewogCXVpbnQzMl90IHI7CkBAIC0zNDAsMTAgKzI2Miw2IEBACiAJV1JFRzMyKFJTNDgwX05CX01DX0lOREVYLCAweGZmKTsKIH0KIAotCi0vKgotICogRGVidWdmcyBpbmZvCi0gKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnM0MDBfZGVidWdmc19nYXJ0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDE5LDcgKzMzNyw3IEBACiB9OwogI2VuZGlmCiAKLWludCByczQwMF9kZWJ1Z2ZzX3BjaWVfZ2FydF9pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNDAwX2RlYnVnZnNfcGNpZV9nYXJ0X2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJzNDAwX2dhcnRfaW5mb19saXN0LCAxKTsKQEAgLTQyNywzICszNDUsMTkwIEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KKworc3RhdGljIGludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCXUzMiB0bXA7CisKKwkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCisJdG1wID0gR18wMDAxNUNfTUNfRkJfU1RBUlQoUlJFRzMyKFJfMDAwMTVDX05CX1RPTSkpOworCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDE1Q19NQ19GQl9TVEFSVCh0bXApIDw8IDE2OworCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKKwlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByczQwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKKworCS8qIFN0b3BzIGFsbCBtYyBjbGllbnRzICovCisJcjEwMF9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocjMwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwlXUkVHMzIoUl8wMDAxNDhfTUNfRkJfTE9DQVRJT04sCisJCVNfMDAwMTQ4X01DX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpIHwKKwkJU18wMDAxNDhfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisKKwlyMTAwX21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM0MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNDAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlyczQwMF9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCXIgPSByczQwMF9nYXJ0X2VuYWJsZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogRW5hYmxlIElSUSAqLworCXJkZXYtPmlycS5zd19pbnQgPSB0cnVlOworCXIxMDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlyMzAwX2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogc2V0dXAgTUMgYmVmb3JlIGNhbGxpbmcgcG9zdCB0YWJsZXMgKi8KKwlyczQwMF9tY19wcm9ncmFtKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJcmFkZW9uX2NvbWJpb3NfYXNpY19pbml0KHJkZXYtPmRkZXYpOworCS8qIFJlc3VtZSBjbG9jayBhZnRlciBwb3N0aW5nICovCisJcjMwMF9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiByczQwMF9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnM0MDBfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXIxMDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNDAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM0MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNDAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXIxMDBfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBjb21iaW9zIGZvciBSUzQwMC9SUzQ4MCBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyID0gcmFkZW9uX2NvbWJpb3NfaW5pdChyZGV2KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKKwl9CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCisJcnM0MDBfdnJhbV9pbmZvKHJkZXYpOworCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCisJciA9IHJzNDAwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIzMDBfc2V0X3JlZ19zYWZlKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczQwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNDAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNDAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGJhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwZC5oCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNDAwRF9IX18KKyNkZWZpbmUgX19SUzQwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDE0OF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0OAorI2RlZmluZSAgIFNfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTQ4X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDE0OF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxNDhfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTQ4X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxNUNfTkJfVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNUMKKyNkZWZpbmUgICBTXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDE1Q19NQ19GQl9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAxNUNfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMTVDX01DX0ZCX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDE1Q19NQ19GQl9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCAwZTc5MWUyNi4uNWYxMTdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtMjUsMjggKzI1LDI1IEBACiAgKiAgICAgICAgICBBbGV4IERldWNoZXIKICAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKICAqLworLyogUlM2MDAgLyBSYWRlb24gWDEyNTAvWDEyNzAgaW50ZWdyYXRlZCBHUFUKKyAqCisgKiBUaGlzIGZpbGUgZ2F0aGVyIGZ1bmN0aW9uIHNwZWNpZmljIHRvIFJTNjAwIHdoaWNoIGlzIHRoZSBJR1Agb2YKKyAqIHRoZSBYMTI1MC9YMTI3MCBmYW1pbHkgc3VwcG9ydGluZyBpbnRlbCBDUFUgKHdoaWxlIFJTNjkwL1JTNzQwCisgKiBpcyB0aGUgWDEyNTAvWDEyNzAgc3VwcG9ydGluZyBBTUQgQ1BVKS4gVGhlIGRpc3BsYXkgZW5naW5lIGFyZQorICogdGhlIGF2aXZvIG9uZSwgYmlvcyBpcyBhbiBhdG9tYmlvcywgM0QgYmxvY2sgYXJlIHRoZSBvbmUgb2YgdGhlCisgKiBSNFhYIGZhbWlseS4gVGhlIEdBUlQgaXMgZGlmZmVyZW50IGZyb20gdGhlIFJTNDAwIG9uZSBhbmQgaXMgdmVyeQorICogY2xvc2UgdG8gdGhlIG9uZSBvZiB0aGUgUjYwMCBmYW1pbHkgKFI2MDAgbGlrZWx5IGJlaW5nIGFuIGV2b2x1dGlvbgorICogb2YgdGhlIFJTNjAwIEdBUlQgYmxvY2spLgorICovCiAjaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAicnM2MDBkLmgiCiAKICNpbmNsdWRlICJyczYwMF9yZWdfc2FmZS5oIgogCi0vKiByczYwMCBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHI0MjBfcGlwZXNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci0KLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG8gOgotICogcnM2MDAKLSAqCi0gKiBTb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBtaWdodCBiZSB1c2VkIGJ5IG5ld2VyIEFTSUNzLgotICovCiB2b2lkIHJzNjAwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByczYwMF9tY193YWl0X2Zvcl9pZGxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM2MDBfZGlzYWJsZV92Z2Eoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCiAKIC8qCiAgKiBHQVJULgpAQCAtNTUsMTggKzUyLDE4IEBACiB7CiAJdWludDMyX3QgdG1wOwogCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQl0bXAgJj0gfihSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMLCB0bXApOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJdG1wICY9IENfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgJiBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgdG1wKTsKIAotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCk7Ci0JdG1wIHw9IFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ05UTCwgdG1wKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCB8PSBTXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTKDEpICYgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSgxKTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CiAKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwpOwotCXRtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIHRtcCk7Ci0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKKwl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwpOworCXRtcCAmPSBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICYgQ18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwlXUkVHMzJfTUMoUl8wMDAxMDBfTUNfUFQwX0NOVEwsIHRtcCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMKTsKIH0KIAogaW50IHJzNjAwX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTg4LDcgKzg1LDcgQEAKIAogaW50IHJzNjAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1MzIgdG1wOwogCWludCByLCBpOwogCiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKQEAgLTk4LDQ2ICs5NSw1MCBAQAogCXIgPSByYWRlb25fZ2FydF90YWJsZV92cmFtX3BpbihyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgKi8KKwl0bXAgPSBSUkVHMzIoUl8wMDAwNENfQlVTX0NOVEwpICYgQ18wMDAwNENfQlVTX01BU1RFUl9ESVM7CisJV1JFRzMyKFJfMDAwMDRDX0JVU19DTlRMLCB0bXApOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsCi0JCSAoUlM2MDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoNikgfAotCQkgIFJTNjAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKDYpKSk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLAorCQkgKFNfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJICBTXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOwogCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ0xJRU5UMF9DTlRMICsgaSwKLQkJCSAoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAotCQkJICBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKLQkJCSAgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgfAotCQkJICBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgzKSB8Ci0JCQkgIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKLQkJCSAgUlM2MDBfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoMykpKTsKKwkJV1JFRzMyX01DKFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoMSkgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX01BU0soCisJCQkJVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUykgfAorCQkJU18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUygKKwkJCQlWXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfREVGQVVMVF9QQUdFKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSgxKSB8CisJCQlTXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORygxKSB8CisJCQlTXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSgxKSk7CiAJfQogCiAJLyogU3lzdGVtIGNvbnRleHQgbWFwIHRvIEdBUlQgc3BhY2UgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDExMl9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLCByZGV2LT5tYy5ndHRfc3RhcnQpOworCVdSRUczMl9NQyhSXzAwMDExNF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAKIAkvKiBlbmFibGUgZmlyc3QgY29udGV4dCAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHRtcCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLAotCQkgKFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFIHwgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKwlXUkVHMzJfTUMoUl8wMDAxM0NfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfU1RBUlRfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0KTsKKwlXUkVHMzJfTUMoUl8wMDAxNENfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQpOworCVdSRUczMl9NQyhSXzAwMDEwMl9NQ19QVDBfQ09OVEVYVDBfQ05UTCwKKwkJCVNfMDAwMTAyX0VOQUJMRV9QQUdFX1RBQkxFKDEpIHwKKwkJCVNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoVl8wMDAxMDJfUEFHRV9UQUJMRV9GTEFUKSk7CiAJLyogZGlzYWJsZSBhbGwgb3RoZXIgY29udGV4dHMgKi8KIAlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfQ05UTCArIGksIDApOworCQlXUkVHMzJfTUMoUl8wMDAxMDJfTUNfUFQwX0NPTlRFWFQwX0NOVEwgKyBpLCAwKTsKIAl9CiAKIAkvKiBzZXR1cCB0aGUgcGFnZSB0YWJsZSAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCi0JCSByZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOworCVdSRUczMl9NQyhSXzAwMDEyQ19NQ19QVDBfQ09OVEVYVDBfRkxBVF9CQVNFX0FERFIsCisJCQlyZGV2LT5nYXJ0LnRhYmxlX2FkZHIpOworCVdSRUczMl9NQyhSXzAwMDExQ19NQ19QVDBfQ09OVEVYVDBfREVGQVVMVF9SRUFEX0FERFIsIDApOwogCiAJLyogZW5hYmxlIHBhZ2UgdGFibGVzICovCi0JdG1wID0gUlJFRzMyX01DKFJTNjAwX01DX1BUMF9DTlRMKTsKLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsICh0bXAgfCBSUzYwMF9FTkFCTEVfUFQpKTsKLQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfQ05UTDEpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSwgKHRtcCB8IFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUykpOworCXRtcCA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCk7CisJV1JFRzMyX01DKFJfMDAwMTAwX01DX1BUMF9DTlRMLCAodG1wIHwgU18wMDAxMDBfRU5BQkxFX1BUKDEpKSk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsICh0bXAgfCBTXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoMSkpKTsKIAlyczYwMF9nYXJ0X3RsYl9mbHVzaChyZGV2KTsKIAlyZGV2LT5nYXJ0LnJlYWR5ID0gdHJ1ZTsKIAlyZXR1cm4gMDsKQEAgLTE0OCwxMCArMTQ5LDkgQEAKIAl1aW50MzJfdCB0bXA7CiAKIAkvKiBGSVhNRTogZGlzYWJsZSBvdXQgb2YgZ2FydCBhY2Nlc3MgKi8KLQlXUkVHMzJfTUMoUlM2MDBfTUNfUFQwX0NOVEwsIDApOwotCXRtcCA9IFJSRUczMl9NQyhSUzYwMF9NQ19DTlRMMSk7Ci0JdG1wICY9IH5SUzYwMF9FTkFCTEVfUEFHRV9UQUJMRVM7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0NOVEwxLCB0bXApOworCVdSRUczMl9NQyhSXzAwMDEwMF9NQ19QVDBfQ05UTCwgMCk7CisJdG1wID0gUlJFRzMyX01DKFJfMDAwMDA5X01DX0NOVEwxKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDlfTUNfQ05UTDEsIHRtcCAmIENfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyk7CiAJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKSB7CiAJCXJhZGVvbl9vYmplY3Rfa3VubWFwKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqKTsKIAkJcmFkZW9uX29iamVjdF91bnBpbihyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CkBAIC0xODUsMTMyICsxODUsNjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0vKgotICogTUMuCi0gKi8KLXZvaWQgcnM2MDBfbWNfZGlzYWJsZV9jbGllbnRzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVuc2lnbmVkIHRtcDsKLQotCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMVZHQV9DT05UUk9MLCB0bXAgJiB+QVZJVk9fRFZHQV9DT05UUk9MX01PREVfRU5BQkxFKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJWR0FfQ09OVFJPTCk7Ci0JV1JFRzMyKEFWSVZPX0QyVkdBX0NPTlRST0wsIHRtcCAmIH5BVklWT19EVkdBX0NPTlRST0xfTU9ERV9FTkFCTEUpOwotCi0JdG1wID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19DT05UUk9MKTsKLQlXUkVHMzIoQVZJVk9fRDFDUlRDX0NPTlRST0wsIHRtcCAmIH5BVklWT19DUlRDX0VOKTsKLQl0bXAgPSBSUkVHMzIoQVZJVk9fRDJDUlRDX0NPTlRST0wpOwotCVdSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCwgdG1wICYgfkFWSVZPX0NSVENfRU4pOwotCi0JLyogbWFrZSBzdXJlIGFsbCBwcmV2aW91cyB3cml0ZSBnb3QgdGhyb3VnaCAqLwotCXRtcCA9IFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7Ci0KLQltZGVsYXkoMSk7Ci19Ci0KLWludCByczYwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczYwMF9ncHVfaW5pdChyZGV2KTsKLQlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQkvKiBFbmFibGUgYnVzIG1hc3RlciAqLwotCXRtcCA9IFJSRUczMihSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOwotCVdSRUczMihSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JLyogRklYTUU6IFdoYXQgZG9lcyBBR1AgbWVhbnMgZm9yIHN1Y2ggY2hpcHNldCA/ICovCi0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgMHgwRkZGRkZGRik7Ci0JLyogRklYTUU6IGFyZSB0aGlzIEFHUCByZWcgaW4gaW5kaXJlY3QgTUMgcmFuZ2UgPyAqLwotCVdSRUczMl9NQyhSUzYwMF9NQ19BR1BfQkFTRSwgMCk7Ci0JV1JFRzMyX01DKFJTNjAwX01DX0FHUF9CQVNFXzIsIDApOwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JdG1wID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JdG1wID0gUkVHX1NFVChSUzYwMF9NQ19GQl9UT1AsIHRtcCA+PiAxNik7Ci0JdG1wIHw9IFJFR19TRVQoUlM2MDBfTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMl9NQyhSUzYwMF9NQ19GQl9MT0NBVElPTiwgdG1wKTsKLQlXUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByczYwMF9tY19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotfQotCi0KLS8qCi0gKiBJbnRlcnJ1cHRzCi0gKi8KIGludCByczYwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVpbnQzMl90IHRtcCA9IDA7CiAJdWludDMyX3QgbW9kZV9pbnQgPSAwOwogCiAJaWYgKHJkZXYtPmlycS5zd19pbnQpIHsKLQkJdG1wIHw9IFJBREVPTl9TV19JTlRfRU5BQkxFOworCQl0bXAgfD0gU18wMDAwNDBfU1dfSU5UX0VOKDEpOwogCX0KIAlpZiAocmRldi0+aXJxLmNydGNfdmJsYW5rX2ludFswXSkgewotCQltb2RlX2ludCB8PSBBVklWT19EMU1PREVfSU5UX01BU0s7CisJCW1vZGVfaW50IHw9IFNfMDA2NTQwX0QxTU9ERV9WQkxBTktfSU5UX01BU0soMSk7CiAJfQogCWlmIChyZGV2LT5pcnEuY3J0Y192YmxhbmtfaW50WzFdKSB7Ci0JCW1vZGVfaW50IHw9IEFWSVZPX0QyTU9ERV9JTlRfTUFTSzsKKwkJbW9kZV9pbnQgfD0gU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19JTlRfTUFTSygxKTsKIAl9Ci0JV1JFRzMyKFJBREVPTl9HRU5fSU5UX0NOVEwsIHRtcCk7Ci0JV1JFRzMyKEFWSVZPX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOworCVdSRUczMihSXzAwMDA0MF9HRU5fSU5UX0NOVEwsIHRtcCk7CisJV1JFRzMyKFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSywgbW9kZV9pbnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJzNjAwX2lycV9hY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiAqcjUwMF9kaXNwX2ludCkKIHsKLQl1aW50MzJfdCBpcnFzID0gUlJFRzMyKFJBREVPTl9HRU5fSU5UX1NUQVRVUyk7Ci0JdWludDMyX3QgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CisJdWludDMyX3QgaXJxcyA9IFJSRUczMihSXzAwMDA0NF9HRU5fSU5UX1NUQVRVUyk7CisJdWludDMyX3QgaXJxX21hc2sgPSB+Q18wMDAwNDRfU1dfSU5UOwogCi0JaWYgKGlycXMgJiBBVklWT19ESVNQTEFZX0lOVF9TVEFUVVMpIHsKLQkJKnI1MDBfZGlzcF9pbnQgPSBSUkVHMzIoQVZJVk9fRElTUF9JTlRFUlJVUFRfU1RBVFVTKTsKLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDFfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwlpZiAoR18wMDAwNDRfRElTUExBWV9JTlRfU1RBVChpcnFzKSkgeworCQkqcjUwMF9kaXNwX2ludCA9IFJSRUczMihSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMpOworCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCgqcjUwMF9kaXNwX2ludCkpIHsKKwkJCVdSRUczMihSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUywKKwkJCQlTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSygxKSk7CiAJCX0KLQkJaWYgKCpyNTAwX2Rpc3BfaW50ICYgQVZJVk9fRDJfVkJMQU5LX0lOVEVSUlVQVCkgewotCQkJV1JFRzMyKEFWSVZPX0QyTU9ERV9WQkxBTktfU1RBVFVTLCBBVklWT19WQkxBTktfQUNLKTsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQoKnI1MDBfZGlzcF9pbnQpKSB7CisJCQlXUkVHMzIoUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMsCisJCQkJU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJKnI1MDBfZGlzcF9pbnQgPSAwOwogCX0KIAogCWlmIChpcnFzKSB7Ci0JCVdSRUczMihSQURFT05fR0VOX0lOVF9TVEFUVVMsIGlycXMpOworCQlXUkVHMzIoUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMsIGlycXMpOwogCX0KIAlyZXR1cm4gaXJxcyAmIGlycV9tYXNrOwogfQogCit2b2lkIHJzNjAwX2lycV9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisKKwlXUkVHMzIoUl8wMDAwNDBfR0VOX0lOVF9DTlRMLCAwKTsKKwlXUkVHMzIoUl8wMDY1NDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKKwkvKiBXYWl0IGFuZCBhY2tub3dsZWRnZSBpcnEgKi8KKwltZGVsYXkoMSk7CisJcnM2MDBfaXJxX2FjayhyZGV2LCAmdG1wKTsKK30KKwogaW50IHJzNjAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHN0YXR1czsKKwl1aW50MzJfdCBzdGF0dXMsIG1zaV9yZWFybTsKIAl1aW50MzJfdCByNTAwX2Rpc3BfaW50OwogCiAJc3RhdHVzID0gcnM2MDBfaXJxX2FjayhyZGV2LCAmcjUwMF9kaXNwX2ludCk7CkBAIC0zMTksODUgKzI1MSw2NSBAQAogCX0KIAl3aGlsZSAoc3RhdHVzIHx8IHI1MDBfZGlzcF9pbnQpIHsKIAkJLyogU1cgaW50ZXJydXB0ICovCi0JCWlmIChzdGF0dXMgJiBSQURFT05fU1dfSU5UX1RFU1QpIHsKKwkJaWYgKEdfMDAwMDQwX1NXX0lOVF9FTihzdGF0dXMpKQogCQkJcmFkZW9uX2ZlbmNlX3Byb2Nlc3MocmRldik7Ci0JCX0KIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QxX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKLQkJfQotCQlpZiAocjUwMF9kaXNwX2ludCAmIEFWSVZPX0QyX1ZCTEFOS19JTlRFUlJVUFQpIHsKKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpCiAJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAxKTsKLQkJfQogCQlzdGF0dXMgPSByczYwMF9pcnFfYWNrKHJkZXYsICZyNTAwX2Rpc3BfaW50KTsKIAl9CisJaWYgKHJkZXYtPm1zaV9lbmFibGVkKSB7CisJCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJCWNhc2UgQ0hJUF9SUzYwMDoKKwkJY2FzZSBDSElQX1JTNjkwOgorCQljYXNlIENISVBfUlM3NDA6CisJCQltc2lfcmVhcm0gPSBSUkVHMzIoUkFERU9OX0JVU19DTlRMKSAmIH5SUzYwMF9NU0lfUkVBUk07CisJCQlXUkVHMzIoUkFERU9OX0JVU19DTlRMLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9CVVNfQ05UTCwgbXNpX3JlYXJtIHwgUlM2MDBfTVNJX1JFQVJNKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbXNpX3JlYXJtID0gUlJFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4pICYgflJWMzcwX01TSV9SRUFSTV9FTjsKKwkJCVdSRUczMihSQURFT05fTVNJX1JFQVJNX0VOLCBtc2lfcmVhcm0pOworCQkJV1JFRzMyKFJBREVPTl9NU0lfUkVBUk1fRU4sIG1zaV9yZWFybSB8IFJWMzcwX01TSV9SRUFSTV9FTik7CisJCQlicmVhazsKKwkJfQorCX0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHUzMiByczYwMF9nZXRfdmJsYW5rX2NvdW50ZXIoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBjcnRjKQogewogCWlmIChjcnRjID09IDApCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDFDUlRDX0ZSQU1FX0NPVU5UKTsKKwkJcmV0dXJuIFJSRUczMihSXzAwNjBBNF9EMUNSVENfU1RBVFVTX0ZSQU1FX0NPVU5UKTsKIAllbHNlCi0JCXJldHVybiBSUkVHMzIoQVZJVk9fRDJDUlRDX0ZSQU1FX0NPVU5UKTsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQl1bnNpZ25lZCB0bXA7Ci0KLQlXUkVHMzIoMHgzMzAsIDApOwotCVdSRUczMigweDMzOCwgMCk7Ci0JdG1wID0gUlJFRzMyKDB4MzAwKTsKLQl0bXAgJj0gfigzIDw8IDE2KTsKLQlXUkVHMzIoMHgzMDAsIHRtcCk7Ci0JV1JFRzMyKDB4MzA4LCAoMSA8PCA4KSk7Ci0JV1JFRzMyKDB4MzEwLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKLQlXUkVHMzIoMHg1OTQsIDApOworCQlyZXR1cm4gUlJFRzMyKFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQpOwogfQogCiBpbnQgcnM2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwotCXVpbnQzMl90IHRtcDsKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewotCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzJfTUMoUlM2MDBfTUNfU1RBVFVTKTsKLQkJaWYgKHRtcCAmIFJTNjAwX01DX1NUQVRVU19JRExFKSB7CisJCWlmIChHXzAwMDAwMF9NQ19JRExFKFJSRUczMl9NQyhSXzAwMDAwMF9NQ19TVEFUVVMpKSkKIAkJCXJldHVybiAwOwotCQl9Ci0JCURSTV9VREVMQVkoMSk7CisJCXVkZWxheSgxKTsKIAl9CiAJcmV0dXJuIC0xOwogfQogCi12b2lkIHJzNjAwX2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogdm9pZCByczYwMF9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogSERQIHNhbWUgcGxhY2Ugb24gcnM2MDAgPyAqLwogCXIxMDBfaGRwX3Jlc2V0KHJkZXYpOwotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOwogCS8qIEZJWE1FOiBpcyB0aGlzIGNvcnJlY3QgPyAqLwogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9CisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAkvKiBGSVhNRTogdG8gZG8gb3IgaXMgdGhlc2UgdmFsdWVzIHNhbmUgPyAqLwpAQCAtNDEwLDMxICszMjIsMjA4IEBACiAJLyogRklYTUU6IGltcGxlbWVudCwgc2hvdWxkIHRoaXMgYmUgbGlrZSByczY5MCA/ICovCiB9CiAKLQotLyoKLSAqIEluZGlyZWN0IHJlZ2lzdGVycyBhY2Nlc3NvcgotICovCiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCiB7Ci0JdWludDMyX3QgcjsKLQotCVdSRUczMihSUzYwMF9NQ19JTkRFWCwKLQkgICAgICAgKChyZWcgJiBSUzYwMF9NQ19BRERSX01BU0spIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCkpOwotCXIgPSBSUkVHMzIoUlM2MDBfTUNfREFUQSk7Ci0JcmV0dXJuIHI7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkpOworCXJldHVybiBSUkVHMzIoUl8wMDAwNzRfTUNfSU5EX0RBVEEpOwogfQogCiB2b2lkIHJzNjAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2MDBfTUNfSU5ERVgsCi0JCVJTNjAwX01DX0lORF9XUl9FTiB8IFJTNjAwX01DX0lORF9DSVRGX0FSQjAgfAotCQkoKHJlZykgJiBSUzYwMF9NQ19BRERSX01BU0spKTsKLQlXUkVHMzIoUlM2MDBfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDcwX01DX0lORF9JTkRFWCwgU18wMDAwNzBfTUNfSU5EX0FERFIocmVnKSB8CisJCVNfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoMSkgfCBTXzAwMDA3MF9NQ19JTkRfV1JfRU4oMSkpOworCVdSRUczMihSXzAwMDA3NF9NQ19JTkRfREFUQSwgdik7Cit9CisKK3ZvaWQgcnM2MDBfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBSQkJNICFcbiIpOworfQorCit2b2lkIHJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibSA9IHJzNjAwX3JlZ19zYWZlX2JtOworCXJkZXYtPmNvbmZpZy5yMzAwLnJlZ19zYWZlX2JtX3NpemUgPSBBUlJBWV9TSVpFKHJzNjAwX3JlZ19zYWZlX2JtKTsKK30KKworc3RhdGljIHZvaWQgcnM2MDBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOworCisJLyogU3RvcHMgYWxsIG1jIGNsaWVudHMgKi8KKwlydjUxNV9tY19zdG9wKHJkZXYsICZzYXZlKTsKKworCS8qIFdhaXQgZm9yIG1jIGlkbGUgKi8KKwlpZiAocnM2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBNQyBpZGxlIHRpbWVvdXQgYmVmb3JlIHVwZGF0aW5nIE1DLlxuIik7CisKKwkvKiBGSVhNRTogV2hhdCBkb2VzIEFHUCBtZWFucyBmb3Igc3VjaCBjaGlwc2V0ID8gKi8KKwlXUkVHMzJfTUMoUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OLCAweDBGRkZGRkZGKTsKKwlXUkVHMzJfTUMoUl8wMDAwMDZfQUdQX0JBU0UsIDApOworCVdSRUczMl9NQyhSXzAwMDAwN19BR1BfQkFTRV8yLCAwKTsKKwkvKiBQcm9ncmFtIE1DICovCisJV1JFRzMyX01DKFJfMDAwMDA0X01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDRfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDRfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2MDBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjAwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2MDBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM2MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczYwMF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczYwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjAwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczYwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM2MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjAwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2MDBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM2MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKIH0KIAogaW50IHJzNjAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSByczYwMF9yZWdfc2FmZV9ibTsKLQlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyczYwMF9yZWdfc2FmZV9ibSk7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJTNjAwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJzNjAwX3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJzNjAwX2dhcnRfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJcnM2MDBfc2V0X3NhZmVfcmVnaXN0ZXJzKHJkZXYpOworCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSB0cnVlOworCXIgPSByczYwMF9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCS8qIFNvbWV0aGluZ3Mgd2FudCB3cm9udCB3aXRoIHRoZSBhY2NlbCBpbml0IHN0b3AgYWNjZWwgKi8KKwkJZGV2X2VycihyZGV2LT5kZXYsICJEaXNhYmxpbmcgR1BVIGFjY2VsZXJhdGlvblxuIik7CisJCXJzNjAwX3N1c3BlbmQocmRldik7CisJCXIxMDBfY3BfZmluaShyZGV2KTsKKwkJcjEwMF93Yl9maW5pKHJkZXYpOworCQlyMTAwX2liX2ZpbmkocmRldik7CisJCXJzNjAwX2dhcnRfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMzA4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwZC5oCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JTNjAwRF9IX18KKyNkZWZpbmUgX19SUzYwMERfSF9fCisKKy8qIFJlZ2lzdGVycyAqLworI2RlZmluZSBSXzAwMDA0MF9HRU5fSU5UX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MAorI2RlZmluZSAgIFNfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RJU1BMQVlfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDBfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgwX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMF9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNikKKyNkZWZpbmUgICBHXzAwMDA0MF9DUlRDMl9WU1lOQyh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0MF9DUlRDMl9WU1lOQyAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkJGCisjZGVmaW5lICAgU18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMDAwNDBfU05BUFNIT1QyKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDBfU05BUFNIT1QyICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDQwX0NSVEMyX1ZCTEFOSyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0NSVEMyX1ZCTEFOSyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDA0MF9GUDJfREVURUNUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwNDBfRlAyX0RFVEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0ZQMl9ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WU1lOQ19ESUZGX09WRVJfTElNSVQoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwNDBfVlNZTkNfRElGRl9PVkVSX0xJTUlUKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZTWU5DX0RJRkZfT1ZFUl9MSU1JVCAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDFfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgxX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMV9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDJfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgyX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIMl9JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9ETUFfVklQSDNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDBfRE1BX1ZJUEgzX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RNQV9WSVBIM19JTlRfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9JMkNfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDBfSTJDX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0kyQ19JTlRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDBfR1VJX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSVBIX0lOVF9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDBfVklQSF9JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJUEhfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9TV19JTlRfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDBfU1dfSU5UX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1NXX0lOVF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HRVlTRVJWSUxMRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDBfR0VZU0VSVklMTEUoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dFWVNFUlZJTExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9IRENQX0FVVEhPUklaRURfSU5UKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwNDBfSERDUF9BVVRIT1JJWkVEX0lOVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0hEQ1BfQVVUSE9SSVpFRF9JTlQgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9EVklfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwNDBfRFZJX0kyQ19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0RWSV9JMkNfSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9HVUlETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDBfR1VJRE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX0dVSURNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0MF9WSURETUEoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDBfVklERE1BKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQwX1ZJRERNQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNDRfR0VOX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDQKKyNkZWZpbmUgICBTXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA0NF9ESVNQTEFZX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwNDRfVkdBX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwNDRfVkdBX0lOVF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NBUDBfSU5UX0FDVElWRSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDBfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgwX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMF9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDFfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgxX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMV9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDJfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgyX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIMl9JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9ETUFfVklQSDNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwNDRfRE1BX1ZJUEgzX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0RNQV9WSVBIM19JTlQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9CRV9GQVVMVF9TVEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPQkVfRkFVTFRfU1RBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST0JFX0ZBVUxUX1NUQVQgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JMkNfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwNDRfSTJDX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0kyQ19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TQ1JBVENIX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwNDRfU0NSQVRDSF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NDUkFUQ0hfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlfSURMRV9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwNDRfR1VJX0lETEVfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSV9JRExFX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9BVElfT1ZFUkRSSVZFX0lOVF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNDRfQVRJX09WRVJEUklWRV9JTlRfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0FUSV9PVkVSRFJJVkVfSU5UX1NUQVQgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9NQ19QUk9URUNUSU9OX0ZBVUxUX1NUQVQoeCkgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwNDRfTUNfUFJPVEVDVElPTl9GQVVMVF9TVEFUKHgpICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X01DX1BST1RFQ1RJT05fRkFVTFRfU1RBVCAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9SQkJNX1JFQURfSU5UX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwNDRfUkJCTV9SRUFEX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1JCQk1fUkVBRF9JTlRfU1RBVCAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9DQl9DT05URVhUX1NXSVRDSF9TVEFUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwNDRfQ0JfQ09OVEVYVF9TV0lUQ0hfU1RBVCh4KSAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0NCX0NPTlRFWFRfU1dJVENIX1NUQVQgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSVBIX0lOVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwNDRfVklQSF9JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJUEhfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9TV19JTlRfU0VUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwNDRfU1dfSU5UX1NFVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1NXX0lOVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9JRENUX0lOVF9TVEFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwNDRfSURDVF9JTlRfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0lEQ1RfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9HVUlETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwNDRfR1VJRE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X0dVSURNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDA0NF9WSURETUFfU1RBVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwNDRfVklERE1BX1NUQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDQ0X1ZJRERNQV9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDAwNENfQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNEMKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTUFTVEVSX0RJUyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01BU1RFUl9ESVMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NQVNURVJfRElTICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDA0Q19CVVNfTVNJX1JFQVJNKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwNENfQlVTX01TSV9SRUFSTSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDRDX0JVU19NU0lfUkVBUk0gICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgUl8wMDAwNzBfTUNfSU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzAKKyNkZWZpbmUgICBTXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDA3MF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18wICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMih4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzIoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18yICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1NFUV9SQlNfMyh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9TRVFfUkJTXzMoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfU0VRX1JCU18zICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0FJQ19SQlMoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9BSUNfUkJTKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMCh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjAoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIwICAgICAgICAgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX0NJVEZfQVJCMSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9DSVRGX0FSQjEoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfQ0lURl9BUkIxICAgICAgICAgICAgICAgICAgICAweEZGQkZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1dSX0VOKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIzKQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAweEZGN0ZGRkZGCisjZGVmaW5lICAgU18wMDAwNzBfTUNfSU5EX1JEX0lOVih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDcwX01DX0lORF9SRF9JTlYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA3MF9NQ19JTkRfUkRfSU5WICAgICAgICAgICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMDc0X01DX0lORF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDc0CisjZGVmaW5lICAgU18wMDAwNzRfTUNfSU5EX0RBVEEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc0X01DX0lORF9EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDA3NF9NQ19JTkRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDdDMF9DUF9TVEFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDdDMAorI2RlZmluZSAgIFNfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwN0MwX01SVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01SVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDdDMF9NV1VfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9NV1VfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDA3QzBfUlNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUlNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwN0MwX1JDSVVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1JDSVVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDExKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDExKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZICAgICAgICAgICAgICAgICAgICAweEZGRkZGN0ZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSAgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEzKQorI2RlZmluZSAgIEdfMDAwN0MwX0NTSV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0lfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZERkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE0KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkZCRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1kgICAgICAgICAgICAgICAgICAweEZGRkY3RkZGCisjZGVmaW5lICAgU18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwN0MwX0dVSURNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9HVUlETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwN0MwX1ZJRERNQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9WSURETUFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDAwN0MwX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DTURTVFJNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDAwN0MwX0NQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9DUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDAwRTQwX1JCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRTQwCisjZGVmaW5lICAgU18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwRTQwX0NNREZJRk9fQVZBSUwoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RikKKyNkZWZpbmUgICBDXzAwMEU0MF9DTURGSUZPX0FWQUlMICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjgwCisjZGVmaW5lICAgU18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwRTQwX0NQUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfT05fUkJCICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDBFNDBfSElSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0hJUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZSUV9JTl9SVEJVRih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGUlFfSU5fUlRCVUYgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDBFNDBfQ0ZfUElQRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NGX1BJUEVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDBFNDBfRU5HX0VWX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0VOR19FVl9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDBFNDBfRTJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0UyX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDBFNDBfUkIyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDBFNDBfUkIzRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JCM0RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDBFNDBfVkFQX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1ZBUF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDBFNDBfUkVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1JFX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDBFNDBfVEFNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RBTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDBFNDBfVERNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RETV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDBFNDBfUEJfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1BCX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDBFNDBfVElNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX1RJTV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDBFNDBfR0FfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dBX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDBFNDBfQ0JBMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0NCQTJEX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDBFNDBfR1VJX0FDVElWRSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwRTQwX0dVSV9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDYwQTRfRDFDUlRDX1NUQVRVU19GUkFNRV9DT1VOVCAgICAgICAgICAgMHgwMDYwQTQKKyNkZWZpbmUgICBTXzAwNjBBNF9EMUNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEE0X0QxQ1JUQ19GUkFNRV9DT1VOVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkYpCisjZGVmaW5lICAgQ18wMDYwQTRfRDFDUlRDX0ZSQU1FX0NPVU5UICAgICAgICAgICAgICAgICAgMHhGRjAwMDAwMAorI2RlZmluZSBSXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVRVUyAgICAgICAgICAgICAgICAweDAwNjUzNAorI2RlZmluZSAgIFNfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTM0X0QxTU9ERV9WQkxBTktfT0NDVVJSRUQgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0FDSyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19TVEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX1NUQVQgICAgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1MzRfRDFNT0RFX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2NTM0X0QxTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUzNF9EMU1PREVfVkJMQU5LX0lOVEVSUlVQVCAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lIFJfMDA2NTQwX0R4TU9ERV9JTlRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2NTQwCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDBfRDFNT0RFX1ZCTEFOS19JTlRfTUFTSyAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTQwX0QxTU9ERV9WTElORV9JTlRfTUFTSyAgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLKHgpICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0lOVF9NQVNLICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZMSU5FX0lOVF9NQVNLKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEyKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WTElORV9JTlRfTUFTSyh4KSAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkxJTkVfSU5UX01BU0sgICAgICAgICAgICAgICAweEZGRkZFRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDFNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMwKQorI2RlZmluZSAgIEdfMDA2NTQwX0QxTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMU1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweEJGRkZGRkZGCisjZGVmaW5lICAgU18wMDY1NDBfRDJNT0RFX1ZCTEFOS19DUF9TRUwoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMxKQorI2RlZmluZSAgIEdfMDA2NTQwX0QyTU9ERV9WQkxBTktfQ1BfU0VMKHgpICAgICAgICAgICAgICgoKHgpID4+IDMxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjU0MF9EMk1PREVfVkJMQU5LX0NQX1NFTCAgICAgICAgICAgICAgICAweDdGRkZGRkZGCisjZGVmaW5lIFJfMDA2OEE0X0QyQ1JUQ19TVEFUVVNfRlJBTUVfQ09VTlQgICAgICAgICAgIDB4MDA2OEE0CisjZGVmaW5lICAgU18wMDY4QTRfRDJDUlRDX0ZSQU1FX0NPVU5UKHgpICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhBNF9EMkNSVENfRlJBTUVfQ09VTlQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGKQorI2RlZmluZSAgIENfMDA2OEE0X0QyQ1JUQ19GUkFNRV9DT1VOVCAgICAgICAgICAgICAgICAgIDB4RkYwMDAwMDAKKyNkZWZpbmUgUl8wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUVVMgICAgICAgICAgICAgICAgMHgwMDZEMzQKKyNkZWZpbmUgICBTXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQzNF9EMk1PREVfVkJMQU5LX09DQ1VSUkVEICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0soeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19BQ0sgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfU1RBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX1NUQVQoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19TVEFUICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDA2RDM0X0QyTU9ERV9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQzNF9EMk1PREVfVkJMQU5LX0lOVEVSUlVQVCh4KSAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZEMzRfRDJNT0RFX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSBSXzAwN0VEQ19ESVNQX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwN0VEQworI2RlZmluZSAgIFNfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA0KQorI2RlZmluZSAgIEdfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQoeCkgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgxKQorI2RlZmluZSAgIENfMDA3RURDX0xCX0QxX1ZCTEFOS19JTlRFUlJVUFQgICAgICAgICAgICAgIDB4RkZGRkZGRUYKKyNkZWZpbmUgICBTXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNSkKKyNkZWZpbmUgICBHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHgpICAgICAgICAgICAoKCh4KSA+PiA1KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgICAweEZGRkZGRkRGCisKKworLyogTUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMDAwX01DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwCisjZGVmaW5lICAgU18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDBfTUNfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDBfTUNfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSBSXzAwMDAwNF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNAorI2RlZmluZSAgIFNfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA0X01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwNF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDRfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDA0X01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDVfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDUKKyNkZWZpbmUgICBTXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwNV9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDVfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDA1X01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNV9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDA2X0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA2CisjZGVmaW5lICAgU18wMDAwMDZfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDA2X0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwNl9BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA3X0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA3CisjZGVmaW5lICAgU18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDdfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDdfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorI2RlZmluZSBSXzAwMDAwOV9NQ19DTlRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwOQorI2RlZmluZSAgIFNfMDAwMDA5X0VOQUJMRV9QQUdFX1RBQkxFUyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMDAwOV9FTkFCTEVfUEFHRV9UQUJMRVMoeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMDlfRU5BQkxFX1BBR0VfVEFCTEVTICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorLyogRklYTUUgZG9uJ3Qga25vdyB0aGUgdmFyaW91cyBmaWVsZCBzaXplIG5lZWQgZmVlZGJhY2sgZnJvbSBBTUQgKi8KKyNkZWZpbmUgUl8wMDAxMDBfTUNfUFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwMF9FTkFCTEVfUFQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9FTkFCTEVfUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX0NBQ0hFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDE1KQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDE1KSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSAgICAgICAgICAgICAweEZGRkM3RkZGCisjZGVmaW5lICAgU18wMDAxMDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMTAwX0VGRkVDVElWRV9MMl9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4NykKKyNkZWZpbmUgICBDXzAwMDEwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSAgICAgICAgICAgICAweEZGMUZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9BTExfTDFfVExCUyh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI4KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMoeCkgICAgICAgICAgICgoKHgpID4+IDI4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTICAgICAgICAgICAgICAweEVGRkZGRkZGCisjZGVmaW5lICAgU18wMDAxMDBfSU5WQUxJREFURV9MMl9DQUNIRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI5KQorI2RlZmluZSAgIEdfMDAwMTAwX0lOVkFMSURBVEVfTDJfQ0FDSEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDI5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDEwMF9JTlZBTElEQVRFX0wyX0NBQ0hFICAgICAgICAgICAgICAgICAweERGRkZGRkZGCisjZGVmaW5lIFJfMDAwMTAyX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAgIDB4MDAwMTAyCisjZGVmaW5lICAgU18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxMDJfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEgoeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMTAyX1BBR0VfVEFCTEVfREVQVEggICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjkKKyNkZWZpbmUgICBWXzAwMDEwMl9QQUdFX1RBQkxFX0ZMQVQgICAgICAgICAgICAgICAgICAgICAwCisvKiBSNjAwIGRvY3VtZW50YXRpb24gc3VnZ2VzdCB0aGF0IHRoaXMgc2hvdWxkIGJlIGEgbnVtYmVyIG9mIHBhZ2VzICovCisjZGVmaW5lIFJfMDAwMTEyX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgIDB4MDAwMTEyCisjZGVmaW5lIFJfMDAwMTE0X01DX1BUMF9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSICAgIDB4MDAwMTE0CisjZGVmaW5lIFJfMDAwMTFDX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiAgIDB4MDAwMTFDCisjZGVmaW5lIFJfMDAwMTJDX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAgIDB4MDAwMTJDCisjZGVmaW5lIFJfMDAwMTNDX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIgICAgIDB4MDAwMTNDCisjZGVmaW5lIFJfMDAwMTRDX01DX1BUMF9DT05URVhUMF9GTEFUX0VORF9BRERSICAgICAgIDB4MDAwMTRDCisjZGVmaW5lIFJfMDAwMTZDX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAgIDB4MDAwMTZDCisjZGVmaW5lICAgU18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUoeCkgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMTZDX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyh4KSAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAweEZGRkZGQ0ZGCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgIDEKKyNkZWZpbmUgICBWXzAwMDE2Q19TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDAxNkNfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgMworI2RlZmluZSAgIFNfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1MoeCkgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTKHgpICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTUyAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9QQVNTVEhST1VHSCAgMAorI2RlZmluZSAgIFZfMDAwMTZDX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9ERUZBVUxUX1BBR0UgMQorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX0NBQ0hFX1NJWkUgICAgICAgICAgICAgMHhGRkZGQzdGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HKHgpICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMDE2Q19FTkFCTEVfRlJBR01FTlRfUFJPQ0VTU0lORyh4KSAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMDE2Q19FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAxNkNfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUgICAgICAgICAgICAgMHhGRkZDN0ZGRgorI2RlZmluZSAgIFNfMDAwMTZDX0lOVkFMSURBVEVfTDFfVExCKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDE2Q19JTlZBTElEQVRFX0wxX1RMQih4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAxNkNfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwZjU4NWNhLi4yNzU0NzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC0yNiwxMDYgKzI2LDI5IEBACiAgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCiAgKi8KICNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotI2luY2x1ZGUgInJzNjkwci5oIgogI2luY2x1ZGUgImF0b20uaCIKLSNpbmNsdWRlICJhdG9tLWJpdHMuaCIKKyNpbmNsdWRlICJyczY5MGQuaCIKIAotLyogcnM2OTAscnM3NDAgZGVwZW5kcyBvbiA6ICovCi12b2lkIHIxMDBfaGRwX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWludCByMzAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczQwMF9nYXJ0X2Rpc2FibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNDAwX2dhcnRfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLXZvaWQgcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci12b2lkIHJzNjAwX2Rpc2FibGVfdmdhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLQotLyogVGhpcyBmaWxlcyBnYXRoZXIgZnVuY3Rpb25zIHNwZWNpZmljcyB0byA6Ci0gKiByczY5MCxyczc0MAotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KLXZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotCi0KLS8qCi0gKiBNQyBmdW5jdGlvbnMuCi0gKi8KLWludCByczY5MF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXVpbnQzMl90IHRtcDsKLQlpbnQgcjsKLQotCWlmIChyMTAwX2RlYnVnZnNfcmJibV9pbml0KHJkZXYpKSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlYnVnZnMgZmlsZSBmb3IgUkJCTSAhXG4iKTsKLQl9Ci0KLQlyczY5MF9ncHVfaW5pdChyZGV2KTsKLQlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiArPSAocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gJj0gfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikgewotCQlyZXR1cm4gcjsKLQl9Ci0KLQkvKiBQcm9ncmFtIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyczYwMF9tY19kaXNhYmxlX2NsaWVudHMocmRldik7Ci0JaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgTUMgaWRsZSB3aGlsZSAiCi0JCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLlxuIik7Ci0JfQotCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUlM2OTBfTUNfRkJfVE9QLCB0bXAgPj4gMTYpOwotCXRtcCB8PSBSRUdfU0VUKFJTNjkwX01DX0ZCX1NUQVJULCByZGV2LT5tYy52cmFtX2xvY2F0aW9uID4+IDE2KTsKLQlXUkVHMzJfTUMoUlM2OTBfTUNDRkdfRkJfTE9DQVRJT04sIHRtcCk7Ci0JLyogRklYTUU6IERvZXMgdGhpcyByZWcgZXhpc3Qgb24gUlM0ODAsUlM3NDAgPyAqLwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JV1JFRzMyKFJTNjkwX0hEUF9GQl9MT0NBVElPTiwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcnM2OTBfbWNfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLX0KLQotCi0vKgotICogR2xvYmFsIEdQVSBmdW5jdGlvbnMKLSAqLwotaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitzdGF0aWMgaW50IHJzNjkwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKIAl1aW50MzJfdCB0bXA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJLyogcmVhZCBNQ19TVEFUVVMgKi8KLQkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DX1NUQVRVUyk7Ci0JCWlmICh0bXAgJiBSUzY5MF9NQ19TVEFUVVNfSURMRSkgeworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwOTBfTUNfU1lTVEVNX1NUQVRVUyk7CisJCWlmIChHXzAwMDA5MF9NQ19TWVNURU1fSURMRSh0bXApKQogCQkJcmV0dXJuIDA7Ci0JCX0KLQkJRFJNX1VERUxBWSgxKTsKKwkJdWRlbGF5KDEpOwogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXZvaWQgcnM2OTBfZXJyYXRhKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCXJkZXYtPnBsbF9lcnJhdGEgPSAwOwotfQotCi12b2lkIHJzNjkwX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQorc3RhdGljIHZvaWQgcnM2OTBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogRklYTUU6IEhEUCBzYW1lIHBsYWNlIG9uIHJzNjkwID8gKi8KIAlyMTAwX2hkcF9yZXNldChyZGV2KTsKLQlyczYwMF9kaXNhYmxlX3ZnYShyZGV2KTsKIAkvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0ID8gKi8KIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJaWYgKHJzNjkwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKQEAgLTEzNCwxMCArNTcsNiBAQAogCX0KIH0KIAotCi0vKgotICogVlJBTSBpbmZvLgotICovCiB2b2lkIHJzNjkwX3BtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoREFUQSwgSW50ZWdyYXRlZFN5c3RlbUluZm8pOwpAQCAtMjUxLDM5ICsxNzAsMzkgQEAKIAkvKgogCSAqIExpbmUgQnVmZmVyIFNldHVwCiAJICogVGhlcmUgaXMgYSBzaW5nbGUgbGluZSBidWZmZXIgc2hhcmVkIGJ5IGJvdGggZGlzcGxheSBjb250cm9sbGVycy4KLQkgKiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KKwkgKiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgaG93IHRoYXQgbGluZSBidWZmZXIgaXMgc2hhcmVkIGJldHdlZW4KIAkgKiB0aGUgZGlzcGxheSBjb250cm9sbGVycy4gIFRoZSBwYXJpdGlvbmluZyBjYW4gZWl0aGVyIGJlIGRvbmUKIAkgKiBtYW51YWxseSBvciB2aWEgb25lIG9mIGZvdXIgcHJlc2V0IGFsbG9jYXRpb25zIHNwZWNpZmllZCBpbiBiaXRzIDE6MDoKIAkgKiAgMCAtIGxpbmUgYnVmZmVyIGlzIGRpdmlkZWQgaW4gaGFsZiBhbmQgc2hhcmVkIGJldHdlZW4gY3J0YwogCSAqICAxIC0gRDEgZ2V0cyAzLzQgb2YgdGhlIGxpbmUgYnVmZmVyLCBEMiBnZXRzIDEvNAogCSAqICAyIC0gRDEgZ2V0cyB0aGUgd2hvbGUgYnVmZmVyCiAJICogIDMgLSBEMSBnZXRzIDEvNCBvZiB0aGUgbGluZSBidWZmZXIsIEQyIGdldHMgMy80Ci0JICogU2V0dGluZyBiaXQgMiBvZiBEQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCisJICogU2V0dGluZyBiaXQgMiBvZiBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgY29udHJvbHMgc3dpdGNoZXMgdG8gbWFudWFsCiAJICogYWxsb2NhdGlvbiBtb2RlLiBJbiBtYW51YWwgYWxsb2NhdGlvbiBtb2RlLCBEMSBhbHdheXMgc3RhcnRzIGF0IDAsCiAJICogRDEgZW5kLzIgaXMgc3BlY2lmaWVkIGluIGJpdHMgMTQ6NDsgRDIgYWxsb2NhdGlvbiBmb2xsb3dzIEQxLgogCSAqLwotCXRtcCA9IFJSRUczMihEQ19MQl9NRU1PUllfU1BMSVQpICYgfkRDX0xCX01FTU9SWV9TUExJVF9NQVNLOwotCXRtcCAmPSB+RENfTEJfTUVNT1JZX1NQTElUX1NISUZUX01PREU7CisJdG1wID0gUlJFRzMyKFJfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCkgJiBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQ7CisJdG1wICY9IH5DXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERTsKIAkvKiBhdXRvICovCiAJaWYgKG1vZGUxICYmIG1vZGUyKSB7CiAJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiBtb2RlMi0+aGRpc3BsYXkpIHsKIAkJCWlmIChtb2RlMS0+aGRpc3BsYXkgPiAyNTYwKQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFfM1FfRDJfMVE7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUTsKIAkJCWVsc2UKLQkJCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CisJCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCQl9IGVsc2UgaWYgKG1vZGUyLT5oZGlzcGxheSA+IG1vZGUxLT5oZGlzcGxheSkgewogCQkJaWYgKG1vZGUyLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV8xUV9EMl8zUTsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCQkJZWxzZQotCQkJCXRtcCB8PSBEQ19MQl9NRU1PUllfU1BMSVRfRDFIQUxGX0QySEFMRjsKKwkJCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEY7CiAJCX0gZWxzZQotCQkJdG1wIHw9IEFWSVZPX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOworCQkJdG1wIHw9IFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMUhBTEZfRDJIQUxGOwogCX0gZWxzZSBpZiAobW9kZTEpIHsKLQkJdG1wIHw9IERDX0xCX01FTU9SWV9TUExJVF9EMV9PTkxZOworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxX09OTFk7CiAJfSBlbHNlIGlmIChtb2RlMikgewotCQl0bXAgfD0gRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROworCQl0bXAgfD0gVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNROwogCX0KLQlXUkVHMzIoRENfTEJfTUVNT1JZX1NQTElULCB0bXApOworCVdSRUczMihSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQsIHRtcCk7CiB9CiAKIHN0cnVjdCByczY5MF93YXRlcm1hcmsgewpAQCAtNDg4LDI4ICs0MDcsMjggQEAKIAkgKiBvcHRpb24uCiAJICovCiAJaWYgKHJkZXYtPmRpc3BfcHJpb3JpdHkgPT0gMikgewotCQl0bXAgPSBSUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7Ci0JCXRtcCAmPSB+TUNfRElTUDFSX0lOSVRfTEFUX01BU0s7Ci0JCXRtcCAmPSB+TUNfRElTUDBSX0lOSVRfTEFUX01BU0s7Ci0JCWlmIChtb2RlMSkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMVJfSU5JVF9MQVRfU0hJRlQpOworCQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUik7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQ7CisJCXRtcCAmPSBDXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQ7CiAJCWlmIChtb2RlMCkKLQkJCXRtcCB8PSAoMSA8PCBNQ19ESVNQMFJfSU5JVF9MQVRfU0hJRlQpOwotCQlXUkVHMzJfTUMoTUNfSU5JVF9NSVNDX0xBVF9USU1FUiwgdG1wKTsKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMFJfSU5JVF9MQVQoMSk7CisJCWlmIChtb2RlMSkKKwkJCXRtcCB8PSBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoMSk7CisJCVdSRUczMl9NQyhSXzAwMDEwNF9NQ19JTklUX01JU0NfTEFUX1RJTUVSLCB0bXApOwogCX0KIAlyczY5MF9saW5lX2J1ZmZlcl9hZGp1c3QocmRldiwgbW9kZTAsIG1vZGUxKTsKIAogCWlmICgocmRldi0+ZmFtaWx5ID09IENISVBfUlM2OTApIHx8IChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MCkpCi0JCVdSRUczMihEQ1BfQ09OVFJPTCwgMCk7CisJCVdSRUczMihSXzAwNkM5Q19EQ1BfQ09OVFJPTCwgMCk7CiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc4MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTODgwKSkKLQkJV1JFRzMyKERDUF9DT05UUk9MLCAyKTsKKwkJV1JFRzMyKFJfMDA2QzlDX0RDUF9DT05UUk9MLCAyKTsKIAogCXJzNjkwX2NydGNfYmFuZHdpZHRoX2NvbXB1dGUocmRldiwgcmRldi0+bW9kZV9pbmZvLmNydGNzWzBdLCAmd20wKTsKIAlyczY5MF9jcnRjX2JhbmR3aWR0aF9jb21wdXRlKHJkZXYsIHJkZXYtPm1vZGVfaW5mby5jcnRjc1sxXSwgJndtMSk7CiAKIAl0bXAgPSAod20wLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpOwogCXRtcCB8PSAod20xLmxiX3JlcXVlc3RfZmlmb19kZXB0aCAtIDEpIDw8IDE2OwotCVdSRUczMihMQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOworCVdSRUczMihSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HLCB0bXApOwogCiAJaWYgKG1vZGUwICYmIG1vZGUxKSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20wLmRicHApID4gNjQpCkBAIC01NjIsMTAgKzQ4MSwxMCBAQAogCQkJcHJpb3JpdHlfbWFyazEyLmZ1bGwgPSAwOwogCQlpZiAod20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGwgPiBwcmlvcml0eV9tYXJrMTIuZnVsbCkKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gd20xLnByaW9yaXR5X21hcmtfbWF4LmZ1bGw7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMTIpKTsKKwkJV1JFRzMyKFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwogCX0gZWxzZSBpZiAobW9kZTApIHsKIAkJaWYgKHJmaXhlZF90cnVuYyh3bTAuZGJwcCkgPiA2NCkKIAkJCWEuZnVsbCA9IHJmaXhlZF9tdWwod20wLmRicHAsIHdtMC5udW1fbGluZV9wYWlyKTsKQEAgLTU5MiwxMCArNTExLDEyIEBACiAJCQlwcmlvcml0eV9tYXJrMDIuZnVsbCA9IDA7CiAJCWlmICh3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbCA+IHByaW9yaXR5X21hcmswMi5mdWxsKQogCQkJcHJpb3JpdHlfbWFyazAyLmZ1bGwgPSB3bTAucHJpb3JpdHlfbWFya19tYXguZnVsbDsKLQkJV1JFRzMyKEQxTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmswMikpOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7Ci0JCVdSRUczMihEMk1PREVfUFJJT1JJVFlfQV9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9CX0NOVCwgTU9ERV9QUklPUklUWV9PRkYpOworCQlXUkVHMzIoUl8wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazAyKSk7CisJCVdSRUczMihSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQsIHJmaXhlZF90cnVuYyhwcmlvcml0eV9tYXJrMDIpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwKKwkJCVNfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRigxKSk7CisJCVdSRUczMihSXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9DTlQsCisJCQlTXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoMSkpOwogCX0gZWxzZSB7CiAJCWlmIChyZml4ZWRfdHJ1bmMod20xLmRicHApID4gNjQpCiAJCQlhLmZ1bGwgPSByZml4ZWRfbXVsKHdtMS5kYnBwLCB3bTEubnVtX2xpbmVfcGFpcik7CkBAIC02MjIsMzAgKzU0MywyMDUgQEAKIAkJCXByaW9yaXR5X21hcmsxMi5mdWxsID0gMDsKIAkJaWYgKHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsID4gcHJpb3JpdHlfbWFyazEyLmZ1bGwpCiAJCQlwcmlvcml0eV9tYXJrMTIuZnVsbCA9IHdtMS5wcmlvcml0eV9tYXJrX21heC5mdWxsOwotCQlXUkVHMzIoRDFNT0RFX1BSSU9SSVRZX0FfQ05ULCBNT0RFX1BSSU9SSVRZX09GRik7Ci0JCVdSRUczMihEMU1PREVfUFJJT1JJVFlfQl9DTlQsIE1PREVfUFJJT1JJVFlfT0ZGKTsKLQkJV1JFRzMyKEQyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOwotCQlXUkVHMzIoRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CisJCVdSRUczMihSXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9DTlQsCisJCQlTXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoMSkpOworCQlXUkVHMzIoUl8wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQ05ULAorCQkJU18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKDEpKTsKKwkJV1JFRzMyKFJfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0NOVCwgcmZpeGVkX3RydW5jKHByaW9yaXR5X21hcmsxMikpOworCQlXUkVHMzIoUl8wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQ05ULCByZml4ZWRfdHJ1bmMocHJpb3JpdHlfbWFyazEyKSk7CiAJfQogfQogCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJzNjkwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwogCi0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCAocmVnICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCXIgPSBSUkVHMzIoUlM2OTBfTUNfREFUQSk7Ci0JV1JFRzMyKFJTNjkwX01DX0lOREVYLCBSUzY5MF9NQ19JTkRFWF9NQVNLKTsKKwlXUkVHMzIoUl8wMDAwNzhfTUNfSU5ERVgsIFNfMDAwMDc4X01DX0lORF9BRERSKHJlZykpOworCXIgPSBSUkVHMzIoUl8wMDAwN0NfTUNfREFUQSk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCB+Q18wMDAwNzhfTUNfSU5EX0FERFIpOwogCXJldHVybiByOwogfQogCiB2b2lkIHJzNjkwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3QgdikKIHsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsCi0JICAgICAgIFJTNjkwX01DX0lOREVYX1dSX0VOIHwgKChyZWcpICYgUlM2OTBfTUNfSU5ERVhfTUFTSykpOwotCVdSRUczMihSUzY5MF9NQ19EQVRBLCB2KTsKLQlXUkVHMzIoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCBTXzAwMDA3OF9NQ19JTkRfQUREUihyZWcpIHwKKwkJU18wMDAwNzhfTUNfSU5EX1dSX0VOKDEpKTsKKwlXUkVHMzIoUl8wMDAwN0NfTUNfREFUQSwgdik7CisJV1JFRzMyKFJfMDAwMDc4X01DX0lOREVYLCAweDdGKTsKK30KKwordm9pZCByczY5MF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChyczY5MF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMTAwX01DQ0ZHX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAxMDBfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAxMDBfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKworCXJ2NTE1X21jX3Jlc3VtZShyZGV2LCAmc2F2ZSk7Cit9CisKK3N0YXRpYyBpbnQgcnM2OTBfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCXJzNjkwX21jX3Byb2dyYW0ocmRldik7CisJLyogUmVzdW1lIGNsb2NrICovCisJcnY1MTVfY2xvY2tfc3RhcnR1cChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdQVSBjb25maWd1cmF0aW9uICgjIHBpcGVzLCAuLi4pICovCisJcnM2OTBfZ3B1X2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKKwkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KKwlyID0gcnM0MDBfZ2FydF9lbmFibGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIEVuYWJsZSBJUlEgKi8KKwlyZGV2LT5pcnEuc3dfaW50ID0gdHJ1ZTsKKwlyczYwMF9pcnFfc2V0KHJkZXYpOworCS8qIDFNIHJpbmcgYnVmZmVyICovCisJciA9IHIxMDBfY3BfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBDUCAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwlyID0gcjEwMF93Yl9pbml0KHJkZXYpOworCWlmIChyKQorCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIFdCICglZCkuXG4iLCByKTsKKwlyID0gcjEwMF9pYl9pbml0KHJkZXYpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgSUIgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByczY5MF9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLyogTWFrZSBzdXIgR0FSVCBhcmUgbm90IHdvcmtpbmcgKi8KKwlyczQwMF9nYXJ0X2Rpc2FibGUocmRldik7CisJLyogUmVzdW1lIGNsb2NrIGJlZm9yZSBkb2luZyByZXNldCAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIHBvc3QgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBSZXN1bWUgY2xvY2sgYWZ0ZXIgcG9zdGluZyAqLworCXJ2NTE1X2Nsb2NrX3N0YXJ0dXAocmRldik7CisJcmV0dXJuIHJzNjkwX3N0YXJ0dXAocmRldik7Cit9CisKK2ludCByczY5MF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXIxMDBfY3BfZGlzYWJsZShyZGV2KTsKKwlyMTAwX3diX2Rpc2FibGUocmRldik7CisJcnM2MDBfaXJxX2Rpc2FibGUocmRldik7CisJcnM0MDBfZ2FydF9kaXNhYmxlKHJkZXYpOworCXJldHVybiAwOworfQorCit2b2lkIHJzNjkwX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJcnM2OTBfc3VzcGVuZChyZGV2KTsKKwlyMTAwX2NwX2ZpbmkocmRldik7CisJcjEwMF93Yl9maW5pKHJkZXYpOworCXIxMDBfaWJfZmluaShyZGV2KTsKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcnM0MDBfZ2FydF9maW5pKHJkZXYpOworCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9vYmplY3RfZmluaShyZGV2KTsKKwlyYWRlb25fYXRvbWJpb3NfZmluaShyZGV2KTsKKwlrZnJlZShyZGV2LT5iaW9zKTsKKwlyZGV2LT5iaW9zID0gTlVMTDsKK30KKworaW50IHJzNjkwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEaXNhYmxlIFZHQSAqLworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcmFkZW9uX3NjcmF0Y2hfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIHN1cmZhY2UgcmVnaXN0ZXJzICovCisJcmFkZW9uX3N1cmZhY2VfaW5pdChyZGV2KTsKKwkvKiBUT0RPOiBkaXNhYmxlIFZHQSBuZWVkIHRvIHVzZSBWR0EgcmVxdWVzdCAqLworCS8qIEJJT1MqLworCWlmICghcmFkZW9uX2dldF9iaW9zKHJkZXYpKSB7CisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKKwkJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0gZWxzZSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGF0b21iaW9zIGZvciBSVjUxNSBHUFVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogUmVzZXQgZ3B1IGJlZm9yZSBwb3N0aW5nIG90aGVyd2lzZSBBVE9NIHdpbGwgZW50ZXIgaW5maW5pdGUgbG9vcCAqLworCWlmIChyYWRlb25fZ3B1X3Jlc2V0KHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwKKwkJCSJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBjaGVjayBpZiBjYXJkcyBhcmUgcG9zdGVkIG9yIG5vdCAqLworCWlmICghcmFkZW9uX2NhcmRfcG9zdGVkKHJkZXYpICYmIHJkZXYtPmJpb3MpIHsKKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0KKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKKwkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwlyYWRlb25fcG1faW5pdChyZGV2KTsKKwkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KKwlyczY5MF92cmFtX2luZm8ocmRldik7CisJLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KKwlyID0gcjQyMF9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9kZWJ1Z2ZzKHJkZXYpOworCS8qIEZlbmNlIGRyaXZlciAqLworCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fb2JqZWN0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByczQwMF9nYXJ0X2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJzNjAwX3NldF9zYWZlX3JlZ2lzdGVycyhyZGV2KTsKKwlyZGV2LT5hY2NlbF93b3JraW5nID0gdHJ1ZTsKKwlyID0gcnM2OTBfc3RhcnR1cChyZGV2KTsKKwlpZiAocikgeworCQkvKiBTb21ldGhpbmdzIHdhbnQgd3JvbnQgd2l0aCB0aGUgYWNjZWwgaW5pdCBzdG9wIGFjY2VsICovCisJCWRldl9lcnIocmRldi0+ZGV2LCAiRGlzYWJsaW5nIEdQVSBhY2NlbGVyYXRpb25cbiIpOworCQlyczY5MF9zdXNwZW5kKHJkZXYpOworCQlyMTAwX2NwX2ZpbmkocmRldik7CisJCXIxMDBfd2JfZmluaShyZGV2KTsKKwkJcjEwMF9pYl9maW5pKHJkZXYpOworCQlyczQwMF9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9pcnFfa21zX2ZpbmkocmRldik7CisJCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwl9CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmQzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MGQuaApAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SUzY5MERfSF9fCisjZGVmaW5lIF9fUlM2OTBEX0hfXworCisvKiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUl8wMDAwNzhfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNzgKKyNkZWZpbmUgICBTXzAwMDA3OF9NQ19JTkRfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9BRERSKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxRkYpCisjZGVmaW5lICAgQ18wMDAwNzhfTUNfSU5EX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkUwMAorI2RlZmluZSAgIFNfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDc4X01DX0lORF9XUl9FTih4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDc4X01DX0lORF9XUl9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgUl8wMDAwN0NfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwN0MKKyNkZWZpbmUgICBTXzAwMDA3Q19NQ19EQVRBKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwN0NfTUNfREFUQSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMDdDX01DX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAwRjhfQ09ORklHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjgKKyNkZWZpbmUgICBTXzAwMDBGOF9DT05GSUdfTUVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDAxMzRfSERQX0ZCX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMzQKKyNkZWZpbmUgICBTXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEzNF9IRFBfRkJfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDEzNF9IRFBfRkJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVQgICAgICAgICAgICAgICAgICAweDAwNjUyMAorI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgzKQorI2RlZmluZSAgIENfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVCAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkMKKyNkZWZpbmUgICBTXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSh4KSAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfTU9ERSAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYgICAgMAorI2RlZmluZSAgIFZfMDA2NTIwX0RDX0xCX01FTU9SWV9TUExJVF9EMV8zUV9EMl8xUSAgICAgIDEKKyNkZWZpbmUgICBWXzAwNjUyMF9EQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWSAgICAgICAgICAyCisjZGVmaW5lICAgVl8wMDY1MjBfRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRICAgICAgMworI2RlZmluZSAgIFNfMDA2NTIwX0RDX0xCX0RJU1AxX0VORF9BRFIoeCkgICAgICAgICAgICAgICgoKHgpICYgMHg3RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDY1MjBfRENfTEJfRElTUDFfRU5EX0FEUih4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDdGRikKKyNkZWZpbmUgICBDXzAwNjUyMF9EQ19MQl9ESVNQMV9FTkRfQURSICAgICAgICAgICAgICAgICAweEZGRkY4MDBGCisjZGVmaW5lIFJfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0NOVCAgICAgICAgICAgICAgIDB4MDA2NTQ4CisjZGVmaW5lICAgU18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSh4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX01BUktfQSAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2NTQ4X0QxTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjU0OF9EMU1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY1NDhfRDFNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9DTlQgICAgICAgICAgICAgICAweDAwNjU0QworI2RlZmluZSAgIFNfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IoeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9NQVJLX0IgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX09GRiAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTiAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwNjU0Q19EMU1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY1NENfRDFNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2NTRDX0QxTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0sgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDZDOUNfRENQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDZDOUMKKyNkZWZpbmUgUl8wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQ05UICAgICAgICAgICAgICAgMHgwMDZENDgKKyNkZWZpbmUgICBTXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BKHgpICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfTUFSS19BICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfT0ZGKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX09GRih4KSAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9PRkYgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfQUxXQVlTX09OKHgpICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0FMV0FZU19PTih4KSAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9BTFdBWVNfT04gICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDZENDhfRDJNT0RFX1BSSU9SSVRZX0FfRk9SQ0VfTUFTSyh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDA2RDQ4X0QyTU9ERV9QUklPUklUWV9BX0ZPUkNFX01BU0soeCkgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNkQ0OF9EMk1PREVfUFJJT1JJVFlfQV9GT1JDRV9NQVNLICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0NOVCAgICAgICAgICAgICAgIDB4MDA2RDRDCisjZGVmaW5lICAgU18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQih4KSAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX01BUktfQiAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX09GRih4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9PRkYoeCkgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfT0ZGICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0FMV0FZU19PTih4KSAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9BTFdBWVNfT04oeCkgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfQUxXQVlTX09OICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDA2RDRDX0QyTU9ERV9QUklPUklUWV9CX0ZPUkNFX01BU0soeCkgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNkQ0Q19EMk1PREVfUFJJT1JJVFlfQl9GT1JDRV9NQVNLKHgpICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDZENENfRDJNT0RFX1BSSU9SSVRZX0JfRk9SQ0VfTUFTSyAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNkQ1OF9MQl9NQVhfUkVRX09VVFNUQU5ESU5HICAgICAgICAgICAgICAweDAwNkQ1OAorI2RlZmluZSAgIFNfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcoeCkgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QxX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAwNkQ1OF9MQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HKHgpICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDZENThfTEJfRDJfTUFYX1JFUV9PVVRTVEFORElORyh4KSAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDA2RDU4X0xCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkcgICAgICAgICAgIDB4RkZGMEZGRkYKKworCisjZGVmaW5lIFJfMDAwMDkwX01DX1NZU1RFTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDkwCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU1lTVEVNX0lETEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU1lTVEVNX0lETEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDkwX01DX1NFUVVFTkNFUl9JRExFICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ19BUkJJVEVSX0lETEUgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwOTBfTUNfU0VMRUNUX1BNKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwOTBfTUNfU0VMRUNUX1BNICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVENCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMDkwX1JFU0VSVkVENCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGMEYKKyNkZWZpbmUgICBTXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDA5MF9SRVNFUlZFRDgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDggICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQxMih4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDkwX1JFU0VSVkVEMTIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDA5MF9SRVNFUlZFRDEyICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lOSVRfRVhFQ1VURUQoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JTklUX0VYRUNVVEVEKHgpICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSU5JVF9FWEVDVVRFRCAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0lETEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE3KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkRGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX1NFUV9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE4KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9TRVFfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfU0VRX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkJGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfTUNBX0FSQl9JRExFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE5KQorI2RlZmluZSAgIEdfMDAwMDkwX01DQV9BUkJfSURMRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDA5MF9NQ0FfQVJCX0lETEUgICAgICAgICAgICAgICAgICAgICAgICAweEZGRjdGRkZGCisjZGVmaW5lICAgU18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRikgPDwgMjApCisjZGVmaW5lICAgR18wMDAwOTBfUkVTRVJWRUQyMCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGRkYpCisjZGVmaW5lICAgQ18wMDAwOTBfUkVTRVJWRUQyMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBGRkZGRgorI2RlZmluZSBSXzAwMDEwMF9NQ0NGR19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDAwMDEwMAorI2RlZmluZSAgIFNfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTAwX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDEwMF9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDBfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMTAwX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAxMDRfTUNfSU5JVF9NSVNDX0xBVF9USU1FUiAgICAgICAgICAgICAgMHgwMDAxMDQKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAwMDEwNF9NQ19DUFJfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfVkZfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAxMDRfTUNfVkZfSU5JVF9MQVQgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AwUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19ESVNQMVJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRElTUDFSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0RJU1AxUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19GSVhFRF9JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRklYRURfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0ZJWEVEX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19FMlJfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMDAxMDRfTUNfRTJSX0lOSVRfTEFUKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0UyUl9JTklUX0xBVCAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9TQU1FX1BBR0VfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAxMDRfU0FNRV9QQUdFX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X1NBTUVfUEFHRV9QUklPICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDEwNF9NQ19HTE9CV19JTklUX0xBVCh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMDAxMDRfTUNfR0xPQldfSU5JVF9MQVQoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTA0X01DX0dMT0JXX0lOSVRfTEFUICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MHIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkOWZhYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgotICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi0gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKiBBdXRob3JzOiBEYXZlIEFpcmxpZQotICogICAgICAgICAgQWxleCBEZXVjaGVyCi0gKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCi0gKi8KLSNpZm5kZWYgUlM2OTBSX0gKLSNkZWZpbmUgUlM2OTBSX0gKLQotLyogUlM2OTAvUlM3NDAgcmVnaXN0ZXJzICovCi0jZGVmaW5lIE1DX0lOREVYCQkJMHgwMDc4Ci0jCWRlZmluZSBNQ19JTkRFWF9NQVNLCQkJMHgxRkYKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0VOCQkJKDEgPDwgOSkKLSMJZGVmaW5lIE1DX0lOREVYX1dSX0FDSwkJCTB4N0YKLSNkZWZpbmUgTUNfREFUQQkJCQkweDAwN0MKLSNkZWZpbmUgSERQX0ZCX0xPQ0FUSU9OCQkJMHgwMTM0Ci0jZGVmaW5lIERDX0xCX01FTU9SWV9TUExJVAkJMHg2NTIwCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfTUFTSwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUJCURDX0xCX01FTU9SWV9TUExJVF9TSElGVAkJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxSEFMRl9EMkhBTEYJMAotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzNRX0QyXzFRCQkxCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfRDFfT05MWQkJMgotI2RlZmluZQkJRENfTEJfTUVNT1JZX1NQTElUX0QxXzFRX0QyXzNRCQkzCi0jZGVmaW5lCQlEQ19MQl9NRU1PUllfU1BMSVRfU0hJRlRfTU9ERQkJKDEgPDwgMikKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfU0hJRlQJCTQKLSNkZWZpbmUJCURDX0xCX0RJU1AxX0VORF9BRFJfTUFTSwkJMHgwMDAwN0ZGMAotI2RlZmluZSBEMU1PREVfUFJJT1JJVFlfQV9DTlQJCTB4NjU0OAotI2RlZmluZQkJTU9ERV9QUklPUklUWV9NQVJLX01BU0sJCQkweDAwMDA3RkZGCi0jZGVmaW5lCQlNT0RFX1BSSU9SSVRZX09GRgkJCSgxIDw8IDE2KQotI2RlZmluZQkJTU9ERV9QUklPUklUWV9BTFdBWVNfT04JCQkoMSA8PCAyMCkKLSNkZWZpbmUJCU1PREVfUFJJT1JJVFlfRk9SQ0VfTUFTSwkJKDEgPDwgMjQpCi0jZGVmaW5lIEQxTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2NTRDCi0jZGVmaW5lIExCX01BWF9SRVFfT1VUU1RBTkRJTkcJCTB4NkQ1OAotI2RlZmluZQkJTEJfRDFfTUFYX1JFUV9PVVRTVEFORElOR19NQVNLCQkweDAwMDAwMDBGCi0jZGVmaW5lCQlMQl9EMV9NQVhfUkVRX09VVFNUQU5ESU5HX1NISUZUCQkwCi0jZGVmaW5lCQlMQl9EMl9NQVhfUkVRX09VVFNUQU5ESU5HX01BU0sJCTB4MDAwRjAwMDAKLSNkZWZpbmUJCUxCX0QyX01BWF9SRVFfT1VUU1RBTkRJTkdfU0hJRlQJCTE2Ci0jZGVmaW5lIERDUF9DT05UUk9MCQkJMHg2QzlDCi0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9BX0NOVAkJMHg2RDQ4Ci0jZGVmaW5lIEQyTU9ERV9QUklPUklUWV9CX0NOVAkJMHg2RDRDCi0KLS8qIE1DIGluZGlyZWN0IHJlZ2lzdGVycyAqLwotI2RlZmluZSBNQ19TVEFUVVNfSURMRQkJCQkoMSA8PCAwKQotI2RlZmluZSBNQ19NSVNDX0NOVEwJCQkweDE4Ci0jZGVmaW5lCQlESVNBQkxFX0dUVwkJCSgxIDw8IDEpCi0jZGVmaW5lCQlHQVJUX0lOREVYX1JFR19FTgkJKDEgPDwgMTIpCi0jZGVmaW5lCQlCTE9DS19HRlhfRDNfRU4JCQkoMSA8PCAxNCkKLSNkZWZpbmUgR0FSVF9GRUFUVVJFX0lECQkJMHgyQgotI2RlZmluZQkJSEFOR19FTgkJCQkoMSA8PCAxMSkKLSNkZWZpbmUJCVRMQl9FTkFCTEUJCQkoMSA8PCAxOCkKLSNkZWZpbmUJCVAyUF9FTkFCTEUJCQkoMSA8PCAxOSkKLSNkZWZpbmUJCUdUV19MQUNfRU4JCQkoMSA8PCAyNSkKLSNkZWZpbmUJCUxFVkVMMl9HQVJUCQkJKDAgPDwgMzApCi0jZGVmaW5lCQlMRVZFTDFfR0FSVAkJCSgxIDw8IDMwKQotI2RlZmluZQkJUERDX0VOCQkJCSgxIDw8IDMxKQotI2RlZmluZSBHQVJUX0JBU0UJCQkweDJDCi0jZGVmaW5lIEdBUlRfQ0FDSEVfQ05UUkwJCTB4MkUKLSMJZGVmaW5lIEdBUlRfQ0FDSEVfSU5WQUxJREFURQkJKDEgPDwgMCkKLSNkZWZpbmUgTUNfU1RBVFVTCQkJMHg5MAotI2RlZmluZSBNQ0NGR19GQl9MT0NBVElPTgkJMHgxMDAKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX01BU0sJCTB4MDAwMEZGRkYKLSNkZWZpbmUJCU1DX0ZCX1NUQVJUX1NISUZUCQkwCi0jZGVmaW5lCQlNQ19GQl9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0ZCX1RPUF9TSElGVAkJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9MT0NBVElPTgkJMHgxMDEKLSNkZWZpbmUJCU1DX0FHUF9TVEFSVF9NQVNLCQkweDAwMDBGRkZGCi0jZGVmaW5lCQlNQ19BR1BfU1RBUlRfU0hJRlQJCTAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfTUFTSwkJCTB4RkZGRjAwMDAKLSNkZWZpbmUJCU1DX0FHUF9UT1BfU0hJRlQJCTE2Ci0jZGVmaW5lIE1DQ0ZHX0FHUF9CQVNFCQkJMHgxMDIKLSNkZWZpbmUgTUNDRkdfQUdQX0JBU0VfMgkJMHgxMDMKLSNkZWZpbmUgTUNfSU5JVF9NSVNDX0xBVF9USU1FUgkJMHgxMDQKLSNkZWZpbmUJCU1DX0RJU1AwUl9JTklUX0xBVF9TSElGVAk4Ci0jZGVmaW5lCQlNQ19ESVNQMFJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwMEYwMAotI2RlZmluZQkJTUNfRElTUDFSX0lOSVRfTEFUX1NISUZUCTEyCi0jZGVmaW5lCQlNQ19ESVNQMVJfSU5JVF9MQVRfTUFTSwkJMHgwMDAwRjAwMAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnYyMDBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YjM5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjAwZC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAyMDA5IEplcm9tZSBHbGlzc2UuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczogRGF2ZSBBaXJsaWUKKyAqICAgICAgICAgIEFsZXggRGV1Y2hlcgorICogICAgICAgICAgSmVyb21lIEdsaXNzZQorICovCisjaWZuZGVmIF9fUlYyMDBEX0hfXworI2RlZmluZSBfX1JWMjAwRF9IX18KKworI2RlZmluZSBSXzAwMDE1Q19BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE1QworI2RlZmluZSAgIFNfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMTVDX0FHUF9CQVNFX0FERFJfMih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDAwMTVDX0FHUF9CQVNFX0FERFJfMiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MjUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWE3MGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjI1MGQuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFJlZCBIYXQgSW5jLgorICogQ29weXJpZ2h0IDIwMDkgSmVyb21lIEdsaXNzZS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBEYXZlIEFpcmxpZQorICogICAgICAgICAgQWxleCBEZXVjaGVyCisgKiAgICAgICAgICBKZXJvbWUgR2xpc3NlCisgKi8KKyNpZm5kZWYgX19SVjI1MERfSF9fCisjZGVmaW5lIF9fUlYyNTBEX0hfXworCisjZGVmaW5lIFJfMDAwMDBEX1NDTEtfQ05UTF9NNiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDBECisjZGVmaW5lICAgU18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMERfU0NMS19TUkNfU0VMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMDAwMERfU0NMS19TUkNfU0VMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgIFNfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0NQX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9IRFBfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDUpCisjZGVmaW5lICAgR18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfVFZfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZERgorI2RlZmluZSAgIFNfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA2KQorI2RlZmluZSAgIEdfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgICgoKHgpID4+IDYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0UyX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZGQkYKKyNkZWZpbmUgICBTXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRF9TRV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMERfSURDVF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1ZJUF9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SRV9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDAwMERfUkVfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JFX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9QQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDAwMERfUEJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1BCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDAwRF9UQU1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMERfVEFNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RBTV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9URE1fTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDAwMERfVERNX01BWF9EWU5fU1RPUF9MQVQoeCkgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1RETV9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9SQl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDAwMERfUkJfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX1JCX01BWF9EWU5fU1RPUF9MQVQgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AyICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9DUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfQ1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9IRFAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSERQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0hEUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGREZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9ESVNQMSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRElTUDEoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0RJU1AxICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGQkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGN0ZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9FMih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfRTIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0UyICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9JRENUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfSURDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX0lEQ1QgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZCRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WSVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjMpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVklQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZJUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkY3RkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUEIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UQU0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVEFNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RBTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9URE0oeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVERNKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RETSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9SQih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1JCICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UVl9TQ0xLKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFZfU0NMSyh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RWX1NDTEsgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVUJQSUMoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1VCUElDKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVQlBJQyAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9PVjAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfT1YwKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX09WMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2MzUwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzVjNWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjM1MGQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggUmVkIEhhdCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBKZXJvbWUgR2xpc3NlLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IERhdmUgQWlybGllCisgKiAgICAgICAgICBBbGV4IERldWNoZXIKKyAqICAgICAgICAgIEplcm9tZSBHbGlzc2UKKyAqLworI2lmbmRlZiBfX1JWMzUwRF9IX18KKyNkZWZpbmUgX19SVjM1MERfSF9fCisKKy8qIFJWMzUwLCBSVjM4MCByZWdpc3RlcnMgKi8KKy8qICNkZWZpbmUgUl8wMDAwMERfU0NMS19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEQgKi8KKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9WQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVkFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1ZBUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjUpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1IoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkRGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9QWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjYpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfUFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1BYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkJGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9UWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjcpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVFgoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjcpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RjdGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9VUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfVVMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRF9GT1JDRV9TVSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDAwMERfRk9SQ0VfU1UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBEX0ZPUkNFX1NVICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggZmQ3OTk3NC4uNzkzNWY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtMjksMzcgKzI5LDE3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJ2NTE1ZC5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgotCisjaW5jbHVkZSAiYXRvbS5oIgogI2luY2x1ZGUgInJ2NTE1X3JlZ19zYWZlLmgiCi0vKiBydjUxNSBkZXBlbmRzIG9uIDogKi8KLXZvaWQgcjEwMF9oZHBfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfY3BfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotaW50IHIxMDBfcmIyZF9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9ndWlfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1pbnQgcjEwMF9jcF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCByaW5nX3NpemUpOwotdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9tY19kaXNhYmxlX2NsaWVudHMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotdm9pZCByczYwMF9kaXNhYmxlX3ZnYShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKLS8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86Ci0gKiBydjUxNQotICoKLSAqIFNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIG1pZ2h0IGJlIHVzZWQgYnkgbmV3ZXIgQVNJQ3MuCi0gKi8KKy8qIFRoaXMgZmlsZXMgZ2F0aGVyIGZ1bmN0aW9ucyBzcGVjaWZpY3MgdG86IHJ2NTE1ICovCiBpbnQgcnY1MTVfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X2RlYnVnZnNfZ2FfaW5mb19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnY1MTVfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi0KLS8qCi0gKiBNQwotICovCi1pbnQgcnY1MTVfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnY1MTVfZGVidWdmcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQl1aW50MzJfdCB0bXA7Ci0JaW50IHI7Ci0KIAlpZiAocjEwMF9kZWJ1Z2ZzX3JiYm1faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFJCQk0gIVxuIik7CiAJfQpAQCAtNjksNjcgKzQ5LDggQEAKIAlpZiAocnY1MTVfZGVidWdmc19nYV9pbmZvX2luaXQocmRldikpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBwaXBlcyAhXG4iKTsKIAl9Ci0KLQlydjUxNV9ncHVfaW5pdChyZGV2KTsKLQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBEaXNhYmxpbmcgQUdQXG4iKTsKLQkJCXJkZXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOwotCQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQotCS8qIFByb2dyYW0gR1BVIG1lbW9yeSBzcGFjZSAqLwotCXJzNjAwX21jX2Rpc2FibGVfY2xpZW50cyhyZGV2KTsKLQlpZiAocnY1MTVfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJGYWlsZWQgdG8gd2FpdCBNQyBpZGxlIHdoaWxlICIKLQkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKLQl9Ci0JLyogV3JpdGUgVlJBTSBzaXplIGluIGNhc2Ugd2UgYXJlIGxpbWl0aW5nIGl0ICovCi0JV1JFRzMyKFJBREVPTl9DT05GSUdfTUVNU0laRSwgcmRldi0+bWMucmVhbF92cmFtX3NpemUpOwotCXRtcCA9IFJFR19TRVQoTUNfRkJfU1RBUlQsIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDEzNCwgdG1wKTsKLQl0bXAgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQl0bXAgPSBSRUdfU0VUKE1DX0ZCX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChNQ19GQl9TVEFSVCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbiA+PiAxNik7Ci0JV1JFRzMyX01DKE1DX0ZCX0xPQ0FUSU9OLCB0bXApOwotCVdSRUczMihIRFBfRkJfTE9DQVRJT04sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPj4gMTYpOwotCVdSRUczMigweDMxMCwgcmRldi0+bWMudnJhbV9sb2NhdGlvbik7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7Ci0JCXRtcCA9IFJFR19TRVQoTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQkJdG1wIHw9IFJFR19TRVQoTUNfQUdQX1NUQVJULCByZGV2LT5tYy5ndHRfbG9jYXRpb24gPj4gMTYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0xPQ0FUSU9OLCB0bXApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlKTsKLQkJV1JFRzMyX01DKE1DX0FHUF9CQVNFXzIsIDApOwotCX0gZWxzZSB7Ci0JCVdSRUczMl9NQyhNQ19BR1BfTE9DQVRJT04sIDB4MEZGRkZGRkYpOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0UsIDApOwotCQlXUkVHMzJfTUMoTUNfQUdQX0JBU0VfMiwgMCk7Ci0JfQotCXJldHVybiAwOwogfQogCi12b2lkIHJ2NTE1X21jX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci19Ci0KLQotLyoKLSAqIEdsb2JhbCBHUFUgZnVuY3Rpb25zCi0gKi8KIHZvaWQgcnY1MTVfcmluZ19zdGFydChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlpbnQgcjsKQEAgLTE5OCwxMSArMTE5LDYgQEAKIAlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOwogfQogCi12b2lkIHJ2NTE1X2VycmF0YShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlyZGV2LT5wbGxfZXJyYXRhID0gMDsKLX0KLQogaW50IHJ2NTE1X21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgaTsKQEAgLTIxOSw2ICsxMzUsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3ZvaWQgcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwKKwkJUlJFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCkgJiBDXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKTsKK30KKwogdm9pZCBydjUxNV9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBwaXBlX3NlbGVjdF9jdXJyZW50LCBnYl9waXBlX3NlbGVjdCwgdG1wOwpAQCAtMjMxLDcgKzE1NSw3IEBACiAJCSAgICAgICAicmVzZXRpbmcgR1BVLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXJzNjAwX2Rpc2FibGVfdmdhKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIAogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKIAlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwpAQCAtMzM1LDEwICsyNTksNiBAQAogCXJldHVybiAwOwogfQogCi0KLS8qCi0gKiBWUkFNIGluZm8KLSAqLwogc3RhdGljIHZvaWQgcnY1MTVfdnJhbV9nZXRfdHlwZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB0bXA7CkBAIC0zNzQsMTAgKzI5NCw2IEBACiAJcmRldi0+cG0uc2Nsay5mdWxsID0gcmZpeGVkX2RpdihyZGV2LT5wbS5zY2xrLCBhKTsKIH0KIAotCi0vKgotICogSW5kaXJlY3QgcmVnaXN0ZXJzIGFjY2Vzc29yCi0gKi8KIHVpbnQzMl90IHJ2NTE1X21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZykKIHsKIAl1aW50MzJfdCByOwpAQCAtMzk1LDkgKzMxMSw2IEBACiAJV1JFRzMyKE1DX0lORF9JTkRFWCwgMCk7CiB9CiAKLS8qCi0gKiBEZWJ1Z2ZzIGluZm8KLSAqLwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogc3RhdGljIGludCBydjUxNV9kZWJ1Z2ZzX3BpcGVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogewpAQCAtNDU5LDEzICszNzIsMjU5IEBACiAjZW5kaWYKIH0KIAotLyoKLSAqIEFzaWMgaW5pdGlhbGl6YXRpb24KLSAqLwotaW50IHJ2NTE1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBydjUxNV9tY19zYXZlICpzYXZlKQoreworCXNhdmUtPmQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCk7CisJc2F2ZS0+ZDJ2Z2FfY29udHJvbCA9IFJSRUczMihSXzAwMDMzOF9EMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMDBfVkdBX1JFTkRFUl9DT05UUk9MKTsKKwlzYXZlLT52Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDAzMjhfVkdBX0hEUF9DT05UUk9MKTsKKwlzYXZlLT5kMWNydGNfY29udHJvbCA9IFJSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCk7CisJc2F2ZS0+ZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wpOworCisJLyogU3RvcCBhbGwgdmlkZW8gKi8KKwlXUkVHMzIoUl8wMDAzMzBfRDFWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgMCk7CisJV1JFRzMyKFJfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2OEU4X0QyQ1JUQ19VUERBVEVfTE9DSywgMSk7CisJV1JFRzMyKFJfMDA2MDgwX0QxQ1JUQ19DT05UUk9MLCAwKTsKKwlXUkVHMzIoUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wsIDApOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworfQorCit2b2lkIHJ2NTE1X21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJ2NTE1X21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKFJfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKFJfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTLCByZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoUl8wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUywgcmRldi0+bWMudnJhbV9zdGFydCk7CisJLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCisJV1JFRzMyKFJfMDAwMzI4X1ZHQV9IRFBfQ09OVFJPTCwgc2F2ZS0+dmdhX2hkcF9jb250cm9sKTsKKwltZGVsYXkoMSk7CisJLyogUmVzdG9yZSB2aWRlbyBzdGF0ZSAqLworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDEpOworCVdSRUczMihSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCwgc2F2ZS0+ZDFjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjg4MF9EMkNSVENfQ09OVFJPTCwgc2F2ZS0+ZDJjcnRjX2NvbnRyb2wpOworCVdSRUczMihSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0ssIDApOworCVdSRUczMihSXzAwMDMzMF9EMVZHQV9DT05UUk9MLCBzYXZlLT5kMXZnYV9jb250cm9sKTsKKwlXUkVHMzIoUl8wMDAzMzhfRDJWR0FfQ09OVFJPTCwgc2F2ZS0+ZDJ2Z2FfY29udHJvbCk7CisJV1JFRzMyKFJfMDAwMzAwX1ZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKwordm9pZCBydjUxNV9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBydjUxNV9tY19zYXZlIHNhdmU7CisKKwkvKiBTdG9wcyBhbGwgbWMgY2xpZW50cyAqLworCXJ2NTE1X21jX3N0b3AocmRldiwgJnNhdmUpOworCisJLyogV2FpdCBmb3IgbWMgaWRsZSAqLworCWlmIChydjUxNV9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKQorCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKKwkvKiBXcml0ZSBWUkFNIHNpemUgaW4gY2FzZSB3ZSBhcmUgbGltaXRpbmcgaXQgKi8KKwlXUkVHMzIoUl8wMDAwRjhfQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKKwkvKiBQcm9ncmFtIE1DLCBzaG91bGQgYmUgYSAzMmJpdHMgbGltaXRlZCBhZGRyZXNzIHNwYWNlICovCisJV1JFRzMyX01DKFJfMDAwMDAxX01DX0ZCX0xPQ0FUSU9OLAorCQkJU18wMDAwMDFfTUNfRkJfU1RBUlQocmRldi0+bWMudnJhbV9zdGFydCA+PiAxNikgfAorCQkJU18wMDAwMDFfTUNfRkJfVE9QKHJkZXYtPm1jLnZyYW1fZW5kID4+IDE2KSk7CisJV1JFRzMyKFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiwKKwkJU18wMDAxMzRfSERQX0ZCX1NUQVJUKHJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTYpKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCVdSRUczMl9NQyhSXzAwMDAwMl9NQ19BR1BfTE9DQVRJT04sCisJCQlTXzAwMDAwMl9NQ19BR1BfU1RBUlQocmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KSB8CisJCQlTXzAwMDAwMl9NQ19BR1BfVE9QKHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpKTsKKwkJV1JFRzMyX01DKFJfMDAwMDAzX01DX0FHUF9CQVNFLCBsb3dlcl8zMl9iaXRzKHJkZXYtPm1jLmFncF9iYXNlKSk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLAorCQkJU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHVwcGVyXzMyX2JpdHMocmRldi0+bWMuYWdwX2Jhc2UpKSk7CisJfSBlbHNlIHsKKwkJV1JFRzMyX01DKFJfMDAwMDAyX01DX0FHUF9MT0NBVElPTiwgMHhGRkZGRkZGRik7CisJCVdSRUczMl9NQyhSXzAwMDAwM19NQ19BR1BfQkFTRSwgMCk7CisJCVdSRUczMl9NQyhSXzAwMDAwNF9NQ19BR1BfQkFTRV8yLCAwKTsKKwl9CisKKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOworfQorCit2b2lkIHJ2NTE1X2Nsb2NrX3N0YXJ0dXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJhZGVvbl9keW5jbGtzICE9IC0xICYmIHJhZGVvbl9keW5jbGtzKQorCQlyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHJkZXYsIDEpOworCS8qIFdlIG5lZWQgdG8gZm9yY2Ugb24gc29tZSBvZiB0aGUgYmxvY2sgKi8KKwlXUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDBGX0NQX0RZTl9DTlRMKSB8IFNfMDAwMDBGX0NQX0ZPUkNFT04oMSkpOworCVdSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwsCisJCVJSRUczMl9QTEwoUl8wMDAwMTFfRTJfRFlOX0NOVEwpIHwgU18wMDAwMTFfRTJfRk9SQ0VPTigxKSk7CisJV1JFRzMyX1BMTChSXzAwMDAxM19JRENUX0RZTl9DTlRMLAorCQlSUkVHMzJfUExMKFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwpIHwgU18wMDAwMTNfSURDVF9GT1JDRU9OKDEpKTsKK30KKworc3RhdGljIGludCBydjUxNV9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByOworCisJcnY1MTVfbWNfcHJvZ3JhbShyZGV2KTsKKwkvKiBSZXN1bWUgY2xvY2sgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KKwlydjUxNV9ncHVfaW5pdChyZGV2KTsKKwkvKiBJbml0aWFsaXplIEdBUlQgKGluaXRpYWxpemUgYWZ0ZXIgVFRNIHNvIHdlIGNhbiBhbGxvY2F0ZQorCSAqIG1lbW9yeSB0aHJvdWdoIFRUTSBidXQgZmluYWxpemUgYWZ0ZXIgVFRNKSAqLworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSB7CisJCXIgPSBydjM3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KKwkvKiBFbmFibGUgSVJRICovCisJcmRldi0+aXJxLnN3X2ludCA9IHRydWU7CisJcnM2MDBfaXJxX3NldChyZGV2KTsKKwkvKiAxTSByaW5nIGJ1ZmZlciAqLworCXIgPSByMTAwX2NwX2luaXQocmRldiwgMTAyNCAqIDEwMjQpOworCWlmIChyKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiZmFpbGxlZCBpbml0aWFsaXppbmcgQ1AgKCVkKS5cbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisJciA9IHIxMDBfd2JfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJZGV2X2VycihyZGV2LT5kZXYsICJmYWlsbGVkIGluaXRpYWxpemluZyBXQiAoJWQpLlxuIiwgcik7CisJciA9IHIxMDBfaWJfaW5pdChyZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgImZhaWxsZWQgaW5pdGlhbGl6aW5nIElCICglZCkuXG4iLCByKTsKKwkJcmV0dXJuIHI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnY1MTVfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIE1ha2Ugc3VyIEdBUlQgYXJlIG5vdCB3b3JraW5nICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpCisJCXJ2MzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIFJlc3VtZSBjbG9jayBiZWZvcmUgZG9pbmcgcmVzZXQgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCS8qIFJlc2V0IGdwdSBiZWZvcmUgcG9zdGluZyBvdGhlcndpc2UgQVRPTSB3aWxsIGVudGVyIGluZmluaXRlIGxvb3AgKi8KKwlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJHUFUgcmVzZXQgZmFpbGVkICEgKDB4RTQwPTB4JTA4WCwgMHg3QzA9MHglMDhYKVxuIiwKKwkJCVJSRUczMihSXzAwMEU0MF9SQkJNX1NUQVRVUyksCisJCQlSUkVHMzIoUl8wMDA3QzBfQ1BfU1RBVCkpOworCX0KKwkvKiBwb3N0ICovCisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJLyogUmVzdW1lIGNsb2NrIGFmdGVyIHBvc3RpbmcgKi8KKwlydjUxNV9jbG9ja19zdGFydHVwKHJkZXYpOworCXJldHVybiBydjUxNV9zdGFydHVwKHJkZXYpOworfQorCitpbnQgcnY1MTVfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlyMTAwX2NwX2Rpc2FibGUocmRldik7CisJcjEwMF93Yl9kaXNhYmxlKHJkZXYpOworCXJzNjAwX2lycV9kaXNhYmxlKHJkZXYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQorCQlydjM3MF9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJcmRldi0+Y29uZmlnLnIzMDAucmVnX3NhZmVfYm0gPSBydjUxNV9yZWdfc2FmZV9ibTsKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShydjUxNV9yZWdfc2FmZV9ibSk7Cit9CisKK3ZvaWQgcnY1MTVfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlydjUxNV9zdXNwZW5kKHJkZXYpOworCXIxMDBfY3BfZmluaShyZGV2KTsKKwlyMTAwX3diX2ZpbmkocmRldik7CisJcjEwMF9pYl9maW5pKHJkZXYpOworCXJhZGVvbl9nZW1fZmluaShyZGV2KTsKKyAgICBydjM3MF9wY2llX2dhcnRfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fZmVuY2VfZHJpdmVyX2ZpbmkocmRldik7CisJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOworCXJhZGVvbl9hdG9tYmlvc19maW5pKHJkZXYpOworCWtmcmVlKHJkZXYtPmJpb3MpOworCXJkZXYtPmJpb3MgPSBOVUxMOworfQorCitpbnQgcnY1MTVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgcjsKKworCS8qIEluaXRpYWxpemUgc2NyYXRjaCByZWdpc3RlcnMgKi8KKwlyYWRlb25fc2NyYXRjaF9pbml0KHJkZXYpOworCS8qIEluaXRpYWxpemUgc3VyZmFjZSByZWdpc3RlcnMgKi8KKwlyYWRlb25fc3VyZmFjZV9pbml0KHJkZXYpOworCS8qIFRPRE86IGRpc2FibGUgVkdBIG5lZWQgdG8gdXNlIFZHQSByZXF1ZXN0ICovCisJLyogQklPUyovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJFeHBlY3RpbmcgYXRvbWJpb3MgZm9yIFJWNTE1IEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBSZXNldCBncHUgYmVmb3JlIHBvc3Rpbmcgb3RoZXJ3aXNlIEFUT00gd2lsbCBlbnRlciBpbmZpbml0ZSBsb29wICovCisJaWYgKHJhZGVvbl9ncHVfcmVzZXQocmRldikpIHsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LAorCQkJIkdQVSByZXNldCBmYWlsZWQgISAoMHhFNDA9MHglMDhYLCAweDdDMD0weCUwOFgpXG4iLAorCQkJUlJFRzMyKFJfMDAwRTQwX1JCQk1fU1RBVFVTKSwKKwkJCVJSRUczMihSXzAwMDdDMF9DUF9TVEFUKSk7CisJfQorCS8qIGNoZWNrIGlmIGNhcmRzIGFyZSBwb3N0ZWQgb3Igbm90ICovCisJaWYgKCFyYWRlb25fY2FyZF9wb3N0ZWQocmRldikgJiYgcmRldi0+YmlvcykgeworCQlEUk1fSU5GTygiR1BVIG5vdCBwb3N0ZWQuIHBvc3Rpbmcgbm93Li4uXG4iKTsKKwkJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CisJfQorCS8qIEluaXRpYWxpemUgY2xvY2tzICovCisJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOworCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLworCXJhZGVvbl9wbV9pbml0KHJkZXYpOworCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLworCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKKwkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLworCXIgPSByNDIwX21jX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJ2NTE1X2RlYnVnZnMocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJhZGVvbl9pcnFfa21zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIE1lbW9yeSBtYW5hZ2VyICovCisJciA9IHJhZGVvbl9vYmplY3RfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlydjUxNV9zZXRfc2FmZV9yZWdpc3RlcnMocmRldik7CisJcmRldi0+YWNjZWxfd29ya2luZyA9IHRydWU7CisJciA9IHJ2NTE1X3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJLyogU29tZXRoaW5ncyB3YW50IHdyb250IHdpdGggdGhlIGFjY2VsIGluaXQgc3RvcCBhY2NlbCAqLworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkRpc2FibGluZyBHUFUgYWNjZWxlcmF0aW9uXG4iKTsKKwkJcnY1MTVfc3VzcGVuZChyZGV2KTsKKwkJcjEwMF9jcF9maW5pKHJkZXYpOworCQlyMTAwX3diX2ZpbmkocmRldik7CisJCXIxMDBfaWJfZmluaShyZGV2KTsKKwkJcnYzNzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CisJCXJhZGVvbl9hZ3BfZmluaShyZGV2KTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOworCX0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTVkLmgKaW5kZXggYTY1ZTE3ZS4uZmMyMTZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNWQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1ZC5oCkBAIC0yMTYsNSArMjE2LDM4OCBAQAogI2RlZmluZSBDUF9QQUNLRVQwX0dFVF9PTkVfUkVHX1dSKGgpICgoKGgpID4+IDE1KSAmIDEpCiAjZGVmaW5lIENQX1BBQ0tFVDNfR0VUX09QQ09ERShoKSAoKChoKSA+PiA4KSAmIDB4RkYpCiAKLSNlbmRpZgorLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIFJfMDAwMEY4X0NPTkZJR19NRU1TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEY4CisjZGVmaW5lICAgU18wMDAwRjhfQ09ORklHX01FTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMEY4X0NPTkZJR19NRU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDBGOF9DT05GSUdfTUVNU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMTM0X0hEUF9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTM0CisjZGVmaW5lICAgU18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDAxMzRfSERQX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkYpCisjZGVmaW5lICAgQ18wMDAxMzRfSERQX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBSXzAwMDMwMF9WR0FfUkVOREVSX0NPTlRST0wgICAgICAgICAgICAgICAgICAweDAwMDMwMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19SQVRFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQkxJTktfUkFURSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUYpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0JMSU5LX1JBVEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZFMAorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIEdfMDAwMzAwX1ZHQV9CTElOS19NT0RFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDUpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMzAwX1ZHQV9CTElOS19NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGOUYKKyNkZWZpbmUgICBTXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCh4KSAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMwMF9WR0FfQ1VSU09SX0JMSU5LX0lOVkVSVCAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgJiAweDEpIDw8IDgpCisjZGVmaW5lICAgR18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUoeCkgICAgICAgKCgoeCkgPj4gOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0VYVERfQUREUl9DT1VOVF9FTkFCTEUgICAgICAgICAgMHhGRkZGRkVGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9WU1RBVFVTX0NOVEwoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfVlNUQVRVU19DTlRMKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX1ZTVEFUVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQV9MT0NLXzhET1QoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FfTE9DS184RE9UKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBX0xPQ0tfOERPVCAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwMzAwX1ZHQVJFR19MSU5FQ01QX0NPTVBBVElCSUxJVFlfU0VMKHgpICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMDMwMF9WR0FSRUdfTElORUNNUF9DT01QQVRJQklMSVRZX1NFTCh4KSAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMDBfVkdBUkVHX0xJTkVDTVBfQ09NUEFUSUJJTElUWV9TRUwgICAgMHhGREZGRkZGRgorI2RlZmluZSBSXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyAgICAgICAgICAgICAweDAwMDMxMAorI2RlZmluZSAgIFNfMDAwMzEwX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTKHgpICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDMxMF9WR0FfTUVNT1JZX0JBU0VfQUREUkVTUyh4KSAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDAzMTBfVkdBX01FTU9SWV9CQVNFX0FERFJFU1MgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAwMDMyOF9WR0FfSERQX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAweDAwMDMyOAorI2RlZmluZSAgIFNfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4oeCkgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzI4X1ZHQV9NRU1fUEFHRV9TRUxFQ1RfRU4gICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUoeCkgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfUkJCTV9MT0NLX0RJU0FCTEUgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1NPRlRfUkVTRVQoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9TT0ZUX1JFU0VUKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfU09GVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMjhfVkdBX1RFU1RfUkVTRVRfQ09OVFJPTCh4KSAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzI4X1ZHQV9URVNUX1JFU0VUX0NPTlRST0woeCkgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMyOF9WR0FfVEVTVF9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAweEZFRkZGRkZGCisjZGVmaW5lIFJfMDAwMzMwX0QxVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzMwCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzBfRDFWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzMwX0QxVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzBfRDFWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzMwX0QxVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzMF9EMVZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwMzM4X0QyVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzM4CisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAzMzhfRDJWR0FfTU9ERV9FTkFCTEUgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA4KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QoeCkgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMzM4X0QyVkdBX1RJTUlOR19TRUxFQ1QgICAgICAgICAgICAgICAgIDB4RkZGRkZFRkYKKyNkZWZpbmUgICBTXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSAmIDB4MSkgPDwgOSkKKyNkZWZpbmUgICBHXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCh4KSAgICAgICAoKCh4KSA+PiA5KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9TWU5DX1BPTEFSSVRZX1NFTEVDVCAgICAgICAgICAweEZGRkZGREZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fVElNSU5HX1NFTEVDVCh4KSAgICAgKCgoeCkgJiAweDEpIDw8IDEwKQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX1RJTUlOR19TRUxFQ1QoeCkgICAgICgoKHgpID4+IDEwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9USU1JTkdfU0VMRUNUICAgICAgICAweEZGRkZGQkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfT1ZFUlNDQU5fQ09MT1JfRU4oeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX09WRVJTQ0FOX0NPTE9SX0VOKHgpICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9PVkVSU0NBTl9DT0xPUl9FTiAgICAgICAgICAgICAweEZGRkVGRkZGCisjZGVmaW5lICAgU18wMDAzMzhfRDJWR0FfUk9UQVRFKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMzM4X0QyVkdBX1JPVEFURSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDMzOF9EMlZHQV9ST1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAweEZDRkZGRkZGCisjZGVmaW5lIFJfMDAwN0MwX0NQX1NUQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0MwCisjZGVmaW5lICAgU18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDA3QzBfTVJVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfTVJVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwN0MwX01XVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX01XVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDdDMF9SU0lVX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDdDMF9SU0lVX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDA3QzBfUkNJVV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDA3QzBfUkNJVV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCA5KQorI2RlZmluZSAgIEdfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1koeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZERkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTApCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkZCRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfUFJJTUFSWV9CVVNZKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX1BSSU1BUllfQlVTWSh4KSAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9QUklNQVJZX0JVU1kgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY3RkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1RfQlVTWSh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTIpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUX0JVU1koeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVF9CVVNZICAgICAgICAgICAgICAgICAgIDB4RkZGRkVGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0lfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTMpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NJX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTSV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkRGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU0ZfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTQpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NGX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTRl9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRkJGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DU1FfSU5ESVJFQ1QyX0JVU1koeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMTUpCisjZGVmaW5lICAgR18wMDA3QzBfQ1NRX0lORElSRUNUMl9CVVNZKHgpICAgICAgICAgICAgICAgKCgoeCkgPj4gMTUpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NTUV9JTkRJUkVDVDJfQlVTWSAgICAgICAgICAgICAgICAgIDB4RkZGRjdGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9HVUlETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjgpCisjZGVmaW5lICAgR18wMDA3QzBfR1VJRE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0dVSURNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4RUZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9WSURETUFfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjkpCisjZGVmaW5lICAgR18wMDA3QzBfVklERE1BX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX1ZJRERNQV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgIDB4REZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzApCisjZGVmaW5lICAgR18wMDA3QzBfQ01EU1RSTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzApICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NNRFNUUk1fQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4QkZGRkZGRkYKKyNkZWZpbmUgICBTXzAwMDdDMF9DUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMzEpCisjZGVmaW5lICAgR18wMDA3QzBfQ1BfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMzEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwN0MwX0NQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZGRkZGRkYKKyNkZWZpbmUgUl8wMDBFNDBfUkJCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDBFNDAKKyNkZWZpbmUgICBTXzAwMEU0MF9DTURGSUZPX0FWQUlMKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0YpIDw8IDApCisjZGVmaW5lICAgR18wMDBFNDBfQ01ERklGT19BVkFJTCh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGKQorI2RlZmluZSAgIENfMDAwRTQwX0NNREZJRk9fQVZBSUwgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODAKKyNkZWZpbmUgICBTXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMEU0MF9ISVJRX09OX1JCQiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRUZGCisjZGVmaW5lICAgU18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDkpCisjZGVmaW5lICAgR18wMDBFNDBfQ1BSUV9PTl9SQkIoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkRGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfT05fUkJCKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX09OX1JCQih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9PTl9SQkIgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDAwRTQwX0hJUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9ISVJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfSElSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUFJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRUZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGUlFfSU5fUlRCVUYoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMykKKyNkZWZpbmUgICBHXzAwMEU0MF9DRlJRX0lOX1JUQlVGKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZSUV9JTl9SVEJVRiAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGREZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NGX1BJUEVfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9DRl9QSVBFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0ZfUElQRV9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0VOR19FVl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9FTkdfRVZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRU5HX0VWX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NQX0NNRFNUUk1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwMEU0MF9DUF9DTURTVFJNX0JVU1koeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ1BfQ01EU1RSTV9CVVNZICAgICAgICAgICAgICAgICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0UyX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNykKKyNkZWZpbmUgICBHXzAwMEU0MF9FMl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfRTJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZERkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCMkRfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIyRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZCRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCM0RfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQjNEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkIzRF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY3RkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JFX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9SRV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkVfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RBTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMEU0MF9UQU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVEFNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RETV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAwMEU0MF9URE1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVERNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1BCX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMEU0MF9QQl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUEJfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1RJTV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAwMEU0MF9USU1fQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVElNX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dBX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAwMEU0MF9HQV9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR0FfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0NCQTJEX0JVU1koeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAwMEU0MF9DQkEyRF9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfQ0JBMkRfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1JCQk1fSElCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAwMEU0MF9SQkJNX0hJQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfUkJCTV9ISUJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhFRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1NLSURfQ0ZCVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyOSkKKyNkZWZpbmUgICBHXzAwMEU0MF9TS0lEX0NGQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfU0tJRF9DRkJVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhERkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX1ZBUF9WRl9CVVNZKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMCkKKyNkZWZpbmUgICBHXzAwMEU0MF9WQVBfVkZfQlVTWSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfVkFQX1ZGX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgMHhCRkZGRkZGRgorI2RlZmluZSAgIFNfMDAwRTQwX0dVSV9BQ1RJVkUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAwMEU0MF9HVUlfQUNUSVZFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDBFNDBfR1VJX0FDVElWRSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAwNjA4MF9EMUNSVENfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAweDAwNjA4MAorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4oeCkgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MDgwX0QxQ1JUQ19NQVNURVJfRU4gICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjA4MF9EMUNSVENfU1lOQ19SRVNFVF9TRUwgICAgICAgICAgICAgICAweEZGRkZGRkVGCisjZGVmaW5lICAgU18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCh4KSAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU0FCTEVfUE9JTlRfQ05UTCAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSh4KSAgICgoKHgpICYgMHgxKSA8PCAxNikKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSA+PiAxNikgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFICAgICAgMHhGRkZFRkZGRgorI2RlZmluZSAgIFNfMDA2MDgwX0QxQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFKHgpICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwNjA4MF9EMUNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDYwODBfRDFDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUgICAgMHhGRUZGRkZGRgorI2RlZmluZSBSXzAwNjBFOF9EMUNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweDAwNjBFOAorI2RlZmluZSAgIFNfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyh4KSAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDA2MEU4X0QxQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgUl8wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICAgICAgMHgwMDYxMTAKKyNkZWZpbmUgICBTXzAwNjExMF9EMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MoeCkgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMTBfRDFHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTEwX0QxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgMHgwMDYxMTgKKyNkZWZpbmUgICBTXzAwNjExOF9EMUdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDYxMThfRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA2MTE4X0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMDY4ODBfRDJDUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgMHgwMDY4ODAKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjg4MF9EMkNSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDY4ODBfRDJDUlRDX1NZTkNfUkVTRVRfU0VMICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorI2RlZmluZSAgIEdfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwoeCkgICAgICAgICgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNBQkxFX1BPSU5UX0NOVEwgICAgICAgICAgIDB4RkZGRkZDRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfQ1VSUkVOVF9NQVNURVJfRU5fU1RBVEUoeCkgICAoKCh4KSAmIDB4MSkgPDwgMTYpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0NVUlJFTlRfTUFTVEVSX0VOX1NUQVRFKHgpICAgKCgoeCkgPj4gMTYpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19DVVJSRU5UX01BU1RFUl9FTl9TVEFURSAgICAgIDB4RkZGRUZGRkYKKyNkZWZpbmUgICBTXzAwNjg4MF9EMkNSVENfRElTUF9SRUFEX1JFUVVFU1RfRElTQUJMRSh4KSAoKCh4KSAmIDB4MSkgPDwgMjQpCisjZGVmaW5lICAgR18wMDY4ODBfRDJDUlRDX0RJU1BfUkVBRF9SRVFVRVNUX0RJU0FCTEUoeCkgKCgoeCkgPj4gMjQpICYgMHgxKQorI2RlZmluZSAgIENfMDA2ODgwX0QyQ1JUQ19ESVNQX1JFQURfUkVRVUVTVF9ESVNBQkxFICAgIDB4RkVGRkZGRkYKKyNkZWZpbmUgUl8wMDY4RThfRDJDUlRDX1VQREFURV9MT0NLICAgICAgICAgICAgICAgICAgMHgwMDY4RTgKKyNkZWZpbmUgICBTXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0soeCkgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwNjhFOF9EMkNSVENfVVBEQVRFX0xPQ0sgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAgIDB4MDA2OTEwCisjZGVmaW5lICAgU18wMDY5MTBfRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTKHgpICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTEwX0QyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyh4KSAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxMF9EMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICAgIDB4MDA2OTE4CisjZGVmaW5lICAgU18wMDY5MThfRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MoeCkgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA2OTE4X0QyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKHgpICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwNjkxOF9EMkdSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyAgICAweDAwMDAwMDAwCiAKKworI2RlZmluZSBSXzAwMDAwMV9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMQorI2RlZmluZSAgIFNfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAxX01DX0ZCX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjAwMDAKKyNkZWZpbmUgICBTXzAwMDAwMV9NQ19GQl9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMTYpCisjZGVmaW5lICAgR18wMDAwMDFfTUNfRkJfVE9QKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZSAgIENfMDAwMDAxX01DX0ZCX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMEZGRkYKKyNkZWZpbmUgUl8wMDAwMDJfTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIKKyNkZWZpbmUgICBTXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwMl9NQ19BR1BfU1RBUlQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwCisjZGVmaW5lICAgU18wMDAwMDJfTUNfQUdQX1RPUCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkYpIDw8IDE2KQorI2RlZmluZSAgIEdfMDAwMDAyX01DX0FHUF9UT1AoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE2KSAmIDB4RkZGRikKKyNkZWZpbmUgICBDXzAwMDAwMl9NQ19BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFJfMDAwMDAzX01DX0FHUF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAzCisjZGVmaW5lICAgU18wMDAwMDNfQUdQX0JBU0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDAzX0FHUF9CQVNFX0FERFIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwMDAwM19BR1BfQkFTRV9BRERSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDAwMDA0X01DX0FHUF9CQVNFXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0CisjZGVmaW5lICAgU18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMDRfQUdQX0JBU0VfQUREUl8yKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEYpCisjZGVmaW5lICAgQ18wMDAwMDRfQUdQX0JBU0VfQUREUl8yICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMAorCisKKyNkZWZpbmUgUl8wMDAwMEZfQ1BfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMEYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMykKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkY3CisjZGVmaW5lICAgU18wMDAwMEZfQ1BfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCA0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAwRl9DUF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgICAweEZGRkZGMDBGCisjZGVmaW5lICAgU18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxMikKKyNkZWZpbmUgICBHXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAgIDB4RkZGMDBGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjApCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgIDB4RkZFRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMjEpCisjZGVmaW5lICAgR18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgKCgoeCkgPj4gMjEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAgIDB4RkZERkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMjIpCisjZGVmaW5lICAgR18wMDAwMEZfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjIpICYgMHgzKQorI2RlZmluZSAgIENfMDAwMDBGX1NQQVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYzRkZGRkYKKyNkZWZpbmUgICBTXzAwMDAwRl9DUF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQorI2RlZmluZSAgIEdfMDAwMDBGX0NQX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpID4+IDI0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMEZfQ1BfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgICAgMHgwMEZGRkZGRgorI2RlZmluZSBSXzAwMDAxMV9FMl9EWU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMQorI2RlZmluZSAgIFNfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAwKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0ZPUkNFT04oeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX0ZPUkNFT04gICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkUKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9NQVhfRFlOX1NUT1BfTEFUICAgICAgICAgICAgICAgICAweEZGRkZGRkZECisjZGVmaW5lICAgU18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfQ0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQgorI2RlZmluZSAgIFNfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX1BST0dfU0hVVE9GRih4KSAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfU0hVVE9GRiAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjcKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9QUk9HX0RFTEFZX1ZBTFVFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDExX0UyX1BST0dfREVMQVlfVkFMVUUgICAgICAgICAgICAgICAgIDB4RkZGRkYwMEYKKyNkZWZpbmUgICBTXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDEyKQorI2RlZmluZSAgIEdfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lETEUoeCkgICAgICAgICAgICAgICgoKHgpID4+IDEyKSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSURMRSAgICAgICAgICAgICAgICAgMHhGRkYwMEZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX0xPV0VSX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTE9XRVJfUE9XRVJfSUdOT1JFICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAyMikKKyNkZWZpbmUgICBHXzAwMDAxMV9TUEFSRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDMpCisjZGVmaW5lICAgQ18wMDAwMTFfU1BBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRjNGRkZGRgorI2RlZmluZSAgIFNfMDAwMDExX0UyX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCisjZGVmaW5lICAgR18wMDAwMTFfRTJfTk9STUFMX1BPV0VSX0JVU1koeCkgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxMV9FMl9OT1JNQUxfUE9XRVJfQlVTWSAgICAgICAgICAgICAgICAweDAwRkZGRkZGCisjZGVmaW5lIFJfMDAwMDEzX0lEQ1RfRFlOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDEzCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9GT1JDRU9OKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9GT1JDRU9OICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCh4KSAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTUFYX0RZTl9TVE9QX0xBVCAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyh4KSAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0NMT0NLX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYoeCkgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX1NIVVRPRkYgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfUFJPR19ERUxBWV9WQUxVRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX1BST0dfREVMQVlfVkFMVUUoeCkgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4RkYpCisjZGVmaW5lICAgQ18wMDAwMTNfSURDVF9QUk9HX0RFTEFZX1ZBTFVFICAgICAgICAgICAgICAgMHhGRkZGRjAwRgorI2RlZmluZSAgIFNfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSURMRSh4KSAgICAgICAgICAgICgoKHgpICYgMHhGRikgPDwgMTIpCisjZGVmaW5lICAgR18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JRExFKHgpICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGRikKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lETEUgICAgICAgICAgICAgICAweEZGRjAwRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9MT1dFUl9QT1dFUl9JR05PUkUoeCkgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIwKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTE9XRVJfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgICgoKHgpID4+IDIwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX0xPV0VSX1BPV0VSX0lHTk9SRSAgICAgICAgICAgICAweEZGRUZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfSUdOT1JFKHgpICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDIxKQorI2RlZmluZSAgIEdfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0lHTk9SRSh4KSAgICAgICAgICgoKHgpID4+IDIxKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9JR05PUkUgICAgICAgICAgICAweEZGREZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfU1BBUkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIyKQorI2RlZmluZSAgIEdfMDAwMDEzX1NQQVJFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIyKSAmIDB4MykKKyNkZWZpbmUgICBDXzAwMDAxM19TUEFSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGM0ZGRkZGCisjZGVmaW5lICAgU18wMDAwMTNfSURDVF9OT1JNQUxfUE9XRVJfQlVTWSh4KSAgICAgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAwMDAxM19JRENUX05PUk1BTF9QT1dFUl9CVVNZKHgpICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweEZGKQorI2RlZmluZSAgIENfMDAwMDEzX0lEQ1RfTk9STUFMX1BPV0VSX0JVU1kgICAgICAgICAgICAgIDB4MDBGRkZGRkYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKaW5kZXggYjU3NGM3My4uYjBlZmQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJydjc3MGQuaCIKLSNpbmNsdWRlICJhdml2b2QuaCIKICNpbmNsdWRlICJhdG9tLmgiCisjaW5jbHVkZSAiYXZpdm9kLmgiCiAKICNkZWZpbmUgUjcwMF9QRlBfVUNPREVfU0laRSA4NDgKICNkZWZpbmUgUjcwMF9QTTRfVUNPREVfU0laRSAxMzYwCkBAIC03NSw3ICs3NSw3IEBACiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOwogCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCByZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIsIHJkZXYtPmdhcnQudGFibGVfYWRkciA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwsIEVOQUJMRV9DT05URVhUIHwgUEFHRV9UQUJMRV9ERVBUSCgwKSB8CiAJCQkJUkFOR0VfUFJPVEVDVElPTl9GQVVMVF9FTkFCTEVfREVGQVVMVCk7CkBAIC0xMjYsMTcgKzEyNiwzNiBAQAogfQogCiAKLS8qCi0gKiBNQwotICovCi1zdGF0aWMgdm9pZCBydjc3MF9tY19yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NzcwX2FncF9lbmFibGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIGQxdmdhX2NvbnRyb2wsIGQydmdhX2NvbnRyb2w7Ci0JdTMyIHZnYV9yZW5kZXJfY29udHJvbCwgdmdhX2hkcF9jb250cm9sOwotCXUzMiBkMWNydGNfY29udHJvbCwgZDJjcnRjX2NvbnRyb2w7Ci0JdTMyIG5ld19kMWdycGhfcHJpbWFyeSwgbmV3X2QxZ3JwaF9zZWNvbmRhcnk7Ci0JdTMyIG5ld19kMmdycGhfcHJpbWFyeSwgbmV3X2QyZ3JwaF9zZWNvbmRhcnk7Ci0JdTY0IG9sZF92cmFtX3N0YXJ0OworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKworc3RhdGljIHZvaWQgcnY3NzBfbWNfcHJvZ3JhbShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcnY1MTVfbWNfc2F2ZSBzYXZlOwogCXUzMiB0bXA7CiAJaW50IGksIGo7CiAKQEAgLTE1MCw1MyArMTY5LDQyIEBACiAJfQogCVdSRUczMihIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAwKTsKIAotCWQxdmdhX2NvbnRyb2wgPSBSUkVHMzIoRDFWR0FfQ09OVFJPTCk7Ci0JZDJ2Z2FfY29udHJvbCA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKLQl2Z2FfcmVuZGVyX2NvbnRyb2wgPSBSUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MKTsKLQl2Z2FfaGRwX2NvbnRyb2wgPSBSUkVHMzIoVkdBX0hEUF9DT05UUk9MKTsKLQlkMWNydGNfY29udHJvbCA9IFJSRUczMihEMUNSVENfQ09OVFJPTCk7Ci0JZDJjcnRjX2NvbnRyb2wgPSBSUkVHMzIoRDJDUlRDX0NPTlRST0wpOwotCW9sZF92cmFtX3N0YXJ0ID0gKHU2NCkoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7Ci0JbmV3X2QxZ3JwaF9wcmltYXJ5ID0gUlJFRzMyKEQxR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyk7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgPSBSUkVHMzIoRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMWdycGhfcHJpbWFyeSArPSByZGV2LT5tYy52cmFtX3N0YXJ0IC0gb2xkX3ZyYW1fc3RhcnQ7Ci0JbmV3X2QxZ3JwaF9zZWNvbmRhcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfcHJpbWFyeSA9IFJSRUczMihEMkdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MpOwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ID0gUlJFRzMyKEQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTKTsKLQluZXdfZDJncnBoX3ByaW1hcnkgKz0gcmRldi0+bWMudnJhbV9zdGFydCAtIG9sZF92cmFtX3N0YXJ0OwotCW5ld19kMmdycGhfc2Vjb25kYXJ5ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQgLSBvbGRfdnJhbV9zdGFydDsKLQotCS8qIFN0b3AgYWxsIHZpZGVvICovCi0JV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOwotCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKLQlXUkVHMzIoVkdBX1JFTkRFUl9DT05UUk9MLCAwKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIDApOwotCVdSRUczMihEMkNSVENfQ09OVFJPTCwgMCk7Ci0JV1JFRzMyKEQxQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0JV1JFRzMyKEQyQ1JUQ19VUERBVEVfTE9DSywgMCk7Ci0KLQltZGVsYXkoMSk7CisJcnY1MTVfbWNfc3RvcChyZGV2LCAmc2F2ZSk7CiAJaWYgKHI2MDBfbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJbZHJtXSBNQyBub3QgaWRsZSAhXG4iKTsKKwkJZGV2X3dhcm4ocmRldi0+ZGV2LCAiV2FpdCBmb3IgTUMgaWRsZSB0aW1lZG91dCAhXG4iKTsKIAl9Ci0KIAkvKiBMb2Nrb3V0IGFjY2VzcyB0aHJvdWdoIFZHQSBhcGVydHVyZSovCiAJV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgVkdBX01FTU9SWV9ESVNBQkxFKTsKLQogCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCi0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7Ci0JV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsIChyZGV2LT5tYy52cmFtX2VuZCAtIDEpID4+IDEyKTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWlmIChyZGV2LT5tYy52cmFtX3N0YXJ0IDwgcmRldi0+bWMuZ3R0X3N0YXJ0KSB7CisJCQkvKiBWUkFNIGJlZm9yZSBBR1AgKi8KKwkJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfZW5kID4+IDEyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFZSQU0gYWZ0ZXIgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQlyZGV2LT5tYy52cmFtX2VuZCA+PiAxMik7CisJCX0KKwl9IGVsc2UgeworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJcmRldi0+bWMudnJhbV9zdGFydCA+PiAxMik7CisJCVdSRUczMihNQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLAorCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCX0KIAlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiwgMCk7Ci0JdG1wID0gKCgocmRldi0+bWMudnJhbV9lbmQgLSAxKSA+PiAyNCkgJiAweEZGRkYpIDw8IDE2OworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKIAl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CiAJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOwogCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CiAJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKIAlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIChyZGV2LT5tYy5ndHRfZW5kIC0gMSkgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX1RPUCwgcmRldi0+bWMuZ3R0X2VuZCA+PiAxNik7CiAJCVdSRUczMihNQ19WTV9BR1BfQk9ULCByZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JBU0UsIHJkZXYtPm1jLmFncF9iYXNlID4+IDIyKTsKIAl9IGVsc2UgewpAQCAtMjA0LDM0ICsyMTIsMTMgQEAKIAkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOwogCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CiAJfQotCVdSRUczMihEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMWdycGhfcHJpbWFyeSk7Ci0JV1JFRzMyKEQxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTLCBuZXdfZDFncnBoX3NlY29uZGFyeSk7Ci0JV1JFRzMyKEQyR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUywgbmV3X2QyZ3JwaF9wcmltYXJ5KTsKLQlXUkVHMzIoRDJHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MsIG5ld19kMmdycGhfc2Vjb25kYXJ5KTsKLQlXUkVHMzIoVkdBX01FTU9SWV9CQVNFX0FERFJFU1MsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwotCi0JLyogVW5sb2NrIGhvc3QgYWNjZXNzICovCi0JV1JFRzMyKFZHQV9IRFBfQ09OVFJPTCwgdmdhX2hkcF9jb250cm9sKTsKLQotCW1kZWxheSgxKTsKIAlpZiAocjYwMF9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIltkcm1dIE1DIG5vdCBpZGxlICFcbiIpOworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOwogCX0KLQotCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAxKTsKLQlXUkVHMzIoRDFDUlRDX0NPTlRST0wsIGQxY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDJDUlRDX0NPTlRST0wsIGQyY3J0Y19jb250cm9sKTsKLQlXUkVHMzIoRDFDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDJDUlRDX1VQREFURV9MT0NLLCAwKTsKLQlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgZDF2Z2FfY29udHJvbCk7Ci0JV1JFRzMyKEQyVkdBX0NPTlRST0wsIGQydmdhX2NvbnRyb2wpOwotCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIHZnYV9yZW5kZXJfY29udHJvbCk7Ci0KKwlydjUxNV9tY19yZXN1bWUocmRldiwgJnNhdmUpOwogCS8qIHdlIG5lZWQgdG8gb3duIFZSQU0sIHNvIHR1cm4gb2ZmIHRoZSBWR0EgcmVuZGVyZXIgaGVyZQogCSAqIHRvIHN0b3AgaXQgb3ZlcndyaXRpbmcgb3VyIG9iamVjdHMgKi8KLQlyYWRlb25fYXZpdm9fdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworCXJ2NTE1X3ZnYV9yZW5kZXJfZGlzYWJsZShyZGV2KTsKIH0KIAogCkBAIC01NDIsMTEgKzUyOSwxMSBAQAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQU5LX1RJTElORygxKTsKIAllbHNlCi0JCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19TSElGVCkgPj4gTk9PRkJBTktfTUFTSyk7CisJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoKG1jX2FyYl9yYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEdST1VQX1NJWkUoMCk7CiAKLQlpZiAoKChtY19hcmJfcmFtY2ZnICYgTk9PRlJPV1NfTUFTSykgJiBOT09GUk9XU19TSElGVCkgPiAzKSB7CisJaWYgKCgobWNfYXJiX3JhbWNmZyAmIE5PT0ZST1dTX01BU0spID4+IE5PT0ZST1dTX1NISUZUKSA+IDMpIHsKIAkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBST1dfVElMSU5HKDMpOwogCQlnYl90aWxpbmdfY29uZmlnIHw9IFNBTVBMRV9TUExJVCgzKTsKIAl9IGVsc2UgewpAQCAtNTkyLDE0ICs1NzksMTQgQEAKIAogCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCiAJV1JFRzMyKENQX1FVRVVFX1RIUkVTSE9MRFMsIChST1FfSUIxX1NUQVJUKDB4MTYpIHwKLQkJCQkJCVJPUV9JQjJfU1RBUlQoMHgyYikpKTsKKwkJCQkgICAgIFJPUV9JQjJfU1RBUlQoMHgyYikpKTsKIAogCVdSRUczMihDUF9NRVFfVEhSRVNIT0xEUywgU1RRX1NQTElUKDB4MzApKTsKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgKERJU0FCTEVfQ1VCRV9BTklTTyB8Ci0JCQkJCVNZTkNfR1JBRElFTlQgfAotCQkJCQlTWU5DX1dBTEtFUiB8Ci0JCQkJCVNZTkNfQUxJR05FUikpOworCQkJICAgICBTWU5DX0dSQURJRU5UIHwKKwkJCSAgICAgU1lOQ19XQUxLRVIgfAorCQkJICAgICBTWU5DX0FMSUdORVIpKTsKIAogCXN4X2RlYnVnXzEgPSBSUkVHMzIoU1hfREVCVUdfMSk7CiAJc3hfZGVidWdfMSB8PSBFTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtNjExLDkgKzU5OCw5IEBACiAJV1JFRzMyKFNNWF9EQ19DVEwwLCBzbXhfZGNfY3RsMCk7CiAKIAlXUkVHMzIoU01YX0VWRU5UX0NUTCwgKEVTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgR1NfRkxVU0hfQ1RMKDQpIHwKLQkJCQkJICBBQ0tfRkxVU0hfQ1RMKDMpIHwKLQkJCQkJICBTWU5DX0ZMVVNIX0NUTCkpOworCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8CisJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKIAogCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SVjc3MCkKIAkJV1JFRzMyKERCX0RFQlVHMywgREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7CkBAIC02MjQsMTIgKzYxMSwxMiBAQAogCX0KIAogCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJCSAgIFBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAotCQkJCQkJICAgU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcucnY3NzAuc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9tYXhfZXhwb3J0X3Bvc19zaXplIC8gNCkgLSAxKSB8CisJCQkJCVNNWF9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLnJ2NzcwLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CiAKIAlXUkVHMzIoUEFfU0NfRklGT19TSVpFLCAoU0NfUFJJTV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKLQkJCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLnJ2NzcwLnNjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSkpKTsKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkgU0NfRUFSTFlaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5ydjc3MC5zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CiAKIAlXUkVHMzIoUEFfU0NfTVVMVElfQ0hJUF9DTlRMLCAwKTsKIApAQCAtNzg3LDIwICs3NzQsNDkgQEAKIHsKIAlmaXhlZDIwXzEyIGE7CiAJdTMyIHRtcDsKKwlpbnQgY2hhbnNpemUsIG51bWNoYW47CiAJaW50IHI7CiAKIAkvKiBHZXQgVlJBTSBpbmZvcm1hdGlvbnMgKi8KLQkvKiBGSVhNRTogRG9uJ3Qga25vdyBob3cgdG8gZGV0ZXJtaW5lIHZyYW0gd2lkdGgsIG5lZWQgdG8gY2hlY2sKLQkgKiB2cmFtX3dpZHRoIHVzYWdlCi0JICovCi0JcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsKIAlyZGV2LT5tYy52cmFtX2lzX2RkciA9IHRydWU7CisJdG1wID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOworCWlmICh0bXAgJiBDSEFOU0laRV9PVkVSUklERSkgeworCQljaGFuc2l6ZSA9IDE2OworCX0gZWxzZSBpZiAodG1wICYgQ0hBTlNJWkVfTUFTSykgeworCQljaGFuc2l6ZSA9IDY0OworCX0gZWxzZSB7CisJCWNoYW5zaXplID0gMzI7CisJfQorCXRtcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOworCXN3aXRjaCAoKHRtcCAmIE5PT0ZDSEFOX01BU0spID4+IE5PT0ZDSEFOX1NISUZUKSB7CisJY2FzZSAwOgorCWRlZmF1bHQ6CisJCW51bWNoYW4gPSAxOworCQlicmVhazsKKwljYXNlIDE6CisJCW51bWNoYW4gPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCW51bWNoYW4gPSA0OworCQlicmVhazsKKwljYXNlIDM6CisJCW51bWNoYW4gPSA4OworCQlicmVhazsKKwl9CisJcmRldi0+bWMudnJhbV93aWR0aCA9IG51bWNoYW4gKiBjaGFuc2l6ZTsKIAkvKiBDb3VsZCBhcGVyIHNpemUgcmVwb3J0IDAgPyAqLwogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7CiAJLyogU2V0dXAgR1BVIG1lbW9yeSBzcGFjZSAqLwogCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSk7CiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOworCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKKwkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCisJaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQorCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCkBAIC04MzMsOSArODQ5LDkgQEAKIAkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQogCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52cmFtX2VuZCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemUgLSAxOwogCXJkZXYtPm1jLmd0dF9zdGFydCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKLQlyZGV2LT5tYy5ndHRfZW5kID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemU7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKIAkvKiBGSVhNRTogd2Ugc2hvdWxkIGVuZm9yY2UgZGVmYXVsdCBjbG9jayBpbiBjYXNlIEdQVSBpcyBub3QgaW4KIAkgKiBkZWZhdWx0IHNldHVwCiAJICovCkBAIC04NTQsMTEgKzg3MCwxNCBAQAogewogCWludCByOwogCi0JcmFkZW9uX2dwdV9yZXNldChyZGV2KTsKLQlydjc3MF9tY19yZXN1bWUocmRldik7Ci0JciA9IHJ2NzcwX3BjaWVfZ2FydF9lbmFibGUocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCXJ2NzcwX21jX3Byb2dyYW0ocmRldik7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlydjc3MF9hZ3BfZW5hYmxlKHJkZXYpOworCX0gZWxzZSB7CisJCXIgPSBydjc3MF9wY2llX2dhcnRfZW5hYmxlKHJkZXYpOworCQlpZiAocikKKwkJCXJldHVybiByOworCX0KIAlydjc3MF9ncHVfaW5pdChyZGV2KTsKIAogCXIgPSByYWRlb25fb2JqZWN0X3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTg3Nyw5ICs4OTYsOCBAQAogCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7Ci0JciA9IHI2MDBfd2JfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4NywxNSArOTA1LDEyIEBACiB7CiAJaW50IHI7CiAKLQlpZiAocmFkZW9uX2dwdV9yZXNldChyZGV2KSkgewotCQkvKiBGSVhNRTogd2hhdCBkbyB3ZSB3YW50IHRvIGRvIGhlcmUgPyAqLwotCX0KKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KIAkvKiBwb3N0IGNhcmQgKi8KLQlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7Ci0JCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOwotCX0gZWxzZSB7Ci0JCXJhZGVvbl9jb21iaW9zX2FzaWNfaW5pdChyZGV2LT5kZGV2KTsKLQl9CisJYXRvbV9hc2ljX2luaXQocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCk7CiAJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyID0gcmFkZW9uX2Nsb2Nrc19pbml0KHJkZXYpOwogCWlmIChyKSB7CkBAIC05MDgsNyArOTIzLDcgQEAKIAkJcmV0dXJuIHI7CiAJfQogCi0JciA9IHJhZGVvbl9pYl90ZXN0KHJkZXYpOworCXIgPSByNjAwX2liX3Rlc3QocmRldik7CiAJaWYgKHIpIHsKIAkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtOTIyLDggKzkzNyw4IEBACiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwogCXJkZXYtPmNwLnJlYWR5ID0gZmFsc2U7CisJcjYwMF93Yl9kaXNhYmxlKHJkZXYpOwogCXJ2NzcwX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwotCiAJLyogdW5waW4gc2hhZGVycyBibyAqLwogICAgICAgICByYWRlb25fb2JqZWN0X3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyZXR1cm4gMDsKQEAgLTkzOSw3ICs5NTQsNiBAQAogewogCWludCByOwogCi0JcmRldi0+bmV3X2luaXRfcGF0aCA9IHRydWU7CiAJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtOTUzLDggKzk2NywxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIE11c3QgYmUgYW4gQVRPTUJJT1MgKi8KLQlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykgeworCQlkZXZfZXJyKHJkZXYtPmRldiwgIkV4cGVjdGluZyBhdG9tYmlvcyBmb3IgUjYwMCBHUFVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJciA9IHJhZGVvbl9hdG9tYmlvc19pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTk2NywyNCArOTgzLDIwIEBACiAJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLwogCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHJ2NzcwX21jX2luaXQocmRldik7Ci0JaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCWlmIChyKQogCQlyZXR1cm4gcjsKLQl9CiAJLyogTWVtb3J5IG1hbmFnZXIgKi8KIAlyID0gcmFkZW9uX29iamVjdF9pbml0KHJkZXYpOwogCWlmIChyKQpAQCAtMTAxMywxMiArMTAyNSwxMCBAQAogCiAJciA9IHJ2NzcwX3N0YXJ0dXAocmRldik7CiAJaWYgKHIpIHsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQkJLyogUmV0cnkgd2l0aCBkaXNhYmxpbmcgQUdQICovCi0JCQlydjc3MF9maW5pKHJkZXYpOwotCQkJcmRldi0+ZmxhZ3MgJj0gflJBREVPTl9JU19BR1A7Ci0JCQlyZXR1cm4gcnY3NzBfaW5pdChyZGV2KTsKLQkJfQorCQlydjc3MF9zdXNwZW5kKHJkZXYpOworCQlyNjAwX3diX2ZpbmkocmRldik7CisJCXJhZGVvbl9yaW5nX2ZpbmkocmRldik7CisJCXJ2NzcwX3BjaWVfZ2FydF9maW5pKHJkZXYpOwogCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CiAJfQogCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CkBAIC0xMDI3LDcgKzEwMzcsNyBAQAogCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgaW5pdGlhbGl6aW5nIElCIHBvb2wgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwogCQl9Ci0JCXIgPSByYWRlb25faWJfdGVzdChyZGV2KTsKKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKIAkJaWYgKHIpIHsKIAkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsbGVkIHRlc3RpbmcgSUIgKCVkKS5cbiIsIHIpOwogCQkJcmRldi0+YWNjZWxfd29ya2luZyA9IGZhbHNlOwpAQCAtMTA0MiwyMCArMTA1MiwxNSBAQAogCiAJcjYwMF9ibGl0X2ZpbmkocmRldik7CiAJcmFkZW9uX3JpbmdfZmluaShyZGV2KTsKKwlyNjAwX3diX2ZpbmkocmRldik7CiAJcnY3NzBfcGNpZV9nYXJ0X2ZpbmkocmRldik7CiAJcmFkZW9uX2dlbV9maW5pKHJkZXYpOwogCXJhZGVvbl9mZW5jZV9kcml2ZXJfZmluaShyZGV2KTsKIAlyYWRlb25fY2xvY2tzX2ZpbmkocmRldik7Ci0jaWYgX19PU19IQVNfQUdQCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJcmFkZW9uX2FncF9maW5pKHJkZXYpOwotI2VuZGlmCiAJcmFkZW9uX29iamVjdF9maW5pKHJkZXYpOwotCWlmIChyZGV2LT5pc19hdG9tX2Jpb3MpIHsKLQkJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7Ci0JfSBlbHNlIHsKLQkJcmFkZW9uX2NvbWJpb3NfZmluaShyZGV2KTsKLQl9CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CiAJa2ZyZWUocmRldi0+Ymlvcyk7CiAJcmRldi0+YmlvcyA9IE5VTEw7CiAJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IDRiOWMzZDYuLmExMzY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtMTI5LDYgKzEyOSwxMCBAQAogI2RlZmluZSBIRFBfUkVHX0NPSEVSRU5DWV9GTFVTSF9DTlRMCQkJMHg1NEEwCiAjZGVmaW5lCUhEUF9USUxJTkdfQ09ORklHCQkJCTB4MkYzQwogCisjZGVmaW5lIE1DX1NIQVJFRF9DSE1BUAkJCQkJCTB4MjAwNAorI2RlZmluZQkJTk9PRkNIQU5fU0hJRlQJCQkJCTEyCisjZGVmaW5lCQlOT09GQ0hBTl9NQVNLCQkJCQkweDAwMDAzMDAwCisKICNkZWZpbmUJTUNfQVJCX1JBTUNGRwkJCQkJMHgyNzYwCiAjZGVmaW5lCQlOT09GQkFOS19TSElGVAkJCQkJMAogI2RlZmluZQkJTk9PRkJBTktfTUFTSwkJCQkJMHgwMDAwMDAwMwpAQCAtMTQyLDYgKzE0Niw3IEBACiAjZGVmaW5lCQlDSEFOU0laRV9NQVNLCQkJCQkweDAwMDAwMTAwCiAjZGVmaW5lCQlCVVJTVExFTkdUSF9TSElGVAkJCQk5CiAjZGVmaW5lCQlCVVJTVExFTkdUSF9NQVNLCQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUJCUNIQU5TSVpFX09WRVJSSURFCQkJCSgxIDw8IDExKQogI2RlZmluZQlNQ19WTV9BR1BfVE9QCQkJCQkweDIwMjgKICNkZWZpbmUJTUNfVk1fQUdQX0JPVAkJCQkJMHgyMDJDCiAjZGVmaW5lCU1DX1ZNX0FHUF9CQVNFCQkJCQkweDIwMzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9ib192bS5jCmluZGV4IDMzZGU3NjMuLjFjMDQwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm9fdm0uYwpAQCAtMjI4LDcgKzIyOCw3IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHR0bV9ib192bV9vcHMgPSB7CiAJLmZhdWx0ID0gdHRtX2JvX3ZtX2ZhdWx0LAogCS5vcGVuID0gdHRtX2JvX3ZtX29wZW4sCiAJLmNsb3NlID0gdHRtX2JvX3ZtX2Nsb3NlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9nbG9iYWwuYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCmluZGV4IDU0MTc0NGQuLmIxNzAwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2dsb2JhbC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQlnb3RvIG91dF9lcnI7CiAKLQkJKytpdGVtLT5yZWZjb3VudDsKIAl9CisJKytpdGVtLT5yZWZjb3VudDsKIAlyZWYtPm9iamVjdCA9IGl0ZW0tPm9iamVjdDsKIAlvYmplY3QgPSBpdGVtLT5vYmplY3Q7CiAJbXV0ZXhfdW5sb2NrKCZpdGVtLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwppbmRleCBhNTVlZTFhLi43YmNiODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKQEAgLTI3OSw2ICsyNzksNyBAQAogCiAJcmV0dXJuIHR0bV90dF9zZXRfY2FjaGluZyh0dG0sIHN0YXRlKTsKIH0KK0VYUE9SVF9TWU1CT0wodHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyk7CiAKIHN0YXRpYyB2b2lkIHR0bV90dF9mcmVlX2FsbG9jZWRfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKaW5kZXggYmUzNGQzMi4uN2QwNWM0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICogQHR5cGU6IEhJRCByZXBvcnQgdHlwZSAoSElEXypfUkVQT1JUKQogICogQGRhdGE6IHJlcG9ydCBjb250ZW50cwogICogQHNpemU6IHNpemUgb2YgZGF0YSBwYXJhbWV0ZXIKLSAqIEBpbnRlcnJ1cHQ6IGNhbGxlZCBmcm9tIGF0b21pYz8KKyAqIEBpbnRlcnJ1cHQ6IGRpc3Rpbmd1aXNoIGJldHdlZW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHRyYW5zZmVycwogICoKICAqIFRoaXMgaXMgZGF0YSBlbnRyeSBmb3IgbG93ZXIgbGF5ZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jIGIvZHJpdmVycy9oaWQvaGlkLXR3aW5oYW4uYwppbmRleCBiMDVmNjAyLi5jNDBhZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdHdpbmhhbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10d2luaGFuLmMKQEAgLTEzMiwxMiArMTMyLDEyIEBACiAJLmlucHV0X21hcHBpbmcgPSB0d2luaGFuX2lucHV0X21hcHBpbmcsCiB9OwogCi1zdGF0aWMgaW50IHR3aW5oYW5faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdHdpbmhhbl9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJnR3aW5oYW5fZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgdHdpbmhhbl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHdpbmhhbl9leGl0KHZvaWQpCiB7CiAJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZ0d2luaGFuX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDBjNjYzOWUuLmNkZDEzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9oaWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2hpZHJhdy5oPgpAQCAtNDcsMTAgKzQ4LDkgQEAKIAljaGFyICpyZXBvcnQ7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAKKwltdXRleF9sb2NrKCZsaXN0LT5yZWFkX211dGV4KTsKKwogCXdoaWxlIChyZXQgPT0gMCkgewotCi0JCW11dGV4X2xvY2soJmxpc3QtPnJlYWRfbXV0ZXgpOwotCiAJCWlmIChsaXN0LT5oZWFkID09IGxpc3QtPnRhaWwpIHsKIAkJCWFkZF93YWl0X3F1ZXVlKCZsaXN0LT5oaWRyYXctPndhaXQsICZ3YWl0KTsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjg1NzU2MC4uNzAwZTkzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNjc1LDcgKzY3NSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX1MzQwogCXRyaXN0YXRlICJTM0MyNFhYL1MzQzY0WFggSW5idWlsdCBBREMiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0M2NFhYCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIG9uLWJvYXJkIEFEQ3Mgb2YKIAkgIHRoZSBTYW1zdW5nIFMzQzI0WFggb3IgUzNDNjRYWCBzZXJpZXMgb2YgU29DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzUuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCmluZGV4IGQzOTg3N2EuLmI1YTk1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWR0NzQ3NS5jCkBAIC0zNTAsOCArMzUwLDcgQEAKIAogCWNhc2UgRkFVTFQ6CiAJCS8qIE5vdGUgLSBvbmx5IGZvciByZW1vdGUxIGFuZCByZW1vdGUyICovCi0JCW91dCA9IGRhdGEtPmFsYXJtcyAmIChzYXR0ci0+aW5kZXggPyAweDgwMDAgOiAweDQwMDApOwotCQlvdXQgPSBvdXQgPyAwIDogMTsKKwkJb3V0ID0gISEoZGF0YS0+YWxhcm1zICYgKHNhdHRyLT5pbmRleCA/IDB4ODAwMCA6IDB4NDAwMCkpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04NjMsNyArODYyLDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTFfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMCk7CkBAIC04NzUsNyArODc0LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTJfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAxKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMSk7CkBAIC04ODcsNyArODg2LDcgQEAKIAkJCSAgICBzZXRfcHdtZnJlcSwgSU5QVVQsIDIpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bTNfZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19wd21jdHJsLAogCQkJICAgIHNldF9wd21jdHJsLCBJTlBVVCwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVJVR08gfCBTX0lXVVNSLAogCQkJICAgIHNob3dfcHdtY2hhbiwgc2V0X3B3bWNoYW4sIElOUFVULCAyKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtLAogCQkJICAgIHNldF9wd20sIE1JTiwgMik7CkBAIC05NDcsMTkgKzk0NiwxOSBAQAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19mcmVxLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAogCU5VTEwsCkBAIC0xMTUyLDcgKzExNTEsNyBAQAogCX0KIAogCS8qIExpbWl0cyBhbmQgc2V0dGluZ3MsIHNob3VsZCBuZXZlciBjaGFuZ2UgdXBkYXRlIGV2ZXJ5IDYwIHNlY29uZHMgKi8KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogMikgfHwKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5saW1pdHNfdXBkYXRlZCArIEhaICogNjApIHx8CiAJICAgICFkYXRhLT52YWxpZCkgewogCQlkYXRhLT5jb25maWc1ID0gYWR0NzQ3NV9yZWFkKFJFR19DT05GSUc1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYyBiL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKaW5kZXggZmU0ZmEyOS4uNWEzZWUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCkBAIC0zNSwxOCArMzUsMjIgQEAKICNkZWZpbmUgTUVUSE9EX09MRF9FTlVNX0ZBTgkiRlNJRiIKIAogI2RlZmluZSBBVEtfTVVYX0hXTU9OCQkweDAwMDAwMDA2VUxMCisjZGVmaW5lIEFUS19NVVhfTUdNVAkJMHgwMDAwMDAxMVVMTAogCiAjZGVmaW5lIEFUS19DTEFTU19NQVNLCQkweGZmMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GUkVRX0NUTAkweDAzMDAwMDAwVUxMCiAjZGVmaW5lIEFUS19DTEFTU19GQU5fQ1RMCTB4MDQwMDAwMDBVTEwKICNkZWZpbmUgQVRLX0NMQVNTX0hXTU9OCQkweDA2MDAwMDAwVUxMCisjZGVmaW5lIEFUS19DTEFTU19NR01UCQkweDExMDAwMDAwVUxMCiAKICNkZWZpbmUgQVRLX1RZUEVfTUFTSwkJMHgwMGZmMDAwMFVMTAogI2RlZmluZSBIV01PTl9UWVBFX1ZPTFQJCTB4MDAwMjAwMDBVTEwKICNkZWZpbmUgSFdNT05fVFlQRV9URU1QCQkweDAwMDMwMDAwVUxMCiAjZGVmaW5lIEhXTU9OX1RZUEVfRkFOCQkweDAwMDQwMDAwVUxMCiAKLSNkZWZpbmUgSFdNT05fU0VOU09SX0lEX01BU0sJMHgwMDAwZmZmZlVMTAorI2RlZmluZSBBVEtfRUxFTUVOVF9JRF9NQVNLCTB4MDAwMGZmZmZVTEwKKworI2RlZmluZSBBVEtfRUNfSUQJCTB4MTEwNjAwMDRVTEwKIAogZW51bSBhdGtfcGFja19tZW1iZXIgewogCUhXTU9OX1BBQ0tfRkxBR1MsCkBAIC04OSw2ICs5Myw5IEBACiAJLyogbmV3IGludGVmYWNlICovCiAJYWNwaV9oYW5kbGUgZW51bWVyYXRlX2hhbmRsZTsKIAlhY3BpX2hhbmRsZSByZWFkX2hhbmRsZTsKKwlhY3BpX2hhbmRsZSB3cml0ZV9oYW5kbGU7CisKKwlib29sIGRpc2FibGVfZWM7CiAKIAlpbnQgdm9sdGFnZV9jb3VudDsKIAlpbnQgdGVtcGVyYXR1cmVfY291bnQ7CkBAIC0xMjksOSArMTM2LDIyIEBACiAJY2hhciBjb25zdCAqYWNwaV9uYW1lOwogfTsKIAotc3RydWN0IGF0a19hY3BpX2J1ZmZlcl91NjQgewotCXVuaW9uIGFjcGlfb2JqZWN0IGJ1ZjsKLQl1NjQgdmFsdWU7CisvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKKyAqIFswLTNdICJ2YWx1ZSIgaXMgdmFsaWQgZmxhZworICogWzQtN10gdmFsdWUKKyAqIFs4LSBdIHVua25vd24gc3R1ZmYgb24gbmV3ZXIgbW9ib3MKKyAqLworc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgeworCXUzMiBmbGFnczsKKwl1MzIgdmFsdWU7CisJdTggZGF0YVtdOworfTsKKworLyogSW5wdXQgYnVmZmVyIHVzZWQgZm9yIEdJVE0gYW5kIFNJVE0gbWV0aG9kcyAqLworc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiB7CisJdTMyIGlkOworCXUzMiBwYXJhbTE7CisJdTMyIHBhcmFtMjsKIH07CiAKIHN0YXRpYyBpbnQgYXRrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CkBAIC00MzksNTIgKzQ1OSwxNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfZ2dycChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsIHUxNiBtdXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKKwlhY3BpX3N0YXR1cyByZXQ7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOworCXVuaW9uIGFjcGlfb2JqZWN0IGlkOworCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOworCisJaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWlkLmludGVnZXIudmFsdWUgPSBtdXg7CisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZpZDsKKworCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkYXRhLT5lbnVtZXJhdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLCAmYnVmKTsKKwlpZiAocmV0ICE9IEFFX09LKSB7CisJCWRldl9lcnIoZGV2LCAiR0dSUFslI3hdIEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgbXV4LAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihyZXQpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCXBhY2sgPSBidWYucG9pbnRlcjsKKwlpZiAocGFjay0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQkvKiBFeGVjdXRpb24gd2FzIHN1Y2Nlc3NmdWwsIGJ1dCB0aGUgaWQgd2FzIG5vdCBmb3VuZCAqLworCQlBQ1BJX0ZSRUUocGFjayk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCWlmIChwYWNrLT5wYWNrYWdlLmNvdW50IDwgMSkgeworCQlkZXZfZXJyKGRldiwgIkdHUlBbJSN4XSBwYWNrYWdlIGlzIHRvbyBzbWFsbFxuIiwgbXV4KTsKKwkJQUNQSV9GUkVFKHBhY2spOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIHBhY2s7Cit9CisKK3N0YXRpYyB1bmlvbiBhY3BpX29iamVjdCAqYXRrX2dpdG0oc3RydWN0IGF0a19kYXRhICpkYXRhLCB1NjQgaWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJc3RydWN0IGF0a19hY3BpX2lucHV0X2J1ZiBidWY7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJYnVmLmlkID0gaWQ7CisJYnVmLnBhcmFtMSA9IDA7CisJYnVmLnBhcmFtMiA9IDA7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopJmJ1ZjsKKwl0bXAuYnVmZmVyLmxlbmd0aCA9IHNpemVvZihidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICh2b2lkICopJnRtcDsKKworCXJldC5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKKwkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJZGV2X3dhcm4oZGV2LCAiR0lUTVslI2xseF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBpZCwKKwkJCQlhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlvYmogPSByZXQucG9pbnRlcjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChvYmotPmJ1ZmZlci5sZW5ndGggPCA4KSB7CisJCWRldl93YXJuKGRldiwgIlVuZXhwZWN0ZWQgQVNCRiBsZW5ndGg6ICV1XG4iLAorCQkJCW9iai0+YnVmZmVyLmxlbmd0aCk7CisJCUFDUElfRlJFRShvYmopOworCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwl9CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHVuaW9uIGFjcGlfb2JqZWN0ICphdGtfc2l0bShzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEsCisJCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgKmJ1ZikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBwYXJhbXM7CisJdW5pb24gYWNwaV9vYmplY3QgdG1wOworCXN0cnVjdCBhY3BpX2J1ZmZlciByZXQ7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwl0bXAudHlwZSA9IEFDUElfVFlQRV9CVUZGRVI7CisJdG1wLmJ1ZmZlci5wb2ludGVyID0gKHU4ICopYnVmOworCXRtcC5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKCpidWYpOworCisJcGFyYW1zLmNvdW50ID0gMTsKKwlwYXJhbXMucG9pbnRlciA9ICZ0bXA7CisKKwlyZXQubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+d3JpdGVfaGFuZGxlLCBOVUxMLCAmcGFyYW1zLAorCQkJJnJldCwgQUNQSV9UWVBFX0JVRkZFUik7CisJaWYgKHN0YXR1cyAhPSBBRV9PSykgeworCQlkZXZfd2FybihkZXYsICJTSVRNWyUjeF0gQUNQSSBleGNlcHRpb246ICVzXG4iLCBidWYtPmlkLAorCQkJCWFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCW9iaiA9IHJldC5wb2ludGVyOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKG9iai0+YnVmZmVyLmxlbmd0aCA8IDgpIHsKKwkJZGV2X3dhcm4oZGV2LCAiVW5leHBlY3RlZCBBU0JGIGxlbmd0aDogJXVcbiIsCisJCQkJb2JqLT5idWZmZXIubGVuZ3RoKTsKKwkJQUNQSV9GUkVFKG9iaik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlyZXR1cm4gb2JqOworfQorCiBzdGF0aWMgaW50IGF0a19yZWFkX3ZhbHVlX25ldyhzdHJ1Y3QgYXRrX3NlbnNvcl9kYXRhICpzZW5zb3IsIHU2NCAqdmFsdWUpCiB7CiAJc3RydWN0IGF0a19kYXRhICpkYXRhID0gc2Vuc29yLT5kYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OwotCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgcmV0OwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwotCXN0cnVjdCBhdGtfYWNwaV9idWZmZXJfdTY0IHRtcDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqYnVmOworCWludCBlcnIgPSAwOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBzZW5zb3ItPmlkOworCW9iaiA9IGF0a19naXRtKGRhdGEsIHNlbnNvci0+aWQpOworCWlmIChJU19FUlIob2JqKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKIAotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQl0bXAuYnVmLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCXRtcC5idWYuYnVmZmVyLnBvaW50ZXIgPSAodTggKikmdG1wLnZhbHVlOwotCXRtcC5idWYuYnVmZmVyLmxlbmd0aCA9IHNpemVvZih1NjQpOwotCXJldC5sZW5ndGggPSBzaXplb2YodG1wKTsKLQlyZXQucG9pbnRlciA9ICZ0bXA7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5yZWFkX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZyZXQsIEFDUElfVFlQRV9CVUZGRVIpOwotCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKLQkJZGV2X3dhcm4oZGV2LCAiJXM6IEFDUEkgZXhjZXB0aW9uOiAlc1xuIiwgX19mdW5jX18sCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBSZXR1cm4gYnVmZmVyIGZvcm1hdDoKLQkgKiBbMC0zXSAidmFsdWUiIGlzIHZhbGlkIGZsYWcKLQkgKiBbNC03XSB2YWx1ZQotCSAqLwotCWlmICghKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYpKSB7CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoYnVmLT5mbGFncyA9PSAwKSB7CiAJCS8qIFRoZSByZWFkaW5nIGlzIG5vdCB2YWxpZCwgcG9zc2libGUgY2F1c2VzOgogCQkgKiAtIHNlbnNvciBmYWlsdXJlCiAJCSAqIC0gZW51bWVyYXRpb24gd2FzIEZVQkFSIChhbmQgd2UgZGlkbid0IG5vdGljZSkKIAkJICovCi0JCWRldl9pbmZvKGRldiwgIkZhaWx1cmU6ICUjbGx4XG4iLCB0bXAudmFsdWUpOwotCQlyZXR1cm4gLUVJTzsKKwkJZGV2X3dhcm4oZGV2LCAiUmVhZCBmYWlsZWQsIHNlbnNvciA9ICUjbGx4XG4iLCBzZW5zb3ItPmlkKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JKnZhbHVlID0gKHRtcC52YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgPj4gMzI7Ci0KLQlyZXR1cm4gMDsKKwkqdmFsdWUgPSBidWYtPnZhbHVlOworb3V0OgorCUFDUElfRlJFRShvYmopOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgYXRrX3JlYWRfdmFsdWUoc3RydWN0IGF0a19zZW5zb3JfZGF0YSAqc2Vuc29yLCB1NjQgKnZhbHVlKQpAQCAtNzEzLDQyICs4MjgsMTQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdGtfZWNfcHJlc2VudChzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7CisJdW5pb24gYWNwaV9vYmplY3QgKnBhY2s7CisJdW5pb24gYWNwaV9vYmplY3QgKmVjOworCWludCByZXQ7CisJaW50IGk7CisKKwlwYWNrID0gYXRrX2dncnAoZGF0YSwgQVRLX01VWF9NR01UKTsKKwlpZiAoSVNfRVJSKHBhY2spKSB7CisJCWlmIChQVFJfRVJSKHBhY2spID09IC1FTk9FTlQpIHsKKwkJCS8qIFRoZSBNR01UIGNsYXNzIGRvZXMgbm90IGV4aXN0cyAtIHRoYXQncyBvayAqLworCQkJZGV2X2RiZyhkZXYsICJDbGFzcyAlI2xseCBub3QgZm91bmRcbiIsIEFUS19NVVhfTUdNVCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKKwl9CisKKwkvKiBTZWFyY2ggdGhlIEVDICovCisJZWMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKKwkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOworCQl1bmlvbiBhY3BpX29iamVjdCAqaWQ7CisKKwkJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkKKwkJCWNvbnRpbnVlOworCisJCWlkID0gJm9iai0+cGFja2FnZS5lbGVtZW50c1swXTsKKwkJaWYgKGlkLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKQorCQkJY29udGludWU7CisKKwkJaWYgKGlkLT5pbnRlZ2VyLnZhbHVlID09IEFUS19FQ19JRCkgeworCQkJZWMgPSBvYmo7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldCA9IChlYyAhPSBOVUxMKTsKKwlpZiAoIXJldCkKKwkJLyogVGhlIHN5c3RlbSBoYXMgbm8gRUMgKi8KKwkJZGV2X2RiZyhkZXYsICJFQyBub3QgZm91bmRcbiIpOworCisJQUNQSV9GUkVFKHBhY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXRrX2VjX2VuYWJsZWQoc3RydWN0IGF0a19kYXRhICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkYXRhLT5hY3BpX2Rldi0+ZGV2OworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJc3RydWN0IGF0a19hY3BpX3JldF9idWZmZXIgKmJ1ZjsKKwlpbnQgZXJyOworCisJb2JqID0gYXRrX2dpdG0oZGF0YSwgQVRLX0VDX0lEKTsKKwlpZiAoSVNfRVJSKG9iaikpIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJYnVmID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKworCWlmIChidWYtPmZsYWdzID09IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcXVlcnkgRUMgc3RhdHVzXG4iKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQllcnIgPSAoYnVmLT52YWx1ZSAhPSAwKTsKKwkJZGV2X2RiZyhkZXYsICJFQyBpcyAlc2FibGVkXG4iLAorCQkJCWVyciA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhdGtfZWNfY3RsKHN0cnVjdCBhdGtfZGF0YSAqZGF0YSwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGF0YS0+YWNwaV9kZXYtPmRldjsKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCBhdGtfYWNwaV9pbnB1dF9idWYgc2l0bTsKKwlzdHJ1Y3QgYXRrX2FjcGlfcmV0X2J1ZmZlciAqZWNfcmV0OworCWludCBlcnIgPSAwOworCisJc2l0bS5pZCA9IEFUS19FQ19JRDsKKwlzaXRtLnBhcmFtMSA9IGVuYWJsZTsKKwlzaXRtLnBhcmFtMiA9IDA7CisKKwlvYmogPSBhdGtfc2l0bShkYXRhLCAmc2l0bSk7CisJaWYgKElTX0VSUihvYmopKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKKwl9CisJZWNfcmV0ID0gKHN0cnVjdCBhdGtfYWNwaV9yZXRfYnVmZmVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoZWNfcmV0LT5mbGFncyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvICVzYWJsZSB0aGUgRUNcbiIsCisJCQkJZW5hYmxlID8gImVuIiA6ICJkaXMiKTsKKwkJZXJyID0gLUVJTzsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICJFQyAlc2FibGVkXG4iLAorCQkJCWVuYWJsZSA/ICJlbiIgOiAiZGlzIik7CisJfQorCisJQUNQSV9GUkVFKG9iaik7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhdGtfZW51bWVyYXRlX25ld19od21vbihzdHJ1Y3QgYXRrX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmRhdGEtPmFjcGlfZGV2LT5kZXY7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZjsKLQlhY3BpX3N0YXR1cyByZXQ7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwotCXVuaW9uIGFjcGlfb2JqZWN0IGlkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrOwogCWludCBlcnI7CiAJaW50IGk7CiAKKwllcnIgPSBhdGtfZWNfcHJlc2VudChkYXRhKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoZXJyKSB7CisJCWVyciA9IGF0a19lY19lbmFibGVkKGRhdGEpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCS8qIElmIHRoZSBFQyB3YXMgZGlzYWJsZWQgd2Ugd2lsbCBkaXNhYmxlIGl0IGFnYWluIG9uIHVubG9hZCAqLworCQlkYXRhLT5kaXNhYmxlX2VjID0gZXJyOworCisJCWVyciA9IGF0a19lY19jdGwoZGF0YSwgMSk7CisJCWlmIChlcnIpIHsKKwkJCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAlkZXZfZGJnKGRldiwgIkVudW1lcmF0aW5nIGh3bW9uIHNlbnNvcnNcbiIpOwogCi0JaWQudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwotCWlkLmludGVnZXIudmFsdWUgPSBBVEtfTVVYX0hXTU9OOwotCXBhcmFtcy5jb3VudCA9IDE7Ci0JcGFyYW1zLnBvaW50ZXIgPSAmaWQ7Ci0KLQlidWYubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7Ci0JcmV0ID0gYWNwaV9ldmFsdWF0ZV9vYmplY3RfdHlwZWQoZGF0YS0+ZW51bWVyYXRlX2hhbmRsZSwgTlVMTCwgJnBhcmFtcywKLQkJCSZidWYsIEFDUElfVFlQRV9QQUNLQUdFKTsKLQlpZiAocmV0ICE9IEFFX09LKSB7Ci0JCWRldl93YXJuKGRldiwgTUVUSE9EX0VOVU1FUkFURSAiOiBBQ1BJIGV4Y2VwdGlvbjogJXNcbiIsCi0JCQkJYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHJldCkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBSZXN1bHQgbXVzdCBiZSBhIHBhY2thZ2UgKi8KLQlwYWNrID0gYnVmLnBvaW50ZXI7Ci0KLQlpZiAocGFjay0+cGFja2FnZS5jb3VudCA8IDEpIHsKLQkJZGV2X2RiZyhkZXYsICIlczogaHdtb24gcGFja2FnZSBpcyB0b28gc21hbGw6ICVkXG4iLCBfX2Z1bmNfXywKLQkJCQlwYWNrLT5wYWNrYWdlLmNvdW50KTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCXBhY2sgPSBhdGtfZ2dycChkYXRhLCBBVEtfTVVYX0hXTU9OKTsKKwlpZiAoSVNfRVJSKHBhY2spKQorCQlyZXR1cm4gUFRSX0VSUihwYWNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5wYWNrYWdlLmNvdW50OyBpKyspIHsKIAkJdW5pb24gYWNwaV9vYmplY3QgKm9iaiA9ICZwYWNrLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNzU4LDggKzk3MSw3IEBACiAKIAllcnIgPSBkYXRhLT52b2x0YWdlX2NvdW50ICsgZGF0YS0+dGVtcGVyYXR1cmVfY291bnQgKyBkYXRhLT5mYW5fY291bnQ7CiAKLW91dDoKLQlBQ1BJX0ZSRUUoYnVmLnBvaW50ZXIpOworCUFDUElfRlJFRShwYWNrKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04OTUsNiArMTEwNywxNSBAQAogCX0KIAlkYXRhLT5yZWFkX2hhbmRsZSA9IHJldDsKIAorCS8qIERlLW11bHRpcGxleGVyICh3cml0ZSkgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGF0YS0+YXRrX2hhbmRsZSwgTUVUSE9EX1dSSVRFLCAmcmV0KTsKKwlpZiAoc3RhdHVzICE9IEFFX09LKSB7CisJCWRldl9kYmcoZGV2LCAibWV0aG9kICIgTUVUSE9EX1JFQUQgIiBub3QgZm91bmQ6ICVzXG4iLAorCQkJCSBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkYXRhLT53cml0ZV9oYW5kbGUgPSByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTE1LDYgKzExMzYsNyBAQAogCWRhdGEtPmFjcGlfZGV2ID0gZGV2aWNlOwogCWRhdGEtPmF0a19oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKIAlJTklUX0xJU1RfSEVBRCgmZGF0YS0+c2Vuc29yX2xpc3QpOworCWRhdGEtPmRpc2FibGVfZWMgPSBmYWxzZTsKIAogCWJ1Zi5sZW5ndGggPSBBQ1BJX0FMTE9DQVRFX0JVRkZFUjsKIAlyZXQgPSBhY3BpX2V2YWx1YXRlX29iamVjdF90eXBlZChkYXRhLT5hdGtfaGFuZGxlLCBCT0FSRF9JRCwgTlVMTCwKQEAgLTk3Myw2ICsxMTk1LDggQEAKIGNsZWFudXA6CiAJYXRrX2ZyZWVfc2Vuc29ycyhkYXRhKTsKIG91dDoKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykKKwkJYXRrX2VjX2N0bChkYXRhLCAwKTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTg4LDYgKzEyMTIsMTEgQEAKIAlhdGtfZnJlZV9zZW5zb3JzKGRhdGEpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKKwlpZiAoZGF0YS0+ZGlzYWJsZV9lYykgeworCQlpZiAoYXRrX2VjX2N0bChkYXRhLCAwKSkKKwkJCWRldl9lcnIoJmRldmljZS0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgRUNcbiIpOworCX0KKwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2RtZTE3MzcuYyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCmluZGV4IDJjMmNiMWUuLjI3ZDYyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZG1lMTczNy5jCkBAIC01NzIsNyArNTcyLDcgQEAKIAogCS8qIFNhbXBsZSByZWdpc3RlciBjb250ZW50cyBldmVyeSAxIHNlYyAqLwogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlICsgSFopIHx8ICFkYXRhLT52YWxpZCkgewotCQlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CisJCWlmIChkYXRhLT50eXBlID09IGRtZTE3MzcpIHsKIAkJCWRhdGEtPnZpZCA9IGRtZTE3MzdfcmVhZChkYXRhLCBETUUxNzM3X1JFR19WSUQpICYKIAkJCQkweDNmOwogCQl9CkBAIC0xNjIxLDkgKzE2MjEsNiBAQAogCSZzZW5zb3JfZGV2X2F0dHJfem9uZTFfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl96b25lMl9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3pvbmUzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAotCS8qIE1pc2MgKi8KLQkmZGV2X2F0dHJfdnJtLmF0dHIsCi0JJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtMTYzMSw2ICsxNjI4LDE4IEBACiAJLmF0dHJzID0gZG1lMTczN19taXNjX2F0dHIsCiB9OwogCisvKiBUaGUgZm9sbG93aW5nIHN0cnVjdCBob2xkcyBWSUQtcmVsYXRlZCBhdHRyaWJ1dGVzLiBUaGVpciBjcmVhdGlvbgorICAgZGVwZW5kcyBvbiB0aGUgY2hpcCB0eXBlIHdoaWNoIGlzIGRldGVybWluZWQgZHVyaW5nIG1vZHVsZSBsb2FkLiAqLworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRtZTE3MzdfdmlkX2F0dHJbXSA9IHsKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZG1lMTczN192aWRfZ3JvdXAgPSB7CisJLmF0dHJzID0gZG1lMTczN192aWRfYXR0ciwKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0cyBob2xkIHRoZSBQV00gYXR0cmlidXRlcywgc29tZSBvZiB3aGljaCBhcmUgb3B0aW9uYWwuCiAgKiBUaGVpciBjcmVhdGlvbiBkZXBlbmRzIG9uIHRoZSBjaGlwIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgZGV0ZXJtaW5lZCBkdXJpbmcKICAqIG1vZHVsZSBsb2FkLiAqLwpAQCAtMTkwMiw2ICsxOTExLDkgQEAKIAlpZiAoZGF0YS0+dHlwZSAhPSBzY2g1MDI3KSB7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZG1lMTczN19taXNjX2dyb3VwKTsKIAl9CisJaWYgKGRhdGEtPnR5cGUgPT0gZG1lMTczNykgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfdmlkX2dyb3VwKTsKKwl9CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmRtZTE3MzdfZ3JvdXApOwogCkBAIC0xOTMzLDYgKzE5NDUsMTMgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKKwkvKiBDcmVhdGUgVklELXJlbGF0ZWQgc3lzZnMgYXR0cmlidXRlcyAqLworCWlmICgoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSAmJgorCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJICAgICAgJmRtZTE3MzdfdmlkX2dyb3VwKSkpIHsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKIAkvKiBDcmVhdGUgZmFuIHN5c2ZzIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRtZTE3MzdfZmFuX2dyb3VwKTsgaXgrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGl4KSkgewpAQCAtMjEyNyw3ICsyMTQ2LDcgQEAKIAlkYXRhLT5wd21fYWN6WzJdID0gNDsJLyogcHdtMyAtPiB6b25lMyAqLwogCiAJLyogU2V0IFZSTSAqLwotCWlmIChkYXRhLT50eXBlICE9IHNjaDUwMjcpIHsKKwlpZiAoZGF0YS0+dHlwZSA9PSBkbWUxNzM3KSB7CiAJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IGVhOTU1ZWQuLmRhMWIxZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtODE5LDcgKzgxOSw3IEBACiBzdGF0aWMgc3NpemVfdCB3YXRjaGRvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewotCXNpemVfdCByZXQ7CisJaW50IHJldDsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoY291bnQpIHsKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhdGNoZG9nX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLm9wZW4gPSB3YXRjaGRvZ19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCmluZGV4IDY2Nzk4NTQuLmJlNDc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYworKysgYi9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKQEAgLTE5NywxMSArMTk3LDEzIEBACiAJQVhJU19ETUlfTUFUQ0goIkhQMjEzMyIsICJIUCAyMTMzIiwgeHlfcm90YXRlZF9sZWZ0KSwKIAlBWElTX0RNSV9NQVRDSCgiSFAyMTQwIiwgIkhQIDIxNDAiLCB4eV9zd2FwX2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTN4IiwgIkhQIENvbXBhcSA2NTMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKLQlBWElTX0RNSV9NQVRDSCgiTkM2NzN4IiwgIkhQIENvbXBhcSA2NzMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwYiIsICJIUCBDb21wYXEgNjczMGIiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2NzMwcyIsICJIUCBDb21wYXEgNjczMHMiLCB4eV9zd2FwKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTF4eCIsICJIUCBDb21wYXEgNjUxIiwgeHlfcm90YXRlZF9yaWdodCksCiAJQVhJU19ETUlfTUFUQ0goIk5DNjcxMHgiLCAiSFAgQ29tcGFxIDY3MTAiLCB4eV9zd2FwX3l6X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzE1eCIsICJIUCBDb21wYXEgNjcxNSIsIHlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJOQzY5M3h4IiwgIkhQIEVsaXRlQm9vayA2OTMiLCB4eV9yb3RhdGVkX3JpZ2h0KSwKKwlBWElTX0RNSV9NQVRDSCgiTkM2OTN4eCIsICJIUCBFbGl0ZUJvb2sgODUzIiwgeHlfc3dhcCksCiAJLyogSW50ZWwtYmFzZWQgSFAgUGF2aWxpb24gZHY1ICovCiAJQVhJU19ETUlfTUFUQ0gyKCJIUERWNV9JIiwKIAkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCkBAIC0yMTQsNiArMjE2LDcgQEAKIAkJCXlfaW52ZXJ0ZWQpLAogCUFYSVNfRE1JX01BVENIKCJEVjciLCAiSFAgUGF2aWxpb24gZHY3IiwgeF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkhQODcxMCIsICJIUCBDb21wYXEgODcxMCIsIHlfaW52ZXJ0ZWQpLAorCUFYSVNfRE1JX01BVENIKCJIRFgxOCIsICJIUCBIRFggMTgiLCB4X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IGZmZWIyYTEuLmEzNzQ5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC0xMDI4LDEyICsxMDI4LDExIEBACiAJCWNoaXBfdHlwZSwgKmFkZHJlc3MsIHNpb19kYXRhLT5yZXZpc2lvbik7CiAKIAkvKiBSZWFkIEdQSU8gY29uZmlnIGFuZCBWSUQgdmFsdWUgZnJvbSBMRE4gNyAoR1BJTykgKi8KLQlpZiAoY2hpcF90eXBlICE9IElUODcwNUZfREVWSUQpIHsKKwlpZiAoc2lvX2RhdGEtPnR5cGUgIT0gaXQ4NykgewogCQlpbnQgcmVnOwogCiAJCXN1cGVyaW9fc2VsZWN0KEdQSU8pOwotCQlpZiAoKGNoaXBfdHlwZSA9PSBpdDg3MTgpIHx8Ci0JCSAgICAoY2hpcF90eXBlID09IGl0ODcyMCkpCisJCWlmIChzaW9fZGF0YS0+dHlwZSA9PSBpdDg3MTggfHwgc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NzIwKQogCQkJc2lvX2RhdGEtPnZpZF92YWx1ZSA9IHN1cGVyaW9faW5iKElUODdfU0lPX1ZJRF9SRUcpOwogCiAJCXJlZyA9IHN1cGVyaW9faW5iKElUODdfU0lPX1BJTlgyX1JFRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZF9zcGkuYyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCmluZGV4IGVjZDczOTUuLjgyYjE2ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCkBAIC04Myw3ICs4Myw4IEBACiAJc3RydWN0IGxpczNsdjAyZCAqbGlzMyA9IHNwaV9nZXRfZHJ2ZGF0YShzcGkpOwogCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7CiAJbGlzM2x2MDJkX3Bvd2Vyb2ZmKGxpczMpOwotCXJldHVybiAwOworCisJcmV0dXJuIGxpczNsdjAyZF9yZW1vdmVfZnMoJmxpczNfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sdGM0MjE1LmMgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwppbmRleCA2YzlhMDQxLi4wMGQ5NzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYworKysgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwpAQCAtMjAsMTEgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGx0YzQyMTUpOwotCiAvKiBIZXJlIGFyZSBuYW1lcyBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAoYS5rLmEuIGNvbW1hbmRzKSAqLwogZW51bSBsdGM0MjE1X2NtZCB7CiAJTFRDNDIxNV9DT05UUk9MCQkJPSAweDAwLCAvKiBydyAqLwpAQCAtMjQ2LDkgKzI0MSwxMyBAQAogc3RhdGljIGludCBsdGM0MjE1X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKIAlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhOwogCWludCByZXQ7CiAKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCiAJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0yOTQsNTYgKzI5MywyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGx0YzQyMTVfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIGludCBraW5kLAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCi17Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWlmIChraW5kIDwgMCkgewkJLyogcHJvYmVkIGRldGVjdGlvbiAtIGNoZWNrIHRoZSBjaGlwIHR5cGUgKi8KLQkJczMyIHY7CQkvKiA4IGJpdHMgZnJvbSB0aGUgY2hpcCwgb3IgLUVSUk5PICovCi0KLQkJLyoKLQkJICogUmVnaXN0ZXIgMHgwMSBiaXQgYjcgaXMgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqIFJlZ2lzdGVyIDB4MDMgYml0IGI2IGFuZCBiNyBhcmUgcmVzZXJ2ZWQsIGV4cGVjdCAwCi0JCSAqLwotCQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDIxNV9BTEVSVCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmICgxIDw8IDcpKSAhPSAwKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyMTVfRkFVTFQpOwotCQlpZiAodiA8IDAgfHwgKHYgJiAoKDEgPDwgNikgfCAoMSA8PCA3KSkpICE9IDApCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jc3RybGNweShpbmZvLT50eXBlLCAibHRjNDIxNSIsIEkyQ19OQU1FX1NJWkUpOwotCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJsdGM0MjE1ICVzIGF0IGFkZHJlc3MgMHglMDJ4XG4iLAotCQkJa2luZCA8IDAgPyAicHJvYmVkIiA6ICJmb3JjZWQiLAotCQkJY2xpZW50LT5hZGRyKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjNDIxNV9pZFtdID0gewotCXsgImx0YzQyMTUiLCBsdGM0MjE1IH0sCisJeyAibHRjNDIxNSIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjNDIxNV9pZCk7CiAKIC8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdGM0MjE1X2RyaXZlciA9IHsKLQkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lCT0gImx0YzQyMTUiLAogCX0sCiAJLnByb2JlCQk9IGx0YzQyMTVfcHJvYmUsCiAJLnJlbW92ZQkJPSBsdGM0MjE1X3JlbW92ZSwKIAkuaWRfdGFibGUJPSBsdGM0MjE1X2lkLAotCS5kZXRlY3QJCT0gbHRjNDIxNV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBsdGM0MjE1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbHRjNDI0NS5jIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKaW5kZXggZTM4OTY0My4uNjVjMjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKKysrIGIvZHJpdmVycy9od21vbi9sdGM0MjQ1LmMKQEAgLTIyLDE1ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogCi0vKiBWYWxpZCBhZGRyZXNzZXMgYXJlIDB4MjAgLSAweDNmCi0gKgotICogRm9yIG5vdywgd2UgZG8gbm90IHByb2JlLCBzaW5jZSBzb21lIG9mIHRoZXNlIGFkZHJlc3NlcwotICogYXJlIGtub3duIHRvIGJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZyAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzEobHRjNDI0NSk7Ci0KIC8qIEhlcmUgYXJlIG5hbWVzIG9mIHRoZSBjaGlwJ3MgcmVnaXN0ZXJzIChhLmsuYS4gY29tbWFuZHMpICovCiBlbnVtIGx0YzQyNDVfY21kIHsKIAlMVEM0MjQ1X1NUQVRVUwkJCT0gMHgwMCwgLyogcmVhZG9ubHkgKi8KQEAgLTM2OSw5ICszNjAsMTMgQEAKIHN0YXRpYyBpbnQgbHRjNDI0NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CiAJc3RydWN0IGx0YzQyNDVfZGF0YSAqZGF0YTsKIAlpbnQgcmV0OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwpAQCAtNDE4LDEzNiArNDEzLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIENoZWNrIHRoYXQgc29tZSBiaXRzIGluIGEgY29udHJvbCByZWdpc3RlciBhcHBlYXIgYXQgYWxsIHBvc3NpYmxlCi0gKiBsb2NhdGlvbnMgd2l0aG91dCBjaGFuZ2luZyB2YWx1ZQotICoKLSAqIEBjbGllbnQ6IHRoZSBpMmMgY2xpZW50IHRvIHVzZQotICogQHJlZzogdGhlIHJlZ2lzdGVyIHRvIHJlYWQKLSAqIEBiaXRzOiB0aGUgYml0cyB0byBjaGVjayAoMHhmZiBjaGVja3MgYWxsIGJpdHMsCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgY2hlY2tzIG9ubHkgdGhlIGxhc3QgdHdvIGJpdHMpCi0gKgotICogcmV0dXJuIC1FUlJOTyBpZiB0aGUgcmVnaXN0ZXIgcmVhZCBmYWlsZWQKLSAqIHJldHVybiAtRU5PREVWIGlmIHRoZSByZWdpc3RlciB2YWx1ZSBkb2Vzbid0IHN0YXkgY29uc3RhbnQgYXQgYWxsCi0gKiBwb3NzaWJsZSBhZGRyZXNzZXMKLSAqCi0gKiByZXR1cm4gMCBmb3Igc3VjY2VzcwotICovCi1zdGF0aWMgaW50IGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBiaXRzKQotewotCWludCBpOwotCXMzMiB2LCB2b2ZmMSwgdm9mZjI7Ci0KLQkvKiBSZWFkIHJlZ2lzdGVyIGFuZCBjaGVjayBmb3IgZXJyb3IgKi8KLQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQlpZiAodiA8IDApCi0JCXJldHVybiB2OwotCi0JdiAmPSBiaXRzOwotCi0JZm9yIChpID0gMHgwMDsgaSA8IDB4ZmY7IGkgKz0gMHgyMCkgewotCi0JCXZvZmYxID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnICsgaSk7Ci0JCWlmICh2b2ZmMSA8IDApCi0JCQlyZXR1cm4gdm9mZjE7Ci0KLQkJdm9mZjIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgKyBpICsgMHgwOCk7Ci0JCWlmICh2b2ZmMiA8IDApCi0JCQlyZXR1cm4gdm9mZjI7Ci0KLQkJdm9mZjEgJj0gYml0czsKLQkJdm9mZjIgJj0gYml0czsKLQotCQlpZiAodiAhPSB2b2ZmMSB8fCB2ICE9IHZvZmYyKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbHRjNDI0NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgaW50IGtpbmQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0KLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGtpbmQgPCAwKSB7CQkvKiBwcm9iZWQgZGV0ZWN0aW9uIC0gY2hlY2sgdGhlIGNoaXAgdHlwZSAqLwotCQlzMzIgdjsJCS8qIDggYml0cyBmcm9tIHRoZSBjaGlwLCBvciAtRVJSTk8gKi8KLQotCQkvKiBDaGlwIHJlZ2lzdGVycyAweDAwLTB4MDcgYXJlIGNvbnRyb2wgcmVnaXN0ZXJzCi0JCSAqIENoaXAgcmVnaXN0ZXJzIDB4MTAtMHgxZiBhcmUgZGF0YSByZWdpc3RlcnMKLQkJICoKLQkJICogQWRkcmVzcyBiaXRzIGI3LWI1IGFyZSBpZ25vcmVkLiBUaGlzIG1ha2VzIHRoZSBjaGlwICJyZXBlYXQiCi0JCSAqIGluIHN0ZXBzIG9mIDB4MjAuIEFueSBjb250cm9sIHJlZ2lzdGVycyBzaG91bGQgYXBwZWFyIHdpdGgKLQkJICogdGhlIHNhbWUgdmFsdWVzIGFjcm9zcyBhbGwgZHVwbGljYXRlZCBhZGRyZXNzZXMuCi0JCSAqCi0JCSAqIFJlZ2lzdGVyIDB4MDIgYml0IGIyIGlzIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjcgdG8gYjQgYXJlIHJlc2VydmVkLCBleHBlY3QgMAotCQkgKgotCQkgKiBSZWdpc3RlcnMgMHgwMSwgMHgwMiBhcmUgY29udHJvbCByZWdpc3RlcnMgYW5kIHNob3VsZCBub3QKLQkJICogY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICoKLQkJICogUmVnaXN0ZXIgMHgwNiBiaXRzIGI2IGFuZCBiNyBhcmUgY29udHJvbCBiaXRzLCBhbmQgc2hvdWxkCi0JCSAqIG5vdCBjaGFuZ2Ugb24gdGhlaXIgb3duLgotCQkgKgotCQkgKiBSZWdpc3RlciAweDA3IGJpdHMgYjMgdG8gYjAgYXJlIGNvbnRyb2wgYml0cywgYW5kIHNob3VsZAotCQkgKiBub3QgY2hhbmdlIG9uIHRoZWlyIG93bi4KLQkJICovCi0KLQkJLyogcmVhZCByZWdpc3RlciAweDAyIHJlc2VydmVkIGJpdCwgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQ09OVFJPTCk7Ci0JCWlmICh2IDwgMCB8fCAodiAmIDB4MDQpICE9IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkvKiByZWFkIHJlZ2lzdGVyIDB4MDcgcmVzZXJ2ZWQgYml0cywgZXhwZWN0IDAgKi8KLQkJdiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIExUQzQyNDVfQURDQURSKTsKLQkJaWYgKHYgPCAwIHx8ICh2ICYgMHhmMCkgIT0gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCS8qIGNoZWNrIHRoYXQgdGhlIGFsZXJ0IHJlZ2lzdGVyIGFwcGVhcnMgYXQgYWxsIGxvY2F0aW9ucyAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQUxFUlQsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCB0aGUgY29udHJvbCByZWdpc3RlciBhcHBlYXJzIGF0IGFsbCBsb2NhdGlvbnMgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0NPTlRST0wsIDB4ZmYpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA2IGJpdHMgYjYgYW5kIGI3IHN0YXkgY29uc3RhbnQgKi8KLQkJaWYgKGx0YzQyNDVfY2hlY2tfY29udHJvbF9yZWcoY2xpZW50LCBMVEM0MjQ1X0dQSU8sIDB4YzApKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJLyogY2hlY2sgdGhhdCByZWdpc3RlciAweDA3IGJpdHMgYjMtYjAgc3RheSBjb25zdGFudCAqLwotCQlpZiAobHRjNDI0NV9jaGVja19jb250cm9sX3JlZyhjbGllbnQsIExUQzQyNDVfQURDQURSLCAweDBmKSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImx0YzQyNDUiLCBJMkNfTkFNRV9TSVpFKTsKLQlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAibHRjNDI0NSAlcyBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKLQkJCWtpbmQgPCAwID8gInByb2JlZCIgOiAiZm9yY2VkIiwKLQkJCWNsaWVudC0+YWRkcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGx0YzQyNDVfaWRbXSA9IHsKLQl7ICJsdGM0MjQ1IiwgbHRjNDI0NSB9LAorCXsgImx0YzQyNDUiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzQyNDVfaWQpOwogCiAvKiBUaGlzIGlzIHRoZSBkcml2ZXIgdGhhdCB3aWxsIGJlIGluc2VydGVkICovCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbHRjNDI0NV9kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsdGM0MjQ1IiwKIAl9LAogCS5wcm9iZQkJPSBsdGM0MjQ1X3Byb2JlLAogCS5yZW1vdmUJCT0gbHRjNDI0NV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbHRjNDI0NV9pZCwKLQkuZGV0ZWN0CQk9IGx0YzQyNDVfZGV0ZWN0LAotCS5hZGRyZXNzX2RhdGEJPSAmYWRkcl9kYXRhLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbHRjNDI0NV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jIGIvZHJpdmVycy9od21vbi9zM2MtaHdtb24uYwppbmRleCAzYTUyNGYyLi43MTgzNTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3MzYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vczNjLWh3bW9uLmMKQEAgLTMyMywxNCArMzIzLDIxIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGRhdGEtPmluKTsgaSsrKSB7Ci0JCWlmICghcGRhdGEtPmluW2ldKQorCQlzdHJ1Y3QgczNjMjR4eF9hZGNfaHdtb25faW5jZmcgKmNmZyA9IHBkYXRhLT5pbltpXTsKKworCQlpZiAoIWNmZykKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChwZGF0YS0+aW5baV0tPm11bHQgPj0gMHgxMDAwMCkKKwkJaWYgKGNmZy0+bXVsdCA+PSAweDEwMDAwKQogCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAogCQkJCSAiY2hhbm5lbCAlZCBtdWx0aXBsaWVyIHRvbyBsYXJnZVxuIiwKIAkJCQkgaSk7CiAKKwkJaWYgKGNmZy0+ZGl2aWRlciA9PSAwKSB7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgImNoYW5uZWwgJWQgZGl2aWRlciB6ZXJvXG4iLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJcmV0ID0gczNjX2h3bW9uX2NyZWF0ZV9hdHRyKCZkZXYtPmRldiwgcGRhdGEtPmluW2ldLAogCQkJCQkgICAgJmh3bW9uLT5hdHRyc1tpXSwgaSk7CiAJCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2h0MTUuYyBiL2RyaXZlcnMvaHdtb24vc2h0MTUuYwppbmRleCAzMDNjMDI2Li5lYmUzOGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3NodDE1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaHQxNS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC02MjIsNyArNjIzLDEyIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2h0X2RyaXZlcnNbXSA9IHsKKy8qCisgKiBzaHRfZHJpdmVycyBzaW11bHRhbmVvdXNseSByZWZlcnMgdG8gX19kZXZpbml0IGFuZCBfX2RldmV4aXQgZnVuY3Rpb24KKyAqIHdoaWNoIGNhdXNlcyBzcHVyaW91cyBzZWN0aW9uIG1pc21hdGNoIHdhcm5pbmcuIFNvIHVzZSBfX3JlZmRhdGEgdG8KKyAqIGdldCByaWQgZnJvbSB0aGlzLgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBfX3JlZmRhdGEgc2h0X2RyaXZlcnNbXSA9IHsKIAl7CiAJCS5kcml2ZXIgPSB7CiAJCQkubmFtZSA9ICJzaHQxMCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDZiZWRkMmYuLmU4ZmU3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgICAgQVRJIFNCNjAwCiAJICAgIEFUSSBTQjcwMAogCSAgICBBVEkgU0I4MDAKLQkgICAgQU1EIFNCOTAwCisJICAgIEFNRCBIdWRzb24tMgogCSAgICBTZXJ2ZXJ3b3JrcyBPU0I0CiAJICAgIFNlcnZlcndvcmtzIENTQjUKIAkgICAgU2VydmVyd29ya3MgQ1NCNgpAQCAtNDc3LDggKzQ3Nyw4IEBACiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtcG54LgogCiBjb25maWcgSTJDX1BYQQotCXRyaXN0YXRlICJJbnRlbCBQWEEyWFggSTJDIGFkYXB0ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQVJDSF9QWEEKKwl0cmlzdGF0ZSAiSW50ZWwgUFhBMlhYIEkyQyBhZGFwdGVyIgorCWRlcGVuZHMgb24gQVJDSF9QWEEgfHwgQVJDSF9NTVAKIAloZWxwCiAJICBJZiB5b3UgaGF2ZSBkZXZpY2VzIGluIHRoZSBQWEEgSTJDIGJ1cywgc2F5IHllcyB0byB0aGlzIG9wdGlvbi4KIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCmluZGV4IGY3ZDZmZTkuLjhmMGI5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJZXJyb3IgPSBhY3BpX2NoZWNrX3JlZ2lvbihhbWQ3NTZfaW9wb3J0LCBTTUJfSU9TSVpFLAogCQkJCSAgYW1kNzU2X2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGFtZDc1Nl9pb3BvcnQsIFNNQl9JT1NJWkUsIGFtZDc1Nl9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiU01CIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggYTdjNTk5MC4uNWI0YWQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM3Niw4ICszNzYsMTAgQEAKIAlzbWJ1cy0+c2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKTsKIAogCWVycm9yID0gYWNwaV9jaGVja19yZXNvdXJjZV9jb25mbGljdCgmZGV2LT5yZXNvdXJjZVswXSk7Ci0JaWYgKGVycm9yKQorCWlmIChlcnJvcikgeworCQllcnJvciA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2tmcmVlOworCX0KIAogCWlmICghcmVxdWVzdF9yZWdpb24oc21idXMtPmJhc2UsIHNtYnVzLT5zaXplLCBhbWQ4MTExX2RyaXZlci5uYW1lKSkgewogCQllcnJvciA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggOWQyYzVhZC4uNTVlZGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTczMiw4ICs3MzIsMTAgQEAKIAl9CiAKIAllcnIgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NNQkJBUl0pOwotCWlmIChlcnIpCisJaWYgKGVycikgeworCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CisJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9uKGRldiwgU01CQkFSLCBpODAxX2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA0YWZiYTNlLi5lMzY1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTEyMCwxOSArMTIwLDI2IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJcXVldWU7CiAJdW5zaWduZWQgbG9uZwkJaTJjc3I7CiAJdW5zaWduZWQgaW50IAkJZGlzYWJsZV9kZWxheTsKKwlpbnQJCQlzdG9wcGVkOworCXVuc2lnbmVkIGludAkJaWZkcjsgLyogSU1YX0kyQ19JRkRSICovCiB9OwogCiAvKiogRnVuY3Rpb25zIGZvciBJTVggSTJDIGFkYXB0ZXIgZHJpdmVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBpMmNfaW14X2J1c19idXN5KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKK3N0YXRpYyBpbnQgaTJjX2lteF9idXNfYnVzeShzdHJ1Y3QgaW14X2kyY19zdHJ1Y3QgKmkyY19pbXgsIGludCBmb3JfYnVzeSkKIHsKIAl1bnNpZ25lZCBsb25nIG9yaWdfamlmZmllcyA9IGppZmZpZXM7CisJdW5zaWduZWQgaW50IHRlbXA7CiAKIAlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwgIjwlcz5cbiIsIF9fZnVuY19fKTsKIAotCS8qIHdhaXQgZm9yIGJ1cyBub3QgYnVzeSAqLwotCXdoaWxlIChyZWFkYihpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKSAmIEkyU1JfSUJCKSB7CisJd2hpbGUgKDEpIHsKKwkJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyU1IpOworCQlpZiAoZm9yX2J1c3kgJiYgKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKKwkJaWYgKCFmb3JfYnVzeSAmJiAhKHRlbXAgJiBJMlNSX0lCQikpCisJCQlicmVhazsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBJMkMgSW50ZXJydXB0ZWRcbiIsIF9fZnVuY19fKTsKQEAgLTE3OSw0MSArMTg2LDYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGkyY19pbXhfc3RhcnQoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQorc3RhdGljIGludCBpMmNfaW14X3N0YXJ0KHN0cnVjdCBpbXhfaTJjX3N0cnVjdCAqaTJjX2lteCkKIHsKIAl1bnNpZ25lZCBpbnQgdGVtcCA9IDA7CisJaW50IHJlc3VsdDsKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCisJY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOworCXdyaXRlYihpMmNfaW14LT5pZmRyLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JRkRSKTsKIAkvKiBFbmFibGUgSTJDIGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJTUik7CiAJd3JpdGViKEkyQ1JfSUVOLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKworCS8qIFdhaXQgY29udHJvbGxlciB0byBiZSBzdGFibGUgKi8KKwl1ZGVsYXkoNTApOworCiAJLyogU3RhcnQgSTJDIHRyYW5zYWN0aW9uICovCiAJdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwogCXRlbXAgfD0gSTJDUl9NU1RBOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXN1bHQgPSBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaTJjX2lteC0+c3RvcHBlZCA9IDA7CisKIAl0ZW1wIHw9IEkyQ1JfSUlFTiB8IEkyQ1JfTVRYIHwgSTJDUl9UWEFLOwogCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBpMmNfaW14X3N0b3Aoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14KQogewogCXVuc2lnbmVkIGludCB0ZW1wID0gMDsKIAotCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCi0JZGV2X2RiZygmaTJjX2lteC0+YWRhcHRlci5kZXYsICI8JXM+XG4iLCBfX2Z1bmNfXyk7Ci0JdGVtcCA9IHJlYWRiKGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXRlbXAgJj0gfkkyQ1JfTVNUQTsKLQl3cml0ZWIodGVtcCwgaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JLyogc2V0dXAgY2hpcCByZWdpc3RlcnMgdG8gZGVmYXVsdHMgKi8KLQl3cml0ZWIoSTJDUl9JRU4sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOwotCXdyaXRlYigwLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMlNSKTsKLQkvKgotCSAqIFRoaXMgZGVsYXkgY2F1c2VkIGJ5IGFuIGkuTVhMIGhhcmR3YXJlIGJ1Zy4KLQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQl1ZGVsYXkoaTJjX2lteC0+ZGlzYWJsZV9kZWxheSk7CisJaWYgKCFpMmNfaW14LT5zdG9wcGVkKSB7CisJCS8qIFN0b3AgSTJDIHRyYW5zYWN0aW9uICovCisJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOworCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CisJCXRlbXAgJj0gfihJMkNSX01TVEEgfCBJMkNSX01UWCk7CisJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJaTJjX2lteC0+c3RvcHBlZCA9IDE7CisJfQorCWlmIChjcHVfaXNfbXgxKCkpIHsKKwkJLyoKKwkJICogVGhpcyBkZWxheSBjYXVzZWQgYnkgYW4gaS5NWEwgaGFyZHdhcmUgYnVnLgorCQkgKiBJZiBubyAob3IgdG9vIHNob3J0KSBkZWxheSwgbm8gIlNUT1AiIGJpdCB3aWxsIGJlIGdlbmVyYXRlZC4KKwkJICovCisJCXVkZWxheShpMmNfaW14LT5kaXNhYmxlX2RlbGF5KTsKKwl9CisKKwlpZiAoIWkyY19pbXgtPnN0b3BwZWQpCisJCWkyY19pbXhfYnVzX2J1c3koaTJjX2lteCwgMCk7CisKIAkvKiBEaXNhYmxlIEkyQyBjb250cm9sbGVyICovCiAJd3JpdGViKDAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpMmNfaW14X3NldF9jbGsoc3RydWN0IGlteF9pMmNfc3RydWN0ICppMmNfaW14LApAQCAtMjMzLDggKzI2MSw4IEBACiAJZWxzZQogCQlmb3IgKGkgPSAwOyBpMmNfY2xrX2RpdltpXVswXSA8IGRpdjsgaSsrKTsKIAotCS8qIFdyaXRlIGRpdmlkZXIgdmFsdWUgdG8gcmVnaXN0ZXIgKi8KLQl3cml0ZWIoaTJjX2Nsa19kaXZbaV1bMV0sIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0lGRFIpOworCS8qIFN0b3JlIGRpdmlkZXIgdmFsdWUgKi8KKwlpMmNfaW14LT5pZmRyID0gaTJjX2Nsa19kaXZbaV1bMV07CiAKIAkvKgogCSAqIFRoZXJlIGR1bW15IGRlbGF5IGlzIGNhbGN1bGF0ZWQuCkBAIC0zNDEsMTEgKzM2OSwxNSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDEpKSB7CisJCQkvKiBJdCBtdXN0IGdlbmVyYXRlIFNUT1AgYmVmb3JlIHJlYWQgSTJEUiB0byBwcmV2ZW50CisJCQkgICBjb250cm9sbGVyIGZyb20gZ2VuZXJhdGluZyBhbm90aGVyIGNsb2NrIGN5Y2xlICovCiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBjbGVhciBNU1RBXG4iLCBfX2Z1bmNfXyk7CiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7Ci0JCQl0ZW1wICY9IH5JMkNSX01TVEE7CisJCQl0ZW1wICY9IH4oSTJDUl9NU1RBIHwgSTJDUl9NVFgpOwogCQkJd3JpdGViKHRlbXAsIGkyY19pbXgtPmJhc2UgKyBJTVhfSTJDX0kyQ1IpOworCQkJaTJjX2lteF9idXNfYnVzeShpMmNfaW14LCAwKTsKKwkJCWkyY19pbXgtPnN0b3BwZWQgPSAxOwogCQl9IGVsc2UgaWYgKGkgPT0gKG1zZ3MtPmxlbiAtIDIpKSB7CiAJCQlkZXZfZGJnKCZpMmNfaW14LT5hZGFwdGVyLmRldiwKIAkJCQkiPCVzPiBzZXQgVFhBS1xuIiwgX19mdW5jX18pOwpAQCAtMzcwLDE0ICs0MDIsMTEgQEAKIAogCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LCAiPCVzPlxuIiwgX19mdW5jX18pOwogCi0JLyogQ2hlY2sgaWYgaTJjIGJ1cyBpcyBub3QgYnVzeSAqLwotCXJlc3VsdCA9IGkyY19pbXhfYnVzX2J1c3koaTJjX2lteCk7CisJLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCisJcmVzdWx0ID0gaTJjX2lteF9zdGFydChpMmNfaW14KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWwwOwogCi0JLyogU3RhcnQgSTJDIHRyYW5zZmVyICovCi0JaTJjX2lteF9zdGFydChpMmNfaW14KTsKLQogCS8qIHJlYWQvd3JpdGUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlpZiAoaSkgewpAQCAtMzg2LDYgKzQxNSw5IEBACiAJCQl0ZW1wID0gcmVhZGIoaTJjX2lteC0+YmFzZSArIElNWF9JMkNfSTJDUik7CiAJCQl0ZW1wIHw9IEkyQ1JfUlNUQTsKIAkJCXdyaXRlYih0ZW1wLCBpMmNfaW14LT5iYXNlICsgSU1YX0kyQ19JMkNSKTsKKwkJCXJlc3VsdCA9ICBpMmNfaW14X2J1c19idXN5KGkyY19pbXgsIDEpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGZhaWwwOwogCQl9CiAJCWRldl9kYmcoJmkyY19pbXgtPmFkYXB0ZXIuZGV2LAogCQkJIjwlcz4gdHJhbnNmZXIgbWVzc2FnZTogJWRcbiIsIF9fZnVuY19fLCBpKTsKQEAgLTUwMCw3ICs1MzIsNiBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgSTJDIGNsb2NrXG4iKTsKIAkJZ290byBmYWlsMzsKIAl9Ci0JY2xrX2VuYWJsZShpMmNfaW14LT5jbGspOwogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShpMmNfaW14LT5pcnEsIGkyY19pbXhfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmNfaW14KTsKQEAgLTU0OSw3ICs1ODAsNiBAQAogZmFpbDU6CiAJZnJlZV9pcnEoaTJjX2lteC0+aXJxLCBpMmNfaW14KTsKIGZhaWw0OgotCWNsa19kaXNhYmxlKGkyY19pbXgtPmNsayk7CiAJY2xrX3B1dChpMmNfaW14LT5jbGspOwogZmFpbDM6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGkyY19pbXgtPnJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CkBAIC01ODYsOCArNjE2LDYgQEAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KCZwZGV2LT5kZXYpOwogCi0JLyogRGlzYWJsZSBJMkMgY2xvY2sgKi8KLQljbGtfZGlzYWJsZShpMmNfaW14LT5jbGspOwogCWNsa19wdXQoaTJjX2lteC0+Y2xrKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihpMmNfaW14LT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGkyY19pbXgtPnJlcykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCA5ZjZiOGUwLi5kYmE2ZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoYWNwaV9jaGVja19yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFLCBzY2hfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAogCQkJc2NoX3NtYmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggZDMyNWU4Ni4uZjYyNzAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0zNjUsOSArMzY1LDYgQEAKIAl1bnNpZ25lZCB0aW1lb3V0ID0gaTJjLT5hZGFwLnRpbWVvdXQ7CiAJdTMyIGZsYWdzID0gcmVzdGFydCA/IENDUl9SU1RBIDogMDsKIAotCS8qIFN0YXJ0IHdpdGggTUVOICovCi0JaWYgKCFyZXN0YXJ0KQotCQl3cml0ZWNjcihpMmMsIENDUl9NRU4pOwogCS8qIFN0YXJ0IGFzIG1hc3RlciAqLwogCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYIHwgZmxhZ3MpOwogCS8qIFdyaXRlIHRhcmdldCBieXRlICovCkBAIC0zOTYsOSArMzkzLDYgQEAKIAlpbnQgaSwgcmVzdWx0OwogCXUzMiBmbGFncyA9IHJlc3RhcnQgPyBDQ1JfUlNUQSA6IDA7CiAKLQkvKiBTdGFydCB3aXRoIE1FTiAqLwotCWlmICghcmVzdGFydCkKLQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUVOKTsKIAkvKiBTd2l0Y2ggdG8gcmVhZCAtIHJlc3RhcnQgKi8KIAl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9NU1RBIHwgQ0NSX01UWCB8IGZsYWdzKTsKIAkvKiBXcml0ZSB0YXJnZXQgYWRkcmVzcyBieXRlIC0gdGhpcyB0aW1lIHdpdGggdGhlIHJlYWQgZmxhZyBzZXQgKi8KQEAgLTQyNSw5ICs0MTksOSBAQAogCQkvKiBHZW5lcmF0ZSB0eGFjayBvbiBuZXh0IHRvIGxhc3QgYnl0ZSAqLwogCQlpZiAoaSA9PSBsZW5ndGggLSAyKQogCQkJd3JpdGVjY3IoaTJjLCBDQ1JfTUlFTiB8IENDUl9NRU4gfCBDQ1JfTVNUQSB8IENDUl9UWEFLKTsKLQkJLyogR2VuZXJhdGUgc3RvcCBvbiBsYXN0IGJ5dGUgKi8KKwkJLyogRG8gbm90IGdlbmVyYXRlIHN0b3Agb24gbGFzdCBieXRlICovCiAJCWlmIChpID09IGxlbmd0aCAtIDEpCi0JCQl3cml0ZWNjcihpMmMsIENDUl9NSUVOIHwgQ0NSX01FTiB8IENDUl9UWEFLKTsKKwkJCXdyaXRlY2NyKGkyYywgQ0NSX01JRU4gfCBDQ1JfTUVOIHwgQ0NSX01TVEEgfCBDQ1JfTVRYKTsKIAkJZGF0YVtpXSA9IHJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRFIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCmluZGV4IGE3ODJjN2EuLjFlMjQ1ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAlJbnRlbCBQSUlYNCwgNDQwTVgKIAlTZXJ2ZXJ3b3JrcyBPU0I0LCBDU0I1LCBDU0I2LCBIVC0xMDAwLCBIVC0xMTAwCiAJQVRJIElYUDIwMCwgSVhQMzAwLCBJWFA0MDAsIFNCNjAwLCBTQjcwMCwgU0I4MDAKLQlBTUQgU0I5MDAKKwlBTUQgSHVkc29uLTIKIAlTTVNDIFZpY3Rvcnk2NgogCiAgICBOb3RlOiB3ZSBhc3N1bWUgdGhlcmUgY2FuIG9ubHkgYmUgb25lIGRldmljZSwgd2l0aCBvbmUgU01CdXMgaW50ZXJmYWNlLgpAQCAtMTY5LDcgKzE2OSw3IEBACiAJfQogCiAJaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24ocGlpeDRfc21iYSwgU01CSU9TSVpFLCBwaWl4NF9kcml2ZXIubmFtZSkpIHsKIAkJZGV2X2VycigmUElJWDRfZGV2LT5kZXYsICJTTUJ1cyByZWdpb24gMHgleCBhbHJlYWR5IGluIHVzZSFcbiIsCkBAIC0yMzMsOSArMjMzLDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzbWJhX2lkeCA9IDB4Y2Q2OwogCXU4IHNtYmFfZW5fbG8sIHNtYmFfZW5faGksIGkyY2NmZywgaTJjY2ZnX29mZnNldCA9IDB4MTAsIHNtYl9lbiA9IDB4MmM7CiAKLQkvKiBTQjgwMCBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLworCS8qIFNCODAwIGFuZCBsYXRlciBTTUJ1cyBkb2VzIG5vdCBzdXBwb3J0IGZvcmNpbmcgYWRkcmVzcyAqLwogCWlmIChmb3JjZSB8fCBmb3JjZV9hZGRyKSB7Ci0JCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU0I4MDAgU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCisJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgZG9lcyBub3Qgc3VwcG9ydCAiCiAJCQkiZm9yY2luZyBhZGRyZXNzIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI2MCw3ICsyNjAsNyBAQAogCiAJcGlpeDRfc21iYSA9ICgoc21iYV9lbl9oaSA8PCA4KSB8IHNtYmFfZW5fbG8pICYgMHhmZmUwOwogCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihwaWl4NF9zbWJhLCBTTUJJT1NJWkUsIHBpaXg0X2RyaXZlci5uYW1lKSkKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHBpaXg0X3NtYmEsIFNNQklPU0laRSwgcGlpeDRfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJlBJSVg0X2Rldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLApAQCAtNDgwLDcgKzQ4MCw3IEBACiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9TQlgwMF9TTUJVUykgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSFVEU09OMl9TTUJVUykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJICAgICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNjbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCmluZGV4IDI3NmEwNDYuLmI0YTU1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2NtaS5jCkBAIC0zNjksOSArMzY5LDggQEAKIAkJZ290byBlcnI7CiAKIAlzbnByaW50ZihzbWJ1c19jbWktPmFkYXB0ZXIubmFtZSwgc2l6ZW9mKHNtYnVzX2NtaS0+YWRhcHRlci5uYW1lKSwKLQkJIlNNQnVzIENNSSBhZGFwdGVyICVzICglcykiLAotCQlhY3BpX2RldmljZV9uYW1lKGRldmljZSksCi0JCWFjcGlfZGV2aWNlX3VpZChkZXZpY2UpKTsKKwkJIlNNQnVzIENNSSBhZGFwdGVyICVzIiwKKwkJYWNwaV9kZXZpY2VfbmFtZShkZXZpY2UpKTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzbWJ1c19jbWktPmFkYXB0ZXIuYWxnbyA9ICZhY3BpX3NtYnVzX2NtaV9hbGdvcml0aG07CiAJc21idXNfY21pLT5hZGFwdGVyLmFsZ29fZGF0YSA9IHNtYnVzX2NtaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDgyOTU4ODUuLjE2NDk5NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAKIAlyZXR2YWwgPSBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KCZkZXYtPnJlc291cmNlW1NJUzk2eF9CQVJdKTsKIAlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIEV2ZXJ5dGhpbmcgaXMgaGFwcHksIGxldCdzIGdyYWIgdGhlIG1lbW9yeSBhbmQgc2V0IHRoaW5ncyB1cC4gKi8KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKHNpczk2eF9zbWJ1c19iYXNlLCBTTUJfSU9TSVpFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggNTRkODEwYS4uZTRiMTU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIGZvdW5kOgogCWVycm9yID0gYWNwaV9jaGVja19yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmICghcmVxdWVzdF9yZWdpb24odnQ1OTZfc21iYSwgOCwgdnQ1OTZfZHJpdmVyLm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggNjM5NmMzYS4uODM3MzIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFKSwgMCB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFKSwgMSB9LAogCXsgUENJX1ZERVZJQ0UoQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfSURFKSwgMCB9LAotCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9TQjkwMF9JREUpLCAwIH0sCisJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfSURFKSwgMCB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCA2ODBlNTk3Li5jYTBjNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDcgKzM3OSw4IEBACiAJCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAogCQkucG9ydF9vcHMJPSAmY21kNjR4X3BvcnRfb3BzLAogCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19DTEVBUl9TSU1QTEVYIHwKLQkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKKwkJCQkgIElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8CisJCQkJICBJREVfSEZMQUdfU0VSSUFMSVpFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNSwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwpAQCAtMzg5LDcgKzM5MCw4IEBACiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKIAkJLnBvcnRfb3BzCT0gJmNtZDY0OF9wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwKKwkJCQkgIElERV9IRkxBR19TRVJJQUxJWkUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IDYzYzUzZDYuLjRkNzZiYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDQ2LDE1ICsxMDQ2LDYgQEAKIAkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5pbml0X2RldikKIAkJCXBvcnRfb3BzLT5pbml0X2Rldihkcml2ZSk7CiAJfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCS8qCi0JCSAqIGRlZmF1bHQgdG8gUElPIE1vZGUgMCBiZWZvcmUgd2UgZmlndXJlIG91dAotCQkgKiB0aGUgbW9zdCBzdWl0ZWQgbW9kZSBmb3IgdGhlIGF0dGFjaGVkIGRldmljZQotCQkgKi8KLQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZXRfcGlvX21vZGUpCi0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCAwKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9pbml0X3BvcnQoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgaW50IHBvcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCAyOGQwOWE1Li4wMTdjMDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTI3MywxNCArMjczLDggQEAKIAogc3RhdGljIHZvaWQgcHJvY19pZGVfc2V0dGluZ3Nfd2Fybih2b2lkKQogewotCXN0YXRpYyBpbnQgd2FybmVkOwotCi0JaWYgKHdhcm5lZCkKLQkJcmV0dXJuOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgorCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiV2FybmluZzogL3Byb2MvaWRlL2hkPy9zZXR0aW5ncyBpbnRlcmZhY2UgaXMgIgogCQkJICAgICJvYnNvbGV0ZSwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uIVxuIik7Ci0Jd2FybmVkID0gMTsKIH0KIAogc3RhdGljIGludCBpZGVfc2V0dGluZ3NfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwppbmRleCBhZmNhMjJiLi4zYjg4ZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvc2lzNTUxMy5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwMgkJTGlvbmVsIEJvdXRvbiA8TGlvbmVsLkJvdXRvbkBpbmV0Ni5mcj4sIE1haW50YWluZXIKICAqIENvcHlyaWdodCAoQykgMjAwMwkJVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KLSAqIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICoKQEAgLTI4MSwxMSArMjgxLDEzIEBACiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGIsICZyZWc0YmgpOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJcndfcHJlZmV0Y2ggPSAweDExIDw8IGRyaXZlLT5kbjsKKwlyd19wcmVmZXRjaCA9IHJlZzRiaCAmIH4oMHgxMSA8PCBkcml2ZS0+ZG4pOwogCi0JaWYgKChyZWc0YmggJiAoMHgxMSA8PCBkcml2ZS0+ZG4pKSAhPSByd19wcmVmZXRjaCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgcmVnNGJofHJ3X3ByZWZldGNoKTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQorCQlyd19wcmVmZXRjaCB8PSAweDExIDw8IGRyaXZlLT5kbjsKKworCWlmIChyZWc0YmggIT0gcndfcHJlZmV0Y2gpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGIsIHJ3X3ByZWZldGNoKTsKIH0KIAogc3RhdGljIHZvaWQgc2lzX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMgYi9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCmluZGV4IDFhYmE4YzEuLjhlN2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZG1hX3JlZ2lvbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGRtYV9yZWdpb25fdm1fb3BzID0gewogCS5mYXVsdCA9IGRtYV9yZWdpb25fcGFnZWZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCAwYmMzZDc4Li44YWE1NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCBkMjg3YmE3Li45NDkwNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWU4MDIxNTQvZmFrZWhhcmQuYyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCmluZGV4IDk2YTI5NTkuLjdjNTQ0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCisrKyBiL2RyaXZlcnMvaWVlZTgwMjE1NC9mYWtlaGFyZC5jCkBAIC0yNjAsMTUgKzI2MCwxMiBAQAogc3RhdGljIG5ldGRldl90eF90IGllZWU4MDIxNTRfZmFrZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc2tiLT5paWYgPSBkZXYtPmlmaW5kZXg7Ci0Jc2tiLT5kZXYgPSBkZXY7CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAotCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCiAJLyogRklYTUU6IGRvIGhhcmR3YXJlIHdvcmsgaGVyZSAuLi4gKi8KIAorCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKaW5kZXggNWJlMWJkNC4uYmQwNzgwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAKIAkJZm9yX2VhY2hfbmV0ZGV2KCZpbml0X25ldCwgZGV2KQogCQkJaWYgKGlwdjZfY2hrX2FkZHIoJmluaXRfbmV0LAotCQkJCQkgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgYWRkciktPnNpbjZfYWRkciwKKwkJCQkJICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRzdF9pbiktPnNpbjZfYWRkciwKIAkJCQkJICBkZXYsIDEpKQogCQkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKaW5kZXggNTVkMDkzYS4uMGY4OTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0zNjIsNyArMzYzLDkgQEAKIAkJICogSW4gZWl0aGVyIGNhc2UsIG11c3QgdGVsbCB0aGUgcHJvdmlkZXIgdG8gcmVqZWN0LgogCQkgKi8KIAkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWNtX2lkLT5kZXZpY2UtPml3Y20tPnJlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgogCWNhc2UgSVdfQ01fU1RBVEVfREVTVFJPWUlORzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCmluZGV4IDU3YTNjNmYuLjRlMGYyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYwpAQCAtMzcsNyArMzcsOCBAQAogZW51bSBybXBwX3N0YXRlIHsKIAlSTVBQX1NUQVRFX0FDVElWRSwKIAlSTVBQX1NUQVRFX1RJTUVPVVQsCi0JUk1QUF9TVEFURV9DT01QTEVURQorCVJNUFBfU1RBVEVfQ09NUExFVEUsCisJUk1QUF9TVEFURV9DQU5DRUxJTkcKIH07CiAKIHN0cnVjdCBtYWRfcm1wcF9yZWN2IHsKQEAgLTg3LDE4ICs4OCwyMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShybXBwX3JlY3YsICZhZ2VudC0+cm1wcF9saXN0LCBsaXN0KSB7CisJCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCisJCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CisJCXJtcHBfcmVjdi0+c3RhdGUgPSBSTVBQX1NUQVRFX0NBTkNFTElORzsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocm1wcF9yZWN2LCAmYWdlbnQtPnJtcHBfbGlzdCwgbGlzdCkgewogCQljYW5jZWxfZGVsYXllZF93b3JrKCZybXBwX3JlY3YtPnRpbWVvdXRfd29yayk7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnJtcHBfcmVjdi0+Y2xlYW51cF93b3JrKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKIAogCWZsdXNoX3dvcmtxdWV1ZShhZ2VudC0+cXBfaW5mby0+cG9ydF9wcml2LT53cSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm1wcF9yZWN2LCB0ZW1wX3JtcHBfcmVjdiwKIAkJCQkgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJnJtcHBfcmVjdi0+bGlzdCk7Ci0JCWlmIChybXBwX3JlY3YtPnN0YXRlICE9IFJNUFBfU1RBVEVfQ09NUExFVEUpCi0JCQlpYl9mcmVlX3JlY3ZfbWFkKHJtcHBfcmVjdi0+cm1wcF93Yyk7CiAJCWRlc3Ryb3lfcm1wcF9yZWN2KHJtcHBfcmVjdik7CiAJfQogfQpAQCAtMjYwLDYgKzI2NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcm1wcF9yZWN2LT5hZ2VudC0+bG9jaywgZmxhZ3MpOworCWlmIChybXBwX3JlY3YtPnN0YXRlID09IFJNUFBfU1RBVEVfQ0FOQ0VMSU5HKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJtcHBfcmVjdi0+YWdlbnQtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KIAlsaXN0X2RlbCgmcm1wcF9yZWN2LT5saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybXBwX3JlY3YtPmFnZW50LT5sb2NrLCBmbGFncyk7CiAJZGVzdHJveV9ybXBwX3JlY3Yocm1wcF9yZWN2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKaW5kZXggNTFiZDk2Ni4uZjUwNGM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggNDM0NmEyNC4uYmI5NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCA4YzQ2ZjIyLi43ZGUwMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGQzZmZmOWUuLmFlYzBmYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggNjg5NTUyMy4uZWQ3MTc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpAQCAtMTE5OSwxMSArMTIwMCwxNCBAQAogCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0RPV047CiAJZWxzZSB7CiAJCWluZXRkZXYgPSBpbl9kZXZfZ2V0KG5ldGRldik7Ci0JCWlmIChpbmV0ZGV2LT5pZmFfbGlzdCkKLQkJCXByb3BzLT5zdGF0ZSA9IElCX1BPUlRfQUNUSVZFOwotCQllbHNlCisJCWlmIChpbmV0ZGV2KSB7CisJCQlpZiAoaW5ldGRldi0+aWZhX2xpc3QpCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJCQllbHNlCisJCQkJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9JTklUOworCQkJaW5fZGV2X3B1dChpbmV0ZGV2KTsKKwkJfSBlbHNlCiAJCQlwcm9wcy0+c3RhdGUgPSBJQl9QT1JUX0lOSVQ7Ci0JCWluX2Rldl9wdXQoaW5ldGRldik7CiAJfQogCiAJcHJvcHMtPnBvcnRfY2FwX2ZsYWdzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IDZlODY1MzQuLjFjZWNmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtMjksNiArMjksNyBAQAogICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQogICogU09GVFdBUkUuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgIml3Y2hfcHJvdmlkZXIuaCIKICNpbmNsdWRlICJpd2NoLmgiCiAjaW5jbHVkZSAiaXdjaF9jbS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMKaW5kZXggM2NiNjg4ZC4uZjE1NjVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV91dmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCkBAIC05NSw3ICs5NSw3IEBACiAJCSAgICAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICpjb3VudCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2bV9vcHMgPSB7CiAJLm9wZW4gPQllaGNhX21tX29wZW4sCiAJLmNsb3NlID0gZWhjYV9tbV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggMDRlODhiNi4uMDEzZDEzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTMxLDYgKzMxLDcgQEAKICAqIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDM4YTI4NzAuLjQwZGJlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBpcGF0aF9maWxlX3ZtYV9mYXVsdCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNzIyMC5jCmluZGV4IGIyYTlkNGMuLmE4MDU0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE3MjIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTcyMjAuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNmMyMWI0Yi4uYzBhMDNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMKaW5kZXggZmE4MzBlMi4uYjI4ODY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21tYXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCkBAIC03NCw3ICs3NCw3IEBACiAJa3JlZl9wdXQoJmlwLT5yZWYsIGlwYXRoX3JlbGVhc2VfbW1hcF9pbmZvKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGlwYXRoX3ZtX29wcyA9IHsKIAkub3BlbiA9ICAgICBpcGF0aF92bWFfb3BlbiwKIAkuY2xvc2UgPSAgICBpcGF0aF92bWFfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwppbmRleCAzYTVhODliLi5jYjJkM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYwpAQCAtMzIsNiArMzIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKaW5kZXggMjI5NjgzMi4uMWY5NWJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMzEsNiArMzEsNyBAQAogICogU09GVFdBUkUuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCmluZGV4IDYwNzZjYjYuLjc0MjA3MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTT0ZUV0FSRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCmluZGV4IDg1NTkxMWUuLjgyODc4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYwppbmRleCA3YmZmNGI5Li5iZTc4ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKaW5kZXggZDczZTMyMi4uNjkyM2UxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IDA1NmIyYTQuLjBhYTAxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCkBAIC02OCwxMSArNjgsMTYgQEAKIAlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wZGV2LCAmdGxpc3QsIGNhdGFzX2Vyci5saXN0KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OwogCQlyZXQgPSBfX210aGNhX3Jlc3RhcnRfb25lKGRldi0+cGRldik7CisJCS8qICdkZXYnIG5vdyBpcyBub3QgdmFsaWQgKi8KIAkJaWYgKHJldCkKLQkJCW10aGNhX2VycihkZXYsICJSZXNldCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKLQkJZWxzZQotCQkJbXRoY2FfZGJnKGRldiwgIlJlc2V0IHN1Y2NlZWRlZFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgIm10aGNhICVzOiBSZXNldCBmYWlsZWQgKCVkKVxuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmV0KTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgbXRoY2FfZGV2ICpkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCQkJbXRoY2FfZGJnKGQsICJSZXNldCBzdWNjZWVkZWRcbiIpOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZtdGhjYV9kZXZpY2VfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCA1MzhlNDA5Li5lNTkzYWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMTU2Niw3ICsxNTY2LDYgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG5lc19uZXRkZXZfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG5lc19uZXRkZXZfY2hhbmdlX210dSwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyIAk9IG5lc19uZXRkZXZfdmxhbl9yeF9yZWdpc3RlciwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCAyNTg3NGZjLi44NzYzYzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTM2MiwxMiArMzYyLDE5IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcG9pYl9kZXZfcHJpdiwKIAkJCQkJCSAgIGNhcnJpZXJfb25fdGFzayk7CisJc3RydWN0IGliX3BvcnRfYXR0ciBhdHRyOwogCiAJLyoKIAkgKiBUYWtlIHJ0bmxfbG9jayB0byBhdm9pZCByYWNpbmcgd2l0aCBpcG9pYl9zdG9wKCkgYW5kCiAJICogdHVybmluZyB0aGUgY2FycmllciBiYWNrIG9uIHdoaWxlIGEgZGV2aWNlIGlzIGJlaW5nCiAJICogcmVtb3ZlZC4KIAkgKi8KKwlpZiAoaWJfcXVlcnlfcG9ydChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJmF0dHIpIHx8CisJICAgIGF0dHIuc3RhdGUgIT0gSUJfUE9SVF9BQ1RJVkUpIHsKKwkJaXBvaWJfZGJnKHByaXYsICJLZWVwaW5nIGNhcnJpZXIgb2ZmIHVudGlsIElCIHBvcnQgaXMgYWN0aXZlXG4iKTsKKwkJcmV0dXJuOworCX0KKwogCXJ0bmxfbG9jaygpOwogCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggMGJhNmVjOC4uYWRkOTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCkBAIC00MjYsNyArNDI2LDcgQEAKIAkgKiBiZWNhdXNlIHdlIHByZWFsbG9jYXRlIHNvIG1hbnkgcmVzb3VyY2VzCiAJICovCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZpc2NzaV9pc2VyX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsCisJCQkJCSAgSVNDU0lfREVGX1hNSVRfQ01EU19NQVgsIDAsCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2spLAogCQkJCQkgIGluaXRpYWxfY21kc24sIDApOwogCWlmICghY2xzX3Nlc3Npb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKaW5kZXggMTE0ODE0MC4uZGVlNjcwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9ldmRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwpAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBFVkRFVl9CVUZGRVJfU0laRQk2NAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtY29yZS5jIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKaW5kZXggNzJjNjNlNS4uMzhkZjgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1jb3JlLmMKQEAgLTMzNywxNiArMzM3LDE2IEBACiAJZGV2LT5mZiA9IGZmOwogCWRldi0+Zmx1c2ggPSBmbHVzaF9lZmZlY3RzOwogCWRldi0+ZXZlbnQgPSBpbnB1dF9mZl9ldmVudDsKLQlzZXRfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoRVZfRkYsIGRldi0+ZXZiaXQpOwogCiAJLyogQ29weSAidHJ1ZSIgYml0cyBpbnRvIGZmIGRldmljZSBiaXRtYXAgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IEZGX01BWDsgaSsrKQogCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5mZmJpdCkpCi0JCQlzZXRfYml0KGksIGZmLT5mZmJpdCk7CisJCQlfX3NldF9iaXQoaSwgZmYtPmZmYml0KTsKIAogCS8qIHdlIGNhbiBlbXVsYXRlIFJVTUJMRSB3aXRoIHBlcmlvZGljIGVmZmVjdHMgKi8KIAlpZiAodGVzdF9iaXQoRkZfUEVSSU9ESUMsIGZmLT5mZmJpdCkpCi0JCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKwkJX19zZXRfYml0KEZGX1JVTUJMRSwgZGV2LT5mZmJpdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2MiwxMiArMzYyLDE0IEBACiAgKi8KIHZvaWQgaW5wdXRfZmZfZGVzdHJveShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7Ci0JY2xlYXJfYml0KEVWX0ZGLCBkZXYtPmV2Yml0KTsKLQlpZiAoZGV2LT5mZikgewotCQlpZiAoZGV2LT5mZi0+ZGVzdHJveSkKLQkJCWRldi0+ZmYtPmRlc3Ryb3koZGV2LT5mZik7Ci0JCWtmcmVlKGRldi0+ZmYtPnByaXZhdGUpOwotCQlrZnJlZShkZXYtPmZmKTsKKwlzdHJ1Y3QgZmZfZGV2aWNlICpmZiA9IGRldi0+ZmY7CisKKwlfX2NsZWFyX2JpdChFVl9GRiwgZGV2LT5ldmJpdCk7CisJaWYgKGZmKSB7CisJCWlmIChmZi0+ZGVzdHJveSkKKwkJCWZmLT5kZXN0cm95KGZmKTsKKwkJa2ZyZWUoZmYtPnByaXZhdGUpOworCQlrZnJlZShmZik7CiAJCWRldi0+ZmYgPSBOVUxMOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZmYtbWVtbGVzcy5jIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKaW5kZXggMmQxNDE1ZS4uYjQ4M2IyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKKysrIGIvZHJpdmVycy9pbnB1dC9mZi1tZW1sZXNzLmMKQEAgLTYxLDcgKzYxLDYgQEAKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlIHN0YXRlc1tGRl9NRU1MRVNTX0VGRkVDVFNdOwogCWludCBnYWluOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwotCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CiAKIAlpbnQgKCpwbGF5X2VmZmVjdCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLApAQCAtMzY4LDM4ICszNjcsMzggQEAKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAoc3RydWN0IGlucHV0X2RldiAqKXRpbWVyX2RhdGE7CiAJc3RydWN0IG1sX2RldmljZSAqbWwgPSBkZXYtPmZmLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZWJ1ZygidGltZXI6IHVwZGF0aW5nIGVmZmVjdHMiKTsKIAotCXNwaW5fbG9jaygmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAltbF9wbGF5X2VmZmVjdHMobWwpOwotCXNwaW5fdW5sb2NrKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBTZXRzIHJlcXVlc3RlZCBnYWluIGZvciBGRiBlZmZlY3RzLiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIHZvaWQgbWxfZmZfc2V0X2dhaW4oc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgZ2FpbikKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfYmgoJm1sLT50aW1lcl9sb2NrKTsKLQogCW1sLT5nYWluID0gZ2FpbjsKIAogCWZvciAoaSA9IDA7IGkgPCBGRl9NRU1MRVNTX0VGRkVDVFM7IGkrKykKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZtbC0+c3RhdGVzW2ldLmZsYWdzKTsKIAogCW1sX3BsYXlfZWZmZWN0cyhtbCk7Ci0KLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOwogfQogCisvKgorICogU3RhcnQvc3RvcCBzcGVjaWZpZWQgRkYgZWZmZWN0LiBDYWxsZWQgd2l0aCBkZXYtPmV2ZW50X2xvY2sgaGVsZC4KKyAqLwogc3RhdGljIGludCBtbF9mZl9wbGF5YmFjayhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBlZmZlY3RfaWQsIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgbWxfZGV2aWNlICptbCA9IGRldi0+ZmYtPnByaXZhdGU7CiAJc3RydWN0IG1sX2VmZmVjdF9zdGF0ZSAqc3RhdGUgPSAmbWwtPnN0YXRlc1tlZmZlY3RfaWRdOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWwtPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAogCWlmICh2YWx1ZSA+IDApIHsKIAkJZGVidWcoImluaXRpYXRlZCBwbGF5Iik7CkBAIC00MjUsOCArNDI0LDYgQEAKIAkJbWxfcGxheV9lZmZlY3RzKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbC0+dGltZXJfbG9jaywgZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNiw3ICs0MzMsNyBAQAogCXN0cnVjdCBtbF9kZXZpY2UgKm1sID0gZGV2LT5mZi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbWxfZWZmZWN0X3N0YXRlICpzdGF0ZSA9ICZtbC0+c3RhdGVzW2VmZmVjdC0+aWRdOwogCi0Jc3Bpbl9sb2NrX2JoKCZtbC0+dGltZXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCWlmICh0ZXN0X2JpdChGRl9FRkZFQ1RfU1RBUlRFRCwgJnN0YXRlLT5mbGFncykpIHsKIAkJX19jbGVhcl9iaXQoRkZfRUZGRUNUX1BMQVlJTkcsICZzdGF0ZS0+ZmxhZ3MpOwpAQCAtNDQ4LDcgKzQ0NSw3IEBACiAJCW1sX3NjaGVkdWxlX3RpbWVyKG1sKTsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmbWwtPnRpbWVyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5ldmVudF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDgyLDcgKzQ3OSw2IEBACiAJbWwtPnByaXZhdGUgPSBkYXRhOwogCW1sLT5wbGF5X2VmZmVjdCA9IHBsYXlfZWZmZWN0OwogCW1sLT5nYWluID0gMHhmZmZmOwotCXNwaW5fbG9ja19pbml0KCZtbC0+dGltZXJfbG9jayk7CiAJc2V0dXBfdGltZXIoJm1sLT50aW1lciwgbWxfZWZmZWN0X3RpbWVyLCAodW5zaWduZWQgbG9uZylkZXYpOwogCiAJc2V0X2JpdChGRl9HQUlOLCBkZXYtPmZmYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBlODI4YWFiLi4yMjY2ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTc4MSwxMCArNzgyLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3VuaW9uIGlucHV0X3NlcV9zdGF0ZSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgc2hvcnQgcG9zOworCQlib29sIG11dGV4X2FjcXVpcmVkOworCX07CisJdm9pZCAqcDsKK307CisKIHN0YXRpYyB2b2lkICppbnB1dF9kZXZpY2VzX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpKQotCQlyZXR1cm4gTlVMTDsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisJaW50IGVycm9yOworCisJLyogV2UgbmVlZCB0byBmaXQgaW50byBzZXEtPnByaXZhdGUgcG9pbnRlciAqLworCUJVSUxEX0JVR19PTihzaXplb2YodW5pb24gaW5wdXRfc2VxX3N0YXRlKSAhPSBzaXplb2Yoc2VxLT5wcml2YXRlKSk7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXRfbXV0ZXgpOworCWlmIChlcnJvcikgeworCQlzdGF0ZS0+bXV0ZXhfYWNxdWlyZWQgPSBmYWxzZTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCX0KKworCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IHRydWU7CiAKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmlucHV0X2Rldl9saXN0LCAqcG9zKTsKIH0KQEAgLTc5NCw5ICs4MTQsMTIgQEAKIAlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfZGV2X2xpc3QsIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlucHV0X2RldmljZXNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCitzdGF0aWMgdm9pZCBpbnB1dF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CisKKwlpZiAoc3RhdGUtPm11dGV4X2FjcXVpcmVkKQorCQltdXRleF91bmxvY2soJmlucHV0X211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgaW5wdXRfc2VxX3ByaW50X2JpdG1hcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTg2MCw3ICs4ODMsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBpbnB1dF9kZXZpY2VzX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CT0gaW5wdXRfZGV2aWNlc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9kZXZpY2VzX3NlcV9uZXh0LAotCS5zdG9wCT0gaW5wdXRfZGV2aWNlc19zZXFfc3RvcCwKKwkuc3RvcAk9IGlucHV0X3NlcV9zdG9wLAogCS5zaG93CT0gaW5wdXRfZGV2aWNlc19zZXFfc2hvdywKIH07CiAKQEAgLTg4MCw0MCArOTAzLDQ5IEBACiAKIHN0YXRpYyB2b2lkICppbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlucHV0X211dGV4KSkKLQkJcmV0dXJuIE5VTEw7CisJdW5pb24gaW5wdXRfc2VxX3N0YXRlICpzdGF0ZSA9ICh1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKikmc2VxLT5wcml2YXRlOworCWludCBlcnJvcjsKIAotCXNlcS0+cHJpdmF0ZSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKnBvczsKKwkvKiBXZSBuZWVkIHRvIGZpdCBpbnRvIHNlcS0+cHJpdmF0ZSBwb2ludGVyICovCisJQlVJTERfQlVHX09OKHNpemVvZih1bmlvbiBpbnB1dF9zZXFfc3RhdGUpICE9IHNpemVvZihzZXEtPnByaXZhdGUpKTsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZpbnB1dF9tdXRleCk7CisJaWYgKGVycm9yKSB7CisJCXN0YXRlLT5tdXRleF9hY3F1aXJlZCA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJfQorCisJc3RhdGUtPm11dGV4X2FjcXVpcmVkID0gdHJ1ZTsKKwlzdGF0ZS0+cG9zID0gKnBvczsKKwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmaW5wdXRfaGFuZGxlcl9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmlucHV0X2hhbmRsZXJzX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzZXEtPnByaXZhdGUgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSgqcG9zICsgMSk7Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmlucHV0X2hhbmRsZXJfbGlzdCwgcG9zKTsKLX0KKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLXN0YXRpYyB2b2lkIGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCW11dGV4X3VubG9jaygmaW5wdXRfbXV0ZXgpOworCXN0YXRlLT5wb3MgPSAqcG9zICsgMTsKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaW5wdXRfaGFuZGxlcl9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgaW50IGlucHV0X2hhbmRsZXJzX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCXN0cnVjdCBpbnB1dF9oYW5kbGVyICpoYW5kbGVyID0gY29udGFpbmVyX29mKHYsIHN0cnVjdCBpbnB1dF9oYW5kbGVyLCBub2RlKTsKKwl1bmlvbiBpbnB1dF9zZXFfc3RhdGUgKnN0YXRlID0gKHVuaW9uIGlucHV0X3NlcV9zdGF0ZSAqKSZzZXEtPnByaXZhdGU7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIk46IE51bWJlcj0lbGQgTmFtZT0lcyIsCi0JCSAgICh1bnNpZ25lZCBsb25nKXNlcS0+cHJpdmF0ZSwgaGFuZGxlci0+bmFtZSk7CisJc2VxX3ByaW50ZihzZXEsICJOOiBOdW1iZXI9JXUgTmFtZT0lcyIsIHN0YXRlLT5wb3MsIGhhbmRsZXItPm5hbWUpOwogCWlmIChoYW5kbGVyLT5mb3BzKQogCQlzZXFfcHJpbnRmKHNlcSwgIiBNaW5vcj0lZCIsIGhhbmRsZXItPm1pbm9yKTsKIAlzZXFfcHV0YyhzZXEsICdcbicpOwogCiAJcmV0dXJuIDA7CiB9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaW5wdXRfaGFuZGxlcnNfc2VxX29wcyA9IHsKIAkuc3RhcnQJPSBpbnB1dF9oYW5kbGVyc19zZXFfc3RhcnQsCiAJLm5leHQJPSBpbnB1dF9oYW5kbGVyc19zZXFfbmV4dCwKLQkuc3RvcAk9IGlucHV0X2hhbmRsZXJzX3NlcV9zdG9wLAorCS5zdG9wCT0gaW5wdXRfc2VxX3N0b3AsCiAJLnNob3cJPSBpbnB1dF9oYW5kbGVyc19zZXFfc2hvdywKIH07CiAKQEAgLTEyNjAsMTkgKzEyOTIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJTlBVVF9ET19UT0dHTEUoZGV2LCB0eXBlLCBiaXRzLCBvbikJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWludCBpOwkJCQkJCVwKLQkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCB0eXBlIyNfTUFYOyBpKyspIHsJCVwKLQkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpIHx8CVwKLQkJCSAgICAhdGVzdF9iaXQoaSwgZGV2LT5iaXRzKSkJCVwKLQkJCQljb250aW51ZTsJCQlcCi0JCQlkZXYtPmV2ZW50KGRldiwgRVZfIyN0eXBlLCBpLCBvbik7CVwKLQkJfQkJCQkJCVwKKyNkZWZpbmUgSU5QVVRfRE9fVE9HR0xFKGRldiwgdHlwZSwgYml0cywgb24pCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWludCBpOwkJCQkJCQlcCisJCWJvb2wgYWN0aXZlOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJaWYgKCF0ZXN0X2JpdChFVl8jI3R5cGUsIGRldi0+ZXZiaXQpKQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IHR5cGUjI19NQVg7IGkrKykgewkJCVwKKwkJCWlmICghdGVzdF9iaXQoaSwgZGV2LT5iaXRzIyNiaXQpKQkJXAorCQkJCWNvbnRpbnVlOwkJCQlcCisJCQkJCQkJCQlcCisJCQlhY3RpdmUgPSB0ZXN0X2JpdChpLCBkZXYtPmJpdHMpOwkJXAorCQkJaWYgKCFhY3RpdmUgJiYgIW9uKQkJCQlcCisJCQkJY29udGludWU7CQkJCVwKKwkJCQkJCQkJCVwKKwkJCWRldi0+ZXZlbnQoZGV2LCBFVl8jI3R5cGUsIGksIG9uID8gYWN0aXZlIDogMCk7CVwKKwkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHZvaWQgaW5wdXRfZGV2X3Jlc2V0KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgYm9vbCBhY3RpdmF0ZSkKIHsKIAlpZiAoIWRldi0+ZXZlbnQpCkBAIC0xMjg3LDcgKzEzMjcsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBpbnB1dF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdG9faW5wdXRfZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA5MDFiMjUyLi5iMWJkNmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IDIzODhjZjUuLjc5ZTNlZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIAl7IDB4MTJhYiwgMHg4ODA5LCAiWGJveCBERFIgZGFuY2VwYWQiLCBNQVBfRFBBRF9UT19CVVRUT05TLCBYVFlQRV9YQk9YIH0sCiAJeyAweDE0MzAsIDB4NDc0OCwgIlJlZE9jdGFuZSBHdWl0YXIgSGVybyBYLXBsb3JlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MTQzMCwgMHg4ODg4LCAiVFg2NTAwKyBEYW5jZSBQYWQgKGZpcnN0IGdlbmVyYXRpb24pIiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWCB9LAorCXsgMHgxNDZiLCAweDA2MDEsICJCaWdCZW4gSW50ZXJhY3RpdmUgWEJPWCAzNjAgQ29udHJvbGxlciIsIE1BUF9EUEFEX1RPX0FYRVMsIFhUWVBFX1hCT1gzNjAgfSwKIAl7IDB4MDQ1ZSwgMHgwMjhlLCAiTWljcm9zb2Z0IFgtQm94IDM2MCBwYWQiLCBNQVBfRFBBRF9UT19BWEVTLCBYVFlQRV9YQk9YMzYwIH0sCiAJeyAweDFiYWQsIDB4MDAwMywgIkhhcm1vbml4IFJvY2sgQmFuZCBEcnVta2l0IiwgTUFQX0RQQURfVE9fQlVUVE9OUywgWFRZUEVfWEJPWDM2MCB9LAogCXsgMHhmZmZmLCAweGZmZmYsICJDaGluZXNlLW1hZGUgWGJveCBDb250cm9sbGVyIiwgTUFQX0RQQURfVE9fQVhFUywgWFRZUEVfWEJPWCB9LApAQCAtMjA5LDYgKzIxMCw3IEBACiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDA3MzgpLAkJLyogTWFkIENhdHogWC1Cb3ggMzYwIGNvbnRyb2xsZXJzICovCiAJWFBBRF9YQk9YMzYwX1ZFTkRPUigweDBlNmYpLAkJLyogMHgwZTZmIFgtQm94IDM2MCBjb250cm9sbGVycyAqLwogCVhQQURfWEJPWDM2MF9WRU5ET1IoMHgxNDMwKSwJCS8qIFJlZE9jdGFuZSBYLUJveCAzNjAgY29udHJvbGxlcnMgKi8KKwlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MTQ2YiksCQkvKiBCaWdCZW4gSW50ZXJhY3RpdmUgQ29udHJvbGxlcnMgKi8KIAlYUEFEX1hCT1gzNjBfVkVORE9SKDB4MWJhZCksCQkvKiBSb2NrIEJhbmQgRHJ1bXMgKi8KIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDcwOWUxNS4uMjhlNjExMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtMjMzLDYgKzIzMyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkICgqYXRrYmRfcGxhdGZvcm1fZml4dXApKHN0cnVjdCBhdGtiZCAqLCBjb25zdCB2b2lkICpkYXRhKTsKIHN0YXRpYyB2b2lkICphdGtiZF9wbGF0Zm9ybV9maXh1cF9kYXRhOworc3RhdGljIHVuc2lnbmVkIGludCAoKmF0a2JkX3BsYXRmb3JtX3NjYW5jb2RlX2ZpeHVwKShzdHJ1Y3QgYXRrYmQgKiwgdW5zaWduZWQgaW50KTsKIAogc3RhdGljIHNzaXplX3QgYXRrYmRfYXR0cl9zaG93X2hlbHBlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwKIAkJCQlzc2l6ZV90ICgqaGFuZGxlcikoc3RydWN0IGF0a2JkICosIGNoYXIgKikpOwpAQCAtMzkzLDYgKzM5NCw5IEBACiAKIAlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1JBVywgY29kZSk7CiAKKwlpZiAoYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXApCisJCWNvZGUgPSBhdGtiZF9wbGF0Zm9ybV9zY2FuY29kZV9maXh1cChhdGtiZCwgY29kZSk7CisKIAlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQpIHsKIAogCQlpZiAoYXRrYmQtPmVtdWwgfHwgYXRrYmRfbmVlZF94bGF0ZShhdGtiZC0+eGxfYml0LCBjb2RlKSkgewpAQCAtNTc0LDExICs1NzgsMjIgQEAKIAogCW11dGV4X2xvY2soJmF0a2JkLT5ldmVudF9tdXRleCk7CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX0xFRF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCi0JCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKKwlpZiAoIWF0a2JkLT5lbmFibGVkKSB7CisJCS8qCisJCSAqIFNlcmlvIHBvcnRzIGFyZSByZXN1bWVkIGFzeW5jaHJvbm91c2x5IHNvIHdoaWxlIGRyaXZlciBjb3JlCisJCSAqIHRoaW5rcyB0aGF0IGRldmljZSBpcyBhbHJlYWR5IGZ1bGx5IG9wZXJhdGlvbmFsIGluIHJlYWxpdHkKKwkJICogaXQgbWF5IG5vdCBiZSByZWFkeSB5ZXQuIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGtlZXAKKwkJICogcmVzY2hlZHVsaW5nIHRpbGwgcmVjb25uZWN0IGNvbXBsZXRlcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYXRrYmQtPmV2ZW50X3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJfSBlbHNlIHsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQkJYXRrYmRfc2V0X2xlZHMoYXRrYmQpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQotCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCX0KIAogCW11dGV4X3VubG9jaygmYXRrYmQtPmV2ZW50X211dGV4KTsKIH0KQEAgLTc3MCw2ICs3ODUsMzAgQEAKIAlyZXR1cm4gMzsKIH0KIAorc3RhdGljIGludCBhdGtiZF9yZXNldF9zdGF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworICAgICAgICBzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmYXRrYmQtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzFdOworCisvKgorICogU2V0IHRoZSBMRURzIHRvIGEgcHJlZGVmaW5lZCBzdGF0ZSAoYWxsIG9mZikuCisgKi8KKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKy8qCisgKiBTZXQgYXV0b3JlcGVhdCB0byBmYXN0ZXN0IHBvc3NpYmxlLgorICovCisKKwlwYXJhbVswXSA9IDA7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRSRVApKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdGtiZF9hY3RpdmF0ZShzdHJ1Y3QgYXRrYmQgKmF0a2JkKQogewogCXN0cnVjdCBwczJkZXYgKnBzMmRldiA9ICZhdGtiZC0+cHMyZGV2OwpAQCAtODUyLDI5ICs4OTEsNiBAQAogfTsKIAogLyoKLSAqIEludmVudGVjIHN5c3RlbSB3aXRoIGJyb2tlbiBrZXkgcmVsZWFzZSBvbiB2b2x1bWUga2V5cwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2ludmVudGVjX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCBQYXZpbGlvbiBaVjYxMDAgbGFwdG9wIHRoYXQgZG9lc24ndCBnZW5lcmF0ZSByZWxlYXNlCi0gKiBmb3IgaXRzIHZvbHVtZSBidXR0b25zCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfaHBfenY2MTAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGZpeHVwIGZvciBIUCAoQ29tcGFxKSBQcmVzYXJpbyBSNDAwMCBSNDEwMCBSNDIwMCB0aGF0IGRvbid0IGdlbmVyYXRlCi0gKiByZWxlYXNlIGZvciB0aGVpciB2b2x1bWUgYnV0dG9ucwotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2hwX3I0MDAwX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKLQkweGFlLCAweGIwLCAtMVUKLX07Ci0KLS8qCiAgKiBTYW1zdW5nIE5DMTAsTkMyMCB3aXRoIEZuK0Y/IGtleSByZWxlYXNlIG5vdCB3b3JraW5nCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfc2Ftc3VuZ19mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7CkBAIC04ODIsMTQgKzg5OCw2IEBACiB9OwogCiAvKgotICogVGhlIHZvbHVtZSB1cCBhbmQgdm9sdW1lIGRvd24gc3BlY2lhbCBrZXlzIG9uIGEgRnVqaXRzdSBBbWlsbyBQQSAxNTEwIGxhcHRvcAotICogZG8gbm90IGdlbmVyYXRlIHJlbGVhc2UgZXZlbnRzIHNvIHdlIGhhdmUgdG8gZG8gaXQgb3Vyc2VsdmVzLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX2FtaWxvX3BhMTUxMF9mb3JjZWRfcmVsZWFzZV9rZXlzW10gPSB7Ci0JMHhiMCwgMHhhZSwgLTFVCi19OwotCi0vKgogICogQW1pbG8gUGkgMzUyNSBrZXkgcmVsZWFzZSBmb3IgRm4rVm9sdW1lIGtleXMgbm90IHdvcmtpbmcKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhdGtiZF9hbWlsb19waTM1MjVfZm9yY2VkX3JlbGVhc2Vfa2V5c1tdID0gewpAQCAtOTExLDYgKzkxOSwzMCBAQAogfTsKIAogLyoKKyAqIE1hbnkgbm90ZWJvb2tzIGRvbid0IHNlbmQga2V5IHJlbGVhc2UgZXZlbnQgZm9yIHZvbHVtZSB1cC9kb3duCisgKiBrZXlzLCB3aXRoIGtleSBsaXN0IGJlbG93IGNvbW1vbiBhbW9uZyB0aGVtCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXNbXSA9IHsKKwkweGFlLCAweGIwLCAtMVUKK307CisKKy8qCisgKiBPUU8gMDErIG11bHRpbWVkaWEga2V5cyAoNjQtLTY2KSBnZW5lcmF0ZSBlMCA2eCB1cG9uIHJlbGVhc2Ugd2hlcmVhcworICogdGhleSBzaG91bGQgYmUgZ2VuZXJhdGluZyBlNC1lNiAoMHg4MCB8IGNvZGUpLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGF0a2JkX29xb18wMXBsdXNfc2NhbmNvZGVfZml4dXAoc3RydWN0IGF0a2JkICphdGtiZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBpbnQgY29kZSkKK3sKKwlpZiAoYXRrYmQtPnRyYW5zbGF0ZWQgJiYgYXRrYmQtPmVtdWwgPT0gMSAmJgorCSAgICAoY29kZSA9PSAweDY0IHx8IGNvZGUgPT0gMHg2NSB8fCBjb2RlID09IDB4NjYpKSB7CisJCWF0a2JkLT5lbXVsID0gMDsKKwkJY29kZSB8PSAweDgwOworCX0KKworCXJldHVybiBjb2RlOworfQorCisvKgogICogYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoKSBpbml0aWFsaXplcyBrZXlib2FyZCdzIGtleWNvZGUgdGFibGUKICAqIGFjY29yZGluZyB0byB0aGUgc2VsZWN0ZWQgc2NhbmNvZGUgc2V0CiAgKi8KQEAgLTEwODcsNiArMTExOSw3IEBACiAJCX0KIAogCQlhdGtiZC0+c2V0ID0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmRfc2V0LCBhdGtiZF9leHRyYSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCiAJfSBlbHNlIHsKQEAgLTExNDEsNiArMTE3NCwxOCBAQAogCQkJcmV0dXJuIC0xOwogCiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKKworCQkvKgorCQkgKiBSZXN0b3JlIExFRCBzdGF0ZSBhbmQgcmVwZWF0IHJhdGUuIFdoaWxlIGlucHV0IGNvcmUKKwkJICogd2lsbCBkbyB0aGlzIGZvciB1cyBhdCByZXN1bWUgdGltZSByZWNvbm5lY3QgbWF5IGhhcHBlbgorCQkgKiBiZWNhdXNlIHVzZXIgcmVxdWVzdGVkIGl0IHZpYSBzeXNmcyBvciBzaW1wbHkgYmVjYXVzZQorCQkgKiBrZXlib2FyZCB3YXMgdW5wbHVnZ2VkIGFuZCBwbHVnZ2VkIGluIGFnYWluIHNvIHdlIG5lZWQKKwkJICogdG8gZG8gaXQgb3Vyc2VsdmVzIGhlcmUuCisJCSAqLworCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CisJCWlmICghYXRrYmQtPnNvZnRyZXBlYXQpCisJCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOworCiAJfQogCiAJYXRrYmRfZW5hYmxlKGF0a2JkKTsKQEAgLTEyNjcsNiArMTMxMiw3IEBACiAKIAkJYXRrYmQtPmRldiA9IG5ld19kZXY7CiAJCWF0a2JkLT5zZXQgPSBhdGtiZF9zZWxlY3Rfc2V0KGF0a2JkLCBhdGtiZC0+c2V0LCB2YWx1ZSk7CisJCWF0a2JkX3Jlc2V0X3N0YXRlKGF0a2JkKTsKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfa2V5Y29kZV90YWJsZShhdGtiZCk7CiAJCWF0a2JkX3NldF9kZXZpY2VfYXR0cnMoYXRrYmQpOwpAQCAtMTM4OCw2ICsxNDM0LDcgQEAKIAogCQlhdGtiZC0+ZGV2ID0gbmV3X2RldjsKIAkJYXRrYmQtPnNldCA9IGF0a2JkX3NlbGVjdF9zZXQoYXRrYmQsIHZhbHVlLCBhdGtiZC0+ZXh0cmEpOworCQlhdGtiZF9yZXNldF9zdGF0ZShhdGtiZCk7CiAJCWF0a2JkX2FjdGl2YXRlKGF0a2JkKTsKIAkJYXRrYmRfc2V0X2tleWNvZGVfdGFibGUoYXRrYmQpOwogCQlhdGtiZF9zZXRfZGV2aWNlX2F0dHJzKGF0a2JkKTsKQEAgLTE1MTMsNiArMTU2MCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9faW5pdCBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCit7CisJYXRrYmRfcGxhdGZvcm1fc2NhbmNvZGVfZml4dXAgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGF0a2JkX2RtaV9xdWlya190YWJsZVtdIF9faW5pdGRhdGEgPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBMYXB0b3AiLApAQCAtMTU0OCw3ICsxNjAyLDcgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUGF2aWxpb24gWlY2MTAwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9ocF96djYxMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDAwMCIsCkBAIC0xNTU3LDcgKzE2MTEsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDAwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDEwMCIsCkBAIC0xNTY2LDcgKzE2MjAsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDEwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJIUCBQcmVzYXJpbyBSNDIwMCIsCkBAIC0xNTc1LDcgKzE2MjksNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJQcmVzYXJpbyBSNDIwMCIpLAogCQl9LAogCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9mb3JjZWRfcmVsZWFzZSwKLQkJLmRyaXZlcl9kYXRhID0gYXRrYmRfaHBfcjQwMDBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJJbnZlbnRlYyBTeW1waG9ueSIsCkBAIC0xNTg0LDcgKzE2MzgsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJTWU1QSE9OWSA2LjAvNy4wIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9pbnZlbnRlY19mb3JjZWRfcmVsZWFzZV9rZXlzLAorCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF92b2x1bWVfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAogCXsKIAkJLmlkZW50ID0gIlNhbXN1bmcgTkMxMCIsCkBAIC0xNjIwLDcgKzE2NzQsNyBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBQYSAxNTEwIiksCiAJCX0sCiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAotCQkuZHJpdmVyX2RhdGEgPSBhdGtiZF9hbWlsb19wYTE1MTBfZm9yY2VkX3JlbGVhc2Vfa2V5cywKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfdm9sdW1lX2ZvcmNlZF9yZWxlYXNlX2tleXMsCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJGdWppdHN1IEFtaWxvIFBpIDM1MjUiLApAQCAtMTY0OSw2ICsxNzAzLDE1IEBACiAJCS5jYWxsYmFjayA9IGF0a2JkX3NldHVwX2ZvcmNlZF9yZWxlYXNlLAogCQkuZHJpdmVyX2RhdGEgPSBhdGtkYl9zb2x0ZWNoX3RhMTJfZm9yY2VkX3JlbGVhc2Vfa2V5cywKIAl9LAorCXsKKwkJLmlkZW50ID0gIk9RTyBNb2RlbCAwMSsiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk9RTyIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJaRVBUTyIpLAorCQl9LAorCQkuY2FsbGJhY2sgPSBhdGtiZF9zZXR1cF9zY2FuY29kZV9maXh1cCwKKwkJLmRyaXZlcl9kYXRhID0gYXRrYmRfb3FvXzAxcGx1c19zY2FuY29kZV9maXh1cCwKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggYTg4YWZmMy4uNzdkMTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAKIAkJfQogCiAJCWVycm9yID0gcmVxdWVzdF9pcnEoaXJxLCBncGlvX2tleXNfaXNyLAorCQkJCSAgICBJUlFGX1NIQVJFRCB8CiAJCQkJICAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQkgICAgYnV0dG9uLT5kZXNjID8gYnV0dG9uLT5kZXNjIDogImdwaW9fa2V5cyIsCiAJCQkJICAgIGJkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCmluZGV4IGU5ZDYzOWUuLjVmNzI0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpZmRlZiBDT05GSUdfSFAzMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCmluZGV4IDQ3MmI1NjYuLmE5OWEwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYwpAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAwMmY0ZjhmLi5hOWJiMjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMjI3LDYgKzIyNyw3IEBACiAJZGVwZW5kcyBvbiBYODYgJiYgUE5QCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKKwlzZWxlY3QgTEVEU19UUklHR0VSUwogCXNlbGVjdCBCSVRSRVZFUlNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIElSIHJlbW90ZSBmdW5jdGlvbmFsaXR5IGZvdW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2hwX3NkY19ydGMuYwppbmRleCAyMTZhNTU5Li5lYTgyMWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaHBfc2RjX3J0Yy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9ocF9zZGNfcnRjLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAvKiBSZWFkIHRoZSBpODA0MiBmYXN0IGhhbmRzaGFrZSB0aW1lciAqLwogc3RhdGljIGlubGluZSBpbnQgaHBfc2RjX3J0Y19yZWFkX2ZocyhzdHJ1Y3QgdGltZXZhbCAqcmVzKSB7Ci0JdWludDY0X3QgcmF3OworCWludDY0X3QgcmF3OwogCXVuc2lnbmVkIGludCB0ZW5tczsKIAogCXJhdyA9IGhwX3NkY19ydGNfcmVhZF9pODA0MnRpbWVyKEhQX1NEQ19DTURfTE9BRF9GSFMsIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JvdGFyeV9lbmNvZGVyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwppbmRleCBjODA2ZmJmLi4zYjlmNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYwpAQCAtMTA2LDggKzEwNiw4IEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJaW50IGVycjsKIAotCWlmICghcGRhdGEgfHwgIXBkYXRhLT5zdGVwcykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIHBsYXRmb3JtIGRhdGFcbiIpOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggYzRmNDIzMS4uYjA2NDQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBiYmNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmV4aXQgYmJjX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKIHsKIAlzdHJ1Y3Qgc3BhcmNzcGtyX3N0YXRlICpzdGF0ZSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gc3RhdGUtPmlucHV0X2RldjsKQEAgLTMwOCw3ICszMDgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ3JvdmVyX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdyb3Zlcl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RydWN0IHNwYXJjc3Brcl9zdGF0ZSAqc3RhdGUgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCXN0cnVjdCBncm92ZXJfYmVlcF9pbmZvICppbmZvID0gJnN0YXRlLT51Lmdyb3ZlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy91aW5wdXQuYwppbmRleCBjNWE0OWFiLi5kM2Y1NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvdWlucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3VpbnB1dC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKgkJLSBmaXJzdCBwdWJsaWMgdmVyc2lvbgogICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYwppbmRleCAxMWZkMDM4Li5hOTMyMTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCkBAIC05MzYsNiArOTM2LDE1IEBACiAJfSwKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLAorCQkuaWRlbnQgPSAiTWVkaW9uIE1EIDQyMjAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNZWRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiV0lNIDIwMzAiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhID0ga2V5bWFwX2ZzX2FtaWxvX3Byb192MjAwMAorCX0sCisJeworCQkuY2FsbGJhY2sgPSBkbWlfbWF0Y2hlZCwKIAkJLmlkZW50ID0gIk1lZGlvbiBNRCA5NjUwMCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTUVESU9OUEMiKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwppbmRleCA1ZTYzMDg2Li44MjgxMTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCkBAIC0xMDcsOCArMTA3LDcgQEAKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkNGLTcyIiksCiAJCX0sCi0JCS5jYWxsYmFjayA9IGxpZmVib29rX3NldF9zZXJpb19waHlzLAotCQkuZHJpdmVyX2RhdGEgPSAiaXNhMDA2MC9zZXJpbzMiLAorCQkuY2FsbGJhY2sgPSBsaWZlYm9va19zZXRfNmJ5dGVfcHJvdG8sCiAJfSwKIAl7CiAJCS5pZGVudCA9ICJMaWZlYm9vayBCMTQyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IGRlNzQ1ZDcuLmFiNWRjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQkJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB8IFBTMlBQX1RBU0tfQlROIHwKIAkJCQlQUzJQUF9FWFRSQV9CVE4gfCBQUzJQUF9OQVZfQlROIHwgUFMyUFBfSFdIRUVMIH0sCiAJCXsgNzIsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCTAgfSwJCQkvKiBULUNIMTE6IFRyYWNrTWFuIE1hcmJsZSAqLwotCQl7IDczLAkwLAkJCVBTMlBQX1NJREVfQlROIH0sCisJCXsgNzMsCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1NJREVfQlROIH0sCS8qIFRyYWNrTWFuIEZYICovCiAJCXsgNzUsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzYsCVBTMlBQX0tJTkRfV0hFRUwsCVBTMlBQX1dIRUVMIH0sCiAJCXsgNzksCVBTMlBQX0tJTkRfVFJBQ0tNQU4sCVBTMlBQX1dIRUVMIH0sCQkvKiBUcmFja01hbiB3aXRoIHdoZWVsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA2OTBhZWQ5Li4wN2M1Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogc3RhdGljIGludCBwc21vdXNlX2V4dGVuc2lvbnMoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4X3Byb3RvLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewotCWJvb2wgc3luYXB0aWNzX2hhcmR3YXJlID0gdHJ1ZTsKKwlib29sIHN5bmFwdGljc19oYXJkd2FyZSA9IGZhbHNlOwogCiAvKgogICogV2UgYWx3YXlzIGNoZWNrIGZvciBsaWZlYm9vayBiZWNhdXNlIGl0IGRvZXMgbm90IGRpc3R1cmIgbW91c2UKQEAgLTE2NzMsNyArMTY3Myw3IEBACiB7CiAJaW50IHR5cGUgPSAqKCh1bnNpZ25lZCBpbnQgKilrcC0+YXJnKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzXG4iLCBwc21vdXNlX3Byb3RvY29sX2J5X3R5cGUodHlwZSktPm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVzIiwgcHNtb3VzZV9wcm90b2NvbF9ieV90eXBlKHR5cGUpLT5uYW1lKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgcHNtb3VzZV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBiNjZmZjFhLi5mNGE2MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY1Miw2ICs2NTIsMTYgQEAKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlRPU0hJQkEiKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiUE9SVEVHRSBNMzAwIiksCiAJCX0sCisKKwl9LAorCXsKKwkJLmlkZW50ID0gIlRvc2hpYmEgUG9ydGVnZSBNMzAwIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJUT1NISUJBIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlBvcnRhYmxlIFBDIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgIlZlcnNpb24gMS4wIiksCisJCX0sCisKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwppbmRleCA5NjZiODg2Li5hMTNkODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIE1PVVNFREVWX01JTk9SUwkJMzIKICNkZWZpbmUgTU9VU0VERVZfTUlYCQkzMQogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKaW5kZXggYzRiM2ZiZC4uYWE1MzNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIGNvbmZpZyBTRVJJTwogCXRyaXN0YXRlICJTZXJpYWwgSS9PIHN1cHBvcnQiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFllcyBoZXJlIGlmIHlvdSBoYXZlIGFueSBpbnB1dCBkZXZpY2UgdGhhdCB1c2VzIHNlcmlhbCBJL08gdG8KIAkgIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c3RlbS4gVGhpcyBpbmNsdWRlcyB0aGUKIAkgIAkJKiBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMiBtb3VzZSAqCkBAIC0yMiw3ICsyMiw3IEBACiAJdHJpc3RhdGUgImk4MDQyIFBDIEtleWJvYXJkIGNvbnRyb2xsZXIiIGlmIEVNQkVEREVEIHx8ICFYODYKIAlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uICFQQVJJU0MgJiYgKCFBUk0gfHwgQVJDSF9TSEFSSyB8fCBGT09UQlJJREdFX0hPU1QpICYmICFNNjhLICYmICFCTEFDS0ZJTgotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBpODA0MiBpcyB0aGUgY2hpcCBvdmVyIHdoaWNoIHRoZSBzdGFuZGFyZCBBVCBrZXlib2FyZCBhbmQgUFMvMgogCSAgbW91c2UgYXJlIGNvbm5lY3RlZCB0byB0aGUgY29tcHV0ZXIuIElmIHlvdSB1c2UgdGhlc2UgZGV2aWNlcywKIAkgIHlvdSdsbCBuZWVkIHRvIHNheSBZIGhlcmUuCkBAIC0zNSw3ICszNSw3IEBACiBjb25maWcgU0VSSU9fU0VSUE9SVAogCXRyaXN0YXRlICJTZXJpYWwgcG9ydCBsaW5lIGRpc2NpcGxpbmUiCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQorCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHBsYW4gdG8gdXNlIGFuIGlucHV0IGRldmljZSAobW91c2UsIGpveXN0aWNrLAogCSAgdGFibGV0LCA2ZG9mKSB0aGF0IGNvbW11bmljYXRlcyBvdmVyIHRoZSBSUzIzMiBzZXJpYWwgKENPTSkgcG9ydC4KIApAQCAtNDksNyArNDksNyBAQAogY29uZmlnIFNFUklPX0NUODJDNzEwCiAJdHJpc3RhdGUgImN0ODJjNzEwIEF1eCBwb3J0IGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBYODYKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFRleGFzIEluc3RydW1lbnRzIFRyYXZlbE1hdGUgbm90ZWJvb2sKIAkgIGVxdWlwcGVkIHdpdGggdGhlIGN0ODJjNzEwIGNoaXAgYW5kIHdhbnQgdG8gdXNlIGEgbW91c2UgY29ubmVjdGVkCiAJICB0byB0aGUgIlF1aWNrUG9ydCIuCkBAIC02Niw3ICs2Niw3IEBACiBjb25maWcgU0VSSU9fUEFSS0JECiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQga2V5Ym9hcmQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYnVpbHQgYSBzaW1wbGUgcGFyYWxsZWwgcG9ydCBhZGFwdGVyIHRvIGF0dGFjaAogCSAgYW4gYWRkaXRpb25hbCBBVCBrZXlib2FyZCwgWFQga2V5Ym9hcmQgb3IgUFMvMiBtb3VzZS4KIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdHJpc3RhdGUgIkhQIFN5c3RlbSBEZXZpY2UgQ29udHJvbGxlciBpODA0MiBTdXBwb3J0IgogCWRlcGVuZHMgb24gKEdTQyB8fCBIUDMwMCkgJiYgU0VSSU8KIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgIlN5c3RlbSBEZXZpY2UKIAkgIENvbnRyb2xsZXIiLCBhbiBpODA0MiBjYXJyeWluZyBtaWNyb2NvZGUgdG8gbWFuYWdlIGEKIAkgIGZldyBtaXNjZWxsYW5lb3VzIGRldmljZXMgb24gc29tZSBIZXdsZXR0IFBhY2thcmQgc3lzdGVtcy4KQEAgLTE2OCw2ICsxNjgsNyBAQAogCiBjb25maWcgU0VSSU9fTElCUFMyCiAJdHJpc3RhdGUgIlBTLzIgZHJpdmVyIGxpYnJhcnkiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBTRVJJT19JODA0MiB8fCBTRVJJT19JODA0Mj1uCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIGEgZHJpdmVyIGZvciBkZXZpY2UgY29ubmVjdGVkCiAJICB0byBhIFBTLzIgcG9ydCwgc3VjaCBhcyBQUy8yIG1vdXNlIG9yIHN0YW5kYXJkIEFUIGtleWJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggYTM5YmM0ZS4uYTUzNzkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0zMjcsNiArMzI3LDE3IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qCisJCSAqIFJlc2V0IGFuZCBHRVQgSUQgY29tbWFuZHMgaXNzdWVkIHZpYSBLQkQgcG9ydCBhcmUKKwkJICogc29tZXRpbWVzIGJlaW5nIGRlbGl2ZXJlZCB0byBBVVgzLgorCQkgKi8KKwkJLmlkZW50ID0gIlNvbnkgVmFpbyBGWi0yNDBFIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZHTi1GWjI0MEUiKSwKKwkJfSwKKwl9LAorCXsKIAkJLmlkZW50ID0gIkFtb2kgTTYzNi9BNzM3IiwKIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBbW9pIEVsZWN0cm9uaWNzIENPLixMVEQuIiksCkBAIC02NjEsNyArNjcyLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX3BucF9pbml0KHZvaWQpCiB7CiAJY2hhciBrYmRfaXJxX3N0cls0XSA9IHsgMCB9LCBhdXhfaXJxX3N0cls0XSA9IHsgMCB9OwotCWludCBwbnBfZGF0YV9idXN0ZWQgPSBmYWxzZTsKKwlib29sIHBucF9kYXRhX2J1c3RlZCA9IGZhbHNlOwogCWludCBlcnI7CiAKICNpZmRlZiBDT05GSUdfWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggYmM1NmU1Mi4uMWRmMDJkMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTYwOSw2ICs2MDksOCBAQAogCXN0ciA9IGk4MDQyX3JlYWRfc3RhdHVzKCk7CiAJaWYgKHN0ciAmIEk4MDQyX1NUUl9PQkYpIHsKIAkJZGF0YSA9IGk4MDQyX3JlYWRfZGF0YSgpOworCQlkYmcoIiUwMnggPC0gaTgwNDIgKGF1eF90ZXN0X2lycSwgJXMpIiwKKwkJCWRhdGEsIHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBID8gImF1eCIgOiAia2JkIik7CiAJCWlmIChpODA0Ml9pcnFfYmVpbmdfdGVzdGVkICYmCiAJCSAgICBkYXRhID09IDB4YTUgJiYgKHN0ciAmIEk4MDQyX1NUUl9BVVhEQVRBKSkKIAkJCWNvbXBsZXRlKCZpODA0Ml9hdXhfaXJxX2RlbGl2ZXJlZCk7CkBAIC03NTAsNiArNzUyLDcgQEAKICAqIEFVWCBJUlEgd2FzIG5ldmVyIGRlbGl2ZXJlZCBzbyB3ZSBuZWVkIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyIHRvCiAgKiBnZXQgcmlkIG9mIHRoZSBieXRlIHdlIHB1dCB0aGVyZTsgb3RoZXJ3aXNlIGtleWJvYXJkIG1heSBub3Qgd29yay4KICAqLworCQlkYmcoIiAgICAgLS0gaTgwNDIgKGF1eCBpcnEgdGVzdCB0aW1lb3V0KSIpOwogCQlpODA0Ml9mbHVzaCgpOwogCQlyZXR2YWwgPSAtMTsKIAl9CkBAIC04MzMsMTcgKzgzNiwzMiBAQAogc3RhdGljIGludCBpODA0Ml9jb250cm9sbGVyX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGN0clsyXTsKIAogLyoKLSAqIFNhdmUgdGhlIENUUiBmb3IgcmVzdG9yYWwgb24gdW5sb2FkIC8gcmVib290LgorICogU2F2ZSB0aGUgQ1RSIGZvciByZXN0b3JlIG9uIHVubG9hZCAvIHJlYm9vdC4KICAqLwogCi0JaWYgKGk4MDQyX2NvbW1hbmQoJmk4MDQyX2N0ciwgSTgwNDJfQ01EX0NUTF9SQ1RSKSkgewotCQlwcmludGsoS0VSTl9FUlIgImk4MDQyLmM6IENhbid0IHJlYWQgQ1RSIHdoaWxlIGluaXRpYWxpemluZyBpODA0Mi5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJZG8geworCQlpZiAobiA+PSAxMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImk4MDQyLmM6IFVuYWJsZSB0byBnZXQgc3RhYmxlIENUUiByZWFkLlxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCi0JaTgwNDJfaW5pdGlhbF9jdHIgPSBpODA0Ml9jdHI7CisJCWlmIChuICE9IDApCisJCQl1ZGVsYXkoNTApOworCisJCWlmIChpODA0Ml9jb21tYW5kKCZjdHJbbisrICUgMl0sIEk4MDQyX0NNRF9DVExfUkNUUikpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJpODA0Mi5jOiBDYW4ndCByZWFkIENUUiB3aGlsZSBpbml0aWFsaXppbmcgaTgwNDIuXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwl9IHdoaWxlIChuIDwgMiB8fCBjdHJbMF0gIT0gY3RyWzFdKTsKKworCWk4MDQyX2luaXRpYWxfY3RyID0gaTgwNDJfY3RyID0gY3RyWzBdOwogCiAvKgogICogRGlzYWJsZSB0aGUga2V5Ym9hcmQgaW50ZXJmYWNlIGFuZCBpbnRlcnJ1cHQuCkBAIC04OTIsNiArOTEwLDEyIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAorLyoKKyAqIEZsdXNoIHdoYXRldmVyIGFjY3VtdWxhdGVkIHdoaWxlIHdlIHdlcmUgZGlzYWJsaW5nIGtleWJvYXJkIHBvcnQuCisgKi8KKworCWk4MDQyX2ZsdXNoKCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTExLDcgKzkzNSw3IEBACiAJaTgwNDJfY3RyIHw9IEk4MDQyX0NUUl9LQkRESVMgfCBJODA0Ml9DVFJfQVVYRElTOwogCWk4MDQyX2N0ciAmPSB+KEk4MDQyX0NUUl9LQkRJTlQgfCBJODA0Ml9DVFJfQVVYSU5UKTsKIAotCWlmIChpODA0Ml9jb21tYW5kKCZpODA0Ml9pbml0aWFsX2N0ciwgSTgwNDJfQ01EX0NUTF9XQ1RSKSkKKwlpZiAoaTgwNDJfY29tbWFuZCgmaTgwNDJfY3RyLCBJODA0Ml9DTURfQ1RMX1dDVFIpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpODA0Mi5jOiBDYW4ndCB3cml0ZSBDVFIgd2hpbGUgcmVzZXR0aW5nLlxuIik7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYwppbmRleCA3NjliYTY1Li5mMzg3NmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCmluZGV4IGIwMzAwOWIuLjI3ZmRhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYwpAQCAtOSw2ICs5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcnBvcnQuYwppbmRleCBiOTY5NGI2Li42ZDM0NTExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWQ3ODc5LmMKaW5kZXggZjA2MzMyYy4uYzIxZTZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZDc4NzkuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2FkNzg3OS5jCkBAIC02NDUsNyArNjQ1LDcgQEAKIAkJa2ZyZWUodHMpOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgYWQ3ODc5X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtNzMyLDcgKzczMiw3IEBACiAJCWtmcmVlKHRzKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGFkNzg3OV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCmluZGV4IDU3ZDI2MzYuLmRjNTA2YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2RpdmVydF9wcm9jZnMuYyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCmluZGV4IDhiMjU2YTYuLjM2OTdjNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvZGl2ZXJ0X3Byb2Nmcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjZWxzZQogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSAiaXNkbl9kaXZlcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hcmNvZmkuYwppbmRleCBkMzBjZTViLi44NWE4ZmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXJjb2ZpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FyY29maS5jCkBAIC0xMCw2ICsxMCw3IEBACiAgKgogICovCiAgCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogI2luY2x1ZGUgImlzYWMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYwppbmRleCA1YzQ2YTcxLi44ZDIyZjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhpc2F4LmgiCiAjaW5jbHVkZSAiaGZjXzJiZHMwLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwppbmRleCBkMTEwYTc3Li4xMDkxNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJoZmNfcGNpLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogc3RhdGljIGNvbnN0IGNoYXIgKmhmY3BjaV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuNDguMi40ICQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Njb25mLmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwppbmRleCA4ZjlmNDkxLi45MGIzNWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYwpAQCAtMTEsNiArMTEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX3Byb2Nsb2cuYwppbmRleCA4OTkxZDJjLi44YmNhZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2xvZy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jbG9nLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImh5c2RuX2RlZnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9kcnYuYwppbmRleCA4YzY2YmNiLi4xMjNjMWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvZHJ2LmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKaW5kZXggZTA3NWU4ZC4uMzBmMGY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jIGIvZHJpdmVycy9pc2RuL3NjL2luaXQuYwppbmRleCBkZDBhY2QwLi41YTA3NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJpbmNsdWRlcy5oIgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAjaW5jbHVkZSAiY2FyZC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA3YzhlNzEyMmEuLmU0ZjU5OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNTAsOSArMTUwLDkgQEAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIE4uUy4gTFAzOTQ0IChGdW4gTGlnaHQpIEkyQyBjaGlwIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMKIAloZWxwCi0gICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKLSAgICBTZW1pY29uZHVjdG9yIExQMzk0NCBMaWdodGluZyBNYW5hZ2VtZW50IFVuaXQgKExNVSkgYWxzbyBrbm93biBhcwotICAgIEZ1biBMaWdodCBDaGlwLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBMRURzIGNvbm5lY3RlZCB0byB0aGUgTmF0aW9uYWwKKwkgIFNlbWljb25kdWN0b3IgTFAzOTQ0IExpZ2h0aW5nIE1hbmFnZW1lbnQgVW5pdCAoTE1VKSBhbHNvIGtub3duIGFzCisJICBGdW4gTGlnaHQgQ2hpcC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGVkcy1scDM5NDQuCkBAIC0xOTUsNiArMTk1LDEzIEBACiAJICBMRUQgZHJpdmVyIGNoaXBzIGFjY2Vzc2VkIHZpYSB0aGUgSTJDIGJ1cy4gIFN1cHBvcnRlZAogCSAgZGV2aWNlcyBpbmNsdWRlIFBDQTk1NTAsIFBDQTk1NTEsIFBDQTk1NTIsIGFuZCBQQ0E5NTUzLgogCitjb25maWcgTEVEU19XTTgzMVhfU1RBVFVTCisJdHJpc3RhdGUgIkxFRCBzdXBwb3J0IGZvciBzdGF0dXMgTEVEcyBvbiBXTTgzMXggUE1JQ3MiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBzdGF0dXMgTEVEcyBvZiB0aGUgV004MzF4CisgICAgICAgICAgc2VyaWVzIG9mIFBNSUNzLgorCiBjb25maWcgTEVEU19XTTgzNTAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIFdNODM1MCBBdWRpb1BsdXMgUE1JQyIKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEX1dNODM1MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCmluZGV4IGU4Y2RjZjcuLjQ2ZDcyNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKQEAgLTI2LDYgKzI2LDcgQEAKIG9iai0kKENPTkZJR19MRURTX0ZTRykJCQkrPSBsZWRzLWZzZy5vCiBvYmotJChDT05GSUdfTEVEU19QQ0E5NTVYKQkJKz0gbGVkcy1wY2E5NTV4Lm8KIG9iai0kKENPTkZJR19MRURTX0RBOTAzWCkJCSs9IGxlZHMtZGE5MDN4Lm8KK29iai0kKENPTkZJR19MRURTX1dNODMxWF9TVEFUVVMpCSs9IGxlZHMtd204MzF4LXN0YXR1cy5vCiBvYmotJChDT05GSUdfTEVEU19XTTgzNTApCQkrPSBsZWRzLXdtODM1MC5vCiBvYmotJChDT05GSUdfTEVEU19QV00pCQkJKz0gbGVkcy1wd20ubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1jbGV2by1tYWlsLmMKaW5kZXggZjIyNDJkYi4uYTQ5ODEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY2xldm8tbWFpbC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNsZXZvLW1haWwuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJLmZsYWdzCQkJPSBMRURfQ09SRV9TVVNQRU5EUkVTVU1FLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgY2xldm9fbWFpbF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGNsZXZvX21haWxfbGVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY2xldm9fbWFpbF9sZWQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1xdWJlLmMKaW5kZXggMDU5YWEyOS4uODgxNjgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXF1YmUuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcXViZS5jCkBAIC0yOCw3ICsyOCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHF1YmVfZnJvbnRfbGVkID0gewotCS5uYW1lCQkJPSAicXViZS1mcm9udCIsCisJLm5hbWUJCQk9ICJxdWJlOjpmcm9udCIsCiAJLmJyaWdodG5lc3MJCT0gTEVEX0ZVTEwsCiAJLmJyaWdodG5lc3Nfc2V0CQk9IHF1YmVfZnJvbnRfbGVkX3NldCwKIAkuZGVmYXVsdF90cmlnZ2VyCT0gImlkZS1kaXNrIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLWNvYmFsdC1yYXEuYwppbmRleCA1ZjFjZTgxLi5kZWZjMjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1jb2JhbHQtcmFxLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtY29iYWx0LXJhcS5jCkBAIC00OSw3ICs0OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHJhcV93ZWJfbGVkID0gewotCS5uYW1lCQk9ICJyYXEtd2ViIiwKKwkubmFtZQkJPSAicmFxOjp3ZWIiLAogCS5icmlnaHRuZXNzX3NldAk9IHJhcV93ZWJfbGVkX3NldCwKIH07CiAKQEAgLTcwLDcgKzcwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgcmFxX3Bvd2VyX29mZl9sZWQgPSB7Ci0JLm5hbWUJCQk9ICJyYXEtcG93ZXItb2ZmIiwKKwkubmFtZQkJCT0gInJhcTo6cG93ZXItb2ZmIiwKIAkuYnJpZ2h0bmVzc19zZXQJCT0gcmFxX3Bvd2VyX29mZl9sZWRfc2V0LAogCS5kZWZhdWx0X3RyaWdnZXIJPSAicG93ZXItb2ZmIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1ncGlvLmMKaW5kZXggNmIwNjYzOC4uZTUyMjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLWdwaW8uYwpAQCAtNzgsOSArNzgsMTEgQEAKIHsKIAlpbnQgcmV0LCBzdGF0ZTsKIAorCWxlZF9kYXQtPmdwaW8gPSAtMTsKKwogCS8qIHNraXAgbGVkcyB0aGF0IGFyZW4ndCBhdmFpbGFibGUgKi8KIAlpZiAoIWdwaW9faXNfdmFsaWQodGVtcGxhdGUtPmdwaW8pKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlNraXBwaW5nIHVuYXZpbGFibGUgTEVEIGdwaW8gJWQgKCVzKVxuIiwgCisJCXByaW50ayhLRVJOX0lORk8gIlNraXBwaW5nIHVuYXZhaWxhYmxlIExFRCBncGlvICVkICglcylcbiIsCiAJCQkJdGVtcGxhdGUtPmdwaW8sIHRlbXBsYXRlLT5uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jIGIvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCmluZGV4IGRiYTg5MjEuLmFkYzU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKQEAgLTE5LDkgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLXBjYTk1MzIuaD4KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgLyoweDYwLCovIEkyQ19DTElFTlRfRU5EfTsKLUkyQ19DTElFTlRfSU5TTU9EXzEocGNhOTUzMik7Ci0KICNkZWZpbmUgUENBOTUzMl9SRUdfUFNDKGkpICgweDIrKGkpKjIpCiAjZGVmaW5lIFBDQTk1MzJfUkVHX1BXTShpKSAoMHgzKyhpKSoyKQogI2RlZmluZSBQQ0E5NTMyX1JFR19MUzAgIDB4NgpAQCAtMzQsNyArMzEsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHBjYTk1MzJfbGVkIGxlZHNbMTZdOwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICAgICppZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJdTggcHdtWzJdOwogCXU4IHBzY1syXTsKQEAgLTUzLDkgKzUwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBjYTk1MzJfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lICAgPSAicGNhOTUzMiIsCisJCS5uYW1lID0gInBjYTk1MzIiLAogCX0sCi0JLnByb2JlICA9IHBjYTk1MzJfcHJvYmUsCisJLnByb2JlID0gcGNhOTUzMl9wcm9iZSwKIAkucmVtb3ZlID0gcGNhOTUzMl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gcGNhOTUzMl9pZCwKIH07CkBAIC0xNDksNyArMTQ2LDcgQEAKIAogCWlmICgqZGVsYXlfb24gPT0gMCAmJiAqZGVsYXlfb2ZmID09IDApIHsKIAkvKiBsZWQgc3Vic3lzdGVtIGFzayB1cyBmb3IgYSBibGluayByYXRlICovCi0JCSpkZWxheV9vbiAgPSAxMDAwOworCQkqZGVsYXlfb24gPSAxMDAwOwogCQkqZGVsYXlfb2ZmID0gMTAwMDsKIAl9CiAJaWYgKCpkZWxheV9vbiAhPSAqZGVsYXlfb2ZmIHx8ICpkZWxheV9vbiA+IDE2OTAgfHwgKmRlbGF5X29uIDwgNikKQEAgLTIyNyw3ICsyMjQsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUENBOTUzMl9UWVBFX0xFRDoKIAkJCWxlZC0+c3RhdGUgPSBwbGVkLT5zdGF0ZTsKLQkJCWxlZC0+bmFtZSA9ICBwbGVkLT5uYW1lOworCQkJbGVkLT5uYW1lID0gcGxlZC0+bmFtZTsKIAkJCWxlZC0+bGRldi5uYW1lID0gbGVkLT5uYW1lOwogCQkJbGVkLT5sZGV2LmJyaWdodG5lc3MgPSBMRURfT0ZGOwogCQkJbGVkLT5sZGV2LmJyaWdodG5lc3Nfc2V0ID0gcGNhOTUzMl9zZXRfYnJpZ2h0bmVzczsKQEAgLTI1NCw3ICsyNTEsNyBAQAogCQkJZGF0YS0+aWRldi0+bmFtZSA9IHBsZWQtPm5hbWU7CiAJCQlkYXRhLT5pZGV2LT5waHlzID0gImkyYy9wY2E5NTMyIjsKIAkJCWRhdGEtPmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKLQkJCWRhdGEtPmlkZXYtPmlkLnZlbmRvciAgPSAweDAwMWY7CisJCQlkYXRhLT5pZGV2LT5pZC52ZW5kb3IgPSAweDAwMWY7CiAJCQlkYXRhLT5pZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCQkJZGF0YS0+aWRldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAkJCWRhdGEtPmlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfU05EKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYyBiL2RyaXZlcnMvbGVkcy9sZWRzLXdtODMxeC1zdGF0dXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTg2ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMtd204MzF4LXN0YXR1cy5jCkBAIC0wLDAgKzEsMzQxIEBACisvKgorICogTEVEIGRyaXZlciBmb3IgV004MzF4IHN0YXR1cyBMRURzCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzF4L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9zdGF0dXMuaD4KKworCitzdHJ1Y3Qgd204MzF4X3N0YXR1cyB7CisJc3RydWN0IGxlZF9jbGFzc2RldiBjZGV2OworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisKKwlzcGlubG9ja190IHZhbHVlX2xvY2s7CisJaW50IHJlZzsgICAgIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpbnQgcmVnX3ZhbDsgLyogQ29udHJvbCByZWdpc3RlciB2YWx1ZSAqLworCisJaW50IGJsaW5rOworCWludCBibGlua190aW1lOworCWludCBibGlua19jeWM7CisJaW50IHNyYzsKKwllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3M7Cit9OworCisjZGVmaW5lIHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpIFwKKwljb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCB3bTgzMXhfc3RhdHVzLCBjZGV2KQorCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdtODMxeF9zdGF0dXMsCisJCQkJCQkgd29yayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmxlZC0+bXV0ZXgpOworCisJbGVkLT5yZWdfdmFsICY9IH4oV004MzFYX0xFRF9TUkNfTUFTSyB8IFdNODMxWF9MRURfTU9ERV9NQVNLIHwKKwkJCSAgV004MzFYX0xFRF9EVVRZX0NZQ19NQVNLIHwgV004MzFYX0xFRF9EVVJfTUFTSyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwlsZWQtPnJlZ192YWwgfD0gbGVkLT5zcmMgPDwgV004MzFYX0xFRF9TUkNfU0hJRlQ7CisJaWYgKGxlZC0+YmxpbmspIHsKKwkJbGVkLT5yZWdfdmFsIHw9IDIgPDwgV004MzFYX0xFRF9NT0RFX1NISUZUOworCQlsZWQtPnJlZ192YWwgfD0gbGVkLT5ibGlua190aW1lIDw8IFdNODMxWF9MRURfRFVSX1NISUZUOworCQlsZWQtPnJlZ192YWwgfD0gbGVkLT5ibGlua19jeWM7CisJfSBlbHNlIHsKKwkJaWYgKGxlZC0+YnJpZ2h0bmVzcyAhPSBMRURfT0ZGKQorCQkJbGVkLT5yZWdfdmFsIHw9IDEgPDwgV004MzFYX0xFRF9NT0RFX1NISUZUOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJd204MzF4X3JlZ193cml0ZShsZWQtPndtODMxeCwgbGVkLT5yZWcsIGxlZC0+cmVnX3ZhbCk7CisKKwltdXRleF91bmxvY2soJmxlZC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB3bTgzMXhfc3RhdHVzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisJbGVkLT5icmlnaHRuZXNzID0gdmFsdWU7CisJaWYgKHZhbHVlID09IExFRF9PRkYpCisJCWxlZC0+YmxpbmsgPSAwOworCXNjaGVkdWxlX3dvcmsoJmxlZC0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X3N0YXR1c19ibGlua19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sCisJCQkJICAgdW5zaWduZWQgbG9uZyAqZGVsYXlfb2ZmKQoreworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpsZWQgPSB0b193bTgzMXhfc3RhdHVzKGxlZF9jZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJLyogUGljayBzb21lIGRlZmF1bHRzIGlmIHdlJ3ZlIG5vdCBiZWVuIGdpdmVuIHRpbWVzICovCisJaWYgKCpkZWxheV9vbiA9PSAwICYmICpkZWxheV9vZmYgPT0gMCkgeworCQkqZGVsYXlfb24gPSAyNTA7CisJCSpkZWxheV9vZmYgPSAyNTA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxlZC0+dmFsdWVfbG9jaywgZmxhZ3MpOworCisJLyogV2Ugb25seSBoYXZlIGEgbGltaXRlZCBzZWxlY3Rpb24gb2Ygc2V0dGluZ3MsIHNlZSBpZiB3ZSBjYW4KKwkgKiBzdXBwb3J0IHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGJlaW5nIGdpdmVuICovCisJc3dpdGNoICgqZGVsYXlfb24pIHsKKwljYXNlIDEwMDA6CisJCWxlZC0+YmxpbmtfdGltZSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjUwOgorCQlsZWQtPmJsaW5rX3RpbWUgPSAxOworCQlicmVhazsKKwljYXNlIDEyNToKKwkJbGVkLT5ibGlua190aW1lID0gMjsKKwkJYnJlYWs7CisJY2FzZSA2MjoKKwljYXNlIDYzOgorCQkvKiBBY3R1YWxseSA2Mi41bXMgKi8KKwkJbGVkLT5ibGlua190aW1lID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA9PSAwKSB7CisJCXN3aXRjaCAoKmRlbGF5X29mZiAvICpkZWxheV9vbikgeworCQljYXNlIDE6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbGVkLT5ibGlua19jeWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWxlZC0+YmxpbmtfY3ljID0gMjsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQlsZWQtPmJsaW5rX2N5YyA9IDM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChyZXQgPT0gMCkKKwkJbGVkLT5ibGluayA9IDE7CisJZWxzZQorCQlsZWQtPmJsaW5rID0gMDsKKworCS8qIEFsd2F5cyB1cGRhdGU7IGlmIHdlIGZhaWwgdHVybiBvZmYgYmxpbmtpbmcgc2luY2Ugd2UgZXhwZWN0CisJICogYSBzb2Z0d2FyZSBmYWxsYmFjay4gKi8KKwlzY2hlZHVsZV93b3JrKCZsZWQtPndvcmspOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGVkLT52YWx1ZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbGVkX3NyY190ZXh0c1tdID0geworCSJvdHAiLAorCSJwb3dlciIsCisJImNoYXJnZXIiLAorCSJzb2Z0IiwKK307CisKK3N0YXRpYyBzc2l6ZV90IHdtODMxeF9zdGF0dXNfc3JjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X3N0YXR1cyAqbGVkID0gdG9fd204MzF4X3N0YXR1cyhsZWRfY2Rldik7CisJaW50IGk7CisJc3NpemVfdCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmbGVkLT5tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZWRfc3JjX3RleHRzKTsgaSsrKQorCQlpZiAoaSA9PSBsZWQtPnNyYykKKwkJCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIlslc10gIiwgbGVkX3NyY190ZXh0c1tpXSk7CisJCWVsc2UKKwkJCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIiVzICIsIGxlZF9zcmNfdGV4dHNbaV0pOworCisJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKKworCXJldCArPSBzcHJpbnRmKCZidWZbcmV0XSwgIlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCB3bTgzMXhfc3RhdHVzX3NyY19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmxlZCA9IHRvX3dtODMxeF9zdGF0dXMobGVkX2NkZXYpOworCWNoYXIgbmFtZVsyMF07CisJaW50IGk7CisJc2l6ZV90IGxlbjsKKworCW5hbWVbc2l6ZW9mKG5hbWUpIC0gMV0gPSAnXDAnOworCXN0cm5jcHkobmFtZSwgYnVmLCBzaXplb2YobmFtZSkgLSAxKTsKKwlsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbmFtZVtsZW4gLSAxXSA9ICdcMCc7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZWRfc3JjX3RleHRzKTsgaSsrKSB7CisJCWlmICghc3RyY21wKG5hbWUsIGxlZF9zcmNfdGV4dHNbaV0pKSB7CisJCQltdXRleF9sb2NrKCZsZWQtPm11dGV4KTsKKworCQkJbGVkLT5zcmMgPSBpOworCQkJc2NoZWR1bGVfd29yaygmbGVkLT53b3JrKTsKKworCQkJbXV0ZXhfdW5sb2NrKCZsZWQtPm11dGV4KTsKKwkJfQorCX0KKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3JjLCAwNjQ0LCB3bTgzMXhfc3RhdHVzX3NyY19zaG93LCB3bTgzMXhfc3RhdHVzX3NyY19zdG9yZSk7CisKK3N0YXRpYyBpbnQgd204MzF4X3N0YXR1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgd204MzF4X3BkYXRhICpjaGlwX3BkYXRhOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzX3BkYXRhIHBkYXRhOworCXN0cnVjdCB3bTgzMXhfc3RhdHVzICpkcnZkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpZCA9IHBkZXYtPmlkICUgQVJSQVlfU0laRShjaGlwX3BkYXRhLT5zdGF0dXMpOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWRydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd204MzF4X3N0YXR1cyksIEdGUF9LRVJORUwpOworCWlmICghZHJ2ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRydmRhdGEpOworCisJZHJ2ZGF0YS0+d204MzF4ID0gd204MzF4OworCWRydmRhdGEtPnJlZyA9IHJlcy0+c3RhcnQ7CisKKwlpZiAod204MzF4LT5kZXYtPnBsYXRmb3JtX2RhdGEpCisJCWNoaXBfcGRhdGEgPSB3bTgzMXgtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwllbHNlCisJCWNoaXBfcGRhdGEgPSBOVUxMOworCisJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CisJaWYgKGNoaXBfcGRhdGEgJiYgY2hpcF9wZGF0YS0+c3RhdHVzW2lkXSkKKwkJbWVtY3B5KCZwZGF0YSwgY2hpcF9wZGF0YS0+c3RhdHVzW2lkXSwgc2l6ZW9mKHBkYXRhKSk7CisJZWxzZQorCQlwZGF0YS5uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CisKKwltdXRleF9pbml0KCZkcnZkYXRhLT5tdXRleCk7CisJSU5JVF9XT1JLKCZkcnZkYXRhLT53b3JrLCB3bTgzMXhfc3RhdHVzX3dvcmspOworCXNwaW5fbG9ja19pbml0KCZkcnZkYXRhLT52YWx1ZV9sb2NrKTsKKworCS8qIFdlIGNhY2hlIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFuZCByZWFkIHN0YXJ0dXAgdmFsdWVzCisJICogZnJvbSBpdC4gKi8KKwlkcnZkYXRhLT5yZWdfdmFsID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgZHJ2ZGF0YS0+cmVnKTsKKworCWlmIChkcnZkYXRhLT5yZWdfdmFsICYgV004MzFYX0xFRF9NT0RFX01BU0spCisJCWRydmRhdGEtPmJyaWdodG5lc3MgPSBMRURfRlVMTDsKKwllbHNlCisJCWRydmRhdGEtPmJyaWdodG5lc3MgPSBMRURfT0ZGOworCisJLyogU2V0IGEgZGVmYXVsdCBzb3VyY2UgaWYgY29uZmlndXJlZCwgb3RoZXJ3aXNlIGxlYXZlIHRoZQorCSAqIGN1cnJlbnQgaGFyZHdhcmUgc2V0dGluZy4KKwkgKi8KKwlpZiAocGRhdGEuZGVmYXVsdF9zcmMgPT0gV004MzFYX1NUQVRVU19QUkVTRVJWRSkgeworCQlkcnZkYXRhLT5zcmMgPSBkcnZkYXRhLT5yZWdfdmFsOworCQlkcnZkYXRhLT5zcmMgJj0gV004MzFYX0xFRF9TUkNfTUFTSzsKKwkJZHJ2ZGF0YS0+c3JjID4+PSBXTTgzMVhfTEVEX1NSQ19TSElGVDsKKwl9IGVsc2UgeworCQlkcnZkYXRhLT5zcmMgPSBwZGF0YS5kZWZhdWx0X3NyYyAtIDE7CisJfQorCisJZHJ2ZGF0YS0+Y2Rldi5uYW1lID0gcGRhdGEubmFtZTsKKwlkcnZkYXRhLT5jZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHBkYXRhLmRlZmF1bHRfdHJpZ2dlcjsKKwlkcnZkYXRhLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gd204MzF4X3N0YXR1c19zZXQ7CisJZHJ2ZGF0YS0+Y2Rldi5ibGlua19zZXQgPSB3bTgzMXhfc3RhdHVzX2JsaW5rX3NldDsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3bTgzMXgtPmRldiwgJmRydmRhdGEtPmNkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBMRUQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9sZWQ7CisJfQorCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRydmRhdGEtPmNkZXYuZGV2LCAmZGV2X2F0dHJfc3JjKTsKKwlpZiAocmV0ICE9IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJObyBzb3VyY2UgY29udHJvbCBmb3IgTEVEOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiAwOworCitlcnJfbGVkOgorCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZkcnZkYXRhLT5jZGV2KTsKKwlrZnJlZShkcnZkYXRhKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdtODMxeF9zdGF0dXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeF9zdGF0dXMgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldmljZV9yZW1vdmVfZmlsZShkcnZkYXRhLT5jZGV2LmRldiwgJmRldl9hdHRyX3NyYyk7CisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRydmRhdGEtPmNkZXYpOworCWtmcmVlKGRydmRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODMxeF9zdGF0dXNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gIndtODMxeC1zdGF0dXMiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwkJICAgfSwKKwkucHJvYmUgPSB3bTgzMXhfc3RhdHVzX3Byb2JlLAorCS5yZW1vdmUgPSB3bTgzMXhfc3RhdHVzX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODMxeF9zdGF0dXNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJndtODMxeF9zdGF0dXNfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHdtODMxeF9zdGF0dXNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIHdtODMxeF9zdGF0dXNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTgzMXhfc3RhdHVzX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTgzMXhfc3RhdHVzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV004MzF4IHN0YXR1cyBMRUQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODMxeC1zdGF0dXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWdwaW8uYwppbmRleCAxYmM1ZGI0Li5mNTkxMzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1ncGlvLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctZ3Bpby5jCkBAIC00NCwyMiArNDQsMjIgQEAKIAkJCXN0cnVjdCBncGlvX3RyaWdfZGF0YSwgd29yayk7CiAJaW50IHRtcDsKIAotICAgICAgIGlmICghZ3Bpb19kYXRhLT5ncGlvKQotCSAgICAgICByZXR1cm47CisJaWYgKCFncGlvX2RhdGEtPmdwaW8pCisJCXJldHVybjsKIAotICAgICAgIHRtcCA9IGdwaW9fZ2V0X3ZhbHVlKGdwaW9fZGF0YS0+Z3Bpbyk7Ci0gICAgICAgaWYgKGdwaW9fZGF0YS0+aW52ZXJ0ZWQpCi0JICAgICAgIHRtcCA9ICF0bXA7CisJdG1wID0gZ3Bpb19nZXRfdmFsdWUoZ3Bpb19kYXRhLT5ncGlvKTsKKwlpZiAoZ3Bpb19kYXRhLT5pbnZlcnRlZCkKKwkJdG1wID0gIXRtcDsKIAotICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAgICAgIGlmIChncGlvX2RhdGEtPmRlc2lyZWRfYnJpZ2h0bmVzcykKLSAgICAgICAgICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpOwotICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICBsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsIExFRF9GVUxMKTsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfT0ZGKTsKLSAgICAgICB9CisJaWYgKHRtcCkgeworCQlpZiAoZ3Bpb19kYXRhLT5kZXNpcmVkX2JyaWdodG5lc3MpCisJCQlsZWRfc2V0X2JyaWdodG5lc3MoZ3Bpb19kYXRhLT5sZWQsCisJCQkJCSAgIGdwaW9fZGF0YS0+ZGVzaXJlZF9icmlnaHRuZXNzKTsKKwkJZWxzZQorCQkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfRlVMTCk7CisJfSBlbHNlIHsKKwkJbGVkX3NldF9icmlnaHRuZXNzKGdwaW9fZGF0YS0+bGVkLCBMRURfT0ZGKTsKKwl9CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGdwaW9fdHJpZ19icmlnaHRuZXNzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYyBiL2RyaXZlcnMvbGd1ZXN0L2ludGVycnVwdHNfYW5kX3RyYXBzLmMKaW5kZXggMTg2NDgxOC4uZGFhZjg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvaW50ZXJydXB0c19hbmRfdHJhcHMuYworKysgYi9kcml2ZXJzL2xndWVzdC9pbnRlcnJ1cHRzX2FuZF90cmFwcy5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAibGcuaCIKIAogLyogQWxsb3cgR3Vlc3RzIHRvIHVzZSBhIG5vbi0xMjggKGllLiBub24tTGludXgpIHN5c2NhbGwgdHJhcC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMgYi9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCmluZGV4IGI0ZDNmN2MuLmJkMTYzMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xndWVzdC9sZ3Vlc3RfdXNlci5jCisrKyBiL2RyaXZlcnMvbGd1ZXN0L2xndWVzdF91c2VyLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogICogdXNlczogcmVhZGluZyBhbmQgd3JpdGluZyBhIGNoYXJhY3RlciBkZXZpY2UgY2FsbGVkIC9kZXYvbGd1ZXN0LiAgQWxsIHRoZQogICogd29yayBoYXBwZW5zIGluIHRoZSByZWFkKCksIHdyaXRlKCkgYW5kIGNsb3NlKCkgcm91dGluZXM6CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxndWVzdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGd1ZXN0X2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5yZWxlYXNlID0gY2xvc2UsCiAJLndyaXRlCSA9IHdyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IGZkZTM3N2MuLjU1NmYwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTEyNCw2ICsxMjQsOCBAQAogCXJldHVybiBkYXRhOwogfQogCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdGhlcm1vc3RhdF9kcml2ZXI7CisKIHN0YXRpYyBpbnQKIGF0dGFjaF90aGVybW9zdGF0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTE0OCw3ICsxNTAsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmdGhlcm1vc3RhdF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwppbmRleCBhMDI4NTk4Li5lYTMyYzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCkBAIC0yODYsNiArMjg2LDggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHRoZXJtX3BtNzJfZHJpdmVyOworCiAvKgogICogVXRpbGl0eSBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaTJjX2NsaWVudCBzdHJ1Y3R1cmUgYW5kCiAgKiBhdHRhY2ggaXQgdG8gb25lIG9mIHUzIGFkYXB0ZXJzCkBAIC0zMTgsNyArMzIwLDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsdC0+ZGV0ZWN0ZWQsICZjbHQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2x0LT5kZXRlY3RlZCwgJnRoZXJtX3BtNzJfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCmluZGV4IDU1YWQ5NTYuLmQyNDI5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtbGVkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwpAQCAtNzIsNyArNzIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGxlZF9jbGFzc2RldiBwbXVfbGVkID0gewotCS5uYW1lID0gInBtdS1mcm9udC1sZWQiLAorCS5uYW1lID0gInBtdS1sZWQ6OmZyb250IiwKICNpZmRlZiBDT05GSUdfQURCX1BNVV9MRURfSURFCiAJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBiNDBmYjliLi42ZjMwOGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC00MDUsNyArNDA1LDExIEBACiAJCXByaW50ayhLRVJOX0VSUiAidmlhLXBtdTogY2FuJ3QgbWFwIGludGVycnVwdFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAocmVxdWVzdF9pcnEoaXJxLCB2aWFfcG11X2ludGVycnVwdCwgMCwgIlZJQS1QTVUiLCAodm9pZCAqKTApKSB7CisJLyogV2Ugc2V0IElSUUZfVElNRVIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBpbnRlcnJ1cHQgdG8gYmUgZGlzYWJsZWQKKwkgKiBiZXR3ZWVuIHRoZSAyIHBhc3NlcyBvZiBkcml2ZXIgc3VzcGVuZCwgd2UgY29udHJvbCBvdXIgb3duIGRpc2FibGluZworCSAqIGZvciB0aGF0IG9uZQorCSAqLworCWlmIChyZXF1ZXN0X2lycShpcnEsIHZpYV9wbXVfaW50ZXJydXB0LCBJUlFGX1RJTUVSLCAiVklBLVBNVSIsICh2b2lkICopMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBjYW4ndCByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNDE5LDcgKzQyMyw3IEBACiAJCQlncGlvX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGdwaW9fbm9kZSwgMCk7CiAKIAkJaWYgKGdwaW9faXJxICE9IE5PX0lSUSkgewotCQkJaWYgKHJlcXVlc3RfaXJxKGdwaW9faXJxLCBncGlvMV9pbnRlcnJ1cHQsIDAsCisJCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19pcnEsIGdwaW8xX2ludGVycnVwdCwgSVJRRl9USU1FUiwKIAkJCQkJIkdQSU8xIEFEQiIsICh2b2lkICopMCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJwbXU6IGNhbid0IGdldCBpcnEgJWQiCiAJCQkJICAgICAgICIgKEdQSU8xKVxuIiwgZ3Bpb19pcnEpOwpAQCAtOTI1LDggKzkyOSw3IEBACiAKICNpZmRlZiBDT05GSUdfQURCCiAvKiBTZW5kIGFuIEFEQiBjb21tYW5kICovCi1zdGF0aWMgaW50Ci1wbXVfc2VuZF9yZXF1ZXN0KHN0cnVjdCBhZGJfcmVxdWVzdCAqcmVxLCBpbnQgc3luYykKK3N0YXRpYyBpbnQgcG11X3NlbmRfcmVxdWVzdChzdHJ1Y3QgYWRiX3JlcXVlc3QgKnJlcSwgaW50IHN5bmMpCiB7CiAJaW50IGksIHJldDsKIApAQCAtMTAwNSwxNiArMTAwOCwxMSBAQAogfQogCiAvKiBFbmFibGUvZGlzYWJsZSBhdXRvcG9sbGluZyAqLwotc3RhdGljIGludAotcG11X2FkYl9hdXRvcG9sbChpbnQgZGV2cykKK3N0YXRpYyBpbnQgX19wbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAKLQlpZiAoKHZpYXMgPT0gTlVMTCkgfHwgKCFwbXVfZnVsbHlfaW5pdGVkKSB8fCAhcG11X2hhc19hZGIpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZGV2cykgewotCQlhZGJfZGV2X21hcCA9IGRldnM7CiAJCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIFBNVV9BREJfQ01ELCAwLCAweDg2LAogCQkJICAgIGFkYl9kZXZfbWFwID4+IDgsIGFkYl9kZXZfbWFwKTsKIAkJcG11X2FkYl9mbGFncyA9IDI7CkBAIC0xMDI3LDkgKzEwMjUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBwbXVfYWRiX2F1dG9wb2xsKGludCBkZXZzKQoreworCWlmICgodmlhcyA9PSBOVUxMKSB8fCAoIXBtdV9mdWxseV9pbml0ZWQpIHx8ICFwbXVfaGFzX2FkYikKKwkJcmV0dXJuIC1FTlhJTzsKKworCWFkYl9kZXZfbWFwID0gZGV2czsKKwlyZXR1cm4gX19wbXVfYWRiX2F1dG9wb2xsKGRldnMpOworfQorCiAvKiBSZXNldCB0aGUgQURCIGJ1cyAqLwotc3RhdGljIGludAotcG11X2FkYl9yZXNldF9idXModm9pZCkKK3N0YXRpYyBpbnQgcG11X2FkYl9yZXNldF9idXModm9pZCkKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwogCWludCBzYXZlX2F1dG9wb2xsID0gYWRiX2Rldl9tYXA7CkBAIC0xMDM4LDEzICsxMDQ0LDEzIEBACiAJCXJldHVybiAtRU5YSU87CiAKIAkvKiBhbnlvbmUgZ290IGEgYmV0dGVyIGlkZWE/PyAqLwotCXBtdV9hZGJfYXV0b3BvbGwoMCk7CisJX19wbXVfYWRiX2F1dG9wb2xsKDApOwogCi0JcmVxLm5ieXRlcyA9IDU7CisJcmVxLm5ieXRlcyA9IDQ7CiAJcmVxLmRvbmUgPSBOVUxMOwogCXJlcS5kYXRhWzBdID0gUE1VX0FEQl9DTUQ7Ci0JcmVxLmRhdGFbMV0gPSAwOwotCXJlcS5kYXRhWzJdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzFdID0gQURCX0JVU1JFU0VUOworCXJlcS5kYXRhWzJdID0gMDsKIAlyZXEuZGF0YVszXSA9IDA7CiAJcmVxLmRhdGFbNF0gPSAwOwogCXJlcS5yZXBseV9sZW4gPSAwOwpAQCAtMTA1Niw3ICsxMDYyLDcgQEAKIAlwbXVfd2FpdF9jb21wbGV0ZSgmcmVxKTsKIAogCWlmIChzYXZlX2F1dG9wb2xsICE9IDApCi0JCXBtdV9hZGJfYXV0b3BvbGwoc2F2ZV9hdXRvcG9sbCk7CisJCV9fcG11X2FkYl9hdXRvcG9sbChzYXZlX2F1dG9wb2xsKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2xtNzVfc2Vuc29yLmMKaW5kZXggNTI5ODg2Yy4uZWQ2NDI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbG03NV9zZW5zb3IuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9sbTc1X3NlbnNvci5jCkBAIC0xMTUsNiArMTE1LDggQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3Zl9sbTc1X2RyaXZlcjsKKwogc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICp3Zl9sbTc1X2NyZWF0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJCSAgICAgdTggYWRkciwgaW50IGRzMTc3NSwKIAkJCQkJICAgICBjb25zdCBjaGFyICpsb2MpCkBAIC0xNTcsNyArMTU5LDcgQEAKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgogCSAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGkyYy1jb3JlIGhvbGRzIHRoZSBjb3JlX2xvY2sgbXV0ZXggZm9yIHVzLgogCSAqLwotCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+ZGV0ZWN0ZWQsICZjbGllbnQtPmRyaXZlci0+Y2xpZW50cyk7CisJbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJndmX2xtNzVfZHJpdmVyLmNsaWVudHMpOwogCXJldHVybiBjbGllbnQ7CiAgZmFpbDoKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9tYXg2NjkwX3NlbnNvci5jCmluZGV4IGUyYTU1ZWMuLmE2N2IzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX21heDY2OTBfc2Vuc29yLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fbWF4NjY5MF9zZW5zb3IuYwpAQCAtODgsNiArODgsOCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX21heDY2OTBfZHJpdmVyOworCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKndmX21heDY2OTBfY3JlYXRlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgIHU4IGFkZHIsIGNvbnN0IGNoYXIgKmxvYykKIHsKQEAgLTExOSw3ICsxMjEsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2ZfbWF4NjY5MF9kcml2ZXIuY2xpZW50cyk7CiAJcmV0dXJuIGNsaWVudDsKIAogIGZhaWw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKaW5kZXggNWRhNzI5ZS4uZTIwMzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwpAQCAtMTk0LDYgKzE5NCw4IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHdmX3NhdF9kcml2ZXI7CisKIHN0YXRpYyB2b2lkIHdmX3NhdF9jcmVhdGUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKQEAgLTIyMiw3ICsyMjQsNyBAQAogCSAqIExldCBpMmMtY29yZSBkZWxldGUgdGhhdCBkZXZpY2Ugb24gZHJpdmVyIHJlbW92YWwuCiAJICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaTJjLWNvcmUgaG9sZHMgdGhlIGNvcmVfbG9jayBtdXRleCBmb3IgdXMuCiAJICovCi0JbGlzdF9hZGRfdGFpbCgmY2xpZW50LT5kZXRlY3RlZCwgJmNsaWVudC0+ZHJpdmVyLT5jbGllbnRzKTsKKwlsaXN0X2FkZF90YWlsKCZjbGllbnQtPmRldGVjdGVkLCAmd2Zfc2F0X2RyaXZlci5jbGllbnRzKTsKIH0KIAogc3RhdGljIGludCB3Zl9zYXRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvTWFrZWZpbGUgYi9kcml2ZXJzL21kL01ha2VmaWxlCmluZGV4IDFkYzQxODUuLmUzNTVlN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9NYWtlZmlsZQpAQCAtNDYsNyArNDYsNyBAQAogb2JqLSQoQ09ORklHX0RNX1pFUk8pCQkrPSBkbS16ZXJvLm8KIAogcXVpZXRfY21kX3Vucm9sbCA9IFVOUk9MTCAgJEAKLSAgICAgIGNtZF91bnJvbGwgPSAkKFBFUkwpICQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5wbCAkKFVOUk9MTCkgXAorICAgICAgY21kX3Vucm9sbCA9ICQoQVdLKSAtZiQoc3JjdHJlZSkvJChzcmMpL3Vucm9sbC5hd2sgLXZOPSQoVU5ST0xMKSBcCiAgICAgICAgICAgICAgICAgICAgPCAkPCA+ICRAIHx8ICggcm0gLWYgJEAgJiYgZXhpdCAxICkKIAogaWZlcSAoJChDT05GSUdfQUxUSVZFQykseSkKQEAgLTU5LDU2ICs1OSw1NiBAQAogCiB0YXJnZXRzICs9IHJhaWQ2aW50MS5jCiAkKG9iaikvcmFpZDZpbnQxLmM6ICAgVU5ST0xMIDo9IDEKLSQob2JqKS9yYWlkNmludDEuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MS5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDIuYwogJChvYmopL3JhaWQ2aW50Mi5jOiAgIFVOUk9MTCA6PSAyCi0kKG9iaikvcmFpZDZpbnQyLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmludDIuYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5hd2sgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCx1bnJvbGwpCiAKIHRhcmdldHMgKz0gcmFpZDZpbnQ0LmMKICQob2JqKS9yYWlkNmludDQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2aW50NC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLnBsIEZPUkNFCiskKG9iaikvcmFpZDZpbnQ0LmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwuYXdrIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsdW5yb2xsKQogCiB0YXJnZXRzICs9IHJhaWQ2aW50OC5jCiAkKG9iaikvcmFpZDZpbnQ4LmM6ICAgVU5ST0xMIDo9IDgKLSQob2JqKS9yYWlkNmludDguYzogICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50OC5jOiAgICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDE2LmMKICQob2JqKS9yYWlkNmludDE2LmM6ICBVTlJPTEwgOj0gMTYKLSQob2JqKS9yYWlkNmludDE2LmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MTYuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogdGFyZ2V0cyArPSByYWlkNmludDMyLmMKICQob2JqKS9yYWlkNmludDMyLmM6ICBVTlJPTEwgOj0gMzIKLSQob2JqKS9yYWlkNmludDMyLmM6ICAkKHNyYykvcmFpZDZpbnQudWMgJChzcmMpL3Vucm9sbC5wbCBGT1JDRQorJChvYmopL3JhaWQ2aW50MzIuYzogICQoc3JjKS9yYWlkNmludC51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzEubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzEuYwogJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICBVTlJPTEwgOj0gMQotJChvYmopL3JhaWQ2YWx0aXZlYzEuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMxLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzIubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzIuYwogJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICBVTlJPTEwgOj0gMgotJChvYmopL3JhaWQ2YWx0aXZlYzIuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWMyLmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzQubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzQuYwogJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICBVTlJPTEwgOj0gNAotJChvYmopL3JhaWQ2YWx0aXZlYzQuYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM0LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogQ0ZMQUdTX3JhaWQ2YWx0aXZlYzgubyArPSAkKGFsdGl2ZWNfZmxhZ3MpCiB0YXJnZXRzICs9IHJhaWQ2YWx0aXZlYzguYwogJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICBVTlJPTEwgOj0gOAotJChvYmopL3JhaWQ2YWx0aXZlYzguYzogICAkKHNyYykvcmFpZDZhbHRpdmVjLnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKKyQob2JqKS9yYWlkNmFsdGl2ZWM4LmM6ICAgJChzcmMpL3JhaWQ2YWx0aXZlYy51YyAkKHNyYykvdW5yb2xsLmF3ayBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVucm9sbCkKIAogcXVpZXRfY21kX21rdGFibGUgPSBUQUJMRSAgICRACmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCA2OTg2YjAwLi42MGUyYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTE2MjQsMTAgKzE2MjQsMTEgQEAKIAliaXRtYXAtPm9mZnNldCA9IG1kZGV2LT5iaXRtYXBfb2Zmc2V0OwogCWlmIChmaWxlKSB7CiAJCWdldF9maWxlKGZpbGUpOwotCQlkb19zeW5jX21hcHBpbmdfcmFuZ2UoZmlsZS0+Zl9tYXBwaW5nLCAwLCBMTE9OR19NQVgsCi0JCQkJICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIHwKLQkJCQkgICAgICBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgfAotCQkJCSAgICAgIFNZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSKTsKKwkJLyogQXMgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZmlsZSB3aWxsIHVzZSBibWFwLAorCQkgKiBhbmQgYnlwYXNzIHRoZSBwYWdlIGNhY2hlLCB3ZSBtdXN0IHN5bmMgdGhlIGZpbGUKKwkJICogZmlyc3QuCisJCSAqLworCQl2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9kZW50cnksIDEpOwogCX0KIAkvKiByZWFkIHN1cGVyYmxvY2sgZnJvbSBiaXRtYXAgZmlsZSAodGhpcyBzZXRzIGJpdG1hcC0+Y2h1bmtzaXplKSAqLwogCWVyciA9IGJpdG1hcF9yZWFkX3NiKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYwppbmRleCA1NTZhY2ZmLi43ZGJlNjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKQEAgLTEzOCwxNiArMTM4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3Rlcik7CiAKLS8qCi0gKiBSb3VuZCBhIG51bWJlciB1cCB0byB0aGUgbmVhcmVzdCAnc2l6ZScgYm91bmRhcnkuICBzaXplIG11c3QKLSAqIGJlIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIHVsb25nIHJvdW5kX3VwKHVsb25nIG4sIHVsb25nIHNpemUpCi17Ci0Jc2l6ZS0tOwotCXJldHVybiAobiArIHNpemUpICYgfnNpemU7Ci19Ci0KIHN0YXRpYyBpbnQgc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCiAJCQkgIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLCBjaGFyICoqZXJyb3IpCiB7CkBAIC0xNTUsNyArMTQ1LDggQEAKIAljaGFyICp2YWx1ZTsKIAogCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7Ci0JaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnIHx8CisJICAgIGNodW5rX3NpemVfdWxvbmcgPiBVSU5UX01BWCkgewogCQkqZXJyb3IgPSAiSW52YWxpZCBjaHVuayBzaXplIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTY1LDQwICsxNTYsMzUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplX3Vsb25nID0gcm91bmRfdXAoY2h1bmtfc2l6ZV91bG9uZywgUEFHRV9TSVpFID4+IDkpOwotCi0JcmV0dXJuIGRtX2V4Y2VwdGlvbl9zdG9yZV9zZXRfY2h1bmtfc2l6ZShzdG9yZSwgY2h1bmtfc2l6ZV91bG9uZywKKwlyZXR1cm4gZG1fZXhjZXB0aW9uX3N0b3JlX3NldF9jaHVua19zaXplKHN0b3JlLAorCQkJCQkJICh1bnNpZ25lZCkgY2h1bmtfc2l6ZV91bG9uZywKIAkJCQkJCSBlcnJvcik7CiB9CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKQogewogCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCi0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLwotCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfbG9naWNhbF9ibG9ja19zaXplKHN0b3JlLT5jb3ctPmJkZXYpID4+IDkpKSB7CisJaWYgKGNodW5rX3NpemUgJSAoYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoc3RvcmUtPmNvdy0+YmRldikgPj4gOSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjaHVua19zaXplX3Vsb25nID4gSU5UX01BWCA+PiBTRUNUT1JfU0hJRlQpIHsKKwlpZiAoY2h1bmtfc2l6ZSA+IElOVF9NQVggPj4gU0VDVE9SX1NISUZUKSB7CiAJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIHRvbyBoaWdoIjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOwotCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7Ci0Jc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2l6ZSA9IGNodW5rX3NpemU7CisJc3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlzdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMoY2h1bmtfc2l6ZSkgLSAxOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsNyArMjM3LDcgQEAKIAogCXIgPSBzZXRfY2h1bmtfc2l6ZSh0bXBfc3RvcmUsIGFyZ3ZbMl0sICZ0aS0+ZXJyb3IpOwogCWlmIChyKQotCQlnb3RvIGJhZF9jb3c7CisJCWdvdG8gYmFkX2N0cjsKIAogCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKIAlpZiAocikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaCBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKaW5kZXggODEyYzcxOC4uOGEyMjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAorKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCkBAIC0xMDEsOSArMTAxLDkgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpjb3c7CiAKIAkvKiBTaXplIG9mIGRhdGEgYmxvY2tzIHNhdmVkIC0gbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KLQljaHVua190IGNodW5rX3NpemU7Ci0JY2h1bmtfdCBjaHVua19tYXNrOwotCWNodW5rX3QgY2h1bmtfc2hpZnQ7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKKwl1bnNpZ25lZCBjaHVua19tYXNrOworCXVuc2lnbmVkIGNodW5rX3NoaWZ0OwogCiAJdm9pZCAqY29udGV4dDsKIH07CkBAIC0xNjksNyArMTY5LDcgQEAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSk7CiAKIGludCBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBjaHVua19zaXplX3Vsb25nLAorCQkJCSAgICAgIHVuc2lnbmVkIGNodW5rX3NpemUsCiAJCQkJICAgICAgY2hhciAqKmVycm9yKTsKIAogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMgYi9kcml2ZXJzL21kL2RtLWxvZy11c2Vyc3BhY2UtYmFzZS5jCmluZGV4IDY1MmJkMzMuLjdhYzJjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbG9nLXVzZXJzcGFjZS1iYXNlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1sb2ctdXNlcnNwYWNlLWJhc2UuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJfQogCiAJLyogVGhlIHB0ciB2YWx1ZSBpcyBzdWZmaWNpZW50IGZvciBsb2NhbCB1bmlxdWUgaWQgKi8KLQlsYy0+bHVpZCA9ICh1aW50NjRfdClsYzsKKwlsYy0+bHVpZCA9ICh1bnNpZ25lZCBsb25nKWxjOwogCiAJbGMtPnRpID0gdGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCmluZGV4IGQ1YjJlMDg3Li4wYzc0NjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKQEAgLTI4NCwxMiArMjg0LDEzIEBACiB7CiAJaW50IHI7CiAJc3RydWN0IGRpc2tfaGVhZGVyICpkaDsKLQljaHVua190IGNodW5rX3NpemU7CisJdW5zaWduZWQgY2h1bmtfc2l6ZTsKIAlpbnQgY2h1bmtfc2l6ZV9zdXBwbGllZCA9IDE7CiAJY2hhciAqY2h1bmtfZXJyOwogCiAJLyoKLQkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBoYXJkc2VjdF9zaXplLCBpZiBsYXJnZXIpIGlmIG5vbmUgc3VwcGxpZWQKKwkgKiBVc2UgZGVmYXVsdCBjaHVuayBzaXplIChvciBsb2dpY2FsX2Jsb2NrX3NpemUsIGlmIGxhcmdlcikKKwkgKiBpZiBub25lIHN1cHBsaWVkCiAJICovCiAJaWYgKCFwcy0+c3RvcmUtPmNodW5rX3NpemUpIHsKIAkJcHMtPnN0b3JlLT5jaHVua19zaXplID0gbWF4KERNX0NIVU5LX1NJWkVfREVGQVVMVF9TRUNUT1JTLApAQCAtMzM0LDEwICszMzUsOSBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjaHVua19zaXplX3N1cHBsaWVkKQotCQlETVdBUk4oImNodW5rIHNpemUgJWxsdSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKLQkJICAgICAgICJ0YWJsZSBjaHVuayBzaXplIG9mICVsbHUuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY2h1bmtfc2l6ZSwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHMtPnN0b3JlLT5jaHVua19zaXplKTsKKwkJRE1XQVJOKCJjaHVuayBzaXplICV1IGluIGRldmljZSBtZXRhZGF0YSBvdmVycmlkZXMgIgorCQkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJXUuIiwKKwkJICAgICAgIGNodW5rX3NpemUsIHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAkvKiBXZSBoYWQgYSBib2d1cyBjaHVua19zaXplLiBGaXggc3R1ZmYgdXAuICovCiAJZnJlZV9hcmVhKHBzKTsKQEAgLTM0NSw4ICszNDUsOCBAQAogCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfc2V0X2NodW5rX3NpemUocHMtPnN0b3JlLCBjaHVua19zaXplLAogCQkJCQkgICAgICAmY2h1bmtfZXJyKTsKIAlpZiAocikgewotCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJWxsdTogJXMuIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljaHVua19zaXplLCBjaHVua19lcnIpOworCQlETUVSUigiaW52YWxpZCBvbi1kaXNrIGNodW5rIHNpemUgJXU6ICVzLiIsCisJCSAgICAgIGNodW5rX3NpemUsIGNodW5rX2Vycik7CiAJCXJldHVybiByOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCA1N2YxYmY3Li4zYTNiYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtMjk2LDYgKzI5Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc25hcHNob3Qoc3RydWN0IGRtX3NuYXBzaG90ICpzbmFwKQogeworCXN0cnVjdCBkbV9zbmFwc2hvdCAqbDsKIAlzdHJ1Y3Qgb3JpZ2luICpvLCAqbmV3X287CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IHNuYXAtPm9yaWdpbi0+YmRldjsKIApAQCAtMzE5LDcgKzMyMCwxMSBAQAogCQlfX2luc2VydF9vcmlnaW4obyk7CiAJfQogCi0JbGlzdF9hZGRfdGFpbCgmc25hcC0+bGlzdCwgJm8tPnNuYXBzaG90cyk7CisJLyogU29ydCB0aGUgbGlzdCBhY2NvcmRpbmcgdG8gY2h1bmsgc2l6ZSwgbGFyZ2VzdC1maXJzdCBzbWFsbGVzdC1sYXN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsLCAmby0+c25hcHNob3RzLCBsaXN0KQorCQlpZiAobC0+c3RvcmUtPmNodW5rX3NpemUgPCBzbmFwLT5zdG9yZS0+Y2h1bmtfc2l6ZSkKKwkJCWJyZWFrOworCWxpc3RfYWRkX3RhaWwoJnNuYXAtPmxpc3QsICZsLT5saXN0KTsKIAogCXVwX3dyaXRlKCZfb3JpZ2luc19sb2NrKTsKIAlyZXR1cm4gMDsKQEAgLTY2OCw2ICs2NzMsMTEgQEAKIAliaW9fbGlzdF9pbml0KCZzLT5xdWV1ZWRfYmlvcyk7CiAJSU5JVF9XT1JLKCZzLT5xdWV1ZWRfYmlvc193b3JrLCBmbHVzaF9xdWV1ZWRfYmlvcyk7CiAKKwlpZiAoIXMtPnN0b3JlLT5jaHVua19zaXplKSB7CisJCXRpLT5lcnJvciA9ICJDaHVuayBzaXplIG5vdCBzZXQiOworCQlnb3RvIGJhZF9sb2FkX2FuZF9yZWdpc3RlcjsKKwl9CisKIAkvKiBBZGQgc25hcHNob3QgdG8gdGhlIGxpc3Qgb2Ygc25hcHNob3RzIGZvciB0aGlzIG9yaWdpbiAqLwogCS8qIEV4Y2VwdGlvbnMgYXJlbid0IHRyaWdnZXJlZCB0aWxsIHNuYXBzaG90X3Jlc3VtZSgpIGlzIGNhbGxlZCAqLwogCWlmIChyZWdpc3Rlcl9zbmFwc2hvdChzKSkgewpAQCAtOTUxLDcgKzk2MSw3IEBACiAKIAlzcmMuYmRldiA9IGJkZXY7CiAJc3JjLnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLT5zdG9yZSwgcGUtPmUub2xkX2NodW5rKTsKLQlzcmMuY291bnQgPSBtaW4ocy0+c3RvcmUtPmNodW5rX3NpemUsIGRldl9zaXplIC0gc3JjLnNlY3Rvcik7CisJc3JjLmNvdW50ID0gbWluKChzZWN0b3JfdClzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKIAogCWRlc3QuYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CiAJZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm5ld19jaHVuayk7CkBAIC0xMTQyLDYgKzExNTIsOCBAQAogCXVuc2lnbmVkIHN6ID0gMDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAgPSB0aS0+cHJpdmF0ZTsKIAorCWRvd25fd3JpdGUoJnNuYXAtPmxvY2spOworCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBTVEFUVVNUWVBFX0lORk86CiAJCWlmICghc25hcC0+dmFsaWQpCkBAIC0xMTczLDYgKzExODUsOCBAQAogCQlicmVhazsKIAl9CiAKKwl1cF93cml0ZSgmc25hcC0+bG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4OCw3ICsxNDAyLDcgQEAKIAlzdHJ1Y3QgZG1fZGV2ICpkZXYgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CiAJc3RydWN0IG9yaWdpbiAqbzsKLQljaHVua190IGNodW5rX3NpemUgPSAwOworCXVuc2lnbmVkIGNodW5rX3NpemUgPSAwOwogCiAJZG93bl9yZWFkKCZfb3JpZ2luc19sb2NrKTsKIAlvID0gX19sb29rdXBfb3JpZ2luKGRldi0+YmRldik7CkBAIC0xNDY1LDcgKzE0NzksNyBAQAogCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJnNuYXBzaG90X3RhcmdldCk7CiAJaWYgKHIpIHsKIAkJRE1FUlIoInNuYXBzaG90IHRhcmdldCByZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKLQkJcmV0dXJuIHI7CisJCWdvdG8gYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDsKIAl9CiAKIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZvcmlnaW5fdGFyZ2V0KTsKQEAgLTE1MjIsNiArMTUzNiw5IEBACiAJZG1fdW5yZWdpc3Rlcl90YXJnZXQoJm9yaWdpbl90YXJnZXQpOwogYmFkMToKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmc25hcHNob3RfdGFyZ2V0KTsKKworYmFkX3JlZ2lzdGVyX3NuYXBzaG90X3RhcmdldDoKKwlkbV9leGNlcHRpb25fc3RvcmVfZXhpdCgpOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmMgYi9kcml2ZXJzL21kL2RtLmMKaW5kZXggMzc2ZjFhYi4uNzI0ZWZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5jCisrKyBiL2RyaXZlcnMvbWQvZG0uYwpAQCAtNDcsNiArNDcsNyBAQAogCWF0b21pY190IGlvX2NvdW50OwogCXN0cnVjdCBiaW8gKmJpbzsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisJc3BpbmxvY2tfdCBlbmRpb19sb2NrOwogfTsKIAogLyoKQEAgLTU3OCw4ICs1NzksMTIgQEAKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBpby0+bWQ7CiAKIAkvKiBQdXNoLWJhY2sgc3VwZXJzZWRlcyBhbnkgSS9PIGVycm9ycyAqLwotCWlmIChlcnJvciAmJiAhKGlvLT5lcnJvciA+IDAgJiYgX19ub2ZsdXNoX3N1c3BlbmRpbmcobWQpKSkKLQkJaW8tPmVycm9yID0gZXJyb3I7CisJaWYgKHVubGlrZWx5KGVycm9yKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW8tPmVuZGlvX2xvY2ssIGZsYWdzKTsKKwkJaWYgKCEoaW8tPmVycm9yID4gMCAmJiBfX25vZmx1c2hfc3VzcGVuZGluZyhtZCkpKQorCQkJaW8tPmVycm9yID0gZXJyb3I7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvLT5lbmRpb19sb2NrLCBmbGFncyk7CisJfQogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvLT5pb19jb3VudCkpIHsKIAkJaWYgKGlvLT5lcnJvciA9PSBETV9FTkRJT19SRVFVRVVFKSB7CkBAIC0xMjI2LDYgKzEyMzEsNyBAQAogCWF0b21pY19zZXQoJmNpLmlvLT5pb19jb3VudCwgMSk7CiAJY2kuaW8tPmJpbyA9IGJpbzsKIAljaS5pby0+bWQgPSBtZDsKKwlzcGluX2xvY2tfaW5pdCgmY2kuaW8tPmVuZGlvX2xvY2spOwogCWNpLnNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCWNpLnNlY3Rvcl9jb3VudCA9IGJpb19zZWN0b3JzKGJpbyk7CiAJaWYgKHVubGlrZWx5KGJpb19lbXB0eV9iYXJyaWVyKGJpbykpKQpAQCAtMTgyMiw2ICsxODI4LDcgQEAKIGJhZF9iZGV2OgogCWRlc3Ryb3lfd29ya3F1ZXVlKG1kLT53cSk7CiBiYWRfdGhyZWFkOgorCWRlbF9nZW5kaXNrKG1kLT5kaXNrKTsKIAlwdXRfZGlzayhtZC0+ZGlzayk7CiBiYWRfZGlzazoKIAlibGtfY2xlYW51cF9xdWV1ZShtZC0+cXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IDI2YmE0MmEuLmIxODJmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTk0NCw2ICs5NDQsMTQgQEAKIAkJCSAgICBkZXNjLT5yYWlkX2Rpc2sgPCBtZGRldi0+cmFpZF9kaXNrcyAqLykgewogCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQkJcmRldi0+cmFpZF9kaXNrID0gZGVzYy0+cmFpZF9kaXNrOworCQl9IGVsc2UgaWYgKGRlc2MtPnN0YXRlICYgKDE8PE1EX0RJU0tfQUNUSVZFKSkgeworCQkJLyogYWN0aXZlIGJ1dCBub3QgaW4gc3luYyBpbXBsaWVzIHJlY292ZXJ5IHVwIHRvCisJCQkgKiByZXNoYXBlIHBvc2l0aW9uLiAgV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoZXJlCisJCQkgKiB0aGF0IGlzLCBzbyBzZXQgdG8gemVybyBmb3Igbm93ICovCisJCQlpZiAobWRkZXYtPm1pbm9yX3ZlcnNpb24gPj0gOTEpIHsKKwkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOworCQkJCXJkZXYtPnJhaWRfZGlzayA9IGRlc2MtPnJhaWRfZGlzazsKKwkJCX0KIAkJfQogCQlpZiAoZGVzYy0+c3RhdGUgJiAoMTw8TURfRElTS19XUklURU1PU1RMWSkpCiAJCQlzZXRfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwpAQCAtMTAzMiw4ICsxMDQwLDE5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJbWRwX2Rpc2tfdCAqZDsKIAkJaW50IGRlc2NfbnI7Ci0JCWlmIChyZGV2Mi0+cmFpZF9kaXNrID49IDAgJiYgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncykKLQkJICAgICYmICF0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQorCQlpbnQgaXNfYWN0aXZlID0gdGVzdF9iaXQoSW5fc3luYywgJnJkZXYyLT5mbGFncyk7CisKKwkJaWYgKHJkZXYyLT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkgICAgc2ItPm1pbm9yX3ZlcnNpb24gPj0gOTEpCisJCQkvKiB3ZSBoYXZlIG5vd2hlcmUgdG8gc3RvcmUgdGhlIHJlY292ZXJ5X29mZnNldCwKKwkJCSAqIGJ1dCBpZiBpdCBpcyBub3QgYmVsb3cgdGhlIHJlc2hhcGVfcG9zaXRpb24sCisJCQkgKiB3ZSBjYW4gcGlnZ3ktYmFjayBvbiB0aGF0LgorCQkJICovCisJCQlpc19hY3RpdmUgPSAxOworCQlpZiAocmRldjItPnJhaWRfZGlzayA8IDAgfHwKKwkJICAgIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYyLT5mbGFncykpCisJCQlpc19hY3RpdmUgPSAwOworCQlpZiAoaXNfYWN0aXZlKQogCQkJZGVzY19uciA9IHJkZXYyLT5yYWlkX2Rpc2s7CiAJCWVsc2UKIAkJCWRlc2NfbnIgPSBuZXh0X3NwYXJlKys7CkBAIC0xMDQzLDE2ICsxMDYyLDE2IEBACiAJCWQtPm51bWJlciA9IHJkZXYyLT5kZXNjX25yOwogCQlkLT5tYWpvciA9IE1BSk9SKHJkZXYyLT5iZGV2LT5iZF9kZXYpOwogCQlkLT5taW5vciA9IE1JTk9SKHJkZXYyLT5iZGV2LT5iZF9kZXYpOwotCQlpZiAocmRldjItPnJhaWRfZGlzayA+PSAwICYmIHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpCi0JCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldjItPmZsYWdzKSkKKwkJaWYgKGlzX2FjdGl2ZSkKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5yYWlkX2Rpc2s7CiAJCWVsc2UKIAkJCWQtPnJhaWRfZGlzayA9IHJkZXYyLT5kZXNjX25yOyAvKiBjb21wYXRpYmlsaXR5ICovCiAJCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2Mi0+ZmxhZ3MpKQogCQkJZC0+c3RhdGUgPSAoMTw8TURfRElTS19GQVVMVFkpOwotCQllbHNlIGlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldjItPmZsYWdzKSkgeworCQllbHNlIGlmIChpc19hY3RpdmUpIHsKIAkJCWQtPnN0YXRlID0gKDE8PE1EX0RJU0tfQUNUSVZFKTsKLQkJCWQtPnN0YXRlIHw9ICgxPDxNRF9ESVNLX1NZTkMpOworCQkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2Mi0+ZmxhZ3MpKQorCQkJCWQtPnN0YXRlIHw9ICgxPDxNRF9ESVNLX1NZTkMpOwogCQkJYWN0aXZlKys7CiAJCQl3b3JraW5nKys7CiAJCX0gZWxzZSB7CkBAIC0xMzgyLDggKzE0MDEsNiBAQAogCiAJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCWlmIChtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID4gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQotCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKIAkJaWYgKHJkZXYtPnJlY292ZXJ5X29mZnNldCA+IDApIHsKIAkJCXNiLT5mZWF0dXJlX21hcCB8PQogCQkJCWNwdV90b19sZTMyKE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUKTsKQEAgLTE5MTcsNiArMTkzNCwxNCBAQAogCSAqLwogCW1ka19yZGV2X3QgKnJkZXY7CiAKKwkvKiBGaXJzdCBtYWtlIHN1cmUgaW5kaXZpZHVhbCByZWNvdmVyeV9vZmZzZXRzIGFyZSBjb3JyZWN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkgeworCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKKwkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCisJCSAgICBtZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID4gcmRldi0+cmVjb3Zlcnlfb2Zmc2V0KQorCQkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CisKKwl9CQogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJaWYgKHJkZXYtPnNiX2V2ZW50cyA9PSBtZGRldi0+ZXZlbnRzIHx8CiAJCSAgICAobm9zcGFyZXMgJiYKQEAgLTI2MzEsNyArMjY1Niw3IEBACiAJCQlyZGV2LT5kZXNjX25yID0gaSsrOwogCQkJcmRldi0+cmFpZF9kaXNrID0gcmRldi0+ZGVzY19ucjsKIAkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gbWRkZXYtPnJhaWRfZGlza3MpIHsKKwkJfSBlbHNlIGlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gKG1kZGV2LT5yYWlkX2Rpc2tzIC0gbWluKDAsIG1kZGV2LT5kZWx0YV9kaXNrcykpKSB7CiAJCQlyZGV2LT5yYWlkX2Rpc2sgPSAtMTsKIAkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOwogCQl9CkBAIC02NTA0LDggKzY1MjksOSBAQAogIHNraXA6CiAJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKIAltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKLQltZGRldi0+cmVzeW5jX21pbiA9IDA7Ci0JbWRkZXYtPnJlc3luY19tYXggPSBNYXhTZWN0b3I7CisJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkKKwkJLyogV2UgY29tcGxldGVkIHNvIG1heCBzZXR0aW5nIGNhbiBiZSBmb3Jnb3R0ZW4uICovCisJCW1kZGV2LT5yZXN5bmNfbWF4ID0gTWF4U2VjdG9yOwogCXN5c2ZzX25vdGlmeSgmbWRkZXYtPmtvYmosIE5VTEwsICJzeW5jX2NvbXBsZXRlZCIpOwogCXdha2VfdXAoJnJlc3luY193YWl0KTsKIAlzZXRfYml0KE1EX1JFQ09WRVJZX0RPTkUsICZtZGRldi0+cmVjb3ZlcnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGQxYjliZDUuLmEwNTM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCS8qIGFsbG9jYXRlIGEgcjFiaW8gd2l0aCByb29tIGZvciByYWlkX2Rpc2tzIGVudHJpZXMgaW4gdGhlIGJpb3MgYXJyYXkgKi8KIAlyMV9iaW8gPSBremFsbG9jKHNpemUsIGdmcF9mbGFncyk7Ci0JaWYgKCFyMV9iaW8pCisJaWYgKCFyMV9iaW8gJiYgcGktPm1kZGV2KQogCQl1bnBsdWdfc2xhdmVzKHBpLT5tZGRldik7CiAKIAlyZXR1cm4gcjFfYmlvOwpAQCAtMTY4Myw2ICsxNjgzLDcgQEAKIAkJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwogCQkJfQogCQl9CisJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlpZiAodW5wbHVnKQogCQl1bnBsdWdfc2xhdmVzKG1kZGV2KTsKQEAgLTE5NzgsMTMgKzE5NzksMTQgQEAKIAljb25mLT5wb29saW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpjb25mLT5wb29saW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghY29uZi0+cG9vbGluZm8pCiAJCWdvdG8gb3V0X25vX21lbTsKLQljb25mLT5wb29saW5mby0+bWRkZXYgPSBtZGRldjsKKwljb25mLT5wb29saW5mby0+bWRkZXYgPSBOVUxMOwogCWNvbmYtPnBvb2xpbmZvLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CiAJY29uZi0+cjFiaW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlKE5SX1JBSUQxX0JJT1MsIHIxYmlvX3Bvb2xfYWxsb2MsCiAJCQkJCSAgcjFiaW9fcG9vbF9mcmVlLAogCQkJCQkgIGNvbmYtPnBvb2xpbmZvKTsKIAlpZiAoIWNvbmYtPnIxYmlvX3Bvb2wpCiAJCWdvdG8gb3V0X25vX21lbTsKKwljb25mLT5wb29saW5mby0+bWRkZXYgPSBtZGRldjsKIAogCXNwaW5fbG9ja19pbml0KCZjb25mLT5kZXZpY2VfbG9jayk7CiAJbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMTAuYyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKaW5kZXggNTFjNGM1Yy4uYzJjYjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMTAuYworKysgYi9kcml2ZXJzL21kL3JhaWQxMC5jCkBAIC02OCw3ICs2OCw3IEBACiAKIAkvKiBhbGxvY2F0ZSBhIHIxMGJpbyB3aXRoIHJvb20gZm9yIHJhaWRfZGlza3MgZW50cmllcyBpbiB0aGUgYmlvcyBhcnJheSAqLwogCXIxMF9iaW8gPSBremFsbG9jKHNpemUsIGdmcF9mbGFncyk7Ci0JaWYgKCFyMTBfYmlvKQorCWlmICghcjEwX2JpbyAmJiBjb25mLT5tZGRldikKIAkJdW5wbHVnX3NsYXZlcyhjb25mLT5tZGRldik7CiAKIAlyZXR1cm4gcjEwX2JpbzsKQEAgLTE2MzIsNiArMTYzMiw3IEBACiAJCQkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKIAkJCX0KIAkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAJaWYgKHVucGx1ZykKIAkJdW5wbHVnX3NsYXZlcyhtZGRldik7CkBAIC0yMDk1LDcgKzIwOTYsNiBAQAogCWlmICghY29uZi0+dG1wcGFnZSkKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCi0JY29uZi0+bWRkZXYgPSBtZGRldjsKIAljb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7CiAJY29uZi0+bmVhcl9jb3BpZXMgPSBuYzsKIAljb25mLT5mYXJfY29waWVzID0gZmM7CkBAIC0yMTMyLDYgKzIxMzIsNyBAQAogCQlnb3RvIG91dF9mcmVlX2NvbmY7CiAJfQogCisJY29uZi0+bWRkZXYgPSBtZGRldjsKIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNS5jIGIvZHJpdmVycy9tZC9yYWlkNS5jCmluZGV4IDk0ODI5ODAuLmQyOTIxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDUuYworKysgYi9kcml2ZXJzL21kL3JhaWQ1LmMKQEAgLTE1NiwxMyArMTU2LDE2IEBACiBzdGF0aWMgaW50IHJhaWQ2X2lkeF90b19zbG90KGludCBpZHgsIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsCiAJCQkgICAgIGludCAqY291bnQsIGludCBzeW5kcm9tZV9kaXNrcykKIHsKLQlpbnQgc2xvdDsKKwlpbnQgc2xvdCA9ICpjb3VudDsKIAorCWlmIChzaC0+ZGRmX2xheW91dCkKKwkJKCpjb3VudCkrKzsKIAlpZiAoaWR4ID09IHNoLT5wZF9pZHgpCiAJCXJldHVybiBzeW5kcm9tZV9kaXNrczsKIAlpZiAoaWR4ID09IHNoLT5xZF9pZHgpCiAJCXJldHVybiBzeW5kcm9tZV9kaXNrcyArIDE7Ci0Jc2xvdCA9ICgqY291bnQpKys7CisJaWYgKCFzaC0+ZGRmX2xheW91dCkKKwkJKCpjb3VudCkrKzsKIAlyZXR1cm4gc2xvdDsKIH0KIApAQCAtNzE3LDcgKzcyMCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGlza3M7IGkrKykKLQkJc3Jjc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCQlzcmNzW2ldID0gTlVMTDsKIAogCWNvdW50ID0gMDsKIAlpID0gZDBfaWR4OwpAQCAtNzI3LDkgKzczMCw4IEBACiAJCXNyY3Nbc2xvdF0gPSBzaC0+ZGV2W2ldLnBhZ2U7CiAJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOwogCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKLQlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiBzeW5kcm9tZV9kaXNrczsKIH0KIAogc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCkBAIC04MTQsNyArODE2LDcgQEAKIAkgKiBzbG90IG51bWJlciBjb252ZXJzaW9uIGZvciAnZmFpbGEnIGFuZCAnZmFpbGInCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRpc2tzIDsgaSsrKQotCQlibG9ja3NbaV0gPSAodm9pZCAqKXJhaWQ2X2VtcHR5X3plcm9fcGFnZTsKKwkJYmxvY2tzW2ldID0gTlVMTDsKIAljb3VudCA9IDA7CiAJaSA9IGQwX2lkeDsKIAlkbyB7CkBAIC04MjgsNyArODMwLDYgQEAKIAkJCWZhaWxiID0gc2xvdDsKIAkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7CiAJfSB3aGlsZSAoaSAhPSBkMF9pZHgpOwotCUJVR19PTihjb3VudCAhPSBzeW5kcm9tZV9kaXNrcyk7CiAKIAlCVUdfT04oZmFpbGEgPT0gZmFpbGIpOwogCWlmIChmYWlsYiA8IGZhaWxhKQpAQCAtODQ1LDcgKzg0Niw3IEBACiAJCQlpbml0X2FzeW5jX3N1Ym1pdCgmc3VibWl0LCBBU1lOQ19UWF9GRU5DRSwgTlVMTCwKIAkJCQkJICBvcHNfY29tcGxldGVfY29tcHV0ZSwgc2gsCiAJCQkJCSAgdG9fYWRkcl9jb252KHNoLCBwZXJjcHUpKTsKLQkJCXJldHVybiBhc3luY19nZW5fc3luZHJvbWUoYmxvY2tzLCAwLCBjb3VudCsyLAorCQkJcmV0dXJuIGFzeW5jX2dlbl9zeW5kcm9tZShibG9ja3MsIDAsIHN5bmRyb21lX2Rpc2tzKzIsCiAJCQkJCQkgIFNUUklQRV9TSVpFLCAmc3VibWl0KTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBwYWdlICpkZXN0OwpAQCAtMTEzOSw3ICsxMTQwLDcgQEAKIAkJCSAgICZzaC0+b3BzLnplcm9fc3VtX3Jlc3VsdCwgcGVyY3B1LT5zcGFyZV9wYWdlLCAmc3VibWl0KTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZF9ydW5fb3BzKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QpCitzdGF0aWMgdm9pZCBfX3JhaWRfcnVuX29wcyhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCB1bnNpZ25lZCBsb25nIG9wc19yZXF1ZXN0KQogewogCWludCBvdmVybGFwX2NsZWFyID0gMCwgaSwgZGlza3MgPSBzaC0+ZGlza3M7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9IE5VTEw7CkBAIC0xMjA0LDIyICsxMjA1LDU1IEBACiAJcHV0X2NwdSgpOwogfQogCisjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CitzdGF0aWMgdm9pZCBhc3luY19ydW5fb3BzKHZvaWQgKnBhcmFtLCBhc3luY19jb29raWVfdCBjb29raWUpCit7CisJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHBhcmFtOworCXVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3QgPSBzaC0+b3BzLnJlcXVlc3Q7CisKKwljbGVhcl9iaXRfdW5sb2NrKFNUUklQRV9PUFNfUkVRX1BFTkRJTkcsICZzaC0+c3RhdGUpOworCXdha2VfdXAoJnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKworCV9fcmFpZF9ydW5fb3BzKHNoLCBvcHNfcmVxdWVzdCk7CisJcmVsZWFzZV9zdHJpcGUoc2gpOworfQorCitzdGF0aWMgdm9pZCByYWlkX3J1bl9vcHMoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgdW5zaWduZWQgbG9uZyBvcHNfcmVxdWVzdCkKK3sKKwkvKiBzaW5jZSBoYW5kbGVfc3RyaXBlIGNhbiBiZSBjYWxsZWQgb3V0c2lkZSBvZiByYWlkNWQgY29udGV4dAorCSAqIHdlIG5lZWQgdG8gZW5zdXJlIHNoLT5vcHMucmVxdWVzdCBpcyBkZS1zdGFnZWQgYmVmb3JlIGFub3RoZXIKKwkgKiByZXF1ZXN0IGFycml2ZXMKKwkgKi8KKwl3YWl0X2V2ZW50KHNoLT5vcHMud2FpdF9mb3Jfb3BzLAorCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFNUUklQRV9PUFNfUkVRX1BFTkRJTkcsICZzaC0+c3RhdGUpKTsKKwlzaC0+b3BzLnJlcXVlc3QgPSBvcHNfcmVxdWVzdDsKKworCWF0b21pY19pbmMoJnNoLT5jb3VudCk7CisJYXN5bmNfc2NoZWR1bGUoYXN5bmNfcnVuX29wcywgc2gpOworfQorI2Vsc2UKKyNkZWZpbmUgcmFpZF9ydW5fb3BzIF9fcmFpZF9ydW5fb3BzCisjZW5kaWYKKwogc3RhdGljIGludCBncm93X29uZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mKQogewogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CisJaW50IGRpc2tzID0gbWF4KGNvbmYtPnJhaWRfZGlza3MsIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwogCXNoID0ga21lbV9jYWNoZV9hbGxvYyhjb25mLT5zbGFiX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNoKQogCQlyZXR1cm4gMDsKLQltZW1zZXQoc2gsIDAsIHNpemVvZigqc2gpICsgKGNvbmYtPnJhaWRfZGlza3MtMSkqc2l6ZW9mKHN0cnVjdCByNWRldikpOworCW1lbXNldChzaCwgMCwgc2l6ZW9mKCpzaCkgKyAoZGlza3MtMSkqc2l6ZW9mKHN0cnVjdCByNWRldikpOwogCXNoLT5yYWlkX2NvbmYgPSBjb25mOwogCXNwaW5fbG9ja19pbml0KCZzaC0+bG9jayk7CisJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNoLT5vcHMud2FpdF9mb3Jfb3BzKTsKKwkjZW5kaWYKIAotCWlmIChncm93X2J1ZmZlcnMoc2gsIGNvbmYtPnJhaWRfZGlza3MpKSB7Ci0JCXNocmlua19idWZmZXJzKHNoLCBjb25mLT5yYWlkX2Rpc2tzKTsKKwlpZiAoZ3Jvd19idWZmZXJzKHNoLCBkaXNrcykpIHsKKwkJc2hyaW5rX2J1ZmZlcnMoc2gsIGRpc2tzKTsKIAkJa21lbV9jYWNoZV9mcmVlKGNvbmYtPnNsYWJfY2FjaGUsIHNoKTsKIAkJcmV0dXJuIDA7CiAJfQotCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAJLyogd2UganVzdCBjcmVhdGVkIGFuIGFjdGl2ZSBzdHJpcGUgc28uLi4gKi8KIAlhdG9taWNfc2V0KCZzaC0+Y291bnQsIDEpOwogCWF0b21pY19pbmMoJmNvbmYtPmFjdGl2ZV9zdHJpcGVzKTsKQEAgLTEyMzEsNyArMTI2NSw3IEBACiBzdGF0aWMgaW50IGdyb3dfc3RyaXBlcyhyYWlkNV9jb25mX3QgKmNvbmYsIGludCBudW0pCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnNjOwotCWludCBkZXZzID0gY29uZi0+cmFpZF9kaXNrczsKKwlpbnQgZGV2cyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAogCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwKIAkJInJhaWQlZC0lcyIsIGNvbmYtPmxldmVsLCBtZG5hbWUoY29uZi0+bWRkZXYpKTsKQEAgLTEzMjksNiArMTM2Myw5IEBACiAKIAkJbnNoLT5yYWlkX2NvbmYgPSBjb25mOwogCQlzcGluX2xvY2tfaW5pdCgmbnNoLT5sb2NrKTsKKwkJI2lmZGVmIENPTkZJR19NVUxUSUNPUkVfUkFJRDQ1NgorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuc2gtPm9wcy53YWl0X2Zvcl9vcHMpOworCQkjZW5kaWYKIAogCQlsaXN0X2FkZCgmbnNoLT5scnUsICZuZXdzdHJpcGVzKTsKIAl9CkBAIC0xODk5LDEwICsxOTM2LDE1IEBACiAJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX05fQ09OVElOVUU6CisJCQkvKiBMaWtlIGxlZnRfc3ltbWV0cmljLCBidXQgUCBpcyBiZWZvcmUgUSAqLwogCQkJaWYgKHNoLT5wZF9pZHggPT0gMCkKIAkJCQlpLS07CS8qIFAgRCBEIEQgUSAqLwotCQkJZWxzZSBpZiAoaSA+IHNoLT5wZF9pZHgpCi0JCQkJaSAtPSAyOyAvKiBEIEQgUSBQIEQgKi8KKwkJCWVsc2UgeworCQkJCS8qIEQgRCBRIFAgRCAqLworCQkJCWlmIChpIDwgc2gtPnBkX2lkeCkKKwkJCQkJaSArPSByYWlkX2Rpc2tzOworCQkJCWkgLT0gKHNoLT5wZF9pZHggKyAxKTsKKwkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKIAkJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgpAQCAtMjg5Niw3ICsyOTM4LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZTUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGU1KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3MsIGk7CkBAIC0zMTY3LDExICszMjA5LDkgQEAKIAlvcHNfcnVuX2lvKHNoLCAmcyk7CiAKIAlyZXR1cm5faW8ocmV0dXJuX2JpKTsKLQotCXJldHVybiBibG9ja2VkX3JkZXYgPT0gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wgaGFuZGxlX3N0cmlwZTYoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgZGlza3MgPSBzaC0+ZGlza3M7CkBAIC0zNDU1LDE3ICszNDk1LDE0IEBACiAJb3BzX3J1bl9pbyhzaCwgJnMpOwogCiAJcmV0dXJuX2lvKHJldHVybl9iaSk7Ci0KLQlyZXR1cm4gYmxvY2tlZF9yZGV2ID09IE5VTEw7CiB9CiAKLS8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaXBlIHdhcyBoYW5kbGVkICovCi1zdGF0aWMgYm9vbCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCitzdGF0aWMgdm9pZCBoYW5kbGVfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJaWYgKHNoLT5yYWlkX2NvbmYtPmxldmVsID09IDYpCi0JCXJldHVybiBoYW5kbGVfc3RyaXBlNihzaCk7CisJCWhhbmRsZV9zdHJpcGU2KHNoKTsKIAllbHNlCi0JCXJldHVybiBoYW5kbGVfc3RyaXBlNShzaCk7CisJCWhhbmRsZV9zdHJpcGU1KHNoKTsKIH0KIAogc3RhdGljIHZvaWQgcmFpZDVfYWN0aXZhdGVfZGVsYXllZChyYWlkNV9jb25mX3QgKmNvbmYpCkBAIC0zNTAzLDkgKzM1NDAsMTAgQEAKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaTsKKwlpbnQgZGV2cyA9IG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGRldnM7IGkrKykgewogCQltZGtfcmRldl90ICpyZGV2ID0gcmN1X2RlcmVmZXJlbmNlKGNvbmYtPmRpc2tzW2ldLnJkZXYpOwogCQlpZiAocmRldiAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpICYmIGF0b21pY19yZWFkKCZyZGV2LT5ucl9wZW5kaW5nKSkgewogCQkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJfcXVldWUgPSBiZGV2X2dldF9xdWV1ZShyZGV2LT5iZGV2KTsKQEAgLTQwMTEsNiArNDA0OSw4IEBACiAJCQlzZWN0b3JfbnIgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOwogCQlzZWN0b3JfZGl2KHNlY3Rvcl9uciwgbmV3X2RhdGFfZGlza3MpOwogCQlpZiAoc2VjdG9yX25yKSB7CisJCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gc2VjdG9yX25yOworCQkJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwgInN5bmNfY29tcGxldGVkIik7CiAJCQkqc2tpcHBlZCA9IDE7CiAJCQlyZXR1cm4gc2VjdG9yX25yOwogCQl9CkBAIC00Mjc3LDkgKzQzMTcsNyBAQAogCWNsZWFyX2JpdChTVFJJUEVfSU5TWU5DLCAmc2gtPnN0YXRlKTsKIAlzcGluX3VubG9jaygmc2gtPmxvY2spOwogCi0JLyogd2FpdCBmb3IgYW55IGJsb2NrZWQgZGV2aWNlIHRvIGJlIGhhbmRsZWQgKi8KLQl3aGlsZSAodW5saWtlbHkoIWhhbmRsZV9zdHJpcGUoc2gpKSkKLQkJOworCWhhbmRsZV9zdHJpcGUoc2gpOwogCXJlbGVhc2Vfc3RyaXBlKHNoKTsKIAogCXJldHVybiBTVFJJUEVfU0VDVE9SUzsKQEAgLTQzNDksMzcgKzQzODcsNiBAQAogCXJldHVybiBoYW5kbGVkOwogfQogCi0jaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2Ci1zdGF0aWMgdm9pZCBfX3Byb2Nlc3Nfc3RyaXBlKHZvaWQgKnBhcmFtLCBhc3luY19jb29raWVfdCBjb29raWUpCi17Ci0Jc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IHBhcmFtOwotCi0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotfQotCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc2NoZWR1bGVfZG9tYWluKF9fcHJvY2Vzc19zdHJpcGUsIHNoLCBkb21haW4pOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JYXN5bmNfc3luY2hyb25pemVfZnVsbF9kb21haW4oZG9tYWluKTsKLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBwcm9jZXNzX3N0cmlwZShzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci0JaGFuZGxlX3N0cmlwZShzaCk7Ci0JcmVsZWFzZV9zdHJpcGUoc2gpOwotCWNvbmRfcmVzY2hlZCgpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jaHJvbml6ZV9zdHJpcGVfcHJvY2Vzc2luZyhzdHJ1Y3QgbGlzdF9oZWFkICpkb21haW4pCi17Ci19Ci0jZW5kaWYKLQogCiAvKgogICogVGhpcyBpcyBvdXIgcmFpZDUga2VybmVsIHRocmVhZC4KQEAgLTQzOTMsNyArNDQwMCw2IEBACiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlpbnQgaGFuZGxlZDsKLQlMSVNUX0hFQUQocmFpZF9kb21haW4pOwogCiAJcHJfZGVidWcoIisrKyByYWlkNWQgYWN0aXZlXG4iKTsKIApAQCAtNDQzMCw3ICs0NDM2LDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCQogCQloYW5kbGVkKys7Ci0JCXByb2Nlc3Nfc3RyaXBlKHNoLCAmcmFpZF9kb21haW4pOworCQloYW5kbGVfc3RyaXBlKHNoKTsKKwkJcmVsZWFzZV9zdHJpcGUoc2gpOworCQljb25kX3Jlc2NoZWQoKTsKIAogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJfQpAQCAtNDQzOCw3ICs0NDQ2LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCi0Jc3luY2hyb25pemVfc3RyaXBlX3Byb2Nlc3NpbmcoJnJhaWRfZG9tYWluKTsKIAlhc3luY190eF9pc3N1ZV9wZW5kaW5nX2FsbCgpOwogCXVucGx1Z19zbGF2ZXMobWRkZXYpOwogCkBAIC00NTU4LDEzICs0NTY1LDkgQEAKIAogCWlmICghc2VjdG9ycykKIAkJc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKLQlpZiAoIXJhaWRfZGlza3MpIHsKKwlpZiAoIXJhaWRfZGlza3MpCiAJCS8qIHNpemUgaXMgZGVmaW5lZCBieSB0aGUgc21hbGxlc3Qgb2YgcHJldmlvdXMgYW5kIG5ldyBzaXplICovCi0JCWlmIChjb25mLT5yYWlkX2Rpc2tzIDwgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKLQkJCXJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwotCQllbHNlCi0JCQlyYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQl9CisJCXJhaWRfZGlza3MgPSBtaW4oY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CiAKIAlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zZWN0b3JzIC0gMSk7CiAJc2VjdG9ycyAmPSB+KChzZWN0b3JfdCltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgLSAxKTsKQEAgLTQ2NjUsNyArNDY2OCw3IEBACiAJCQl9CiAJCQlwZXJfY3B1X3B0cihjb25mLT5wZXJjcHUsIGNwdSktPnNwYXJlX3BhZ2UgPSBzcGFyZV9wYWdlOwogCQl9Ci0JCXNjcmliYmxlID0ga21hbGxvYyhzY3JpYmJsZV9sZW4oY29uZi0+cmFpZF9kaXNrcyksIEdGUF9LRVJORUwpOworCQlzY3JpYmJsZSA9IGttYWxsb2MoY29uZi0+c2NyaWJibGVfbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFzY3JpYmJsZSkgewogCQkJZXJyID0gLUVOT01FTTsKIAkJCWJyZWFrOwpAQCAtNDY4Niw3ICs0Njg5LDcgQEAKIHN0YXRpYyByYWlkNV9jb25mX3QgKnNldHVwX2NvbmYobWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwotCWludCByYWlkX2Rpc2ssIG1lbW9yeTsKKwlpbnQgcmFpZF9kaXNrLCBtZW1vcnksIG1heF9kaXNrczsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBkaXNrX2luZm8gKmRpc2s7CiAKQEAgLTQ3MjIsMjggKzQ3MjUsNiBAQAogCWNvbmYgPSBremFsbG9jKHNpemVvZihyYWlkNV9jb25mX3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29uZiA9PSBOVUxMKQogCQlnb3RvIGFib3J0OwotCi0JY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwotCWNvbmYtPnNjcmliYmxlX2xlbiA9IHNjcmliYmxlX2xlbihjb25mLT5yYWlkX2Rpc2tzKTsKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7Ci0JZWxzZQotCQljb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7Ci0KLQljb25mLT5kaXNrcyA9IGt6YWxsb2MoY29uZi0+cmFpZF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghY29uZi0+ZGlza3MpCi0JCWdvdG8gYWJvcnQ7Ci0KLQljb25mLT5tZGRldiA9IG1kZGV2OwotCi0JaWYgKChjb25mLT5zdHJpcGVfaGFzaHRibCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKLQkJZ290byBhYm9ydDsKLQotCWNvbmYtPmxldmVsID0gbWRkZXYtPm5ld19sZXZlbDsKLQlpZiAocmFpZDVfYWxsb2NfcGVyY3B1KGNvbmYpICE9IDApCi0JCWdvdG8gYWJvcnQ7Ci0KIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX3N0cmlwZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY29uZi0+d2FpdF9mb3Jfb3ZlcmxhcCk7CkBAIC00NzU3LDExICs0NzM4LDMzIEBACiAJYXRvbWljX3NldCgmY29uZi0+YWN0aXZlX2FsaWduZWRfcmVhZHMsIDApOwogCWNvbmYtPmJ5cGFzc190aHJlc2hvbGQgPSBCWVBBU1NfVEhSRVNIT0xEOwogCisJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwllbHNlCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKKwltYXhfZGlza3MgPSBtYXgoY29uZi0+cmFpZF9kaXNrcywgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyk7CisJY29uZi0+c2NyaWJibGVfbGVuID0gc2NyaWJibGVfbGVuKG1heF9kaXNrcyk7CisKKwljb25mLT5kaXNrcyA9IGt6YWxsb2MobWF4X2Rpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrX2luZm8pLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb25mLT5kaXNrcykKKwkJZ290byBhYm9ydDsKKworCWNvbmYtPm1kZGV2ID0gbWRkZXY7CisKKwlpZiAoKGNvbmYtPnN0cmlwZV9oYXNodGJsID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpKSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCisJY29uZi0+bGV2ZWwgPSBtZGRldi0+bmV3X2xldmVsOworCWlmIChyYWlkNV9hbGxvY19wZXJjcHUoY29uZikgIT0gMCkKKwkJZ290byBhYm9ydDsKKwogCXByX2RlYnVnKCJyYWlkNTogcnVuKCVzKSBjYWxsZWQuXG4iLCBtZG5hbWUobWRkZXYpKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJcmFpZF9kaXNrID0gcmRldi0+cmFpZF9kaXNrOwotCQlpZiAocmFpZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MKKwkJaWYgKHJhaWRfZGlzayA+PSBtYXhfZGlza3MKIAkJICAgIHx8IHJhaWRfZGlzayA8IDApCiAJCQljb250aW51ZTsKIAkJZGlzayA9IGNvbmYtPmRpc2tzICsgcmFpZF9kaXNrOwpAQCAtNDc5Myw3ICs0Nzk2LDcgQEAKIAl9CiAKIAltZW1vcnkgPSBjb25mLT5tYXhfbnJfc3RyaXBlcyAqIChzaXplb2Yoc3RydWN0IHN0cmlwZV9oZWFkKSArCi0JCSBjb25mLT5yYWlkX2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OworCQkgbWF4X2Rpc2tzICogKChzaXplb2Yoc3RydWN0IGJpbykgKyBQQUdFX1NJWkUpKSkgLyAxMDI0OwogCWlmIChncm93X3N0cmlwZXMoY29uZiwgY29uZi0+bWF4X25yX3N0cmlwZXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkpOwpAQCAtNDgyMCwxMSArNDgyMyw0MCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAorCitzdGF0aWMgaW50IG9ubHlfcGFyaXR5KGludCByYWlkX2Rpc2ssIGludCBhbGdvLCBpbnQgcmFpZF9kaXNrcywgaW50IG1heF9kZWdyYWRlZCkKK3sKKwlzd2l0Y2ggKGFsZ28pIHsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfMDoKKwkJaWYgKHJhaWRfZGlzayA8IG1heF9kZWdyYWRlZCkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJaWYgKHJhaWRfZGlzayA+PSByYWlkX2Rpc2tzIC0gbWF4X2RlZ3JhZGVkKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wXzY6CisJCWlmIChyYWlkX2Rpc2sgPT0gMCB8fCAKKwkJICAgIHJhaWRfZGlzayA9PSByYWlkX2Rpc2tzIC0gMSkKKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUNfNjoKKwljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CisJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjoKKwljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUNfNjoKKwkJaWYgKHJhaWRfZGlzayA9PSByYWlkX2Rpc2tzIC0gMSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mOwogCWludCB3b3JraW5nX2Rpc2tzID0gMCwgY2h1bmtfc2l6ZTsKKwlpbnQgZGlydHlfcGFyaXR5X2Rpc2tzID0gMDsKIAltZGtfcmRldl90ICpyZGV2OworCXNlY3Rvcl90IHJlc2hhcGVfb2Zmc2V0ID0gMDsKIAogCWlmIChtZGRldi0+cmVjb3ZlcnlfY3AgIT0gTWF4U2VjdG9yKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgInJhaWQ1OiAlcyBpcyBub3QgY2xlYW4iCkBAIC00ODU4LDYgKzQ4OTAsNyBAQAogCQkJICAgICAgICJvbiBhIHN0cmlwZSBib3VuZGFyeVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQlyZXNoYXBlX29mZnNldCA9IGhlcmVfbmV3ICogbWRkZXYtPm5ld19jaHVua19zZWN0b3JzOwogCQkvKiBoZXJlX25ldyBpcyB0aGUgc3RyaXBlIHdlIHdpbGwgd3JpdGUgdG8gKi8KIAkJaGVyZV9vbGQgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKIAkJc2VjdG9yX2RpdihoZXJlX29sZCwgbWRkZXYtPmNodW5rX3NlY3RvcnMgKgpAQCAtNDkxMywxMiArNDk0Niw1NCBAQAogCS8qCiAJICogMCBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LCAxIG9yIDIgZm9yIGEgZGVncmFkZWQgYXJyYXkuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCi0JCSAgICB0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpKQorCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKKwkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpCiAJCQl3b3JraW5nX2Rpc2tzKys7CisJCS8qIFRoaXMgZGlzYyBpcyBub3QgZnVsbHkgaW4tc3luYy4gIEhvd2V2ZXIgaWYgaXQKKwkJICoganVzdCBzdG9yZWQgcGFyaXR5IChiZXlvbmQgdGhlIHJlY292ZXJ5X29mZnNldCksCisJCSAqIHdoZW4gd2UgZG9uJ3QgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgdGhlCisJCSAqIGFycmF5IGJlaW5nIGRpcnR5LgorCQkgKiBXaGVuIHJlc2hhcGUgZ29lcyAnYmFja3dhcmRzJywgd2UgbmV2ZXIgaGF2ZQorCQkgKiBwYXJ0aWFsbHkgY29tcGxldGVkIGRldmljZXMsIHNvIHdlIG9ubHkgbmVlZAorCQkgKiB0byB3b3JyeSBhYm91dCByZXNoYXBlIGdvaW5nIGZvcndhcmRzLgorCQkgKi8KKwkJLyogSGFjayBiZWNhdXNlIHYwLjkxIGRvZXNuJ3Qgc3RvcmUgcmVjb3Zlcnlfb2Zmc2V0IHByb3Blcmx5LiAqLworCQlpZiAobWRkZXYtPm1ham9yX3ZlcnNpb24gPT0gMCAmJgorCQkgICAgbWRkZXYtPm1pbm9yX3ZlcnNpb24gPiA5MCkKKwkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IHJlc2hhcGVfb2Zmc2V0OworCQkJCisJCXByaW50aygiJWQ6IHc9JWQgcGE9JWQgcHI9JWQgbT0lZCBhPSVkIHI9JWQgb3AxPSVkIG9wMj0lZFxuIiwKKwkJICAgICAgIHJkZXYtPnJhaWRfZGlzaywgd29ya2luZ19kaXNrcywgY29uZi0+cHJldl9hbGdvLAorCQkgICAgICAgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcywgY29uZi0+bWF4X2RlZ3JhZGVkLAorCQkgICAgICAgY29uZi0+YWxnb3JpdGhtLCBjb25mLT5yYWlkX2Rpc2tzLCAKKwkJICAgICAgIG9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkgICBjb25mLT5wcmV2X2FsZ28sCisJCQkJICAgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcywKKwkJCQkgICBjb25mLT5tYXhfZGVncmFkZWQpLAorCQkgICAgICAgb25seV9wYXJpdHkocmRldi0+cmFpZF9kaXNrLAorCQkJCSAgIGNvbmYtPmFsZ29yaXRobSwKKwkJCQkgICBjb25mLT5yYWlkX2Rpc2tzLAorCQkJCSAgIGNvbmYtPm1heF9kZWdyYWRlZCkpOworCQlpZiAocmRldi0+cmVjb3Zlcnlfb2Zmc2V0IDwgcmVzaGFwZV9vZmZzZXQpIHsKKwkJCS8qIFdlIG5lZWQgdG8gY2hlY2sgb2xkIGFuZCBuZXcgbGF5b3V0ICovCisJCQlpZiAoIW9ubHlfcGFyaXR5KHJkZXYtPnJhaWRfZGlzaywKKwkJCQkJIGNvbmYtPmFsZ29yaXRobSwKKwkJCQkJIGNvbmYtPnJhaWRfZGlza3MsCisJCQkJCSBjb25mLT5tYXhfZGVncmFkZWQpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICghb25seV9wYXJpdHkocmRldi0+cmFpZF9kaXNrLAorCQkJCSBjb25mLT5wcmV2X2FsZ28sCisJCQkJIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MsCisJCQkJIGNvbmYtPm1heF9kZWdyYWRlZCkpCisJCQljb250aW51ZTsKKwkJZGlydHlfcGFyaXR5X2Rpc2tzKys7CisJfQogCi0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7CisJbWRkZXYtPmRlZ3JhZGVkID0gKG1heChjb25mLT5yYWlkX2Rpc2tzLCBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQorCQkJICAgLSB3b3JraW5nX2Rpc2tzKTsKIAogCWlmIChtZGRldi0+ZGVncmFkZWQgPiBjb25mLT5tYXhfZGVncmFkZWQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogbm90IGVub3VnaCBvcGVyYXRpb25hbCBkZXZpY2VzIGZvciAlcyIKQEAgLTQ5MzEsNyArNTAwNiw3IEBACiAJbWRkZXYtPmRldl9zZWN0b3JzICY9IH4obWRkZXYtPmNodW5rX3NlY3RvcnMgLSAxKTsKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCi0JaWYgKG1kZGV2LT5kZWdyYWRlZCA+IDAgJiYKKwlpZiAobWRkZXYtPmRlZ3JhZGVkID4gZGlydHlfcGFyaXR5X2Rpc2tzICYmCiAJICAgIG1kZGV2LT5yZWNvdmVyeV9jcCAhPSBNYXhTZWN0b3IpIHsKIAkJaWYgKG1kZGV2LT5va19zdGFydF9kZWdyYWRlZCkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTUzNTcsOSArNTQzMiwxMSBAQAogCQkgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgewogCQkJaWYgKHJhaWQ1X2FkZF9kaXNrKG1kZGV2LCByZGV2KSA9PSAwKSB7CiAJCQkJY2hhciBubVsyMF07Ci0JCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCQkJc2V0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKIAkJCQlhZGRlZF9kZXZpY2VzKys7Ci0JCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKIAkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CiAJCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKIAkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmggYi9kcml2ZXJzL21kL3JhaWQ1LmgKaW5kZXggMjM5MGUwZS4uZGQ3MDgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuaApAQCAtMjE0LDEyICsyMTQsMjAgQEAKIAlpbnQJCQlkaXNrczsJCS8qIGRpc2tzIGluIHN0cmlwZSAqLwogCWVudW0gY2hlY2tfc3RhdGVzCWNoZWNrX3N0YXRlOwogCWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHJlY29uc3RydWN0X3N0YXRlOwotCS8qIHN0cmlwZV9vcGVyYXRpb25zCisJLyoqCisJICogc3RydWN0IHN0cmlwZV9vcGVyYXRpb25zCiAJICogQHRhcmdldCAtIFNUUklQRV9PUF9DT01QVVRFX0JMSyB0YXJnZXQKKwkgKiBAdGFyZ2V0MiAtIDJuZCBjb21wdXRlIHRhcmdldCBpbiB0aGUgcmFpZDYgY2FzZQorCSAqIEB6ZXJvX3N1bV9yZXN1bHQgLSBQIGFuZCBRIHZlcmlmaWNhdGlvbiBmbGFncworCSAqIEByZXF1ZXN0IC0gYXN5bmMgc2VydmljZSByZXF1ZXN0IGZsYWdzIGZvciByYWlkX3J1bl9vcHMKIAkgKi8KIAlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgewogCQlpbnQgCQkgICAgIHRhcmdldCwgdGFyZ2V0MjsKIAkJZW51bSBzdW1fY2hlY2tfZmxhZ3MgemVyb19zdW1fcmVzdWx0OworCQkjaWZkZWYgQ09ORklHX01VTFRJQ09SRV9SQUlENDU2CisJCXVuc2lnbmVkIGxvbmcJICAgICByZXF1ZXN0OworCQl3YWl0X3F1ZXVlX2hlYWRfdCAgICB3YWl0X2Zvcl9vcHM7CisJCSNlbmRpZgogCX0gb3BzOwogCXN0cnVjdCByNWRldiB7CiAJCXN0cnVjdCBiaW8JcmVxOwpAQCAtMjk0LDYgKzMwMiw4IEBACiAjZGVmaW5lCVNUUklQRV9GVUxMX1dSSVRFCTEzIC8qIGFsbCBibG9ja3MgYXJlIHNldCB0byBiZSBvdmVyd3JpdHRlbiAqLwogI2RlZmluZQlTVFJJUEVfQklPRklMTF9SVU4JMTQKICNkZWZpbmUJU1RSSVBFX0NPTVBVVEVfUlVOCTE1CisjZGVmaW5lCVNUUklQRV9PUFNfUkVRX1BFTkRJTkcJMTYKKwogLyoKICAqIE9wZXJhdGlvbiByZXF1ZXN0IGZsYWdzCiAgKi8KQEAgLTQ3OCw3ICs0ODgsNyBAQAogewogCXJldHVybiAobGF5b3V0ID49IDAgJiYgbGF5b3V0IDw9IDUpCiAJCXx8Ci0JCShsYXlvdXQgPT0gOCB8fCBsYXlvdXQgPT0gMTApCisJCShsYXlvdXQgPj0gOCAmJiBsYXlvdXQgPD0gMTApCiAJCXx8CiAJCShsYXlvdXQgPj0gMTYgJiYgbGF5b3V0IDw9IDIwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKaW5kZXggNjk5ZGZlZS4uMjY1NGQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiAkIy13YXkgdW5yb2xsZWQgcG9ydGFibGUgaW50ZWdlciBtYXRoIFJBSUQtNiBpbnN0cnVjdGlvbiBzZXQKICAqCi0gKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwucGwKKyAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5hd2sKICAqCiAgKiA8YmVuaD4gaHBhOiBpbiBwcm9jZXNzLAogICogeW91IGNhbiBqdXN0ICJzdGVhbCIgdGhlIHZlYyB1bml0IHdpdGggZW5hYmxlX2tlcm5lbF9hbHRpdmVjKCkgKGJ1dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmludC51YyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKaW5kZXggZjliZjljYi4uZDFlMjc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmludC51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogJCMtd2F5IHVucm9sbGVkIHBvcnRhYmxlIGludGVnZXIgbWF0aCBSQUlELTYgaW5zdHJ1Y3Rpb24gc2V0CiAgKgotICogVGhpcyBmaWxlIGlzIHBvc3Rwcm9jZXNzZWQgdXNpbmcgdW5yb2xsLnBsCisgKiBUaGlzIGZpbGUgaXMgcG9zdHByb2Nlc3NlZCB1c2luZyB1bnJvbGwuYXdrCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L01ha2VmaWxlIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKaW5kZXggNThmZmRmNC4uMjg3NGNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBPUFRGTEFHUyA9IC1PMgkJCSMgQWRqdXN0IGFzIGRlc2lyZWQKIENGTEFHUwkgPSAtSS4uIC1JIC4uLy4uLy4uL2luY2x1ZGUgLWcgJChPUFRGTEFHUykKIExECSA9IGxkCi1QRVJMCSA9IHBlcmwKK0FXSwkgPSBhd2sKIEFSCSA9IGFyCiBSQU5MSUIJID0gcmFubGliCiAKQEAgLTM1LDM1ICszNSwzNSBAQAogcmFpZDZ0ZXN0OiB0ZXN0LmMgcmFpZDYuYQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyByYWlkNnRlc3QgJF4KIAotcmFpZDZhbHRpdmVjMS5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMSA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWMxLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTEgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmFsdGl2ZWMyLmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAyIDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKK3JhaWQ2YWx0aXZlYzIuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MiA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACiAKLXJhaWQ2YWx0aXZlYzQuYzogcmFpZDZhbHRpdmVjLnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDQgPCByYWlkNmFsdGl2ZWMudWMgPiAkQAorcmFpZDZhbHRpdmVjNC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj00IDwgcmFpZDZhbHRpdmVjLnVjID4gJEAKIAotcmFpZDZhbHRpdmVjOC5jOiByYWlkNmFsdGl2ZWMudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgOCA8IHJhaWQ2YWx0aXZlYy51YyA+ICRACityYWlkNmFsdGl2ZWM4LmM6IHJhaWQ2YWx0aXZlYy51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTggPCByYWlkNmFsdGl2ZWMudWMgPiAkQAogCi1yYWlkNmludDEuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMSA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50MS5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTEgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50Mi5jOiByYWlkNmludC51YyAuLi91bnJvbGwucGwKLQkkKFBFUkwpIC4uL3Vucm9sbC5wbCAyIDwgcmFpZDZpbnQudWMgPiAkQAorcmFpZDZpbnQyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MiA8IHJhaWQ2aW50LnVjID4gJEAKIAotcmFpZDZpbnQ0LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5wbAotCSQoUEVSTCkgLi4vdW5yb2xsLnBsIDQgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDQuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLmF3aworCSQoQVdLKSAuLi91bnJvbGwuYXdrIC12Tj00IDwgcmFpZDZpbnQudWMgPiAkQAogCi1yYWlkNmludDguYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgOCA8IHJhaWQ2aW50LnVjID4gJEAKK3JhaWQ2aW50OC5jOiByYWlkNmludC51YyAuLi91bnJvbGwuYXdrCisJJChBV0spIC4uL3Vucm9sbC5hd2sgLXZOPTggPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50MTYuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMTYgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDE2LmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MTYgPCByYWlkNmludC51YyA+ICRACiAKLXJhaWQ2aW50MzIuYzogcmFpZDZpbnQudWMgLi4vdW5yb2xsLnBsCi0JJChQRVJMKSAuLi91bnJvbGwucGwgMzIgPCByYWlkNmludC51YyA+ICRACityYWlkNmludDMyLmM6IHJhaWQ2aW50LnVjIC4uL3Vucm9sbC5hd2sKKwkkKEFXSykgLi4vdW5yb2xsLmF3ayAtdk49MzIgPCByYWlkNmludC51YyA+ICRACiAKIHJhaWQ2dGFibGVzLmM6IG1rdGFibGVzCiAJLi9ta3RhYmxlcyA+IHJhaWQ2dGFibGVzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvdW5yb2xsLmF3ayBiL2RyaXZlcnMvbWQvdW5yb2xsLmF3awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmFhMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC91bnJvbGwuYXdrCkBAIC0wLDAgKzEsMjAgQEAKKworIyBUaGlzIGZpbHRlciByZXF1aXJlcyBvbmUgY29tbWFuZCBsaW5lIG9wdGlvbiBvZiBmb3JtIC12Tj1uCisjIHdoZXJlIG4gbXVzdCBiZSBhIGRlY2ltYWwgbnVtYmVyLgorIworIyBSZXBlYXQgZWFjaCBpbnB1dCBsaW5lIGNvbnRhaW5pbmcgJCQgbiB0aW1lcywgcmVwbGFjaW5nICQkIHdpdGggMC4uLm4tMS4KKyMgUmVwbGFjZSBlYWNoICQjIHdpdGggbiwgYW5kIGVhY2ggJCogd2l0aCBhIHNpbmdsZSAkLgorCitCRUdJTiB7CisJbiA9IE4gKyAwCit9Cit7CisJaWYgKC9cJFwkLykgeyByZXAgPSBuIH0gZWxzZSB7IHJlcCA9IDEgfQorCWZvciAoaSA9IDA7IGkgPCByZXA7ICsraSkgeworCQl0bXAgPSAkMAorCQlnc3ViKC9cJFwkLywgaSwgdG1wKQorCQlnc3ViKC9cJFwjLywgbiwgdG1wKQorCQlnc3ViKC9cJFwqLywgIiQiLCB0bXApCisJCXByaW50IHRtcAorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvdW5yb2xsLnBsIGIvZHJpdmVycy9tZC91bnJvbGwucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhY2M3MTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZC91bnJvbGwucGwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMKLSMgVGFrZSBhIHBpZWNlIG9mIEMgY29kZSBhbmQgZm9yIGVhY2ggbGluZSB3aGljaCBjb250YWlucyB0aGUgc2VxdWVuY2UgJCQKLSMgcmVwZWF0IG4gdGltZXMgd2l0aCAkIHJlcGxhY2VkIGJ5IDAuLi5uLTE7IHRoZSBzZXF1ZW5jZSAkIyBpcyByZXBsYWNlZAotIyBieSB0aGUgdW5yb2xsaW5nIGZhY3RvciwgYW5kICQqIHdpdGggYSBzaW5nbGUgJAotIwotCi0oJG4pID0gQEFSR1Y7Ci0kbiArPSAwOwotCi13aGlsZSAoIGRlZmluZWQoJGxpbmUgPSA8U1RESU4+KSApIHsKLSAgICBpZiAoICRsaW5lID1+IC9cJFwkLyApIHsKLQkkcmVwID0gJG47Ci0gICAgfSBlbHNlIHsKLQkkcmVwID0gMTsKLSAgICB9Ci0gICAgZm9yICggJGkgPSAwIDsgJGkgPCAkcmVwIDsgJGkrKyApIHsKLQkkdG1wID0gJGxpbmU7Ci0JJHRtcCA9fiBzL1wkXCQvJGkvZzsKLQkkdG1wID1+IHMvXCRcIy8kbi9nOwotCSR0bXAgPX4gcy9cJFwqL1wkL2c7Ci0JcHJpbnQgJHRtcDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtZmUuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCmluZGV4IDY0NTk1MTEuLjNhNTBjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jCkBAIC02MTYsMTMgKzYxNiwxMyBAQAogCQljYXNlIFJGMjoKIAkJCW1hcFtpXS5yZl9hMSA9IChwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSAtCiAJCQkJCXByb2dfY2FsW1JGMV0gKyBwcm9nX3RhYltSRjFdKSAvCi0JCQkJKChyZl9mcmVxW1JGMl0gLSByZl9mcmVxW1JGMV0pIC8gMTAwMCk7CisJCQkJKHMzMikoKHJmX2ZyZXFbUkYyXSAtIHJmX2ZyZXFbUkYxXSkgLyAxMDAwKTsKIAkJCW1hcFtpXS5yZjIgICA9IHJmX2ZyZXFbUkYyXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjM6CiAJCQltYXBbaV0ucmZfYTIgPSAocHJvZ19jYWxbUkYzXSAtIHByb2dfdGFiW1JGM10gLQogCQkJCQlwcm9nX2NhbFtSRjJdICsgcHJvZ190YWJbUkYyXSkgLwotCQkJCSgocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDApOworCQkJCShzMzIpKChyZl9mcmVxW1JGM10gLSByZl9mcmVxW1JGMl0pIC8gMTAwMCk7CiAJCQltYXBbaV0ucmZfYjIgPSBwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXTsKIAkJCW1hcFtpXS5yZjMgICA9IHJmX2ZyZXFbUkYzXSAvIDEwMDA7CiAJCQlicmVhazsKQEAgLTEwMDAsMTIgKzEwMDAsMTIgQEAKIAlzdHJ1Y3QgdGRhMTgyNzFfc3RkX21hcF9pdGVtICptYXA7CiAJY2hhciAqbW9kZTsKIAlpbnQgcmV0OwotCXUzMiBmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgKiA2MjUwMDsKKwl1MzIgZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogMTI1ICoKKwkJKChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgPyAxIDogMTAwMCkgLyAyOwogCiAJcHJpdi0+bW9kZSA9IFREQTE4MjcxX0FOQUxPRzsKIAogCWlmIChwYXJhbXMtPm1vZGUgPT0gVjRMMl9UVU5FUl9SQURJTykgewotCQlmcmVxID0gZnJlcSAvIDEwMDA7CiAJCW1hcCA9ICZzdGRfbWFwLT5mbV9yYWRpbzsKIAkJbW9kZSA9ICJmbSI7CiAJfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kbXhkZXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCmluZGV4IDM3NTBmZjQuLmMzNzc5MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTEyMDMsNyArMTIwNCw3IEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kdnJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9kdnJfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IGR2Yl9kdnJfcmVhZCwKIAkud3JpdGUgPSBkdmJfZHZyX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2RlbXV4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwppbmRleCBlZWY2ZDM2Li45MWM1MzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZGVtdXguYwpAQCAtMjEsNiArMjEsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggOGM5YWUwYS4uMDI0MWE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKICNpbmNsdWRlICJkdmJfbmV0LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggOTc0NGIwNi4uMGU0Yjk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtNzUsNyArNzUsNyBAQAogCXNlbGVjdCBEVkJfRElCMzAwME1DIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9MR0RUMzMwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MAorCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMKaW5kZXggMDczN2M2My4uM2RmMjA0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHJlcV90IHJlcTsKIAlpbnQgcmV0ID0gMDsKLQltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKCZyZXEpKTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOwogCiAJaWYgKG51bSA+IDIpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggMGIyODEyYS4uNmJkODk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0xOTI1LDcgKzE5MjUsNyBAQAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiTGVhZHRlayBXaW5mYXN0IERUViBEb25nbGUgKFNUSzc3MDBQIGJhc2VkKSIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbOF0gfSwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs4XSwgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzM0XSB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJCXsgICAiQVZlck1lZGlhIEFWZXJUViBEVkItVCBFeHByZXNzIiwKQEAgLTIwNjQsNyArMjA2NCw3IEBACiAJCQl9LAogCQl9LAogCi0JCS5udW1fZGV2aWNlX2Rlc2NzID0gMTIsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gMTEsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJEaUJjb20gU1RLNzA3MFAgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTVdLCBOVUxMIH0sCkBAIC0yMDk4LDExICsyMDk4LDYgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszMF0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCi0JCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTLyBUMyIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzNdLAotCQkJCQkmZGliMDcwMF91c2JfaWRfdGFibGVbNTJdLCBOVUxMIH0sCi0JCQkJeyBOVUxMIH0sCi0JCQl9LAogCQkJeyAgICJFbGdhdG8gRXllVFYgRFRUIiwKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0OV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKQEAgLTIzNDMsOCArMjMzOCwxMCBAQAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzU5XSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKLQkJCXsgICAiVGVycmF0ZWMgQ2luZXJneSBUIFVTQiBYWFMgKEhEKSIsCi0JCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzRdLCAmZGliMDcwMF91c2JfaWRfdGFibGVbNjBdIH0sCisJCQl7ICAgIlRlcnJhdGVjIENpbmVyZ3kgVCBVU0IgWFhTIChIRCkvIFQzIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszM10sCisJCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs1Ml0sCisJCQkJCSZkaWIwNzAwX3VzYl9pZF90YWJsZVs2MF0sIE5VTEx9LAogCQkJCXsgTlVMTCB9LAogCQkJfSwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IGQxYjY3ZmUuLjQ4NWQwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTA1MCwyOCArMTA1MCwyOCBAQAogCWMtPm9wZXJhbmRbNF0gPSAwOyAvKiBzbG90ICovCiAJYy0+b3BlcmFuZFs1XSA9IFNGRV9WRU5ET1JfVEFHX0NBX1BNVDsgLyogY2EgdGFnICovCiAJYy0+b3BlcmFuZFs2XSA9IDA7IC8qIG1vcmUvbGFzdCAqLwotCS8qIGMtPm9wZXJhbmRbN10gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTc7ICovIC8qIGxlbmd0aCAqLwotCWMtPm9wZXJhbmRbOF0gPSBsaXN0X21hbmFnZW1lbnQ7Ci0JYy0+b3BlcmFuZFs5XSA9IDB4MDE7IC8qIHBtdF9jbWQ9T0tfZGVzY3JhbWJsZSAqLworCS8qIFVzZSB0aHJlZSBieXRlcyBmb3IgbGVuZ3RoIGZpZWxkIGluIGNhc2UgbGVuZ3RoID4gMTI3ICovCisJYy0+b3BlcmFuZFsxMF0gPSBsaXN0X21hbmFnZW1lbnQ7CisJYy0+b3BlcmFuZFsxMV0gPSAweDAxOyAvKiBwbXRfY21kPU9LX2Rlc2NyYW1ibGUgKi8KIAogCS8qIFRTIHByb2dyYW0gbWFwIHRhYmxlICovCiAKLQljLT5vcGVyYW5kWzEwXSA9IDB4MDI7IC8qIFRhYmxlIGlkPTIgKi8KLQljLT5vcGVyYW5kWzExXSA9IDB4ODA7IC8qIFNlY3Rpb24gc3ludGF4ICsgbGVuZ3RoICovCi0JLyogYy0+b3BlcmFuZFsxMl0gPSBYWFhwcm9ncmFtX2luZm9fbGVuZ3RoICsgMTI7ICovCi0JYy0+b3BlcmFuZFsxM10gPSBtc2dbMV07IC8qIFByb2dyYW0gbnVtYmVyICovCi0JYy0+b3BlcmFuZFsxNF0gPSBtc2dbMl07Ci0JYy0+b3BlcmFuZFsxNV0gPSAweDAxOyAvKiBWZXJzaW9uIG51bWJlcj0wICsgY3VycmVudC9uZXh0PTEgKi8KLQljLT5vcGVyYW5kWzE2XSA9IDB4MDA7IC8qIFNlY3Rpb24gbnVtYmVyPTAgKi8KLQljLT5vcGVyYW5kWzE3XSA9IDB4MDA7IC8qIExhc3Qgc2VjdGlvbiBudW1iZXI9MCAqLwotCWMtPm9wZXJhbmRbMThdID0gMHgxZjsgLyogUENSX1BJRD0xRkZGICovCi0JYy0+b3BlcmFuZFsxOV0gPSAweGZmOwotCWMtPm9wZXJhbmRbMjBdID0gKHByb2dyYW1faW5mb19sZW5ndGggPj4gOCk7IC8qIFByb2dyYW0gaW5mbyBsZW5ndGggKi8KLQljLT5vcGVyYW5kWzIxXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoICYgMHhmZik7CisJYy0+b3BlcmFuZFsxMl0gPSAweDAyOyAvKiBUYWJsZSBpZD0yICovCisJYy0+b3BlcmFuZFsxM10gPSAweDgwOyAvKiBTZWN0aW9uIHN5bnRheCArIGxlbmd0aCAqLworCS8qIGMtPm9wZXJhbmRbMTRdID0gWFhYcHJvZ3JhbV9pbmZvX2xlbmd0aCArIDEyOyAqLworCWMtPm9wZXJhbmRbMTVdID0gbXNnWzFdOyAvKiBQcm9ncmFtIG51bWJlciAqLworCWMtPm9wZXJhbmRbMTZdID0gbXNnWzJdOworCWMtPm9wZXJhbmRbMTddID0gMHgwMTsgLyogVmVyc2lvbiBudW1iZXI9MCArIGN1cnJlbnQvbmV4dD0xICovCisJYy0+b3BlcmFuZFsxOF0gPSAweDAwOyAvKiBTZWN0aW9uIG51bWJlcj0wICovCisJYy0+b3BlcmFuZFsxOV0gPSAweDAwOyAvKiBMYXN0IHNlY3Rpb24gbnVtYmVyPTAgKi8KKwljLT5vcGVyYW5kWzIwXSA9IDB4MWY7IC8qIFBDUl9QSUQ9MUZGRiAqLworCWMtPm9wZXJhbmRbMjFdID0gMHhmZjsKKwljLT5vcGVyYW5kWzIyXSA9IChwcm9ncmFtX2luZm9fbGVuZ3RoID4+IDgpOyAvKiBQcm9ncmFtIGluZm8gbGVuZ3RoICovCisJYy0+b3BlcmFuZFsyM10gPSAocHJvZ3JhbV9pbmZvX2xlbmd0aCAmIDB4ZmYpOwogCiAJLyogQ0EgZGVzY3JpcHRvcnMgYXQgcHJvZ3JhbW1lIGxldmVsICovCiAJcmVhZF9wb3MgPSA2OwotCXdyaXRlX3BvcyA9IDIyOworCXdyaXRlX3BvcyA9IDI0OwogCWlmIChwcm9ncmFtX2luZm9fbGVuZ3RoID4gMCkgewogCQlwbXRfY21kX2lkID0gbXNnW3JlYWRfcG9zKytdOwogCQlpZiAocG10X2NtZF9pZCAhPSAxICYmIHBtdF9jbWRfaWQgIT0gNCkKQEAgLTExMTMsOCArMTExMywxMCBAQAogCWMtPm9wZXJhbmRbd3JpdGVfcG9zKytdID0gMHgwMDsKIAljLT5vcGVyYW5kW3dyaXRlX3BvcysrXSA9IDB4MDA7CiAKLQljLT5vcGVyYW5kWzddID0gd3JpdGVfcG9zIC0gODsKLQljLT5vcGVyYW5kWzEyXSA9IHdyaXRlX3BvcyAtIDEzOworCWMtPm9wZXJhbmRbN10gPSAweDgyOworCWMtPm9wZXJhbmRbOF0gPSAod3JpdGVfcG9zIC0gMTApID4+IDg7CisJYy0+b3BlcmFuZFs5XSA9ICh3cml0ZV9wb3MgLSAxMCkgJiAweGZmOworCWMtPm9wZXJhbmRbMTRdID0gd3JpdGVfcG9zIC0gMTU7CiAKIAljcmMzMl9jc3VtID0gY3JjMzJfYmUoMCwgJmMtPm9wZXJhbmRbMTBdLCBjLT5vcGVyYW5kWzEyXSAtIDEpOwogCWMtPm9wZXJhbmRbd3JpdGVfcG9zIC0gNF0gPSAoY3JjMzJfY3N1bSA+PiAyNCkgJiAweGZmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1jaS5jCmluZGV4IGVlYjgwZDAuLjg1M2UwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWNpLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCXJldHVybiBQT0xMSU47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZkdHZfY2FfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLAogCS5vcGVuCQk9IGR2Yl9nZW5lcmljX29wZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZlLmMKaW5kZXggN2JhNDM2My4uZTQ5Y2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZmUuYwpAQCAtMTQxLDE4ICsxNDEsMTIgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNkZWZpbmUgQUNDRVBURUQgMHg5Ci0KIHN0YXRpYyBpbnQgZmR0dl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBmaXJlZHR2ICpmZHR2ID0gZmUtPnNlY19wcml2OwogCi0JLyogRklYTUU6IGF2Y190dW5lcl9kc2QgbmV2ZXIgcmV0dXJucyBBQ0NFUFRFRC4gQ2hlY2sgc3RhdHVzPyAqLwotCWlmIChhdmNfdHVuZXJfZHNkKGZkdHYsIHBhcmFtcykgIT0gQUNDRVBURUQpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UKLQkJcmV0dXJuIDA7IC8qIG5vdCBzdXJlIG9mIHRoaXMuLi4gKi8KKwlyZXR1cm4gYXZjX3R1bmVyX2RzZChmZHR2LCBwYXJhbXMpOwogfQogCiBzdGF0aWMgaW50IGZkdHZfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKaW5kZXggOGEyZTFlNy4uZWVjOWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCkBAIC01MSw2ICs1MSw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfVFVORVJfRElCMDA3MF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIwMDcwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkaWIwMDcwX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiB1MTYgZGliMDA3MF93YmRfb2Zmc2V0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKik7CitleHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4IG9wZW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliMDA3MF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZGliMDA3MF9jb25maWcgKmNmZykKIHsKQEAgLTYzLDcgKzY0LDExIEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggb3BlbikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKK30KICNlbmRpZgotZXh0ZXJuIHZvaWQgZGliMDA3MF9jdHJsX2FnY19maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1OCBvcGVuKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwcC5jCmluZGV4IDU1ZWY2ZWViLi4wNzgxZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuYwpAQCAtMTM3NSw2ICsxMzc1LDExIEBACiAJaWYgKGRpYjcwMDBwX2lkZW50aWZ5KHN0KSAhPSAwKQogCQlnb3RvIGVycm9yOwogCisJLyogRklYTUU6IG1ha2Ugc3VyZSB0aGUgZGV2LnBhcmVudCBmaWVsZCBpcyBpbml0aWFsaXplZCwgb3IgZWxzZQorCXJlcXVlc3RfZmlybXdhcmUoKSB3aWxsIGhpdCBhbiBPT1BTICh0aGlzIHNob3VsZCBiZSBtb3ZlZCBzb21ld2hlcmUKKwltb3JlIGNvbW1vbikgKi8KKwlzdC0+aTJjX21hc3Rlci5nYXRlZF90dW5lcl9pMmNfYWRhcC5kZXYucGFyZW50ID0gaTJjX2FkYXAtPmRldi5wYXJlbnQ7CisKIAlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjcwMDBQLCBzdC0+aTJjX2FkYXAsIHN0LT5pMmNfYWRkcik7CiAKIAlkaWI3MDAwcF9kZW1vZF9yZXNldChzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9wdDEvcHQxLmMKaW5kZXggODFlNjIzYS4uMWZkODMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvcHQxL3B0MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3B0MS9wdDEuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiZHZiZGV2LmgiCiAjaW5jbHVkZSAiZHZiX2RlbXV4LmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCmluZGV4IGNiOGEzNTguLjhmODhhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc3VzYi5jCkBAIC01MjksNiArNTI5LDEyIEBACiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTklDRSB9LAogCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDMwMSksCiAJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fVkVOSUNFIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHhiOTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4YjkxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweGMwMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCmluZGV4IDhiMTQ0MDEuLjQ4MmQwZjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIFY0TDIgQVBJIGRlZnMJCSovCiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCmluZGV4IDkzOWQxZTUuLmE2NzI0MDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCkBAIC0xMjk5LDcgKzEyOTksNyBAQAogCiAJdHZub3JtID0gJmJ0dHZfdHZub3Jtc1tub3JtXTsKIAotCWlmICghbWVtY21wKCZidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLmNyb3BjYXAsICZ0dm5vcm0tPmNyb3BjYXAsCisJaWYgKG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAogCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KQEAgLTM4MDAsMTEgKzM4MDAsMzQgQEAKIAkJaWYgKCFWNEwyX0ZJRUxEX0hBU19CT1RIKGl0ZW0tPnZiLmZpZWxkKSAmJgogCQkgICAgKGl0ZW0tPnZiLnF1ZXVlLm5leHQgIT0gJmJ0di0+Y2FwdHVyZSkpIHsKIAkJCWl0ZW0gPSBsaXN0X2VudHJ5KGl0ZW0tPnZiLnF1ZXVlLm5leHQsIHN0cnVjdCBidHR2X2J1ZmZlciwgdmIucXVldWUpOworCQkJLyogTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAtIE9ubHkgY2hlY2sKKwkJCSAqIGFuZCBzZXQgdXAgdGhlIGJvdHRvbSBmaWVsZCBpbiB0aGUgbG9naWMKKwkJCSAqIGJlbG93LiAgRG9uJ3QgZXZlciBkbyB0aGUgdG9wIGZpZWxkLiAgVGhpcworCQkJICogb2YgY291cnNlIG1lYW5zIHRoYXQgaWYgd2Ugc2V0IHVwIHRoZQorCQkJICogYm90dG9tIGZpZWxkIGluIHRoZSBhYm92ZSBjb2RlIHRoYXQgd2UnbGwKKwkJCSAqIGFjdHVhbGx5IHNraXAgYSBmaWVsZC4gIEJ1dCB0aGF0J3MgT0suCisJCQkgKiBIYXZpbmcgcHJvY2Vzc2VkIG9ubHkgYSBzaW5nbGUgYnVmZmVyIHRoaXMKKwkJCSAqIHRpbWUsIHRoZW4gdGhlIG5leHQgdGltZSBhcm91bmQgdGhlIGZpcnN0CisJCQkgKiBhdmFpbGFibGUgYnVmZmVyIHNob3VsZCBiZSBmb3IgYSB0b3AgZmllbGQuCisJCQkgKiBUaGF0IHdpbGwgdGhlbiBjYXVzZSB1cyBoZXJlIHRvIHNldCB1cCBhCisJCQkgKiB0b3AgdGhlbiBhIGJvdHRvbSBmaWVsZCBpbiB0aGUgbm9ybWFsIHdheS4KKwkJCSAqIFRoZSBhbHRlcm5hdGl2ZSB0byB0aGlzIHVuZGVyc3RhbmRpbmcgaXMKKwkJCSAqIHRoYXQgd2Ugc2V0IHVwIHRoZSBzZWNvbmQgYXZhaWxhYmxlIGJ1ZmZlcgorCQkJICogYXMgYSB0b3AgZmllbGQsIGJ1dCB0aGF0J3Mgb3V0IG9mIG9yZGVyCisJCQkgKiBzaW5jZSB0aGlzIGRyaXZlciBhbHdheXMgcHJvY2Vzc2VzIHRoZSB0b3AKKwkJCSAqIGZpZWxkIGZpcnN0IC0gdGhlIGVmZmVjdCB3aWxsIGJlIHRoZSB0d28KKwkJCSAqIGJ1ZmZlcnMgYmVpbmcgcmV0dXJuZWQgaW4gdGhlIHdyb25nIG9yZGVyLAorCQkJICogd2l0aCB0aGUgc2Vjb25kIGJ1ZmZlciBhbHNvIGJlaW5nIGRlbGF5ZWQKKwkJCSAqIGJ5IG9uZSBmaWVsZCB0aW1lIChvd2luZyB0byB0aGUgZmlmbyBuYXR1cmUKKwkJCSAqIG9mIHZpZGVvYnVmKS4gIFdvcnNlIHN0aWxsLCB3ZSdsbCBiZSBzdHVjaworCQkJICogZG9pbmcgZmllbGRzIG91dCBvZiBvcmRlciBub3cgZXZlcnkgdGltZQorCQkJICogdW50aWwgc29tZXRoaW5nIGVsc2UgY2F1c2VzIGEgZmllbGQgdG8gYmUKKwkJCSAqIGRyb3BwZWQuICBCeSBlZmZlY3RpdmVseSBmb3JjaW5nIGEgZmllbGQgdG8KKwkJCSAqIGRyb3AgdGhpcyB3YXkgdGhlbiB3ZSBhbHdheXMgZ2V0IGJhY2sgaW50bworCQkJICogc3luYyB3aXRoaW4gYSBzaW5nbGUgZnJhbWUgdGltZS4gIChPdXQgb2YKKwkJCSAqIG9yZGVyIGZpZWxkcyBjYW4gc2NyZXcgdXAgZGVpbnRlcmxhY2luZworCQkJICogYWxnb3JpdGhtcy4pICovCiAJCQlpZiAoIVY0TDJfRklFTERfSEFTX0JPVEgoaXRlbS0+dmIuZmllbGQpKSB7Ci0JCQkJaWYgKE5VTEwgPT0gc2V0LT50b3AgJiYKLQkJCQkgICAgVjRMMl9GSUVMRF9UT1AgPT0gaXRlbS0+dmIuZmllbGQpIHsKLQkJCQkJc2V0LT50b3AgPSBpdGVtOwotCQkJCX0KIAkJCQlpZiAoTlVMTCA9PSBzZXQtPmJvdHRvbSAmJgogCQkJCSAgICBWNEwyX0ZJRUxEX0JPVFRPTSA9PSBpdGVtLT52Yi5maWVsZCkgewogCQkJCQlzZXQtPmJvdHRvbSA9IGl0ZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA2NTdjNDgxLi4xMDIzMGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTEzMjUsNyArMTMyNSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZzYnVmLT5jYW0tPnNfbXV0ZXgpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNhZmVfdjRsX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgY2FmZV92NGxfdm1fb3BzID0gewogCS5vcGVuID0gY2FmZV92NGxfdm1fb3BlbiwKIAkuY2xvc2UgPSBjYWZlX3Y0bF92bV9jbG9zZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKaW5kZXggNDNhYjBhZC4uMjM3NzMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDdiZDhhNzAuLmFjOTQ3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC0zODMsNiArMzgzLDExIEBACiAKIHN0YXRpYyBpbnQgc25kX2VtMjh4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogeworCXN0cnVjdCBlbTI4eHggKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWRldi0+YWRldi5od3B0cl9kb25lX2NhcHR1cmUgPSAwOworCWRldi0+YWRldi5jYXB0dXJlX3RyYW5zZmVyX2RvbmUgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvZXQ2MXgyNTFfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKaW5kZXggNzQwOTJmNC4uODg5ODdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9ldDYxeDI1MS9ldDYxeDI1MV9jb3JlLmMKQEAgLTE0OTYsNyArMTQ5Niw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBldDYxeDI1MV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV0NjF4MjUxX3ZtX29wcyA9IHsKIAkub3BlbiA9IGV0NjF4MjUxX3ZtX29wZW4sCiAJLmNsb3NlID0gZXQ2MXgyNTFfdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCmluZGV4IGNmNjU0MGQuLjIzZDNmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJZnJhbWUtPnY0bDJfYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX01BUFBFRDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnc3BjYV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdzcGNhX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBnc3BjYV92bV9vcGVuLAogCS5jbG9zZQkJPSBnc3BjYV92bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tNTYwMi9tNTYwMl9zNWs0YWEuYwppbmRleCA1OTQwMGU4Li5hMjdhZmViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX3M1azRhYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfczVrNGFhLmMKQEAgLTM1LDEyICszNSwyNSBAQAogICAgIGNvbnN0CiAJc3RydWN0IGRtaV9zeXN0ZW1faWQgczVrNGFhX3ZmbGlwX2RtaV90YWJsZVtdID0gewogCXsKKwkJLmlkZW50ID0gIkJSVU5FSU5JVCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQlJVTkVOSVQiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQlJVTkVOSVQiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVSU0lPTiwgIjAwMDMwRDAwMDAwMDAwMDEiKQorCQl9CisJfSwgewogCQkuaWRlbnQgPSAiRnVqaXRzdS1TaWVtZW5zIEFtaWxvIFhhIDI1MjgiLAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UgU0lFTUVOUyIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBTUlMTyBYYSAyNTI4IikKIAkJfQogCX0sIHsKKwkJLmlkZW50ID0gIkZ1aml0c3UtU2llbWVucyBBbWlsbyBYaSAyNTI4IiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJGVUpJVFNVIFNJRU1FTlMiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiQU1JTE8gWGkgMjUyOCIpCisJCX0KKwl9LCB7CiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gWGkgMjU1MCIsCiAJCS5tYXRjaGVzID0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSBTSUVNRU5TIiksCkBAIC01Nyw2ICs3MCwxMyBAQAogCQkubWF0Y2hlcyA9IHsKIAkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1pY3JvLVN0YXIgSW50ZXJuYXRpb25hbCIpLAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJHWDcwMCIpLAorCQkJRE1JX01BVENIKERNSV9CSU9TX0RBVEUsICIxMi8wMi8yMDA4IikKKwkJfQorCX0sIHsKKwkJLmlkZW50ID0gIk1TSSBHWDcwMCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm8tU3RhciBJbnRlcm5hdGlvbmFsIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkdYNzAwIiksCiAJCQlETUlfTUFUQ0goRE1JX0JJT1NfREFURSwgIjA3LzI2LzIwMDciKQogCQl9CiAJfSwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCmluZGV4IDE0MGM4ZjMuLmY4MzI4YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbXI5NzMxMGEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCQlkYXRhWzNdID0gMHgyYzsJCQkgICAvKiByZWcgMiwgSCBzaXplLzggKi8KIAkJZGF0YVs0XSA9IDB4NDg7CQkJICAgLyogcmVnIDMsIFYgc2l6ZS80ICovCiAJCWRhdGFbNl0gPSAweDA2OwkJCSAgIC8qIHJlZyA1LCBIIHN0YXJ0ICAqLwotCQlkYXRhWzhdID0gMHgwNiArIHNkLT5zZW5zb3JfdHlwZTsgIC8qIHJlZyA3LCBWIHN0YXJ0ICAqLworCQlkYXRhWzhdID0gMHgwNiAtIHNkLT5zZW5zb3JfdHlwZTsgIC8qIHJlZyA3LCBWIHN0YXJ0ICAqLwogCQlicmVhazsKIAl9CiAJZXJyX2NvZGUgPSBtcl93cml0ZShnc3BjYV9kZXYsIDExKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCAyZjZlMTM1Li5hNWMxOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC0yOTE5LDcgKzI5MTksNyBAQAogCS8qIEEgZmFsc2UgcG9zaXRpdmUgaGVyZSBpcyBsaWtlbHksIHVudGlsIE9WVCBnaXZlcyBtZQogCSAqIHRoZSBkZWZpbml0aXZlIFNPRi9FT0YgZm9ybWF0ICovCiAJaWYgKCghKGRhdGFbMF0gfCBkYXRhWzFdIHwgZGF0YVsyXSB8IGRhdGFbM10gfCBkYXRhWzVdKSkgJiYgZGF0YVs2XSkgewotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOworCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULCBmcmFtZSwgZGF0YSwgMCk7CiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIDApOwogCQlzZC0+cGFja2V0X25yID0gMDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCA2NTQ4OWQ2Li5iZmFlNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTM5NCw3ICszOTQsOCBAQAogCQkJUERFQlVHKERfUEFDSywgIkVuZCBvZiBmcmFtZSBkZXRlY3RlZCIpOwogCiAJCQkvKiBDb21wbGV0ZSB0aGUgbGFzdCBmcmFtZSAoaWYgYW55KSAqLwotCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBkYXRhLCAwKTsKKwkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsCisJCQkJCQlmcmFtZSwgZGF0YSwgMCk7CiAKIAkJCWlmIChjaHVua19sZW4pCiAJCQkJUERFQlVHKERfRVJSLCAiQ2h1bmsgbGVuZ3RoIGlzICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggZDA3NjViZS4uMDFlMWVlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTI4LDYgKzI4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KQEAgLTE1ODksNyArMTU5MCw3IEBACiAJbWV5ZS52bWFfdXNlX2NvdW50W2lkeF0tLTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBtZXllX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbWV5ZV92bV9vcHMgPSB7CiAJLm9wZW4JCT0gbWV5ZV92bV9vcGVuLAogCS5jbG9zZQkJPSBtZXllX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggNjk1MmU5Ni4uNTFiNjgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgpAQCAtMTQzMiw3ICsxNDMzLDkgQEAKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAogCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSBjYW1fZm10LT5mb3VyY2M7Ci0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfZm10LCBmKTsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsICZjYW1fZik7CisJY2FtX2YuZm10LnBpeC5waXhlbGZvcm1hdCA9IHBpeC0+cGl4ZWxmb3JtYXQ7CisJKnBpeCA9IGNhbV9mLmZtdC5waXg7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDllMzI2MmMuLjJjMGJiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTU5OCwxMSArNTk4LDYgQEAKIAlidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwKIAkJCSBzdHJ1Y3QgczIyNTVfYnVmZmVyLCB2Yi5xdWV1ZSk7CiAKLQlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmJ1Zi0+dmIuZG9uZSkpIHsKLQkJLyogbm8gb25lIGFjdGl2ZSAqLwotCQlyYyA9IC0xOwotCQlnb3RvIHVubG9jazsKLQl9CiAJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwogCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CiAJZHByaW50aygxMDAsICJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnZiLmkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggNzExNDViZi4uMDkwMTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0zNDI4LDYgKzM0MjgsNyBAQAogCQkudHVuZXJfY29uZmlnICAgPSAzLAogCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkudHNfdHlwZQk9IFNBQTcxMzRfTVBFR19UU19TRVJJQUwsCisJCS50c19mb3JjZV92YWwgICA9IDEsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMSBpcyBhbiBJTlBVVCAqLwogCQkuaW5wdXRzICAgICAgICAgPSB7ewogCQkJLm5hbWUgPSBuYW1lX3R2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKaW5kZXggM2ZhNjUyMi4uMDM0ODhiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCkBAIC0yNjIsMTEgKzI2MiwxMyBAQAogCXN3aXRjaCAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfdHlwZSkgewogCWNhc2UgU0FBNzEzNF9NUEVHX1RTX1BBUkFMTEVMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMOgogCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHhkOCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2Yyk7CisJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHg2YyB8CisJCQkoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfZm9yY2VfdmFsIDw8IDQpKTsKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMX1NFUklBTCwgMHhiYyk7CiAJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwxLCAweDAyKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCA2ZWUzZTliLi5mODY5N2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTM2MCw2ICszNjAsNyBAQAogCWVudW0gc2FhNzEzNF9tcGVnX3R5cGUgIG1wZWc7CiAJZW51bSBzYWE3MTM0X21wZWdfdHNfdHlwZSB0c190eXBlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHZpZF9wb3J0X29wdHM7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgdHNfZm9yY2VfdmFsOjE7CiB9OwogCiAjZGVmaW5lIGNhcmRfaGFzX3JhZGlvKGRldikgICAoTlVMTCAhPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yYWRpby5uYW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTY0L3NhYTcxNjQtY21kLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwppbmRleCBjNDU5NjZlLi45YzFkM2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNjQvc2FhNzE2NC1jbWQuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAKIAkvKiBQcmVwYXJlIHNvbWUgYmFzaWMgY29tbWFuZC9yZXNwb25zZSBzdHJ1Y3R1cmVzICovCiAJbWVtc2V0KCZjb21tYW5kX3QsIDAsIHNpemVvZihjb21tYW5kX3QpKTsKLQltZW1zZXQoJnJlc3BvbnNlX3QsIDAsIHNpemVvZigmcmVzcG9uc2VfdCkpOworCW1lbXNldCgmcmVzcG9uc2VfdCwgMCwgc2l6ZW9mKHJlc3BvbnNlX3QpKTsKIAlwY29tbWFuZF90ID0gJmNvbW1hbmRfdDsKIAlwcmVzcG9uc2VfdCA9ICZyZXNwb25zZV90OwogCWNvbW1hbmRfdC5pZCA9IGlkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDVhYjdjNWEuLjJmNzhiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCQkgIlN1cGVySCBNb2JpbGUgQ0VVIGRyaXZlciBhdHRhY2hlZCB0byBjYW1lcmEgJWRcbiIsCiAJCSBpY2QtPmRldm51bSk7CiAKLQljbGtfZW5hYmxlKHBjZGV2LT5jbGspOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaWNpLT52NGwyX2Rldi5kZXYpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBTUiwgMSA8PCAxNik7IC8qIHJlc2V0ICovCiAJd2hpbGUgKGNldV9yZWFkKHBjZGV2LCBDU1RTUikgJiAxKQpAQCAtNDM4LDcgKzQzOCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjZGV2LT5sb2NrLCBmbGFncyk7CiAKLQljbGtfZGlzYWJsZShwY2Rldi0+Y2xrKTsKKwlwbV9ydW50aW1lX3B1dF9zeW5jKGljaS0+djRsMl9kZXYuZGV2KTsKIAogCWRldl9pbmZvKGljZC0+ZGV2LnBhcmVudCwKIAkJICJTdXBlckggTW9iaWxlIENFVSBkcml2ZXIgZGV0YWNoZWQgZnJvbSBjYW1lcmEgJWRcbiIsCkBAIC0xMTczLDggKzExNzMsOCBAQAogCXdpZHRoX2luID0gc2NhbGVfdXAoY2FtLT5jZXVfcmVjdC53aWR0aCwgKnNjYWxlX2gpOwogCWhlaWdodF9pbiA9IHNjYWxlX3VwKGNhbS0+Y2V1X3JlY3QuaGVpZ2h0LCAqc2NhbGVfdik7CiAKLQkqc2NhbGVfaCA9IGNhbGNfZ2VuZXJpY19zY2FsZShjYW0tPmNldV9yZWN0LndpZHRoLCBpY2QtPnVzZXJfd2lkdGgpOwotCSpzY2FsZV92ID0gY2FsY19nZW5lcmljX3NjYWxlKGNhbS0+Y2V1X3JlY3QuaGVpZ2h0LCBpY2QtPnVzZXJfaGVpZ2h0KTsKKwkqc2NhbGVfaCA9IGNhbGNfZ2VuZXJpY19zY2FsZSh3aWR0aF9pbiwgaWNkLT51c2VyX3dpZHRoKTsKKwkqc2NhbGVfdiA9IGNhbGNfZ2VuZXJpY19zY2FsZShoZWlnaHRfaW4sIGljZC0+dXNlcl9oZWlnaHQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9jb3JlLmMKaW5kZXggOWQ4NGM5NC4uNGE3NzExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2NvcmUuYwpAQCAtMjA3Nyw3ICsyMDc3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuOWMxMDJfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbjljMTAyX3ZtX29wcyA9IHsKIAkub3BlbiA9IHNuOWMxMDJfdm1fb3BlbiwKIAkuY2xvc2UgPSBzbjljMTAyX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zb2NfY2FtZXJhLmMKaW5kZXggNTlhYTdhMy4uMzZlNjE3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xMTYwLDEzICsxMTYwLDE1IEBACiAJCWlmIChpY2QtPmlmYWNlID09IGljaS0+bnIpIHsKIAkJCS8qIFRoZSBidXMtPnJlbW92ZSB3aWxsIGJlIGNhbGxlZCAqLwogCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmljZC0+ZGV2KTsKLQkJCS8qIE5vdCBiZWZvcmUgZGV2aWNlX3VucmVnaXN0ZXIoKSwgLnJlbW92ZQotCQkJICogbmVlZHMgcGFyZW50IHRvIGNhbGwgaWNpLT5vcHMtPnJlbW92ZSgpICovCi0JCQlpY2QtPmRldi5wYXJlbnQgPSBOVUxMOwotCi0JCQkvKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQotCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQiICovCi0JCQltZW1zZXQoJmljZC0+ZGV2LmtvYmosIDAsIHNpemVvZihpY2QtPmRldi5rb2JqKSk7CisJCQkvKgorCQkJICogTm90IGJlZm9yZSBkZXZpY2VfdW5yZWdpc3RlcigpLCAucmVtb3ZlCisJCQkgKiBuZWVkcyBwYXJlbnQgdG8gY2FsbCBpY2ktPm9wcy0+cmVtb3ZlKCkuCisJCQkgKiBJZiB0aGUgaG9zdCBtb2R1bGUgaXMgbG9hZGVkIGFnYWluLCBkZXZpY2VfcmVnaXN0ZXIoKQorCQkJICogd291bGQgY29tcGxhaW4gImFscmVhZHkgaW5pdGlhbGlzZWQsIiBzaW5jZSAyLjYuMzIKKwkJCSAqIHRoaXMgaXMgYWxzbyBuZWVkZWQgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBvZiB0aGUKKwkJCSAqIGRldmljZSBwcml2YXRlIGRhdGEuCisJCQkgKi8KKwkJCW1lbXNldCgmaWNkLT5kZXYsIDAsIHNpemVvZihpY2QtPmRldikpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCmluZGV4IDBiOTk2ZWEuLjZiNDE4NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RrLXdlYmNhbS5jCkBAIC03OTAsNyArNzkwLDcgQEAKIAlpZiAoc2J1Zi0+bWFwY291bnQgPT0gMCkKIAkJc2J1Zi0+djRsYnVmLmZsYWdzICY9IH5WNEwyX0JVRl9GTEFHX01BUFBFRDsKIH0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3RrX3Y0bF92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHN0a192NGxfdm1fb3BzID0gewogCS5vcGVuID0gc3RrX3Y0bF92bV9vcGVuLAogCS5jbG9zZSA9IHN0a192NGxfdm1fY2xvc2UKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYwppbmRleCBjMzIyNWE1Li4xYjg5NzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCV9fczMyIHZhbHVlLCBfX3U4ICpkYXRhKQogewogCWRhdGFbMF0gPSB2YWx1ZSA9PSAwID8gMCA6ICh2YWx1ZSA+IDApID8gMSA6IDB4ZmY7Ci0JZGF0YVsyXSA9IG1pbihhYnModmFsdWUpLCAweGZmKTsKKwlkYXRhWzJdID0gbWluKChpbnQpYWJzKHZhbHVlKSwgMHhmZik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXZjX2NvbnRyb2xfbWFwcGluZyB1dmNfY3RybF9tYXBwaW5nc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKaW5kZXggOWU3MzUxNS4uYTJiZGQ4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWJ1ZmZlci0+dm1hX3VzZV9jb3VudC0tOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHV2Y192bV9vcHMgPSB7CiAJLm9wZW4JCT0gdXZjX3ZtX29wZW4sCiAJLmNsb3NlCQk9IHV2Y192bV9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCmluZGV4IGY5NjBlOGUuLmE2ZTQxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jCkBAIC05MCw3ICs5MCw4IEBACiAJCWN0cmwtPmR3TWF4VmlkZW9GcmFtZVNpemUgPQogCQkJZnJhbWUtPmR3TWF4VmlkZW9GcmFtZUJ1ZmZlclNpemU7CiAKLQlpZiAoc3RyZWFtLT5kZXYtPnF1aXJrcyAmIFVWQ19RVUlSS19GSVhfQkFORFdJRFRIICYmCisJaWYgKCEoZm9ybWF0LT5mbGFncyAmIFVWQ19GTVRfRkxBR19DT01QUkVTU0VEKSAmJgorCSAgICBzdHJlYW0tPmRldi0+cXVpcmtzICYgVVZDX1FVSVJLX0ZJWF9CQU5EV0lEVEggJiYKIAkgICAgc3RyZWFtLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKIAkJdTMyIGludGVydmFsOwogCQl1MzIgYmFuZHdpZHRoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYwppbmRleCBmMWNjZjk4Li44ZTkzYzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWNvcmUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCBkMDljZTgzYS4uNjM1ZmZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpZGVvYnVmX3ZtX29wcyA9IHsKIAkub3BlbiAgICAgPSB2aWRlb2J1Zl92bV9vcGVuLAogCS5jbG9zZSAgICA9IHZpZGVvYnVmX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1zZy5jCmluZGV4IGE4ZGQyMmEuLjAzMmViYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLXNnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtc2cuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC0zOTQsNyArMzk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aWRlb2J1Zl92bV9vcHMgPQogewogCS5vcGVuICAgICA9IHZpZGVvYnVmX3ZtX29wZW4sCiAJLmNsb3NlICAgID0gdmlkZW9idWZfdm1fY2xvc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCmluZGV4IDMwYWUzMGYuLjM1ZjM5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtdm1hbGxvYy5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmlkZW9idWZfdm1fb3BzID0KIHsKIAkub3BlbiAgICAgPSB2aWRlb2J1Zl92bV9vcGVuLAogCS5jbG9zZSAgICA9IHZpZGVvYnVmX3ZtX2Nsb3NlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwppbmRleCBjZDZhMzQ0Li5iMDM0YTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYwpAQCAtMzg1Nyw3ICszODU3LDcgQEAKIAlkcHJpbnRrKCJ2aW5vX3ZtX2Nsb3NlKCk6IGNvdW50ID0gJWRcbiIsIGZiLT5tYXBfY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZpbm9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aW5vX3ZtX29wcyA9IHsKIAkub3Blbgk9IHZpbm9fdm1fb3BlbiwKIAkuY2xvc2UJPSB2aW5vX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfY29yZS5jCmluZGV4IGIzYzY0MzYuLjMxMmE3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX2NvcmUuYwpAQCAtOTM1LDcgKzkzNSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6YzAzMDFfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6YzAzMDFfdm1fb3BzID0gewogCS5vcGVuID0gemMwMzAxX3ZtX29wZW4sCiAJLmNsb3NlID0gemMwMzAxX3ZtX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IGJjZGVmYjEuLjQ3MTM3ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtMzE3Miw3ICszMTcyLDcgQEAKIAltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB6b3Jhbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHpvcmFuX3ZtX29wcyA9IHsKIAkub3BlbiA9IHpvcmFuX3ZtX29wZW4sCiAJLmNsb3NlID0gem9yYW5fdm1fY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0bGFuLmMKaW5kZXggYmMyZWMyMS4uMzRmM2YzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRsYW4uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGxhbi5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2RlZmluZSBteV9WRVJTSU9OCU1QVF9MSU5VWF9WRVJTSU9OX0NPTU1PTgogI2RlZmluZSBNWU5BTQkJIm1wdGxhbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMgYi9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCmluZGV4IDU0NDdkYTEuLjYxMzQ4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwpAQCAtNTcsOCArNTcsNiBAQAogICogVGhlIEFCMzEwMCBpcyB1c3VhbGx5IGFzc2lnbmVkIGFkZHJlc3MgMHg0OCAoNy1iaXQpCiAgKiBUaGUgY2hpcCBpcyBkZWZpbmVkIGluIHRoZSBwbGF0Zm9ybSBpMmNfYm9hcmRfZGF0YSBzZWN0aW9uLgogICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4LCBJMkNfQ0xJRU5UX0VORCB9OwotSTJDX0NMSUVOVF9JTlNNT0RfMShhYjMxMDApOwogCiB1OCBhYjMxMDBfZ2V0X2NoaXBfdHlwZShzdHJ1Y3QgYWIzMTAwICphYjMxMDApCiB7CkBAIC05NjYsNyArOTY0LDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFiMzEwMF9pZFtdID0gewotCXsgImFiMzEwMCIsIGFiMzEwMCB9LAorCXsgImFiMzEwMCIsIDAgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWIzMTAwX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtY29yZS5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKaW5kZXggZTQyNGNmNi4uYTFjNDdlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMKQEAgLTQ4MCw3ICs0ODAsNiBAQAogYWRkX2NoaWxkcmVuKHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhLCB1bnNpZ25lZCBsb25nIGZlYXR1cmVzKQogewogCXN0cnVjdCBkZXZpY2UJKmNoaWxkOwotCXN0cnVjdCBkZXZpY2UJKnVzYl90cmFuc2NlaXZlciA9IE5VTEw7CiAKIAlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKSkgewogCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLApAQCAtNTMyLDE2ICs1MzEsNjEgQEAKIAl9CiAKIAlpZiAodHdsX2hhc191c2IoKSAmJiBwZGF0YS0+dXNiKSB7CisKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2NSA9IHsKKwkJCS5zdXBwbHkgPQkidXNiMXY1IiwKKwkJfTsKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjF2OCA9IHsKKwkJCS5zdXBwbHkgPQkidXNiMXY4IiwKKwkJfTsKKwkJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHVzYjN2MSA9IHsKKwkJCS5zdXBwbHkgPQkidXNiM3YxIiwKKwkJfTsKKworCS8qIEZpcnN0IGFkZCB0aGUgcmVndWxhdG9ycyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgYnkgdHJhbnNjZWl2ZXIgKi8KKwkJaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkpIHsKKwkJCS8qIHRoaXMgaXMgYSB0ZW1wbGF0ZSB0aGF0IGdldHMgY29waWVkICovCisJCQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB1c2JfZml4ZWQgPSB7CisJCQkJLmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPQorCQkJCQlSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkJCS5jb25zdHJhaW50cy52YWxpZF9vcHNfbWFzayA9CisJCQkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkJfTsKKworCQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCMVY1LAorCQkJCQkJICAgICAgJnVzYl9maXhlZCwgJnVzYjF2NSwgMSk7CisJCQlpZiAoSVNfRVJSKGNoaWxkKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CisKKwkJCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWOCwKKwkJCQkJCSAgICAgICZ1c2JfZml4ZWQsICZ1c2IxdjgsIDEpOworCQkJaWYgKElTX0VSUihjaGlsZCkpCisJCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOworCisJCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IzVjEsCisJCQkJCQkgICAgICAmdXNiX2ZpeGVkLCAmdXNiM3YxLCAxKTsKKwkJCWlmIChJU19FUlIoY2hpbGQpKQorCQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKKworCQl9CisKIAkJY2hpbGQgPSBhZGRfY2hpbGQoMCwgInR3bDQwMzBfdXNiIiwKIAkJCQlwZGF0YS0+dXNiLCBzaXplb2YoKnBkYXRhLT51c2IpLAogCQkJCXRydWUsCiAJCQkJLyogaXJxMCA9IFVTQl9QUkVTLCBpcnExID0gVVNCICovCiAJCQkJcGRhdGEtPmlycV9iYXNlICsgOCArIDIsIHBkYXRhLT5pcnFfYmFzZSArIDQpOworCiAJCWlmIChJU19FUlIoY2hpbGQpKQogCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwogCiAJCS8qIHdlIG5lZWQgdG8gY29ubmVjdCByZWd1bGF0b3JzIHRvIHRoaXMgdHJhbnNjZWl2ZXIgKi8KLQkJdXNiX3RyYW5zY2VpdmVyID0gY2hpbGQ7CisJCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmIGNoaWxkKSB7CisJCQl1c2IxdjUuZGV2ID0gY2hpbGQ7CisJCQl1c2IxdjguZGV2ID0gY2hpbGQ7CisJCQl1c2IzdjEuZGV2ID0gY2hpbGQ7CisJCX0KIAl9CiAKIAlpZiAodHdsX2hhc193YXRjaGRvZygpKSB7CkBAIC01ODAsNDcgKzYyNCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7CiAJfQogCi0JaWYgKHR3bF9oYXNfcmVndWxhdG9yKCkgJiYgdXNiX3RyYW5zY2VpdmVyKSB7Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjUgPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjF2NSIsCi0JCX07Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IxdjggPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjF2OCIsCi0JCX07Ci0JCXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB1c2IzdjEgPSB7Ci0JCQkuc3VwcGx5ID0JInVzYjN2MSIsCi0JCX07Ci0KLQkJLyogdGhpcyBpcyBhIHRlbXBsYXRlIHRoYXQgZ2V0cyBjb3BpZWQgKi8KLQkJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdXNiX2ZpeGVkID0gewotCQkJLmNvbnN0cmFpbnRzLnZhbGlkX21vZGVzX21hc2sgPQotCQkJCSAgUkVHVUxBVE9SX01PREVfTk9STUFMCi0JCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAotCQkJLmNvbnN0cmFpbnRzLnZhbGlkX29wc19tYXNrID0KLQkJCQkgIFJFR1VMQVRPUl9DSEFOR0VfTU9ERQotCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JCX07Ci0KLQkJdXNiMXY1LmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQkJdXNiMXY4LmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQkJdXNiM3YxLmRldiA9IHVzYl90cmFuc2NlaXZlcjsKLQotCQljaGlsZCA9IGFkZF9yZWd1bGF0b3JfbGlua2VkKFRXTDQwMzBfUkVHX1ZVU0IxVjUsICZ1c2JfZml4ZWQsCi0JCQkJJnVzYjF2NSwgMSk7Ci0JCWlmIChJU19FUlIoY2hpbGQpKQotCQkJcmV0dXJuIFBUUl9FUlIoY2hpbGQpOwotCi0JCWNoaWxkID0gYWRkX3JlZ3VsYXRvcl9saW5rZWQoVFdMNDAzMF9SRUdfVlVTQjFWOCwgJnVzYl9maXhlZCwKLQkJCQkmdXNiMXY4LCAxKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0KLQkJY2hpbGQgPSBhZGRfcmVndWxhdG9yX2xpbmtlZChUV0w0MDMwX1JFR19WVVNCM1YxLCAmdXNiX2ZpeGVkLAotCQkJCSZ1c2IzdjEsIDEpOwotCQlpZiAoSVNfRVJSKGNoaWxkKSkKLQkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQl9Ci0KIAkvKiBtYXliZSBhZGQgTERPcyB0aGF0IGFyZSBvbWl0dGVkIG9uIGNvc3QtcmVkdWNlZCBwYXJ0cyAqLwogCWlmICh0d2xfaGFzX3JlZ3VsYXRvcigpICYmICEoZmVhdHVyZXMgJiBUUFNfU1VCU0VUKSkgewogCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVlBMTDIsIHBkYXRhLT52cGxsMik7CkBAIC03OTIsNyArNzk1LDcgQEAKIAkJCXR3bC0+Y2xpZW50ID0gaTJjX25ld19kdW1teShjbGllbnQtPmFkYXB0ZXIsCiAJCQkJCXR3bC0+YWRkcmVzcyk7CiAJCQlpZiAoIXR3bC0+Y2xpZW50KSB7Ci0JCQkJZGV2X2VycigmdHdsLT5jbGllbnQtPmRldiwKKwkJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKIAkJCQkJImNhbid0IGF0dGFjaCBjbGllbnQgJWRcbiIsIGkpOwogCQkJCXN0YXR1cyA9IC1FTk9NRU07CiAJCQkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMTQwMF9jb3JlLmMgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwppbmRleCAyYWZjMDgwLi5mYTI5NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYworKysgYi9kcml2ZXJzL21mZC91Y2IxNDAwX2NvcmUuYwpAQCAtMjEsNiArMjEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VjYjE0MDAuaD4KIAogdW5zaWduZWQgaW50IHVjYjE0MDBfYWRjX3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1MTYgYWRjX2NoYW5uZWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IGZlYTkwODUuLjYwYzM5ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYyBiL2RyaXZlcnMvbWZkL3dtODMxeC1pcnEuYwppbmRleCBkMzAxNWRmLi5hYzA1NmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC93bTgzMXgtaXJxLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzF4LWlycS5jCkBAIC01MDcsNiArNTA3LDggQEAKIHsKIAlpbnQgaSwgcmV0OwogCisJbXV0ZXhfaW5pdCgmd204MzF4LT5pcnFfbG9jayk7CisKIAlpZiAoIWlycSkgewogCQlkZXZfd2Fybih3bTgzMXgtPmRldiwKIAkJCSAiTm8gaW50ZXJydXB0IHNwZWNpZmllZCAtIGZ1bmN0aW9uYWxpdHkgbGltaXRlZFxuIik7CkBAIC01MjEsNyArNTIzLDYgQEAKIAl9CiAKIAl3bTgzMXgtPmlycSA9IGlycTsKLQltdXRleF9pbml0KCZ3bTgzMXgtPmlycV9sb2NrKTsKIAlJTklUX1dPUksoJndtODMxeC0+aXJxX3dvcmssIHdtODMxeF9pcnFfd29ya2VyKTsKIAogCS8qIE1hc2sgdGhlIGluZGl2aWR1YWwgaW50ZXJydXB0IHNvdXJjZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vbWF4Njg3NS5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9tYXg2ODc1LmMKaW5kZXggM2MwYzU4ZS4uNWE2YjJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9tYXg2ODc1LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9tYXg2ODc1LmMKQEAgLTMzLDEyICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotLyogRG8gbm90IHNjYW4gLSB0aGUgTUFYNjg3NSBhY2Nlc3MgbWV0aG9kIHdpbGwgd3JpdGUgdG8gc29tZSBFRVBST00gY2hpcHMgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEluc21vZCBwYXJhbWV0ZXJzICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKG1heDY4NzUpOwotCiAvKiBUaGUgTUFYNjg3NSBjYW4gb25seSByZWFkL3dyaXRlIDE2IGJ5dGVzIGF0IGEgdGltZSAqLwogI2RlZmluZSBTTElDRV9TSVpFCQkJMTYKICNkZWZpbmUgU0xJQ0VfQklUUwkJCTQKQEAgLTE0NiwzMSArMTQwLDIxIEBACiAJLnJlYWQgPSBtYXg2ODc1X3JlYWQsCiB9OwogCi0vKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgbWF4Njg3NV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGtpbmQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgbWF4Njg3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJc3RydWN0IG1heDY4NzVfZGF0YSAqZGF0YTsKKwlpbnQgZXJyOwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEKIAkJCQkgICAgIHwgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBPbmx5IGNoZWNrIGV2ZW4gYWRkcmVzc2VzICovCisJLyogT25seSBiaW5kIHRvIGV2ZW4gYWRkcmVzc2VzICovCiAJaWYgKGNsaWVudC0+YWRkciAmIDEpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3RybGNweShpbmZvLT50eXBlLCAibWF4Njg3NSIsIEkyQ19OQU1FX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWF4Njg3NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgbWF4Njg3NV9kYXRhICpkYXRhOwotCWludCBlcnI7Ci0KIAlpZiAoIShkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDY4NzVfZGF0YSksIEdGUF9LRVJORUwpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTIyMiw5ICsyMDYsNiBAQAogCS5wcm9iZQkJPSBtYXg2ODc1X3Byb2JlLAogCS5yZW1vdmUJCT0gbWF4Njg3NV9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gbWF4Njg3NV9pZCwKLQotCS5kZXRlY3QJCT0gbWF4Njg3NV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYXg2ODc1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocGlsby5jIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKaW5kZXggMWFkMjdjNi4uYTkyYTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hwaWxvLmMKKysrIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vY29tbWFuZC5jIGIvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMKaW5kZXggMjc2ZDNmYi4uZTIwMzE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9jb21tYW5kLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaWJtYXNtLmgiCiAjaW5jbHVkZSAibG93bGV2ZWwuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jIGIvZHJpdmVycy9taXNjL2libWFzbS9ldmVudC5jCmluZGV4IDY4YTBhNWIuLjU3MmQ0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vZXZlbnQuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2V2ZW50LmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaWJtYXNtLmgiCiAjaW5jbHVkZSAibG93bGV2ZWwuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jIGIvZHJpdmVycy9taXNjL2libWFzbS9yX2hlYXJ0YmVhdC5jCmluZGV4IGJlYzllMmMuLjJkZTQ4N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcl9oZWFydGJlYXQuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JfaGVhcnRiZWF0LmMKQEAgLTIwLDYgKzIwLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaWJtYXNtLmgiCiAjaW5jbHVkZSAiZG90X2NvbW1hbmQuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3BoYW50b20uYyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKaW5kZXggZmE1N2I2Ny4uMDRjMjcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3BoYW50b20uYworKysgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3BoYW50b20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0yNzEsNyArMjcyLDcgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGhhbnRvbV9maWxlX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBoYW50b21fZmlsZV9vcHMgPSB7CiAJLm9wZW4gPSBwaGFudG9tX29wZW4sCiAJLnJlbGVhc2UgPSBwaGFudG9tX3JlbGVhc2UsCiAJLnVubG9ja2VkX2lvY3RsID0gcGhhbnRvbV9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYwppbmRleCBhZWQ2MDk4Li40MWM4ZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCkBAIC01Myw3ICs1Myw2IEBACiAvKiBHdWFyYW50ZWVkIHVzZXIgYXZhaWxhYmxlIHJlc291cmNlcyBvbiBlYWNoIG5vZGUgKi8KIHN0YXRpYyBpbnQgbWF4X3VzZXJfY2JycywgbWF4X3VzZXJfZHNyX2J5dGVzOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnVfZm9wczsKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBncnVfbWlzY2RldjsKIAogCkBAIC00MjYsNyArNDI1LDcgQEAKIAlncnVfcHJvY19leGl0KCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdydV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ3J1X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS51bmxvY2tlZF9pb2N0bAk9IGdydV9maWxlX3VubG9ja2VkX2lvY3RsLAogCS5tbWFwCQk9IGdydV9maWxlX21tYXAsCkBAIC00MzgsNyArNDM3LDcgQEAKIAkuZm9wcwkJPSAmZ3J1X2ZvcHMsCiB9OwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ3J1X3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzID0gewogCS5jbG9zZQkJPSBncnVfdm1hX2Nsb3NlLAogCS5mYXVsdAkJPSBncnVfZmF1bHQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYwppbmRleCBjY2Q0NDA4Li4zZjIzNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVwcm9jZnMuYwpAQCAtMTYxLDE0ICsxNjEsMTUgQEAKIHN0YXRpYyBzc2l6ZV90IG9wdGlvbnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAogCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQljaGFyIGJ1Zls4MF07CisJY2hhciBidWZbMjBdOwogCi0JaWYgKHN0cm5jcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcmJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxKSA8IDApCisJaWYgKGNvdW50ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWJ1Zltjb3VudCAtIDFdID0gJ1wwJzsKLQlpZiAoIXN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpKQotCQlncnVfb3B0aW9ucyA9IHZhbDsKKwlidWZbY291bnRdID0gJ1wwJzsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZ3J1X29wdGlvbnMpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBjb3VudDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKaW5kZXggMzRhYjNkNC4uNDY5OTBiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKQEAgLTYyNCw3ICs2MjQsNyBAQAogICovCiBzdHJ1Y3QgZ3J1X3VubG9hZF9jb250ZXh0X3JlcTsKIAotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBncnVfdm1fb3BzOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2UgKmdydWRldjsKIAogZXh0ZXJuIHN0cnVjdCBncnVfdm1hX2RhdGEgKmdydV9hbGxvY192bWFfZGF0YShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKaW5kZXggNjEwZGJkMS4uOTZkMTBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9kZWJ1Z2ZzLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtbWNfZGJnX2V4dF9jc2RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1tY19kYmdfZXh0X2NzZF9mb3BzID0gewogCS5vcGVuCQk9IG1tY19leHRfY3NkX29wZW4sCiAJLnJlYWQJCT0gbW1jX2V4dF9jc2RfcmVhZCwKIAkucmVsZWFzZQk9IG1tY19leHRfY3NkX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKaW5kZXggNjYzNjM1NC4uZjg1ZGNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwpAQCAtMjksNiArMjksOCBAQAogCXVuc2lnbmVkIGksIG5yX3N0cmluZ3M7CiAJY2hhciAqKmJ1ZmZlciwgKnN0cmluZzsKIAorCS8qIEZpbmQgYWxsIG51bGwtdGVybWluYXRlZCAoaW5jbHVkaW5nIHplcm8gbGVuZ3RoKSBzdHJpbmdzIGluCisJICAgdGhlIFRQTExWMV9JTkZPIGZpZWxkLiBUcmFpbGluZyBnYXJiYWdlIGlzIGlnbm9yZWQuICovCiAJYnVmICs9IDI7CiAJc2l6ZSAtPSAyOwogCkBAIC0zOSwxMSArNDEsOCBAQAogCQlpZiAoYnVmW2ldID09IDApCiAJCQlucl9zdHJpbmdzKys7CiAJfQotCi0JaWYgKG5yX3N0cmluZ3MgPCA0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNESU86IGlnbm9yaW5nIGJyb2tlbiBDSVNUUExfVkVSU18xXG4iKTsKKwlpZiAobnJfc3RyaW5ncyA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlzaXplID0gaTsKIApAQCAtOTgsNiArOTcsMjIgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BlZWRfdW5pdFs4XSA9CiAJeyAxMDAwMCwgMTAwMDAwLCAxMDAwMDAwLCAxMDAwMDAwMCwgMCwgMCwgMCwgMCB9OwogCisvKiBGVU5DRSB0dXBsZXMgd2l0aCB0aGVzZSB0eXBlcyBnZXQgcGFzc2VkIHRvIFNESU8gZHJpdmVycyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZnVuY2VfdHlwZV93aGl0ZWxpc3RbXSA9IHsKKwk0IC8qIENJU1RQTF9GVU5DRV9MQU5fTk9ERV9JRCB1c2VkIGluIEJyb2FkY29tIGNhcmRzICovCit9OworCitzdGF0aWMgaW50IGNpc3RwbF9mdW5jZV93aGl0ZWxpc3RlZCh1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jZV90eXBlX3doaXRlbGlzdCk7IGkrKykgeworCQlpZiAoZnVuY2VfdHlwZV93aGl0ZWxpc3RbaV0gPT0gdHlwZSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBjaXN0cGxfZnVuY2VfY29tbW9uKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwKIAkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNpemUpCiB7CkBAIC0xMjAsNiArMTM1LDEwIEBACiAJdW5zaWduZWQgdnNuOwogCXVuc2lnbmVkIG1pbl9zaXplOwogCisJLyogbGV0IFNESU8gZHJpdmVycyB0YWtlIGNhcmUgb2Ygd2hpdGVsaXN0ZWQgRlVOQ0UgdHVwbGVzICovCisJaWYgKGNpc3RwbF9mdW5jZV93aGl0ZWxpc3RlZChidWZbMF0pKQorCQlyZXR1cm4gLUVJTFNFUTsKKwogCXZzbiA9IGZ1bmMtPmNhcmQtPmNjY3Iuc2Rpb192c247CiAJbWluX3NpemUgPSAodnNuID09IFNESU9fU0RJT19SRVZfMV8wMCkgPyAyOCA6IDQyOwogCkBAIC0xNTQsMTMgKzE3MywxMiBAQAogCWVsc2UKIAkJcmV0ID0gY2lzdHBsX2Z1bmNlX2NvbW1vbihjYXJkLCBidWYsIHNpemUpOwogCi0JaWYgKHJldCkgeworCWlmIChyZXQgJiYgcmV0ICE9IC1FSUxTRVEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIENJU1RQTF9GVU5DRSBzaXplICV1ICIKIAkJICAgICAgICJ0eXBlICV1XG4iLCBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHNpemUsIGJ1ZlswXSk7Ci0JCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogdHlwZWRlZiBpbnQgKHRwbF9wYXJzZV90KShzdHJ1Y3QgbW1jX2NhcmQgKiwgc3RydWN0IHNkaW9fZnVuYyAqLApAQCAtMjUzLDggKzI3MSwzMyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpOyBpKyspCiAJCQlpZiAoY2lzX3RwbF9saXN0W2ldLmNvZGUgPT0gdHBsX2NvZGUpCiAJCQkJYnJlYWs7Ci0JCWlmIChpID49IEFSUkFZX1NJWkUoY2lzX3RwbF9saXN0KSkgewotCQkJLyogdGhpcyB0dXBsZSBpcyB1bmtub3duIHRvIHRoZSBjb3JlICovCisJCWlmIChpIDwgQVJSQVlfU0laRShjaXNfdHBsX2xpc3QpKSB7CisJCQljb25zdCBzdHJ1Y3QgY2lzX3RwbCAqdHBsID0gY2lzX3RwbF9saXN0ICsgaTsKKwkJCWlmICh0cGxfbGluayA8IHRwbC0+bWluX3NpemUpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBiYWQgQ0lTIHR1cGxlIDB4JTAyeCIKKwkJCQkgICAgICAgIiAobGVuZ3RoID0gJXUsIGV4cGVjdGVkID49ICV1KVxuIiwKKwkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAorCQkJCSAgICAgICB0cGxfY29kZSwgdHBsX2xpbmssIHRwbC0+bWluX3NpemUpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9IGVsc2UgaWYgKHRwbC0+cGFyc2UpIHsKKwkJCQlyZXQgPSB0cGwtPnBhcnNlKGNhcmQsIGZ1bmMsCisJCQkJCQkgdGhpcy0+ZGF0YSwgdHBsX2xpbmspOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGRvbid0IG5lZWQgdGhlIHR1cGxlIGFueW1vcmUgaWYgaXQgd2FzCisJCQkgKiBzdWNjZXNzZnVsbHkgcGFyc2VkIGJ5IHRoZSBTRElPIGNvcmUgb3IgaWYgaXQgaXMKKwkJCSAqIG5vdCBnb2luZyB0byBiZSBwYXJzZWQgYnkgU0RJTyBkcml2ZXJzLgorCQkJICovCisJCQlpZiAoIXJldCB8fCByZXQgIT0gLUVJTFNFUSkKKwkJCQlrZnJlZSh0aGlzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHVua25vd24gdHVwbGUgKi8KKwkJCXJldCA9IC1FSUxTRVE7CisJCX0KKworCQlpZiAocmV0ID09IC1FSUxTRVEpIHsKKwkJCS8qIHRoaXMgdHVwbGUgaXMgdW5rbm93biB0byB0aGUgY29yZSBvciB3aGl0ZWxpc3RlZCAqLwogCQkJdGhpcy0+bmV4dCA9IE5VTEw7CiAJCQl0aGlzLT5jb2RlID0gdHBsX2NvZGU7CiAJCQl0aGlzLT5zaXplID0gdHBsX2xpbms7CkBAIC0yNjMsMTkgKzMwNiw4IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICAgICAgICIlczogcXVldWluZyBDSVMgdHVwbGUgMHglMDJ4IGxlbmd0aCAldVxuIiwKIAkJCSAgICAgICBtbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCksIHRwbF9jb2RlLCB0cGxfbGluayk7Ci0JCX0gZWxzZSB7Ci0JCQljb25zdCBzdHJ1Y3QgY2lzX3RwbCAqdHBsID0gY2lzX3RwbF9saXN0ICsgaTsKLQkJCWlmICh0cGxfbGluayA8IHRwbC0+bWluX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIiVzOiBiYWQgQ0lTIHR1cGxlIDB4JTAyeCAobGVuZ3RoID0gJXUsIGV4cGVjdGVkID49ICV1KVxuIiwKLQkJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpLAotCQkJCSAgICAgICB0cGxfY29kZSwgdHBsX2xpbmssIHRwbC0+bWluX3NpemUpOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQl9IGVsc2UgaWYgKHRwbC0+cGFyc2UpIHsKLQkJCQlyZXQgPSB0cGwtPnBhcnNlKGNhcmQsIGZ1bmMsCi0JCQkJCQkgdGhpcy0+ZGF0YSwgdHBsX2xpbmspOwotCQkJfQotCQkJa2ZyZWUodGhpcyk7CisJCQkvKiBrZWVwIG9uIGFuYWx5emluZyB0dXBsZXMgKi8KKwkJCXJldCA9IDA7CiAJCX0KIAogCQlwdHIgKz0gdHBsX2xpbms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggN2NiMDU3Zi4uNDMyYWU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwpAQCAtMjc2LDYgKzI3Niw0NyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU1DX1MzQ19IV19TRElPX0lSUQorICAgICAgIGJvb2wgIkhhcmR3YXJlIHN1cHBvcnQgZm9yIFNESU8gSVJRIgorICAgICAgIGRlcGVuZHMgb24gTU1DX1MzQworICAgICAgIGhlbHAKKyAgICAgICAgIEVuYWJsZSB0aGUgaGFyZHdhcmUgc3VwcG9ydCBmb3IgU0RJTyBpbnRlcnJ1cHRzIGluc3RlYWQgb2YgdXNpbmcKKwkgdGhlIGdlbmVyaWMgcG9sbGluZyBjb2RlLgorCitjaG9pY2UKKwlwcm9tcHQgIlNhbXN1bmcgUzNDIFNEL01NQyB0cmFuc2ZlciBjb2RlIgorCWRlcGVuZHMgb24gTU1DX1MzQworCitjb25maWcgTU1DX1MzQ19QSU8KKwlib29sICJVc2UgUElPIHRyYW5zZmVycyBvbmx5IgorCWhlbHAKKwkgIFVzZSBQSU8gdG8gdHJhbnNmZXIgZGF0YSBiZXR3ZWVuIG1lbW9yeSBhbmQgdGhlIGhhcmR3YXJlLgorCisJICBQSU8gaXMgc2xvd2VyIHRoYW4gRE1BIGFzIGl0IHJlcXVpcmVzIENQVSBpbnN0cnVjdGlvbnMgdG8KKwkgIG1vdmUgdGhlIGRhdGEuIFRoaXMgaGFzIGJlZW4gdGhlIHRyYWRpdGlvbmFsIGRlZmF1bHQgZm9yCisJICB0aGUgUzNDIE1DSSBkcml2ZXIuCisKK2NvbmZpZyBNTUNfUzNDX0RNQQorCWJvb2wgIlVzZSBETUEgdHJhbnNmZXJzIG9ubHkgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBVc2UgRE1BIHRvIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBtZW1vcnkgYW5kIHRoZSBoYXJkYXJlLgorCisJICBDdXJyZW50bHksIHRoZSBETUEgc3VwcG9ydCBpbiB0aGlzIGRyaXZlciBzZWVtcyB0byBub3QgYmUKKwkgIHdvcmtpbmcgcHJvcGVybHkgYW5kIG5lZWRzIHRvIGJlIGRlYnVnZ2VkIGJlZm9yZSB0aGlzCisJICBvcHRpb24gaXMgdXNlZnVsLgorCitjb25maWcgTU1DX1MzQ19QSU9ETUEKKwlib29sICJTdXBwb3J0IGZvciBib3RoIFBJTyBhbmQgRE1BIChFWFBFUklNRU5UQUwpIgorCWhlbHAKKwkgIENvbXBpbGUgYm90aCB0aGUgUElPIGFuZCBETUEgdHJhbnNmZXIgcm91dGluZXMgaW50byB0aGUKKwkgIGRyaXZlciBhbmQgbGV0IHRoZSBwbGF0Zm9ybSBzZWxlY3QgYXQgcnVuLXRpbWUgd2hpY2ggb25lCisJICBpcyBiZXN0LgorCisJICBTZWUgbm90ZXMgZm9yIHRoZSBETUEgb3B0aW9uLgorCitlbmRjaG9pY2UKKwogY29uZmlnIE1NQ19TRFJJQ09IX0NTCiAJdHJpc3RhdGUgIk1NQy9TRCBkcml2ZXIgZm9yIFJpY29oIEJheTFDb250cm9sbGVycyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBQQ0kgJiYgUENNQ0lBCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKaW5kZXggZTU1NmQ0Mi4uNjM5MjRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwpAQCAtNzIsNyArNzIsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdDkxX21jaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA4NzQxZDBmLi43MDVhNTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtMjIsMTIgKzIyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9tbWNpLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21tYy5oPgogCiAjaW5jbHVkZSAibW1jaS5oIgogCkBAIC0zOCw2ICszOSwzNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGZtYXggPSA1MTU2MzM7CiAKKy8qCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaG9zdC0+bG9jayBoZWxkCisgKi8KK3N0YXRpYyB2b2lkIG1tY2lfc2V0X2Nsa3JlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZGVzaXJlZCkKK3sKKwl1MzIgY2xrID0gMDsKKworCWlmIChkZXNpcmVkKSB7CisJCWlmIChkZXNpcmVkID49IGhvc3QtPm1jbGspIHsKKwkJCWNsayA9IE1DSV9DTEtfQllQQVNTOworCQkJaG9zdC0+Y2NsayA9IGhvc3QtPm1jbGs7CisJCX0gZWxzZSB7CisJCQljbGsgPSBob3N0LT5tY2xrIC8gKDIgKiBkZXNpcmVkKSAtIDE7CisJCQlpZiAoY2xrID49IDI1NikKKwkJCQljbGsgPSAyNTU7CisJCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsayAvICgyICogKGNsayArIDEpKTsKKwkJfQorCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgPT0gMHg4MCkKKwkJCWNsayB8PSBNQ0lfRkNFTjsgLyogQnVnIGZpeCBpbiBTVCBJUCBibG9jayAqLworCQljbGsgfD0gTUNJX0NMS19FTkFCTEU7CisJCS8qIFRoaXMgaGFzbid0IHByb3ZlbiB0byBiZSB3b3J0aHdoaWxlICovCisJCS8qIGNsayB8PSBNQ0lfQ0xLX1BXUlNBVkU7ICovCisJfQorCisJaWYgKGhvc3QtPm1tYy0+aW9zLmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCisJCWNsayB8PSBNQ0lfV0lERV9CVVM7CisKKwl3cml0ZWwoY2xrLCBob3N0LT5iYXNlICsgTU1DSUNMT0NLKTsKK30KKwogc3RhdGljIHZvaWQKIG1tY2lfcmVxdWVzdF9lbmQoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCiB7CkBAIC00MTksMzAgKzQ1MCwzMSBAQAogc3RhdGljIHZvaWQgbW1jaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewogCXN0cnVjdCBtbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwotCXUzMiBjbGsgPSAwLCBwd3IgPSAwOwotCi0JaWYgKGlvcy0+Y2xvY2spIHsKLQkJaWYgKGlvcy0+Y2xvY2sgPj0gaG9zdC0+bWNsaykgewotCQkJY2xrID0gTUNJX0NMS19CWVBBU1M7Ci0JCQlob3N0LT5jY2xrID0gaG9zdC0+bWNsazsKLQkJfSBlbHNlIHsKLQkJCWNsayA9IGhvc3QtPm1jbGsgLyAoMiAqIGlvcy0+Y2xvY2spIC0gMTsKLQkJCWlmIChjbGsgPj0gMjU2KQotCQkJCWNsayA9IDI1NTsKLQkJCWhvc3QtPmNjbGsgPSBob3N0LT5tY2xrIC8gKDIgKiAoY2xrICsgMSkpOwotCQl9Ci0JCWlmIChob3N0LT5od19kZXNpZ25lciA9PSBBTUJBX1ZFTkRPUl9TVCkKLQkJCWNsayB8PSBNQ0lfRkNFTjsgLyogQnVnIGZpeCBpbiBTVCBJUCBibG9jayAqLwotCQljbGsgfD0gTUNJX0NMS19FTkFCTEU7Ci0JfQotCi0JaWYgKGhvc3QtPnBsYXQtPnRyYW5zbGF0ZV92ZGQpCi0JCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOworCXUzMiBwd3IgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzd2l0Y2ggKGlvcy0+cG93ZXJfbW9kZSkgewogCWNhc2UgTU1DX1BPV0VSX09GRjoKKwkJaWYoaG9zdC0+dmNjICYmCisJCSAgIHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykpCisJCQlyZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2MpOwogCQlicmVhazsKIAljYXNlIE1NQ19QT1dFUl9VUDoKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisJCWlmIChob3N0LT52Y2MpCisJCQkvKiBUaGlzIGltcGxpY2l0bHkgZW5hYmxlcyB0aGUgcmVndWxhdG9yICovCisJCQltbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCBpb3MtPnZkZCk7CisjZW5kaWYKKwkJLyoKKwkJICogVGhlIHRyYW5zbGF0ZV92ZGQgZnVuY3Rpb24gaXMgbm90IHVzZWQgaWYgeW91IGhhdmUKKwkJICogYW4gZXh0ZXJuYWwgcmVndWxhdG9yLCBvciB5b3VyIGRlc2lnbiBpcyByZWFsbHkgd2VpcmQuCisJCSAqIFVzaW5nIGl0IHdvdWxkIG1lYW4gc2VuZGluZyBpbiBwb3dlciBjb250cm9sIEJPVEggdXNpbmcKKwkJICogYSByZWd1bGF0b3IgQU5EIHRoZSA0IE1NQ0lQV1IgYml0cy4gSWYgd2UgZG9uJ3QgaGF2ZQorCQkgKiBhIHJlZ3VsYXRvciwgd2UgbWlnaHQgaGF2ZSBzb21lIG90aGVyIHBsYXRmb3JtIHNwZWNpZmljCisJCSAqIHBvd2VyIGNvbnRyb2wgYmVoaW5kIHRoaXMgdHJhbnNsYXRlIGZ1bmN0aW9uLgorCQkgKi8KKwkJaWYgKCFob3N0LT52Y2MgJiYgaG9zdC0+cGxhdC0+dHJhbnNsYXRlX3ZkZCkKKwkJCXB3ciB8PSBob3N0LT5wbGF0LT50cmFuc2xhdGVfdmRkKG1tY19kZXYobW1jKSwgaW9zLT52ZGQpOwogCQkvKiBUaGUgU1QgdmVyc2lvbiBkb2VzIG5vdCBoYXZlIHRoaXMsIGZhbGwgdGhyb3VnaCB0byBQT1dFUl9PTiAqLwogCQlpZiAoaG9zdC0+aHdfZGVzaWduZXIgIT0gQU1CQV9WRU5ET1JfU1QpIHsKIAkJCXB3ciB8PSBNQ0lfUFdSX1VQOwpAQCAtNDY1LDEyICs0OTcsMTYgQEAKIAkJfQogCX0KIAotCXdyaXRlbChjbGssIGhvc3QtPmJhc2UgKyBNTUNJQ0xPQ0spOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CisKKwltbWNpX3NldF9jbGtyZWcoaG9zdCwgaW9zLT5jbG9jayk7CiAKIAlpZiAoaG9zdC0+cHdyICE9IHB3cikgewogCQlob3N0LT5wd3IgPSBwd3I7CiAJCXdyaXRlbChwd3IsIGhvc3QtPmJhc2UgKyBNTUNJUE9XRVIpOwogCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBtbWNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKQEAgLTUxNyw3ICs1NTMsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtbWNpX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCBzdHJ1Y3QgYW1iYV9pZCAqaWQpCiB7Ci0Jc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0OwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCWludCByZXQ7CkBAIC01ODMsNyArNjE5LDMwIEBACiAJbW1jLT5vcHMgPSAmbW1jaV9vcHM7CiAJbW1jLT5mX21pbiA9IChob3N0LT5tY2xrICsgNTExKSAvIDUxMjsKIAltbWMtPmZfbWF4ID0gbWluKGhvc3QtPm1jbGssIGZtYXgpOwotCW1tYy0+b2NyX2F2YWlsID0gcGxhdC0+b2NyX21hc2s7CisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCS8qIElmIHdlJ3JlIHVzaW5nIHRoZSByZWd1bGF0b3IgZnJhbWV3b3JrLCB0cnkgdG8gZmV0Y2ggYSByZWd1bGF0b3IgKi8KKwlob3N0LT52Y2MgPSByZWd1bGF0b3JfZ2V0KCZkZXYtPmRldiwgInZtbWMiKTsKKwlpZiAoSVNfRVJSKGhvc3QtPnZjYykpCisJCWhvc3QtPnZjYyA9IE5VTEw7CisJZWxzZSB7CisJCWludCBtYXNrID0gbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhob3N0LT52Y2MpOworCisJCWlmIChtYXNrIDwgMCkKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAiZXJyb3IgZ2V0dGluZyBPQ1IgbWFzayAoJWQpXG4iLAorCQkJCW1hc2spOworCQllbHNlIHsKKwkJCWhvc3QtPm1tYy0+b2NyX2F2YWlsID0gKHUzMikgbWFzazsKKwkJCWlmIChwbGF0LT5vY3JfbWFzaykKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJQcm92aWRlZCBvY3JfbWFzay9zZXRwb3dlciB3aWxsIG5vdCBiZSB1c2VkICIKKwkJCQkgIih1c2luZyByZWd1bGF0b3IgaW5zdGVhZClcbiIpOworCQl9CisJfQorI2VuZGlmCisJLyogRmFsbCBiYWNrIHRvIHBsYXRmb3JtIGRhdGEgaWYgbm8gcmVndWxhdG9yIGlzIGZvdW5kICovCisJaWYgKGhvc3QtPnZjYyA9PSBOVUxMKQorCQltbWMtPm9jcl9hdmFpbCA9IHBsYXQtPm9jcl9tYXNrOworCW1tYy0+Y2FwcyA9IHBsYXQtPmNhcGFiaWxpdGllczsKIAogCS8qCiAJICogV2UgY2FuIGRvIFNHSU8KQEAgLTYxOSw3ICs2NzgsNiBAQAogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgTU1DSU1BU0sxKTsKIAl3cml0ZWwoMHhmZmYsIGhvc3QtPmJhc2UgKyBNTUNJQ0xFQVIpOwogCi0jaWZkZWYgQ09ORklHX0dQSU9MSUIKIAlpZiAoZ3Bpb19pc192YWxpZChwbGF0LT5ncGlvX2NkKSkgewogCQlyZXQgPSBncGlvX3JlcXVlc3QocGxhdC0+Z3Bpb19jZCwgRFJJVkVSX05BTUUgIiAoY2QpIik7CiAJCWlmIChyZXQgPT0gMCkKQEAgLTYzOCw3ICs2OTYsNiBAQAogCQllbHNlIGlmIChyZXQgIT0gLUVOT1NZUykKIAkJCWdvdG8gZXJyX2dwaW9fd3A7CiAJfQotI2VuZGlmCiAKIAlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycVswXSwgbW1jaV9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSAiIChjbWQpIiwgaG9zdCk7CiAJaWYgKHJldCkKQEAgLTcyMCw2ICs3NzcsMTAgQEAKIAkJY2xrX2Rpc2FibGUoaG9zdC0+Y2xrKTsKIAkJY2xrX3B1dChob3N0LT5jbGspOwogCisJCWlmIChyZWd1bGF0b3JfaXNfZW5hYmxlZChob3N0LT52Y2MpKQorCQkJcmVndWxhdG9yX2Rpc2FibGUoaG9zdC0+dmNjKTsKKwkJcmVndWxhdG9yX3B1dChob3N0LT52Y2MpOworCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKIAogCQlhbWJhX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAppbmRleCA4MzlmMjY0Li4xY2ViOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuaApAQCAtMTYxLDcgKzE2MSw3IEBACiAJdW5zaWduZWQgaW50CQltY2xrOwogCXVuc2lnbmVkIGludAkJY2NsazsKIAl1MzIJCQlwd3I7Ci0Jc3RydWN0IG1tY19wbGF0Zm9ybV9kYXRhICpwbGF0OworCXN0cnVjdCBtbWNpX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CiAKIAl1OAkJCWh3X2Rlc2lnbmVyOwogCXU4CQkJaHdfcmV2aXNpb246NDsKQEAgLTE3NSw2ICsxNzUsNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdAkqc2dfcHRyOwogCXVuc2lnbmVkIGludAkJc2dfb2ZmOwogCXVuc2lnbmVkIGludAkJc2l6ZTsKKwlzdHJ1Y3QgcmVndWxhdG9yCSp2Y2M7CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1jaV9pbml0X3NnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggZTdhMzMxZC4uYjhmZDdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTE1MjksNiArMTUyOSw3IEBACiAJCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwogCiAJbW1jX29tYXBfZmNsa19lbmFibGUoaG9zdCwgMCk7CisJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKIAljbGtfcHV0KGhvc3QtPmZjbGspOwogCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwogCWNsa19wdXQoaG9zdC0+aWNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDQ0ODdjYzAuLjBhZWNhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC0yMDEzLDcgKzIwMTMsNyBAQAogc3RhdGljIGludCBfX2luaXQgb21hcF9oc21tY19pbml0KHZvaWQpCiB7CiAJLyogUmVnaXN0ZXIgdGhlIE1NQyBkcml2ZXIgKi8KLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX2hzbW1jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmb21hcF9oc21tY19kcml2ZXIsIG9tYXBfaHNtbWNfcHJvYmUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcF9oc21tY19jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYwppbmRleCBlNTVhYzc5Li5iMDBkNjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAKQEAgLTk2LDEwICs5NywxOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHhhbWNpX3NldF9wb3dlcihzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCB2ZGQpCiB7CisJaW50IG9uOworCiAjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgogCWlmIChob3N0LT52Y2MpCiAJCW1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIHZkZCk7CiAjZW5kaWYKKwlpZiAoIWhvc3QtPnZjYyAmJiBob3N0LT5wZGF0YSAmJgorCSAgICBncGlvX2lzX3ZhbGlkKGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyKSkgeworCQlvbiA9ICgoMSA8PCB2ZGQpICYgaG9zdC0+cGRhdGEtPm9jcl9tYXNrKTsKKwkJZ3Bpb19zZXRfdmFsdWUoaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXIsCisJCQkgICAgICAgISFvbiBeIGhvc3QtPnBkYXRhLT5ncGlvX3Bvd2VyX2ludmVydCk7CisJfQogCWlmICghaG9zdC0+dmNjICYmIGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKIAkJaG9zdC0+cGRhdGEtPnNldHBvd2VyKG1tY19kZXYoaG9zdC0+bW1jKSwgdmRkKTsKIH0KQEAgLTQyMSw2ICs0MzAsMTIgQEAKIHsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCisJaWYgKGhvc3QtPnBkYXRhICYmIGdwaW9faXNfdmFsaWQoaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybykpIHsKKwkJaWYgKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm9faW52ZXJ0KQorCQkJcmV0dXJuICFncGlvX2dldF92YWx1ZShob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvKTsKKwkJZWxzZQorCQkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGhvc3QtPnBkYXRhLT5ncGlvX2NhcmRfcm8pOworCX0KIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmdldF9ybykKIAkJcmV0dXJuICEhaG9zdC0+cGRhdGEtPmdldF9ybyhtbWNfZGV2KG1tYykpOwogCS8qCkBAIC01MzQsNyArNTQ5LDcgQEAKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqciwgKmRtYXJ4LCAqZG1hdHg7Ci0JaW50IHJldCwgaXJxOworCWludCByZXQsIGlycSwgZ3Bpb19jZCA9IC0xLCBncGlvX3JvID0gLTEsIGdwaW9fcG93ZXIgPSAtMTsKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC02NjEsMTMgKzY3Niw2MyBAQAogCX0KIAlob3N0LT5kbWFfZHJjbXJ0eCA9IGRtYXR4LT5zdGFydDsKIAorCWlmIChob3N0LT5wZGF0YSkgeworCQlncGlvX2NkID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9kZXRlY3Q7CisJCWdwaW9fcm8gPSBob3N0LT5wZGF0YS0+Z3Bpb19jYXJkX3JvOworCQlncGlvX3Bvd2VyID0gaG9zdC0+cGRhdGEtPmdwaW9fcG93ZXI7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcG93ZXIpKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX3Bvd2VyLCAibW1jIGNhcmQgcG93ZXIiKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHJlcXVlc3RpbmcgZ3Bpb19wb3dlciAlZFxuIiwgZ3Bpb19wb3dlcik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19wb3dlciwKKwkJCQkgICAgICBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcl9pbnZlcnQpOworCX0KKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX3JvKSkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb19ybywgIm1tYyBjYXJkIHJlYWQgb25seSIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgcmVxdWVzdGluZyBncGlvX3JvICVkXG4iLCBncGlvX3JvKTsKKwkJCWdvdG8gZXJyX2dwaW9fcm87CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19ybyk7CisJfQorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fY2QpKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX2NkLCAibW1jIGNhcmQgZGV0ZWN0Iik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCByZXF1ZXN0aW5nIGdwaW9fY2QgJWRcbiIsIGdwaW9fY2QpOworCQkJZ290byBlcnJfZ3Bpb19jZDsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX2NkKTsKKworCQlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShncGlvX2NkKSwgcHhhbWNpX2RldGVjdF9pcnEsCisJCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJICAibW1jIGNhcmQgZGV0ZWN0IiwgbW1jKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgY2FyZCBkZXRlY3QgSVJRXG4iKTsKKwkJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCQl9CisJfQorCiAJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5pbml0KQogCQlob3N0LT5wZGF0YS0+aW5pdCgmcGRldi0+ZGV2LCBweGFtY2lfZGV0ZWN0X2lycSwgbW1jKTsKIAorCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcG93ZXIpICYmIGhvc3QtPnBkYXRhLT5zZXRwb3dlcikKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImdwaW9fcG93ZXIgYW5kIHNldHBvd2VyKCkgYm90aCBkZWZpbmVkXG4iKTsKKwlpZiAoZ3Bpb19pc192YWxpZChncGlvX3JvKSAmJiBob3N0LT5wZGF0YS0+Z2V0X3JvKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZ3Bpb19ybyBhbmQgZ2V0X3JvKCkgYm90aCBkZWZpbmVkXG4iKTsKKwogCW1tY19hZGRfaG9zdChtbWMpOwogCiAJcmV0dXJuIDA7CiAKK2Vycl9yZXF1ZXN0X2lycToKKwlncGlvX2ZyZWUoZ3Bpb19jZCk7CitlcnJfZ3Bpb19jZDoKKwlncGlvX2ZyZWUoZ3Bpb19ybyk7CitlcnJfZ3Bpb19ybzoKKwlncGlvX2ZyZWUoZ3Bpb19wb3dlcik7CiAgb3V0OgogCWlmIChob3N0KSB7CiAJCWlmIChob3N0LT5kbWEgPj0gMCkKQEAgLTY4OCwxMiArNzUzLDI2IEBACiBzdGF0aWMgaW50IHB4YW1jaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBncGlvX2NkID0gLTEsIGdwaW9fcm8gPSAtMSwgZ3Bpb19wb3dlciA9IC0xOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwkJaWYgKGhvc3QtPnBkYXRhKSB7CisJCQlncGlvX2NkID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9kZXRlY3Q7CisJCQlncGlvX3JvID0gaG9zdC0+cGRhdGEtPmdwaW9fY2FyZF9ybzsKKwkJCWdwaW9fcG93ZXIgPSBob3N0LT5wZGF0YS0+Z3Bpb19wb3dlcjsKKwkJfQorCQlpZiAoZ3Bpb19pc192YWxpZChncGlvX2NkKSkgeworCQkJZnJlZV9pcnEoZ3Bpb190b19pcnEoZ3Bpb19jZCksIG1tYyk7CisJCQlncGlvX2ZyZWUoZ3Bpb19jZCk7CisJCX0KKwkJaWYgKGdwaW9faXNfdmFsaWQoZ3Bpb19ybykpCisJCQlncGlvX2ZyZWUoZ3Bpb19ybyk7CisJCWlmIChncGlvX2lzX3ZhbGlkKGdwaW9fcG93ZXIpKQorCQkJZ3Bpb19mcmVlKGdwaW9fcG93ZXIpOwogCQlpZiAoaG9zdC0+dmNjKQogCQkJcmVndWxhdG9yX3B1dChob3N0LT52Y2MpOwogCkBAIC03MjUsMjAgKzgwNCwyMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YW1jaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQotCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYywgc3RhdGUpOworCQlyZXQgPSBtbWNfc3VzcGVuZF9ob3N0KG1tYywgUE1TR19TVVNQRU5EKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YW1jaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKG1tYykKQEAgLTc0NiwxOSArODI1LDIyIEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhbWNpX3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGFtY2lfcmVzdW1lCU5VTEwKKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YW1jaV9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFtY2lfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YW1jaV9yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YW1jaV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YW1jaV9wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YW1jaV9yZW1vdmUsCi0JLnN1c3BlbmQJPSBweGFtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YW1jaV9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmcHhhbWNpX3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwppbmRleCA4YzA4Y2Q3Li45OWI3NGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKQEAgLTE3LDYgKzE3LDggQEAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTU4LDggKzYwLDYgQEAKIAkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCBhcmdzKTsgIFwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIFJFU1NJWkUocmVzc291cmNlKSAoKChyZXNzb3VyY2UpLT5lbmQgLSAocmVzc291cmNlKS0+c3RhcnQpKzEpCi0KIHN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzY21jaV9kbWFfY2xpZW50ID0gewogCS5uYW1lCQk9ICJzM2MtbWNpIiwKIH07CkBAIC0xNjQsNiArMTY0LDQwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfTU1DX0RFQlVHICovCiAKKy8qKgorICogczNjbWNpX2hvc3RfdXNlZG1hIC0gcmV0dXJuIHdoZXRoZXIgdGhlIGhvc3QgaXMgdXNpbmcgZG1hIG9yIHBpbworICogQGhvc3Q6IFRoZSBob3N0IHN0YXRlCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGhvc3QgaXMgdXNpbmcgRE1BIHRvIHRyYW5zZmVyIGRhdGEsIGVsc2UgZmFsc2UKKyAqIHRvIHVzZSBQSU8gbW9kZS4gV2lsbCByZXR1cm4gc3RhdGljIGRhdGEgZGVwZW5kaW5nIG9uIHRoZSBkcml2ZXIKKyAqIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBzM2NtY2lfaG9zdF91c2VkbWEoc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworI2lmZGVmIENPTkZJR19NTUNfUzNDX1BJTworCXJldHVybiBmYWxzZTsKKyNlbGlmIGRlZmluZWQoQ09ORklHX01NQ19TM0NfRE1BKQorCXJldHVybiB0cnVlOworI2Vsc2UKKwlyZXR1cm4gaG9zdC0+ZG9kbWE7CisjZW5kaWYKK30KKworLyoqCisgKiBzM2NtY2lfaG9zdF9jYW5waW8gLSByZXR1cm4gdHJ1ZSBpZiBob3N0IGhhcyBwaW8gY29kZSBhdmFpbGFibGUKKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZHJpdmVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggdGhlIFBJTyBzdXBwb3J0IGNvZGUKKyAqIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHMzY21jaV9ob3N0X2NhbnBpbyh2b2lkKQoreworI2lmZGVmIENPTkZJR19NTUNfUzNDX1BJTworCXJldHVybiB0cnVlOworI2Vsc2UKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogc3RhdGljIGlubGluZSB1MzIgZW5hYmxlX2ltYXNrKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgdTMyIGltYXNrKQogewogCXUzMiBuZXdtYXNrOwpAQCAtMTkwLDcgKzIyNCwzMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW1hc2soc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQogewotCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7CisJdTMyIG1hc2sgPSByZWFkbChob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7CisKKwkvKiBwcmVzZXJ2ZSB0aGUgU0RJTyBJUlEgbWFzayBzdGF0ZSAqLworCW1hc2sgJj0gUzNDMjQxMF9TRElJTVNLX1NESU9JUlE7CisJd3JpdGVsKG1hc2ssIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKK30KKworLyoqCisgKiBzM2NtY2lfY2hlY2tfc2Rpb19pcnEgLSB0ZXN0IHdoZXRoZXIgdGhlIFNESU8gSVJRIGlzIGJlaW5nIHNpZ25hbGxlZAorICogQGhvc3Q6IFRoZSBob3N0IHRvIGNoZWNrLgorICoKKyAqIFRlc3QgdG8gc2VlIGlmIHRoZSBTRElPIGludGVycnVwdCBpcyBiZWluZyBzaWduYWxsZWQgaW4gY2FzZSB0aGUKKyAqIGNvbnRyb2xsZXIgaGFzIGZhaWxlZCB0byByZS1kZXRlY3QgYSBjYXJkIGludGVycnVwdC4gUmVhZCBHUEU4IGFuZAorICogc2VlIGlmIGl0IGlzIGxvdyBhbmQgaWYgc28sIHNpZ25hbCBhIFNESU8gaW50ZXJydXB0LgorICoKKyAqIFRoaXMgaXMgY3VycmVudGx5IGNhbGxlZCBpZiBhIHJlcXVlc3QgaXMgZmluaXNoZWQgKHdlIGFzc3VtZSB0aGF0IHRoZQorICogYnVzIGlzIG5vdyBpZGxlKSBhbmQgd2hlbiB0aGUgU0RJTyBJUlEgaXMgZW5hYmxlZCBpbiBjYXNlIHRoZSBJUlEgaXMKKyAqIGFscmVhZHkgYmVpbmcgaW5kaWNhdGVkLgorKi8KK3N0YXRpYyB2b2lkIHMzY21jaV9jaGVja19zZGlvX2lycShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QpCit7CisJaWYgKGhvc3QtPnNkaW9faXJxZW4pIHsKKwkJaWYgKGdwaW9fZ2V0X3ZhbHVlKFMzQzI0MTBfR1BFKDgpKSA9PSAwKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNpZ25hbGxpbmcgaXJxXG4iLCBfX2Z1bmNfXyk7CisJCQltbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtPm1tYyk7CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9kYXRhX2J1ZmZlcihzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsCkBAIC0yMzgsNiArMjk4LDY0IEBACiAJcmV0dXJuIDYzIC0gZmlmb3N0YXQ7CiB9CiAKKy8qKgorICogczNjbWNpX2VuYWJsZV9pcnEgLSBlbmFibGUgSVJRLCBhZnRlciBoYXZpbmcgZGlzYWJsZWQgaXQuCisgKiBAaG9zdDogVGhlIGRldmljZSBzdGF0ZS4KKyAqIEBtb3JlOiBUcnVlIGlmIG1vcmUgSVJRcyBhcmUgZXhwZWN0ZWQgZnJvbSB0cmFuc2Zlci4KKyAqCisgKiBFbmFibGUgdGhlIG1haW4gSVJRIGlmIG5lZWRlZCBhZnRlciBpdCBoYXMgYmVlbiBkaXNhYmxlZC4KKyAqCisgKiBUaGUgSVJRIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXM6CisgKgktIGRpc2FibGVkIGR1cmluZyBJRExFCisgKgktIGRpc2FibGVkIHdoaWxzdCBwcm9jZXNzaW5nIGRhdGEKKyAqCS0gZW5hYmxlZCBkdXJpbmcgdHJhbnNmZXIKKyAqCS0gZW5hYmxlZCB3aGlsc3QgYXdhaXRpbmcgU0RJTyBpbnRlcnJ1cHQgZGV0ZWN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHMzY21jaV9lbmFibGVfaXJxKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCwgYm9vbCBtb3JlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBlbmFibGUgPSBmYWxzZTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWhvc3QtPmlycV9lbmFibGVkID0gbW9yZTsKKwlob3N0LT5pcnFfZGlzYWJsZWQgPSBmYWxzZTsKKworCWVuYWJsZSA9IG1vcmUgfCBob3N0LT5zZGlvX2lycWVuOworCisJaWYgKGhvc3QtPmlycV9zdGF0ZSAhPSBlbmFibGUpIHsKKwkJaG9zdC0+aXJxX3N0YXRlID0gZW5hYmxlOworCisJCWlmIChlbmFibGUpCisJCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJCWVsc2UKKwkJCWRpc2FibGVfaXJxKGhvc3QtPmlycSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKioKKyAqCisgKi8KK3N0YXRpYyB2b2lkIHMzY21jaV9kaXNhYmxlX2lycShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsIGJvb2wgdHJhbnNmZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCS8vcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cmFuc2ZlciAlZFxuIiwgX19mdW5jX18sIHRyYW5zZmVyKTsKKworCWhvc3QtPmlycV9kaXNhYmxlZCA9IHRyYW5zZmVyOworCisJaWYgKHRyYW5zZmVyICYmIGhvc3QtPmlycV9zdGF0ZSkgeworCQlob3N0LT5pcnFfc3RhdGUgPSBmYWxzZTsKKwkJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIGRvX3Bpb19yZWFkKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKIHsKIAlpbnQgcmVzOwpAQCAtMzc0LDggKzQ5Miw3IEBACiB7CiAJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gKHN0cnVjdCBzM2NtY2lfaG9zdCAqKSBkYXRhOwogCi0KLQlkaXNhYmxlX2lycShob3N0LT5pcnEpOworCXMzY21jaV9kaXNhYmxlX2lycShob3N0LCB0cnVlKTsKIAogCWlmIChob3N0LT5waW9fYWN0aXZlID09IFhGRVJfV1JJVEUpCiAJCWRvX3Bpb193cml0ZShob3N0KTsKQEAgLTM5NSw5ICs1MTIsMTAgQEAKIAkJCQlob3N0LT5tcnEtPmRhdGEtPmVycm9yID0gLUVJTlZBTDsKIAkJfQogCisJCXMzY21jaV9lbmFibGVfaXJxKGhvc3QsIGZhbHNlKTsKIAkJZmluYWxpemVfcmVxdWVzdChob3N0KTsKIAl9IGVsc2UKLQkJZW5hYmxlX2lycShob3N0LT5pcnEpOworCQlzM2NtY2lfZW5hYmxlX2lycShob3N0LCB0cnVlKTsKIH0KIAogLyoKQEAgLTQzMiwxNyArNTUwLDI3IEBACiAJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0ID0gZGV2X2lkOwogCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOwogCXUzMiBtY2lfY3N0YSwgbWNpX2RzdGEsIG1jaV9mc3RhLCBtY2lfZGNudCwgbWNpX2ltc2s7Ci0JdTMyIG1jaV9jY2xlYXIsIG1jaV9kY2xlYXI7CisJdTMyIG1jaV9jY2xlYXIgPSAwLCBtY2lfZGNsZWFyOwogCXVuc2lnbmVkIGxvbmcgaWZsYWdzOwogCisJbWNpX2RzdGEgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElEU1RBKTsKKwltY2lfaW1zayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKKworCWlmIChtY2lfZHN0YSAmIFMzQzI0MTBfU0RJRFNUQV9TRElPSVJRREVURUNUKSB7CisJCWlmIChtY2lfaW1zayAmIFMzQzI0MTBfU0RJSU1TS19TRElPSVJRKSB7CisJCQltY2lfZGNsZWFyID0gUzNDMjQxMF9TRElEU1RBX1NESU9JUlFERVRFQ1Q7CisJCQl3cml0ZWwobWNpX2RjbGVhciwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRFNUQSk7CisKKwkJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCX0KKwogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5jb21wbGV0ZV9sb2NrLCBpZmxhZ3MpOwogCiAJbWNpX2NzdGEgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDTURTVEFUKTsKLQltY2lfZHN0YSA9IHJlYWRsKGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURTVEEpOwogCW1jaV9kY250ID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJRENOVCk7CiAJbWNpX2ZzdGEgPSByZWFkbChob3N0LT5iYXNlICsgUzNDMjQxMF9TRElGU1RBKTsKLQltY2lfaW1zayA9IHJlYWRsKGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKLQltY2lfY2NsZWFyID0gMDsKIAltY2lfZGNsZWFyID0gMDsKIAogCWlmICgoaG9zdC0+Y29tcGxldGVfd2hhdCA9PSBDT01QTEVUSU9OX05PTkUpIHx8CkBAIC00NjYsNyArNTk0LDcgQEAKIAkJZ290byBpcnFfb3V0OwogCX0KIAotCWlmICghaG9zdC0+ZG9kbWEpIHsKKwlpZiAoIXMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkgewogCQlpZiAoKGhvc3QtPnBpb19hY3RpdmUgPT0gWEZFUl9XUklURSkgJiYKIAkJICAgIChtY2lfZnN0YSAmIFMzQzI0MTBfU0RJRlNUQV9URkRFVCkpIHsKIApAQCAtNjczLDYgKzgwMSw3IEBACiAJZGJnKGhvc3QsIGRiZ19kbWEsICJETUEgRklOSVNIRUQgU2l6ZTolaSBEU1RBOiUwOHggRENOVDolMDh4XG4iLAogCQlzaXplLCBtY2lfZHN0YSwgbWNpX2RjbnQpOwogCisJaG9zdC0+ZG1hX2NvbXBsZXRlID0gMTsKIAlob3N0LT5jb21wbGV0ZV93aGF0ID0gQ09NUExFVElPTl9GSU5BTElaRTsKIAogb3V0OgpAQCAtNjgzLDkgKzgxMiw5IEBACiBmYWlsX3JlcXVlc3Q6CiAJaG9zdC0+bXJxLT5kYXRhLT5lcnJvciA9IC1FSU5WQUw7CiAJaG9zdC0+Y29tcGxldGVfd2hhdCA9IENPTVBMRVRJT05fRklOQUxJWkU7Ci0Jd3JpdGVsKDAsIGhvc3QtPmJhc2UgKyBob3N0LT5zZGlpbXNrKTsKLQlnb3RvIG91dDsKKwljbGVhcl9pbWFzayhob3N0KTsKIAorCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgdm9pZCBmaW5hbGl6ZV9yZXF1ZXN0KHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKQEAgLTcwMiw4ICs4MzEsOSBAQAogCiAJaWYgKGNtZC0+ZGF0YSAmJiAoY21kLT5lcnJvciA9PSAwKSAmJgogCSAgICAoY21kLT5kYXRhLT5lcnJvciA9PSAwKSkgewotCQlpZiAoaG9zdC0+ZG9kbWEgJiYgKCFob3N0LT5kbWFfY29tcGxldGUpKSB7Ci0JCQlkYmcoaG9zdCwgZGJnX2RtYSwgIkRNQSBNaXNzaW5nIVxuIik7CisJCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkgJiYgKCFob3N0LT5kbWFfY29tcGxldGUpKSB7CisJCQlkYmcoaG9zdCwgZGJnX2RtYSwgIkRNQSBNaXNzaW5nICglZCkhXG4iLAorCQkJICAgIGhvc3QtPmRtYV9jb21wbGV0ZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CkBAIC03MjgsNyArODU4LDcgQEAKIAl3cml0ZWwoMCwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJQ01EQVJHKTsKIAl3cml0ZWwoUzNDMjQxMF9TRElEQ09OX1NUT1AsIGhvc3QtPmJhc2UgKyBTM0MyNDEwX1NESURDT04pOwogCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgUzNDMjQxMF9TRElDTURDT04pOwotCXdyaXRlbCgwLCBob3N0LT5iYXNlICsgaG9zdC0+c2RpaW1zayk7CisJY2xlYXJfaW1hc2soaG9zdCk7CiAKIAlpZiAoY21kLT5kYXRhICYmIGNtZC0+ZXJyb3IpCiAJCWNtZC0+ZGF0YS0+ZXJyb3IgPSBjbWQtPmVycm9yOwpAQCAtNzU0LDcgKzg4NCw3IEBACiAJLyogSWYgd2UgaGFkIGFuIGVycm9yIHdoaWxlIHRyYW5zZmVyaW5nIGRhdGEgd2UgZmx1c2ggdGhlCiAJICogRE1BIGNoYW5uZWwgYW5kIHRoZSBmaWZvIHRvIGNsZWFyIG91dCBhbnkgZ2FyYmFnZS4gKi8KIAlpZiAobXJxLT5kYXRhLT5lcnJvciAhPSAwKSB7Ci0JCWlmIChob3N0LT5kb2RtYSkKKwkJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKIAkJCXMzYzI0MTBfZG1hX2N0cmwoaG9zdC0+ZG1hLCBTM0MyNDEwX0RNQU9QX0ZMVVNIKTsKIAogCQlpZiAoaG9zdC0+aXMyNDQwKSB7CkBAIC03NzYsNiArOTA2LDggQEAKIHJlcXVlc3RfZG9uZToKIAlob3N0LT5jb21wbGV0ZV93aGF0ID0gQ09NUExFVElPTl9OT05FOwogCWhvc3QtPm1ycSA9IE5VTEw7CisKKwlzM2NtY2lfY2hlY2tfc2Rpb19pcnEoaG9zdCk7CiAJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIG1ycSk7CiB9CiAKQEAgLTg3Miw3ICsxMDA0LDcgQEAKIAogCWRjb24gID0gZGF0YS0+YmxvY2tzICYgUzNDMjQxMF9TRElEQ09OX0JMS05VTV9NQVNLOwogCi0JaWYgKGhvc3QtPmRvZG1hKQorCWlmIChzM2NtY2lfaG9zdF91c2VkbWEoaG9zdCkpCiAJCWRjb24gfD0gUzNDMjQxMF9TRElEQ09OX0RNQUVOOwogCiAJaWYgKGhvc3QtPmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpCkBAIC05NTAsNyArMTA4Miw3IEBACiBzdGF0aWMgaW50IHMzY21jaV9wcmVwYXJlX2RtYShzdHJ1Y3QgczNjbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAlpbnQgZG1hX2xlbiwgaTsKLQlpbnQgcncgPSAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgPyAxIDogMDsKKwlpbnQgcncgPSBkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFOwogCiAJQlVHX09OKChkYXRhLT5mbGFncyAmIEJPVEhfRElSKSA9PSBCT1RIX0RJUik7CiAKQEAgLTk1OCw3ICsxMDkwLDcgQEAKIAlzM2MyNDEwX2RtYV9jdHJsKGhvc3QtPmRtYSwgUzNDMjQxMF9ETUFPUF9GTFVTSCk7CiAKIAlkbWFfbGVuID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCi0JCQkgICAgIChydykgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJCSAgICAgcncgPyBETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKIAogCWlmIChkbWFfbGVuID09IDApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtOTY5LDExICsxMTAxLDExIEBACiAJZm9yIChpID0gMDsgaSA8IGRtYV9sZW47IGkrKykgewogCQlpbnQgcmVzOwogCi0JCWRiZyhob3N0LCBkYmdfZG1hLCAiZW5xdWV1ZSAlaToldUAldVxuIiwgaSwKLQkJCXNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1tpXSksCi0JCQlzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSkpOworCQlkYmcoaG9zdCwgZGJnX2RtYSwgImVucXVldWUgJWk6ICUwOHhAJXVcbiIsIGksCisJCSAgICBzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbaV0pLAorCQkgICAgc2dfZG1hX2xlbigmZGF0YS0+c2dbaV0pKTsKIAotCQlyZXMgPSBzM2MyNDEwX2RtYV9lbnF1ZXVlKGhvc3QtPmRtYSwgKHZvaWQgKikgaG9zdCwKKwkJcmVzID0gczNjMjQxMF9kbWFfZW5xdWV1ZShob3N0LT5kbWEsIGhvc3QsCiAJCQkJCSAgc2dfZG1hX2FkZHJlc3MoJmRhdGEtPnNnW2ldKSwKIAkJCQkJICBzZ19kbWFfbGVuKCZkYXRhLT5zZ1tpXSkpOwogCkBAIC0xMDE4LDcgKzExNTAsNyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKGhvc3QtPmRvZG1hKQorCQlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQogCQkJcmVzID0gczNjbWNpX3ByZXBhcmVfZG1hKGhvc3QsIGNtZC0+ZGF0YSk7CiAJCWVsc2UKIAkJCXJlcyA9IHMzY21jaV9wcmVwYXJlX3Bpbyhob3N0LCBjbWQtPmRhdGEpOwpAQCAtMTAzNyw3ICsxMTY5LDcgQEAKIAlzM2NtY2lfc2VuZF9jb21tYW5kKGhvc3QsIGNtZCk7CiAKIAkvKiBFbmFibGUgSW50ZXJydXB0ICovCi0JZW5hYmxlX2lycShob3N0LT5pcnEpOworCXMzY21jaV9lbmFibGVfaXJxKGhvc3QsIHRydWUpOwogfQogCiBzdGF0aWMgaW50IHMzY21jaV9jYXJkX3ByZXNlbnQoc3RydWN0IG1tY19ob3N0ICptbWMpCkBAIC0xMDQ5LDcgKzExODEsNyBAQAogCWlmIChwZGF0YS0+Z3Bpb19kZXRlY3QgPT0gMCkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlyZXQgPSBzM2MyNDEwX2dwaW9fZ2V0cGluKHBkYXRhLT5ncGlvX2RldGVjdCkgPyAwIDogMTsKKwlyZXQgPSBncGlvX2dldF92YWx1ZShwZGF0YS0+Z3Bpb19kZXRlY3QpID8gMCA6IDE7CiAJcmV0dXJuIHJldCBeIHBkYXRhLT5kZXRlY3RfaW52ZXJ0OwogfQogCkBAIC0xMTA0LDEyICsxMjM2LDEyIEBACiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PTjoKIAljYXNlIE1NQ19QT1dFUl9VUDoKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTUsIFMzQzI0MTBfR1BFNV9TRENMSyk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU2LCBTM0MyNDEwX0dQRTZfU0RDTUQpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFNywgUzNDMjQxMF9HUEU3X1NEREFUMCk7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEU4LCBTM0MyNDEwX0dQRThfU0REQVQxKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTksIFMzQzI0MTBfR1BFOV9TRERBVDIpOwotCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFMTAsIFMzQzI0MTBfR1BFMTBfU0REQVQzKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg1KSwgUzNDMjQxMF9HUEU1X1NEQ0xLKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg2KSwgUzNDMjQxMF9HUEU2X1NEQ01EKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSg3KSwgUzNDMjQxMF9HUEU3X1NEREFUMCk7CisJCXMzYzI0MTBfZ3Bpb19jZmdwaW4oUzNDMjQxMF9HUEUoOCksIFMzQzI0MTBfR1BFOF9TRERBVDEpOworCQlzM2MyNDEwX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BFKDkpLCBTM0MyNDEwX0dQRTlfU0REQVQyKTsKKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRSgxMCksIFMzQzI0MTBfR1BFMTBfU0REQVQzKTsKIAogCQlpZiAoaG9zdC0+cGRhdGEtPnNldF9wb3dlcikKIAkJCWhvc3QtPnBkYXRhLT5zZXRfcG93ZXIoaW9zLT5wb3dlcl9tb2RlLCBpb3MtPnZkZCk7CkBAIC0xMTIxLDggKzEyNTMsNyBAQAogCiAJY2FzZSBNTUNfUE9XRVJfT0ZGOgogCWRlZmF1bHQ6Ci0JCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEU1LCAwKTsKLQkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRTUsIFMzQzI0MTBfR1BJT19PVVRQVVQpOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDMjQxMF9HUEUoNSksIDApOwogCiAJCWlmIChob3N0LT5pczI0NDApCiAJCQltY2lfY29uIHw9IFMzQzI0NDBfU0RJQ09OX1NEUkVTRVQ7CkBAIC0xMTY4LDcgKzEyOTksNyBAQAogCXN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKHBkYXRhLT5ncGlvX3dwcm90ZWN0ID09IDApCisJaWYgKHBkYXRhLT5ub193cHJvdGVjdCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBzM2MyNDEwX2dwaW9fZ2V0cGluKHBkYXRhLT5ncGlvX3dwcm90ZWN0KTsKQEAgLTExNzksMTEgKzEzMTAsNTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBzM2NtY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY29uOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY29uID0gcmVhZGwoaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJQ09OKTsKKwlob3N0LT5zZGlvX2lycWVuID0gZW5hYmxlOworCisJaWYgKGVuYWJsZSA9PSBob3N0LT5zZGlvX2lycWVuKQorCQlnb3RvIHNhbWVfc3RhdGU7CisKKwlpZiAoZW5hYmxlKSB7CisJCWNvbiB8PSBTM0MyNDEwX1NESUNPTl9TRElPSVJROworCQllbmFibGVfaW1hc2soaG9zdCwgUzNDMjQxMF9TRElJTVNLX1NESU9JUlEpOworCisJCWlmICghaG9zdC0+aXJxX3N0YXRlICYmICFob3N0LT5pcnFfZGlzYWJsZWQpIHsKKwkJCWhvc3QtPmlycV9zdGF0ZSA9IHRydWU7CisJCQllbmFibGVfaXJxKGhvc3QtPmlycSk7CisJCX0KKwl9IGVsc2UgeworCQlkaXNhYmxlX2ltYXNrKGhvc3QsIFMzQzI0MTBfU0RJSU1TS19TRElPSVJRKTsKKwkJY29uICY9IH5TM0MyNDEwX1NESUNPTl9TRElPSVJROworCisJCWlmICghaG9zdC0+aXJxX2VuYWJsZWQgJiYgaG9zdC0+aXJxX3N0YXRlKSB7CisJCQlkaXNhYmxlX2lycV9ub3N5bmMoaG9zdC0+aXJxKTsKKwkJCWhvc3QtPmlycV9zdGF0ZSA9IGZhbHNlOworCQl9CisJfQorCisJd3JpdGVsKGNvbiwgaG9zdC0+YmFzZSArIFMzQzI0MTBfU0RJQ09OKTsKKworIHNhbWVfc3RhdGU6CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJczNjbWNpX2NoZWNrX3NkaW9faXJxKGhvc3QpOworfQorCiBzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBzM2NtY2lfb3BzID0gewogCS5yZXF1ZXN0CT0gczNjbWNpX3JlcXVlc3QsCiAJLnNldF9pb3MJPSBzM2NtY2lfc2V0X2lvcywKIAkuZ2V0X3JvCQk9IHMzY21jaV9nZXRfcm8sCiAJLmdldF9jZAkJPSBzM2NtY2lfY2FyZF9wcmVzZW50LAorCS5lbmFibGVfc2Rpb19pcnEgPSBzM2NtY2lfZW5hYmxlX3NkaW9faXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSBzM2NtY2lfZGVmX3BkYXRhID0gewpAQCAtMTI0NiwxMSArMTQxOCwxNDAgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlzMjQ0MCkKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMgaW50IHMzY21jaV9zdGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCA9IHNlcS0+cHJpdmF0ZTsKKworCXNlcV9wcmludGYoc2VxLCAiUmVnaXN0ZXIgYmFzZSA9IDB4JTA4eFxuIiwgKHUzMilob3N0LT5iYXNlKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkNsb2NrIHJhdGUgPSAlbGRcbiIsIGhvc3QtPmNsa19yYXRlKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlByZXNjYWxlID0gJWRcbiIsIGhvc3QtPnByZXNjYWxlcik7CisJc2VxX3ByaW50ZihzZXEsICJpczI0NDAgPSAlZFxuIiwgaG9zdC0+aXMyNDQwKTsKKwlzZXFfcHJpbnRmKHNlcSwgIklSUSA9ICVkXG4iLCBob3N0LT5pcnEpOworCXNlcV9wcmludGYoc2VxLCAiSVJRIGVuYWJsZWQgPSAlZFxuIiwgaG9zdC0+aXJxX2VuYWJsZWQpOworCXNlcV9wcmludGYoc2VxLCAiSVJRIGRpc2FibGVkID0gJWRcbiIsIGhvc3QtPmlycV9kaXNhYmxlZCk7CisJc2VxX3ByaW50ZihzZXEsICJJUlEgc3RhdGUgPSAlZFxuIiwgaG9zdC0+aXJxX3N0YXRlKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkNEIElSUSA9ICVkXG4iLCBob3N0LT5pcnFfY2QpOworCXNlcV9wcmludGYoc2VxLCAiRG8gRE1BID0gJWRcbiIsIHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSk7CisJc2VxX3ByaW50ZihzZXEsICJTRElJTVNLIGF0ICVkXG4iLCBob3N0LT5zZGlpbXNrKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlNESURBVEEgYXQgJWRcbiIsIGhvc3QtPnNkaWRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjbWNpX3N0YXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHMzY21jaV9zdGF0ZV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgczNjbWNpX2ZvcHNfc3RhdGUgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHMzY21jaV9zdGF0ZV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCisjZGVmaW5lIERCR19SRUcoX3IpIHsgLmFkZHIgPSBTM0MyNDEwX1NESSMjX3IsIC5uYW1lID0gI19yIH0KKworc3RydWN0IHMzY21jaV9yZWcgeworCXVuc2lnbmVkIHNob3J0CWFkZHI7CisJdW5zaWduZWQgY2hhcgkqbmFtZTsKK30gZGVidWdfcmVnc1tdID0geworCURCR19SRUcoQ09OKSwKKwlEQkdfUkVHKFBSRSksCisJREJHX1JFRyhDTURBUkcpLAorCURCR19SRUcoQ01EQ09OKSwKKwlEQkdfUkVHKENNRFNUQVQpLAorCURCR19SRUcoUlNQMCksCisJREJHX1JFRyhSU1AxKSwKKwlEQkdfUkVHKFJTUDIpLAorCURCR19SRUcoUlNQMyksCisJREJHX1JFRyhUSU1FUiksCisJREJHX1JFRyhCU0laRSksCisJREJHX1JFRyhEQ09OKSwKKwlEQkdfUkVHKERDTlQpLAorCURCR19SRUcoRFNUQSksCisJREJHX1JFRyhGU1RBKSwKKwl7fQorfTsKKworc3RhdGljIGludCBzM2NtY2lfcmVnc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgczNjbWNpX3JlZyAqcnB0ciA9IGRlYnVnX3JlZ3M7CisKKwlmb3IgKDsgcnB0ci0+bmFtZTsgcnB0cisrKQorCQlzZXFfcHJpbnRmKHNlcSwgIlNESSVzXHQ9MHglMDh4XG4iLCBycHRyLT5uYW1lLAorCQkJICAgcmVhZGwoaG9zdC0+YmFzZSArIHJwdHItPmFkZHIpKTsKKworCXNlcV9wcmludGYoc2VxLCAiU0RJSU1TS1x0PTB4JTA4eFxuIiwgcmVhZGwoaG9zdC0+YmFzZSArIGhvc3QtPnNkaWltc2spKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY21jaV9yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHMzY21jaV9yZWdzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzM2NtY2lfZm9wc19yZWdzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzM2NtY2lfcmVnc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBzM2NtY2lfZGVidWdmc19hdHRhY2goc3RydWN0IHMzY21jaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZob3N0LT5wZGV2LT5kZXY7CisKKwlob3N0LT5kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKGRldiksIE5VTEwpOworCWlmIChJU19FUlIoaG9zdC0+ZGVidWdfcm9vdCkpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlob3N0LT5kZWJ1Z19zdGF0ZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRlIiwgMDQ0NCwKKwkJCQkJCWhvc3QtPmRlYnVnX3Jvb3QsIGhvc3QsCisJCQkJCQkmczNjbWNpX2ZvcHNfc3RhdGUpOworCisJaWYgKElTX0VSUihob3N0LT5kZWJ1Z19zdGF0ZSkpCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBkZWJ1ZyBzdGF0ZSBmaWxlXG4iKTsKKworCWhvc3QtPmRlYnVnX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdzIiwgMDQ0NCwKKwkJCQkJICAgICAgIGhvc3QtPmRlYnVnX3Jvb3QsIGhvc3QsCisJCQkJCSAgICAgICAmczNjbWNpX2ZvcHNfcmVncyk7CisKKwlpZiAoSVNfRVJSKGhvc3QtPmRlYnVnX3JlZ3MpKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWcgcmVncyBmaWxlXG4iKTsKK30KKworc3RhdGljIHZvaWQgczNjbWNpX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShob3N0LT5kZWJ1Z19yZWdzKTsKKwlkZWJ1Z2ZzX3JlbW92ZShob3N0LT5kZWJ1Z19zdGF0ZSk7CisJZGVidWdmc19yZW1vdmUoaG9zdC0+ZGVidWdfcm9vdCk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2RlYnVnZnNfYXR0YWNoKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgczNjbWNpX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCBzM2NtY2lfaG9zdCAqaG9zdCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzY21jaV9ob3N0ICpob3N0OwogCXN0cnVjdCBtbWNfaG9zdAkqbW1jOwogCWludCByZXQ7CisJaW50IGlzMjQ0MDsKKwlpbnQgaTsKKworCWlzMjQ0MCA9IHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldiktPmRyaXZlcl9kYXRhOwogCiAJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBzM2NtY2lfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CkBAIC0xMjU4LDYgKzE1NTksMTggQEAKIAkJZ290byBwcm9iZV9vdXQ7CiAJfQogCisJZm9yIChpID0gUzNDMjQxMF9HUEUoNSk7IGkgPD0gUzNDMjQxMF9HUEUoMTApOyBpKyspIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGksIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBncGlvICVkXG4iLCBpKTsKKworCQkJZm9yIChpLS07IGkgPj0gUzNDMjQxMF9HUEUoNSk7IGktLSkKKwkJCQlncGlvX2ZyZWUoaSk7CisKKwkJCWdvdG8gcHJvYmVfZnJlZV9ob3N0OworCQl9CisJfQorCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJaG9zdC0+bW1jIAk9IG1tYzsKIAlob3N0LT5wZGV2CT0gcGRldjsKQEAgLTEyODIsMTEgKzE1OTUsMTIgQEAKIAkJaG9zdC0+Y2xrX2Rpdgk9IDI7CiAJfQogCi0JaG9zdC0+ZG9kbWEJCT0gMDsKIAlob3N0LT5jb21wbGV0ZV93aGF0IAk9IENPTVBMRVRJT05fTk9ORTsKIAlob3N0LT5waW9fYWN0aXZlIAk9IFhGRVJfTk9ORTsKIAotCWhvc3QtPmRtYQkJPSBTM0NNQ0lfRE1BOworI2lmZGVmIENPTkZJR19NTUNfUzNDX1BJT0RNQQorCWhvc3QtPmRvZG1hCQk9IGhvc3QtPnBkYXRhLT5kbWE7CisjZW5kaWYKIAogCWhvc3QtPm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFob3N0LT5tZW0pIHsKQEAgLTEyOTQsMTkgKzE2MDgsMTkgQEAKIAkJCSJmYWlsZWQgdG8gZ2V0IGlvIG1lbW9yeSByZWdpb24gcmVzb3VjZS5cbiIpOwogCiAJCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gcHJvYmVfZnJlZV9ob3N0OworCQlnb3RvIHByb2JlX2ZyZWVfZ3BpbzsKIAl9CiAKIAlob3N0LT5tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24oaG9zdC0+bWVtLT5zdGFydCwKLQkJCQkgICAgICAgUkVTU0laRShob3N0LT5tZW0pLCBwZGV2LT5uYW1lKTsKKwkJCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pLCBwZGV2LT5uYW1lKTsKIAogCWlmICghaG9zdC0+bWVtKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlvIG1lbW9yeSByZWdpb24uXG4iKTsKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCWdvdG8gcHJvYmVfZnJlZV9ncGlvOwogCX0KIAotCWhvc3QtPmJhc2UgPSBpb3JlbWFwKGhvc3QtPm1lbS0+c3RhcnQsIFJFU1NJWkUoaG9zdC0+bWVtKSk7CisJaG9zdC0+YmFzZSA9IGlvcmVtYXAoaG9zdC0+bWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShob3N0LT5tZW0pKTsKIAlpZiAoIWhvc3QtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSBpbyBtZW1vcnkgcmVnaW9uLlxuIik7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMzMxLDMxICsxNjQ1LDYwIEBACiAJICogZW5zdXJlIHdlIGRvbid0IGxvY2sgdGhlIHN5c3RlbSB3aXRoIHVuLXNlcnZpY2VhYmxlIHJlcXVlc3RzLiAqLwogCiAJZGlzYWJsZV9pcnEoaG9zdC0+aXJxKTsKKwlob3N0LT5pcnFfc3RhdGUgPSBmYWxzZTsKIAotCWhvc3QtPmlycV9jZCA9IHMzYzI0MTBfZ3Bpb19nZXRpcnEoaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0KTsKLQotCWlmIChob3N0LT5pcnFfY2QgPj0gMCkgewotCQlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxX2NkLCBzM2NtY2lfaXJxX2NkLAotCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQlEUklWRVJfTkFNRSwgaG9zdCkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBjYXJkIGRldGVjdCBpcnEuXG4iKTsKLQkJCXJldCA9IC1FTk9FTlQ7CisJaWYgKCFob3N0LT5wZGF0YS0+bm9fZGV0ZWN0KSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChob3N0LT5wZGF0YS0+Z3Bpb19kZXRlY3QsICJzM2NtY2kgZGV0ZWN0Iik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZGV0ZWN0IGdwaW9cbiIpOwogCQkJZ290byBwcm9iZV9mcmVlX2lycTsKIAkJfQotCX0gZWxzZSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJob3N0IGRldGVjdCBoYXMgbm8gaXJxIGF2YWlsYWJsZVxuIik7Ci0JCXMzYzI0MTBfZ3Bpb19jZmdwaW4oaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0LAotCQkJCSAgICBTM0MyNDEwX0dQSU9fSU5QVVQpOworCisJCWhvc3QtPmlycV9jZCA9IHMzYzI0MTBfZ3Bpb19nZXRpcnEoaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0KTsKKworCQlpZiAoaG9zdC0+aXJxX2NkID49IDApIHsKKwkJCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnFfY2QsIHMzY21jaV9pcnFfY2QsCisJCQkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkJRFJJVkVSX05BTUUsIGhvc3QpKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiY2FuJ3QgZ2V0IGNhcmQgZGV0ZWN0IGlycS5cbiIpOworCQkJCXJldCA9IC1FTk9FTlQ7CisJCQkJZ290byBwcm9iZV9mcmVlX2dwaW9fY2Q7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSAiaG9zdCBkZXRlY3QgaGFzIG5vIGlycSBhdmFpbGFibGVcbiIpOworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0KTsKKwkJfQorCX0gZWxzZQorCQlob3N0LT5pcnFfY2QgPSAtMTsKKworCWlmICghaG9zdC0+cGRhdGEtPm5vX3dwcm90ZWN0KSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCwgInMzY21jaSB3cCIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHdyaXRlcHJvdGVjdFxuIik7CisJCQlnb3RvIHByb2JlX2ZyZWVfaXJxX2NkOworCQl9CisKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoaG9zdC0+cGRhdGEtPmdwaW9fd3Byb3RlY3QpOwogCX0KIAotCWlmIChob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCkKLQkJczNjMjQxMF9ncGlvX2NmZ3Bpbihob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCwKLQkJCQkgICAgUzNDMjQxMF9HUElPX0lOUFVUKTsKKwkvKiBkZXBlbmRpbmcgb24gdGhlIGRtYSBzdGF0ZSwgZ2V0IGEgZG1hIGNoYW5uZWwgdG8gdXNlLiAqLwogCi0JaWYgKHMzYzI0MTBfZG1hX3JlcXVlc3QoUzNDTUNJX0RNQSwgJnMzY21jaV9kbWFfY2xpZW50LCBOVUxMKSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBETUEgY2hhbm5lbC5cbiIpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gcHJvYmVfZnJlZV9pcnFfY2Q7CisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkgeworCQlob3N0LT5kbWEgPSBzM2MyNDEwX2RtYV9yZXF1ZXN0KERNQUNIX1NESSwgJnMzY21jaV9kbWFfY2xpZW50LAorCQkJCQkJaG9zdCk7CisJCWlmIChob3N0LT5kbWEgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IERNQSBjaGFubmVsLlxuIik7CisJCQlpZiAoIXMzY21jaV9ob3N0X2NhbnBpbygpKSB7CisJCQkJcmV0ID0gLUVCVVNZOworCQkJCWdvdG8gcHJvYmVfZnJlZV9ncGlvX3dwOworCQkJfSBlbHNlIHsKKwkJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZmFsbGluZyBiYWNrIHRvIFBJTy5cbiIpOworCQkJCWhvc3QtPmRvZG1hID0gMDsKKwkJCX0KKwkJfQogCX0KIAogCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNkaSIpOwpAQCAtMTM2Myw3ICsxNzA2LDcgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGZpbmQgY2xvY2sgc291cmNlLlxuIik7CiAJCXJldCA9IFBUUl9FUlIoaG9zdC0+Y2xrKTsKIAkJaG9zdC0+Y2xrID0gTlVMTDsKLQkJZ290byBwcm9iZV9mcmVlX2hvc3Q7CisJCWdvdG8gcHJvYmVfZnJlZV9kbWE7CiAJfQogCiAJcmV0ID0gY2xrX2VuYWJsZShob3N0LT5jbGspOwpAQCAtMTM3Niw3ICsxNzE5LDExIEBACiAKIAltbWMtPm9wcyAJPSAmczNjbWNpX29wczsKIAltbWMtPm9jcl9hdmFpbAk9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworI2lmZGVmIENPTkZJR19NTUNfUzNDX0hXX1NESU9fSVJRCisJbW1jLT5jYXBzCT0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9TRElPX0lSUTsKKyNlbHNlCiAJbW1jLT5jYXBzCT0gTU1DX0NBUF80X0JJVF9EQVRBOworI2VuZGlmCiAJbW1jLT5mX21pbiAJPSBob3N0LT5jbGtfcmF0ZSAvIChob3N0LT5jbGtfZGl2ICogMjU2KTsKIAltbWMtPmZfbWF4IAk9IGhvc3QtPmNsa19yYXRlIC8gaG9zdC0+Y2xrX2RpdjsKIApAQCAtMTQwOCw4ICsxNzU1LDEyIEBACiAJCWdvdG8gZnJlZV9jcHVmcmVxOwogCX0KIAorCXMzY21jaV9kZWJ1Z2ZzX2F0dGFjaChob3N0KTsKKwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpc2F0aW9uIGRvbmUuXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgLSB1c2luZyAlcywgJXMgU0RJTyBJUlFcbiIsIG1tY19ob3N0bmFtZShtbWMpLAorCQkgczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpID8gImRtYSIgOiAicGlvIiwKKwkJIG1tYy0+Y2FwcyAmIE1NQ19DQVBfU0RJT19JUlEgPyAiaHciIDogInN3Iik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTQyMiw2ICsxNzczLDE4IEBACiAgY2xrX2ZyZWU6CiAJY2xrX3B1dChob3N0LT5jbGspOwogCisgcHJvYmVfZnJlZV9kbWE6CisJaWYgKHMzY21jaV9ob3N0X3VzZWRtYShob3N0KSkKKwkJczNjMjQxMF9kbWFfZnJlZShob3N0LT5kbWEsICZzM2NtY2lfZG1hX2NsaWVudCk7CisKKyBwcm9iZV9mcmVlX2dwaW9fd3A6CisJaWYgKCFob3N0LT5wZGF0YS0+bm9fd3Byb3RlY3QpCisJCWdwaW9fZnJlZShob3N0LT5wZGF0YS0+Z3Bpb193cHJvdGVjdCk7CisKKyBwcm9iZV9mcmVlX2dwaW9fY2Q6CisJaWYgKCFob3N0LT5wZGF0YS0+bm9fZGV0ZWN0KQorCQlncGlvX2ZyZWUoaG9zdC0+cGRhdGEtPmdwaW9fZGV0ZWN0KTsKKwogIHByb2JlX2ZyZWVfaXJxX2NkOgogCWlmIChob3N0LT5pcnFfY2QgPj0gMCkKIAkJZnJlZV9pcnEoaG9zdC0+aXJxX2NkLCBob3N0KTsKQEAgLTE0MzMsMTAgKzE3OTYsMTUgQEAKIAlpb3VubWFwKGhvc3QtPmJhc2UpOwogCiAgcHJvYmVfZnJlZV9tZW1fcmVnaW9uOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LCBSRVNTSVpFKGhvc3QtPm1lbSkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOworCisgcHJvYmVfZnJlZV9ncGlvOgorCWZvciAoaSA9IFMzQzI0MTBfR1BFKDUpOyBpIDw9IFMzQzI0MTBfR1BFKDEwKTsgaSsrKQorCQlncGlvX2ZyZWUoaSk7CiAKICBwcm9iZV9mcmVlX2hvc3Q6CiAJbW1jX2ZyZWVfaG9zdChtbWMpOworCiAgcHJvYmVfb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNDQ5LDYgKzE4MTcsNyBAQAogCWlmIChob3N0LT5pcnFfY2QgPj0gMCkKIAkJZnJlZV9pcnEoaG9zdC0+aXJxX2NkLCBob3N0KTsKIAorCXMzY21jaV9kZWJ1Z2ZzX3JlbW92ZShob3N0KTsKIAlzM2NtY2lfY3B1ZnJlcV9kZXJlZ2lzdGVyKGhvc3QpOwogCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCWNsa19kaXNhYmxlKGhvc3QtPmNsayk7CkBAIC0xNDU4LDEwNCArMTgyNywxMDIgQEAKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QJCSptbWMgID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMzY21jaV9ob3N0CSpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwlzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgKnBkID0gaG9zdC0+cGRhdGE7CisJaW50IGk7CiAKIAlzM2NtY2lfc2h1dGRvd24ocGRldik7CiAKIAljbGtfcHV0KGhvc3QtPmNsayk7CiAKIAl0YXNrbGV0X2Rpc2FibGUoJmhvc3QtPnBpb190YXNrbGV0KTsKLQlzM2MyNDEwX2RtYV9mcmVlKFMzQ01DSV9ETUEsICZzM2NtY2lfZG1hX2NsaWVudCk7CisKKwlpZiAoczNjbWNpX2hvc3RfdXNlZG1hKGhvc3QpKQorCQlzM2MyNDEwX2RtYV9mcmVlKGhvc3QtPmRtYSwgJnMzY21jaV9kbWFfY2xpZW50KTsKIAogCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAKKwlpZiAoIXBkLT5ub193cHJvdGVjdCkKKwkJZ3Bpb19mcmVlKHBkLT5ncGlvX3dwcm90ZWN0KTsKKworCWlmICghcGQtPm5vX2RldGVjdCkKKwkJZ3Bpb19mcmVlKHBkLT5ncGlvX2RldGVjdCk7CisKKwlmb3IgKGkgPSBTM0MyNDEwX0dQRSg1KTsgaSA8PSBTM0MyNDEwX0dQRSgxMCk7IGkrKykKKwkJZ3Bpb19mcmVlKGkpOworCisKIAlpb3VubWFwKGhvc3QtPmJhc2UpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LCBSRVNTSVpFKGhvc3QtPm1lbSkpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihob3N0LT5tZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGhvc3QtPm1lbSkpOwogCiAJbW1jX2ZyZWVfaG9zdChtbWMpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NtY2lfMjQxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHMzY21jaV9wcm9iZShkZXYsIDApOwotfQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjbWNpX2RyaXZlcl9pZHNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInMzYzI0MTAtc2RpIiwKKwkJLmRyaXZlcl9kYXRhCT0gMCwKKwl9LCB7CisJCS5uYW1lCT0gInMzYzI0MTItc2RpIiwKKwkJLmRyaXZlcl9kYXRhCT0gMSwKKwl9LCB7CisJCS5uYW1lCT0gInMzYzI0NDAtc2RpIiwKKwkJLmRyaXZlcl9kYXRhCT0gMSwKKwl9LAorCXsgfQorfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpXzI0MTJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXJldHVybiBzM2NtY2lfcHJvYmUoZGV2LCAxKTsKLX0KK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHMzY21jaV9kcml2ZXJfaWRzKTsKIAotc3RhdGljIGludCBfX2RldmluaXQgczNjbWNpXzI0NDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXJldHVybiBzM2NtY2lfcHJvYmUoZGV2LCAxKTsKLX0KIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHMzY21jaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2NtY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXN0cnVjdCBwbV9tZXNzYWdlIGV2ZW50ID0geyBQTV9FVkVOVF9TVVNQRU5EIH07CiAKLQlyZXR1cm4gIG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisJcmV0dXJuIG1tY19zdXNwZW5kX2hvc3QobW1jLCBldmVudCk7CiB9CiAKLXN0YXRpYyBpbnQgczNjbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzY21jaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKIAogCXJldHVybiBtbWNfcmVzdW1lX2hvc3QobW1jKTsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHMzY21jaV9wbSA9IHsKKwkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKK307CisKKyNkZWZpbmUgczNjbWNpX3BtX29wcyAmczNjbWNpX3BtCiAjZWxzZSAvKiBDT05GSUdfUE0gKi8KLSNkZWZpbmUgczNjbWNpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2NtY2lfcmVzdW1lIE5VTEwKKyNkZWZpbmUgczNjbWNpX3BtX29wcyBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjbWNpXzI0MTBfZHJpdmVyID0gewotCS5kcml2ZXIubmFtZQk9ICJzM2MyNDEwLXNkaSIsCi0JLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAotCS5wcm9iZQkJPSBzM2NtY2lfMjQxMF9wcm9iZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiczNjLXNkaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBzM2NtY2lfcG1fb3BzLAorCX0sCisJLmlkX3RhYmxlCT0gczNjbWNpX2RyaXZlcl9pZHMsCisJLnByb2JlCQk9IHMzY21jaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY21jaV9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IHMzY21jaV9zaHV0ZG93biwKLQkuc3VzcGVuZAk9IHMzY21jaV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjbWNpX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY21jaV8yNDEyX2RyaXZlciA9IHsKLQkuZHJpdmVyLm5hbWUJPSAiczNjMjQxMi1zZGkiLAotCS5kcml2ZXIub3duZXIJPSBUSElTX01PRFVMRSwKLQkucHJvYmUJCT0gczNjbWNpXzI0MTJfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2NtY2lfcmVtb3ZlKSwKLQkuc2h1dGRvd24JPSBzM2NtY2lfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBzM2NtY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY21jaV9yZXN1bWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NtY2lfMjQ0MF9kcml2ZXIgPSB7Ci0JLmRyaXZlci5uYW1lCT0gInMzYzI0NDAtc2RpIiwKLQkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLnByb2JlCQk9IHMzY21jaV8yNDQwX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjbWNpX3JlbW92ZSksCi0JLnNodXRkb3duCT0gczNjbWNpX3NodXRkb3duLAotCS5zdXNwZW5kCT0gczNjbWNpX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2NtY2lfcmVzdW1lLAotfTsKLQotCiBzdGF0aWMgaW50IF9faW5pdCBzM2NtY2lfaW5pdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjbWNpXzI0MTBfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV8yNDEyX2RyaXZlcik7Ci0JcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NtY2lfMjQ0MF9kcml2ZXIpOwotCXJldHVybiAwOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY21jaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgczNjbWNpX2V4aXQodm9pZCkKIHsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjbWNpXzI0MTBfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjbWNpXzI0MTJfZHJpdmVyKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjbWNpXzI0NDBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjbWNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHMzY21jaV9pbml0KTsKQEAgLTE1NjQsNiArMTkzMSwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzNDIE1NQy9TRCBDYXJkIEludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKIE1PRFVMRV9BVVRIT1IoIlRob21hcyBLbGVmZmVsIDx0a0BtYWludGVjaC5kZT4sIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4iKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMC1zZGkiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQxMi1zZGkiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06czNjMjQ0MC1zZGkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5oCmluZGV4IGNhMWJhM2QuLmM3NmI1M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuaApAQCAtOCw5ICs4LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLS8qIEZJWE1FOiBETUEgUmVzb3VyY2UgbWFuYWdlbWVudCA/ISAqLwotI2RlZmluZSBTM0NNQ0lfRE1BIDAKLQogZW51bSBzM2NtY2lfd2FpdGZvciB7CiAJQ09NUExFVElPTl9OT05FLAogCUNPTVBMRVRJT05fRklOQUxJWkUsCkBAIC00Miw2ICszOSwxMSBAQAogCWludAkJCWRvZG1hOwogCWludAkJCWRtYXRvZ287CiAKKwlib29sCQkJaXJxX2Rpc2FibGVkOworCWJvb2wJCQlpcnFfZW5hYmxlZDsKKwlib29sCQkJaXJxX3N0YXRlOworCWludAkJCXNkaW9faXJxZW47CisKIAlzdHJ1Y3QgbW1jX3JlcXVlc3QJKm1ycTsKIAlpbnQJCQljbWRfaXNfc3RvcDsKIApAQCAtNjgsNiArNzAsMTIgQEAKIAl1bnNpZ25lZCBpbnQJCWNjbnQsIGRjbnQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXBpb190YXNrbGV0OwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGRlbnRyeQkJKmRlYnVnX3Jvb3Q7CisJc3RydWN0IGRlbnRyeQkJKmRlYnVnX3N0YXRlOworCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z19yZWdzOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwppbmRleCAzNzljMzE2Li40YzE5MjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NzdDI1bC5jCmluZGV4IGMyYmFmMzMuLjBhMTE3MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc3N0MjVsLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zc3QyNWwuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDg0MWUwODUuLjE0YmUwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTQ4Niw2ICs0ODYsNyBAQAogCiBjb25maWcgTVREX0dQSU9fQUREUgogCXRyaXN0YXRlICJHUElPLWFzc2lzdGVkIEZsYXNoIENoaXAgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfR1BJTyB8fCBHUElPTElCCiAJZGVwZW5kcyBvbiBNVERfQ09NUExFWF9NQVBQSU5HUwogCXNlbGVjdCBNVERfUEFSVElUSU9OUwogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDFkNWNmODYuLmFlMmY2ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTgsNCArNTgsNiBAQAogb2JqLSQoQ09ORklHX01URF9PTUFQX05PUikJKz0gb21hcF9ub3Iubwogb2JqLSQoQ09ORklHX01URF9JTlRFTF9WUl9OT1IpCSs9IGludGVsX3ZyX25vci5vCiBvYmotJChDT05GSUdfTVREX0JGSU5fQVNZTkMpCSs9IGJmaW4tYXN5bmMtZmxhc2gubworb2JqLSQoQ09ORklHX01URF9SQlRYNDkzOSkJKz0gcmJ0eDQ5MzktZmxhc2gubworb2JqLSQoQ09ORklHX01URF9WTVUpCQkrPSB2bXUtZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9HUElPX0FERFIpCSs9IGdwaW8tYWRkci1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9ncGlvLWFkZHItZmxhc2guYwppbmRleCA0NGVmOWE0Li4xYWQ1Y2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2dwaW8tYWRkci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZ3Bpby1hZGRyLWZsYXNoLmMKQEAgLTEzLDcgKzEzLDkgQEAKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KQEAgLTIzLDkgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8YXNtL2dwaW8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2RlZmluZSBwcl9kZXZpbml0KGZtdCwgYXJncy4uLikgKHsgc3RhdGljIGNvbnN0IF9fZGV2aW5pdGNvbnN0IGNoYXIgX19mbXRbXSA9IGZtdDsgcHJpbnRrKF9fZm10LCAjIyBhcmdzKTsgfSkKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiZ3Bpby1hZGRyLWZsYXNoIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggZmRiOTdmMy4uZDdhNDc1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0yMDksOCArMjA5LDggQEAKIAl9CiAJc3ViZGV2LT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTQTExMDAgZmxhc2g6IENGSSBkZXZpY2UgYXQgMHglMDhseCwgJWRNaUIsICIKLQkJIiVkLWJpdFxuIiwgcGh5cywgc3ViZGV2LT5tdGQtPnNpemUgPj4gMjAsCisJcHJpbnRrKEtFUk5fSU5GTyAiU0ExMTAwIGZsYXNoOiBDRkkgZGV2aWNlIGF0IDB4JTA4bHgsICV1TWlCLCAlZC1iaXRcbiIsCisJCXBoeXMsICh1bnNpZ25lZCkoc3ViZGV2LT5tdGQtPnNpemUgPj4gMjApLAogCQlzdWJkZXYtPm1hcC5iYW5rd2lkdGggKiA4KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKaW5kZXggMGFjYmY0Zi4uOGNhMTdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYworKysgYi9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCkBAIC0zMiwxNCArMzIsNiBAQAogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKIH07CiAKLXN0YXRpYyBpbnQgYmxrdHJhbnNfZGlzY2FyZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCSAgICBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQotewotCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9MSU5VWF9CTE9DSzsKLQlyZXEtPmNtZFswXSA9IFJFUV9MQl9PUF9ESVNDQVJEOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRvX2Jsa3RyYW5zX3JlcXVlc3Qoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyLAogCQkJICAgICAgIHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCiAJCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJlcSkKQEAgLTUyLDEwICs0NCw2IEBACiAKIAlidWYgPSByZXEtPmJ1ZmZlcjsKIAotCWlmIChyZXEtPmNtZF90eXBlID09IFJFUV9UWVBFX0xJTlVYX0JMT0NLICYmCi0JICAgIHJlcS0+Y21kWzBdID09IFJFUV9MQl9PUF9ESVNDQVJEKQotCQlyZXR1cm4gdHItPmRpc2NhcmQoZGV2LCBibG9jaywgbnNlY3QpOwotCiAJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNjMsNiArNTEsOSBAQAogCSAgICBnZXRfY2FwYWNpdHkocmVxLT5ycV9kaXNrKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAoYmxrX2Rpc2NhcmRfcnEocmVxKSkKKwkJcmV0dXJuIHRyLT5kaXNjYXJkKGRldiwgYmxvY2ssIG5zZWN0KTsKKwogCXN3aXRjaChycV9kYXRhX2RpcihyZXEpKSB7CiAJY2FzZSBSRUFEOgogCQlmb3IgKDsgbnNlY3QgPiAwOyBuc2VjdC0tLCBibG9jaysrLCBidWYgKz0gdHItPmJsa3NpemUpCkBAIC0zODAsOCArMzcxLDggQEAKIAl0ci0+YmxrY29yZV9wcml2LT5ycS0+cXVldWVkYXRhID0gdHI7CiAJYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZSh0ci0+YmxrY29yZV9wcml2LT5ycSwgdHItPmJsa3NpemUpOwogCWlmICh0ci0+ZGlzY2FyZCkKLQkJYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHRyLT5ibGtjb3JlX3ByaXYtPnJxLAotCQkJCSAgICAgIGJsa3RyYW5zX2Rpc2NhcmRfcmVxdWVzdCk7CisJCXF1ZXVlX2ZsYWdfc2V0X3VubG9ja2VkKFFVRVVFX0ZMQUdfRElTQ0FSRCwKKwkJCQkJdHItPmJsa2NvcmVfcHJpdi0+cnEpOwogCiAJdHItPmJsa3NoaWZ0ID0gZmZzKHRyLT5ibGtzaXplKSAtIDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IDIyMTEzODYuLjI5NTdjYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtNzYxLDYgKzc2MSw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMsIHdoaWNoIHVzZSBhIHNwZWNpYWwgb29iIGxheW91dAogICovCkBAIC03NzcsNiArNzc4LDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBXZSBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0IGFuZCBoYW5kbGluZyBldmVuIHdoZW4gT09CIGlzbid0IHVzZWQuCiAgKi8KQEAgLTgxOCw2ICs4MjAsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICovCiBzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogCQkJCXVpbnQ4X3QgKmJ1ZiwgaW50IHBhZ2UpCkBAIC05MzksNiArOTQyLDcgQEAKICAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQogICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQogICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHJlYWQKICAqCiAgKiBOb3QgZm9yIHN5bmRyb21lIGNhbGN1bGF0aW5nIGVjYyBjb250cm9sbGVycyB3aGljaCBuZWVkIGEgc3BlY2lhbCBvb2IgbGF5b3V0CiAgKi8KQEAgLTk4Myw2ICs5ODcsNyBAQAogICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCiAgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCiAgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAogICoKICAqIEhhcmR3YXJlIEVDQyBmb3IgbGFyZ2UgcGFnZSBjaGlwcywgcmVxdWlyZSBPT0IgdG8gYmUgcmVhZCBmaXJzdC4KICAqIEZvciB0aGlzIEVDQyBtb2RlLCB0aGUgd3JpdGVfcGFnZSBtZXRob2QgaXMgcmUtdXNlZCBmcm9tIEVDQ19IVy4KQEAgLTEwMzEsNiArMTAzNiw3IEBACiAgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKICAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKICAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byByZWFkCiAgKgogICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgogICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IGUxZjdkMGEuLjE0Y2VjMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlICJ1YmkuaCIKIAogLyogTWF4aW11bSBsZW5ndGggb2YgdGhlICdtdGQ9JyBwYXJhbWV0ZXIgKi8KQEAgLTEyNTcsNyArMTI1OCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXN1bHQ7CiAKIAlyZXN1bHQgPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmRwLCAwKTsKLQlpZiAoc3RyID09IGVuZHAgfHwgcmVzdWx0IDwgMCkgeworCWlmIChzdHIgPT0gZW5kcCB8fCByZXN1bHQgPj0gSU5UX01BWCkgewogCQlwcmludGsoS0VSTl9FUlIgIlVCSSBlcnJvcjogaW5jb3JyZWN0IGJ5dGVzIGNvdW50OiBcIiVzXCJcbiIsCiAJCSAgICAgICBzdHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IGU3MTYxYWQuLjkwYWY2MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtNzk0LDE2ICs3OTQsMTUgQEAKIAkJICogbnVtYmVyLgogCQkgKi8KIAkJaW1hZ2Vfc2VxID0gYmUzMl90b19jcHUoZWNoLT5pbWFnZV9zZXEpOwotCQlpZiAoIXNpLT5pbWFnZV9zZXFfc2V0KSB7CisJCWlmICghdWJpLT5pbWFnZV9zZXEgJiYgaW1hZ2Vfc2VxKQogCQkJdWJpLT5pbWFnZV9zZXEgPSBpbWFnZV9zZXE7Ci0JCQlzaS0+aW1hZ2Vfc2VxX3NldCA9IDE7Ci0JCX0gZWxzZSBpZiAodWJpLT5pbWFnZV9zZXEgJiYgdWJpLT5pbWFnZV9zZXEgIT0gaW1hZ2Vfc2VxKSB7CisJCWlmICh1YmktPmltYWdlX3NlcSAmJiBpbWFnZV9zZXEgJiYKKwkJICAgIHViaS0+aW1hZ2Vfc2VxICE9IGltYWdlX3NlcSkgewogCQkJdWJpX2VycigiYmFkIGltYWdlIHNlcXVlbmNlIG51bWJlciAlZCBpbiBQRUIgJWQsICIKIAkJCQkiZXhwZWN0ZWQgJWQiLCBpbWFnZV9zZXEsIHBudW0sIHViaS0+aW1hZ2Vfc2VxKTsKIAkJCXViaV9kYmdfZHVtcF9lY19oZHIoZWNoKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0KIAl9CiAKIAkvKiBPSywgd2UndmUgZG9uZSB3aXRoIHRoZSBFQyBoZWFkZXIsIGxldCdzIGxvb2sgYXQgdGhlIFZJRCBoZWFkZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmggYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5oCmluZGV4IGJhYjMxNjkuLmZmMTc5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmgKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uaApAQCAtMTAzLDcgKzEwMyw2IEBACiAgKiBAZWNfc3VtOiBhIHRlbXBvcmFyeSB2YXJpYWJsZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgQG1lYW5fZWMKICAqIEBlY19jb3VudDogYSB0ZW1wb3JhcnkgdmFyaWFibGUgdXNlZCB3aGVuIGNhbGN1bGF0aW5nIEBtZWFuX2VjCiAgKiBAY29ycl9jb3VudDogY291bnQgb2YgY29ycnVwdGVkIFBFQnMKLSAqIEBpbWFnZV9zZXFfc2V0OiBpbmRpY2F0ZXMgQHViaS0+aW1hZ2Vfc2VxIGlzIGtub3duCiAgKgogICogVGhpcyBkYXRhIHN0cnVjdHVyZSBjb250YWlucyB0aGUgcmVzdWx0IG9mIHNjYW5uaW5nIGFuZCBtYXkgYmUgdXNlZCBieSBvdGhlcgogICogVUJJIHN1Yi1zeXN0ZW1zIHRvIGJ1aWxkIGZpbmFsIFVCSSBkYXRhIHN0cnVjdHVyZXMsIGZ1cnRoZXIgZXJyb3ItcmVjb3ZlcnkKQEAgLTEyNyw3ICsxMjYsNiBAQAogCXVpbnQ2NF90IGVjX3N1bTsKIAlpbnQgZWNfY291bnQ7CiAJaW50IGNvcnJfY291bnQ7Ci0JaW50IGltYWdlX3NlcV9zZXQ7CiB9OwogCiBzdHJ1Y3QgdWJpX2RldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGUxOWNhNGIuLmIyZjcxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtOTc1LDcgKzk3NSw3IEBACiAKIGNvbmZpZyBFVEhPQwogCXRyaXN0YXRlICJPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSEFTX0lPTUVNCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSEFTX0lPTUVNICYmIEhBU19ETUEKIAlzZWxlY3QgTUlJCiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBDUkMzMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IGNlNmYxYWMuLjNmNGI0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTEwODgsNyArMTA4OCwxNCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoKGVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpKSAhPSAwKSB7CisJZGV2LT5iYXNlX2FkZHIgPSBiYXNlOworCWRldi0+aXJxID0gaXJxOworCWRldi0+bmV0ZGV2X29wcyA9ICZhdTEwMDBfbmV0ZGV2X29wczsKKwlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYXUxMDAwX2V0aHRvb2xfb3BzKTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIX1RYX1RJTUVPVVQ7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGVycm9yICVkXG4iLAogCQkJCURSVl9OQU1FLCBlcnIpOwogCQlmcmVlX25ldGRldihkZXYpOwpAQCAtMTIwOSwxMiArMTIxNiw2IEBACiAJCWF1cC0+dHhfZGJfaW51c2VbaV0gPSBwREI7CiAJfQogCi0JZGV2LT5iYXNlX2FkZHIgPSBiYXNlOwotCWRldi0+aXJxID0gaXJxOwotCWRldi0+bmV0ZGV2X29wcyA9ICZhdTEwMDBfbmV0ZGV2X29wczsKLQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmYXUxMDAwX2V0aHRvb2xfb3BzKTsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gRVRIX1RYX1RJTUVPVVQ7Ci0KIAkvKgogCSAqIFRoZSBib290IGNvZGUgdXNlcyB0aGUgZXRoZXJuZXQgY29udHJvbGxlciwgc28gcmVzZXQgaXQgdG8gc3RhcnQKIAkgKiBmcmVzaC4gIGF1MTAwMF9pbml0KCkgZXhwZWN0cyB0aGF0IHRoZSBkZXZpY2UgaXMgaW4gcmVzZXQgc3RhdGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IGZmNDQ5ZGUuLjg3NjJhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDE1YzAxOTUuLmEyNGJlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC03NjgsMTAgKzc2OCwyNCBAQAogCiAJZTEwMF9zZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwgZGF0YSk7CiAKLQkvKiBSZW5lZ290aWF0ZSB3aXRoIGxpbmsgcGFydG5lciAqLworCWRhdGEgPSBlMTAwX2dldF9tZGlvX3JlZyhkZXYsIG5wLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUik7CiAJaWYgKGF1dG9uZWdfbm9ybWFsKSB7Ci0JICBkYXRhID0gZTEwMF9nZXRfbWRpb19yZWcoZGV2LCBucC0+bWlpX2lmLnBoeV9pZCwgTUlJX0JNQ1IpOwotCWRhdGEgfD0gQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUOworCQkvKiBSZW5lZ290aWF0ZSB3aXRoIGxpbmsgcGFydG5lciAqLworCQlkYXRhIHw9IEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVDsKKwl9IGVsc2UgeworCQkvKiBEb24ndCBuZWdvdGlhdGUgc3BlZWQgb3IgZHVwbGV4ICovCisJCWRhdGEgJj0gfihCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCisJCS8qIFNldCBzcGVlZCBhbmQgZHVwbGV4IHN0YXRpYyAqLworCQlpZiAoY3VycmVudF9zcGVlZF9zZWxlY3Rpb24gPT0gMTApCisJCQlkYXRhICY9IH5CTUNSX1NQRUVEMTAwOworCQllbHNlCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDA7CisKKwkJaWYgKGN1cnJlbnRfZHVwbGV4ICE9IGZ1bGwpCisJCQlkYXRhICY9IH5CTUNSX0ZVTExEUExYOworCQllbHNlCisJCQlkYXRhIHw9IEJNQ1JfRlVMTERQTFg7CiAJfQogCWUxMDBfc2V0X21kaW9fcmVnKGRldiwgbnAtPm1paV9pZi5waHlfaWQsIE1JSV9CTUNSLCBkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggZGI2MzgwMy4uZTM0NzgzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTE2NCwxNiArMTY0LDE0IEBACiAjIGRlZmluZSBFTUFDX01CUF9NQ0FTVENIQU4oY2gpCQkoKGNoKSAmIDB4NykKIAogLyogRU1BQyBtYWNfY29udHJvbCByZWdpc3RlciAqLwotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfVFhQVFlQRQkJKDB4MjAwKQotI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfVFhQQUNFRU4JKDB4NDApCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9NSUlFTgkJKDB4MjApCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9HSUdBQklURU4JKDB4ODApCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9HSUdBQklURU5fU0hJRlQgKDcpCi0jZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9GVUxMRFVQTEVYRU4JKDB4MSkKKyNkZWZpbmUgRU1BQ19NQUNDT05UUk9MX1RYUFRZUEUJCUJJVCg5KQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfVFhQQUNFRU4JQklUKDYpCisjZGVmaW5lIEVNQUNfTUFDQ09OVFJPTF9HTUlJRU4JCUJJVCg1KQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfR0lHQUJJVEVOCUJJVCg3KQorI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfRlVMTERVUExFWEVOCUJJVCgwKQogI2RlZmluZSBFTUFDX01BQ0NPTlRST0xfUk1JSVNQRUVEX01BU0sJQklUKDE1KQogCiAvKiBHSUdBQklUIE1PREUgcmVsYXRlZCBiaXRzICovCi0jZGVmaW5lIEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR01JSUVOCUJJVCg1KQogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJRwlCSVQoNykKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUdGT1JDRQlCSVQoMTcpCiAKQEAgLTE5MiwxMCArMTkwLDEwIEBACiAjZGVmaW5lIEVNQUNfUlhfQlVGRkVSX09GRlNFVF9NQVNLCSgweEZGRkYpCiAKIC8qIE1BQ19JTl9WRUNUT1IgKDB4MTgwKSByZWdpc3RlciBiaXQgZmllbGRzICovCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfSE9TVF9JTlQJICAgICAgKDB4MjAwMDApCi0jZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfU1RBVFBFTkRfSU5UCSAgICAgICgweDEwMDAwKQotI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1JYX0lOVF9WRUMJICAgICAgKDB4MDEwMCkKLSNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9UWF9JTlRfVkVDCSAgICAgICgweDAxKQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX0hPU1RfSU5UCUJJVCgxNykKKyNkZWZpbmUgRU1BQ19ETTY0NFhfTUFDX0lOX1ZFQ1RPUl9TVEFUUEVORF9JTlQJQklUKDE2KQorI2RlZmluZSBFTUFDX0RNNjQ0WF9NQUNfSU5fVkVDVE9SX1JYX0lOVF9WRUMJQklUKDgpCisjZGVmaW5lIEVNQUNfRE02NDRYX01BQ19JTl9WRUNUT1JfVFhfSU5UX1ZFQwlCSVQoMCkKIAogLyoqIE5PVEU6OiBGb3IgRE02NDZ4IHRoZSBJTl9WRUNUT1IgaGFzIGNoYW5nZWQgKi8KICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0lOX1ZFQ1RPUl9SWF9JTlRfVkVDCUJJVChFTUFDX0RFRl9SWF9DSCkKQEAgLTIwMyw3ICsyMDEsNiBAQAogI2RlZmluZSBFTUFDX0RNNjQ2WF9NQUNfSU5fVkVDVE9SX0hPU1RfSU5UCUJJVCgyNikKICNkZWZpbmUgRU1BQ19ETTY0NlhfTUFDX0lOX1ZFQ1RPUl9TVEFUUEVORF9JTlQJQklUKDI3KQogCi0KIC8qIENQUEkgYml0IHBvc2l0aW9ucyAqLwogI2RlZmluZSBFTUFDX0NQUElfU09QX0JJVAkJQklUKDMxKQogI2RlZmluZSBFTUFDX0NQUElfRU9QX0JJVAkJQklUKDMwKQpAQCAtNzUwLDggKzc0Nyw3IEBACiAKIAlpZiAocHJpdi0+c3BlZWQgPT0gU1BFRURfMTAwMCAmJiAocHJpdi0+dmVyc2lvbiA9PSBFTUFDX1ZFUlNJT05fMikpIHsKIAkJbWFjX2NvbnRyb2wgPSBlbWFjX3JlYWQoRU1BQ19NQUNDT05UUk9MKTsKLQkJbWFjX2NvbnRyb2wgfD0gKEVNQUNfRE02NDZYX01BQ0NPTlRPUkxfR01JSUVOIHwKLQkJCQlFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJRyB8CisJCW1hY19jb250cm9sIHw9IChFTUFDX0RNNjQ2WF9NQUNDT05UT1JMX0dJRyB8CiAJCQkJRU1BQ19ETTY0NlhfTUFDQ09OVE9STF9HSUdGT1JDRSk7CiAJfSBlbHNlIHsKIAkJLyogQ2xlYXIgdGhlIEdJRyBiaXQgYW5kIEdJR0ZPUkNFIGJpdCAqLwpAQCAtMjEwOCw3ICsyMTA0LDcgQEAKIAogCS8qIEVuYWJsZSBNSUkgKi8KIAl2YWwgPSBlbWFjX3JlYWQoRU1BQ19NQUNDT05UUk9MKTsKLQl2YWwgfD0gKEVNQUNfTUFDQ09OVFJPTF9NSUlFTik7CisJdmFsIHw9IChFTUFDX01BQ0NPTlRST0xfR01JSUVOKTsKIAllbWFjX3dyaXRlKEVNQUNfTUFDQ09OVFJPTCwgdmFsKTsKIAogCS8qIEVuYWJsZSBOQVBJIGFuZCBpbnRlcnJ1cHRzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCA5Njg2YzFmLi43YTNiZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTIzNyw2ICsyMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IGQxOWIwODQuLjNjMjlhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTE1MSw2ICsxNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKaW5kZXggMTg5ZGZhMi4uM2UxODdiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwLmgKQEAgLTE0MSw2ICsxNDEsOCBAQAogI2RlZmluZSBIVl9UTkNSU19VUFBFUgkJUEhZX1JFRyg3NzgsIDI5KSAvKiBUcmFuc21pdCB3aXRoIG5vIENSUyAqLwogI2RlZmluZSBIVl9UTkNSU19MT1dFUgkJUEhZX1JFRyg3NzgsIDMwKQogCisjZGVmaW5lIEUxMDAwX0ZDUlRWX1BDSCAgICAgMHgwNUY0MCAvKiBQQ0ggRmxvdyBDb250cm9sIFJlZnJlc2ggVGltZXIgVmFsdWUgKi8KKwogLyogQk0gUEhZIENvcHBlciBTcGVjaWZpYyBTdGF0dXMgKi8KICNkZWZpbmUgQk1fQ1NfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDE3CiAjZGVmaW5lIEJNX0NTX1NUQVRVU19MSU5LX1VQICAgICAgICAgICAgICAweDA0MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCmluZGV4IDFiZjRkMmEuLmU4MjYzOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwpAQCAtMzI3LDEwICszMjcsMTggQEAKIAogCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOwogCi0JCXJldHZhbCA9ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KLQkJCSAgaHctPm1hYy5vcHMuc2V0dXBfbGluayhodykgOiBlMTAwMGVfZm9yY2VfbWFjX2ZjKGh3KSk7CisJCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgeworCQkJcmV0dmFsID0gaHctPm1hYy5vcHMuc2V0dXBfbGluayhodyk7CisJCQkvKiBpbXBsaWNpdCBnb3RvIG91dCAqLworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZTEwMDBlX2ZvcmNlX21hY19mYyhodyk7CisJCQlpZiAocmV0dmFsKQorCQkJCWdvdG8gb3V0OworCQkJZTEwMDBlX3NldF9mY193YXRlcm1hcmtzKGh3KTsKKwkJfQogCX0KIAorb3V0OgogCWNsZWFyX2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggNTFkZGIwNC4uZWZmM2Y0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0xMTE4LDcgKzExMTgsOCBAQAogCQkJb2VtX3JlZyB8PSBIVl9PRU1fQklUU19MUExVOwogCX0KIAkvKiBSZXN0YXJ0IGF1dG8tbmVnIHRvIGFjdGl2YXRlIHRoZSBiaXRzICovCi0Jb2VtX3JlZyB8PSBIVl9PRU1fQklUU19SRVNUQVJUX0FOOworCWlmICghZTEwMDBfY2hlY2tfcmVzZXRfYmxvY2soaHcpKQorCQlvZW1fcmVnIHw9IEhWX09FTV9CSVRTX1JFU1RBUlRfQU47CiAJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWdfbG9ja2VkKGh3LCBIVl9PRU1fQklUUywgb2VtX3JlZyk7CiAKIG91dDoKQEAgLTM1NTgsNiArMzU1OSw3IEBACiAJCQkJICB8IEZMQUdfSEFTX0FNVAogCQkJCSAgfCBGTEFHX0hBU19GTEFTSAogCQkJCSAgfCBGTEFHX0hBU19KVU1CT19GUkFNRVMKKwkJCQkgIHwgRkxBR19ESVNBQkxFX0ZDX1BBVVNFX1RJTUUgLyogZXJyYXRhICovCiAJCQkJICB8IEZMQUdfQVBNRV9JTl9XVUMsCiAJLnBiYQkJCT0gMjYsCiAJLm1heF9od19mcmFtZV9zaXplCT0gNDA5NiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYwppbmRleCAwNjg3YzZhLi5mYWQ4ZjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCkBAIC0yNzY5LDI1ICsyNzY5LDM4IEBACiAJLyoKIAkgKiBmbG93IGNvbnRyb2wgc2V0dGluZ3MKIAkgKgotCSAqIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZpdCB0d28gZnVsbCBmcmFtZQorCSAqIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZpdCBvbmUgZnVsbCBmcmFtZQogCSAqIChvciB0aGUgc2l6ZSB1c2VkIGZvciBlYXJseSByZWNlaXZlKSBhYm92ZSBpdCBpbiB0aGUgUnggRklGTy4KIAkgKiBTZXQgaXQgdG8gdGhlIGxvd2VyIG9mOgogCSAqIC0gOTAlIG9mIHRoZSBSeCBGSUZPIHNpemUsIGFuZAogCSAqIC0gdGhlIGZ1bGwgUnggRklGTyBzaXplIG1pbnVzIHRoZSBlYXJseSByZWNlaXZlIHNpemUgKGZvciBwYXJ0cwogCSAqICAgd2l0aCBFUlQgc3VwcG9ydCBhc3N1bWluZyBFUlQgc2V0IHRvIEUxMDAwX0VSVF8yMDQ4KSwgb3IKLQkgKiAtIHRoZSBmdWxsIFJ4IEZJRk8gc2l6ZSBtaW51cyB0d28gZnVsbCBmcmFtZXMKKwkgKiAtIHRoZSBmdWxsIFJ4IEZJRk8gc2l6ZSBtaW51cyBvbmUgZnVsbCBmcmFtZQogCSAqLwotCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0hBU19FUlQpICYmCi0JICAgIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikpCi0JCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAotCQkJICAoKHBiYSA8PCAxMCkgLSAoRTEwMDBfRVJUXzIwNDggPDwgMykpKTsKLQllbHNlCi0JCWh3bSA9IG1pbigoKHBiYSA8PCAxMCkgKiA5IC8gMTApLAotCQkJICAoKHBiYSA8PCAxMCkgLSAoMiAqIGFkYXB0ZXItPm1heF9mcmFtZV9zaXplKSkpOworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfcGNobGFuKSB7CisJCS8qCisJCSAqIFdvcmthcm91bmQgUENIIExPTSBhZGFwdGVyIGhhbmdzIHdpdGggY2VydGFpbiBuZXR3b3JrCisJCSAqIGxvYWRzLiAgSWYgaGFuZ3MgcGVyc2lzdCwgdHJ5IGRpc2FibGluZyBUeCBmbG93IGNvbnRyb2wuCisJCSAqLworCQlpZiAoYWRhcHRlci0+bmV0ZGV2LT5tdHUgPiBFVEhfREFUQV9MRU4pIHsKKwkJCWZjLT5oaWdoX3dhdGVyID0gMHgzNTAwOworCQkJZmMtPmxvd193YXRlciAgPSAweDE1MDA7CisJCX0gZWxzZSB7CisJCQlmYy0+aGlnaF93YXRlciA9IDB4NTAwMDsKKwkJCWZjLT5sb3dfd2F0ZXIgID0gMHgzMDAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0VSVCkgJiYKKwkJICAgIChhZGFwdGVyLT5uZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikpCisJCQlod20gPSBtaW4oKChwYmEgPDwgMTApICogOSAvIDEwKSwKKwkJCQkgICgocGJhIDw8IDEwKSAtIChFMTAwMF9FUlRfMjA0OCA8PCAzKSkpOworCQllbHNlCisJCQlod20gPSBtaW4oKChwYmEgPDwgMTApICogOSAvIDEwKSwKKwkJCQkgICgocGJhIDw8IDEwKSAtIGFkYXB0ZXItPm1heF9mcmFtZV9zaXplKSk7CiAKLQlmYy0+aGlnaF93YXRlciA9IGh3bSAmIEUxMDAwX0ZDUlRIX1JUSDsgLyogOC1ieXRlIGdyYW51bGFyaXR5ICovCi0JZmMtPmxvd193YXRlciA9IChmYy0+aGlnaF93YXRlciAtICgyICogYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpKTsKLQlmYy0+bG93X3dhdGVyICY9IEUxMDAwX0ZDUlRMX1JUTDsgLyogOC1ieXRlIGdyYW51bGFyaXR5ICovCisJCWZjLT5oaWdoX3dhdGVyID0gaHdtICYgRTEwMDBfRkNSVEhfUlRIOyAvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmxvd193YXRlciA9IGZjLT5oaWdoX3dhdGVyIC0gODsKKwl9CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0RJU0FCTEVfRkNfUEFVU0VfVElNRSkKIAkJZmMtPnBhdXNlX3RpbWUgPSAweEZGRkY7CkBAIC0yODEzLDYgKzI4MjYsMTAgQEAKIAlpZiAobWFjLT5vcHMuaW5pdF9odyhodykpCiAJCWVfZXJyKCJIYXJkd2FyZSBFcnJvclxuIik7CiAKKwkvKiBhZGRpdGlvbmFsIHBhcnQgb2YgdGhlIGZsb3ctY29udHJvbCB3b3JrYXJvdW5kIGFib3ZlICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9wY2hsYW4pCisJCWV3MzIoRkNSVFZfUENILCAweDEwMDApOworCiAJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCiAJLyogRW5hYmxlIGgvdyB0byByZWNvZ25pemUgYW4gODAyLjFRIFZMQU4gRXRoZXJuZXQgcGFja2V0ICovCkBAIC0zNjEwLDcgKzM2MjcsNyBAQAogCQkJY2FzZSBTUEVFRF8xMDA6CiAJCQkJdHhiMmIgPSAwOwogCQkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMTAwOwotCQkJCS8qIG1heWJlIGFkZCBzb21lIHRpbWVvdXQgZmFjdG9yID8gKi8KKwkJCQlhZGFwdGVyLT50eF90aW1lb3V0X2ZhY3RvciA9IDEwOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC00Mjg4LDggKzQzMDUsMTAgQEAKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQogCQltc2xlZXAoMSk7Ci0JLyogZTEwMDBlX2Rvd24gaGFzIGEgZGVwZW5kZW5jeSBvbiBtYXhfZnJhbWVfc2l6ZSAqLworCS8qIGUxMDAwZV9kb3duIC0+IGUxMDAwZV9yZXNldCBkZXBlbmRlbnQgb24gbWF4X2ZyYW1lX3NpemUgJiBtdHUgKi8KIAlhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA9IG1heF9mcmFtZTsKKwllX2luZm8oImNoYW5naW5nIE1UVSBmcm9tICVkIHRvICVkXG4iLCBuZXRkZXYtPm10dSwgbmV3X210dSk7CisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwZV9kb3duKGFkYXB0ZXIpOwogCkBAIC00MzE5LDkgKzQzMzgsNiBAQAogCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gRVRIX0ZSQU1FX0xFTiArIFZMQU5fSExFTgogCQkJCQkgKyBFVEhfRkNTX0xFTjsKIAotCWVfaW5mbygiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKLQluZXRkZXYtPm10dSA9IG5ld19tdHU7Ci0KIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQllMTAwMGVfdXAoYWRhcHRlcik7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL3BoeS5jCmluZGV4IDAzMTc1YjMuLjg1Zjk1NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9waHkuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvcGh5LmMKQEAgLTcxLDcgKzcxLDYgQEAKICNkZWZpbmUgSTgyNTc3X0NGR19BU1NFUlRfQ1JTX09OX1RYICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBJODI1NzdfQ0ZHX0VOQUJMRV9ET1dOU0hJRlQgICAgICAgKDMgPDwgMTApIC8qIGF1dG8gZG93bnNoaWZ0IDEwMC8xMCAqLwogI2RlZmluZSBJODI1NzdfQ1RSTF9SRUcgICAgICAgICAgICAgICAgICAgMjMKLSNkZWZpbmUgSTgyNTc3X0NUUkxfRE9XTlNISUZUX01BU0sgICAgICAgICg3IDw8IDEwKQogCiAvKiA4MjU3NyBzcGVjaWZpYyBQSFkgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEk4MjU3N19QSFlfQ1RSTF8yICAgICAgICAgICAgMTgKQEAgLTY2MCwxNSArNjU5LDYgQEAKIAlwaHlfZGF0YSB8PSBJODI1NzdfQ0ZHX0VOQUJMRV9ET1dOU0hJRlQ7CiAKIAlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSTgyNTc3X0NGR19SRUcsIHBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBTZXQgbnVtYmVyIG9mIGxpbmsgYXR0ZW1wdHMgYmVmb3JlIGRvd25zaGlmdCAqLwotCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIEk4MjU3N19DVFJMX1JFRywgJnBoeV9kYXRhKTsKLQlpZiAocmV0X3ZhbCkKLQkJZ290byBvdXQ7Ci0JcGh5X2RhdGEgJj0gfkk4MjU3N19DVFJMX0RPV05TSElGVF9NQVNLOwotCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJODI1NzdfQ1RSTF9SRUcsIHBoeV9kYXRhKTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMjY1OCwxOSArMjY0OCwxOCBAQAogCQlwYWdlID0gMDsKIAogCWlmIChyZWcgPiBNQVhfUEhZX01VTFRJX1BBR0VfUkVHKSB7Ci0JCWlmICgoaHctPnBoeS50eXBlICE9IGUxMDAwX3BoeV84MjU3OCkgfHwKLQkJICAgICgocmVnICE9IEk4MjU3OF9BRERSX1JFRykgJiYKLQkJICAgICAocmVnICE9IEk4MjU3OF9BRERSX1JFRyArIDEpKSkgewotCQkJdTMyIHBoeV9hZGRyID0gaHctPnBoeS5hZGRyOworCQl1MzIgcGh5X2FkZHIgPSBody0+cGh5LmFkZHI7CiAKLQkJCWh3LT5waHkuYWRkciA9IDE7CisJCWh3LT5waHkuYWRkciA9IDE7CiAKLQkJCS8qIFBhZ2UgaXMgc2hpZnRlZCBsZWZ0LCBQSFkgZXhwZWN0cyAocGFnZSB4IDMyKSAqLwotCQkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZSA8PCBJR1BfUEFHRV9TSElGVCkpOwotCQkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7Ci0JCX0KKwkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCisJCXJldF92YWwgPSBlMTAwMGVfd3JpdGVfcGh5X3JlZ19tZGljKGh3LAorCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7CisJCWh3LT5waHkuYWRkciA9IHBoeV9hZGRyOworCisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CiAJfQogCiAJcmV0X3ZhbCA9IGUxMDAwZV9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZywKQEAgLTI2NzgsNyArMjY2Nyw3IEBACiBvdXQ6CiAJLyogUmV2ZXJ0IHRvIE1ESU8gZmFzdCBtb2RlLCBpZiBhcHBsaWNhYmxlICovCiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSAmJiBpbl9zbG93X21vZGUpCi0JCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIGZhbHNlKTsKKwkJcmV0X3ZhbCB8PSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIGZhbHNlKTsKIAogCWlmICghbG9ja2VkKQogCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CkBAIC0yNzg0LDE5ICsyNzczLDE4IEBACiAJfQogCiAJaWYgKHJlZyA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKLQkJaWYgKChody0+cGh5LnR5cGUgIT0gZTEwMDBfcGh5XzgyNTc4KSB8fAotCQkgICAgKChyZWcgIT0gSTgyNTc4X0FERFJfUkVHKSAmJgotCQkgICAgIChyZWcgIT0gSTgyNTc4X0FERFJfUkVHICsgMSkpKSB7Ci0JCQl1MzIgcGh5X2FkZHIgPSBody0+cGh5LmFkZHI7CisJCXUzMiBwaHlfYWRkciA9IGh3LT5waHkuYWRkcjsKIAotCQkJaHctPnBoeS5hZGRyID0gMTsKKwkJaHctPnBoeS5hZGRyID0gMTsKIAotCQkJLyogUGFnZSBpcyBzaGlmdGVkIGxlZnQsIFBIWSBleHBlY3RzIChwYWdlIHggMzIpICovCi0JCQlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlIDw8IElHUF9QQUdFX1NISUZUKSk7Ci0JCQlody0+cGh5LmFkZHIgPSBwaHlfYWRkcjsKLQkJfQorCQkvKiBQYWdlIGlzIHNoaWZ0ZWQgbGVmdCwgUEhZIGV4cGVjdHMgKHBhZ2UgeCAzMikgKi8KKwkJcmV0X3ZhbCA9IGUxMDAwZV93cml0ZV9waHlfcmVnX21kaWMoaHcsCisJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsCisJCQkJCSAgICAgKHBhZ2UgPDwgSUdQX1BBR0VfU0hJRlQpKTsKKwkJaHctPnBoeS5hZGRyID0gcGh5X2FkZHI7CisKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKIAl9CiAKIAlyZXRfdmFsID0gZTEwMDBlX3dyaXRlX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIHJlZywKQEAgLTI4MDUsNyArMjc5Myw3IEBACiBvdXQ6CiAJLyogUmV2ZXJ0IHRvIE1ESU8gZmFzdCBtb2RlLCBpZiBhcHBsaWNhYmxlICovCiAJaWYgKChody0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5XzgyNTc3KSAmJiBpbl9zbG93X21vZGUpCi0JCXJldF92YWwgPSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIGZhbHNlKTsKKwkJcmV0X3ZhbCB8PSBlMTAwMF9zZXRfbWRpb19zbG93X21vZGVfaHYoaHcsIGZhbHNlKTsKIAogCWlmICghbG9ja2VkKQogCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcWwuYyBiL2RyaXZlcnMvbmV0L2VxbC5jCmluZGV4IGQ0ZDlhM2UuLmY1Yjk2Y2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcWwuYworKysgYi9kcml2ZXJzL25ldC9lcWwuYwpAQCAtMTExLDYgKzExMSw3IEBACiAgKiBTb3JyeSwgSSBoYWQgdG8gcmV3cml0ZSBtb3N0IG9mIHRoaXMgZm9yIDIuNS54IC1EYXZlTQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggNTkwNDczYS4uZjdkOWFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvZXRob2MuaD4KIAogc3RhdGljIGludCBidWZmZXJfc2l6ZSA9IDB4ODAwMDsgLyogMzIgS0J5dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ld3JrMy5jIGIvZHJpdmVycy9uZXQvZXdyazMuYwppbmRleCBiMmE1ZWM4Li5kZDRiYTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ld3JrMy5jCisrKyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCA3M2ZlOTc3Li4zMTE2NjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggMWQ1MDY0YS4uZjc1MTlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAvKiBUaW1lIGluIGppZmZpZXMgYmVmb3JlIGNvbmNsdWRpbmcgdGhlIHRyYW5zbWl0dGVyIGlzIGh1bmcuICovCiAjZGVmaW5lIFRYX1RJTUVPVVQgICg1KkhaKQogCisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCmluZGV4IDdiY2FmN2MuLmUzNDRjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfZmR4LmMKaW5kZXggYWE0NDg4ZS4uZWQ2MGZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9mZHguYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2ZkeC5jCkBAIC03MSw2ICs3MSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fc2VyX2hkeC5jCmluZGV4IDg4YzU5MzUuLjE2ODZmNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9zZXJfaGR4LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYwpAQCAtNjEsNiArNjEsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKaW5kZXggMDAxM2M0MC4uOTFjNTc5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2hkbGNkcnYuYwpAQCAtNDIsNiArNDIsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwMTAwLmMgYi9kcml2ZXJzL25ldC9ocDEwMC5jCmluZGV4IGE5YTFhOTkuLmRkODY2NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hwMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvaHAxMDAuYwpAQCAtOTgsNiArOTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBhYWIzZDk3Li5iMjQzZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJpZ2IuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IDJmYzMwYjQuLmNiOTBkNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTY2LDcgKzY2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCBmNGQxM2ZjLi5iNTRkM2I0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCmluZGV4IDVmOWQ3MzMuLjhkNzEzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYwpAQCAtODIsNyArODIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggYjNkMzBiYy4uYzBlMGJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTUwLDcgKzUwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCmluZGV4IDE0NDVlNTguLjg0ZGIxNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvcHhhZmljcF9pci5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJtb2QuaD4KQEAgLTE2Myw2ICsxNjQsMjIgQEAKIH0KIAogLyoKKyAqIFNldCB0aGUgSXJEQSBjb21tdW5pY2F0aW9ucyBtb2RlLgorICovCitzdGF0aWMgdm9pZCBweGFfaXJkYV9zZXRfbW9kZShzdHJ1Y3QgcHhhX2lyZGEgKnNpLCBpbnQgbW9kZSkKK3sKKwlpZiAoc2ktPnBkYXRhLT50cmFuc2NlaXZlcl9tb2RlKQorCQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgbW9kZSk7CisJZWxzZSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHNpLT5wZGF0YS0+Z3Bpb19wd2Rvd24pKQorCQkJZ3Bpb19zZXRfdmFsdWUoc2ktPnBkYXRhLT5ncGlvX3B3ZG93biwKKwkJCQkJIShtb2RlICYgSVJfT0ZGKSBeCisJCQkJCSFzaS0+cGRhdGEtPmdwaW9fcHdkb3duX2ludmVydGVkKTsKKwkJcHhhMnh4X3RyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgbW9kZSk7CisJfQorfQorCisvKgogICogU2V0IHRoZSBJckRBIGNvbW11bmljYXRpb25zIHNwZWVkLgogICovCiBzdGF0aWMgaW50IHB4YV9pcmRhX3NldF9zcGVlZChzdHJ1Y3QgcHhhX2lyZGEgKnNpLCBpbnQgc3BlZWQpCkBAIC0xODgsNyArMjA1LDcgQEAKIAkJCXB4YV9pcmRhX2Rpc2FibGVfY2xrKHNpKTsKIAogCQkJLyogc2V0IGJvYXJkIHRyYW5zY2VpdmVyIHRvIFNJUiBtb2RlICovCi0JCQlzaS0+cGRhdGEtPnRyYW5zY2VpdmVyX21vZGUoc2ktPmRldiwgSVJfU0lSTU9ERSk7CisJCQlweGFfaXJkYV9zZXRfbW9kZShzaSwgSVJfU0lSTU9ERSk7CiAKIAkJCS8qIGVuYWJsZSB0aGUgU1RVQVJUIGNsb2NrICovCiAJCQlweGFfaXJkYV9lbmFibGVfc2lyY2xrKHNpKTsKQEAgLTIyMiw3ICsyMzksNyBAQAogCQlJQ0NSMCA9IDA7CiAKIAkJLyogc2V0IGJvYXJkIHRyYW5zY2VpdmVyIHRvIEZJUiBtb2RlICovCi0JCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBJUl9GSVJNT0RFKTsKKwkJcHhhX2lyZGFfc2V0X21vZGUoc2ksIElSX0ZJUk1PREUpOwogCiAJCS8qIGVuYWJsZSB0aGUgRklDUCBjbG9jayAqLwogCQlweGFfaXJkYV9lbmFibGVfZmlyY2xrKHNpKTsKQEAgLTY0MSw3ICs2NTgsNyBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCS8qIHBvd2VyIG9mZiBib2FyZCB0cmFuc2NlaXZlciAqLwotCXNpLT5wZGF0YS0+dHJhbnNjZWl2ZXJfbW9kZShzaS0+ZGV2LCBJUl9PRkYpOworCXB4YV9pcmRhX3NldF9tb2RlKHNpLCBJUl9PRkYpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInB4YV9pcjogaXJkYSBzaHV0ZG93blxuIik7CiB9CkBAIC04NDksMTAgKzg2NiwyNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX21lbV81OwogCi0JaWYgKHNpLT5wZGF0YS0+c3RhcnR1cCkKKwlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3Qoc2ktPnBkYXRhLT5ncGlvX3B3ZG93biwgIklyREEgc3dpdGNoIik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9zdGFydHVwOworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93biwKKwkJCQkJIXNpLT5wZGF0YS0+Z3Bpb19wd2Rvd25faW52ZXJ0ZWQpOworCQlpZiAoZXJyKSB7CisJCQlncGlvX2ZyZWUoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bik7CisJCQlnb3RvIGVycl9zdGFydHVwOworCQl9CisJfQorCisJaWYgKHNpLT5wZGF0YS0+c3RhcnR1cCkgewogCQllcnIgPSBzaS0+cGRhdGEtPnN0YXJ0dXAoc2ktPmRldik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfc3RhcnR1cDsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX3N0YXJ0dXA7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQoc2ktPnBkYXRhLT5ncGlvX3B3ZG93bikgJiYgc2ktPnBkYXRhLT5zdGFydHVwKQorCQlkZXZfd2FybihzaS0+ZGV2LCAiZ3Bpb19wd2Rvd24gYW5kIHN0YXJ0dXAoKSBib3RoIGRlZmluZWQhXG4iKTsKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZweGFfaXJkYV9uZXRkZXZfb3BzOwogCkBAIC05MDMsNiArOTM2LDggQEAKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBweGFfaXJkYSAqc2kgPSBuZXRkZXZfcHJpdihkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlpZiAoZ3Bpb19pc192YWxpZChzaS0+cGRhdGEtPmdwaW9fcHdkb3duKSkKKwkJCWdwaW9fZnJlZShzaS0+cGRhdGEtPmdwaW9fcHdkb3duKTsKIAkJaWYgKHNpLT5wZGF0YS0+c2h1dGRvd24pCiAJCQlzaS0+cGRhdGEtPnNodXRkb3duKHNpLT5kZXYpOwogCQlrZnJlZShzaS0+dHhfYnVmZi5oZWFkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3RvaW0zMjMyLXNpci5jCmluZGV4IGZjZjI4N2IuLjk5ZTFlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdG9pbTMyMzItc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS90b2ltMzIzMi1zaXIuYwpAQCAtMTIwLDYgKzEyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IGE1MDM2ZjcuLmE0NTY1NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTI0MCwxMSArMjQwLDExIEBACiBzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfdHhfaXNfcGF1c2VkKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKLQlpbnQgdGM7CiAJdTMyIHR4b2ZmID0gSVhHQkVfVEZDU19UWE9GRjsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWludCB0YzsKIAkJaW50IHJlZ19pZHggPSB0eF9yaW5nLT5yZWdfaWR4OwogCQlpbnQgZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jIGIvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCmluZGV4IDBiZTE0ZDcuLmMxNDYzMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYworKysgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKQEAgLTU2OCw2ICs1NjgsMTYgQEAKIAkJaW93cml0ZTE2KCp3cHRyKyssIGtzLT5od19hZGRyKTsKIH0KIAorc3RhdGljIHZvaWQga3NfZGlzYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCit7CisJa3Nfd3JyZWcxNihrcywgS1NfSUVSLCAweDAwMDApOworfSAgLyoga3NfZGlzYWJsZV9pbnQgKi8KKworc3RhdGljIHZvaWQga3NfZW5hYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKK3sKKwlrc193cnJlZzE2KGtzLCBLU19JRVIsIGtzLT5yY19pZXIpOworfSAgLyoga3NfZW5hYmxlX2ludCAqLworCiAvKioKICAqIGtzX3R4X2ZpZm9fc3BhY2UgLSByZXR1cm4gdGhlIGF2YWlsYWJsZSBoYXJkd2FyZSBidWZmZXIgc2l6ZS4KICAqIEBrczogVGhlIGNoaXAgaW5mb3JtYXRpb24KQEAgLTY4MSw2ICs2OTEsNDcgQEAKIH0KIAogCit2b2lkIGtzX2VuYWJsZV9xbXUoc3RydWN0IGtzX25ldCAqa3MpCit7CisJdTE2IHc7CisKKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7CisJLyogRW5hYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLworCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcgfCBUWENSX1RYRSk7CisKKwkvKgorCSAqIFJYIEZyYW1lIENvdW50IFRocmVzaG9sZCBFbmFibGUgYW5kIEF1dG8tRGVxdWV1ZSBSWFEgRnJhbWUKKwkgKiBFbmFibGUKKwkgKi8KKworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWFFDUik7CisJa3Nfd3JyZWcxNihrcywgS1NfUlhRQ1IsIHcgfCBSWFFDUl9SWEZDVEUpOworCisJLyogRW5hYmxlcyBRTVUgUmVjZWl2ZSAoUlhDUjEpLiAqLworCXcgPSBrc19yZHJlZzE2KGtzLCBLU19SWENSMSk7CisJa3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcgfCBSWENSMV9SWEUpOworCWtzLT5lbmFibGVkID0gdHJ1ZTsKK30gIC8qIGtzX2VuYWJsZV9xbXUgKi8KKworc3RhdGljIHZvaWQga3NfZGlzYWJsZV9xbXUoc3RydWN0IGtzX25ldCAqa3MpCit7CisJdTE2CXc7CisKKwl3ID0ga3NfcmRyZWcxNihrcywgS1NfVFhDUik7CisKKwkvKiBEaXNhYmxlcyBRTVUgVHJhbnNtaXQgKFRYQ1IpLiAqLworCXcgICY9IH5UWENSX1RYRTsKKwlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3KTsKKworCS8qIERpc2FibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCisJdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKKwl3ICY9IH5SWENSMV9SWEUgOworCWtzX3dycmVnMTYoa3MsIEtTX1JYQ1IxLCB3KTsKKworCWtzLT5lbmFibGVkID0gZmFsc2U7CisKK30gIC8qIGtzX2Rpc2FibGVfcW11ICovCisKIC8qKgogICoga3NfcmVhZF9xbXUgLSByZWFkIDEgcGt0IGRhdGEgZnJvbSB0aGUgUU1VLgogICogQGtzOiBUaGUgY2hpcCBpbmZvcm1hdGlvbgpAQCAtNzUyLDcgKzgwMyw3IEBACiAJCQkoZnJhbWVfaGRyLT5sZW4gPCBSWF9CVUZfU0laRSkgJiYgZnJhbWVfaGRyLT5sZW4pKSB7CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwogCQkJLyogcmVhZCBkYXRhIGJsb2NrIGluY2x1ZGluZyBDUkMgNCBieXRlcyAqLwotCQkJa3NfcmVhZF9xbXUoa3MsICh1MTYgKilza2ItPmRhdGEsIGZyYW1lX2hkci0+bGVuICsgNCk7CisJCQlrc19yZWFkX3FtdShrcywgKHUxNiAqKXNrYi0+ZGF0YSwgZnJhbWVfaGRyLT5sZW4pOwogCQkJc2tiX3B1dChza2IsIGZyYW1lX2hkci0+bGVuKTsKIAkJCXNrYi0+ZGV2ID0gbmV0ZGV2OwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKQEAgLTg2MSw3ICs5MTIsNyBAQAogCQlrc19kYmcoa3MsICIlcyAtIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiByZXNldCB0aGUgSFcgKi8KLQllcnIgPSByZXF1ZXN0X2lycShrcy0+aXJxLCBrc19pcnEsIEtTX0lOVF9GTEFHUywgRFJWX05BTUUsIGtzKTsKKwllcnIgPSByZXF1ZXN0X2lycShrcy0+aXJxLCBrc19pcnEsIEtTX0lOVF9GTEFHUywgRFJWX05BTUUsIG5ldGRldik7CiAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZDogJWRcbiIsCkBAIC04NjksNiArOTIwLDE1IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJLyogd2FrZSB1cCBwb3dlcm1vZGUgdG8gbm9ybWFsIG1vZGUgKi8KKwlrc19zZXRfcG93ZXJtb2RlKGtzLCBQTUVDUl9QTV9OT1JNQUwpOworCW1kZWxheSgxKTsJLyogd2FpdCBmb3Igbm9ybWFsIG1vZGUgdG8gdGFrZSBlZmZlY3QgKi8KKworCWtzX3dycmVnMTYoa3MsIEtTX0lTUiwgMHhmZmZmKTsKKwlrc19lbmFibGVfaW50KGtzKTsKKwlrc19lbmFibGVfcW11KGtzKTsKKwluZXRpZl9zdGFydF9xdWV1ZShrcy0+bmV0ZGV2KTsKKwogCWlmIChuZXRpZl9tc2dfaWZ1cChrcykpCiAJCWtzX2RiZyhrcywgIm5ldHdvcmsgZGV2aWNlICVzIHVwXG4iLCBuZXRkZXYtPm5hbWUpOwogCkBAIC04OTIsMTkgKzk1MiwxNCBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCi0Ja2ZyZWUoa3MtPmZyYW1lX2hlYWRfaW5mbyk7Ci0KIAltdXRleF9sb2NrKCZrcy0+bG9jayk7CiAKIAkvKiB0dXJuIG9mZiB0aGUgSVJRcyBhbmQgYWNrIGFueSBvdXRzdGFuZGluZyAqLwogCWtzX3dycmVnMTYoa3MsIEtTX0lFUiwgMHgwMDAwKTsKIAlrc193cnJlZzE2KGtzLCBLU19JU1IsIDB4ZmZmZik7CiAKLQkvKiBzaHV0ZG93biBSWCBwcm9jZXNzICovCi0Ja3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIDB4MDAwMCk7Ci0KLQkvKiBzaHV0ZG93biBUWCBwcm9jZXNzICovCi0Ja3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgMHgwMDAwKTsKKwkvKiBzaHV0ZG93biBSWC9UWCBRTVUgKi8KKwlrc19kaXNhYmxlX3FtdShrcyk7CiAKIAkvKiBzZXQgcG93ZXJtb2RlIHRvIHNvZnQgcG93ZXIgZG93biB0byBzYXZlIHBvd2VyICovCiAJa3Nfc2V0X3Bvd2VybW9kZShrcywgUE1FQ1JfUE1fU09GVERPV04pOwpAQCAtOTI5LDE3ICs5ODQsOCBAQAogICovCiBzdGF0aWMgdm9pZCBrc193cml0ZV9xbXUoc3RydWN0IGtzX25ldCAqa3MsIHU4ICpwZGF0YSwgdTE2IGxlbikKIHsKLQl1bnNpZ25lZCBmaWQgPSBrcy0+ZmlkOwotCi0JZmlkID0ga3MtPmZpZDsKLQlrcy0+ZmlkID0gKGtzLT5maWQgKyAxKSAmIFRYRlJfVFhGSURfTUFTSzsKLQotCS8qIHJlZHVjZSB0aGUgdHggaW50ZXJydXB0IG9jY3VycmFuY2VzLiAqLwotCWlmICghZmlkKQotCQlmaWQgfD0gVFhGUl9UWElDOyAgICAgICAvKiBpcnEgb24gY29tcGxldGlvbiAqLwotCiAJLyogc3RhcnQgaGVhZGVyIGF0IHR4YlswXSB0byBhbGlnbiB0eHcgZW50cmllcyAqLwotCWtzLT50eGgudHh3WzBdID0gY3B1X3RvX2xlMTYoZmlkKTsKKwlrcy0+dHhoLnR4d1swXSA9IDA7CiAJa3MtPnR4aC50eHdbMV0gPSBjcHVfdG9fbGUxNihsZW4pOwogCiAJLyogMS4gc2V0IHN1ZG8tRE1BIG1vZGUgKi8KQEAgLTk1NywxNiArMTAwMyw2IEBACiAJCTsKIH0KIAotc3RhdGljIHZvaWQga3NfZGlzYWJsZV9pbnQoc3RydWN0IGtzX25ldCAqa3MpCi17Ci0Ja3Nfd3JyZWcxNihrcywgS1NfSUVSLCAweDAwMDApOwotfSAgLyoga3NfZGlzYWJsZV9pbnQgKi8KLQotc3RhdGljIHZvaWQga3NfZW5hYmxlX2ludChzdHJ1Y3Qga3NfbmV0ICprcykKLXsKLQlrc193cnJlZzE2KGtzLCBLU19JRVIsIGtzLT5yY19pZXIpOwotfSAgLyoga3NfZW5hYmxlX2ludCAqLwotCiAvKioKICAqIGtzX3N0YXJ0X3htaXQgLSB0cmFuc21pdCBwYWNrZXQKICAqIEBza2IJCTogVGhlIGJ1ZmZlciB0byB0cmFuc21pdApAQCAtMTQxMCwyNSArMTQ0Niw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQga3NfZGlzYWJsZShzdHJ1Y3Qga3NfbmV0ICprcykKLXsKLQl1MTYJdzsKLQotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKLQotCS8qIERpc2FibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCi0JdyAgJj0gflRYQ1JfVFhFOwotCWtzX3dycmVnMTYoa3MsIEtTX1RYQ1IsIHcpOwotCi0JLyogRGlzYWJsZXMgUU1VIFJlY2VpdmUgKFJYQ1IxKS4gKi8KLQl3ID0ga3NfcmRyZWcxNihrcywgS1NfUlhDUjEpOwotCXcgJj0gflJYQ1IxX1JYRSA7Ci0Ja3Nfd3JyZWcxNihrcywgS1NfUlhDUjEsIHcpOwotCi0Ja3MtPmVuYWJsZWQgPSBmYWxzZTsKLQotfSAgLyoga3NfZGlzYWJsZSAqLwotCiBzdGF0aWMgdm9pZCBrc19zZXR1cChzdHJ1Y3Qga3NfbmV0ICprcykKIHsKIAl1MTYJdzsKQEAgLTE0NjMsNyArMTQ4MCw3IEBACiAJdyA9IFRYQ1JfVFhGQ0UgfCBUWENSX1RYUEUgfCBUWENSX1RYQ1JDIHwgVFhDUl9UQ0dJUDsKIAlrc193cnJlZzE2KGtzLCBLU19UWENSLCB3KTsKIAotCXcgPSBSWENSMV9SWEZDRSB8IFJYQ1IxX1JYQkUgfCBSWENSMV9SWFVFOworCXcgPSBSWENSMV9SWEZDRSB8IFJYQ1IxX1JYQkUgfCBSWENSMV9SWFVFIHwgUlhDUjFfUlhNRSB8IFJYQ1IxX1JYSVBGQ0M7CiAKIAlpZiAoa3MtPnByb21pc2N1b3VzKSAgICAgICAgIC8qIGJQcm9taXNjdW91cyAqLwogCQl3IHw9IChSWENSMV9SWEFFIHwgUlhDUjFfUlhJTlZGKTsKQEAgLTE0ODYsMjggKzE1MDMsNiBAQAogCWtzLT5yY19pZXIgPSAoSVJRX0xDSSB8IElSUV9UWEkgfCBJUlFfUlhJKTsKIH0gIC8qIGtzX3NldHVwX2ludCAqLwogCi12b2lkIGtzX2VuYWJsZShzdHJ1Y3Qga3NfbmV0ICprcykKLXsKLQl1MTYgdzsKLQotCXcgPSBrc19yZHJlZzE2KGtzLCBLU19UWENSKTsKLQkvKiBFbmFibGVzIFFNVSBUcmFuc21pdCAoVFhDUikuICovCi0Ja3Nfd3JyZWcxNihrcywgS1NfVFhDUiwgdyB8IFRYQ1JfVFhFKTsKLQotCS8qCi0JICogUlggRnJhbWUgQ291bnQgVGhyZXNob2xkIEVuYWJsZSBhbmQgQXV0by1EZXF1ZXVlIFJYUSBGcmFtZQotCSAqIEVuYWJsZQotCSAqLwotCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYUUNSKTsKLQlrc193cnJlZzE2KGtzLCBLU19SWFFDUiwgdyB8IFJYUUNSX1JYRkNURSk7Ci0KLQkvKiBFbmFibGVzIFFNVSBSZWNlaXZlIChSWENSMSkuICovCi0JdyA9IGtzX3JkcmVnMTYoa3MsIEtTX1JYQ1IxKTsKLQlrc193cnJlZzE2KGtzLCBLU19SWENSMSwgdyB8IFJYQ1IxX1JYRSk7Ci0Ja3MtPmVuYWJsZWQgPSB0cnVlOwotfSAgLyoga3NfZW5hYmxlICovCi0KIHN0YXRpYyBpbnQga3NfaHdfaW5pdChzdHJ1Y3Qga3NfbmV0ICprcykKIHsKICNkZWZpbmUJTUhFQURFUl9TSVpFCShzaXplb2Yoc3RydWN0IHR5cGVfZnJhbWVfaGVhZCkgKiBNQVhfUkVDVl9GUkFNRVMpCkBAIC0xNjEyLDExICsxNjA3LDkgQEAKIAogCWtzX3NvZnRfcmVzZXQoa3MsIEdSUl9HU1IpOwogCWtzX2h3X2luaXQoa3MpOwotCWtzX2Rpc2FibGUoa3MpOworCWtzX2Rpc2FibGVfcW11KGtzKTsKIAlrc19zZXR1cChrcyk7CiAJa3Nfc2V0dXBfaW50KGtzKTsKLQlrc19lbmFibGVfaW50KGtzKTsKLQlrc19lbmFibGUoa3MpOwogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBrcy0+bWFjX2FkZHIsIDYpOwogCiAJZGF0YSA9IGtzX3JkcmVnMTYoa3MsIEtTX09CQ1IpOwpAQCAtMTY1OCw2ICsxNjUxLDcgQEAKIAlzdHJ1Y3Qga3NfbmV0ICprcyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IHJlc291cmNlICppb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKKwlrZnJlZShrcy0+ZnJhbWVfaGVhZF9pbmZvKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlvdW5tYXAoa3MtPmh3X2FkZHIpOwogCWZyZWVfbmV0ZGV2KG5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2Z3LmMgYi9kcml2ZXJzL25ldC9tbHg0L2Z3LmMKaW5kZXggY2VlMTk5Yy4uM2MxNjYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZncuYwpAQCAtMzMsNiArMzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKICNpbmNsdWRlICJmdy5oIgogI2luY2x1ZGUgImljbS5oIgpAQCAtNjk4LDYgKzY5OSw3IEBACiAjZGVmaW5lIElOSVRfSENBX0lOX1NJWkUJCSAweDIwMAogI2RlZmluZSBJTklUX0hDQV9WRVJTSU9OX09GRlNFVAkJIDB4MDAwCiAjZGVmaW5lCSBJTklUX0hDQV9WRVJTSU9OCQkgMgorI2RlZmluZSBJTklUX0hDQV9DQUNIRUxJTkVfU1pfT0ZGU0VUCSAweDBlCiAjZGVmaW5lIElOSVRfSENBX0ZMQUdTX09GRlNFVAkJIDB4MDE0CiAjZGVmaW5lIElOSVRfSENBX1FQQ19PRkZTRVQJCSAweDAyMAogI2RlZmluZQkgSU5JVF9IQ0FfUVBDX0JBU0VfT0ZGU0VUCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MTApCkBAIC03MzUsNiArNzM3LDkgQEAKIAogCSooKHU4ICopIG1haWxib3gtPmJ1ZiArIElOSVRfSENBX1ZFUlNJT05fT0ZGU0VUKSA9IElOSVRfSENBX1ZFUlNJT047CiAKKwkqKCh1OCAqKSBtYWlsYm94LT5idWYgKyBJTklUX0hDQV9DQUNIRUxJTkVfU1pfT0ZGU0VUKSA9CisJCShpbG9nMihjYWNoZV9saW5lX3NpemUoKSkgLSA0KSA8PCA1OworCiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJKihpbmJveCArIElOSVRfSENBX0ZMQUdTX09GRlNFVCAvIDQpICY9IH5jcHVfdG9fYmUzMigxIDw8IDEpOwogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCmluZGV4IDNkZDQ4MWUuLjI5MWE1MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jCkBAIC0xMjgyLDYgKzEyODIsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM3MikgfSwgLyogTVQyNTQ1OCBDb25uZWN0WCBFTiAxMEdCQVNFLVQgMTBHaWdFICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2NzVhKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCtHZW4yIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLwogCXsgMCwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggNzM4NGY1OS4uZTEyMzdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0xMTYzLDYgKzExNjMsOCBAQAogCXUzMiBpbnRfdmVjX2JpdDsKIAl1MzIgaGVhcnRiaXQ7CiAKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CiAKIAlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKaW5kZXggMWM0NmRhNi4uMTdiYjM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTU0NSw2ICs1NDUsOCBAQAogI2RlZmluZQlORVRYRU5fTklVX1RFU1RfTVVYX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA5NCkKICNkZWZpbmUJTkVUWEVOX05JVV9YR19QQVVTRV9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwOTgpCiAjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUEFVU0VfTEVWRUwJKE5FVFhFTl9DUkJfTklVICsgMHgwMDBkYykKKyNkZWZpbmUJTkVUWEVOX05JVV9GUkFNRV9DT1VOVF9TRUxFQ1QJKE5FVFhFTl9DUkJfTklVICsgMHgwMDBhYykKKyNkZWZpbmUJTkVUWEVOX05JVV9GUkFNRV9DT1VOVAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDBiMCkKICNkZWZpbmUJTkVUWEVOX05JVV9YR19TRUwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAxMjgpCiAjZGVmaW5lIE5FVFhFTl9OSVVfR0JfUEFVU0VfQ1RMCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMzBjKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCAzMTg1YTk4Li41MmEzNzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTM4MywyNCArMzgzLDUxIEBACiAKIGludCBuZXR4ZW5fcDJfbmljX3NldF9wcm9taXNjKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIG1vZGUpCiB7Ci0JX191MzIgcmVnOworCXUzMiBtYWNfY2ZnOworCXUzMiBjbnQgPSAwOworCV9fdTMyIHJlZyA9IDB4MDIwMDsKIAl1MzIgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJdTE2IGJvYXJkX3R5cGUgPSBhZGFwdGVyLT5haHcuYm9hcmRfdHlwZTsKIAogCWlmIChwb3J0ID4gTkVUWEVOX05JVV9NQVhfWEdfUE9SVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVnID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSk7Ci0JaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9QUk9NSVNDX01PREUpCi0JCXJlZyA9IChyZWcgfCAweDIwMDBVTCk7Ci0JZWxzZQotCQlyZWcgPSAocmVnICYgfjB4MjAwMFVMKTsKKwltYWNfY2ZnID0gTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wICsgKDB4MTAwMDAgKiBwb3J0KSk7CisJbWFjX2NmZyAmPSB+MHg0OworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCArICgweDEwMDAwICogcG9ydCksIG1hY19jZmcpOwogCi0JaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9BTExNVUxUSV9NT0RFKQotCQlyZWcgPSAocmVnIHwgMHgxMDAwVUwpOwotCWVsc2UKLQkJcmVnID0gKHJlZyAmIH4weDEwMDBVTCk7CisJaWYgKChib2FyZF90eXBlID09IE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVopIHx8CisJCQkoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaKSkKKwkJcmVnID0gKDB4MjAgPDwgcG9ydCk7CiAKLQlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEgKyAoMHgxMDAwMCAqIHBvcnQpLCByZWcpOworCU5YV1IzMihhZGFwdGVyLCBORVRYRU5fTklVX0ZSQU1FX0NPVU5UX1NFTEVDVCwgcmVnKTsKKworCW1kZWxheSgxMCk7CisKKwl3aGlsZSAoTlhSRDMyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfRlJBTUVfQ09VTlQpICYmICsrY250IDwgMjApCisJCW1kZWxheSgxMCk7CisKKwlpZiAoY250IDwgMjApIHsKKworCQlyZWcgPSBOWFJEMzIoYWRhcHRlciwKKwkJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSk7CisKKwkJaWYgKG1vZGUgPT0gTkVUWEVOX05JVV9QUk9NSVNDX01PREUpCisJCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOworCQllbHNlCisJCQlyZWcgPSAocmVnICYgfjB4MjAwMFVMKTsKKworCQlpZiAobW9kZSA9PSBORVRYRU5fTklVX0FMTE1VTFRJX01PREUpCisJCQlyZWcgPSAocmVnIHwgMHgxMDAwVUwpOworCQllbHNlCisJCQlyZWcgPSAocmVnICYgfjB4MTAwMFVMKTsKKworCQlOWFdSMzIoYWRhcHRlciwKKwkJCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18xICsgKDB4MTAwMDAgKiBwb3J0KSwgcmVnKTsKKwl9CisKKwltYWNfY2ZnIHw9IDB4NDsKKwlOWFdSMzIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzAgKyAoMHgxMDAwMCAqIHBvcnQpLCBtYWNfY2ZnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDM2LDcgKzQ2Myw3IEBACiB7CiAJdTMyCXZhbCA9IDA7CiAJdTE2IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXU4ICphZGRyID0gYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkcjsKKwl1OCAqYWRkciA9IGFkYXB0ZXItPm1hY19hZGRyOwogCiAJaWYgKGFkYXB0ZXItPm1jX2VuYWJsZWQpCiAJCXJldHVybiAwOwpAQCAtNDY1LDcgKzQ5Miw3IEBACiB7CiAJdTMyCXZhbCA9IDA7CiAJdTE2IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXU4ICphZGRyID0gYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkcjsKKwl1OCAqYWRkciA9IGFkYXB0ZXItPm1hY19hZGRyOwogCiAJaWYgKCFhZGFwdGVyLT5tY19lbmFibGVkKQogCQlyZXR1cm4gMDsKQEAgLTY2MCw3ICs2ODcsNyBAQAogCiAJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZhZGFwdGVyLT5tYWNfbGlzdCwgJmRlbF9saXN0KTsKIAotCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIG5ldGRldi0+ZGV2X2FkZHIsICZkZWxfbGlzdCk7CisJbnhfcDNfbmljX2FkZF9tYWMoYWRhcHRlciwgYWRhcHRlci0+bWFjX2FkZHIsICZkZWxfbGlzdCk7CiAJbnhfcDNfbmljX2FkZF9tYWMoYWRhcHRlciwgYmNhc3RfYWRkciwgJmRlbF9saXN0KTsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwppbmRleCBlNDBiOTE0Li44YTA5MDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pbml0LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC01NDQsNiArNTQ0LDggQEAKIAkJCQljb250aW51ZTsKIAkJCWlmIChvZmYgPT0gKFJPTVVTQl9HTEIgKyAweDFjKSkgLyogTVMgY2xvY2sgKi8KIAkJCQljb250aW51ZTsKKwkJCWlmICgob2ZmICYgMHgwZmYwMDAwMCkgPT0gTkVUWEVOX0NSQl9ERFJfTkVUKQorCQkJCWNvbnRpbnVlOwogCQkJaWYgKG9mZiA9PSAoTkVUWEVOX0NSQl9QRUdfTkVUXzEgKyAweDE4KSkKIAkJCQlidWZbaV0uZGF0YSA9IDB4MTAyMDsKIAkJCS8qIHNraXAgdGhlIGZ1bmN0aW9uIGVuYWJsZSByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDBiNGE1NmEuLjNiZjc4ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTQzNyw2ICs0MzcsNyBAQAogCQluZXRkZXYtPmRldl9hZGRyW2ldID0gKihwICsgNSAtIGkpOwogCiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBuZXRkZXYtPmRldl9hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkoYWRhcHRlci0+bWFjX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJLyogc2V0IHN0YXRpb24gYWRkcmVzcyAqLwogCkBAIC00NTksNiArNDYwLDcgQEAKIAkJbmV0eGVuX25hcGlfZGlzYWJsZShhZGFwdGVyKTsKIAl9CiAKKwltZW1jcHkoYWRhcHRlci0+bWFjX2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBhZGRyLT5zYV9kYXRhKTsKIApAQCAtOTU2LDcgKzk1OCw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQotCQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKKwkJYWRhcHRlci0+bWFjYWRkcl9zZXQoYWRhcHRlciwgYWRhcHRlci0+bWFjX2FkZHIpOwogCiAJYWRhcHRlci0+c2V0X211bHRpKG5ldGRldik7CiAJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uczgzODIwLmMgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKaW5kZXggYzU5NGUxOS4uNTdmZDQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtMTExLDYgKzExMSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDZkMjhiMTguLmMxYjNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKaW5kZXggZWUzNjZjNS4uYzljNzBhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMDAwLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMgYi9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCmluZGV4IGNlZTAwYWQuLjQ5ZWI5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJZWZ4X293b3JkX3QgcmVnOwogCiAJLyogR1BJTyAzIGFuZCB0aGUgR1BJTyByZWdpc3RlciBhcmUgc2hhcmVkIHdpdGggSTJDLCBzbyBibG9jayB0aGF0ICovCi0JbXV0ZXhfbG9jaygmZWZ4LT5pMmNfYWRhcC5idXNfbG9jayk7CisJaTJjX2xvY2tfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAKIAkvKiBQdWxsIFJTVF9OIChHUElPIDIpIGxvdyB0aGVuIGxldCBpdCB1cCBhZ2Fpbiwgc2V0dGluZyB0aGUKIAkgKiBGTEFTSF9DRkdfMSBzdHJhcCAoR1BJTyAzKSBhcHByb3ByaWF0ZWx5LiAgT25seSBjaGFuZ2UgdGhlCkBAIC0yMDQsNyArMjA0LDcgQEAKIAlmYWxjb25fd3JpdGUoZWZ4LCAmcmVnLCBHUElPX0NUTF9SRUdfS0VSKTsKIAltc2xlZXAoMSk7CiAKLQltdXRleF91bmxvY2soJmVmeC0+aTJjX2FkYXAuYnVzX2xvY2spOworCWkyY191bmxvY2tfYWRhcHRlcigmZWZ4LT5pMmNfYWRhcCk7CiAKIAlzc2xlZXAoMSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXM5MDAuYyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCmluZGV4IDk3OTQ5ZDAuLmMwNzJmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczkwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczkwMC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCmluZGV4IDM4YTUwOGIuLmIyNzE1NmVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC03Myw2ICs3Myw3IEBACiAKIC8qIEluY2x1ZGUgZmlsZXMgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDAxZjY4MTEuLjhmNTQxNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwLmMKaW5kZXggZTE3YzUzNS4uZmUzY2ViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaXAuYwpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggYzJmMTRkYy4uOTU0Mjk5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTQxNiwxMyArNDE2LDggQEAKIAl1bnNpZ25lZCBpbnQgdHhzaXplID0gcHJpdi0+ZG1hX3R4X3NpemU7CiAJdW5zaWduZWQgaW50IHJ4c2l6ZSA9IHByaXYtPmRtYV9yeF9zaXplOwogCXVuc2lnbmVkIGludCBiZnNpemUgPSBwcml2LT5kbWFfYnVmX3N6OwotCWludCBidWZmMl9uZWVkZWQgPSAwOwotCWludCBkaXNfaWMgPSAwOworCWludCBidWZmMl9uZWVkZWQgPSAwLCBkaXNfaWMgPSAwOwogCi0jaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCS8qIFVzaW5nIFRpbWVycyBkaXNhYmxlIGludGVycnVwdHMgb24gY29tcGxldGlvbiBmb3IgdGhlIHJlY2VwdGlvbiAqLwotCWRpc19pYyA9IDE7Ci0jZW5kaWYKIAkvKiBTZXQgdGhlIEJ1ZmZlciBzaXplIGFjY29yZGluZyB0byB0aGUgTVRVOwogCSAqIGluZGVlZCwgaW4gY2FzZSBvZiBqdW1ibyB3ZSBuZWVkIHRvIGJ1bXAtdXAgdGhlIGJ1ZmZlciBzaXplcy4KIAkgKi8KQEAgLTQzNyw2ICs0MzIsMTEgQEAKIAllbHNlCiAJCWJmc2l6ZSA9IERNQV9CVUZGRVJfU0laRTsKIAorI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgb24gY29tcGxldGlvbiBmb3IgdGhlIHJlY2VwdGlvbiBpZiB0aW1lciBpcyBvbiAqLworCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCWRpc19pYyA9IDE7CisjZW5kaWYKIAkvKiBJZiB0aGUgTVRVIGV4Y2VlZHMgOGsgc28gdXNlIHRoZSBzZWNvbmQgYnVmZmVyIGluIHRoZSBjaGFpbiAqLwogCWlmIChiZnNpemUgPj0gQlVGX1NJWkVfOEtpQikKIAkJYnVmZjJfbmVlZGVkID0gMTsKQEAgLTgwOSwyMCArODA5LDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZW5hYmxlX2lycShzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCiB7Ci0jaWZuZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7Ci0jZWxzZQotCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOworI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKKwlpZiAobGlrZWx5KHByaXYtPnRtLT5lbmFibGUpKQorCQlwcml2LT50bS0+dGltZXJfc3RhcnQodG1yYXRlKTsKKwllbHNlCiAjZW5kaWYKKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBwcml2LT5kZXYtPmJhc2VfYWRkciArIERNQV9JTlRSX0VOQSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZGlzYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewotI2lmbmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCi0Jd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKLSNlbHNlCi0JcHJpdi0+dG0tPnRpbWVyX3N0b3AoKTsKKyNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCisJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKKwkJcHJpdi0+dG0tPnRpbWVyX3N0b3AoKTsKKwllbHNlCiAjZW5kaWYKKwl3cml0ZWwoMCwgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOwogfQogCiBzdGF0aWMgaW50IHN0bW1hY19oYXNfd29yayhzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYpCkBAIC0xMDMxLDIyICsxMDMzLDIzIEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgotCXByaXYtPnRtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0bW1hY190aW1lciAqKSwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+dG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtbWFjX3RpbWVyICopLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkocHJpdi0+dG0gPT0gTlVMTCkpIHsKIAkJcHJfZXJyKCIlczogRVJST1I6IHRpbWVyIG1lbW9yeSBhbGxvYyBmYWlsZWQgXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlwcml2LT50bS0+ZnJlcSA9IHRtcmF0ZTsKIAotCS8qIFRlc3QgaWYgdGhlIEhXIHRpbWVyIGNhbiBiZSBhY3R1YWxseSB1c2VkLgotCSAqIEluIGNhc2Ugb2YgZmFpbHVyZSBjb250aW51ZSB3aXRoIG5vIHRpbWVyLiAqLworCS8qIFRlc3QgaWYgdGhlIGV4dGVybmFsIHRpbWVyIGNhbiBiZSBhY3R1YWxseSB1c2VkLgorCSAqIEluIGNhc2Ugb2YgZmFpbHVyZSBjb250aW51ZSB3aXRob3V0IHRpbWVyLiAqLwogCWlmICh1bmxpa2VseSgoc3RtbWFjX29wZW5fZXh0X3RpbWVyKGRldiwgcHJpdi0+dG0pKSA8IDApKSB7Ci0JCXByX3dhcm5pbmcoInN0bW1hY2V0aDogY2Fubm90IGF0dGFjaCB0aGUgSFcgdGltZXJcbiIpOworCQlwcl93YXJuaW5nKCJzdG1tYWNldGg6IGNhbm5vdCBhdHRhY2ggdGhlIGV4dGVybmFsIHRpbWVyLlxuIik7CiAJCXRtcmF0ZSA9IDA7CiAJCXByaXYtPnRtLT5mcmVxID0gMDsKIAkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0ID0gc3RtbWFjX25vX3RpbWVyX3N0YXJ0ZWQ7CiAJCXByaXYtPnRtLT50aW1lcl9zdG9wID0gc3RtbWFjX25vX3RpbWVyX3N0b3BwZWQ7Ci0JfQorCX0gZWxzZQorCQlwcml2LT50bS0+ZW5hYmxlID0gMTsKICNlbmRpZgogCiAJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBUWC9SWCBkZXNjcmlwdG9ycyBjaGFpbnMuICovCkBAIC0xMzIyLDkgKzEzMjUsMTEgQEAKIAogCS8qIEludGVycnVwdCBvbiBjb21wbGV0aXRpb24gb25seSBmb3IgdGhlIGxhdGVzdCBzZWdtZW50ICovCiAJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xvc2VfdHhfZGVzYyhkZXNjKTsKKwogI2lmZGVmIENPTkZJR19TVE1NQUNfVElNRVIKLQkvKiBDbGVhbiBJQyB3aGlsZSB1c2luZyB0aW1lcnMgKi8KLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbGVhcl90eF9pYyhkZXNjKTsKKwkvKiBDbGVhbiBJQyB3aGlsZSB1c2luZyB0aW1lciAqLworCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCXByaXYtPm1hY190eXBlLT5vcHMtPmNsZWFyX3R4X2ljKGRlc2MpOwogI2VuZGlmCiAJLyogVG8gYXZvaWQgcmFpc2UgY29uZGl0aW9uICovCiAJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3R4X293bmVyKGZpcnN0KTsKQEAgLTIwMjgsNyArMjAzMyw4IEBACiAKICNpZmRlZiBDT05GSUdfU1RNTUFDX1RJTUVSCiAJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7Ci0JCWRpc19pYyA9IDE7CisJCWlmIChsaWtlbHkocHJpdi0+dG0tPmVuYWJsZSkpCisJCQlkaXNfaWMgPSAxOwogI2VuZGlmCiAJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuYwppbmRleCBiODM4YzY1Li42NzlmNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5jCkBAIC02Myw3ICs2Myw3IEBACiAKIAlzdG1tYWNfcnRjID0gcnRjX2NsYXNzX29wZW4oQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSk7CiAJaWYgKHN0bW1hY19ydGMgPT0gTlVMTCkgewotCQlwcl9lcnJvcigib3BlbiBydGMgZGV2aWNlIGZhaWxlZFxuIik7CisJCXByX2Vycigib3BlbiBydGMgZGV2aWNlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzEsNyArNzEsNyBAQAogCiAJLyogUGVyaW9kaWMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkICovCiAJaWYgKChydGNfaXJxX3NldF9mcmVxKHN0bW1hY19ydGMsICZzdG1tYWNfdGFzaywgdG0tPmZyZXEpIDwgMCkpIHsKLQkJcHJfZXJyb3IoInNldCBwZXJpb2RpYyBmYWlsZWRcbiIpOworCQlwcl9lcnIoInNldCBwZXJpb2RpYyBmYWlsZWRcbiIpOwogCQlydGNfaXJxX3VucmVnaXN0ZXIoc3RtbWFjX3J0YywgJnN0bW1hY190YXNrKTsKIAkJcnRjX2NsYXNzX2Nsb3NlKHN0bW1hY19ydGMpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX3RpbWVyLmgKaW5kZXggZjc5NWNhZS4uNjg2MzU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY190aW1lci5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfdGltZXIuaApAQCAtMjYsNiArMjYsNyBAQAogCXZvaWQgKCp0aW1lcl9zdGFydCkgKHVuc2lnbmVkIGludCBuZXdfZnJlcSk7CiAJdm9pZCAoKnRpbWVyX3N0b3ApICh2b2lkKTsKIAl1bnNpZ25lZCBpbnQgZnJlcTsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlOwogfTsKIAogLyogT3BlbiB0aGUgSFcgdGltZXIgZGV2aWNlIGFuZCByZXR1cm4gMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggMTkyN2IzZC4uNjE2NDBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCmluZGV4IDZhM2M3NTEuLjc1ZmEzMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCkBAIC0xMDgsNiArMTA4LDcgQEAKICNkZWZpbmUgSUJNVFJfREVCVUdfTUVTU0FHRVMgMAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2lmZGVmIFBDTUNJQQkJLyogcmVxdWlyZWQgZm9yIGlibXRyX2NzLmMgdG8gYnVpbGQgKi8KICN1bmRlZiBNT0RVTEUJCS8qIHllcywgcmVhbGx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmMgYi9kcml2ZXJzL25ldC90eXBob29uLmMKaW5kZXggZDZkMzQ1Mi4uNTkyMWY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtMTA4LDYgKzEwOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBmYTRlNTgxLi40M2JjM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC0zNzgsNyArMzc4LDcgQEAKIH0KIAogI2RlZmluZSBEVU1QKGJ1Zl8sIGxlbl8pCVwKLQlkYmdfZHVtcChfX0xJTkVfXywgX19mdW5jX18sIGJ1Zl8sIGxlbl8pCisJZGJnX2R1bXAoX19MSU5FX18sIF9fZnVuY19fLCAodW5zaWduZWQgY2hhciAqKWJ1Zl8sIGxlbl8pCiAKICNkZWZpbmUgRFVNUDEoYnVmXywgbGVuXykJCQlcCiAJZG8gewkJCQkJXApAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAkvKiByZXNldCB0aGUgcnRzIGFuZCBkdHIgKi8KIAkvKiBkbyB0aGUgYWN0dWFsIGNsb3NlICovCiAJc2VyaWFsLT5vcGVuX2NvdW50LS07Ci0Ja3JlZl9wdXQoJnNlcmlhbC0+cGFyZW50LT5yZWYsIGhzb19zZXJpYWxfcmVmX2ZyZWUpOworCiAJaWYgKHNlcmlhbC0+b3Blbl9jb3VudCA8PSAwKSB7CiAJCXNlcmlhbC0+b3Blbl9jb3VudCA9IDA7CiAJCXNwaW5fbG9ja19pcnEoJnNlcmlhbC0+c2VyaWFsX2xvY2spOwpAQCAtMTM4Myw2ICsxMzgzLDggQEAKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+cGFyZW50LT5pbnRlcmZhY2UpOwogCiAJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPnBhcmVudC0+bXV0ZXgpOworCisJa3JlZl9wdXQoJnNlcmlhbC0+cGFyZW50LT5yZWYsIGhzb19zZXJpYWxfcmVmX2ZyZWUpOwogfQogCiAvKiBjbG9zZSB0aGUgcmVxdWVzdGVkIHNlcmlhbCBwb3J0ICovCkBAIC0xNTI3LDcgKzE1MjksNyBAQAogCQlkZXZfd2FybigmdXNiLT5kZXYsCiAJCQkgImhzbyByZWNlaXZlZCBpbnZhbGlkIHNlcmlhbCBzdGF0ZSBub3RpZmljYXRpb25cbiIpOwogCQlEVU1QKHNlcmlhbF9zdGF0ZV9ub3RpZmljYXRpb24sCi0JCSAgICAgc2l6ZW9mKGhzb19zZXJpYWxfc3RhdGVfbm90aWZhdGlvbikpCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBoc29fc2VyaWFsX3N0YXRlX25vdGlmaWNhdGlvbikpOwogCX0gZWxzZSB7CiAKIAkJVUFSVF9zdGF0ZV9iaXRtYXAgPSBsZTE2X3RvX2NwdShzZXJpYWxfc3RhdGVfbm90aWZpY2F0aW9uLT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCmluZGV4IDBjYWE4MDAuLmY1NmRlYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwpAQCAtMzYyLDEyICszNjIsMTIgQEAKIAkJCXJldHZhbCA9IC1FSU5WQUw7CiAJCQlnb3RvIGhhbHRfZmFpbF9hbmRfcmVsZWFzZTsKIAkJfQotCQlkZXYtPmhhcmRfbXR1ID0gdG1wOwotCQluZXQtPm10dSA9IGRldi0+aGFyZF9tdHUgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKIAkJZGV2X3dhcm4oJmludGYtPmRldiwKIAkJCSAiZGV2IGNhbid0IHRha2UgJXUgYnl0ZSBwYWNrZXRzIChtYXggJXUpLCAiCiAJCQkgImFkanVzdGluZyBNVFUgdG8gJXVcbiIsCi0JCQkgZGV2LT5oYXJkX210dSwgdG1wLCBuZXQtPm10dSk7CisJCQkgZGV2LT5oYXJkX210dSwgdG1wLCB0bXAgLSBuZXQtPmhhcmRfaGVhZGVyX2xlbik7CisJCWRldi0+aGFyZF9tdHUgPSB0bXA7CisJCW5ldC0+bXR1ID0gZGV2LT5oYXJkX210dSAtIG5ldC0+aGFyZF9oZWFkZXJfbGVuOwogCX0KIAogCS8qIFJFVklTSVQ6ICBwZXJpcGhlcmFsICJhbGlnbm1lbnQiIHJlcXVlc3QgaXMgaWdub3JlZCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZldGguYyBiL2RyaXZlcnMvbmV0L3ZldGguYwppbmRleCBhZGU1YjM0Li41MmFmNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdmV0aC5jCkBAIC0yMTAsMzIgKzIxMCwyOSBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp2ZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmRldl9zdGF0czsKIAlpbnQgY3B1OwotCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHM7CisJc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0cywgdG90YWwgPSB7MH07CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlkZXZfc3RhdHMgPSAmZGV2LT5zdGF0czsKIAotCWRldl9zdGF0cy0+cnhfcGFja2V0cyA9IDA7Ci0JZGV2X3N0YXRzLT50eF9wYWNrZXRzID0gMDsKLQlkZXZfc3RhdHMtPnJ4X2J5dGVzID0gMDsKLQlkZXZfc3RhdHMtPnR4X2J5dGVzID0gMDsKLQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgPSAwOwotCWRldl9zdGF0cy0+cnhfZHJvcHBlZCA9IDA7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKIAotCQlkZXZfc3RhdHMtPnJ4X3BhY2tldHMgKz0gc3RhdHMtPnJ4X3BhY2tldHM7Ci0JCWRldl9zdGF0cy0+dHhfcGFja2V0cyArPSBzdGF0cy0+dHhfcGFja2V0czsKLQkJZGV2X3N0YXRzLT5yeF9ieXRlcyArPSBzdGF0cy0+cnhfYnl0ZXM7Ci0JCWRldl9zdGF0cy0+dHhfYnl0ZXMgKz0gc3RhdHMtPnR4X2J5dGVzOwotCQlkZXZfc3RhdHMtPnR4X2Ryb3BwZWQgKz0gc3RhdHMtPnR4X2Ryb3BwZWQ7Ci0JCWRldl9zdGF0cy0+cnhfZHJvcHBlZCArPSBzdGF0cy0+cnhfZHJvcHBlZDsKKwkJdG90YWwucnhfcGFja2V0cyArPSBzdGF0cy0+cnhfcGFja2V0czsKKwkJdG90YWwudHhfcGFja2V0cyArPSBzdGF0cy0+dHhfcGFja2V0czsKKwkJdG90YWwucnhfYnl0ZXMgICArPSBzdGF0cy0+cnhfYnl0ZXM7CisJCXRvdGFsLnR4X2J5dGVzICAgKz0gc3RhdHMtPnR4X2J5dGVzOworCQl0b3RhbC50eF9kcm9wcGVkICs9IHN0YXRzLT50eF9kcm9wcGVkOworCQl0b3RhbC5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMgPSB0b3RhbC5yeF9wYWNrZXRzOworCWRldi0+c3RhdHMudHhfcGFja2V0cyA9IHRvdGFsLnR4X3BhY2tldHM7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyAgID0gdG90YWwucnhfYnl0ZXM7CisJZGV2LT5zdGF0cy50eF9ieXRlcyAgID0gdG90YWwudHhfYnl0ZXM7CisJZGV2LT5zdGF0cy50eF9kcm9wcGVkID0gdG90YWwudHhfZHJvcHBlZDsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQgPSB0b3RhbC5yeF9kcm9wcGVkOwogCi0JcmV0dXJuIGRldl9zdGF0czsKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIHN0YXRpYyBpbnQgdmV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggYmI4YjUyZC4uYjllMDAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKaW5kZXggOTY5M2IwZi4uMGJkODk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYworKysgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCA2NjM2MGEyLi5lMmMzM2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTc2LDYgKzc2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCAyNTczYzE4Li5jZDhjYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBwcmludGsoKSwgYW5kIG90aGVyIHVzZWZ1bCBzdHVmZiAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkvKiBpbmxpbmUgbWVtc2V0KCksIGV0Yy4gKi8KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4JCS8qIGttYWxsb2MoKSwga2ZyZWUoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgkvKiBvZmZzZXRvZigpLCBldGMuICovCiAjaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CS8qIFdBTiByb3V0ZXIgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggODFjOGFlYy4uMDdkMDBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTgxLDYgKzgxLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggM2U5MGViOC4uYmVkYTM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbjIuYyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCmluZGV4IDgzZGE1OTYuLjU4YzY2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9uMi5jCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwppbmRleCBhNTJmMjljLi5mMTM0MGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwppbmRleCBkYmJmMGQxLi45YjkwNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAieG1pdC5oIgogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAKIHN0YXRpYyB1MTYgZ2VuZXJhdGVfY29va2llKHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCAxZDkyMjNiLi40YjYwMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waHkuYwppbmRleCAxMTMxOWVjLi5hYWYyMjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3BoeS5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgImI0M2xlZ2FjeS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwppbmRleCA2ZmExNGE0Li40ZGZiNDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2luZm8uYwpAQCAtMSw2ICsxLDcgQEAKIC8qIEhvc3QgQVAgZHJpdmVyIEluZm8gRnJhbWUgcHJvY2Vzc2luZyAocGFydCBvZiBob3N0YXAubyBtb2R1bGUpICovCiAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImhvc3RhcF93bGFuLmgiCiAjaW5jbHVkZSAiaG9zdGFwLmgiCiAjaW5jbHVkZSAiaG9zdGFwX2FwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggM2YyYmRhOC4uOTQxOWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMSw2ICsxLDcgQEAKIC8qIGlvY3RsKCkgKG1vc3RseSBMaW51eCBXaXJlbGVzcyBFeHRlbnNpb25zKSByb3V0aW5lcyBmb3IgSG9zdCBBUCBkcml2ZXIgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCmluZGV4IDBkMzBhOWUuLmE2Y2E1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jCkBAIC0zMCw2ICszMCw3IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiaXB3MjIwMC5oIgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCAyMzFjODMzLi5mMDU5YjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCBhMjJhMDUwLi42ZjcwM2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCA1MjRlN2U0Li42ZTZmNTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggODc3YWY0NC4uOTIxZGM0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IDQ4NGQ1YzEuLjJkYzkyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKaW5kZXggNTMyYzhkNi4uYTY4NTZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAogI2luY2x1ZGUgIml3bC1kZXYuaCIgLyogRklYTUU6IHJlbW92ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKaW5kZXggYzE4OTA3NS4uZmI5YmNmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCkBAIC0yOCw2ICsyOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgogI2luY2x1ZGUgIml3bC1kZXYuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCmluZGV4IDgzN2ExOTMuLmQwMGE4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCmluZGV4IGE1NmEyYjAuLmYzYzU1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jZmc4MDIxMS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9jb21tYW5kcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKaW5kZXggMjNiNTJmYS4uODQxNThiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2NvbW1hbmRzLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgIml3bS5oIgogI2luY2x1ZGUgImJ1cy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9tYWluLmMKaW5kZXggZDY2OGU0Ny4uMjIyZWIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbWFpbi5jCkBAIC0zOCw2ICszOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKaW5kZXggNDBkYmNiYy4uNzcxYTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA2ODUwOTgxLi4wYTMyNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJob3N0LmgiCiAjaW5jbHVkZSAiaG9zdGNtZC5oIgogI2luY2x1ZGUgImRlY2wuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCmluZGV4IDRjMDE4ZjcuLjhjMzc2NmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKQEAgLTMsNiArMyw3IEBACiAgICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSAiaG9zdGNtZC5oIgogI2luY2x1ZGUgInJhZGlvdGFwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwppbmRleCA0Yzk3YzZhLi5iYzA4NDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKaW5kZXggZTI2ZDdiMy4uMjUwNWJlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jCmluZGV4IGY3YzY3N2UuLjY5ZDJmODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggODhjZDU4ZS4uMWM4OGMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTI4NzksNyArMjg3OSw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCXN0YXRpYyBjaGFyIHByb2NfZXNzaWRbMzNdOwotCWludCBsZW4gPSBjb3VudDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gY291bnQ7CiAKIAlpZiAobGVuID4gMzIpCiAJCWxlbiA9IDMyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwppbmRleCA3YjNlZThjLi42OGJjOWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInJ0MngwMC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9tZGlvLmMgYi9kcml2ZXJzL29mL29mX21kaW8uYwppbmRleCBiYWNhYTUzLi40YjIyYmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL29mX21kaW8uYworKysgYi9kcml2ZXJzL29mL29mX21kaW8uYwpAQCAtOTcsNiArOTcsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19yZWdpc3Rlcik7CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3Igb2ZfcGh5X2ZpbmRfZGV2aWNlICovCitzdGF0aWMgaW50IG9mX3BoeV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnBoeV9ucCkKK3sKKwlyZXR1cm4gZGV2X2FyY2hkYXRhX2dldF9ub2RlKCZkZXYtPmFyY2hkYXRhKSA9PSBwaHlfbnA7Cit9CisKIC8qKgogICogb2ZfcGh5X2ZpbmRfZGV2aWNlIC0gR2l2ZSBhIFBIWSBub2RlLCBmaW5kIHRoZSBwaHlfZGV2aWNlCiAgKiBAcGh5X25wOiBQb2ludGVyIHRvIHRoZSBwaHkncyBkZXZpY2UgdHJlZSBub2RlCkBAIC0xMDYsMTUgKzExMiwxMCBAQAogc3RydWN0IHBoeV9kZXZpY2UgKm9mX3BoeV9maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoeV9ucCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkOwotCWludCBtYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnBoeV9ucCkKLQl7Ci0JCXJldHVybiBkZXZfYXJjaGRhdGFfZ2V0X25vZGUoJmRldi0+YXJjaGRhdGEpID09IHBoeV9ucDsKLQl9Ci0KIAlpZiAoIXBoeV9ucCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlkID0gYnVzX2ZpbmRfZGV2aWNlKCZtZGlvX2J1c190eXBlLCBOVUxMLCBwaHlfbnAsIG1hdGNoKTsKKwlkID0gYnVzX2ZpbmRfZGV2aWNlKCZtZGlvX2J1c190eXBlLCBOVUxMLCBwaHlfbnAsIG9mX3BoeV9tYXRjaCk7CiAJcmV0dXJuIGQgPyB0b19waHlfZGV2aWNlKGQpIDogTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0wob2ZfcGh5X2ZpbmRfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMgYi9kcml2ZXJzL29wcm9maWxlL2V2ZW50X2J1ZmZlci5jCmluZGV4IDJiN2FlMzYuLjVkZjYwYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvZXZlbnRfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9ldmVudF9idWZmZXIuYwpAQCAtMzUsMTIgKzM1LDIzIEBACiAvKiBhdG9taWNfdCBiZWNhdXNlIHdhaXRfZXZlbnQgY2hlY2tzIGl0IG91dHNpZGUgb2YgYnVmZmVyX211dGV4ICovCiBzdGF0aWMgYXRvbWljX3QgYnVmZmVyX3JlYWR5ID0gQVRPTUlDX0lOSVQoMCk7CiAKLS8qIEFkZCBhbiBlbnRyeSB0byB0aGUgZXZlbnQgYnVmZmVyLiBXaGVuIHdlCi0gKiBnZXQgbmVhciB0byB0aGUgZW5kIHdlIHdha2UgdXAgdGhlIHByb2Nlc3MKLSAqIHNsZWVwaW5nIG9uIHRoZSByZWFkKCkgb2YgdGhlIGZpbGUuCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHRoZSBldmVudCBidWZmZXIuIFdoZW4gd2UgZ2V0IG5lYXIgdG8gdGhlIGVuZCB3ZQorICogd2FrZSB1cCB0aGUgcHJvY2VzcyBzbGVlcGluZyBvbiB0aGUgcmVhZCgpIG9mIHRoZSBmaWxlLiBUbyBwcm90ZWN0CisgKiB0aGUgZXZlbnRfYnVmZmVyIHRoaXMgZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIHdoZW4gYnVmZmVyX211dGV4CisgKiBpcyBzZXQuCiAgKi8KIHZvaWQgYWRkX2V2ZW50X2VudHJ5KHVuc2lnbmVkIGxvbmcgdmFsdWUpCiB7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4gc2luY2UgYWxsIHdvcmtxdWV1ZXMgb3IgaGFuZGxlcnMgYXJlCisJICogY2FuY2VsZWQgb3IgZmx1c2hlZCBiZWZvcmUgdGhlIGV2ZW50IGJ1ZmZlciBpcyBmcmVlZC4KKwkgKi8KKwlpZiAoIWV2ZW50X2J1ZmZlcikgeworCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoYnVmZmVyX3BvcyA9PSBidWZmZXJfc2l6ZSkgewogCQlhdG9taWNfaW5jKCZvcHJvZmlsZV9zdGF0cy5ldmVudF9sb3N0X292ZXJmbG93KTsKIAkJcmV0dXJuOwpAQCAtNjksNyArODAsNiBAQAogCiBpbnQgYWxsb2NfZXZlbnRfYnVmZmVyKHZvaWQpCiB7Ci0JaW50IGVyciA9IC1FTk9NRU07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvcHJvZmlsZWZzX2xvY2ssIGZsYWdzKTsKQEAgLTgwLDIxICs5MCwyMiBAQAogCWlmIChidWZmZXJfd2F0ZXJzaGVkID49IGJ1ZmZlcl9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWJ1ZmZlcl9wb3MgPSAwOwogCWV2ZW50X2J1ZmZlciA9IHZtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogYnVmZmVyX3NpemUpOwogCWlmICghZXZlbnRfYnVmZmVyKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQllcnIgPSAwOwotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIAogdm9pZCBmcmVlX2V2ZW50X2J1ZmZlcih2b2lkKQogeworCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7CiAJdmZyZWUoZXZlbnRfYnVmZmVyKTsKLQorCWJ1ZmZlcl9wb3MgPSAwOwogCWV2ZW50X2J1ZmZlciA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZidWZmZXJfbXV0ZXgpOwogfQogCiAKQEAgLTE2Nyw2ICsxNzgsMTIgQEAKIAogCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7CiAKKwkvKiBNYXkgaGFwcGVuIGlmIHRoZSBidWZmZXIgaXMgZnJlZWQgZHVyaW5nIHBlbmRpbmcgcmVhZHMuICovCisJaWYgKCFldmVudF9idWZmZXIpIHsKKwkJcmV0dmFsID0gLUVJTlRSOworCQlnb3RvIG91dDsKKwl9CisKIAlhdG9taWNfc2V0KCZidWZmZXJfcmVhZHksIDApOwogCiAJcmV0dmFsID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2RtYXIuYyBiL2RyaXZlcnMvcGNpL2RtYXIuYwppbmRleCAxNGJiYWExLi5lNWY4ZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9kbWFyLmMKKysrIGIvZHJpdmVycy9wY2kvZG1hci5jCkBAIC0xNzUsMTUgKzE3NSw2IEBACiAJaW50IHJldCA9IDA7CiAKIAlkcmhkID0gKHN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqKWhlYWRlcjsKLQlpZiAoIWRyaGQtPmFkZHJlc3MpIHsKLQkJLyogUHJvbW90ZSBhbiBhdHRpdHVkZSBvZiB2aW9sZW5jZSB0byBhIEJJT1MgZW5naW5lZXIgdG9kYXkgKi8KLQkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BUiByZXBvcnRlZCBhdCBhZGRyZXNzIHplcm8hXG4iCi0JCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFTkRPUiksCi0JCSAgICAgZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSwKLQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCWRtYXJ1ID0ga3phbGxvYyhzaXplb2YoKmRtYXJ1KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbWFydSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0zNTQsNiArMzQ1LDcgQEAKIAlzdHJ1Y3QgYWNwaV9kbWFyX2hhcmR3YXJlX3VuaXQgKmRyaGQ7CiAJc3RydWN0IGFjcGlfZG1hcl9yZXNlcnZlZF9tZW1vcnkgKnJtcnI7CiAJc3RydWN0IGFjcGlfZG1hcl9hdHNyICphdHNyOworCXN0cnVjdCBhY3BpX2RtYXJfcmhzYSAqcmhzYTsKIAogCXN3aXRjaCAoaGVhZGVyLT50eXBlKSB7CiAJY2FzZSBBQ1BJX0RNQVJfVFlQRV9IQVJEV0FSRV9VTklUOgpAQCAtMzc1LDYgKzM2NywxMiBAQAogCQlhdHNyID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IGFjcGlfZG1hcl9hdHNyLCBoZWFkZXIpOwogCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiQVRTUiBmbGFnczogJSN4XG4iLCBhdHNyLT5mbGFncyk7CiAJCWJyZWFrOworCWNhc2UgQUNQSV9ETUFSX0hBUkRXQVJFX0FGRklOSVRZOgorCQlyaHNhID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IGFjcGlfZG1hcl9yaHNhLCBoZWFkZXIpOworCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiUkhTQSBiYXNlOiAlIzAxNkx4IHByb3hpbWl0eSBkb21haW46ICUjeFxuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmhzYS0+YmFzZV9hZGRyZXNzLAorCQkgICAgICAgcmhzYS0+cHJveGltaXR5X2RvbWFpbik7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtNDU5LDkgKzQ1NywxMyBAQAogCQkJcmV0ID0gZG1hcl9wYXJzZV9vbmVfYXRzcihlbnRyeV9oZWFkZXIpOwogI2VuZGlmCiAJCQlicmVhazsKKwkJY2FzZSBBQ1BJX0RNQVJfSEFSRFdBUkVfQUZGSU5JVFk6CisJCQkvKiBXZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIFJIU0EgKHlldD8pICovCisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCQkJIlVua25vd24gRE1BUiBzdHJ1Y3R1cmUgdHlwZVxuIik7CisJCQkJIlVua25vd24gRE1BUiBzdHJ1Y3R1cmUgdHlwZSAlZFxuIiwKKwkJCQllbnRyeV9oZWFkZXItPnR5cGUpOwogCQkJcmV0ID0gMDsgLyogZm9yIGZvcndhcmQgY29tcGF0aWJpbGl0eSAqLwogCQkJYnJlYWs7CiAJCX0KQEAgLTU4MCwxMiArNTgyLDUwIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2luaXQgY2hlY2tfemVyb19hZGRyZXNzKHZvaWQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfZG1hciAqZG1hcjsKKwlzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqZW50cnlfaGVhZGVyOworCXN0cnVjdCBhY3BpX2RtYXJfaGFyZHdhcmVfdW5pdCAqZHJoZDsKKworCWRtYXIgPSAoc3RydWN0IGFjcGlfdGFibGVfZG1hciAqKWRtYXJfdGJsOworCWVudHJ5X2hlYWRlciA9IChzdHJ1Y3QgYWNwaV9kbWFyX2hlYWRlciAqKShkbWFyICsgMSk7CisKKwl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWVudHJ5X2hlYWRlcikgPAorCQkJKCgodW5zaWduZWQgbG9uZylkbWFyKSArIGRtYXJfdGJsLT5sZW5ndGgpKSB7CisJCS8qIEF2b2lkIGxvb3BpbmcgZm9yZXZlciBvbiBiYWQgQUNQSSB0YWJsZXMgKi8KKwkJaWYgKGVudHJ5X2hlYWRlci0+bGVuZ3RoID09IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCisJCQkJIkludmFsaWQgMC1sZW5ndGggc3RydWN0dXJlXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGVudHJ5X2hlYWRlci0+dHlwZSA9PSBBQ1BJX0RNQVJfVFlQRV9IQVJEV0FSRV9VTklUKSB7CisJCQlkcmhkID0gKHZvaWQgKillbnRyeV9oZWFkZXI7CisJCQlpZiAoIWRyaGQtPmFkZHJlc3MpIHsKKwkJCQkvKiBQcm9tb3RlIGFuIGF0dGl0dWRlIG9mIHZpb2xlbmNlIHRvIGEgQklPUyBlbmdpbmVlciB0b2RheSAqLworCQkJCVdBUk4oMSwgIllvdXIgQklPUyBpcyBicm9rZW47IERNQVIgcmVwb3J0ZWQgYXQgYWRkcmVzcyB6ZXJvIVxuIgorCQkJCSAgICAgIkJJT1MgdmVuZG9yOiAlczsgVmVyOiAlczsgUHJvZHVjdCBWZXJzaW9uOiAlc1xuIiwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVSU0lPTiksCisJCQkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9QUk9EVUNUX1ZFUlNJT04pKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJZW50cnlfaGVhZGVyID0gKCh2b2lkICopZW50cnlfaGVhZGVyICsgZW50cnlfaGVhZGVyLT5sZW5ndGgpOworCX0KKwlyZXR1cm4gMTsKK30KKwogdm9pZCBfX2luaXQgZGV0ZWN0X2ludGVsX2lvbW11KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IGRtYXJfdGFibGVfZGV0ZWN0KCk7Ci0KKwlpZiAocmV0KQorCQlyZXQgPSBjaGVja196ZXJvX2FkZHJlc3MoKTsKIAl7CiAjaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJc3RydWN0IGFjcGlfdGFibGVfZG1hciAqZG1hcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9pYm0uYwppbmRleCBhOWQ5MjZiLi5lN2JlNjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfaWJtLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2libS5jCkBAIC00MDYsNyArNDA2LDYgQEAKIAkJCV9fZnVuY19fLCBzdGF0dXMpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmdbc2l6ZW9mKGluZm8tPmhhcmR3YXJlX2lkLmxlbmd0aCkgLSAxXSA9ICdcMCc7CiAKIAlpZiAoaW5mby0+Y3VycmVudF9zdGF0dXMgJiYgKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpICYmCiAJCQkoIXN0cmNtcChpbmZvLT5oYXJkd2FyZV9pZC5zdHJpbmcsIElCTV9IQVJEV0FSRV9JRDEpIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHAuaAppbmRleCA1MzgzNjAwLi45YzZhOWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIGZvciByZWFkPyBhbmQgd3JpdGU/IGZ1bmN0aW9ucyAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIGZvciBkZWxheXMgKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBzaWduYWxfcGVuZGluZygpICovCiAKICNkZWZpbmUgTVlfTkFNRQkiY3BxcGhwIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwppbmRleCA4NTVkZDdjLi4xODQwYTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCisrKyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogI2RlZmluZSBJU19HRlhfREVWSUNFKHBkZXYpICgocGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpCiAjZGVmaW5lIElTX0lTQV9ERVZJQ0UocGRldikgKChwZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSkKKyNkZWZpbmUgSVNfQVpBTElBKHBkZXYpICgocGRldiktPnZlbmRvciA9PSAweDgwODYgJiYgKHBkZXYpLT5kZXZpY2UgPT0gMHgzYTNlKQogCiAjZGVmaW5lIElPQVBJQ19SQU5HRV9TVEFSVAkoMHhmZWUwMDAwMCkKICNkZWZpbmUgSU9BUElDX1JBTkdFX0VORAkoMHhmZWVmZmZmZikKQEAgLTk0LDYgKzk1LDcgQEAKIC8qIGdsb2JhbCBpb21tdSBsaXN0LCBzZXQgTlVMTCBmb3IgaWdub3JlZCBETUFSIHVuaXRzICovCiBzdGF0aWMgc3RydWN0IGludGVsX2lvbW11ICoqZ19pb21tdXM7CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja190eWxlcnNidXJnX2lzb2NoKHZvaWQpOwogc3RhdGljIGludCByd2JmX3F1aXJrOwogCiAvKgpAQCAtMTkzNCw2ICsxOTM2LDkgQEAKIH0KIAogc3RhdGljIGludCBpb21tdV9pZGVudGl0eV9tYXBwaW5nOworI2RlZmluZSBJREVOVE1BUF9BTEwJCTEKKyNkZWZpbmUgSURFTlRNQVBfR0ZYCQkyCisjZGVmaW5lIElERU5UTUFQX0FaQUxJQQkJNAogCiBzdGF0aWMgaW50IGlvbW11X2RvbWFpbl9pZGVudGl0eV9tYXAoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RhcnQsCkBAIC0yMTUxLDggKzIxNTYsMTQgQEAKIAogc3RhdGljIGludCBpb21tdV9zaG91bGRfaWRlbnRpdHlfbWFwKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgc3RhcnR1cCkKIHsKLQlpZiAoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyA9PSAyKQotCQlyZXR1cm4gSVNfR0ZYX0RFVklDRShwZGV2KTsKKwlpZiAoKGlvbW11X2lkZW50aXR5X21hcHBpbmcgJiBJREVOVE1BUF9BWkFMSUEpICYmIElTX0FaQUxJQShwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKGlvbW11X2lkZW50aXR5X21hcHBpbmcgJiBJREVOVE1BUF9HRlgpICYmIElTX0dGWF9ERVZJQ0UocGRldikpCisJCXJldHVybiAxOworCisJaWYgKCEoaW9tbXVfaWRlbnRpdHlfbWFwcGluZyAmIElERU5UTUFQX0FMTCkpCisJCXJldHVybiAwOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IG9mZiB3aXRoIGFsbCBkZXZpY2VzIGluIHRoZSAxOjEgZG9tYWluLCBhbmQKQEAgLTIzMzIsMTEgKzIzNDMsMTQgQEAKIAl9CiAKIAlpZiAoaW9tbXVfcGFzc190aHJvdWdoKQotCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nID0gMTsKKwkJaW9tbXVfaWRlbnRpdHlfbWFwcGluZyB8PSBJREVOVE1BUF9BTEw7CisKICNpZmRlZiBDT05GSUdfRE1BUl9CUk9LRU5fR0ZYX1dBCi0JZWxzZQotCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nID0gMjsKKwlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0dGWDsKICNlbmRpZgorCisJY2hlY2tfdHlsZXJzYnVyZ19pc29jaCgpOworCiAJLyoKIAkgKiBJZiBwYXNzIHRocm91Z2ggaXMgbm90IHNldCBvciBub3QgZW5hYmxlZCwgc2V0dXAgY29udGV4dCBlbnRyaWVzIGZvcgogCSAqIGlkZW50aXR5IG1hcHBpbmdzIGZvciBybXJyLCBnZngsIGFuZCBpc2EgYW5kIG1heSBmYWxsIGJhY2sgdG8gc3RhdGljCkBAIC0yNzUzLDcgKzI3NjcsMTUgQEAKIAogCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOwogCW9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwotCWZsYWdzICY9IH4oR0ZQX0RNQSB8IEdGUF9ETUEzMik7CisKKwlpZiAoIWlvbW11X25vX21hcHBpbmcoaHdkZXYpKQorCQlmbGFncyAmPSB+KEdGUF9ETUEgfCBHRlBfRE1BMzIpOworCWVsc2UgaWYgKGh3ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IGRtYV9nZXRfcmVxdWlyZWRfbWFzayhod2RldikpIHsKKwkJaWYgKGh3ZGV2LT5jb2hlcmVudF9kbWFfbWFzayA8IERNQV9CSVRfTUFTSygzMikpCisJCQlmbGFncyB8PSBHRlBfRE1BOworCQllbHNlCisJCQlmbGFncyB8PSBHRlBfRE1BMzI7CisJfQogCiAJdmFkZHIgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZ3MsIG9yZGVyKTsKIAlpZiAoIXZhZGRyKQpAQCAtMzE5Myw2ICszMjE1LDMzIEBACiB9CiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKKy8qCisgKiBIZXJlIHdlIG9ubHkgcmVzcG9uZCB0byBhY3Rpb24gb2YgdW5ib3VuZCBkZXZpY2UgZnJvbSBkcml2ZXIuCisgKgorICogQWRkZWQgZGV2aWNlIGlzIG5vdCBhdHRhY2hlZCB0byBpdHMgRE1BUiBkb21haW4gaGVyZSB5ZXQuIFRoYXQgd2lsbCBoYXBwZW4KKyAqIHdoZW4gbWFwcGluZyB0aGUgZGV2aWNlIHRvIGlvdmEuCisgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOworCisJZG9tYWluID0gZmluZF9kb21haW4ocGRldik7CisJaWYgKCFkb21haW4pCisJCXJldHVybiAwOworCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJCWRvbWFpbl9yZW1vdmVfb25lX2Rldl9pbmZvKGRvbWFpbiwgcGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkZXZpY2VfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBkZXZpY2Vfbm90aWZpZXIsCit9OworCiBpbnQgX19pbml0IGludGVsX2lvbW11X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTMyNDUsNiArMzI5NCw4IEBACiAKIAlyZWdpc3Rlcl9pb21tdSgmaW50ZWxfaW9tbXVfb3BzKTsKIAorCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGNpX2J1c190eXBlLCAmZGV2aWNlX25iKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNjcwLDMgKzM3MjEsNjEgQEAKIH0KIAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MmE0MCwgcXVpcmtfaW9tbXVfcndiZik7CisKKy8qIE9uIFR5bGVyc2J1cmcgY2hpcHNldHMsIHNvbWUgQklPU2VzIGhhdmUgYmVlbiBrbm93biB0byBlbmFibGUgdGhlCisgICBJU09DSCBETUFSIHVuaXQgZm9yIHRoZSBBemFsaWEgc291bmQgZGV2aWNlLCBidXQgbm90IGdpdmUgaXQgYW55CisgICBUTEIgZW50cmllcywgd2hpY2ggY2F1c2VzIGl0IHRvIGRlYWRsb2NrLiBDaGVjayBmb3IgdGhhdC4gIFdlIGRvCisgICB0aGlzIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gaW5pdF9kbWFycygpLCBpbnN0ZWFkIG9mIGluIGEgUENJCisgICBxdWlyaywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHByaW50IHRoZSBvYm5veGlvdXMgIkJJT1MgYnJva2VuIgorICAgbWVzc2FnZSBpZiBWVC1kIGlzIGFjdHVhbGx5IGRpc2FibGVkLgorKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBjaGVja190eWxlcnNidXJnX2lzb2NoKHZvaWQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdWludDMyX3QgdnRpc29jaGN0cmw7CisKKwkvKiBJZiB0aGVyZSdzIG5vIEF6YWxpYSBpbiB0aGUgc3lzdGVtIGFueXdheSwgZm9yZ2V0IGl0LiAqLworCXBkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDNhM2UsIE5VTEwpOworCWlmICghcGRldikKKwkJcmV0dXJuOworCXBjaV9kZXZfcHV0KHBkZXYpOworCisJLyogU3lzdGVtIE1hbmFnZW1lbnQgUmVnaXN0ZXJzLiBNaWdodCBiZSBoaWRkZW4sIGluIHdoaWNoIGNhc2UKKwkgICB3ZSBjYW4ndCBkbyB0aGUgc2FuaXR5IGNoZWNrLiBCdXQgdGhhdCdzIE9LLCBiZWNhdXNlIHRoZQorCSAgIGtub3duLWJyb2tlbiBCSU9TZXMgX2Rvbid0XyBhY3R1YWxseSBoaWRlIGl0LCBzbyBmYXIuICovCisJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MzQyZSwgTlVMTCk7CisJaWYgKCFwZGV2KQorCQlyZXR1cm47CisKKwlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4MTg4LCAmdnRpc29jaGN0cmwpKSB7CisJCXBjaV9kZXZfcHV0KHBkZXYpOworCQlyZXR1cm47CisJfQorCisJcGNpX2Rldl9wdXQocGRldik7CisKKwkvKiBJZiBBemFsaWEgRE1BIGlzIHJvdXRlZCB0byB0aGUgbm9uLWlzb2NoIERNQVIgdW5pdCwgZmluZS4gKi8KKwlpZiAodnRpc29jaGN0cmwgJiAxKQorCQlyZXR1cm47CisKKwkvKiBEcm9wIGFsbCBiaXRzIG90aGVyIHRoYW4gdGhlIG51bWJlciBvZiBUTEIgZW50cmllcyAqLworCXZ0aXNvY2hjdHJsICY9IDB4MWM7CisKKwkvKiBJZiB3ZSBoYXZlIHRoZSByZWNvbW1lbmRlZCBudW1iZXIgb2YgVExCIGVudHJpZXMgKDE2KSwgZmluZS4gKi8KKwlpZiAodnRpc29jaGN0cmwgPT0gMHgxMCkKKwkJcmV0dXJuOworCisJLyogWmVybyBUTEIgZW50cmllcz8gWW91IGdldCB0byByaWRlIHRoZSBzaG9ydCBidXMgdG8gc2Nob29sLiAqLworCWlmICghdnRpc29jaGN0cmwpIHsKKwkJV0FSTigxLCAiWW91ciBCSU9TIGlzIGJyb2tlbjsgRE1BIHJvdXRlZCB0byBJU09DSCBETUFSIHVuaXQgYnV0IG5vIFRMQiBzcGFjZS5cbiIKKwkJICAgICAiQklPUyB2ZW5kb3I6ICVzOyBWZXI6ICVzOyBQcm9kdWN0IFZlcnNpb246ICVzXG4iLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JJT1NfVkVORE9SKSwKKwkJICAgICBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CSU9TX1ZFUlNJT04pLAorCQkgICAgIGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfVkVSU0lPTikpOworCQlpb21tdV9pZGVudGl0eV9tYXBwaW5nIHw9IElERU5UTUFQX0FaQUxJQTsKKwkJcmV0dXJuOworCX0KKwkKKwlwcmludGsoS0VSTl9XQVJOSU5HICJETUFSOiBSZWNvbW1lbmRlZCBUTEIgZW50cmllcyBmb3IgSVNPQ0ggdW5pdCBpcyAxNjsgeW91ciBCSU9TIHNldCAlZFxuIiwKKwkgICAgICAgdnRpc29jaGN0cmwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA2ZWRlY2ZmLi40ZTRjMjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNTEzLDcgKzUxMywxMSBAQAogCWVsc2UgaWYgKHN0YXRlID09IFBDSV9EMiB8fCBkZXYtPmN1cnJlbnRfc3RhdGUgPT0gUENJX0QyKQogCQl1ZGVsYXkoUENJX1BNX0QyX0RFTEFZKTsKIAotCWRldi0+Y3VycmVudF9zdGF0ZSA9IHN0YXRlOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgJnBtY3NyKTsKKwlkZXYtPmN1cnJlbnRfc3RhdGUgPSAocG1jc3IgJiBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKTsKKwlpZiAoZGV2LT5jdXJyZW50X3N0YXRlICE9IHN0YXRlICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUmVmdXNlZCB0byBjaGFuZ2UgcG93ZXIgc3RhdGUsICIKKwkJCSJjdXJyZW50bHkgaW4gRCVkXG4iLCBkZXYtPmN1cnJlbnRfc3RhdGUpOwogCiAJLyogQWNjb3JkaW5nIHRvIHNlY3Rpb24gNS40LjEgb2YgdGhlICJQQ0kgQlVTIFBPV0VSIE1BTkFHRU1FTlQKIAkgKiBJTlRFUkZBQ0UgU1BFQ0lGSUNBVElPTiwgUkVWLiAxLjIiLCBhIGRldmljZSB0cmFuc2l0aW9uaW5nCkBAIC0yNTQyLDEwICsyNTQ2LDEwIEBACiAKIC8qKgogICogcGNpX3NldF92Z2Ffc3RhdGUgLSBzZXQgVkdBIGRlY29kZSBzdGF0ZSBvbiBkZXZpY2UgYW5kIHBhcmVudHMgaWYgcmVxdWVzdGVkCi0gKiBAZGV2IHRoZSBQQ0kgZGV2aWNlCi0gKiBAZGVjb2RlIC0gdHJ1ZSA9IGVuYWJsZSBkZWNvZGluZywgZmFsc2UgPSBkaXNhYmxlIGRlY29kaW5nCi0gKiBAY29tbWFuZF9iaXRzIFBDSV9DT01NQU5EX0lPIGFuZC9vciBQQ0lfQ09NTUFORF9NRU1PUlkKLSAqIEBjaGFuZ2VfYnJpZGdlIC0gdHJhdmVyc2UgYW5jZXN0b3JzIGFuZCBjaGFuZ2UgYnJpZGdlcworICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqIEBkZWNvZGU6IHRydWUgPSBlbmFibGUgZGVjb2RpbmcsIGZhbHNlID0gZGlzYWJsZSBkZWNvZGluZworICogQGNvbW1hbmRfYml0czogUENJX0NPTU1BTkRfSU8gYW5kL29yIFBDSV9DT01NQU5EX01FTU9SWQorICogQGNoYW5nZV9icmlkZ2U6IHRyYXZlcnNlIGFuY2VzdG9ycyBhbmQgY2hhbmdlIGJyaWRnZXMKICAqLwogaW50IHBjaV9zZXRfdmdhX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZGVjb2RlLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZF9iaXRzLCBib29sIGNoYW5nZV9icmlkZ2UpCkBAIC0yNzE5LDE3ICsyNzIzLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgcGNpX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKLQotCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewotCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgZGV2KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgcGNpX3NldHVwKGNoYXIgKnN0cikKIHsKIAl3aGlsZSAoc3RyKSB7CkBAIC0yNzY3LDggKzI3NjAsNiBAQAogfQogZWFybHlfcGFyYW0oInBjaSIsIHBjaV9zZXR1cCk7CiAKLWRldmljZV9pbml0Y2FsbChwY2lfaW5pdCk7Ci0KIEVYUE9SVF9TWU1CT0wocGNpX3JlZW5hYmxlX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9lbmFibGVfZGV2aWNlX2lvKTsKIEVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9kZXZpY2VfbWVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKaW5kZXggMmNlOGY5Yy4uNDBjM2NjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2LmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgpAQCAtNTIsNyArNTMsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBhZXJkcml2ZXIgPSB7CiAJLm5hbWUJCT0gImFlciIsCi0JLnBvcnRfdHlwZQk9IFBDSUVfQU5ZX1BPUlQsCisJLnBvcnRfdHlwZQk9IFBDSUVfUkNfUE9SVCwKIAkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUiwKIAogCS5wcm9iZQkJPSBhZXJfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCmluZGV4IDc0NTQwMmUuLjViNzA1NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC02NTYsOCArNjU2LDEwIEBACiAJZnJlZV9saW5rX3N0YXRlKGxpbmspOwogCiAJLyogUmVjaGVjayBsYXRlbmNpZXMgYW5kIGNvbmZpZ3VyZSB1cHN0cmVhbSBsaW5rcyAqLwotCXBjaWVfdXBkYXRlX2FzcG1fY2FwYWJsZShyb290KTsKLQlwY2llX2NvbmZpZ19hc3BtX3BhdGgocGFyZW50X2xpbmspOworCWlmIChwYXJlbnRfbGluaykgeworCQlwY2llX3VwZGF0ZV9hc3BtX2NhcGFibGUocm9vdCk7CisJCXBjaWVfY29uZmlnX2FzcG1fcGF0aChwYXJlbnRfbGluayk7CisJfQogb3V0OgogCW11dGV4X3VubG9jaygmYXNwbV9sb2NrKTsKIAl1cF9yZWFkKCZwY2lfYnVzX3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKaW5kZXggNmRmNWM5OC4uZjYzNWU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwpAQCAtMzAsNyArMzAsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBnbG9iYWwgZGF0YSAqLwotc3RhdGljIGNvbnN0IGNoYXIgZGV2aWNlX25hbWVbXSA9ICJwY2llcG9ydC1kcml2ZXIiOwogCiBzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtMjYyLDcgKzI2MSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpZV9wb3J0ZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopZGV2aWNlX25hbWUsCisJLm5hbWUJCT0gInBjaWVwb3J0IiwKIAkuaWRfdGFibGUJPSAmcG9ydF9wY2lfaWRzWzBdLAogCiAJLnByb2JlCQk9IHBjaWVfcG9ydGRydl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggNjA5OWZhYy4uMjQ1ZDJjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTY3MCw2ICs2NzAsMjUgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODIzNSwJcXVpcmtfdnQ4MjM1X2FjcGkpOwogCisvKgorICogVEkgWElPMjAwMGEgUENJZS1QQ0kgQnJpZGdlIGVycm9uZW91c2x5IHJlcG9ydHMgaXQgc3VwcG9ydHMgZmFzdCBiYWNrLXRvLWJhY2s6CisgKglEaXNhYmxlIGZhc3QgYmFjay10by1iYWNrIG9uIHRoZSBzZWNvbmRhcnkgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX3hpbzIwMDBhKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJdTE2IGNvbW1hbmQ7CisKKwlkZXZfd2FybigmZGV2LT5kZXYsICJUSSBYSU8yMDAwYSBxdWlyayBkZXRlY3RlZDsgIgorCQkic2Vjb25kYXJ5IGJ1cyBmYXN0IGJhY2stdG8tYmFjayB0cmFuc2ZlcnMgZGlzYWJsZWRcbiIpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJmRldi0+c3Vib3JkaW5hdGUtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CisJCWlmIChjb21tYW5kICYgUENJX0NPTU1BTkRfRkFTVF9CQUNLKQorCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCBjb21tYW5kICYgflBDSV9DT01NQU5EX0ZBU1RfQkFDSyk7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV9YSU8yMDAwQSwKKwkJCXF1aXJrX3hpbzIwMDBhKTsKIAogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQyAKIApAQCAtOTkwLDcgKzEwMDksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYW1kX2lkZV9tb2RlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCS8qIHNldCBTQlgwMCBTQVRBIGluIElERSBtb2RlIHRvIEFIQ0kgbW9kZSAqLworCS8qIHNldCBTQlgwMC9IdWRzb24tMiBTQVRBIGluIElERSBtb2RlIHRvIEFIQ0kgbW9kZSAqLwogCXU4IHRtcDsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19ERVZJQ0UsICZ0bXApOwpAQCAtMTAwOSw4ICsxMDI4LDggQEAKIERFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX0FUSSwgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEsIHF1aXJrX2FtZF9pZGVfbW9kZSk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BVEksIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDcwMF9TQVRBLCBxdWlya19hbWRfaWRlX21vZGUpOwogREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQSwgcXVpcmtfYW1kX2lkZV9tb2RlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfU0I5MDBfU0FUQV9JREUsIHF1aXJrX2FtZF9pZGVfbW9kZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NBVEFfSURFLCBxdWlya19hbWRfaWRlX21vZGUpOwogCiAvKgogICoJU2VydmVyd29ya3MgQ1NCNSBJREUgZG9lcyBub3QgZnVsbHkgc3VwcG9ydCBuYXRpdmUgbW9kZQpAQCAtMjU3Miw2ICsyNTkxLDE5IEBACiAJfQogCXBjaV9kb19maXh1cHMoZGV2LCBzdGFydCwgZW5kKTsKIH0KKworc3RhdGljIGludCBfX2luaXQgcGNpX2FwcGx5X2ZpbmFsX3F1aXJrcyh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCisJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitmc19pbml0Y2FsbF9zeW5jKHBjaV9hcHBseV9maW5hbF9xdWlya3MpOwogI2Vsc2UKIHZvaWQgcGNpX2ZpeHVwX2RldmljZShlbnVtIHBjaV9maXh1cF9wYXNzIHBhc3MsIHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKaW5kZXggNzA2ZjgyZC4uYzU0NTI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtcmVzLmMKQEAgLTIwNSw0MyArMjA1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0jaWYgMAotaW50IHBjaV9hc3NpZ25fcmVzb3VyY2VfZml4ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vKQotewotCXN0cnVjdCBwY2lfYnVzICpidXMgPSBkZXYtPmJ1czsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2UgKyByZXNubzsKLQl1bnNpZ25lZCBpbnQgdHlwZV9tYXNrOwotCWludCBpLCByZXQgPSAtRUJVU1k7Ci0KLQl0eXBlX21hc2sgPSBJT1JFU09VUkNFX0lPIHwgSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1BSRUZFVENIOwotCi0JZm9yIChpID0gMDsgaSA8IFBDSV9CVVNfTlVNX1JFU09VUkNFUzsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqciA9IGJ1cy0+cmVzb3VyY2VbaV07Ci0JCWlmICghcikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHR5cGVfbWFzayBtdXN0IG1hdGNoICovCi0JCWlmICgocmVzLT5mbGFncyBeIHItPmZsYWdzKSAmIHR5cGVfbWFzaykKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IHJlcXVlc3RfcmVzb3VyY2UociwgcmVzKTsKLQotCQlpZiAocmV0ID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiQkFSICVkOiBjYW4ndCBhbGxvY2F0ZSAlcyByZXNvdXJjZSAlcFJcbiIsCi0JCQlyZXNubywgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8gPyAiSS9PIiA6ICJtZW0iLCByZXMpOwotCX0gZWxzZSBpZiAocmVzbm8gPCBQQ0lfQlJJREdFX1JFU09VUkNFUykgewotCQlwY2lfdXBkYXRlX3Jlc291cmNlKGRldiwgcmVzbm8pOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChwY2lfYXNzaWduX3Jlc291cmNlX2ZpeGVkKTsKLSNlbmRpZgotCiAvKiBTb3J0IHJlc291cmNlcyBieSBhbGlnbm1lbnQgKi8KIHZvaWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqaGVhZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IGZiZjk2NWIuLjE3ZjM4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtMTkyLDYgKzE5MiwxMCBAQAogCXRyaXN0YXRlICJBdTF4MDAgcGNtY2lhIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQVUxWDAwICYmIFBDTUNJQQogCitjb25maWcgUENNQ0lBX0JDTTYzWFgKKwl0cmlzdGF0ZSAiYmNtNjN4eCBwY21jaWEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEJDTTYzWFggJiYgUENNQ0lBCisKIGNvbmZpZyBQQ01DSUFfU0ExMTAwCiAJdHJpc3RhdGUgIlNBMTEwMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfU0ExMTAwICYmIFBDTUNJQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCAwNDczOTRkLi5hMDNhMzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMjcsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX00zMlJfUENDKQkJCQkrPSBtMzJyX3BjYy5vCiBvYmotJChDT05GSUdfTTMyUl9DRkMpCQkJCSs9IG0zMnJfY2ZjLm8KIG9iai0kKENPTkZJR19QQ01DSUFfQVUxWDAwKQkJCSs9IGF1MXgwMF9zcy5vCitvYmotJChDT05GSUdfUENNQ0lBX0JDTTYzWFgpCQkJKz0gYmNtNjN4eF9wY21jaWEubwogb2JqLSQoQ09ORklHX1BDTUNJQV9WUkM0MTcxKQkJCSs9IHZyYzQxNzFfY2FyZC5vCiBvYmotJChDT05GSUdfUENNQ0lBX1ZSQzQxNzMpCQkJKz0gdnJjNDE3M19jYXJkdS5vCiBvYmotJChDT05GSUdfT01BUF9DRikJCQkJKz0gb21hcF9jZi5vCkBAIC03MSw2ICs3Miw3IEBACiBweGEyeHgtb2JqLSQoQ09ORklHX0FSQ0hfVklQRVIpCQkJKz0gcHhhMnh4X3ZpcGVyLm8KIHB4YTJ4eC1vYmotJChDT05GSUdfVFJJWkVQU19QQ01DSUEpCQkrPSBweGEyeHhfdHJpemVwczQubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJCSs9IHB4YTJ4eF9wYWxtdHgubworcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1UQykJCSs9IHB4YTJ4eF9wYWxtdGMubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJCSs9IHB4YTJ4eF9wYWxtbGQubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX0U3NDApCQkJKz0gcHhhMnh4X2U3NDAubwogcHhhMnh4LW9iai0kKENPTkZJR19NQUNIX1NUQVJHQVRFMikJCSs9IHB4YTJ4eF9zdGFyZ2F0ZTIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jIGIvZHJpdmVycy9wY21jaWEvYXQ5MV9jZi5jCmluZGV4IDllMTE0MGYuLmUxZGNjZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F0OTFfY2YuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdDkxX2NmLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCXN0cnVjdCBhdDkxX2NmX3NvY2tldAkqY2YgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgYXQ5MV9jZl9kYXRhCSpib2FyZCA9IGNmLT5ib2FyZDsKIAotCXBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldiwgbWVzZyk7CisJcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIAlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKIAkJZW5hYmxlX2lycV93YWtlKGJvYXJkLT5kZXRfcGluKTsKIAkJaWYgKGJvYXJkLT5pcnFfcGluKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKaW5kZXggOTAwMTMzNC4uMDIwODg3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCkBAIC01MTUsNyArNTE1LDcgQEAKIHN0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM4OGEzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMKQEAgLTAsMCArMSw1MzYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KKyNpbmNsdWRlICJiY202M3h4X3BjbWNpYS5oIgorCisjZGVmaW5lIFBGWAkiYmNtNjN4eF9wY21jaWE6ICIKKworI2lmZGVmIENPTkZJR19DQVJEQlVTCisvKiBpZiBjYXJkYnVzIGlzIHVzZWQsIHBsYXRmb3JtIGRldmljZSBuZWVkcyByZWZlcmVuY2UgdG8gYWN0dWFsIHBjaQorICogZGV2aWNlICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmJjbTYzeHhfY2JfZGV2OworI2VuZGlmCisKKy8qCisgKiByZWFkL3dyaXRlIGhlbHBlciBmb3IgcGNtY2lhIHJlZ3MKKyAqLworc3RhdGljIGlubGluZSB1MzIgcGNtY2lhX3JlYWRsKHN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdCwgdTMyIG9mZikKK3sKKwlyZXR1cm4gYmNtX3JlYWRsKHNrdC0+YmFzZSArIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY21jaWFfd3JpdGVsKHN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkgdTMyIHZhbCwgdTMyIG9mZikKK3sKKwliY21fd3JpdGVsKHZhbCwgc2t0LT5iYXNlICsgb2ZmKTsKK30KKworLyoKKyAqIFRoaXMgY2FsbGJhY2sgc2hvdWxkIChyZS0paW5pdGlhbGlzZSB0aGUgc29ja2V0LCB0dXJuIG9uIHN0YXR1cworICogaW50ZXJydXB0cyBhbmQgUENNQ0lBIGJ1cywgYW5kIHdhaXQgZm9yIHBvd2VyIHRvIHN0YWJpbGlzZSBzbyB0aGF0CisgKiB0aGUgY2FyZCBzdGF0dXMgc2lnbmFscyByZXBvcnQgY29ycmVjdGx5LgorICoKKyAqIEhhcmR3YXJlIGNhbm5vdCBkbyB0aGF0LgorICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NvY2tfaW5pdChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgY2FsbGJhY2sgc2hvdWxkIHJlbW92ZSBwb3dlciBvbiB0aGUgc29ja2V0LCBkaXNhYmxlIElSUXMgZnJvbQorICogdGhlIGNhcmQsIHR1cm4gb2ZmIHN0YXR1cyBpbnRlcnJ1cHRzLCBhbmQgZGlzYWJsZSB0aGUgUENNQ0lBIGJ1cy4KKyAqCisgKiBIYXJkd2FyZSBjYW5ub3QgZG8gdGhhdC4KKyAqLworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrKQoreworCXJldHVybiAwOworfQorCisvKgorICogSW1wbGVtZW50cyB0aGUgc2V0X3NvY2tldCgpIG9wZXJhdGlvbiBmb3IgdGhlIGluLWtlcm5lbCBQQ01DSUEKKyAqIHNlcnZpY2UgKGZvcm1lcmx5IFNTX1NldFNvY2tldCBpbiBDYXJkIFNlcnZpY2VzKS4gV2UgbW9yZSBvcgorICogbGVzcyBwdW50IGFsbCBvZiB0aGlzIHdvcmsgYW5kIGxldCB0aGUga2VybmVsIGhhbmRsZSB0aGUgZGV0YWlscworICogb2YgcG93ZXIgY29uZmlndXJhdGlvbiwgcmVzZXQsICZjLiBXZSBhbHNvIHJlY29yZCB0aGUgdmFsdWUgb2YKKyAqIGBzdGF0ZScgaW4gb3JkZXIgdG8gcmVndXJnaXRhdGUgaXQgdG8gdGhlIFBDTUNJQSBjb3JlIGxhdGVyLgorICovCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NldF9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2ssCisJCQkJICAgICBzb2NrZXRfc3RhdGVfdCAqc3RhdGUpCit7CisJc3RydWN0IGJjbTYzeHhfcGNtY2lhX3NvY2tldCAqc2t0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNrdCA9IHNvY2stPmRyaXZlcl9kYXRhOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNrdC0+bG9jaywgZmxhZ3MpOworCisJLyogbm90ZTogaGFyZHdhcmUgY2Fubm90IGNvbnRyb2wgc29ja2V0IHBvd2VyLCBzbyB3ZSB3aWxsCisJICogYWx3YXlzIHJlcG9ydCBTU19QT1dFUk9OICovCisKKwkvKiBhcHBseSBzb2NrZXQgcmVzZXQgKi8KKwl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwlpZiAoc3RhdGUtPmZsYWdzICYgU1NfUkVTRVQpCisJCXZhbCB8PSBQQ01DSUFfQzFfUkVTRVRfTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+UENNQ0lBX0MxX1JFU0VUX01BU0s7CisKKwkvKiByZXZlcnNlIHJlc2V0IGxvZ2ljIGZvciBjYXJkYnVzIGNhcmQgKi8KKwlpZiAoc2t0LT5jYXJkX2RldGVjdGVkICYmIChza3QtPmNhcmRfdHlwZSAmIENBUkRfQ0FSREJVUykpCisJCXZhbCBePSBQQ01DSUFfQzFfUkVTRVRfTUFTSzsKKworCXBjbWNpYV93cml0ZWwoc2t0LCB2YWwsIFBDTUNJQV9DMV9SRUcpOworCisJLyoga2VlcCByZXF1ZXN0ZWQgc3RhdGUgZm9yIGV2ZW50IHJlcG9ydGluZyAqLworCXNrdC0+cmVxdWVzdGVkX3N0YXRlID0gKnN0YXRlOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2t0LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGlkZW50aXR5IGNhcmR0eXBlIGZyb20gVlNbMTJdIGlucHV0LCBDRFsxMl0gaW5wdXQgd2hpbGUgb25seSBWUzIgaXMKKyAqIGZsb2F0aW5nLCBhbmQgQ0RbMTJdIGlucHV0IHdoaWxlIG9ubHkgVlMxIGlzIGZsb2F0aW5nCisgKi8KK2VudW0geworCUlOX1ZTMSA9ICgxIDw8IDApLAorCUlOX1ZTMiA9ICgxIDw8IDEpLAorCUlOX0NEMV9WUzJIID0gKDEgPDwgMiksCisJSU5fQ0QyX1ZTMkggPSAoMSA8PCAzKSwKKwlJTl9DRDFfVlMxSCA9ICgxIDw8IDQpLAorCUlOX0NEMl9WUzFIID0gKDEgPDwgNSksCit9OworCitzdGF0aWMgY29uc3QgdTggdnNjZF90b19jYXJkdHlwZVtdID0geworCisJLyogVlMxIGZsb2F0LCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMxIHwgSU5fVlMyXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfNVYpLAorCisJLyogVlMxIGdyb3VuZGVkLCBWUzIgZmxvYXQgKi8KKwlbSU5fVlMyXSA9IChDQVJEX1BDQ0FSRCB8IENBUkRfNVYgfCBDQVJEXzNWKSwKKworCS8qIFZTMSBncm91bmRlZCwgVlMyIGdyb3VuZGVkICovCisJWzBdID0gKENBUkRfUENDQVJEIHwgQ0FSRF81ViB8IENBUkRfM1YgfCBDQVJEX1hWKSwKKworCS8qIFZTMSB0aWVkIHRvIENEMSwgVlMyIGZsb2F0ICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMV9WUzFIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWKSwKKworCS8qIFZTMSBncm91bmRlZCwgVlMyIHRpZWQgdG8gQ0QyICovCisJW0lOX1ZTMiB8IElOX0NEMl9WUzJIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWIHwgQ0FSRF9YViksCisKKwkvKiBWUzEgdGllZCB0byBDRDIsIFZTMiBncm91bmRlZCAqLworCVtJTl9WUzEgfCBJTl9DRDJfVlMxSF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF8zViB8IENBUkRfWFYgfCBDQVJEX1lWKSwKKworCS8qIFZTMSBmbG9hdCwgVlMyIGdyb3VuZGVkICovCisJW0lOX1ZTMV0gPSAoQ0FSRF9QQ0NBUkQgfCBDQVJEX1hWKSwKKworCS8qIFZTMSBmbG9hdCwgVlMyIHRpZWQgdG8gQ0QyICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMl9WUzJIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEXzNWKSwKKworCS8qIFZTMSBmbG9hdCwgVlMyIHRpZWQgdG8gQ0QxICovCisJW0lOX1ZTMSB8IElOX1ZTMiB8IElOX0NEMV9WUzJIXSA9IChDQVJEX0NBUkRCVVMgfCBDQVJEX1hWIHwgQ0FSRF9ZViksCisKKwkvKiBWUzEgdGllZCB0byBDRDIsIFZTMiBmbG9hdCAqLworCVtJTl9WUzEgfCBJTl9WUzIgfCBJTl9DRDJfVlMxSF0gPSAoQ0FSRF9DQVJEQlVTIHwgQ0FSRF9ZViksCisKKwkvKiBWUzIgZ3JvdW5kZWQsIFZTMSBpcyB0aWVkIHRvIENEMSwgQ0QyIGlzIGdyb3VuZGVkICovCisJW0lOX1ZTMSB8IElOX0NEMV9WUzFIXSA9IDAsIC8qIGlnbm9yZSBjYXJkYmF5ICovCit9OworCisvKgorICogcG9sbCBoYXJkd2FyZSB0byBjaGVjayBjYXJkIGluc2VydGlvbiBzdGF0dXMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBfX2dldF9zb2NrZXRfc3RhdHVzKHN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdDsKKwl1MzIgdmFsOworCisJc3RhdCA9IDA7CisKKwkvKiBjaGVjayBDRCBmb3IgY2FyZCBwcmVzZW5jZSAqLworCXZhbCA9IHBjbWNpYV9yZWFkbChza3QsIFBDTUNJQV9DMV9SRUcpOworCisJaWYgKCEodmFsICYgUENNQ0lBX0MxX0NEMV9NQVNLKSAmJiAhKHZhbCAmIFBDTUNJQV9DMV9DRDJfTUFTSykpCisJCXN0YXQgfD0gU1NfREVURUNUOworCisJLyogaWYgbmV3IGluc2VydGlvbiwgZGV0ZWN0IGNhcmR0eXBlICovCisJaWYgKChzdGF0ICYgU1NfREVURUNUKSAmJiAhc2t0LT5jYXJkX2RldGVjdGVkKSB7CisJCXVuc2lnbmVkIGludCBzdGF0ID0gMDsKKworCQkvKiBmbG9hdCBWUzEsIGZsb2F0IFZTMiAqLworCQl2YWwgfD0gUENNQ0lBX0MxX1ZTMU9FX01BU0s7CisJCXZhbCB8PSBQQ01DSUFfQzFfVlMyT0VfTUFTSzsKKwkJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkJLyogd2FpdCBmb3Igb3V0cHV0IHRvIHN0YWJpbGl6ZSBhbmQgcmVhZCBWU1sxMl0gKi8KKwkJdWRlbGF5KDEwKTsKKwkJdmFsID0gcGNtY2lhX3JlYWRsKHNrdCwgUENNQ0lBX0MxX1JFRyk7CisJCXN0YXQgfD0gKHZhbCAmIFBDTUNJQV9DMV9WUzFfTUFTSykgPyBJTl9WUzEgOiAwOworCQlzdGF0IHw9ICh2YWwgJiBQQ01DSUFfQzFfVlMyX01BU0spID8gSU5fVlMyIDogMDsKKworCQkvKiBkcml2ZSBWUzEgbG93LCBmbG9hdCBWUzIgKi8KKwkJdmFsICY9IH5QQ01DSUFfQzFfVlMxT0VfTUFTSzsKKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzJPRV9NQVNLOworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gc3RhYmlsaXplIGFuZCByZWFkIENEWzEyXSAqLworCQl1ZGVsYXkoMTApOworCQl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX0NEMV9NQVNLKSA/IElOX0NEMV9WUzJIIDogMDsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX0NEMl9NQVNLKSA/IElOX0NEMl9WUzJIIDogMDsKKworCQkvKiBmbG9hdCBWUzEsIGRyaXZlIFZTMiBsb3cgKi8KKwkJdmFsIHw9IFBDTUNJQV9DMV9WUzFPRV9NQVNLOworCQl2YWwgJj0gflBDTUNJQV9DMV9WUzJPRV9NQVNLOworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKworCQkvKiB3YWl0IGZvciBvdXRwdXQgdG8gc3RhYmlsaXplIGFuZCByZWFkIENEWzEyXSAqLworCQl1ZGVsYXkoMTApOworCQl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX0NEMV9NQVNLKSA/IElOX0NEMV9WUzFIIDogMDsKKwkJc3RhdCB8PSAodmFsICYgUENNQ0lBX0MxX0NEMl9NQVNLKSA/IElOX0NEMl9WUzFIIDogMDsKKworCQkvKiBndWVzcyBjYXJkdHlwZSBmcm9tIGFsbCB0aGlzICovCisJCXNrdC0+Y2FyZF90eXBlID0gdnNjZF90b19jYXJkdHlwZVtzdGF0XTsKKwkJaWYgKCFza3QtPmNhcmRfdHlwZSkKKwkJCWRldl9lcnIoJnNrdC0+c29ja2V0LmRldiwgInVuc3VwcG9ydGVkIGNhcmQgdHlwZVxuIik7CisKKwkJLyogZHJpdmUgYm90aCBWUyBwaW4gdG8gMCBhZ2FpbiAqLworCQl2YWwgJj0gfihQQ01DSUFfQzFfVlMxT0VfTUFTSyB8IFBDTUNJQV9DMV9WUzJPRV9NQVNLKTsKKworCQkvKiBlbmFibGUgY29ycmVjdCBsb2dpYyAqLworCQl2YWwgJj0gfihQQ01DSUFfQzFfRU5fUENNQ0lBX01BU0sgfCBQQ01DSUFfQzFfRU5fQ0FSREJVU19NQVNLKTsKKwkJaWYgKHNrdC0+Y2FyZF90eXBlICYgQ0FSRF9QQ0NBUkQpCisJCQl2YWwgfD0gUENNQ0lBX0MxX0VOX1BDTUNJQV9NQVNLOworCQllbHNlCisJCQl2YWwgfD0gUENNQ0lBX0MxX0VOX0NBUkRCVVNfTUFTSzsKKworCQlwY21jaWFfd3JpdGVsKHNrdCwgdmFsLCBQQ01DSUFfQzFfUkVHKTsKKwl9CisJc2t0LT5jYXJkX2RldGVjdGVkID0gKHN0YXQgJiBTU19ERVRFQ1QpID8gMSA6IDA7CisKKwkvKiByZXBvcnQgY2FyZCB0eXBlL3ZvbHRhZ2UgKi8KKwlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX0NBUkRCVVMpCisJCXN0YXQgfD0gU1NfQ0FSREJVUzsKKwlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEXzNWKQorCQlzdGF0IHw9IFNTXzNWQ0FSRDsKKwlpZiAoc2t0LT5jYXJkX3R5cGUgJiBDQVJEX1hWKQorCQlzdGF0IHw9IFNTX1hWQ0FSRDsKKwlzdGF0IHw9IFNTX1BPV0VST047CisKKwlpZiAoZ3Bpb19nZXRfdmFsdWUoc2t0LT5wZC0+cmVhZHlfZ3BpbykpCisJCXN0YXQgfD0gU1NfUkVBRFk7CisKKwlyZXR1cm4gc3RhdDsKK30KKworLyoKKyAqIGNvcmUgcmVxdWVzdCB0byBnZXQgY3VycmVudCBzb2NrZXQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgYmNtNjN4eF9wY21jaWFfZ2V0X3N0YXR1cyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jaywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqc3RhdHVzKQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKworCXNrdCA9IHNvY2stPmRyaXZlcl9kYXRhOworCisJc3Bpbl9sb2NrX2JoKCZza3QtPmxvY2spOworCSpzdGF0dXMgPSBfX2dldF9zb2NrZXRfc3RhdHVzKHNrdCk7CisJc3Bpbl91bmxvY2tfYmgoJnNrdC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNvY2tldCBwb2xsaW5nIHRpbWVyIGNhbGxiYWNrCisgKi8KK3N0YXRpYyB2b2lkIGJjbTYzeHhfcGNtY2lhX3BvbGwodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKwl1bnNpZ25lZCBpbnQgc3RhdCwgZXZlbnRzOworCisJc2t0ID0gKHN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKilkYXRhOworCisJc3Bpbl9sb2NrX2JoKCZza3QtPmxvY2spOworCisJc3RhdCA9IF9fZ2V0X3NvY2tldF9zdGF0dXMoc2t0KTsKKworCS8qIGtlZXAgb25seSBjaGFuZ2VkIGJpdHMsIGFuZCBtYXNrIHdpdGggcmVxdWlyZWQgb25lIGZyb20gdGhlCisJICogY29yZSAqLworCWV2ZW50cyA9IChzdGF0IF4gc2t0LT5vbGRfc3RhdHVzKSAmIHNrdC0+cmVxdWVzdGVkX3N0YXRlLmNzY19tYXNrOworCXNrdC0+b2xkX3N0YXR1cyA9IHN0YXQ7CisJc3Bpbl91bmxvY2tfYmgoJnNrdC0+bG9jayk7CisKKwlpZiAoZXZlbnRzKQorCQlwY21jaWFfcGFyc2VfZXZlbnRzKCZza3QtPnNvY2tldCwgZXZlbnRzKTsKKworCW1vZF90aW1lcigmc2t0LT50aW1lciwKKwkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhCQ002M1hYX1BDTUNJQV9QT0xMX1JBVEUpKTsKK30KKworc3RhdGljIGludCBiY202M3h4X3BjbWNpYV9zZXRfaW9fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgc3RydWN0IHBjY2FyZF9pb19tYXAgKm1hcCkKK3sKKwkvKiB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWxsZWQgYnkgcGNtY2lhIGxheWVyIGlmIHN0YXRpYworCSAqIG1hcHBpbmcgaXMgdXNlZCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTYzeHhfcGNtY2lhX3NldF9tZW1fbWFwKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzb2NrLAorCQkJCSAgICAgIHN0cnVjdCBwY2NhcmRfbWVtX21hcCAqbWFwKQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXNrdCA9IHNvY2stPmRyaXZlcl9kYXRhOworCWlmIChtYXAtPmZsYWdzICYgTUFQX0FUVFJJQikKKwkJcmVzID0gc2t0LT5hdHRyX3JlczsKKwllbHNlCisJCXJlcyA9IHNrdC0+Y29tbW9uX3JlczsKKworCW1hcC0+c3RhdGljX3N0YXJ0ID0gcmVzLT5zdGFydCArIG1hcC0+Y2FyZF9zdGFydDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2NhcmRfb3BlcmF0aW9ucyBiY202M3h4X3BjbWNpYV9vcGVyYXRpb25zID0geworCS5pbml0CQkJPSBiY202M3h4X3BjbWNpYV9zb2NrX2luaXQsCisJLnN1c3BlbmQJCT0gYmNtNjN4eF9wY21jaWFfc3VzcGVuZCwKKwkuZ2V0X3N0YXR1cwkJPSBiY202M3h4X3BjbWNpYV9nZXRfc3RhdHVzLAorCS5zZXRfc29ja2V0CQk9IGJjbTYzeHhfcGNtY2lhX3NldF9zb2NrZXQsCisJLnNldF9pb19tYXAJCT0gYmNtNjN4eF9wY21jaWFfc2V0X2lvX21hcCwKKwkuc2V0X21lbV9tYXAJCT0gYmNtNjN4eF9wY21jaWFfc2V0X21lbV9tYXAsCit9OworCisvKgorICogcmVnaXN0ZXIgcGNtY2lhIHNvY2tldCB0byBjb3JlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKwlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29jazsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKmlycV9yZXM7CisJdW5zaWduZWQgaW50IHJlZ21lbV9zaXplID0gMCwgaW9tZW1fc2l6ZSA9IDA7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJc2t0ID0ga3phbGxvYyhzaXplb2YoKnNrdCksIEdGUF9LRVJORUwpOworCWlmICghc2t0KQorCQlyZXR1cm4gLUVOT01FTTsKKwlzcGluX2xvY2tfaW5pdCgmc2t0LT5sb2NrKTsKKwlzb2NrID0gJnNrdC0+c29ja2V0OworCXNvY2stPmRyaXZlcl9kYXRhID0gc2t0OworCisJLyogbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHJlc291cmNlcyB3ZSBuZWVkICovCisJc2t0LT5jb21tb25fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlza3QtPmF0dHJfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlza3QtPnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFza3QtPmNvbW1vbl9yZXMgfHwgIXNrdC0+YXR0cl9yZXMgfHwgIWlycV9yZXMgfHwgIXNrdC0+cGQpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJLyogcmVtYXAgcGNtY2lhIHJlZ2lzdGVycyAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVnbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVnbWVtX3NpemUsICJiY202M3h4X3BjbWNpYSIpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKwlza3QtPnJlZ19yZXMgPSByZXM7CisKKwlza3QtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlZ21lbV9zaXplKTsKKwlpZiAoIXNrdC0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiByZW1hcCBpbyByZWdpc3RlcnMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDMpOworCWlvbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJc2t0LT5pb19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpb21lbV9zaXplKTsKKwlpZiAoIXNrdC0+aW9fYmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiByZXNvdXJjZXMgYXJlIHN0YXRpYyAqLworCXNvY2stPnJlc291cmNlX29wcyA9ICZwY2NhcmRfc3RhdGljX29wczsKKwlzb2NrLT5vcHMgPSAmYmNtNjN4eF9wY21jaWFfb3BlcmF0aW9uczsKKwlzb2NrLT5vd25lciA9IFRISVNfTU9EVUxFOworCXNvY2stPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCXNvY2stPmZlYXR1cmVzID0gU1NfQ0FQX1NUQVRJQ19NQVAgfCBTU19DQVBfUENDQVJEOworCXNvY2stPmlvX29mZnNldCA9ICh1bnNpZ25lZCBsb25nKXNrdC0+aW9fYmFzZTsKKwlzb2NrLT5wY2lfaXJxID0gaXJxX3Jlcy0+c3RhcnQ7CisKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCXNvY2stPmNiX2RldiA9IGJjbTYzeHhfY2JfZGV2OworCWlmIChiY202M3h4X2NiX2RldikKKwkJc29jay0+ZmVhdHVyZXMgfD0gU1NfQ0FQX0NBUkRCVVM7CisjZW5kaWYKKworCS8qIGFzc3VtZSBjb21tb24gJiBhdHRyaWJ1dGUgbWVtb3J5IGhhdmUgdGhlIHNhbWUgc2l6ZSAqLworCXNvY2stPm1hcF9zaXplID0gcmVzb3VyY2Vfc2l6ZShza3QtPmNvbW1vbl9yZXMpOworCisJLyogaW5pdGlhbGl6ZSBwb2xsaW5nIHRpbWVyICovCisJc2V0dXBfdGltZXIoJnNrdC0+dGltZXIsIGJjbTYzeHhfcGNtY2lhX3BvbGwsICh1bnNpZ25lZCBsb25nKXNrdCk7CisKKwkvKiBpbml0aWFsaXplICBwY21jaWEgIGNvbnRyb2wgcmVnaXN0ZXIsICBkcml2ZSAgVlNbMTJdIHRvICAwLAorCSAqIGxlYXZlIENCIElEU0VMIHRvIHRoZSBvbGQgIHZhbHVlIHNpbmNlIGl0IGlzIHNldCBieSB0aGUgUENJCisJICogbGF5ZXIgKi8KKwl2YWwgPSBwY21jaWFfcmVhZGwoc2t0LCBQQ01DSUFfQzFfUkVHKTsKKwl2YWwgJj0gUENNQ0lBX0MxX0NCSURTRUxfTUFTSzsKKwl2YWwgfD0gUENNQ0lBX0MxX0VOX1BDTUNJQV9HUElPX01BU0s7CisJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MxX1JFRyk7CisKKwkvKgorCSAqIEhhcmR3YXJlIGhhcyBvbmx5IG9uZSBzZXQgb2YgdGltaW5ncyByZWdpc3RlcnMsIG5vdCBvbmUgZm9yCisJICogZWFjaCBtZW1vcnkgYWNjZXNzIHR5cGUsIHNvIHdlIGNvbmZpZ3VyZSB0aGVtIGZvciB0aGUKKwkgKiBzbG93ZXN0IG9uZTogYXR0cmlidXRlIG1lbW9yeS4KKwkgKi8KKwl2YWwgPSBQQ01DSUFfQzJfREFUQTE2X01BU0s7CisJdmFsIHw9IDEwIDw8IFBDTUNJQV9DMl9SV0NPVU5UX1NISUZUOworCXZhbCB8PSA2IDw8IFBDTUNJQV9DMl9JTkFDVElWRV9TSElGVDsKKwl2YWwgfD0gMyA8PCBQQ01DSUFfQzJfU0VUVVBfU0hJRlQ7CisJdmFsIHw9IDMgPDwgUENNQ0lBX0MyX0hPTERfU0hJRlQ7CisJcGNtY2lhX3dyaXRlbChza3QsIHZhbCwgUENNQ0lBX0MyX1JFRyk7CisKKwlyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KHNvY2spOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJLyogc3RhcnQgcG9sbGluZyBzb2NrZXQgKi8KKwltb2RfdGltZXIoJnNrdC0+dGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkNNNjNYWF9QQ01DSUFfUE9MTF9SQVRFKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBza3QpOworCXJldHVybiAwOworCitlcnI6CisJaWYgKHNrdC0+aW9fYmFzZSkKKwkJaW91bm1hcChza3QtPmlvX2Jhc2UpOworCWlmIChza3QtPmJhc2UpCisJCWlvdW5tYXAoc2t0LT5iYXNlKTsKKwlpZiAoc2t0LT5yZWdfcmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24oc2t0LT5yZWdfcmVzLT5zdGFydCwgcmVnbWVtX3NpemUpOworCWtmcmVlKHNrdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYmNtNjN4eF9kcnZfcGNtY2lhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgKnNrdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXNrdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWRlbF90aW1lcl9zeW5jKCZza3QtPnRpbWVyKTsKKwlpb3VubWFwKHNrdC0+YmFzZSk7CisJaW91bm1hcChza3QtPmlvX2Jhc2UpOworCXJlcyA9IHNrdC0+cmVnX3JlczsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlrZnJlZShza3QpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJjbTYzeHhfcGNtY2lhX2RyaXZlciA9IHsKKwkucHJvYmUJPSBiY202M3h4X2Rydl9wY21jaWFfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJjbTYzeHhfZHJ2X3BjbWNpYV9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImJjbTYzeHhfcGNtY2lhIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisjaWZkZWYgQ09ORklHX0NBUkRCVVMKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJjbTYzeHhfY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJLyoga2VlcCBwY2kgZGV2aWNlICovCisJYmNtNjN4eF9jYl9kZXYgPSBkZXY7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmNtNjN4eF9wY21jaWFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGJjbTYzeHhfY2JfZXhpdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworCWJjbTYzeHhfY2JfZGV2ID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGJjbTYzeHhfY2JfdGFibGVbXSA9IHsKKwl7CisJCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLmRldmljZQkJPSBCQ002MzQ4X0NQVV9JRCwKKwkJLnN1YnZlbmRvcgk9IFBDSV9WRU5ET1JfSURfQlJPQURDT00sCisJCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAorCQkuY2xhc3MJCT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTIDw8IDgsCisJCS5jbGFzc19tYXNrCT0gfjAsCisJfSwKKworCXsKKwkJLnZlbmRvcgkJPSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLAorCQkuZGV2aWNlCQk9IEJDTTYzNThfQ1BVX0lELAorCQkuc3VidmVuZG9yCT0gUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwKKwkJLnN1YmRldmljZQk9IFBDSV9BTllfSUQsCisJCS5jbGFzcwkJPSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgPDwgOCwKKwkJLmNsYXNzX21hc2sJPSB+MCwKKwl9LAorCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJjbTYzeHhfY2JfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYmNtNjN4eF9jYXJkYnVzX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiYmNtNjN4eF9jYXJkYnVzIiwKKwkuaWRfdGFibGUJPSBiY202M3h4X2NiX3RhYmxlLAorCS5wcm9iZQkJPSBiY202M3h4X2NiX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYmNtNjN4eF9jYl9leGl0KSwKK307CisjZW5kaWYKKworLyoKKyAqIGlmIGNhcmRidXMgc3VwcG9ydCBpcyBlbmFibGVkLCByZWdpc3RlciBvdXIgcGxhdGZvcm0gZGV2aWNlIGFmdGVyCisgKiBvdXIgZmFrZSBjYXJkYnVzIGJyaWRnZSBoYXMgYmVlbiByZWdpc3RlcmVkCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGJjbTYzeHhfcGNtY2lhX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfQ0FSREJVUworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiY202M3h4X2NhcmRidXNfZHJpdmVyKTsKKyNlbHNlCisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmNtNjN4eF9wY21jaWFfZHJpdmVyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmNtNjN4eF9wY21jaWFfZXhpdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DQVJEQlVTCisJcmV0dXJuIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmNtNjN4eF9jYXJkYnVzX2RyaXZlcik7CisjZWxzZQorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiY202M3h4X3BjbWNpYV9kcml2ZXIpOworI2VuZGlmCit9CisKK21vZHVsZV9pbml0KGJjbTYzeHhfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQoYmNtNjN4eF9wY21jaWFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzOiBiY202M3h4IFNvY2tldCBDb250cm9sbGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5oIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDk1NzM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuaApAQCAtMCwwICsxLDYwIEBACisjaWZuZGVmIEJDTTYzWFhfUENNQ0lBX0hfCisjZGVmaW5lIEJDTTYzWFhfUENNQ0lBX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CisjaW5jbHVkZSA8YmNtNjN4eF9kZXZfcGNtY2lhLmg+CisKKy8qIHNvY2tldCBwb2xsaW5nIHJhdGUgaW4gbXMgKi8KKyNkZWZpbmUgQkNNNjNYWF9QQ01DSUFfUE9MTF9SQVRFCTUwMAorCitlbnVtIHsKKwlDQVJEX0NBUkRCVVMgPSAoMSA8PCAwKSwKKwlDQVJEX1BDQ0FSRCA9ICgxIDw8IDEpLAorCUNBUkRfNVYgPSAoMSA8PCAyKSwKKwlDQVJEXzNWID0gKDEgPDwgMyksCisJQ0FSRF9YViA9ICgxIDw8IDQpLAorCUNBUkRfWVYgPSAoMSA8PCA1KSwKK307CisKK3N0cnVjdCBiY202M3h4X3BjbWNpYV9zb2NrZXQgeworCXN0cnVjdCBwY21jaWFfc29ja2V0IHNvY2tldDsKKworCS8qIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmNtNjN4eF9wY21jaWFfcGxhdGZvcm1fZGF0YSAqcGQ7CisKKwkvKiBhbGwgcmVncyBhY2Nlc3MgYXJlIHByb3RlY3RlZCBieSB0aGlzIHNwaW5sb2NrICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogcGNtY2lhIHJlZ2lzdGVycyByZXNvdXJjZSAqLworCXN0cnVjdCByZXNvdXJjZSAqcmVnX3JlczsKKworCS8qIGJhc2UgcmVtYXBwZWQgYWRkcmVzcyBvZiByZWdpc3RlcnMgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2U7CisKKwkvKiB3aGV0aGVyIGEgY2FyZCBpcyBkZXRlY3RlZCBhdCB0aGUgbW9tZW50ICovCisJaW50IGNhcmRfZGV0ZWN0ZWQ7CisKKwkvKiB0eXBlIG9mIGRldGVjdGVkIGNhcmQgKG1hc2sgb2YgYWJvdmUgZW51bSkgKi8KKwl1OCBjYXJkX3R5cGU7CisKKwkvKiBrZWVwIGxhc3Qgc29ja2V0IHN0YXR1cyB0byBpbXBsZW1lbnQgZXZlbnQgcmVwb3J0aW5nICovCisJdW5zaWduZWQgaW50IG9sZF9zdGF0dXM7CisKKwkvKiBiYWNrdXAgb2YgcmVxdWVzdGVkIHNvY2tldCBzdGF0ZSAqLworCXNvY2tldF9zdGF0ZV90IHJlcXVlc3RlZF9zdGF0ZTsKKworCS8qIHRpbWVyIHVzZWQgZm9yIHNvY2tldCBzdGF0dXMgcG9sbGluZyAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCisJLyogYXR0cmlidXRlL2NvbW1vbiBtZW1vcnkgcmVzb3VyY2VzICovCisJc3RydWN0IHJlc291cmNlICphdHRyX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmNvbW1vbl9yZXM7CisJc3RydWN0IHJlc291cmNlICppb19yZXM7CisKKwkvKiBiYXNlIGFkZHJlc3Mgb2YgaW8gbWVtb3J5ICovCisJdm9pZCBfX2lvbWVtICppb19iYXNlOworfTsKKworI2VuZGlmIC8qIEJDTTYzWFhfUENNQ0lBX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvYmZpbl9jZl9wY21jaWEuYwppbmRleCBiNTlkNDExLi4zMDBiMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9iZmluX2NmX3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2JmaW5fY2ZfcGNtY2lhLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCiBzdGF0aWMgaW50IGJmaW5fY2Zfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBtZXNnKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBiZmluX2NmX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwppbmRleCA0YTExMGI3Li42YzRhNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtMTQ2Myw3ICsxNDYzLDkgQEAKIAkgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgfQogICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IGNvZGU7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisgICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7CisgICAgaWYgKGZ1bmN0aW9uID09IEJJTkRfRk5fQUxMKQorCSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKICAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCAmdHVwbGUpOwogICAgIGlmIChyZXQgIT0gMCkKIAkgICAgZ290byBkb25lOwpAQCAtMTQ5MCw3ICsxNDkyLDcgQEAKICAgICAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1pbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB1bnNpZ25lZCBpbnQgKmluZm8pCitpbnQgcGNjYXJkX3ZhbGlkYXRlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50ICppbmZvKQogewogICAgIHR1cGxlX3QgKnR1cGxlOwogICAgIGNpc3BhcnNlX3QgKnA7CkBAIC0xNTE1LDMwICsxNTE3LDMwIEBACiAgICAgY291bnQgPSByZXNlcnZlZCA9IDA7CiAgICAgdHVwbGUtPkRlc2lyZWRUdXBsZSA9IFJFVFVSTl9GSVJTVF9UVVBMRTsKICAgICB0dXBsZS0+QXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047Ci0gICAgcmV0ID0gcGNjYXJkX2dldF9maXJzdF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworICAgIHJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKICAgICBpZiAocmV0ICE9IDApCiAJZ290byBkb25lOwogCiAgICAgLyogRmlyc3QgdHVwbGUgc2hvdWxkIGJlIERFVklDRTsgd2Ugc2hvdWxkIHJlYWxseSBoYXZlIGVpdGhlciB0aGF0CiAgICAgICAgb3IgYSBDRlRBQkxFX0VOVFJZIG9mIHNvbWUgc29ydCAqLwogICAgIGlmICgodHVwbGUtPlR1cGxlQ29kZSA9PSBDSVNUUExfREVWSUNFKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX0NGVEFCTEVfRU5UUlksIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWV9DQiwgcCkgPT0gMCkpCisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfQ0ZUQUJMRV9FTlRSWSwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9DRlRBQkxFX0VOVFJZX0NCLCBwKSA9PSAwKSkKIAlkZXZfb2srKzsKIAogICAgIC8qIEFsbCBjYXJkcyBzaG91bGQgaGF2ZSBhIE1BTkZJRCB0dXBsZSwgYW5kL29yIGEgVkVSU18xIG9yIFZFUlNfMgogICAgICAgIHR1cGxlLCBmb3IgY2FyZCBpZGVudGlmaWNhdGlvbi4gIENlcnRhaW4gb2xkIEQtTGluayBhbmQgTGlua3N5cwogICAgICAgIGNhcmRzIGhhdmUgb25seSBhIGJyb2tlbiBWRVJTXzIgdHVwbGU7IGhlbmNlIHRoZSBib2d1cyB0ZXN0LiAqLwotICAgIGlmICgocGNjYXJkX3JlYWRfdHVwbGUocywgZnVuY3Rpb24sIENJU1RQTF9NQU5GSUQsIHApID09IDApIHx8Ci0JKHBjY2FyZF9yZWFkX3R1cGxlKHMsIGZ1bmN0aW9uLCBDSVNUUExfVkVSU18xLCBwKSA9PSAwKSB8fAotCShwY2NhcmRfcmVhZF90dXBsZShzLCBmdW5jdGlvbiwgQ0lTVFBMX1ZFUlNfMiwgcCkgIT0gLUVOT1NQQykpCisgICAgaWYgKChwY2NhcmRfcmVhZF90dXBsZShzLCBCSU5EX0ZOX0FMTCwgQ0lTVFBMX01BTkZJRCwgcCkgPT0gMCkgfHwKKwkocGNjYXJkX3JlYWRfdHVwbGUocywgQklORF9GTl9BTEwsIENJU1RQTF9WRVJTXzEsIHApID09IDApIHx8CisJKHBjY2FyZF9yZWFkX3R1cGxlKHMsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18yLCBwKSAhPSAtRU5PU1BDKSkKIAlpZGVudF9vaysrOwogCiAgICAgaWYgKCFkZXZfb2sgJiYgIWlkZW50X29rKQogCWdvdG8gZG9uZTsKIAogICAgIGZvciAoY291bnQgPSAxOyBjb3VudCA8IE1BWF9UVVBMRVM7IGNvdW50KyspIHsKLQlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKTsKKwlyZXQgPSBwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgQklORF9GTl9BTEwsIHR1cGxlKTsKIAlpZiAocmV0ICE9IDApCiAJCWJyZWFrOwogCWlmICgoKHR1cGxlLT5UdXBsZUNvZGUgPiAweDIzKSAmJiAodHVwbGUtPlR1cGxlQ29kZSA8IDB4NDApKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY3MuYyBiL2RyaXZlcnMvcGNtY2lhL2NzLmMKaW5kZXggMDY2MGFkMS4uNjk4ZDc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvY3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jcy5jCkBAIC05OCwxMCArOTgsMTMgQEAKICAqIFRoZXNlIGZ1bmN0aW9ucyBjaGVjayBmb3IgdGhlIGFwcHJvcHJpYXRlIHN0cnVjdCBwY21jaWFfc29rZXQgYXJyYXlzLAogICogYW5kIHBhc3MgdGhlbSB0byB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBwY21jaWFfe3N1c3BlbmQscmVzdW1lfV9zb2NrZXQKICAqLworc3RhdGljIGludCBzb2NrZXRfZWFybHlfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOworc3RhdGljIGludCBzb2NrZXRfbGF0ZV9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiBzdGF0aWMgaW50IHNvY2tldF9yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCk7CiBzdGF0aWMgaW50IHNvY2tldF9zdXNwZW5kKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpOwogCi1pbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHBjbWNpYV9zb2NrZXRfZGV2X3J1bihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBpbnQgKCpjYikoc3RydWN0IHBjbWNpYV9zb2NrZXQgKikpCiB7CiAJc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldDsKIApAQCAtMTEwLDI5ICsxMTMsMzQgQEAKIAkJaWYgKHNvY2tldC0+ZGV2LnBhcmVudCAhPSBkZXYpCiAJCQljb250aW51ZTsKIAkJbXV0ZXhfbG9jaygmc29ja2V0LT5za3RfbXV0ZXgpOwotCQlzb2NrZXRfc3VzcGVuZChzb2NrZXQpOworCQljYihzb2NrZXQpOwogCQltdXRleF91bmxvY2soJnNvY2tldC0+c2t0X211dGV4KTsKIAl9CiAJdXBfcmVhZCgmcGNtY2lhX3NvY2tldF9saXN0X3J3c2VtKTsKK30KIAoraW50IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X3J1bihkZXYsIHNvY2tldF9zdXNwZW5kKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCk7CiAKK3ZvaWQgcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfZWFybHlfcmVzdW1lKTsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKTsKKwordm9pZCBwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcGNtY2lhX3NvY2tldF9kZXZfcnVuKGRldiwgc29ja2V0X2xhdGVfcmVzdW1lKTsKK30KK0VYUE9SVF9TWU1CT0wocGNtY2lhX3NvY2tldF9kZXZfbGF0ZV9yZXN1bWUpOworCiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0OwotCi0JZG93bl9yZWFkKCZwY21jaWFfc29ja2V0X2xpc3RfcndzZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc29ja2V0LCAmcGNtY2lhX3NvY2tldF9saXN0LCBzb2NrZXRfbGlzdCkgewotCQlpZiAoc29ja2V0LT5kZXYucGFyZW50ICE9IGRldikKLQkJCWNvbnRpbnVlOwotCQltdXRleF9sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JCXNvY2tldF9yZXN1bWUoc29ja2V0KTsKLQkJbXV0ZXhfdW5sb2NrKCZzb2NrZXQtPnNrdF9tdXRleCk7Ci0JfQotCXVwX3JlYWQoJnBjbWNpYV9zb2NrZXRfbGlzdF9yd3NlbSk7Ci0KKwlwY21jaWFfc29ja2V0X2Rldl9ydW4oZGV2LCBzb2NrZXRfcmVzdW1lKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKTsKQEAgLTU0NiwyOSArNTU0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZXN1bWUgYSBzb2NrZXQuICBJZiBhIGNhcmQgaXMgcHJlc2VudCwgdmVyaWZ5IGl0cyBDSVMgYWdhaW5zdAotICogb3VyIGNhY2hlZCBjb3B5LiAgSWYgdGhleSBhcmUgZGlmZmVyZW50LCB0aGUgY2FyZCBoYXMgYmVlbgotICogcmVwbGFjZWQsIGFuZCB3ZSBuZWVkIHRvIHRlbGwgdGhlIGRyaXZlcnMuCi0gKi8KLXN0YXRpYyBpbnQgc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KQorc3RhdGljIGludCBzb2NrZXRfZWFybHlfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCiB7Ci0JaW50IHJldDsKLQotCWlmICghKHNrdC0+c3RhdGUgJiBTT0NLRVRfU1VTUEVORCkpCi0JCXJldHVybiAtRUJVU1k7Ci0KIAlza3QtPnNvY2tldCA9IGRlYWRfc29ja2V0OwogCXNrdC0+b3BzLT5pbml0KHNrdCk7CiAJc2t0LT5vcHMtPnNldF9zb2NrZXQoc2t0LCAmc2t0LT5zb2NrZXQpOworCWlmIChza3QtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpCisJCXNrdC0+cmVzdW1lX3N0YXR1cyA9IHNvY2tldF9zZXR1cChza3QsIHJlc3VtZV9kZWxheSk7CisJcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBpbnQgc29ja2V0X2xhdGVfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CiAJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkgewogCQlza3QtPnN0YXRlICY9IH5TT0NLRVRfU1VTUEVORDsKIAkJcmV0dXJuIHNvY2tldF9pbnNlcnQoc2t0KTsKIAl9CiAKLQlyZXQgPSBzb2NrZXRfc2V0dXAoc2t0LCByZXN1bWVfZGVsYXkpOwotCWlmIChyZXQgPT0gMCkgeworCWlmIChza3QtPnJlc3VtZV9zdGF0dXMgPT0gMCkgewogCQkvKgogCQkgKiBGSVhNRTogbmVlZCBhIGJldHRlciBjaGVjayBoZXJlIGZvciBjYXJkYnVzIGNhcmRzLgogCQkgKi8KQEAgLTU5Niw2ICs1OTksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFJlc3VtZSBhIHNvY2tldC4gIElmIGEgY2FyZCBpcyBwcmVzZW50LCB2ZXJpZnkgaXRzIENJUyBhZ2FpbnN0CisgKiBvdXIgY2FjaGVkIGNvcHkuICBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHRoZSBjYXJkIGhhcyBiZWVuCisgKiByZXBsYWNlZCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZHJpdmVycy4KKyAqLworc3RhdGljIGludCBzb2NrZXRfcmVzdW1lKHN0cnVjdCBwY21jaWFfc29ja2V0ICpza3QpCit7CisJaWYgKCEoc2t0LT5zdGF0ZSAmIFNPQ0tFVF9TVVNQRU5EKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXNvY2tldF9lYXJseV9yZXN1bWUoc2t0KTsKKwlyZXR1cm4gc29ja2V0X2xhdGVfcmVzdW1lKHNrdCk7Cit9CisKIHN0YXRpYyB2b2lkIHNvY2tldF9yZW1vdmUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAlkZXZfcHJpbnRrKEtFUk5fTk9USUNFLCAmc2t0LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oIGIvZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaAppbmRleCA3OTYxNWU2Li4xZjQwOThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgKQEAgLTE5Nyw4ICsxOTcsNyBAQAogCQkgICAgICBjaXNkYXRhX3QgY29kZSwgdm9pZCAqcGFyc2UpOwogaW50IHBjbWNpYV9yZXBsYWNlX2NpcyhzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywKIAkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKTsKLWludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCi0JCQl1bnNpZ25lZCBpbnQgKmNvdW50KTsKK2ludCBwY2NhcmRfdmFsaWRhdGVfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgKmNvdW50KTsKIAogLyogcnNyY19tZ3IuYyAqLwogaW50IHBjbWNpYV92YWxpZGF0ZV9tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvZHMuYyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKaW5kZXggOWYzMDBkMy4uZjViNzA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvZHMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9kcy5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAlpZiAoIXZlcnMxKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcGNjYXJkX3JlYWRfdHVwbGUocF9kZXYtPnNvY2tldCwgcF9kZXYtPmZ1bmMsCisJaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBCSU5EX0ZOX0FMTCwKIAkJCSAgICAgICBDSVNUUExfTUFORklELCAmbWFuZl9pZCkpIHsKIAkJcF9kZXYtPm1hbmZfaWQgPSBtYW5mX2lkLm1hbmY7CiAJCXBfZGV2LT5jYXJkX2lkID0gbWFuZl9pZC5jYXJkOwpAQCAtNTgxLDkgKzU4MSw5IEBACiAJCWtmcmVlKGRldmdlbyk7CiAJfQogCi0JaWYgKCFwY2NhcmRfcmVhZF90dXBsZShwX2Rldi0+c29ja2V0LCBwX2Rldi0+ZnVuYywgQ0lTVFBMX1ZFUlNfMSwKKwlpZiAoIXBjY2FyZF9yZWFkX3R1cGxlKHBfZGV2LT5zb2NrZXQsIEJJTkRfRk5fQUxMLCBDSVNUUExfVkVSU18xLAogCQkJICAgICAgIHZlcnMxKSkgewotCQlmb3IgKGk9MDsgaSA8IHZlcnMxLT5uczsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBtaW5fdCh1bnNpZ25lZCBpbnQsIDQsIHZlcnMxLT5ucyk7IGkrKykgewogCQkJY2hhciAqdG1wOwogCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKIApAQCAtNzMzLDcgKzczMyw3IEBACiAJCXJldHVybiAtRUFHQUlOOyAvKiB0cnkgYWdhaW4sIGJ1dCBsYXRlci4uLiAqLwogCX0KIAotCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgQklORF9GTl9BTEwsICZub19jaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJm5vX2NoYWlucyk7CiAJaWYgKHJldCB8fCAhbm9fY2hhaW5zKSB7CiAJCWRzX2Rldl9kYmcoMCwgJnMtPmRldiwgImludmFsaWQgQ0lTIG9yIGludmFsaWQgcmVzb3VyY2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIwOTIuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCmluZGV4IDQ2NTYxZmEuLmEwNGYyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjA5Mi5jCkBAIC00Miw3ICs0Miw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGk4MjA5MmFhX3NvY2tldF9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBpODIwOTJhYV9zb2NrZXRfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwppbmRleCA0MGQ0OTUzLi5hNGFhY2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYworKysgYi9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYwpAQCAtMTA1Myw4ICsxMDUzLDggQEAKICAgICB1X2NoYXIgbWFwLCBpb2N0bDsKICAgICAKICAgICBkZWJ1ZygxLCAiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JICAiJSN4LSUjeClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJICAiJSNsbHgtJSNsbHgpXG4iLCBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsIGlvLT5zcGVlZCwKKwkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKICAgICBtYXAgPSBpby0+bWFwOwogICAgIGlmICgobWFwID4gMSkgfHwgKGlvLT5zdGFydCA+IDB4ZmZmZikgfHwgKGlvLT5zdG9wID4gMHhmZmZmKSB8fAogCShpby0+c3RvcCA8IGlvLT5zdGFydCkpIHJldHVybiAtRUlOVkFMOwpAQCAtMTI0MSw3ICsxMjQxLDcgQEAKIHN0YXRpYyBpbnQgaTgyMzY1X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKaW5kZXggNjJiNGVjYy4uN2RmYmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCkBAIC01MzcsOCArNTM3LDkgQEAKIAl1X2NoYXIgbWFwOwogCiAJZGVidWcoMywgIm0zMnJfY2ZjOiBTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICAiJSNseC0lI2x4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQkgIGlvLT5zcGVlZCwgaW8tPnN0YXJ0LCBpby0+c3RvcCk7CisJCSAgIiUjbGx4LSUjbGx4KVxuIiwgc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQkgIGlvLT5zcGVlZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RvcCk7CiAJbWFwID0gaW8tPm1hcDsKIAogCXJldHVybiAwOwpAQCAtNTU0LDggKzU1NSw5IEBACiAJcGNjX3NvY2tldF90ICp0ID0gJnNvY2tldFtzb2NrXTsKIAogCWRlYnVnKDMsICJtMzJyX2NmYzogU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkgIiUjbHgsICUjeClcbiIsIHNvY2ssIG1hcCwgbWVtLT5mbGFncywKLQkJIG1lbS0+c3BlZWQsIG1lbS0+c3RhdGljX3N0YXJ0LCBtZW0tPmNhcmRfc3RhcnQpOworCQkgIiUjbGx4LCAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCkBAIC02OTksNyArNzAxLDcgQEAKIHN0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBjZmNfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKaW5kZXggMTIwMzRiNC4uYzY1MjRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCkBAIC00OTIsOCArNDkyLDkgQEAKIAl1X2NoYXIgbWFwOwogCiAJZGVidWcoMywgIm0zMnItcGNjOiBTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICAiJSN4LSUjeClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKLQkJICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkgICIlI2xseC0lI2xseClcbiIsIHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywKKwkJICBpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogCW1hcCA9IGlvLT5tYXA7CiAKIAlyZXR1cm4gMDsKQEAgLTUxNSw4ICs1MTYsOSBAQAogI2VuZGlmCiAKIAlkZWJ1ZygzLCAibTMyci1wY2M6IFNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJICIlI2x4LCAgJSN4KVxuIiwgc29jaywgbWFwLCBtZW0tPmZsYWdzLAotCQkgbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSAiJSNsbHgsICAlI3gpXG4iLCBzb2NrLCBtYXAsIG1lbS0+ZmxhZ3MsCisJCSBtZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQkgbWVtLT5jYXJkX3N0YXJ0KTsKIAogCS8qCiAJICogc2FuaXR5IGNoZWNrCkBAIC02NzUsNyArNjc3LDcgQEAKIHN0YXRpYyBpbnQgcGNjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggZDFhZDA5Ni4uNDAzNTU5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC05NzUsOCArOTc1LDkgQEAKICNkZWZpbmUgTThYWF9CQVNFIChQQ01DSUFfSU9fV0lOX0JBU0UgKyBpby0+c3RhcnQpCiAKIAlkcHJpbnRrKCJTZXRJT01hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNC40eC0lIzQuNHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAotCQlpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCQkiJSM0LjRsbHgtJSM0LjRsbHgpXG4iLCBsc29jaywgaW8tPm1hcCwgaW8tPmZsYWdzLAorCQlpby0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKWlvLT5zdG9wKTsKIAogCWlmICgoaW8tPm1hcCA+PSBQQ01DSUFfSU9fV0lOX05PKSB8fCAoaW8tPnN0YXJ0ID4gMHhmZmZmKQogCSAgICB8fCAoaW8tPnN0b3AgPiAweGZmZmYpIHx8IChpby0+c3RvcCA8IGlvLT5zdGFydCkpCkBAIC0xMDU1LDggKzEwNTYsOSBAQAogCXBjbWNvbmY4eHhfdCAqcGNtY2lhID0gcy0+cGNtY2lhOwogCiAJZHByaW50aygiU2V0TWVtTWFwKCVkLCAlZCwgJSMyLjJ4LCAlZCBucywgIgotCQkiJSM1LjVseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAotCQltZW0tPnNwZWVkLCBtZW0tPnN0YXRpY19zdGFydCwgbWVtLT5jYXJkX3N0YXJ0KTsKKwkJIiUjNS41bGx4LCAlIzUuNXgpXG4iLCBsc29jaywgbWVtLT5tYXAsIG1lbS0+ZmxhZ3MsCisJCW1lbS0+c3BlZWQsICh1bnNpZ25lZCBsb25nIGxvbmcpbWVtLT5zdGF0aWNfc3RhcnQsCisJCW1lbS0+Y2FyZF9zdGFydCk7CiAKIAlpZiAoKG1lbS0+bWFwID49IFBDTUNJQV9NRU1fV0lOX05PKQogLy8gICAgICAgICAgfHwgKChtZW0tPnMpID49IFBDTUNJQV9NRU1fV0lOX1NJWkUpCkBAIC0xMTA3LDggKzExMDksOSBAQAogCX0KIAogCWRwcmludGsoIlNldE1lbU1hcCglZCwgJWQsICUjMi4yeCwgJWQgbnMsICIKLQkJIiUjNS41bHgsICUjNS41eClcbiIsIGxzb2NrLCBtZW0tPm1hcCwgbWVtLT5mbGFncywKLQkJbWVtLT5zcGVlZCwgbWVtLT5zdGF0aWNfc3RhcnQsIG1lbS0+Y2FyZF9zdGFydCk7CisJCSIlIzUuNWxseCwgJSM1LjV4KVxuIiwgbHNvY2ssIG1lbS0+bWFwLCBtZW0tPmZsYWdzLAorCQltZW0tPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbS0+c3RhdGljX3N0YXJ0LAorCQltZW0tPmNhcmRfc3RhcnQpOwogCiAJLyogY29weSB0aGUgc3RydWN0IGFuZCBtb2RpZnkgdGhlIGNvcHkgKi8KIApAQCAtMTI5Niw3ICsxMjk5LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgbTh4eF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmcGRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgbTh4eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwppbmRleCBmMzczNjM5Li42ODU3MGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKKysrIGIvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogc3RhdGljIGludCBvbWFwX2NmX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldiwgbWVzZyk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJnBkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9jZl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKaW5kZXggMzJjNDQwNC4uMzBjZjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX2lvY3RsLmMKQEAgLTg4MSw3ICs4ODEsNyBAQAogCW11dGV4X2xvY2soJnMtPnNrdF9tdXRleCk7CiAJcGNtY2lhX3ZhbGlkYXRlX21lbShzKTsKIAltdXRleF91bmxvY2soJnMtPnNrdF9tdXRleCk7Ci0JcmV0ID0gcGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOworCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgJmJ1Zi0+Y2lzaW5mby5DaGFpbnMpOwogCWJyZWFrOwogICAgIGNhc2UgRFNfU1VTUEVORF9DQVJEOgogCXJldCA9IHBjbWNpYV9zdXNwZW5kX2NhcmQocyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCmluZGV4IDhiZWQxZGEuLjcwYTMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jCkBAIC02NDEsNiArNjQxLDEyIEBACiAJaWYgKChyZXQgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpKSkKIAkJZ290byBlcnJfb3V0X2ZyZWVfbWVtOwogCisJaWYgKCFwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IHJlZnVzaW5nIHRvIGxvYWQgdGhlIGRyaXZlciAiCisJCQkJICJhcyB0aGUgaW9fYmFzZSBpcyAwLlxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX21lbTsKKwl9CisKIAlwcmludGsoS0VSTl9JTkZPICJwZDY3Mjk6IENpcnJ1cyBQRDY3MjkgUENJIHRvIFBDTUNJQSBCcmlkZ2UgIgogCQkiYXQgMHglbGx4IG9uIGlycSAlZFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwgZGV2LT5pcnEpOwpAQCAtNzU4LDcgKzc2NCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHBkNjcyOV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBwZDY3Mjlfc29ja2V0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYzQ5YTcyNi4uMGUzNWFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0zMDAsMjUgKzMwMCwyOSBAQAogCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2KTsKIH0KIAotc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXB4YTJ4eF9jb25maWd1cmVfc29ja2V0cygmZGV2LT5kZXYpOwotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKKwlweGEyeHhfY29uZmlndXJlX3NvY2tldHMoZGV2KTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKGRldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyAgcHhhMnh4X2Rydl9wY21jaWFfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhMnh4X2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9wY21jaWFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfZHJ2X3BjbWNpYV9wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YTJ4eF9kcnZfcGNtY2lhX3JlbW92ZSwKLQkuc3VzcGVuZCAJPSBweGEyeHhfZHJ2X3BjbWNpYV9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcHhhMnh4X2Rydl9wY21jaWFfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJweGEyeHgtcGNtY2lhIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZweGEyeHhfZHJ2X3BjbWNpYV9wbV9vcHMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtdGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg5OTNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCkBAIC0wLDAgKzEsMjMwIEBACisvKgorICogbGludXgvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG10Yy5jCisgKgorICogRHJpdmVyIGZvciBQYWxtIFR1bmdzdGVufEMgUENNQ0lBCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFsZXggT3Nib3JuZSA8YXRvQG1lc2h5Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtdGMuaD4KKyNpbmNsdWRlICJzb2NfY29tbW9uLmgiCisKK3N0YXRpYyBpbnQgcGFsbXRjX3BjbWNpYV9od19pbml0KHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgIlBDTUNJQSBQV1IxIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIxLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMiwgIlBDTUNJQSBQV1IyIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMywgIlBDTUNJQSBQV1IzIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAiUENNQ0lBIFJTVCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNDsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFU0VULCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjU7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZLCAiUENNQ0lBIFJEWSIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNTsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyNjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFksICJQQ01DSUEgUFdSUkRZIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI2OworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI3OworCisJc2t0LT5pcnEgPSBJUlFfR1BJTyhHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVBRFkpOworCXJldHVybiAwOworCitlcnI3OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFkpOworZXJyNjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKK2VycjU6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCk7CitlcnI0OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzKTsKK2VycjM6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIpOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19wY21jaWFfaHdfc2h1dGRvd24oc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QV1JSRUFEWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRUFEWSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjMpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIyKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10Y19wY21jaWFfc29ja2V0X3N0YXRlKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0LAorCQkJCQlzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+ZGV0ZWN0ID0gMTsgLyogYWx3YXlzIGluc2VydGVkICovCisJc3RhdGUtPnJlYWR5ICA9ICEhZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1JFQURZKTsKKwlzdGF0ZS0+YnZkMSAgID0gMTsKKwlzdGF0ZS0+YnZkMiAgID0gMTsKKwlzdGF0ZS0+d3Jwcm90ID0gMDsKKwlzdGF0ZS0+dnNfM3YgID0gMTsKKwlzdGF0ZS0+dnNfWHYgID0gMDsKK30KKworc3RhdGljIGludCBwYWxtdGNfd2lmaV9wb3dlcmRvd24odm9pZCkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDEpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDApOworCW1kZWxheSg0MCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVENfUENNQ0lBX1BPV0VSMSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXRjX3dpZmlfcG93ZXJ1cCh2b2lkKQoreworCWludCB0aW1lb3V0ID0gNTA7CisKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAxKTsKKwltZGVsYXkoNTApOworCisJLyogUG93ZXIgdXAgdGhlIGNhcmQsIDEuOFYgZmlyc3QsIGFmdGVyIGEgd2hpbGUgMy4zViAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjEsIDEpOworCW1kZWxheSgxMDApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9QT1dFUjIsIDEpOworCisJLyogV2FpdCB0aWxsIHRoZSBjYXJkIGlzIHJlYWR5ICovCisJd2hpbGUgKCFncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUFdSUkVBRFkpICYmCisJCXRpbWVvdXQpIHsKKwkJbWRlbGF5KDEpOworCQl0aW1lb3V0LS07CisJfQorCisJLyogUG93ZXIgZG93biB0aGUgV2lGaSBpbiBjYXNlIG9mIGVycm9yICovCisJaWYgKCF0aW1lb3V0KSB7CisJCXBhbG10Y193aWZpX3Bvd2VyZG93bigpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBSZXNldCB0aGUgY2FyZCAqLworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVRDX1BDTUNJQV9SRVNFVCwgMSk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUkVTRVQsIDApOworCW1kZWxheSgyNSk7CisKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UQ19QQ01DSUFfUE9XRVIzLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhbG10Y19wY21jaWFfY29uZmlndXJlX3NvY2tldChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCwKKwkJCQkJY29uc3Qgc29ja2V0X3N0YXRlX3QgKnN0YXRlKQoreworCWludCByZXQgPSAxOworCisJaWYgKHN0YXRlLT5WY2MgPT0gMCkKKwkJcmV0ID0gcGFsbXRjX3dpZmlfcG93ZXJkb3duKCk7CisJZWxzZSBpZiAoc3RhdGUtPlZjYyA9PSAzMykKKwkJcmV0ID0gcGFsbXRjX3dpZmlfcG93ZXJ1cCgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHZvaWQgcGFsbXRjX3BjbWNpYV9zb2NrZXRfc3VzcGVuZChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKK3sKK30KKworc3RhdGljIHN0cnVjdCBwY21jaWFfbG93X2xldmVsIHBhbG10Y19wY21jaWFfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisKKwkuZmlyc3QJCQk9IDAsCisJLm5yCQkJPSAxLAorCisJLmh3X2luaXQJCT0gcGFsbXRjX3BjbWNpYV9od19pbml0LAorCS5od19zaHV0ZG93bgkJPSBwYWxtdGNfcGNtY2lhX2h3X3NodXRkb3duLAorCisJLnNvY2tldF9zdGF0ZQkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdGF0ZSwKKwkuY29uZmlndXJlX3NvY2tldAk9IHBhbG10Y19wY21jaWFfY29uZmlndXJlX3NvY2tldCwKKworCS5zb2NrZXRfaW5pdAkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9pbml0LAorCS5zb2NrZXRfc3VzcGVuZAkJPSBwYWxtdGNfcGNtY2lhX3NvY2tldF9zdXNwZW5kLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBhbG10Y19wY21jaWFfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBwYWxtdGNfcGNtY2lhX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX3BhbG10YygpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBhbG10Y19wY21jaWFfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtcGNtY2lhIiwgLTEpOworCWlmICghcGFsbXRjX3BjbWNpYV9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBhbG10Y19wY21jaWFfZGV2aWNlLCAmcGFsbXRjX3BjbWNpYV9vcHMsCisJCQkJCXNpemVvZihwYWxtdGNfcGNtY2lhX29wcykpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGFsbXRjX3BjbWNpYV9kZXZpY2UpOworCisJaWYgKHJldCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwYWxtdGNfcGNtY2lhX2RldmljZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFsbXRjX3BjbWNpYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGFsbXRjX3BjbWNpYV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChwYWxtdGNfcGNtY2lhX2luaXQpOworbW9kdWxlX2V4aXQocGFsbXRjX3BjbWNpYV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPiwiCisJICAgICIgTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENNQ0lBIHN1cHBvcnQgZm9yIFBhbG0gVHVuZ3N0ZW58QyIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpweGEyeHgtcGNtY2lhIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jIGIvZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYwppbmRleCA5Y2EyMmM3Li43MDM5ZjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMKQEAgLTIwNiw2ICsyMDYsNyBAQAogICAgIC8qIEZpcnN0LCB3aGF0IGRvZXMgYSBmbG9hdGluZyBwb3J0IGxvb2sgbGlrZT8gKi8KICAgICBiID0ga3phbGxvYygyNTYsIEdGUF9LRVJORUwpOwogICAgIGlmICghYikgeworCSAgICBwcmludGsoIlxuIik7CiAJICAgIGRldl9wcmludGsoS0VSTl9FUlIsICZzLT5kZXYsCiAJCSAgICJkb19pb19wcm9iZTogdW5hYmxlIHRvIGttYWxsb2MgMjU2IGJ5dGVzIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzUsNyArMjc2LDcgQEAKIAlzLT5jaXNfbWVtLnJlcyA9IHJlczsKIAlzLT5jaXNfdmlydCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcy0+bWFwX3NpemUpOwogCWlmIChzLT5jaXNfdmlydCkgewotCQlyZXQgPSBwY2NhcmRfdmFsaWRhdGVfY2lzKHMsIEJJTkRfRk5fQUxMLCBjb3VudCk7CisJCXJldCA9IHBjY2FyZF92YWxpZGF0ZV9jaXMocywgY291bnQpOwogCQkvKiBpbnZhbGlkYXRlIG1hcHBpbmcgYW5kIENJUyBjYWNoZSAqLwogCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKIAkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9hc3NhYmV0LmMKaW5kZXggZjQyNDE0Ni4uYWM4YWEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2Fzc2FiZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfYXNzYWJldC5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkuc29ja2V0X3N1c3BlbmQJCT0gYXNzYWJldF9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCi1pbnQgX19pbml0IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBjbWNpYV9hc3NhYmV0X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBkOGRhNWFjLi4yZDBlOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTg5LDcgKzg5LDcgQEAKIHN0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX25lcG9uc2V0LmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwppbmRleCA0YzQxZTg2Li4wYzc2ZDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfbmVwb25zZXQuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAJLnNvY2tldF9zdXNwZW5kIAk9IHNhMTExMV9wY21jaWFfc29ja2V0X3N1c3BlbmQsCiB9OwogCi1pbnQgX19pbml0IHBjbWNpYV9uZXBvbnNldF9pbml0KHN0cnVjdCBzYTExMTFfZGV2ICpzYWRldikKK2ludCBwY21jaWFfbmVwb25zZXRfaW5pdChzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYpCiB7CiAJaW50IHJldCA9IC1FTk9ERVY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IDQwMTA1MmEyLi40YmU0ZTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCiBzdGF0aWMgaW50IHBjbWNpYV9zdXNwZW5kKHN0cnVjdCBzYTExMTFfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHBjbWNpYV9yZXN1bWUoc3RydWN0IHNhMTExMV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYyBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYwppbmRleCAxNjNjZjk4Li5lZjdlOWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCkBAIC0zMzYsOCArMzM2LDkgQEAKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCA9IHRvX3NvY19wY21jaWFfc29ja2V0KHNvY2spOwogCXVuc2lnbmVkIHNob3J0IHNwZWVkID0gbWFwLT5zcGVlZDsKIAotCWRlYnVnKHNrdCwgMiwgIm1hcCAldSAgc3BlZWQgJXUgc3RhcnQgMHglMDh4IHN0b3AgMHglMDh4XG4iLAotCQltYXAtPm1hcCwgbWFwLT5zcGVlZCwgbWFwLT5zdGFydCwgbWFwLT5zdG9wKTsKKwlkZWJ1Zyhza3QsIDIsICJtYXAgJXUgIHNwZWVkICV1IHN0YXJ0IDB4JTA4bGx4IHN0b3AgMHglMDhsbHhcbiIsCisJCW1hcC0+bWFwLCBtYXAtPnNwZWVkLCAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+c3RhcnQsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5zdG9wKTsKIAlkZWJ1Zyhza3QsIDIsICJmbGFnczogJXMlcyVzJXMlcyVzJXMlc1xuIiwKIAkJKG1hcC0+ZmxhZ3M9PTApPyI8Tk9ORT4iOiIiLAogCQkobWFwLT5mbGFncyZNQVBfQUNUSVZFKT8iQUNUSVZFICI6IiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCmluZGV4IGZmOWEzYmIuLjc4ZDVhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jCkBAIC0zMDAsNyArMzAwLDcgQEAKIAogCQlpZiAoIShzLT5zdGF0ZSAmIFNPQ0tFVF9QUkVTRU5UKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlpZiAocGNjYXJkX3ZhbGlkYXRlX2NpcyhzLCBCSU5EX0ZOX0FMTCwgJmNoYWlucykpCisJCWlmIChwY2NhcmRfdmFsaWRhdGVfY2lzKHMsICZjaGFpbnMpKQogCQkJcmV0dXJuIC1FSU87CiAJCWlmICghY2hhaW5zKQogCQkJcmV0dXJuIC1FTk9EQVRBOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDhlYjA0MjMuLjY5MTg4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2Niw3ICszNjYsNyBAQAogc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2KTsKIH0KIAogc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTczMiw4ICs3MzIsOCBAQAogICAgIHVfc2hvcnQgYmFzZSwgbGVuLCBpb2N0bDsKICAgICAKICAgICBkZWJ1ZygxLCAiU2V0SU9NYXAoJWQsICVkLCAlIzIuMngsICVkIG5zLCAiCi0JICAiJSN4LSUjeClcbiIsIHBzb2NrLCBpby0+bWFwLCBpby0+ZmxhZ3MsCi0JICBpby0+c3BlZWQsIGlvLT5zdGFydCwgaW8tPnN0b3ApOworCSAgIiUjbGx4LSUjbGx4KVxuIiwgcHNvY2ssIGlvLT5tYXAsIGlvLT5mbGFncywgaW8tPnNwZWVkLAorCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpby0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpaW8tPnN0b3ApOwogICAgIGlmICgoaW8tPm1hcCA+IDEpIHx8IChpby0+c3RhcnQgPiAweGZmZmYpIHx8IChpby0+c3RvcCA+IDB4ZmZmZikgfHwKIAkoaW8tPnN0b3AgPCBpby0+c3RhcnQpKSByZXR1cm4gLUVJTlZBTDsKICAgICB0Y2ljX3NldHcoVENJQ19BRERSKzIsIFRDSUNfQURSMl9JTkRSRUcgfCAocHNvY2sgPDwgVENJQ19TU19TSEZUKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS92cmM0MTcxX2NhcmQuYyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCmluZGV4IGQ0YWQ1MGQuLmM5ZmNiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jCkBAIC03MDcsNyArNzA3LDcgQEAKIHN0YXRpYyBpbnQgdnJjNDE3MV9jYXJkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCSAgICAgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldiwgc3RhdGUpOworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKCZkZXYtPmRldik7CiB9CiAKIHN0YXRpYyBpbnQgdnJjNDE3MV9jYXJkX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IGI0NTllODcuLjhiZTRjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0xMjI1LDYwICsxMjI1LDgxIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgeWVudGFfZGV2X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgeWVudGFfZGV2X3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKKwlyZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldik7CiAKLQlpZiAoc29ja2V0KSB7Ci0JCWlmIChzb2NrZXQtPnR5cGUgJiYgc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKQotCQkJc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKHNvY2tldCk7CisJaWYgKCFzb2NrZXQpCisJCXJldHVybiByZXQ7CiAKLQkJLyogRklYTUU6IHBjaV9zYXZlX3N0YXRlIG5lZWRzIHRvIGhhdmUgYSBiZXR0ZXIgaW50ZXJmYWNlICovCi0JCXBjaV9zYXZlX3N0YXRlKGRldik7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDE2KjQsICZzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMTcqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOwotCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoc29ja2V0LT50eXBlICYmIHNvY2tldC0+dHlwZS0+c2F2ZV9zdGF0ZSkKKwkJc29ja2V0LT50eXBlLT5zYXZlX3N0YXRlKHNvY2tldCk7CiAKLQkJLyoKLQkJICogU29tZSBsYXB0b3BzIChJQk0gVDIyKSBkbyBub3QgbGlrZSB1cyBwdXR0aW5nIHRoZSBDYXJkYnVzCi0JCSAqIGJyaWRnZSBpbnRvIEQzLiAgQXQgYSBndWVzcywgc29tZSBvdGhlciBsYXB0b3Agd2lsbAotCQkgKiBwcm9iYWJseSByZXF1aXJlIHRoaXMsIHNvIGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQgZm9yIG5vdy4KLQkJICovCi0JCS8qIHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCAzKTsgKi8KLQl9CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDE2KjQsICZzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMTcqNCwgJnNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCS8qCisJICogU29tZSBsYXB0b3BzIChJQk0gVDIyKSBkbyBub3QgbGlrZSB1cyBwdXR0aW5nIHRoZSBDYXJkYnVzCisJICogYnJpZGdlIGludG8gRDMuICBBdCBhIGd1ZXNzLCBzb21lIG90aGVyIGxhcHRvcCB3aWxsCisJICogcHJvYmFibHkgcmVxdWlyZSB0aGlzLCBzbyBsZWF2ZSBpdCBjb21tZW50ZWQgb3V0IGZvciBub3cuCisJICovCisJLyogcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIDMpOyAqLwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi1zdGF0aWMgaW50IHllbnRhX2Rldl9yZXN1bWUgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCB5ZW50YV9zb2NrZXQgKnNvY2tldCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCi0JaWYgKHNvY2tldCkgewotCQlpbnQgcmM7CisJaWYgKCFzb2NrZXQpCisJCXJldHVybiAwOwogCi0JCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCAwKTsKLQkJLyogRklYTUU6IHBjaV9yZXN0b3JlX3N0YXRlIG5lZWRzIHRvIGhhdmUgYSBiZXR0ZXIgaW50ZXJmYWNlICovCi0JCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAxNio0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzBdKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDE3KjQsIHNvY2tldC0+c2F2ZWRfc3RhdGVbMV0pOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMTYqNCwgc29ja2V0LT5zYXZlZF9zdGF0ZVswXSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAxNyo0LCBzb2NrZXQtPnNhdmVkX3N0YXRlWzFdKTsKIAotCQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JCXBjaV9zZXRfbWFzdGVyKGRldik7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQkJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUpCi0JCQlzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUoc29ja2V0KTsKLQl9CisJaWYgKHNvY2tldC0+dHlwZSAmJiBzb2NrZXQtPnR5cGUtPnJlc3RvcmVfc3RhdGUpCisJCXNvY2tldC0+dHlwZS0+cmVzdG9yZV9zdGF0ZShzb2NrZXQpOwogCi0JcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSgmZGV2LT5kZXYpOworCXBjbWNpYV9zb2NrZXRfZGV2X2Vhcmx5X3Jlc3VtZShkZXYpOworCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IHllbnRhX2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBjbWNpYV9zb2NrZXRfZGV2X2xhdGVfcmVzdW1lKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB5ZW50YV9wbV9vcHMgPSB7CisJLnN1c3BlbmRfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKKwkucmVzdW1lX25vaXJxID0geWVudGFfZGV2X3Jlc3VtZV9ub2lycSwKKwkucmVzdW1lID0geWVudGFfZGV2X3Jlc3VtZSwKKwkuZnJlZXplX25vaXJxID0geWVudGFfZGV2X3N1c3BlbmRfbm9pcnEsCisJLnRoYXdfbm9pcnEgPSB5ZW50YV9kZXZfcmVzdW1lX25vaXJxLAorCS50aGF3ID0geWVudGFfZGV2X3Jlc3VtZSwKKwkucG93ZXJvZmZfbm9pcnEgPSB5ZW50YV9kZXZfc3VzcGVuZF9ub2lycSwKKwkucmVzdG9yZV9ub2lycSA9IHllbnRhX2Rldl9yZXN1bWVfbm9pcnEsCisJLnJlc3RvcmUgPSB5ZW50YV9kZXZfcmVzdW1lLAorfTsKKworI2RlZmluZSBZRU5UQV9QTV9PUFMJKCZ5ZW50YV9wbV9vcHMpCisjZWxzZQorI2RlZmluZSBZRU5UQV9QTV9PUFMJTlVMTAogI2VuZGlmCiAKICNkZWZpbmUgQ0JfSUQodmVuZCxkZXYsdHlwZSkJCQkJXApAQCAtMTM3NiwxMCArMTM5Nyw3IEBACiAJLmlkX3RhYmxlCT0geWVudGFfdGFibGUsCiAJLnByb2JlCQk9IHllbnRhX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoeWVudGFfY2xvc2UpLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0geWVudGFfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSB5ZW50YV9kZXZfcmVzdW1lLAotI2VuZGlmCisJLmRyaXZlci5wbQk9IFlFTlRBX1BNX09QUywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCBkYTNjMDhiLi40MjI2ZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtMzUwLDEzICszNTAsMTQgQEAKIAkuc2V0X2Jsb2NrID0gZWVlcGNfcmZraWxsX3NldCwKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlZWVwY19lbmFibGVfY2FtZXJhKHZvaWQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZWVlcGNfZW5hYmxlX2NhbWVyYSh2b2lkKQogewogCS8qCiAJICogSWYgdGhlIGZvbGxvd2luZyBjYWxsIHRvIHNldF9hY3BpKCkgZmFpbHMsIGl0J3MgYmVjYXVzZSB0aGVyZSdzIG5vCiAJICogY2FtZXJhIHNvIHdlIGNhbiBpZ25vcmUgdGhlIGVycm9yLgogCSAqLwotCXNldF9hY3BpKENNX0FTTF9DQU1FUkEsIDEpOworCWlmIChnZXRfYWNwaShDTV9BU0xfQ0FNRVJBKSA9PSAwKQorCQlzZXRfYWNwaShDTV9BU0xfQ0FNRVJBLCAxKTsKIH0KIAogLyoKQEAgLTYyNCw3ICs2MjUsNyBAQAogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCA9IGVlZXBjX2JhY2tsaWdodF9kZXZpY2U7CiAJaWYgKGJkKSB7CiAJCWludCBvbGQgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzczsKLQkJYmQtPnByb3BzLmJyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MoYmQpOworCQliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGJkLCBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CiAJCXJldHVybiBvbGQ7CiAJfQogCXJldHVybiAtMTsKQEAgLTExODksNyArMTE5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWVlcGNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZWVwY19ob3RrX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9mdWppdHN1LWxhcHRvcC5jCmluZGV4IGYzNWFlZTUuLmJjZDRiYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2Z1aml0c3UtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZnVqaXRzdS1sYXB0b3AuYwpAQCAtOTQ0LDcgKzk0NCw3IEBACiAJc3RydWN0IGZ1aml0c3VfaG90a2V5X3QgKmZ1aml0c3VfaG90a2V5ID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gZnVqaXRzdV9ob3RrZXktPmlucHV0OwogCi0jaWZkZWYgQ09ORklHX0xFRFNfQ0xBU1MKKyNpZiBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTKSB8fCBkZWZpbmVkKENPTkZJR19MRURTX0NMQVNTX01PRFVMRSkKIAlpZiAoZnVqaXRzdV9ob3RrZXktPmxvZ29sYW1wX3JlZ2lzdGVyZWQpCiAJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsb2dvbGFtcF9sZWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwppbmRleCBhZmRiZGFhLi5hMmE3NDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKQEAgLTEyMTEsMTUgKzEyMTEsNiBAQAogCQl9CiAJfQogCi0JLyogdHJ5IHRvIF9JTkkgdGhlIGRldmljZSBpZiBzdWNoIG1ldGhvZCBleGlzdHMgKEFDUEkgc3BlYyAzLjAtNi41LjEKLQkgKiBzaG91bGQgYmUgcmVzcGVjdGVkIGFzIHdlIGFscmVhZHkgY2hlY2tlZCBmb3IgdGhlIGRldmljZSBwcmVzZW5jZSBhYm92ZSAqLwotCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKHNvbnlfbmNfYWNwaV9oYW5kbGUsIE1FVEhPRF9OQU1FX19JTkksICZoYW5kbGUpKSkgewotCQlkcHJpbnRrKCJJbnZva2luZyBfSU5JXG4iKTsKLQkJaWYgKEFDUElfRkFJTFVSRShhY3BpX2V2YWx1YXRlX29iamVjdChzb255X25jX2FjcGlfaGFuZGxlLCBNRVRIT0RfTkFNRV9fSU5JLAotCQkJCQkJTlVMTCwgTlVMTCkpKQotCQkJZHByaW50aygiX0lOSSBNZXRob2QgZmFpbGVkXG4iKTsKLQl9Ci0KIAlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiRUNPTiIsCiAJCQkJCSAmaGFuZGxlKSkpIHsKIAkJaWYgKGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLCAxLCBOVUxMKSkKQEAgLTEzOTksMjcgKzEzOTAsMjAgQEAKIAlzdHJ1Y3Qgc29ueXBpX2V2ZW50CSpldmVudHM7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlX2N0cmwgewotCWludAkJCQltb2RlbDsKLQlpbnQJCQkJKCpoYW5kbGVfaXJxKShjb25zdCB1OCwgY29uc3QgdTgpOwotCXUxNgkJCQlldnBvcnRfb2Zmc2V0OwotCXU4CQkJCWhhc19jYW1lcmE7Ci0JdTgJCQkJaGFzX2JsdWV0b290aDsKLQl1OAkJCQloYXNfd3dhbjsKLQlzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMJKmV2ZW50X3R5cGVzOwotfTsKLQogc3RydWN0IHNvbnlfcGljX2RldiB7Ci0Jc3RydWN0IGRldmljZV9jdHJsCSpjb250cm9sOwotCXN0cnVjdCBhY3BpX2RldmljZQkqYWNwaV9kZXY7Ci0Jc3RydWN0IHNvbnlfcGljX2lycQkqY3VyX2lycTsKLQlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0CSpjdXJfaW9wb3J0OwotCXN0cnVjdCBsaXN0X2hlYWQJaW50ZXJydXB0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWlvcG9ydHM7Ci0Jc3RydWN0IG11dGV4CQlsb2NrOwotCXU4CQkJY2FtZXJhX3Bvd2VyOwotCXU4CQkJYmx1ZXRvb3RoX3Bvd2VyOwotCXU4CQkJd3dhbl9wb3dlcjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UJCSphY3BpX2RldjsKKwlzdHJ1Y3Qgc29ueV9waWNfaXJxCQkqY3VyX2lycTsKKwlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0CQkqY3VyX2lvcG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlpbnRlcnJ1cHRzOworCXN0cnVjdCBsaXN0X2hlYWQJCWlvcG9ydHM7CisJc3RydWN0IG11dGV4CQkJbG9jazsKKwlzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMJKmV2ZW50X3R5cGVzOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpoYW5kbGVfaXJxKShjb25zdCB1OCwgY29uc3QgdTgpOworCWludAkJCQltb2RlbDsKKwl1MTYJCQkJZXZwb3J0X29mZnNldDsKKwl1OAkJCQljYW1lcmFfcG93ZXI7CisJdTgJCQkJYmx1ZXRvb3RoX3Bvd2VyOworCXU4CQkJCXd3YW5fcG93ZXI7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNvbnlfcGljX2RldiBzcGljX2RldiA9IHsKQEAgLTE0MjcsNiArMTQxMSw4IEBACiAJLmlvcG9ydHMJPSBMSVNUX0hFQURfSU5JVChzcGljX2Rldi5pb3BvcnRzKSwKIH07CiAKK3N0YXRpYyBpbnQgc3BpY19kcnZfcmVnaXN0ZXJlZDsKKwogLyogRXZlbnQgbWFza3MgKi8KICNkZWZpbmUgU09OWVBJX0pPR0dFUl9NQVNLCQkJMHgwMDAwMDAwMQogI2RlZmluZSBTT05ZUElfQ0FQVFVSRV9NQVNLCQkJMHgwMDAwMDAwMgpAQCAtMTcyNCwyNyArMTcxMCw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2N0cmwgc3BpY190eXBlc1tdID0gewotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMSwKLQkJLmhhbmRsZV9pcnEgPSBOVUxMLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMV9PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUxX2V2ZW50cywKLQl9LAotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMiwKLQkJLmhhbmRsZV9pcnEgPSBOVUxMLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMl9PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUyX2V2ZW50cywKLQl9LAotCXsKLQkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMywKLQkJLmhhbmRsZV9pcnEgPSB0eXBlM19oYW5kbGVfaXJxLAotCQkuZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQsCi0JCS5ldmVudF90eXBlcyA9IHR5cGUzX2V2ZW50cywKLQl9LAotfTsKLQogc3RhdGljIHZvaWQgc29ueV9waWNfZGV0ZWN0X2RldmljZV90eXBlKHN0cnVjdCBzb255X3BpY19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwpAQCAtMTc1Miw0OCArMTcxNyw2MyBAQAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMywgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1swXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMV9PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMV9ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTI7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFMl9PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNCwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKKwkJZGV2LT5tb2RlbCA9IFNPTllQSV9ERVZJQ0VfVFlQRTM7CisJCWRldi0+aGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnE7CisJCWRldi0+ZXZwb3J0X29mZnNldCA9IFNPTllQSV9UWVBFM19PRkZTRVQ7CisJCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlM19ldmVudHM7CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIGRlZmF1bHQgKi8KLQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1sxXTsKKwlkZXYtPm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMjsKKwlkZXYtPmV2cG9ydF9vZmZzZXQgPSBTT05ZUElfVFlQRTJfT0ZGU0VUOworCWRldi0+ZXZlbnRfdHlwZXMgPSB0eXBlMl9ldmVudHM7CiAKIG91dDoKIAlpZiAocGNpZGV2KQogCQlwY2lfZGV2X3B1dChwY2lkZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYICJkZXRlY3RlZCBUeXBlJWQgbW9kZWxcbiIsCi0JCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEgPyAxIDoKLQkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOiAzKTsKKwkJCWRldi0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSA/IDEgOgorCQkJZGV2LT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUyID8gMiA6IDMpOwogfQogCiAvKiBjYW1lcmEgdGVzdHMgYW5kIHBvd2Vyb24vcG93ZXJvZmYgKi8KQEAgLTI1NjYsNyArMjU0Niw3IEBACiAJYnVmZmVyLnBvaW50ZXIgPSByZXNvdXJjZTsKIAogCS8qIHNldHVwIFR5cGUgMSByZXNvdXJjZXMgKi8KLQlpZiAoc3BpY19kZXYuY29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSkgeworCWlmIChzcGljX2Rldi5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUxKSB7CiAKIAkJLyogc2V0dXAgaW8gcmVzb3VyY2VzICovCiAJCXJlc291cmNlLT5yZXMxLnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfSU87CkBAIC0yNjQ5LDI5ICsyNjI5LDI4IEBACiAJCWRhdGFfbWFzayA9IGluYl9wKGRldi0+Y3VyX2lvcG9ydC0+aW8yLm1pbmltdW0pOwogCWVsc2UKIAkJZGF0YV9tYXNrID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArCi0JCQkJZGV2LT5jb250cm9sLT5ldnBvcnRfb2Zmc2V0KTsKKwkJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCiAJZHByaW50aygiZXZlbnQgKFslLjJ4XSBbJS4yeF0pIGF0IHBvcnQgMHglLjR4KCsweCUuMngpXG4iLAogCQkJZXYsIGRhdGFfbWFzaywgZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSwKLQkJCWRldi0+Y29udHJvbC0+ZXZwb3J0X29mZnNldCk7CisJCQlkZXYtPmV2cG9ydF9vZmZzZXQpOwogCiAJaWYgKGV2ID09IDB4MDAgfHwgZXYgPT0gMHhmZikKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JZm9yIChpID0gMDsgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5tYXNrOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBkZXYtPmV2ZW50X3R5cGVzW2ldLm1hc2s7IGkrKykgewogCi0JCWlmICgoZGF0YV9tYXNrICYgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5kYXRhKSAhPQotCQkgICAgZGV2LT5jb250cm9sLT5ldmVudF90eXBlc1tpXS5kYXRhKQorCQlpZiAoKGRhdGFfbWFzayAmIGRldi0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkgIT0KKwkJICAgIGRldi0+ZXZlbnRfdHlwZXNbaV0uZGF0YSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghKG1hc2sgJiBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLm1hc2spKQorCQlpZiAoIShtYXNrICYgZGV2LT5ldmVudF90eXBlc1tpXS5tYXNrKSkKIAkJCWNvbnRpbnVlOwogCi0JCWZvciAoaiA9IDA7IGRldi0+Y29udHJvbC0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OyBqKyspIHsKLQkJCWlmIChldiA9PSBkZXYtPmNvbnRyb2wtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5kYXRhKSB7CisJCWZvciAoaiA9IDA7IGRldi0+ZXZlbnRfdHlwZXNbaV0uZXZlbnRzW2pdLmV2ZW50OyBqKyspIHsKKwkJCWlmIChldiA9PSBkZXYtPmV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5kYXRhKSB7CiAJCQkJZGV2aWNlX2V2ZW50ID0KLQkJCQkJZGV2LT5jb250cm9sLT4KLQkJCQkJCWV2ZW50X3R5cGVzW2ldLmV2ZW50c1tqXS5ldmVudDsKKwkJCQkJZGV2LT5ldmVudF90eXBlc1tpXS5ldmVudHNbal0uZXZlbnQ7CiAJCQkJZ290byBmb3VuZDsKIAkJCX0KIAkJfQpAQCAtMjY3OSwxMyArMjY1OCwxMiBAQAogCS8qIFN0aWxsIG5vdCBhYmxlIHRvIGRlY29kZSB0aGUgZXZlbnQgdHJ5IHRvIHBhc3MKIAkgKiBpdCBvdmVyIHRvIHRoZSBtaW5pZHJpdmVyCiAJICovCi0JaWYgKGRldi0+Y29udHJvbC0+aGFuZGxlX2lycSAmJgotCQkJZGV2LT5jb250cm9sLT5oYW5kbGVfaXJxKGRhdGFfbWFzaywgZXYpID09IDApCisJaWYgKGRldi0+aGFuZGxlX2lycSAmJiBkZXYtPmhhbmRsZV9pcnEoZGF0YV9tYXNrLCBldikgPT0gMCkKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJZHByaW50aygidW5rbm93biBldmVudCAoWyUuMnhdIFslLjJ4XSkgYXQgcG9ydCAweCUuNHgoKzB4JS4yeClcbiIsCiAJCQlldiwgZGF0YV9tYXNrLCBkZXYtPmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtLAotCQkJZGV2LT5jb250cm9sLT5ldnBvcnRfb2Zmc2V0KTsKKwkJCWRldi0+ZXZwb3J0X29mZnNldCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogCiBmb3VuZDoKQEAgLTI4MTYsNyArMjc5NCw3IEBACiAJLyogcmVxdWVzdCBJUlEgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaXJxLCAmc3BpY19kZXYuaW50ZXJydXB0cywgbGlzdCkgewogCQlpZiAoIXJlcXVlc3RfaXJxKGlycS0+aXJxLmludGVycnVwdHNbMF0sIHNvbnlfcGljX2lycSwKLQkJCQkJSVJRRl9TSEFSRUQsICJzb255LWxhcHRvcCIsICZzcGljX2RldikpIHsKKwkJCQkJSVJRRl9ESVNBQkxFRCwgInNvbnktbGFwdG9wIiwgJnNwaWNfZGV2KSkgewogCQkJZHByaW50aygiSVJROiAlZCAtIHRyaWdnZXJpbmc6ICVkIC0gIgogCQkJCQkicG9sYXJpdHk6ICVkIC0gc2hyOiAlZFxuIiwKIAkJCQkJaXJxLT5pcnEuaW50ZXJydXB0c1swXSwKQEAgLTI5NDksNiArMjkyNyw3IEBACiAJCQkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgU1BJQyBkcml2ZXIuIik7CiAJCQlnb3RvIG91dDsKIAkJfQorCQlzcGljX2Rydl9yZWdpc3RlcmVkID0gMTsKIAl9CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfbmNfZHJpdmVyKTsKQEAgLTI5NjAsNyArMjkzOSw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZ2lzdGVyX3BpYzoKLQlpZiAoIW5vX3NwaWMpCisJaWYgKHNwaWNfZHJ2X3JlZ2lzdGVyZWQpCiAJCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzb255X3BpY19kcml2ZXIpOwogb3V0OgogCXJldHVybiByZXN1bHQ7CkBAIC0yOTY5LDcgKzI5NDgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNvbnlfbGFwdG9wX2V4aXQodm9pZCkKIHsKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmc29ueV9uY19kcml2ZXIpOwotCWlmICghbm9fc3BpYykKKwlpZiAoc3BpY19kcnZfcmVnaXN0ZXJlZCkKIAkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvbnlfcGljX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBmNzhkMjc1Li5kOTMxMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2RlZmluZSBUUEFDUElfVkVSU0lPTiAiMC4yMyIKLSNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjA0MDAKKyNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjA1MDAKIAogLyoKICAqICBDaGFuZ2Vsb2c6CkBAIC0xNDUsNiArMTQ1LDUxIEBACiAJVFBfQUNQSV9XR1NWX1NUQVRFX1VXQlBXUgk9IDB4MDAyMCwgLyogVVdCIHJhZGlvIGVuYWJsZWQgKi8KIH07CiAKKy8qIEhLRVkgZXZlbnRzICovCitlbnVtIHRwYWNwaV9oa2V5X2V2ZW50X3QgeworCS8qIEhvdGtleS1yZWxhdGVkICovCisJVFBfSEtFWV9FVl9IT1RLRVlfQkFTRQkJPSAweDEwMDEsIC8qIGZpcnN0IGhvdGtleSAoRk4rRjEpICovCisJVFBfSEtFWV9FVl9CUkdIVF9VUAkJPSAweDEwMTAsIC8qIEJyaWdodG5lc3MgdXAgKi8KKwlUUF9IS0VZX0VWX0JSR0hUX0RPV04JCT0gMHgxMDExLCAvKiBCcmlnaHRuZXNzIGRvd24gKi8KKwlUUF9IS0VZX0VWX1ZPTF9VUAkJPSAweDEwMTUsIC8qIFZvbHVtZSB1cCBvciB1bm11dGUgKi8KKwlUUF9IS0VZX0VWX1ZPTF9ET1dOCQk9IDB4MTAxNiwgLyogVm9sdW1lIGRvd24gb3IgdW5tdXRlICovCisJVFBfSEtFWV9FVl9WT0xfTVVURQkJPSAweDEwMTcsIC8qIE1peGVyIG91dHB1dCBtdXRlICovCisKKwkvKiBSZWFzb25zIGZvciB3YWtpbmcgdXAgZnJvbSBTMy9TNCAqLworCVRQX0hLRVlfRVZfV0tVUF9TM19VTkRPQ0sJPSAweDIzMDQsIC8qIHVuZG9jayByZXF1ZXN0ZWQsIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X1VORE9DSwk9IDB4MjQwNCwgLyogdW5kb2NrIHJlcXVlc3RlZCwgUzQgKi8KKwlUUF9IS0VZX0VWX1dLVVBfUzNfQkFZRUoJPSAweDIzMDUsIC8qIGJheSBlamVjdGlvbiByZXEsIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X0JBWUVKCT0gMHgyNDA1LCAvKiBiYXkgZWplY3Rpb24gcmVxLCBTNCAqLworCVRQX0hLRVlfRVZfV0tVUF9TM19CQVRMT1cJPSAweDIzMTMsIC8qIGJhdHRlcnkgZW1wdHksIFMzICovCisJVFBfSEtFWV9FVl9XS1VQX1M0X0JBVExPVwk9IDB4MjQxMywgLyogYmF0dGVyeSBlbXB0eSwgUzQgKi8KKworCS8qIEF1dG8tc2xlZXAgYWZ0ZXIgZWplY3QgcmVxdWVzdCAqLworCVRQX0hLRVlfRVZfQkFZRUpfQUNLCQk9IDB4MzAwMywgLyogYmF5IGVqZWN0aW9uIGNvbXBsZXRlICovCisJVFBfSEtFWV9FVl9VTkRPQ0tfQUNLCQk9IDB4NDAwMywgLyogdW5kb2NrIGNvbXBsZXRlICovCisKKwkvKiBNaXNjIGJheSBldmVudHMgKi8KKwlUUF9IS0VZX0VWX09QVERSVl9FSgkJPSAweDMwMDYsIC8qIG9wdC4gZHJpdmUgdHJheSBlamVjdGVkICovCisKKwkvKiBVc2VyLWludGVyZmFjZSBldmVudHMgKi8KKwlUUF9IS0VZX0VWX0xJRF9DTE9TRQkJPSAweDUwMDEsIC8qIGxhcHRvcCBsaWQgY2xvc2VkICovCisJVFBfSEtFWV9FVl9MSURfT1BFTgkJPSAweDUwMDIsIC8qIGxhcHRvcCBsaWQgb3BlbmVkICovCisJVFBfSEtFWV9FVl9UQUJMRVRfVEFCTEVUCT0gMHg1MDA5LCAvKiB0YWJsZXQgc3dpdmVsIHVwICovCisJVFBfSEtFWV9FVl9UQUJMRVRfTk9URUJPT0sJPSAweDUwMGEsIC8qIHRhYmxldCBzd2l2ZWwgZG93biAqLworCVRQX0hLRVlfRVZfUEVOX0lOU0VSVEVECQk9IDB4NTAwYiwgLyogdGFibGV0IHBlbiBpbnNlcnRlZCAqLworCVRQX0hLRVlfRVZfUEVOX1JFTU9WRUQJCT0gMHg1MDBjLCAvKiB0YWJsZXQgcGVuIHJlbW92ZWQgKi8KKwlUUF9IS0VZX0VWX0JSR0hUX0NIQU5HRUQJPSAweDUwMTAsIC8qIGJhY2tsaWdodCBjb250cm9sIGV2ZW50ICovCisKKwkvKiBUaGVybWFsIGV2ZW50cyAqLworCVRQX0hLRVlfRVZfQUxBUk1fQkFUX0hPVAk9IDB4NjAxMSwgLyogYmF0dGVyeSB0b28gaG90ICovCisJVFBfSEtFWV9FVl9BTEFSTV9CQVRfWEhPVAk9IDB4NjAxMiwgLyogYmF0dGVyeSBjcml0aWNhbGx5IGhvdCAqLworCVRQX0hLRVlfRVZfQUxBUk1fU0VOU09SX0hPVAk9IDB4NjAyMSwgLyogc2Vuc29yIHRvbyBob3QgKi8KKwlUUF9IS0VZX0VWX0FMQVJNX1NFTlNPUl9YSE9UCT0gMHg2MDIyLCAvKiBzZW5zb3IgY3JpdGljYWxseSBob3QgKi8KKwlUUF9IS0VZX0VWX1RITV9UQUJMRV9DSEFOR0VECT0gMHg2MDMwLCAvKiB0aGVybWFsIHRhYmxlIGNoYW5nZWQgKi8KKworCS8qIE1pc2MgKi8KKwlUUF9IS0VZX0VWX1JGS0lMTF9DSEFOR0VECT0gMHg3MDAwLCAvKiByZmtpbGwgc3dpdGNoIGNoYW5nZWQgKi8KK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNYWluIGRyaXZlcgogICovCkBAIC0xODQ4LDYgKzE4OTMsMjcgQEAKICAqIEhvdGtleSBzdWJkcml2ZXIKICAqLwogCisvKgorICogVGhpbmtQYWQgZmlybXdhcmUgZXZlbnQgbW9kZWwKKyAqCisgKiBUaGUgVGhpbmtQYWQgZmlybXdhcmUgaGFzIHR3byBtYWluIGV2ZW50IGludGVyZmFjZXM6IG5vcm1hbCBBQ1BJCisgKiBub3RpZmljYXRpb25zICh3aGljaCBmb2xsb3cgdGhlIEFDUEkgc3RhbmRhcmQpLCBhbmQgYSBwcml2YXRlIGV2ZW50CisgKiBpbnRlcmZhY2UuCisgKgorICogVGhlIHByaXZhdGUgZXZlbnQgaW50ZXJmYWNlIGFsc28gaXNzdWVzIGV2ZW50cyBmb3IgdGhlIGhvdGtleXMuICBBcworICogdGhlIGRyaXZlciBnYWluZWQgZmVhdHVyZXMsIHRoZSBldmVudCBoYW5kbGluZyBjb2RlIGVuZGVkIHVwIGJlaW5nCisgKiBidWlsdCBhcm91bmQgdGhlIGhvdGtleSBzdWJkcml2ZXIuICBUaGlzIHdpbGwgbmVlZCB0byBiZSByZWZhY3RvcmVkCisgKiB0byBhIG1vcmUgZm9ybWFsIGV2ZW50IEFQSSBldmVudHVhbGx5LgorICoKKyAqIFNvbWUgImhvdGtleXMiIGFyZSBhY3R1YWxseSBzdXBwb3NlZCB0byBiZSB1c2VkIGFzIGV2ZW50IHJlcG9ydHMsCisgKiBzdWNoIGFzICJicmlnaHRuZXNzIGhhcyBjaGFuZ2VkIiwgInZvbHVtZSBoYXMgY2hhbmdlZCIsIGRlcGVuZGluZyBvbgorICogdGhlIFRoaW5rUGFkIG1vZGVsIGFuZCBob3cgdGhlIGZpcm13YXJlIGlzIG9wZXJhdGluZy4KKyAqCisgKiBVbmxpa2Ugb3RoZXIgY2xhc3NlcywgaG90a2V5LWNsYXNzIGV2ZW50cyBoYXZlIG1hc2svdW5tYXNrIGNvbnRyb2wgb24KKyAqIG5vbi1hbmNpZW50IGZpcm13YXJlLiAgSG93ZXZlciwgaG93IGl0IGJlaGF2ZXMgY2hhbmdlcyBhIGxvdCB3aXRoIHRoZQorICogZmlybXdhcmUgbW9kZWwgYW5kIHZlcnNpb24uCisgKi8KKwogZW51bSB7CS8qIGhvdCBrZXkgc2NhbiBjb2RlcyAoZGVyaXZlZCBmcm9tIEFDUEkgRFNEVCkgKi8KIAlUUF9BQ1BJX0hPVEtFWVNDQU5fRk5GMQkJPSAwLAogCVRQX0FDUElfSE9US0VZU0NBTl9GTkYyLApAQCAtMTg3NSw3ICsxOTQxLDcgQEAKIAlUUF9BQ1BJX0hPVEtFWVNDQU5fVEhJTktQQUQsCiB9OwogCi1lbnVtIHsJLyogS2V5cyBhdmFpbGFibGUgdGhyb3VnaCBOVlJBTSBwb2xsaW5nICovCitlbnVtIHsJLyogS2V5cy9ldmVudHMgYXZhaWxhYmxlIHRocm91Z2ggTlZSQU0gcG9sbGluZyAqLwogCVRQQUNQSV9IS0VZX05WUkFNX0tOT1dOX01BU0sgPSAweDAwZmI4OGMwVSwKIAlUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sgID0gMHgwMGZiODAwMFUsCiB9OwpAQCAtMTkzMCw4ICsxOTk2LDExIEBACiBzdGF0aWMgc3RydWN0IG11dGV4IGhvdGtleV90aHJlYWRfbXV0ZXg7CiAKIC8qCi0gKiBBY3F1aXJlIG11dGV4IHRvIHdyaXRlIHBvbGxlciBjb250cm9sIHZhcmlhYmxlcy4KLSAqIEluY3JlbWVudCBob3RrZXlfY29uZmlnX2NoYW5nZSB3aGVuIGNoYW5naW5nIHRoZW0uCisgKiBBY3F1aXJlIG11dGV4IHRvIHdyaXRlIHBvbGxlciBjb250cm9sIHZhcmlhYmxlcyBhcyBhbgorICogYXRvbWljIGJsb2NrLgorICoKKyAqIEluY3JlbWVudCBob3RrZXlfY29uZmlnX2NoYW5nZSB3aGVuIGNoYW5naW5nIHRoZW0gaWYgeW91CisgKiB3YW50IHRoZSBrdGhyZWFkIHRvIGZvcmdldCBvbGQgc3RhdGUuCiAgKgogICogU2VlIEhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQvSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKICAqLwpAQCAtMTk0Miw2ICsyMDExLDExIEBACiAgKiBob3RrZXkgcG9sbGVyIGNvbnRyb2wgdmFyaWFibGVzCiAgKgogICogTXVzdCBiZSBhdG9taWMgb3IgcmVhZGVycyB3aWxsIGFsc28gbmVlZCB0byBhY3F1aXJlIG11dGV4CisgKgorICogSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVC9IT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAorICogc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIHRoZSBjaGFuZ2VzIG5lZWQgdG8gYmUgdGFrZW4gYXMKKyAqIGEgYmxvY2ssIE9SIHdoZW4gb25lIG5lZWRzIHRvIGZvcmNlIHRoZSBrdGhyZWFkIHRvIGZvcmdldAorICogb2xkIHN0YXRlLgogICovCiBzdGF0aWMgdTMyIGhvdGtleV9zb3VyY2VfbWFzazsJCS8qIGJpdCBtYXNrIDA9QUNQSSwxPU5WUkFNICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGhvdGtleV9wb2xsX2ZyZXEgPSAxMDsgLyogSHogKi8KQEAgLTE5NzIsMTAgKzIwNDYsMTIgQEAKIAogc3RhdGljIGludCBob3RrZXlfYXV0b3NsZWVwX2FjazsKIAotc3RhdGljIHUzMiBob3RrZXlfb3JpZ19tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfYWxsX21hc2s7Ci1zdGF0aWMgdTMyIGhvdGtleV9yZXNlcnZlZF9tYXNrOwotc3RhdGljIHUzMiBob3RrZXlfbWFzazsKK3N0YXRpYyB1MzIgaG90a2V5X29yaWdfbWFzazsJCS8qIGV2ZW50cyB0aGUgQklPUyBoYWQgZW5hYmxlZCAqLworc3RhdGljIHUzMiBob3RrZXlfYWxsX21hc2s7CQkvKiBhbGwgZXZlbnRzIHN1cHBvcnRlZCBpbiBmdyAqLworc3RhdGljIHUzMiBob3RrZXlfcmVzZXJ2ZWRfbWFzazsJLyogZXZlbnRzIGJldHRlciBsZWZ0IGRpc2FibGVkICovCitzdGF0aWMgdTMyIGhvdGtleV9kcml2ZXJfbWFzazsJCS8qIGV2ZW50cyBuZWVkZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHUzMiBob3RrZXlfdXNlcl9tYXNrOwkJLyogZXZlbnRzIHZpc2libGUgdG8gdXNlcnNwYWNlICovCitzdGF0aWMgdTMyIGhvdGtleV9hY3BpX21hc2s7CQkvKiBldmVudHMgZW5hYmxlZCBpbiBmaXJtd2FyZSAqLwogCiBzdGF0aWMgdW5zaWduZWQgaW50IGhvdGtleV9yZXBvcnRfbW9kZTsKIApAQCAtMTk4Myw2ICsyMDU5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfc2V0ICpob3RrZXlfZGV2X2F0dHJpYnV0ZXM7CiAKK3N0YXRpYyB2b2lkIHRwYWNwaV9kcml2ZXJfZXZlbnQoY29uc3QgdW5zaWduZWQgaW50IGhrZXlfZXZlbnQpOworc3RhdGljIHZvaWQgaG90a2V5X2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpOworCiAvKiBIS0VZLk1IS0coKSByZXR1cm4gYml0cyAqLwogI2RlZmluZSBUUF9IT1RLRVlfVEFCTEVUX01BU0sgKDEgPDwgMykKIApAQCAtMjAxNywyNCArMjA5Niw1MyBAQAogfQogCiAvKgorICogUmVhZHMgY3VycmVudCBldmVudCBtYXNrIGZyb20gZmlybXdhcmUsIGFuZCB1cGRhdGVzCisgKiBob3RrZXlfYWNwaV9tYXNrIGFjY29yZGluZ2x5LiAgQWxzbyByZXNldHMgYW55IGJpdHMKKyAqIGZyb20gaG90a2V5X3VzZXJfbWFzayB0aGF0IGFyZSB1bmF2YWlsYWJsZSB0byBiZQorICogZGVsaXZlcmVkIChzaGFkb3cgcmVxdWlyZW1lbnQgb2YgdGhlIHVzZXJzcGFjZSBBQkkpLgorICoKICAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IGhvdGtleV9tYXNrX2dldCh2b2lkKQogewotCXUzMiBtID0gMDsKLQogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgeworCQl1MzIgbSA9IDA7CisKIAkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmbSwgIkRIS04iLCAiZCIpKQogCQkJcmV0dXJuIC1FSU87CisKKwkJaG90a2V5X2FjcGlfbWFzayA9IG07CisJfSBlbHNlIHsKKwkJLyogbm8gbWFzayBzdXBwb3J0IGRvZXNuJ3QgbWVhbiBubyBldmVudCBzdXBwb3J0Li4uICovCisJCWhvdGtleV9hY3BpX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CiAJfQotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKLQlob3RrZXlfbWFzayA9IG0gfCAoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2spOwotCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECisKKwkvKiBzeW5jIHVzZXJzcGFjZS12aXNpYmxlIG1hc2sgKi8KKwlob3RrZXlfdXNlcl9tYXNrICY9IChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKTsKIAogCXJldHVybiAwOwogfQogCit2b2lkIHN0YXRpYyBob3RrZXlfbWFza193YXJuX2luY29tcGxldGVfbWFzayh2b2lkKQoreworCS8qIGxvZyBvbmx5IHdoYXQgdGhlIHVzZXIgY2FuIGZpeC4uLiAqLworCWNvbnN0IHUzMiB3YW50ZWRtYXNrID0gaG90a2V5X2RyaXZlcl9tYXNrICYKKwkJfihob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKSAmCisJCShob3RrZXlfYWxsX21hc2sgfCBUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLKTsKKworCWlmICh3YW50ZWRtYXNrKQorCQlwcmludGsoVFBBQ1BJX05PVElDRQorCQkJInJlcXVpcmVkIGV2ZW50cyAweCUwOHggbm90IGVuYWJsZWQhXG4iLAorCQkJd2FudGVkbWFzayk7Cit9CisKIC8qCisgKiBTZXQgdGhlIGZpcm13YXJlIG1hc2sgd2hlbiBzdXBwb3J0ZWQKKyAqCisgKiBBbHNvIGNhbGxzIGhvdGtleV9tYXNrX2dldCB0byB1cGRhdGUgaG90a2V5X2FjcGlfbWFzay4KKyAqCisgKiBOT1RFOiBkb2VzIG5vdCBzZXQgYml0cyBpbiBob3RrZXlfdXNlcl9tYXNrLCBidXQgbWF5IHJlc2V0IHRoZW0uCisgKgogICogQ2FsbCB3aXRoIGhvdGtleV9tdXRleCBoZWxkCiAgKi8KIHN0YXRpYyBpbnQgaG90a2V5X21hc2tfc2V0KHUzMiBtYXNrKQpAQCAtMjA0Miw2NiArMjE1MCwxMDAgQEAKIAlpbnQgaTsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCWlmICghdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmICYmCi0JCSAgICAobWFzayA9PSAweGZmZmYgfHwgbWFzayA9PSAweGZmZmZmZiB8fAotCQkgICAgIG1hc2sgPT0gMHhmZmZmZmZmZikpIHsKLQkJCXRwX3dhcm5lZC5ob3RrZXlfbWFza19mZiA9IDE7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJzZXR0aW5nIHRoZSBob3RrZXkgbWFzayB0byAweCUwOHggaXMgbGlrZWx5ICIKLQkJCSAgICAgICAibm90IHRoZSBiZXN0IHdheSB0byBnbyBhYm91dCBpdFxuIiwgbWFzayk7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIGRyaXZlciBkZWZhdWx0cywgIgotCQkJICAgICAgICJhbmQgcmVmZXIgdG8gdXAtdG8tZGF0ZSB0aGlua3BhZC1hY3BpICIKLQkJCSAgICAgICAiZG9jdW1lbnRhdGlvblxuIik7Ci0JCX0KKwljb25zdCB1MzIgZndtYXNrID0gbWFzayAmIH5ob3RrZXlfc291cmNlX21hc2s7CiAKLQkJSE9US0VZX0NPTkZJR19DUklUSUNBTF9TVEFSVAorCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewogCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQkJdTMyIG0gPSAxIDw8IGk7Ci0JCQkvKiBlbmFibGUgaW4gZmlybXdhcmUgbWFzayBvbmx5IGtleXMgbm90IGluIE5WUkFNCi0JCQkgKiBtb2RlLCBidXQgZW5hYmxlIHRoZSBrZXkgaW4gdGhlIGNhY2hlZCBob3RrZXlfbWFzawotCQkJICogcmVnYXJkbGVzcyBvZiBtb2RlLCBvciB0aGUga2V5IHdpbGwgZW5kIHVwCi0JCQkgKiBkaXNhYmxlZCBieSBob3RrZXlfbWFza19nZXQoKSAqLwogCQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLAogCQkJCQlOVUxMLCAiTUhLTSIsICJ2ZGQiLCBpICsgMSwKLQkJCQkJISEoKG1hc2sgJiB+aG90a2V5X3NvdXJjZV9tYXNrKSAmIG0pKSkgeworCQkJCQkhIShtYXNrICYgKDEgPDwgaSkpKSkgewogCQkJCXJjID0gLUVJTzsKIAkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaG90a2V5X21hc2sgPSAoaG90a2V5X21hc2sgJiB+bSkgfCAobWFzayAmIG0pOwogCQkJfQogCQl9Ci0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECi0KLQkJLyogaG90a2V5X21hc2tfZ2V0IG11c3QgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseSBiZWxvdyAqLwotCQlpZiAoIWhvdGtleV9tYXNrX2dldCgpICYmICFyYyAmJgotCQkgICAgKGhvdGtleV9tYXNrICYgfmhvdGtleV9zb3VyY2VfbWFzaykgIT0KLQkJICAgICAobWFzayAmIH5ob3RrZXlfc291cmNlX21hc2spKSB7Ci0JCQlwcmludGsoVFBBQ1BJX05PVElDRQotCQkJICAgICAgICJyZXF1ZXN0ZWQgaG90IGtleSBtYXNrIDB4JTA4eCwgYnV0ICIKLQkJCSAgICAgICAiZmlybXdhcmUgZm9yY2VkIGl0IHRvIDB4JTA4eFxuIiwKLQkJCSAgICAgICBtYXNrLCBob3RrZXlfbWFzayk7Ci0JCX0KLQl9IGVsc2UgewotI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCi0JCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfU1RBUlQKLQkJaG90a2V5X21hc2sgPSBtYXNrICYgaG90a2V5X3NvdXJjZV9tYXNrOwotCQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX0VORAotCQlob3RrZXlfbWFza19nZXQoKTsKLQkJaWYgKGhvdGtleV9tYXNrICE9IG1hc2spIHsKLQkJCXByaW50ayhUUEFDUElfTk9USUNFCi0JCQkgICAgICAgInJlcXVlc3RlZCBob3Qga2V5IG1hc2sgMHglMDh4LCAiCi0JCQkgICAgICAgImZvcmNlZCB0byAweCUwOHggKE5WUkFNIHBvbGwgbWFzayBpcyAiCi0JCQkgICAgICAgIjB4JTA4eCk6IG5vIGZpcm13YXJlIG1hc2sgc3VwcG9ydFxuIiwKLQkJCSAgICAgICBtYXNrLCBob3RrZXlfbWFzaywgaG90a2V5X3NvdXJjZV9tYXNrKTsKLQkJfQotI2Vsc2UKLQkJaG90a2V5X21hc2tfZ2V0KCk7Ci0JCXJjID0gLUVOWElPOwotI2VuZGlmIC8qIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMICovCiAJfQogCisJLyoKKwkgKiBXZSAqbXVzdCogbWFrZSBhbiBpbmNvbmRpdGlvbmFsIGNhbGwgdG8gaG90a2V5X21hc2tfZ2V0IHRvCisJICogcmVmcmVzaCBob3RrZXlfYWNwaV9tYXNrIGFuZCB1cGRhdGUgaG90a2V5X3VzZXJfbWFzaworCSAqCisJICogVGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gYWxzbyBsb2cgd2hlbiB3ZSBjYW5ub3QgX2VuYWJsZV8KKwkgKiBhIGdpdmVuIGV2ZW50LgorCSAqLworCWlmICghaG90a2V5X21hc2tfZ2V0KCkgJiYgIXJjICYmIChmd21hc2sgJiB+aG90a2V5X2FjcGlfbWFzaykpIHsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJhc2tlZCBmb3IgaG90a2V5IG1hc2sgMHglMDh4LCBidXQgIgorCQkgICAgICAgImZpcm13YXJlIGZvcmNlZCBpdCB0byAweCUwOHhcbiIsCisJCSAgICAgICBmd21hc2ssIGhvdGtleV9hY3BpX21hc2spOworCX0KKworCWhvdGtleV9tYXNrX3dhcm5faW5jb21wbGV0ZV9tYXNrKCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBTZXRzIGhvdGtleV91c2VyX21hc2sgYW5kIHRyaWVzIHRvIHNldCB0aGUgZmlybXdhcmUgbWFzaworICoKKyAqIENhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZAorICovCitzdGF0aWMgaW50IGhvdGtleV91c2VyX21hc2tfc2V0KGNvbnN0IHUzMiBtYXNrKQoreworCWludCByYzsKKworCS8qIEdpdmUgcGVvcGxlIGEgY2hhbmNlIHRvIG5vdGljZSB0aGV5IGFyZSBkb2luZyBzb21ldGhpbmcgdGhhdAorCSAqIGlzIGJvdW5kIHRvIGdvIGJvb20gb24gdGhlaXIgdXNlcnMgc29vbmVyIG9yIGxhdGVyICovCisJaWYgKCF0cF93YXJuZWQuaG90a2V5X21hc2tfZmYgJiYKKwkgICAgKG1hc2sgPT0gMHhmZmZmIHx8IG1hc2sgPT0gMHhmZmZmZmYgfHwKKwkgICAgIG1hc2sgPT0gMHhmZmZmZmZmZikpIHsKKwkJdHBfd2FybmVkLmhvdGtleV9tYXNrX2ZmID0gMTsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJzZXR0aW5nIHRoZSBob3RrZXkgbWFzayB0byAweCUwOHggaXMgbGlrZWx5ICIKKwkJICAgICAgICJub3QgdGhlIGJlc3Qgd2F5IHRvIGdvIGFib3V0IGl0XG4iLCBtYXNrKTsKKwkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKKwkJICAgICAgICJwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIGRyaXZlciBkZWZhdWx0cywgIgorCQkgICAgICAgImFuZCByZWZlciB0byB1cC10by1kYXRlIHRoaW5rcGFkLWFjcGkgIgorCQkgICAgICAgImRvY3VtZW50YXRpb25cbiIpOworCX0KKworCS8qIFRyeSB0byBlbmFibGUgd2hhdCB0aGUgdXNlciBhc2tlZCBmb3IsIHBsdXMgd2hhdGV2ZXIgd2UgbmVlZC4KKwkgKiB0aGlzIHN5bmNzIGV2ZXJ5dGhpbmcgYnV0IHdvbid0IGVuYWJsZSBiaXRzIGluIGhvdGtleV91c2VyX21hc2sgKi8KKwlyYyA9IGhvdGtleV9tYXNrX3NldCgobWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJiB+aG90a2V5X3NvdXJjZV9tYXNrKTsKKworCS8qIEVuYWJsZSB0aGUgYXZhaWxhYmxlIGJpdHMgaW4gaG90a2V5X3VzZXJfbWFzayAqLworCWhvdGtleV91c2VyX21hc2sgPSBtYXNrICYgKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogU2V0cyB0aGUgZHJpdmVyIGhvdGtleSBtYXNrLgorICoKKyAqIENhbiBiZSBjYWxsZWQgZXZlbiBpZiB0aGUgaG90a2V5IHN1YmRyaXZlciBpcyBpbmFjdGl2ZQorICovCitzdGF0aWMgaW50IHRwYWNwaV9ob3RrZXlfZHJpdmVyX21hc2tfc2V0KGNvbnN0IHUzMiBtYXNrKQoreworCWludCByYzsKKworCS8qIERvIHRoZSByaWdodCB0aGluZyBpZiBob3RrZXlfaW5pdCBoYXMgbm90IGJlZW4gY2FsbGVkIHlldCAqLworCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KSB7CisJCWhvdGtleV9kcml2ZXJfbWFzayA9IG1hc2s7CisJCXJldHVybiAwOworCX0KKworCW11dGV4X2xvY2soJmhvdGtleV9tdXRleCk7CisKKwlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCisJaG90a2V5X2RyaXZlcl9tYXNrID0gbWFzazsKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAorCWhvdGtleV9zb3VyY2VfbWFzayB8PSAobWFzayAmIH5ob3RrZXlfYWxsX21hc2spOworI2VuZGlmCisJSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKKworCXJjID0gaG90a2V5X21hc2tfc2V0KChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X2RyaXZlcl9tYXNrKSAmCisJCQkJCQkJfmhvdGtleV9zb3VyY2VfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOworCiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMTM3LDExICsyMjc5LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCB0cGFjcGlfaW5wdXRfc2VuZF9rZXkodW5zaWduZWQgaW50IHNjYW5jb2RlKQorLyogRG8gTk9UIGNhbGwgd2l0aG91dCB2YWxpZGF0aW5nIHNjYW5jb2RlIGZpcnN0ICovCitzdGF0aWMgdm9pZCB0cGFjcGlfaW5wdXRfc2VuZF9rZXkoY29uc3QgdW5zaWduZWQgaW50IHNjYW5jb2RlKQogewotCXVuc2lnbmVkIGludCBrZXljb2RlOwotCi0Ja2V5Y29kZSA9IGhvdGtleV9rZXljb2RlX21hcFtzY2FuY29kZV07CisJY29uc3QgdW5zaWduZWQgaW50IGtleWNvZGUgPSBob3RrZXlfa2V5Y29kZV9tYXBbc2NhbmNvZGVdOwogCiAJaWYgKGtleWNvZGUgIT0gS0VZX1JFU0VSVkVEKSB7CiAJCW11dGV4X2xvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKQEAgLTIxNjIsMTkgKzIzMDMsMjggQEAKIAl9CiB9CiAKKy8qIERvIE5PVCBjYWxsIHdpdGhvdXQgdmFsaWRhdGluZyBzY2FuY29kZSBmaXJzdCAqLworc3RhdGljIHZvaWQgdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCit7CisJaG90a2V5X2RyaXZlcl9ldmVudChzY2FuY29kZSk7CisJaWYgKGhvdGtleV91c2VyX21hc2sgJiAoMSA8PCBzY2FuY29kZSkpCisJCXRwYWNwaV9pbnB1dF9zZW5kX2tleShzY2FuY29kZSk7Cit9CisKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAogc3RhdGljIHN0cnVjdCB0cF9hY3BpX2Rydl9zdHJ1Y3QgaWJtX2hvdGtleV9hY3BpZHJpdmVyOwogCisvKiBEbyBOT1QgY2FsbCB3aXRob3V0IHZhbGlkYXRpbmcgc2NhbmNvZGUgZmlyc3QgKi8KIHN0YXRpYyB2b2lkIHRwYWNwaV9ob3RrZXlfc2VuZF9rZXkodW5zaWduZWQgaW50IHNjYW5jb2RlKQogewotCXRwYWNwaV9pbnB1dF9zZW5kX2tleShzY2FuY29kZSk7CisJdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChzY2FuY29kZSk7CiAJaWYgKGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpIHsKIAkJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChpYm1faG90a2V5X2FjcGlkcml2ZXIuZGV2aWNlLAotCQkJCQkJMHg4MCwgMHgxMDAxICsgc2NhbmNvZGUpOworCQkJCTB4ODAsIFRQX0hLRVlfRVZfSE9US0VZX0JBU0UgKyBzY2FuY29kZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBob3RrZXlfcmVhZF9udnJhbShzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm4sIHUzMiBtKQorc3RhdGljIHZvaWQgaG90a2V5X3JlYWRfbnZyYW0oc3RydWN0IHRwX252cmFtX3N0YXRlICpuLCBjb25zdCB1MzIgbSkKIHsKIAl1OCBkOwogCkBAIC0yMjEwLDIxICsyMzYwLDI0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoc3RydWN0IHRwX252cmFtX3N0YXRlICpvbGRuLAorCQkJCQkgICBzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm5ld24sCisJCQkJCSAgIGNvbnN0IHUzMiBldmVudF9tYXNrKQoreworCiAjZGVmaW5lIFRQQUNQSV9DT01QQVJFX0tFWShfX3NjYW5jb2RlLCBfX21lbWJlcikgXAogCWRvIHsgXAotCQlpZiAoKG1hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgJiYgXAorCQlpZiAoKGV2ZW50X21hc2sgJiAoMSA8PCBfX3NjYW5jb2RlKSkgJiYgXAogCQkgICAgb2xkbi0+X19tZW1iZXIgIT0gbmV3bi0+X19tZW1iZXIpIFwKLQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgXAorCQkJdHBhY3BpX2hvdGtleV9zZW5kX2tleShfX3NjYW5jb2RlKTsgXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgVFBBQ1BJX01BWV9TRU5EX0tFWShfX3NjYW5jb2RlKSBcCi0JZG8geyBpZiAobWFzayAmICgxIDw8IF9fc2NhbmNvZGUpKSBcCi0JCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IH0gd2hpbGUgKDApCisJZG8geyBcCisJCWlmIChldmVudF9tYXNrICYgKDEgPDwgX19zY2FuY29kZSkpIFwKKwkJCXRwYWNwaV9ob3RrZXlfc2VuZF9rZXkoX19zY2FuY29kZSk7IFwKKwl9IHdoaWxlICgwKQogCi1zdGF0aWMgdm9pZCBob3RrZXlfY29tcGFyZV9hbmRfaXNzdWVfZXZlbnQoc3RydWN0IHRwX252cmFtX3N0YXRlICpvbGRuLAotCQkJCQkgICBzdHJ1Y3QgdHBfbnZyYW1fc3RhdGUgKm5ld24sCi0JCQkJCSAgIHUzMiBtYXNrKQotewogCVRQQUNQSV9DT01QQVJFX0tFWShUUF9BQ1BJX0hPVEtFWVNDQU5fVEhJTktQQUQsIHRoaW5rcGFkX3RvZ2dsZSk7CiAJVFBBQ1BJX0NPTVBBUkVfS0VZKFRQX0FDUElfSE9US0VZU0NBTl9GTlNQQUNFLCB6b29tX3RvZ2dsZSk7CiAJVFBBQ1BJX0NPTVBBUkVfS0VZKFRQX0FDUElfSE9US0VZU0NBTl9GTkY3LCBkaXNwbGF5X3RvZ2dsZSk7CkBAIC0yMjcwLDE1ICsyNDIzLDIyIEBACiAJCQl9CiAJCX0KIAl9Ci19CiAKICN1bmRlZiBUUEFDUElfQ09NUEFSRV9LRVkKICN1bmRlZiBUUEFDUElfTUFZX1NFTkRfS0VZCit9CiAKKy8qCisgKiBQb2xsaW5nIGRyaXZlcgorICoKKyAqIFdlIHRyYWNrIGFsbCBldmVudHMgaW4gaG90a2V5X3NvdXJjZV9tYXNrIGFsbCB0aGUgdGltZSwgc2luY2UKKyAqIG1vc3Qgb2YgdGhlbSBhcmUgZWRnZS1iYXNlZC4gIFdlIG9ubHkgaXNzdWUgdGhvc2UgcmVxdWVzdGVkIGJ5CisgKiBob3RrZXlfdXNlcl9tYXNrIG9yIGhvdGtleV9kcml2ZXJfbWFzaywgdGhvdWdoLgorICovCiBzdGF0aWMgaW50IGhvdGtleV9rdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHRwX252cmFtX3N0YXRlIHNbMl07Ci0JdTMyIG1hc2s7CisJdTMyIHBvbGxfbWFzaywgZXZlbnRfbWFzazsKIAl1bnNpZ25lZCBpbnQgc2ksIHNvOwogCXVuc2lnbmVkIGxvbmcgdDsKIAl1bnNpZ25lZCBpbnQgY2hhbmdlX2RldGVjdG9yLCBtdXN0X3Jlc2V0OwpAQCAtMjI5OCwxMCArMjQ1OCwxMiBAQAogCS8qIEluaXRpYWwgc3RhdGUgZm9yIGNvbXBhcmVzICovCiAJbXV0ZXhfbG9jaygmaG90a2V5X3RocmVhZF9kYXRhX211dGV4KTsKIAljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKLQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJcG9sbF9tYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrOworCWV2ZW50X21hc2sgPSBob3RrZXlfc291cmNlX21hc2sgJgorCQkJKGhvdGtleV9kcml2ZXJfbWFzayB8IGhvdGtleV91c2VyX21hc2spOwogCXBvbGxfZnJlcSA9IGhvdGtleV9wb2xsX2ZyZXE7CiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfdGhyZWFkX2RhdGFfbXV0ZXgpOwotCWhvdGtleV9yZWFkX252cmFtKCZzW3NvXSwgbWFzayk7CisJaG90a2V5X3JlYWRfbnZyYW0oJnNbc29dLCBwb2xsX21hc2spOwogCiAJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJaWYgKHQgPT0gMCkgewpAQCAtMjMyNCwxNSArMjQ4NiwxNyBAQAogCQkJdCA9IDA7CiAJCQljaGFuZ2VfZGV0ZWN0b3IgPSBob3RrZXlfY29uZmlnX2NoYW5nZTsKIAkJfQotCQltYXNrID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJCXBvbGxfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzazsKKwkJZXZlbnRfbWFzayA9IGhvdGtleV9zb3VyY2VfbWFzayAmCisJCQkJKGhvdGtleV9kcml2ZXJfbWFzayB8IGhvdGtleV91c2VyX21hc2spOwogCQlwb2xsX2ZyZXEgPSBob3RrZXlfcG9sbF9mcmVxOwogCQltdXRleF91bmxvY2soJmhvdGtleV90aHJlYWRfZGF0YV9tdXRleCk7CiAKLQkJaWYgKGxpa2VseShtYXNrKSkgewotCQkJaG90a2V5X3JlYWRfbnZyYW0oJnNbc2ldLCBtYXNrKTsKKwkJaWYgKGxpa2VseShwb2xsX21hc2spKSB7CisJCQlob3RrZXlfcmVhZF9udnJhbSgmc1tzaV0sIHBvbGxfbWFzayk7CiAJCQlpZiAobGlrZWx5KHNpICE9IHNvKSkgewogCQkJCWhvdGtleV9jb21wYXJlX2FuZF9pc3N1ZV9ldmVudCgmc1tzb10sICZzW3NpXSwKLQkJCQkJCQkJbWFzayk7CisJCQkJCQkJCWV2ZW50X21hc2spOwogCQkJfQogCQl9CiAKQEAgLTIzNjQsMTAgKzI1MjgsMTIgQEAKIC8qIGNhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZCAqLwogc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXAoYm9vbCBtYXlfd2FybikKIHsKLQl1MzIgaG90a2V5c190b19wb2xsID0gaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X21hc2s7CisJY29uc3QgdTMyIHBvbGxfZHJpdmVyX21hc2sgPSBob3RrZXlfZHJpdmVyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CisJY29uc3QgdTMyIHBvbGxfdXNlcl9tYXNrID0gaG90a2V5X3VzZXJfbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKIAotCWlmIChob3RrZXlzX3RvX3BvbGwgIT0gMCAmJiBob3RrZXlfcG9sbF9mcmVxID4gMCAmJgotCSAgICAodHBhY3BpX2lucHV0ZGV2LT51c2VycyA+IDAgfHwgaG90a2V5X3JlcG9ydF9tb2RlIDwgMikpIHsKKwlpZiAoaG90a2V5X3BvbGxfZnJlcSA+IDAgJiYKKwkgICAgKHBvbGxfZHJpdmVyX21hc2sgfHwKKwkgICAgIChwb2xsX3VzZXJfbWFzayAmJiB0cGFjcGlfaW5wdXRkZXYtPnVzZXJzID4gMCkpKSB7CiAJCWlmICghdHBhY3BpX2hvdGtleV90YXNrKSB7CiAJCQl0cGFjcGlfaG90a2V5X3Rhc2sgPSBrdGhyZWFkX3J1bihob3RrZXlfa3RocmVhZCwKIAkJCQkJTlVMTCwgVFBBQ1BJX05WUkFNX0tUSFJFQURfTkFNRSk7CkBAIC0yMzgwLDEyICsyNTQ2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlob3RrZXlfcG9sbF9zdG9wX3N5bmMoKTsKLQkJaWYgKG1heV93YXJuICYmIGhvdGtleXNfdG9fcG9sbCAhPSAwICYmCisJCWlmIChtYXlfd2FybiAmJiAocG9sbF9kcml2ZXJfbWFzayB8fCBwb2xsX3VzZXJfbWFzaykgJiYKIAkJICAgIGhvdGtleV9wb2xsX2ZyZXEgPT0gMCkgewogCQkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKLQkJCQkiaG90IGtleXMgMHglMDh4IHJlcXVpcmUgcG9sbGluZywgIgotCQkJCSJ3aGljaCBpcyBjdXJyZW50bHkgZGlzYWJsZWRcbiIsCi0JCQkJaG90a2V5c190b19wb2xsKTsKKwkJCQkiaG90IGtleXMgMHglMDh4IGFuZC9vciBldmVudHMgMHglMDh4ICIKKwkJCQkicmVxdWlyZSBwb2xsaW5nLCB3aGljaCBpcyBjdXJyZW50bHkgIgorCQkJCSJkaXNhYmxlZFxuIiwKKwkJCQlwb2xsX3VzZXJfbWFzaywgcG9sbF9kcml2ZXJfbWFzayk7CiAJCX0KIAl9CiB9CkBAIC0yNDAzLDkgKzI1NzAsNyBAQAogCWlmICghZnJlcSkKIAkJaG90a2V5X3BvbGxfc3RvcF9zeW5jKCk7CiAKLQlIT1RLRVlfQ09ORklHX0NSSVRJQ0FMX1NUQVJUCiAJaG90a2V5X3BvbGxfZnJlcSA9IGZyZXE7Ci0JSE9US0VZX0NPTkZJR19DUklUSUNBTF9FTkQKIH0KIAogI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KQEAgLTI0NDAsNyArMjYwNSw4IEBACiBzdGF0aWMgdm9pZCBob3RrZXlfaW5wdXRkZXZfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCS8qIGRpc2FibGUgaG90a2V5IHBvbGxpbmcgd2hlbiBwb3NzaWJsZSAqLwotCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcpCisJaWYgKHRwYWNwaV9saWZlY3ljbGUgPT0gVFBBQ1BJX0xJRkVfUlVOTklORyAmJgorCSAgICAhKGhvdGtleV9zb3VyY2VfbWFzayAmIGhvdGtleV9kcml2ZXJfbWFzaykpCiAJCWhvdGtleV9wb2xsX3NldHVwX3NhZmUoZmFsc2UpOwogfQogCkBAIC0yNDg4LDE1ICsyNjU0LDcgQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCWludCByZXM7Ci0KLQlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXMgPSBob3RrZXlfbWFza19nZXQoKTsKLQltdXRleF91bmxvY2soJmhvdGtleV9tdXRleCk7Ci0KLQlyZXR1cm4gKHJlcyk/Ci0JCXJlcyA6IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDh4XG4iLCBob3RrZXlfbWFzayk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDh4XG4iLCBob3RrZXlfdXNlcl9tYXNrKTsKIH0KIAogc3RhdGljIHNzaXplX3QgaG90a2V5X21hc2tfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjUxMiw3ICsyNjcwLDcgQEAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCXJlcyA9IGhvdGtleV9tYXNrX3NldCh0KTsKKwlyZXMgPSBob3RrZXlfdXNlcl9tYXNrX3NldCh0KTsKIAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCiAJaG90a2V5X3BvbGxfc2V0dXAodHJ1ZSk7CkBAIC0yNTk0LDYgKzI3NTIsOCBAQAogCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdDsKKwl1MzIgcl9ldjsKKwlpbnQgcmM7CiAKIAlpZiAocGFyc2Vfc3RydG91bChidWYsIDB4ZmZmZmZmZmZVTCwgJnQpIHx8CiAJCSgodCAmIH5UUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLKSAhPSAwKSkKQEAgLTI2MDYsMTQgKzI3NjYsMjggQEAKIAlob3RrZXlfc291cmNlX21hc2sgPSB0OwogCUhPVEtFWV9DT05GSUdfQ1JJVElDQUxfRU5ECiAKKwlyYyA9IGhvdGtleV9tYXNrX3NldCgoaG90a2V5X3VzZXJfbWFzayB8IGhvdGtleV9kcml2ZXJfbWFzaykgJgorCQkJfmhvdGtleV9zb3VyY2VfbWFzayk7CiAJaG90a2V5X3BvbGxfc2V0dXAodHJ1ZSk7Ci0JaG90a2V5X21hc2tfc2V0KGhvdGtleV9tYXNrKTsKKworCS8qIGNoZWNrIGlmIGV2ZW50cyBuZWVkZWQgYnkgdGhlIGRyaXZlciBnb3QgZGlzYWJsZWQgKi8KKwlyX2V2ID0gaG90a2V5X2RyaXZlcl9tYXNrICYgfihob3RrZXlfYWNwaV9tYXNrICYgaG90a2V5X2FsbF9tYXNrKQorCQkmIH5ob3RrZXlfc291cmNlX21hc2sgJiBUUEFDUElfSEtFWV9OVlJBTV9LTk9XTl9NQVNLOwogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwogCisJaWYgKHJjIDwgMCkKKwkJcHJpbnRrKFRQQUNQSV9FUlIgImhvdGtleV9zb3VyY2VfbWFzazogZmFpbGVkIHRvIHVwZGF0ZSB0aGUiCisJCQkiZmlybXdhcmUgZXZlbnQgbWFzayFcbiIpOworCisJaWYgKHJfZXYpCisJCXByaW50ayhUUEFDUElfTk9USUNFICJob3RrZXlfc291cmNlX21hc2s6ICIKKwkJCSJzb21lIGltcG9ydGFudCBldmVudHMgd2VyZSBkaXNhYmxlZDogIgorCQkJIjB4JTA0eFxuIiwgcl9ldik7CisKIAl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soImhvdGtleV9zb3VyY2VfbWFzayIsICJzZXQgdG8gMHglMDhseFxuIiwgdCk7CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIChyYyA8IDApID8gcmMgOiBjb3VudDsKIH0KIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2hvdGtleV9zb3VyY2VfbWFzayA9CkBAIC0yNzMxLDkgKzI5MDUsOCBAQAogCiBzdGF0aWMgdm9pZCBob3RrZXlfd2FrZXVwX3JlYXNvbl9ub3RpZnlfY2hhbmdlKHZvaWQpCiB7Ci0JaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKQotCQlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKLQkJCSAgICAgIndha2V1cF9yZWFzb24iKTsKKwlzeXNmc19ub3RpZnkoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwgTlVMTCwKKwkJICAgICAid2FrZXVwX3JlYXNvbiIpOwogfQogCiAvKiBzeXNmcyB3YWtldXAgaG90dW5wbHVnX2NvbXBsZXRlIChwb2xsYWJsZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTI3NTAsOSArMjkyMyw4IEBACiAKIHN0YXRpYyB2b2lkIGhvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlX25vdGlmeV9jaGFuZ2Uodm9pZCkKIHsKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spCi0JCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAotCQkJICAgICAid2FrZXVwX2hvdHVucGx1Z19jb21wbGV0ZSIpOworCXN5c2ZzX25vdGlmeSgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLCBOVUxMLAorCQkgICAgICJ3YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjc2MCwyNyArMjkzMiwxOSBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhvdGtleV9hdHRyaWJ1dGVzW10gX19pbml0ZGF0YSA9IHsKIAkmZGV2X2F0dHJfaG90a2V5X2VuYWJsZS5hdHRyLAogCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19lbmFibGVkLmF0dHIsCisJJmRldl9hdHRyX2hvdGtleV9iaW9zX21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X3JlcG9ydF9tb2RlLmF0dHIsCi0jaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKKwkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9yZWFzb24uYXR0ciwKKwkmZGV2X2F0dHJfaG90a2V5X3dha2V1cF9ob3R1bnBsdWdfY29tcGxldGUuYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X21hc2suYXR0ciwKIAkmZGV2X2F0dHJfaG90a2V5X2FsbF9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9yZWNvbW1lbmRlZF9tYXNrLmF0dHIsCisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAkmZGV2X2F0dHJfaG90a2V5X3NvdXJjZV9tYXNrLmF0dHIsCiAJJmRldl9hdHRyX2hvdGtleV9wb2xsX2ZyZXEuYXR0ciwKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmhvdGtleV9tYXNrX2F0dHJpYnV0ZXNbXSBfX2luaXRkYXRhID0gewotCSZkZXZfYXR0cl9ob3RrZXlfYmlvc19tYXNrLmF0dHIsCi0jaWZuZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0hPVEtFWV9QT0xMCi0JJmRldl9hdHRyX2hvdGtleV9tYXNrLmF0dHIsCi0JJmRldl9hdHRyX2hvdGtleV9hbGxfbWFzay5hdHRyLAotCSZkZXZfYXR0cl9ob3RrZXlfcmVjb21tZW5kZWRfbWFzay5hdHRyLAotI2VuZGlmCi0JJmRldl9hdHRyX2hvdGtleV93YWtldXBfcmVhc29uLmF0dHIsCi0JJmRldl9hdHRyX2hvdGtleV93YWtldXBfaG90dW5wbHVnX2NvbXBsZXRlLmF0dHIsCi19OwotCiAvKgogICogU3luYyBib3RoIHRoZSBodyBhbmQgc3cgYmxvY2tpbmcgc3RhdGUgb2YgYWxsIHN3aXRjaGVzCiAgKi8KQEAgLTI4NDMsMTYgKzMwMDcsMTYgQEAKIAogCWtmcmVlKGhvdGtleV9rZXljb2RlX21hcCk7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5KSB7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElUIHwgVFBBQ1BJX0RCR19IS0VZLAotCQkJICAgInJlc3RvcmluZyBvcmlnaW5hbCBob3Qga2V5IG1hc2tcbiIpOwotCQkvKiBubyBzaG9ydC1jaXJjdWl0IGJvb2xlYW4gb3BlcmF0b3IgYmVsb3chICovCi0JCWlmICgoaG90a2V5X21hc2tfc2V0KGhvdGtleV9vcmlnX21hc2spIHwKLQkJICAgICBob3RrZXlfc3RhdHVzX3NldChmYWxzZSkpICE9IDApCi0JCQlwcmludGsoVFBBQ1BJX0VSUgotCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSBob3Qga2V5IG1hc2sgIgotCQkJICAgICAgICJ0byBCSU9TIGRlZmF1bHRzXG4iKTsKLQl9CisJZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQgfCBUUEFDUElfREJHX0hLRVksCisJCSAgICJyZXN0b3Jpbmcgb3JpZ2luYWwgSEtFWSBzdGF0dXMgYW5kIG1hc2tcbiIpOworCS8qIHllcywgdGhlcmUgaXMgYSBiaXR3aXNlIG9yIGJlbG93LCB3ZSB3YW50IHRoZQorCSAqIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgZXZlbiBpZiBvbmUgb2YgdGhlbSBmYWlsICovCisJaWYgKCgodHBfZmVhdHVyZXMuaG90a2V5X21hc2sgJiYKKwkgICAgICBob3RrZXlfbWFza19zZXQoaG90a2V5X29yaWdfbWFzaykpIHwKKwkgICAgIGhvdGtleV9zdGF0dXNfc2V0KGZhbHNlKSkgIT0gMCkKKwkJcHJpbnRrKFRQQUNQSV9FUlIKKwkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSBob3Qga2V5IG1hc2sgIgorCQkgICAgICAgInRvIEJJT1MgZGVmYXVsdHNcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaG90a2V5X3VubWFwKGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSkKQEAgLTI4NjQsNiArMzAyOCwzNSBAQAogCX0KIH0KIAorLyoKKyAqIEhLRVkgcXVpcmtzOgorICogICBUUEFDUElfSEtfUV9JTklNQVNLOglTdXBwb3J0cyBGTitGMyxGTitGNCxGTitGMTIKKyAqLworCisjZGVmaW5lCVRQQUNQSV9IS19RX0lOSU1BU0sJMHgwMDAxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBhY3BpX3F1aXJrIHRwYWNwaV9ob3RrZXlfcXRhYmxlW10gX19pbml0Y29uc3QgPSB7CisJVFBBQ1BJX1FfSUJNKCdJJywgJ0gnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogNjAwRSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdOJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIDYwMEUgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnRCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiA3NzAsIDc3MEUsIDc3MEVEICovCisJVFBBQ1BJX1FfSUJNKCdJJywgJ1cnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIwbSAqLworCVRQQUNQSV9RX0lCTSgnSScsICdWJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMHAgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnMCcsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFlLCBBMjJlICovCisJVFBBQ1BJX1FfSUJNKCdLJywgJ1UnLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIxZSAqLworCVRQQUNQSV9RX0lCTSgnSycsICdYJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMW0sIEEyMm0gKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMjFwLCBBMjJwICovCisJVFBBQ1BJX1FfSUJNKCcxJywgJ0InLCBUUEFDUElfSEtfUV9JTklNQVNLKSwgLyogQTIyZSAqLworCVRQQUNQSV9RX0lCTSgnMScsICczJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIEEyMm0gKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBBMzAvcCAoMCkgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnQycsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBSMzAgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnRicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBSMzEgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnWScsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjAgKi8KKwlUUEFDUElfUV9JQk0oJ0snLCAnWicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjEgKi8KKwlUUEFDUElfUV9JQk0oJzEnLCAnNicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBUMjIgKi8KKwlUUEFDUElfUV9JQk0oJ0knLCAnWicsIFRQQUNQSV9IS19RX0lOSU1BU0spLCAvKiBYMjAsIFgyMSAqLworCVRQQUNQSV9RX0lCTSgnMScsICdEJywgVFBBQ1BJX0hLX1FfSU5JTUFTSyksIC8qIFgyMiwgWDIzLCBYMjQgKi8KK307CisKIHN0YXRpYyBpbnQgX19pbml0IGhvdGtleV9pbml0KHN0cnVjdCBpYm1faW5pdF9zdHJ1Y3QgKmlpYm0pCiB7CiAJLyogUmVxdWlyZW1lbnRzIGZvciBjaGFuZ2luZyB0aGUgZGVmYXVsdCBrZXltYXBzOgpAQCAtMjkwNiw5ICszMDk5LDcgQEAKIAkJS0VZX1VOS05PV04sCS8qIDB4MEQ6IEZOK0lOU0VSVCAqLwogCQlLRVlfVU5LTk9XTiwJLyogMHgwRTogRk4rREVMRVRFICovCiAKLQkJLyogYnJpZ2h0bmVzczogZmlybXdhcmUgYWx3YXlzIHJlYWN0cyB0byB0aGVtLCB1bmxlc3MKLQkJICogWC5vcmcgZGlkIHNvbWUgdHJpY2tzIGluIHRoZSByYWRlb24gQklPUyBzY3JhdGNoCi0JCSAqIHJlZ2lzdGVycyBvZiAqc29tZSogbW9kZWxzICovCisJCS8qIGJyaWdodG5lc3M6IGZpcm13YXJlIGFsd2F5cyByZWFjdHMgdG8gdGhlbSAqLwogCQlLRVlfUkVTRVJWRUQsCS8qIDB4MEY6IEZOK0hPTUUgKGJyaWdodG5lc3MgdXApICovCiAJCUtFWV9SRVNFUlZFRCwJLyogMHgxMDogRk4rRU5EIChicmlnaHRuZXNzIGRvd24pICovCiAKQEAgLTI5ODMsNiArMzE3NCw4IEBACiAJaW50IHN0YXR1czsKIAlpbnQgaGtleXY7CiAKKwl1bnNpZ25lZCBsb25nIHF1aXJrczsKKwogCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCSJpbml0aWFsaXppbmcgaG90a2V5IHN1YmRyaXZlclxuIik7CiAKQEAgLTMwMDgsOSArMzIwMSwxNiBAQAogCWlmICghdHBfZmVhdHVyZXMuaG90a2V5KQogCQlyZXR1cm4gMTsKIAorCXF1aXJrcyA9IHRwYWNwaV9jaGVja19xdWlya3ModHBhY3BpX2hvdGtleV9xdGFibGUsCisJCQkJICAgICBBUlJBWV9TSVpFKHRwYWNwaV9ob3RrZXlfcXRhYmxlKSk7CisKIAl0cGFjcGlfZGlzYWJsZV9icmlnaHRuZXNzX2RlbGF5KCk7CiAKLQlob3RrZXlfZGV2X2F0dHJpYnV0ZXMgPSBjcmVhdGVfYXR0cl9zZXQoMTMsIE5VTEwpOworCS8qIE1VU1QgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGFsbCBhdHRyaWJ1dGVzIHRvIGJlIGFkZGVkIHRvCisJICogaG90a2V5X2Rldl9hdHRyaWJ1dGVzICovCisJaG90a2V5X2Rldl9hdHRyaWJ1dGVzID0gY3JlYXRlX2F0dHJfc2V0KAorCQkJCQlBUlJBWV9TSVpFKGhvdGtleV9hdHRyaWJ1dGVzKSArIDIsCisJCQkJCU5VTEwpOwogCWlmICghaG90a2V5X2Rldl9hdHRyaWJ1dGVzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXMgPSBhZGRfbWFueV90b19hdHRyX3NldChob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCkBAIC0zMDE5LDcgKzMyMTksNyBAQAogCWlmIChyZXMpCiAJCWdvdG8gZXJyX2V4aXQ7CiAKLQkvKiBtYXNrIG5vdCBzdXBwb3J0ZWQgb24gNTcwLCA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwKKwkvKiBtYXNrIG5vdCBzdXBwb3J0ZWQgb24gNjAwZS94LCA3NzBlLCA3NzB4LCBBMjFlLCBBMnhtL3AsCiAJICAgQTMwLCBSMzAsIFIzMSwgVDIwLTIyLCBYMjAtMjEsIFgyMi0yNC4gIERldGVjdGVkIGJ5IGNoZWNraW5nCiAJICAgZm9yIEhLRVkgaW50ZXJmYWNlIHZlcnNpb24gMHgxMDAgKi8KIAlpZiAoYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhrZXl2LCAiTUhLViIsICJxZCIpKSB7CkBAIC0zMDMzLDEwICszMjMzLDIyIEBACiAJCQkgKiBNSEtWIDB4MTAwIGluIEEzMSwgUjQwLCBSNDBlLAogCQkJICogVDR4LCBYMzEsIGFuZCBsYXRlcgogCQkJICovCi0JCQl0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayA9IDE7CiAJCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkJImZpcm13YXJlIEhLRVkgaW50ZXJmYWNlIHZlcnNpb246IDB4JXhcbiIsCiAJCQkJaGtleXYpOworCisJCQkvKiBQYXJhbm9pYSBjaGVjayBBTkQgaW5pdCBob3RrZXlfYWxsX21hc2sgKi8KKwkJCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhvdGtleV9hbGxfbWFzaywKKwkJCQkJIk1IS0EiLCAicWQiKSkgeworCQkJCXByaW50ayhUUEFDUElfRVJSCisJCQkJICAgICAgICJtaXNzaW5nIE1IS0EgaGFuZGxlciwgIgorCQkJCSAgICAgICAicGxlYXNlIHJlcG9ydCB0aGlzIHRvICVzXG4iLAorCQkJCSAgICAgICBUUEFDUElfTUFJTCk7CisJCQkJLyogRmFsbGJhY2s6IHByZS1pbml0IGZvciBGTitGMyxGNCxGMTIgKi8KKwkJCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOworCQkJfSBlbHNlIHsKKwkJCQl0cF9mZWF0dXJlcy5ob3RrZXlfbWFzayA9IDE7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTMwNDQsMzIgKzMyNTYsMjMgQEAKIAkJImhvdGtleSBtYXNrcyBhcmUgJXNcbiIsCiAJCXN0cl9zdXBwb3J0ZWQodHBfZmVhdHVyZXMuaG90a2V5X21hc2spKTsKIAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZob3RrZXlfYWxsX21hc2ssCi0JCQkJIk1IS0EiLCAicWQiKSkgewotCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCSAgICAgICAibWlzc2luZyBNSEtBIGhhbmRsZXIsICIKLQkJCSAgICAgICAicGxlYXNlIHJlcG9ydCB0aGlzIHRvICVzXG4iLAotCQkJICAgICAgIFRQQUNQSV9NQUlMKTsKLQkJCS8qIEZOK0YxMiwgRk4rRjQsIEZOK0YzICovCi0JCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOwotCQl9Ci0JfQorCS8qIEluaXQgaG90a2V5X2FsbF9tYXNrIGlmIG5vdCBpbml0aWFsaXplZCB5ZXQgKi8KKwlpZiAoIXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrICYmICFob3RrZXlfYWxsX21hc2sgJiYKKwkgICAgKHF1aXJrcyAmIFRQQUNQSV9IS19RX0lOSU1BU0spKQorCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOyAgLyogRk4rRjEyLCBGTitGNCwgRk4rRjMgKi8KIAotCS8qIGhvdGtleV9zb3VyY2VfbWFzayAqbXVzdCogYmUgemVybyBmb3IKLQkgKiB0aGUgZmlyc3QgaG90a2V5X21hc2tfZ2V0ICovCisJLyogSW5pdCBob3RrZXlfYWNwaV9tYXNrIGFuZCBob3RrZXlfb3JpZ19tYXNrICovCiAJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7CisJCS8qIGhvdGtleV9zb3VyY2VfbWFzayAqbXVzdCogYmUgemVybyBmb3IKKwkJICogdGhlIGZpcnN0IGhvdGtleV9tYXNrX2dldCB0byByZXR1cm4gaG90a2V5X29yaWdfbWFzayAqLwogCQlyZXMgPSBob3RrZXlfbWFza19nZXQoKTsKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX2V4aXQ7CiAKLQkJaG90a2V5X29yaWdfbWFzayA9IGhvdGtleV9tYXNrOwotCQlyZXMgPSBhZGRfbWFueV90b19hdHRyX3NldCgKLQkJCQlob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCi0JCQkJaG90a2V5X21hc2tfYXR0cmlidXRlcywKLQkJCQlBUlJBWV9TSVpFKGhvdGtleV9tYXNrX2F0dHJpYnV0ZXMpKTsKLQkJaWYgKHJlcykKLQkJCWdvdG8gZXJyX2V4aXQ7CisJCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfYWNwaV9tYXNrOworCX0gZWxzZSB7CisJCWhvdGtleV9vcmlnX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CisJCWhvdGtleV9hY3BpX21hc2sgPSBob3RrZXlfYWxsX21hc2s7CiAJfQogCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCkBAIC0zMTgzLDE0ICszMzg2LDkgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9IT1RLRVlfUE9MTAotCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewotCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0sKLQkJCQkJJiB+aG90a2V5X2FsbF9tYXNrCi0JCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOwotCX0gZWxzZSB7Ci0JCWhvdGtleV9zb3VyY2VfbWFzayA9IFRQQUNQSV9IS0VZX05WUkFNX0dPT0RfTUFTSwotCQkJCQkmIH5ob3RrZXlfcmVzZXJ2ZWRfbWFzazsKLQl9CisJaG90a2V5X3NvdXJjZV9tYXNrID0gVFBBQ1BJX0hLRVlfTlZSQU1fR09PRF9NQVNLCisJCQkJJiB+aG90a2V5X2FsbF9tYXNrCisJCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2s7CiAKIAl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCSAgICAiaG90a2V5IHNvdXJjZSBtYXNrIDB4JTA4eCwgcG9sbGluZyBmcmVxICV1XG4iLApAQCAtMzIwNCwxMyArMzQwMiwxOCBAQAogCQlob3RrZXlfZXhpdCgpOwogCQlyZXR1cm4gcmVzOwogCX0KLQlyZXMgPSBob3RrZXlfbWFza19zZXQoKChob3RrZXlfYWxsX21hc2sgfCBob3RrZXlfc291cmNlX21hc2spCi0JCQkJJiB+aG90a2V5X3Jlc2VydmVkX21hc2spCi0JCQkJfCBob3RrZXlfb3JpZ19tYXNrKTsKKwlyZXMgPSBob3RrZXlfbWFza19zZXQoKChob3RrZXlfYWxsX21hc2sgJiB+aG90a2V5X3Jlc2VydmVkX21hc2spCisJCQkgICAgICAgfCBob3RrZXlfZHJpdmVyX21hc2spCisJCQkgICAgICAmIH5ob3RrZXlfc291cmNlX21hc2spOwogCWlmIChyZXMgPCAwICYmIHJlcyAhPSAtRU5YSU8pIHsKIAkJaG90a2V5X2V4aXQoKTsKIAkJcmV0dXJuIHJlczsKIAl9CisJaG90a2V5X3VzZXJfbWFzayA9IChob3RrZXlfYWNwaV9tYXNrIHwgaG90a2V5X3NvdXJjZV9tYXNrKQorCQkJCSYgfmhvdGtleV9yZXNlcnZlZF9tYXNrOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJImluaXRpYWwgbWFza3M6IHVzZXI9MHglMDh4LCBmdz0weCUwOHgsIHBvbGw9MHglMDh4XG4iLAorCQlob3RrZXlfdXNlcl9tYXNrLCBob3RrZXlfYWNwaV9tYXNrLCBob3RrZXlfc291cmNlX21hc2spOwogCiAJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkibGVnYWN5IGlibS9ob3RrZXkgZXZlbnQgcmVwb3J0aW5nIG92ZXIgcHJvY2ZzICVzXG4iLApAQCAtMzI0NSw3ICszNDQ4LDcgQEAKIAlpZiAoc2NhbmNvZGUgPiAwICYmIHNjYW5jb2RlIDwgMHgyMSkgewogCQlzY2FuY29kZS0tOwogCQlpZiAoIShob3RrZXlfc291cmNlX21hc2sgJiAoMSA8PCBzY2FuY29kZSkpKSB7Ci0JCQl0cGFjcGlfaW5wdXRfc2VuZF9rZXkoc2NhbmNvZGUpOworCQkJdHBhY3BpX2lucHV0X3NlbmRfa2V5X21hc2tlZChzY2FuY29kZSk7CiAJCQkqc2VuZF9hY3BpX2V2ID0gZmFsc2U7CiAJCX0gZWxzZSB7CiAJCQkqaWdub3JlX2FjcGlfZXYgPSB0cnVlOwpAQCAtMzI2NCwyMCArMzQ2NywyMCBAQAogCSppZ25vcmVfYWNwaV9ldiA9IGZhbHNlOwogCiAJc3dpdGNoIChoa2V5KSB7Ci0JY2FzZSAweDIzMDQ6IC8qIHN1c3BlbmQsIHVuZG9jayAqLwotCWNhc2UgMHgyNDA0OiAvKiBoaWJlcm5hdGlvbiwgdW5kb2NrICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzNfVU5ET0NLOiAvKiBzdXNwZW5kLCB1bmRvY2sgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9VTkRPQ0s6IC8qIGhpYmVybmF0aW9uLCB1bmRvY2sgKi8KIAkJaG90a2V5X3dha2V1cF9yZWFzb24gPSBUUF9BQ1BJX1dBS0VVUF9VTkRPQ0s7CiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCWJyZWFrOwogCi0JY2FzZSAweDIzMDU6IC8qIHN1c3BlbmQsIGJheSBlamVjdCAqLwotCWNhc2UgMHgyNDA1OiAvKiBoaWJlcm5hdGlvbiwgYmF5IGVqZWN0ICovCisJY2FzZSBUUF9IS0VZX0VWX1dLVVBfUzNfQkFZRUo6IC8qIHN1c3BlbmQsIGJheSBlamVjdCAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1M0X0JBWUVKOiAvKiBoaWJlcm5hdGlvbiwgYmF5IGVqZWN0ICovCiAJCWhvdGtleV93YWtldXBfcmVhc29uID0gVFBfQUNQSV9XQUtFVVBfQkFZRUo7CiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCWJyZWFrOwogCi0JY2FzZSAweDIzMTM6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsIChTMykgKi8KLQljYXNlIDB4MjQxMzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwgKFM0KSAqLworCWNhc2UgVFBfSEtFWV9FVl9XS1VQX1MzX0JBVExPVzogLyogQmF0dGVyeSBvbiBjcml0aWNhbCBsb3cgbGV2ZWwvUzMgKi8KKwljYXNlIFRQX0hLRVlfRVZfV0tVUF9TNF9CQVRMT1c6IC8qIEJhdHRlcnkgb24gY3JpdGljYWwgbG93IGxldmVsL1M0ICovCiAJCXByaW50ayhUUEFDUElfQUxFUlQKIAkJCSJFTUVSR0VOQ1kgV0FLRVVQOiBiYXR0ZXJ5IGFsbW9zdCBlbXB0eVxuIik7CiAJCS8qIGhvdyB0byBhdXRvLWhlYWw6ICovCkBAIC0zMzA3LDIxICszNTEwLDIxIEBACiAJKmlnbm9yZV9hY3BpX2V2ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGhrZXkpIHsKLQljYXNlIDB4NTAxMDogLyogTGVub3ZvIG5ldyBCSU9TOiBicmlnaHRuZXNzIGNoYW5nZWQgKi8KLQljYXNlIDB4NTAwYjogLyogWDYxdDogdGFibGV0IHBlbiBpbnNlcnRlZCBpbnRvIGJheSAqLwotCWNhc2UgMHg1MDBjOiAvKiBYNjF0OiB0YWJsZXQgcGVuIHJlbW92ZWQgZnJvbSBiYXkgKi8KKwljYXNlIFRQX0hLRVlfRVZfUEVOX0lOU0VSVEVEOiAgLyogWDYxdDogdGFibGV0IHBlbiBpbnNlcnRlZCBpbnRvIGJheSAqLworCWNhc2UgVFBfSEtFWV9FVl9QRU5fUkVNT1ZFRDogICAvKiBYNjF0OiB0YWJsZXQgcGVuIHJlbW92ZWQgZnJvbSBiYXkgKi8KIAkJcmV0dXJuIHRydWU7CiAKLQljYXNlIDB4NTAwOTogLyogWDQxdC1YNjF0OiBzd2l2ZWwgdXAgKHRhYmxldCBtb2RlKSAqLwotCWNhc2UgMHg1MDBhOiAvKiBYNDF0LVg2MXQ6IHN3aXZlbCBkb3duIChub3JtYWwgbW9kZSkgKi8KKwljYXNlIFRQX0hLRVlfRVZfVEFCTEVUX1RBQkxFVDogICAvKiBYNDF0LVg2MXQ6IHRhYmxldCBtb2RlICovCisJY2FzZSBUUF9IS0VZX0VWX1RBQkxFVF9OT1RFQk9PSzogLyogWDQxdC1YNjF0OiBub3JtYWwgbW9kZSAqLwogCQl0cGFjcGlfaW5wdXRfc2VuZF90YWJsZXRzdygpOwogCQlob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSgpOwogCQkqc2VuZF9hY3BpX2V2ID0gZmFsc2U7CiAJCXJldHVybiB0cnVlOwogCi0JY2FzZSAweDUwMDE6Ci0JY2FzZSAweDUwMDI6Ci0JCS8qIExJRCBzd2l0Y2ggZXZlbnRzLiAgRG8gbm90IHByb3BhZ2F0ZSAqLworCWNhc2UgVFBfSEtFWV9FVl9MSURfQ0xPU0U6CS8qIExpZCBjbG9zZWQgKi8KKwljYXNlIFRQX0hLRVlfRVZfTElEX09QRU46CS8qIExpZCBvcGVuZWQgKi8KKwljYXNlIFRQX0hLRVlfRVZfQlJHSFRfQ0hBTkdFRDoJLyogYnJpZ2h0bmVzcyBjaGFuZ2VkICovCisJCS8qIGRvIG5vdCBwcm9wYWdhdGUgdGhlc2UgZXZlbnRzICovCiAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7CiAJCXJldHVybiB0cnVlOwogCkBAIC0zMzM5LDMwICszNTQyLDMwIEBACiAJKmlnbm9yZV9hY3BpX2V2ID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGhrZXkpIHsKLQljYXNlIDB4NjAxMToKKwljYXNlIFRQX0hLRVlfRVZfQUxBUk1fQkFUX0hPVDoKIAkJcHJpbnRrKFRQQUNQSV9DUklUCiAJCQkiVEhFUk1BTCBBTEFSTTogYmF0dGVyeSBpcyB0b28gaG90IVxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogd2FybiB1c2VyIHRocm91Z2ggZ3VpICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDEyOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9CQVRfWEhPVDoKIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiBiYXR0ZXJ5IGlzIGV4dHJlbWVseSBob3QhXG4iKTsKIAkJLyogcmVjb21tZW5kZWQgYWN0aW9uOiBpbW1lZGlhdGUgc2xlZXAvaGliZXJuYXRlICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDIxOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfSE9UOgogCQlwcmludGsoVFBBQ1BJX0NSSVQKIAkJCSJUSEVSTUFMIEFMQVJNOiAiCiAJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgdG9vIGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IHdhcm4gdXNlciB0aHJvdWdoIGd1aSwgdGhhdCAqLwogCQkvKiBzb21lIGludGVybmFsIGNvbXBvbmVudCBpcyB0b28gaG90ICovCiAJCXJldHVybiB0cnVlOwotCWNhc2UgMHg2MDIyOgorCWNhc2UgVFBfSEtFWV9FVl9BTEFSTV9TRU5TT1JfWEhPVDoKIAkJcHJpbnRrKFRQQUNQSV9BTEVSVAogCQkJIlRIRVJNQUwgRU1FUkdFTkNZOiAiCiAJCQkiYSBzZW5zb3IgcmVwb3J0cyBzb21ldGhpbmcgaXMgZXh0cmVtZWx5IGhvdCFcbiIpOwogCQkvKiByZWNvbW1lbmRlZCBhY3Rpb246IGltbWVkaWF0ZSBzbGVlcC9oaWJlcm5hdGUgKi8KIAkJcmV0dXJuIHRydWU7Ci0JY2FzZSAweDYwMzA6CisJY2FzZSBUUF9IS0VZX0VWX1RITV9UQUJMRV9DSEFOR0VEOgogCQlwcmludGsoVFBBQ1BJX0lORk8KIAkJCSJFQyByZXBvcnRzIHRoYXQgVGhlcm1hbCBUYWJsZSBoYXMgY2hhbmdlZFxuIik7CiAJCS8qIHJlY29tbWVuZGVkIGFjdGlvbjogZG8gbm90aGluZywgd2UgZG9uJ3QgaGF2ZQpAQCAtMzQyMCw3ICszNjIzLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQkvKiAweDMwMDAtMHgzRkZGOiBiYXktcmVsYXRlZCB3YWtldXBzICovCi0JCQlpZiAoaGtleSA9PSAweDMwMDMpIHsKKwkJCWlmIChoa2V5ID09IFRQX0hLRVlfRVZfQkFZRUpfQUNLKSB7CiAJCQkJaG90a2V5X2F1dG9zbGVlcF9hY2sgPSAxOwogCQkJCXByaW50ayhUUEFDUElfSU5GTwogCQkJCSAgICAgICAiYmF5IGVqZWN0ZWRcbiIpOwpAQCAtMzQzMiw3ICszNjM1LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIDQ6CiAJCQkvKiAweDQwMDAtMHg0RkZGOiBkb2NrLXJlbGF0ZWQgd2FrZXVwcyAqLwotCQkJaWYgKGhrZXkgPT0gMHg0MDAzKSB7CisJCQlpZiAoaGtleSA9PSBUUF9IS0VZX0VWX1VORE9DS19BQ0spIHsKIAkJCQlob3RrZXlfYXV0b3NsZWVwX2FjayA9IDE7CiAJCQkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkJICAgICAgICJ1bmRvY2tlZFxuIik7CkBAIC0zNDU0LDcgKzM2NTcsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgNzoKIAkJCS8qIDB4NzAwMC0weDdGRkY6IG1pc2MgKi8KLQkJCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfd2xzdyAmJiBoa2V5ID09IDB4NzAwMCkgeworCQkJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV93bHN3ICYmCisJCQkJCWhrZXkgPT0gVFBfSEtFWV9FVl9SRktJTExfQ0hBTkdFRCkgewogCQkJCXRwYWNwaV9zZW5kX3JhZGlvc3dfdXBkYXRlKCk7CiAJCQkJc2VuZF9hY3BpX2V2ID0gMDsKIAkJCQlrbm93bl9ldiA9IHRydWU7CkBAIC0zNTAwLDEwICszNzA0LDEyIEBACiB7CiAJdHBhY3BpX2Rpc2FibGVfYnJpZ2h0bmVzc19kZWxheSgpOwogCi0JaWYgKGhvdGtleV9tYXNrX2dldCgpKQorCWlmIChob3RrZXlfc3RhdHVzX3NldCh0cnVlKSA8IDAgfHwKKwkgICAgaG90a2V5X21hc2tfc2V0KGhvdGtleV9hY3BpX21hc2spIDwgMCkKIAkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJICAgICAgICJlcnJvciB3aGlsZSB0cnlpbmcgdG8gcmVhZCBob3Qga2V5IG1hc2sgIgotCQkgICAgICAgImZyb20gZmlybXdhcmVcbiIpOworCQkgICAgICAgImVycm9yIHdoaWxlIGF0dGVtcHRpbmcgdG8gcmVzZXQgdGhlIGV2ZW50ICIKKwkJICAgICAgICJmaXJtd2FyZSBpbnRlcmZhY2VcbiIpOworCiAJdHBhY3BpX3NlbmRfcmFkaW9zd191cGRhdGUoKTsKIAlob3RrZXlfdGFibGV0X21vZGVfbm90aWZ5X2NoYW5nZSgpOwogCWhvdGtleV93YWtldXBfcmVhc29uX25vdGlmeV9jaGFuZ2UoKTsKQEAgLTM1MzIsOCArMzczOCw4IEBACiAJCXJldHVybiByZXM7CiAKIAlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHQlc1xuIiwgZW5hYmxlZChzdGF0dXMsIDApKTsKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKLQkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIm1hc2s6XHRcdDB4JTA4eFxuIiwgaG90a2V5X21hc2spOworCWlmIChob3RrZXlfYWxsX21hc2spIHsKKwkJbGVuICs9IHNwcmludGYocCArIGxlbiwgIm1hc2s6XHRcdDB4JTA4eFxuIiwgaG90a2V5X3VzZXJfbWFzayk7CiAJCWxlbiArPSBzcHJpbnRmKHAgKyBsZW4sCiAJCQkgICAgICAgImNvbW1hbmRzOlx0ZW5hYmxlLCBkaXNhYmxlLCByZXNldCwgPG1hc2s+XG4iKTsKIAl9IGVsc2UgewpAQCAtMzU3MCw3ICszNzc2LDcgQEAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCW1hc2sgPSBob3RrZXlfbWFzazsKKwltYXNrID0gaG90a2V5X3VzZXJfbWFzazsKIAogCXJlcyA9IDA7CiAJd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKQEAgLTM1OTIsMTIgKzM3OTgsMTEgQEAKIAkJfQogCX0KIAotCWlmICghcmVzKQorCWlmICghcmVzKSB7CiAJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGhvdGtleSIsCiAJCQkic2V0IG1hc2sgdG8gMHglMDh4XG4iLCBtYXNrKTsKLQotCWlmICghcmVzICYmIG1hc2sgIT0gaG90a2V5X21hc2spCi0JCXJlcyA9IGhvdGtleV9tYXNrX3NldChtYXNrKTsKKwkJcmVzID0gaG90a2V5X3VzZXJfbWFza19zZXQobWFzayk7CisJfQogCiBlcnJleGl0OgogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKQEAgLTYwMTAsOCArNjIxNSwxMCBAQAogCQkJCQlUUEFDUElfQkFDS0xJR0hUX0RFVl9OQU1FLCBOVUxMLCBOVUxMLAogCQkJCQkmaWJtX2JhY2tsaWdodF9kYXRhKTsKIAlpZiAoSVNfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKSkgeworCQlpbnQgcmMgPSBQVFJfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJaWJtX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogCQlwcmludGsoVFBBQ1BJX0VSUiAiQ291bGQgbm90IHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwotCQlyZXR1cm4gUFRSX0VSUihpYm1fYmFja2xpZ2h0X2RldmljZSk7CisJCXJldHVybiByYzsKIAl9CiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19CUkdIVCwKIAkJCSJicmlnaHRuZXNzIGlzIHN1cHBvcnRlZFxuIik7CkBAIC03NDk5LDYgKzc3MDYsMjEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIEhLRVkgZXZlbnQgY2FsbG91dCBmb3Igb3RoZXIgc3ViZHJpdmVycyBnbyBoZXJlCisgKiAoeWVzLCBpdCBpcyB1Z2x5LCBidXQgaXQgaXMgcXVpY2ssIHNhZmUsIGFuZCBnZXRzIHRoZSBqb2IgZG9uZQorICovCitzdGF0aWMgdm9pZCB0cGFjcGlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBoa2V5X2V2ZW50KQoreworfQorCisKKworc3RhdGljIHZvaWQgaG90a2V5X2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgc2NhbmNvZGUpCit7CisJdHBhY3BpX2RyaXZlcl9ldmVudChUUF9IS0VZX0VWX0hPVEtFWV9CQVNFICsgc2NhbmNvZGUpOworfQorCiAvKiBzeXNmcyBuYW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBzc2l6ZV90IHRoaW5rcGFkX2FjcGlfcGRldl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IGMwN2ZkYjkuLjgzYjhiNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAlhY3BpX2hhbmRsZSB0ZW1wID0gTlVMTDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IHBucF9kZXYgKmRldjsKKwlzdHJ1Y3QgYWNwaV9oYXJkd2FyZV9pZCAqaWQ7CiAKIAkvKgogCSAqIElmIGEgUG5QYWNwaSBkZXZpY2UgaXMgbm90IHByZXNlbnQgLCB0aGUgZGV2aWNlCkBAIC0xOTMsMTUgKzE5NCwxMiBAQAogCWlmIChkZXYtPmNhcGFiaWxpdGllcyAmIFBOUF9DT05GSUdVUkFCTEUpCiAJCXBucGFjcGlfcGFyc2VfcmVzb3VyY2Vfb3B0aW9uX2RhdGEoZGV2KTsKIAotCWlmIChkZXZpY2UtPmZsYWdzLmNvbXBhdGlibGVfaWRzKSB7Ci0JCXN0cnVjdCBhY3BpY2FfZGV2aWNlX2lkX2xpc3QgKmNpZF9saXN0ID0gZGV2aWNlLT5wbnAuY2lkX2xpc3Q7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjaWRfbGlzdC0+Y291bnQ7IGkrKykgewotCQkJaWYgKCFpc3BucGlkYWNwaShjaWRfbGlzdC0+aWRzW2ldLnN0cmluZykpCi0JCQkJY29udGludWU7Ci0JCQlwbnBfYWRkX2lkKGRldiwgY2lkX2xpc3QtPmlkc1tpXS5zdHJpbmcpOwotCQl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpZCwgJmRldmljZS0+cG5wLmlkcywgbGlzdCkgeworCQlpZiAoIXN0cmNtcChpZC0+aWQsIGFjcGlfZGV2aWNlX2hpZChkZXZpY2UpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzcG5waWRhY3BpKGlkLT5pZCkpCisJCQljb250aW51ZTsKKwkJcG5wX2FkZF9pZChkZXYsIGlkLT5pZCk7CiAJfQogCiAJLyogY2xlYXIgb3V0IHRoZSBkYW1hZ2VkIGZsYWdzICovCkBAIC0yMzIsOSArMjMwLDggQEAKIAlzdHJ1Y3QgcG5wX2RldiAqcG5wID0gX3BucDsKIAogCS8qIHRydWUgbWVhbnMgaXQgbWF0Y2hlZCAqLwotCXJldHVybiBhY3BpLT5mbGFncy5oYXJkd2FyZV9pZAotCSAgICAmJiAhYWNwaV9nZXRfcGh5c2ljYWxfZGV2aWNlKGFjcGktPmhhbmRsZSkKLQkgICAgJiYgY29tcGFyZV9wbnBfaWQocG5wLT5pZCwgYWNwaS0+cG5wLmhhcmR3YXJlX2lkKTsKKwlyZXR1cm4gIWFjcGlfZ2V0X3BoeXNpY2FsX2RldmljZShhY3BpLT5oYW5kbGUpCisJICAgICYmIGNvbXBhcmVfcG5wX2lkKHBucC0+aWQsIGFjcGlfZGV2aWNlX2hpZChhY3BpKSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG5wX2ZpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgYWNwaV9oYW5kbGUgKiBoYW5kbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggMzVhMGIxOS4uMmQ0MTRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMjcxLDYgKzI3MSw3IEBACiB7CiAJc3RydWN0IHBwc19kZXZpY2UgKnBwczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjYXB0dXJlZCA9IDA7CiAKIAlpZiAoKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwcHM6IHVua25vd24gZXZlbnQgKCV4KSBmb3Igc291cmNlICVkXG4iLApAQCAtMjkzLDcgKzI5NCw4IEBACiAKIAkvKiBDaGVjayB0aGUgZXZlbnQgKi8KIAlwcHMtPmN1cnJlbnRfbW9kZSA9IHBwcy0+cGFyYW1zLm1vZGU7Ci0JaWYgKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVBU1NFUlQpICYKKwkJCShwcHMtPnBhcmFtcy5tb2RlICYgUFBTX0NBUFRVUkVBU1NFUlQpKSB7CiAJCS8qIFdlIGhhdmUgdG8gYWRkIGFuIG9mZnNldD8gKi8KIAkJaWYgKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfT0ZGU0VUQVNTRVJUKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5hc3NlcnRfb2ZmX3R1KTsKQEAgLTMwMyw4ICszMDUsMTEgQEAKIAkJcHBzLT5hc3NlcnRfc2VxdWVuY2UrKzsKIAkJcHJfZGVidWcoImNhcHR1cmUgYXNzZXJ0IHNlcSAjJXUgZm9yIHNvdXJjZSAlZFxuIiwKIAkJCXBwcy0+YXNzZXJ0X3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQotCWlmIChldmVudCAmIFBQU19DQVBUVVJFQ0xFQVIpIHsKKwlpZiAoKGV2ZW50ICYgUFBTX0NBUFRVUkVDTEVBUikgJgorCQkJKHBwcy0+cGFyYW1zLm1vZGUgJiBQUFNfQ0FQVFVSRUNMRUFSKSkgewogCQkvKiBXZSBoYXZlIHRvIGFkZCBhbiBvZmZzZXQ/ICovCiAJCWlmIChwcHMtPnBhcmFtcy5tb2RlICYgUFBTX09GRlNFVENMRUFSKQogCQkJcHBzX2FkZF9vZmZzZXQodHMsICZwcHMtPnBhcmFtcy5jbGVhcl9vZmZfdHUpOwpAQCAtMzE0LDEyICszMTksMTcgQEAKIAkJcHBzLT5jbGVhcl9zZXF1ZW5jZSsrOwogCQlwcl9kZWJ1ZygiY2FwdHVyZSBjbGVhciBzZXEgIyV1IGZvciBzb3VyY2UgJWRcbiIsCiAJCQlwcHMtPmNsZWFyX3NlcXVlbmNlLCBzb3VyY2UpOworCisJCWNhcHR1cmVkID0gfjA7CiAJfQogCi0JcHBzLT5nbyA9IH4wOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHBzLT5xdWV1ZSk7CisJLyogV2FrZSB1cCBpaWYgY2FwdHVyZWQgc29tdGhpbmcgKi8KKwlpZiAoY2FwdHVyZWQpIHsKKwkJcHBzLT5nbyA9IH4wOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnBwcy0+cXVldWUpOwogCi0Ja2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwkJa2lsbF9mYXN5bmMoJnBwcy0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcHMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvcHBzLmMgYi9kcml2ZXJzL3Bwcy9wcHMuYwppbmRleCBmZWExN2U3Li5jYTUxODNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9wcHMuYworKysgYi9kcml2ZXJzL3Bwcy9wcHMuYwpAQCAtNzEsOSArNzEsMTQgQEAKIAljYXNlIFBQU19HRVRQQVJBTVM6CiAJCXByX2RlYnVnKCJQUFNfR0VUUEFSQU1TOiBzb3VyY2UgJWRcbiIsIHBwcy0+aWQpOwogCi0JCS8qIFJldHVybiBjdXJyZW50IHBhcmFtZXRlcnMgKi8KLQkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwcHMtPnBhcmFtcywKLQkJCQkJCXNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKKwkJc3Bpbl9sb2NrX2lycSgmcHBzLT5sb2NrKTsKKworCQkvKiBHZXQgdGhlIGN1cnJlbnQgcGFyYW1ldGVycyAqLworCQlwYXJhbXMgPSBwcHMtPnBhcmFtczsKKworCQlzcGluX3VubG9ja19pcnEoJnBwcy0+bG9jayk7CisKKwkJZXJyID0gY29weV90b191c2VyKHVhcmcsICZwYXJhbXMsIHNpemVvZihzdHJ1Y3QgcHBzX2twYXJhbXMpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiAtRUZBVUxUOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggNzQ0ZWExZC4uZWZlNTY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMTI4Myw3ICsxMjgzLDggQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBhcmUgd2UgdGhlIGxhc3QgdXNlciBhbmQgcGVybWl0dGVkIHRvIGRpc2FibGUgPyAqLwotCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikgeworCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJgorCSAgICAocmRldi0+Y29uc3RyYWludHMgJiYgIXJkZXYtPmNvbnN0cmFpbnRzLT5hbHdheXNfb24pKSB7CiAKIAkJLyogd2UgYXJlIGxhc3QgdXNlciAqLwogCQlpZiAoX3JlZ3VsYXRvcl9jYW5fY2hhbmdlX3N0YXR1cyhyZGV2KSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKaW5kZXggZjhiMjk1Ny4uZjlmNTE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCkBAIC0xOTYsMTEgKzE5NiwxMCBAQAogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGRydmRhdGEtPmRldik7Ci0Ja2ZyZWUoZHJ2ZGF0YS0+ZGVzYy5uYW1lKTsKLQlrZnJlZShkcnZkYXRhKTsKLQogCWlmIChncGlvX2lzX3ZhbGlkKGRydmRhdGEtPmdwaW8pKQogCQlncGlvX2ZyZWUoZHJ2ZGF0YS0+Z3Bpbyk7CisJa2ZyZWUoZHJ2ZGF0YS0+ZGVzYy5uYW1lKTsKKwlrZnJlZShkcnZkYXRhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCmluZGV4IGJiNjFhZWQuLjkwMmRiNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKQEAgLTE3NSwxOCArMTc1LDE4IEBACiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gbGRvLT53bTgzMXg7CiAJaW50IGN0cmxfcmVnID0gbGRvLT5iYXNlICsgV004MzFYX0xET19DT05UUk9MOwogCWludCBvbl9yZWcgPSBsZG8tPmJhc2UgKyBXTTgzMVhfTERPX09OX0NPTlRST0w7Ci0JdW5zaWduZWQgaW50IHJldDsKKwlpbnQgcmV0OwogCiAJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgb25fcmVnKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlpZiAoIShyZXQgJiBXTTgzMVhfTERPMV9PTl9NT0RFKSkKIAkJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIGN0cmxfcmVnKTsKIAlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiByZXQ7CiAKIAlpZiAocmV0ICYgV004MzFYX0xETzFfTFBfTU9ERSkKIAkJcmV0dXJuIFJFR1VMQVRPUl9NT0RFX1NUQU5EQlk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDRjZGIzMWEuLmEwYzgxNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAqLwogCiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKIGludCBydGNfcmVhZF90aW1lKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZSAqdG0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKaW5kZXggN2ZlMWZhMi4uMDNlYTUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwpAQCAtNTgsNyArNTgsMTYgQEAKIAljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CiAJLyogQWNrIElSUSAqLwogCXdyaXRlbCgxLCBydGFwLT52aXJ0YmFzZSArIENPSDkwMTMzMV9JUlFfRVZFTlQpOworCS8qCisJICogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCisJICogdGhlIFJUQyBsaXZlcyBvbiBhIGxvd2VyLWNsb2NrZWQgbGluZSBhbmQgd2lsbAorCSAqIG5vdCByZWxlYXNlIHRoZSBJUlEgbGluZSB1bnRpbCBhZnRlciBhIGZldyAoc2xvd2VyKQorCSAqIGNsb2NrIGN5Y2xlcy4gVGhlIGludGVycnVwdCB3aWxsIGJlIHJlLWVuYWJsZWQgd2hlbgorCSAqIGEgbmV3IGFsYXJtIGlzIHNldCBhbnl3YXkuCisJICovCisJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKIAljbGtfZGlzYWJsZShydGFwLT5jbGspOworCiAJLyogU2V0IGFsYXJtIGZsYWcgKi8KIAlydGNfdXBkYXRlX2lycShydGFwLT5ydGMsIDEsIFJUQ19BRik7CiAKQEAgLTEyOCw2ICsxMzcsOCBAQAogCWVsc2UKIAkJd3JpdGVsKDAsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKIAljbGtfZGlzYWJsZShydGFwLT5jbGspOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBjb2g5MDEzMzFfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDhhMTFkZTkuLjYyMjI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRjLWNvcmUuaCIKIAogc3RhdGljIGRldl90IHJ0Y19kZXZ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjUwNjMzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYwppbmRleCBmNGRkODdlLi4zM2ExMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmNTA2MzMuYwpAQCAtNzAsNyArNzAsNyBAQAogCXJ0Yy0+dG1faG91ciA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX0hPVVJdKTsKIAlydGMtPnRtX3dkYXkgPSBiY2QyYmluKHBjZi0+dGltZVtQQ0Y1MDYzM19USV9XS0RBWV0pOwogCXJ0Yy0+dG1fbWRheSA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX0RBWV0pOwotCXJ0Yy0+dG1fbW9uID0gYmNkMmJpbihwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdKTsKKwlydGMtPnRtX21vbiA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX01PTlRIXSkgLSAxOwogCXJ0Yy0+dG1feWVhciA9IGJjZDJiaW4ocGNmLT50aW1lW1BDRjUwNjMzX1RJX1lFQVJdKSArIDEwMDsKIH0KIApAQCAtODEsNyArODEsNyBAQAogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9IT1VSXSA9IGJpbjJiY2QocnRjLT50bV9ob3VyKTsKIAlwY2YtPnRpbWVbUENGNTA2MzNfVElfV0tEQVldID0gYmluMmJjZChydGMtPnRtX3dkYXkpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9EQVldID0gYmluMmJjZChydGMtPnRtX21kYXkpOwotCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9NT05USF0gPSBiaW4yYmNkKHJ0Yy0+dG1fbW9uKTsKKwlwY2YtPnRpbWVbUENGNTA2MzNfVElfTU9OVEhdID0gYmluMmJjZChydGMtPnRtX21vbiArIDEpOwogCXBjZi0+dGltZVtQQ0Y1MDYzM19USV9ZRUFSXSA9IGJpbjJiY2QocnRjLT50bV95ZWFyICUgMTAwKTsKIH0KIApAQCAtMjQ1LDggKzI0NSw5IEBACiAJcmV0ID0gcGNmNTA2MzNfd3JpdGVfYmxvY2socnRjLT5wY2YsIFBDRjUwNjMzX1JFR19SVENTQ0EsCiAJCQkJUENGNTA2MzNfVElfRVhURU5ULCAmcGNmX3RtLnRpbWVbMF0pOwogCi0JaWYgKCFhbGFybV9tYXNrZWQpCisJaWYgKCFhbGFybV9tYXNrZWQgfHwgYWxybS0+ZW5hYmxlZCkKIAkJcGNmNTA2MzNfaXJxX3VubWFzayhydGMtPnBjZiwgUENGNTA2MzNfSVJRX0FMQVJNKTsKKwlydGMtPmFsYXJtX2VuYWJsZWQgPSBhbHJtLT5lbmFibGVkOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1weGEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1weGEuYwppbmRleCBiYjhjYzA1Li43NDdjYTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcHhhLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXB4YS5jCkBAIC00MzgsMzQgKzQzOCwzNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YV9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YV9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YV9ydGMgKnB4YV9ydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQllbmFibGVfaXJxX3dha2UocHhhX3J0Yy0+aXJxX0Fscm0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHB4YV9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX3J0YyAqcHhhX3J0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBweGFfcnRjICpweGFfcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWRpc2FibGVfaXJxX3dha2UocHhhX3J0Yy0+aXJxX0Fscm0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhX3J0Y19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgcHhhX3J0Y19yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgcHhhX3J0Y19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGFfcnRjX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhX3J0Y19kcml2ZXIgPSB7CiAJLnJlbW92ZQkJPSBfX2V4aXRfcChweGFfcnRjX3JlbW92ZSksCi0JLnN1c3BlbmQJPSBweGFfcnRjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFfcnRjX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJCT0gInB4YS1ydGMiLAorCQkubmFtZQk9ICJweGEtcnRjIiwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YV9ydGNfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCAwMjFiMjkyLi4yOWY5OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zOTMsMzEgKzM5MywzNCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNhMTEwMF9ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9ydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQllbmFibGVfaXJxX3dha2UoSVJRX1JUQ0Fscm0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNhMTEwMF9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCiAJCWRpc2FibGVfaXJxX3dha2UoSVJRX1JUQ0Fscm0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgc2ExMTAwX3J0Y19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgc2ExMTAwX3J0Y19yZXN1bWUJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2ExMTAwX3J0Y19wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzYTExMDBfcnRjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzYTExMDBfcnRjX3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMTAwX3J0Y19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzYTExMDBfcnRjX3JlbW92ZSwKLQkuc3VzcGVuZAk9IHNhMTEwMF9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNhMTEwMF9ydGNfcmVzdW1lLAogCS5kcml2ZXIJCT0gewotCQkubmFtZQkJPSAic2ExMTAwLXJ0YyIsCisJCS5uYW1lCT0gInNhMTEwMC1ydGMiLAorI2lmZGVmIENPTkZJR19QTQorCQkucG0JPSAmc2ExMTAwX3J0Y19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwppbmRleCBhZDE2NDA1Li40MjNjZDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYwpAQCAtOTYsNyArOTYsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKIHsKLQlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7CisJcmV0dXJuICEhKHJlYWRsKGNoaXAtPmlvYWRkcmVzcykgJiAoMSA8PCBjaGlwLT5sZWZ0c2hpZnQpKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2MzAyMF9jaGlwX29wcyB2MzAyMF9tbWlvX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCAyYzgzOWQwLi5mYWRkZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yMDksMTkgKzIwOSwxOCBAQAogCiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaXJxX3NldF9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGZyZXEpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKKwl1NjQgY291bnQ7CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoZnJlcSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWNvdW50ID0gUlRDX0ZSRVFVRU5DWTsKIAlkb19kaXYoY291bnQsIGZyZXEpOwogCi0JcGVyaW9kaWNfY291bnQgPSBjb3VudDsKLQogCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKIAotCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBjb3VudCk7Ci0JcnRjMV93cml0ZShSVENMMUhSRUcsIGNvdW50ID4+IDE2KTsKKwlwZXJpb2RpY19jb3VudCA9IGNvdW50OworCXJ0YzFfd3JpdGUoUlRDTDFMUkVHLCBwZXJpb2RpY19jb3VudCk7CisJcnRjMV93cml0ZShSVENMMUhSRUcsIHBlcmlvZGljX2NvdW50ID4+IDE2KTsKIAogCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCBkYWQwNDQ5Li5hYWNjYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTI1MDgsOCArMjUwOCw2IEBACiAJZGV2aWNlLT5zdG9wcGVkICY9IH5EQVNEX1VOUkVTVU1FRF9QTTsKIAogCWRhc2Rfc2NoZWR1bGVfZGV2aWNlX2JoKGRldmljZSk7Ci0JaWYgKGRldmljZS0+YmxvY2spCi0JCWRhc2Rfc2NoZWR1bGVfYmxvY2tfYmgoZGV2aWNlLT5ibG9jayk7CiAKIAlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5yZXN0b3JlKQogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+cmVzdG9yZShkZXZpY2UpOwpAQCAtMjUyMCw2ICsyNTE4LDkgQEAKIAkJICovCiAJCWRldmljZS0+c3RvcHBlZCB8PSBEQVNEX1VOUkVTVU1FRF9QTTsKIAorCWlmIChkZXZpY2UtPmJsb2NrKQorCQlkYXNkX3NjaGVkdWxlX2Jsb2NrX2JoKGRldmljZS0+YmxvY2spOworCiAJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTMyLDYgKzI1MzMsNyBAQAogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKIAlzdHJ1Y3QgY2N3MSAqY2N3OworCXVuc2lnbmVkIGxvbmcgKmlkYXc7CiAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIApAQCAtMjU0NSw5ICsyNTQ3LDE3IEBACiAKIAljY3cgPSBjcXItPmNwYWRkcjsKIAljY3ctPmNtZF9jb2RlID0gQ0NXX0NNRF9SREM7Ci0JY2N3LT5jZGEgPSAoX191MzIpKGFkZHJfdClyZGNfYnVmZmVyOwotCWNjdy0+Y291bnQgPSByZGNfYnVmZmVyX3NpemU7CisJaWYgKGlkYWxfaXNfbmVlZGVkKHJkY19idWZmZXIsIHJkY19idWZmZXJfc2l6ZSkpIHsKKwkJaWRhdyA9ICh1bnNpZ25lZCBsb25nICopIChjcXItPmRhdGEpOworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSBpZGF3OworCQljY3ctPmZsYWdzID0gQ0NXX0ZMQUdfSURBOworCQlpZGF3ID0gaWRhbF9jcmVhdGVfd29yZHMoaWRhdywgcmRjX2J1ZmZlciwgcmRjX2J1ZmZlcl9zaXplKTsKKwl9IGVsc2UgeworCQljY3ctPmNkYSA9IChfX3UzMikoYWRkcl90KSByZGNfYnVmZmVyOworCQljY3ctPmZsYWdzID0gMDsKKwl9CiAKKwljY3ctPmNvdW50ID0gcmRjX2J1ZmZlcl9zaXplOwogCWNxci0+c3RhcnRkZXYgPSBkZXZpY2U7CiAJY3FyLT5tZW1kZXYgPSBkZXZpY2U7CiAJY3FyLT5leHBpcmVzID0gMTAqSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKaW5kZXggYWIzNTIxNy4uNDE3Yjk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwpAQCAtMjMzOCw2ICsyMzM4LDggQEAKIAkvKiBDYWxjdWxhdGUgbnVtYmVyIG9mIGJsb2Nrcy9yZWNvcmRzIHBlciB0cmFjay4gKi8KIAlibGtzaXplID0gYmxvY2stPmJwX2Jsb2NrOwogCWJsa19wZXJfdHJrID0gcmVjc19wZXJfdHJhY2soJnByaXZhdGUtPnJkY19kYXRhLCAwLCBibGtzaXplKTsKKwlpZiAoYmxrX3Blcl90cmsgPT0gMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJLyogQ2FsY3VsYXRlIHJlY29yZCBpZCBvZiBmaXJzdCBhbmQgbGFzdCBibG9jay4gKi8KIAlmaXJzdF9yZWMgPSBmaXJzdF90cmsgPSBibGtfcnFfcG9zKHJlcSkgPj4gYmxvY2stPnMyYl9zaGlmdDsKIAlmaXJzdF9vZmZzID0gc2VjdG9yX2RpdihmaXJzdF90cmssIGJsa19wZXJfdHJrKTsKQEAgLTMyMTEsOCArMzIxMywxMCBAQAogaW50IGRhc2RfZWNrZF9yZXN0b3JlX2RldmljZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKnByaXZhdGU7CisJc3RydWN0IGRhc2RfZWNrZF9jaGFyYWN0ZXJpc3RpY3MgdGVtcF9yZGNfZGF0YTsKIAlpbnQgaXNfa25vd24sIHJjOwogCXN0cnVjdCBkYXNkX3VpZCB0ZW1wX3VpZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCkBAIC0zMjI1LDcgKzMyMjksOCBAQAogCXJjID0gZGFzZF9lY2tkX2dlbmVyYXRlX3VpZChkZXZpY2UsICZwcml2YXRlLT51aWQpOwogCWRhc2RfZ2V0X3VpZChkZXZpY2UtPmNkZXYsICZ0ZW1wX3VpZCk7CiAJaWYgKG1lbWNtcCgmcHJpdmF0ZS0+dWlkLCAmdGVtcF91aWQsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKSAhPSAwKQotCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzIGNoYW5nZWRcbiIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBVSUQgb2YgdGhlIERBU0QgaGFzICIKKwkJCSJjaGFuZ2VkXG4iKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2VycjsKIAlkYXNkX3NldF91aWQoZGV2aWNlLT5jZGV2LCAmcHJpdmF0ZS0+dWlkKTsKQEAgLTMyNDUsMTUgKzMyNTAsMTcgQEAKIAlkYXNkX2Vja2RfcmVhZF9mZWF0dXJlcyhkZXZpY2UpOwogCiAJLyogUmVhZCBEZXZpY2UgQ2hhcmFjdGVyaXN0aWNzICovCi0JbWVtc2V0KCZwcml2YXRlLT5yZGNfZGF0YSwgMCwgc2l6ZW9mKHByaXZhdGUtPnJkY19kYXRhKSk7CiAJcmMgPSBkYXNkX2dlbmVyaWNfcmVhZF9kZXZfY2hhcnMoZGV2aWNlLCBEQVNEX0VDS0RfTUFHSUMsCi0JCQkJCSAmcHJpdmF0ZS0+cmRjX2RhdGEsIDY0KTsKKwkJCQkJICZ0ZW1wX3JkY19kYXRhLCA2NCk7CiAJaWYgKHJjKSB7CiAJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJCSAgIlJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBmYWlsZWQsIHJjPSVkIGZvciAiCiAJCQkgICJkZXZpY2U6ICVzIiwgcmMsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIG91dF9lcnI7CiAJfQorCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisJbWVtY3B5KCZwcml2YXRlLT5yZGNfZGF0YSwgJnRlbXBfcmRjX2RhdGEsIHNpemVvZih0ZW1wX3JkY19kYXRhKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOwogCiAJLyogYWRkIGRldmljZSB0byBhbGlhcyBtYW5hZ2VtZW50ICovCiAJZGFzZF9hbGlhc19hZGRfZGV2aWNlKGRldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9tb25yZWFkZXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCmluZGV4IDg5ZWNlMWMuLjY2ZTIxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbnJlYWRlci5jCkBAIC0zNTcsNiArMzU3LDcgQEAKIAlhdG9taWNfc2V0KCZtb25wcml2LT5tc2dsaW1fY291bnQsIDApOwogCW1vbnByaXYtPndyaXRlX2luZGV4ICA9IDA7CiAJbW9ucHJpdi0+cmVhZF9pbmRleCAgID0gMDsKKwlkZXZfc2V0X2RydmRhdGEobW9ucmVhZGVyX2RldmljZSwgTlVMTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTU9OX01TR0xJTTsgaSsrKQogCQlrZnJlZShtb25wcml2LT5tc2dfYXJyYXlbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCmluZGV4IGQ2YTAyMmYuLjYyZGRmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKQEAgLTEzNjEsMTEgKzEzNjEsMTMgQEAKIAogdm9pZCByYXczMjcwX3BtX3VuZnJlZXplKHN0cnVjdCByYXczMjcwX3ZpZXcgKnZpZXcpCiB7CisjaWZkZWYgQ09ORklHX1ROMzI3MF9DT05TT0xFCiAJc3RydWN0IHJhdzMyNzAgKnJwOwogCiAJcnAgPSB2aWV3LT5kZXY7CiAJaWYgKHJwICYmIHRlc3RfYml0KFJBVzMyNzBfRkxBR1NfRlJPWkVOLCAmcnAtPmZsYWdzKSkKIAkJY2N3X2RldmljZV9mb3JjZV9jb25zb2xlKCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHJhdzMyNzBfaWRbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfYXN5bmMuYwppbmRleCBkYWFlYzE4Li5iNDQ0NjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9hc3luYy5jCkBAIC0yNiw3ICsyNiw2IEBACiBzdGF0aWMgaW50IHNjbHBfYXN5bmNfc2VuZF93YWl0KGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpjYWxsaG9tZV9zeXNjdGxfaGVhZGVyOwogc3RhdGljIERFRklORV9TUElOTE9DSyhzY2xwX2FzeW5jX2xvY2spOwotc3RhdGljIGNoYXIgbm9kZW5hbWVbNjRdOwogI2RlZmluZSBTQ0xQX05PUk1BTF9XUklURQkweDAwCiAKIHN0cnVjdCBhc3luY19ldmJ1ZiB7CkBAIC01Miw5ICs1MSwxMCBAQAogc3RhdGljIGludCBjYWxsX2hvbWVfb25fcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKIHsKLQkJc3RybmNhdChkYXRhLCBub2RlbmFtZSwgc3RybGVuKG5vZGVuYW1lKSk7Ci0JCXNjbHBfYXN5bmNfc2VuZF93YWl0KGRhdGEpOwotCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJc3RybmNhdChkYXRhLCBpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUsCisJCXNpemVvZihpbml0X3V0c25hbWUoKS0+bm9kZW5hbWUpKTsKKwlzY2xwX2FzeW5jX3NlbmRfd2FpdChkYXRhKTsKKwlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY2FsbF9ob21lX3BhbmljX25iID0gewpAQCAtNjIsMjEgKzYyLDIwIEBACiAJLnByaW9yaXR5ID0gSU5UX01BWCwKIH07CiAKLXN0YXRpYyBpbnQgcHJvY19oYW5kbGVyX2NhbGxob21lKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBwcm9jX2hhbmRsZXJfY2FsbGhvbWUoc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiAJCQkJIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqY291bnQsCiAJCQkJIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgbGVuLCByYzsKLQljaGFyIGJ1ZlsyXTsKKwljaGFyIGJ1ZlszXTsKIAotCWlmICghKmNvdW50IHwgKCpwcG9zICYmICF3cml0ZSkpIHsKKwlpZiAoISpjb3VudCB8fCAoKnBwb3MgJiYgIXdyaXRlKSkgewogCQkqY291bnQgPSAwOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCF3cml0ZSkgewotCQlsZW4gPSAgc3ByaW50ZihidWYsICIlZFxuIiwgY2FsbGhvbWVfZW5hYmxlZCk7Ci0JCWJ1ZltsZW5dID0gJ1wwJzsKKwkJbGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkXG4iLCBjYWxsaG9tZV9lbmFibGVkKTsKIAkJcmMgPSBjb3B5X3RvX3VzZXIoYnVmZmVyLCBidWYsIHNpemVvZihidWYpKTsKIAkJaWYgKHJjICE9IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwMCw3ICs5OSw3IEBACiAJewogCQkucHJvY25hbWUJPSAiY2FsbGhvbWUiLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfaGFuZGxlcl9jYWxsaG9tZSwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfaGFuZGxlcl9jYWxsaG9tZSwKIAl9LAogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwpAQCAtMTcxLDM5ICsxNzAsMjkgQEAKIAlyYyA9IHNjbHBfcmVnaXN0ZXIoJnNjbHBfYXN5bmNfcmVnaXN0ZXIpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCWNhbGxob21lX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoa2Vybl9kaXJfdGFibGUpOwotCWlmICghY2FsbGhvbWVfc3lzY3RsX2hlYWRlcikgewotCQlyYyA9IC1FTk9NRU07CisJcmMgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIShzY2xwX2FzeW5jX3JlZ2lzdGVyLnNjbHBfcmVjZWl2ZV9tYXNrICYgRVZUWVBfQVNZTkNfTUFTSykpCiAJCWdvdG8gb3V0X3NjbHA7Ci0JfQotCWlmICghKHNjbHBfYXN5bmNfcmVnaXN0ZXIuc2NscF9yZWNlaXZlX21hc2sgJiBFVlRZUF9BU1lOQ19NQVNLKSkgewotCQlyYyA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dF9zY2xwOwotCX0KIAlyYyA9IC1FTk9NRU07CisJY2FsbGhvbWVfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuX2Rpcl90YWJsZSk7CisJaWYgKCFjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKQorCQlnb3RvIG91dF9zY2xwOwogCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2NscF9yZXEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcXVlc3QpCi0JCWdvdG8gb3V0X3N5czsKIAlzY2NiID0gKHN0cnVjdCBzY2xwX2FzeW5jX3NjY2IgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXNjY2IpCisJaWYgKCFyZXF1ZXN0IHx8ICFzY2NiKQogCQlnb3RvIG91dF9tZW07Ci0JcmMgPSAgYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAotCQkJCQkgICAgICZjYWxsX2hvbWVfcGFuaWNfbmIpOwotCWlmIChyYykKLQkJZ290byBvdXRfbWVtOwotCi0Jc3RybmNweShub2RlbmFtZSwgaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLCA2NCk7Ci0JcmV0dXJuIDA7Ci0KKwlyYyA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkJICAgICZjYWxsX2hvbWVfcGFuaWNfbmIpOworCWlmICghcmMpCisJCWdvdG8gb3V0Owogb3V0X21lbToKIAlrZnJlZShyZXF1ZXN0KTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHNjY2IpOwotb3V0X3N5czoKIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShjYWxsaG9tZV9zeXNjdGxfaGVhZGVyKTsKIG91dF9zY2xwOgogCXNjbHBfdW5yZWdpc3Rlcigmc2NscF9hc3luY19yZWdpc3Rlcik7CitvdXQ6CiAJcmV0dXJuIHJjOwotCiB9CiBtb2R1bGVfaW5pdChzY2xwX2FzeW5jX2luaXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jCmluZGV4IDg0YzE5MWMuLjA1OTA5YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfcXVpZXNjZS5jCkBAIC0yMCw5ICsyMCwxMiBAQAogCiAjaW5jbHVkZSAic2NscC5oIgogCitzdGF0aWMgdm9pZCAoKm9sZF9tYWNoaW5lX3Jlc3RhcnQpKGNoYXIgKik7CitzdGF0aWMgdm9pZCAoKm9sZF9tYWNoaW5lX2hhbHQpKHZvaWQpOworc3RhdGljIHZvaWQgKCpvbGRfbWFjaGluZV9wb3dlcl9vZmYpKHZvaWQpOworCiAvKiBTaHV0ZG93biBoYW5kbGVyLiBTaWduYWwgY29tcGxldGlvbiBvZiBzaHV0ZG93biBieSBsb2FkaW5nIHNwZWNpYWwgUFNXLiAqLwotc3RhdGljIHZvaWQKLWRvX21hY2hpbmVfcXVpZXNjZSh2b2lkKQorc3RhdGljIHZvaWQgZG9fbWFjaGluZV9xdWllc2NlKHZvaWQpCiB7CiAJcHN3X3QgcXVpZXNjZV9wc3c7CiAKQEAgLTMzLDIzICszNiw0OCBAQAogfQogCiAvKiBIYW5kbGVyIGZvciBxdWllc2NlIGV2ZW50LiBTdGFydCBzaHV0ZG93biBwcm9jZWR1cmUuICovCi1zdGF0aWMgdm9pZAotc2NscF9xdWllc2NlX2hhbmRsZXIoc3RydWN0IGV2YnVmX2hlYWRlciAqZXZidWYpCitzdGF0aWMgdm9pZCBzY2xwX3F1aWVzY2VfaGFuZGxlcihzdHJ1Y3QgZXZidWZfaGVhZGVyICpldmJ1ZikKIHsKLQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQgKikgZG9fbWFjaGluZV9xdWllc2NlOwotCV9tYWNoaW5lX2hhbHQgPSBkb19tYWNoaW5lX3F1aWVzY2U7Ci0JX21hY2hpbmVfcG93ZXJfb2ZmID0gZG9fbWFjaGluZV9xdWllc2NlOworCWlmIChfbWFjaGluZV9yZXN0YXJ0ICE9ICh2b2lkICopIGRvX21hY2hpbmVfcXVpZXNjZSkgeworCQlvbGRfbWFjaGluZV9yZXN0YXJ0ID0gX21hY2hpbmVfcmVzdGFydDsKKwkJb2xkX21hY2hpbmVfaGFsdCA9IF9tYWNoaW5lX2hhbHQ7CisJCW9sZF9tYWNoaW5lX3Bvd2VyX29mZiA9IF9tYWNoaW5lX3Bvd2VyX29mZjsKKwkJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkICopIGRvX21hY2hpbmVfcXVpZXNjZTsKKwkJX21hY2hpbmVfaGFsdCA9IGRvX21hY2hpbmVfcXVpZXNjZTsKKwkJX21hY2hpbmVfcG93ZXJfb2ZmID0gZG9fbWFjaGluZV9xdWllc2NlOworCX0KIAljdHJsX2FsdF9kZWwoKTsKIH0KIAorLyogVW5kbyBtYWNoaW5lIHJlc3RhcnQvaGFsdC9wb3dlcl9vZmYgbW9kaWZpY2F0aW9uIG9uIHJlc3VtZSAqLworc3RhdGljIHZvaWQgc2NscF9xdWllc2NlX3BtX2V2ZW50KHN0cnVjdCBzY2xwX3JlZ2lzdGVyICpyZWcsCisJCQkJICBlbnVtIHNjbHBfcG1fZXZlbnQgc2NscF9wbV9ldmVudCkKK3sKKwlzd2l0Y2ggKHNjbHBfcG1fZXZlbnQpIHsKKwljYXNlIFNDTFBfUE1fRVZFTlRfUkVTVE9SRToKKwkJaWYgKG9sZF9tYWNoaW5lX3Jlc3RhcnQpIHsKKwkJCV9tYWNoaW5lX3Jlc3RhcnQgPSBvbGRfbWFjaGluZV9yZXN0YXJ0OworCQkJX21hY2hpbmVfaGFsdCA9IG9sZF9tYWNoaW5lX2hhbHQ7CisJCQlfbWFjaGluZV9wb3dlcl9vZmYgPSBvbGRfbWFjaGluZV9wb3dlcl9vZmY7CisJCQlvbGRfbWFjaGluZV9yZXN0YXJ0ID0gTlVMTDsKKwkJCW9sZF9tYWNoaW5lX2hhbHQgPSBOVUxMOworCQkJb2xkX21hY2hpbmVfcG93ZXJfb2ZmID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFNDTFBfUE1fRVZFTlRfRlJFRVpFOgorCWNhc2UgU0NMUF9QTV9FVkVOVF9USEFXOgorCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NscF9yZWdpc3RlciBzY2xwX3F1aWVzY2VfZXZlbnQgPSB7CiAJLnJlY2VpdmVfbWFzayA9IEVWVFlQX1NJR1FVSUVTQ0VfTUFTSywKLQkucmVjZWl2ZXJfZm4gPSBzY2xwX3F1aWVzY2VfaGFuZGxlcgorCS5yZWNlaXZlcl9mbiA9IHNjbHBfcXVpZXNjZV9oYW5kbGVyLAorCS5wbV9ldmVudF9mbiA9IHNjbHBfcXVpZXNjZV9wbV9ldmVudAogfTsKIAogLyogSW5pdGlhbGl6ZSBxdWllc2NlIGRyaXZlci4gKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1zY2xwX3F1aWVzY2VfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2NscF9xdWllc2NlX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc2NscF9yZWdpc3Rlcigmc2NscF9xdWllc2NlX2V2ZW50KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfdnQyMjAuYwppbmRleCAxNzg3MjRmLi5iOWQyYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3Z0MjIwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF92dDIyMC5jCkBAIC03MDUsMjEgKzcwNSw2IEBACiB9CiBfX2luaXRjYWxsKHNjbHBfdnQyMjBfdHR5X2luaXQpOwogCi0jaWZkZWYgQ09ORklHX1NDTFBfVlQyMjBfQ09OU09MRQotCi1zdGF0aWMgdm9pZAotc2NscF92dDIyMF9jb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JX19zY2xwX3Z0MjIwX3dyaXRlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIGJ1ZiwgY291bnQsIDEsIDEsIDApOwotfQotCi1zdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKgotc2NscF92dDIyMF9jb25fZGV2aWNlKHN0cnVjdCBjb25zb2xlICpjLCBpbnQgKmluZGV4KQotewotCSppbmRleCA9IDA7Ci0JcmV0dXJuIHNjbHBfdnQyMjBfZHJpdmVyOwotfQotCiBzdGF0aWMgdm9pZCBfX3NjbHBfdnQyMjBfZmx1c2hfYnVmZmVyKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc3Niw2ICs3NjEsMjEgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU0NMUF9WVDIyMF9DT05TT0xFCisKK3N0YXRpYyB2b2lkCitzY2xwX3Z0MjIwX2Nvbl93cml0ZShzdHJ1Y3QgY29uc29sZSAqY29uLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlfX3NjbHBfdnQyMjBfd3JpdGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgYnVmLCBjb3VudCwgMSwgMSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqCitzY2xwX3Z0MjIwX2Nvbl9kZXZpY2Uoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpCit7CisJKmluZGV4ID0gMDsKKwlyZXR1cm4gc2NscF92dDIyMF9kcml2ZXI7Cit9CisKIHN0YXRpYyBpbnQKIHNjbHBfdnQyMjBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwppbmRleCA2NGY1N2VmLi4wYzA3MDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCkBAIC0xNjIsOSArMTYyLDEwIEBACiAJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwogCXdoaWxlICgKIAkJIWJsa19xdWV1ZV9wbHVnZ2VkKHF1ZXVlKSAmJgotCQkocmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpKSAmJgorCQlibGtfcGVla19yZXF1ZXN0KHF1ZXVlKSAmJgogCQlucl9xdWV1ZWQgPCBUQVBFQkxPQ0tfTUlOX1JFUVVFVUUKIAkpIHsKKwkJcmVxID0gYmxrX2ZldGNoX3JlcXVlc3QocXVldWUpOwogCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgewogCQkJREJGX0VWRU5UKDEsICJUQkxPQ0s6IFJlamVjdGluZyB3cml0ZSByZXF1ZXN0XG4iKTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZGV2aWNlLT5ibGtfZGF0YS5yZXF1ZXN0X3F1ZXVlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggNjU2NWYwMi4uN2VhYjlhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0yNjUsMTMgKzI2NSwxMSBAQAogc3RhdGljIHZvaWQgKgogY2lvX2lnbm9yZV9wcm9jX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqb2Zmc2V0KQogewotCXN0cnVjdCBjY3dkZXZfaXRlciAqaXRlcjsKKwlzdHJ1Y3QgY2N3ZGV2X2l0ZXIgKml0ZXIgPSBzLT5wcml2YXRlOwogCiAJaWYgKCpvZmZzZXQgPj0gKF9fTUFYX1NVQkNIQU5ORUwgKyAxKSAqIChfX01BWF9TU0lEICsgMSkpCiAJCXJldHVybiBOVUxMOwotCWl0ZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3ZGV2X2l0ZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWl0ZXIpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCW1lbXNldChpdGVyLCAwLCBzaXplb2YoKml0ZXIpKTsKIAlpdGVyLT5zc2lkID0gKm9mZnNldCAvIChfX01BWF9TVUJDSEFOTkVMICsgMSk7CiAJaXRlci0+ZGV2bm8gPSAqb2Zmc2V0ICUgKF9fTUFYX1NVQkNIQU5ORUwgKyAxKTsKIAlyZXR1cm4gaXRlcjsKQEAgLTI4MCw4ICsyNzgsNiBAQAogc3RhdGljIHZvaWQKIGNpb19pZ25vcmVfcHJvY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KQogewotCWlmICghSVNfRVJSKGl0KSkKLQkJa2ZyZWUoaXQpOwogfQogCiBzdGF0aWMgdm9pZCAqCkBAIC0zNzgsMTQgKzM3NCwxNSBAQAogc3RhdGljIGludAogY2lvX2lnbm9yZV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZjaW9faWdub3JlX3Byb2Nfc2VxX29wcyk7CisJcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmNpb19pZ25vcmVfcHJvY19zZXFfb3BzLAorCQkJCXNpemVvZihzdHJ1Y3QgY2N3ZGV2X2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2lvX2lnbm9yZV9wcm9jX2ZvcHMgPSB7CiAJLm9wZW4gICAgPSBjaW9faWdub3JlX3Byb2Nfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAogCS53cml0ZSAgID0gY2lvX2lnbm9yZV93cml0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCmluZGV4IDQwMDAyODMuLjhhYjUxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJY2hwLT5zdGF0ZSA9IDE7CiAJY2hwLT5kZXYucGFyZW50ID0gJmNoYW5uZWxfc3Vic3lzdGVtc1tjaHBpZC5jc3NpZF0tPmRldmljZTsKIAljaHAtPmRldi5yZWxlYXNlID0gY2hwX3JlbGVhc2U7Ci0JZGV2X3NldF9uYW1lKCZjaHAtPmRldiwgImNocCV4LiUwMngiLCBjaHBpZC5jc3NpZCwgY2hwaWQuaWQpOwogCiAJLyogT2J0YWluIGNoYW5uZWwgcGF0aCBkZXNjcmlwdGlvbiBhbmQgZmlsbCBpdCBpbi4gKi8KIAlyZXQgPSBjaHNjX2RldGVybWluZV9iYXNlX2NoYW5uZWxfcGF0aF9kZXNjKGNocGlkLCAmY2hwLT5kZXNjKTsKQEAgLTQxMSw2ICs0MTAsNyBAQAogCX0gZWxzZSB7CiAJCWNocC0+Y21nID0gLTE7CiAJfQorCWRldl9zZXRfbmFtZSgmY2hwLT5kZXYsICJjaHAleC4lMDJ4IiwgY2hwaWQuY3NzaWQsIGNocGlkLmlkKTsKIAogCS8qIG1ha2UgaXQga25vd24gdG8gdGhlIHN5c3RlbSAqLwogCXJldCA9IGRldmljZV9yZWdpc3RlcigmY2hwLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggZjc4MGJkZC4uMjQ5MGI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0xMjUwLDggKzEyNTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOwogCi0JY2RldiA9IHNjaF9nZXRfY2RldihzY2gpOwotCWlmIChjZGV2KSB7CisJaWYgKGNpb19pc19jb25zb2xlKHNjaC0+c2NoaWQpKSB7CiAJCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzY2gtPmRldi5rb2JqLAogCQkJCQkmaW9fc3ViY2hhbm5lbF9hdHRyX2dyb3VwKTsKIAkJaWYgKHJjKQpAQCAtMTI2MCwxMyArMTI1OSwxMyBAQAogCQkJCSAgICAgICIwLiV4LiUwNHggKHJjPSVkKVxuIiwKIAkJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLCByYyk7CiAJCS8qCi0JCSAqIFRoaXMgc3ViY2hhbm5lbCBhbHJlYWR5IGhhcyBhbiBhc3NvY2lhdGVkIGNjd19kZXZpY2UuCisJCSAqIFRoZSBjb25zb2xlIHN1YmNoYW5uZWwgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBjY3dfZGV2aWNlLgogCQkgKiBUaHJvdyB0aGUgZGVsYXllZCB1ZXZlbnQgZm9yIHRoZSBzdWJjaGFubmVsLCByZWdpc3RlcgotCQkgKiB0aGUgY2N3X2RldmljZSBhbmQgZXhpdC4gVGhpcyBoYXBwZW5zIGZvciBhbGwgZWFybHkKLQkJICogZGV2aWNlcywgZS5nLiB0aGUgY29uc29sZS4KKwkJICogdGhlIGNjd19kZXZpY2UgYW5kIGV4aXQuCiAJCSAqLwogCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQlrb2JqZWN0X3VldmVudCgmc2NoLT5kZXYua29iaiwgS09CSl9BREQpOworCQljZGV2ID0gc2NoX2dldF9jZGV2KHNjaCk7CiAJCWNkZXYtPmRldi5ncm91cHMgPSBjY3dkZXZfYXR0cl9ncm91cHM7CiAJCWRldmljZV9pbml0aWFsaXplKCZjZGV2LT5kZXYpOwogCQljY3dfZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwpAQCAtMTYwOSw3ICsxNjA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCit2b2lkIGNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlpZiAoIWNkZXYpCiAJCXJldHVybjsKQEAgLTE3MDUsNyArMTcwNCw3IEBACiAJCWNjd19kZXZpY2VfdHJpZ2dlcl9yZXByb2JlKGNkZXYpOwogCQlicmVhazsKIAljYXNlIERJU0M6Ci0JCWRldmljZV9zZXRfZGlzY29ubmVjdGVkKGNkZXYpOworCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggZWQzOWEyYy4uMjQ2YzY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC0xMjUsNiArMTI1LDcgQEAKIHZvaWQgY2N3X2RldmljZV90cmlnZ2VyX3JlcHJvYmUoc3RydWN0IGNjd19kZXZpY2UgKik7CiB2b2lkIGNjd19kZXZpY2Vfa2lsbF9pbyhzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGludCBjY3dfZGV2aWNlX25vdGlmeShzdHJ1Y3QgY2N3X2RldmljZSAqLCBpbnQpOwordm9pZCBjY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOwogdm9pZCBjY3dfZGV2aWNlX3NldF9ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKIAogLyogcWRpbyBuZWVkcyB0aGlzLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCBlNzI4Y2U0Li5iOTYxM2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMzg3LDE5ICszODcsMzUgQEAKIAogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gc3RhdGU7CiAKLQlpZiAoc3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSB7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgREVWX1NUQVRFX0JPWEVEOgogCQlDSU9fTVNHX0VWRU5UKDAsICJCb3hlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKIAkJaWYgKGNkZXYtPm9ubGluZSAmJiAhY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKIAkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKLQl9Ci0JaWYgKHN0YXRlID09IERFVl9TVEFURV9OT1RfT1BFUikgeworCQlicmVhazsKKwljYXNlIERFVl9TVEFURV9OT1RfT1BFUjoKIAkJQ0lPX01TR19FVkVOVCgwLCAiRGV2aWNlICUwNHggZ29uZSBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKIAkJaWYgKCFjY3dfZGV2aWNlX25vdGlmeShjZGV2LCBDSU9fR09ORSkpCiAJCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOworCQllbHNlCisJCQljY3dfZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoY2Rldik7CiAJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOgorCQlDSU9fTVNHX0VWRU5UKDAsICJEaXNjb25uZWN0ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAiCisJCQkgICAgICAiJTA0eFxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vLAorCQkJICAgICAgc2NoLT5zY2hpZC5zY2hfbm8pOworCQlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19OT19QQVRIKSkKKwkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJCWVsc2UKKwkJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkpIHsKQEAgLTY3MSw2ICs2ODcsMTAgQEAKIAkJY2N3X2RldmljZV9kb25lKGNkZXYsIERFVl9TVEFURV9OT1RfT1BFUik7CiAJCXJldHVybiAwOwogCX0KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSB7CisJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfQk9YRUQpOworCQlyZXR1cm4gMDsKKwl9CiAJaWYgKGNjd19kZXZpY2VfaXNfb3JwaGFuKGNkZXYpKSB7CiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfT0ZGTElORSk7CiAJCXJldHVybiAwOwpAQCAtNzMwLDExICs3NTAsMTAgQEAKIHN0YXRpYyB2b2lkIGNjd19kZXZpY2VfZ2VuZXJpY19ub3RvcGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LAogCQkJCSAgICAgICBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQotCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7Ci0Jc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKLQljc3Nfc2NoZWR1bGVfZXZhbChzY2gtPnNjaGlkKTsKKwlpZiAoIWNjd19kZXZpY2Vfbm90aWZ5KGNkZXYsIENJT19HT05FKSkKKwkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKKwllbHNlCisJCWNjd19kZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChjZGV2KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggMWI3OGY2My4uNzY3Njk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCQkJICAgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKIAkub3BlbgkgPSBxc3RhdF9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fcGVyZi5jCmluZGV4IGVmZjk0MzkuLjk2OGUzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19wZXJmLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3BlcmYuYwpAQCAtODQsNyArODQsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBxZGlvX3BlcmZfcHJvY19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcWRpb19wZXJmX3Byb2NfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFkaW9fcGVyZl9wcm9jX2ZvcHMgPSB7CiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAogCS5vcGVuCSA9IHFkaW9fcGVyZl9zZXFfb3BlbiwKIAkucmVhZAkgPSBzZXFfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaXhjYy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKaW5kZXggYzIwZDQ3OS4uNTY3N2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogCQkuVG9DYXJkTGVuMQk9IHNpemVvZiAqbXNnIC0gc2l6ZW9mKG1zZy0+aGRyKSwKIAkJLkZyb21DYXJkTGVuMQk9IHNpemVvZiAqbXNnIC0gc2l6ZW9mKG1zZy0+aGRyKSwKIAl9OwotCXN0YXRpYyBzdHJ1Y3QgQ1BSQlggc3RhdGljX2NwcmJ4ID0geworCXN0YXRpYyBzdHJ1Y3QgQ1BSQlggbG9jYWxfY3ByYnggPSB7CiAJCS5jcHJiX2xlbgk9IDB4MDBkYywKIAkJLmNwcmJfdmVyX2lkCT0gMHgwMiwKIAkJLmZ1bmNfaWQJPSB7MHg1NCwgMHgzMn0sCkBAIC0zNzIsNyArMzcyLDcgQEAKIAogCW1zZy0+aGRyID0gc3RhdGljX3R5cGU2X2hkclg7CiAJbXNnLT5oZHIuRnJvbUNhcmRMZW4yID0gcmFuZG9tX251bWJlcl9sZW5ndGgsCi0JbXNnLT5jcHJieCA9IHN0YXRpY19jcHJieDsKKwltc2ctPmNwcmJ4ID0gbG9jYWxfY3ByYng7CiAJbXNnLT5jcHJieC5ycGxfZGF0YWwgPSByYW5kb21fbnVtYmVyX2xlbmd0aCwKIAltc2ctPmNwcmJ4LmRvbWFpbiA9IEFQX1FJRF9RVUVVRShhcF9kZXYtPnFpZCk7CiAJbWVtY3B5KG1zZy0+ZnVuY3Rpb25fY29kZSwgbXNnLT5oZHIuZnVuY3Rpb25fY29kZSwgMHgwMik7CkBAIC01NjEsNyArNTYxLDggQEAKIAkJaWYgKG1zZy0+Y3ByYnguY3ByYl92ZXJfaWQgPT0gMHgwMikKIAkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nl9pY2EoemRldiwgcmVwbHksCiAJCQkJCQkgIG91dHB1dGRhdGEsIG91dHB1dGRhdGFsZW5ndGgpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJemRldi0+b25saW5lID0gMDsKIAkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCkBAIC01ODcsNyArNTg4LDggQEAKIAkJfQogCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQogCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X3hjcmIoemRldiwgcmVwbHksIHhjUkIpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJeGNSQi0+c3RhdHVzID0gMHgwMDA4MDQ0REw7IC8qIEhERF9JbnZhbGlkUGFybSAqLwogCQl6ZGV2LT5vbmxpbmUgPSAwOwpAQCAtNjEwLDcgKzYxMiw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKG1zZy0+Y3ByYnguY3ByYl92ZXJfaWQgPT0gMHgwMikKIAkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nl9ybmcoemRldiwgcmVwbHksIGRhdGEpOwotCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJCS8qIEZhbGwgdGhyb3VnaCwgbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93bgorCQkgKiByZXNwb25zZSAqLwogCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KIAkJemRldi0+b25saW5lID0gMDsKIAkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggMTAyMDAwZC4uMzAxMjM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtMTU4LDcgKzE1OCwxMiBAQAogCQlzbXNnX3BhdGgtPmZsYWdzID0gMDsKIAkJcmMgPSBpdWN2X3BhdGhfY29ubmVjdChzbXNnX3BhdGgsICZzbXNnX2hhbmRsZXIsICIqTVNHICAgICIsCiAJCQkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlwcmludGsoS0VSTl9FUlIgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNpZmRlZiBDT05GSUdfUE1fREVCVUcKKwkJaWYgKHJjKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIml1Y3ZfcGF0aF9jb25uZWN0IHJldHVybmVkIHdpdGggcmMgJWlcbiIsIHJjKTsKKyNlbmRpZgorCQljcGNtZCgiU0VUIFNNU0cgSVVDViIsIE5VTEwsIDAsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCmluZGV4IDFiZTZiZjcuLjI4ODllNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYwpAQCAtODAsMjggKzgwLDM1IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCB6ZmNwX2luaXRfZGV2aWNlX2NvbmZpZ3VyZShjaGFyICpidXNpZCwgdTY0IHd3cG4sIHU2NCBsdW4pCiB7CisJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAotCW11dGV4X2xvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwotCXJlYWRfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7Ci0JYWRhcHRlciA9IHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoYnVzaWQpOwotCWlmIChhZGFwdGVyKQotCQl6ZmNwX2FkYXB0ZXJfZ2V0KGFkYXB0ZXIpOwotCXJlYWRfdW5sb2NrX2lycSgmemZjcF9kYXRhLmNvbmZpZ19sb2NrKTsKKwljY3dkZXYgPSBnZXRfY2N3ZGV2X2J5X2J1c2lkKCZ6ZmNwX2Njd19kcml2ZXIsIGJ1c2lkKTsKKwlpZiAoIWNjd2RldikKKwkJcmV0dXJuOwogCisJaWYgKGNjd19kZXZpY2Vfc2V0X29ubGluZShjY3dkZXYpKQorCQlnb3RvIG91dF9jY3dkZXY7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKwlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dkZXYtPmRldik7CiAJaWYgKCFhZGFwdGVyKQotCQlnb3RvIG91dF9hZGFwdGVyOwotCXBvcnQgPSB6ZmNwX3BvcnRfZW5xdWV1ZShhZGFwdGVyLCB3d3BuLCAwLCAwKTsKLQlpZiAoSVNfRVJSKHBvcnQpKQorCQlnb3RvIG91dF91bmxvY2s7CisJemZjcF9hZGFwdGVyX2dldChhZGFwdGVyKTsKKworCXBvcnQgPSB6ZmNwX2dldF9wb3J0X2J5X3d3cG4oYWRhcHRlciwgd3dwbik7CisJaWYgKCFwb3J0KQogCQlnb3RvIG91dF9wb3J0OworCisJemZjcF9wb3J0X2dldChwb3J0KTsKIAl1bml0ID0gemZjcF91bml0X2VucXVldWUocG9ydCwgbHVuKTsKIAlpZiAoSVNfRVJSKHVuaXQpKQogCQlnb3RvIG91dF91bml0OwogCW11dGV4X3VubG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7Ci0JY2N3X2RldmljZV9zZXRfb25saW5lKGFkYXB0ZXItPmNjd19kZXZpY2UpOwogCisJemZjcF9lcnBfdW5pdF9yZW9wZW4odW5pdCwgMCwgImF1aWRjXzEiLCBOVUxMKTsKIAl6ZmNwX2VycF93YWl0KGFkYXB0ZXIpOwogCWZsdXNoX3dvcmsoJnVuaXQtPnNjc2lfd29yayk7CiAKQEAgLTExMSwyMCArMTE4LDIzIEBACiAJemZjcF9wb3J0X3B1dChwb3J0KTsKIG91dF9wb3J0OgogCXpmY3BfYWRhcHRlcl9wdXQoYWRhcHRlcik7Ci1vdXRfYWRhcHRlcjoKK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKK291dF9jY3dkZXY6CisJcHV0X2RldmljZSgmY2N3ZGV2LT5kZXYpOwogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHpmY3BfaW5pdF9kZXZpY2Vfc2V0dXAoY2hhciAqZGV2c3RyKQogewogCWNoYXIgKnRva2VuOwotCWNoYXIgKnN0cjsKKwljaGFyICpzdHIsICpzdHJfc2F2ZWQ7CiAJY2hhciBidXNpZFtaRkNQX0JVU19JRF9TSVpFXTsKIAl1NjQgd3dwbiwgbHVuOwogCiAJLyogZHVwbGljYXRlIGRldnN0ciBhbmQga2VlcCB0aGUgb3JpZ2luYWwgZm9yIHN5c2ZzIHByZXNlbnRhdGlvbiovCi0Jc3RyID0ga21hbGxvYyhzdHJsZW4oZGV2c3RyKSArIDEsIEdGUF9LRVJORUwpOworCXN0cl9zYXZlZCA9IGttYWxsb2Moc3RybGVuKGRldnN0cikgKyAxLCBHRlBfS0VSTkVMKTsKKwlzdHIgPSBzdHJfc2F2ZWQ7CiAJaWYgKCFzdHIpCiAJCXJldHVybjsKIApAQCAtMTQzLDEyICsxNTMsMTIgQEAKIAlpZiAoIXRva2VuIHx8IHN0cmljdF9zdHJ0b3VsbCh0b2tlbiwgMCwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSAmbHVuKSkKIAkJZ290byBlcnJfb3V0OwogCi0Ja2ZyZWUoc3RyKTsKKwlrZnJlZShzdHJfc2F2ZWQpOwogCXpmY3BfaW5pdF9kZXZpY2VfY29uZmlndXJlKGJ1c2lkLCB3d3BuLCBsdW4pOwogCXJldHVybjsKIAotIGVycl9vdXQ6Ci0Ja2ZyZWUoc3RyKTsKK2Vycl9vdXQ6CisJa2ZyZWUoc3RyX3NhdmVkKTsKIAlwcl9lcnIoIiVzIGlzIG5vdCBhIHZhbGlkIFNDU0kgZGV2aWNlXG4iLCBkZXZzdHIpOwogfQogCkBAIC01OTMsMTAgKzYwMyw4IEBACiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CiAJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+c3RhdF93b3JrKTsKIAl6ZmNwX2ZjX3drYV9wb3J0c19mb3JjZV9vZmZsaW5lKGFkYXB0ZXItPmdzKTsKLQl6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LmtvYmosCiAJCQkgICAmemZjcF9zeXNmc19hZGFwdGVyX2F0dHJzKTsKIAlkZXZfc2V0X2RydmRhdGEoJmFkYXB0ZXItPmNjd19kZXZpY2UtPmRldiwgTlVMTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCAwYzkwZjhlLi5lMDgzMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTEwMiw2ICsxMDIsMTQgQEAKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwogCWlmICghYWRhcHRlcikKIAkJZ290byBvdXQ7CisJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNjYW5fd29yayk7CisKKwltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKKworCS8qIHRoaXMgYWxzbyByZW1vdmVzIHRoZSBzY3NpIGRldmljZXMsIHNvIGNhbGwgaXQgZmlyc3QgKi8KKwl6ZmNwX2FkYXB0ZXJfc2NzaV91bnJlZ2lzdGVyKGFkYXB0ZXIpOwogCiAJd3JpdGVfbG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcnQsIHAsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkgewpAQCAtMTE3LDExICsxMjUsOCBAQAogCXdyaXRlX3VubG9ja19pcnEoJnpmY3BfZGF0YS5jb25maWdfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9ydCwgcCwgJnBvcnRfcmVtb3ZlX2xoLCBsaXN0KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpIHsKLQkJCWlmICh1bml0LT5kZXZpY2UpCi0JCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHVuaXQtPmRldmljZSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bml0LCB1LCAmdW5pdF9yZW1vdmVfbGgsIGxpc3QpCiAJCQl6ZmNwX3VuaXRfZGVxdWV1ZSh1bml0KTsKLQkJfQogCQl6ZmNwX3BvcnRfZGVxdWV1ZShwb3J0KTsKIAl9CiAJd2FpdF9ldmVudChhZGFwdGVyLT5yZW1vdmVfd3EsIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZWZjb3VudCkgPT0gMCk7CkBAIC0xOTIsMTMgKzE5Nyw5IEBACiAKIAltdXRleF9sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIAlhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZjY3dfZGV2aWNlLT5kZXYpOwotCWlmICghYWRhcHRlcikKLQkJZ290byBvdXQ7Ci0KIAl6ZmNwX2VycF9hZGFwdGVyX3NodXRkb3duKGFkYXB0ZXIsIDAsICJjY3NvZmYxIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKIAltdXRleF91bmxvY2soJnpmY3BfZGF0YS5jb25maWdfbXV0ZXgpOwotb3V0OgogCXJldHVybiAwOwogfQogCkBAIC0yNTMsMTMgKzI1NCwxNyBAQAogCiAJbXV0ZXhfbG9jaygmemZjcF9kYXRhLmNvbmZpZ19tdXRleCk7CiAJYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YSgmY2Rldi0+ZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gb3V0OworCiAJemZjcF9lcnBfYWRhcHRlcl9zaHV0ZG93bihhZGFwdGVyLCAwLCAiY2NzaHV0MSIsIE5VTEwpOwogCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAJemZjcF9lcnBfdGhyZWFkX2tpbGwoYWRhcHRlcik7CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKIH0KIAotc3RhdGljIHN0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlciA9IHsKK3N0cnVjdCBjY3dfZHJpdmVyIHpmY3BfY2N3X2RyaXZlciA9IHsKIAkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgPSAiemZjcCIsCiAJLmlkcyAgICAgICAgID0gemZjcF9jY3dfZGV2aWNlX2lkLApAQCAtMjg0LDIwICsyODksMyBAQAogewogCXJldHVybiBjY3dfZHJpdmVyX3JlZ2lzdGVyKCZ6ZmNwX2Njd19kcml2ZXIpOwogfQotCi0vKioKLSAqIHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQgLSBmaW5kIHpmY3BfYWRhcHRlciBzdHJ1Y3QKLSAqIEBidXNpZDogYnVzIGlkIHN0cmluZyBvZiB6ZmNwIGFkYXB0ZXIgdG8gZmluZAotICovCi1zdHJ1Y3QgemZjcF9hZGFwdGVyICp6ZmNwX2dldF9hZGFwdGVyX2J5X2J1c2lkKGNoYXIgKmJ1c2lkKQotewotCXN0cnVjdCBjY3dfZGV2aWNlICpjY3dfZGV2aWNlOwotCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBOVUxMOwotCi0JY2N3X2RldmljZSA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOwotCWlmIChjY3dfZGV2aWNlKSB7Ci0JCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd19kZXZpY2UtPmRldik7Ci0JCXB1dF9kZXZpY2UoJmNjd19kZXZpY2UtPmRldik7Ci0JfQotCXJldHVybiBhZGFwdGVyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jZmRjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwppbmRleCA4MzA1Yzg3Li5lZjY4MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2NmZGMuYwpAQCAtODYsOCArODYsMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgemZjcF9hZGFwdGVyICp6ZmNwX2NmZGNfZ2V0X2FkYXB0ZXIodTMyIGRldm5vKQogewogCWNoYXIgYnVzaWRbOV07CisJc3RydWN0IGNjd19kZXZpY2UgKmNjd2RldjsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwogCXNucHJpbnRmKGJ1c2lkLCBzaXplb2YoYnVzaWQpLCAiMC4wLiUwNHgiLCBkZXZubyk7Ci0JcmV0dXJuIHpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoYnVzaWQpOworCWNjd2RldiA9IGdldF9jY3dkZXZfYnlfYnVzaWQoJnpmY3BfY2N3X2RyaXZlciwgYnVzaWQpOworCWlmICghY2N3ZGV2KQorCQlnb3RvIG91dDsKKworCWFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJmNjd2Rldi0+ZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCWdvdG8gb3V0X3B1dDsKKworCXpmY3BfYWRhcHRlcl9nZXQoYWRhcHRlcik7CitvdXRfcHV0OgorCXB1dF9kZXZpY2UoJmNjd2Rldi0+ZGV2KTsKK291dDoKKwlyZXR1cm4gYWRhcHRlcjsKIH0KIAogc3RhdGljIGludCB6ZmNwX2NmZGNfc2V0X2ZzZihzdHJ1Y3QgemZjcF9mc2ZfY2ZkYyAqZnNmX2NmZGMsIGludCBjb21tYW5kKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggNzNkMzY2Yi4uZjczZTIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC04NTgsMTAgKzg1OCw3IEBACiAJCWlmIChmY19ob3N0X3BvcnRfdHlwZShhZGFwdGVyLT5zY3NpX2hvc3QpID09IEZDX1BPUlRUWVBFX1BUUCkKIAkJCXJldHVybiB6ZmNwX2VycF9vcGVuX3B0cF9wb3J0KGFjdCk7CiAJCWlmICghcG9ydC0+ZF9pZCkgewotCQkJemZjcF9wb3J0X2dldChwb3J0KTsKLQkJCWlmICghcXVldWVfd29yayhhZGFwdGVyLT53b3JrX3F1ZXVlLAotCQkJCQkmcG9ydC0+Z2lkX3BuX3dvcmspKQotCQkJCXpmY3BfcG9ydF9wdXQocG9ydCk7CisJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKIAkJCXJldHVybiBaRkNQX0VSUF9FWElUOwogCQl9CiAJCXJldHVybiB6ZmNwX2VycF9wb3J0X3N0cmF0ZWd5X29wZW5fcG9ydChhY3QpOwpAQCAtODY5LDEyICs4NjYsMTEgQEAKIAljYXNlIFpGQ1BfRVJQX1NURVBfUE9SVF9PUEVOSU5HOgogCQkvKiBEX0lEIG1pZ2h0IGhhdmUgY2hhbmdlZCBkdXJpbmcgb3BlbiAqLwogCQlpZiAocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikgewotCQkJaWYgKHBvcnQtPmRfaWQpCi0JCQkJcmV0dXJuIFpGQ1BfRVJQX1NVQ0NFRURFRDsKLQkJCWVsc2UgewotCQkJCWFjdC0+c3RlcCA9IFpGQ1BfRVJQX1NURVBfUE9SVF9DTE9TSU5HOwotCQkJCXJldHVybiBaRkNQX0VSUF9DT05USU5VRVM7CisJCQlpZiAoIXBvcnQtPmRfaWQpIHsKKwkJCQl6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChwb3J0KTsKKwkJCQlyZXR1cm4gWkZDUF9FUlBfRVhJVDsKIAkJCX0KKwkJCXJldHVybiBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJCX0KIAkJaWYgKHBvcnQtPmRfaWQgJiYgIShwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9OT0VTQykpIHsKIAkJCXBvcnQtPmRfaWQgPSAwOwpAQCAtODg5LDE5ICs4ODUsMjEgQEAKIHN0YXRpYyBpbnQgemZjcF9lcnBfcG9ydF9zdHJhdGVneShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQgPSBlcnBfYWN0aW9uLT5wb3J0OworCWludCBwX3N0YXR1cyA9IGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpOwogCi0JaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX05PRVNDKQorCWlmICgocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fTk9FU0MpICYmCisJICAgICEocF9zdGF0dXMgJiBaRkNQX1NUQVRVU19DT01NT05fT1BFTikpCiAJCWdvdG8gY2xvc2VfaW5pdF9kb25lOwogCiAJc3dpdGNoIChlcnBfYWN0aW9uLT5zdGVwKSB7CiAJY2FzZSBaRkNQX0VSUF9TVEVQX1VOSU5JVElBTElaRUQ6CiAJCXpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xlYXJzdGF0aShwb3J0KTsKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIHpmY3BfZXJwX3BvcnRfc3RyYXRlZ3lfY2xvc2UoZXJwX2FjdGlvbik7CiAJCWJyZWFrOwogCiAJY2FzZSBaRkNQX0VSUF9TVEVQX1BPUlRfQ0xPU0lORzoKLQkJaWYgKGF0b21pY19yZWFkKCZwb3J0LT5zdGF0dXMpICYgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4pCisJCWlmIChwX3N0YXR1cyAmIFpGQ1BfU1RBVFVTX0NPTU1PTl9PUEVOKQogCQkJcmV0dXJuIFpGQ1BfRVJQX0ZBSUxFRDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKaW5kZXggMzY5MzViYy4uYjNmMjhkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCkBAIC0yOCw3ICsyOCw3IEBACiAvKiB6ZmNwX2Njdy5jICovCiBleHRlcm4gaW50IHpmY3BfY2N3X3JlZ2lzdGVyKHZvaWQpOwogZXh0ZXJuIGludCB6ZmNwX2Njd19wcml2X3NjaChzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotZXh0ZXJuIHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKnpmY3BfZ2V0X2FkYXB0ZXJfYnlfYnVzaWQoY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgY2N3X2RyaXZlciB6ZmNwX2Njd19kcml2ZXI7CiAKIC8qIHpmY3BfY2ZkYy5jICovCiBleHRlcm4gc3RydWN0IG1pc2NkZXZpY2UgemZjcF9jZmRjX21pc2M7CkBAIC05Niw2ICs5Niw3IEBACiBleHRlcm4gdm9pZCBfemZjcF9mY19zY2FuX3BvcnRzX2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIHpmY3BfZmNfaW5jb21pbmdfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3BvcnRfZGlkX2xvb2t1cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CitleHRlcm4gdm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19wbG9naV9ldmFsdWF0ZShzdHJ1Y3QgemZjcF9wb3J0ICosIHN0cnVjdCBmc2ZfcGxvZ2kgKik7CiBleHRlcm4gdm9pZCB6ZmNwX2ZjX3Rlc3RfbGluayhzdHJ1Y3QgemZjcF9wb3J0ICopOwogZXh0ZXJuIHZvaWQgemZjcF9mY19saW5rX3Rlc3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKaW5kZXggNzIyZjIyZC4uZGYyM2JjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYwpAQCAtMzYxLDYgKzM2MSwxNyBAQAogfQogCiAvKioKKyAqIHpmY3BfZmNfdHJpZ2dlcl9kaWRfbG9va3VwIC0gdHJpZ2dlciB0aGUgZF9pZCBsb29rdXAgdXNpbmcgYSBHSURfUE4gcmVxdWVzdAorICogQHBvcnQ6IFRoZSB6ZmNwX3BvcnQgdG8gbG9va3VwIHRoZSBkX2lkIGZvci4KKyAqLwordm9pZCB6ZmNwX2ZjX3RyaWdnZXJfZGlkX2xvb2t1cChzdHJ1Y3QgemZjcF9wb3J0ICpwb3J0KQoreworCXpmY3BfcG9ydF9nZXQocG9ydCk7CisJaWYgKCFxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPndvcmtfcXVldWUsICZwb3J0LT5naWRfcG5fd29yaykpCisJCXpmY3BfcG9ydF9wdXQocG9ydCk7Cit9CisKKy8qKgogICogemZjcF9mY19wbG9naV9ldmFsdWF0ZSAtIGV2YWx1YXRlIFBMT0dJIHBsYXlsb2FkCiAgKiBAcG9ydDogemZjcF9wb3J0IHN0cnVjdHVyZQogICogQHBsb2dpOiBwbG9naSBwYXlsb2FkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCBmMDljODYzLi40ZTQxYmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTEwNTgsMTQgKzEwNTgsMjggQEAKIAlieXRlcyA9IHpmY3BfcWRpb19zYmFsc19mcm9tX3NnKGFkYXB0ZXItPnFkaW8sICZyZXEtPnF1ZXVlX3JlcSwKIAkJCQkJU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELAogCQkJCQlzZ19yZXNwLCBtYXhfc2JhbHMpOworCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQucmVzcF9idWZfbGVuZ3RoID0gYnl0ZXM7CiAJaWYgKGJ5dGVzIDw9IDApCiAJCXJldHVybiAtRUlPOwogCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemZjcF9mc2Zfc2V0dXBfY3RfZWxzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcSwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19yZXEsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfcmVzcCwKKwkJCQkgaW50IG1heF9zYmFscykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgc2dfcmVxLCBzZ19yZXNwLCBtYXhfc2JhbHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKiBjb21tb24gc2V0dGluZ3MgZm9yIGN0L2dzIGFuZCBlbHMgcmVxdWVzdHMgKi8KLQlyZXEtPnF0Y2ItPmJvdHRvbS5zdXBwb3J0LnJlc3BfYnVmX2xlbmd0aCA9IGJ5dGVzOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuc2VydmljZV9jbGFzcyA9IEZTRl9DTEFTU18zOwogCXJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQudGltZW91dCA9IDIgKiBSX0FfVE9WOwotCXpmY3BfZnNmX3N0YXJ0X3RpbWVyKHJlcSwgMiAqIFJfQV9UT1YgKyAxMCk7CisJemZjcF9mc2Zfc3RhcnRfdGltZXIocmVxLCAoMiAqIFJfQV9UT1YgKyAxMCkgKiBIWik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOTQsOCArMTEwOCw4IEBACiAJfQogCiAJcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0NMRUFOVVA7Ci0JcmV0ID0gemZjcF9mc2Zfc2V0dXBfY3RfZWxzX3NiYWxzKHJlcSwgY3QtPnJlcSwgY3QtPnJlc3AsCi0JCQkJCSAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKKwlyZXQgPSB6ZmNwX2ZzZl9zZXR1cF9jdF9lbHMocmVxLCBjdC0+cmVxLCBjdC0+cmVzcCwKKwkJCQkgICAgRlNGX01BWF9TQkFMU19QRVJfUkVRKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9zZW5kOwogCkBAIC0xMTkyLDcgKzEyMDYsNyBAQAogCX0KIAogCXJlcS0+c3RhdHVzIHw9IFpGQ1BfU1RBVFVTX0ZTRlJFUV9DTEVBTlVQOwotCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2Vsc19zYmFscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIpOworCXJldCA9IHpmY3BfZnNmX3NldHVwX2N0X2VscyhyZXEsIGVscy0+cmVxLCBlbHMtPnJlc3AsIDIpOwogCiAJaWYgKHJldCkKIAkJZ290byBmYWlsZWRfc2VuZDsKQEAgLTE0NjEsOSArMTQ3NSwxNiBAQAogCQlwbG9naSA9IChzdHJ1Y3QgZnNmX3Bsb2dpICopIHJlcS0+cXRjYi0+Ym90dG9tLnN1cHBvcnQuZWxzOwogCQlpZiAocmVxLT5xdGNiLT5ib3R0b20uc3VwcG9ydC5lbHMxX2xlbmd0aCA+PQogCQkgICAgRlNGX1BMT0dJX01JTl9MRU4pIHsKLQkJCWlmIChwbG9naS0+c2Vydl9wYXJhbS53d3BuICE9IHBvcnQtPnd3cG4pCisJCQlpZiAocGxvZ2ktPnNlcnZfcGFyYW0ud3dwbiAhPSBwb3J0LT53d3BuKSB7CiAJCQkJcG9ydC0+ZF9pZCA9IDA7Ci0JCQllbHNlIHsKKwkJCQlkZXZfd2FybigmcG9ydC0+YWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LAorCQkJCQkgIkEgcG9ydCBvcGVuZWQgd2l0aCBXV1BOIDB4JTAxNkx4ICIKKwkJCQkJICJyZXR1cm5lZCBkYXRhIHRoYXQgaWRlbnRpZmllcyBpdCBhcyAiCisJCQkJCSAiV1dQTiAweCUwMTZMeFxuIiwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHBvcnQtPnd3cG4sCisJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCQkgIHBsb2dpLT5zZXJ2X3BhcmFtLnd3cG4pOworCQkJfSBlbHNlIHsKIAkJCQlwb3J0LT53d25uID0gcGxvZ2ktPnNlcnZfcGFyYW0ud3dubjsKIAkJCQl6ZmNwX2ZjX3Bsb2dpX2V2YWx1YXRlKHBvcnQsIHBsb2dpKTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc3lzZnMuYwppbmRleCAwNzlhOGNmLi5kMzEwMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zeXNmcy5jCkBAIC0yMjQsNiArMjI0LDcgQEAKIAogCXpmY3BfZXJwX3VuaXRfcmVvcGVuKHVuaXQsIDAsICJzeXVhc18xIiwgTlVMTCk7CiAJemZjcF9lcnBfd2FpdCh1bml0LT5wb3J0LT5hZGFwdGVyKTsKKwlmbHVzaF93b3JrKCZ1bml0LT5zY3NpX3dvcmspOwogCXpmY3BfdW5pdF9wdXQodW5pdCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ6ZmNwX2RhdGEuY29uZmlnX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggODJiYjNiMi4uZTExY2NhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTM2Niw2ICszNjYsNyBAQAogCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9jeGdiM2kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9zY3NpL2JueDJpL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnIgogCiBjb25maWcgU0dJV0Q5M19TQ1NJCiAJdHJpc3RhdGUgIlNHSSBXRDkzQzkzIFNDU0kgRHJpdmVyIgpAQCAtMTgyNyw2ICsxODI4LDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsaWJzcnAuCiAKK2NvbmZpZyBTQ1NJX0JGQV9GQworCXRyaXN0YXRlICJCcm9jYWRlIEJGQSBGaWJyZSBDaGFubmVsIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX0ZDX0FUVFJTCisJaGVscAorCSAgVGhpcyBiZmEgZHJpdmVyIHN1cHBvcnRzIGFsbCBCcm9jYWRlIFBDSWUgRkMvRkNPRSBob3N0IGFkYXB0ZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBiZmEuCisKIGVuZGlmICMgU0NTSV9MT1dMRVZFTAogCiBzb3VyY2UgImRyaXZlcnMvc2NzaS9wY21jaWEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQppbmRleCA2MWE5NGFmLi4zYWQ2MWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCkBAIC04Niw2ICs4Niw3IEBACiBvYmotJChDT05GSUdfU0NTSV9RTEFfRkMpCSs9IHFsYTJ4eHgvCiBvYmotJChDT05GSUdfU0NTSV9RTEFfSVNDU0kpCSs9IHFsYTR4eHgvCiBvYmotJChDT05GSUdfU0NTSV9MUEZDKQkJKz0gbHBmYy8KK29iai0kKENPTkZJR19TQ1NJX0JGQV9GQykJKz0gYmZhLwogb2JqLSQoQ09ORklHX1NDU0lfUEFTMTYpCSs9IHBhczE2Lm8KIG9iai0kKENPTkZJR19TQ1NJX1QxMjgpCQkrPSB0MTI4Lm8KIG9iai0kKENPTkZJR19TQ1NJX0RNWDMxOTFEKQkrPSBkbXgzMTkxZC5vCkBAIC0xMzAsNiArMTMxLDcgQEAKIG9iai0kKENPTkZJR19QUzNfUk9NKQkJKz0gcHMzcm9tLm8KIG9iai0kKENPTkZJR19TQ1NJX0NYR0IzX0lTQ1NJKQkrPSBsaWJpc2NzaS5vIGxpYmlzY3NpX3RjcC5vIGN4Z2IzaS8KIG9iai0kKENPTkZJR19TQ1NJX0JOWDJfSVNDU0kpCSs9IGxpYmlzY3NpLm8gYm54MmkvCitvYmotJChDT05GSUdfQkUySVNDU0kpCQkrPSBsaWJpc2NzaS5vIGJlMmlzY3NpLwogb2JqLSQoQ09ORklHX1NDU0lfUE1DUkFJRCkJKz0gcG1jcmFpZC5vCiAKIG9iai0kKENPTkZJR19BUk0pCQkrPSBhcm0vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NTJmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvS2NvbmZpZwpAQCAtMCwwICsxLDggQEAKK2NvbmZpZyBCRTJJU0NTSQorCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgaVNDU0kgLSBCbGFkZUVuZ2luZSAyIgorCWRlcGVuZHMgb24gUENJICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUworCisJaGVscAorCVRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlTQ1NJIGZ1bmN0aW9uYWxpdHkgZm9yIFNlcnZlckVuZ2luZXMnCisJMTBHYnBzIFN0b3JhZ2UgYWRhcHRlciAtIEJsYWRlRW5naW5lIDIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExZjQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMKKyMgTWFrZWZpbGUgdG8gYnVpbGQgdGhlIGlTQ1NJIGRyaXZlciBmb3IgU2VydmVyRW5naW5lJ3MgQmxhZGVFbmdpbmUuCisjCisjCisKK29iai0kKENPTkZJR19CRTJJU0NTSSkgKz0gYmUyaXNjc2kubworCitiZTJpc2NzaS15IDo9IGJlX2lzY3NpLm8gYmVfbWFpbi5vIGJlX21nbXQubyBiZV9jbWRzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MDIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZS5oCkBAIC0wLDAgKzEsMTgzIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgVGhlIGZ1bGwgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqLworCisjaWZuZGVmIEJFSVNDU0lfSAorI2RlZmluZSBCRUlTQ1NJX0gKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKworI2RlZmluZSBGV19WRVJfTEVOIDMyCisKK3N0cnVjdCBiZV9kbWFfbWVtIHsKKwl2b2lkICp2YTsKKwlkbWFfYWRkcl90IGRtYTsKKwl1MzIgc2l6ZTsKK307CisKK3N0cnVjdCBiZV9xdWV1ZV9pbmZvIHsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBkbWFfbWVtOworCXUxNiBsZW47CisJdTE2IGVudHJ5X3NpemU7CQkvKiBTaXplIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHF1ZXVlICovCisJdTE2IGlkOworCXUxNiB0YWlsLCBoZWFkOworCWJvb2wgY3JlYXRlZDsKKwlhdG9taWNfdCB1c2VkOwkJLyogTnVtYmVyIG9mIHZhbGlkIGVsZW1lbnRzIGluIHRoZSBxdWV1ZSAqLworfTsKKworc3RhdGljIGlubGluZSB1MzIgTU9EVUxPKHUxNiB2YWwsIHUxNiBsaW1pdCkKK3sKKwlXQVJOX09OKGxpbWl0ICYgKGxpbWl0IC0gMSkpOworCXJldHVybiB2YWwgJiAobGltaXQgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluZGV4X2luYyh1MTYgKmluZGV4LCB1MTYgbGltaXQpCit7CisJKmluZGV4ID0gTU9EVUxPKCgqaW5kZXggKyAxKSwgbGltaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX2hlYWRfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPmhlYWQgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnF1ZXVlX3RhaWxfbm9kZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSkKK3sKKwlyZXR1cm4gcS0+ZG1hX21lbS52YSArIHEtPnRhaWwgKiBxLT5lbnRyeV9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfaGVhZF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT5oZWFkLCBxLT5sZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfdGFpbF9pbmMoc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEpCit7CisJaW5kZXhfaW5jKCZxLT50YWlsLCBxLT5sZW4pOworfQorCisvKklTQ1NJICovCisKK3N0cnVjdCBiZV9lcV9vYmogeworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIHE7CisJY2hhciBkZXNjWzMyXTsKKworCS8qIEFkYXB0aXZlIGludGVycnVwdCBjb2FsZXNjaW5nIChBSUMpIGluZm8gKi8KKwlib29sIGVuYWJsZV9haWM7CisJdTE2IG1pbl9lcWQ7CQkvKiBpbiB1c2VjcyAqLworCXUxNiBtYXhfZXFkOwkJLyogaW4gdXNlY3MgKi8KKwl1MTYgY3VyX2VxZDsJCS8qIGluIHVzZWNzICovCit9OworCitzdHJ1Y3QgYmVfbWNjX29iaiB7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxOworfTsKKworc3RydWN0IGJlX2N0cmxfaW5mbyB7CisJdTggX19pb21lbSAqY3NyOworCXU4IF9faW9tZW0gKmRiOwkJLyogRG9vciBCZWxsICovCisJdTggX19pb21lbSAqcGNpY2ZnOwkvKiBQQ0kgY29uZmlnIHNwYWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwkvKiBNYm94IHVzZWQgZm9yIGNtZCByZXF1ZXN0L3Jlc3BvbnNlICovCisJc3BpbmxvY2tfdCBtYm94X2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtYm94IGNtZHMgdG8gQkUgY2FyZCAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtOworCS8qIE1ib3ggbWVtIGlzIGFkanVzdGVkIHRvIGFsaWduIHRvIDE2IGJ5dGVzLiBUaGUgYWxsb2NhdGVkIGFkZHIKKwkgKiBpcyBzdG9yZWQgZm9yIGZyZWVpbmcgcHVycG9zZSAqLworCXN0cnVjdCBiZV9kbWFfbWVtIG1ib3hfbWVtX2FsbG9jZWQ7CisKKwkvKiBNQ0MgUmluZ3MgKi8KKwlzdHJ1Y3QgYmVfbWNjX29iaiBtY2Nfb2JqOworCXNwaW5sb2NrX3QgbWNjX2xvY2s7CS8qIEZvciBzZXJpYWxpemluZyBtY2MgY21kcyB0byBCRSBjYXJkICovCisJc3BpbmxvY2tfdCBtY2NfY3FfbG9jazsKKworCS8qIE1DQyBBc3luYyBjYWxsYmFjayAqLworCXZvaWQgKCphc3luY19jYikgKHZvaWQgKmFkYXB0ZXIsIGJvb2wgbGlua191cCk7CisJdm9pZCAqYWRhcHRlcl9jdHh0OworfTsKKworI2luY2x1ZGUgImJlX2NtZHMuaCIKKworI2RlZmluZSBQQUdFX1NISUZUXzRLIDEyCisjZGVmaW5lIFBBR0VfU0laRV80SyAoMSA8PCBQQUdFX1NISUZUXzRLKQorCisvKiBSZXR1cm5zIG51bWJlciBvZiBwYWdlcyBzcGFubmVkIGJ5IHRoZSBkYXRhIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBhZGRyICovCisjZGVmaW5lIFBBR0VTXzRLX1NQQU5ORUQoX2FkZHJlc3MsIHNpemUpIAkJCQlcCisJCSgodTMyKSgoKChzaXplX3QpKF9hZGRyZXNzKSAmIChQQUdFX1NJWkVfNEsgLSAxKSkgKyAJXAorCQkJKHNpemUpICsgKFBBR0VfU0laRV80SyAtIDEpKSA+PiBQQUdFX1NISUZUXzRLKSkKKworLyogQnl0ZSBvZmZzZXQgaW50byB0aGUgcGFnZSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGFkZHJlc3MgKi8KKyNkZWZpbmUgT0ZGU0VUX0lOX1BBR0UoYWRkcikJCQkJCQlcCisJCSgoc2l6ZV90KShhZGRyKSAmIChQQUdFX1NJWkVfNEstMSkpCisKKy8qIFJldHVybnMgYml0IG9mZnNldCB3aXRoaW4gYSBEV09SRCBvZiBhIGJpdGZpZWxkICovCisjZGVmaW5lIEFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkgIAkJCQlcCisJCSgoKHNpemVfdCkmKCgoX3N0cnVjdCAqKTApLT5maWVsZCkpJTMyKQorCisvKiBSZXR1cm5zIHRoZSBiaXQgbWFzayBvZiB0aGUgZmllbGQgdGhhdCBpcyBOT1Qgc2hpZnRlZCBpbnRvIGxvY2F0aW9uLiAqLworc3RhdGljIGlubGluZSB1MzIgYW1hcF9tYXNrKHUzMiBiaXRzaXplKQoreworCXJldHVybiAoYml0c2l6ZSA9PSAzMiA/IDB4RkZGRkZGRkYgOiAoMSA8PCBiaXRzaXplKSAtIDEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYW1hcF9zZXQodm9pZCAqcHRyLCB1MzIgZHdfb2Zmc2V0LCB1MzIgbWFzaywKKwkJCQkJdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXUzMiAqZHcgPSAodTMyICopIHB0ciArIGR3X29mZnNldDsKKwkqZHcgJj0gfihtYXNrIDw8IG9mZnNldCk7CisJKmR3IHw9IChtYXNrICYgdmFsdWUpIDw8IG9mZnNldDsKK30KKworI2RlZmluZSBBTUFQX1NFVF9CSVRTKF9zdHJ1Y3QsIGZpZWxkLCBwdHIsIHZhbCkJCQkJXAorCQlhbWFwX3NldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCksCQlcCisJCQl2YWwpCisKK3N0YXRpYyBpbmxpbmUgdTMyIGFtYXBfZ2V0KHZvaWQgKnB0ciwgdTMyIGR3X29mZnNldCwgdTMyIG1hc2ssIHUzMiBvZmZzZXQpCit7CisJdTMyICpkdyA9IHB0cjsKKwlyZXR1cm4gbWFzayAmICgqKGR3ICsgZHdfb2Zmc2V0KSA+PiBvZmZzZXQpOworfQorCisjZGVmaW5lIEFNQVBfR0VUX0JJVFMoX3N0cnVjdCwgZmllbGQsIHB0cikJCQkJXAorCQlhbWFwX2dldChwdHIsCQkJCQkJXAorCQkJb2Zmc2V0b2YoX3N0cnVjdCwgZmllbGQpLzMyLAkJCVwKKwkJCWFtYXBfbWFzayhzaXplb2YoKChfc3RydWN0ICopMCktPmZpZWxkKSksCVwKKwkJCUFNQVBfQklUX09GRlNFVChfc3RydWN0LCBmaWVsZCkpCisKKyNkZWZpbmUgYmVfZHdzX2NwdV90b19sZSh3cmIsIGxlbikgc3dhcF9kd3Mod3JiLCBsZW4pCisjZGVmaW5lIGJlX2R3c19sZV90b19jcHUod3JiLCBsZW4pIHN3YXBfZHdzKHdyYiwgbGVuKQorc3RhdGljIGlubGluZSB2b2lkIHN3YXBfZHdzKHZvaWQgKndyYiwgaW50IGxlbikKK3sKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwl1MzIgKmR3ID0gd3JiOworCVdBUk5fT04obGVuICUgNCk7CisJZG8geworCQkqZHcgPSBjcHVfdG9fbGUzMigqZHcpOworCQlkdysrOworCQlsZW4gLT0gNDsKKwl9IHdoaWxlIChsZW4pOworI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworfQorCitleHRlcm4gdm9pZCBiZWlzY3NpX2NxX25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1MTYgcWlkLCBib29sIGFybSwKKwkJCSAgICAgIHUxNiBudW1fcG9wcGVkKTsKKworI2VuZGlmIC8qIEJFSVNDU0lfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwMDdiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmMKQEAgLTAsMCArMSw1MjMgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgImJlX21nbXQuaCIKKyNpbmNsdWRlICJiZV9tYWluLmgiCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9tY2NfY29tcGxfaXNfbmV3KHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWlmIChjb21wbC0+ZmxhZ3MgIT0gMCkgeworCQljb21wbC0+ZmxhZ3MgPSBsZTMyX3RvX2NwdShjb21wbC0+ZmxhZ3MpOworCQlXQVJOX09OKChjb21wbC0+ZmxhZ3MgJiBDUUVfRkxBR1NfVkFMSURfTUFTSykgPT0gMCk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV9tY2NfY29tcGxfdXNlKHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQoreworCWNvbXBsLT5mbGFncyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYmVfbWNjX2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwl1MTYgY29tcGxfc3RhdHVzLCBleHRkX3N0YXR1czsKKworCWJlX2R3c19sZV90b19jcHUoY29tcGwsIDQpOworCisJY29tcGxfc3RhdHVzID0gKGNvbXBsLT5zdGF0dXMgPj4gQ1FFX1NUQVRVU19DT01QTF9TSElGVCkgJgorCQkJCQlDUUVfU1RBVFVTX0NPTVBMX01BU0s7CisJaWYgKGNvbXBsX3N0YXR1cyAhPSBNQ0NfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJZXh0ZF9zdGF0dXMgPSAoY29tcGwtPnN0YXR1cyA+PiBDUUVfU1RBVFVTX0VYVERfU0hJRlQpICYKKwkJCQkJCUNRRV9TVEFUVVNfRVhURF9NQVNLOworCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsCisJCQkiZXJyb3IgaW4gY21kIGNvbXBsZXRpb246IHN0YXR1cyhjb21wbC9leHRkKT0lZC8lZFxuIiwKKwkJCWNvbXBsX3N0YXR1cywgZXh0ZF9zdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIHRyYWlsZXIpCit7CisJcmV0dXJuICgoKHRyYWlsZXIgPj4gQVNZTkNfVFJBSUxFUl9FVkVOVF9DT0RFX1NISUZUKSAmCisJCUFTWU5DX1RSQUlMRVJfRVZFTlRfQ09ERV9NQVNLKSA9PSBBU1lOQ19FVkVOVF9DT0RFX0xJTktfU1RBVEUpOworfQorCit2b2lkIGJlaXNjc2lfY3Ffbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHUxNiBxaWQsIGJvb2wgYXJtLAorCQkgICAgICAgdTE2IG51bV9wb3BwZWQpCit7CisJdTMyIHZhbCA9IDA7CisJdmFsIHw9IHFpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAoYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9DUV9SRUFSTV9TSElGVDsKKwl2YWwgfD0gbnVtX3BvcHBlZCA8PCBEQl9DUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIGN0cmwtPmRiICsgREJfQ1FfT0ZGU0VUKTsKK30KKworc3RhdGljIGludCBiZV9tYm94X2RiX3JlYWR5X3dhaXQoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKyNkZWZpbmUgbG9uZ19kZWxheSAyMDAwCisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCWludCBjbnQgPSAwLCB3YWl0ID0gNTsJLyogaW4gdXNlY3MgKi8KKwl1MzIgcmVhZHk7CisKKwlkbyB7CisJCXJlYWR5ID0gaW9yZWFkMzIoZGIpICYgTVBVX01BSUxCT1hfREJfUkRZX01BU0s7CisJCWlmIChyZWFkeSkKKwkJCWJyZWFrOworCisJCWlmIChjbnQgPiA2MDAwMDAwKSB7CisJCQlkZXZfZXJyKCZjdHJsLT5wZGV2LT5kZXYsICJtYm94X2RiIHBvbGwgdGltZWQgb3V0XG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChjbnQgPiA1MCkgeworCQkJd2FpdCA9IGxvbmdfZGVsYXk7CisJCQltZGVsYXkobG9uZ19kZWxheSAvIDEwMDApOworCQl9IGVsc2UKKwkJCXVkZWxheSh3YWl0KTsKKwkJY250ICs9IHdhaXQ7CisJfSB3aGlsZSAodHJ1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiZV9tYm94X25vdGlmeShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKQoreworCWludCBzdGF0dXM7CisJdTMyIHZhbCA9IDA7CisJdm9pZCBfX2lvbWVtICpkYiA9IGN0cmwtPmRiICsgTVBVX01BSUxCT1hfREJfT0ZGU0VUOworCXN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSA9ICZjdHJsLT5tYm94X21lbTsKKwlzdHJ1Y3QgYmVfbWNjX21haWxib3ggKm1ib3ggPSBtYm94X21lbS0+dmE7CisJc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwgPSAmbWJveC0+Y29tcGw7CisKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCXZhbCB8PSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLOworCXZhbCB8PSAodXBwZXJfMzJfYml0cyhtYm94X21lbS0+ZG1hKSA+PiAyKSA8PCAyOworCWlvd3JpdGUzMih2YWwsIGRiKTsKKworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIGJlX21ib3hfZGJfcmVhZHlfd2FpdCBmYWlsZWQgMVxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXZhbCA9IDA7CisJdmFsICY9IH5NUFVfTUFJTEJPWF9EQl9SRFlfTUFTSzsKKwl2YWwgJj0gfk1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CisJdmFsIHw9ICh1MzIpIChtYm94X21lbS0+ZG1hID4+IDQpIDw8IDI7CisJaW93cml0ZTMyKHZhbCwgZGIpOworCisJc3RhdHVzID0gYmVfbWJveF9kYl9yZWFkeV93YWl0KGN0cmwpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICIgYmVfbWJveF9kYl9yZWFkeV93YWl0IGZhaWxlZCAyXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJaWYgKGJlX21jY19jb21wbF9pc19uZXcoY29tcGwpKSB7CisJCXN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGN0cmwsICZtYm94LT5jb21wbCk7CisJCWJlX21jY19jb21wbF91c2UoY29tcGwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJBZnRlciBiZV9tY2NfY29tcGxfcHJvY2VzcyBcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoJmN0cmwtPnBkZXYtPmRldiwgImludmFsaWQgbWFpbGJveCBjb21wbGV0aW9uXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBiZV93cmJfaGRyX3ByZXBhcmUoc3RydWN0IGJlX21jY193cmIgKndyYiwgaW50IHBheWxvYWRfbGVuLAorCQkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpCit7CisJaWYgKGVtYmVkZGVkKQorCQl3cmItPmVtYmVkZGVkIHw9IE1DQ19XUkJfRU1CRURERURfTUFTSzsKKwllbHNlCisJCXdyYi0+ZW1iZWRkZWQgfD0gKHNnZV9jbnQgJiBNQ0NfV1JCX1NHRV9DTlRfTUFTSykgPDwKKwkJCQkJCU1DQ19XUkJfU0dFX0NOVF9TSElGVDsKKwl3cmItPnBheWxvYWRfbGVuZ3RoID0gcGF5bG9hZF9sZW47CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIDgpOworfQorCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pCit7CisJcmVxX2hkci0+b3Bjb2RlID0gb3Bjb2RlOworCXJlcV9oZHItPnN1YnN5c3RlbSA9IHN1YnN5c3RlbTsKKwlyZXFfaGRyLT5yZXF1ZXN0X2xlbmd0aCA9IGNwdV90b19sZTMyKGNtZF9sZW4gLSBzaXplb2YoKnJlcV9oZHIpKTsKK30KKworc3RhdGljIHZvaWQgYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShzdHJ1Y3QgcGh5c19hZGRyICpwYWdlcywgdTMyIG1heF9wYWdlcywKKwkJCQkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQoreworCWludCBpLCBidWZfcGFnZXM7CisJdTY0IGRtYSA9ICh1NjQpIG1lbS0+ZG1hOworCisJYnVmX3BhZ2VzID0gbWluKFBBR0VTXzRLX1NQQU5ORUQobWVtLT52YSwgbWVtLT5zaXplKSwgbWF4X3BhZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3BhZ2VzOyBpKyspIHsKKwkJcGFnZXNbaV0ubG8gPSBjcHVfdG9fbGUzMihkbWEgJiAweEZGRkZGRkZGKTsKKwkJcGFnZXNbaV0uaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGRtYSkpOworCQlkbWEgKz0gUEFHRV9TSVpFXzRLOworCX0KK30KKworc3RhdGljIHUzMiBlcV9kZWxheV90b19tdWx0KHUzMiB1c2VjX2RlbGF5KQoreworI2RlZmluZSBNQVhfSU5UUl9SQVRFIDY1MTA0MgorCWNvbnN0IHUzMiByb3VuZCA9IDEwOworCXUzMiBtdWx0aXBsaWVyOworCisJaWYgKHVzZWNfZGVsYXkgPT0gMCkKKwkJbXVsdGlwbGllciA9IDA7CisJZWxzZSB7CisJCXUzMiBpbnRlcnJ1cHRfcmF0ZSA9IDEwMDAwMDAgLyB1c2VjX2RlbGF5OworCQlpZiAoaW50ZXJydXB0X3JhdGUgPT0gMCkKKwkJCW11bHRpcGxpZXIgPSAxMDIzOworCQllbHNlIHsKKwkJCW11bHRpcGxpZXIgPSAoTUFYX0lOVFJfUkFURSAtIGludGVycnVwdF9yYXRlKSAqIHJvdW5kOworCQkJbXVsdGlwbGllciAvPSBpbnRlcnJ1cHRfcmF0ZTsKKwkJCW11bHRpcGxpZXIgPSAobXVsdGlwbGllciArIHJvdW5kIC8gMikgLyByb3VuZDsKKwkJCW11bHRpcGxpZXIgPSBtaW4obXVsdGlwbGllciwgKHUzMikgMTAyMyk7CisJCX0KKwl9CisJcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK3N0cnVjdCBiZV9tY2Nfd3JiICp3cmJfZnJvbV9tYm94KHN0cnVjdCBiZV9kbWFfbWVtICptYm94X21lbSkKK3sKKwlyZXR1cm4gJigoc3RydWN0IGJlX21jY19tYWlsYm94ICopKG1ib3hfbWVtLT52YSkpLT53cmI7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9lcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxLCBpbnQgZXFfZGVsYXkpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZlcS0+ZG1hX21lbTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCisJCQlPUENPREVfQ09NTU9OX0VRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIGZ1bmMsIHJlcS0+Y29udGV4dCwKKwkJCQkJCVBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCB2YWxpZCwgcmVxLT5jb250ZXh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2NvbnRleHQsIHNpemUsIHJlcS0+Y29udGV4dCwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBjb3VudCwgcmVxLT5jb250ZXh0LAorCQkJCQlfX2lsb2cyX3UzMihlcS0+bGVuIC8gMjU2KSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0LCBkZWxheW11bHQsIHJlcS0+Y29udGV4dCwKKwkJCQkJZXFfZGVsYXlfdG9fbXVsdChlcV9kZWxheSkpOworCWJlX2R3c19jcHVfdG9fbGUocmVxLT5jb250ZXh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWVxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmVxX2lkKTsKKwkJZXEtPmNyZWF0ZWQgPSB0cnVlOworCX0KKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgYmVfY21kX2Z3X2luaXRpYWxpemUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCWludCBzdGF0dXM7CisJdTggKmVuZGlhbl9jaGVjazsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJZW5kaWFuX2NoZWNrID0gKHU4ICopIHdyYjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4MTI7CisJKmVuZGlhbl9jaGVjaysrID0gMHgzNDsKKwkqZW5kaWFuX2NoZWNrKysgPSAweEZGOworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJKmVuZGlhbl9jaGVjaysrID0gMHg1NjsKKwkqZW5kaWFuX2NoZWNrKysgPSAweDc4OworCSplbmRpYW5fY2hlY2srKyA9IDB4RkY7CisJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJiZV9jbWRfZndfaW5pdGlhbGl6ZSBGYWlsZWQgXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksIGludCBjb2FsZXNjZV93bSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9jbWRfcmVzcF9jcV9jcmVhdGUgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtID0gJmNxLT5kbWFfbWVtOworCXZvaWQgKmN0eHQgPSAmcmVxLT5jb250ZXh0OworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFLCBzaXplb2YoKnJlcSkpOworCisJaWYgKCFxX21lbS0+dmEpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgInVuaW5pdGlhbGl6ZWQgcV9tZW0tPnZhXG4iKTsKKworCXJlcS0+bnVtX3BhZ2VzID0gY3B1X3RvX2xlMTYoUEFHRVNfNEtfU1BBTk5FRChxX21lbS0+dmEsIHFfbWVtLT5zaXplKSk7CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGNvYWxlc2N3bSwgY3R4dCwgY29hbGVzY2Vfd20pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgbm9kZWxheSwgY3R4dCwgbm9fZGVsYXkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgY291bnQsIGN0eHQsCisJCSAgICAgIF9faWxvZzJfdTMyKGNxLT5sZW4gLyAyNTYpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHZhbGlkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIHNvbGV2ZW50LCBjdHh0LCBzb2xfZXZ0cyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0LCBldmVudGFibGUsIGN0eHQsIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfY3FfY29udGV4dCwgZXFpZCwgY3R4dCwgZXEtPmlkKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGFybWVkLCBjdHh0LCAxKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2NxX2NvbnRleHQsIGZ1bmMsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJYmVfZHdzX2NwdV90b19sZShjdHh0LCBzaXplb2YocmVxLT5jb250ZXh0KSk7CisKKwliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIEFSUkFZX1NJWkUocmVxLT5wYWdlcyksIHFfbWVtKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCWNxLT5pZCA9IGxlMTZfdG9fY3B1KHJlc3AtPmNxX2lkKTsKKwkJY3EtPmNyZWF0ZWQgPSB0cnVlOworCX0gZWxzZQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbiBiZV9jbWRfY3FfY3JlYXRlLCBzdGF0dXM9b3glMDh4IFxuIiwKKwkJCXN0YXR1cyk7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdTMyIGJlX2VuY29kZWRfcV9sZW4oaW50IHFfbGVuKQoreworCXUzMiBsZW5fZW5jb2RlZCA9IGZscyhxX2xlbik7CS8qIGxvZzIobGVuKSArIDEgKi8KKwlpZiAobGVuX2VuY29kZWQgPT0gMTYpCisJCWxlbl9lbmNvZGVkID0gMDsKKwlyZXR1cm4gbGVuX2VuY29kZWQ7Cit9CitpbnQgYmVpc2NzaV9jbWRfcV9kZXN0cm95KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpxLAorCQkJICBpbnQgcXVldWVfdHlwZSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXU4IHN1YnN5cyA9IDAsIG9wY29kZSA9IDA7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwlzd2l0Y2ggKHF1ZXVlX3R5cGUpIHsKKwljYXNlIFFUWVBFX0VROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9FUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0NROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0NPTU1PTjsKKwkJb3Bjb2RlID0gT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX1dSQlE6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9ERVNUUk9ZOworCQlicmVhazsKKwljYXNlIFFUWVBFX0RQRFVROgorCQlzdWJzeXMgPSBDTURfU1VCU1lTVEVNX0lTQ1NJOworCQlvcGNvZGUgPSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWTsKKwkJYnJlYWs7CisJY2FzZSBRVFlQRV9TR0w6CisJCXN1YnN5cyA9IENNRF9TVUJTWVNURU1fSVNDU0k7CisJCW9wY29kZSA9IE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlCVUcoKTsKKwkJcmV0dXJuIC0xOworCX0KKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBzdWJzeXMsIG9wY29kZSwgc2l6ZW9mKCpyZXEpKTsKKwlpZiAocXVldWVfdHlwZSAhPSBRVFlQRV9TR0wpCisJCXJlcS0+aWQgPSBjcHVfdG9fbGUxNihxLT5pZCk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfZ2V0X21hY19hZGRyKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsIHU4ICptYWNfYWRkcikKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQkgICBPUENPREVfQ09NTU9OX0lTQ1NJX05UV0tfR0VUX05JQ19DT05GSUcsCisJCQkgICBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKworCQltZW1jcHkobWFjX2FkZHIsIHJlc3AtPm1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJfQorCisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQkgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZHEsIGludCBsZW5ndGgsCisJCQkJICAgIGludCBlbnRyeV9zaXplKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXN0cnVjdCBiZV9kbWFfbWVtICpxX21lbSA9ICZkcS0+ZG1hX21lbTsKKwl2b2lkICpjdHh0ID0gJnJlcS0+Y29udGV4dDsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfREVGUV9DUkVBVEUsIHNpemVvZigqcmVxKSk7CisKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByeF9wZGlkLCBjdHh0LCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIHJ4X3BkaWRfdmFsaWQsIGN0eHQsCisJCSAgICAgIDEpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCwgcGNpX2Z1bmNfaWQsIGN0eHQsCisJCSAgICAgIFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCByaW5nX3NpemUsIGN0eHQsCisJCSAgICAgIGJlX2VuY29kZWRfcV9sZW4obGVuZ3RoIC8gc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZV9kZWZhdWx0X3BkdV9jb250ZXh0LCBkZWZhdWx0X2J1ZmZlcl9zaXplLAorCQkgICAgICBjdHh0LCBlbnRyeV9zaXplKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlX2RlZmF1bHRfcGR1X2NvbnRleHQsIGNxX2lkX3JlY3YsIGN0eHQsCisJCSAgICAgIGNxLT5pZCk7CisKKwliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKKworCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgKnJlc3AgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisKKwkJZHEtPmlkID0gbGUxNl90b19jcHUocmVzcC0+aWQpOworCQlkcS0+Y3JlYXRlZCA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGJlX2NtZF93cmJxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCBzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCSAgICAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqd3JicSkKK3sKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgKnJlcSA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCAqcmVzcCA9IGVtYmVkZGVkX3BheWxvYWQod3JiKTsKKwlpbnQgc3RhdHVzOworCisJc3Bpbl9sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCW1lbXNldCh3cmIsIDAsIHNpemVvZigqd3JiKSk7CisKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJT1BDT0RFX0NPTU1PTl9JU0NTSV9XUkJRX0NSRUFURSwgc2l6ZW9mKCpyZXEpKTsKKwlyZXEtPm51bV9wYWdlcyA9IFBBR0VTXzRLX1NQQU5ORUQocV9tZW0tPnZhLCBxX21lbS0+c2l6ZSk7CisJYmVfY21kX3BhZ2VfYWRkcnNfcHJlcGFyZShyZXEtPnBhZ2VzLCBBUlJBWV9TSVpFKHJlcS0+cGFnZXMpLCBxX21lbSk7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoIXN0YXR1cykKKwkJd3JicS0+aWQgPSBsZTE2X3RvX2NwdShyZXNwLT5jaWQpOworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBiZV9jbWRfaXNjc2lfcG9zdF9zZ2xfcGFnZXMoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqcV9tZW0sCisJCQkJdTMyIHBhZ2Vfb2Zmc2V0LCB1MzIgbnVtX3BhZ2VzKQoreworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IGN1cnJfcGFnZXM7CisJdTMyIGludGVybmFsX3BhZ2Vfb2Zmc2V0ID0gMDsKKwl1MzIgdGVtcF9udW1fcGFnZXMgPSBudW1fcGFnZXM7CisKKwlpZiAobnVtX3BhZ2VzID09IDB4ZmYpCisJCW51bV9wYWdlcyA9IDE7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJZG8geworCQltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCQliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIHRydWUsIDApOworCQliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTLAorCQkJCSAgIHNpemVvZigqcmVxKSk7CisJCWN1cnJfcGFnZXMgPSBCRV9OVU1CRVJfT0ZfRklFTEQoc3RydWN0IGJlX3Bvc3Rfc2dsX3BhZ2VzX3JlcSwKKwkJCQkJCXBhZ2VzKTsKKwkJcmVxLT5udW1fcGFnZXMgPSBtaW4obnVtX3BhZ2VzLCBjdXJyX3BhZ2VzKTsKKwkJcmVxLT5wYWdlX29mZnNldCA9IHBhZ2Vfb2Zmc2V0OworCQliZV9jbWRfcGFnZV9hZGRyc19wcmVwYXJlKHJlcS0+cGFnZXMsIHJlcS0+bnVtX3BhZ2VzLCBxX21lbSk7CisJCXFfbWVtLT5kbWEgPSBxX21lbS0+ZG1hICsgKHJlcS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKwkJaW50ZXJuYWxfcGFnZV9vZmZzZXQgKz0gcmVxLT5udW1fcGFnZXM7CisJCXBhZ2Vfb2Zmc2V0ICs9IHJlcS0+bnVtX3BhZ2VzOworCQludW1fcGFnZXMgLT0gcmVxLT5udW1fcGFnZXM7CisKKwkJaWYgKHRlbXBfbnVtX3BhZ2VzID09IDB4ZmYpCisJCQlyZXEtPm51bV9wYWdlcyA9IHRlbXBfbnVtX3BhZ2VzOworCisJCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCQlpZiAoc3RhdHVzKSB7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJGVyBDTUQgdG8gbWFwIGlzY3NpIGZyYWdzIGZhaWxlZC5cbiIpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0gd2hpbGUgKG51bV9wYWdlcyA+IDApOworZXJyb3I6CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2NtZHMuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwZDY4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9jbWRzLmgKQEAgLTAsMCArMSw4NzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqIGxpbnV4LWRyaXZlcnNAc2VydmVyZW5naW5lcy5jb20KKyAqCisgKiBTZXJ2ZXJFbmdpbmVzCisgKiAyMDkgTi4gRmFpciBPYWtzIEF2ZQorICogU3Vubnl2YWxlLCBDQSA5NDA4NQorICovCisKKyNpZm5kZWYgQkVJU0NTSV9DTURTX0gKKyNkZWZpbmUgQkVJU0NTSV9DTURTX0gKKworLyoqCisgKiBUaGUgZHJpdmVyIHNlbmRzIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnRzIGNvbW1hbmQgcmVxdWVzdHMgdG8gdGhlCisgKiBmaXJtd2FyZSBpbiB0aGUgQkUuIFRoZXNlIHJlcXVlc3RzIGFyZSBjb21tdW5pY2F0ZWQgdG8gdGhlIHByb2Nlc3NvcgorICogdXNpbmcgV29yayBSZXF1ZXN0IEJsb2NrcyAoV1JCcykgc3VibWl0dGVkIHRvIHRoZSBNQ0MtV1JCIHJpbmcgb3IgdmlhIG9uZQorICogV1JCIGluc2lkZSBhIE1BSUxCT1guCisgKiBUaGUgY29tbWFuZHMgYXJlIHNlcnZpY2VkIGJ5IHRoZSBBUk0gcHJvY2Vzc29yIGluIHRoZSBCbGFkZUVuZ2luZSdzIE1QVS4KKyAqLworc3RydWN0IGJlX3NnZSB7CisJdTMyIHBhX2xvOworCXUzMiBwYV9oaTsKKwl1MzIgbGVuOworfTsKKworI2RlZmluZSBNQ0NfV1JCX1NHRV9DTlRfU0hJRlQgMwkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KKyNkZWZpbmUgTUNDX1dSQl9TR0VfQ05UX01BU0sgMHgxRgkvKiBiaXRzIDMgLSA3IG9mIGR3b3JkIDAgKi8KK3N0cnVjdCBiZV9tY2Nfd3JiIHsKKwl1MzIgZW1iZWRkZWQ7CQkvKiBkd29yZCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOwkvKiBkd29yZCAxICovCisJdTMyIHRhZzA7CQkvKiBkd29yZCAyICovCisJdTMyIHRhZzE7CQkvKiBkd29yZCAzICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCA0ICovCisJdW5pb24geworCQl1OCBlbWJlZGRlZF9wYXlsb2FkWzIzNl07CS8qIHVzZWQgYnkgZW1iZWRkZWQgY21kcyAqLworCQlzdHJ1Y3QgYmVfc2dlIHNnbFsxOV07CS8qIHVzZWQgYnkgbm9uLWVtYmVkZGVkIGNtZHMgKi8KKwl9IHBheWxvYWQ7Cit9OworCisjZGVmaW5lIENRRV9GTEFHU19WQUxJRF9NQVNLICgxIDw8IDMxKQorI2RlZmluZSBDUUVfRkxBR1NfQVNZTkNfTUFTSyAoMSA8PCAzMCkKKworLyogQ29tcGxldGlvbiBTdGF0dXMgKi8KKyNkZWZpbmUgTUNDX1NUQVRVU19TVUNDRVNTIDB4MAorCisjZGVmaW5lIENRRV9TVEFUVVNfQ09NUExfTUFTSyAweEZGRkYKKyNkZWZpbmUgQ1FFX1NUQVRVU19DT01QTF9TSElGVCAwCS8qIGJpdHMgMCAtIDE1ICovCisjZGVmaW5lIENRRV9TVEFUVVNfRVhURF9NQVNLIDB4RkZGRgorI2RlZmluZSBDUUVfU1RBVFVTX0VYVERfU0hJRlQgMAkJLyogYml0cyAwIC0gMTUgKi8KKworc3RydWN0IGJlX21jY19jb21wbCB7CisJdTMyIHN0YXR1czsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgdGFnMDsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgdGFnMTsJCS8qIGR3b3JkIDIgKi8KKwl1MzIgZmxhZ3M7CQkvKiBkd29yZCAzICovCit9OworCisvKioqKioqKioqIE1haWxib3ggZG9vciBiZWxsICoqKioqKioqKioqKiovCisvKioKKyAqIFVzZWQgZm9yIGRyaXZlciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIEZXLgorICogVGhlIHNvZnR3YXJlIG11c3Qgd3JpdGUgdGhpcyByZWdpc3RlciB0d2ljZSB0byBwb3N0IGFueSBjb21tYW5kLiBGaXJzdCwKKyAqIGl0IHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0xIGFuZCB0aGUgdXBwZXIgYml0cyBvZiB0aGUgcGh5c2ljYWwgYWRkcmVzcworICogZm9yIHRoZSBNQUlMQk9YIHN0cnVjdHVyZS4gU29mdHdhcmUgbXVzdCBwb2xsIHRoZSByZWFkeSBiaXQgdW50aWwgdGhpcworICogaXMgYWNrbm93bGVkZ2VkLiBUaGVuLCBzb3R3YXJlIHdyaXRlcyB0aGUgcmVnaXN0ZXIgd2l0aCBoaT0wIHdpdGggdGhlIGxvd2VyCisgKiBiaXRzIGluIHRoZSBhZGRyZXNzLiBJdCBtdXN0IHBvbGwgdGhlIHJlYWR5IGJpdCB1bnRpbCB0aGUgY29tbWFuZCBpcworICogY29tcGxldGUuIFVwb24gY29tcGxldGlvbiwgdGhlIE1BSUxCT1ggd2lsbCBjb250YWluIGEgdmFsaWQgY29tcGxldGlvbgorICogcXVldWUgZW50cnkuCisgKi8KKyNkZWZpbmUgTVBVX01BSUxCT1hfREJfT0ZGU0VUCTB4MTYwCisjZGVmaW5lIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLCTB4MQkvKiBiaXQgMCAqLworI2RlZmluZSBNUFVfTUFJTEJPWF9EQl9ISV9NQVNLCTB4MgkvKiBiaXQgMSAqLworCisvKioqKioqKioqKiBNUFUgc2VtcGhvcmUgKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFX09GRlNFVCAweGFjCisjZGVmaW5lIEVQX1NFTUFQSE9SRV9QT1NUX1NUQUdFX01BU0sgMHgwMDAwRkZGRgorI2RlZmluZSBFUF9TRU1BUEhPUkVfUE9TVF9FUlJfTUFTSyAweDEKKyNkZWZpbmUgRVBfU0VNQVBIT1JFX1BPU1RfRVJSX1NISUZUIDMxCisKKy8qKioqKioqKioqIE1DQyBkb29yIGJlbGwgKioqKioqKioqKioqLworI2RlZmluZSBEQl9NQ0NRX09GRlNFVCAweDE0MAorI2RlZmluZSBEQl9NQ0NRX1JJTkdfSURfTUFTSyAweDdGRgkJLyogYml0cyAwIC0gMTAgKi8KKy8qIE51bWJlciBvZiBlbnRyaWVzIHBvc3RlZCAqLworI2RlZmluZSBEQl9NQ0NRX05VTV9QT1NURURfU0hJRlQgMTYJCS8qIGJpdHMgMTYgLSAyOSAqLworCisvKiBNUFUgc2VtcGhvcmUgUE9TVCBzdGFnZSB2YWx1ZXMgKi8KKyNkZWZpbmUgUE9TVF9TVEFHRV9BUk1GV19SRFkJCTB4YzAwMAkvKiBGVyBpcyBkb25lIHdpdGggUE9TVCAqLworCisvKioKKyAqIFdoZW4gdGhlIGFzeW5jIGJpdCBvZiBtY2NfY29tcGwgaXMgc2V0LCB0aGUgbGFzdCA0IGJ5dGVzIG9mCisgKiBtY2NfY29tcGwgaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93czoKKyAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfU0hJRlQJOAkvKiBiaXRzIDggLSAxNSAqLworI2RlZmluZSBBU1lOQ19UUkFJTEVSX0VWRU5UX0NPREVfTUFTSwkweEZGCisjZGVmaW5lIEFTWU5DX0VWRU5UX0NPREVfTElOS19TVEFURQkweDEKK3N0cnVjdCBiZV9hc3luY19ldmVudF90cmFpbGVyIHsKKwl1MzIgY29kZTsKK307CisKK2VudW0geworCUFTWU5DX0VWRU5UX0xJTktfRE9XTiA9IDB4MCwKKwlBU1lOQ19FVkVOVF9MSU5LX1VQID0gMHgxCit9OworCisvKioKKyAqIFdoZW4gdGhlIGV2ZW50IGNvZGUgb2YgYW4gYXN5bmMgdHJhaWxlciBpcyBsaW5rLXN0YXRlLCB0aGUgbWNjX2NvbXBsCisgKiBtdXN0IGJlIGludGVycHJldGVkIGFzIGZvbGxvd3MKKyAqLworc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgeworCXU4IHBoeXNpY2FsX3BvcnQ7CisJdTggcG9ydF9saW5rX3N0YXR1czsKKwl1OCBwb3J0X2R1cGxleDsKKwl1OCBwb3J0X3NwZWVkOworCXU4IHBvcnRfZmF1bHQ7CisJdTggcnN2ZDBbN107CisJc3RydWN0IGJlX2FzeW5jX2V2ZW50X3RyYWlsZXIgdHJhaWxlcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9tY2NfbWFpbGJveCB7CisJc3RydWN0IGJlX21jY193cmIgd3JiOworCXN0cnVjdCBiZV9tY2NfY29tcGwgY29tcGw7Cit9OworCisvKiBUeXBlIG9mIHN1YnN5c3RlbXMgc3VwcG9ydGVkIGJ5IEZXICovCisjZGVmaW5lIENNRF9TVUJTWVNURU1fQ09NTU9OICAgIDB4MQorI2RlZmluZSBDTURfU1VCU1lTVEVNX0lTQ1NJICAgICAweDIKKyNkZWZpbmUgQ01EX1NVQlNZU1RFTV9FVEggICAgICAgMHgzCisjZGVmaW5lIENNRF9TVUJTWVNURU1fSVNDU0lfSU5JIDB4NgorI2RlZmluZSBDTURfQ09NTU9OX1RDUF9VUExPQUQgICAweDEKKworLyoqCisgKiBMaXN0IG9mIGNvbW1vbiBvcGNvZGVzIHN1YnN5c3RlbSAgQ01EX1NVQlNZU1RFTV9DT01NT04KKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fQ1FfQ1JFQVRFCQkJCTEyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfQ1JFQVRFCQkJCTEzCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0NSRUFURSAgICAgICAgCQkyMQorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9DTlRMX0FUVFJJQlVURVMgICAgICAgICAgICAgICAzMgorI2RlZmluZSBPUENPREVfQ09NTU9OX0dFVF9GV19WRVJTSU9OCQkJMzUKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NT0RJRllfRVFfREVMQVkJCQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0ZJUk1XQVJFX0NPTkZJRwkJCTQyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fTUNDX0RFU1RST1kgICAgICAgIAkJNTMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9ERVNUUk9ZICAgICAgICAJCTU0CisjZGVmaW5lIE9QQ09ERV9DT01NT05fRVFfREVTVFJPWSAgICAgICAgCQk1NQorI2RlZmluZSBPUENPREVfQ09NTU9OX1FVRVJZX0ZJUk1XQVJFX0NPTkZJRwkJNTgKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9GVU5DVElPTl9SRVNFVAkJCTYxCisKKy8qKgorICogTElTVCBvZiBvcGNvZGVzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIEluaXRpYXRvciBhbmQgVGFyZ2V0CisgKiB1c2VkIGJ5IENNRF9TVUJTWVNURU1fSVNDU0kKKyAqIFRoZXNlIG9wY29kZXMgYXJlIHVuaXF1ZSBmb3IgZWFjaCBzdWJzeXN0ZW0gZGVmaW5lZCBhYm92ZQorICovCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1BPU1RfU0dMX1BBR0VTCQkyCisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfQ0ZHX1JFTU9WRV9TR0xfUEFHRVMgICAgICAgIDMKKyNkZWZpbmUgT1BDT0RFX0NPTU1PTl9JU0NTSV9OVFdLX0dFVF9OSUNfQ09ORklHCQk3CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfU0VUX0ZSQUdOVU1fQklUU19GT1JfU0dMX0NSQSA2MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfQ1JFQVRFICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0RFRlFfREVTVFJPWSAJCTY1CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfV1JCUV9DUkVBVEUJCQk2NgorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1dSQlFfREVTVFJPWSAJCTY3CisKK3N0cnVjdCBiZV9jbWRfcmVxX2hkciB7CisJdTggb3Bjb2RlOwkJLyogZHdvcmQgMCAqLworCXU4IHN1YnN5c3RlbTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwb3J0X251bWJlcjsJCS8qIGR3b3JkIDAgKi8KKwl1OCBkb21haW47CQkvKiBkd29yZCAwICovCisJdTMyIHRpbWVvdXQ7CQkvKiBkd29yZCAxICovCisJdTMyIHJlcXVlc3RfbGVuZ3RoOwkvKiBkd29yZCAyICovCisJdTMyIHJzdmQ7CQkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHsKKwl1MzIgaW5mbzsJCS8qIGR3b3JkIDAgKi8KKwl1MzIgc3RhdHVzOwkJLyogZHdvcmQgMSAqLworCXUzMiByZXNwb25zZV9sZW5ndGg7CS8qIGR3b3JkIDIgKi8KKwl1MzIgYWN0dWFsX3Jlc3BfbGVuOwkvKiBkd29yZCAzICovCit9OworCitzdHJ1Y3QgcGh5c19hZGRyIHsKKwl1MzIgbG87CisJdTMyIGhpOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCRSBDb21tYW5kIGRlZmluaXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZSAtIHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfZXFfY29udGV4dCB7CisJdTggY2lkeFsxM107CQkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTNdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IHNpemU7CQkvKiBkd29yZCAwICovCisJdTggcGlkeFsxM107CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDJbM107CQkvKiBkd29yZCAxICovCisJdTggcGRbMTBdOwkJLyogZHdvcmQgMSAqLworCXU4IGNvdW50WzNdOwkJLyogZHdvcmQgMSAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMSAqLworCXU4IHN0YWxsZWQ7CQkvKiBkd29yZCAxICovCisJdTggYXJtZWQ7CQkvKiBkd29yZCAxICovCisJdTggcnN2ZDNbNF07CQkvKiBkd29yZCAyICovCisJdTggZnVuY1s4XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNDsJCS8qIGR3b3JkIDIgKi8KKwl1OCBkZWxheW11bHRbMTBdOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDVbMl07CQkvKiBkd29yZCAyICovCisJdTggcGhhc2VbMl07CQkvKiBkd29yZCAyICovCisJdTggbm9kZWxheTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkNls0XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCByc3ZkN1szMl07CQkvKiBkd29yZCAzICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3JlcV9lcV9jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CS8qIGR3WzRdICovCisJdTE2IG51bV9wYWdlczsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9lcV9jb250ZXh0KSAvIDhdOwkvKiBkd1s0XSAqLworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfZXFfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIHJlc3BfaGRyOworCXUxNiBlcV9pZDsJCS8qIHN3b3JkICovCisJdTE2IHJzdmQwOwkJLyogc3dvcmQgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtYWNfYWRkciB7CisJdTE2IHNpemVfb2Zfc3RydWN0OworCXU4IGFkZHJbRVRIX0FMRU5dOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWFjX3F1ZXJ5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHR5cGU7CisJdTggcGVybWFuZW50OworCXUxNiBpZl9pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVzcF9tYWNfcXVlcnkgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXN0cnVjdCBtYWNfYWRkciBtYWM7Cit9OworCisvKioqKioqKioqKioqKioqKioqKiogQ3JlYXRlIENRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2NvbnRleHQgeworCXU4IGNpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQwOwkJLyogZHdvcmQgMCAqLworCXU4IGNvYWxlc2N3bVsyXTsJLyogZHdvcmQgMCAqLworCXU4IG5vZGVsYXk7CQkvKiBkd29yZCAwICovCisJdTggZXBpZHhbMTFdOwkJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxOwkJLyogZHdvcmQgMCAqLworCXU4IGNvdW50WzJdOwkJLyogZHdvcmQgMCAqLworCXU4IHZhbGlkOwkJLyogZHdvcmQgMCAqLworCXU4IHNvbGV2ZW50OwkJLyogZHdvcmQgMCAqLworCXU4IGV2ZW50YWJsZTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwaWR4WzExXTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByc3ZkMjsJCS8qIGR3b3JkIDEgKi8KKwl1OCBwZFsxMF07CQkvKiBkd29yZCAxICovCisJdTggZXFpZFs4XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCBzdGFsbGVkOwkJLyogZHdvcmQgMSAqLworCXU4IGFybWVkOwkJLyogZHdvcmQgMSAqLworCXU4IHJzdmQzWzRdOwkJLyogZHdvcmQgMiAqLworCXU4IGZ1bmNbOF07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMjBdOwkJLyogZHdvcmQgMiAqLworCXU4IHJzdmQ1WzMyXTsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9jbWRfcmVxX2NxX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9jcV9jb250ZXh0KSAvIDhdOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfY21kX3Jlc3BfY3FfY3JlYXRlIHsKKwlzdHJ1Y3QgYmVfY21kX3Jlc3BfaGRyIGhkcjsKKwl1MTYgY3FfaWQ7CisJdTE2IHJzdmQwOworfSBfX3BhY2tlZDsKKworLyoqKioqKioqKioqKioqKioqKioqIENyZWF0ZSBNQ0NRICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGUgLSB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19jb250ZXh0IHsKKwl1OCBjb25faW5kZXhbMTRdOworCXU4IHJzdmQwWzJdOworCXU4IHJpbmdfc2l6ZVs0XTsKKwl1OCBmZXRjaF93cmI7CisJdTggZmV0Y2hfcjJ0OworCXU4IGNxX2lkWzEwXTsKKwl1OCBwcm9kX2luZGV4WzE0XTsKKwl1OCBmaWRbOF07CisJdTggcGRpZFs5XTsKKwl1OCB2YWxpZDsKKwl1OCByc3ZkMVszMl07CisJdTggcnN2ZDJbMzJdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXFfbWNjX2NyZWF0ZSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXUxNiByc3ZkMDsKKwl1OCBjb250ZXh0W3NpemVvZihzdHJ1Y3QgYW1hcF9tY2NfY29udGV4dCkgLyA4XTsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2NtZF9yZXNwX21jY19jcmVhdGUgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgcnN2ZDA7Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogUSBEZXN0cm95ICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUeXBlIG9mIFF1ZXVlIHRvIGJlIGRlc3Ryb3llZCAqLworZW51bSB7CisJUVRZUEVfRVEgPSAxLAorCVFUWVBFX0NRLAorCVFUWVBFX01DQ1EsCisJUVRZUEVfV1JCUSwKKwlRVFlQRV9EUERVUSwKKwlRVFlQRV9TR0wKK307CisKK3N0cnVjdCBiZV9jbWRfcmVxX3FfZGVzdHJveSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgaWQ7CisJdTE2IGJ5cGFzc19mbHVzaDsJLyogdmFsaWQgb25seSBmb3IgcnggcSBkZXN0cm95ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWFjYWRkciB7CisJdTggYnl0ZVtFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgYmVfY21kX3JlcV9tY2FzdF9tYWNfY29uZmlnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBudW1fbWFjOworCXU4IHByb21pc2N1b3VzOworCXU4IGludGVyZmFjZV9pZDsKKwlzdHJ1Y3QgbWFjYWRkciBtYWNbMzJdOworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSB2b2lkICplbWJlZGRlZF9wYXlsb2FkKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIpCit7CisJcmV0dXJuIHdyYi0+cGF5bG9hZC5lbWJlZGRlZF9wYXlsb2FkOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBiZV9zZ2UgKm5vbmVtYmVkZGVkX3NnbChzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiKQoreworCXJldHVybiAmd3JiLT5wYXlsb2FkLnNnbFswXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqIE1vZGlmeSBFUSBEZWxheSAqKioqKioqKioqKioqKioqKioqLworc3RydWN0IGJlX2NtZF9yZXFfbW9kaWZ5X2VxX2RlbGF5IHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBudW1fZXE7CisJc3RydWN0IHsKKwkJdTMyIGVxX2lkOworCQl1MzIgcGhhc2U7CisJCXUzMiBkZWxheV9tdWx0aXBsaWVyOworCX0gZGVsYXlbOF07Cit9IF9fcGFja2VkOworCisvKioqKioqKioqKioqKioqKioqKiogR2V0IE1BQyBBRERSICoqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRVRIX0FMRU4JNgorCisKK3N0cnVjdCBiZV9jbWRfcmVxX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbmljX3BvcnRfY291bnQ7CisJdTMyIHNwZWVkOworCXUzMiBtYXhfc3BlZWQ7CisJdTMyIGxpbmtfc3RhdGU7CisJdTMyIG1heF9mcmFtZV9zaXplOworCXUxNiBzaXplX29mX3N0cnVjdHVyZTsKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdTMyIHJzdmRbMjNdOworfTsKKworc3RydWN0IGJlX2NtZF9yZXNwX2dldF9tYWNfYWRkciB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJdTMyIG5pY19wb3J0X2NvdW50OworCXUzMiBzcGVlZDsKKwl1MzIgbWF4X3NwZWVkOworCXUzMiBsaW5rX3N0YXRlOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKKwl1MTYgc2l6ZV9vZl9zdHJ1Y3R1cmU7CisJdTggbWFjX2FkZHJlc3NbNl07CisJdTMyIHJzdmRbMjNdOworfTsKKworaW50IGJlaXNjc2lfY21kX2VxX2NyZWF0ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsIGludCBlcV9kZWxheSk7CisKK2ludCBiZWlzY3NpX2NtZF9jcV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCSAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKmNxLCBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZXEsCisJCQkgIGJvb2wgc29sX2V2dHMsIGJvb2wgbm9fZGVsYXksCisJCQkgIGludCBudW1fY3FlX2RtYV9jb2FsZXNjZSk7CisKK2ludCBiZWlzY3NpX2NtZF9xX2Rlc3Ryb3koc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnEsCisJCQkgIGludCB0eXBlKTsKK2ludCBiZV9wb2xsX21jYyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKK3Vuc2lnbmVkIGNoYXIgbWdtdF9jaGVja19zdXBwb3J0ZWRfZncoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCk7CitpbnQgYmVfY21kX2dldF9tYWNfYWRkcihzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLCB1OCAqbWFjX2FkZHIpOworCisvKklTQ1NJIEZ1bmN0dWlvbnMgKi8KK2ludCBiZV9jbWRfZndfaW5pdGlhbGl6ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsKTsKKworc3RydWN0IGJlX21jY193cmIgKndyYl9mcm9tX21ib3goc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtKTsKKworaW50IGJlX21ib3hfbm90aWZ5KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpOworCitpbnQgYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZShzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSAgICBzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3EsCisJCQkJICAgIHN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgaW50IGxlbmd0aCwKKwkJCQkgICAgaW50IGVudHJ5X3NpemUpOworCitpbnQgYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLCB1MzIgcGFnZV9vZmZzZXQsCisJCQkJdTMyIG51bV9wYWdlcyk7CisKK2ludCBiZV9jbWRfd3JicV9jcmVhdGUoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwgc3RydWN0IGJlX2RtYV9tZW0gKnFfbWVtLAorCQkgICAgICAgc3RydWN0IGJlX3F1ZXVlX2luZm8gKndyYnEpOworCitzdHJ1Y3QgYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGFtYXBfYmVfZGVmYXVsdF9wZHVfY29udGV4dCB7CisJdTggZGJ1Zl9jaW5kZXhbMTNdOwkvKiBkd29yZCAwICovCisJdTggcnN2ZDBbM107CQkvKiBkd29yZCAwICovCisJdTggcmluZ19zaXplWzRdOwkvKiBkd29yZCAwICovCisJdTggcmluZ19zdGF0ZVs0XTsJLyogZHdvcmQgMCAqLworCXU4IHJzdmQxWzhdOwkJLyogZHdvcmQgMCAqLworCXU4IGRidWZfcGluZGV4WzEzXTsJLyogZHdvcmQgMSAqLworCXU4IHJzdmQyOwkJLyogZHdvcmQgMSAqLworCXU4IHBjaV9mdW5jX2lkWzhdOwkvKiBkd29yZCAxICovCisJdTggcnhfcGRpZFs5XTsJCS8qIGR3b3JkIDEgKi8KKwl1OCByeF9wZGlkX3ZhbGlkOwkvKiBkd29yZCAxICovCisJdTggZGVmYXVsdF9idWZmZXJfc2l6ZVsxNl07CS8qIGR3b3JkIDIgKi8KKwl1OCBjcV9pZF9yZWN2WzEwXTsJLyogZHdvcmQgMiAqLworCXU4IHJ4X3BkaWRfbm90X3ZhbGlkOwkvKiBkd29yZCAyICovCisJdTggcnN2ZDNbNV07CQkvKiBkd29yZCAyICovCisJdTggcnN2ZDRbMzJdOwkJLyogZHdvcmQgMyAqLworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3JlcSB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MTYgbnVtX3BhZ2VzOworCXU4IHVscF9udW07CisJdTggcnN2ZDA7CisJc3RydWN0IGJlX2RlZmF1bHRfcGR1X2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgcGh5c19hZGRyIHBhZ2VzWzhdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2RlZnFfY3JlYXRlX3Jlc3AgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGlkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9wb3N0X3NnbF9wYWdlc19yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1MTYgcGFnZV9vZmZzZXQ7CisJdTMyIHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbMjZdOworCXUzMiByc3ZkMTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV93cmJxX2NyZWF0ZV9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IG51bV9wYWdlczsKKwl1OCB1bHBfbnVtOworCXU4IHJzdmQwOworCXN0cnVjdCBwaHlzX2FkZHIgcGFnZXNbOF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfd3JicV9jcmVhdGVfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciByZXNwX2hkcjsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgU09MX0NJRF9NQVNLCQkweDAwMDBGRkMwCisjZGVmaW5lIFNPTF9DT0RFX01BU0sJCTB4MDAwMDAwM0YKKyNkZWZpbmUgU09MX1dSQl9JTkRFWF9NQVNLCTB4MDBGRjAwMDAKKyNkZWZpbmUgU09MX0NNRF9XTkRfTUFTSwkweEZGMDAwMDAwCisjZGVmaW5lIFNPTF9SRVNfQ05UX01BU0sJMHg3RkZGRkZGRgorI2RlZmluZSBTT0xfRVhQX0NNRF9TTl9NQVNLCTB4RkZGRkZGRkYKKyNkZWZpbmUgU09MX0hXX1NUU19NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNPTF9TVFNfTUFTSwkJMHgwMDAwRkYwMAorI2RlZmluZSBTT0xfUkVTUF9NQVNLCQkweDAwRkYwMDAwCisjZGVmaW5lIFNPTF9GTEFHU19NQVNLCQkweDdGMDAwMDAwCisjZGVmaW5lIFNPTF9TX01BU0sJCTB4ODAwMDAwMDAKKworc3RydWN0IHNvbF9jcWUgeworCXUzMiBkd1s0XTsKK307CisKK3N0cnVjdCBhbWFwX3NvbF9jcWUgeworCXU4IGh3X3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3N0c1s4XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX3Jlc3BbOF07CQkvKiBkd29yZCAwICovCisJdTggaV9mbGFnc1s3XTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBzOwkJCS8qIGR3b3JkIDAgKi8KKwl1OCBpX2V4cF9jbWRfc25bMzJdOwkvKiBkd29yZCAxICovCisJdTggY29kZVs2XTsJCS8qIGR3b3JkIDIgKi8KKwl1OCBjaWRbMTBdOwkJLyogZHdvcmQgMiAqLworCXU4IHdyYl9pbmRleFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfY21kX3duZFs4XTsJLyogZHdvcmQgMiAqLworCXU4IGlfcmVzX2NudFszMV07CS8qIGR3b3JkIDMgKi8KKwl1OCB2YWxpZDsJCS8qIGR3b3JkIDMgKi8KK30gX19wYWNrZWQ7CisKKworLyoqCisgKiBQb3N0IFdSQiBRdWV1ZSBEb29yYmVsbCBSZWdpc3RlciB1c2VkIGJ5IHRoZSBob3N0IFN0b3JhZ2UKKyAqIHN0YWNrIHRvIG5vdGlmeSB0aGUKKyAqIGNvbnRyb2xsZXIgb2YgYSBwb3N0ZWQgV29yayBSZXF1ZXN0IEJsb2NrCisgKi8KKyNkZWZpbmUgREJfV1JCX1BPU1RfQ0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSwkweEZGCS8qIGJpdHMgMCAtIDkgKi8KKworI2RlZmluZSBEQl9ERUZfUERVX1dSQl9JTkRFWF9TSElGVAkxNgorI2RlZmluZSBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQJMjQKKworc3RydWN0IGZyYWdudW1fYml0c19mb3Jfc2dsX2NyYV9pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2JpdHM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaXNjc2lfY2xlYW51cF9yZXEgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTE2IGNodXRlOworCXU4IGhkcl9yaW5nX2lkOworCXU4IGRhdGFfcmluZ19pZDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGVxX2RlbGF5IHsKKwl1MzIgZXFfaWQ7CisJdTMyIHBoYXNlOworCXUzMiBkZWxheV9tdWx0aXBsaWVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX2VxX2RlbGF5X3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1MzIgbnVtX2VxOworCXN0cnVjdCBlcV9kZWxheSBkZWxheVs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCB7CisJdTE2IHNpemVfb2Zfc3RydWN0dXJlOworCXU4IHJlc2VydmVkOworCXU4IGlwX3R5cGU7CisJdTggaXBfYWRkcmVzc1sxNl07CisJdTMyIHJzdmQwOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF9jb25uZWN0X2FuZF9vZmZsb2FkX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBpcF9hZGRyZXNzX2Zvcm1hdCBpcF9hZGRyZXNzOworCXUxNiB0Y3BfcG9ydDsKKwl1MTYgY2lkOworCXUxNiBjcV9pZDsKKwl1MTYgZGVmcV9pZDsKKwlzdHJ1Y3QgcGh5c19hZGRyIGRhdGFvdXRfdGVtcGxhdGVfcGE7CisJdTE2IGhkcl9yaW5nX2lkOworCXUxNiBkYXRhX3JpbmdfaWQ7CisJdTggZG9fb2ZmbG9hZDsKKwl1OCByc3ZkMFszXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgeworCXN0cnVjdCBiZV9jbWRfcmVzcF9oZHIgaGRyOworCXUzMiBjb25uZWN0aW9uX2hhbmRsZTsKKwl1MTYgY2lkOworCXUxNiByc3ZkMDsKKworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21jY193cmJfY29udGV4dCB7CisJc3RydWN0IE1DQ19XUkIgKndyYjsKKwlpbnQgKnVzZXJzX2ZpbmFsX3N0YXR1czsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgREJfREVGX1BEVV9SSU5HX0lEX01BU0sJCTB4M0ZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfTUFTSwkJMHgzRkZGCS8qIGJpdHMgMCAtIDkgKi8KKyNkZWZpbmUgREJfREVGX1BEVV9SRUFSTV9TSElGVAkJMTQKKyNkZWZpbmUgREJfREVGX1BEVV9FVkVOVF9TSElGVAkJMTUKKyNkZWZpbmUgREJfREVGX1BEVV9DUVBST0NfU0hJRlQJCTE2CisKK3N0cnVjdCBkbXNnX2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUxNiBpZDsKKwl1MTYgdXBsb2FkX3R5cGU7CisJdTMyIHJlc2V0X3NlcTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0Y3BfdXBsb2FkX3BhcmFtc19vdXQgeworCXUzMiBkd1szMl07Cit9IF9fcGFja2VkOworCit1bmlvbiB0Y3BfdXBsb2FkX3BhcmFtcyB7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX291dCByZXNwb25zZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV91bHBfZndfY2ZnIHsKKwl1MzIgdWxwX21vZGU7CisJdTMyIGV0eF9iYXNlOworCXUzMiBldHhfY291bnQ7CisJdTMyIHNxX2Jhc2U7CisJdTMyIHNxX2NvdW50OworCXUzMiBycV9iYXNlOworCXUzMiBycV9jb3VudDsKKwl1MzIgZHFfYmFzZTsKKwl1MzIgZHFfY291bnQ7CisJdTMyIGxyb19iYXNlOworCXUzMiBscm9fY291bnQ7CisJdTMyIGljZF9iYXNlOworCXUzMiBpY2RfY291bnQ7Cit9OworCitzdHJ1Y3QgYmVfZndfY2ZnIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXUzMiBiZV9jb25maWdfbnVtYmVyOworCXUzMiBhc2ljX3JldmlzaW9uOworCXUzMiBwaHlzX3BvcnQ7CisJdTMyIGZ1bmN0aW9uX21vZGU7CisJc3RydWN0IGJlX3VscF9md19jZmcgdWxwWzJdOworCXUzMiBmdW5jdGlvbl9jYXBzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFICAxCisjZGVmaW5lIElTQ1NJX09QQ09ERV9TQ1NJX0RBVEFfT1VUICAgICAgNQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX1RDUF9DT05ORUNUX0FORF9PRkZMT0FEIDcwCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX09GRkxPQURfU0VTU0lPTiA0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX01PRElGWV9FUV9ERUxBWQk0MQorI2RlZmluZSBPUENPREVfQ09NTU9OX0lTQ1NJX0NMRUFOVVAJNTkKKyNkZWZpbmUJT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FECTU2CisjZGVmaW5lIE9QQ09ERV9DT01NT05fSVNDU0lfRVJST1JfUkVDT1ZFUllfSU5WQUxJREFURV9DT01NQU5EUyAxCisvKiAtLS0gQ01EX0lTQ1NJX0lOVkFMSURBVEVfQ09OTkVDVElPTl9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfSVNDU0lfQ09OTkVDVElPTl9JTlZBTElEQVRFIDEKKyNkZWZpbmUgQ01EX0lTQ1NJX0NPTk5FQ1RJT05fSVNTVUVfVENQX1JTVCAyCisjZGVmaW5lIE9QQ09ERV9JU0NTSV9JTklfRFJJVkVSX0lOVkFMSURBVEVfQ09OTkVDVElPTiA0MgorCisjZGVmaW5lIElOSV9XUl9DTUQJCQkxCS8qIEluaXRpYXRvciB3cml0ZSBjb21tYW5kICovCisjZGVmaW5lIElOSV9UTUZfQ01ECQkJMgkvKiBJbml0aWF0b3IgVE1GIGNvbW1hbmQgKi8KKyNkZWZpbmUgSU5JX05PUE9VVF9DTUQJCQkzCS8qIEluaXRpYXRvcjsgU2VuZCBhIE5PUC1PVVQgKi8KKyNkZWZpbmUgSU5JX1JEX0NNRAkJCTUJLyogSW5pdGlhdG9yIHJlcXVlc3RpbmcgdG8gc2VuZAorCQkJCQkJICogYSByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfQ1RYX1VQRFRfQ01ECQk3CS8qIFRhcmdldCBjb250ZXh0IHVwZGF0ZSAqLworI2RlZmluZSBUR1RfU1RTX0NNRAkJCTgJLyogVGFyZ2V0IFIyVCBhbmQgb3RoZXIgQkhTCisJCQkJCQkgKiB3aGVyZSBvbmx5IHRoZSBzdGF0dXMgbnVtYmVyCisJCQkJCQkgKiBuZWVkIHRvIGJlIHVwZGF0ZWQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfREFUQUlOX0NNRAkJCTkJLyogVGFyZ2V0IERhdGEtSW5zIGluIHJlc3BvbnNlCisJCQkJCQkgKiB0byByZWFkIGNvbW1hbmQKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfU09TX1BEVQkJCTEwCS8qIFRhcmdldDpzdGFuZGFsb25lIHN0YXR1cworCQkJCQkJICogcmVzcG9uc2UKKwkJCQkJCSAqLworI2RlZmluZSBUR1RfRE1fQ01ECQkJMTEJLyogSW5kaWNhdGVzIHRoYXQgdGhlIGJocworCQkJCQkJICogIHByZXBhcmVkYnkKKwkJCQkJCSAqIGRyaXZlciBzaG91bGQgbm90IGJlIHRvdWNoZWQKKwkJCQkJCSAqLworLyogLS0tIENNRF9DSFVURV9UWVBFIC0tLSAqLworI2RlZmluZSBDTURfQ09OTkVDVElPTl9DSFVURV8wCQkxCisjZGVmaW5lIENNRF9DT05ORUNUSU9OX0NIVVRFXzEJCTIKKyNkZWZpbmUgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMgkJMworCisjZGVmaW5lIEVRX01BSk9SX0NPREVfQ09NUExFVElPTgkwCisKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fREVMX0NGR19GUk9NX0ZMQVNIIDAKKyNkZWZpbmUgQ01EX0lTQ1NJX1NFU1NJT05fU0FWRV9DRkdfT05fRkxBU0ggMQorCisvKiAtLS0gQ09OTkVDVElPTl9VUExPQURfUEFSQU1TIC0tLSAqLworLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdXBsb2FkIGRlc2lyZWQuICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9HUkFDRUZVTCAgICAgIDEJLyogR3JhY2VmdWwgdXBsb2FkICAqLworI2RlZmluZSBDT05ORUNUSU9OX1VQTE9BRF9BQk9SVF9SRVNFVCAgIDIJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGgKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlQJCTMJLyogQWJvcnRpdmUgdXBsb2FkIHdpdGhvdXQKKwkJCQkJCSAqIHJlc2V0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ09OTkVDVElPTl9VUExPQURfQUJPUlRfV0lUSF9TRVEgNAkvKiBBYm9ydGl2ZSB1cGxvYWQgd2l0aCByZXNldCwKKwkJCQkJCSAqIHNlcXVlbmNlIG51bWJlciBieSBkcml2ZXIgICovCisKKy8qIFJldHVybnMgYnl0ZSBzaXplIG9mIGdpdmVuIGZpZWxkIHdpdGggYSBzdHJ1Y3R1cmUuICovCisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZmllbGQgYXJyYXkuICovCisjZGVmaW5lIEJFX05VTUJFUl9PRl9GSUVMRChfdHlwZV8sIF9maWVsZF8pCVwKKwkoRklFTERfU0laRU9GKF90eXBlXywgX2ZpZWxkXykvc2l6ZW9mKCgoKF90eXBlXyAqKTApLT5fZmllbGRfWzBdKSkpXAorCisvKioKKyAqIERpZmZlcmVudCB0eXBlcyBvZiBpU0NTSSBjb21wbGV0aW9ucyB0byBob3N0IGRyaXZlciBmb3IgYm90aCBpbml0aWF0b3IKKyAqIGFuZCB0YWdldCBtb2RlCisgKiBvZiBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgU09MX0NNRF9DT01QTEVURQkJMQkvKiBTb2xpY2l0ZWQgY29tbWFuZCBjb21wbGV0ZWQKKwkJCQkJCSAqIG5vcm1hbGx5CisJCQkJCQkgKi8KKyNkZWZpbmUgU09MX0NNRF9LSUxMRURfREFUQV9ESUdFU1RfRVJSICAyCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogaW52YWxpZGF0ZWQgaW50ZXJuYWxseSBkdWUKKwkJCQkJCSAqIHRvIERhdGEgRGlnZXN0IGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9QRFVfU0laRV9FWENFRURTX0RTTCAzCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5CisJCQkJCQkgKiBkdWUgdG8gYSByZWNpZXZlZCBQRFUKKwkJCQkJCSAqIHNpemUgPiBEU0wKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0JVUlNUX0xFTl9NSVNNQVRDSCAgIDQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRpIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgc2VxdWVuY2Ugc2l6ZSA+CisJCQkJCQkgKiBGQkwvTUJMLgorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfQUhTX1JDVkQJCTUJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIFBEVSBIZHIgdGhhdCBoYXMKKwkJCQkJCSAqIEFIUyAqLworI2RlZmluZSBDWE5fS0lMTEVEX0hEUl9ESUdFU1RfRVJSCTYJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIEhkciBEaWdlc3QKKwkJCQkJCSAqIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTktOT1dOX0hEUgkJNwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogIGludGVybmFsbHkKKwkJCQkJCSAqIGR1ZSB0byBhIGJhZCBvcGNvZGUgaW4gdGhlCisJCQkJCQkgKiBwZHUgaGRyCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TVEFMRV9JVFRfVFRUX1JDVkQJOAkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYSByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB0aGF0IGRvZXMgbm90IGJlbG9uZworCQkJCQkJICogdG8gdGhpcyBDb25uZWN0aW9uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTlZBTElEX0lUVF9UVFRfUkNWRCA5CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpZXZlZAorCQkJCQkJICogSVRUL1RUVCB2YWx1ZSA+IE1heAorCQkJCQkJICogU3VwcG9ydGVkIElUVHMvVFRUcworCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfUlNUX1JDVkQJCTEwCS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVENQIFJTVAorCQkJCQkJICovCisjZGVmaW5lIENYTl9LSUxMRURfVElNRURfT1VUCQkxMQkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gdGltZW91dCBvbgorCQkJCQkJICogdGNwIHNlZ21lbnQgMTIgcmV0cmFuc21pdAorCQkJCQkJICogYXR0ZW1wdHMgZmFpbGVkCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9SU1RfU0VOVAkJMTIJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIFRDUCBSU1QKKwkJCQkJCSAqIHNlbnQgYnkgdGhlIFR4IHNpZGUKKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0ZJTl9SQ1ZECQkxMwkvKiBDb25uZWN0aW9uIGdvdCBpbnZhbGlkYXRlZAorCQkJCQkJICogaW50ZXJuYWxseSBkdWUgdG8gYW4KKwkJCQkJCSAqIGluY29taW5nIFRDUCBGSU4uCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfVU5TT0xfUERVX1JDVkQJMTQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGJhZAorCQkJCQkJICogdW5zb2xpY2l0ZWQgUERVIFVuc29saWNpdGVkCisJCQkJCQkgKiBQRFVzIGFyZSBQRFVzIHdpdGgKKwkJCQkJCSAqIElUVD0weGZmZmZmZmZmCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9CQURfV1JCX0lOREVYX0VSUk9SCTE1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBiYWQgV1JCCisJCQkJCQkgKiBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX09WRVJfUlVOX1JFU0lEVUFMCTE2CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byByZWNpdmVkCisJCQkJCQkgKiBjb21tYW5kIGhhcyByZXNpZHVhbAorCQkJCQkJICogb3ZlciBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9VTkRFUl9SVU5fUkVTSURVQUwJMTcJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2l2ZWQKKwkJCQkJCSAqIGNvbW1hbmQgaGFzIHJlc2lkdWFsIHVuZGVyCisJCQkJCQkgKiBydW4gYnl0ZXMuCisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0tJTExFRF9JTlZBTElEX1NUQVRTTl9SQ1ZECTE4CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhIHJlY2lldmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgU3RhdHVzU04KKwkJCQkJCSAqLworI2RlZmluZSBDTURfS0lMTEVEX0lOVkFMSURfUjJUX1JDVkQJMTkJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGEgcmVjaWV2ZWQKKwkJCQkJCSAqIGFuIFIyVCB3aXRoIHNvbWUgaW52YWxpZAorCQkJCQkJICogZmllbGRzIGluIGl0CisJCQkJCQkgKi8KKyNkZWZpbmUgQ01EX0NYTl9LSUxMRURfTFVOX0lOVkFMSUQJMjAJLyogQ29tbWFuZCBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIHJlY2VpdmVkCisJCQkJCQkgKiBQRFUgaGFzIGFuIGludmFsaWQgTFVOLgorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElECTIxCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byB0aGUKKwkJCQkJCSAqIGNvcnJlc3BvbmRpbmcgSUNEIG5vdCBpbiBhCisJCQkJCQkgKiB2YWxpZCBzdGF0ZQorCQkJCQkJICovCisjZGVmaW5lIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElECTIyCS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkIGR1ZQorCQkJCQkJICogIHRvIHJlY2VpdmVkIFBEVSBoYXMgYW4KKwkJCQkJCSAqICBpbnZhbGlkIElUVC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9TRVFfT1VUT0ZPUkRFUgkyMwkvKiBDb21tYW5kIGdvdCBpbnZhbGlkYXRlZCBkdWUKKwkJCQkJCSAqIHRvIHJlY2VpdmVkIHNlcXVlbmNlIGJ1ZmZlcgorCQkJCQkJICogb2Zmc2V0IGlzIG91dCBvZiBvcmRlci4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfQ1hOX0tJTExFRF9JTlZBTElEX0RBVEFTTl9SQ1ZEIDI0CS8qIENvbW1hbmQgZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhCisJCQkJCQkgKiByZWNpZXZlZCBQRFUgaGFzIGFuIGludmFsaWQKKwkJCQkJCSAqIERhdGFTTgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX05PVElGWQkJMjUJLyogQ29ubmVjdGlvbiBpbnZhbGlkYXRpb24KKwkJCQkJCSAqIGNvbXBsZXRpb24gbm90aWZ5LgorCQkJCQkJICovCisjZGVmaW5lIENYTl9JTlZBTElEQVRFX0lOREVYX05PVElGWQkyNgkvKiBDb25uZWN0aW9uIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbgorCQkJCQkJICogd2l0aCBkYXRhIFBEVSBpbmRleC4KKwkJCQkJCSAqLworI2RlZmluZSBDTURfSU5WQUxJREFURURfTk9USUZZCQkyNwkvKiBDb21tYW5kIGludmFsaWRhdGlvbgorCQkJCQkJICogY29tcGxldGlvbm5vdGlmaWZ5LgorCQkJCQkJICovCisjZGVmaW5lIFVOU09MX0hEUl9OT1RJRlkJCTI4CS8qIFVuc29saWNpdGVkIGhlYWRlciBub3RpZnkuKi8KKyNkZWZpbmUgVU5TT0xfREFUQV9OT1RJRlkJCTI5CS8qIFVuc29saWNpdGVkIGRhdGEgbm90aWZ5LiovCisjZGVmaW5lIFVOU09MX0RBVEFfRElHRVNUX0VSUk9SX05PVElGWSAJMzAJLyogVW5zb2xpY2l0ZWQgZGF0YSBkaWdlc3QKKwkJCQkJCSAqIGVycm9yIG5vdGlmeS4KKwkJCQkJCSAqLworI2RlZmluZSBEUklWRVJNU0dfTk9USUZZCQkzMQkvKiBUQ1AgYWNrbm93bGVkZ2UgYmFzZWQKKwkJCQkJCSAqIG5vdGlmaWNhdGlvbi4KKwkJCQkJCSAqLworI2RlZmluZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OIDMyIC8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgICogaW50ZXJuYWxseSBkdWUgdG8gY29tbWFuZAorCQkJCQkJICAqIGFuZCBkYXRhIGFyZSBub3Qgb24gc2FtZQorCQkJCQkJICAqIGNvbm5lY3Rpb24uCisJCQkJCQkgICovCisjZGVmaW5lIFNPTF9DTURfS0lMTEVEX0RJRl9FUlIJCTMzCS8qIFNvbGljaXRlZCBjb21tYW5kIGdvdAorCQkJCQkJICogIGludmFsaWRhdGVkIGludGVybmFsbHkgZHVlCisJCQkJCQkgKiAgdG8gRElGIGVycm9yCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9TWU5fUkNWRAkJMzQJLyogQ29ubmVjdGlvbiBnb3QgaW52YWxpZGF0ZWQKKwkJCQkJCSAqIGludGVybmFsbHkgZHVlIHRvIGluY29taW5nCisJCQkJCQkgKiBUQ1AgU1lOCisJCQkJCQkgKi8KKyNkZWZpbmUgQ1hOX0tJTExFRF9JTU1fREFUQV9SQ1ZECTM1CS8qIENvbm5lY3Rpb24gZ290IGludmFsaWRhdGVkCisJCQkJCQkgKiBpbnRlcm5hbGx5IGR1ZSB0byBhbgorCQkJCQkJICogaW5jb21pbmcgVW5zb2xpY2l0ZWQgUERVCisJCQkJCQkgKiB0aGF0IGhhcyBpbW1lZGlhdGUgZGF0YSBvbgorCQkJCQkJICogdGhlIGN4bgorCQkJCQkJICovCisKK3ZvaWQgYmVfd3JiX2hkcl9wcmVwYXJlKHN0cnVjdCBiZV9tY2Nfd3JiICp3cmIsIGludCBwYXlsb2FkX2xlbiwKKwkJCWJvb2wgZW1iZWRkZWQsIHU4IHNnZV9jbnQpOworCit2b2lkIGJlX2NtZF9oZHJfcHJlcGFyZShzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgKnJlcV9oZHIsCisJCQl1OCBzdWJzeXN0ZW0sIHU4IG9wY29kZSwgaW50IGNtZF9sZW4pOworCisjZW5kaWYgLyogIUJFSVNDU0lfQ01EU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9pc2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZDI1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuYwpAQCAtMCwwICsxLDYzOCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisKKyNpbmNsdWRlICJiZV9pc2NzaS5oIgorCitleHRlcm4gc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydDsKKworLyoqCisgKiBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlIC0gY3JlYXRlcyBhIG5ldyBpc2NzaSBzZXNzaW9uCisgKiBAY21kc19tYXg6IG1heCBjb21tYW5kcyBzdXBwb3J0ZWQKKyAqIEBxZGVwdGg6IG1heCBxdWV1ZSBkZXB0aCBzdXBwb3J0ZWQKKyAqIEBpbml0aWFsX2NtZHNuOiBpbml0aWFsIGlzY3NpIENNRFNOCisgKi8KK3N0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJCQkJIHUxNiBjbWRzX21heCwKKwkJCQkJCSB1MTYgcWRlcHRoLAorCQkJCQkJIHUzMiBpbml0aWFsX2NtZHNuKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqY2xzX3Nlc3Npb247CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9zZXNzaW9uX2NyZWF0ZVxuIik7CisKKwlpZiAoIWVwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgImJlaXNjc2lfc2Vzc2lvbl9jcmVhdGU6IGludmFsaWQgZXAgXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlzaG9zdCA9IHBoYmEtPnNob3N0OworCWlmIChjbWRzX21heCA+IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBzaG9zdCwgIkNhbm5vdCBoYW5kbGUgJWQgY21kcy4iCisJCQkgICAgICJNYXggY21kcyBwZXIgc2Vzc2lvbiBzdXBwb3J0ZWQgaXMgJWQuIFVzaW5nICVkLiAiCisJCQkgICAgICJcbiIsIGNtZHNfbWF4LAorCQkJICAgICAgYmVpc2NzaV9lcC0+cGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biwKKwkJCSAgICAgIGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCQljbWRzX21heCA9IGJlaXNjc2lfZXAtPnBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47CisJfQorCisJIGNsc19zZXNzaW9uID0gaXNjc2lfc2Vzc2lvbl9zZXR1cCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQsCisJCQkJCSAgIHNob3N0LCBjbWRzX21heCwKKwkJCQkJICAgc2l6ZW9mKCpiZWlzY3NpX3Nlc3MpLAorCQkJCQkgICBzaXplb2YoKmlvX3Rhc2spLAorCQkJCQkgICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKKwlpZiAoIWNsc19zZXNzaW9uKQorCQlyZXR1cm4gTlVMTDsKKwlzZXNzID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CisJYmVpc2NzaV9zZXNzID0gc2Vzcy0+ZGRfZGF0YTsKKwliZWlzY3NpX3Nlc3MtPmJoc19wb29sID0gIHBjaV9wb29sX2NyZWF0ZSgiYmVpc2NzaV9iaHNfcG9vbCIsCisJCQkJCQkgICBwaGJhLT5wY2lkZXYsCisJCQkJCQkgICBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpLAorCQkJCQkJICAgNjQsIDApOworCWlmICghYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCkKKwkJZ290byBkZXN0cm95X3Nlc3M7CisKKwlyZXR1cm4gY2xzX3Nlc3Npb247CitkZXN0cm95X3Nlc3M6CisJaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihjbHNfc2Vzc2lvbik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3kgLSBkZXN0cm95cyBpc2NzaSBzZXNzaW9uCisgKiBAY2xzX3Nlc3Npb246CXBvaW50ZXIgdG8gaXNjc2kgY2xzIHNlc3Npb24KKyAqCisgKiBEZXN0cm95cyBpU0NTSSBzZXNzaW9uIGluc3RhbmNlIGFuZCByZWxlYXNlcworICogcmVzb3VyY2VzIGFsbG9jYXRlZCBmb3IgaXQuCisgKi8KK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3Npb24gKmJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisKKwlwY2lfcG9vbF9kZXN0cm95KGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wpOworCWlzY3NpX3Nlc3Npb25fdGVhcmRvd24oY2xzX3Nlc3Npb24pOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9jcmVhdGUgLSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgaXNjc2kgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwdHIgdG8gaXNjc2lfY2xzX3Nlc3Npb24KKyAqIEBjaWQ6IGlzY3NpIGNpZAorICovCitzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKgorYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmNsc19zZXNzaW9uLCB1MzIgY2lkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubjsKKwlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubjsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2VzczsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3M7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2Nvbm5fY3JlYXRlICxjaWQiCisJCSAiZnJvbSBpc2NzaSBsYXllcj0lZFxuIiwgY2lkKTsKKwlzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3QoY2xzX3Nlc3Npb24pOworCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCisJY2xzX2Nvbm4gPSBpc2NzaV9jb25uX3NldHVwKGNsc19zZXNzaW9uLCBzaXplb2YoKmJlaXNjc2lfY29ubiksIGNpZCk7CisJaWYgKCFjbHNfY29ubikKKwkJcmV0dXJuIE5VTEw7CisKKwljb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwliZWlzY3NpX2Nvbm4tPmVwID0gTlVMTDsKKwliZWlzY3NpX2Nvbm4tPnBoYmEgPSBwaGJhOworCWJlaXNjc2lfY29ubi0+Y29ubiA9IGNvbm47CisJc2VzcyA9IGNsc19zZXNzaW9uLT5kZF9kYXRhOworCWJlaXNjc2lfc2VzcyA9IHNlc3MtPmRkX2RhdGE7CisJYmVpc2NzaV9jb25uLT5iZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX3Nlc3M7CisJcmV0dXJuIGNsc19jb25uOworfQorCisvKioKKyAqIGJlaXNjc2lfYmluZGNvbm5fY2lkIC0gQmluZCB0aGUgYmVpc2NzaV9jb25uIHdpdGggcGhiYSBjb25uZWN0aW9uIHRhYmxlCisgKiBAYmVpc2NzaV9jb25uOiBUaGUgcG9pbnRlciB0byAgYmVpc2NzaV9jb25uIHN0cnVjdHVyZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2JpbmRjb25uX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCXVuc2lnbmVkIGludCBjaWQpCit7CisJaWYgKHBoYmEtPmNvbm5fdGFibGVbY2lkXSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgIkNvbm5lY3Rpb24gdGFibGUgYWxyZWFkeSBvY2N1cGllZC4gRGV0ZWN0ZWQgY2xhc2hcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5jb25uX3RhYmxlWyVkXT0lcChiZWlzY3NpX2Nvbm4pIFxuIiwKKwkJCSBjaWQsIGJlaXNjc2lfY29ubik7CisJCXBoYmEtPmNvbm5fdGFibGVbY2lkXSA9IGJlaXNjc2lfY29ubjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX2JpbmQgLSBCaW5kcyBpc2NzaSBzZXNzaW9uL2Nvbm5lY3Rpb24gd2l0aCBUQ1AgY29ubmVjdGlvbgorICogQGNsc19zZXNzaW9uOiBwb2ludGVyIHRvIGlzY3NpIGNscyBzZXNzaW9uCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEB0cmFuc3BvcnRfZmQ6IEVQIGhhbmRsZSg2NCBiaXQpCisgKgorICogVGhpcyBmdW5jdGlvbiBiaW5kcyB0aGUgVENQIENvbm4gd2l0aCBpU0NTSSBDb25uZWN0aW9uIGFuZCBTZXNzaW9uLgorICovCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdTY0IHRyYW5zcG9ydF9mZCwgaW50IGlzX2xlYWRpbmcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0KKwkJKHN0cnVjdCBTY3NpX0hvc3QgKilpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX2JpbmRcbiIpOworCWVwID0gaXNjc2lfbG9va3VwX2VuZHBvaW50KHRyYW5zcG9ydF9mZCk7CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisKKwlpZiAoaXNjc2lfY29ubl9iaW5kKGNsc19zZXNzaW9uLCBjbHNfY29ubiwgaXNfbGVhZGluZykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJlaXNjc2lfZXAtPnBoYmEgIT0gcGhiYSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImJlaXNjc2lfZXAtPmhiYT0lcCBub3QgZXF1YWwgdG8gcGhiYT0lcCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+cGhiYSwgcGhiYSk7CisJCXJldHVybiAtRUVYSVNUOworCX0KKworCWJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCA9IGJlaXNjc2lfZXAtPmVwX2NpZDsKKwliZWlzY3NpX2Nvbm4tPmVwID0gYmVpc2NzaV9lcDsKKwliZWlzY3NpX2VwLT5jb25uID0gYmVpc2NzaV9jb25uOworCVNFX0RFQlVHKERCR19MVkxfOCwgImJlaXNjc2lfY29ubj0lcCBjb25uPSVwIGVwX2NpZD0lZCBcbiIsCisJCSBiZWlzY3NpX2Nvbm4sIGNvbm4sIGJlaXNjc2lfZXAtPmVwX2NpZCk7CisJcmV0dXJuIGJlaXNjc2lfYmluZGNvbm5fY2lkKHBoYmEsIGJlaXNjc2lfY29ubiwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKK30KKworLyoqCisgKiBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtIC0gZ2V0IHRoZSBpc2NzaSBwYXJhbWV0ZXIKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBpc2NzaSBjbHMgY29ubgorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaXNjc2kgcGFyYW1ldGVyCisgKi8KK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCWludCBsZW4gPSAwOworCisJYmVpc2NzaV9lcCA9IGJlaXNjc2lfY29ubi0+ZXA7CisJaWYgKCFiZWlzY3NpX2VwKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiSW4gYmVpc2NzaV9jb25uX2dldF9wYXJhbSAsIG5vIGJlaXNjc2lfZXBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgSVNDU0lfUEFSQU1fQ09OTl9QT1JUOgorCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVodVxuIiwgYmVpc2NzaV9lcC0+ZHN0X3RjcHBvcnQpOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX0NPTk5fQUREUkVTUzoKKwkJaWYgKGJlaXNjc2lfZXAtPmlwX3R5cGUgPT0gQkUyX0lQVjQpCisJCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwSTRcbiIsICZiZWlzY3NpX2VwLT5kc3RfYWRkcik7CisJCWVsc2UKKwkJCWxlbiA9IHNwcmludGYoYnVmLCAiJXBJNlxuIiwgJmJlaXNjc2lfZXAtPmRzdDZfYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBpc2NzaV9jb25uX2dldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1Zik7CisJfQorCXJldHVybiBsZW47Cit9CisKK2ludCBiZWlzY3NpX3NldF9wYXJhbShzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkgICAgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNvbm4tPnNlc3Npb247CisJaW50IHJldDsKKworCXJldCA9IGlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogSWYgdXNlcnNwYWNlIHRyaWVkIHRvIHNldCB0aGUgdmFsdWUgdG8gaGlnaGVyIHRoYW4gd2UgY2FuCisJICogc3VwcG9ydCBvdmVycmlkZSBoZXJlLgorCSAqLworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX1BBUkFNX0ZJUlNUX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiA4MTkyKQorCQkJc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPSA4MTkyOworCQlicmVhazsKKwljYXNlIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEg6CisJCWlmIChjb25uLT5tYXhfcmVjdl9kbGVuZ3RoID4gNjU1MzYpCisJCQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gNjU1MzY7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfUEFSQU1fTUFYX0JVUlNUOgorCQlpZiAoc2Vzc2lvbi0+Zmlyc3RfYnVyc3QgPiAyNjIxNDQpCisJCQlzZXNzaW9uLT5maXJzdF9idXJzdCA9IDI2MjE0NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfaG9zdF9wYXJhbSAtIGdldCB0aGUgaXNjc2kgcGFyYW1ldGVyCisgKiBAc2hvc3Q6IHBvaW50ZXIgdG8gc2NzaV9ob3N0IHN0cnVjdHVyZQorICogQHBhcmFtOiBwYXJhbWV0ZXIgdHlwZSBpZGVudGlmaWVyCisgKiBAYnVmOiBidWZmZXIgcG9pbnRlcgorICoKKyAqIHJldHVybnMgaG9zdCBwYXJhbWV0ZXIKKyAqLworaW50IGJlaXNjc2lfZ2V0X2hvc3RfcGFyYW0oc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsCisJCQkgICBlbnVtIGlzY3NpX2hvc3RfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwlpbnQgbGVuID0gMDsKKworCXN3aXRjaCAocGFyYW0pIHsKKwljYXNlIElTQ1NJX0hPU1RfUEFSQU1fSFdBRERSRVNTOgorCQliZV9jbWRfZ2V0X21hY19hZGRyKCZwaGJhLT5jdHJsLCBwaGJhLT5tYWNfYWRkcmVzcyk7CisJCWxlbiA9IHN5c2ZzX2Zvcm1hdF9tYWMoYnVmLCBwaGJhLT5tYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaXNjc2lfaG9zdF9nZXRfcGFyYW0oc2hvc3QsIHBhcmFtLCBidWYpOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9nZXRfc3RhdHMgLSBnZXQgdGhlIGlzY3NpIHN0YXRzCisgKiBAY2xzX2Nvbm46IHBvaW50ZXIgdG8gaXNjc2kgY2xzIGNvbm4KKyAqIEBzdGF0czogcG9pbnRlciB0byBpc2NzaV9zdGF0cyBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGlzY3NpIHN0YXRzCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9nZXRfc3RhdHNcbiIpOworCXN0YXRzLT50eGRhdGFfb2N0ZXRzID0gY29ubi0+dHhkYXRhX29jdGV0czsKKwlzdGF0cy0+cnhkYXRhX29jdGV0cyA9IGNvbm4tPnJ4ZGF0YV9vY3RldHM7CisJc3RhdHMtPmRhdGFvdXRfcGR1cyA9IGNvbm4tPmRhdGFvdXRfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2lyc3BfcGR1cyA9IGNvbm4tPnNjc2lyc3BfcGR1c19jbnQ7CisJc3RhdHMtPnNjc2ljbWRfcGR1cyA9IGNvbm4tPnNjc2ljbWRfcGR1c19jbnQ7CisJc3RhdHMtPmRhdGFpbl9wZHVzID0gY29ubi0+ZGF0YWluX3BkdXNfY250OworCXN0YXRzLT50bWZyc3BfcGR1cyA9IGNvbm4tPnRtZnJzcF9wZHVzX2NudDsKKwlzdGF0cy0+dG1mY21kX3BkdXMgPSBjb25uLT50bWZjbWRfcGR1c19jbnQ7CisJc3RhdHMtPnIydF9wZHVzID0gY29ubi0+cjJ0X3BkdXNfY250OworCXN0YXRzLT5kaWdlc3RfZXJyID0gMDsKKwlzdGF0cy0+dGltZW91dF9lcnIgPSAwOworCXN0YXRzLT5jdXN0b21fbGVuZ3RoID0gMDsKKwlzdHJjcHkoc3RhdHMtPmN1c3RvbVswXS5kZXNjLCAiZWhfYWJvcnRfY250Iik7CisJc3RhdHMtPmN1c3RvbVswXS52YWx1ZSA9IGNvbm4tPmVoX2Fib3J0X2NudDsKK30KKworLyoqCisgKiBiZWlzY3NpX3NldF9wYXJhbXNfZm9yX29mZmxkIC0gZ2V0IHRoZSBwYXJhbWV0ZXJzIGZvciBvZmZsb2FkCisgKiBAYmVpc2NzaV9jb25uOiBwb2ludGVyIHRvIGJlaXNjc2lfY29ubgorICogQHBhcmFtczogcG9pbnRlciB0byBvZmZsb2FkX3BhcmFtcyBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgIGJlaXNjc2lfc2V0X3BhcmFtc19mb3Jfb2ZmbGQoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgIHN0cnVjdCBiZWlzY3NpX29mZmxvYWRfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLCBtYXhfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPm1heF9idXJzdCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPm1heF94bWl0X2RsZW5ndGgpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwYXJhbXMsIHNlc3Npb24tPmZpcnN0X2J1cnN0KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGVybCwgcGFyYW1zLAorCQkgICAgICBzZXNzaW9uLT5lcmwpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgZGRlLCBwYXJhbXMsCisJCSAgICAgIGNvbm4tPmRhdGFkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGhkZSwgcGFyYW1zLAorCQkgICAgICBjb25uLT5oZHJkZ3N0X2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGlyMnQsIHBhcmFtcywKKwkJICAgICAgc2Vzc2lvbi0+aW5pdGlhbF9yMnRfZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywgaW1kLCBwYXJhbXMsCisJCSAgICAgIHNlc3Npb24tPmltbV9kYXRhX2VuKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsIGV4cF9zdGF0c24sIHBhcmFtcywKKwkJICAgICAgKGNvbm4tPmV4cF9zdGF0c24gLSAxKSk7Cit9CisKKy8qKgorICogYmVpc2NzaV9jb25uX3N0YXJ0IC0gb2ZmbG9hZCBvZiBzZXNzaW9uIHRvIGNoaXAKKyAqIEBjbHNfY29ubjogcG9pbnRlciB0byBiZWlzY3NpX2Nvbm4KKyAqLworaW50IGJlaXNjc2lfY29ubl9zdGFydChzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uID0gY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyBwYXJhbXM7CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gaXNjc2lfc2Vzc2lvbl90b19zaG9zdChzZXNzaW9uLT5jbHNfc2Vzc2lvbik7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKworCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2Yoc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMpKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApCisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIGJlaXNjc2lfY29ubl9zdGFydCAsIG5vIGJlaXNjc2lfZXBcbiIpOworCisJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZSk7CisJYmVpc2NzaV9jb25uLT5sb2dpbl9pbl9wcm9ncmVzcyA9IDA7CisJYmVpc2NzaV9zZXRfcGFyYW1zX2Zvcl9vZmZsZChiZWlzY3NpX2Nvbm4sICZwYXJhbXMpOworCWJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKGJlaXNjc2lfY29ubiwgJnBhcmFtcyk7CisJaXNjc2lfY29ubl9zdGFydChjbHNfY29ubik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9nZXRfY2lkIC0gQWxsb2NhdGUgYSBjaWQKKyAqIEBwaGJhOiBUaGUgcGhiYSBpbnN0YW5jZQorICovCitzdGF0aWMgaW50IGJlaXNjc2lfZ2V0X2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gMHhGRkZGOworCisJaWYgKCFwaGJhLT5hdmxibF9jaWRzKQorCQlyZXR1cm4gY2lkOworCisJY2lkID0gcGhiYS0+Y2lkX2FycmF5W3BoYmEtPmNpZF9hbGxvYysrXTsKKwlpZiAocGhiYS0+Y2lkX2FsbG9jID09IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsKQorCQlwaGJhLT5jaWRfYWxsb2MgPSAwOworCXBoYmEtPmF2bGJsX2NpZHMtLTsKKwlyZXR1cm4gY2lkOworfQorCisvKioKKyAqIGJlaXNjc2lfb3Blbl9jb25uIC0gQXNrIEZXIHRvIG9wZW4gYSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKiBAc3JjX2FkZHI6IFRoZSBzb3VyY2UgSVAgYWRkcmVzcworICogQGRzdF9hZGRyOiBUaGUgRGVzdGluYXRpb24gIElQIGFkZHJlc3MKKyAqCisgKiBBc2tzIHRoZSBGVyB0byBvcGVuIGEgVENQIGNvbm5lY3Rpb24KKyAqLworc3RhdGljIGludCBiZWlzY3NpX29wZW5fY29ubihzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyY19hZGRyLAorCQkJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLCBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlpbnQgcmV0ID0gLTE7CisKKwliZWlzY3NpX2VwLT5lcF9jaWQgPSBiZWlzY3NpX2dldF9jaWQocGhiYSk7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA9PSAweEZGRkYpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiTm8gZnJlZSBjaWQgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9vcGVuX2Nvbm4sIGVwX2NpZD0lZCAiLAorCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlwaGJhLT5lcF9hcnJheVtiZWlzY3NpX2VwLT5lcF9jaWRdID0gZXA7CisJaWYgKGJlaXNjc2lfZXAtPmVwX2NpZCA+CisJICAgIChwaGJhLT5md19jb25maWcuaXNjc2lfY2lkX3N0YXJ0ICsgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkZhaWxlZCBpbiBhbGxvY2F0ZSBpc2NzaSBjaWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAwOworCXJldHVybiBtZ210X29wZW5fY29ubmVjdGlvbihwaGJhLCBkc3RfYWRkciwgYmVpc2NzaV9lcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV9wdXRfY2lkIC0gRnJlZSB0aGUgY2lkCisgKiBAcGhiYTogVGhlIHBoYmEgZm9yIHdoaWNoIHRoZSBjaWQgaXMgYmVpbmcgZnJlZWQKKyAqIEBjaWQ6IFRoZSBjaWQgdG8gZnJlZQorICovCitzdGF0aWMgdm9pZCBiZWlzY3NpX3B1dF9jaWQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaWQpCit7CisJcGhiYS0+YXZsYmxfY2lkcysrOworCXBoYmEtPmNpZF9hcnJheVtwaGJhLT5jaWRfZnJlZSsrXSA9IGNpZDsKKwlpZiAocGhiYS0+Y2lkX2ZyZWUgPT0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwpCisJCXBoYmEtPmNpZF9mcmVlID0gMDsKK30KKworLyoqCisgKiBiZWlzY3NpX2ZyZWVfZXAgLSBmcmVlIGVuZHBvaW50CisgKiBAZXA6CXBvaW50ZXIgdG8gaXNjc2kgZW5kcG9pbnQgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9lcChzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKworCWJlaXNjc2lfcHV0X2NpZChwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQpOworCWJlaXNjc2lfZXAtPnBoYmEgPSBOVUxMOworCWlzY3NpX2Rlc3Ryb3lfZW5kcG9pbnQoZXApOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfY29ubmVjdCAtIEFzayBjaGlwIHRvIGNyZWF0ZSBUQ1AgQ29ubgorICogQHNjc2lfaG9zdDogUG9pbnRlciB0byBzY3NpX2hvc3Qgc3RydWN0dXJlCisgKiBAZHN0X2FkZHI6IFRoZSBJUCBhZGRyZXNzIG9mIFRhcmdldAorICogQG5vbl9ibG9ja2luZzogYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIGNhbGwKKyAqCisgKiBUaGlzIHJvdXRpbmVzIGZpcnN0IGFza3MgY2hpcCB0byBjcmVhdGUgYSBjb25uZWN0aW9uIGFuZCB0aGVuIGFsbG9jYXRlcyBhbiBFUAorICovCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKgorYmVpc2NzaV9lcF9jb25uZWN0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkgICBpbnQgbm9uX2Jsb2NraW5nKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCAqYmVpc2NzaV9lcDsKKwlzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmVwOworCWludCByZXQ7CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Nvbm5lY3QgXG4iKTsKKwlpZiAoc2hvc3QpCisJCXBoYmEgPSBpc2NzaV9ob3N0X3ByaXYoc2hvc3QpOworCWVsc2UgeworCQlyZXQgPSAtRU5YSU87CisJCVNFX0RFQlVHKERCR19MVkxfMSwgInNob3N0IGlzIE5VTEwgXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwl9CisJZXAgPSBpc2NzaV9jcmVhdGVfZW5kcG9pbnQoc2l6ZW9mKHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50KSk7CisJaWYgKCFlcCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwliZWlzY3NpX2VwLT5waGJhID0gcGhiYTsKKworCWlmIChiZWlzY3NpX29wZW5fY29ubihlcCwgTlVMTCwgZHN0X2FkZHIsIG5vbl9ibG9ja2luZykpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiRmFpbGVkIGluIGFsbG9jYXRlIGlzY3NpIGNpZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9lcDsKKwl9CisKKwlyZXR1cm4gZXA7CisKK2ZyZWVfZXA6CisJYmVpc2NzaV9mcmVlX2VwKGVwKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCisvKioKKyAqIGJlaXNjc2lfZXBfcG9sbCAtIFBvbGwgdG8gc2VlIGlmIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKKyAqIEBlcDoJZW5kcG9pbnQgdG8gYmUgdXNlZAorICogQHRpbWVvdXRfbXM6IHRpbWVvdXQgc3BlY2lmaWVkIGluIG1pbGxpc2VjcworICoKKyAqIFBvbGwgdG8gc2VlIGlmIFRDUCBjb25uZWN0aW9uIGVzdGFibGlzaGVkCisgKi8KK2ludCBiZWlzY3NpX2VwX3BvbGwoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IHRpbWVvdXRfbXMpCit7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluICBiZWlzY3NpX2VwX3BvbGxcbiIpOworCWlmIChiZWlzY3NpX2VwLT5jaWRfdmxkID09IDEpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYmVpc2NzaV9jbG9zZV9jb25uIC0gVXBsb2FkIHRoZSAgY29ubmVjdGlvbgorICogQGVwOiBUaGUgaXNjc2kgZW5kcG9pbnQKKyAqIEBmbGFnOiBUaGUgdHlwZSBvZiBjb25uZWN0aW9uIGNsb3N1cmUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX2Nsb3NlX2Nvbm4oc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwgaW50IGZsYWcpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEgPSBiZWlzY3NpX2VwLT5waGJhOworCisJaWYgKE1HTVRfU1RBVFVTX1NVQ0NFU1MgIT0KKwkgICAgbWdtdF91cGxvYWRfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLT5lcF9jaWQsCisJCUNPTk5FQ1RJT05fVVBMT0FEX0dSQUNFRlVMKSkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJ1cGxvYWQgZmFpbGVkIGZvciBjaWQgMHgleCIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QgLSBUZWFycyBkb3duIHRoZSBUQ1AgY29ubmVjdGlvbgorICogQGVwOgllbmRwb2ludCB0byBiZSB1c2VkCisgKgorICogVGVhcnMgZG93biB0aGUgVENQIGNvbm5lY3Rpb24KKyAqLwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisJc3RydWN0IGJlaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXA7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCWludCBmbGFnID0gMDsKKworCWJlaXNjc2lfZXAgPSBlcC0+ZGRfZGF0YTsKKwlwaGJhID0gYmVpc2NzaV9lcC0+cGhiYTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3RcbiIpOworCisJaWYgKGJlaXNjc2lfZXAtPmNvbm4pIHsKKwkJYmVpc2NzaV9jb25uID0gYmVpc2NzaV9lcC0+Y29ubjsKKwkJaXNjc2lfc3VzcGVuZF9xdWV1ZShiZWlzY3NpX2Nvbm4tPmNvbm4pOworCQliZWlzY3NpX2Nsb3NlX2Nvbm4oZXAsIGZsYWcpOworCX0KKworCWJlaXNjc2lfZnJlZV9lcChlcCk7Cit9CisKKy8qKgorICogYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQgLSBVbmJpbmQgdGhlIGJlaXNjc2lfY29ubiBmcm9tIHBoYmEgY29ubiB0YWJsZQorICogQHBoYmE6IFRoZSBwaGJhIGluc3RhbmNlCisgKiBAY2lkOiBUaGUgY2lkIHRvIGZyZWUKKyAqLworc3RhdGljIGludCBiZWlzY3NpX3VuYmluZF9jb25uX3RvX2NpZChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlpZiAocGhiYS0+Y29ubl90YWJsZVtjaWRdKQorCQlwaGJhLT5jb25uX3RhYmxlW2NpZF0gPSBOVUxMOworCWVsc2UgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJDb25uZWN0aW9uIHRhYmxlIE5vdCBvY2N1cGllZC4gXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGJlaXNjc2lfY29ubl9zdG9wIC0gSW52YWxpZGF0ZSBhbmQgc3RvcCB0aGUgY29ubmVjdGlvbgorICogQGNsc19jb25uOiBwb2ludGVyIHRvIGdldCBpc2NzaV9jb25uCisgKiBAZmxhZzogVGhlIHR5cGUgb2YgY29ubmVjdGlvbiBjbG9zdXJlCisgKi8KK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpCit7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGlzY3NpX3Nlc3Npb25fdG9fc2hvc3Qoc2Vzc2lvbi0+Y2xzX3Nlc3Npb24pOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCk7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcgPSBDTURfSVNDU0lfU0VTU0lPTl9TQVZFX0NGR19PTl9GTEFTSDsKKworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGJlaXNjc2lfY29ubl9zdG9wXG4iKTsKKwliZWlzY3NpX2VwID0gYmVpc2NzaV9jb25uLT5lcDsKKwlpZiAoIWJlaXNjc2lfZXApIHsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiSW4gYmVpc2NzaV9jb25uX3N0b3AgLCBubyBiZWlzY3NpX2VwXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzdGF0dXMgPSBtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbihwaGJhLCBiZWlzY3NpX2VwLAorCQkJCQkgICAgYmVpc2NzaV9lcC0+ZXBfY2lkLCAxLAorCQkJCQkgICAgc2F2ZWNmZ19mbGFnKTsKKwlpZiAoc3RhdHVzICE9IE1HTVRfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLAorCQkJICJtZ210X2ludmFsaWRhdGVfY29ubmVjdGlvbiBGYWlsZWQgZm9yIGNpZD0lZCBcbiIsCisJCQkgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwl9CisJYmVpc2NzaV91bmJpbmRfY29ubl90b19jaWQocGhiYSwgYmVpc2NzaV9lcC0+ZXBfY2lkKTsKKwlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmggYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfaXNjc2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJmZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX2lzY3NpLmgKQEAgLTAsMCArMSw3NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogU2VydmVyRW5naW5lcworICogMjA5IE4uIEZhaXIgT2FrcyBBdmUKKyAqIFN1bm55dmFsZSwgQ0EgOTQwODUKKyAqCisgKi8KKworI2lmbmRlZiBfQkVfSVNDU0lfCisjZGVmaW5lIF9CRV9JU0NTSV8KKworI2luY2x1ZGUgImJlX21haW4uaCIKKyNpbmNsdWRlICJiZV9tZ210LmgiCisKKyNkZWZpbmUgQkUyX0lQVjQgIDB4MQorI2RlZmluZSBCRTJfSVBWNiAgMHgxMAorCit2b2lkIGJlaXNjc2lfb2ZmbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyAqcGFyYW1zKTsKKwordm9pZCBiZWlzY3NpX29mZmxvYWRfaXNjc2koc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwKKwkJCSAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgIHVuc2lnbmVkIGludCBmd19oYW5kbGUpOworCitzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKmJlaXNjc2lfc2Vzc2lvbl9jcmVhdGUoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCwKKwkJCQkJCSB1aW50MTZfdCBjbWRzX21heCwKKwkJCQkJCSB1aW50MTZfdCBxZGVwdGgsCisJCQkJCQkgdWludDMyX3QgaW5pdGlhbF9jbWRzbik7CisKK3ZvaWQgYmVpc2NzaV9zZXNzaW9uX2Rlc3Ryb3koc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbik7CisKK3N0cnVjdCBpc2NzaV9jbHNfY29ubiAqYmVpc2NzaV9jb25uX2NyZWF0ZShzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24KKwkJCQkJICAgKmNsc19zZXNzaW9uLCB1aW50MzJfdCBjaWQpOworCitpbnQgYmVpc2NzaV9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKKwkJICAgICAgc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwKKwkJICAgICAgdWludDY0X3QgdHJhbnNwb3J0X2ZkLCBpbnQgaXNfbGVhZGluZyk7CisKK2ludCBiZWlzY3NpX2Nvbm5fZ2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCQkgICBlbnVtIGlzY3NpX3BhcmFtIHBhcmFtLCBjaGFyICpidWYpOworCitpbnQgYmVpc2NzaV9nZXRfaG9zdF9wYXJhbShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCSAgIGVudW0gaXNjc2lfaG9zdF9wYXJhbSBwYXJhbSwgY2hhciAqYnVmKTsKKworaW50IGJlaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCisJCSAgICAgIGVudW0gaXNjc2lfcGFyYW0gcGFyYW0sIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CisKK2ludCBiZWlzY3NpX2Nvbm5fc3RhcnQoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubik7CisKK3ZvaWQgYmVpc2NzaV9jb25uX3N0b3Aoc3RydWN0IGlzY3NpX2Nsc19jb25uICpjbHNfY29ubiwgaW50IGZsYWcpOworCitzdHJ1Y3QgaXNjc2lfZW5kcG9pbnQgKmJlaXNjc2lfZXBfY29ubmVjdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKKwkJCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJCQkgIGludCBub25fYmxvY2tpbmcpOworCitpbnQgYmVpc2NzaV9lcF9wb2xsKHN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXAsIGludCB0aW1lb3V0X21zKTsKKwordm9pZCBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3Qoc3RydWN0IGlzY3NpX2VuZHBvaW50ICplcCk7CisKK3ZvaWQgYmVpc2NzaV9jb25uX2dldF9zdGF0cyhzdHJ1Y3QgaXNjc2lfY2xzX2Nvbm4gKmNsc19jb25uLAorCQkJICAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmMgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMWFjYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmUyaXNjc2kvYmVfbWFpbi5jCkBAIC0wLDAgKzEsMzM5MCBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFRoZSBmdWxsIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBXcml0dGVuIGJ5OiBKYXlhbW9oYW4gS2FsbGlja2FsIChqYXlhbW9oYW5rQHNlcnZlcmVuZ2luZXMuY29tKQorICoKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiBsaW51eC1kcml2ZXJzQHNlcnZlcmVuZ2luZXMuY29tCisgKgorICogIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKworI2luY2x1ZGUgPHNjc2kvbGliaXNjc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSAiYmVfbWFpbi5oIgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWdtdC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGJlX2lvcG9sbF9idWRnZXQgPSAxMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVfbWF4X3BoeXNfc2l6ZSA9IDY0Oworc3RhdGljIHVuc2lnbmVkIGludCBlbmFibGVfbXNpeDsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKK01PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQyAiICIgQlVJTERfU1RSKTsKK01PRFVMRV9BVVRIT1IoIlNlcnZlckVuZ2luZXMgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9wYXJhbShiZV9pb3BvbGxfYnVkZ2V0LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGVuYWJsZV9tc2l4LCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGJlX21heF9waHlzX3NpemUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhiZV9tYXhfcGh5c19zaXplLCAiTWF4aW11bSBTaXplIChJbiBLaWxvYnl0ZXMpIG9mIHBoeXNpY2FsbHkiCisJCQkJICAgImNvbnRpZ3VvdXMgbWVtb3J5IHRoYXQgY2FuIGJlIGFsbG9jYXRlZC4iCisJCQkJICAgIlJhbmdlIGlzIDE2IC0gMTI4Iik7CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHNkZXYtPnJlcXVlc3RfcXVldWUsIDY1NTM2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYmVpc2NzaV9zaHQgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gIlNlcnZlckVuZ2luZXMgMTBHYmUgb3Blbi1pc2NzaSBJbml0aWF0b3IgRHJpdmVyIiwKKwkucHJvY19uYW1lID0gRFJWX05BTUUsCisJLnF1ZXVlY29tbWFuZCA9IGlzY3NpX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGlzY3NpX2VoX2Fib3J0LAorCS5jaGFuZ2VfcXVldWVfZGVwdGggPSBpc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLnNsYXZlX2NvbmZpZ3VyZSA9IGJlaXNjc2lfc2xhdmVfY29uZmlndXJlLAorCS50YXJnZXRfYWxsb2MgPSBpc2NzaV90YXJnZXRfYWxsb2MsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gaXNjc2lfZWhfZGV2aWNlX3Jlc2V0LAorCS5laF90YXJnZXRfcmVzZXRfaGFuZGxlciA9IGlzY3NpX2VoX3RhcmdldF9yZXNldCwKKwkuc2dfdGFibGVzaXplID0gQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMsCisJLmNhbl9xdWV1ZSA9IEJFMl9JT19ERVBUSCwKKwkudGhpc19pZCA9IC0xLAorCS5tYXhfc2VjdG9ycyA9IEJFSVNDU0lfTUFYX1NFQ1RPUlMsCisJLmNtZF9wZXJfbHVuID0gQkVJU0NTSV9DTURfUEVSX0xVTiwKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKK307CitzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZWlzY3NpX3Njc2lfdHJhbnNwb3J0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0gUENJIERyaXZlciBvcGVyYXRpb25zIGFuZCBkYXRhIC0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYmVpc2NzaV9wY2lfaWRfdGFibGUpID0geworCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIEJFX0RFVklDRV9JRDEpIH0sCisJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMSkgfSwKKwl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQyKSB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlaXNjc2lfcGNpX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBiZWlzY3NpX2hiYSAqYmVpc2NzaV9oYmFfYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisKKwlzaG9zdCA9IGlzY3NpX2hvc3RfYWxsb2MoJmJlaXNjc2lfc2h0LCBzaXplb2YoKnBoYmEpLCAwKTsKKwlpZiAoIXNob3N0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9oYmFfYWxsb2MgLSIKKwkJCSJpc2NzaV9ob3N0X2FsbG9jIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2hvc3QtPmRtYV9ib3VuZGFyeSA9IHBjaWRldi0+ZG1hX21hc2s7CisJc2hvc3QtPm1heF9pZCA9IEJFMl9NQVhfU0VTU0lPTlM7CisJc2hvc3QtPm1heF9jaGFubmVsID0gMDsKKwlzaG9zdC0+bWF4X2NtZF9sZW4gPSBCRUlTQ1NJX01BWF9DTURfTEVOOworCXNob3N0LT5tYXhfbHVuID0gQkVJU0NTSV9OVU1fTUFYX0xVTjsKKwlzaG9zdC0+dHJhbnNwb3J0dCA9IGJlaXNjc2lfc2NzaV90cmFuc3BvcnQ7CisKKwlwaGJhID0gaXNjc2lfaG9zdF9wcml2KHNob3N0KTsKKwltZW1zZXQocGhiYSwgMCwgc2l6ZW9mKCpwaGJhKSk7CisJcGhiYS0+c2hvc3QgPSBzaG9zdDsKKwlwaGJhLT5wY2lkZXYgPSBwY2lfZGV2X2dldChwY2lkZXYpOworCisJaWYgKGlzY3NpX2hvc3RfYWRkKHNob3N0LCAmcGhiYS0+cGNpZGV2LT5kZXYpKQorCQlnb3RvIGZyZWVfZGV2aWNlczsKKwlyZXR1cm4gcGhiYTsKKworZnJlZV9kZXZpY2VzOgorCXBjaV9kZXZfcHV0KHBoYmEtPnBjaWRldik7CisJaXNjc2lfaG9zdF9mcmVlKHBoYmEtPnNob3N0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWlmIChwaGJhLT5jc3JfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5jc3JfdmEpOworCQlwaGJhLT5jc3JfdmEgPSBOVUxMOworCX0KKwlpZiAocGhiYS0+ZGJfdmEpIHsKKwkJaW91bm1hcChwaGJhLT5kYl92YSk7CisJCXBoYmEtPmRiX3ZhID0gTlVMTDsKKwl9CisJaWYgKHBoYmEtPnBjaV92YSkgeworCQlpb3VubWFwKHBoYmEtPnBjaV92YSk7CisJCXBoYmEtPnBjaV92YSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbWFwX3BjaV9iYXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQoreworCXU4IF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDIpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAyKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGhiYS0+Y3RybC5jc3IgPSBhZGRyOworCXBoYmEtPmNzcl92YSA9IGFkZHI7CisJcGhiYS0+Y3NyX3BhLnUuYTY0LmFkZHJlc3MgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCksIDEyOCAqIDEwMjQpOworCWlmIChhZGRyID09IE5VTEwpCisJCWdvdG8gcGNpX21hcF9lcnI7CisJcGhiYS0+Y3RybC5kYiA9IGFkZHI7CisJcGhiYS0+ZGJfdmEgPSBhZGRyOworCXBoYmEtPmRiX3BhLnUuYTY0LmFkZHJlc3MgPSAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgNCk7CisKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpLAorCQkJICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAxKSk7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJZ290byBwY2lfbWFwX2VycjsKKwlwaGJhLT5jdHJsLnBjaWNmZyA9IGFkZHI7CisJcGhiYS0+cGNpX3ZhID0gYWRkcjsKKwlwaGJhLT5wY2lfcGEudS5hNjQuYWRkcmVzcyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDEpOworCXJldHVybiAwOworCitwY2lfbWFwX2VycjoKKwliZWlzY3NpX3VubWFwX3BjaV9mdW5jdGlvbihwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2VuYWJsZV9wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9lbmFibGVfcGNpIC0gZW5hYmxlIGRldmljZSAiCisJCQkiZmFpbGVkLiBSZXR1cm5pbmcgLUVOT0RFVlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXJldCA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkNvdWxkIG5vdCBzZXQgUENJIERNQSBNYXNrXG4iKTsKKwkJCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV9jdHJsX2luaXQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsbG9jID0gJmN0cmwtPm1ib3hfbWVtX2FsbG9jZWQ7CisJc3RydWN0IGJlX2RtYV9tZW0gKm1ib3hfbWVtX2FsaWduID0gJmN0cmwtPm1ib3hfbWVtOworCWludCBzdGF0dXMgPSAwOworCisJY3RybC0+cGRldiA9IHBkZXY7CisJc3RhdHVzID0gYmVpc2NzaV9tYXBfcGNpX2JhcnMocGhiYSwgcGRldik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCW1ib3hfbWVtX2FsbG9jLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCkgKyAxNjsKKwltYm94X21lbV9hbGxvYy0+dmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJCQkJICBtYm94X21lbV9hbGxvYy0+c2l6ZSwKKwkJCQkJCSAgJm1ib3hfbWVtX2FsbG9jLT5kbWEpOworCWlmICghbWJveF9tZW1fYWxsb2MtPnZhKSB7CisJCWJlaXNjc2lfdW5tYXBfcGNpX2Z1bmN0aW9uKHBoYmEpOworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCW1ib3hfbWVtX2FsaWduLT5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tY2NfbWFpbGJveCk7CisJbWJveF9tZW1fYWxpZ24tPnZhID0gUFRSX0FMSUdOKG1ib3hfbWVtX2FsbG9jLT52YSwgMTYpOworCW1ib3hfbWVtX2FsaWduLT5kbWEgPSBQVFJfQUxJR04obWJveF9tZW1fYWxsb2MtPmRtYSwgMTYpOworCW1lbXNldChtYm94X21lbV9hbGlnbi0+dmEsIDAsIHNpemVvZihzdHJ1Y3QgYmVfbWNjX21haWxib3gpKTsKKwlzcGluX2xvY2tfaW5pdCgmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgdm9pZCBiZWlzY3NpX2dldF9wYXJhbXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgPSBCRTJfSU9fREVQVEg7CisJcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgPSBCRTJfTUFYX1NFU1NJT05TOworCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgPSBCRTJfQVNZTkNQRFVTOworCXBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsID0gQkUyX01BWF9JQ0RTIC8gMjsKKwlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gPSBCRTJfU0dFOworCXBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6ID0gQkUyX0RFRlBEVV9IRFJfU1o7CisJcGhiYS0+cGFyYW1zLmRlZnBkdV9kYXRhX3N6ID0gQkUyX0RFRlBEVV9EQVRBX1NaOworCXBoYmEtPnBhcmFtcy5lcV90aW1lciA9IDY0OworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9CisJICAgICgoKEJFMl9DTURTX1BFUl9DWE4gKiAyICsgQkUyX0xPR09VVFMgKyBCRTJfVE1GUyArIEJFMl9BU1lOQ1BEVVMpIC8KKwkJCQkJCQkJNTEyKSArIDEpICogNTEyOworCXBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcyA9IChwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXMgPCAxMDI0KQorCQkJCT8gMTAyNCA6IHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllczsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJwaGJhLT5wYXJhbXMubnVtX2VxX2VudHJpZXM9JWQgXG4iLAorCQkgcGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzKTsKKwlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgPQorCSAgICAoKChCRTJfQ01EU19QRVJfQ1hOICogMiArIEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfQVNZTkNQRFVTKSAvCisJCQkJCQkJCTUxMikgKyAxKSAqIDUxMjsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSJwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXM9JWQgQkUyX0NNRFNfUEVSX0NYTj0lZCIKKwkJIkJFMl9MT0dPVVRTPSVkIEJFMl9UTUZTPSVkIEJFMl9BU1lOQ1BEVVM9JWQgXG4iLAorCQlwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMsIEJFMl9DTURTX1BFUl9DWE4sCisJCUJFMl9MT0dPVVRTLCBCRTJfVE1GUywgQkUyX0FTWU5DUERVUyk7CisJcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biA9IDI1NjsKK30KKworc3RhdGljIHZvaWQgaHdpX3JpbmdfZXFfZGIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgdW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBpbnQgY2xyX2ludGVycnVwdCwKKwkJCSAgIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc2VkLAorCQkJICAgdW5zaWduZWQgY2hhciByZWFybSwgdW5zaWduZWQgY2hhciBldmVudCkKK3sKKwl1MzIgdmFsID0gMDsKKwl2YWwgfD0gaWQgJiBEQl9FUV9SSU5HX0lEX01BU0s7CisJaWYgKHJlYXJtKQorCQl2YWwgfD0gMSA8PCBEQl9FUV9SRUFSTV9TSElGVDsKKwlpZiAoY2xyX2ludGVycnVwdCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfQ0xSX1NISUZUOworCWlmIChldmVudCkKKwkJdmFsIHw9IDEgPDwgREJfRVFfRVZOVF9TSElGVDsKKwl2YWwgfD0gbnVtX3Byb2Nlc3NlZCA8PCBEQl9FUV9OVU1fUE9QUEVEX1NISUZUOworCWlvd3JpdGUzMih2YWwsIHBoYmEtPmRiX3ZhICsgREJfRVFfT0ZGU0VUKTsKK30KKworLyoqCisgKiBiZV9pc3IgLSBUaGUgaXNyIHJvdXRpbmUgb2YgdGhlIGRyaXZlci4KKyAqIEBpcnE6IE5vdCB1c2VkCisgKiBAZGV2X2lkOiBQb2ludGVyIHRvIGhvc3QgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGlycXJldHVybl90IGJlX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX2VxX2VudHJ5ICplcWUgPSBOVUxMOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICplcTsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqY3E7CisJdW5zaWduZWQgbG9uZyBmbGFncywgaW5kZXg7CisJdW5zaWduZWQgaW50IG51bV9lcV9wcm9jZXNzZWQ7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybDsKKwlpbnQgaXNyOworCisJcGhiYSA9IGRldl9pZDsKKwlpZiAoIWVuYWJsZV9tc2l4KSB7CisJCWN0cmwgPSAmcGhiYS0+Y3RybDs7CisJCWlzciA9IGlvcmVhZDMyKGN0cmwtPmNzciArIENFVl9JU1IwX09GRlNFVCArCisJCQkgICAgICAgKFBDSV9GVU5DKGN0cmwtPnBkZXYtPmRldmZuKSAqIENFVl9JU1JfU0laRSkpOworCQlpZiAoIWlzcikKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJaW5kZXggPSAwOworCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJaWYgKCFlcWUpCisJCVNFX0RFQlVHKERCR19MVkxfMSwgImVxZSBpcyBOVUxMXG4iKTsKKworCW51bV9lcV9wcm9jZXNzZWQgPSAwOworCWlmIChibGtfaW9wb2xsX2VuYWJsZWQpIHsKKwkJd2hpbGUgKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksIHZhbGlkKSAvIDMyXQorCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisJCQlpZiAoIWJsa19pb3BvbGxfc2NoZWRfcHJlcCgmcGhiYS0+aW9wb2xsKSkKKwkJCQlibGtfaW9wb2xsX3NjaGVkKCZwaGJhLT5pb3BvbGwpOworCisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJWYWxpZCBFUUVcbiIpOworCQl9CisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsCW51bV9lcV9wcm9jZXNzZWQsIDAsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9IGVsc2UgeworCQl3aGlsZSAoZXFlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQpIC8gMzJdCisJCQkJCQkmIEVRRV9WQUxJRF9NQVNLKSB7CisKKwkJCWlmICgoKGVxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfZXFfZW50cnksCisJCQkgICAgIHJlc291cmNlX2lkKSAvIDMyXSAmCisJCQkgICAgIEVRRV9SRVNJRF9NQVNLKSA+PiAxNikgIT0gY3EtPmlkKSB7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQkJcGhiYS0+dG9kb19tY2NfY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQkJCXBoYmEtPnRvZG9fY3EgPSAxOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBoYmEtPmlzcl9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCwgZXFlLCAwKTsKKwkJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJCWVxZSA9IHF1ZXVlX3RhaWxfbm9kZShlcSk7CisJCQludW1fZXFfcHJvY2Vzc2VkKys7CisJCX0KKwkJaWYgKHBoYmEtPnRvZG9fY3EgfHwgcGhiYS0+dG9kb19tY2NfY3EpCisJCQlxdWV1ZV93b3JrKHBoYmEtPndxLCAmcGhiYS0+d29ya19jcXMpOworCisJCWlmIChudW1fZXFfcHJvY2Vzc2VkKSB7CisJCQlod2lfcmluZ19lcV9kYihwaGJhLCBlcS0+aWQsIDAsIG51bV9lcV9wcm9jZXNzZWQsIDEsIDEpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9IGVsc2UKKwkJCXJldHVybiBJUlFfTk9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9pbml0X2lycXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXYgPSBwaGJhLT5wY2lkZXY7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKHBjaWRldi0+aXJxLCBiZV9pc3IsIElSUUZfU0hBUkVELCAiYmVpc2NzaSIsIHBoYmEpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfaW5pdF9pcnFzLSIKKwkJCSAgICAgIkZhaWxlZCB0byByZWdpc3RlciBpcnFcXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9yaW5nX2NxX2RiKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IG51bV9wcm9jZXNzZWQsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlYXJtLCB1bnNpZ25lZCBjaGFyIGV2ZW50KQoreworCXUzMiB2YWwgPSAwOworCXZhbCB8PSBpZCAmIERCX0NRX1JJTkdfSURfTUFTSzsKKwlpZiAocmVhcm0pCisJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOworCXZhbCB8PSBudW1fcHJvY2Vzc2VkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CisJaW93cml0ZTMyKHZhbCwgcGhiYS0+ZGJfdmEgKyBEQl9DUV9PRkZTRVQpOworfQorCisvKgorICogYXN5bmMgcGR1cyBpbmNsdWRlCisgKiBhLiB1bnNvbGljaXRlZCBOT1AtSW4gKHRhcmdldCBpbml0aWF0ZWQgTk9QLUluKQorICogYi4gQXN5bmMgTWVzc2FnZXMKKyAqIGMuIFJlamVjdCBQRFUKKyAqIGQuIExvZ2luIHJlc3BvbnNlCisgKiBUaGVzZSBoZWFkZXJzIGFycml2ZSB1bnByb2Nlc3NlZCBieSB0aGUgRVAgZmlybXdhcmUgYW5kIGlTQ1NJIGxheWVyCisgKiBwcm9jZXNzIHRoZW0KKyAqLworc3RhdGljIHVuc2lnbmVkIGludAorYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCQkgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSAgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJICBzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHUsCisJCQkgIHVuc2lnbmVkIGxvbmcgcGR1X2xlbiwKKwkJCSAgdm9pZCAqcGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZfbGVuKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXN3aXRjaCAocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIG9wY29kZSkgLyAzMl0gJgorCQkJCQkJUERVQkFTRV9PUENPREVfTUFTSykgeworCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKKwkJcGJ1ZmZlciA9IE5VTEw7CisJCWJ1Zl9sZW4gPSAwOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX0FTWU5DX0VWRU5UOgorCQlicmVhazsKKwljYXNlIElTQ1NJX09QX1JFSkVDVDoKKwkJV0FSTl9PTighcGJ1ZmZlcik7CisJCVdBUk5fT04oIShidWZfbGVuID09IDQ4KSk7CisJCVNFX0RFQlVHKERCR19MVkxfMSwgIkluIElTQ1NJX09QX1JFSkVDVFxuIik7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVucmVjb2duaXplZCBvcGNvZGUgMHgleCBpbiBhc3luYyBtc2cgXG4iLAorCQkJICAgICAocHBkdS0+CisJCQkgICAgIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3BkdV9iYXNlLCBvcGNvZGUpIC8gMzJdCisJCQkJCQkmIFBEVUJBU0VfT1BDT0RFX01BU0spKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKXBwZHUsIHBidWZmZXIsIGJ1Zl9sZW4pOworCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzZ2xfaGFuZGxlICphbGxvY19pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYXZibCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkluIGFsbG9jX2lvX3NnbF9oYW5kbGUsaW9fc2dsX2FsbG9jX2luZGV4PSVkIFxuIiwKKwkJCSBwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXgpOworCQlwc2dsX2hhbmRsZSA9IHBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbcGhiYS0+CisJCQkJCQlpb19zZ2xfYWxsb2NfaW5kZXhdOworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9hbGxvY19pbmRleF0gPSBOVUxMOworCQlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsLS07CisJCWlmIChwaGJhLT5pb19zZ2xfYWxsb2NfaW5kZXggPT0gKHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwgLSAxKSkKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmlvX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCitzdGF0aWMgdm9pZAorZnJlZV9pb19zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKQoreworCVNFX0RFQlVHKERCR19MVkxfOCwgIkluIGZyZWVfLGlvX3NnbF9mcmVlX2luZGV4PSVkIFxuIiwKKwkJIHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4KTsKKwlpZiAocGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0pIHsKKwkJLyoKKwkJICogdGhpcyBjYW4gaGFwcGVuIGlmIGNsZWFuX3Rhc2sgaXMgY2FsbGVkIG9uIGEgdGFzayB0aGF0CisJCSAqIGZhaWxlZCBpbiB4bWl0X3Rhc2sgb3IgYWxsb2NfcGR1LgorCQkgKi8KKwkJIFNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiRG91YmxlIEZyZWUgaW4gSU8gU0dMIGlvX3NnbF9mcmVlX2luZGV4PSVkLCIKKwkJCSAidmFsdWUgdGhlcmU9JXAgXG4iLCBwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCwKKwkJCSBwaGJhLT5pb19zZ2xfaG5kbF9iYXNlW3BoYmEtPmlvX3NnbF9mcmVlX2luZGV4XSk7CisJCXJldHVybjsKKwl9CisJcGhiYS0+aW9fc2dsX2huZGxfYmFzZVtwaGJhLT5pb19zZ2xfZnJlZV9pbmRleF0gPSBwc2dsX2hhbmRsZTsKKwlwaGJhLT5pb19zZ2xfaG5kbF9hdmJsKys7CisJaWYgKHBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID09IChwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0gMSkpCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4ID0gMDsKKwllbHNlCisJCXBoYmEtPmlvX3NnbF9mcmVlX2luZGV4Kys7Cit9CisKKy8qKgorICogYWxsb2Nfd3JiX2hhbmRsZSAtIFRvIGFsbG9jYXRlIGEgd3JiIGhhbmRsZQorICogQHBoYmE6IFRoZSBoYmEgcG9pbnRlcgorICogQGNpZDogVGhlIGNpZCB0byB1c2UgZm9yIGFsbG9jYXRpb24KKyAqIEBpbmRleDogaW5kZXggYWxsb2NhdGlvbiBhbmQgd3JiIGluZGV4CisgKgorICogVGhpcyBoYXBwZW5zIHVuZGVyIHNlc3Npb25fbG9jayB1bnRpbCBzdWJtaXNzaW9uIHRvIGNoaXAKKyAqLworc3RydWN0IHdyYl9oYW5kbGUgKmFsbG9jX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBpbnQgY2lkLAorCQkJCSAgICBpbnQgaW5kZXgpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbY2lkXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtpbmRleF07CisJcHdyYl9oYW5kbGUtPndyYl9pbmRleCA9IGluZGV4OworCXB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4ID0gaW5kZXg7CisJcmV0dXJuIHB3cmJfaGFuZGxlOworfQorCisvKioKKyAqIGZyZWVfd3JiX2hhbmRsZSAtIFRvIGZyZWUgdGhlIHdyYiBoYW5kbGUgYmFjayB0byBwb29sCisgKiBAcGhiYTogVGhlIGhiYSBwb2ludGVyCisgKiBAcHdyYl9jb250ZXh0OiBUaGUgY29udGV4dCB0byBmcmVlIGZyb20KKyAqIEBwd3JiX2hhbmRsZTogVGhlIHdyYl9oYW5kbGUgdG8gZnJlZQorICoKKyAqIFRoaXMgaGFwcGVucyB1bmRlciBzZXNzaW9uX2xvY2sgdW50aWwgc3VibWlzc2lvbiB0byBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitmcmVlX3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQsCisJCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZSkKK3sKKwlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCSAiRlJFRSBXUkI6IHB3cmJfaGFuZGxlPSVwIGZyZWVfaW5kZXg9JWQ9MHgleCIKKwkJICJ3cmJfaGFuZGxlc19hdmFpbGFibGU9JWQgXG4iLAorCQkgcHdyYl9oYW5kbGUsIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwKKwkJIHB3cmJfY29udGV4dC0+ZnJlZV9pbmRleCwgcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUpOworfQorCitzdGF0aWMgc3RydWN0IHNnbF9oYW5kbGUgKmFsbG9jX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlOworCisJaWYgKHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpIHsKKwkJcHNnbF9oYW5kbGUgPSBwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9hbGxvY19pbmRleF07CisJCXBoYmEtPmVoX3NnbF9obmRsX2Jhc2VbcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4XSA9IE5VTEw7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgIm1nbXRfc2dsX2FsbG9jX2luZGV4PSVkPTB4JXggXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCwgcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4KTsKKwkJcGhiYS0+ZWhfc2dsX2huZGxfYXZibC0tOworCQlpZiAocGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID09CisJCSAgICAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLSBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsIC0KKwkJICAgICAxKSkKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCA9IDA7CisJCWVsc2UKKwkJCXBoYmEtPmVoX3NnbF9hbGxvY19pbmRleCsrOworCX0gZWxzZQorCQlwc2dsX2hhbmRsZSA9IE5VTEw7CisJcmV0dXJuIHBzZ2xfaGFuZGxlOworfQorCit2b2lkCitmcmVlX21nbXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsIHN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZSkKK3sKKworCWlmIChwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSkgeworCQkvKgorCQkgKiB0aGlzIGNhbiBoYXBwZW4gaWYgY2xlYW5fdGFzayBpcyBjYWxsZWQgb24gYSB0YXNrIHRoYXQKKwkJICogZmFpbGVkIGluIHhtaXRfdGFzayBvciBhbGxvY19wZHUuCisJCSAqLworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgIkRvdWJsZSBGcmVlIGluIGVoIFNHTCAsZWhfc2dsX2ZyZWVfaW5kZXg9JWQgXG4iLAorCQkJIHBoYmEtPmVoX3NnbF9mcmVlX2luZGV4KTsKKwkJcmV0dXJuOworCX0KKwlwaGJhLT5laF9zZ2xfaG5kbF9iYXNlW3BoYmEtPmVoX3NnbF9mcmVlX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwlpZiAocGhiYS0+ZWhfc2dsX2ZyZWVfaW5kZXggPT0KKwkgICAgKHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC0gcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCAtIDEpKQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJZWxzZQorCQlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCsrOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfaW8oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGJlX3N0YXR1c19iaHMgKnN0c19iaHMgPQorCQkJCShzdHJ1Y3QgYmVfc3RhdHVzX2JocyAqKWlvX3Rhc2stPmNtZF9iaHM7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJdW5zaWduZWQgaW50IHNlbnNlX2xlbjsKKwl1bnNpZ25lZCBjaGFyICpzZW5zZTsKKwl1MzIgcmVzaWQgPSAwLCBleHBfY21kc24sIG1heF9jbWRzbjsKKwl1OCByc3AsIHN0YXR1cywgZmxhZ3M7CisKKwlleHBfY21kc24gPSBiZTMyX3RvX2NwdShwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCSYgU09MX0VYUF9DTURfU05fTUFTSyk7CisJbWF4X2NtZHNuID0gYmUzMl90b19jcHUoKHBzb2wtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9leHBfY21kX3NuKSAvIDMyXQorCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKSArCisJCQkoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfY21kX3duZCkKKwkJCQkvIDMyXSAmIFNPTF9DTURfV05EX01BU0spID4+IDI0KSAtIDEpOworCXJzcCA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvIDMyXQorCQkJCQkJJiBTT0xfUkVTUF9NQVNLKSA+PiAxNik7CisJc3RhdHVzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3N0cykgLyAzMl0KKwkJCQkJCSYgU09MX1NUU19NQVNLKSA+PiA4KTsKKwlmbGFncyA9ICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9mbGFncykgLyAzMl0KKwkJCQkJJiBTT0xfRkxBR1NfTUFTSykgPj4gMjQpIHwgMHg4MDsKKworCXRhc2stPnNjLT5yZXN1bHQgPSAoRElEX09LIDw8IDE2KSB8IHN0YXR1czsKKwlpZiAocnNwICE9IElTQ1NJX1NUQVRVU19DTURfQ09NUExFVEVEKSB7CisJCXRhc2stPnNjLT5yZXN1bHQgPSBESURfRVJST1IgPDwgMTY7CisJCWdvdG8gdW5tYXA7CisJfQorCisJLyogYmlkaSBub3QgaW5pdGlhbGx5IHN1cHBvcnRlZCAqLworCWlmIChmbGFncyAmIChJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cgfCBJU0NTSV9GTEFHX0NNRF9PVkVSRkxPVykpIHsKKwkJcmVzaWQgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvCisJCQkJMzJdICYgU09MX1JFU19DTlRfTUFTSyk7CisKKwkJaWYgKCFzdGF0dXMgJiYgKGZsYWdzICYgSVNDU0lfRkxBR19DTURfT1ZFUkZMT1cpKQorCQkJdGFzay0+c2MtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKworCQlpZiAoZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9VTkRFUkZMT1cpIHsKKwkJCXNjc2lfc2V0X3Jlc2lkKHRhc2stPnNjLCByZXNpZCk7CisJCQlpZiAoIXN0YXR1cyAmJiAoc2NzaV9idWZmbGVuKHRhc2stPnNjKSAtIHJlc2lkIDwKKwkJCSAgICB0YXNrLT5zYy0+dW5kZXJmbG93KSkKKwkJCQl0YXNrLT5zYy0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT04pIHsKKwkJc2Vuc2UgPSBzdHNfYmhzLT5zZW5zZV9pbmZvICsgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKwkJc2Vuc2VfbGVuID0KKwkJICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydCkoc3RzX2Jocy0+c2Vuc2VfaW5mb1swXSkpOworCQltZW1jcHkodGFzay0+c2MtPnNlbnNlX2J1ZmZlciwgc2Vuc2UsCisJCSAgICAgICBtaW5fdCh1MTYsIHNlbnNlX2xlbiwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKSk7CisJfQorCWlmIChpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuZmxhZ3MgJiBJU0NTSV9GTEFHX0NNRF9SRUFEKSB7CisJCWlmIChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc19jbnQpIC8gMzJdCisJCQkJCQkJJiBTT0xfUkVTX0NOVF9NQVNLKQorCQkJIGNvbm4tPnJ4ZGF0YV9vY3RldHMgKz0gKHBzb2wtPgorCQkJICAgICAgZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNfY250KSAvIDMyXQorCQkJCQkJCSYgU09MX1JFU19DTlRfTUFTSyk7CisJfQordW5tYXA6CisJc2NzaV9kbWFfdW5tYXAoaW9fdGFzay0+c2NzaV9jbW5kKTsKKwlpc2NzaV9jb21wbGV0ZV9zY3NpX3Rhc2sodGFzaywgZXhwX2NtZHNuLCBtYXhfY21kc24pOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbG9nb3V0KHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHN0cnVjdCBzb2xfY3FlICpwc29sKQoreworCXN0cnVjdCBpc2NzaV9sb2dvdXRfcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX2xvZ291dF9yc3AgKil0YXNrLT5oZHI7CisJaGRyLT50MndhaXQgPSA1OworCWhkci0+dDJyZXRhaW4gPSAwOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkJCSYgU09MX0ZMQUdTX01BU0spID4+IDI0KSB8IDB4ODA7CisJaGRyLT5yZXNwb25zZSA9IChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX3Jlc3ApIC8KKwkJCQkJMzJdICYgU09MX1JFU1BfTUFTSyk7CisJaGRyLT5leHBfY21kc24gPSBjcHVfdG9fYmUzMihwc29sLT4KKwkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZXhwX2NtZF9zbikgLyAzMl0KKwkJCQkJJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT4KKwkJCSBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2V4cF9jbWRfc24pIC8gMzJdCisJCQkJCSYgU09MX0VYUF9DTURfU05fTUFTSykgKworCQkJKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2NtZF93bmQpCisJCQkJCS8gMzJdICYgU09MX0NNRF9XTkRfTUFTSykgPj4gMjQpIC0gMSk7CisJaGRyLT5obGVuZ3RoID0gMDsKKworCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIChzdHJ1Y3QgaXNjc2lfaGRyICopaGRyLCBOVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JlX2NvbXBsZXRlX3RtZihzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaXNjc2lfdG1fcnNwICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX3RtX3JzcCAqKXRhc2stPmhkcjsKKwloZHItPmZsYWdzID0gKChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBpX2ZsYWdzKSAvIDMyXQorCQkJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+cmVzcG9uc2UgPSAocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9yZXNwKSAvCisJCQkJCTMyXSAmIFNPTF9SRVNQX01BU0spOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwlfX2lzY3NpX2NvbXBsZXRlX3BkdShjb25uLCAoc3RydWN0IGlzY3NpX2hkciAqKWhkciwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfY29tcGxldGVfZHJ2cl9tc2dzKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICAgIHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisJc3RydWN0IGlzY3NpX3Nlc3Npb24gKnNlc3Npb24gPSBjb25uLT5zZXNzaW9uOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0WygocHNvbC0+CisJCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXSAmCisJCQkJU09MX0NJRF9NQVNLKSA+PiA2KV07CisJcHdyYl9oYW5kbGUgPSBwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbKChwc29sLT4KKwkJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCB3cmJfaW5kZXgpIC8KKwkJCQkzMl0gJiBTT0xfV1JCX0lOREVYX01BU0spID4+IDE2KV07CisJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBwd3JiX2hhbmRsZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworfQorCitzdGF0aWMgdm9pZAorYmVfY29tcGxldGVfbm9waW5fcmVzcChzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgICBzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywgc3RydWN0IHNvbF9jcWUgKnBzb2wpCit7CisJc3RydWN0IGlzY3NpX25vcGluICpoZHI7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBiZWlzY3NpX2Nvbm4tPmNvbm47CisKKwloZHIgPSAoc3RydWN0IGlzY3NpX25vcGluICopdGFzay0+aGRyOworCWhkci0+ZmxhZ3MgPSAoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGlfZmxhZ3MpIC8gMzJdCisJCQkmIFNPTF9GTEFHU19NQVNLKSA+PiAyNCkgfCAweDgwOworCWhkci0+ZXhwX2NtZHNuID0gY3B1X3RvX2JlMzIocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGlfZXhwX2NtZF9zbikgLyAzMl0gJiBTT0xfRVhQX0NNRF9TTl9NQVNLKTsKKwloZHItPm1heF9jbWRzbiA9IGJlMzJfdG9fY3B1KChwc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLAorCQkJaV9leHBfY21kX3NuKSAvIDMyXSAmIFNPTF9FWFBfQ01EX1NOX01BU0spICsKKwkJCSgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgaV9jbWRfd25kKQorCQkJLyAzMl0gJiBTT0xfQ01EX1dORF9NQVNLKSA+PiAyNCkgLSAxKTsKKwloZHItPm9wY29kZSA9IElTQ1NJX09QX05PT1BfSU47CisJX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgKHN0cnVjdCBpc2NzaV9oZHIgKiloZHIsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBod2lfY29tcGxldGVfY21kKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29sX2NxZSAqcHNvbCkKK3sKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gYmVpc2NzaV9jb25uLT5jb25uOworCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPgorCQl3cmJfY29udGV4dFsoKHBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0KKwkJJiBTT0xfQ0lEX01BU0spID4+IDYpXTsKKwlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZXN0ZFsoKHBzb2wtPgorCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIHdyYl9pbmRleCkgLworCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpXTsKKworCXRhc2sgPSBwd3JiX2hhbmRsZS0+cGlvX2hhbmRsZTsKKwlpb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCXB3cmIgPSBwd3JiX2hhbmRsZS0+cHdyYjsKKwlzd2l0Y2ggKChwd3JiLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUpIC8gMzJdICYKKwkJIFdSQl9UWVBFX01BU0spID4+IDI4KSB7CisJY2FzZSBIV0hfVFlQRV9JTzoKKwljYXNlIEhXSF9UWVBFX0lPX1JEOgorCQlpZiAoKHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spID09CisJCSAgICBJU0NTSV9PUF9OT09QX09VVCkgeworCQkJYmVfY29tcGxldGVfbm9waW5fcmVzcChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQl9IGVsc2UKKwkJCWJlX2NvbXBsZXRlX2lvKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9MT0dPVVQ6CisJCWJlX2NvbXBsZXRlX2xvZ291dChiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTE9HSU46CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiXHRcdCBObyBIV0hfVFlQRV9MT0dJTiBFeHBlY3RlZCBpbiBod2lfY29tcGxldGVfY21kIgorCQkJICItIFNvbGljaXRlZCBwYXRoIFxuIik7CisJCWJyZWFrOworCisJY2FzZSBIV0hfVFlQRV9UTUY6CisJCWJlX2NvbXBsZXRlX3RtZihiZWlzY3NpX2Nvbm4sIHRhc2ssIHBzb2wpOworCQlicmVhazsKKworCWNhc2UgSFdIX1RZUEVfTk9QOgorCQliZV9jb21wbGV0ZV9ub3Bpbl9yZXNwKGJlaXNjc2lfY29ubiwgdGFzaywgcHNvbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIndyYl9pbmRleCAweCV4IENJRCAweCV4XG4iLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlKSAvCisJCQkJCTMyXSAmIFNPTF9XUkJfSU5ERVhfTUFTSykgPj4gMTYpLAorCQkJICAgICgocHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvIDMyXQorCQkJCQkmIFNPTF9DSURfTUFTSykgPj4gNikpOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0CisJCQkJCSAgKnBhc3luY19jdHgsIHVuc2lnbmVkIGludCBpc19oZWFkZXIsCisJCQkJCSAgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCWlmIChpc19oZWFkZXIpCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLgorCQkgICAgaGVhZGVyX2J1c3lfbGlzdDsKKwllbHNlCisJCXJldHVybiAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaG9zdF93cml0ZV9wdHJdLmRhdGFfYnVzeV9saXN0OworfQorCitzdGF0aWMgc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKgoraHdpX2dldF9hc3luY19oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICAgICBzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkgICAgIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSwgdW5zaWduZWQgaW50ICpwY3FfaW5kZXgpCit7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBoeXNfYWRkcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwYnVzeV9saXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwlpbnQgYnVmZmVyX2xlbiA9IDA7CisJdW5zaWduZWQgY2hhciBidWZmZXJfaW5kZXggPSAtMTsKKwl1bnNpZ25lZCBjaGFyIGlzX2hlYWRlciA9IDA7CisKKwlwaHlzX2FkZHIudS5hMzIuYWRkcmVzc19sbyA9CisJICAgIHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBkYl9hZGRyX2xvKSAvIDMyXSAtCisJICAgICgocGRwZHVfY3FlLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCQkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisJcGh5c19hZGRyLnUuYTMyLmFkZHJlc3NfaGkgPQorCSAgICBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwgZGJfYWRkcl9oaSkgLyAzMl07CisKKwlwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyA9CisJCQkqKCh1bnNpZ25lZCBsb25nIGxvbmcgKikoJnBoeXNfYWRkci51LmE2NC5hZGRyZXNzKSk7CisKKwlzd2l0Y2ggKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLCBjb2RlKSAvIDMyXQorCQkJJiBQRFVDUUVfQ09ERV9NQVNLKSB7CisJY2FzZSBVTlNPTF9IRFJfTk9USUZZOgorCQlpc19oZWFkZXIgPSAxOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCAxLAorCQkJKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKworCQlidWZmZXJfbGVuID0gKHVuc2lnbmVkIGludCkocGh5c19hZGRyLnUuYTY0LmFkZHJlc3MgLQorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5wYV9iYXNlLnUuYTY0LmFkZHJlc3MpOworCisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLworCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5idWZmZXJfc2l6ZTsKKworCQlicmVhazsKKwljYXNlIFVOU09MX0RBVEFfTk9USUZZOgorCQlwYnVzeV9saXN0ID0gaHdpX2dldF9hc3luY19idXN5X2xpc3QocGFzeW5jX2N0eCwgMCwgKHBkcGR1X2NxZS0+CisJCQkJCWR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spKTsKKwkJYnVmZmVyX2xlbiA9ICh1bnNpZ25lZCBsb25nKShwaHlzX2FkZHIudS5hNjQuYWRkcmVzcyAtCisJCQkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LgorCQkJCQlhNjQuYWRkcmVzcyk7CisJCWJ1ZmZlcl9pbmRleCA9IGJ1ZmZlcl9sZW4gLyBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1ZmZlcl9zaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYnVzeV9saXN0ID0gTlVMTDsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkiVW5leHBlY3RlZCBjb2RlPSVkIFxuIiwKKwkJCSBwZHBkdV9jcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2lfdF9kcGR1X2NxZSwKKwkJCQkJY29kZSkgLyAzMl0gJiBQRFVDUUVfQ09ERV9NQVNLKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJV0FSTl9PTighKGJ1ZmZlcl9pbmRleCA8PSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzKSk7CisJV0FSTl9PTihsaXN0X2VtcHR5KHBidXN5X2xpc3QpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhc3luY19oYW5kbGUsIHBidXN5X2xpc3QsIGxpbmspIHsKKwkJV0FSTl9PTihwYXN5bmNfaGFuZGxlLT5jb25zdW1lZCk7CisJCWlmIChwYXN5bmNfaGFuZGxlLT5pbmRleCA9PSBidWZmZXJfaW5kZXgpCisJCQlicmVhazsKKwl9CisKKwlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKworCXBhc3luY19oYW5kbGUtPmNyaSA9ICh1bnNpZ25lZCBzaG9ydCliZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQ7CisJcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyID0gaXNfaGVhZGVyOworCXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW4gPSAoKHBkcGR1X2NxZS0+CisJCQlkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUsIGRwbCkgLyAzMl0KKwkJCSYgUERVQ1FFX0RQTF9NQVNLKSA+PiAxNik7CisKKwkqcGNxX2luZGV4ID0gKHBkcGR1X2NxZS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfaV90X2RwZHVfY3FlLAorCQkJaW5kZXgpIC8gMzJdICYgUERVQ1FFX0lOREVYX01BU0spOworCXJldHVybiBwYXN5bmNfaGFuZGxlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfdXBkYXRlX2FzeW5jX3dyaXRhYmxlcyhzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4LAorCQkJICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGNxX2luZGV4KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBidXN5X2xpc3Q7CisJc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUgKnBhc3luY19oYW5kbGU7CisJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzLCB3cml0YWJsZXMgPSAwOworCXVuc2lnbmVkIGludCAqcGVwX3JlYWRfcHRyLCAqcHdyaXRhYmxlczsKKworCisJaWYgKGlzX2hlYWRlcikgeworCQlwZXBfcmVhZF9wdHIgPSAmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci53cml0YWJsZXM7CisJCW51bV9lbnRyaWVzID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLm51bV9lbnRyaWVzOworCX0gZWxzZSB7CisJCXBlcF9yZWFkX3B0ciA9ICZwYXN5bmNfY3R4LT5hc3luY19kYXRhLmVwX3JlYWRfcHRyOworCQlwd3JpdGFibGVzID0gJnBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzOworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJfQorCisJd2hpbGUgKCgqcGVwX3JlYWRfcHRyKSAhPSBjcV9pbmRleCkgeworCQkoKnBlcF9yZWFkX3B0cikrKzsKKwkJKnBlcF9yZWFkX3B0ciA9ICgqcGVwX3JlYWRfcHRyKSAlIG51bV9lbnRyaWVzOworCisJCXBidXN5X2xpc3QgPSBod2lfZ2V0X2FzeW5jX2J1c3lfbGlzdChwYXN5bmNfY3R4LCBpc19oZWFkZXIsCisJCQkJCQkgICAgICpwZXBfcmVhZF9wdHIpOworCQlpZiAod3JpdGFibGVzID09IDApCisJCQlXQVJOX09OKGxpc3RfZW1wdHkocGJ1c3lfbGlzdCkpOworCisJCWlmICghbGlzdF9lbXB0eShwYnVzeV9saXN0KSkgeworCQkJcGFzeW5jX2hhbmRsZSA9IGxpc3RfZW50cnkocGJ1c3lfbGlzdC0+bmV4dCwKKwkJCQkJCSAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJICAgbGluayk7CisJCQlXQVJOX09OKCFwYXN5bmNfaGFuZGxlKTsKKwkJCXBhc3luY19oYW5kbGUtPmNvbnN1bWVkID0gMTsKKwkJfQorCisJCXdyaXRhYmxlcysrOworCX0KKworCWlmICghd3JpdGFibGVzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRHVwbGljYXRlIG5vdGlmaWNhdGlvbiByZWNlaXZlZCAtIGluZGV4IDB4JXghIVxuIiwKKwkJCSBjcV9pbmRleCk7CisJCVdBUk5fT04oMSk7CisJfQorCisJKnB3cml0YWJsZXMgPSAqcHdyaXRhYmxlcyArIHdyaXRhYmxlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBod2lfZnJlZV9hc3luY19tc2coc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY3JpKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlLCAqdG1wX2hhbmRsZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwbGlzdDsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGxpc3QgID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhc3luY19oYW5kbGUsIHRtcF9oYW5kbGUsIHBsaXN0LCBsaW5rKSB7CisJCWxpc3RfZGVsKCZwYXN5bmNfaGFuZGxlLT5saW5rKTsKKworCQlpZiAoaSA9PSAwKSB7CisJCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGFuZGxlLT5saW5rLAorCQkJCSAgICAgICZwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMrKzsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzKys7CisJCQlpKys7CisJCX0KKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAwOworCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c19hZGRyICoKK2h3aV9nZXRfcmluZ19hZGRyZXNzKHN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHgsCisJCSAgICAgdW5zaWduZWQgaW50IGlzX2hlYWRlciwgdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyKQoreworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2UgPSBOVUxMOworCisJaWYgKGlzX2hlYWRlcikKKwkJcGFzeW5jX3NnZSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5yaW5nX2Jhc2U7CisJZWxzZQorCQlwYXN5bmNfc2dlID0gcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2U7CisKKwlyZXR1cm4gcGFzeW5jX3NnZSArIGhvc3Rfd3JpdGVfcHRyOworfQorCitzdGF0aWMgdm9pZCBod2lfcG9zdF9hc3luY19idWZmZXJzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaXNfaGVhZGVyKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXN0cnVjdCBsaXN0X2hlYWQgKnBmcmVlX2xpbmssICpwYnVzeV9saXN0OworCXN0cnVjdCBwaHlzX2FkZHIgKnBhc3luY19zZ2U7CisJdW5zaWduZWQgaW50IHJpbmdfaWQsIG51bV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBob3N0X3dyaXRlX251bTsKKwl1bnNpZ25lZCBpbnQgd3JpdGFibGVzOworCXVuc2lnbmVkIGludCBpID0gMDsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGFzeW5jX2N0eCA9IEhXSV9HRVRfQVNZTkNfUERVX0NUWChwaHdpX2N0cmxyKTsKKworCWlmIChpc19oZWFkZXIpIHsKKwkJbnVtX2VudHJpZXMgPSBwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzLAorCQkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMpOworCQlwZnJlZV9saW5rID0gcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0cjsKKwkJcmluZ19pZCA9IHBod2lfY3RybHItPmRlZmF1bHRfcGR1X2hkci5pZDsKKwl9IGVsc2UgeworCQludW1fZW50cmllcyA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEubnVtX2VudHJpZXM7CisJCXdyaXRhYmxlcyA9IG1pbihwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcywKKwkJCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcyk7CisJCXBmcmVlX2xpbmsgPSBwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfbGlzdC5uZXh0OworCQlob3N0X3dyaXRlX251bSA9IHBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHI7CisJCXJpbmdfaWQgPSBwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkOworCX0KKworCXdyaXRhYmxlcyA9ICh3cml0YWJsZXMgLyA4KSAqIDg7CisJaWYgKHdyaXRhYmxlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgd3JpdGFibGVzOyBpKyspIHsKKwkJCXBidXN5X2xpc3QgPQorCQkJICAgIGh3aV9nZXRfYXN5bmNfYnVzeV9saXN0KHBhc3luY19jdHgsIGlzX2hlYWRlciwKKwkJCQkJCSAgICBob3N0X3dyaXRlX251bSk7CisJCQlwYXN5bmNfaGFuZGxlID0KKwkJCSAgICBsaXN0X2VudHJ5KHBmcmVlX2xpbmssIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlLAorCQkJCQkJCQlsaW5rKTsKKwkJCVdBUk5fT04oIXBhc3luY19oYW5kbGUpOworCQkJcGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPSAwOworCisJCQlwZnJlZV9saW5rID0gcGZyZWVfbGluay0+bmV4dDsKKworCQkJcGFzeW5jX3NnZSA9IGh3aV9nZXRfcmluZ19hZGRyZXNzKHBhc3luY19jdHgsCisJCQkJCQlpc19oZWFkZXIsIGhvc3Rfd3JpdGVfbnVtKTsKKworCQkJcGFzeW5jX3NnZS0+aGkgPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2xvOworCQkJcGFzeW5jX3NnZS0+bG8gPSBwYXN5bmNfaGFuZGxlLT5wYS51LmEzMi5hZGRyZXNzX2hpOworCisJCQlsaXN0X21vdmUoJnBhc3luY19oYW5kbGUtPmxpbmssIHBidXN5X2xpc3QpOworCisJCQlob3N0X3dyaXRlX251bSsrOworCQkJaG9zdF93cml0ZV9udW0gPSBob3N0X3dyaXRlX251bSAlIG51bV9lbnRyaWVzOworCQl9CisKKwkJaWYgKGlzX2hlYWRlcikgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhvc3Rfd3JpdGVfcHRyID0KKwkJCQkJCQlob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2VudHJpZXMgLT0gd3JpdGFibGVzOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLndyaXRhYmxlcyAtPSB3cml0YWJsZXM7CisJCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfSBlbHNlIHsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuaG9zdF93cml0ZV9wdHIgPSBob3N0X3dyaXRlX251bTsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9lbnRyaWVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEud3JpdGFibGVzIC09IHdyaXRhYmxlczsKKwkJCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVzeV9lbnRyaWVzICs9IHdyaXRhYmxlczsKKwkJfQorCisJCWRvb3JiZWxsIHw9IHJpbmdfaWQgJiBEQl9ERUZfUERVX1JJTkdfSURfTUFTSzsKKwkJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX1JFQVJNX1NISUZUOworCQlkb29yYmVsbCB8PSAwIDw8IERCX0RFRl9QRFVfRVZFTlRfU0hJRlQ7CisJCWRvb3JiZWxsIHw9ICh3cml0YWJsZXMgJiBEQl9ERUZfUERVX0NRUFJPQ19NQVNLKQorCQkJCQk8PCBEQl9ERUZfUERVX0NRUFJPQ19TSElGVDsKKworCQlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfUlhVTFAwX09GRlNFVCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBod2lfZmx1c2hfZGVmYXVsdF9wZHVfYnVmZmVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJCQkJIHN0cnVjdCBpX3RfZHBkdV9jcWUgKnBkcGR1X2NxZSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hhbmRsZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGNxX2luZGV4ID0gLTE7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisJQlVHX09OKHBhc3luY19oYW5kbGUtPmlzX2hlYWRlciAhPSAwKTsKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisKKwlod2lfZnJlZV9hc3luY19tc2cocGhiYSwgcGFzeW5jX2hhbmRsZS0+Y3JpKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2h3aV9md2RfYXN5bmNfbXNnKHN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiwKKwkJICBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCSAgc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eCwgdW5zaWduZWQgc2hvcnQgY3JpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBsaXN0OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlOworCXZvaWQgKnBoZHIgPSBOVUxMOworCXVuc2lnbmVkIGludCBoZHJfbGVuID0gMCwgYnVmX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IHN0YXR1cywgaW5kZXggPSAwLCBvZmZzZXQgPSAwOworCXZvaWQgKnBmaXJzdF9idWZmZXIgPSBOVUxMOworCXVuc2lnbmVkIGludCBudW1fYnVmID0gMDsKKworCXBsaXN0ID0gJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5saXN0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwYXN5bmNfaGFuZGxlLCBwbGlzdCwgbGluaykgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJcGhkciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQloZHJfbGVuID0gcGFzeW5jX2hhbmRsZS0+YnVmZmVyX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWJ1Zl9sZW4gPSBwYXN5bmNfaGFuZGxlLT5idWZmZXJfbGVuOworCQkJaWYgKCFudW1fYnVmKSB7CisJCQkJcGZpcnN0X2J1ZmZlciA9IHBhc3luY19oYW5kbGUtPnBidWZmZXI7CisJCQkJbnVtX2J1ZisrOworCQkJfQorCQkJbWVtY3B5KHBmaXJzdF9idWZmZXIgKyBvZmZzZXQsCisJCQkgICAgICAgcGFzeW5jX2hhbmRsZS0+cGJ1ZmZlciwgYnVmX2xlbik7CisJCQlvZmZzZXQgPSBidWZfbGVuOworCQl9CisJCWluZGV4Kys7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9wcm9jZXNzX2FzeW5jX3BkdShiZWlzY3NpX2Nvbm4sIHBoYmEsCisJCQkJCSAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwKKwkJCQkJICAgcGhkciwgaGRyX2xlbiwgcGZpcnN0X2J1ZmZlciwKKwkJCQkJICAgYnVmX2xlbik7CisKKwlpZiAoc3RhdHVzID09IDApCisJCWh3aV9mcmVlX2FzeW5jX21zZyhwaGJhLCBjcmkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50Citod2lfZ2F0aGVyX2FzeW5jX3BkdShzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCSAgICAgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlKQoreworCXN0cnVjdCBod2lfYXN5bmNfcGR1X2NvbnRleHQgKnBhc3luY19jdHg7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXVuc2lnbmVkIGludCBieXRlc19uZWVkZWQgPSAwLCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIHNob3J0IGNyaSA9IHBhc3luY19oYW5kbGUtPmNyaTsKKwlzdHJ1Y3QgcGR1X2Jhc2UgKnBwZHU7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwYXN5bmNfY3R4ID0gSFdJX0dFVF9BU1lOQ19QRFVfQ1RYKHBod2lfY3RybHIpOworCisJbGlzdF9kZWwoJnBhc3luY19oYW5kbGUtPmxpbmspOworCWlmIChwYXN5bmNfaGFuZGxlLT5pc19oZWFkZXIpIHsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJaHdpX2ZyZWVfYXN5bmNfbXNnKHBoYmEsIGNyaSk7CisJCQlCVUcoKTsKKwkJfQorCisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5ieXRlc19yZWNlaXZlZCA9IDA7CisJCXBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2NyaV0ud2FpdF9xdWV1ZS5oZHJfcmVjZWl2ZWQgPSAxOworCQlwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuaGRyX2xlbiA9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisJCWxpc3RfYWRkX3RhaWwoJnBhc3luY19oYW5kbGUtPmxpbmssCisJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmxpc3QpOworCisJCXBwZHUgPSBwYXN5bmNfaGFuZGxlLT5wYnVmZmVyOworCQlieXRlc19uZWVkZWQgPSAoKCgocHBkdS0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsCisJCQlkYXRhX2xlbl9oaSkgLyAzMl0gJiBQRFVCQVNFX0RBVEFMRU5ISV9NQVNLKSA8PCA4KSAmCisJCQkweEZGRkYwMDAwKSB8ICgoYmUxNl90b19jcHUoKHBwZHUtPgorCQkJZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfcGR1X2Jhc2UsIGRhdGFfbGVuX2xvKSAvIDMyXQorCQkJJiBQRFVCQVNFX0RBVEFMRU5MT19NQVNLKSA+PiAxNikpICYgMHgwMDAwRkZGRikpOworCisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmJ5dGVzX25lZWRlZCA9CisJCQkgICAgYnl0ZXNfbmVlZGVkOworCisJCQlpZiAoYnl0ZXNfbmVlZGVkID09IDApCisJCQkJc3RhdHVzID0gaHdpX2Z3ZF9hc3luY19tc2coYmVpc2NzaV9jb25uLCBwaGJhLAorCQkJCQkJCSAgIHBhc3luY19jdHgsIGNyaSk7CisJCX0KKwl9IGVsc2UgeworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmJ1c3lfZW50cmllcy0tOworCQlpZiAocGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLmhkcl9yZWNlaXZlZCkgeworCQkJbGlzdF9hZGRfdGFpbCgmcGFzeW5jX2hhbmRsZS0+bGluaywKKwkJCQkgICAgICAmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCSAgICAgIGxpc3QpOworCQkJcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbY3JpXS53YWl0X3F1ZXVlLgorCQkJCWJ5dGVzX3JlY2VpdmVkICs9CisJCQkJKHVuc2lnbmVkIHNob3J0KXBhc3luY19oYW5kbGUtPmJ1ZmZlcl9sZW47CisKKwkJCWlmIChwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfcmVjZWl2ZWQgPj0KKwkJCSAgICBwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtjcmldLndhaXRfcXVldWUuCisJCQkgICAgYnl0ZXNfbmVlZGVkKQorCQkJCXN0YXR1cyA9IGh3aV9md2RfYXN5bmNfbXNnKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJCQkgICBwYXN5bmNfY3R4LCBjcmkpOworCQl9CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9wcm9jZXNzX2RlZmF1bHRfcGR1X3Jpbmcoc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJCQkgc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJCQkgc3RydWN0IGlfdF9kcGR1X2NxZSAqcGRwZHVfY3FlKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0ICpwYXN5bmNfY3R4OworCXN0cnVjdCBhc3luY19wZHVfaGFuZGxlICpwYXN5bmNfaGFuZGxlID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgY3FfaW5kZXggPSAtMTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBhc3luY19jdHggPSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aV9jdHJscik7CisJcGFzeW5jX2hhbmRsZSA9IGh3aV9nZXRfYXN5bmNfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubiwgcGFzeW5jX2N0eCwKKwkJCQkJICAgICBwZHBkdV9jcWUsICZjcV9pbmRleCk7CisKKwlpZiAocGFzeW5jX2hhbmRsZS0+Y29uc3VtZWQgPT0gMCkKKwkJaHdpX3VwZGF0ZV9hc3luY193cml0YWJsZXMocGFzeW5jX2N0eCwgcGFzeW5jX2hhbmRsZS0+aXNfaGVhZGVyLAorCQkJCQkgICBjcV9pbmRleCk7CisJaHdpX2dhdGhlcl9hc3luY19wZHUoYmVpc2NzaV9jb25uLCBwaGJhLCBwYXN5bmNfaGFuZGxlKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIHBhc3luY19oYW5kbGUtPmlzX2hlYWRlcik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmVpc2NzaV9wcm9jZXNzX2NxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcTsKKwlzdHJ1Y3Qgc29sX2NxZSAqc29sOworCXN0cnVjdCBkbXNnX2NxZSAqZG1zZzsKKwl1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NlZCA9IDA7CisJdW5zaWduZWQgaW50IHRvdF9udW1wID0gMDsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm47CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlzb2wgPSBxdWV1ZV90YWlsX25vZGUoY3EpOworCisJd2hpbGUgKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQpIC8gMzJdICYKKwkgICAgICAgQ1FFX1ZBTElEX01BU0spIHsKKwkJYmVfZHdzX2xlX3RvX2NwdShzb2wsIHNpemVvZihzdHJ1Y3Qgc29sX2NxZSkpOworCisJCWJlaXNjc2lfY29ubiA9IHBoYmEtPmNvbm5fdGFibGVbKHUzMikgKHNvbC0+CisJCQkJIGR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLyAzMl0gJgorCQkJCSBTT0xfQ0lEX01BU0spID4+IDZdOworCisJCWlmICghYmVpc2NzaV9jb25uIHx8ICFiZWlzY3NpX2Nvbm4tPmVwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJDb25uZWN0aW9uIHRhYmxlIGVtcHR5IGZvciBjaWQgPSAlZFxuIiwKKwkJCQkgICAgICh1MzIpKHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwKKwkJCQkgICAgIGNpZCkgLyAzMl0gJiBTT0xfQ0lEX01BU0spID4+IDYpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAobnVtX3Byb2Nlc3NlZCA+PSAzMikgeworCQkJaHdpX3JpbmdfY3FfZGIocGhiYSwgcGh3aV9jb250ZXh0LT5iZV9jcS5pZCwKKwkJCQkJbnVtX3Byb2Nlc3NlZCwgMCwgMCk7CisJCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQkJbnVtX3Byb2Nlc3NlZCA9IDA7CisJCX0KKworCQlzd2l0Y2ggKCh1MzIpIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJMzJdICYgQ1FFX0NPREVfTUFTSykgeworCQljYXNlIFNPTF9DTURfQ09NUExFVEU6CisJCQlod2lfY29tcGxldGVfY21kKGJlaXNjc2lfY29ubiwgcGhiYSwgc29sKTsKKwkJCWJyZWFrOworCQljYXNlIERSSVZFUk1TR19OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJSZWNlaXZlZCBEUklWRVJNU0dfTk9USUZZIFxuIik7CisJCQlkbXNnID0gKHN0cnVjdCBkbXNnX2NxZSAqKXNvbDsKKwkJCWh3aV9jb21wbGV0ZV9kcnZyX21zZ3MoYmVpc2NzaV9jb25uLCBwaGJhLCBzb2wpOworCQkJYnJlYWs7CisJCWNhc2UgVU5TT0xfSERSX05PVElGWToKKwkJY2FzZSBVTlNPTF9EQVRBX05PVElGWToKKwkJCVNFX0RFQlVHKERCR19MVkxfOCwgIlJlY2VpdmVkIFVOU09MX0hEUi9EQVRBX05PVElGWVxuIik7CisJCQlod2lfcHJvY2Vzc19kZWZhdWx0X3BkdV9yaW5nKGJlaXNjc2lfY29ubiwgcGhiYSwKKwkJCQkJICAgICAoc3RydWN0IGlfdF9kcGR1X2NxZSAqKXNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9JTkRFWF9OT1RJRlk6CisJCWNhc2UgQ01EX0lOVkFMSURBVEVEX05PVElGWToKKwkJY2FzZSBDWE5fSU5WQUxJREFURV9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJJZ25vcmluZyBDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC9jeG4iCisJCQkJICJpbnZhbGlkYXRlXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNPTF9DTURfS0lMTEVEX0RBVEFfRElHRVNUX0VSUjoKKwkJY2FzZSBDTURfS0lMTEVEX0lOVkFMSURfU1RBVFNOX1JDVkQ6CisJCWNhc2UgQ01EX0tJTExFRF9JTlZBTElEX1IyVF9SQ1ZEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0xVTl9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lDRF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lUVF9JTlZBTElEOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX1NFUV9PVVRPRk9SREVSOgorCQljYXNlIENNRF9DWE5fS0lMTEVEX0lOVkFMSURfREFUQVNOX1JDVkQ6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJDUSBFcnJvciBub3RpZmljYXRpb24gZm9yIGNtZC4uICIKKwkJCQkgImNvZGUgJWQgY2lkIDB4JXhcbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSAoc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjaWQpIC8KKwkJCQkgMzJdICYgU09MX0NJRF9NQVNLKSk7CisJCQlicmVhazsKKwkJY2FzZSBVTlNPTF9EQVRBX0RJR0VTVF9FUlJPUl9OT1RJRlk6CisJCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkJICJEaWdlc3QgZXJyb3Igb24gZGVmIHBkdSByaW5nLCBkcm9wcGluZy4uXG4iKTsKKwkJCWh3aV9mbHVzaF9kZWZhdWx0X3BkdV9idWZmZXIocGhiYSwgYmVpc2NzaV9jb25uLAorCQkJCQkgICAgIChzdHJ1Y3QgaV90X2RwZHVfY3FlICopIHNvbCk7CisJCQlicmVhazsKKwkJY2FzZSBDWE5fS0lMTEVEX1BEVV9TSVpFX0VYQ0VFRFNfRFNMOgorCQljYXNlIENYTl9LSUxMRURfQlVSU1RfTEVOX01JU01BVENIOgorCQljYXNlIENYTl9LSUxMRURfQUhTX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9IRFJfRElHRVNUX0VSUjoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOS05PV05fSERSOgorCQljYXNlIENYTl9LSUxMRURfU1RBTEVfSVRUX1RUVF9SQ1ZEOgorCQljYXNlIENYTl9LSUxMRURfSU5WQUxJRF9JVFRfVFRUX1JDVkQ6CisJCWNhc2UgQ1hOX0tJTExFRF9USU1FRF9PVVQ6CisJCWNhc2UgQ1hOX0tJTExFRF9GSU5fUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9VTlNPTF9QRFVfUkNWRDoKKwkJY2FzZSBDWE5fS0lMTEVEX0JBRF9XUkJfSU5ERVhfRVJST1I6CisJCWNhc2UgQ1hOX0tJTExFRF9PVkVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX1VOREVSX1JVTl9SRVNJRFVBTDoKKwkJY2FzZSBDWE5fS0lMTEVEX0NNTkRfREFUQV9OT1RfT05fU0FNRV9DT05OOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0dGluZyBDSUQgIgorCQkJCSAiMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlpc2NzaV9jb25uX2ZhaWx1cmUoYmVpc2NzaV9jb25uLT5jb25uLAorCQkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOworCQkJYnJlYWs7CisJCWNhc2UgQ1hOX0tJTExFRF9SU1RfU0VOVDoKKwkJY2FzZSBDWE5fS0lMTEVEX1JTVF9SQ1ZEOgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgJWQsIHJlc2V0IHJlY2VpdmVkL3NlbnQgIgorCQkJCSAib24gQ0lEIDB4JXguLi5cbiIsCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY29kZSkgLworCQkJCSAzMl0gJiBDUUVfQ09ERV9NQVNLLAorCQkJCSBzb2wtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX3NvbF9jcWUsIGNpZCkgLworCQkJCSAzMl0gJiBDUUVfQ0lEX01BU0spOworCQkJaXNjc2lfY29ubl9mYWlsdXJlKGJlaXNjc2lfY29ubi0+Y29ubiwKKwkJCQkJICAgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJU0VfREVCVUcoREJHX0xWTF8xLCAiQ1EgRXJyb3IgSW52YWxpZCBjb2RlPSAlZCAiCisJCQkJICJyZWNlaXZlZCBvbiBDSUQgMHgleC4uLlxuIiwKKwkJCQkgc29sLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9zb2xfY3FlLCBjb2RlKSAvCisJCQkJIDMyXSAmIENRRV9DT0RFX01BU0ssCisJCQkJIHNvbC0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfc29sX2NxZSwgY2lkKSAvCisJCQkJIDMyXSAmIENRRV9DSURfTUFTSyk7CisJCQlicmVhazsKKwkJfQorCisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfc29sX2NxZSwgdmFsaWQsIHNvbCwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGNxKTsKKwkJc29sID0gcXVldWVfdGFpbF9ub2RlKGNxKTsKKwkJbnVtX3Byb2Nlc3NlZCsrOworCX0KKworCWlmIChudW1fcHJvY2Vzc2VkID4gMCkgeworCQl0b3RfbnVtcCArPSBudW1fcHJvY2Vzc2VkOworCQlod2lfcmluZ19jcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2NxLmlkLCBudW1fcHJvY2Vzc2VkLAorCQkJICAgICAgIDEsIDApOworCX0KKwlyZXR1cm4gdG90X251bXA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcHJvY2Vzc19hbGxfY3FzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmVpc2NzaV9oYmEsIHdvcmtfY3FzKTsKKworCWlmIChwaGJhLT50b2RvX21jY19jcSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJcGhiYS0+dG9kb19tY2NfY3EgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJNQ0MgSW50ZXJydXB0IE5vdCBleHBlY3RlZCBcbiIpOworCX0KKworCWlmIChwaGJhLT50b2RvX2NxKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwaGJhLT5pc3JfbG9jaywgZmxhZ3MpOworCQlwaGJhLT50b2RvX2NxID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGhiYS0+aXNyX2xvY2ssIGZsYWdzKTsKKwkJYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCX0KK30KKworc3RhdGljIGludCBiZV9pb3BvbGwoc3RydWN0IGJsa19pb3BvbGwgKmlvcCwgaW50IGJ1ZGdldCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IHJldDsKKwlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmE7CisKKwlwaGJhID0gY29udGFpbmVyX29mKGlvcCwgc3RydWN0IGJlaXNjc2lfaGJhLCBpb3BvbGwpOworCisJcmV0ID0gYmVpc2NzaV9wcm9jZXNzX2NxKHBoYmEpOworCWlmIChyZXQgPCBidWRnZXQpIHsKKwkJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisKKwkJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwkJYmxrX2lvcG9sbF9jb21wbGV0ZShpb3ApOworCQlod2lfcmluZ19lcV9kYihwaGJhLCBwaHdpX2NvbnRleHQtPmJlX2VxLnEuaWQsIDAsCisJCQkJCQkJMCwgMSwgMSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfd3JpdGVfc2dsKHN0cnVjdCBpc2NzaV93cmIgKnB3cmIsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJICAgICAgdW5zaWduZWQgaW50IG51bV9zZywgc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzaykKK3sKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwc2dsOworCXVuc2lnbmVkIHNob3J0IHNnX2xlbiwgaW5kZXg7CisJdW5zaWduZWQgaW50IHNnZV9sZW4gPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqbF9zZzsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2xvLCBwd3JiLAorCQkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2xvKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgaXNjc2lfYmhzX2FkZHJfaGksIHB3cmIsCisJCQkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCisJbF9zZyA9IHNnOworCWZvciAoaW5kZXggPSAwOyAoaW5kZXggPCBudW1fc2cpICYmIChpbmRleCA8IDIpOyBpbmRleCsrLCBzZ19uZXh0KHNnKSkgeworCQlpZiAoaW5kZXggPT0gMCkgeworCQkJc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7CisJCQlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2FkZHJfaGksIHB3cmIsCisJCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xlbiwgcHdyYiwKKwkJCQkJCQlzZ19sZW4pOworCQkJc2dlX2xlbiA9IHNnX2xlbjsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UwX2xhc3QsIHB3cmIsCisJCQkJCQkJMSk7CisJCX0gZWxzZSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9sYXN0LCBwd3JiLAorCQkJCQkJCTApOworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTFfcjJ0X29mZnNldCwKKwkJCQkJCQlwd3JiLCBzZ2VfbGVuKTsKKwkJCXNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCQkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2UxX2FkZHJfbG8sIHB3cmIsCisJCQkJCQkJKGFkZHIgJiAweEZGRkZGRkZGKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9hZGRyX2hpLCBwd3JiLAorCQkJCQkJCShhZGRyID4+IDMyKSk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sZW4sIHB3cmIsCisJCQkJCQkJc2dfbGVuKTsKKwkJfQorCX0KKwlwc2dsID0gKHN0cnVjdCBpc2NzaV9zZ2UgKilpb190YXNrLT5wc2dsX2hhbmRsZS0+cGZyYWc7CisJbWVtc2V0KHBzZ2wsIDAsIHNpemVvZigqcHNnbCkgKiBCRTJfU0dFKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4gLSAyKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfaGkpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2xvLCBwc2dsLAorCQkJaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCisJaWYgKG51bV9zZyA9PSAyKQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMV9sYXN0LCBwd3JiLCAxKTsKKwlzZyA9IGxfc2c7CisJcHNnbCsrOworCXBzZ2wrKzsKKwlvZmZzZXQgPSAwOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG51bV9zZzsgaW5kZXgrKywgc2dfbmV4dChzZyksIHBzZ2wrKykgeworCQlzZ19sZW4gPSBzZ19kbWFfbGVuKHNnKTsKKwkJYWRkciA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCQkJCQkoYWRkciA+PiAzMikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCBzZ19sZW4pOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgb2Zmc2V0KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGxhc3Rfc2dlLCBwc2dsLCAwKTsKKwkJb2Zmc2V0ICs9IHNnX2xlbjsKKwl9CisJcHNnbC0tOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV93cml0ZV9idWZmZXIoc3RydWN0IGlzY3NpX3dyYiAqcHdyYiwgc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGlzY3NpX3NnZSAqcHNnbDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBpb190YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX25vbmlvX2JocykgLSAyOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBpc2NzaV9iaHNfYWRkcl9sbywgcHdyYiwKKwkJCQlpb190YXNrLT5iaHNfcGEudS5hMzIuYWRkcmVzc19sbyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGlzY3NpX2Joc19hZGRyX2hpLCBwd3JiLAorCQkJCWlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKworCWlmICh0YXNrLT5kYXRhKSB7CisJCWlmICh0YXNrLT5kYXRhX2NvdW50KSB7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJCWFkZHIgPSAodTY0KSBwY2lfbWFwX3NpbmdsZShwaGJhLT5wY2lkZXYsCisJCQkJCQkgICAgdGFzay0+ZGF0YSwKKwkJCQkJCSAgICB0YXNrLT5kYXRhX2NvdW50LCAxKTsKKwkJfSBlbHNlIHsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCQkJYWRkciA9IDA7CisJCX0KKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfYWRkcl9sbywgcHdyYiwKKwkJCQkJCShhZGRyICYgMHhGRkZGRkZGRikpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dlMF9hZGRyX2hpLCBwd3JiLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGVuLCBwd3JiLAorCQkJCQkJdGFzay0+ZGF0YV9jb3VudCk7CisKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHNnZTBfbGFzdCwgcHdyYiwgMSk7CisJfSBlbHNlIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIGRzcCwgcHdyYiwgMCk7CisJCWFkZHIgPSAwOworCX0KKworCXBzZ2wgPSAoc3RydWN0IGlzY3NpX3NnZSAqKWlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5wZnJhZzsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIGlvX3Rhc2stPmJoc19sZW4pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsCisJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTMyLmFkZHJlc3NfbG8pOworCWlmICh0YXNrLT5kYXRhKSB7CisJCXBzZ2wrKzsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfaGksIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsZW4sIHBzZ2wsIDApOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgc2dlX29mZnNldCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCByc3ZkMCwgcHNnbCwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMCk7CisKKwkJcHNnbCsrOworCQlpZiAodGFzay0+ZGF0YSkgeworCQkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UsIGFkZHJfbG8sIHBzZ2wsCisJCQkJCQkoYWRkciAmIDB4RkZGRkZGRkYpKTsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwc2dsLAorCQkJCQkJKGFkZHIgPj4gMzIpKTsKKwkJfQorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgbGVuLCBwc2dsLCAweDEwNik7CisJfQorCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBsYXN0X3NnZSwgcHNnbCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZmluZF9tZW1fcmVxKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2NxX3BhZ2VzLCBudW1fZXFfcGFnZXMsIG51bV9hc3luY19wZHVfYnVmX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMsIHdyYl9zel9wZXJfY3huOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9zZ2xfcGFnZXMsIG51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXM7CisKKwludW1fY3FfcGFnZXMgPSBQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMubnVtX2NxX2VudHJpZXMgKiBcCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb2xfY3FlKSk7CisJbnVtX2VxX3BhZ2VzID0gUEFHRVNfUkVRVUlSRUQocGhiYS0+cGFyYW1zLm51bV9lcV9lbnRyaWVzICogXAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmVfZXFfZW50cnkpKTsKKwludW1fYXN5bmNfcGR1X2J1Zl9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2hkcl9zeik7CisJbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGh5c19hZGRyKSk7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3BhZ2VzID0KKwkJCVBBR0VTX1JFUVVJUkVEKHBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBcCisJCQkJICAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfZGF0YV9zeik7CisJbnVtX2FzeW5jX3BkdV9kYXRhX3NnbF9wYWdlcyA9CisJCQlQQUdFU19SRVFVSVJFRChwaGJhLT5wYXJhbXMuYXN5bmNwZHVzX3Blcl9jdHJsICogXAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcikpOworCisJcGhiYS0+cGFyYW1zLmh3aV93c19zeiA9IHNpemVvZihzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIpOworCisJcGhiYS0+bWVtX3JlcVtJU0NTSV9NRU1fR0xPQkFMX0hFQURFUl0gPSAyICoKKwkJCQkJCSBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FERE5fQ09OVEVYVF0gPQorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkpOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0NRXSA9IG51bV9jcV9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fRVFdID0gbnVtX2VxX3BhZ2VzICogUEFHRV9TSVpFOworCisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1dSQl0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikKKwkgICAgKiAocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikKKwkgICAgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybDsKKwl3cmJfc3pfcGVyX2N4biA9ICBzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpICoKKwkJCQkgKHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4pOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9XUkJIXSA9IHJvdW5kdXBfcG93X29mX3R3bygod3JiX3N6X3Blcl9jeG4pICoKKwkJCQlwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCk7CisKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fU0dMSF0gPSBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpICoKKwkJcGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmw7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX1NHRV0gPSBzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKgorCQlwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKiBwaGJhLT5wYXJhbXMuaWNkc19wZXJfY3RybDsKKworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3BhZ2VzICogUEFHRV9TSVpFOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19EQVRBX0JVRl0gPQorCQludW1fYXN5bmNfcGR1X2RhdGFfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfYnVmX3NnbF9wYWdlcyAqIFBBR0VfU0laRTsKKwlwaGJhLT5tZW1fcmVxW0hXSV9NRU1fQVNZTkNfREFUQV9SSU5HXSA9CisJCW51bV9hc3luY19wZHVfZGF0YV9zZ2xfcGFnZXMgKiBQQUdFX1NJWkU7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEVdID0KKwkJcGhiYS0+cGFyYW1zLmFzeW5jcGR1c19wZXJfY3RybCAqCisJCXNpemVvZihzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSk7CisJcGhiYS0+bWVtX3JlcVtIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFXSA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKgorCQlzaXplb2Yoc3RydWN0IGFzeW5jX3BkdV9oYW5kbGUpOworCXBoYmEtPm1lbV9yZXFbSFdJX01FTV9BU1lOQ19QRFVfQ09OVEVYVF0gPQorCQlzaXplb2Yoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCkgKworCQkocGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IGh3aV9hc3luY19lbnRyeSkpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfYWxsb2NfbWVtKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKwlkbWFfYWRkcl90IGJ1c19hZGQ7CisJc3RydWN0IG1lbV9hcnJheSAqbWVtX2FyciwgKm1lbV9hcnJfb3JpZzsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgYWxsb2Nfc2l6ZSwgY3Vycl9hbGxvY19zaXplOworCisJcGhiYS0+cGh3aV9jdHJsciA9IGttYWxsb2MocGhiYS0+cGFyYW1zLmh3aV93c19zeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5waHdpX2N0cmxyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBoYmEtPmluaXRfbWVtID0ga2NhbGxvYyhTRV9NRU1fTUFYLCBzaXplb2YoKm1lbV9kZXNjciksCisJCQkJIEdGUF9LRVJORUwpOworCWlmICghcGhiYS0+aW5pdF9tZW0pIHsKKwkJa2ZyZWUocGhiYS0+cGh3aV9jdHJscik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbV9hcnJfb3JpZyA9IGttYWxsb2Moc2l6ZW9mKCptZW1fYXJyX29yaWcpICogQkVJU0NTSV9NQVhfRlJBR1NfSU5JVCwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbV9hcnJfb3JpZykgeworCQlrZnJlZShwaGJhLT5pbml0X21lbSk7CisJCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwlmb3IgKGkgPSAwOyBpIDwgU0VfTUVNX01BWDsgaSsrKSB7CisJCWogPSAwOworCQltZW1fYXJyID0gbWVtX2Fycl9vcmlnOworCQlhbGxvY19zaXplID0gcGhiYS0+bWVtX3JlcVtpXTsKKwkJbWVtc2V0KG1lbV9hcnIsIDAsIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqCisJCSAgICAgICBCRUlTQ1NJX01BWF9GUkFHU19JTklUKTsKKwkJY3Vycl9hbGxvY19zaXplID0gbWluKGJlX21heF9waHlzX3NpemUgKiAxMDI0LCBhbGxvY19zaXplKTsKKwkJZG8geworCQkJbWVtX2Fyci0+dmlydHVhbF9hZGRyZXNzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJCQkJCQkJcGhiYS0+cGNpZGV2LAorCQkJCQkJCWN1cnJfYWxsb2Nfc2l6ZSwKKwkJCQkJCQkmYnVzX2FkZCk7CisJCQlpZiAoIW1lbV9hcnItPnZpcnR1YWxfYWRkcmVzcykgeworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgPD0gQkVfTUlOX01FTV9TSVpFKQorCQkJCQlnb3RvIGZyZWVfbWVtOworCQkJCWlmIChjdXJyX2FsbG9jX3NpemUgLQorCQkJCQlyb3VuZGRvd25fcG93X29mX3R3byhjdXJyX2FsbG9jX3NpemUpKQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSByb3VuZGRvd25fcG93X29mX3R3bworCQkJCQkJCSAgICAgKGN1cnJfYWxsb2Nfc2l6ZSk7CisJCQkJZWxzZQorCQkJCQljdXJyX2FsbG9jX3NpemUgPSBjdXJyX2FsbG9jX3NpemUgLyAyOworCQkJfSBlbHNlIHsKKwkJCQltZW1fYXJyLT5idXNfYWRkcmVzcy51LgorCQkJCSAgICBhNjQuYWRkcmVzcyA9IChfX3U2NCkgYnVzX2FkZDsKKwkJCQltZW1fYXJyLT5zaXplID0gY3Vycl9hbGxvY19zaXplOworCQkJCWFsbG9jX3NpemUgLT0gY3Vycl9hbGxvY19zaXplOworCQkJCWN1cnJfYWxsb2Nfc2l6ZSA9IG1pbihiZV9tYXhfcGh5c19zaXplICoKKwkJCQkJCSAgICAgIDEwMjQsIGFsbG9jX3NpemUpOworCQkJCWorKzsKKwkJCQltZW1fYXJyKys7CisJCQl9CisJCX0gd2hpbGUgKGFsbG9jX3NpemUpOworCQltZW1fZGVzY3ItPm51bV9lbGVtZW50cyA9IGo7CisJCW1lbV9kZXNjci0+c2l6ZV9pbl9ieXRlcyA9IHBoYmEtPm1lbV9yZXFbaV07CisJCW1lbV9kZXNjci0+bWVtX2FycmF5ID0ga21hbGxvYyhzaXplb2YoKm1lbV9hcnIpICogaiwKKwkJCQkJICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIW1lbV9kZXNjci0+bWVtX2FycmF5KQorCQkJZ290byBmcmVlX21lbTsKKworCQltZW1jcHkobWVtX2Rlc2NyLT5tZW1fYXJyYXksIG1lbV9hcnJfb3JpZywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgbWVtX2FycmF5KSAqIGopOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUobWVtX2Fycl9vcmlnKTsKKwlyZXR1cm4gMDsKK2ZyZWVfbWVtOgorCW1lbV9kZXNjci0+bnVtX2VsZW1lbnRzID0gajsKKwl3aGlsZSAoKGkpIHx8IChqKSkgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkJCSAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uc2l6ZSwKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIHZpcnR1YWxfYWRkcmVzcywKKwkJCQkJICAgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS4KKwkJCQkJICAgIGJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MpOworCQl9CisJCWlmIChpKSB7CisJCQlpLS07CisJCQlrZnJlZShtZW1fZGVzY3ItPm1lbV9hcnJheSk7CisJCQltZW1fZGVzY3ItLTsKKwkJfQorCX0KKwlrZnJlZShtZW1fYXJyX29yaWcpOworCWtmcmVlKHBoYmEtPmluaXRfbWVtKTsKKwlrZnJlZShwaGJhLT5waHdpX2N0cmxyKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2dldF9tZW1vcnkoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWJlaXNjc2lfZmluZF9tZW1fcmVxKHBoYmEpOworCXJldHVybiBiZWlzY3NpX2FsbG9jX21lbShwaGJhKTsKK30KKworc3RhdGljIHZvaWQgaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgcGR1X2RhdGFfb3V0ICpwZGF0YV9vdXQ7CisJc3RydWN0IHBkdV9ub3Bfb3V0ICpwbm9wX291dDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKm1lbV9kZXNjcjsKKworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBJU0NTSV9NRU1fR0xPQkFMX0hFQURFUjsKKwlwZGF0YV9vdXQgPQorCSAgICAoc3RydWN0IHBkdV9kYXRhX291dCAqKW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwltZW1zZXQocGRhdGFfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIG9wY29kZSwgcGRhdGFfb3V0LAorCQkgICAgICBJSU9DX1NDU0lfREFUQSk7CisKKwlwbm9wX291dCA9CisJICAgIChzdHJ1Y3QgcGR1X25vcF9vdXQgKikoKHVuc2lnbmVkIGNoYXIgKiltZW1fZGVzY3ItPm1lbV9hcnJheVswXS4KKwkJCQkgICB2aXJ0dWFsX2FkZHJlc3MgKyBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCisJbWVtc2V0KHBub3Bfb3V0LCAwLCBCRV9JU0NTSV9QRFVfSEVBREVSX1NJWkUpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIHR0dCwgcG5vcF9vdXQsIDB4RkZGRkZGRkYpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X25vcF9vdXQsIGZfYml0LCBwbm9wX291dCwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCwgaV9iaXQsIHBub3Bfb3V0LCAwKTsKK30KKworc3RhdGljIHZvaWQgYmVpc2NzaV9pbml0X3dyYl9oYW5kbGUoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyX3dyYmgsICptZW1fZGVzY3Jfd3JiOworCXN0cnVjdCB3cmJfaGFuZGxlICpwd3JiX2hhbmRsZTsKKwlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHI7CisJc3RydWN0IGh3aV93cmJfY29udGV4dCAqcHdyYl9jb250ZXh0OworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmI7CisJdW5zaWduZWQgaW50IG51bV9jeG5fd3JiaDsKKwl1bnNpZ25lZCBpbnQgbnVtX2N4bl93cmIsIGosIGlkeCwgaW5kZXg7CisKKwltZW1fZGVzY3Jfd3JiaCA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl93cmJoICs9IEhXSV9NRU1fV1JCSDsKKworCW1lbV9kZXNjcl93cmIgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfd3JiICs9IEhXSV9NRU1fV1JCOworCisJaWR4ID0gMDsKKwlwd3JiX2hhbmRsZSA9IG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS52aXJ0dWFsX2FkZHJlc3M7CisJbnVtX2N4bl93cmJoID0gKChtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLworCQkJKChzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUpKSAqCisJCQkgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImNpZD0lZCBwd3JiX2NvbnRleHQ9JXAgXG4iLCBpbmRleCwKKwkJCQkJCXB3cmJfY29udGV4dCk7CisJCXB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZSA9CisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHdyYl9oYW5kbGUgKikgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huLCBHRlBfS0VSTkVMKTsKKwkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkID0KKwkJCQlremFsbG9jKHNpemVvZihzdHJ1Y3Qgd3JiX2hhbmRsZSAqKSAqCisJCQkJCXBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG4sIEdGUF9LRVJORUwpOworCQlpZiAobnVtX2N4bl93cmJoKSB7CisJCQlwd3JiX2NvbnRleHQtPmFsbG9jX2luZGV4ID0gMDsKKwkJCXB3cmJfY29udGV4dC0+d3JiX2hhbmRsZXNfYXZhaWxhYmxlID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2Vbal0gPSBwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPnB3cmJfaGFuZGxlX2Jhc2VzdGRbal0gPQorCQkJCQkJCQlwd3JiX2hhbmRsZTsKKwkJCQlwd3JiX2NvbnRleHQtPndyYl9oYW5kbGVzX2F2YWlsYWJsZSsrOworCQkJCXB3cmJfaGFuZGxlKys7CisJCQl9CisJCQlwd3JiX2NvbnRleHQtPmZyZWVfaW5kZXggPSAwOworCQkJbnVtX2N4bl93cmJoLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXB3cmJfaGFuZGxlID0KKwkJCSAgICBtZW1fZGVzY3Jfd3JiaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmJoID0KKwkJCSAgICAoKG1lbV9kZXNjcl93cmJoLT5tZW1fYXJyYXlbaWR4XS5zaXplKSAvCisJCQkgICAgICgoc2l6ZW9mKHN0cnVjdCB3cmJfaGFuZGxlKSkgKgorCQkJICAgICAgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bikpOworCQkJcHdyYl9jb250ZXh0LT5hbGxvY19pbmRleCA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4bjsgaisrKSB7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdID0gcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkW2pdID0KKwkJCQkgICAgcHdyYl9oYW5kbGU7CisJCQkJcHdyYl9jb250ZXh0LT53cmJfaGFuZGxlc19hdmFpbGFibGUrKzsKKwkJCQlwd3JiX2hhbmRsZSsrOworCQkJfQorCQkJcHdyYl9jb250ZXh0LT5mcmVlX2luZGV4ID0gMDsKKwkJCW51bV9jeG5fd3JiaC0tOworCQl9CisJfQorCWlkeCA9IDA7CisJcHdyYiA9IG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwludW1fY3huX3dyYiA9CisJICAgICgobWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0uc2l6ZSkgLyAoc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKSAqCisJICAgICBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpbmRleCArPSAyKSB7CisJCXB3cmJfY29udGV4dCA9ICZwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpbmRleF07CisJCWlmIChudW1fY3huX3dyYikgeworCQkJZm9yIChqID0gMDsgaiA8IHBoYmEtPnBhcmFtcy53cmJzX3Blcl9jeG47IGorKykgeworCQkJCXB3cmJfaGFuZGxlID0gcHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlW2pdOworCQkJCXB3cmJfaGFuZGxlLT5wd3JiID0gcHdyYjsKKwkJCQlwd3JiKys7CisJCQl9CisJCQludW1fY3huX3dyYi0tOworCQl9IGVsc2UgeworCQkJaWR4Kys7CisJCQlwd3JiID0gbWVtX2Rlc2NyX3dyYi0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJbnVtX2N4bl93cmIgPSAoKG1lbV9kZXNjcl93cmItPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJCQkJKHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSkgKgorCQkJCQlwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huKTsKKwkJCWZvciAoaiA9IDA7IGogPCBwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huOyBqKyspIHsKKwkJCQlwd3JiX2hhbmRsZSA9IHB3cmJfY29udGV4dC0+cHdyYl9oYW5kbGVfYmFzZVtqXTsKKwkJCQlwd3JiX2hhbmRsZS0+cHdyYiA9IHB3cmI7CisJCQkJcHdyYisrOworCQkJfQorCQkJbnVtX2N4bl93cmItLTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaHdpX2luaXRfYXN5bmNfcGR1X2N0eChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBoYmFfcGFyYW1ldGVycyAqcCA9ICZwaGJhLT5wYXJhbXM7CisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKKwlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqcGFzeW5jX2hlYWRlcl9oLCAqcGFzeW5jX2RhdGFfaDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfUERVX0NPTlRFWFQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwaHdpX2N0cmxyLT5waHdpX2N0eHQtPnBhc3luY19jdHggPSAoc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqKQorCQkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0LT5wYXN5bmNfY3R4OworCW1lbXNldChwYXN5bmNfY3R4LCAwLCBzaXplb2YoKnBhc3luY19jdHgpKTsKKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5udW1fZW50cmllcyA9IHAtPmFzeW5jcGR1c19wZXJfY3RybDsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfaGRyX3N6OworCXBhc3luY19jdHgtPmFzeW5jX2RhdGEuYnVmZmVyX3NpemUgPSBwLT5kZWZwZHVfZGF0YV9zejsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLm51bV9lbnRyaWVzID0gcC0+YXN5bmNwZHVzX3Blcl9jdHJsOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0hFQURFUl9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGIgorCQkJICJ2YT0lcCBcbiIsIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcyk7CisJfSBlbHNlCisJCXNob3N0X3ByaW50ayhLRVJOX1dBUk5JTkcsIHBoYmEtPnNob3N0LAorCQkJICAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIudmFfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIucGFfYmFzZS51LmE2NC5hZGRyZXNzID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19IRUFERVJfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnJpbmdfYmFzZSA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3M7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX0hBTkRMRTsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUiCisJCQkgInZhPSVwIFxuIiwgbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfbGlzdCk7CisKKwltZW1fZGVzY3IgPSAoc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICopcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfREFUQV9CVUY7CisJaWYgKG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzcykgeworCQlTRV9ERUJVRyhEQkdfTFZMXzgsCisJCQkgImh3aV9pbml0X2FzeW5jX3BkdV9jdHggSFdJX01FTV9BU1lOQ19EQVRBX0JVRiIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS52YV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyA9CisJCQltZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfUklORzsKKwlpZiAobWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKSB7CisJCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJCSAiaHdpX2luaXRfYXN5bmNfcGR1X2N0eCBIV0lfTUVNX0FTWU5DX0RBVEFfUklORyIKKwkJCSAidmE9JXAgXG4iLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS52aXJ0dWFsX2FkZHJlc3MpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk5vIFZpcnR1YWwgYWRkcmVzcyBcbiIpOworCisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5yaW5nX2Jhc2UgPQorCQkJbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCisJbWVtX2Rlc2NyID0gKHN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqKXBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX0FTWU5DX0RBVEFfSEFORExFOworCWlmICghbWVtX2Rlc2NyLT5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAiTm8gVmlydHVhbCBhZGRyZXNzIFxuIik7CisKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmhhbmRsZV9iYXNlID0KKwkJCW1lbV9kZXNjci0+bWVtX2FycmF5WzBdLnZpcnR1YWxfYWRkcmVzczsKKwlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKworCXBhc3luY19oZWFkZXJfaCA9CisJCShzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqKXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5oYW5kbGVfYmFzZTsKKwlwYXN5bmNfZGF0YV9oID0KKwkJKHN0cnVjdCBhc3luY19wZHVfaGFuZGxlICopcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5oYW5kbGVfYmFzZTsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHAtPmFzeW5jcGR1c19wZXJfY3RybDsgaW5kZXgrKykgeworCQlwYXN5bmNfaGVhZGVyX2gtPmNyaSA9IC0xOworCQlwYXN5bmNfaGVhZGVyX2gtPmluZGV4ID0gKGNoYXIpaW5kZXg7CisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmspOworCQlwYXN5bmNfaGVhZGVyX2gtPnBidWZmZXIgPQorCQkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpCisJCQkocGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnZhX2Jhc2UpICsKKwkJCShwLT5kZWZwZHVfaGRyX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfaGVhZGVyX2gtPnBhLnUuYTY0LmFkZHJlc3MgPQorCQkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLnBhX2Jhc2UudS5hNjQuYWRkcmVzcyArCisJCQkocC0+ZGVmcGR1X2hkcl9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfaGVhZGVyX2gtPmxpbmssCisJCQkJJnBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5mcmVlX2xpc3QpOworCQlwYXN5bmNfaGVhZGVyX2grKzsKKwkJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19oZWFkZXIud3JpdGFibGVzKys7CisKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19jdHgtPmFzeW5jX2VudHJ5W2luZGV4XS53YWl0X3F1ZXVlLmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmcGFzeW5jX2N0eC0+YXN5bmNfZW50cnlbaW5kZXhdLgorCQkJICAgICAgIGhlYWRlcl9idXN5X2xpc3QpOworCQlwYXN5bmNfZGF0YV9oLT5jcmkgPSAtMTsKKwkJcGFzeW5jX2RhdGFfaC0+aW5kZXggPSAoY2hhcilpbmRleDsKKwkJSU5JVF9MSVNUX0hFQUQoJnBhc3luY19kYXRhX2gtPmxpbmspOworCQlwYXN5bmNfZGF0YV9oLT5wYnVmZmVyID0KKwkJCSh2b2lkICopKCh1bnNpZ25lZCBsb25nKQorCQkJKHBhc3luY19jdHgtPmFzeW5jX2RhdGEudmFfYmFzZSkgKworCQkJKHAtPmRlZnBkdV9kYXRhX3N6ICogaW5kZXgpKTsKKworCQlwYXN5bmNfZGF0YV9oLT5wYS51LmE2NC5hZGRyZXNzID0KKwkJICAgIHBhc3luY19jdHgtPmFzeW5jX2RhdGEucGFfYmFzZS51LmE2NC5hZGRyZXNzICsKKwkJICAgIChwLT5kZWZwZHVfZGF0YV9zeiAqIGluZGV4KTsKKworCQlsaXN0X2FkZF90YWlsKCZwYXN5bmNfZGF0YV9oLT5saW5rLAorCQkJICAgICAgJnBhc3luY19jdHgtPmFzeW5jX2RhdGEuZnJlZV9saXN0KTsKKwkJcGFzeW5jX2RhdGFfaCsrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLmZyZWVfZW50cmllcysrOworCQlwYXN5bmNfY3R4LT5hc3luY19kYXRhLndyaXRhYmxlcysrOworCisJCUlOSVRfTElTVF9IRUFEKCZwYXN5bmNfY3R4LT5hc3luY19lbnRyeVtpbmRleF0uZGF0YV9idXN5X2xpc3QpOworCX0KKworCXBhc3luY19jdHgtPmFzeW5jX2hlYWRlci5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfaGVhZGVyLmVwX3JlYWRfcHRyID0gLTE7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5ob3N0X3dyaXRlX3B0ciA9IDA7CisJcGFzeW5jX2N0eC0+YXN5bmNfZGF0YS5lcF9yZWFkX3B0ciA9IC0xOworfQorCitzdGF0aWMgaW50CitiZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXModm9pZCAqdmlydHVhbF9hZGRyZXNzLAorCQkJIHU2NCBwaHlzaWNhbF9hZGRyZXNzLCB1MzIgbGVuZ3RoLAorCQkJIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJV0FSTl9PTighdmlydHVhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFwaHlzaWNhbF9hZGRyZXNzKTsKKwlXQVJOX09OKCFsZW5ndGggPiAwKTsKKwlXQVJOX09OKCFzZ2wpOworCisJc2dsLT52YSA9IHZpcnR1YWxfYWRkcmVzczsKKwlzZ2wtPmRtYSA9IHBoeXNpY2FsX2FkZHJlc3M7CisJc2dsLT5zaXplID0gbGVuZ3RoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc3RydWN0IGJlX2RtYV9tZW0gKnNnbCkKK3sKKwltZW1zZXQoc2dsLCAwLCBzaXplb2YoKnNnbCkpOworfQorCitzdGF0aWMgdm9pZAoraHdpX2J1aWxkX2JlX3NnbF9hcnIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkgICAgIHN0cnVjdCBtZW1fYXJyYXkgKnBtZW0sIHN0cnVjdCBiZV9kbWFfbWVtICpzZ2wpCit7CisJaWYgKHNnbC0+dmEpCisJCWJlX3NnbF9kZXN0cm95X2NvbnRpZ3VvdXMoc2dsKTsKKworCWJlX3NnbF9jcmVhdGVfY29udGlndW91cyhwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyB2b2lkCitod2lfYnVpbGRfYmVfc2dsX2J5X29mZnNldChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICBzdHJ1Y3QgbWVtX2FycmF5ICpwbWVtLCBzdHJ1Y3QgYmVfZG1hX21lbSAqc2dsKQoreworCWlmIChzZ2wtPnZhKQorCQliZV9zZ2xfZGVzdHJveV9jb250aWd1b3VzKHNnbCk7CisKKwliZV9zZ2xfY3JlYXRlX2NvbnRpZ3VvdXMoKHVuc2lnbmVkIGNoYXIgKilwbWVtLT52aXJ0dWFsX2FkZHJlc3MsCisJCQkJIHBtZW0tPmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MsCisJCQkJIHBtZW0tPnNpemUsIHNnbCk7Cit9CisKK3N0YXRpYyBpbnQgYmVfZmlsbF9xdWV1ZShzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcSwKKwkJdTE2IGxlbiwgdTE2IGVudHJ5X3NpemUsIHZvaWQgKnZhZGRyZXNzKQoreworCXN0cnVjdCBiZV9kbWFfbWVtICptZW0gPSAmcS0+ZG1hX21lbTsKKworCW1lbXNldChxLCAwLCBzaXplb2YoKnEpKTsKKwlxLT5sZW4gPSBsZW47CisJcS0+ZW50cnlfc2l6ZSA9IGVudHJ5X3NpemU7CisJbWVtLT5zaXplID0gbGVuICogZW50cnlfc2l6ZTsKKwltZW0tPnZhID0gdmFkZHJlc3M7CisJaWYgKCFtZW0tPnZhKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQobWVtLT52YSwgMCwgbWVtLT5zaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2NyZWF0ZV9lcShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCWludCByZXQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZXFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwltZW0gPSAmZXEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fRVE7CisJZXFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKworCXJldCA9IGJlX2ZpbGxfcXVldWUoZXEsIHBoYmEtPnBhcmFtcy5udW1fZXFfZW50cmllcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGJlX2VxX2VudHJ5KSwgZXFfdmFkZHJlc3MpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2ZpbGxfcXVldWUgRmFpbGVkIGZvciBFUSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCisJcmV0ID0gYmVpc2NzaV9jbWRfZXFfY3JlYXRlKCZwaGJhLT5jdHJsLCBlcSwKKwkJCQkgICAgcGh3aV9jb250ZXh0LT5iZV9lcS5jdXJfZXFkKTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2NtZF9lcV9jcmVhdGUiCisJCQkgICAgICJGYWlsZWRmb3IgRVEgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiZXEgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfZXEucS5pZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmVpc2NzaV9jcmVhdGVfY3Eoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLAorCQkJICAgICBzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpjcSwgKmVxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqY3FfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWNxID0gJnBod2lfY29udGV4dC0+YmVfY3E7CisJZXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCW1lbSA9ICZjcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9DUTsKKwljcV92YWRkcmVzcyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCXJldCA9IGJlX2ZpbGxfcXVldWUoY3EsIHBoYmEtPnBhcmFtcy5pY2RzX3Blcl9jdHJsIC8gMiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNvbF9jcWUpLCBjcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIElTQ1NJIENRIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVpc2NzaV9jbWRfY3FfY3JlYXRlKCZwaGJhLT5jdHJsLCBjcSwgZXEsIGZhbHNlLCBmYWxzZSwgMCk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVpc2NzaV9jbWRfZXFfY3JlYXRlIEZhaWxlZCBmb3IgSVNDU0kgQ1EgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgY3EgaWQgaXMgJWRcbiIsIHBod2lfY29udGV4dC0+YmVfY3EuaWQpOworCVNFX0RFQlVHKERCR19MVkxfOCwgIklTQ1NJIENRIENSRUFURURcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dCwKKwkJICAgICAgIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJsciwKKwkJICAgICAgIHVuc2lnbmVkIGludCBkZWZfcGR1X3Jpbmdfc3opCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgcmV0OworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICpkcSwgKmNxOworCXN0cnVjdCBiZV9kbWFfbWVtICptZW07CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3I7CisJdm9pZCAqZHFfdmFkZHJlc3M7CisKKwlpZHggPSAwOworCWRxID0gJnBod2lfY29udGV4dC0+YmVfZGVmX2hkcnE7CisJY3EgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwltZW0gPSAmZHEtPmRtYV9tZW07CisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IEhXSV9NRU1fQVNZTkNfSEVBREVSX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgSERSXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJbWVtLT5kbWEgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3M7CisJcmV0ID0gYmVfY21kX2NyZWF0ZV9kZWZhdWx0X3BkdV9xdWV1ZSgmcGhiYS0+Y3RybCwgY3EsIGRxLAorCQkJCQkgICAgICBkZWZfcGR1X3Jpbmdfc3osCisJCQkJCSAgICAgIHBoYmEtPnBhcmFtcy5kZWZwZHVfaGRyX3N6KTsKKwlpZiAocmV0KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZV9jbWRfY3JlYXRlX2RlZmF1bHRfcGR1X3F1ZXVlIEZhaWxlZCBERUZIRFJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9oZHIuaWQgPSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkOworCVNFX0RFQlVHKERCR19MVkxfOCwgImlzY3NpIGRlZiBwZHUgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9oZHJxLmlkKTsKKwlod2lfcG9zdF9hc3luY19idWZmZXJzKHBoYmEsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQsCisJCQlzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKnBod2lfY3RybHIsCisJCQl1bnNpZ25lZCBpbnQgZGVmX3BkdV9yaW5nX3N6KQoreworCXVuc2lnbmVkIGludCBpZHg7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqZGF0YXEsICpjcTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXZvaWQgKmRxX3ZhZGRyZXNzOworCisJaWR4ID0gMDsKKwlkYXRhcSA9ICZwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcTsKKwljcSA9ICZwaHdpX2NvbnRleHQtPmJlX2NxOworCW1lbSA9ICZkYXRhcS0+ZG1hX21lbTsKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9BU1lOQ19EQVRBX1JJTkc7CisJZHFfdmFkZHJlc3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlyZXQgPSBiZV9maWxsX3F1ZXVlKGRhdGFxLCBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5zaXplIC8KKwkJCSAgICBzaXplb2Yoc3RydWN0IHBoeXNfYWRkciksCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBwaHlzX2FkZHIpLCBkcV92YWRkcmVzcyk7CisJaWYgKHJldCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiYmVfZmlsbF9xdWV1ZSBGYWlsZWQgZm9yIERFRiBQRFUgREFUQVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCW1lbS0+ZG1hID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCXJldCA9IGJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUoJnBoYmEtPmN0cmwsIGNxLCBkYXRhcSwKKwkJCQkJICAgICAgZGVmX3BkdV9yaW5nX3N6LAorCQkJCQkgICAgICBwaGJhLT5wYXJhbXMuZGVmcGR1X2RhdGFfc3opOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgImJlX2NtZF9jcmVhdGVfZGVmYXVsdF9wZHVfcXVldWUgRmFpbGVkIgorCQkJICAgICAiIGZvciBERUYgUERVIERBVEFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlwaHdpX2N0cmxyLT5kZWZhdWx0X3BkdV9kYXRhLmlkID0gcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXEuaWQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiaXNjc2kgZGVmIGRhdGEgaWQgaXMgJWRcbiIsCisJCSBwaHdpX2NvbnRleHQtPmJlX2RlZl9kYXRhcS5pZCk7CisJaHdpX3Bvc3RfYXN5bmNfYnVmZmVycyhwaGJhLCAwKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJERUZBVUxUIFBEVSBEQVRBIFJJTkcgQ1JFQVRFRCBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitiZWlzY3NpX3Bvc3RfcGFnZXMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBtZW1fYXJyYXkgKnBtX2FycjsKKwl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQsIGk7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCWludCBzdGF0dXM7CisKKwltZW1fZGVzY3IgPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3IgKz0gSFdJX01FTV9TR0U7CisJcG1fYXJyID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXk7CisKKwlwYWdlX29mZnNldCA9IChzaXplb2Yoc3RydWN0IGlzY3NpX3NnZSkgKiBwaGJhLT5wYXJhbXMubnVtX3NnZV9wZXJfaW8gKgorCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCkgLyBQQUdFX1NJWkU7CisJZm9yIChpID0gMDsgaSA8IG1lbV9kZXNjci0+bnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJaHdpX2J1aWxkX2JlX3NnbF9hcnIocGhiYSwgcG1fYXJyLCAmc2dsKTsKKwkJc3RhdHVzID0gYmVfY21kX2lzY3NpX3Bvc3Rfc2dsX3BhZ2VzKCZwaGJhLT5jdHJsLCAmc2dsLAorCQkJCQkJcGFnZV9vZmZzZXQsCisJCQkJCQkocG1fYXJyLT5zaXplIC8gUEFHRV9TSVpFKSk7CisJCXBhZ2Vfb2Zmc2V0ICs9IHBtX2Fyci0+c2l6ZSAvIFBBR0VfU0laRTsKKwkJaWYgKHN0YXR1cyAhPSAwKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJCSAgICAgInBvc3Qgc2dsIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwbV9hcnIrKzsKKwl9CisJU0VfREVCVUcoREJHX0xWTF84LCAiUE9TVEVEIFBBR0VTIFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2JlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkgc3RydWN0IGh3aV9jb250ZXh0X21lbW9yeSAqcGh3aV9jb250ZXh0LAorCQkJIHN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscikKK3sKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleCwgb2Zmc2V0LCBzaXplLCBudW1fd3JiX3JpbmdzOworCXU2NCBwYV9hZGRyX2xvOworCXVuc2lnbmVkIGludCBpZHgsIG51bSwgaTsKKwlzdHJ1Y3QgbWVtX2FycmF5ICpwd3JiX2FycjsKKwl2b2lkICp3cmJfdmFkZHI7CisJc3RydWN0IGJlX2RtYV9tZW0gc2dsOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBzdGF0dXM7CisKKwlpZHggPSAwOworCW1lbV9kZXNjciA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjciArPSBIV0lfTUVNX1dSQjsKKwlwd3JiX2FyciA9IGttYWxsb2Moc2l6ZW9mKCpwd3JiX2FycikgKiBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCwKKwkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHdyYl9hcnIpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIk1lbW9yeSBhbGxvYyBmYWlsZWQgaW4gY3JlYXRlIHdyYiByaW5nLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl3cmJfdmFkZHIgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnZpcnR1YWxfYWRkcmVzczsKKwlwYV9hZGRyX2xvID0gbWVtX2Rlc2NyLT5tZW1fYXJyYXlbaWR4XS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCW51bV93cmJfcmluZ3MgPSBtZW1fZGVzY3ItPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkocGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBudW0rKykgeworCQlpZiAobnVtX3dyYl9yaW5ncykgeworCQkJcHdyYl9hcnJbbnVtXS52aXJ0dWFsX2FkZHJlc3MgPSB3cmJfdmFkZHI7CisJCQlwd3JiX2FycltudW1dLmJ1c19hZGRyZXNzLnUuYTY0LmFkZHJlc3MJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYik7CisJCQl3cmJfdmFkZHIgKz0gcHdyYl9hcnJbbnVtXS5zaXplOworCQkJcGFfYWRkcl9sbyArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0gZWxzZSB7CisJCQlpZHgrKzsKKwkJCXdyYl92YWRkciA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCQkJcGFfYWRkcl9sbyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzOworCQkJbnVtX3dyYl9yaW5ncyA9IG1lbV9kZXNjci0+bWVtX2FycmF5W2lkeF0uc2l6ZSAvCisJCQkJCShwaGJhLT5wYXJhbXMud3Jic19wZXJfY3huICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpKTsKKwkJCXB3cmJfYXJyW251bV0udmlydHVhbF9hZGRyZXNzID0gd3JiX3ZhZGRyOworCQkJcHdyYl9hcnJbbnVtXS5idXNfYWRkcmVzcy51LmE2NC5hZGRyZXNzXAorCQkJCQkJPSBwYV9hZGRyX2xvOworCQkJcHdyYl9hcnJbbnVtXS5zaXplID0gcGhiYS0+cGFyYW1zLndyYnNfcGVyX2N4biAqCisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBpc2NzaV93cmIpOworCQkJd3JiX3ZhZGRyICs9IHB3cmJfYXJyW251bV0uc2l6ZTsKKwkJCXBhX2FkZHJfbG8gICArPSBwd3JiX2FycltudW1dLnNpemU7CisJCQludW1fd3JiX3JpbmdzLS07CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJd3JiX21lbV9pbmRleCA9IDA7CisJCW9mZnNldCA9IDA7CisJCXNpemUgPSAwOworCisJCWh3aV9idWlsZF9iZV9zZ2xfYnlfb2Zmc2V0KHBoYmEsICZwd3JiX2FycltpXSwgJnNnbCk7CisJCXN0YXR1cyA9IGJlX2NtZF93cmJxX2NyZWF0ZSgmcGhiYS0+Y3RybCwgJnNnbCwKKwkJCQkJICAgICZwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0pOworCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkJICAgICAid3JicSBjcmVhdGUgZmFpbGVkLiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQlwaHdpX2N0cmxyLT53cmJfY29udGV4dFtpXS5jaWQgPSBwaHdpX2NvbnRleHQtPmJlX3dyYnFbaV0uaWQ7CisJfQorCWtmcmVlKHB3cmJfYXJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV93cmJfaGFuZGxlcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgaW50IGluZGV4OworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwaGJhLT5wYXJhbXMuY3huc19wZXJfY3RybCAqIDI7IGluZGV4ICs9IDIpIHsKKwkJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2luZGV4XTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlKTsKKwkJa2ZyZWUocHdyYl9jb250ZXh0LT5wd3JiX2hhbmRsZV9iYXNlc3RkKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcTsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY29udGV4dDsKKwlpbnQgaTsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwlmb3IgKGkgPSAwOyBpIDwgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7IGkrKykgeworCQlxID0gJnBod2lfY29udGV4dC0+YmVfd3JicVtpXTsKKwkJaWYgKHEtPmNyZWF0ZWQpCisJCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfV1JCUSk7CisJfQorCisJZnJlZV93cmJfaGFuZGxlcyhwaGJhKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfaGRycTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0RQRFVRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9kZWZfZGF0YXE7CisJaWYgKHEtPmNyZWF0ZWQpCisJCWJlaXNjc2lfY21kX3FfZGVzdHJveShjdHJsLCBxLCBRVFlQRV9EUERVUSk7CisKKwliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgTlVMTCwgUVRZUEVfU0dMKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9jcTsKKwlpZiAocS0+Y3JlYXRlZCkKKwkJYmVpc2NzaV9jbWRfcV9kZXN0cm95KGN0cmwsIHEsIFFUWVBFX0NRKTsKKworCXEgPSAmcGh3aV9jb250ZXh0LT5iZV9lcS5xOworCWlmIChxLT5jcmVhdGVkKQorCQliZWlzY3NpX2NtZF9xX2Rlc3Ryb3koY3RybCwgcSwgUVRZUEVfRVEpOworfQorCitzdGF0aWMgaW50IGh3aV9pbml0X3BvcnQoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJdW5zaWduZWQgaW50IGRlZl9wZHVfcmluZ19zejsKKwlzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsID0gJnBoYmEtPmN0cmw7CisJaW50IHN0YXR1czsKKworCWRlZl9wZHVfcmluZ19zeiA9CisJCXBoYmEtPnBhcmFtcy5hc3luY3BkdXNfcGVyX2N0cmwgKiBzaXplb2Yoc3RydWN0IHBoeXNfYWRkcik7CisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisKKwlwaHdpX2NvbnRleHQgPSBwaHdpX2N0cmxyLT5waHdpX2N0eHQ7CisJcGh3aV9jb250ZXh0LT5iZV9lcS5tYXhfZXFkID0gMDsKKwlwaHdpX2NvbnRleHQtPmJlX2VxLm1pbl9lcWQgPSAwOworCXBod2lfY29udGV4dC0+YmVfZXEuY3VyX2VxZCA9IDY0OworCXBod2lfY29udGV4dC0+YmVfZXEuZW5hYmxlX2FpYyA9IGZhbHNlOworCWJlX2NtZF9md19pbml0aWFsaXplKCZwaGJhLT5jdHJsKTsKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9lcShwaGJhLCBwaHdpX2NvbnRleHQpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiRVEgbm90IGNyZWF0ZWQgXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2NoZWNrX3N1cHBvcnRlZF9mdyhjdHJsKTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIlVuc3VwcG9ydGVkIGZ3IHZlcnNpb24gXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBtZ210X2dldF9md19jb25maWcoY3RybCwgcGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJFcnJvciBnZXR0aW5nIGZ3IGNvbmZpZ1xuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJc3RhdHVzID0gYmVpc2NzaV9jcmVhdGVfY3EocGhiYSwgcGh3aV9jb250ZXh0KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgIkNRIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfaGRyKHBoYmEsIHBod2lfY29udGV4dCwgcGh3aV9jdHJsciwKKwkJCQkJZGVmX3BkdV9yaW5nX3N6KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkRlZmF1bHQgSGVhZGVyIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX2NyZWF0ZV9kZWZfZGF0YShwaGJhLCBwaHdpX2NvbnRleHQsCisJCQkJCSBwaHdpX2N0cmxyLCBkZWZfcGR1X3Jpbmdfc3opOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiRGVmYXVsdCBEYXRhIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0dXMgPSBiZWlzY3NpX3Bvc3RfcGFnZXMocGhiYSk7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJQb3N0IFNHTCBQYWdlcyBGYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCXN0YXR1cyA9IGJlaXNjc2lfY3JlYXRlX3dyYl9yaW5ncyhwaGJhLAlwaHdpX2NvbnRleHQsIHBod2lfY3RybHIpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiV1JCIFJpbmdzIG5vdCBjcmVhdGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJod2lfaW5pdF9wb3J0IHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJvcjoKKwlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiaHdpX2luaXRfcG9ydCBmYWlsZWQiKTsKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworCitzdGF0aWMgaW50IGh3aV9pbml0X2NvbnRyb2xsZXIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCWlmICgxID09IHBoYmEtPmluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5udW1fZWxlbWVudHMpIHsKKwkJcGh3aV9jdHJsci0+cGh3aV9jdHh0ID0gKHN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKilwaGJhLT4KKwkJICAgIGluaXRfbWVtW0hXSV9NRU1fQURETl9DT05URVhUXS5tZW1fYXJyYXlbMF0udmlydHVhbF9hZGRyZXNzOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICIgcGh3aV9jdHJsci0+cGh3aV9jdHh0PSVwIFxuIiwKKwkJCSBwaHdpX2N0cmxyLT5waHdpX2N0eHQpOworCX0gZWxzZSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJIV0lfTUVNX0FERE5fQ09OVEVYVCBpcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQuIgorCQkJICAgICAiRmFpbGluZyB0byBsb2FkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaXNjc2lfaW5pdF9nbG9iYWxfdGVtcGxhdGVzKHBoYmEpOworCWJlaXNjc2lfaW5pdF93cmJfaGFuZGxlKHBoYmEpOworCWh3aV9pbml0X2FzeW5jX3BkdV9jdHgocGhiYSk7CisJaWYgKGh3aV9pbml0X3BvcnQocGhiYSkgIT0gMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiaHdpX2luaXRfY29udHJvbGxlciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfZnJlZV9tZW0oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCWludCBpLCBqOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJaSA9IDA7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNFX01FTV9NQVg7IGkrKykgeworCQlmb3IgKGogPSBtZW1fZGVzY3ItPm51bV9lbGVtZW50czsgaiA+IDA7IGotLSkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgIG1lbV9kZXNjci0+bWVtX2FycmF5W2ogLSAxXS5zaXplLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0udmlydHVhbF9hZGRyZXNzLAorCQkJICBtZW1fZGVzY3ItPm1lbV9hcnJheVtqIC0gMV0uYnVzX2FkZHJlc3MuCisJCQkJdS5hNjQuYWRkcmVzcyk7CisJCX0KKwkJa2ZyZWUobWVtX2Rlc2NyLT5tZW1fYXJyYXkpOworCQltZW1fZGVzY3IrKzsKKwl9CisJa2ZyZWUocGhiYS0+aW5pdF9tZW0pOworCWtmcmVlKHBoYmEtPnBod2lfY3RybHIpOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSkKK3sKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXJldCA9IGJlaXNjc2lfZ2V0X21lbW9yeShwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUgLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2FsbG9jX21lbW9yeSBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGh3aV9pbml0X2NvbnRyb2xsZXIocGhiYSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2luaXQ7CisJU0VfREVCVUcoREJHX0xWTF84LCAiUmV0dXJuIHN1Y2Nlc3MgZnJvbSBiZWlzY3NpX2luaXRfY29udHJvbGxlciIpOworCXJldHVybiAwOworCitmcmVlX2luaXQ6CisJYmVpc2NzaV9mcmVlX21lbShwaGJhKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfc2dsX2hhbmRsZShzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yICptZW1fZGVzY3Jfc2dsaCwgKm1lbV9kZXNjcl9zZzsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3NnZSAqcGZyYWc7CisJdW5zaWduZWQgaW50IGFycl9pbmRleCwgaSwgaWR4OworCisJcGhiYS0+aW9fc2dsX2huZGxfYXZibCA9IDA7CisJcGhiYS0+ZWhfc2dsX2huZGxfYXZibCA9IDA7CisJbWVtX2Rlc2NyX3NnbGggPSBwaGJhLT5pbml0X21lbTsKKwltZW1fZGVzY3Jfc2dsaCArPSBIV0lfTUVNX1NHTEg7CisJaWYgKDEgPT0gbWVtX2Rlc2NyX3NnbGgtPm51bV9lbGVtZW50cykgeworCQlwaGJhLT5pb19zZ2xfaG5kbF9iYXNlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUgKikgKgorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwsCisJCQkJCQkgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhiYS0+aW9fc2dsX2huZGxfYmFzZSkgeworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZ2xfaGFuZGxlICopICoKKwkJCQkJCSAocGhiYS0+cGFyYW1zLmljZHNfcGVyX2N0cmwgLQorCQkJCQkJIHBoYmEtPnBhcmFtcy5pb3NfcGVyX2N0cmwpLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQlpZiAoIXBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpIHsKKwkJCWtmcmVlKHBoYmEtPmlvX3NnbF9obmRsX2Jhc2UpOworCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCQkgICAgICJNZW0gQWxsb2MgRmFpbGVkLiBGYWlsaW5nIHRvIGxvYWRcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LAorCQkJICAgICAiSFdJX01FTV9TR0xIIGlzIG1vcmUgdGhhbiBvbmUgZWxlbWVudC4iCisJCQkgICAgICJGYWlsaW5nIHRvIGxvYWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhcnJfaW5kZXggPSAwOworCWlkeCA9IDA7CisJd2hpbGUgKGlkeCA8IG1lbV9kZXNjcl9zZ2xoLT5udW1fZWxlbWVudHMpIHsKKwkJcHNnbF9oYW5kbGUgPSBtZW1fZGVzY3Jfc2dsaC0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7IGkgPCAobWVtX2Rlc2NyX3NnbGgtPm1lbV9hcnJheVtpZHhdLnNpemUgLworCQkgICAgICBzaXplb2Yoc3RydWN0IHNnbF9oYW5kbGUpKTsgaSsrKSB7CisJCQlpZiAoYXJyX2luZGV4IDwgcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybCkgeworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2Jhc2VbYXJyX2luZGV4XSA9IHBzZ2xfaGFuZGxlOworCQkJCXBoYmEtPmlvX3NnbF9obmRsX2F2YmwrKzsKKwkJCQlhcnJfaW5kZXgrKzsKKwkJCX0gZWxzZSB7CisJCQkJcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQlwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsXSA9CisJCQkJCQkJCXBzZ2xfaGFuZGxlOworCQkJCWFycl9pbmRleCsrOworCQkJCXBoYmEtPmVoX3NnbF9obmRsX2F2YmwrKzsKKwkJCX0KKwkJCXBzZ2xfaGFuZGxlKys7CisJCX0KKwkJaWR4Kys7CisJfQorCVNFX0RFQlVHKERCR19MVkxfOCwKKwkJICJwaGJhLT5pb19zZ2xfaG5kbF9hdmJsPSVkIgorCQkgInBoYmEtPmVoX3NnbF9obmRsX2F2Ymw9JWQgXG4iLAorCQkgcGhiYS0+aW9fc2dsX2huZGxfYXZibCwKKwkJIHBoYmEtPmVoX3NnbF9obmRsX2F2YmwpOworCW1lbV9kZXNjcl9zZyA9IHBoYmEtPmluaXRfbWVtOworCW1lbV9kZXNjcl9zZyArPSBIV0lfTUVNX1NHRTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJcbiBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cz0lZCBcbiIsCisJCSBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cyk7CisJYXJyX2luZGV4ID0gMDsKKwlpZHggPSAwOworCXdoaWxlIChpZHggPCBtZW1fZGVzY3Jfc2ctPm51bV9lbGVtZW50cykgeworCQlwZnJhZyA9IG1lbV9kZXNjcl9zZy0+bWVtX2FycmF5W2lkeF0udmlydHVhbF9hZGRyZXNzOworCisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IChtZW1fZGVzY3Jfc2ctPm1lbV9hcnJheVtpZHhdLnNpemUpIC8KKwkJICAgICAoc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZ2UpICogcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvKTsKKwkJICAgICBpKyspIHsKKwkJCWlmIChhcnJfaW5kZXggPCBwaGJhLT5wYXJhbXMuaW9zX3Blcl9jdHJsKQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+aW9fc2dsX2huZGxfYmFzZVthcnJfaW5kZXhdOworCQkJZWxzZQorCQkJCXBzZ2xfaGFuZGxlID0gcGhiYS0+ZWhfc2dsX2huZGxfYmFzZVthcnJfaW5kZXggLQorCQkJCQkJcGhiYS0+cGFyYW1zLmlvc19wZXJfY3RybF07CisJCQlwc2dsX2hhbmRsZS0+cGZyYWcgPSBwZnJhZzsKKwkJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfc2dlLCBhZGRyX2hpLCBwZnJhZywgMCk7CisJCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3NnZSwgYWRkcl9sbywgcGZyYWcsIDApOworCQkJcGZyYWcgKz0gcGhiYS0+cGFyYW1zLm51bV9zZ2VfcGVyX2lvOworCQkJcHNnbF9oYW5kbGUtPnNnbF9pbmRleCA9CisJCQkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9zdGFydCArIGFycl9pbmRleCsrOworCQl9CisJCWlkeCsrOworCX0KKwlwaGJhLT5pb19zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+aW9fc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlwaGJhLT5laF9zZ2xfZnJlZV9pbmRleCA9IDA7CisJcGhiYS0+ZWhfc2dsX2FsbG9jX2luZGV4ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYmFfc2V0dXBfY2lkX3RibHMoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCWludCBpLCBuZXdfY2lkOworCisJcGhiYS0+Y2lkX2FycmF5ID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaGJhLT5jaWRfYXJyYXkpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gIgorCQkJICAgICAiaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXBoYmEtPmVwX2FycmF5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlzY3NpX2VuZHBvaW50ICopICoKKwkJCQkgcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmwgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoYmEtPmVwX2FycmF5KSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGluICIKKwkJCSAgICAgImhiYV9zZXR1cF9jaWRfdGJscyBcbiIpOworCQlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbmV3X2NpZCA9IHBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9pY2Rfc3RhcnQ7CisJZm9yIChpID0gMDsgaSA8IHBoYmEtPnBhcmFtcy5jeG5zX3Blcl9jdHJsOyBpKyspIHsKKwkJcGhiYS0+Y2lkX2FycmF5W2ldID0gbmV3X2NpZDsKKwkJbmV3X2NpZCArPSAyOworCX0KKwlwaGJhLT5hdmxibF9jaWRzID0gcGhiYS0+cGFyYW1zLmN4bnNfcGVyX2N0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGh3aV9lbmFibGVfaW50cihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXU4IF9faW9tZW0gKmFkZHI7CisJdTMyIHJlZzsKKwl1MzIgZW5hYmxlZDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKworCWVxID0gJnBod2lfY29udGV4dC0+YmVfZXEucTsKKwlhZGRyID0gKHU4IF9faW9tZW0gKikgKCh1OCBfX2lvbWVtICopIGN0cmwtPnBjaWNmZyArCisJCQlQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUKTsKKwlyZWcgPSBpb3JlYWQzMihhZGRyKTsKKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJyZWcgPXglMDh4IFxuIiwgcmVnKTsKKworCWVuYWJsZWQgPSByZWcgJiBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLOworCWlmICghZW5hYmxlZCkgeworCQlyZWcgfD0gTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAicmVnID14JTA4eCBhZGRyPSVwIFxuIiwgcmVnLCBhZGRyKTsKKwkJaW93cml0ZTMyKHJlZywgYWRkcik7CisJCVNFX0RFQlVHKERCR19MVkxfOCwgImVxLT5pZD0lZCBcbiIsIGVxLT5pZCk7CisKKwkJaHdpX3JpbmdfZXFfZGIocGhiYSwgZXEtPmlkLCAwLCAwLCAxLCAxKTsKKwl9IGVsc2UKKwkJc2hvc3RfcHJpbnRrKEtFUk5fV0FSTklORywgcGhiYS0+c2hvc3QsCisJCQkgICAgICJJbiBod2lfZW5hYmxlX2ludHIsIE5vdCBFbmFibGVkIFxuIik7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGh3aV9kaXNhYmxlX2ludHIoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKworCXU4IF9faW9tZW0gKmFkZHIgPSBjdHJsLT5wY2ljZmcgKyBQQ0lDRkdfTUVNQkFSX0NUUkxfSU5UX0NUUkxfT0ZGU0VUOworCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKKworCXUzMiBlbmFibGVkID0gcmVnICYgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSzsKKwlpZiAoZW5hYmxlZCkgeworCQlyZWcgJj0gfk1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CisJCWlvd3JpdGUzMihyZWcsIGFkZHIpOworCX0gZWxzZQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkluIGh3aV9kaXNhYmxlX2ludHIsIEFscmVhZHkgRGlzYWJsZWQgXG4iKTsKK30KKworc3RhdGljIGludCBiZWlzY3NpX2luaXRfcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfaW5pdF9jb250cm9sbGVyKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9jb250cm9sbGVyIFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlKHBoYmEpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJiZWlzY3NpX2Rldl9wcm9iZSAtIEZhaWxlZCBpbiIKKwkJCSAgICAgImJlaXNjc2lfaW5pdF9zZ2xfaGFuZGxlIFxuIik7CisJCWdvdG8gZG9fY2xlYW51cF9jdHJscjsKKwl9CisKKwlpZiAoaGJhX3NldHVwX2NpZF90YmxzKHBoYmEpKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsCisJCQkgICAgICJGYWlsZWQgaW4gaGJhX3NldHVwX2NpZF90YmxzXG4iKTsKKwkJa2ZyZWUocGhiYS0+aW9fc2dsX2huZGxfYmFzZSk7CisJCWtmcmVlKHBoYmEtPmVoX3NnbF9obmRsX2Jhc2UpOworCQlnb3RvIGRvX2NsZWFudXBfY3RybHI7CisJfQorCisJcmV0dXJuIHJldDsKKworZG9fY2xlYW51cF9jdHJscjoKKwlod2lfY2xlYW51cChwaGJhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBod2lfcHVyZ2VfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gKmVxOworCXN0cnVjdCBiZV9lcV9lbnRyeSAqZXFlID0gTlVMTDsKKworCXBod2lfY3RybHIgPSBwaGJhLT5waHdpX2N0cmxyOworCXBod2lfY29udGV4dCA9IHBod2lfY3RybHItPnBod2lfY3R4dDsKKwllcSA9ICZwaHdpX2NvbnRleHQtPmJlX2VxLnE7CisJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKworCXdoaWxlIChlcWUtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2VxX2VudHJ5LCB2YWxpZCkgLyAzMl0KKwkJCQkJCSYgRVFFX1ZBTElEX01BU0spIHsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9lcV9lbnRyeSwgdmFsaWQsIGVxZSwgMCk7CisJCXF1ZXVlX3RhaWxfaW5jKGVxKTsKKwkJZXFlID0gcXVldWVfdGFpbF9ub2RlKGVxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW5fcG9ydChzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJdW5zaWduZWQgY2hhciBtZ210X3N0YXR1czsKKworCW1nbXRfc3RhdHVzID0gbWdtdF9lcGZ3X2NsZWFudXAocGhiYSwgQ01EX0NPTk5FQ1RJT05fQ0hVVEVfMCk7CisJaWYgKG1nbXRfc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIm1nbXRfZXBmd19jbGVhbnVwIEZBSUxFRCBcbiIpOworCWh3aV9jbGVhbnVwKHBoYmEpOworCWh3aV9wdXJnZV9lcShwaGJhKTsKKwlrZnJlZShwaGJhLT5pb19zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5laF9zZ2xfaG5kbF9iYXNlKTsKKwlrZnJlZShwaGJhLT5jaWRfYXJyYXkpOworCWtmcmVlKHBoYmEtPmVwX2FycmF5KTsKK30KKwordm9pZAorYmVpc2NzaV9vZmZsb2FkX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfY29ubiAqYmVpc2NzaV9jb25uLAorCQkJICAgc3RydWN0IGJlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqcHdyYl9oYW5kbGU7CisJc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgKnB3cmIgPSBOVUxMOworCXN0cnVjdCBiZV9tZW1fZGVzY3JpcHRvciAqbWVtX2Rlc2NyOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwl1MzIgZG9vcmJlbGwgPSAwOworCisJLyoKKwkgKiBXZSBjYW4gYWx3YXlzIHVzZSAwIGhlcmUgYmVjYXVzZSBpdCBpcyByZXNlcnZlZCBieSBsaWJpc2NzaSBmb3IKKwkgKiBsb2dpbi9zdGFydHVwIHJlbGF0ZWQgdGFza3MuCisJICovCisJcHdyYl9oYW5kbGUgPSBhbGxvY193cmJfaGFuZGxlKHBoYmEsIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCwgMCk7CisJcHdyYiA9IChzdHJ1Y3QgaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiAqKXB3cmJfaGFuZGxlLT5wd3JiOworCW1lbXNldChwd3JiLCAwLCBzaXplb2YoKnB3cmIpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgsIHB3cmIsIHBhcmFtcy0+ZHdbb2Zmc2V0b2YKKwkJICAgICAgKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIG1heF9idXJzdF9sZW5ndGgpIC8gMzJdKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCSAgICAgIG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGgsIHB3cmIsCisJCSAgICAgIHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgbWF4X3NlbmRfZGF0YV9zZWdtZW50X2xlbmd0aCkgLyAzMl0pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwKKwkJICAgICAgZmlyc3RfYnVyc3RfbGVuZ3RoLAorCQkgICAgICBwd3JiLAorCQkgICAgICBwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGZpcnN0X2J1cnN0X2xlbmd0aCkgLyAzMl0pOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBlcmwsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGVybCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRVJMKSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBkZGUsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgIGRkZSkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfRERFKSA+PiAyKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIGhkZSwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaGRlKSAvIDMyXSAmIE9GRkxEX1BBUkFNU19IREUpID4+IDMpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfdGFyZ2V0X2NvbnRleHRfdXBkYXRlX3dyYiwgaXIydCwgcHdyYiwKKwkJICAgICAgKHBhcmFtcy0+ZHdbb2Zmc2V0b2Yoc3RydWN0IGFtYXBfYmVpc2NzaV9vZmZsb2FkX3BhcmFtcywKKwkJICAgICAgaXIydCkgLyAzMl0gJiBPRkZMRF9QQVJBTVNfSVIyVCkgPj4gNCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBpbWQsIHB3cmIsCisJCSAgICAgIChwYXJhbXMtPmR3W29mZnNldG9mKHN0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMsCisJCSAgICAgICBpbWQpIC8gMzJdICYgT0ZGTERfUEFSQU1TX0lNRCkgPj4gNSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBzdGF0X3NuLAorCQkgICAgICBwd3JiLAorCQkgICAgICAocGFyYW1zLT5kd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9iZWlzY3NpX29mZmxvYWRfcGFyYW1zLAorCQkgICAgICBleHBfc3RhdHNuKSAvIDMyXSArIDEpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHR5cGUsIHB3cmIsCisJCSAgICAgIDB4Nyk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCB3cmJfaWR4LAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIHB0cjJuZXh0d3JiLAorCQkgICAgICBwd3JiLCBwd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJc2Vzc2lvbl9zdGF0ZSwgcHdyYiwgMCk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBjb21wbHRvbmFjaywKKwkJICAgICAgcHdyYiwgMSk7CisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLCBub3RwcmVkYmxxLAorCQkgICAgICBwd3JiLCAwKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsIG1vZGUsIHB3cmIsCisJCSAgICAgIDApOworCisJbWVtX2Rlc2NyID0gcGhiYS0+aW5pdF9tZW07CisJbWVtX2Rlc2NyICs9IElTQ1NJX01FTV9HTE9CQUxfSEVBREVSOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV90YXJnZXRfY29udGV4dF91cGRhdGVfd3JiLAorCQkJcGFkX2J1ZmZlcl9hZGRyX2hpLCBwd3JiLAorCQkgICAgICBtZW1fZGVzY3ItPm1lbV9hcnJheVswXS5idXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIsCisJCQlwYWRfYnVmZmVyX2FkZHJfbG8sIHB3cmIsCisJCSAgICAgIG1lbV9kZXNjci0+bWVtX2FycmF5WzBdLmJ1c19hZGRyZXNzLnUuYTMyLmFkZHJlc3NfbG8pOworCisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIpKTsKKworCWRvb3JiZWxsIHw9IGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCAmIERCX1dSQl9QT1NUX0NJRF9NQVNLOworCWRvb3JiZWxsIHw9IChwd3JiX2hhbmRsZS0+d3JiX2luZGV4ICYgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwKKwkJCQkJREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisKKwlpb3dyaXRlMzIoZG9vcmJlbGwsIHBoYmEtPmRiX3ZhICsgREJfVFhVTFAwX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcGFyc2VfcGR1KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBpdHRfdCBpdHQsCisJCQkgICAgICBpbnQgKmluZGV4LCBpbnQgKmFnZSkKK3sKKwkqaW5kZXggPSBiZTMyX3RvX2NwdShpdHQpID4+IDE2OworCWlmIChhZ2UpCisJCSphZ2UgPSBjb25uLT5zZXNzaW9uLT5hZ2U7Cit9CisKKy8qKgorICogYmVpc2NzaV9hbGxvY19wZHUgLSBhbGxvY2F0ZXMgcGR1IGFuZCByZWxhdGVkIHJlc291cmNlcworICogQHRhc2s6IGxpYmlzY3NpIHRhc2sKKyAqIEBvcGNvZGU6IG9wY29kZSBvZiBwZHUgZm9yIHRhc2sKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBzZXNzaW9uIGxvY2sgaGVsZC4gSXQgd2lsbCBhbGxvY2F0ZQorICogdGhlIHdyYiBhbmQgc2dsIGlmIG5lZWRlZCBmb3IgdGhlIGNvbW1hbmQuIEFuZCBpdCB3aWxsIHByZXAKKyAqIHRoZSBwZHUncyBpdHQuIGJlaXNjc2lfcGFyc2VfcGR1IHdpbGwgbGF0ZXIgdHJhbnNsYXRlCisgKiB0aGUgcGR1IGl0dCB0byB0aGUgbGliaXNjc2kgdGFzayBpdHQuCisgKi8KK3N0YXRpYyBpbnQgYmVpc2NzaV9hbGxvY19wZHUoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssIHVpbnQ4X3Qgb3Bjb2RlKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCWl0dF90IGl0dDsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlkbWFfYWRkcl90IHBhZGRyOworCisJaW9fdGFzay0+Y21kX2JocyA9IHBjaV9wb29sX2FsbG9jKGJlaXNjc2lfc2Vzcy0+YmhzX3Bvb2wsCisJCQkJCSAgR0ZQX0tFUk5FTCwgJnBhZGRyKTsKKworCWlmICghaW9fdGFzay0+Y21kX2JocykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb190YXNrLT5iaHNfcGEudS5hNjQuYWRkcmVzcyA9IHBhZGRyOworCWlvX3Rhc2stPnB3cmJfaGFuZGxlID0gYWxsb2Nfd3JiX2hhbmRsZShwaGJhLAorCQkJCQkJYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkJCQkJdGFzay0+aXR0KTsKKwlpb190YXNrLT5wd3JiX2hhbmRsZS0+cGlvX2hhbmRsZSA9IHRhc2s7CisJaW9fdGFzay0+Y29ubiA9IGJlaXNjc2lfY29ubjsKKworCXRhc2stPmhkciA9IChzdHJ1Y3QgaXNjc2lfaGRyICopJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkcjsKKwl0YXNrLT5oZHJfbWF4ID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfYmhzKTsKKworCWlmICh0YXNrLT5zYykgeworCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBhbGxvY19pb19zZ2xfaGFuZGxlKHBoYmEpOworCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJZ290byBmcmVlX2huZGxzOworCisJfSBlbHNlIHsKKwkJaW9fdGFzay0+c2NzaV9jbW5kID0gTlVMTDsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikgeworCQkJaWYgKCFiZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzKSB7CisJCQkJc3Bpbl9sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IChzdHJ1Y3Qgc2dsX2hhbmRsZSAqKQorCQkJCQkJYWxsb2NfbWdtdF9zZ2xfaGFuZGxlKHBoYmEpOworCQkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCQlpZiAoIWlvX3Rhc2stPnBzZ2xfaGFuZGxlKQorCQkJCQlnb3RvIGZyZWVfaG5kbHM7CisKKwkJCQliZWlzY3NpX2Nvbm4tPmxvZ2luX2luX3Byb2dyZXNzID0gMTsKKwkJCQliZWlzY3NpX2Nvbm4tPnBsb2dpbl9zZ2xfaGFuZGxlID0KKwkJCQkJCQlpb190YXNrLT5wc2dsX2hhbmRsZTsKKwkJCX0gZWxzZSB7CisJCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPQorCQkJCQkJYmVpc2NzaV9jb25uLT5wbG9naW5fc2dsX2hhbmRsZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNwaW5fbG9jaygmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJCQlpb190YXNrLT5wc2dsX2hhbmRsZSA9IGFsbG9jX21nbXRfc2dsX2hhbmRsZShwaGJhKTsKKwkJCXNwaW5fdW5sb2NrKCZwaGJhLT5tZ210X3NnbF9sb2NrKTsKKwkJCWlmICghaW9fdGFzay0+cHNnbF9oYW5kbGUpCisJCQkJZ290byBmcmVlX2huZGxzOworCQl9CisJfQorCWl0dCA9IChpdHRfdCkgY3B1X3RvX2JlMzIoKCh1bnNpZ25lZCBpbnQpdGFzay0+aXR0IDw8IDE2KSB8CisJCQkodW5zaWduZWQgaW50KShpb190YXNrLT5wc2dsX2hhbmRsZS0+c2dsX2luZGV4KSk7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCA9IGl0dDsKKwlyZXR1cm4gMDsKKworZnJlZV9obmRsczoKKwlwaHdpX2N0cmxyID0gcGhiYS0+cGh3aV9jdHJscjsKKwlwd3JiX2NvbnRleHQgPSAmcGh3aV9jdHJsci0+d3JiX2NvbnRleHRbYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkXTsKKwlmcmVlX3dyYl9oYW5kbGUocGhiYSwgcHdyYl9jb250ZXh0LCBpb190YXNrLT5wd3JiX2hhbmRsZSk7CisJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJICAgICAgaW9fdGFzay0+YmhzX3BhLnUuYTY0LmFkZHJlc3MpOworCVNFX0RFQlVHKERCR19MVkxfMSwgIkFsbG9jIG9mIFNHTF9JQ0QgRmFpbGVkIFxuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfY2xlYW51cF90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBiZWlzY3NpX2lvX3Rhc2sgKmlvX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IGJlaXNjc2lfY29ubi0+cGhiYTsKKwlzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uICpiZWlzY3NpX3Nlc3MgPSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfc2VzczsKKwlzdHJ1Y3QgaHdpX3dyYl9jb250ZXh0ICpwd3JiX2NvbnRleHQ7CisJc3RydWN0IGh3aV9jb250cm9sbGVyICpwaHdpX2N0cmxyOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcHdyYl9jb250ZXh0ID0gJnBod2lfY3RybHItPndyYl9jb250ZXh0W2JlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZF07CisJaWYgKGlvX3Rhc2stPnB3cmJfaGFuZGxlKSB7CisJCWZyZWVfd3JiX2hhbmRsZShwaGJhLCBwd3JiX2NvbnRleHQsIGlvX3Rhc2stPnB3cmJfaGFuZGxlKTsKKwkJaW9fdGFzay0+cHdyYl9oYW5kbGUgPSBOVUxMOworCX0KKworCWlmIChpb190YXNrLT5jbWRfYmhzKSB7CisJCXBjaV9wb29sX2ZyZWUoYmVpc2NzaV9zZXNzLT5iaHNfcG9vbCwgaW9fdGFzay0+Y21kX2JocywKKwkJCSAgICAgIGlvX3Rhc2stPmJoc19wYS51LmE2NC5hZGRyZXNzKTsKKwl9CisKKwlpZiAodGFzay0+c2MpIHsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwkJCWZyZWVfaW9fc2dsX2hhbmRsZShwaGJhLCBpb190YXNrLT5wc2dsX2hhbmRsZSk7CisJCQlzcGluX3VubG9jaygmcGhiYS0+aW9fc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSA9PSBJU0NTSV9PUF9MT0dJTikKKwkJCXJldHVybjsKKwkJaWYgKGlvX3Rhc2stPnBzZ2xfaGFuZGxlKSB7CisJCQlzcGluX2xvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJZnJlZV9tZ210X3NnbF9oYW5kbGUocGhiYSwgaW9fdGFzay0+cHNnbF9oYW5kbGUpOworCQkJc3Bpbl91bmxvY2soJnBoYmEtPm1nbXRfc2dsX2xvY2spOworCQkJaW9fdGFzay0+cHNnbF9oYW5kbGUgPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGJlaXNjc2lfaW90YXNrKHN0cnVjdCBpc2NzaV90YXNrICp0YXNrLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJICB1bnNpZ25lZCBpbnQgbnVtX3NnLCB1bnNpZ25lZCBpbnQgeGZlcmxlbiwKKwkJCSAgdW5zaWduZWQgaW50IHdyaXRlZGlyKQoreworCisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisKKwlwd3JiID0gaW9fdGFzay0+cHdyYl9oYW5kbGUtPnB3cmI7CisJaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLmV4cF9zdGF0c24gPSAwOworCWlvX3Rhc2stPmJoc19sZW4gPSBzaXplb2Yoc3RydWN0IGJlX2NtZF9iaHMpOworCisJaWYgKHdyaXRlZGlyKSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIiBXUklURSBDb21tYW5kIFx0Iik7CisJCW1lbXNldCgmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDAsIDQ4KTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGl0dCwKKwkJCSAgICAgICZpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9kYXRhX3BkdSwKKwkJCSAgICAgICh1bnNpZ25lZCBpbnQpaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfaGRyLml0dCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBvcGNvZGUsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsCisJCQkgICAgICBJU0NTSV9PUENPREVfU0NTSV9EQVRBX09VVCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfcGR1X2RhdGFfb3V0LCBmaW5hbF9iaXQsCisJCQkgICAgICAmaW9fdGFzay0+Y21kX2Jocy0+aXNjc2lfZGF0YV9wZHUsIDEpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1dSX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDEpOworCX0gZWxzZSB7CisJCVNFX0RFQlVHKERCR19MVkxfNCwgIlJFQUQgQ29tbWFuZCBcdCIpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkc3AsIHB3cmIsIDApOworCX0KKwltZW1jcHkoJmlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2RhdGFfcGR1LgorCSAgICAgICBkd1tvZmZzZXRvZihzdHJ1Y3QgYW1hcF9wZHVfZGF0YV9vdXQsIGx1bikgLyAzMl0sCisJICAgICAgIGlvX3Rhc2stPmNtZF9iaHMtPmlzY3NpX2hkci5sdW4sIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pKTsKKworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBsdW4sIHB3cmIsCisJCSAgICAgIGNwdV90b19iZTE2KCh1bnNpZ25lZCBzaG9ydClpb190YXNrLT5jbWRfYmhzLT5pc2NzaV9oZHIuCisJCQkJICBsdW5bMF0pKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsIHhmZXJsZW4pOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBzZ2xfaWNkX2lkeCwgcHdyYiwKKwkJICAgICAgaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCk7CisKKwlod2lfd3JpdGVfc2dsKHB3cmIsIHNnLCBudW1fc2csIGlvX3Rhc2spOworCisJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHB0cjJuZXh0d3JiLCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+bnh0X3dyYl9pbmRleCk7CisJYmVfZHdzX2xlX3RvX2NwdShwd3JiLCBzaXplb2Yoc3RydWN0IGlzY3NpX3dyYikpOworCisJZG9vcmJlbGwgfD0gYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkICYgREJfV1JCX1BPU1RfQ0lEX01BU0s7CisJZG9vcmJlbGwgfD0gKGlvX3Rhc2stPnB3cmJfaGFuZGxlLT53cmJfaW5kZXggJgorCQkgICAgIERCX0RFRl9QRFVfV1JCX0lOREVYX01BU0spIDw8IERCX0RFRl9QRFVfV1JCX0lOREVYX1NISUZUOworCWRvb3JiZWxsIHw9IDEgPDwgREJfREVGX1BEVV9OVU1fUE9TVEVEX1NISUZUOworCisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfbXRhc2soc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2spCit7CisJc3RydWN0IGJlaXNjc2lfaW9fdGFzayAqYWJvcnRlZF9pb190YXNrLCAqaW9fdGFzayA9IHRhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSB0YXNrLT5jb25uOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gYmVpc2NzaV9jb25uLT5waGJhOworCXN0cnVjdCBpc2NzaV93cmIgKnB3cmIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkb29yYmVsbCA9IDA7CisJc3RydWN0IGlzY3NpX3Rhc2sgKmFib3J0ZWRfdGFzazsKKworCXB3cmIgPSBpb190YXNrLT5wd3JiX2hhbmRsZS0+cHdyYjsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgY21kc25faXR0LCBwd3JiLAorCQkgICAgICBiZTMyX3RvX2NwdSh0YXNrLT5jbWRzbikpOworCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB3cmJfaWR4LCBwd3JiLAorCQkgICAgICBpb190YXNrLT5wd3JiX2hhbmRsZS0+d3JiX2luZGV4KTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgc2dsX2ljZF9pZHgsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnBzZ2xfaGFuZGxlLT5zZ2xfaW5kZXgpOworCisJc3dpdGNoICh0YXNrLT5oZHItPm9wY29kZSAmIElTQ1NJX09QQ09ERV9NQVNLKSB7CisJY2FzZSBJU0NTSV9PUF9MT0dJTjoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIFRHVF9ETV9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZG1zZywgcHdyYiwgMCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBjbWRzbl9pdHQsIHB3cmIsIDEpOworCQlod2lfd3JpdGVfYnVmZmVyKHB3cmIsIHRhc2spOworCQlicmVhazsKKwljYXNlIElTQ1NJX09QX05PT1BfT1VUOgorCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgdHlwZSwgcHdyYiwgSU5JX1JEX0NNRCk7CisJCWh3aV93cml0ZV9idWZmZXIocHdyYiwgdGFzayk7CisJCWJyZWFrOworCWNhc2UgSVNDU0lfT1BfVEVYVDoKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsIElOSV9XUl9DTUQpOworCQlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgZHNwLCBwd3JiLCAxKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9TQ1NJX1RNRlVOQzoKKwkJYWJvcnRlZF90YXNrID0gaXNjc2lfaXR0X3RvX3Rhc2soY29ubiwKKwkJCQkJKChzdHJ1Y3QgaXNjc2lfdG0gKil0YXNrLT5oZHIpLT5ydHQpOworCQkgaWYgKCFhYm9ydGVkX3Rhc2spCisJCQlyZXR1cm4gMDsKKwkJYWJvcnRlZF9pb190YXNrID0gYWJvcnRlZF90YXNrLT5kZF9kYXRhOworCQlpZiAoIWFib3J0ZWRfaW9fdGFzay0+c2NzaV9jbW5kKQorCQkJcmV0dXJuIDA7CisKKwkJbWdtdF9pbnZhbGlkYXRlX2ljZHMocGhiYSwKKwkJCQkgICAgIGFib3J0ZWRfaW9fdGFzay0+cHNnbF9oYW5kbGUtPnNnbF9pbmRleCwKKwkJCQkgICAgIGJlaXNjc2lfY29ubi0+YmVpc2NzaV9jb25uX2NpZCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCB0eXBlLCBwd3JiLCBJTklfVE1GX0NNRCk7CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSBJU0NTSV9PUF9MT0dPVVQ6CisJCUFNQVBfU0VUX0JJVFMoc3RydWN0IGFtYXBfaXNjc2lfd3JiLCBkbXNnLCBwd3JiLCAwKTsKKwkJQU1BUF9TRVRfQklUUyhzdHJ1Y3QgYW1hcF9pc2NzaV93cmIsIHR5cGUsIHB3cmIsCisJCQkJSFdIX1RZUEVfTE9HT1VUKTsKKwkJaHdpX3dyaXRlX2J1ZmZlcihwd3JiLCB0YXNrKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJvcGNvZGUgPSVkIE5vdCBzdXBwb3J0ZWQgXG4iLAorCQkJIHRhc2stPmhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcjJ0X2V4cF9kdGwsIHB3cmIsCisJCSAgICAgIGJlMzJfdG9fY3B1KHRhc2stPmRhdGFfY291bnQpKTsKKwlBTUFQX1NFVF9CSVRTKHN0cnVjdCBhbWFwX2lzY3NpX3dyYiwgcHRyMm5leHR3cmIsIHB3cmIsCisJCSAgICAgIGlvX3Rhc2stPnB3cmJfaGFuZGxlLT5ueHRfd3JiX2luZGV4KTsKKwliZV9kd3NfbGVfdG9fY3B1KHB3cmIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfd3JiKSk7CisKKwlkb29yYmVsbCB8PSBiZWlzY3NpX2Nvbm4tPmJlaXNjc2lfY29ubl9jaWQgJiBEQl9XUkJfUE9TVF9DSURfTUFTSzsKKwlkb29yYmVsbCB8PSAoaW9fdGFzay0+cHdyYl9oYW5kbGUtPndyYl9pbmRleCAmCisJCSAgICAgREJfREVGX1BEVV9XUkJfSU5ERVhfTUFTSykgPDwgREJfREVGX1BEVV9XUkJfSU5ERVhfU0hJRlQ7CisJZG9vcmJlbGwgfD0gMSA8PCBEQl9ERUZfUERVX05VTV9QT1NURURfU0hJRlQ7CisJaW93cml0ZTMyKGRvb3JiZWxsLCBwaGJhLT5kYl92YSArIERCX1RYVUxQMF9PRkZTRVQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJlaXNjc2lfdGFza194bWl0KHN0cnVjdCBpc2NzaV90YXNrICp0YXNrKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gdGFzay0+Y29ubjsKKwlzdHJ1Y3QgYmVpc2NzaV9pb190YXNrICppb190YXNrID0gdGFzay0+ZGRfZGF0YTsKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpzYyA9IHRhc2stPnNjOworCXN0cnVjdCBiZWlzY3NpX2Nvbm4gKmJlaXNjc2lfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgbnVtX3NnOworCXVuc2lnbmVkIGludCAgd3JpdGVkaXIgPSAwLCB4ZmVybGVuID0gMDsKKworCVNFX0RFQlVHKERCR19MVkxfNCwgIlxuIGNpZD0lZCBJbiBiZWlzY3NpX3Rhc2tfeG1pdCB0YXNrPSVwIGNvbm49JXAgXHQiCisJCSAiYmVpc2NzaV9jb25uPSVwIFxuIiwgYmVpc2NzaV9jb25uLT5iZWlzY3NpX2Nvbm5fY2lkLAorCQkgdGFzaywgY29ubiwgYmVpc2NzaV9jb25uKTsKKwlpZiAoIXNjKQorCQlyZXR1cm4gYmVpc2NzaV9tdGFzayh0YXNrKTsKKworCWlvX3Rhc2stPnNjc2lfY21uZCA9IHNjOworCW51bV9zZyA9IHNjc2lfZG1hX21hcChzYyk7CisJaWYgKG51bV9zZyA8IDApIHsKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIHNjc2lfZG1hX21hcCBGYWlsZWRcbiIpCisJCXJldHVybiBudW1fc2c7CisJfQorCVNFX0RFQlVHKERCR19MVkxfNCwgInhmZXJsZW49MHglMDh4IHNjbWQ9JXAgbnVtX3NnPSVkIHNlcm51bT0lbHVcbiIsCisJCSAgKHNjc2lfYnVmZmxlbihzYykpLCBzYywgbnVtX3NnLCBzYy0+c2VyaWFsX251bWJlcik7CisJeGZlcmxlbiA9IHNjc2lfYnVmZmxlbihzYyk7CisJc2cgPSBzY3NpX3NnbGlzdChzYyk7CisJaWYgKHNjLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKSB7CisJCXdyaXRlZGlyID0gMTsKKwkJU0VfREVCVUcoREJHX0xWTF80LCAidGFzay0+aW1tX2NvdW50PTB4JTA4eCBcbiIsCisJCQkgdGFzay0+aW1tX2NvdW50KTsKKwl9IGVsc2UKKwkJd3JpdGVkaXIgPSAwOworCXJldHVybiBiZWlzY3NpX2lvdGFzayh0YXNrLCBzZywgbnVtX3NnLCB4ZmVybGVuLCB3cml0ZWRpcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlaXNjc2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhID0gTlVMTDsKKworCXBoYmEgPSAoc3RydWN0IGJlaXNjc2lfaGJhICopcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CisJaWYgKCFwaGJhKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiYmVpc2NzaV9yZW1vdmUgY2FsbGVkIHdpdGggbm8gcGhiYSBcbiIpOworCQlyZXR1cm47CisJfQorCisJaHdpX2Rpc2FibGVfaW50cihwaGJhKTsKKwlpZiAocGhiYS0+cGNpZGV2LT5pcnEpCisJCWZyZWVfaXJxKHBoYmEtPnBjaWRldi0+aXJxLCBwaGJhKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworCisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgIHBoYmEtPmN0cmwubWJveF9tZW1fYWxsb2NlZC5kbWEpOworCWlzY3NpX2hvc3RfcmVtb3ZlKHBoYmEtPnNob3N0KTsKKwlwY2lfZGV2X3B1dChwaGJhLT5wY2lkZXYpOworCWlzY3NpX2hvc3RfZnJlZShwaGJhLT5zaG9zdCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGJlaXNjc2lfZGV2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSA9IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IGJlaXNjc2lfZW5hYmxlX3BjaShwY2lkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkgICAgICJGYWlsZWQgdG8gZW5hYmxlIHBjaSBkZXZpY2UgXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwaGJhID0gYmVpc2NzaV9oYmFfYWxsb2MocGNpZGV2KTsKKwlpZiAoIXBoYmEpIHsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkiIEZhaWxlZCBpbiBiZWlzY3NpX2hiYV9hbGxvYyBcbiIpOworCQlnb3RvIGRpc2FibGVfcGNpOworCX0KKworCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHBoYmEpOworCXJldCA9IGJlX2N0cmxfaW5pdChwaGJhLCBwY2lkZXYpOworCWlmIChyZXQpIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCQkiRmFpbGVkIGluIGJlX2N0cmxfaW5pdFxuIik7CisJCWdvdG8gaGJhX2ZyZWU7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlvX3NnbF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGhiYS0+bWdtdF9zZ2xfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBoYmEtPmlzcl9sb2NrKTsKKwliZWlzY3NpX2dldF9wYXJhbXMocGhiYSk7CisJcmV0ID0gYmVpc2NzaV9pbml0X3BvcnQocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCBpbiBiZWlzY3NpX2luaXRfcG9ydFxuIik7CisJCWdvdG8gZnJlZV9wb3J0OworCX0KKworCXNucHJpbnRmKHBoYmEtPndxX25hbWUsIHNpemVvZihwaGJhLT53cV9uYW1lKSwgImJlaXNjc2lfcV9pcnEldSIsCisJCSBwaGJhLT5zaG9zdC0+aG9zdF9ubyk7CisJcGhiYS0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShwaGJhLT53cV9uYW1lKTsKKwlpZiAoIXBoYmEtPndxKSB7CisJCXNob3N0X3ByaW50ayhLRVJOX0VSUiwgcGhiYS0+c2hvc3QsICJiZWlzY3NpX2Rldl9wcm9iZS0iCisJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrIHF1ZXVlXG4iKTsKKwkJZ290byBmcmVlX3R3cTsKKwl9CisKKwlJTklUX1dPUksoJnBoYmEtPndvcmtfY3FzLCBiZWlzY3NpX3Byb2Nlc3NfYWxsX2Nxcyk7CisKKwlpZiAoYmxrX2lvcG9sbF9lbmFibGVkKSB7CisJCWJsa19pb3BvbGxfaW5pdCgmcGhiYS0+aW9wb2xsLCBiZV9pb3BvbGxfYnVkZ2V0LCBiZV9pb3BvbGwpOworCQlibGtfaW9wb2xsX2VuYWJsZSgmcGhiYS0+aW9wb2xsKTsKKwl9CisKKwlyZXQgPSBiZWlzY3NpX2luaXRfaXJxcyhwaGJhKTsKKwlpZiAocmV0IDwgMCkgeworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAiYmVpc2NzaV9kZXZfcHJvYmUtIgorCQkJICAgICAiRmFpbGVkIHRvIGJlaXNjc2lfaW5pdF9pcnFzXG4iKTsKKwkJZ290byBmcmVlX2Jsa2VuYmxkOworCX0KKwlyZXQgPSBod2lfZW5hYmxlX2ludHIocGhiYSk7CisJaWYgKHJldCA8IDApIHsKKwkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCBwaGJhLT5zaG9zdCwgImJlaXNjc2lfZGV2X3Byb2JlLSIKKwkJCSAgICAgIkZhaWxlZCB0byBod2lfZW5hYmxlX2ludHJcbiIpOworCQlnb3RvIGZyZWVfY3RybHI7CisJfQorCisJU0VfREVCVUcoREJHX0xWTF84LCAiXG5cblxuIFNVQ0NFU1MgLSBEUklWRVIgTE9BREVEIFxuXG5cbiIpOworCXJldHVybiAwOworCitmcmVlX2N0cmxyOgorCWlmIChwaGJhLT5wY2lkZXYtPmlycSkKKwkJZnJlZV9pcnEocGhiYS0+cGNpZGV2LT5pcnEsIHBoYmEpOworZnJlZV9ibGtlbmJsZDoKKwlkZXN0cm95X3dvcmtxdWV1ZShwaGJhLT53cSk7CisJaWYgKGJsa19pb3BvbGxfZW5hYmxlZCkKKwkJYmxrX2lvcG9sbF9kaXNhYmxlKCZwaGJhLT5pb3BvbGwpOworZnJlZV90d3E6CisJYmVpc2NzaV9jbGVhbl9wb3J0KHBoYmEpOworCWJlaXNjc2lfZnJlZV9tZW0ocGhiYSk7CitmcmVlX3BvcnQ6CisJcGNpX2ZyZWVfY29uc2lzdGVudChwaGJhLT5wY2lkZXYsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnNpemUsCisJCQkgICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLnZhLAorCQkJICAgcGhiYS0+Y3RybC5tYm94X21lbV9hbGxvY2VkLmRtYSk7CisJYmVpc2NzaV91bm1hcF9wY2lfZnVuY3Rpb24ocGhiYSk7CitoYmFfZnJlZToKKwlpc2NzaV9ob3N0X3JlbW92ZShwaGJhLT5zaG9zdCk7CisJcGNpX2Rldl9wdXQocGhiYS0+cGNpZGV2KTsKKwlpc2NzaV9ob3N0X2ZyZWUocGhiYS0+c2hvc3QpOworZGlzYWJsZV9wY2k6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGlzY3NpX3RyYW5zcG9ydCBiZWlzY3NpX2lzY3NpX3RyYW5zcG9ydCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubmFtZSA9IERSVl9OQU1FLAorCS5jYXBzID0gQ0FQX1JFQ09WRVJZX0wwIHwgQ0FQX0hEUkRHU1QgfAorCQlDQVBfTVVMVElfUjJUIHwgQ0FQX0RBVEFER1NUIHwgQ0FQX0RBVEFfUEFUSF9PRkZMT0FELAorCS5wYXJhbV9tYXNrID0gSVNDU0lfTUFYX1JFQ1ZfRExFTkdUSCB8CisJCUlTQ1NJX01BWF9YTUlUX0RMRU5HVEggfAorCQlJU0NTSV9IRFJER1NUX0VOIHwKKwkJSVNDU0lfREFUQURHU1RfRU4gfAorCQlJU0NTSV9JTklUSUFMX1IyVF9FTiB8CisJCUlTQ1NJX01BWF9SMlQgfAorCQlJU0NTSV9JTU1fREFUQV9FTiB8CisJCUlTQ1NJX0ZJUlNUX0JVUlNUIHwKKwkJSVNDU0lfTUFYX0JVUlNUIHwKKwkJSVNDU0lfUERVX0lOT1JERVJfRU4gfAorCQlJU0NTSV9EQVRBU0VRX0lOT1JERVJfRU4gfAorCQlJU0NTSV9FUkwgfAorCQlJU0NTSV9DT05OX1BPUlQgfAorCQlJU0NTSV9DT05OX0FERFJFU1MgfAorCQlJU0NTSV9FWFBfU1RBVFNOIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9QT1JUIHwKKwkJSVNDU0lfUEVSU0lTVEVOVF9BRERSRVNTIHwKKwkJSVNDU0lfVEFSR0VUX05BTUUgfCBJU0NTSV9UUEdUIHwKKwkJSVNDU0lfVVNFUk5BTUUgfCBJU0NTSV9QQVNTV09SRCB8CisJCUlTQ1NJX1VTRVJOQU1FX0lOIHwgSVNDU0lfUEFTU1dPUkRfSU4gfAorCQlJU0NTSV9GQVNUX0FCT1JUIHwgSVNDU0lfQUJPUlRfVE1PIHwKKwkJSVNDU0lfTFVfUkVTRVRfVE1PIHwKKwkJSVNDU0lfUElOR19UTU8gfCBJU0NTSV9SRUNWX1RNTyB8CisJCUlTQ1NJX0lGQUNFX05BTUUgfCBJU0NTSV9JTklUSUFUT1JfTkFNRSwKKwkuaG9zdF9wYXJhbV9tYXNrID0gSVNDU0lfSE9TVF9IV0FERFJFU1MgfCBJU0NTSV9IT1NUX0lQQUREUkVTUyB8CisJCQkJSVNDU0lfSE9TVF9JTklUSUFUT1JfTkFNRSwKKwkuY3JlYXRlX3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fY3JlYXRlLAorCS5kZXN0cm95X3Nlc3Npb24gPSBiZWlzY3NpX3Nlc3Npb25fZGVzdHJveSwKKwkuY3JlYXRlX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fY3JlYXRlLAorCS5iaW5kX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fYmluZCwKKwkuZGVzdHJveV9jb25uID0gaXNjc2lfY29ubl90ZWFyZG93biwKKwkuc2V0X3BhcmFtID0gYmVpc2NzaV9zZXRfcGFyYW0sCisJLmdldF9jb25uX3BhcmFtID0gYmVpc2NzaV9jb25uX2dldF9wYXJhbSwKKwkuZ2V0X3Nlc3Npb25fcGFyYW0gPSBpc2NzaV9zZXNzaW9uX2dldF9wYXJhbSwKKwkuZ2V0X2hvc3RfcGFyYW0gPSBiZWlzY3NpX2dldF9ob3N0X3BhcmFtLAorCS5zdGFydF9jb25uID0gYmVpc2NzaV9jb25uX3N0YXJ0LAorCS5zdG9wX2Nvbm4gPSBiZWlzY3NpX2Nvbm5fc3RvcCwKKwkuc2VuZF9wZHUgPSBpc2NzaV9jb25uX3NlbmRfcGR1LAorCS54bWl0X3Rhc2sgPSBiZWlzY3NpX3Rhc2tfeG1pdCwKKwkuY2xlYW51cF90YXNrID0gYmVpc2NzaV9jbGVhbnVwX3Rhc2ssCisJLmFsbG9jX3BkdSA9IGJlaXNjc2lfYWxsb2NfcGR1LAorCS5wYXJzZV9wZHVfaXR0ID0gYmVpc2NzaV9wYXJzZV9wZHUsCisJLmdldF9zdGF0cyA9IGJlaXNjc2lfY29ubl9nZXRfc3RhdHMsCisJLmVwX2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Nvbm5lY3QsCisJLmVwX3BvbGwgPSBiZWlzY3NpX2VwX3BvbGwsCisJLmVwX2Rpc2Nvbm5lY3QgPSBiZWlzY3NpX2VwX2Rpc2Nvbm5lY3QsCisJLnNlc3Npb25fcmVjb3ZlcnlfdGltZWRvdXQgPSBpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJlaXNjc2lfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wcm9iZSA9IGJlaXNjc2lfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBiZWlzY3NpX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBiZWlzY3NpX3BjaV9pZF90YWJsZQorfTsKKworc3RhdGljIGludCBfX2luaXQgYmVpc2NzaV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwliZWlzY3NpX3Njc2lfdHJhbnNwb3J0ID0KKwkJCWlzY3NpX3JlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCWlmICghYmVpc2NzaV9zY3NpX3RyYW5zcG9ydCkgeworCQlTRV9ERUJVRyhEQkdfTFZMXzEsCisJCQkgImJlaXNjc2lfbW9kdWxlX2luaXQgLSBVbmFibGUgdG8gIHJlZ2lzdGVyIGJlaXNjc2kiCisJCQkgInRyYW5zcG9ydC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCX0KKwlTRV9ERUJVRyhEQkdfTFZMXzgsICJJbiBiZWlzY3NpX21vZHVsZV9pbml0LCB0dD0lcCBcbiIsCisJCSAmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpZiAocmV0KSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiYmVpc2NzaV9tb2R1bGVfaW5pdCAtIFVuYWJsZSB0byAgcmVnaXN0ZXIiCisJCQkgImJlaXNjc2kgcGNpIGRyaXZlci5cbiIpOworCQlnb3RvIHVucmVnaXN0ZXJfaXNjc2lfdHJhbnNwb3J0OworCX0KKwlyZXR1cm4gMDsKKwordW5yZWdpc3Rlcl9pc2NzaV90cmFuc3BvcnQ6CisJaXNjc2lfdW5yZWdpc3Rlcl90cmFuc3BvcnQoJmJlaXNjc2lfaXNjc2lfdHJhbnNwb3J0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYmVpc2NzaV9tb2R1bGVfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYmVpc2NzaV9wY2lfZHJpdmVyKTsKKwlpc2NzaV91bnJlZ2lzdGVyX3RyYW5zcG9ydCgmYmVpc2NzaV9pc2NzaV90cmFuc3BvcnQpOworfQorCittb2R1bGVfaW5pdChiZWlzY3NpX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGJlaXNjc2lfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21haW4uaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjOWI3MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tYWluLmgKQEAgLTAsMCArMSw4MzcgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUFJTl8KKyNkZWZpbmUgX0JFSVNDU0lfTUFJTl8KKworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9ibGstaW9wb2xsLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL2lzY3NpX3Byb3RvLmg+CisjaW5jbHVkZSA8c2NzaS9saWJpc2NzaS5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaD4KKworI2luY2x1ZGUgImJlLmgiCisKKworCisjZGVmaW5lIERSVl9OQU1FCQkiYmUyaXNjc2kiCisjZGVmaW5lIEJVSUxEX1NUUgkJIjIuMC41MjcuMCIKKworI2RlZmluZSBCRV9OQU1FCQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUyIiBcCisJCQkJIkxpbnV4IGlTQ1NJIERyaXZlciB2ZXJzaW9uIiBCVUlMRF9TVFIKKyNkZWZpbmUgRFJWX0RFU0MJCUJFX05BTUUgIiAiICJEcml2ZXIiCisKKyNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOUEyCisjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjEyCisjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAyCisjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAzCisKKyNkZWZpbmUgQkUyX01BWF9TRVNTSU9OUwk2NAorI2RlZmluZSBCRTJfQ01EU19QRVJfQ1hOCTEyOAorI2RlZmluZSBCRTJfTE9HT1VUUwkJQkUyX01BWF9TRVNTSU9OUworI2RlZmluZSBCRTJfVE1GUwkJMTYKKyNkZWZpbmUgQkUyX05PUE9VVF9SRVEJCTE2CisjZGVmaW5lIEJFMl9BU1lOQ1BEVVMJCUJFMl9NQVhfU0VTU0lPTlMKKyNkZWZpbmUgQkUyX01BWF9JQ0RTCQkyMDQ4CisjZGVmaW5lIEJFMl9TR0UJCQkzMgorI2RlZmluZSBCRTJfREVGUERVX0hEUl9TWgk2NAorI2RlZmluZSBCRTJfREVGUERVX0RBVEFfU1oJODE5MgorI2RlZmluZSBCRTJfSU9fREVQVEggXAorCShCRTJfTUFYX0lDRFMgLyAyIC0gKEJFMl9MT0dPVVRTICsgQkUyX1RNRlMgKyBCRTJfTk9QT1VUX1JFUSkpCisKKyNkZWZpbmUgQkVJU0NTSV9TR0xJU1RfRUxFTUVOVFMJQkUyX1NHRQorCisjZGVmaW5lIEJFSVNDU0lfTUFYX0NNTkRTCTEwMjQJLyogTWF4IElPJ3MgcGVyIEN0cmxyIHNodC0+Y2FuX3F1ZXVlICovCisjZGVmaW5lIEJFSVNDU0lfQ01EX1BFUl9MVU4JMTI4CS8qIHNjc2lfaG9zdC0+Y21kX3Blcl9sdW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9NQVhfU0VDVE9SUwkyMDQ4CS8qIHNjc2lfaG9zdC0+bWF4X3NlY3RvcnMgKi8KKworI2RlZmluZSBCRUlTQ1NJX01BWF9DTURfTEVOCTE2CS8qIHNjc2lfaG9zdC0+bWF4X2NtZF9sZW4gKi8KKyNkZWZpbmUgQkVJU0NTSV9OVU1fTUFYX0xVTgkyNTYJLyogc2NzaV9ob3N0LT5tYXhfbHVuICovCisjZGVmaW5lIEJFSVNDU0lfTlVNX0RFVklDRVNfU1VQUE9SVEVECTB4MDEKKyNkZWZpbmUgQkVJU0NTSV9NQVhfRlJBR1NfSU5JVAkxOTIKKyNkZWZpbmUgQkVfTlVNX01TSVhfRU5UUklFUyAJMQorI2RlZmluZSBNUFVfRVBfU0VNQVBIT1JFIAkweGFjCisKKyNkZWZpbmUgQkVfU0VOU0VfSU5GT19TSVpFCQkyNTgKKyNkZWZpbmUgQkVfSVNDU0lfUERVX0hFQURFUl9TSVpFCTY0CisjZGVmaW5lIEJFX01JTl9NRU1fU0laRQkJCTE2Mzg0CisKKyNkZWZpbmUgSUlPQ19TQ1NJX0RBVEEgICAgICAgICAgICAgICAgICAweDA1CS8qIFdyaXRlIE9wZXJhdGlvbiAqLworCisjZGVmaW5lIERCR19MVkwJCQkJMHgwMDAwMDAwMQorI2RlZmluZSBEQkdfTFZMXzEJCQkweDAwMDAwMDAxCisjZGVmaW5lIERCR19MVkxfMgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgREJHX0xWTF8zCQkJMHgwMDAwMDAwNAorI2RlZmluZSBEQkdfTFZMXzQJCQkweDAwMDAwMDA4CisjZGVmaW5lIERCR19MVkxfNQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgREJHX0xWTF82CQkJMHgwMDAwMDAyMAorI2RlZmluZSBEQkdfTFZMXzcJCQkweDAwMDAwMDQwCisjZGVmaW5lIERCR19MVkxfOAkJCTB4MDAwMDAwODAKKworI2RlZmluZSBTRV9ERUJVRyhkZWJ1Z19tYXNrLCBmbXQsIGFyZ3MuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoZGVidWdfbWFzayAmIERCR19MVkwpIHsJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiKCVzKCk6JWQpOiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7XAorCQlwcmludGsoZm10LCAjI2FyZ3MpOwkJCVwKKwl9CQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKy8qKgorICogaGFyZHdhcmUgbmVlZHMgdGhlIGFzeW5jIFBEVSBidWZmZXJzIHRvIGJlIHBvc3RlZCBpbiBtdWx0aXBsZXMgb2YgOAorICogU28gaGF2ZSBhdGxlYXN0IDggb2YgdGhlbSBieSBkZWZhdWx0CisgKi8KKworI2RlZmluZSBIV0lfR0VUX0FTWU5DX1BEVV9DVFgocGh3aSkJKHBod2ktPnBod2lfY3R4dC0+cGFzeW5jX2N0eCkKKworLyoqKioqKioqKiBNZW1vcnkgQkFSIHJlZ2lzdGVyICoqKioqKioqKioqKi8KKyNkZWZpbmUgUENJQ0ZHX01FTUJBUl9DVFJMX0lOVF9DVFJMX09GRlNFVCAJMHhmYworLyoqCisgKiBIb3N0IEludGVycnVwdCBFbmFibGUsIGlmIHNldCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkIGFsdGhvdWdoICJQQ0kgSW50ZXJydXB0CisgKiBEaXNhYmxlIiBtYXkgc3RpbGwgZ2xvYmFsbHkgYmxvY2sgaW50ZXJydXB0cyBpbiBhZGRpdGlvbiB0byBpbmRpdmlkdWFsCisgKiBpbnRlcnJ1cHQgbWFza3M7IGEgbWVjaGFuaXNtIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byBibG9jayBhbGwgaW50ZXJydXB0cworICogYXRvbWljYWxseSB3aXRob3V0IGhhdmluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSBQQ0kgSW50ZXJydXB0IERpc2FibGUgYml0CisgKiB3aXRoIHRoZSBPUy4KKyAqLworI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBJU1IwIFJlZ2lzdGVyIG9mZnNldCAqKioqKioqKioqLworI2RlZmluZSBDRVZfSVNSMF9PRkZTRVQgCQkJMHhDMTgKKyNkZWZpbmUgQ0VWX0lTUl9TSVpFCQkJCTQKKworLyoqCisgKiBNYWNyb3MgZm9yIHJlYWRpbmcvd3JpdGluZyBhIHByb3RlY3Rpb24gZG9tYWluIG9yIENTUiByZWdpc3RlcnMKKyAqIGluIEJsYWRlRW5naW5lLgorICovCisKKyNkZWZpbmUgREJfVFhVTFAwX09GRlNFVCAweDQwCisjZGVmaW5lIERCX1JYVUxQMF9PRkZTRVQgMHhBMAorLyoqKioqKioqKiBFdmVudCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9FUV9PRkZTRVQJCQlEQl9DUV9PRkZTRVQKKyNkZWZpbmUgREJfRVFfUklOR19JRF9NQVNLCQkweDFGRgkvKiBiaXRzIDAgLSA4ICovCisvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZvciB0aGlzIGVxICovCisjZGVmaW5lIERCX0VRX0NMUl9TSElGVAkJCSg5KQkvKiBiaXQgOSAqLworLyogTXVzdCBiZSAxICovCisjZGVmaW5lIERCX0VRX0VWTlRfU0hJRlQJCSgxMCkJLyogYml0IDEwICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfRVFfTlVNX1BPUFBFRF9TSElGVAkJKDE2KQkvKiBiaXRzIDE2IC0gMjggKi8KKy8qIFJlYXJtIGJpdCAqLworI2RlZmluZSBEQl9FUV9SRUFSTV9TSElGVAkJKDI5KQkvKiBiaXQgMjkgKi8KKworLyoqKioqKioqKiBDb21wbCBRIGRvb3IgYmVsbCAqKioqKioqKioqKioqLworI2RlZmluZSBEQl9DUV9PRkZTRVQgCQkJMHgxMjAKKyNkZWZpbmUgREJfQ1FfUklOR19JRF9NQVNLCQkweDNGRgkvKiBiaXRzIDAgLSA5ICovCisvKiBOdW1iZXIgb2YgZXZlbnQgZW50cmllcyBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgREJfQ1FfTlVNX1BPUFBFRF9TSElGVAkJKDE2KSAJLyogYml0cyAxNiAtIDI4ICovCisvKiBSZWFybSBiaXQgKi8KKyNkZWZpbmUgREJfQ1FfUkVBUk1fU0hJRlQJCSgyOSkgCS8qIGJpdCAyOSAqLworCisjZGVmaW5lIEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykJKHBjLT5waHdpX2N0cmxyKQorI2RlZmluZSBIV0lfR0VUX0RFRl9CVUZRX0lEKHBjKSAoKChzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgKilcCisJCShHRVRfSFdJX0NPTlRST0xMRVJfV1MocGMpKSktPmRlZmF1bHRfcGR1X2RhdGEuaWQpCisjZGVmaW5lIEhXSV9HRVRfREVGX0hEUlFfSUQocGMpICgoKHN0cnVjdCBod2lfY29udHJvbGxlciAqKVwKKwkJKEdFVF9IV0lfQ09OVFJPTExFUl9XUyhwYykpKS0+ZGVmYXVsdF9wZHVfaGRyLmlkKQorCisjZGVmaW5lIFBBR0VTX1JFUVVJUkVEKHgpIFwKKwkoKHggPCBQQUdFX1NJWkUpID8gMSA6ICAoKHggKyBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRSkpCisKK2VudW0gYmVfbWVtX2VudW0geworCUhXSV9NRU1fQURETl9DT05URVhULAorCUhXSV9NRU1fQ1EsCisJSFdJX01FTV9FUSwKKwlIV0lfTUVNX1dSQiwKKwlIV0lfTUVNX1dSQkgsCisJSFdJX01FTV9TR0xILAkvKiA1ICovCisJSFdJX01FTV9TR0UsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfQlVGLAorCUhXSV9NRU1fQVNZTkNfREFUQV9CVUYsCisJSFdJX01FTV9BU1lOQ19IRUFERVJfUklORywKKwlIV0lfTUVNX0FTWU5DX0RBVEFfUklORywJLyogMTAgKi8KKwlIV0lfTUVNX0FTWU5DX0hFQURFUl9IQU5ETEUsCisJSFdJX01FTV9BU1lOQ19EQVRBX0hBTkRMRSwKKwlIV0lfTUVNX0FTWU5DX1BEVV9DT05URVhULAorCUlTQ1NJX01FTV9HTE9CQUxfSEVBREVSLAorCVNFX01FTV9NQVggIAkvKiAxNSAqLworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzMzIgeworCXVuc2lnbmVkIGludCBhZGRyZXNzX2xvOworCXVuc2lnbmVkIGludCBhZGRyZXNzX2hpOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzOworfTsKKworc3RydWN0IGJlX2J1c19hZGRyZXNzIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBiZV9idXNfYWRkcmVzczMyIGEzMjsKKwkJc3RydWN0IGJlX2J1c19hZGRyZXNzNjQgYTY0OworCX0gdTsKK307CisKK3N0cnVjdCBtZW1fYXJyYXkgeworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBidXNfYWRkcmVzczsJLyogQnVzIGFkZHJlc3Mgb2YgbG9jYXRpb24gKi8KKwl2b2lkICp2aXJ0dWFsX2FkZHJlc3M7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgdG8gdGhlIGxvY2F0aW9uICovCisJdW5zaWduZWQgaW50IHNpemU7CQkvKiBTaXplIHJlcXVpcmVkIGJ5IG1lbW9yeSBibG9jayAqLworfTsKKworc3RydWN0IGJlX21lbV9kZXNjcmlwdG9yIHsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgbWVtb3J5IHBhcmFtZXRlciAqLworCXVuc2lnbmVkIGludCBjYXRlZ29yeTsJLyogdHlwZSBpbmRpY2F0ZXMgY2FjaGVkL25vbi1jYWNoZWQgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2VsZW1lbnRzOwkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcworCQkJCQkgKiBkZXNjcmlwdG9yCisJCQkJCSAqLworCXVuc2lnbmVkIGludCBhbGlnbm1lbnRfbWFzazsJLyogQWxpZ25tZW50IG1hc2sgZm9yIHRoaXMgYmxvY2sgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZV9pbl9ieXRlczsJLyogU2l6ZSByZXF1aXJlZCBieSBtZW1vcnkgYmxvY2sgKi8KKwlzdHJ1Y3QgbWVtX2FycmF5ICptZW1fYXJyYXk7Cit9OworCitzdHJ1Y3Qgc2dsX2hhbmRsZSB7CisJdW5zaWduZWQgaW50IHNnbF9pbmRleDsKKwlzdHJ1Y3QgaXNjc2lfc2dlICpwZnJhZzsKK307CisKK3N0cnVjdCBoYmFfcGFyYW1ldGVycyB7CisJdW5zaWduZWQgaW50IGlvc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgY3huc19wZXJfY3RybDsKKwl1bnNpZ25lZCBpbnQgYXN5bmNwZHVzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBpY2RzX3Blcl9jdHJsOworCXVuc2lnbmVkIGludCBudW1fc2dlX3Blcl9pbzsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2hkcl9zejsKKwl1bnNpZ25lZCBpbnQgZGVmcGR1X2RhdGFfc3o7CisJdW5zaWduZWQgaW50IG51bV9jcV9lbnRyaWVzOworCXVuc2lnbmVkIGludCBudW1fZXFfZW50cmllczsKKwl1bnNpZ25lZCBpbnQgd3Jic19wZXJfY3huOworCXVuc2lnbmVkIGludCBjcmFzaG1vZGU7CisJdW5zaWduZWQgaW50IGhiYV9udW07CisKKwl1bnNpZ25lZCBpbnQgbWdtdF93c19zejsKKwl1bnNpZ25lZCBpbnQgaHdpX3dzX3N6OworCisJdW5zaWduZWQgaW50IGV0bzsKKwl1bnNpZ25lZCBpbnQgbGR0bzsKKworCXVuc2lnbmVkIGludCBkYmdfZmxhZ3M7CisJdW5zaWduZWQgaW50IG51bV9jeG47CisKKwl1bnNpZ25lZCBpbnQgZXFfdGltZXI7CisJLyoqCisJICogVGhlc2UgYXJlIGNhbGN1bGF0ZWQgZnJvbSBvdGhlciBwYXJhbXMuIFRoZXkncmUgaGVyZQorCSAqIGZvciBkZWJ1ZyBwdXJwb3NlcworCSAqLworCXVuc2lnbmVkIGludCBudW1fbWNjX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fbWNjX2NxX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fY3FfcGFnZXM7CisJdW5zaWduZWQgaW50IG51bV9lcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9idWZfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2J1Zl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9wYWdlczsKKwl1bnNpZ25lZCBpbnQgbnVtX2FzeW5jX3BkdV9oZHJfc2dsX3BhZ2VzOworCXVuc2lnbmVkIGludCBudW1fYXN5bmNfcGR1X2hkcl9jcV9wYWdlczsKKworCXVuc2lnbmVkIGludCBudW1fc2dlOworfTsKKworc3RydWN0IGJlaXNjc2lfaGJhIHsKKwlzdHJ1Y3QgaGJhX3BhcmFtZXRlcnMgcGFyYW1zOworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwl1bnNpZ25lZCBpbnQgbWVtX3JlcVtTRV9NRU1fTUFYXTsKKwkvKiBQQ0kgQkFSIG1hcHBlZCBhZGRyZXNzZXMgKi8KKwl1OCBfX2lvbWVtICpjc3JfdmE7CS8qIENTUiAqLworCXU4IF9faW9tZW0gKmRiX3ZhOwkvKiBEb29yICBCZWxsICAqLworCXU4IF9faW9tZW0gKnBjaV92YTsJLyogUENJIENvbmZpZyAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBjc3JfcGE7CS8qIENTUiAqLworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBkYl9wYTsJLyogQ1NSICovCisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBjaV9wYTsJLyogQ1NSICovCisJLyogUENJIHJlcHJlc2VudGF0aW9uIG9mIG91ciBIQkEgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBzaG9ydCBhc2ljX3JldmlzaW9uOworCXN0cnVjdCBibGtfaW9wb2xsCWlvcG9sbDsKKwlzdHJ1Y3QgYmVfbWVtX2Rlc2NyaXB0b3IgKmluaXRfbWVtOworCisJdW5zaWduZWQgc2hvcnQgaW9fc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGlvX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKippb19zZ2xfaG5kbF9iYXNlOworCisJdW5zaWduZWQgc2hvcnQgZWhfc2dsX2FsbG9jX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9mcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IGVoX3NnbF9obmRsX2F2Ymw7CisJc3RydWN0IHNnbF9oYW5kbGUgKiplaF9zZ2xfaG5kbF9iYXNlOworCXNwaW5sb2NrX3QgaW9fc2dsX2xvY2s7CisJc3BpbmxvY2tfdCBtZ210X3NnbF9sb2NrOworCXNwaW5sb2NrX3QgaXNyX2xvY2s7CisJdW5zaWduZWQgaW50IGFnZTsKKwl1bnNpZ25lZCBzaG9ydCBhdmxibF9jaWRzOworCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwl1bnNpZ25lZCBzaG9ydCBjaWRfZnJlZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uX3RhYmxlW0JFMl9NQVhfU0VTU0lPTlMgKiAyXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhiYV9xdWV1ZTsKKwl1bnNpZ25lZCBzaG9ydCAqY2lkX2FycmF5OworCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqKmVwX2FycmF5OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCB7CisJCS8qKgorCQkgKiBncm91cCB0b2dldGhlciBzaW5jZSB0aGV5IGFyZSB1c2VkIG1vc3QgZnJlcXVlbnRseQorCQkgKiBmb3IgY2lkIHRvIGNyaSBjb252ZXJzaW9uCisJCSAqLworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgcGh5c19wb3J0OworCisJCXVuc2lnbmVkIGludCBpc3Jfb2Zmc2V0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX3N0YXJ0OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfY2lkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgaXNjc2lfaWNkX2NvdW50OworCQl1bnNpZ25lZCBpbnQgcGNpX2Z1bmN0aW9uOworCisJCXVuc2lnbmVkIHNob3J0IGNpZF9hbGxvYzsKKwkJdW5zaWduZWQgc2hvcnQgY2lkX2ZyZWU7CisJCXVuc2lnbmVkIHNob3J0IGF2bGJsX2NpZHM7CisJCXNwaW5sb2NrX3QgY2lkX2xvY2s7CisJfSBmd19jb25maWc7CisKKwl1OCBtYWNfYWRkcmVzc1tFVEhfQUxFTl07CisJdW5zaWduZWQgc2hvcnQgdG9kb19jcTsKKwl1bnNpZ25lZCBzaG9ydCB0b2RvX21jY19jcTsKKwljaGFyIHdxX25hbWVbMjBdOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsJLyogVGhlIGFjdHVhayB3b3JrIHF1ZXVlICovCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfY3FzOwkvKiBUaGUgd29yayBiZWluZyBxdWV1ZWQgKi8KKwlzdHJ1Y3QgYmVfY3RybF9pbmZvIGN0cmw7Cit9OworCitzdHJ1Y3QgYmVpc2NzaV9zZXNzaW9uIHsKKwlzdHJ1Y3QgcGNpX3Bvb2wgKmJoc19wb29sOworfTsKKworLyoqCisgKiBzdHJ1Y3QgYmVpc2NzaV9jb25uIC0gaXNjc2kgY29ubmVjdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJlaXNjc2lfY29ubiB7CisJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm47CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXUzMiBleHBfc3RhdHNuOworCXUzMiBiZWlzY3NpX2Nvbm5fY2lkOworCXN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBzaG9ydCBsb2dpbl9pbl9wcm9ncmVzczsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcGxvZ2luX3NnbF9oYW5kbGU7CisJc3RydWN0IGJlaXNjc2lfc2Vzc2lvbiAqYmVpc2NzaV9zZXNzOworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBieSB0aGUgY2hpcCAqLworc3RydWN0IHBkdV9kYXRhX291dCB7CisJdTMyIGR3WzEyXTsKK307CisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX3BkdV9kYXRhX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlICovCisJdTggcnN2ZDBbMl07CQkvKiBzaG91bGQgYmUgMCAqLworCXU4IHJzdmQxWzddOworCXU4IGZpbmFsX2JpdDsJCS8qIEYgYml0ICovCisJdTggcnN2ZDJbMTZdOworCXU4IGFoc19sZW5ndGhbOF07CS8qIG5vIEFIUyAqLworCXU4IGRhdGFfbGVuX2hpWzhdOworCXU4IGRhdGFfbGVuX2xvWzE2XTsJLyogRGF0YVNlZ21lbnRMZW5ndGggKi8KKwl1OCBsdW5bNjRdOworCXU4IGl0dFszMl07CQkvKiBJVFQ7IGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHR0dFszMl07CQkvKiBUVFQ7IHZhbGlkIGZvciBSMlQgb3IgMHhmZmZmZmZmZiAqLworCXU4IHJzdmQzWzMyXTsKKwl1OCBleHBfc3RhdF9zblszMl07CisJdTggcnN2ZDRbMzJdOworCXU4IGRhdGFfc25bMzJdOworCXU4IGJ1ZmZlcl9vZmZzZXRbMzJdOworCXU4IHJzdmQ1WzMyXTsKK307CisKK3N0cnVjdCBiZV9jbWRfYmhzIHsKKwlzdHJ1Y3QgaXNjc2lfY21kIGlzY3NpX2hkcjsKKwl1bnNpZ25lZCBjaGFyIHBhZDFbMTZdOworCXN0cnVjdCBwZHVfZGF0YV9vdXQgaXNjc2lfZGF0YV9wZHU7CisJdW5zaWduZWQgY2hhciBwYWQyW0JFX1NFTlNFX0lORk9fU0laRSAtCisJCQlzaXplb2Yoc3RydWN0IHBkdV9kYXRhX291dCldOworfTsKKworc3RydWN0IGJlaXNjc2lfaW9fdGFzayB7CisJc3RydWN0IHdyYl9oYW5kbGUgKnB3cmJfaGFuZGxlOworCXN0cnVjdCBzZ2xfaGFuZGxlICpwc2dsX2hhbmRsZTsKKwlzdHJ1Y3QgYmVpc2NzaV9jb25uICpjb25uOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjc2lfY21uZDsKKwl1bnNpZ25lZCBpbnQgY21kX3NuOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7CisJdW5zaWduZWQgc2hvcnQgaGVhZGVyX2xlbjsKKworCXN0cnVjdCBiZV9jbWRfYmhzICpjbWRfYmhzOworCXN0cnVjdCBiZV9idXNfYWRkcmVzcyBiaHNfcGE7CisJdW5zaWduZWQgc2hvcnQgYmhzX2xlbjsKK307CisKK3N0cnVjdCBiZV9ub25pb19iaHMgeworCXN0cnVjdCBpc2NzaV9oZHIgaXNjc2lfaGRyOworCXVuc2lnbmVkIGNoYXIgcGFkMVsxNl07CisJc3RydWN0IHBkdV9kYXRhX291dCBpc2NzaV9kYXRhX3BkdTsKKwl1bnNpZ25lZCBjaGFyIHBhZDJbQkVfU0VOU0VfSU5GT19TSVpFIC0KKwkJCXNpemVvZihzdHJ1Y3QgcGR1X2RhdGFfb3V0KV07Cit9OworCitzdHJ1Y3QgYmVfc3RhdHVzX2JocyB7CisJc3RydWN0IGlzY3NpX2NtZCBpc2NzaV9oZHI7CisJdW5zaWduZWQgY2hhciBwYWQxWzE2XTsKKwkvKioKKwkgKiBUaGUgcGx1cyAyIGJlbG93IGlzIHRvIGhvbGQgdGhlIHNlbnNlIGluZm8gbGVuZ3RoIHRoYXQgZ2V0cworCSAqIERNQSdlZCBieSBSeFVMUAorCSAqLworCXVuc2lnbmVkIGNoYXIgc2Vuc2VfaW5mb1tCRV9TRU5TRV9JTkZPX1NJWkVdOworfTsKKworc3RydWN0IGlzY3NpX3NnZSB7CisJdTMyIGR3WzRdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV9zZ2UgeworCXU4IGFkZHJfaGlbMzJdOworCXU4IGFkZHJfbG9bMzJdOworCXU4IHNnZV9vZmZzZXRbMjJdOwkvKiBEV09SRCAyICovCisJdTggcnN2ZDBbOV07CQkvKiBEV09SRCAyICovCisJdTggbGFzdF9zZ2U7CQkvKiBEV09SRCAyICovCisJdTggbGVuWzE3XTsJCS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMVsxNV07CQkvKiBEV09SRCAzICovCit9OworCitzdHJ1Y3QgYmVpc2NzaV9vZmZsb2FkX3BhcmFtcyB7CisJdTMyIGR3WzVdOworfTsKKworI2RlZmluZSBPRkZMRF9QQVJBTVNfRVJMCTB4MDAwMDAwMDMKKyNkZWZpbmUgT0ZGTERfUEFSQU1TX0RERQkweDAwMDAwMDA0CisjZGVmaW5lIE9GRkxEX1BBUkFNU19IREUJMHgwMDAwMDAwOAorI2RlZmluZSBPRkZMRF9QQVJBTVNfSVIyVAkweDAwMDAwMDEwCisjZGVmaW5lIE9GRkxEX1BBUkFNU19JTUQJMHgwMDAwMDAyMAorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2JlaXNjc2lfb2ZmbG9hZF9wYXJhbXMgeworCXU4IG1heF9idXJzdF9sZW5ndGhbMzJdOworCXU4IG1heF9zZW5kX2RhdGFfc2VnbWVudF9sZW5ndGhbMzJdOworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFszMl07CisJdTggZXJsWzJdOworCXU4IGRkZVsxXTsKKwl1OCBoZGVbMV07CisJdTggaXIydFsxXTsKKwl1OCBpbWRbMV07CisJdTggcGFkWzI2XTsKKwl1OCBleHBfc3RhdHNuWzMyXTsKK307CisKKy8qIHZvaWQgaHdpX2NvbXBsZXRlX2RydnJfbXNncyhzdHJ1Y3QgYmVpc2NzaV9jb25uICpiZWlzY3NpX2Nvbm4sCisJCXN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNvbF9jcWUgKnBzb2wpOyovCisKK3N0cnVjdCBhc3luY19wZHVfaGFuZGxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGJlX2J1c19hZGRyZXNzIHBhOworCXZvaWQgKnBidWZmZXI7CisJdW5zaWduZWQgaW50IGNvbnN1bWVkOworCXVuc2lnbmVkIGNoYXIgaW5kZXg7CisJdW5zaWduZWQgY2hhciBpc19oZWFkZXI7CisJdW5zaWduZWQgc2hvcnQgY3JpOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyX2xlbjsKK307CisKK3N0cnVjdCBod2lfYXN5bmNfZW50cnkgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgaGRyX3JlY2VpdmVkOworCQl1bnNpZ25lZCBjaGFyIGhkcl9sZW47CisJCXVuc2lnbmVkIHNob3J0IGJ5dGVzX3JlY2VpdmVkOworCQl1bnNpZ25lZCBpbnQgYnl0ZXNfbmVlZGVkOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJfSB3YWl0X3F1ZXVlOworCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkZXJfYnVzeV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgZGF0YV9idXN5X2xpc3Q7Cit9OworCisjZGVmaW5lIEJFX01JTl9BU1lOQ19FTlRSSUVTIDEyOAorCitzdHJ1Y3QgaHdpX2FzeW5jX3BkdV9jb250ZXh0IHsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQl1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKwkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJfSBhc3luY19oZWFkZXI7CisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmVfYnVzX2FkZHJlc3MgcGFfYmFzZTsKKwkJdm9pZCAqdmFfYmFzZTsKKwkJdm9pZCAqcmluZ19iYXNlOworCQlzdHJ1Y3QgYXN5bmNfcGR1X2hhbmRsZSAqaGFuZGxlX2Jhc2U7CisKKwkJdW5zaWduZWQgaW50IGhvc3Rfd3JpdGVfcHRyOworCQl1bnNpZ25lZCBpbnQgZXBfcmVhZF9wdHI7CisJCXVuc2lnbmVkIGludCB3cml0YWJsZXM7CisKKwkJdW5zaWduZWQgaW50IGZyZWVfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1c3lfZW50cmllczsKKwkJdW5zaWduZWQgaW50IGJ1ZmZlcl9zaXplOworCQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKKwkJdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCX0gYXN5bmNfZGF0YTsKKworCS8qKgorCSAqIFRoaXMgaXMgYSB2YXJ5aW5nIHNpemUgbGlzdCEgRG8gbm90IGFkZCBhbnl0aGluZworCSAqIGFmdGVyIHRoaXMgZW50cnkhIQorCSAqLworCXN0cnVjdCBod2lfYXN5bmNfZW50cnkgYXN5bmNfZW50cnlbQkVfTUlOX0FTWU5DX0VOVFJJRVNdOworfTsKKworI2RlZmluZSBQRFVDUUVfQ09ERV9NQVNLCTB4MDAwMDAwM0YKKyNkZWZpbmUgUERVQ1FFX0RQTF9NQVNLCQkweEZGRkYwMDAwCisjZGVmaW5lIFBEVUNRRV9JTkRFWF9NQVNLCTB4MDAwMEZGRkYKKworc3RydWN0IGlfdF9kcGR1X2NxZSB7CisJdTMyIGR3WzRdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pX3RfZHBkdV9jcWUgeworCXU4IGRiX2FkZHJfaGlbMzJdOworCXU4IGRiX2FkZHJfbG9bMzJdOworCXU4IGNvZGVbNl07CisJdTggY2lkWzEwXTsKKwl1OCBkcGxbMTZdOworCXU4IGluZGV4WzE2XTsKKwl1OCBudW1fY29uc1sxMF07CisJdTggcnN2ZDBbNF07CisJdTggZmluYWw7CisJdTggdmFsaWQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIENRRV9WQUxJRF9NQVNLCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1FFX0NPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIENRRV9DSURfTUFTSwkweDAwMDBGRkMwCisKKyNkZWZpbmUgRVFFX1ZBTElEX01BU0sJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRVFFX01BSk9SQ09ERV9NQVNLCTB4MDAwMDAwMEUKKyNkZWZpbmUgRVFFX1JFU0lEX01BU0sJCTB4RkZGRjAwMDAKKworc3RydWN0IGJlX2VxX2VudHJ5IHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2VxX2VudHJ5IHsKKwl1OCB2YWxpZDsJCS8qIERXT1JEIDAgKi8KKwl1OCBtYWpvcl9jb2RlWzNdOwkvKiBEV09SRCAwICovCisJdTggbWlub3JfY29kZVsxMl07CS8qIERXT1JEIDAgKi8KKwl1OCByZXNvdXJjZV9pZFsxNl07CS8qIERXT1JEIDAgKi8KKworfSBfX3BhY2tlZDsKKworc3RydWN0IGNxX2RiIHsKKwl1MzIgZHdbMV07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2NxX2RiIHsKKwl1OCBxaWRbMTBdOworCXU4IGV2ZW50WzFdOworCXU4IHJzdmQwWzVdOworCXU4IG51bV9wb3BwZWRbMTNdOworCXU4IHJlYXJtWzFdOworCXU4IHJzdmQxWzJdOworfSBfX3BhY2tlZDsKKwordm9pZCBiZWlzY3NpX3Byb2Nlc3NfZXEoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhKTsKKworCitzdHJ1Y3QgaXNjc2lfd3JiIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBXUkJfVFlQRV9NQVNLIDB4RjAwMDAwMDAKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9pc2NzaV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCByMnRfZXhwX2R0bFsyNF07CS8qIERXT1JEIDEgKi8KKwl1OCBzZ2xfaWNkX2lkeFsxMl07CS8qIERXT1JEIDIgKi8KKwl1OCByc3ZkMFsyMF07CQkvKiBEV09SRCAyICovCisJdTggZXhwX2RhdGFfc25bMzJdOwkvKiBEV09SRCAzICovCisJdTggaXNjc2lfYmhzX2FkZHJfaGlbMzJdOwkvKiBEV09SRCA0ICovCisJdTggaXNjc2lfYmhzX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA1ICovCisJdTggY21kc25faXR0WzMyXTsJLyogRFdPUkQgNiAqLworCXU4IGRpZl9yZWZfdGFnWzMyXTsJLyogRFdPUkQgNyAqLworCXU4IHNnZTBfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBzZ2UwX2FkZHJfbG9bMzJdOwkvKiBEV09SRCA5ICAqLworCXU4IHNnZTBfb2Zmc2V0WzIyXTsJLyogRFdPUkQgMTAgKi8KKwl1OCBwYnM7CQkJLyogRFdPUkQgMTAgKi8KKwl1OCBkaWZfbW9kZVsyXTsJCS8qIERXT1JEIDEwICovCisJdTggcnN2ZDFbNl07CQkvKiBEV09SRCAxMCAqLworCXU4IHNnZTBfbGFzdDsJCS8qIERXT1JEIDEwICovCisJdTggc2dlMF9sZW5bMTddOwkvKiBEV09SRCAxMSAqLworCXU4IGRpZl9tZXRhX3RhZ1sxNF07CS8qIERXT1JEIDExICovCisJdTggc2dlMF9pbl9kZHI7CQkvKiBEV09SRCAxMSAqLworCXU4IHNnZTFfYWRkcl9oaVszMl07CS8qIERXT1JEIDEyICovCisJdTggc2dlMV9hZGRyX2xvWzMyXTsJLyogRFdPUkQgMTMgKi8KKwl1OCBzZ2UxX3IydF9vZmZzZXRbMjJdOwkvKiBEV09SRCAxNCAqLworCXU4IHJzdmQyWzldOwkJLyogRFdPUkQgMTQgKi8KKwl1OCBzZ2UxX2xhc3Q7CQkvKiBEV09SRCAxNCAqLworCXU4IHNnZTFfbGVuWzE3XTsJLyogRFdPUkQgMTUgKi8KKwl1OCByZWZfc2dsX2ljZF9pZHhbMTJdOwkvKiBEV09SRCAxNSAqLworCXU4IHJzdmQzWzJdOwkJLyogRFdPUkQgMTUgKi8KKwl1OCBzZ2UxX2luX2RkcjsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3cmJfaGFuZGxlICphbGxvY193cmJfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgaW50IGNpZCwKKwkJCQkgICAgaW50IGluZGV4KTsKK3ZvaWQKK2ZyZWVfbWdtdF9zZ2xfaGFuZGxlKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgc3RydWN0IHNnbF9oYW5kbGUgKnBzZ2xfaGFuZGxlKTsKKworc3RydWN0IHBkdV9ub3Bfb3V0IHsKKwl1MzIgZHdbMTJdOworfTsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfbm9wX291dCB7CisJdTggb3Bjb2RlWzZdOwkJLyogb3Bjb2RlIDB4MDAgKi8KKwl1OCBpX2JpdDsJCS8qIEkgQml0ICovCisJdTggeF9iaXQ7CQkvKiByZXNlcnZlZDsgc2hvdWxkIGJlIDAgKi8KKwl1OCBmcF9iaXRfZmlsbGVyMVs3XTsKKwl1OCBmX2JpdDsJCS8qIGFsd2F5cyAxICovCisJdTggcmVzZXJ2ZWQxWzE2XTsKKwl1OCBhaHNfbGVuZ3RoWzhdOwkvKiBubyBBSFMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFTZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsKKwl1OCBpdHRbMzJdOwkJLyogaW5pdGlhdG9yIGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCB0dHRbMzJdOwkJLyogdGFyZ2V0IGlkIGZvciBwaW5nIG9yIDB4ZmZmZmZmZmYgKi8KKwl1OCBjbWRfc25bMzJdOworCXU4IGV4cF9zdGF0X3NuWzMyXTsKKwl1OCByZXNlcnZlZDVbMTI4XTsKK307CisKKyNkZWZpbmUgUERVQkFTRV9PUENPREVfTUFTSwkweDAwMDAwMDNGCisjZGVmaW5lIFBEVUJBU0VfREFUQUxFTkhJX01BU0sJMHgwMDAwRkYwMAorI2RlZmluZSBQRFVCQVNFX0RBVEFMRU5MT19NQVNLCTB4RkZGRjAwMDAKKworc3RydWN0IHBkdV9iYXNlIHsKKwl1MzIgZHdbMTZdOworfSBfX3BhY2tlZDsKKworLyoqCisgKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGluIHdoaWNoIGVhY2ggYml0IG9mIHRoZSBhY3R1YWwgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAqIGFzIGEgYnl0ZTogdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0L3NoaWZ0L21hc2sgb2YgZWFjaCBmaWVsZAorICovCitzdHJ1Y3QgYW1hcF9wZHVfYmFzZSB7CisJdTggb3Bjb2RlWzZdOworCXU4IGlfYml0OwkJLyogaW1tZWRpYXRlIGJpdCAqLworCXU4IHhfYml0OwkJLyogcmVzZXJ2ZWQsIGFsd2F5cyAwICovCisJdTggcmVzZXJ2ZWQxWzI0XTsJLyogb3Bjb2RlLXNwZWNpZmljIGZpZWxkcyAqLworCXU4IGFoc19sZW5ndGhbOF07CS8qIGxlbmd0aCB1bml0cyBpcyA0IGJ5dGUgd29yZHMgKi8KKwl1OCBkYXRhX2xlbl9oaVs4XTsKKwl1OCBkYXRhX2xlbl9sb1sxNl07CS8qIERhdGFzZWdtZW50TGVuZ3RoICovCisJdTggbHVuWzY0XTsJCS8qIGx1biBvciBvcGNvZGUtc3BlY2lmaWMgZmllbGRzICovCisJdTggaXR0WzMyXTsJCS8qIGluaXRpYXRvciB0YXNrIHRhZyAqLworCXU4IHJlc2VydmVkNFsyMjRdOworfTsKKworc3RydWN0IGlzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXUzMiBkd1sxNl07Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX2lzY3NpX3RhcmdldF9jb250ZXh0X3VwZGF0ZV93cmIgeworCXU4IGx1blsxNF07CQkvKiBEV09SRCAwICovCisJdTggbHQ7CQkJLyogRFdPUkQgMCAqLworCXU4IGludmxkOwkJLyogRFdPUkQgMCAqLworCXU4IHdyYl9pZHhbOF07CQkvKiBEV09SRCAwICovCisJdTggZHNwOwkJCS8qIERXT1JEIDAgKi8KKwl1OCBkbXNnOwkJLyogRFdPUkQgMCAqLworCXU4IHVuZHJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IG92ZXJfcnVuOwkJLyogRFdPUkQgMCAqLworCXU4IHR5cGVbNF07CQkvKiBEV09SRCAwICovCisJdTggcHRyMm5leHR3cmJbOF07CS8qIERXT1JEIDEgKi8KKwl1OCBtYXhfYnVyc3RfbGVuZ3RoWzE5XTsJLyogRFdPUkQgMSAqLworCXU4IHJzdmQwWzVdOwkJLyogRFdPUkQgMSAqLworCXU4IHJzdmQxWzE1XTsJCS8qIERXT1JEIDIgKi8KKwl1OCBtYXhfc2VuZF9kYXRhX3NlZ21lbnRfbGVuZ3RoWzE3XTsJLyogRFdPUkQgMiAqLworCXU4IGZpcnN0X2J1cnN0X2xlbmd0aFsxNF07CS8qIERXT1JEIDMgKi8KKwl1OCByc3ZkMlsyXTsJCS8qIERXT1JEIDMgKi8KKwl1OCB0eF93cmJpbmRleF9kcnZfbXNnWzhdOwkvKiBEV09SRCAzICovCisJdTggcnN2ZDNbNV07CQkvKiBEV09SRCAzICovCisJdTggc2Vzc2lvbl9zdGF0ZVszXTsJLyogRFdPUkQgMyAqLworCXU4IHJzdmQ0WzE2XTsJCS8qIERXT1JEIDQgKi8KKwl1OCB0eF9qdW1ibzsJCS8qIERXT1JEIDQgKi8KKwl1OCBoZGU7CQkJLyogRFdPUkQgNCAqLworCXU4IGRkZTsJCQkvKiBEV09SRCA0ICovCisJdTggZXJsWzJdOwkJLyogRFdPUkQgNCAqLworCXU4IGRvbWFpbl9pZFs1XTsJCS8qIERXT1JEIDQgKi8KKwl1OCBtb2RlOwkJLyogRFdPUkQgNCAqLworCXU4IGltZDsJCQkvKiBEV09SRCA0ICovCisJdTggaXIydDsJCS8qIERXT1JEIDQgKi8KKwl1OCBub3RwcmVkYmxxWzJdOwkvKiBEV09SRCA0ICovCisJdTggY29tcGx0b25hY2s7CQkvKiBEV09SRCA0ICovCisJdTggc3RhdF9zblszMl07CQkvKiBEV09SRCA1ICovCisJdTggcGFkX2J1ZmZlcl9hZGRyX2hpWzMyXTsJLyogRFdPUkQgNiAqLworCXU4IHBhZF9idWZmZXJfYWRkcl9sb1szMl07CS8qIERXT1JEIDcgKi8KKwl1OCBwYWRfYWRkcl9oaVszMl07CS8qIERXT1JEIDggKi8KKwl1OCBwYWRfYWRkcl9sb1szMl07CS8qIERXT1JEIDkgKi8KKwl1OCByc3ZkNVszMl07CQkvKiBEV09SRCAxMCAqLworCXU4IHJzdmQ2WzMyXTsJCS8qIERXT1JEIDExICovCisJdTggcnN2ZDdbMzJdOwkJLyogRFdPUkQgMTIgKi8KKwl1OCByc3ZkOFszMl07CQkvKiBEV09SRCAxMyAqLworCXU4IHJzdmQ5WzMyXTsJCS8qIERXT1JEIDE0ICovCisJdTggcnN2ZDEwWzMyXTsJCS8qIERXT1JEIDE1ICovCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiZV9yaW5nIHsKKwl1MzIgcGFnZXM7CQkvKiBxdWV1ZSBzaXplIGluIHBhZ2VzICovCisJdTMyIGlkOwkJCS8qIHF1ZXVlIGlkIGFzc2lnbmVkIGJ5IGJla2xpYiAqLworCXUzMiBudW07CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gcXVldWUgKi8KKwl1MzIgY2lkeDsJCS8qIGNvbnN1bWVyIGluZGV4ICovCisJdTMyIHBpZHg7CQkvKiBwcm9kdWNlciBpbmRleCAtLSBub3QgdXNlZCBieSBtb3N0IHJpbmdzICovCisJdTMyIGl0ZW1fc2l6ZTsJCS8qIHNpemUgaW4gYnl0ZXMgb2Ygb25lIG9iamVjdCAqLworCisJdm9pZCAqdmE7CQkvKiBUaGUgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSByaW5nLiAgVGhpcworCQkJCSAqIHNob3VsZCBiZSBsYXN0IHRvIGFsbG93IDMyICYgNjQgYml0IGRlYnVnZ2VyCisJCQkJICogZXh0ZW5zaW9ucyB0byB3b3JrLgorCQkJCSAqLworfTsKKworc3RydWN0IGh3aV93cmJfY29udGV4dCB7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB3cmJfaGFuZGxlX2RydnJfbGlzdDsKKwlzdHJ1Y3Qgd3JiX2hhbmRsZSAqKnB3cmJfaGFuZGxlX2Jhc2U7CisJc3RydWN0IHdyYl9oYW5kbGUgKipwd3JiX2hhbmRsZV9iYXNlc3RkOworCXN0cnVjdCBpc2NzaV93cmIgKnBsYXN0X3dyYjsKKwl1bnNpZ25lZCBzaG9ydCBhbGxvY19pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBmcmVlX2luZGV4OworCXVuc2lnbmVkIHNob3J0IHdyYl9oYW5kbGVzX2F2YWlsYWJsZTsKKwl1bnNpZ25lZCBzaG9ydCBjaWQ7Cit9OworCitzdHJ1Y3QgaHdpX2NvbnRyb2xsZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgaW9fc2dsX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBlaF9zZ2xfbGlzdDsKKwlzdHJ1Y3Qgc2dsX2hhbmRsZSAqcHNnbF9oYW5kbGVfYmFzZTsKKwl1bnNpZ25lZCBpbnQgd3JiX21lbV9pbmRleDsKKworCXN0cnVjdCBod2lfd3JiX2NvbnRleHQgd3JiX2NvbnRleHRbQkUyX01BWF9TRVNTSU9OUyAqIDJdOworCXN0cnVjdCBtY2Nfd3JiICpwbWNjX3dyYl9iYXNlOworCXN0cnVjdCBiZV9yaW5nIGRlZmF1bHRfcGR1X2hkcjsKKwlzdHJ1Y3QgYmVfcmluZyBkZWZhdWx0X3BkdV9kYXRhOworCXN0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgKnBod2lfY3R4dDsKKwl1bnNpZ25lZCBzaG9ydCBjcV9lcnJvcnNbQ1hOX0tJTExFRF9DTU5EX0RBVEFfTk9UX09OX1NBTUVfQ09OTl07Cit9OworCitlbnVtIGh3aF90eXBlX2VudW0geworCUhXSF9UWVBFX0lPID0gMSwKKwlIV0hfVFlQRV9MT0dPVVQgPSAyLAorCUhXSF9UWVBFX1RNRiA9IDMsCisJSFdIX1RZUEVfTk9QID0gNCwKKwlIV0hfVFlQRV9JT19SRCA9IDUsCisJSFdIX1RZUEVfTE9HSU4gPSAxMSwKKwlIV0hfVFlQRV9JTlZBTElEID0gMHhGRkZGRkZGRgorfTsKKworc3RydWN0IHdyYl9oYW5kbGUgeworCWVudW0gaHdoX3R5cGVfZW51bSB0eXBlOworCXVuc2lnbmVkIHNob3J0IHdyYl9pbmRleDsKKwl1bnNpZ25lZCBzaG9ydCBueHRfd3JiX2luZGV4OworCisJc3RydWN0IGlzY3NpX3Rhc2sgKnBpb19oYW5kbGU7CisJc3RydWN0IGlzY3NpX3dyYiAqcHdyYjsKK307CisKK3N0cnVjdCBod2lfY29udGV4dF9tZW1vcnkgeworCXN0cnVjdCBiZV9lcV9vYmogYmVfZXE7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfY3E7CisJc3RydWN0IGJlX3F1ZXVlX2luZm8gYmVfbWNjX2NxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX21jYzsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9oZHJxOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX2RlZl9kYXRhcTsKKworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGJlX3dyYnFbQkUyX01BWF9TRVNTSU9OU107CisJc3RydWN0IGJlX21jY193cmJfY29udGV4dCAqcGJlX21jY19jb250ZXh0OworCisJc3RydWN0IGh3aV9hc3luY19wZHVfY29udGV4dCAqcGFzeW5jX2N0eDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuYyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJlNjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpbmNsdWRlICJiZV9tZ210LmgiCisjaW5jbHVkZSAiYmVfaXNjc2kuaCIKKwordW5zaWduZWQgY2hhciBtZ210X2dldF9md19jb25maWcoc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCwKKwkJCQlzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYiA9IHdyYl9mcm9tX21ib3goJmN0cmwtPm1ib3hfbWVtKTsKKwlzdHJ1Y3QgYmVfZndfY2ZnICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fUVVFUllfRklSTVdBUkVfQ09ORklHLCBzaXplb2YoKnJlcSkpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RydWN0IGJlX2Z3X2NmZyAqcGZ3X2NmZzsKKwkJcGZ3X2NmZyA9IHJlcTsKKwkJcGhiYS0+ZndfY29uZmlnLnBoeXNfcG9ydCA9IHBmd19jZmctPnBoeXNfcG9ydDsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9zdGFydCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2ljZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5pY2RfY291bnQ7CisJCXBoYmEtPmZ3X2NvbmZpZy5pc2NzaV9jaWRfc3RhcnQgPQorCQkJCQlwZndfY2ZnLT51bHBbMF0uc3FfYmFzZTsKKwkJcGhiYS0+ZndfY29uZmlnLmlzY3NpX2NpZF9jb3VudCA9CisJCQkJCXBmd19jZmctPnVscFswXS5zcV9jb3VudDsKKwl9IGVsc2UgeworCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIkZhaWxlZCBpbiBtZ210X2dldF9md19jb25maWcgXG4iKTsKKwl9CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfY2hlY2tfc3VwcG9ydGVkX2Z3KHN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwpCit7CisJc3RydWN0IGJlX2RtYV9tZW0gbm9uZW1iX2NtZDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyAqcmVxOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWdtdF9jaGVja19zdXBwb3J0ZWRfZnciCisJCQkgIlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyk7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKwliZV93cmJfaGRyX3ByZXBhcmUod3JiLCBzaXplb2YoKnJlcSksIGZhbHNlLCAxKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCSAgIE9QQ09ERV9DT01NT05fR0VUX0NOVExfQVRUUklCVVRFUywgc2l6ZW9mKCpyZXEpKTsKKwlzZ2UtPnBhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhub25lbWJfY21kLmRtYSkpOworCXNnZS0+cGFfbG8gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC5zaXplKTsKKworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBiZV9tZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlc19yZXNwICpyZXNwID0gbm9uZW1iX2NtZC52YTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBvZiBDTUQ6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZsYXNocm9tX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LCAiRmlybXdhcmUgdmVyc2lvbiBpcyA6ICVzXG4iLAorCQkJcmVzcC0+cGFyYW1zLmhiYV9hdHRyaWJzLmZpcm13YXJlX3ZlcnNpb25fc3RyaW5nKTsKKwkJU0VfREVCVUcoREJHX0xWTF84LAorCQkJIkRldmVsb3BlciBCdWlsZCwgbm90IHBlcmZvcm1pbmcgdmVyc2lvbiBjaGVjay4uLlxuIik7CisKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiIEZhaWxlZCBpbiBtZ210X2NoZWNrX3N1cHBvcnRlZF9md1xuIik7CisJaWYgKG5vbmVtYl9jbWQudmEpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoY3RybC0+cGRldiwgbm9uZW1iX2NtZC5zaXplLAorCQkJCSAgICBub25lbWJfY21kLnZhLCBub25lbWJfY21kLmRtYSk7CisKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfZXBmd19jbGVhbnVwKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwgdW5zaWduZWQgc2hvcnQgY2h1dGUpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2NsZWFudXBfcmVxICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSSwKKwkJCSAgIE9QQ09ERV9DT01NT05fSVNDU0lfQ0xFQU5VUCwgc2l6ZW9mKCpyZXEpKTsKKworCXJlcS0+Y2h1dGUgPSBjaHV0ZTsKKwlyZXEtPmhkcl9yaW5nX2lkID0gMDsKKwlyZXEtPmRhdGFfcmluZ19pZCA9IDA7CisKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlzaG9zdF9wcmludGsoS0VSTl9XQVJOSU5HLCBwaGJhLT5zaG9zdCwKKwkJCSAgICAgIiBtZ210X2VwZndfY2xlYW51cCAsIEZBSUxFRFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordW5zaWduZWQgY2hhciBtZ210X2ludmFsaWRhdGVfaWNkcyhzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJICAgdW5zaWduZWQgaW50IGljZCwgdW5zaWduZWQgaW50IGNpZCkKK3sKKwlzdHJ1Y3QgYmVfZG1hX21lbSBub25lbWJfY21kOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCBiZV9zZ2UgKnNnZSA9IG5vbmVtYmVkZGVkX3NnbCh3cmIpOworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiAqcmVxOworCWludCBzdGF0dXMgPSAwOworCisJbm9uZW1iX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGN0cmwtPnBkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiksCisJCQkJJm5vbmVtYl9jbWQuZG1hKTsKKwlpZiAobm9uZW1iX2NtZC52YSA9PSBOVUxMKSB7CisJCVNFX0RFQlVHKERCR19MVkxfMSwKKwkJCSAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IiCisJCQkgIm1nbXRfaW52YWxpZGF0ZV9pY2RzIFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbm9uZW1iX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbik7CisJcmVxID0gbm9uZW1iX2NtZC52YTsKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEpOworCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fSVNDU0ksCisJCQlPUENPREVfQ09NTU9OX0lTQ1NJX0VSUk9SX1JFQ09WRVJZX0lOVkFMSURBVEVfQ09NTUFORFMsCisJCQlzaXplb2YoKnJlcSkpOworCXJlcS0+cmVmX2hhbmRsZSA9IDA7CisJcmVxLT5jbGVhbnVwX3R5cGUgPSBDTURfSVNDU0lfQ09NTUFORF9JTlZBTElEQVRFOworCXJlcS0+aWNkX2NvdW50ID0gMDsKKwlyZXEtPnRhYmxlW3JlcS0+aWNkX2NvdW50XS5pY2QgPSBpY2Q7CisJcmVxLT50YWJsZVtyZXEtPmljZF9jb3VudF0uY2lkID0gY2lkOworCXNnZS0+cGFfaGkgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG5vbmVtYl9jbWQuZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQuZG1hICYgMHhGRkZGRkZGRik7CisJc2dlLT5sZW4gPSBjcHVfdG9fbGUzMihub25lbWJfY21kLnNpemUpOworCisJc3RhdHVzID0gYmVfbWJveF9ub3RpZnkoY3RybCk7CisJaWYgKHN0YXR1cykKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAiSUNEUyBJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlpZiAobm9uZW1iX2NtZC52YSkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChjdHJsLT5wZGV2LCBub25lbWJfY21kLnNpemUsCisJCQkJICAgIG5vbmVtYl9jbWQudmEsIG5vbmVtYl9jbWQuZG1hKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4gKnJlcSA9CisJCQkJCQllbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9JU0NTSV9JTkksCisJCQkgICBPUENPREVfSVNDU0lfSU5JX0RSSVZFUl9JTlZBTElEQVRFX0NPTk5FQ1RJT04sCisJCQkgICBzaXplb2YoKnJlcSkpOworCXJlcS0+c2Vzc2lvbl9oYW5kbGUgPSBiZWlzY3NpX2VwLT5md19oYW5kbGU7CisJcmVxLT5jaWQgPSBjaWQ7CisJaWYgKGlzc3VlX3Jlc2V0KQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lTU1VFX1RDUF9SU1Q7CisJZWxzZQorCQlyZXEtPmNsZWFudXBfdHlwZSA9IENNRF9JU0NTSV9DT05ORUNUSU9OX0lOVkFMSURBVEU7CisJcmVxLT5zYXZlX2NmZyA9IHNhdmVjZmdfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJJbnZhbGlkYXRpb24gRmFpbGVkXG4iKTsKKworCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF91cGxvYWRfY29ubmVjdGlvbihzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEsCisJCQkJdW5zaWduZWQgc2hvcnQgY2lkLCB1bnNpZ25lZCBpbnQgdXBsb2FkX2ZsYWcpCit7CisJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZwaGJhLT5jdHJsOworCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmIgPSB3cmJfZnJvbV9tYm94KCZjdHJsLT5tYm94X21lbSk7CisJc3RydWN0IHRjcF91cGxvYWRfcGFyYW1zX2luICpyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CisJaW50IHN0YXR1cyA9IDA7CisKKwlzcGluX2xvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJbWVtc2V0KHdyYiwgMCwgc2l6ZW9mKCp3cmIpKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgdHJ1ZSwgMCk7CisJYmVfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX0NPTU1PTl9UQ1BfVVBMT0FELAorCQkJICAgT1BDT0RFX0NPTU1PTl9UQ1BfVVBMT0FELCBzaXplb2YoKnJlcSkpOworCXJlcS0+aWQgPSAodW5zaWduZWQgc2hvcnQpY2lkOworCXJlcS0+dXBsb2FkX3R5cGUgPSAodW5zaWduZWQgY2hhcil1cGxvYWRfZmxhZzsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeShjdHJsKTsKKwlpZiAoc3RhdHVzKQorCQlTRV9ERUJVRyhEQkdfTFZMXzEsICJtZ210X3VwbG9hZF9jb25uZWN0aW9uIEZhaWxlZFxuIik7CisJc3Bpbl91bmxvY2soJmN0cmwtPm1ib3hfbG9jayk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IG1nbXRfb3Blbl9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCSBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKQoreworCXN0cnVjdCBod2lfY29udHJvbGxlciAqcGh3aV9jdHJscjsKKwlzdHJ1Y3QgaHdpX2NvbnRleHRfbWVtb3J5ICpwaHdpX2NvbnRleHQ7CisJc3RydWN0IHNvY2thZGRyX2luICpkYWRkcl9pbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3RfYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkYWRkcl9pbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdF9hZGRyOworCXN0cnVjdCBiZV9jdHJsX2luZm8gKmN0cmwgPSAmcGhiYS0+Y3RybDsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiID0gd3JiX2Zyb21fbWJveCgmY3RybC0+bWJveF9tZW0pOworCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9pbiAqcmVxID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCXVuc2lnbmVkIHNob3J0IGRlZl9oZHJfaWQ7CisJdW5zaWduZWQgc2hvcnQgZGVmX2RhdGFfaWQ7CisJc3RydWN0IHBoeXNfYWRkciB0ZW1wbGF0ZV9hZGRyZXNzID0geyAwLCAwIH07CisJc3RydWN0IHBoeXNfYWRkciAqcHRlbXBsYXRlX2FkZHJlc3M7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgc2hvcnQgY2lkID0gYmVpc2NzaV9lcC0+ZXBfY2lkOworCisJcGh3aV9jdHJsciA9IHBoYmEtPnBod2lfY3RybHI7CisJcGh3aV9jb250ZXh0ID0gcGh3aV9jdHJsci0+cGh3aV9jdHh0OworCWRlZl9oZHJfaWQgPSAodW5zaWduZWQgc2hvcnQpSFdJX0dFVF9ERUZfSERSUV9JRChwaGJhKTsKKwlkZWZfZGF0YV9pZCA9ICh1bnNpZ25lZCBzaG9ydClIV0lfR0VUX0RFRl9CVUZRX0lEKHBoYmEpOworCisJcHRlbXBsYXRlX2FkZHJlc3MgPSAmdGVtcGxhdGVfYWRkcmVzczsKKwlJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGhiYSwgcHRlbXBsYXRlX2FkZHJlc3MpOworCXNwaW5fbG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwltZW1zZXQod3JiLCAwLCBzaXplb2YoKndyYikpOworCisJYmVfd3JiX2hkcl9wcmVwYXJlKHdyYiwgc2l6ZW9mKCpyZXEpLCB0cnVlLCAwKTsKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0lTQ1NJLAorCQkJICAgT1BDT0RFX0NPTU1PTl9JU0NTSV9UQ1BfQ09OTkVDVF9BTkRfT0ZGTE9BRCwKKwkJCSAgIHNpemVvZigqcmVxKSk7CisJaWYgKGRzdF9hZGRyLT5zYV9mYW1pbHkgPT0gUEZfSU5FVCkgeworCQlfX2JlMzIgc19hZGRyID0gZGFkZHJfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX3R5cGUgPSBCRTJfSVBWNDsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbMF0gPSBzX2FkZHIgJiAweDAwMDAwMGZmOworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1sxXSA9IChzX2FkZHIgJiAweDAwMDBmZjAwKSA+PiA4OworCQlyZXEtPmlwX2FkZHJlc3MuaXBfYWRkcmVzc1syXSA9IChzX2FkZHIgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJcmVxLT5pcF9hZGRyZXNzLmlwX2FkZHJlc3NbM10gPSAoc19hZGRyICYgMHhmZjAwMDAwMCkgPj4gMjQ7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbi0+c2luX3BvcnQpOworCQliZWlzY3NpX2VwLT5kc3RfYWRkciA9IGRhZGRyX2luLT5zaW5fYWRkci5zX2FkZHI7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW4tPnNpbl9wb3J0KTsKKwkJYmVpc2NzaV9lcC0+aXBfdHlwZSA9IEJFMl9JUFY0OworCX0gZWxzZSBpZiAoZHN0X2FkZHItPnNhX2ZhbWlseSA9PSBQRl9JTkVUNikgeworCQlyZXEtPmlwX2FkZHJlc3MuaXBfdHlwZSA9IEJFMl9JUFY2OworCQltZW1jcHkoJnJlcS0+aXBfYWRkcmVzcy5pcF9hZGRyZXNzLAorCQkgICAgICAgJmRhZGRyX2luNi0+c2luNl9hZGRyLmluNl91LnU2X2FkZHI4LCAxNik7CisJCXJlcS0+dGNwX3BvcnQgPSBudG9ocyhkYWRkcl9pbjYtPnNpbjZfcG9ydCk7CisJCWJlaXNjc2lfZXAtPmRzdF90Y3Bwb3J0ID0gbnRvaHMoZGFkZHJfaW42LT5zaW42X3BvcnQpOworCQltZW1jcHkoJmJlaXNjc2lfZXAtPmRzdDZfYWRkciwKKwkJICAgICAgICZkYWRkcl9pbjYtPnNpbjZfYWRkci5pbjZfdS51Nl9hZGRyOCwgMTYpOworCQliZWlzY3NpX2VwLT5pcF90eXBlID0gQkUyX0lQVjY7CisJfSBlbHNleworCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHBoYmEtPnNob3N0LCAidW5rbm93biBhZGRyIGZhbWlseSAlZFxuIiwKKwkJCSAgICAgZHN0X2FkZHItPnNhX2ZhbWlseSk7CisJCXNwaW5fdW5sb2NrKCZjdHJsLT5tYm94X2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKworCX0KKwlyZXEtPmNpZCA9IGNpZDsKKwlyZXEtPmNxX2lkID0gcGh3aV9jb250ZXh0LT5iZV9jcS5pZDsKKwlyZXEtPmRlZnFfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+aGRyX3JpbmdfaWQgPSBkZWZfaGRyX2lkOworCXJlcS0+ZGF0YV9yaW5nX2lkID0gZGVmX2RhdGFfaWQ7CisJcmVxLT5kb19vZmZsb2FkID0gMTsKKwlyZXEtPmRhdGFvdXRfdGVtcGxhdGVfcGEubG8gPSBwdGVtcGxhdGVfYWRkcmVzcy0+bG87CisJcmVxLT5kYXRhb3V0X3RlbXBsYXRlX3BhLmhpID0gcHRlbXBsYXRlX2FkZHJlc3MtPmhpOworCXN0YXR1cyA9IGJlX21ib3hfbm90aWZ5KGN0cmwpOworCWlmICghc3RhdHVzKSB7CisJCXN0cnVjdCBpc2NzaV9lbmRwb2ludCAqZXA7CisJCXN0cnVjdCB0Y3BfY29ubmVjdF9hbmRfb2ZmbG9hZF9vdXQgKnB0Y3BjbmN0X291dCA9CisJCQkJCQkJZW1iZWRkZWRfcGF5bG9hZCh3cmIpOworCisJCWVwID0gcGhiYS0+ZXBfYXJyYXlbcHRjcGNuY3Rfb3V0LT5jaWRdOworCQliZWlzY3NpX2VwID0gZXAtPmRkX2RhdGE7CisJCWJlaXNjc2lfZXAtPmZ3X2hhbmRsZSA9IDA7CisJCWJlaXNjc2lfZXAtPmNpZF92bGQgPSAxOworCQlTRV9ERUJVRyhEQkdfTFZMXzgsICJtZ210X29wZW5fY29ubmVjdGlvbiBTdWNjZXNzXG4iKTsKKwl9IGVsc2UKKwkJU0VfREVCVUcoREJHX0xWTF8xLCAibWdtdF9vcGVuX2Nvbm5lY3Rpb24gRmFpbGVkXG4iKTsKKwlzcGluX3VubG9jaygmY3RybC0+bWJveF9sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JlMmlzY3NpL2JlX21nbXQuaCBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBlODE2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZTJpc2NzaS9iZV9tZ210LmgKQEAgLTAsMCArMSwyNDkgQEAKKy8qKgorICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBUaGUgZnVsbCBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKgorICogV3JpdHRlbiBieTogSmF5YW1vaGFuIEthbGxpY2thbCAoamF5YW1vaGFua0BzZXJ2ZXJlbmdpbmVzLmNvbSkKKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogbGludXgtZHJpdmVyc0BzZXJ2ZXJlbmdpbmVzLmNvbQorICoKKyAqIFNlcnZlckVuZ2luZXMKKyAqIDIwOSBOLiBGYWlyIE9ha3MgQXZlCisgKiBTdW5ueXZhbGUsIENBIDk0MDg1CisgKgorICovCisKKyNpZm5kZWYgX0JFSVNDU0lfTUdNVF8KKyNkZWZpbmUgX0JFSVNDU0lfTUdNVF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgImJlX2lzY3NpLmgiCisjaW5jbHVkZSAiYmVfbWFpbi5oIgorCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY19zZ2UgeworCXU4IHBhX2xvWzMyXTsJCS8qIGR3b3JkIDAgKi8KKwl1OCBwYV9oaVszMl07CQkvKiBkd29yZCAxICovCisJdTggbGVuZ3RoWzMyXTsJCS8qIERXT1JEIDIgKi8KK30gX19wYWNrZWQ7CisKKy8qKgorICogUHNldWRvIGFtYXAgZGVmaW5pdGlvbiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUgYWN0dWFsIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgKiBhcyBhIGJ5dGU6IHVzZWQgdG8gY2FsY3VsYXRlIG9mZnNldC9zaGlmdC9tYXNrIG9mIGVhY2ggZmllbGQKKyAqLworc3RydWN0IGFtYXBfbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBhbWFwX21jY19zZ2Ugc2dsWzE5XTsKKwkJdTggZW1iZWRkZWRbNTkgKiAzMl07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisvKioKKyAqIFBzZXVkbyBhbWFwIGRlZmluaXRpb24gaW4gd2hpY2ggZWFjaCBiaXQgb2YgdGhlIGFjdHVhbCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZAorICogYXMgYSBieXRlOiB1c2VkIHRvIGNhbGN1bGF0ZSBvZmZzZXQvc2hpZnQvbWFzayBvZiBlYWNoIGZpZWxkCisgKi8KK3N0cnVjdCBhbWFwX21jY193cmIgeworCXU4IGVtYmVkZGVkOwkJLyogRFdPUkQgMCAqLworCXU4IHJzdmQwWzJdOwkJLyogRFdPUkQgMCAqLworCXU4IHNnZV9jb3VudFs1XTsJLyogRFdPUkQgMCAqLworCXU4IHJzdmQxWzE2XTsJCS8qIERXT1JEIDAgKi8KKwl1OCBzcGVjaWFsWzhdOwkJLyogRFdPUkQgMCAqLworCXU4IHBheWxvYWRfbGVuZ3RoWzMyXTsKKwl1OCB0YWdbNjRdOwkJLyogRFdPUkQgMiAqLworCXU4IHJzdmQyWzMyXTsJCS8qIERXT1JEIDQgKi8KKwlzdHJ1Y3QgYW1hcF9tY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3N0cnVjdCBtY2Nfc2dlIHsKKwl1MzIgcGFfbG87CQkvKiBkd29yZCAwICovCisJdTMyIHBhX2hpOwkJLyogZHdvcmQgMSAqLworCXUzMiBsZW5ndGg7CQkvKiBEV09SRCAyICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWNjX3dyYl9wYXlsb2FkIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBtY2Nfc2dlIHNnbFsxOV07CisJCXUzMiBlbWJlZGRlZFs1OV07CS8qIERXT1JEUyA1NyB0byAxMTUgKi8KKwl9IHU7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE1DQ19XUkJfRU1CRURERURfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKK3N0cnVjdCBtY2Nfd3JiIHsKKwl1MzIgZHdbMF07CQkvKiBEV09SRCAwICovCisJdTMyIHBheWxvYWRfbGVuZ3RoOworCXUzMiB0YWdbMl07CQkvKiBEV09SRCAyICovCisJdTMyIHJzdmQyWzFdOwkJLyogRFdPUkQgNCAqLworCXN0cnVjdCBtY2Nfd3JiX3BheWxvYWQgcGF5bG9hZDsKK307CisKK3Vuc2lnbmVkIGNoYXIgbWdtdF9lcGZ3X2NsZWFudXAoc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCB1bnNpZ25lZCBzaG9ydCBjaHV0ZSk7CitpbnQgbWdtdF9vcGVuX2Nvbm5lY3Rpb24oc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9hZGRyLAorCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwKTsKKwordW5zaWduZWQgY2hhciBtZ210X3VwbG9hZF9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGNpZCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCB1cGxvYWRfZmxhZyk7Cit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9pY2RzKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgaWNkLCB1bnNpZ25lZCBpbnQgY2lkKTsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfaW4geworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdW5zaWduZWQgaW50IHNlc3Npb25faGFuZGxlOworCXVuc2lnbmVkIHNob3J0IGNpZDsKKwl1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7CisJdW5zaWduZWQgc2hvcnQgY2xlYW51cF90eXBlOworCXVuc2lnbmVkIHNob3J0IHNhdmVfY2ZnOworfSBfX3BhY2tlZDsKKworc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHsKKwl1bnNpZ25lZCBpbnQgc2Vzc2lvbl9oYW5kbGU7CisJdW5zaWduZWQgc2hvcnQgY2lkOworCXVuc2lnbmVkIHNob3J0IHVudXNlZDsKK30gX19wYWNrZWQ7CisKK3VuaW9uIGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXMgeworCXN0cnVjdCBpc2NzaV9pbnZhbGlkYXRlX2Nvbm5lY3Rpb25fcGFyYW1zX2luIHJlcXVlc3Q7CisJc3RydWN0IGlzY3NpX2ludmFsaWRhdGVfY29ubmVjdGlvbl9wYXJhbXNfb3V0IHJlc3BvbnNlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZF90YWJsZSB7CisJdW5zaWduZWQgc2hvcnQgaWNkOworCXVuc2lnbmVkIHNob3J0IGNpZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiB7CisJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKKwl1bnNpZ25lZCBpbnQgcmVmX2hhbmRsZTsKKwl1bnNpZ25lZCBpbnQgaWNkX2NvdW50OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRfdGFibGUgdGFibGVbMTI4XTsKKwl1bnNpZ25lZCBzaG9ydCBjbGVhbnVwX3R5cGU7CisJdW5zaWduZWQgc2hvcnQgdW51c2VkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGludmFsaWRhdGVfY29tbWFuZHNfcGFyYW1zX291dCB7CisJdW5zaWduZWQgaW50IHJlZl9oYW5kbGU7CisJdW5zaWduZWQgaW50IGljZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgaWNkX3N0YXR1c1sxMjhdOworfSBfX3BhY2tlZDsKKwordW5pb24gaW52YWxpZGF0ZV9jb21tYW5kc19wYXJhbXMgeworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19pbiByZXF1ZXN0OworCXN0cnVjdCBpbnZhbGlkYXRlX2NvbW1hbmRzX3BhcmFtc19vdXQgcmVzcG9uc2U7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9oYmFfYXR0cmlidXRlcyB7CisJdTggZmxhc2hyb21fdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IG1hbnVmYWN0dXJlcl9uYW1lWzMyXTsKKwl1MzIgc3VwcG9ydGVkX21vZGVzOworCXU4IHNlZXByb21fdmVyc2lvbl9sbzsKKwl1OCBzZWVwcm9tX3ZlcnNpb25faGk7CisJdTggcnN2ZDBbMl07CisJdTMyIGZ3X2NtZF9kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBlcF9md19kYXRhX3N0cnVjdF92ZXJzaW9uOworCXUzMiBmdXR1cmVfcmVzZXJ2ZWRbMTJdOworCXUzMiBkZWZhdWx0X2V4dGVuZGVkX3RpbWVvdXQ7CisJdTggY29udHJvbGxlcl9tb2RlbF9udW1iZXJbMzJdOworCXU4IGNvbnRyb2xsZXJfZGVzY3JpcHRpb25bNjRdOworCXU4IGNvbnRyb2xsZXJfc2VyaWFsX251bWJlclszMl07CisJdTggaXBfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZpcm13YXJlX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBiaW9zX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCByZWRib290X3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1OCBkcml2ZXJfdmVyc2lvbl9zdHJpbmdbMzJdOworCXU4IGZ3X29uX2ZsYXNoX3ZlcnNpb25fc3RyaW5nWzMyXTsKKwl1MzIgZnVuY3Rpb25hbGl0aWVzX3N1cHBvcnRlZDsKKwl1MTYgbWF4X2NkYmxlbmd0aDsKKwl1OCBhc2ljX3JldmlzaW9uOworCXU4IGdlbmVyYXRpb25hbF9ndWlkWzE2XTsKKwl1OCBoYmFfcG9ydF9jb3VudDsKKwl1MTYgZGVmYXVsdF9saW5rX2Rvd25fdGltZW91dDsKKwl1OCBpc2NzaV92ZXJfbWluX21heDsKKwl1OCBtdWx0aWZ1bmN0aW9uX2RldmljZTsKKwl1OCBjYWNoZV92YWxpZDsKKwl1OCBoYmFfc3RhdHVzOworCXU4IG1heF9kb21haW5zX3N1cHBvcnRlZDsKKwl1OCBwaHlfcG9ydDsKKwl1MzIgZmlybXdhcmVfcG9zdF9zdGF0dXM7CisJdTMyIGhiYV9tdHVbOF07CisJdTMyIGZ1dHVyZV91MzJbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXMgeworCXN0cnVjdCBtZ210X2hiYV9hdHRyaWJ1dGVzIGhiYV9hdHRyaWJzOworCXUxNiBwY2lfdmVuZG9yX2lkOworCXUxNiBwY2lfZGV2aWNlX2lkOworCXUxNiBwY2lfc3ViX3ZlbmRvcl9pZDsKKwl1MTYgcGNpX3N1Yl9zeXN0ZW1faWQ7CisJdTggcGNpX2J1c19udW1iZXI7CisJdTggcGNpX2RldmljZV9udW1iZXI7CisJdTggcGNpX2Z1bmN0aW9uX251bWJlcjsKKwl1OCBpbnRlcmZhY2VfdHlwZTsKKwl1NjQgdW5pcXVlX2lkZW50aWZpZXI7CisJdTggbmV0ZmlsdGVyczsKKwl1OCByc3ZkMFszXTsKKwl1OCBmdXR1cmVfdTMyWzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGJlX21nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXN0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmlidXRlcyBwYXJhbXM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYmVfbWdtdF9jb250cm9sbGVyX2F0dHJpYnV0ZXNfcmVzcCB7CisJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CisJc3RydWN0IG1nbXRfY29udHJvbGxlcl9hdHRyaWJ1dGVzIHBhcmFtczsKK30gX19wYWNrZWQ7CisKKy8qIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCAqLworCisjZGVmaW5lIEdFVF9NR01UX0NPTlRST0xMRVJfV1MocGhiYSkgICAgKHBoYmEtPnBtZ210X3dzKQorCisvKiBNR01UIENNRCBmbGFncyAqLworCisjZGVmaW5lIE1HTVRfQ01ESF9GUkVFICAgICAgICAgICAgICAgICgxPDwwKQorCisvKiAgLS0tIE1HTVRfRVJST1JfQ09ERVMgLS0tICovCisvKiAgRXJyb3IgQ29kZXMgcmV0dXJuZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgQ01EIHJlc3BvbnNlIGhlYWRlciAqLworI2RlZmluZSBNR01UX1NUQVRVU19TVUNDRVNTIDAJLyogVGhlIENNRCBjb21wbGV0ZWQgd2l0aG91dCBlcnJvcnMgKi8KKyNkZWZpbmUgTUdNVF9TVEFUVVNfRkFJTEVEIDEJLyogRXJyb3Igc3RhdHVzIGluIHRoZSBTdGF0dXMgZmllbGQgb2YgKi8KKwkJCQkvKiB0aGUgQ01EX1JFU1BPTlNFX0hFQURFUiAgKi8KKworI2RlZmluZSBJU0NTSV9HRVRfUERVX1RFTVBMQVRFX0FERFJFU1MocGMsIHBhKSB7XAorICAgIHBhLT5sbyA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2xvOyAgXAorICAgIHBhLT5oaSA9IHBoYmEtPmluaXRfbWVtW0lTQ1NJX01FTV9HTE9CQUxfSEVBREVSXS5tZW1fYXJyYXlbMF0uXAorCQkJCQlidXNfYWRkcmVzcy51LmEzMi5hZGRyZXNzX2hpOyAgXAorfQorCitzdHJ1Y3QgYmVpc2NzaV9lbmRwb2ludCB7CisJc3RydWN0IGJlaXNjc2lfaGJhICpwaGJhOworCXN0cnVjdCBiZWlzY3NpX3Nlc3MgKnNlc3M7CisJc3RydWN0IGJlaXNjc2lfY29ubiAqY29ubjsKKwl1bnNpZ25lZCBzaG9ydCBpcF90eXBlOworCWNoYXIgZHN0Nl9hZGRyW0lTQ1NJX0FERFJFU1NfQlVGX0xFTl07CisJdW5zaWduZWQgbG9uZyBkc3RfYWRkcjsKKwl1bnNpZ25lZCBzaG9ydCBlcF9jaWQ7CisJdW5zaWduZWQgaW50IGZ3X2hhbmRsZTsKKwl1MTYgZHN0X3RjcHBvcnQ7CisJdTE2IGNpZF92bGQ7Cit9OworCit1bnNpZ25lZCBjaGFyIG1nbXRfZ2V0X2Z3X2NvbmZpZyhzdHJ1Y3QgYmVfY3RybF9pbmZvICpjdHJsLAorCQkJCSBzdHJ1Y3QgYmVpc2NzaV9oYmEgKnBoYmEpOworCit1bnNpZ25lZCBjaGFyIG1nbXRfaW52YWxpZGF0ZV9jb25uZWN0aW9uKHN0cnVjdCBiZWlzY3NpX2hiYSAqcGhiYSwKKwkJCQkJIHN0cnVjdCBiZWlzY3NpX2VuZHBvaW50ICpiZWlzY3NpX2VwLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgY2lkLAorCQkJCQkgdW5zaWduZWQgc2hvcnQgaXNzdWVfcmVzZXQsCisJCQkJCSB1bnNpZ25lZCBzaG9ydCBzYXZlY2ZnX2ZsYWcpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDYwMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACitvYmotJChDT05GSUdfU0NTSV9CRkFfRkMpIDo9IGJmYS5vCisKK2JmYS15IDo9IGJmYWQubyBiZmFkX2ludHIubyBiZmFkX29zLm8gYmZhZF9pbS5vIGJmYWRfYXR0ci5vIGJmYWRfZndpbWcubworCitiZmEteSArPSBiZmFfY29yZS5vIGJmYV9pb2MubyBiZmFfaW9jZmMubyBiZmFfZmN4cC5vIGJmYV9scHMubworYmZhLXkgKz0gYmZhX2h3X2NiLm8gYmZhX2h3X2N0Lm8gYmZhX2ludHIubyBiZmFfdGltZXIubyBiZmFfcnBvcnQubyAKK2JmYS15ICs9IGJmYV9mY3BvcnQubyBiZmFfcG9ydC5vIGJmYV91Zi5vIGJmYV9zZ3BnLm8gYmZhX21vZHVsZS5vIGJmYV9pb2ltLm8KK2JmYS15ICs9IGJmYV9pdG5pbS5vIGJmYV9mY3BpbS5vIGJmYV90c2tpbS5vIGJmYV9sb2cubyBiZmFfbG9nX21vZHVsZS5vCitiZmEteSArPSBiZmFfY3NkZWJ1Zy5vIGJmYV9zbS5vIHBsb2cubworCitiZmEteSArPSBmY2J1aWxkLm8gZmFicmljLm8gZmNwaW0ubyB2ZmFwaS5vIGZjcHRtLm8gYmZhX2Zjcy5vIGJmYV9mY3NfcG9ydC5vIAorYmZhLXkgKz0gYmZhX2Zjc191Zi5vIGJmYV9mY3NfbHBvcnQubyBmYWIubyBmZG1pLm8gbXMubyBucy5vIHNjbi5vIGxvb3AubworYmZhLXkgKz0gbHBvcnRfYXBpLm8gbjJuLm8gcnBvcnQubyBycG9ydF9hcGkubyBycG9ydF9mdHJzLm8gdnBvcnQubworCitjY2ZsYWdzLXkgOj0gLUkkKG9iaikgLUkkKG9iaikvaW5jbHVkZSAtSSQob2JqKS9pbmNsdWRlL2NuYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2FsbGJhY2tfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMzI2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYWxsYmFja19wcml2LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCit0eXBlZGVmIHZvaWQgICAgKCpiZmFfY2JfY2Jmbl90KSAodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworCisvKioKKyAqIEdlbmVyaWMgQkZBIGNhbGxiYWNrIGVsZW1lbnQuCisgKi8KK3N0cnVjdCBiZmFfY2JfcWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgIHFlOworCWJmYV9jYl9jYmZuX3QgIGNiZm47CisJYmZhX2Jvb2xlYW5fdCAgIG9uY2U7CisJdTMyCQlyc3ZkOworCXZvaWQgICAgICAgICAgICpjYmFyZzsKK307CisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlKF9fYmZhLCBfX2hjYl9xZSwgX19jYmZuLCBfX2NiYXJnKSBkbyB7CQlcCisJKF9faGNiX3FlKS0+Y2JmbiAgPSAoX19jYmZuKTsgICAgICBcCisJKF9faGNiX3FlKS0+Y2JhcmcgPSAoX19jYmFyZyk7ICAgICAgXAorCWxpc3RfYWRkX3RhaWwoJihfX2hjYl9xZSktPnFlLCAmKF9fYmZhKS0+Y29tcF9xKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9kZXF1ZXVlKF9faGNiX3FlKQlsaXN0X2RlbCgmKF9faGNiX3FlKS0+cWUpCisKKyNkZWZpbmUgYmZhX2NiX3F1ZXVlX29uY2UoX19iZmEsIF9faGNiX3FlLCBfX2NiZm4sIF9fY2JhcmcpIGRvIHsJXAorCShfX2hjYl9xZSktPmNiZm4gID0gKF9fY2Jmbik7ICAgICAgXAorCShfX2hjYl9xZSktPmNiYXJnID0gKF9fY2JhcmcpOyAgICAgIFwKKwlpZiAoIShfX2hjYl9xZSktPm9uY2UpIHsgICAgICBcCisJCWxpc3RfYWRkX3RhaWwoKF9faGNiX3FlKSwgJihfX2JmYSktPmNvbXBfcSk7ICAgICAgXAorCQkoX19oY2JfcWUpLT5vbmNlID0gQkZBX1RSVUU7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9jYl9xdWV1ZV9kb25lKF9faGNiX3FlKSBkbyB7CQkJCVwKKwkoX19oY2JfcWUpLT5vbmNlID0gQkZBX0ZBTFNFOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQkZBX0NBTExCQUNLX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jYl9pb2ltX21hY3Jvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUwYzgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2JfaW9pbV9tYWNyb3MuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY2JfaW9pbV9tYWNyb3MuaCBCRkEgSU9JTSBkcml2ZXIgaW50ZXJmYWNlIG1hY3Jvcy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18KKyNkZWZpbmUgX19CRkFfSENCX0lPSU1fTUFDUk9TX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorLyoKKyAqICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorICoKKyAqICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4gI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+ICNpbmNsdWRlCisgKiA8c2NzaS9zY3NpX2RldmljZS5oPiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyAqLworI2luY2x1ZGUgImJmYWRfaW1fY29tcGF0LmgiCisKKy8qCisgKiB0YXNrIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gRkNQLTIgRkNQX0NNTkQgSVUKKyAqLworI2RlZmluZSBTSU1QTEVfUSAgICAwCisjZGVmaW5lIEhFQURfT0ZfUSAgIDEKKyNkZWZpbmUgT1JERVJFRF9RICAgMgorI2RlZmluZSBBQ0FfUSAgICAgICA0CisjZGVmaW5lIFVOVEFHR0VEICAgIDUKKworc3RhdGljIGlubGluZSBsdW5fdAorYmZhZF9pbnRfdG9fbHVuKHUzMiBsdW5vKQoreworCXVuaW9uIHsKKwkJdTE2ICAgICAgICBzY3NpX2x1bls0XTsKKwkJbHVuX3QgICAgICAgICAgIGJmYV9sdW47CisJfSBsdW47CisKKwlsdW4uYmZhX2x1biAgICAgPSAwOworCWx1bi5zY3NpX2x1blswXSA9IGJmYV9vc19odG9ucyhsdW5vKTsKKworCXJldHVybiAobHVuLmJmYV9sdW4pOworfQorCisvKioKKyAqIEdldCBMVU4gZm9yIHRoZSBJL08gcmVxdWVzdAorICovCisjZGVmaW5lIGJmYV9jYl9pb2ltX2dldF9sdW4oX19kaW8pCVwKKwliZmFkX2ludF90b19sdW4oKChzdHJ1Y3Qgc2NzaV9jbW5kICopX19kaW8pLT5kZXZpY2UtPmx1bikKKworLyoqCisgKiBHZXQgQ0RCIGZvciB0aGUgSS9PIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB1OCAqCitiZmFfY2JfaW9pbV9nZXRfY2RiKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKworCXJldHVybiAoKHU4ICopIGNtbmQtPmNtbmQpOworfQorCisvKioKKyAqIEdldCBJL08gZGlyZWN0aW9uIChyZWFkL3dyaXRlKSBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBmY3BfaW9kaXIKK2JmYV9jYl9pb2ltX2dldF9pb2RpcihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZG1hZGlyOworCisJZG1hZGlyID0gY21uZC0+c2NfZGF0YV9kaXJlY3Rpb247CisJaWYgKGRtYWRpciA9PSBETUFfVE9fREVWSUNFKQorCQlyZXR1cm4gRkNQX0lPRElSX1dSSVRFOworCWVsc2UgaWYgKGRtYWRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCisJCXJldHVybiBGQ1BfSU9ESVJfUkVBRDsKKwllbHNlCisJCXJldHVybiBGQ1BfSU9ESVJfTk9ORTsKK30KKworLyoqCisgKiBHZXQgSU8gc2l6ZSBpbiBieXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0CisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyCitiZmFfY2JfaW9pbV9nZXRfc2l6ZShzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKHNjc2lfYnVmZmxlbihjbW5kKSk7Cit9CisKKy8qKgorICogR2V0IHRpbWVvdXQgZm9yIHRoZSBJL08gcmVxdWVzdAorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGltZW91dChzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJLyoKKwkgKiBUQkQ6IG5lZWQgYSB0aW1lb3V0IGZvciBzY3NpIHBhc3N0aHJ1CisJICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEdldCBTRyBlbGVtZW50IGZvciB0aGUgSS9PIHJlcXVlc3QgZ2l2ZW4gdGhlIFNHIGVsZW1lbnQgaW5kZXgKKyAqLworc3RhdGljIGlubGluZSB1bmlvbiBiZmlfYWRkcl91CitiZmFfY2JfaW9pbV9nZXRfc2dhZGRyKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXU2NCAgICAgICAgYWRkcjsKKworCXNnZSA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzY3NpX3NnbGlzdChjbW5kKSArIHNnZWlkOworCWFkZHIgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZ2UpOworCisJcmV0dXJuICgqKHVuaW9uIGJmaV9hZGRyX3UgKikgJmFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorYmZhX2NiX2lvaW1fZ2V0X3NnbGVuKHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLCBpbnQgc2dlaWQpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dlOworCXUzMiAgICAgICAgbGVuOworCisJc2dlID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjc2lfc2dsaXN0KGNtbmQpICsgc2dlaWQ7CisJbGVuID0gc2dfZG1hX2xlbihzZ2UpOworCisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBHZXQgQ29tbWFuZCBSZWZlcmVuY2UgTnVtYmVyIGZvciB0aGUgSS9PIHJlcXVlc3QuIDAgaWYgbm9uZS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NybihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHZXQgU0FNLTMgcHJpb3JpdHkgZm9yIHRoZSBJL08gcmVxdWVzdC4gMCBpcyBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogR2V0IHRhc2sgYXR0cmlidXRlcyBmb3IgdGhlIEkvTyByZXF1ZXN0LiBEZWZhdWx0IGlzIEZDUF9UQVNLX0FUVFJfU0lNUExFKDApLgorICovCitzdGF0aWMgaW5saW5lIHU4CitiZmFfY2JfaW9pbV9nZXRfdGFza2F0dHIoc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXU4ICAgICAgICAgdGFza19hdHRyID0gVU5UQUdHRUQ7CisKKwlpZiAoY21uZC0+ZGV2aWNlLT50YWdnZWRfc3VwcG9ydGVkKSB7CisJCXN3aXRjaCAoY21uZC0+dGFnKSB7CisJCWNhc2UgSEVBRF9PRl9RVUVVRV9UQUc6CisJCQl0YXNrX2F0dHIgPSBIRUFEX09GX1E7CisJCQlicmVhazsKKwkJY2FzZSBPUkRFUkVEX1FVRVVFX1RBRzoKKwkJCXRhc2tfYXR0ciA9IE9SREVSRURfUTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGFza19hdHRyID0gU0lNUExFX1E7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB0YXNrX2F0dHI7Cit9CisKKy8qKgorICogR2V0IENEQiBsZW5ndGggaW4gYnl0ZXMgZm9yIHRoZSBJL08gcmVxdWVzdC4gRGVmYXVsdCBpcyBGQ1BfQ01ORF9DREJfTEVOKDE2KS4KKyAqLworc3RhdGljIGlubGluZSB1OAorYmZhX2NiX2lvaW1fZ2V0X2NkYmxlbihzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisKKwlyZXR1cm4gKGNtbmQtPmNtZF9sZW4pOworfQorCisKKworI2VuZGlmIC8qIF9fQkZBX0hDQl9JT0lNX01BQ1JPU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY2VlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5NTljMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2NlZS5jCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2NlZS5oPgorI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8Y2VlL2JmYV9jZWUuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NlZS5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y25hL2JmYV9jbmFfdHJjbW9kLmg+CisKK0JGQV9UUkNfRklMRShDTkEsIENFRSk7CisKKyNkZWZpbmUgYmZhX2lvY19wb3J0aWQoX19pb2MpICgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfbHB1aWQoX19hcmcpIGJmYV9pb2NfcG9ydGlkKCYoX19hcmcpLT5pb2MpCisKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9sbGRwX2NmZyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX2NmZ19zICpsbGRwX2NmZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfZGNiY3hfc3RhdHMoc3RydWN0IGJmYV9jZWVfZGNieF9zdGF0c19zCisJCQkJCSAgICpkY2JjeF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MKKwkJCQkJICAqbGxkcF9zdGF0cyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKHN0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zICpjZmdfc3RhdHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9jZWVfZm9ybWF0X2NlZV9jZmcodm9pZCAqYnVmZmVyKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfY2VlX2Zvcm1hdF9jZWVfc3RhdHModm9pZCAqYnVmZmVyKTsKKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyh2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqY2VlX3N0YXRzID0gYnVmZmVyOworCWJmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKCZjZWVfc3RhdHMtPmRjYnhfc3RhdHMpOworCWJmYV9jZWVfZm9ybWF0X2xsZHBfc3RhdHMoJmNlZV9zdGF0cy0+bGxkcF9zdGF0cyk7CisJYmZhX2NlZV9mb3JtYXRfY2ZnX3N0YXRzKCZjZWVfc3RhdHMtPmNmZ19zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmNlZV9jZmcgPSBidWZmZXI7CisJYmZhX2NlZV9mb3JtYXRfbGxkcF9jZmcoJmNlZV9jZmctPmxsZHBfcmVtb3RlKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2RjYmN4X3N0YXRzKHN0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyAqZGNiY3hfc3RhdHMpCit7CisJZGNiY3hfc3RhdHMtPnN1YnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5zdWJ0bHZzX3VucmVjb2duaXplZCk7CisJZGNiY3hfc3RhdHMtPm5lZ290aWF0aW9uX2ZhaWxlZCA9CisJCWJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+bmVnb3RpYXRpb25fZmFpbGVkKTsKKwlkY2JjeF9zdGF0cy0+cmVtb3RlX2NmZ19jaGFuZ2VkID0KKwkJYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT5yZW1vdGVfY2ZnX2NoYW5nZWQpOworCWRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX3JlY2VpdmVkKTsKKwlkY2JjeF9zdGF0cy0+dGx2c19pbnZhbGlkID0gYmZhX29zX250b2hsKGRjYmN4X3N0YXRzLT50bHZzX2ludmFsaWQpOworCWRjYmN4X3N0YXRzLT5zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+c2Vxbm8pOworCWRjYmN4X3N0YXRzLT5hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+YWNrbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9zZXFubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfc2Vxbm8pOworCWRjYmN4X3N0YXRzLT5yZWN2ZF9hY2tubyA9IGJmYV9vc19udG9obChkY2JjeF9zdGF0cy0+cmVjdmRfYWNrbm8pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2NlZV9mb3JtYXRfbGxkcF9zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgKmxsZHBfc3RhdHMpCit7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX3RyYW5zbWl0dGVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc190cmFuc21pdHRlZCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2FnZWRfb3V0ID0gYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPmZyYW1lc19hZ2VkX291dCk7CisJbGxkcF9zdGF0cy0+ZnJhbWVzX2Rpc2NhcmRlZCA9CisJCWJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfZGlzY2FyZGVkKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfaW5fZXJyb3IgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+ZnJhbWVzX2luX2Vycm9yKTsKKwlsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCA9IGJmYV9vc19udG9obChsbGRwX3N0YXRzLT5mcmFtZXNfcmN2ZCk7CisJbGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQgPSBiZmFfb3NfbnRvaGwobGxkcF9zdGF0cy0+dGx2c19kaXNjYXJkZWQpOworCWxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkID0KKwkJYmZhX29zX250b2hsKGxsZHBfc3RhdHMtPnRsdnNfdW5yZWNvZ25pemVkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2NmZ19zdGF0cyhzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAqY2ZnX3N0YXRzKQoreworCWNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duID0gYmZhX29zX250b2hsKGNmZ19zdGF0cy0+Y2VlX3N0YXR1c19kb3duKTsKKwljZmdfc3RhdHMtPmNlZV9zdGF0dXNfdXAgPSBiZmFfb3NfbnRvaGwoY2ZnX3N0YXRzLT5jZWVfc3RhdHVzX3VwKTsKKwljZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPmNlZV9od19jZmdfY2hhbmdlZCk7CisJY2ZnX3N0YXRzLT5yZWN2ZF9pbnZhbGlkX2NmZyA9CisJCWJmYV9vc19udG9obChjZmdfc3RhdHMtPnJlY3ZkX2ludmFsaWRfY2ZnKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9jZWVfZm9ybWF0X2xsZHBfY2ZnKHN0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgKmxsZHBfY2ZnKQoreworCWxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsID0gYmZhX29zX250b2hzKGxsZHBfY2ZnLT50aW1lX3RvX2ludGVydmFsKTsKKwlsbGRwX2NmZy0+ZW5hYmxlZF9zeXN0ZW1fY2FwID0KKwkJYmZhX29zX250b2hzKGxsZHBfY2ZnLT5lbmFibGVkX3N5c3RlbV9jYXApOworfQorCisvKioKKyAqIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLworc3RhdGljICAgICAgICAgIHUzMgorYmZhX2NlZV9hdHRyX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfc3RhdHNfbWVtaW5mbygpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gdm9pZAorICoKKyAqIEByZXR1cm4gU2l6ZSBvZiBETUEgcmVnaW9uCisgKi8KK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9jZWVfc3RhdHNfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9jZWVfc3RhdHNfcyksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X2F0dHJfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfY2VlX2dldF9hdHRyX2lzcihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJY2VlLT5nZXRfYXR0cl9zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCAqcHJvY2VzcworCQkgKiBpdC4KKwkJICovCisJCW1lbWNweShjZWUtPmF0dHIsIGNlZS0+YXR0cl9kbWEua3ZhLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfY2VlX2F0dHJfcykpOworCQliZmFfY2VlX2Zvcm1hdF9jZWVfY2ZnKGNlZS0+YXR0cik7CisJfQorCWNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlpZiAoY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4pIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQljZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbihjZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcsIHN0YXR1cyk7CisJfQorCWJmYV90cmMoY2VlLCAwKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gY2VlIC0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX2NlZV9nZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPmdldF9zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJYmZhX3RyYyhjZWUsIDApOworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0ZWQgZGF0YSBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIERNQSBhcmVhLCBwcm9jZXNzCisJCSAqIGl0LgorCQkgKi8KKwkJbWVtY3B5KGNlZS0+c3RhdHMsIGNlZS0+c3RhdHNfZG1hLmt2YSwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zKSk7CisJCWJmYV9jZWVfZm9ybWF0X2NlZV9zdGF0cyhjZWUtPnN0YXRzKTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwliZmFfdHJjKGNlZSwgMCk7CisJaWYgKGNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbikgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4uZ2V0X3N0YXRzX2NiYXJnLCBzdGF0dXMpOworCX0KKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9nZXRfYXR0cl9pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9jZWVfcmVzZXRfc3RhdHNfaXNyKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IHN0YXR1czsKKwljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJaWYgKGNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmZuKQorCQljZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbihjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JhcmcsIHN0YXR1cyk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfY2VlX21lbWluZm8odm9pZCkKK3sKKwlyZXR1cm4gKGJmYV9jZWVfYXR0cl9tZW1pbmZvKCkgKyBiZmFfY2VlX3N0YXRzX21lbWluZm8oKSk7Cit9CisKKy8qKgorICogYmZhX2NlZV9tZW1fY2xhaW0oKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSBDRUUgbW9kdWxlIHBvaW50ZXIKKyAqIAkgICAgICBkbWFfa3ZhIEtlcm5lbCBWaXJ0dWFsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqIAkgICAgICBkbWFfcGEgIFBoeXNpY2FsIEFkZHJlc3Mgb2YgQ0VFIERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9tZW1fY2xhaW0oc3RydWN0IGJmYV9jZWVfcyAqY2VlLCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwljZWUtPmF0dHJfZG1hLmt2YSA9IGRtYV9rdmE7CisJY2VlLT5hdHRyX2RtYS5wYSA9IGRtYV9wYTsKKwljZWUtPnN0YXRzX2RtYS5rdmEgPSBkbWFfa3ZhICsgYmZhX2NlZV9hdHRyX21lbWluZm8oKTsKKwljZWUtPnN0YXRzX2RtYS5wYSA9IGRtYV9wYSArIGJmYV9jZWVfYXR0cl9tZW1pbmZvKCk7CisJY2VlLT5hdHRyID0gKHN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqKWRtYV9rdmE7CisJY2VlLT5zdGF0cyA9CisJCShzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICopKGRtYV9rdmEgKyBiZmFfY2VlX2F0dHJfbWVtaW5mbygpKTsKK30KKworLyoqCisgKiBiZmFfY2VlX2dldF9hdHRyKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgYXR0cmlidXRlcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X2F0dHIoc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2NlZV9hdHRyX3MgKmF0dHIsCisJCSBiZmFfY2VlX2dldF9hdHRyX2NiZm5fdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWJmYV90cmMoY2VlLCAwKTsKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9hdHRyX3BlbmRpbmcgPT0gQkZBX1RSVUUpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCX0KKwljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfVFJVRTsKKwljbWQgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zICopY2VlLT5nZXRfY2ZnX21iLm1zZzsKKwljZWUtPmF0dHIgPSBhdHRyOworCWNlZS0+Y2Jmbi5nZXRfYXR0cl9jYmZuID0gY2JmbjsKKwljZWUtPmNiZm4uZ2V0X2F0dHJfY2JhcmcgPSBjYmFyZzsKKwliZmlfaDJpX3NldChjbWQtPm1oLCBCRklfTUNfQ0VFLCBCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGNlZS0+aW9jKSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChjbWQtPmRtYV9hZGRyLCBjZWUtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPmdldF9jZmdfbWIpOworCWJmYV90cmMoY2VlLCAwKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9jZWVfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBDRUUgc3RhdGlzdGljcy4KKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworCitiZmFfc3RhdHVzX3QKK2JmYV9jZWVfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9jZWVfc3RhdHNfcyAqc3RhdHMsCisJCSAgYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX2dldF9yZXFfcyAqY21kOworCisJYmZhX2Fzc2VydCgoY2VlICE9IE5VTEwpICYmIChjZWUtPmlvYyAhPSBOVUxMKSk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoY2VlLT5pb2MpKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWJmYV90cmMoY2VlLCAwKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisJY2VlLT5nZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgKiljZWUtPmdldF9zdGF0c19tYi5tc2c7CisJY2VlLT5zdGF0cyA9IHN0YXRzOworCWNlZS0+Y2Jmbi5nZXRfc3RhdHNfY2JmbiA9IGNiZm47CisJY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChjZWUtPmlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY21kLT5kbWFfYWRkciwgY2VlLT5zdGF0c19kbWEucGEpOworCWJmYV9pb2NfbWJveF9xdWV1ZShjZWUtPmlvYywgJmNlZS0+Z2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfY2VlX3Jlc2V0X3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfY2VlX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmlfY2VlX3Jlc2V0X3N0YXRzX3MgKmNtZDsKKworCWJmYV9hc3NlcnQoKGNlZSAhPSBOVUxMKSAmJiAoY2VlLT5pb2MgIT0gTlVMTCkpOworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChjZWUtPmlvYykpIHsKKwkJYmZhX3RyYyhjZWUsIDApOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQliZmFfdHJjKGNlZSwgMCk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCWNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9IEJGQV9UUlVFOworCWNtZCA9IChzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zICopY2VlLT5yZXNldF9zdGF0c19tYi5tc2c7CisJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4gPSBjYmZuOworCWNlZS0+Y2Jmbi5yZXNldF9zdGF0c19jYmFyZyA9IGNiYXJnOworCWJmaV9oMmlfc2V0KGNtZC0+bWgsIEJGSV9NQ19DRUUsIEJGSV9DRUVfSDJJX1JFU0VUX1NUQVRTLAorCQkgICAgYmZhX2lvY19wb3J0aWQoY2VlLT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUoY2VlLT5pb2MsICZjZWUtPnJlc2V0X3N0YXRzX21iKTsKKwliZmFfdHJjKGNlZSwgMCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX2NlZV9pc3JzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gdm9pZAorICovCisKK3ZvaWQKK2JmYV9jZWVfaXNyKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKm1zZzsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcnNwX3MgKmdldF9yc3A7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlID0gKHN0cnVjdCBiZmFfY2VlX3MgKiljYmFyZzsKKwltc2cgPSAodW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgKiltOworCWdldF9yc3AgPSAoc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICopbTsKKwliZmFfdHJjKGNlZSwgbXNnLT5taC5tc2dfaWQpOworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9DRUVfSTJIX0dFVF9DRkdfUlNQOgorCQliZmFfdHJjKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJmYV9jZWVfZ2V0X2F0dHJfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUDoKKwkJYmZhX2NlZV9nZXRfc3RhdHNfaXNyKGNlZSwgZ2V0X3JzcC0+Y21kX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgQkZJX0NFRV9JMkhfUkVTRVRfU1RBVFNfUlNQOgorCQliZmFfY2VlX3Jlc2V0X3N0YXRzX2lzcihjZWUsIGdldF9yc3AtPmNtZF9zdGF0dXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfY2VlX2hiZmFpbCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgQ0VFIG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworCit2b2lkCitiZmFfY2VlX2hiZmFpbCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9jZWVfcyAqY2VlOworCWNlZSA9IChzdHJ1Y3QgYmZhX2NlZV9zICopYXJnOworCisJaWYgKGNlZS0+Z2V0X2F0dHJfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPmdldF9hdHRyX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9hdHRyX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4uZ2V0X2F0dHJfY2JmbikgeworCQkJY2VlLT5jYmZuLmdldF9hdHRyX2NiZm4oY2VlLT5jYmZuLmdldF9hdHRyX2NiYXJnLAorCQkJCQkJQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorCWlmIChjZWUtPmdldF9zdGF0c19wZW5kaW5nID09IEJGQV9UUlVFKSB7CisJCWNlZS0+Z2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPmdldF9zdGF0c19wZW5kaW5nID0gQkZBX0ZBTFNFOworCQlpZiAoY2VlLT5jYmZuLmdldF9zdGF0c19jYmZuKSB7CisJCQljZWUtPmNiZm4uZ2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLmdldF9zdGF0c19jYmFyZywKKwkJCQkJCSBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCX0KKwl9CisJaWYgKGNlZS0+cmVzZXRfc3RhdHNfcGVuZGluZyA9PSBCRkFfVFJVRSkgeworCQljZWUtPnJlc2V0X3N0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQljZWUtPnJlc2V0X3N0YXRzX3BlbmRpbmcgPSBCRkFfRkFMU0U7CisJCWlmIChjZWUtPmNiZm4ucmVzZXRfc3RhdHNfY2JmbikgeworCQkJY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiZm4oY2VlLT5jYmZuLnJlc2V0X3N0YXRzX2NiYXJnLAorCQkJCQkJICAgQkZBX1NUQVRVU19GQUlMRUQpOworCQl9CisJfQorfQorCisvKioKKyAqIGJmYV9jZWVfYXR0YWNoKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBjZWUgLSBQb2ludGVyIHRvIHRoZSBDRUUgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKiAgICAgICAgICAgIGlvYyAtIFBvaW50ZXIgdG8gdGhlIGlvYyBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgZGV2IC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgVGhlIGRldmljZSBkcml2ZXIgc3BlY2lmaWMgbWJveCBJU1IgZnVuY3Rpb25zIGhhdmUKKyAqICAgICAgICAgICAgICAgICAgdGhpcyBwb2ludGVyIGFzIG9uZSBvZiB0aGUgcGFyYW1ldGVycy4KKyAqICAgICAgICAgICAgdHJjbW9kIC0KKyAqICAgICAgICAgICAgbG9nbW9kIC0KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9hdHRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlLCBzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRldiwKKwkgICAgICAgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwliZmFfYXNzZXJ0KGNlZSAhPSBOVUxMKTsKKwljZWUtPmRldiA9IGRldjsKKwljZWUtPnRyY21vZCA9IHRyY21vZDsKKwljZWUtPmxvZ21vZCA9IGxvZ21vZDsKKwljZWUtPmlvYyA9IGlvYzsKKworCWJmYV9pb2NfbWJveF9yZWdpc3IoY2VlLT5pb2MsIEJGSV9NQ19DRUUsIGJmYV9jZWVfaXNyLCBjZWUpOworCWJmYV9pb2NfaGJmYWlsX2luaXQoJmNlZS0+aGJmYWlsLCBiZmFfY2VlX2hiZmFpbCwgY2VlKTsKKwliZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihjZWUtPmlvYywgJmNlZS0+aGJmYWlsKTsKKwliZmFfdHJjKGNlZSwgMCk7Cit9CisKKy8qKgorICogYmZhX2NlZV9kZXRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIGNlZSAtIFBvaW50ZXIgdG8gdGhlIENFRSBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX2NlZV9kZXRhY2goc3RydWN0IGJmYV9jZWVfcyAqY2VlKQoreworCS8qCisJICogRm9yIG5vdywganVzdCBjaGVjayBpZiB0aGVyZSBpcyBzb21lIGlvY3RsIHBlbmRpbmcgYW5kIG1hcmsgdGhhdCBhcworCSAqIGZhaWxlZD8KKwkgKi8KKwkvKiBiZmFfY2VlX2hiZmFpbChjZWUpOyAqLworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTJkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jb3JlLmMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisKKyNkZWZpbmUgREVGX0NGR19OVU1fRkFCUklDUyAgICAgICAgIDEKKyNkZWZpbmUgREVGX0NGR19OVU1fTFBPUlRTICAgICAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9DUVMgICAgICAgICAgICAgNAorI2RlZmluZSBERUZfQ0ZHX05VTV9JT0lNX1JFUVMgICAgICAgKEJGQV9JT0lNX01BWCkKKyNkZWZpbmUgREVGX0NGR19OVU1fVFNLSU1fUkVRUyAgICAgIDEyOAorI2RlZmluZSBERUZfQ0ZHX05VTV9GQ1hQX1JFUVMgICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fVUZfQlVGUyAgICAgICAgIDY0CisjZGVmaW5lIERFRl9DRkdfTlVNX1JQT1JUUyAgICAgICAgICAxMDI0CisjZGVmaW5lIERFRl9DRkdfTlVNX0lUTklNUyAgICAgICAgICAoREVGX0NGR19OVU1fUlBPUlRTKQorI2RlZmluZSBERUZfQ0ZHX05VTV9USU5TICAgICAgICAgICAgMjU2CisKKyNkZWZpbmUgREVGX0NGR19OVU1fU0dQR1MgICAgICAgICAgIDIwNDgKKyNkZWZpbmUgREVGX0NGR19OVU1fUkVRUV9FTEVNUyAgICAgIDI1NgorI2RlZmluZSBERUZfQ0ZHX05VTV9SU1BRX0VMRU1TICAgICAgNjQKKyNkZWZpbmUgREVGX0NGR19OVU1fU0JPT1RfVEdUUyAgICAgIDE2CisjZGVmaW5lIERFRl9DRkdfTlVNX1NCT09UX0xVTlMgICAgICAxNgorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnQgb2YgdGhlIEJGQSBsaWJyYXJ5LgorICogVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBjYWxsZWQgYmVmb3JlIGJmYV9hdHRhY2goKSB0byBnZXQgdGhlCisgKiBtZW1vcnkgcmVxdWlyZWQgb2YgdGhlIEJGQSBsYXllciBmb3IgYSBnaXZlbiBkcml2ZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGNhbGwgd2lsbCBmYWlsLCBpZiB0aGUgY2FwIGlzIG91dCBvZiByYW5nZSBjb21wYXJlZCB0byBwcmUtZGVmaW5lZAorICogdmFsdWVzIHdpdGhpbiB0aGUgQkZBIGxpYnJhcnkKKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIAlwb2ludGVyIHRvIGJmYV9pb2NfY2ZnX3QuIERyaXZlciBsYXllciBzaG91bGQgaW5kaWNhdGUKKyAqIAkJCWl0cyBjb25maWd1cmF0aW9uIGluIHRoaXMgc3RydWN0dXJlLgorICoJCQlUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgY2FuIGJlCisgKgkJCWZldGNoZWQgdXNpbmcgYmZhX2NmZ19nZXRfZGVmYXVsdCgpIEFQSS4KKyAqCisgKiAJCQlJZiBjYXAncyBib3VuZGFyeSBjaGVjayBmYWlscywgdGhlIGxpYnJhcnkgd2lsbCB1c2UKKyAqCQkJdGhlIGRlZmF1bHQgYmZhX2NhcF90IHZhbHVlcyAoYW5kIGxvZyBhIHdhcm5pbmcgbXNnKS4KKyAqCisgKiBAcGFyYW1bb3V0XSBtZW1pbmZvIC0gcG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGlzIGNvbnRlbnQKKyAqIAkJCWluZGljYXRlcyB0aGUgbWVtb3J5IHR5cGUgKHNlZSBiZmFfbWVtX3R5cGVfdCkgYW5kCisgKgkJCWFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQuCisgKgorICoJCQlEcml2ZXIgc2hvdWxkIGFsbG9jYXRlIHRoZSBtZW1vcnksIHBvcHVsYXRlIHRoZQorICoJCQlzdGFydGluZyBhZGRyZXNzIGZvciBlYWNoIGJsb2NrIGFuZCBwcm92aWRlIHRoZSBzYW1lCisgKgkJCXN0cnVjdHVyZSBhcyBpbnB1dCBwYXJhbWV0ZXIgdG8gYmZhX2F0dGFjaCgpIGNhbGwuCisgKgorICogQHJldHVybiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczogQG5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvKQoreworCWludCAgICAgICAgICAgICBpOworCXUzMiAgICAgICAga21fbGVuID0gMCwgZG1fbGVuID0gMDsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwliZmFfb3NfbWVtc2V0KCh2b2lkICopbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7CisJbWVtaW5mby0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ubWVtX3R5cGUgPQorCQlCRkFfTUVNX1RZUEVfS1ZBOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV90eXBlID0KKwkJQkZBX01FTV9UWVBFX0RNQTsKKworCWJmYV9pb2NmY19tZW1pbmZvKGNmZywgJmttX2xlbiwgJmRtX2xlbik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+bWVtaW5mbyhjZmcsICZrbV9sZW4sICZkbV9sZW4pOworCisKKwltZW1pbmZvLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9LVkEgLSAxXS5tZW1fbGVuID0ga21fbGVuOworCW1lbWluZm8tPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLm1lbV9sZW4gPSBkbV9sZW47Cit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZG8gYXR0YWNoIHRoZSBkcml2ZXIgaW5zdGFuY2Ugd2l0aCB0aGUgQkZBCisgKiBsaWJyYXJ5LiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHRyaWdnZXIgYW55IEhXIGluaXRpYWxpemF0aW9uCisgKiBwcm9jZXNzICh3aGljaCB3aWxsIGJlIGRvbmUgaW4gYmZhX2luaXQoKSBjYWxsKQorICoKKyAqIFRoaXMgY2FsbCB3aWxsIGZhaWwsIGlmIHRoZSBjYXAgaXMgb3V0IG9mIHJhbmdlIGNvbXBhcmVkIHRvCisgKiBwcmUtZGVmaW5lZCB2YWx1ZXMgd2l0aGluIHRoZSBCRkEgbGlicmFyeQorICoKKyAqIEBwYXJhbVtvdXRdCWJmYQlQb2ludGVyIHRvIGJmYV90LgorICogQHBhcmFtW2luXQliZmFkIAlPcGFxdWUgaGFuZGxlIGJhY2sgdG8gdGhlIGRyaXZlcidzIElPQyBzdHJ1Y3R1cmUKKyAqIEBwYXJhbVtpbl0JY2ZnCVBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdC4gU2hvdWxkIGJlIHNhbWUgc3RydWN0dXJlCisgKiAJCQl0aGF0IHdhcyB1c2VkIGluIGJmYV9jZmdfZ2V0X21lbWluZm8oKS4KKyAqIEBwYXJhbVtpbl0gCW1lbWluZm8gUG9pbnRlciB0byBiZmFfbWVtaW5mb190LiBUaGUgZHJpdmVyIHNob3VsZAorICogCQkJdXNlIHRoZSBiZmFfY2ZnX2dldF9tZW1pbmZvKCkgY2FsbCB0bworICogCQkJZmluZCB0aGUgbWVtb3J5IGJsb2NrcyByZXF1aXJlZCwgYWxsb2NhdGUgdGhlCisgKiAJCQlyZXF1aXJlZCBtZW1vcnkgYW5kIHByb3ZpZGUgdGhlIHN0YXJ0aW5nIGFkZHJlc3Nlcy4KKyAqIEBwYXJhbVtpbl0gCXBjaWRldglwb2ludGVyIHRvIHN0cnVjdCBiZmFfcGNpZGV2X3MKKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICoKKyAqLwordm9pZAorYmZhX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCSAgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyAqbWVsZW07CisKKwliZmEtPmZjcyA9IEJGQV9GQUxTRTsKKworCWJmYV9hc3NlcnQoKGNmZyAhPSBOVUxMKSAmJiAobWVtaW5mbyAhPSBOVUxMKSk7CisKKwkvKioKKwkgKiBpbml0aWFsaXplIGFsbCBtZW1vcnkgcG9pbnRlcnMgZm9yIGl0ZXJhdGl2ZSBhbGxvY2F0aW9uCisJICovCisJZm9yIChpID0gMDsgaSA8IEJGQV9NRU1fVFlQRV9NQVg7IGkrKykgeworCQltZWxlbSA9IG1lbWluZm8tPm1lbWluZm8gKyBpOworCQltZWxlbS0+a3ZhX2N1cnAgPSBtZWxlbS0+a3ZhOworCQltZWxlbS0+ZG1hX2N1cnAgPSBtZWxlbS0+ZG1hOworCX0KKworCWJmYV9pb2NmY19hdHRhY2goYmZhLCBiZmFkLCBjZmcsIG1lbWluZm8sIHBjaWRldik7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+YXR0YWNoKGJmYSwgYmZhZCwgY2ZnLCBtZW1pbmZvLCBwY2lkZXYpOworCit9CisKKy8qKgorICogVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgQkZBIElPQy4gSU9DIHNob3VsZCBiZSBzdG9wcGVkIChieQorICogY2FsbGluZyBiZmFfc3RvcCgpKSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhIC0gcG9pbnRlciB0byBiZmFfdC4KKyAqCisgKiBAcmV0dXJuCisgKiB2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWludAlpOworCisJZm9yIChpID0gMDsgaGFsX21vZHNbaV07IGkrKykKKwkJaGFsX21vZHNbaV0tPmRldGFjaChiZmEpOworCisJYmZhX2lvY2ZjX2RldGFjaChiZmEpOworfQorCisKK3ZvaWQKK2JmYV9pbml0X3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwliZmEtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfaW5pdF9sb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpCit7CisJYmZhLT5sb2dtID0gbG9nbW9kOworfQorCisKK3ZvaWQKK2JmYV9pbml0X2FlbihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCWJmYS0+YWVuID0gYWVuOworfQorCit2b2lkCitiZmFfaW5pdF9wbG9nKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwliZmEtPnBsb2cgPSBwbG9nOworfQorCisvKioKKyAqIEluaXRpYWxpemUgSU9DLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gaW1tZWRpYXRlbHksIHdoZW4gdGhlIElPQyBpbml0aWFsaXphdGlvbiBpcworICogY29tcGxldGVkLCB0aGUgYmZhX2NiX2luaXQoKSB3aWxsIGJlIGNhbGxlZC4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQlpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIFNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogQG5vdGUKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zLCB0aGUgZHJpdmVyIHNob3VsZCByZWdpc3RlciB0aGUgaW50ZXJydXB0IHNlcnZpY2UKKyAqIHJvdXRpbmUocykgYW5kIGVuYWJsZSB0aGUgZGV2aWNlIGludGVycnVwdHMuIElmIHRoaXMgaXMgbm90IGRvbmUsCisgKiBiZmFfY2JfaW5pdCgpIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZAorICovCit2b2lkCitiZmFfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaW9jZmNfaW5pdChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIGluaXRpYXRlIHRoZSBJT0MgY29uZmlndXJhdGlvbiBzZXR1cC4gVGhpcyBmdW5jdGlvbgorICogd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuCisgKgorICogQHBhcmFtW2luXQliZmEJaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NmY19zdGFydChiZmEpOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1aWVzZSB0aGUgSU9DLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LAorICogd2hlbiB0aGUgSU9DIGlzIGFjdHVhbGx5IHN0b3BwZWQsIHRoZSBiZmFfY2Jfc3RvcCgpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIEBwYXJhbVtpbl0gCWJmYSAtIHBvaW50ZXIgdG8gYmZhX3QuCisgKgorICogQHJldHVybiBOb25lCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqIGJmYV9jYl9zdG9wKCkgY291bGQgYmUgY2FsbGVkIGJlZm9yZSBvciBhZnRlciBiZmFfc3RvcCgpIHJldHVybnMuCisgKgorICogQG5vdGUKKyAqIEluIGNhc2Ugb2YgYW55IGZhaWx1cmUsIHdlIGNvdWxkIGhhbmRsZSBpdCBhdXRvbWF0aWNhbGx5IGJ5IGRvaW5nIGEKKyAqIHJlc2V0IGFuZCB0aGVuIHN1Y2NlZWQgdGhlIGJmYV9zdG9wKCkgY2FsbC4KKyAqLwordm9pZAorYmZhX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY2ZjX3N0b3AoYmZhKTsKK30KKwordm9pZAorYmZhX2NvbXBfZGVxKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJSU5JVF9MSVNUX0hFQUQoY29tcF9xKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmJmYS0+Y29tcF9xLCBjb21wX3EpOworfQorCit2b2lkCitiZmFfY29tcF9wcm9jZXNzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpjb21wX3EpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZW47CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCBjb21wX3EpIHsKKwkJaGNiX3FlID0gKHN0cnVjdCBiZmFfY2JfcWVfcyAqKSBxZTsKKwkJaGNiX3FlLT5jYmZuKGhjYl9xZS0+Y2JhcmcsIEJGQV9UUlVFKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9jb21wX2ZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKmNvbXBfcSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zICAgKmhjYl9xZTsKKworCXdoaWxlICghbGlzdF9lbXB0eShjb21wX3EpKSB7CisJCWJmYV9xX2RlcShjb21wX3EsICZxZSk7CisJCWhjYl9xZSA9IChzdHJ1Y3QgYmZhX2NiX3FlX3MgKikgcWU7CisJCWhjYl9xZS0+Y2JmbihoY2JfcWUtPmNiYXJnLCBCRkFfRkFMU0UpOworCX0KK30KKwordm9pZAorYmZhX2F0dGFjaF9mY3Moc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5mY3MgPSBCRkFfVFJVRTsKK30KKworLyoqCisgKiBQZXJpb2RpYyB0aW1lciBoZWFydCBiZWF0IGZyb20gZHJpdmVyCisgKi8KK3ZvaWQKK2JmYV90aW1lcl90aWNrKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV90aW1lcl9iZWF0KCZiZmEtPnRpbWVyX21vZCk7Cit9CisKKyNpZm5kZWYgQkZBX0JJT1NfQlVJTEQKKy8qKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIFBDSSB2ZW5kb3IvZGV2aWNlIGlkIGxpc3RzIHN1cHBvcnRlZCBieSB0aGlzCisgKiBCRkEgaW5zdGFuY2UuCisgKi8KK3ZvaWQKK2JmYV9nZXRfcGNpaWRzKHN0cnVjdCBiZmFfcGNpaWRfcyAqKnBjaWlkcywgaW50ICpucGNpaWRzKQoreworCXN0YXRpYyBzdHJ1Y3QgYmZhX3BjaWlkX3MgX19wY2lpZHNbXSA9IHsKKwkJe0JGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsIEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlB9LAorCQl7QkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwgQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUH0sCisJCXtCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLCBCRkFfUENJX0RFVklDRV9JRF9DVH0sCisJfTsKKworCSpucGNpaWRzID0gc2l6ZW9mKF9fcGNpaWRzKSAvIHNpemVvZihfX3BjaWlkc1swXSk7CisJKnBjaWlkcyA9IF9fcGNpaWRzOworfQorCisvKioKKyAqIFVzZSB0aGlzIGZ1bmN0aW9uIHF1ZXJ5IHRoZSBkZWZhdWx0IHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgdmFsdWUgKGNvbXBpbGVkCisgKiBpbnRvIEJGQSBsYXllcikuIFRoZSBPUyBkcml2ZXIgY2FuIHRoZW4gdHVybiBiYWNrIGFuZCBvdmVyd3JpdGUgZW50cmllcyB0aGF0CisgKiBoYXZlIGJlZW4gY29uZmlndXJlZCBieSB0aGUgdXNlci4KKyAqCisgKiBAcGFyYW1baW5dIGNmZyAtIHBvaW50ZXIgdG8gYmZhX2lvY19jZmdfdAorICoKKyAqIEByZXR1cm4KKyAqCXZvaWQKKyAqCisgKiBTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NmZ19nZXRfZGVmYXVsdChzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJY2ZnLT5md2NmZy5udW1fZmFicmljcyA9IERFRl9DRkdfTlVNX0ZBQlJJQ1M7CisJY2ZnLT5md2NmZy5udW1fbHBvcnRzID0gREVGX0NGR19OVU1fTFBPUlRTOworCWNmZy0+ZndjZmcubnVtX3Jwb3J0cyA9IERFRl9DRkdfTlVNX1JQT1JUUzsKKwljZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPSBERUZfQ0ZHX05VTV9JT0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IERFRl9DRkdfTlVNX1RTS0lNX1JFUVM7CisJY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzID0gREVGX0NGR19OVU1fRkNYUF9SRVFTOworCWNmZy0+ZndjZmcubnVtX3VmX2J1ZnMgPSBERUZfQ0ZHX05VTV9VRl9CVUZTOworCWNmZy0+ZndjZmcubnVtX2NxcyA9IERFRl9DRkdfTlVNX0NRUzsKKworCWNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zID0gREVGX0NGR19OVU1fUkVRUV9FTEVNUzsKKwljZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyA9IERFRl9DRkdfTlVNX1JTUFFfRUxFTVM7CisJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gREVGX0NGR19OVU1fU0dQR1M7CisJY2ZnLT5kcnZjZmcubnVtX3Nib290X3RndHMgPSBERUZfQ0ZHX05VTV9TQk9PVF9UR1RTOworCWNmZy0+ZHJ2Y2ZnLm51bV9zYm9vdF9sdW5zID0gREVGX0NGR19OVU1fU0JPT1RfTFVOUzsKKwljZmctPmRydmNmZy5wYXRoX3RvdiA9IEJGQV9GQ1BJTV9QQVRIVE9WX0RFRjsKKwljZmctPmRydmNmZy5pb2NfcmVjb3ZlciA9IEJGQV9GQUxTRTsKKwljZmctPmRydmNmZy5kZWxheV9jb21wID0gQkZBX0ZBTFNFOworCit9CisKK3ZvaWQKK2JmYV9jZmdfZ2V0X21pbihzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcpCit7CisJYmZhX2NmZ19nZXRfZGVmYXVsdChjZmcpOworCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAgID0gQkZBX0lPSU1fTUlOOworCWNmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXMgID0gQkZBX1RTS0lNX01JTjsKKwljZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgICA9IEJGQV9GQ1hQX01JTjsKKwljZmctPmZ3Y2ZnLm51bV91Zl9idWZzICAgICA9IEJGQV9VRl9NSU47CisJY2ZnLT5md2NmZy5udW1fcnBvcnRzICAgICAgPSBCRkFfUlBPUlRfTUlOOworCisJY2ZnLT5kcnZjZmcubnVtX3NncGdzICAgICAgPSBCRkFfU0dQR19NSU47CisJY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgPSBCRkFfUkVRUV9ORUxFTVNfTUlOOworCWNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gQkZBX1JTUFFfTkVMRU1TX01JTjsKKwljZmctPmRydmNmZy5taW5fY2ZnICAgICAgICA9IEJGQV9UUlVFOworfQorCit2b2lkCitiZmFfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jX2F0dHJfcyAqaW9jX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYXR0cigmYmZhLT5pb2MsIGlvY19hdHRyKTsKK30KKworLyoqCisgKiBSZXRyaWV2ZSBmaXJtd2FyZSB0cmFjZSBpbmZvcm1hdGlvbiBvbiBJT0MgZmFpbHVyZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwlyZXR1cm4gYmZhX2lvY19kZWJ1Z19md3NhdmUoJmJmYS0+aW9jLCB0cmNkYXRhLCB0cmNsZW4pOworfQorCisvKioKKyAqIAkJRmV0Y2ggZmlybXdhcmUgdHJhY2UgZGF0YS4KKyAqCisgKiBAcGFyYW1baW5dCQliZmEJCQlCRkEgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdCQl0cmNkYXRhCQlGaXJtd2FyZSB0cmFjZSBidWZmZXIKKyAqIEBwYXJhbVtpbixvdXRdCXRyY2xlbgkJRmlybXdhcmUgdHJhY2UgYnVmZmVyIGxlbgorICoKKyAqIEByZXR2YWwgQkZBX1NUQVRVU19PSwkJCUZpcm13YXJlIHRyYWNlIGlzIGZldGNoZWQuCisgKiBAcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUwlGaXJtd2FyZSB0cmFjZSBmZXRjaCBpcyBpbiBwcm9ncmVzcy4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKQoreworCXJldHVybiBiZmFfaW9jX2RlYnVnX2Z3dHJjKCZiZmEtPmlvYywgdHJjZGF0YSwgdHJjbGVuKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfY3NkZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzFkMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9jc2RlYnVnLmMKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisKKy8qKgorICogIGNzX2RlYnVnX2FwaQorICovCisKKwordm9pZAorYmZhX3BhbmljKGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpwYW5pY3N0cikKK3sKKwliZmFfbG9nKE5VTEwsIEJGQV9MT0dfSEFMX0FTU0VSVCwgZmlsZSwgbGluZSwgcGFuaWNzdHIpOworCWJmYV9vc19wYW5pYygpOworfQorCit2b2lkCitiZmFfc21fcGFuaWMoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20sIGludCBsaW5lLCBjaGFyICpmaWxlLCBpbnQgZXZlbnQpCit7CisJYmZhX2xvZyhsb2dtLCBCRkFfTE9HX0hBTF9TTV9BU1NFUlQsIGZpbGUsIGxpbmUsIGV2ZW50KTsKKwliZmFfb3NfcGFuaWMoKTsKK30KKworaW50CitiZmFfcV9pc19vbl9xX2Z1bmMoc3RydWN0IGxpc3RfaGVhZCAqcSwgc3RydWN0IGxpc3RfaGVhZCAqcWUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnRxZTsKKworCXRxZSA9IGJmYV9xX25leHQocSk7CisJd2hpbGUgKHRxZSAhPSBxKSB7CisJCWlmICh0cWUgPT0gcWUpCisJCQlyZXR1cm4gKDEpOworCQl0cWUgPSBiZmFfcV9uZXh0KHRxZSk7CisJCWlmICh0cWUgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcGltLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMWJhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbS5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNQSU0pOworQkZBX01PRFVMRShmY3BpbSk7CisKKy8qKgorICogIGhhbF9mY3BpbV9tb2QgQkZBIEZDUCBJbml0aWF0b3IgTW9kZSBtb2R1bGUKKyAqLworCisvKioKKyAqIAkJQ29tcHV0ZSBhbmQgcmV0dXJuIG1lbW9yeSBuZWVkZWQgYnkgRkNQKGltKSBtb2R1bGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1fbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwliZmFfaXRuaW1fbWVtaW5mbyhjZmcsIGttX2xlbiwgZG1fbGVuKTsKKworCS8qKgorCSAqIElPIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPCBCRkFfSU9JTV9NSU4pCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01JTjsKKwllbHNlIGlmIChjZmctPmZ3Y2ZnLm51bV9pb2ltX3JlcXMgPiBCRkFfSU9JTV9NQVgpCisJCWNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IEJGQV9JT0lNX01BWDsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzICoKKwkgIChzaXplb2Yoc3RydWN0IGJmYV9pb2ltX3MpICsgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zcF9zKSk7CisKKwkqZG1fbGVuICs9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyAqIEJGSV9JT0lNX1NOU0xFTjsKKworCS8qKgorCSAqIHRhc2sgbWFuYWdlbWVudCBjb21tYW5kIG1lbW9yeQorCSAqLworCWlmIChjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzIDwgQkZBX1RTS0lNX01JTikKKwkJY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IEJGQV9UU0tJTV9NSU47CisJKmttX2xlbiArPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzICogc2l6ZW9mKHN0cnVjdCBiZmFfdHNraW1fcyk7Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92KTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fcnBvcnRzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1faW9pbV9yZXFzKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyk7CisKKwlmY3BpbS0+YmZhICAgICAgICAgICAgPSBiZmE7CisJZmNwaW0tPm51bV9pdG5pbXMgICAgID0gY2ZnLT5md2NmZy5udW1fcnBvcnRzOworCWZjcGltLT5udW1faW9pbV9yZXFzICA9IGNmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwlmY3BpbS0+bnVtX3Rza2ltX3JlcXMgPSBjZmctPmZ3Y2ZnLm51bV90c2tpbV9yZXFzOworCWZjcGltLT5wYXRoX3RvdiAgICAgICA9IGNmZy0+ZHJ2Y2ZnLnBhdGhfdG92OworCWZjcGltLT5kZWxheV9jb21wCSAgPSBjZmctPmRydmNmZy5kZWxheV9jb21wOworCisJYmZhX2l0bmltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX3Rza2ltX2F0dGFjaChmY3BpbSwgbWVtaW5mbyk7CisJYmZhX2lvaW1fYXR0YWNoKGZjcGltLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3BpbV9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfaW9pbV9kZXRhY2goZmNwaW0pOworCWJmYV90c2tpbV9kZXRhY2goZmNwaW0pOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjcGltX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNwaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmNwaW0tPml0bmltX3EpIHsKKwkJaXRuaW0gPSAoc3RydWN0IGJmYV9pdG5pbV9zICopIHFlOworCQliZmFfaXRuaW1faW9jZGlzYWJsZShpdG5pbSk7CisJfQorfQorCit2b2lkCitiZmFfZmNwaW1fcGF0aF90b3Zfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgcGF0aF90b3YpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlmY3BpbS0+cGF0aF90b3YgPSBwYXRoX3RvdiAqIDEwMDA7CisJaWYgKGZjcGltLT5wYXRoX3RvdiA+IEJGQV9GQ1BJTV9QQVRIVE9WX01BWCkKKwkJZmNwaW0tPnBhdGhfdG92ID0gQkZBX0ZDUElNX1BBVEhUT1ZfTUFYOworfQorCit1MTYKK2JmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwlyZXR1cm4gKGZjcGltLT5wYXRoX3RvdiAvIDEwMDApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3BpbV9nZXRfbW9kc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyAqbW9kc3RhdHMpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwkqbW9kc3RhdHMgPSBmY3BpbS0+c3RhdHM7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNwaW1fY2xyX21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJbWVtc2V0KCZmY3BpbS0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KHFfZGVwdGggPD0gQkZBX0lPQ0ZDX1FERVBUSF9NQVgpOworCisJZmNwaW0tPnFfZGVwdGggPSBxX2RlcHRoOworfQorCit1MTYKK2JmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCisJcmV0dXJuIChmY3BpbS0+cV9kZXB0aCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwaW1fcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzIwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3BpbV9wcml2LmgKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BJTV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9GQ1BJTV9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX2ZjcGltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19mY3BpbS5oPgorI2luY2x1ZGUgPGNzL2JmYV93Yy5oPgorI2luY2x1ZGUgImJmYV9zZ3BnX3ByaXYuaCIKKworI2RlZmluZSBCRkFfSVROSU1fTUlOICAgMzIKKyNkZWZpbmUgQkZBX0lUTklNX01BWCAgIDEwMjQKKworI2RlZmluZSBCRkFfSU9JTV9NSU4gICAgOAorI2RlZmluZSBCRkFfSU9JTV9NQVggICAgMjAwMAorCisjZGVmaW5lIEJGQV9UU0tJTV9NSU4gICA0CisjZGVmaW5lIEJGQV9UU0tJTV9NQVggICA1MTIKKyNkZWZpbmUgQkZBX0ZDUElNX1BBVEhUT1ZfREVGCSgzMCAqIDEwMDApCS8qIGluIG1pbGxpc2VjcyAqLworI2RlZmluZSBCRkFfRkNQSU1fUEFUSFRPVl9NQVgJKDkwICogMTAwMCkJLyogaW4gbWlsbGlzZWNzICovCisKKyNkZWZpbmUgYmZhX2ZjcGltX3N0YXRzKF9fZmNwaW0sIF9fc3RhdHMpICAgXAorICAgIChfX2ZjcGltKS0+c3RhdHMuX19zdGF0cyArKworCitzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCSpiZmE7CisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW1fYXJyOworCXN0cnVjdCBiZmFfaW9pbV9zIAkqaW9pbV9hcnI7CisJc3RydWN0IGJmYV9pb2ltX3NwX3MgKmlvaW1fc3BfYXJyOworCXN0cnVjdCBiZmFfdHNraW1fcyAJKnRza2ltX2FycjsKKwlzdHJ1Y3QgYmZhX2RtYV9zCXNuc2Jhc2U7CisJaW50CQkJbnVtX2l0bmltczsKKwlpbnQJCQludW1faW9pbV9yZXFzOworCWludAkJCW51bV90c2tpbV9yZXFzOworCXUzMgkJcGF0aF90b3Y7CisJdTE2CQlxX2RlcHRoOworCXUxNgkJcnN2ZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpdG5pbV9xOyAgICAgICAgLyogIHF1ZXVlIG9mIGFjdGl2ZSBpdG5pbSAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWlvaW1fZnJlZV9xOyAgICAvKiAgZnJlZSBJTyByZXNvdXJjZXMgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAJaW9pbV9yZXNmcmVlX3E7IC8qICBJT3Mgd2FpdGluZyBmb3IgZi93ICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlpb2ltX2NvbXBfcTsgICAgLyogIElPIGdsb2JhbCBjb21wIFEgICAgICAgICAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXRza2ltX2ZyZWVfcTsKKwl1MzIJaW9zX2FjdGl2ZTsJLyogIGN1cnJlbnQgYWN0aXZlIElPcwkgICAgICAqLworCXUzMglkZWxheV9jb21wOworCXN0cnVjdCBiZmFfZmNwaW1fc3RhdHNfcyBzdGF0czsKK307CisKK3N0cnVjdCBiZmFfaW9pbV9zOworc3RydWN0IGJmYV90c2tpbV9zOworCisvKioKKyAqIEJGQSBJTyAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHFlOwkJLyogIHF1ZXVlIGVsZW1lbXQgICAgICAgICAgICAqLworCWJmYV9zbV90CQlzbTsgCS8qICBCRkEgaW9pbSBzdGF0ZSBtYWNoaW5lICAgKi8KKwlzdHJ1Y3QgYmZhX3MgCSAgICAgICAgKmJmYTsJLyogIEJGQSBtb2R1bGUgICAgICAgICAgICAgICAqLworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MJKmZjcGltOwkvKiAgcGFyZW50IGZjcGltIG1vZHVsZSAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqaXRuaW07CS8qICBpLXQtbiBuZXh1cyBmb3IgdGhpcyBJTyAgKi8KKwlzdHJ1Y3QgYmZhZF9pb2ltX3MgCSpkaW87CS8qICBkcml2ZXIgSU8gaGFuZGxlICAgICAgICAgKi8KKwl1MTYJaW90YWc7CQkvKiAgRldJIElPIHRhZyAgICAgICAgICAgICAgICovCisJdTE2CWFib3J0X3RhZzsJLyogIHVucWl1ZSBhYm9ydCByZXF1ZXN0IHRhZyAqLworCXUxNgluc2dlczsJCS8qICBudW1iZXIgb2YgU0cgZWxlbWVudHMgICAgKi8KKwl1MTYJbnNncGdzOwkJLyogIG51bWJlciBvZiBTRyBwYWdlcyAgICAgICAqLworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOwkvKiAgZmlyc3QgU0cgcGFnZSAgICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CQkvKiAgYWxsb2NhdGVkIFNHIHBhZ2VzICAgICAgICovCisJc3RydWN0IGJmYV9jYl9xZV9zIGhjYl9xZTsJLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWJmYV9jYl9jYmZuX3QgaW9fY2JmbjsJCS8qICBJTyBjb21wbGV0aW9uIGhhbmRsZXIgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqaW9zcDsJLyogIHNsb3ctcGF0aCBJTyBoYW5kbGluZyAgICAqLworfTsKKworc3RydWN0IGJmYV9pb2ltX3NwX3MgeworCXN0cnVjdCBiZmlfbXNnX3MgCWNvbXBfcnNwbXNnOwkvKiAgSU8gY29tcCBmL3cgcmVzcG9uc2UgICAgICovCisJdTgJCQkqc25zaW5mbzsJLyogIHNlbnNlIGluZm8gZm9yIHRoaXMgSU8gICAqLworCXN0cnVjdCBiZmFfc2dwZ193cWVfcyBzZ3BnX3dxZTsJLyogIHdhaXRxIGVsZW0gZm9yIHNncGcgICAgICAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OwkvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJYmZhX2Jvb2xlYW5fdAkJYWJvcnRfZXhwbGljaXQ7CS8qICBhYm9ydGVkIGJ5IE9TICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3Rza2ltX3MJKnRza2ltOwkJLyogIFJlbGV2YW50IFRNIGNtZCAgICAgICAgICAqLworfTsKKworLyoqCisgKiBCRkEgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgKGluaXRpYXRvciBtb2RlKQorICovCitzdHJ1Y3QgYmZhX3Rza2ltX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgcWU7CisJYmZhX3NtX3QJCXNtOworCXN0cnVjdCBiZmFfcyAgICAgICAgICAgICpiZmE7ICAgICAgICAvKiAgQkZBIG1vZHVsZSAgKi8KKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICAqZmNwaW07ICAgICAgLyogIHBhcmVudCBmY3BpbSBtb2R1bGUgICAgICAqLworCXN0cnVjdCBiZmFfaXRuaW1fcyAgICAgICppdG5pbTsgICAgICAvKiAgaS10LW4gbmV4dXMgZm9yIHRoaXMgSU8gICovCisJc3RydWN0IGJmYWRfdHNraW1fcyAgICAgICAgICpkdHNrOyAgIC8qICBkcml2ZXIgdGFzayBtZ210IGNtbmQgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgICAgICBub3RpZnk7ICAgICAgICAgLyogIG5vdGlmeSBpdG5pbSBvbiBUTSBjb21wICAqLworCWx1bl90ICAgICAgICAgICAgICAgIGx1bjsgICAgICAgICAgICAvKiAgbHVuIGlmIGFwcGxpY2FibGUgICAgICAgICovCisJZW51bSBmY3BfdG1fY21uZCAgICAgICAgdG1fY21uZDsgICAgIC8qICB0YXNrIG1hbmFnZW1lbnQgY29tbWFuZCAgKi8KKwl1MTYgICAgICAgICAgICAgdHNrX3RhZzsgICAgICAgIC8qICBGV0kgSU8gdGFnICAgICAgICAgICAgICAgKi8KKwl1OCAgICAgICAgICAgICAgdHNlY3M7ICAgICAgICAgIC8qICB0aW1lb3V0IGluIHNlY29uZHMgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICByZXFxX3dhaXQ7ICAgLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGlvX3E7ICAgIC8qICBxdWV1ZSBvZiBhZmZlY3RlZCBJT3MgICAgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgICAgICAgd2M7ICAgICAgLyogIHdhaXRpbmcgY291bnRlciAgICAgICAgICAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwloY2JfcWU7ICAgICAgLyogIGJmYSBjYWxsYmFjayBxZWxlbSAgICAgICAqLworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyAgIHRza19zdGF0dXM7ICAvKiAgVE0gc3RhdHVzICAgICAgICAgICAgICAgICovCit9OworCisvKioKKyAqIEJGQSBpLXQtbiAoaW5pdGlhdG9yIG1vZGUpCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCAgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICAgICAgICAgICAgICAgKi8KKwliZmFfc21fdAkgIHNtOwkJLyogIGktdC1uIGltIEJGQSBzdGF0ZSBtYWNoaW5lICAqLworCXN0cnVjdCBiZmFfcyAgICAgICpiZmE7CQkvKiAgYmZhIGluc3RhbmNlICAgICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsJLyogIGJmYSBycG9ydCAgICAgICAgICAgICAgICAgICAqLworCXZvaWQgICAgICAgICAgICpkaXRuOwkJLyogIGRyaXZlciBpLXQtbiBzdHJ1Y3R1cmUgICAgICAqLworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgbWhkcjsJLyogIHByZS1idWlsdCBtaGRyICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgbXNnX25vOwkJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLworCXU4ICAgICAgICAgcmVxcTsJCS8qICBDUSBmb3IgcmVxdWVzdHMgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgYmZhIGNhbGxiYWNrIHFlbGVtICAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX3E7CS8qICBxdWV1ZSBvZiBwZW5kaW5nIElPIHJlcXVlc3RzKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlvX3E7CQkvKiAgcXVldWUgb2YgYWN0aXZlIElPIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBpb19jbGVhbnVwX3E7CS8qICBJTyBiZWluZyBjbGVhbmVkIHVwICAgICAgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHRza19xOwkJLyogIHF1ZXVlIG9mIGFjdGl2ZSBUTSBjb21tYW5kcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgIGRlbGF5X2NvbXBfcTsvKiAgcXVldWUgb2YgZmFpbGVkIGluZmxpZ2h0IGNtZHMgKi8KKwliZmFfYm9vbGVhbl90ICAgc2VxX3JlYzsJLyogIFNRRVIgc3VwcG9ydGVkICAgICAgICAgICAgICAqLworCWJmYV9ib29sZWFuX3QgICBpc19vbmxpbmU7CS8qICBpdG5pbSBpcyBPTkxJTkUgZm9yIElPICAgICAgKi8KKwliZmFfYm9vbGVhbl90ICAgaW90b3ZfYWN0aXZlOwkvKiAgSU8gVE9WIHRpbWVyIGlzIGFjdGl2ZQkgKi8KKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyICAgICAgICAgICAgICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgcGVuZGluZyBJTyBUT1YJCSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MgcmVxcV93YWl0OyAvKiAgdG8gd2FpdCBmb3Igcm9vbSBpbiByZXFxICovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW07CS8qICBmY3BpbSBtb2R1bGUgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zCXN0YXRzOworfTsKKworI2RlZmluZSBiZmFfaXRuaW1faXNfb25saW5lKF9pdG5pbSkgKF9pdG5pbSktPmlzX29ubGluZQorI2RlZmluZSBCRkFfRkNQSU1fTU9EKF9oYWwpICgmKF9oYWwpLT5tb2R1bGVzLmZjcGltX21vZCkKKyNkZWZpbmUgQkZBX0lPSU1fRlJPTV9UQUcoX2ZjcGltLCBfaW90YWcpCVwKKwkoJmZjcGltLT5pb2ltX2FycltfaW90YWddKQorI2RlZmluZSBCRkFfVFNLSU1fRlJPTV9UQUcoX2ZjcGltLCBfdG10YWcpICAgICAgICAgICAgICAgICAgXAorICAgICgmZmNwaW0tPnRza2ltX2FycltfdG10YWcgJiAoZmNwaW0tPm51bV90c2tpbV9yZXFzIC0gMSldKQorCisvKgorICogZnVuY3Rpb24gcHJvdG90eXBlcworICovCit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLAorCQkJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOwordm9pZCAgICAgICAgICAgIGJmYV9pb2ltX2dvb2RfY29tcF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkICAgICAgICAgICAgYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCQkJICAgICAgdTMyICpkbV9sZW4pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sCisJCQkJICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9kZXRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOwordm9pZCAgICAgICAgICAgIGJmYV9pdG5pbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7Cit2b2lkICAgICAgICAgICAgYmZhX2l0bmltX2lvZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfaXRuaW1fdHNrZG9uZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK2JmYV9ib29sZWFuX3QgICBiZmFfaXRuaW1faG9sZF9pbyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDUElNX1BSSVZfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyNDM1OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2ZjcG9ydC5jCkBAIC0wLDAgKzEsMTY3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcG9ydC5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBQUE9SVCk7CitCRkFfTU9EVUxFKHBwb3J0KTsKKworI2RlZmluZSBiZmFfcHBvcnRfY2FsbGJhY2soX19wcG9ydCwgX19ldmVudCkgZG8gewkJCVwKKwlpZiAoKF9fcHBvcnQpLT5iZmEtPmZjcykgeyAgICAgIFwKKwkJKF9fcHBvcnQpLT5ldmVudF9jYmZuKChfX3Bwb3J0KS0+ZXZlbnRfY2JhcmcsIChfX2V2ZW50KSk7ICAgICAgXAorCX0gZWxzZSB7CQkJCQkJCVwKKwkJKF9fcHBvcnQpLT5oY2JfZXZlbnQgPSAoX19ldmVudCk7ICAgICAgXAorCQliZmFfY2JfcXVldWUoKF9fcHBvcnQpLT5iZmEsICYoX19wcG9ydCktPmhjYl9xZSwJXAorCQlfX2JmYV9jYl9wb3J0X2V2ZW50LCAoX19wcG9ydCkpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGhlIHBvcnQgaXMgY29uc2lkZXJlZCBkaXNhYmxlZCBpZiBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIHBvcnQgb3IgSU9DIGFyZQorICogZGlzYWJsZWQgZXhwbGljaXRseQorICovCisjZGVmaW5lIEJGQV9QT1JUX0lTX0RJU0FCTEVEKGJmYSkgXAorCSgoYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKGJmYSkgPT0gQkZBX1RSVUUpIHx8IFwKKwkoYmZhX2lvY19pc19kaXNhYmxlZCgmYmZhLT5pb2MpID09IEJGQV9UUlVFKSkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9wcG9ydF9zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3Jlc2V0X2xpbmtpbmZvKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZyk7CisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworLyoqCisgKiBCRkEgcG9ydCBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCB7CisJQkZBX1BQT1JUX1NNX1NUQVJUID0gMSwJLyogIHN0YXJ0IHBvcnQgc3RhdGUgbWFjaGluZSAqLworCUJGQV9QUE9SVF9TTV9TVE9QID0gMiwJLyogIHN0b3AgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0VOQUJMRSA9IDMsCS8qICBlbmFibGUgcG9ydCAqLworCUJGQV9QUE9SVF9TTV9ESVNBQkxFID0gNCwJLyogIGRpc2FibGUgcG9ydCBzdGF0ZSBtYWNoaW5lICovCisJQkZBX1BQT1JUX1NNX0ZXUlNQID0gNSwJLyogIGZpcm13YXJlIGVuYWJsZS9kaXNhYmxlIHJzcCAqLworCUJGQV9QUE9SVF9TTV9MSU5LVVAgPSA2LAkvKiAgZmlybXdhcmUgbGlua3VwIGV2ZW50ICovCisJQkZBX1BQT1JUX1NNX0xJTktET1dOID0gNywJLyogIGZpcm13YXJlIGxpbmt1cCBkb3duICovCisJQkZBX1BQT1JUX1NNX1FSRVNVTUUgPSA4LAkvKiAgQ1Egc3BhY2UgYXZhaWxhYmxlICovCisJQkZBX1BQT1JUX1NNX0hXRkFJTCA9IDksCS8qICBJT0MgaC93IGZhaWx1cmUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2xpbmtkb3duKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9saW5rdXAoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9wcG9ydF9zbV9zdG9wcGVkKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsCisJCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Bwb3J0X3NtX2lvY2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwKKwkJCQkgICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfcHBvcnRfc21faW9jZmFpbChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIGhhbF9wcG9ydF9zbV90YWJsZVtdID0geworCXtCRkFfU00oYmZhX3Bwb3J0X3NtX3VuaW5pdCksIEJGQV9QUE9SVF9TVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KSwgQkZBX1BQT1JUX1NUX0VOQUJMSU5HX1FXQUlUfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9lbmFibGluZyksIEJGQV9QUE9SVF9TVF9FTkFCTElOR30sCisJe0JGQV9TTShiZmFfcHBvcnRfc21fbGlua2Rvd24pLCBCRkFfUFBPUlRfU1RfTElOS0RPV059LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2xpbmt1cCksIEJGQV9QUE9SVF9TVF9MSU5LVVB9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCksCisJIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkdfUVdBSVR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyksIEJGQV9QUE9SVF9TVF9ESVNBQkxJTkd9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKSwgQkZBX1BQT1JUX1NUX0RJU0FCTEVEfSwKKwl7QkZBX1NNKGJmYV9wcG9ydF9zbV9zdG9wcGVkKSwgQkZBX1BQT1JUX1NUX1NUT1BQRUR9LAorCXtCRkFfU00oYmZhX3Bwb3J0X3NtX2lvY2Rvd24pLCBCRkFfUFBPUlRfU1RfSU9DRE9XTn0sCisJe0JGQV9TTShiZmFfcHBvcnRfc21faW9jZmFpbCksIEJGQV9QUE9SVF9TVF9JT0NET1dOfSwKK307CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYWVuX3Bvc3Qoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBwb3J0LT5iZmEtPmxvZ207CisJd3duX3QgICAgICAgICAgIHB3d24gPSBwcG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgcHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJd3duMnN0cihwd3duX3B0ciwgcHd3bik7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PTkxJTkUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fT0ZGTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9PRkZMSU5FLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0VOQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9FTkFCTEUsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUE9SVF9BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9ESVNBQkxFLCBwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgcHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9QT1JUX0FFTl9RT1NfTkVHOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9QT1JUX1FPU19ORUcsIHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYmZhX2lvY19nZXRfYXR0cigmcHBvcnQtPmJmYS0+aW9jLCAmaW9jX2F0dHIpOworCWFlbl9kYXRhLnBvcnQuaW9jX3R5cGUgPSBpb2NfYXR0ci5pb2NfdHlwZTsKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJLyoqCisJCSAqIFN0YXJ0IGV2ZW50IGFmdGVyIElPQyBpcyBjb25maWd1cmVkIGFuZCBCRkEgaXMgc3RhcnRlZC4KKwkJICovCisJCWlmIChiZmFfcHBvcnRfc2VuZF9lbmFibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2VuYWJsaW5nX3F3YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBQb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGluIGVuYWJsZWQgc3RhdGUuIERvCisJCSAqIG5vdCBjaGFuZ2Ugc3RhdGUuIFBvcnQgZW5hYmxpbmcgaXMgZG9uZSB3aGVuIFNUQVJUIGV2ZW50IGlzCisJCSAqIHJlY2VpdmVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogSWYgYSBwb3J0IGlzIHBlcnNpc3RlbnRseSBjb25maWd1cmVkIHRvIGJlIGRpc2FibGVkLCB0aGUKKwkJICogZmlyc3QgZXZlbnQgd2lsbCBhIHBvcnQgZGlzYWJsZSByZXF1ZXN0LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9pb2Nkb3duKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQocHBvcnQtPmJmYSwgZXZlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcHBvcnQtPnJlcXFfd2FpdCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9zdG9wcGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9FTkFCTEU6CisJCS8qKgorCQkgKiBBbHJlYWR5IGVuYWJsZSBpcyBpbiBwcm9ncmVzcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJLyoqCisJCSAqIEp1c3Qgc2VuZCBkaXNhYmxlIHJlcXVlc3QgdG8gZmlybXdhcmUgd2hlbiByb29tIGJlY29tZXMKKwkJICogYXZhaWxhYmxlIGluIHJlcXVlc3QgcXVldWUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9MSU5LVVA6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCS8qKgorCQkgKiBQb3NzaWJsZSB0byBnZXQgbGluayBldmVudHMgd2hlbiBkb2luZyBiYWNrLXRvLWJhY2sKKwkJICogZW5hYmxlL2Rpc2FibGVzLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZW5hYmxpbmcoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fRldSU1A6CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisKKwkJYmZhX2Fzc2VydChwcG9ydC0+ZXZlbnRfY2Jmbik7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktVUCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua2Rvd24oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCQliZmFfcHBvcnRfdXBkYXRlX2xpbmtpbmZvKHBwb3J0KTsKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2xpbmt1cCk7CisJCWJmYV9hc3NlcnQocHBvcnQtPmV2ZW50X2NiZm4pOworCQliZmFfcGxvZ19zdHIocHBvcnQtPmJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsCisJCQkgICAgIEJGQV9QTF9FSURfUE9SVF9TVF9DSEFOR0UsIDAsICJQb3J0IExpbmt1cCIpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LVVApOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PTkxJTkUpOworCQkvKioKKwkJICogSWYgUW9TIGlzIGVuYWJsZWQgYW5kIGl0IGlzIG5vdCBvbmxpbmUsCisJCSAqIFNlbmQgYSBzZXBhcmF0ZSBldmVudC4KKwkJICovCisJCWlmICgocHBvcnQtPmNmZy5xb3NfZW5hYmxlZCkKKwkJICAgICYmIChiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKSAhPSBCRkFfUU9TX09OTElORSkpCisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9RT1NfTkVHKTsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZG93biBldmVudC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBlbmFibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fbGlua3VwKHN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQsIGVudW0gYmZhX3Bwb3J0X3NtX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocHBvcnQtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX1NNX0VOQUJMRToKKwkJLyoqCisJCSAqIEFscmVhZHkgZW5hYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRElTQUJMRToKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2Rpc2FibGUocHBvcnQpKQorCQkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpOworCisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRElTQUJMRSwgMCwgIlBvcnQgRGlzYWJsZSIpOworCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9saW5rZG93bik7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWJmYV9wcG9ydF9jYWxsYmFjayhwcG9ydCwgQkZBX1BQT1JUX0xJTktET1dOKTsKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfU1RfQ0hBTkdFLCAwLCAiUG9ydCBMaW5rZG93biIpOworCQlpZiAoQkZBX1BPUlRfSVNfRElTQUJMRUQocHBvcnQtPmJmYSkpIHsKKwkJCWJmYV9wcG9ydF9hZW5fcG9zdChwcG9ydCwgQkZBX1BPUlRfQUVOX09GRkxJTkUpOworCQl9IGVsc2UgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRElTQ09OTkVDVCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJmYV9wcG9ydF9yZXNldF9saW5raW5mbyhwcG9ydCk7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2lvY2Rvd24pOworCQliZmFfcHBvcnRfcmVzZXRfbGlua2luZm8ocHBvcnQpOworCQliZmFfcHBvcnRfY2FsbGJhY2socHBvcnQsIEJGQV9QUE9SVF9MSU5LRE9XTik7CisJCWlmIChCRkFfUE9SVF9JU19ESVNBQkxFRChwcG9ydC0+YmZhKSkgeworCQkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fT0ZGTElORSk7CisJCX0gZWxzZSB7CisJCQliZmFfcHBvcnRfYWVuX3Bvc3QocHBvcnQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZ19xd2FpdChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LAorCQkJICAgICBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZGlzYWJsaW5nKTsKKwkJYmZhX3Bwb3J0X3NlbmRfZGlzYWJsZShwcG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fU1RPUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX3N0b3BwZWQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZwcG9ydC0+cmVxcV93YWl0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBwb3J0LT5yZXFxX3dhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChwcG9ydC0+YmZhLCBldmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2Rpc2FibGluZyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShwcG9ydCwgYmZhX3Bwb3J0X3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBiZWluZyBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fTElOS1VQOgorCWNhc2UgQkZBX1BQT1JUX1NNX0xJTktET1dOOgorCQkvKioKKwkJICogUG9zc2libGUgdG8gZ2V0IGxpbmsgZXZlbnRzIHdoZW4gZG9pbmcgYmFjay10by1iYWNrCisJCSAqIGVuYWJsZS9kaXNhYmxlcy4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCS8qKgorCQkgKiBJZ25vcmUgc3RhcnQgZXZlbnQgZm9yIGEgcG9ydCB0aGF0IGlzIGRpc2FibGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9TVE9QOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fc3RvcHBlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQlpZiAoYmZhX3Bwb3J0X3NlbmRfZW5hYmxlKHBwb3J0KSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9lbmFibGluZ19xd2FpdCk7CisKKwkJYmZhX3Bsb2dfc3RyKHBwb3J0LT5iZmEtPnBsb2csIEJGQV9QTF9NSURfSEFMLAorCQkJICAgICBCRkFfUExfRUlEX1BPUlRfRU5BQkxFLCAwLCAiUG9ydCBFbmFibGUiKTsKKwkJYmZhX3Bwb3J0X2Flbl9wb3N0KHBwb3J0LCBCRkFfUE9SVF9BRU5fRU5BQkxFKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9TTV9ESVNBQkxFOgorCQkvKioKKwkJICogQWxyZWFkeSBkaXNhYmxlZC4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KHBwb3J0LT5iZmEsIGV2ZW50KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21fc3RvcHBlZChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIG90aGVyIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBlbmFibGVkLiBJT0MgaXMgZG93bi9mYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc21faW9jZG93bihzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0LCBlbnVtIGJmYV9wcG9ydF9zbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHBwb3J0LT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9QUE9SVF9TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9zZW5kX2VuYWJsZShwcG9ydCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21fZW5hYmxpbmdfcXdhaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qKgorCQkgKiBJZ25vcmUgYWxsIGV2ZW50cy4KKwkJICovCisJCTsKKwl9Cit9CisKKy8qKgorICogUG9ydCBpcyBkaXNhYmxlZC4gSU9DIGlzIGRvd24vZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3NtX2lvY2ZhaWwoc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgZW51bSBiZmFfcHBvcnRfc21fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwcG9ydC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUFBPUlRfU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUFBPUlRfU01fRU5BQkxFOgorCQliZmFfc21fc2V0X3N0YXRlKHBwb3J0LCBiZmFfcHBvcnRfc21faW9jZG93bik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoqCisJCSAqIElnbm9yZSBhbGwgZXZlbnRzLgorCQkgKi8KKwkJOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfZXZlbnQodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQlwcG9ydC0+ZXZlbnRfY2JmbihwcG9ydC0+ZXZlbnRfY2JhcmcsIHBwb3J0LT5oY2JfZXZlbnQpOworfQorCisjZGVmaW5lIFBQT1JUX1NUQVRTX0RNQV9TWiAoQkZBX1JPVU5EVVAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSwgXAorCQkJCQkJCUJGQV9DQUNIRUxJTkVfU1opKQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCSAgdTMyICpkbV9sZW4pCit7CisJKmRtX2xlbiArPSBQUE9SVF9TVEFUU19ETUFfU1o7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcXJlc3VtZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9QUE9SVF9TTV9RUkVTVU1FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9tZW1fY2xhaW0oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pCit7CisJdTggICAgICAgICpkbV9rdmE7CisJdTY0ICAgICAgICBkbV9wYTsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1lbWluZm8pOworCWRtX3BhID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbyk7CisKKwlwcG9ydC0+c3RhdHNfa3ZhID0gZG1fa3ZhOworCXBwb3J0LT5zdGF0c19wYSA9IGRtX3BhOworCXBwb3J0LT5zdGF0cyA9ICh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqKWRtX2t2YTsKKworCWRtX2t2YSArPSBQUE9SVF9TVEFUU19ETUFfU1o7CisJZG1fcGEgKz0gUFBPUlRfU1RBVFNfRE1BX1NaOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKK30KKworLyoqCisgKiBNZW1vcnkgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zICpwb3J0X2NmZyA9ICZwcG9ydC0+Y2ZnOworCisJYmZhX29zX21lbXNldChwcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfcykpOworCXBwb3J0LT5iZmEgPSBiZmE7CisKKwliZmFfcHBvcnRfbWVtX2NsYWltKHBwb3J0LCBtZW1pbmZvKTsKKworCWJmYV9zbV9zZXRfc3RhdGUocHBvcnQsIGJmYV9wcG9ydF9zbV91bmluaXQpOworCisJLyoqCisJICogaW5pdGlhbGl6ZSBhbmQgc2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbgorCSAqLworCXBvcnRfY2ZnLT50b3BvbG9neSA9IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlA7CisJcG9ydF9jZmctPnNwZWVkID0gQkZBX1BQT1JUX1NQRUVEX0FVVE87CisJcG9ydF9jZmctPnRydW5rZWQgPSBCRkFfRkFMU0U7CisJcG9ydF9jZmctPm1heGZyc2l6ZSA9IDA7CisKKwlwb3J0X2NmZy0+dHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKKworCWJmYV9yZXFxX3dpbml0KCZwcG9ydC0+cmVxcV93YWl0LCBiZmFfcHBvcnRfcXJlc3VtZSwgcHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCS8qKgorCSAqIEluaXRpYWxpemUgcG9ydCBhdHRyaWJ1dGVzIGZyb20gSU9DIGhhcmR3YXJlIGRhdGEuCisJICovCisJYmZhX3Bwb3J0X3NldF93d25zKHBwb3J0KTsKKwlpZiAocHBvcnQtPmNmZy5tYXhmcnNpemUgPT0gMCkKKwkJcHBvcnQtPmNmZy5tYXhmcnNpemUgPSBiZmFfaW9jX21heGZyc2l6ZSgmYmZhLT5pb2MpOworCXBwb3J0LT5jZmcucnhfYmJjcmVkaXQgPSBiZmFfaW9jX3J4X2JiY3JlZGl0KCZiZmEtPmlvYyk7CisJcHBvcnQtPnNwZWVkX3N1cCA9IGJmYV9pb2Nfc3BlZWRfc3VwKCZiZmEtPmlvYyk7CisKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfYXNzZXJ0KHBwb3J0LT5jZmcucnhfYmJjcmVkaXQpOworCWJmYV9hc3NlcnQocHBvcnQtPnNwZWVkX3N1cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIENhbGxlZCB3aGVuIElPQyBpcyByZWFkeS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBDYWxsZWQgYmVmb3JlIElPQyBpcyBzdG9wcGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Bwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9TVE9QKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBJT0MgZmFpbHVyZSBpcyBkZXRlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KEJGQV9QT1JUX01PRChiZmEpLCBCRkFfUFBPUlRfU01fSFdGQUlMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF91cGRhdGVfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2V2ZW50X3MgKnBldmVudCA9IHBwb3J0LT5ldmVudF9hcmcuaTJobXNnLmV2ZW50OworCisJcHBvcnQtPnNwZWVkID0gcGV2ZW50LT5saW5rX3N0YXRlLnNwZWVkOworCXBwb3J0LT50b3BvbG9neSA9IHBldmVudC0+bGlua19zdGF0ZS50b3BvbG9neTsKKworCWlmIChwcG9ydC0+dG9wb2xvZ3kgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCXBwb3J0LT5teWFscGEgPSBwZXZlbnQtPmxpbmtfc3RhdGUudGwubG9vcF9pbmZvLm15YWxwYTsKKworCS8qCisJICogUW9TIERldGFpbHMKKwkgKi8KKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc19hdHRyKTsKKwliZmFfb3NfYXNzaWduKHBwb3J0LT5xb3NfdmNfYXR0ciwgcGV2ZW50LT5saW5rX3N0YXRlLnFvc192Y19hdHRyKTsKKworCWJmYV90cmMocHBvcnQtPmJmYSwgcHBvcnQtPnNwZWVkKTsKKwliZmFfdHJjKHBwb3J0LT5iZmEsIHBwb3J0LT50b3BvbG9neSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfcmVzZXRfbGlua2luZm8oc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCkKK3sKKwlwcG9ydC0+c3BlZWQgPSBCRkFfUFBPUlRfU1BFRURfVU5LTk9XTjsKKwlwcG9ydC0+dG9wb2xvZ3kgPSBCRkFfUFBPUlRfVE9QT0xPR1lfTk9ORTsKK30KKworLyoqCisgKiBTZW5kIHBvcnQgZW5hYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zICptOworCisJLyoqCisJICogSW5jcmVtZW50IG1lc3NhZ2UgdGFnIGJlZm9yZSBxdWV1ZSBjaGVjaywgc28gdGhhdCByZXNwb25zZXMgdG8gb2xkCisJICogcmVxdWVzdHMgYXJlIGRpc2NhcmRlZC4KKwkgKi8KKwlwb3J0LT5tc2d0YWcrKzsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19GQ19QT1JULCBCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+bnd3biA9IHBvcnQtPm53d247CisJbS0+cHd3biA9IHBvcnQtPnB3d247CisJbS0+cG9ydF9jZmcgPSBwb3J0LT5jZmc7CisJbS0+bXNndGFnID0gcG9ydC0+bXNndGFnOworCW0tPnBvcnRfY2ZnLm1heGZyc2l6ZSA9IGJmYV9vc19odG9ucyhwb3J0LT5jZmcubWF4ZnJzaXplKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KG0tPnN0YXRzX2RtYV9hZGRyLCBwb3J0LT5zdGF0c19wYSk7CisJYmZhX3RyYyhwb3J0LT5iZmEsIG0tPnN0YXRzX2RtYV9hZGRyLmEzMi5hZGRyX2xvKTsKKwliZmFfdHJjKHBvcnQtPmJmYSwgbS0+c3RhdHNfZG1hX2FkZHIuYTMyLmFkZHJfaGkpOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNlbmQgcG9ydCBkaXNhYmxlIG1lc3NhZ2UgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCkKK3sKKwliZmlfcHBvcnRfZGlzYWJsZV9yZXFfdCAqbTsKKworCS8qKgorCSAqIEluY3JlbWVudCBtZXNzYWdlIHRhZyBiZWZvcmUgcXVldWUgY2hlY2ssIHNvIHRoYXQgcmVzcG9uc2VzIHRvIG9sZAorCSAqIHJlcXVlc3RzIGFyZSBkaXNjYXJkZWQuCisJICovCisJcG9ydC0+bXNndGFnKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwltLT5tc2d0YWcgPSBwb3J0LT5tc2d0YWc7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wcG9ydF9zZXRfd3ducyhzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQpCit7CisJcG9ydC0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJnBvcnQtPmJmYS0+aW9jKTsKKwlwb3J0LT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmcG9ydC0+YmZhLT5pb2MpOworCisJYmZhX3RyYyhwb3J0LT5iZmEsIHBvcnQtPnB3d24pOworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5ud3duKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3NlbmRfdHhjcmVkaXQodm9pZCAqcG9ydF9jYmFyZykKK3sKKworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IHBvcnRfY2Jhcmc7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCWlmICghbSkgeworCQliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKwkJcmV0dXJuOworCX0KKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJbS0+dHhfYmJjcmVkaXQgPSBiZmFfb3NfaHRvbnMoKHUxNikgcG9ydC0+Y2ZnLnR4X2JiY3JlZGl0KTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworfQorCisKKworLyoqCisgKiAgYmZhX3Bwb3J0X3B1YmxpYworICovCisKKy8qKgorICogRmlybXdhcmUgbWVzc2FnZSBoYW5kbGVyLgorICovCit2b2lkCitiZmFfcHBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCXVuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgaTJobXNnOworCisJaTJobXNnLm1zZyA9IG1zZzsKKwlwcG9ydC0+ZXZlbnRfYXJnLmkyaG1zZyA9IGkyaG1zZzsKKworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocHBvcnQtPm1zZ3RhZyA9PSBpMmhtc2cuZW5hYmxlX3JzcC0+bXNndGFnKQorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUFBPUlRfSTJIX0VWRU5UOgorCQlzd2l0Y2ggKGkyaG1zZy5ldmVudC0+bGlua19zdGF0ZS5saW5rc3RhdGUpIHsKKwkJY2FzZSBCRkFfUFBPUlRfTElOS1VQOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LVVApOworCQkJYnJlYWs7CisJCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQkJYmZhX3NtX3NlbmRfZXZlbnQocHBvcnQsIEJGQV9QUE9SVF9TTV9MSU5LRE9XTik7CisJCQlicmVhazsKKwkJY2FzZSBCRkFfUFBPUlRfVFJVTktfTElOS0RPV046CisJCQkvKiogdG9kbzogZXZlbnQgbm90aWZpY2F0aW9uICovCisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9HRVRfUU9TX1NUQVRTX1JTUDoKKwkJLyoKKwkJICogY2hlY2sgZm9yIHRpbWVyIHBvcCBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgcnNwCisJCSAqLworCQlpZiAocHBvcnQtPnN0YXRzX2J1c3kgPT0gQkZBX0ZBTFNFCisJCSAgICB8fCBwcG9ydC0+c3RhdHNfc3RhdHVzID09IEJGQV9TVEFUVVNfRVRJTUVSKQorCQkJYnJlYWs7CisKKwkJYmZhX3RpbWVyX3N0b3AoJnBwb3J0LT50aW1lcik7CisJCXBwb3J0LT5zdGF0c19zdGF0dXMgPSBpMmhtc2cuZ2V0c3RhdHNfcnNwLT5zdGF0dXM7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywKKwkJCSAgICAgcHBvcnQpOworCQlicmVhazsKKwljYXNlIEJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCWNhc2UgQkZJX1BQT1JUX0kySF9DTEVBUl9RT1NfU1RBVFNfUlNQOgorCQkvKgorCQkgKiBjaGVjayBmb3IgdGltZXIgcG9wIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSByc3AKKwkJICovCisJCWlmIChwcG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UKKwkJICAgIHx8IHBwb3J0LT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlicmVhazsKKworCQliZmFfdGltZXJfc3RvcCgmcHBvcnQtPnRpbWVyKTsKKwkJcHBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJCWJmYV9jYl9xdWV1ZShwcG9ydC0+YmZhLCAmcHBvcnQtPmhjYl9xZSwKKwkJCSAgICAgX19iZmFfY2JfcG9ydF9zdGF0c19jbHIsIHBwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9wcG9ydF9hcGkKKyAqLworCisvKioKKyAqIFJlZ2lzdGVyZWQgY2FsbGJhY2sgZm9yIHBvcnQgZXZlbnRzLgorICovCit2b2lkCitiZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoc3RydWN0IGJmYV9zICpiZmEsCisJCQkgdm9pZCAoKmNiZm4pICh2b2lkICpjYmFyZywgYmZhX3Bwb3J0X2V2ZW50X3QgZXZlbnQpLAorCQkJIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBwb3J0LT5ldmVudF9jYmZuID0gY2JmbjsKKwlwcG9ydC0+ZXZlbnRfY2JhcmcgPSBjYmFyZzsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWlmIChwcG9ydC0+ZGlhZ19idXN5KQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfRElBR19CVVNZKTsKKwllbHNlIGlmIChiZmFfc21fY21wX3N0YXRlCisJCSAoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9kaXNhYmxpbmdfcXdhaXQpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfREVWQlVTWSk7CisKKwliZmFfc21fc2VuZF9ldmVudChCRkFfUE9SVF9NT0QoYmZhKSwgQkZBX1BQT1JUX1NNX0VOQUJMRSk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQoQkZBX1BPUlRfTU9EKGJmYSksIEJGQV9QUE9SVF9TTV9ESVNBQkxFKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBDb25maWd1cmUgcG9ydCBzcGVlZC4KKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3BlZWQpOworCisJaWYgKChzcGVlZCAhPSBCRkFfUFBPUlRfU1BFRURfQVVUTykgJiYgKHNwZWVkID4gcHBvcnQtPnNwZWVkX3N1cCkpIHsKKwkJYmZhX3RyYyhiZmEsIHBwb3J0LT5zcGVlZF9zdXApOworCQlyZXR1cm4gQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQ7CisJfQorCisJcHBvcnQtPmNmZy5zcGVlZCA9IHNwZWVkOworCisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworLyoqCisgKiBHZXQgY3VycmVudCBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9wcG9ydF9nZXRfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlyZXR1cm4gcG9ydC0+c3BlZWQ7Cit9CisKKy8qKgorICogQ29uZmlndXJlIHBvcnQgdG9wb2xvZ3kuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ190b3BvbG9neShzdHJ1Y3QgYmZhX3MgKmJmYSwgZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wb2xvZ3kpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHRvcG9sb2d5KTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy50b3BvbG9neSk7CisKKwlzd2l0Y2ggKHRvcG9sb2d5KSB7CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfUDJQOgorCWNhc2UgQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1A6CisJY2FzZSBCRkFfUFBPUlRfVE9QT0xPR1lfQVVUTzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisJfQorCisJcHBvcnQtPmNmZy50b3BvbG9neSA9IHRvcG9sb2d5OworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGN1cnJlbnQgdG9wb2xvZ3kuCisgKi8KK2VudW0gYmZhX3Bwb3J0X3RvcG9sb2d5CitiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPnRvcG9sb2d5OworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jZmdfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4IGFscGEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmNmZ19oYXJkYWxwYSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcuaGFyZGFscGEpOworCisJcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEgPSBCRkFfVFJVRTsKKwlwcG9ydC0+Y2ZnLmhhcmRhbHBhID0gYWxwYTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2Nscl9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmNmZy5jZmdfaGFyZGFscGEpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLmhhcmRhbHBhKTsKKworCXBwb3J0LT5jZmcuY2ZnX2hhcmRhbHBhID0gQkZBX0ZBTFNFOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9nZXRfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEsIHU4ICphbHBhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJKmFscGEgPSBwb3J0LT5jZmcuaGFyZGFscGE7CisJcmV0dXJuIHBvcnQtPmNmZy5jZmdfaGFyZGFscGE7Cit9CisKK3U4CitiZmFfcHBvcnRfZ2V0X215YWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5teWFscGE7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NmZ19tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBtYXhmcnNpemUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG1heGZyc2l6ZSk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcubWF4ZnJzaXplKTsKKworCS8qCisJICogd2l0aCBpbiByYW5nZQorCSAqLworCWlmICgobWF4ZnJzaXplID4gRkNfTUFYX1BEVVNaKSB8fCAobWF4ZnJzaXplIDwgRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChCRkFfU1RBVFVTX0lOVkxEX0RGU1opOworCisJLyoKKwkgKiBwb3dlciBvZiAyLCBpZiBub3QgdGhlIG1heCBmcmFtZSBzaXplIG9mIDIxMTIKKwkgKi8KKwlpZiAoKG1heGZyc2l6ZSAhPSBGQ19NQVhfUERVU1opICYmIChtYXhmcnNpemUgJiAobWF4ZnJzaXplIC0gMSkpKQorCQlyZXR1cm4gKEJGQV9TVEFUVVNfSU5WTERfREZTWik7CisKKwlwcG9ydC0+Y2ZnLm1heGZyc2l6ZSA9IG1heGZyc2l6ZTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCit1MTYKK2JmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPmNmZy5tYXhmcnNpemU7Cit9CisKK3UzMgorYmZhX3Bwb3J0X215cGlkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIHBvcnQtPm15cGlkOworfQorCit1OAorYmZhX3Bwb3J0X2dldF9yeF9iYmNyZWRpdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXJldHVybiBwb3J0LT5jZmcucnhfYmJjcmVkaXQ7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9zZXRfdHhfYmJjcmVkaXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiB0eF9iYmNyZWRpdCkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCXBvcnQtPmNmZy50eF9iYmNyZWRpdCA9ICh1OCkgdHhfYmJjcmVkaXQ7CisJYmZhX3BvcnRfc2VuZF90eGNyZWRpdChwb3J0KTsKK30KKworLyoqCisgKiBHZXQgcG9ydCBhdHRyaWJ1dGVzLgorICovCisKK3d3bl90CitiZmFfcHBvcnRfZ2V0X3d3bihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBub2RlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKwlpZiAobm9kZSkKKwkJcmV0dXJuIHBwb3J0LT5ud3duOworCWVsc2UKKwkJcmV0dXJuIHBwb3J0LT5wd3duOworfQorCit2b2lkCitiZmFfcHBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zICphdHRyKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zKSk7CisKKwlhdHRyLT5ud3duID0gcHBvcnQtPm53d247CisJYXR0ci0+cHd3biA9IHBwb3J0LT5wd3duOworCisJYmZhX29zX21lbWNweSgmYXR0ci0+cHBvcnRfY2ZnLCAmcHBvcnQtPmNmZywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MpKTsKKwkvKgorCSAqIHNwZWVkIGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcuc3BlZWQgPSBwcG9ydC0+Y2ZnLnNwZWVkOworCWF0dHItPnNwZWVkX3N1cHBvcnRlZCA9IHBwb3J0LT5zcGVlZF9zdXA7CisJYXR0ci0+c3BlZWQgPSBwcG9ydC0+c3BlZWQ7CisJYXR0ci0+Y29zX3N1cHBvcnRlZCA9IEZDX0NMQVNTXzM7CisKKwkvKgorCSAqIHRvcG9sb2d5IGF0dHJpYnV0ZXMKKwkgKi8KKwlhdHRyLT5wcG9ydF9jZmcudG9wb2xvZ3kgPSBwcG9ydC0+Y2ZnLnRvcG9sb2d5OworCWF0dHItPnRvcG9sb2d5ID0gcHBvcnQtPnRvcG9sb2d5OworCisJLyoKKwkgKiBiZWFjb24gYXR0cmlidXRlcworCSAqLworCWF0dHItPmJlYWNvbiA9IHBwb3J0LT5iZWFjb247CisJYXR0ci0+bGlua19lMmVfYmVhY29uID0gcHBvcnQtPmxpbmtfZTJlX2JlYWNvbjsKKwlhdHRyLT5wbG9nX2VuYWJsZWQgPSBiZmFfcGxvZ19nZXRfc2V0dGluZyhwcG9ydC0+YmZhLT5wbG9nKTsKKworCWF0dHItPnBwb3J0X2NmZy5wYXRoX3RvdiA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoYmZhKTsKKwlhdHRyLT5wcG9ydF9jZmcucV9kZXB0aCA9IGJmYV9mY3BpbV9xZGVwdGhfZ2V0KGJmYSk7CisJYXR0ci0+cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZShoYWxfcHBvcnRfc21fdGFibGUsIHBwb3J0LT5zbSk7CisJaWYgKGJmYV9pb2NfaXNfZGlzYWJsZWQoJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfSU9DRElTOworCWVsc2UgaWYgKGJmYV9pb2NfZndfbWlzbWF0Y2goJnBwb3J0LT5iZmEtPmlvYykpCisJCWF0dHItPnBvcnRfc3RhdGUgPSBCRkFfUFBPUlRfU1RfRldNSVNNQVRDSDsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3F1ZXJ5KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKwliZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19xdWVyeSwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90KSk7CisJYmZpX2gyaV9zZXQobXNnLT5taCwgQkZJX01DX0ZDX1BPUlQsIEJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUSwKKwkJICAgIGJmYV9scHVpZChwb3J0LT5iZmEpKTsKKwliZmFfcmVxcV9wcm9kdWNlKHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3N0YXRzX3JlcV90ICptc2c7CisKKwltc2cgPSBiZmFfcmVxcV9uZXh0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCk7CisKKwlpZiAoIW1zZykgeworCQlwb3J0LT5zdGF0c19xZnVsbCA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93aW5pdCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0LCBiZmFfcG9ydF9zdGF0c19jbGVhciwKKwkJCSAgICAgICBwb3J0KTsKKwkJYmZhX3JlcXFfd2FpdChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQsICZwb3J0LT5zdGF0c19yZXFxX3dhaXQpOworCQlyZXR1cm47CisJfQorCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCisJYmZhX29zX21lbXNldChtc2csIDAsIHNpemVvZihiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfbHB1aWQocG9ydC0+YmZhKSk7CisJYmZhX3JlcXFfcHJvZHVjZShwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3Fvc19zdGF0c19jbGVhcih2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisJYmZpX3Bwb3J0X2NsZWFyX3Fvc19zdGF0c19yZXFfdCAqbXNnOworCisJbXNnID0gYmZhX3JlcXFfbmV4dChwb3J0LT5iZmEsIEJGQV9SRVFRX1BPUlQpOworCisJaWYgKCFtc2cpIHsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfVFJVRTsKKwkJYmZhX3JlcXFfd2luaXQoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCwgYmZhX3BvcnRfcW9zX3N0YXRzX2NsZWFyLAorCQkJICAgICAgIHBvcnQpOworCQliZmFfcmVxcV93YWl0KHBvcnQtPmJmYSwgQkZBX1JFUVFfUE9SVCwgJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXJldHVybjsKKwl9CisJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisKKwliZmFfb3NfbWVtc2V0KG1zZywgMCwgc2l6ZW9mKGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcmVxX3QpKTsKKwliZmlfaDJpX3NldChtc2ctPm1oLCBCRklfTUNfRkNfUE9SVCwgQkZJX1BQT1JUX0gySV9DTEVBUl9RT1NfU1RBVFNfUkVRLAorCQkgICAgYmZhX2xwdWlkKHBvcnQtPmJmYSkpOworCWJmYV9yZXFxX3Byb2R1Y2UocG9ydC0+YmZhLCBCRkFfUkVRUV9QT1JUKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcHBvcnRfc3RhdHNfc3dhcCh1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqZCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnMpCit7CisJdTMyICAgICAgICpkaXAgPSAodTMyICopIGQ7CisJdTMyICAgICAgICpzaXAgPSAodTMyICopIHM7CisJaW50ICAgICAgICAgICAgIGk7CisKKwkvKgorCSAqIERvIDY0IGJpdCBmaWVsZHMgc3dhcCBmaXJzdAorCSAqLworCWZvciAoaSA9IDA7CisJICAgICBpIDwKKwkgICAgICgoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAtCisJICAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX3Fvc19zdGF0c19zKSkgLyBzaXplb2YodTMyKSk7IGkgPSBpICsgMikgeworI2lmZGVmIF9fQklHRU5ESUFOCisJCWRpcFtpXSA9IGJmYV9vc19udG9obChzaXBbaV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworI2Vsc2UKKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHNpcFtpICsgMV0pOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHNpcFtpXSk7CisjZW5kaWYKKwl9CisKKwkvKgorCSAqIE5vdyBzd2FwIHRoZSAzMiBiaXQgZmllbGRzCisJICovCisJZm9yICg7IGkgPCAoc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpKTsgKytpKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHNfY2xyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKSB7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBvcnQgPSAoc3RydWN0IGJmYV9wcG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmJmYSwgcG9ydC0+c3RhdHNfcWZ1bGwpOworCisJaWYgKHBvcnQtPnN0YXRzX3FmdWxsKSB7CisJCWJmYV9yZXFxX3djYW5jZWwoJnBvcnQtPnN0YXRzX3JlcXFfd2FpdCk7CisJCXBvcnQtPnN0YXRzX3FmdWxsID0gQkZBX0ZBTFNFOworCX0KKworCXBvcnQtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShwb3J0LT5iZmEsICZwb3J0LT5oY2JfcWUsIF9fYmZhX2NiX3BvcnRfc3RhdHNfY2xyLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3BvcnRfc3RhdHModm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKHBvcnQtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3Bwb3J0X3N0YXRzX3N3YXAocG9ydC0+c3RhdHNfcmV0LCBwb3J0LT5zdGF0cyk7CisJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+c3RhdHNfY2JhcmcsIHBvcnQtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9zdGF0c190aW1lb3V0KHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3Bwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocG9ydC0+YmZhLCBwb3J0LT5zdGF0c19xZnVsbCk7CisKKwlpZiAocG9ydC0+c3RhdHNfcWZ1bGwpIHsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcG9ydC0+c3RhdHNfcmVxcV93YWl0KTsKKwkJcG9ydC0+c3RhdHNfcWZ1bGwgPSBCRkFfRkFMU0U7CisJfQorCisJcG9ydC0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19FVElNRVI7CisJYmZhX2NiX3F1ZXVlKHBvcnQtPmJmYSwgJnBvcnQtPmhjYl9xZSwgX19iZmFfY2JfcG9ydF9zdGF0cywgcG9ydCk7Cit9CisKKyNkZWZpbmUgQkZBX1BPUlRfU1RBVFNfVE9WCTEwMDAKKworLyoqCisgKiBGZXRjaCBwb3J0IGF0dHJpYnV0ZXMuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICAgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfcmV0ID0gc3RhdHM7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX3F1ZXJ5KHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c190aW1lb3V0LCBwb3J0LAorCQkJQkZBX1BPUlRfU1RBVFNfVE9WKTsKKwlyZXR1cm4gKEJGQV9TVEFUVVNfT0spOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3N0YXRzX2NsZWFyKHBvcnQpOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJnBvcnQtPnRpbWVyLCBiZmFfcG9ydF9zdGF0c19jbHJfdGltZW91dCwgcG9ydCwKKwkJCUJGQV9QT1JUX1NUQVRTX1RPVik7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfdHJ1bmtfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIGJpdG1hcCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtlZCk7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJ1bmtfcG9ydHMpOworCisJaWYgKCFiaXRtYXAgfHwgKGJpdG1hcCAmIChiaXRtYXAgLSAxKSkpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCXBwb3J0LT5jZmcudHJ1bmtlZCA9IEJGQV9UUlVFOworCXBwb3J0LT5jZmcudHJ1bmtfcG9ydHMgPSBiaXRtYXA7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9xb3NfYXR0cl9zICpxb3NfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlxb3NfYXR0ci0+c3RhdGUgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnN0YXRlKTsKKwlxb3NfYXR0ci0+dG90YWxfYmJfY3IgPSBiZmFfb3NfbnRvaGwocHBvcnQtPnFvc19hdHRyLnRvdGFsX2JiX2NyKTsKK30KKwordm9pZAorYmZhX3Bwb3J0X3Fvc19nZXRfdmNfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpxb3NfdmNfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpiZmFfdmNfYXR0ciA9ICZwcG9ydC0+cW9zX3ZjX2F0dHI7CisJdTMyICAgICAgICBpID0gMDsKKworCXFvc192Y19hdHRyLT50b3RhbF92Y19jb3VudCA9IGJmYV9vc19udG9ocyhiZmFfdmNfYXR0ci0+dG90YWxfdmNfY291bnQpOworCXFvc192Y19hdHRyLT5zaGFyZWRfY3JlZGl0ID0gYmZhX29zX250b2hzKGJmYV92Y19hdHRyLT5zaGFyZWRfY3JlZGl0KTsKKwlxb3NfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyA9CisJCWJmYV9vc19udG9obChiZmFfdmNfYXR0ci0+ZWxwX29wbW9kZV9mbGFncyk7CisKKwkvKgorCSAqIEluZGl2aWR1YWwgVkMgaW5mbworCSAqLworCXdoaWxlIChpIDwgcW9zX3ZjX2F0dHItPnRvdGFsX3ZjX2NvdW50KSB7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLnZjX2NyZWRpdCA9CisJCQliZmFfdmNfYXR0ci0+dmNfaW5mb1tpXS52Y19jcmVkaXQ7CisJCXFvc192Y19hdHRyLT52Y19pbmZvW2ldLmJvcnJvd19jcmVkaXQgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0uYm9ycm93X2NyZWRpdDsKKwkJcW9zX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHkgPQorCQkJYmZhX3ZjX2F0dHItPnZjX2luZm9baV0ucHJpb3JpdHk7CisJCSsraTsKKwl9Cit9CisKKy8qKgorICogRmV0Y2ggUW9TIFN0YXRzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF9nZXRfcW9zX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCB1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZykKK3sKKwkvKgorCSAqIFFvUyBzdGF0cyBpcyBlbWJlZGRlZCBpbiBwb3J0IHN0YXRzCisJICovCisJcmV0dXJuIChiZmFfcHBvcnRfZ2V0X3N0YXRzKGJmYSwgc3RhdHMsIGNiZm4sIGNiYXJnKSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX3Bwb3J0X2NsZWFyX3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQliZmFfdHJjKGJmYSwgcG9ydC0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9wb3J0X3Fvc19zdGF0c19jbGVhcihwb3J0KTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZwb3J0LT50aW1lciwgYmZhX3BvcnRfc3RhdHNfY2xyX3RpbWVvdXQsIHBvcnQsCisJCQlCRkFfUE9SVF9TVEFUU19UT1YpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRmV0Y2ggcG9ydCBhdHRyaWJ1dGVzLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9wcG9ydF90cnVua19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF90cnVua19xdWVyeShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICpiaXRtYXApCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwkqYml0bWFwID0gcG9ydC0+Y2ZnLnRydW5rX3BvcnRzOworCXJldHVybiBwb3J0LT5jZmcudHJ1bmtlZDsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJcmV0dXJuIChiZmFfc21fdG9fc3RhdGUoaGFsX3Bwb3J0X3NtX3RhYmxlLCBwb3J0LT5zbSkgPT0KKwkJQkZBX1BQT1JUX1NUX0RJU0FCTEVEKTsKKworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcHBvcnRfaXNfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKK3JldHVybiAocHBvcnQtPmNmZy5yYXRlbGltaXQgPyBCRkFfVFJVRSA6IEJGQV9GQUxTRSk7CisKK30KKwordm9pZAorYmZhX3Bwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBvbl9vZmYpOworCWJmYV90cmMoYmZhLCBwcG9ydC0+Y2ZnLnFvc19lbmFibGVkKTsKKworCXBwb3J0LT5jZmcucW9zX2VuYWJsZWQgPSBvbl9vZmY7Cit9CisKK3ZvaWQKK2JmYV9wcG9ydF9jZmdfcmF0ZWxpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBvbl9vZmYpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIG9uX29mZik7CisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcucmF0ZWxpbWl0KTsKKworCXBwb3J0LT5jZmcucmF0ZWxpbWl0ID0gb25fb2ZmOworCWlmIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pCisJCXBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCA9IEJGQV9QUE9SVF9TUEVFRF8xR0JQUzsKK30KKworLyoqCisgKiBDb25maWd1cmUgZGVmYXVsdCBtaW5pbXVtIHJhdGVsaW0gc3BlZWQKKyAqLworYmZhX3N0YXR1c190CitiZmFfcHBvcnRfY2ZnX3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsIGVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBzcGVlZCk7CisKKwkvKgorCSAqIEF1dG8gYW5kIHNwZWVkcyBncmVhdGVyIHRoYW4gdGhlIHN1cHBvcnRlZCBzcGVlZCwgYXJlIGludmFsaWQKKwkgKi8KKwlpZiAoKHNwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9BVVRPKSB8fCAoc3BlZWQgPiBwcG9ydC0+c3BlZWRfc3VwKSkgeworCQliZmFfdHJjKGJmYSwgcHBvcnQtPnNwZWVkX3N1cCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOU1VQUF9TUEVFRDsKKwl9CisKKwlwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQgPSBzcGVlZDsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogR2V0IGRlZmF1bHQgbWluaW11bSByYXRlbGltIHNwZWVkCisgKi8KK2VudW0gYmZhX3Bwb3J0X3NwZWVkCitiZmFfcHBvcnRfZ2V0X3JhdGVsaW1fc3BlZWQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9wcG9ydF9zICpwcG9ydCA9IEJGQV9QT1JUX01PRChiZmEpOworCisJYmZhX3RyYyhiZmEsIHBwb3J0LT5jZmcudHJsX2RlZl9zcGVlZCk7CisJcmV0dXJuIChwcG9ydC0+Y2ZnLnRybF9kZWZfc3BlZWQpOworCit9CisKK3ZvaWQKK2JmYV9wcG9ydF9idXN5KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3Bwb3J0X3MgKnBwb3J0ID0gQkZBX1BPUlRfTU9EKGJmYSk7CisKKwliZmFfdHJjKGJmYSwgc3RhdHVzKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmRpYWdfYnVzeSk7CisKKwlwcG9ydC0+ZGlhZ19idXN5ID0gc3RhdHVzOworfQorCit2b2lkCitiZmFfcHBvcnRfYmVhY29uKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IGJlYWNvbiwKKwkJIGJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKQoreworCXN0cnVjdCBiZmFfcHBvcnRfcyAqcHBvcnQgPSBCRkFfUE9SVF9NT0QoYmZhKTsKKworCWJmYV90cmMoYmZhLCBiZWFjb24pOworCWJmYV90cmMoYmZhLCBsaW5rX2UyZV9iZWFjb24pOworCWJmYV90cmMoYmZhLCBwcG9ydC0+YmVhY29uKTsKKwliZmFfdHJjKGJmYSwgcHBvcnQtPmxpbmtfZTJlX2JlYWNvbik7CisKKwlwcG9ydC0+YmVhY29uID0gYmVhY29uOworCXBwb3J0LT5saW5rX2UyZV9iZWFjb24gPSBsaW5rX2UyZV9iZWFjb247Cit9CisKK2JmYV9ib29sZWFuX3QKK2JmYV9wcG9ydF9pc19saW5rdXAoc3RydWN0IGJmYV9zICpiZmEpCit7CisJcmV0dXJuIGJmYV9zbV9jbXBfc3RhdGUoQkZBX1BPUlRfTU9EKGJmYSksIGJmYV9wcG9ydF9zbV9saW5rdXApOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiMzlhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjcy5jCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3MuYyBCRkEgRkNTIG1haW4KKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfZmNwaW0uaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY2J1aWxkLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYi5oPgorCisvKioKKyAqIEZDUyBzdWItbW9kdWxlcworICovCitzdHJ1Y3QgYmZhX2Zjc19tb2RfcyB7CisJdm9pZCAgICAgICAgICAgICgqbW9kaW5pdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisJdm9pZCAgICAgICAgICAgICgqbW9kZXhpdCkgKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit9OworCisjZGVmaW5lIEJGQV9GQ1NfTU9EVUxFKF9tb2QpIHsgX21vZCAjIyBfbW9kaW5pdCwgX21vZCAjIyBfbW9kZXhpdCB9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19tb2RfcyBmY3NfbW9kdWxlc1tdID0geworCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfcHBvcnQpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfdWYpLAorCUJGQV9GQ1NfTU9EVUxFKGJmYV9mY3NfZmFicmljKSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Zwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX3Jwb3J0KSwKKwlCRkFfRkNTX01PRFVMRShiZmFfZmNzX2ZjcGltKSwKK307CisKKy8qKgorICogIGZjc19hcGkgQkZBIEZDUyBBUEkKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19leGl0X2NvbXAodm9pZCAqZmNzX2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3MgKmZjcyA9IGZjc19jYmFyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gZmNzLT5iZmFkOworCisJY29tcGxldGUoJmJmYWQtPmNvbXApOworfQorCisKKworLyoqCisgKiAgZmNzX2FwaSBCRkEgRkNTIEFQSQorICovCisKKy8qKgorICogCQlGQ1MgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24uCisgKgorICogCXBhcmFtW2luXQkJZmNzCQlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0JCWJmYQkJQkZBIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQliZmFkCQlCRkEgZHJpdmVyIGluc3RhbmNlCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKQoreworCWludCAgICAgICAgICAgICBpOworCXN0cnVjdCBiZmFfZmNzX21vZF9zICAqbW9kOworCisJZmNzLT5iZmEgPSBiZmE7CisJZmNzLT5iZmFkID0gYmZhZDsKKwlmY3MtPm1pbl9jZmcgPSBtaW5fY2ZnOworCisJYmZhX2F0dGFjaF9mY3MoYmZhKTsKKwlmY2J1aWxkX2luaXQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmNzX21vZHVsZXMpIC8gc2l6ZW9mKGZjc19tb2R1bGVzWzBdKTsgaSsrKSB7CisJCW1vZCA9ICZmY3NfbW9kdWxlc1tpXTsKKwkJbW9kLT5tb2Rpbml0KGZjcyk7CisJfQorfQorCisvKioKKyAqIFN0YXJ0IEZDUyBvcGVyYXRpb25zLgorICovCit2b2lkCitiZmFfZmNzX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX2ZhYnJpY19tb2RzdGFydChmY3MpOworfQorCisvKioKKyAqIAkJRkNTIGRyaXZlciBkZXRhaWxzIGluaXRpYWxpemF0aW9uLgorICoKKyAqIAlwYXJhbVtpbl0JCWZjcwkJRkNTIGluc3RhbmNlCisgKiAJcGFyYW1baW5dCQlkcml2ZXJfaW5mbwlEcml2ZXIgRGV0YWlscworICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX2RyaXZlcl9pbmZvX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8pCit7CisKKwlmY3MtPmRyaXZlcl9pbmZvID0gKmRyaXZlcl9pbmZvOworCisJYmZhX2Zjc19mYWJyaWNfcHN5bWJfaW5pdCgmZmNzLT5mYWJyaWMpOworfQorCisvKioKKyAqIAkJRkNTIGluc3RhbmNlIGNsZWFudXAgYW5kIGV4aXQuCisgKgorICogCXBhcmFtW2luXQkJZmNzCQkJRkNTIGluc3RhbmNlCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19tb2RfcyAgKm1vZDsKKwlpbnQgICAgICAgICAgICAgbm1vZHMsIGk7CisKKwliZmFfd2NfaW5pdCgmZmNzLT53YywgYmZhX2Zjc19leGl0X2NvbXAsIGZjcyk7CisKKwlubW9kcyA9IHNpemVvZihmY3NfbW9kdWxlcykgLyBzaXplb2YoZmNzX21vZHVsZXNbMF0pOworCisJZm9yIChpID0gMDsgaSA8IG5tb2RzOyBpKyspIHsKKwkJYmZhX3djX3VwKCZmY3MtPndjKTsKKworCQltb2QgPSAmZmNzX21vZHVsZXNbaV07CisJCW1vZC0+bW9kZXhpdChmY3MpOworCX0KKworCWJmYV93Y193YWl0KCZmY3MtPndjKTsKK30KKworCit2b2lkCitiZmFfZmNzX3RyY19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCkKK3sKKwlmY3MtPnRyY21vZCA9IHRyY21vZDsKK30KKworCit2b2lkCitiZmFfZmNzX2xvZ19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCkKK3sKKwlmY3MtPmxvZ20gPSBsb2dtb2Q7Cit9CisKKwordm9pZAorYmZhX2Zjc19hZW5faW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfYWVuX3MgKmFlbikKK3sKKwlmY3MtPmFlbiA9IGFlbjsKK30KKwordm9pZAorYmZhX2Zjc19tb2RleGl0X2NvbXAoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV93Y19kb3duKCZmY3MtPndjKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc19scG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NzVlZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfbHBvcnQuYwpAQCAtMCwwICsxLDk0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX3BvcnQuYyBCRkEgRkNTIHBvcnQKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19mY3MuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfdnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fbHBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgUE9SVCk7CisKKy8qKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9scG9ydF9hZW5fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zZW5kX2xzX3JqdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1OCByZWFzb25fY29kZSwKKwkJCXU4IHJlYXNvbl9jb2RlX2V4cGwpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vbmxpbmVfYWN0aW9ucyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2VjaG8oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19lY2hvX3MgKmVjaG8sIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9ybmlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqcm5pZCwgdTE2IGxlbik7CitzdGF0aWMgdm9pZCAgICAgYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpOworCitzdGF0aWMgc3RydWN0IHsKKwl2b2lkICAgICAgICAgICAgKCppbml0KSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKwl2b2lkICAgICAgICAgICAgKCpvbmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCXZvaWQgICAgICAgICAgICAoKm9mZmxpbmUpIChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworfSBfX3BvcnRfYWN0aW9uW10gPSB7CisJeworCWJmYV9mY3NfcG9ydF91bmtub3duX2luaXQsIGJmYV9mY3NfcG9ydF91bmtub3duX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF91bmtub3duX29mZmxpbmV9LCB7CisJYmZhX2Zjc19wb3J0X2ZhYl9pbml0LCBiZmFfZmNzX3BvcnRfZmFiX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9mYWJfb2ZmbGluZX0sIHsKKwliZmFfZmNzX3BvcnRfbG9vcF9pbml0LCBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUsCisJCQliZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lfSwgeworYmZhX2Zjc19wb3J0X24ybl9pbml0LCBiZmFfZmNzX3BvcnRfbjJuX29ubGluZSwKKwkJCWJmYV9mY3NfcG9ydF9uMm5fb2ZmbGluZX0sfTsKKworLyoqCisgKiAgZmNzX3BvcnRfc20gRkNTIGxvZ2ljYWwgcG9ydCBzdGF0ZSBtYWNoaW5lCisgKi8KKworZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgeworCUJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUgPSAxLAorCUJGQV9GQ1NfUE9SVF9TTV9PTkxJTkUgPSAyLAorCUJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FID0gMywKKwlCRkFfRkNTX1BPUlRfU01fREVMRVRFID0gNCwKKwlCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQgPSA1LAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfcG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJIGVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KTsKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fQ1JFQVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19wb3J0X29mZmxpbmVfYWN0aW9ucyhwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEU6CisKKwkJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5vZmZsaW5lKHBvcnQpOworCisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX2RlbGV0aW5nKTsKKwkJCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmcG9ydC0+cnBvcnRfcSkgeworCQkJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbGV0ZShycG9ydCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfUE9SVF9TTV9ERUxSUE9SVDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCWVudW0gYmZhX2Zjc19wb3J0X2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lX2FjdGlvbnMocG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMRVRFOgorCQlpZiAocG9ydC0+bnVtX3Jwb3J0cyA9PSAwKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV91bmluaXQpOworCQkJYmZhX2Zjc19wb3J0X2RlbGV0ZWQocG9ydCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9kZWxldGluZyk7CisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnBvcnQtPnJwb3J0X3EpIHsKKwkJCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3BvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQ6CisJCWlmIChwb3J0LT5udW1fcnBvcnRzID09IDApIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJCQliZmFfZmNzX3BvcnRfZGVsZXRlZChwb3J0KTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3BvcnRfcHZ0CisgKi8KKworLyoqCisgKiBTZW5kIEFFTiBub3RpZmljYXRpb24KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIGVudW0gYmZhX2xwb3J0X2Flbl9ldmVudCBldmVudCkKK3sKKwl1bmlvbiBiZmFfYWVuX2RhdGFfdSBhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kID0gcG9ydC0+ZmNzLT5sb2dtOworCWVudW0gYmZhX3BvcnRfcm9sZSByb2xlID0gcG9ydC0+cG9ydF9jZmcucm9sZXM7CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNoYXIgICAgICAgICAgICBscHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisJY2hhciAgICAgICAgICAgKnJvbGVfc3RyW0JGQV9QT1JUX1JPTEVfRkNQX01BWCAvIDIgKyAxXSA9CisJCXsgIkluaXRpYXRvciIsICJUYXJnZXQiLCAiSVBGQyIgfTsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisKKwliZmFfYXNzZXJ0KHJvbGUgPD0gQkZBX1BPUlRfUk9MRV9GQ1BfTUFYKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUE9SVF9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PTkxJTkUsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9PRkZMSU5FLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTkVXOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9ORVcsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0xQT1JUX0FFTl9ERUxFVEU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RFTEVURSwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QsIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5scG9ydC5yb2xlcyA9IHJvbGU7CisJYWVuX2RhdGEubHBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpOworCWFlbl9kYXRhLmxwb3J0Lmxwd3duID0gbHB3d247Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgcmVqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2VuZF9sc19yanQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJIHU4IHJlYXNvbl9jb2RlLCB1OCByZWFzb25fY29kZV9leHBsKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKworCWZjeHAgPSBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCWxlbiA9IGZjX2xzX3JqdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkgICAgICByZWFzb25fY29kZSwgcmVhc29uX2NvZGVfZXhwbCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogUHJvY2VzcyBpbmNvbWluZyBwbG9naSBmcm9tIGEgcmVtb3RlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJLyoKKwkgKiBJZiBtaW4gY2ZnIG1vZGUgaXMgZW5hYmxlZCwgZHJvcCBhbnkgaW5jb21pbmcgUExPR0lzCisJICovCisJaWYgKF9fZmNzX21pbl9jZmcocG9ydC0+ZmNzKSkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmNfcGxvZ2lfcGFyc2UocnhfZmNocykgIT0gRkNfUEFSU0VfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQkvKgorCQkgKiBzZW5kIGEgTFMgcmVqZWN0CisJCSAqLworCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJIEZDX0xTX1JKVF9SU05fUFJPVE9DT0xfRVJST1IsCisJCQkJCSBGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUyk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKyogRGlyZWN0IEF0dGFjaCBQMlAgbW9kZSA6IHZlcmlmeSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSByLXBvcnQuCisJICovCisJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkgICAgJiYKKwkgICAgKG1lbWNtcAorCSAgICAgKCh2b2lkICopJmJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSwgKHZvaWQgKikmcGxvZ2ktPnBvcnRfbmFtZSwKKwkgICAgICBzaXplb2Yod3duX3QpKSA8IDApKSB7CisJCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnhfZmNocy0+ZF9pZCkpIHsKKwkJCS8qCisJCQkgKiBBZGRyZXNzIGFzc2lnbmVkIHRvIHVzIGNhbm5vdCBiZSBhIFdLQQorCQkJICovCisJCQliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQocG9ydCwgcnhfZmNocywKKwkJCQkJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUiwKKwkJCQkJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lEKTsKKwkJCXJldHVybjsKKwkJfQorCQlwb3J0LT5waWQgPSByeF9mY2hzLT5kX2lkOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBjaGVjayBpZiB3ZSBrbm93IHRoZSBkZXZpY2UgYnkgcHd3bi4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LCBwbG9naS0+cG9ydF9uYW1lKTsKKwlpZiAocnBvcnQpIHsKKwkJLyoqCisJCSAqIERpcmVjdCBBdHRhY2ggUDJQIG1vZGU6IGhhbmRsZSBhZGRyZXNzIGFzc2lnbmVkIGJ5IHRoZSBycG9ydC4KKwkJICovCisJCWlmICgoIWJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHBvcnQtPmZhYnJpYykpCisJCSAgICAmJgorCQkgICAgKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCksCisJCSAgICAgICh2b2lkICopJnBsb2dpLT5wb3J0X25hbWUsIHNpemVvZih3d25fdCkpIDwgMCkpIHsKKwkJCXBvcnQtPnBpZCA9IHJ4X2ZjaHMtPmRfaWQ7CisJCQlycG9ydC0+cGlkID0gcnhfZmNocy0+c19pZDsKKwkJfQorCQliZmFfZmNzX3Jwb3J0X3Bsb2dpKHJwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBOZXh0LCBsb29rdXAgcnBvcnQgYnkgUElELgorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgcnhfZmNocy0+c19pZCk7CisJaWYgKCFycG9ydCkgeworCQkvKioKKwkJICogSW5ib3VuZCBQTE9HSSBmcm9tIGEgbmV3IGRldmljZS4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIFJwb3J0IGlzIGtub3duIG9ubHkgYnkgUElELgorCSAqLworCWlmIChycG9ydC0+cHd3bikgeworCQkvKioKKwkJICogVGhpcyBpcyBhIGRpZmZlcmVudCBkZXZpY2Ugd2l0aCB0aGUgc2FtZSBwaWQuIE9sZCBkZXZpY2UKKwkJICogZGlzYXBwZWFyZWQuIFNlbmQgaW1wbGljaXQgTE9HTyB0byBvbGQgZGV2aWNlLgorCQkgKi8KKwkJYmZhX2Fzc2VydChycG9ydC0+cHd3biAhPSBwbG9naS0+cG9ydF9uYW1lKTsKKwkJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChycG9ydCk7CisKKwkJLyoqCisJCSAqIEluYm91bmQgUExPR0kgZnJvbSBhIG5ldyBkZXZpY2UgKHdpdGggb2xkIFBJRCkuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X3Bsb2dpX2NyZWF0ZShwb3J0LCByeF9mY2hzLCBwbG9naSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBQTE9HSSBjcm9zc2luZyBlYWNoIG90aGVyLgorCSAqLworCWJmYV9hc3NlcnQocnBvcnQtPnB3d24gPT0gV1dOX05VTEwpOworCWJmYV9mY3NfcnBvcnRfcGxvZ2kocnBvcnQsIHJ4X2ZjaHMsIHBsb2dpKTsKK30KKworLyoKKyAqIFByb2Nlc3MgaW5jb21pbmcgRUNITy4KKyAqIFNpbmNlIGl0IGRvZXMgbm90IHJlcXVpcmUgYSBsb2dpbiwgaXQgaXMgcHJvY2Vzc2VkIGhlcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZWNobyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsCisJCQlzdHJ1Y3QgZmNfZWNob19zICplY2hvLCB1MTYgcnhfbGVuKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbiwgcHlsZF9sZW47CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9sZW4pOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCk7CisKKwkvKgorCSAqIENvcHkgdGhlIHBheWxvYWQgKGlmIGFueSkgZnJvbSB0aGUgZWNobyBmcmFtZQorCSAqLworCXB5bGRfbGVuID0gcnhfbGVuIC0gc2l6ZW9mKHN0cnVjdCBmY2hzX3MpOworCWJmYV90cmMocG9ydC0+ZmNzLCBweWxkX2xlbik7CisKKwlpZiAocHlsZF9sZW4gPiBsZW4pCisJCW1lbWNweSgoKHU4ICopIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCkpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSwgKGVjaG8gKyAxKSwKKwkJICAgICAgIChweWxkX2xlbiAtIHNpemVvZihzdHJ1Y3QgZmNfZWNob19zKSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBweWxkX2xlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qCisgKiBQcm9jZXNzIGluY29taW5nIFJOSUQuCisgKiBTaW5jZSBpdCBkb2VzIG5vdCByZXF1aXJlIGEgbG9naW4sIGl0IGlzIHByb2Nlc3NlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3JuaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUxNiByeF9sZW4pCit7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb19kYXRhOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydCA9IE5VTEw7CisJdTE2ICAgICAgICBsZW47CisJdTMyICAgICAgICBkYXRhX2Zvcm1hdDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2xlbik7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENoZWNrIE5vZGUgSW5kZW50aWZpY2F0aW9uIERhdGEgRm9ybWF0CisJICogV2Ugb25seSBzdXBwb3J0IEdlbmVyYWwgVG9wb2xvZ3kgRGlzY292ZXJ5IEZvcm1hdC4KKwkgKiBGb3IgYW55IG90aGVyIHJlcXVlc3RlZCBEYXRhIEZvcm1hdHMsIHdlIHJldHVybiBDb21tb24gTm9kZSBJZCBEYXRhCisJICogb25seSwgYXMgcGVyIEZDLUxTLgorCSAqLworCWJmYV90cmMocG9ydC0+ZmNzLCBybmlkLT5ub2RlX2lkX2RhdGFfZm9ybWF0KTsKKwlpZiAocm5pZC0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJZGF0YV9mb3JtYXQgPSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlk7CisJCS8qCisJCSAqIEdldCBHZW5lcmFsIHRvcG9sb2d5IGRhdGEgZm9yIHRoaXMgcG9ydAorCQkgKi8KKwkJYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEocG9ydCwgJmdlbl90b3BvX2RhdGEpOworCX0gZWxzZSB7CisJCWRhdGFfZm9ybWF0ID0gUk5JRF9OT0RFSURfREFUQV9GT1JNQVRfQ09NTU9OOworCX0KKworCS8qCisJICogQ29weSB0aGUgTm9kZSBJZCBJbmZvCisJICovCisJY29tbW9uX2lkX2RhdGEucG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCWNvbW1vbl9pZF9kYXRhLm5vZGVfbmFtZSA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCWxlbiA9IGZjX3JuaWRfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJCWJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnhfZmNocy0+b3hfaWQsCisJCQkJZGF0YV9mb3JtYXQsICZjb21tb25faWRfZGF0YSwgJmdlbl90b3BvX2RhdGEpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBiZmFfcnBvcnQsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJICAgICAgQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLAorCQkgICAgICBGQ19NQVhfUERVU1osIDApOworCisJcmV0dXJuOworfQorCisvKgorICogIEZpbGwgb3V0IEdlbmVyYWwgVG9wb2xwZ3kgRGlzY292ZXJ5IERhdGEgZm9yIFJOSUQgRUxTLgorICovCitzdGF0aWMgdm9pZAorYmZhX2ZzX3BvcnRfZ2V0X2dlbl90b3BvX2RhdGEoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjX3JuaWRfZ2VuZXJhbF90b3BvbG9neV9kYXRhX3MgKmdlbl90b3BvX2RhdGEpCit7CisKKwliZmFfb3NfbWVtc2V0KGdlbl90b3BvX2RhdGEsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCisJZ2VuX3RvcG9fZGF0YS0+YXNzb190eXBlID0gYmZhX29zX2h0b25sKFJOSURfQVNTT0NJQVRFRF9UWVBFX0hPU1QpOworCWdlbl90b3BvX2RhdGEtPnBoeV9wb3J0X251bSA9IDA7CS8qIEB0b2RvICovCisJZ2VuX3RvcG9fZGF0YS0+bnVtX2F0dGFjaGVkX25vZGVzID0gYmZhX29zX2h0b25sKDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X29ubGluZV9hY3Rpb25zKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+ZmFicmljLT5vcGVyX3R5cGUpOworCisJX19wb3J0X2FjdGlvbltwb3J0LT5mYWJyaWMtPmZhYl90eXBlXS5pbml0KHBvcnQpOworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub25saW5lKHBvcnQpOworCisJYmZhX2Zjc19wb3J0X2Flbl9wb3N0KHBvcnQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKTsKKwliZmFfZmNiX3BvcnRfb25saW5lKHBvcnQtPmZjcy0+YmZhZCwgcG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQlwb3J0LT5mYWJyaWMtPnZmX2RydiwgKHBvcnQtPnZwb3J0ID09IE5VTEwpID8KKwkJCU5VTEwgOiBwb3J0LT52cG9ydC0+dnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9vZmZsaW5lX2FjdGlvbnMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+b3Blcl90eXBlKTsKKworCV9fcG9ydF9hY3Rpb25bcG9ydC0+ZmFicmljLT5mYWJfdHlwZV0ub2ZmbGluZShwb3J0KTsKKworCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUocG9ydC0+ZmFicmljKSA9PSBCRkFfVFJVRSkgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUKTsKKwl9IGVsc2UgeworCQliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9PRkZMSU5FKTsKKwl9CisJYmZhX2ZjYl9wb3J0X29mZmxpbmUocG9ydC0+ZmNzLT5iZmFkLCBwb3J0LT5wb3J0X2NmZy5yb2xlcywKKwkJCXBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJKHBvcnQtPnZwb3J0ID09IE5VTEwpID8gTlVMTCA6IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYpOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lKHJwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfdW5rbm93bl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Vua25vd25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfYWVuX3Bvc3QocG9ydCwgQkZBX0xQT1JUX0FFTl9ERUxFVEUpOworCisJLyoKKwkgKiBCYXNlIHBvcnQgd2lsbCBiZSBkZWxldGVkIGJ5IHRoZSBPUyBkcml2ZXIKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJYmZhX2ZjYl9wb3J0X2RlbGV0ZShwb3J0LT5mY3MtPmJmYWQsIHBvcnQtPnBvcnRfY2ZnLnJvbGVzLAorCQkJcG9ydC0+ZmFicmljLT52Zl9kcnYsCisJCQlwb3J0LT52cG9ydCA/IHBvcnQtPnZwb3J0LT52cG9ydF9kcnYgOiBOVUxMKTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGVfY29tcChwb3J0LT52cG9ydCk7CisJfSBlbHNlIHsKKwkJYmZhX2Zjc19mYWJyaWNfcG9ydF9kZWxldGVfY29tcChwb3J0LT5mYWJyaWMpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19scG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisvKioKKyAqICAgTW9kdWxlIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCWJmYV9mY3NfbW9kZXhpdF9jb21wKGZjcyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbikKK3sKKwl1MzIgICAgICAgIHBpZCA9IGZjaHMtPnNfaWQ7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBOVUxMOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwliZmFfc3RhdHMobHBvcnQsIHVmX3JlY3ZzKTsKKworCWlmICghYmZhX2Zjc19wb3J0X2lzX29ubGluZShscG9ydCkpIHsKKwkJYmZhX3N0YXRzKGxwb3J0LCB1Zl9yZWN2X2Ryb3BzKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZpcnN0LCBoYW5kbGUgRUxTcyB0aGF0IGRvbm90IHJlcXVpcmUgYSBsb2dpbi4KKwkgKi8KKwkvKgorCSAqIEhhbmRsZSBQTE9HSSBmaXJzdAorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYKKwkJKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19QTE9HSSkpIHsKKwkJYmZhX2Zjc19wb3J0X3Bsb2dpKGxwb3J0LCBmY2hzLCAoc3RydWN0IGZjX2xvZ2lfcyAqKSBlbHNfY21kKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSGFuZGxlIEVDSE8gc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAoKGZjaHMtPnR5cGUgPT0gRkNfVFlQRV9FTFMpICYmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfRUNITykpIHsKKwkJYmZhX2Zjc19wb3J0X2VjaG8obHBvcnQsIGZjaHMsCisJCQkoc3RydWN0IGZjX2VjaG9fcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBIYW5kbGUgUk5JRCBzZXBhcmF0ZWx5LgorCSAqLworCWlmICgoZmNocy0+dHlwZSA9PSBGQ19UWVBFX0VMUykgJiYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19STklEKSkgeworCQliZmFfZmNzX3BvcnRfcm5pZChscG9ydCwgZmNocywKKwkJCShzdHJ1Y3QgZmNfcm5pZF9jbWRfcyAqKSBlbHNfY21kLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogbG9vayBmb3IgYSBtYXRjaGluZyByZW1vdGUgcG9ydCBJRAorCSAqLworCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQobHBvcnQsIHBpZCk7CisJaWYgKHJwb3J0KSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+c19pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+ZF9pZCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+dHlwZSk7CisKKwkJYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHJwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogT25seSBoYW5kbGVzIEVMUyBmcmFtZXMgZm9yIG5vdy4KKwkgKi8KKwlpZiAoZmNocy0+dHlwZSAhPSBGQ19UWVBFX0VMUykgeworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGZjaHMtPnR5cGUpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19SU0NOKSB7CisJCWJmYV9mY3NfcG9ydF9zY25fcHJvY2Vzc19yc2NuKGxwb3J0LCBmY2hzLCBsZW4pOworCQlyZXR1cm47CisJfQorCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19MT0dPKSB7CisJCS8qKgorCQkgKiBAdG9kbyBIYW5kbGUgTE9HTyBmcmFtZXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfdHJjKGxwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfUFJMSSkgeworCQkvKioKKwkJICogQHRvZG8gSGFuZGxlIFBSTEkgZnJhbWVzIHJlY2VpdmVkLgorCQkgKi8KKwkJYmZhX3RyYyhscG9ydC0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBVbmhhbmRsZWQgRUxTIGZyYW1lcy4gU2VuZCBhIExTX1JKVC4KKwkgKi8KKwliZmFfZmNzX3BvcnRfc2VuZF9sc19yanQobHBvcnQsIGZjaHMsIEZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQLAorCQkJCSBGQ19MU19SSlRfRVhQX05PX0FERExfSU5GTyk7CisKK30KKworLyoqCisgKiAgIFBJRCBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKworCWxpc3RfZm9yX2VhY2gocWUsICZwb3J0LT5ycG9ydF9xKSB7CisJCXJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKilxZTsKKwkJaWYgKHJwb3J0LT5waWQgPT0gcGlkKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwaWQpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqICAgUFdXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPnB3d24sIHB3d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBwd3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqICAgTldXTiBiYXNlZCBMb29rdXAgZm9yIGEgUi1Qb3J0IGluIHRoZSBQb3J0IFItUG9ydCBRdWV1ZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfbnd3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh3d25faXNfZXF1YWwocnBvcnQtPm53d24sIG53d24pKQorCQkJcmV0dXJuIHJwb3J0OworCX0KKworCWJmYV90cmMocG9ydC0+ZmNzLCBud3duKTsKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCBtb2R1bGUgd2hlbiBuZXcgcnBvcnRzIGFyZSBkaXNjb3ZlcmVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJnBvcnQtPnJwb3J0X3EpOworCXBvcnQtPm51bV9ycG9ydHMrKzsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgbW9kdWxlIHRvIHdoZW4gcnBvcnRzIGFyZSBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfZGVsX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmcG9ydC0+cnBvcnRfcSwgcnBvcnQpKTsKKwlsaXN0X2RlbCgmcnBvcnQtPnFlKTsKKwlwb3J0LT5udW1fcnBvcnRzLS07CisKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fREVMUlBPUlQpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgZm9yIGJhc2UgcG9ydCB3aGVuIGZhYnJpYyBsb2dpbiBpcyBjb21wbGV0ZS4KKyAqIENhbGxlZCBieSB2cG9ydCBmb3IgdmlydHVhbCBwb3J0cyB3aGVuIEZESVNDIGlzIGNvbXBsZXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChwb3J0LCBCRkFfRkNTX1BPUlRfU01fT05MSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgd2hlbiBmYWJyaWMgZ29lcyBvZmZsaW5lLgorICogQ2FsbGVkIGJ5IHZwb3J0IGZvciB2aXJ0dWFsIHBvcnRzIHdoZW4gdmlydHVhbCBwb3J0IGJlY29tZXMgb2ZmbGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9PRkZMSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgYnkgZmFicmljIHRvIGRlbGV0ZSBiYXNlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBDYWxsZWQgYnkgdnBvcnQgdG8gZGVsZXRlIGxwb3J0IGFuZCBhc3NvY2lhdGVkIHJlc291cmNlcy4gU2hvdWxkIGNhbGwKKyAqIGJmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAoKSBmb3IgdnBvcnRzIG9uIGNvbXBsZXRpb24uCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBmYWJyaWMgaW4gcHJpdmF0ZSBsb29wIHRvcG9sb2d5IHRvIHByb2Nlc3MgTElQIGV2ZW50LgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBwb3J0IGlzIG9ubGluZSwgZWxzZSByZXR1cm4gRkFMU0UKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2Zjc19wb3J0X2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJcmV0dXJuIChiZmFfc21fY21wX3N0YXRlKHBvcnQsIGJmYV9mY3NfcG9ydF9zbV9vbmxpbmUpKTsKK30KKworLyoqCisgKiBMb2dpY2FsIHBvcnQgaW5pdGlhbGl6YXRpb24gb2YgYmFzZSBvciB2aXJ0dWFsIHBvcnQuCisgKiBDYWxsZWQgYnkgZmFicmljIGZvciBiYXNlIHBvcnQgb3IgYnkgdnBvcnQgZm9yIHZpcnR1YWwgcG9ydHMuCisgKi8KK3ZvaWQKK2JmYV9mY3NfbHBvcnRfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmxwb3J0LCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJbHBvcnQtPmZjcyA9IGZjczsKKwlscG9ydC0+ZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCB2Zl9pZCk7CisJYmZhX29zX2Fzc2lnbihscG9ydC0+cG9ydF9jZmcsICpwb3J0X2NmZyk7CisJbHBvcnQtPnZwb3J0ID0gdnBvcnQ7CisJbHBvcnQtPmxwX3RhZyA9ICh2cG9ydCkgPyBiZmFfbHBzX2dldF90YWcodnBvcnQtPmxwcykgOgorCQkJIGJmYV9scHNfZ2V0X3RhZyhscG9ydC0+ZmFicmljLT5scHMpOworCisJSU5JVF9MSVNUX0hFQUQoJmxwb3J0LT5ycG9ydF9xKTsKKwlscG9ydC0+bnVtX3Jwb3J0cyA9IDA7CisKKwlscG9ydC0+YmZhZF9wb3J0ID0KKwkJYmZhX2ZjYl9wb3J0X25ldyhmY3MtPmJmYWQsIGxwb3J0LCBscG9ydC0+cG9ydF9jZmcucm9sZXMsCisJCQkJbHBvcnQtPmZhYnJpYy0+dmZfZHJ2LAorCQkJCXZwb3J0ID8gdnBvcnQtPnZwb3J0X2RydiA6IE5VTEwpOworCWJmYV9mY3NfcG9ydF9hZW5fcG9zdChscG9ydCwgQkZBX0xQT1JUX0FFTl9ORVcpOworCisJYmZhX3NtX3NldF9zdGF0ZShscG9ydCwgYmZhX2Zjc19wb3J0X3NtX3VuaW5pdCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBvcnQsIEJGQV9GQ1NfUE9SVF9TTV9DUkVBVEUpOworfQorCisKKworLyoqCisgKiAgZmNzX2xwb3J0X2FwaQorICovCisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCSAgICAgIHN0cnVjdCBiZmFfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cikKK3sKKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShwb3J0LCBiZmFfZmNzX3BvcnRfc21fb25saW5lKSkKKwkJcG9ydF9hdHRyLT5waWQgPSBwb3J0LT5waWQ7CisJZWxzZQorCQlwb3J0X2F0dHItPnBpZCA9IDA7CisKKwlwb3J0X2F0dHItPnBvcnRfY2ZnID0gcG9ydC0+cG9ydF9jZmc7CisKKwlpZiAocG9ydC0+ZmFicmljKSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gYmZhX2Zjc19mYWJyaWNfcG9ydF90eXBlKHBvcnQtPmZhYnJpYyk7CisJCXBvcnRfYXR0ci0+bG9vcGJhY2sgPSBiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhwb3J0LT5mYWJyaWMpOworCQlwb3J0X2F0dHItPmZhYnJpY19uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0KTsKKwkJbWVtY3B5KHBvcnRfYXR0ci0+ZmFicmljX2lwX2FkZHIsCisJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIocG9ydCksCisJCSAgICAgICBCRkFfRkNTX0ZBQlJJQ19JUEFERFJfU1opOworCisJCWlmIChwb3J0LT52cG9ydCAhPSBOVUxMKQorCQkJcG9ydF9hdHRyLT5wb3J0X3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9WUE9SVDsKKworCX0gZWxzZSB7CisJCXBvcnRfYXR0ci0+cG9ydF90eXBlID0gQkZBX1BQT1JUX1RZUEVfVU5LTk9XTjsKKwkJcG9ydF9hdHRyLT5zdGF0ZSA9IEJGQV9QT1JUX1VOSU5JVDsKKwl9CisKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3NfcG9ydC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzRiMjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3BvcnQuYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcHBvcnQuYyBCRkEgRkNTIFBQT1JUICggcGh5c2ljYWwgcG9ydCkKKyAqLworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfcG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQUE9SVCk7CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Bwb3J0X2V2ZW50X2hhbmRsZXIodm9pZCAqY2JhcmcsIGJmYV9wcG9ydF9ldmVudF90IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzID0gY2Jhcmc7CisKKwliZmFfdHJjKGZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BQT1JUX0xJTktVUDoKKwkJYmZhX2Zjc19mYWJyaWNfbGlua191cCgmZmNzLT5mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX1BQT1JUX0xJTktET1dOOgorCQliZmFfZmNzX2ZhYnJpY19saW5rX2Rvd24oJmZjcy0+ZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTjoKKwkJYmZhX2Fzc2VydCgwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfcHBvcnRfZXZlbnRfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfcHBvcnRfZXZlbnRfaGFuZGxlciwKKwkJCQkgICAgIGZjcyk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmNzX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwMWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Zjc191Zi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdWYuYyBCRkEgRkNTIFVGICggVW5zb2xpY2l0ZWQgRnJhbWVzKQorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19mYWJyaWMuaD4KKyNpbmNsdWRlICJmY3MuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc191Zi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBVRik7CisKKy8qKgorICogCQlCRkEgY2FsbGJhY2sgZm9yIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW1baW5dCQljYmFyZwkJY2FsbGJhY2sgYXJnIGZvciByZWNlaXZlIGhhbmRsZXIKKyAqIEBwYXJhbVtpbl0JCXVmCQl1bnNvbGljaXRlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3VmX3JlY3Yodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3MgPSAoc3RydWN0IGJmYV9mY3NfcyAqKSBjYmFyZzsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgKmZjaHMgPSBiZmFfdWZfZ2V0X2ZybWJ1Zih1Zik7CisJdTE2ICAgICAgICBsZW4gPSBiZmFfdWZfZ2V0X2ZybWxlbih1Zik7CisJc3RydWN0IGZjX3ZmdF9zICAgICAgICp2ZnQ7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCS8qKgorCSAqIGNoZWNrIGZvciBWRlQgaGVhZGVyCisJICovCisJaWYgKGZjaHMtPnJvdXRpbmcgPT0gRkNfUlRHX0VYVF9IRFIgJiYKKwkJZmNocy0+Y2F0X2luZm8gPT0gRkNfQ0FUX1ZGVF9IRFIpIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudGFnZ2VkKTsKKwkJdmZ0ID0gYmZhX3VmX2dldF9mcm1idWYodWYpOworCQlpZiAoZmNzLT5wb3J0X3ZmaWQgPT0gdmZ0LT52Zl9pZCkKKwkJCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwkJZWxzZQorCQkJZmFicmljID0gYmZhX2Zjc192Zl9sb29rdXAoZmNzLCAodTE2KSB2ZnQtPnZmX2lkKTsKKworCQkvKioKKwkJICogZHJvcCBmcmFtZSBpZiB2ZmlkIGlzIHVua25vd24KKwkJICovCisJCWlmICghZmFicmljKSB7CisJCQliZmFfYXNzZXJ0KDApOworCQkJYmZhX3N0YXRzKGZjcywgdWYudmZpZF91bmtub3duKTsKKwkJCWJmYV91Zl9mcmVlKHVmKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qKgorCQkgKiBza2lwIHZmdCBoZWFkZXIKKwkJICovCisJCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSAodmZ0ICsgMSk7CisJCWxlbiAtPSBzaXplb2Yoc3RydWN0IGZjX3ZmdF9zKTsKKworCQliZmFfdHJjKGZjcywgdmZ0LT52Zl9pZCk7CisJfSBlbHNlIHsKKwkJYmZhX3N0YXRzKGZjcywgdWYudW50YWdnZWQpOworCQlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJfQorCisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzBdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbMV0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVsyXSk7CisJYmZhX3RyYyhmY3MsICgodTMyICopIGZjaHMpWzNdKTsKKwliZmFfdHJjKGZjcywgKCh1MzIgKikgZmNocylbNF0pOworCWJmYV90cmMoZmNzLCAoKHUzMiAqKSBmY2hzKVs1XSk7CisJYmZhX3RyYyhmY3MsIGxlbik7CisKKwliZmFfZmNzX2ZhYnJpY191Zl9yZWN2KGZhYnJpYywgZmNocywgbGVuKTsKKwliZmFfdWZfZnJlZSh1Zik7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX3VmX3JlY3ZfcmVnaXN0ZXIoZmNzLT5iZmEsIGJmYV9mY3NfdWZfcmVjdiwgZmNzKTsKK30KKwordm9pZAorYmZhX2Zjc191Zl9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NTRhMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgRkNYUCk7CitCRkFfTU9EVUxFKGZjeHApOworCisvKioKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBfX2JmYV9mY3hwX3NlbmRfY2Jmbih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfcnhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHN0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zICpmY3hwX3JzcCk7CitzdGF0aWMgdm9pZCAgICAgaGFsX2ZjeHBfdHhfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcWxlbiwKKwkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBmY2hzX3MgKmZjaHMpOworc3RhdGljIHZvaWQJYmZhX2ZjeHBfcXJlc3VtZSh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZAliZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCSAgICAgICBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyAqc2VuZF9yZXEpOworCisvKioKKyAqICBmY3hwX3B2dCBCRkEgRkNYUCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitjbGFpbV9mY3hwX3JlcV9yc3BfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTggICAgICAgICpkbV9rdmEgPSBOVUxMOworCXU2NCAgICAgICAgZG1fcGE7CisJdTMyICAgICAgICBidWZfcG9vbF9zejsKKworCWRtX2t2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwlkbV9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKworCWJ1Zl9wb29sX3N6ID0gbW9kLT5yZXFfcGxkX3N6ICogbW9kLT5udW1fZmN4cHM7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGZjeHAgcmVxIHBheWxvYWQgbGlzdAorCSAqLworCW1vZC0+cmVxX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJlcV9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cmVxX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBmY3hwIHJzcCBwYXlsb2FkIGxpc3QKKwkgKi8KKwlidWZfcG9vbF9zeiA9IG1vZC0+cnNwX3BsZF9zeiAqIG1vZC0+bnVtX2ZjeHBzOworCW1vZC0+cnNwX3BsZF9saXN0X2t2YSA9IGRtX2t2YTsKKwltb2QtPnJzcF9wbGRfbGlzdF9wYSA9IGRtX3BhOworCWRtX2t2YSArPSBidWZfcG9vbF9zejsKKwlkbV9wYSArPSBidWZfcG9vbF9zejsKKwliZmFfb3NfbWVtc2V0KG1vZC0+cnNwX3BsZF9saXN0X2t2YSwgMCwgYnVmX3Bvb2xfc3opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWkpID0gZG1fa3ZhOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKSA9IGRtX3BhOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fZmN4cHNfbWVtKHN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJdTE2ICAgICAgICBpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJZmN4cCA9IChzdHJ1Y3QgYmZhX2ZjeHBfcyAqKSBiZmFfbWVtaW5mb19rdmEobWkpOworCWJmYV9vc19tZW1zZXQoZmN4cCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG1vZC0+bnVtX2ZjeHBzKTsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmZjeHBfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5mY3hwX2FjdGl2ZV9xKTsKKworCW1vZC0+ZmN4cF9saXN0ID0gZmN4cDsKKworCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9mY3hwczsgaSsrKSB7CisJCWZjeHAtPmZjeHBfbW9kID0gbW9kOworCQlmY3hwLT5mY3hwX3RhZyA9IGk7CisKKwkJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKKwkJYmZhX3JlcXFfd2luaXQoJmZjeHAtPnJlcXFfd3FlLCBiZmFfZmN4cF9xcmVzdW1lLCBmY3hwKTsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCisJCWZjeHAgPSBmY3hwICsgMTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWkpID0gKHZvaWQgKilmY3hwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJdTE2ICAgICAgICBudW1fZmN4cF9yZXFzID0gY2ZnLT5md2NmZy5udW1fZmN4cF9yZXFzOworCisJaWYgKG51bV9mY3hwX3JlcXMgPT0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBY2NvdW50IGZvciByZXEvcnNwIHBheWxvYWQKKwkgKi8KKwkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9JQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJKmRtX2xlbiArPSBCRkFfRkNYUF9NQVhfSUJVRl9TWiAqIG51bV9mY3hwX3JlcXM7CisJZWxzZQorCQkqZG1fbGVuICs9IEJGQV9GQ1hQX01BWF9MQlVGX1NaICogbnVtX2ZjeHBfcmVxczsKKworCS8qCisJICogQWNjb3VudCBmb3IgZmN4cCBzdHJ1Y3RzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfZmN4cF9zKSAqIG51bV9mY3hwX3JlcXM7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICAgIHN0cnVjdCBiZmFfbWVtaW5mb19zICptZW1pbmZvLCBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQobW9kLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3hwX21vZF9zKSk7CisJbW9kLT5iZmEgPSBiZmE7CisJbW9kLT5udW1fZmN4cHMgPSBjZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIEZDWFAgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcGF5bG9hZCBzaXplcy4KKwkgKi8KKwltb2QtPnJlcV9wbGRfc3ogPSBtb2QtPnJzcF9wbGRfc3ogPSBCRkFfRkNYUF9NQVhfSUJVRl9TWjsKKwlpZiAoIWNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCW1vZC0+cnNwX3BsZF9zeiA9IEJGQV9GQ1hQX01BWF9MQlVGX1NaOworCisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+d2FpdF9xKTsKKworCWNsYWltX2ZjeHBfcmVxX3JzcF9tZW0obW9kLCBtZW1pbmZvKTsKKwljbGFpbV9mY3hwc19tZW0obW9kLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2ZjeHBfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IEJGQV9GQ1hQX01PRChiZmEpOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmbW9kLT5mY3hwX2FjdGl2ZV9xKSB7CisJCWZjeHAgPSAoc3RydWN0IGJmYV9mY3hwX3MgKikgcWU7CisJCWlmIChmY3hwLT5jYWxsZXIgPT0gTlVMTCkgeworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJQkZBX1NUQVRVU19JT0NfRkFJTFVSRSwgMCwgMCwgTlVMTCk7CisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkU7CisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2dldChzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKmZtKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3FfZGVxKCZmbS0+ZmN4cF9mcmVlX3EsICZmY3hwKTsKKworCWlmIChmY3hwKQorCQlsaXN0X2FkZF90YWlsKCZmY3hwLT5xZSwgJmZtLT5mY3hwX2FjdGl2ZV9xKTsKKworCXJldHVybiAoZmN4cCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9wdXQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgKndxZTsKKworCWJmYV9xX2RlcSgmbW9kLT53YWl0X3EsICZ3cWUpOworCWlmICh3cWUpIHsKKwkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQl3cWUtPmFsbG9jX2NiZm4od3FlLT5hbGxvY19jYmFyZywgZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJm1vZC0+ZmN4cF9hY3RpdmVfcSwgZmN4cCkpOworCWxpc3RfZGVsKCZmY3hwLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmZmN4cC0+cWUsICZtb2QtPmZjeHBfZnJlZV9xKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3hwX251bGxfY29tcCh2b2lkICpiZmFkX2ZjeHAsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCS8qKmRpc2NhcmRlZCBmY3hwIGNvbXBsZXRpb24gKi8KK30KKworc3RhdGljIHZvaWQKK19fYmZhX2ZjeHBfc2VuZF9jYmZuKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwID0gY2Jhcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQlmY3hwLT5yc3Bfc3RhdHVzLCBmY3hwLT5yc3BfbGVuLAorCQkJCWZjeHAtPnJlc2lkdWVfbGVuLCAmZmN4cC0+cnNwX2ZjaHMpOworCX0gZWxzZSB7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2VuZF9jb21wKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yc3BfcyAqZmN4cF9yc3ApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zCSptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CisJdTE2CQlmY3hwX3RhZyA9IGJmYV9vc19udG9ocyhmY3hwX3JzcC0+ZmN4cF90YWcpOworCisJYmZhX3RyYyhiZmEsIGZjeHBfdGFnKTsKKworCWZjeHBfcnNwLT5yc3BfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yc3BfbGVuKTsKKworCS8qKgorCSAqIEB0b2RvIGYvdyBzaG91bGQgbm90IHNldCByZXNpZHVlIHRvIG5vbi0wIHdoZW4gZXZlcnl0aGluZworCSAqICAgICAgIGlzIHJlY2VpdmVkLgorCSAqLworCWlmIChmY3hwX3JzcC0+cmVxX3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4gPSAwOworCWVsc2UKKwkJZmN4cF9yc3AtPnJlc2lkdWVfbGVuID0gYmZhX29zX250b2hsKGZjeHBfcnNwLT5yZXNpZHVlX2xlbik7CisKKwlmY3hwID0gQkZBX0ZDWFBfRlJPTV9UQUcobW9kLCBmY3hwX3RhZyk7CisKKwliZmFfYXNzZXJ0KGZjeHAtPnNlbmRfY2JmbiAhPSBOVUxMKTsKKworCWhhbF9mY3hwX3J4X3Bsb2cobW9kLT5iZmEsIGZjeHAsIGZjeHBfcnNwKTsKKworCWlmIChmY3hwLT5zZW5kX2NiZm4gIT0gTlVMTCkgeworCQlpZiAoZmN4cC0+Y2FsbGVyID09IE5VTEwpIHsKKwkJCWJmYV90cmMobW9kLT5iZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCQkJZmN4cC0+c2VuZF9jYmZuKGZjeHAtPmNhbGxlciwgZmN4cCwgZmN4cC0+c2VuZF9jYmFyZywKKwkJCQkJZmN4cF9yc3AtPnJlcV9zdGF0dXMsIGZjeHBfcnNwLT5yc3BfbGVuLAorCQkJCQlmY3hwX3JzcC0+cmVzaWR1ZV9sZW4sICZmY3hwX3JzcC0+ZmNocyk7CisJCQkvKgorCQkJICogZmN4cCBhdXRvbWF0aWNhbGx5IGZyZWVkIG9uIHJldHVybiBmcm9tIHRoZSBjYWxsYmFjaworCQkJICovCisJCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQl9IGVsc2UgeworCQkJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCQkJZmN4cC0+cnNwX3N0YXR1cyA9IGZjeHBfcnNwLT5yZXFfc3RhdHVzOworCQkJZmN4cC0+cnNwX2xlbiA9IGZjeHBfcnNwLT5yc3BfbGVuOworCQkJZmN4cC0+cmVzaWR1ZV9sZW4gPSBmY3hwX3JzcC0+cmVzaWR1ZV9sZW47CisJCQlmY3hwLT5yc3BfZmNocyA9IGZjeHBfcnNwLT5mY2hzOworCisJCQliZmFfY2JfcXVldWUoYmZhLCAmZmN4cC0+aGNiX3FlLAorCQkJCSAgICAgIF9fYmZhX2ZjeHBfc2VuZF9jYmZuLCBmY3hwKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV90cmMoYmZhLCBmY3hwX3RhZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraGFsX2ZjeHBfc2V0X2xvY2FsX3NnZXMoc3RydWN0IGJmaV9zZ2VfcyAqc2dlLCB1MzIgcmVxbGVuLCB1NjQgcmVxX3BhKQoreworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBzZ2FfemVybyA9IHsgezB9IH07CisKKwlzZ2UtPnNnX2xlbiA9IHJlcWxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9EQVRBX0xBU1Q7CisJYmZhX2RtYV9hZGRyX3NldChzZ2VbMF0uc2dhLCByZXFfcGEpOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwlzZ2UrKzsKKworCXNnZS0+c2dhID0gc2dhX3plcm87CisJc2dlLT5zZ19sZW4gPSByZXFsZW47CisJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCWJmYV9zZ2VfdG9fYmUoc2dlKTsKK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3R4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHUzMiByZXFsZW4sIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwkvKgorCSAqIFRPRE86IFRYIG94X2lkCisJICovCisJaWYgKHJlcWxlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcmVxYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JFUV9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsCisJCQkJcmVxbGVuICsgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpLCBmY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCUJGQV9QTF9FSURfVFgsIHJlcWxlbiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSwKKwkJCQlmY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9UWCwKKwkJCSAgICAgICByZXFsZW4gKyBzaXplb2Yoc3RydWN0IGZjaHNfcyksIGZjaHMpOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbF9mY3hwX3J4X3Bsb2coc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkgc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKmZjeHBfcnNwKQoreworCWlmIChmY3hwX3JzcC0+cnNwX2xlbiA+IDApIHsKKwkJaWYgKGZjeHAtPnVzZV9pcnNwYnVmKSB7CisJCQl1MzIgICAgICAgIHBsZF93MCA9CisJCQkJKigodTMyICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCkpOworCisJCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCQkgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCQkgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkJICAgICAgJmZjeHBfcnNwLT5mY2hzLCBwbGRfdzApOworCQl9IGVsc2UgeworCQkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9GQ1hQLAorCQkJCSAgICAgICBCRkFfUExfRUlEX1JYLAorCQkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwKKwkJCQkgICAgICAgJmZjeHBfcnNwLT5mY2hzKTsKKwkJfQorCX0gZWxzZSB7CisJCWJmYV9wbG9nX2ZjaGRyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUxfRkNYUCwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICAodTE2KSBmY3hwX3JzcC0+cnNwX2xlbiwgJmZjeHBfcnNwLT5mY2hzKTsKKwl9Cit9CisKKy8qKgorICogSGFuZGxlciB0byByZXN1bWUgc2VuZGluZyBmY3hwIHdoZW4gc3BhY2UgaW4gYXZhaWxhYmxlIGluIGNwZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3hwX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX3MJCSpmY3hwID0gY2Jhcmc7CisJc3RydWN0IGJmYV9zCQkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCXNlbmRfcmVxID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0ZDWFApOworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBRdWV1ZSBmY3hwIHNlbmQgcmVxdWVzdCB0byBmb2ltcndhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmN4cF9xdWV1ZShzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MgKnNlbmRfcmVxKQoreworCXN0cnVjdCBiZmFfcyAgICAgIAkJKmJmYSA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmYV9ycG9ydF9zCQkqcnBvcnQgPSByZXFpLT5iZmFfcnBvcnQ7CisKKwliZmlfaDJpX3NldChzZW5kX3JlcS0+bWgsIEJGSV9NQ19GQ1hQLCBCRklfRkNYUF9IMklfU0VORF9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisKKwlzZW5kX3JlcS0+ZmN4cF90YWcgPSBiZmFfb3NfaHRvbnMoZmN4cC0+ZmN4cF90YWcpOworCWlmIChycG9ydCkgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IHJwb3J0LT5md19oYW5kbGU7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnBvcnQtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwkJaWYgKHNlbmRfcmVxLT5tYXhfZnJtc3ogPT0gMCkKKwkJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9IGVsc2UgeworCQlzZW5kX3JlcS0+cnBvcnRfZndfaG5kbCA9IDA7CisJCXNlbmRfcmVxLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMoRkNfTUFYX1BEVVNaKTsKKwl9CisKKwlzZW5kX3JlcS0+dmZfaWQgPSBiZmFfb3NfaHRvbnMocmVxaS0+dmZfaWQpOworCXNlbmRfcmVxLT5scF90YWcgPSByZXFpLT5scF90YWc7CisJc2VuZF9yZXEtPmNsYXNzID0gcmVxaS0+Y2xhc3M7CisJc2VuZF9yZXEtPnJzcF90aW1lb3V0ID0gcnNwaS0+cnNwX3RpbWVvdXQ7CisJc2VuZF9yZXEtPmN0cyA9IHJlcWktPmN0czsKKwlzZW5kX3JlcS0+ZmNocyA9IHJlcWktPmZjaHM7CisKKwlzZW5kX3JlcS0+cmVxX2xlbiA9IGJmYV9vc19odG9ubChyZXFpLT5yZXFfdG90X2xlbik7CisJc2VuZF9yZXEtPnJzcF9tYXhsZW4gPSBiZmFfb3NfaHRvbmwocnNwaS0+cnNwX21heGxlbik7CisKKwkvKgorCSAqIHNldHVwIHJlcSBzZ2xlcworCSAqLworCWlmIChmY3hwLT51c2VfaXJlcWJ1ZiA9PSAxKSB7CisJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yZXFfc2dlLCByZXFpLT5yZXFfdG90X2xlbiwKKwkJCQkJQkZBX0ZDWFBfUkVRX1BMRF9QQShmY3hwKSk7CisJfSBlbHNlIHsKKwkJaWYgKGZjeHAtPm5yZXFfc2dsZXMgPiAwKSB7CisJCQliZmFfYXNzZXJ0KGZjeHAtPm5yZXFfc2dsZXMgPT0gMSk7CisJCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cmVxX3NnZSwKKwkJCQkJCXJlcWktPnJlcV90b3RfbGVuLAorCQkJCQkJZmN4cC0+cmVxX3NnYV9jYmZuKGZjeHAtPmNhbGxlciwKKwkJCQkJCQkJICAgMCkpOworCQl9IGVsc2UgeworCQkJYmZhX2Fzc2VydChyZXFpLT5yZXFfdG90X2xlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCS8qCisJICogc2V0dXAgcnNwIHNnbGVzCisJICovCisJaWYgKGZjeHAtPnVzZV9pcnNwYnVmID09IDEpIHsKKwkJYmZhX2Fzc2VydChyc3BpLT5yc3BfbWF4bGVuIDw9IEJGQV9GQ1hQX01BWF9MQlVGX1NaKTsKKworCQloYWxfZmN4cF9zZXRfbG9jYWxfc2dlcyhzZW5kX3JlcS0+cnNwX3NnZSwgcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJQkZBX0ZDWFBfUlNQX1BMRF9QQShmY3hwKSk7CisKKwl9IGVsc2UgeworCQlpZiAoZmN4cC0+bnJzcF9zZ2xlcyA+IDApIHsKKwkJCWJmYV9hc3NlcnQoZmN4cC0+bnJzcF9zZ2xlcyA9PSAxKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLAorCQkJCQkJcnNwaS0+cnNwX21heGxlbiwKKwkJCQkJCWZjeHAtPnJzcF9zZ2FfY2JmbihmY3hwLT5jYWxsZXIsCisJCQkJCQkJCSAgIDApKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9hc3NlcnQocnNwaS0+cnNwX21heGxlbiA9PSAwKTsKKwkJCWhhbF9mY3hwX3NldF9sb2NhbF9zZ2VzKHNlbmRfcmVxLT5yc3Bfc2dlLCAwLCAwKTsKKwkJfQorCX0KKworCWhhbF9mY3hwX3R4X3Bsb2coYmZhLCByZXFpLT5yZXFfdG90X2xlbiwgZmN4cCwgJnJlcWktPmZjaHMpOworCisJYmZhX3JlcXFfcHJvZHVjZShiZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyhiZmEsIGJmYV9yZXFxX3BpKGJmYSwgQkZBX1JFUVFfRkNYUCkpOworCWJmYV90cmMoYmZhLCBiZmFfcmVxcV9jaShiZmEsIEJGQV9SRVFRX0ZDWFApKTsKK30KKworCisvKioKKyAqICBoYWxfZmN4cF9hcGkgQkZBIEZDWFAgQVBJCisgKi8KKworLyoqCisgKiBBbGxvY2F0ZSBhbiBGQ1hQIGluc3RhbmNlIHRvIHNlbmQgYSByZXNwb25zZSBvciB0byBzZW5kIGEgcmVxdWVzdAorICogdGhhdCBoYXMgYSByZXNwb25zZS4gUmVxdWVzdC9yZXNwb25zZSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgYnkgY2FsbGVyLgorICoKKyAqIEBwYXJhbVtpbl0JYmZhCQlCRkEgYmZhIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCW5yZXFfc2dsZXMJTnVtYmVyIG9mIFNHIGVsZW1lbnRzIHJlcXVpcmVkIGZvciByZXF1ZXN0CisgKiAJCQkJYnVmZmVyLiAwLCBpZiBmY3hwIGludGVybmFsIGJ1ZmZlcnMgYXJlCXVzZWQuCisgKiAJCQkJVXNlIGJmYV9mY3hwX2dldF9yZXFidWYoKSB0byBnZXQgdGhlCisgKiAJCQkJaW50ZXJuYWwgcmVxIGJ1ZmZlci4KKyAqIEBwYXJhbVtpbl0JcmVxX3NnbGVzCVNHIGVsZW1lbnRzIGRlc2NyaWJpbmcgcmVxdWVzdCBidWZmZXIuIFdpbGwgYmUKKyAqIAkJCQljb3BpZWQgaW4gYnkgQkZBIGFuZCBoZW5jZSBjYW4gYmUgZnJlZWQgb24KKyAqIAkJCQlyZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgorICogQHBhcmFtW2luXQlnZXRfcmVxX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlBZGRyZXNzIChnaXZlbiB0aGUgc2dlIGluZGV4KS4KKyAqIEBwYXJhbVtpbl0JZ2V0X3JlcV9zZ2xlbglmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlcXVlc3QgU0cKKyAqIAkJCQlsZW4gKGdpdmVuIHRoZSBzZ2UgaW5kZXgpLgorICogQHBhcmFtW2luXQlnZXRfcnNwX3NnYQlmdW5jdGlvbiBwdHIgdG8gYmUgY2FsbGVkIHRvIGdldCBhIHJlc3BvbnNlIFNHCisgKiAJCQkJQWRkcmVzcyAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKiBAcGFyYW1baW5dCWdldF9yc3Bfc2dsZW4JZnVuY3Rpb24gcHRyIHRvIGJlIGNhbGxlZCB0byBnZXQgYSByZXNwb25zZSBTRworICogCQkJCWxlbiAoZ2l2ZW4gdGhlIHNnZSBpbmRleCkuCisgKgorICogQHJldHVybiBGQ1hQIGluc3RhbmNlLiBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBiZmFfZmN4cF9zICoKK2JmYV9mY3hwX2FsbG9jKHZvaWQgKmNhbGxlciwgc3RydWN0IGJmYV9zICpiZmEsIGludCBucmVxX3NnbGVzLAorCQkJaW50IG5yc3Bfc2dsZXMsIGJmYV9mY3hwX2dldF9zZ2FkZHJfdCByZXFfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbiwKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCByc3Bfc2dhX2NiZm4sCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbikKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJdTMyICAgICAgICBucmVxX3NncGcsIG5yc3Bfc2dwZzsKKworCWJmYV9hc3NlcnQoYmZhICE9IE5VTEwpOworCisJZmN4cCA9IGJmYV9mY3hwX2dldChCRkFfRkNYUF9NT0QoYmZhKSk7CisJaWYgKGZjeHAgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisKKwlmY3hwLT5jYWxsZXIgPSBjYWxsZXI7CisKKwlpZiAobnJlcV9zZ2xlcyA9PSAwKSB7CisJCWZjeHAtPnVzZV9pcmVxYnVmID0gMTsKKwl9IGVsc2UgeworCQliZmFfYXNzZXJ0KHJlcV9zZ2FfY2JmbiAhPSBOVUxMKTsKKwkJYmZhX2Fzc2VydChyZXFfc2dsZW5fY2JmbiAhPSBOVUxMKTsKKworCQlmY3hwLT51c2VfaXJlcWJ1ZiA9IDA7CisJCWZjeHAtPnJlcV9zZ2FfY2JmbiA9IHJlcV9zZ2FfY2JmbjsKKwkJZmN4cC0+cmVxX3NnbGVuX2NiZm4gPSByZXFfc2dsZW5fY2JmbjsKKworCQlmY3hwLT5ucmVxX3NnbGVzID0gbnJlcV9zZ2xlczsKKworCQkvKgorCQkgKiBhbGxvYyByZXF1aXJlZCBzZ3BncworCQkgKi8KKwkJaWYgKG5yZXFfc2dsZXMgPiBCRklfU0dFX0lOTElORSkgeworCQkJbnJlcV9zZ3BnID0gQkZBX1NHUEdfTlBBR0UobnJlcV9zZ2xlcyk7CisKKwkJCWlmIChiZmFfc2dwZ19tYWxsb2MKKwkJCSAgICAoYmZhLCAmZmN4cC0+cmVxX3NncGdfcSwgbnJlcV9zZ3BnKQorCQkJICAgICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJCQkvKiBiZmFfc2dwZ193YWl0KGJmYSwgJmZjeHAtPnJlcV9zZ3BnX3dxZSwKKwkJCQlucmVxX3NncGcpOyAqLworCQkJCS8qCisJCQkJICogVE9ETworCQkJCSAqLworCQkJfQorCQl9CisJfQorCisJaWYgKG5yc3Bfc2dsZXMgPT0gMCkgeworCQlmY3hwLT51c2VfaXJzcGJ1ZiA9IDE7CisJfSBlbHNlIHsKKwkJYmZhX2Fzc2VydChyc3Bfc2dhX2NiZm4gIT0gTlVMTCk7CisJCWJmYV9hc3NlcnQocnNwX3NnbGVuX2NiZm4gIT0gTlVMTCk7CisKKwkJZmN4cC0+dXNlX2lyc3BidWYgPSAwOworCQlmY3hwLT5yc3Bfc2dhX2NiZm4gPSByc3Bfc2dhX2NiZm47CisJCWZjeHAtPnJzcF9zZ2xlbl9jYmZuID0gcnNwX3NnbGVuX2NiZm47CisKKwkJZmN4cC0+bnJzcF9zZ2xlcyA9IG5yc3Bfc2dsZXM7CisJCS8qCisJCSAqIGFsbG9jIHJlcXVpcmVkIHNncGdzCisJCSAqLworCQlpZiAobnJzcF9zZ2xlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlucnNwX3NncGcgPSBCRkFfU0dQR19OUEFHRShucmVxX3NnbGVzKTsKKworCQkJaWYgKGJmYV9zZ3BnX21hbGxvYworCQkJICAgIChiZmEsICZmY3hwLT5yc3Bfc2dwZ19xLCBucnNwX3NncGcpCisJCQkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCS8qIGJmYV9zZ3BnX3dhaXQoYmZhLCAmZmN4cC0+cnNwX3NncGdfd3FlLAorCQkJCW5yc3Bfc2dwZyk7ICovCisJCQkJLyoKKwkJCQkgKiBUT0RPCisJCQkJICovCisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gKGZjeHApOworfQorCisvKioKKyAqIEdldCB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybiAJCXBvaW50ZXIgdG8gdGhlIGludGVybmFsIHJlcXVlc3QgYnVmZmVyCisgKi8KK3ZvaWQgKgorYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgKm1vZCA9IGZjeHAtPmZjeHBfbW9kOworCXZvaWQJKnJlcWJ1ZjsKKworCWJmYV9hc3NlcnQoZmN4cC0+dXNlX2lyZXFidWYgPT0gMSk7CisJcmVxYnVmID0gKCh1OCAqKW1vZC0+cmVxX3BsZF9saXN0X2t2YSkgKworCQkJZmN4cC0+ZmN4cF90YWcgKiBtb2QtPnJlcV9wbGRfc3o7CisJcmV0dXJuIHJlcWJ1ZjsKK30KKwordTMyCitiZmFfZmN4cF9nZXRfcmVxYnVmc3ooc3RydWN0IGJmYV9mY3hwX3MgKmZjeHApCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBmY3hwLT5mY3hwX21vZDsKKworCXJldHVybiBtb2QtPnJlcV9wbGRfc3o7Cit9CisKKy8qKgorICogR2V0IHRoZSBpbnRlcm5hbCByZXNwb25zZSBidWZmZXIgcG9pbnRlcgorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAlCRkEgZmN4cCBwb2ludGVyCisgKgorICogQHJldHVybgkJcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgcmVxdWVzdCBidWZmZXIKKyAqLwordm9pZCAqCitiZmFfZmN4cF9nZXRfcnNwYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisJdm9pZAkqcnNwYnVmOworCisJYmZhX2Fzc2VydChmY3hwLT51c2VfaXJzcGJ1ZiA9PSAxKTsKKworCXJzcGJ1ZiA9ICgodTggKiltb2QtPnJzcF9wbGRfbGlzdF9rdmEpICsKKwkJCWZjeHAtPmZjeHBfdGFnICogbW9kLT5yc3BfcGxkX3N6OworCXJldHVybiByc3BidWY7Cit9CisKKy8qKgorICogCQlGcmVlIHRoZSBCRkEgRkNYUAorICoKKyAqIEBwYXJhbVtpbl0JZmN4cAkJCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCit2b2lkCitiZmFfZmN4cF9mcmVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqbW9kID0gZmN4cC0+ZmN4cF9tb2Q7CisKKwliZmFfYXNzZXJ0KGZjeHAgIT0gTlVMTCk7CisJYmZhX3RyYyhtb2QtPmJmYSwgZmN4cC0+ZmN4cF90YWcpOworCWJmYV9mY3hwX3B1dChmY3hwKTsKK30KKworLyoqCisgKiBTZW5kIGEgRkNYUCByZXF1ZXN0CisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqIEBwYXJhbVtpbl0JcnBvcnQJQkZBIHJwb3J0IHBvaW50ZXIuIENvdWxkIGJlIGxlZnQgTlVMTCBmb3IgV0tBIHJwb3J0cworICogQHBhcmFtW2luXQl2Zl9pZAl2aXJ0dWFsIEZhYnJpYyBJRAorICogQHBhcmFtW2luXQlscF90YWcgIGxwb3J0IHRhZworICogQHBhcmFtW2luXQljdHMJdXNlIENvbnRpbm91cyBzZXF1ZW5jZQorICogQHBhcmFtW2luXQljb3MJZmMgQ2xhc3Mgb2YgU2VydmljZQorICogQHBhcmFtW2luXQlyZXFsZW4JcmVxdWVzdCBsZW5ndGgsIGRvZXMgbm90IGluY2x1ZGUgRkNIUyBsZW5ndGgKKyAqIEBwYXJhbVtpbl0JZmNocwlmYyBIZWFkZXIgUG9pbnRlci4gVGhlIGhlYWRlciBjb250ZW50IHdpbGwgYmUgY29waWVkCisgKgkJCWluIGJ5IEJGQS4KKyAqCisgKiBAcGFyYW1baW5dCWNiZm4JY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiByZWNlaXZpbmcKKyAqIAkJCQkJCQkJdGhlIHJlc3BvbnNlCisgKiBAcGFyYW1baW5dCWNiYXJnCWFyZyBmb3IgY2JmbgorICogQHBhcmFtW2luXQlyc3BfdGltZW91dAorICoJCQlyZXNwb25zZSB0aW1lb3V0CisgKgorICogQHJldHVybgkJYmZhX3N0YXR1c190CisgKi8KK3ZvaWQKK2JmYV9mY3hwX3NlbmQoc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCXUxNiB2Zl9pZCwgdTggbHBfdGFnLCBiZmFfYm9vbGVhbl90IGN0cywgZW51bSBmY19jb3MgY29zLAorCQl1MzIgcmVxbGVuLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCBiZmFfY2JfZmN4cF9zZW5kX3QgY2JmbiwKKwkJdm9pZCAqY2JhcmcsIHUzMiByc3BfbWF4bGVuLCB1OCByc3BfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYmZhX3MJCQkqYmZhICA9IGZjeHAtPmZjeHBfbW9kLT5iZmE7CisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MJKnJlcWkgPSAmZmN4cC0+cmVxX2luZm87CisJc3RydWN0IGJmYV9mY3hwX3JzcF9pbmZvX3MJKnJzcGkgPSAmZmN4cC0+cnNwX2luZm87CisJc3RydWN0IGJmaV9mY3hwX3NlbmRfcmVxX3MJKnNlbmRfcmVxOworCisJYmZhX3RyYyhiZmEsIGZjeHAtPmZjeHBfdGFnKTsKKworCS8qKgorCSAqIHNldHVwIHJlcXVlc3QvcmVzcG9uc2UgaW5mbworCSAqLworCXJlcWktPmJmYV9ycG9ydCA9IHJwb3J0OworCXJlcWktPnZmX2lkID0gdmZfaWQ7CisJcmVxaS0+bHBfdGFnID0gbHBfdGFnOworCXJlcWktPmNsYXNzID0gY29zOworCXJzcGktPnJzcF90aW1lb3V0ID0gcnNwX3RpbWVvdXQ7CisJcmVxaS0+Y3RzID0gY3RzOworCXJlcWktPmZjaHMgPSAqZmNoczsKKwlyZXFpLT5yZXFfdG90X2xlbiA9IHJlcWxlbjsKKwlyc3BpLT5yc3BfbWF4bGVuID0gcnNwX21heGxlbjsKKwlmY3hwLT5zZW5kX2NiZm4gPSBjYmZuID8gY2JmbiA6IGJmYV9mY3hwX251bGxfY29tcDsKKwlmY3hwLT5zZW5kX2NiYXJnID0gY2Jhcmc7CisKKwkvKioKKwkgKiBJZiBubyByb29tIGluIENQRSBxdWV1ZSwgd2FpdCBmb3IKKwkgKi8KKwlzZW5kX3JlcSA9IGJmYV9yZXFxX25leHQoYmZhLCBCRkFfUkVRUV9GQ1hQKTsKKwlpZiAoIXNlbmRfcmVxKSB7CisJCWJmYV90cmMoYmZhLCBmY3hwLT5mY3hwX3RhZyk7CisJCWZjeHAtPnJlcXFfd2FpdGluZyA9IEJGQV9UUlVFOworCQliZmFfcmVxcV93YWl0KGJmYSwgQkZBX1JFUVFfRkNYUCwgJmZjeHAtPnJlcXFfd3FlKTsKKwkJcmV0dXJuOworCX0KKworCWJmYV9mY3hwX3F1ZXVlKGZjeHAsIHNlbmRfcmVxKTsKK30KKworLyoqCisgKiBBYm9ydCBhIEJGQSBGQ1hQCisgKgorICogQHBhcmFtW2luXQlmY3hwCUJGQSBmY3hwIHBvaW50ZXIKKyAqCisgKiBAcmV0dXJuIAkJdm9pZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3hwX2Fib3J0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKQoreworCWJmYV9hc3NlcnQoMCk7CisJcmV0dXJuIChCRkFfU1RBVFVTX09LKTsKK30KKwordm9pZAorYmZhX2ZjeHBfYWxsb2Nfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUsCisJCQliZmFfZmN4cF9hbGxvY19jYmZuX3QgYWxsb2NfY2Jmbiwgdm9pZCAqYWxsb2NfY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmbW9kLT5mY3hwX2ZyZWVfcSkpOworCisJd3FlLT5hbGxvY19jYmZuID0gYWxsb2NfY2JmbjsKKwl3cWUtPmFsbG9jX2NiYXJnID0gYWxsb2NfY2Jhcmc7CisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+d2FpdF9xKTsKK30KKwordm9pZAorYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCWJmYV9hc3NlcnQoYmZhX3FfaXNfb25fcSgmbW9kLT53YWl0X3EsIHdxZSkpOworCWxpc3RfZGVsKCZ3cWUtPnFlKTsKK30KKwordm9pZAorYmZhX2ZjeHBfZGlzY2FyZChzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCkKK3sKKwkvKioKKwkgKiBJZiB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgcXVldWUsIGNhbmNlbCByZXFxIHdhaXQKKwkgKiBhbmQgZnJlZSBmY3hwLgorCSAqLworCWlmIChmY3hwLT5yZXFxX3dhaXRpbmcpIHsKKwkJZmN4cC0+cmVxcV93YWl0aW5nID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93Y2FuY2VsKCZmY3hwLT5yZXFxX3dxZSk7CisJCWJmYV9mY3hwX2ZyZWUoZmN4cCk7CisJCXJldHVybjsKKwl9CisKKwlmY3hwLT5zZW5kX2NiZm4gPSBiZmFfZmN4cF9udWxsX2NvbXA7Cit9CisKKworCisvKioKKyAqICBoYWxfZmN4cF9wdWJsaWMgQkZBIEZDWFAgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV9mY3hwX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbXNnKQoreworCXN3aXRjaCAobXNnLT5taGRyLm1zZ19pZCkgeworCWNhc2UgQkZJX0ZDWFBfSTJIX1NFTkRfUlNQOgorCQloYWxfZmN4cF9zZW5kX2NvbXAoYmZhLCAoc3RydWN0IGJmaV9mY3hwX3NlbmRfcnNwX3MgKikgbXNnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit1MzIKK2JmYV9mY3hwX2dldF9tYXhyc3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJc3RydWN0IGJmYV9mY3hwX21vZF9zICptb2QgPSBCRkFfRkNYUF9NT0QoYmZhKTsKKworCXJldHVybiBtb2QtPnJzcF9wbGRfc3o7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9mY3hwX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RhNDkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZmN4cF9wcml2LmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1hQX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0ZDWFBfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfZmN4cC5oPgorCisjZGVmaW5lIEJGQV9GQ1hQX01JTiAgICAgCSgxKQorI2RlZmluZSBCRkFfRkNYUF9NQVhfSUJVRl9TWgkoMiAqIDEwMjQgKyAyNTYpCisjZGVmaW5lIEJGQV9GQ1hQX01BWF9MQlVGX1NaCSg0ICogMTAyNCArIDI1NikKKworc3RydWN0IGJmYV9mY3hwX21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhOwkJLyogIGJhY2twb2ludGVyIHRvIEJGQSAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2xpc3Q7CS8qICBhcnJheSBvZiBGQ1hQcyAqLworCXUxNiAgICAgICAgbnVtX2ZjeHBzOwkvKiAgbWF4IG51bSBGQ1hQIHJlcXVlc3RzICovCisJc3RydWN0IGxpc3RfaGVhZCBmY3hwX2ZyZWVfcTsJLyogIGZyZWUgRkNYUHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZjeHBfYWN0aXZlX3E7CS8qICBhY3RpdmUgRkNYUHMgKi8KKwl2b2lkCSpyZXFfcGxkX2xpc3Rfa3ZhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl1NjQgcmVxX3BsZF9saXN0X3BhOwkvKiAgbGlzdCBvZiBGQ1hQIHJlcSBwbGQgKi8KKwl2b2lkICpyc3BfcGxkX2xpc3Rfa3ZhOwkJLyogIGxpc3Qgb2YgRkNYUCByZXNwIHBsZCAqLworCXU2NCByc3BfcGxkX2xpc3RfcGE7CS8qICBsaXN0IG9mIEZDWFAgcmVzcCBwbGQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICB3YWl0X3E7CQkvKiAgd2FpdCBxdWV1ZSBmb3IgZnJlZSBmY3hwICovCisJdTMyCXJlcV9wbGRfc3o7CisJdTMyCXJzcF9wbGRfc3o7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5mY3hwX21vZCkKKyNkZWZpbmUgQkZBX0ZDWFBfRlJPTV9UQUcoX19tb2QsIF9fdGFnKQkoJihfX21vZCktPmZjeHBfbGlzdFtfX3RhZ10pCisKK3R5cGVkZWYgdm9pZCAgICAoKmZjeHBfc2VuZF9jYl90KSAoc3RydWN0IGJmYV9zICppb2MsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgIHZvaWQgKmNiX2FyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCisvKioKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYSBGQ1hQIHJlcXVlc3QKKyAqLworc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgeworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0OwkvKiAgUG9pbnRlciB0byB0aGUgYmZhIHJwb3J0IHRoYXQgd2FzCisJCQkJCSAqcmV0dXJuZWQgZnJvbSBiZmFfcnBvcnRfY3JlYXRlKCkuCisJCQkJCSAqVGhpcyBjb3VsZCBiZSBsZWZ0IE5VTEwgZm9yIFdLQSBvciBmb3IKKwkJCQkJICpGQ1hQIGludGVyYWN0aW9ucyBiZWZvcmUgdGhlIHJwb3J0CisJCQkJCSAqbmV4dXMgaXMgZXN0YWJsaXNoZWQKKwkJCQkJICovCisJc3RydWN0IGZjaHNfcyAgIGZjaHM7CS8qICByZXF1ZXN0IEZDIGhlYWRlciBzdHJ1Y3R1cmUgKi8KKwl1OCBjdHM7CQkvKiAgY29udGlub3VzIHNlcXVlbmNlICovCisJdTggY2xhc3M7CQkvKiAgRkMgY2xhc3MgZm9yIHRoZSByZXF1ZXN0L3Jlc3BvbnNlICovCisJdTE2IG1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUgKi8KKwl1MTYgdmZfaWQ7CQkvKiAgdnNhbiB0YWcgaWYgYXBwbGljYWJsZSAqLworCXU4CWxwX3RhZzsJCS8qICBscG9ydCB0YWcgKi8KKwl1MzIgcmVxX3RvdF9sZW47CS8qICByZXF1ZXN0IHBheWxvYWQgdG90YWwgbGVuZ3RoICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyB7CisJc3RydWN0IGZjaHNfcyByc3BfZmNoczsJCS8qICBSZXNwb25zZSBmcmFtZSdzIEZDIGhlYWRlciB3aWxsCisJCQkJCSAqIGJlICpzZW50IGJhY2sgaW4gdGhpcyBmaWVsZCAqLworCXU4ICAgICAgICAgcnNwX3RpbWVvdXQ7CS8qICB0aW1lb3V0IGluIHNlY29uZHMsIDAtbm8gcmVzcG9uc2UKKwkJCQkJICovCisJdTggICAgICAgICByc3ZkMlszXTsKKwl1MzIgICAgICAgIHJzcF9tYXhsZW47CS8qICBtYXggcmVzcG9uc2UgbGVuZ3RoIGV4cGVjdGVkICovCit9OworCitzdHJ1Y3QgYmZhX2ZjeHBfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CQkvKiAgZmN4cCBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QgICAgICAgIHNtOyAgICAgICAgICAgICAvKiAgc3RhdGUgbWFjaGluZSAqLworCXZvaWQgICAgICAgICAgIAkqY2FsbGVyOwkvKiAgZHJpdmVyIG9yIGZjcyAqLworCXN0cnVjdCBiZmFfZmN4cF9tb2RfcyAqZmN4cF9tb2Q7CisJCQkJCS8qICBiYWNrIHBvaW50ZXIgdG8gZmN4cCBtb2QgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgaW50ZXJuYWwgdGFnICovCisJc3RydWN0IGJmYV9mY3hwX3JlcV9pbmZvX3MgcmVxX2luZm87CisJCQkJCS8qICByZXF1ZXN0IGluZm8gKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcnNwX2luZm9fcyByc3BfaW5mbzsKKwkJCQkJLyogIHJlc3BvbnNlIGluZm8gKi8KKwl1OCAJdXNlX2lyZXFidWY7CS8qICB1c2UgaW50ZXJuYWwgcmVxIGJ1ZiAqLworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CS8qICB1c2UgaW50ZXJuYWwgcnNwIGJ1ZiAqLworCXUzMiAgICAgICAgbnJlcV9zZ2xlczsJLyogIG51bSByZXF1ZXN0IFNHTEVzICovCisJdTMyICAgICAgICBucnNwX3NnbGVzOwkvKiAgbnVtIHJlc3BvbnNlIFNHTEVzICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ19xOwkvKiAgU0cgcGFnZXMgZm9yIHJlcXVlc3QgYnVmICovCisJc3RydWN0IGxpc3RfaGVhZCByZXFfc2dwZ193cWU7CS8qICB3YWl0IHF1ZXVlIGZvciByZXEgU0cgcGFnZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnNwX3NncGdfcTsJLyogIFNHIHBhZ2VzIGZvciByZXNwb25zZSBidWYgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJzcF9zZ3BnX3dxZTsJLyogIHdhaXQgcXVldWUgZm9yIHJzcCBTRyBwYWdlICovCisKKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcmVxX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByZXFfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dhZGRyX3QgcnNwX3NnYV9jYmZuOworCQkJCQkvKiAgU0cgZWxlbSBhZGRyIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfZmN4cF9nZXRfc2dsZW5fdCByc3Bfc2dsZW5fY2JmbjsKKwkJCQkJLyogIFNHIGVsZW0gbGVuIHVzZXIgZnVuY3Rpb24gKi8KKwliZmFfY2JfZmN4cF9zZW5kX3Qgc2VuZF9jYmZuOyAgIC8qICBzZW5kIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwl2b2lkCQkqc2VuZF9jYmFyZzsJLyogIGNhbGxiYWNrIGFyZyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByZXFfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJlcSBTRyBlbGVtcyAqLworCXN0cnVjdCBiZmFfc2dlX3MgICByc3Bfc2dlW0JGQV9GQ1hQX01BWF9TR0VTXTsKKwkJCQkJLyogIHJzcCBTRyBlbGVtcyAqLworCXU4ICAgICAgICAgcnNwX3N0YXR1czsJLyogIGNvbXA6IHJzcCBzdGF0dXMgKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qICBjb21wOiBhY3R1YWwgcmVzcG9uc2UgbGVuICovCisJdTMyICAgICAgICByZXNpZHVlX2xlbjsJLyogIGNvbXA6IHJlc2lkdWFsIHJzcCBsZW5ndGggKi8KKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIHJzcF9mY2hzOwkvKiAgY29tcDogcmVzcG9uc2UgZmNocyAqLworCXN0cnVjdCBiZmFfY2JfcWVfcyAgICBoY2JfcWU7CS8qICBjb21wOiBjYWxsYmFjayBxZWxlbSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJcmVxcV93cWU7CisJYmZhX2Jvb2xlYW5fdAlyZXFxX3dhaXRpbmc7Cit9OworCisjZGVmaW5lIEJGQV9GQ1hQX1JFUV9QTEQoX2ZjeHApIAkoYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihfZmN4cCkpCisKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX0ZDSFMoX2ZjeHApIAkoJigoX2ZjeHApLT5yc3BfaW5mby5mY2hzKSkKKyNkZWZpbmUgQkZBX0ZDWFBfUlNQX1BMRChfZmN4cCkgCShiZmFfZmN4cF9nZXRfcnNwYnVmKF9mY3hwKSkKKworI2RlZmluZSBCRkFfRkNYUF9SRVFfUExEX1BBKF9mY3hwKQkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cmVxX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJlcV9wbGRfc3ogICogKF9mY3hwKS0+ZmN4cF90YWcpKQorCisjZGVmaW5lIEJGQV9GQ1hQX1JTUF9QTERfUEEoX2ZjeHApIAkJCQkJXAorCSgoX2ZjeHApLT5mY3hwX21vZC0+cnNwX3BsZF9saXN0X3BhICsJCQkJXAorCQkoKF9mY3hwKS0+ZmN4cF9tb2QtPnJzcF9wbGRfc3ogKiAoX2ZjeHApLT5mY3hwX3RhZykpCisKK3ZvaWQJYmZhX2ZjeHBfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX0ZDWFBfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2Z3aW1nX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMxMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfZndpbWdfcHJpdi5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GV0lNR19QUklWX0hfXworI2RlZmluZSBfX0JGQV9GV0lNR19QUklWX0hfXworCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWgkJMjU2CS8qICBGbGFzaCBjaHVuayBzaXplICovCisjZGVmaW5lCUJGSV9GTEFTSF9DSFVOS19TWl9XT1JEUwkoQkZJX0ZMQVNIX0NIVU5LX1NaL3NpemVvZih1MzIpKQorCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2VfY3Rfc2l6ZTsKK2V4dGVybiB1MzIgKmJmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZik7CitleHRlcm4gdTMyIGJmaV9pbWFnZV9jYl9zaXplOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2NiOworZXh0ZXJuIHUzMiAqYmZpX2ltYWdlX2N0OworCisjZW5kaWYgLyogX19CRkFfRldJTUdfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2h3X2NiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZTE0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jYi5jCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfcHJpdi5oPgorI2luY2x1ZGUgPGJmaS9iZmlfY2JyZWcuaD4KKwordm9pZAorYmZhX2h3Y2JfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwkqYmZhX3JlZ3MgPSAmYmZhLT5pb2NmYy5iZmFfcmVnczsKKwliZmFfb3NfYWRkcl90CQlrdmEgPSBiZmFfaW9jX2JhcjAoJmJmYS0+aW9jKTsKKwlpbnQgICAgICAgICAgICAgCWksIHEsIGZuID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJaWYgKGZuID09IDApIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjBfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4wX0lOVF9NU0spOworCX0gZWxzZSB7CisJCWJmYV9yZWdzLT5pbnRyX3N0YXR1cyA9IChrdmEgKyBIT1NURk4xX0lOVF9TVEFUVVMpOworCQliZmFfcmVncy0+aW50cl9tYXNrICAgPSAoa3ZhICsgSE9TVEZOMV9JTlRfTVNLKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZJX0lPQ19NQVhfQ1FTOyBpKyspIHsKKwkJLyoKKwkJICogQ1BFIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5jcGVfcV9waVtpXSA9IChrdmEgKyBDUEVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9jaVtpXSA9IChrdmEgKyBDUEVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5jcGVfcV9kZXB0aFtpXSA9IChrdmEgKyBDUEVfUV9ERVBUSChxKSk7CisKKwkJLyoKKwkJICogUk1FIHJlZ2lzdGVycworCQkgKi8KKwkJcSA9IENQRV9RX05VTShmbiwgaSk7CisJCWJmYV9yZWdzLT5ybWVfcV9waVtpXSA9IChrdmEgKyBSTUVfUV9QSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9jaVtpXSA9IChrdmEgKyBSTUVfUV9DSShxKSk7CisJCWJmYV9yZWdzLT5ybWVfcV9kZXB0aFtpXSA9IChrdmEgKyBSTUVfUV9ERVBUSChxKSk7CisJfQorfQorCit2b2lkCitiZmFfaHdjYl9yc3BxX2FjayhzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaHdjYl9yc3BxX2Fja19tc2l4KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsCisJCV9fSEZOX0lOVF9STUVfUTAgPDwgUk1FX1FfTlVNKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSwgcnNwcSkpOworfQorCit2b2lkCitiZmFfaHdjYl9tc2l4X2dldHZlY3Moc3RydWN0IGJmYV9zICpiZmEsIHUzMiAqbXNpeF92ZWNzX2JtYXAsCisJCSB1MzIgKm51bV92ZWNzLCB1MzIgKm1heF92ZWNfYml0KQoreworI2RlZmluZSBfX0hGTl9OVU1JTlRTCTEzCisJaWYgKGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKSA9PSAwKSB7CisJCSptc2l4X3ZlY3NfYm1hcCA9IChfX0hGTl9JTlRfQ1BFX1EwIHwgX19IRk5fSU5UX0NQRV9RMSB8CisJCQkJICAgX19IRk5fSU5UX0NQRV9RMiB8IF9fSEZOX0lOVF9DUEVfUTMgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTAgfCBfX0hGTl9JTlRfUk1FX1ExIHwKKwkJCQkgICBfX0hGTl9JTlRfUk1FX1EyIHwgX19IRk5fSU5UX1JNRV9RMyB8CisJCQkJICAgX19IRk5fSU5UX01CT1hfTFBVMCk7CisJCSptYXhfdmVjX2JpdCA9IF9fSEZOX0lOVF9NQk9YX0xQVTA7CisJfSBlbHNlIHsKKwkJKm1zaXhfdmVjc19ibWFwID0gKF9fSEZOX0lOVF9DUEVfUTQgfCBfX0hGTl9JTlRfQ1BFX1E1IHwKKwkJCQkgICBfX0hGTl9JTlRfQ1BFX1E2IHwgX19IRk5fSU5UX0NQRV9RNyB8CisJCQkJICAgX19IRk5fSU5UX1JNRV9RNCB8IF9fSEZOX0lOVF9STUVfUTUgfAorCQkJCSAgIF9fSEZOX0lOVF9STUVfUTYgfCBfX0hGTl9JTlRfUk1FX1E3IHwKKwkJCQkgICBfX0hGTl9JTlRfTUJPWF9MUFUxKTsKKwkJKm1heF92ZWNfYml0ID0gX19IRk5fSU5UX01CT1hfTFBVMTsKKwl9CisKKwkqbXNpeF92ZWNzX2JtYXAgfD0gKF9fSEZOX0lOVF9FUlJfRU1DIHwgX19IRk5fSU5UX0VSUl9MUFUwIHwKKwkJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisJKm51bV92ZWNzID0gX19IRk5fTlVNSU5UUzsKK30KKworLyoqCisgKiBObyBzcGVjaWFsIHNldHVwIHJlcXVpcmVkIGZvciBjcm9zc2JvdyAtLSB2ZWN0b3IgYXNzaWdubWVudHMgYXJlIGltcGxpY2l0LgorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwlpbnQgaTsKKworCWJmYV9hc3NlcnQoKG52ZWNzID09IDEpIHx8IChudmVjcyA9PSBfX0hGTl9OVU1JTlRTKSk7CisKKwliZmEtPm1zaXgubnZlY3MgPSBudmVjczsKKwlpZiAobnZlY3MgPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ0JfTUFYOyBpKyspCisJCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2FsbDsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IEJGQV9NU0lYX0NQRV9RMDsgaSA8PSBCRkFfTVNJWF9DUEVfUTc7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yZXFxOworCisJZm9yIChpID0gQkZBX01TSVhfUk1FX1EwOyBpIDw9IEJGQV9NU0lYX1JNRV9RNzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JzcHE7CisKKwlmb3IgKDsgaSA8IEJGQV9NU0lYX0NCX01BWDsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X2xwdV9lcnI7Cit9CisKKy8qKgorICogQ3Jvc3Nib3cgLS0gZHVtbXksIGludGVycnVwdHMgYXJlIG1hc2tlZAorICovCit2b2lkCitiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3ZvaWQKK2JmYV9od2NiX21zaXhfdW5pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIE5vIHNwZWNpYWwgZW5hYmxlL2Rpc2FibGUgLS0gdmVjdG9yIGFzc2lnbm1lbnRzIGFyZSBpbXBsaWNpdC4KKyAqLwordm9pZAorYmZhX2h3Y2JfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG1zaXgpCit7CisJYmZhLT5pb2NmYy5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y2JfcnNwcV9hY2tfbXNpeDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9od19jdC5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWFlNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaHdfY3QuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhX3ByaXYuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0NGQ19DVCk7CisKK3N0YXRpYyB1MzIgX19jdF9tc2l4X2Vycl92ZWNfcmVnW10gPSB7CisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjAsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjEsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjIsCisJSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjMsCit9OworCitzdGF0aWMgdm9pZAorYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4LCBpbnQgdmVjKQoreworCWludCBmbiA9IGJmYV9pb2NfcGNpZm4oJmJmYS0+aW9jKTsKKwliZmFfb3NfYWRkcl90IGt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCisJaWYgKG1zaXgpCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgdmVjKTsKKwllbHNlCisJCWJmYV9yZWdfd3JpdGUoa3ZhICsgX19jdF9tc2l4X2Vycl92ZWNfcmVnW2ZuXSwgMCk7Cit9CisKKy8qKgorICogRHVtbXkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGhhbmRsaW5nIHNwdXJpb3VzIGludGVycnVwdCBkdXJpbmcgY2hpcC1yZWluaXQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaHdjdF9tc2l4X2R1bW15KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworfQorCit2b2lkCitiZmFfaHdjdF9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcmVnc19zCSpiZmFfcmVncyA9ICZiZmEtPmlvY2ZjLmJmYV9yZWdzOworCWJmYV9vc19hZGRyX3QJCWt2YSA9IGJmYV9pb2NfYmFyMCgmYmZhLT5pb2MpOworCWludCAgICAgICAgICAgICAJaSwgcSwgZm4gPSBiZmFfaW9jX3BjaWZuKCZiZmEtPmlvYyk7CisKKwlpZiAoZm4gPT0gMCkgeworCQliZmFfcmVncy0+aW50cl9zdGF0dXMgPSAoa3ZhICsgSE9TVEZOMF9JTlRfU1RBVFVTKTsKKwkJYmZhX3JlZ3MtPmludHJfbWFzayAgID0gKGt2YSArIEhPU1RGTjBfSU5UX01TSyk7CisJfSBlbHNlIHsKKwkJYmZhX3JlZ3MtPmludHJfc3RhdHVzID0gKGt2YSArIEhPU1RGTjFfSU5UX1NUQVRVUyk7CisJCWJmYV9yZWdzLT5pbnRyX21hc2sgICA9IChrdmEgKyBIT1NURk4xX0lOVF9NU0spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01BWF9DUVM7IGkrKykgeworCQkvKgorCQkgKiBDUEUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX3BpW2ldID0gKGt2YSArIENQRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2NpW2ldID0gKGt2YSArIENQRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPmNwZV9xX2RlcHRoW2ldID0gKGt2YSArIENQRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+Y3BlX3FfY3RybFtpXSA9IChrdmEgKyBDUEVfUUNUUkxfUShxIDw8IDUpKTsKKworCQkvKgorCQkgKiBSTUUgcmVnaXN0ZXJzCisJCSAqLworCQlxID0gQ1BFX1FfTlVNKGZuLCBpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX3BpW2ldID0gKGt2YSArIFJNRV9QSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2NpW2ldID0gKGt2YSArIFJNRV9DSV9QVFJfUShxIDw8IDUpKTsKKwkJYmZhX3JlZ3MtPnJtZV9xX2RlcHRoW2ldID0gKGt2YSArIFJNRV9ERVBUSF9RKHEgPDwgNSkpOworCQliZmFfcmVncy0+cm1lX3FfY3RybFtpXSA9IChrdmEgKyBSTUVfUUNUUkxfUShxIDw8IDUpKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSkKK3sKKwl1MzIJcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGJmYS0+aW9jZmMuYmZhX3JlZ3Mucm1lX3FfY3RybFtyc3BxXSk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2N0cmxbcnNwcV0sIHIzMik7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJIHUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpCit7CisJKm1zaXhfdmVjc19ibWFwID0gKDEgPDwgQkZBX01TSVhfQ1RfTUFYKSAtIDE7CisJKm1heF92ZWNfYml0ID0gKDEgPDwgKEJGQV9NU0lYX0NUX01BWCAtIDEpKTsKKwkqbnVtX3ZlY3MgPSBCRkFfTVNJWF9DVF9NQVg7Cit9CisKKy8qKgorICogU2V0dXAgTVNJLVggdmVjdG9yIGZvciBjYXRhcHVsdAorICovCit2b2lkCitiZmFfaHdjdF9tc2l4X2luaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCBudmVjcykKK3sKKwliZmFfYXNzZXJ0KChudmVjcyA9PSAxKSB8fCAobnZlY3MgPT0gQkZBX01TSVhfQ1RfTUFYKSk7CisJYmZhX3RyYyhiZmEsIG52ZWNzKTsKKworCWJmYS0+bXNpeC5udmVjcyA9IG52ZWNzOworCWJmYV9od2N0X21zaXhfdW5pbnN0YWxsKGJmYSk7Cit9CisKK3ZvaWQKK2JmYV9od2N0X21zaXhfaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgaTsKKworCWlmIChiZmEtPm1zaXgubnZlY3MgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGJmYS0+bXNpeC5udmVjcyA9PSAxKSB7CisJCWZvciAoaSA9IDA7IGkgPCBCRkFfTVNJWF9DVF9NQVg7IGkrKykKKwkJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX21zaXhfYWxsOworCQlyZXR1cm47CisJfQorCisJZm9yIChpID0gQkZBX01TSVhfQ1BFX1EwOyBpIDw9IEJGQV9NU0lYX0NQRV9RMzsgaSsrKQorCQliZmEtPm1zaXguaGFuZGxlcltpXSA9IGJmYV9tc2l4X3JlcXE7CisKKwlmb3IgKDsgaSA8PSBCRkFfTVNJWF9STUVfUTM7IGkrKykKKwkJYmZhLT5tc2l4LmhhbmRsZXJbaV0gPSBiZmFfbXNpeF9yc3BxOworCisJYmZhX2Fzc2VydChpID09IEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYS0+bXNpeC5oYW5kbGVyW0JGQV9NU0lYX0xQVV9FUlJdID0gYmZhX21zaXhfbHB1X2VycjsKK30KKwordm9pZAorYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkZBX01TSVhfQ1RfTUFYOyBpKyspCisJCWJmYS0+bXNpeC5oYW5kbGVyW2ldID0gYmZhX2h3Y3RfbXNpeF9kdW1teTsKK30KKworLyoqCisgKiBFbmFibGUgTVNJLVggdmVjdG9ycworICovCit2b2lkCitiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfdHJjKGJmYSwgMCk7CisJYmZhX2h3Y3RfbXNpeF9scHVfZXJyX3NldChiZmEsIG1zaXgsIEJGQV9NU0lYX0xQVV9FUlIpOworCWJmYV9pb2NfaXNyX21vZGVfc2V0KCZiZmEtPmlvYywgbXNpeCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTEyNTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2NicmVnLmg+CisjaW5jbHVkZSA8YmZhX3BvcnRfcHJpdi5oPgorI2luY2x1ZGUgPGJmYV9pbnRyX3ByaXYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgSU5UUik7CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9lcnJpbnQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBpbnRyKQoreworCWJmYV9pb2NfZXJyb3JfaXNyKCZiZmEtPmlvYyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbXNpeF9scHUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX2lvY19tYm94X2lzcigmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfbXNpeF9hbGwoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpCit7CisJYmZhX2ludHgoYmZhKTsKK30KKworLyoqCisgKiAgaGFsX2ludHJfYXBpCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pbnR4KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50ciwgcWludHI7CisJaW50ICAgICAgICAgICAgIHF1ZXVlOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBSTUUgY29tcGxldGlvbiBxdWV1ZSBpbnRlcnJ1cHQKKwkgKi8KKwlxaW50ciA9IGludHIgJiBfX0hGTl9JTlRfUk1FX01BU0s7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzLCBxaW50cik7CisKKwlmb3IgKHF1ZXVlID0gMDsgcXVldWUgPCBCRklfSU9DX01BWF9DUVNfQVNJQzsgcXVldWUgKyspIHsKKwkJaWYgKGludHIgJiAoX19IRk5fSU5UX1JNRV9RMCA8PCBxdWV1ZSkpCisJCQliZmFfbXNpeF9yc3BxKGJmYSwgcXVldWUgJiAoQkZJX0lPQ19NQVhfQ1FTIC0gMSkpOworCX0KKwlpbnRyICY9IH5xaW50cjsKKwlpZiAoIWludHIpCisJCXJldHVybiBCRkFfVFJVRTsKKworCS8qKgorCSAqIENQRSBjb21wbGV0aW9uIHF1ZXVlIGludGVycnVwdAorCSAqLworCXFpbnRyID0gaW50ciAmIF9fSEZOX0lOVF9DUEVfTUFTSzsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIHFpbnRyKTsKKworCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IEJGSV9JT0NfTUFYX0NRU19BU0lDOyBxdWV1ZSsrKSB7CisJCWlmIChpbnRyICYgKF9fSEZOX0lOVF9DUEVfUTAgPDwgcXVldWUpKQorCQkJYmZhX21zaXhfcmVxcShiZmEsIHF1ZXVlICYgKEJGSV9JT0NfTUFYX0NRUyAtIDEpKTsKKwl9CisJaW50ciAmPSB+cWludHI7CisJaWYgKCFpbnRyKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwliZmFfbXNpeF9scHVfZXJyKGJmYSwgaW50cik7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXUzMiAgICAgICAgaW50cl91bm1hc2s7CisJaW50ICAgICAgICAgICAgIHBjaV9mdW5jID0gYmZhX2lvY19wY2lmbigmYmZhLT5pb2MpOworCisJYmZhX3RyYyhiZmEsIHBjaV9mdW5jKTsKKworCWJmYV9tc2l4X2luc3RhbGwoYmZhKTsKKwlpbnRyX3VubWFzayA9IChfX0hGTl9JTlRfRVJSX0VNQyB8IF9fSEZOX0lOVF9FUlJfTFBVMCB8CisJCSAgICAgICBfX0hGTl9JTlRfRVJSX0xQVTEgfCBfX0hGTl9JTlRfRVJSX1BTUyk7CisKKwlpZiAocGNpX2Z1bmMgPT0gMCkKKwkJaW50cl91bm1hc2sgfD0gKF9fSEZOX0lOVF9DUEVfUTAgfCBfX0hGTl9JTlRfQ1BFX1ExIHwKKwkJCQlfX0hGTl9JTlRfQ1BFX1EyIHwgX19IRk5fSU5UX0NQRV9RMyB8CisJCQkJX19IRk5fSU5UX1JNRV9RMCB8IF9fSEZOX0lOVF9STUVfUTEgfAorCQkJCV9fSEZOX0lOVF9STUVfUTIgfCBfX0hGTl9JTlRfUk1FX1EzIHwKKwkJCQlfX0hGTl9JTlRfTUJPWF9MUFUwKTsKKwllbHNlCisJCWludHJfdW5tYXNrIHw9IChfX0hGTl9JTlRfQ1BFX1E0IHwgX19IRk5fSU5UX0NQRV9RNSB8CisJCQkJX19IRk5fSU5UX0NQRV9RNiB8IF9fSEZOX0lOVF9DUEVfUTcgfAorCQkJCV9fSEZOX0lOVF9STUVfUTQgfCBfX0hGTl9JTlRfUk1FX1E1IHwKKwkJCQlfX0hGTl9JTlRfUk1FX1E2IHwgX19IRk5fSU5UX1JNRV9RNyB8CisJCQkJX19IRk5fSU5UX01CT1hfTFBVMSk7CisKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9zdGF0dXMsIGludHJfdW5tYXNrKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCB+aW50cl91bm1hc2spOworCWJmYV9pc3JfbW9kZV9zZXQoYmZhLCBiZmEtPm1zaXgubnZlY3MgIT0gMCk7Cit9CisKK3ZvaWQKK2JmYV9pc3JfZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfaXNyX21vZGVfc2V0KGJmYSwgQkZBX0ZBTFNFKTsKKwliZmFfcmVnX3dyaXRlKGJmYS0+aW9jZmMuYmZhX3JlZ3MuaW50cl9tYXNrLCAtMUwpOworCWJmYV9tc2l4X3VuaW5zdGFsbChiZmEpOworfQorCit2b2lkCitiZmFfbXNpeF9yZXFxKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcWlkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgCQkqd2FpdHEsICpxZSwgKnFlbjsKKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCSp3cWU7CisKKwlxaWQgJj0gKEJGSV9JT0NfTUFYX0NRUyAtIDEpOworCisJd2FpdHEgPSBiZmFfcmVxcShiZmEsIHFpZCk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sIHdhaXRxKSB7CisJCS8qKgorCQkgKiBDYWxsYmFjayBvbmx5IGFzIGxvbmcgYXMgdGhlcmUgaXMgcm9vbSBpbiByZXF1ZXN0IHF1ZXVlCisJCSAqLworCQlpZiAoYmZhX3JlcXFfZnVsbChiZmEsIHFpZCkpCisJCQlicmVhazsKKworCQlsaXN0X2RlbChxZSk7CisJCXdxZSA9IChzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICopIHFlOworCQl3cWUtPnFyZXN1bWUod3FlLT5jYmFyZyk7CisJfQorfQorCit2b2lkCitiZmFfaXNyX3VuaGFuZGxlZChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfY2xhc3MpOworCWJmYV90cmMoYmZhLCBtLT5taGRyLm1zZ19pZCk7CisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXRhZy5pMmh0b2spOworCWJmYV9hc3NlcnQoMCk7CisJYmZhX3RyY19zdG9wKGJmYS0+dHJjbW9kKTsKK30KKwordm9pZAorYmZhX21zaXhfcnNwcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcF9xaWQpCit7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptOworCXUzMiAgICAgICAgcGksIGNpOworCisJYmZhX3RyY19mcChiZmEsIHJzcF9xaWQpOworCisJcnNwX3FpZCAmPSAoQkZJX0lPQ19NQVhfQ1FTIC0gMSk7CisKKwliZmEtPmlvY2ZjLmh3aWYuaHdfcnNwcV9hY2soYmZhLCByc3BfcWlkKTsKKworCWNpID0gYmZhX3JzcHFfY2koYmZhLCByc3BfcWlkKTsKKwlwaSA9IGJmYV9yc3BxX3BpKGJmYSwgcnNwX3FpZCk7CisKKwliZmFfdHJjX2ZwKGJmYSwgY2kpOworCWJmYV90cmNfZnAoYmZhLCBwaSk7CisKKwlpZiAoYmZhLT5ybWVfcHJvY2VzcykgeworCQl3aGlsZSAoY2kgIT0gcGkpIHsKKwkJCW0gPSBiZmFfcnNwcV9lbGVtKGJmYSwgcnNwX3FpZCwgY2kpOworCQkJYmZhX2Fzc2VydF9mcChtLT5taGRyLm1zZ19jbGFzcyA8IEJGSV9NQ19NQVgpOworCisJCQliZmFfaXNyc1ttLT5taGRyLm1zZ19jbGFzc10gKGJmYSwgbSk7CisKKwkJCUNRX0lOQ1IoY2ksIGJmYS0+aW9jZmMuY2ZnLmRydmNmZy5udW1fcnNwcV9lbGVtcyk7CisJCX0KKwl9CisKKwkvKioKKwkgKiB1cGRhdGUgQ0kKKwkgKi8KKwliZmFfcnNwcV9jaShiZmEsIHJzcF9xaWQpID0gcGk7CisJYmZhX3JlZ193cml0ZShiZmEtPmlvY2ZjLmJmYV9yZWdzLnJtZV9xX2NpW3JzcF9xaWRdLCBwaSk7CisJYmZhX29zX21taW93YigpOworfQorCit2b2lkCitiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKQoreworCXUzMiBpbnRyOworCisJaW50ciA9IGJmYV9yZWdfcmVhZChiZmEtPmlvY2ZjLmJmYV9yZWdzLmludHJfc3RhdHVzKTsKKworCWlmIChpbnRyICYgKF9fSEZOX0lOVF9NQk9YX0xQVTAgfCBfX0hGTl9JTlRfTUJPWF9MUFUxKSkKKwkJYmZhX21zaXhfbHB1KGJmYSk7CisKKwlpZiAoaW50ciAmIChfX0hGTl9JTlRfRVJSX0VNQyB8CisJCSAgICBfX0hGTl9JTlRfRVJSX0xQVTAgfCBfX0hGTl9JTlRfRVJSX0xQVTEgfAorCQkgICAgX19IRk5fSU5UX0VSUl9QU1MpKQorCQliZmFfbXNpeF9lcnJpbnQoYmZhLCBpbnRyKTsKK30KKwordm9pZAorYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpCit7CisJYmZhX2lzcnNbbWNdID0gaXNyX2Z1bmM7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pbnRyX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2U2ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW50cl9wcml2LmgKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9JTlRSX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0lOVFJfUFJJVl9IX18KKworLyoqCisgKiBNZXNzYWdlIGhhbmRsZXIKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lzcl9mdW5jX3QpIChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSk7Cit2b2lkIGJmYV9pc3JfdW5oYW5kbGVkKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKTsKK3ZvaWQgYmZhX2lzcl9iaW5kKGVudW0gYmZpX21jbGFzcyBtYywgYmZhX2lzcl9mdW5jX3QgaXNyX2Z1bmMpOworCisKKyNkZWZpbmUgYmZhX3JlcXFfcGkoX19iZmEsIF9fcmVxcSkJKF9fYmZhKS0+aW9jZmMucmVxX2NxX3BpW19fcmVxcV0KKyNkZWZpbmUgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkJCQkJCVwKKwkqKHUzMiAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3Ffc2hhZG93X2NpW19fcmVxcV0ua3ZhKQorCisjZGVmaW5lIGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkJCQkJXAorCSgoKGJmYV9yZXFxX3BpKF9fYmZhLCBfX3JlcXEpICsgMSkgJgkJCVwKKwkgICgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSkpID09CVwKKwkgYmZhX3JlcXFfY2koX19iZmEsIF9fcmVxcSkpCisKKyNkZWZpbmUgYmZhX3JlcXFfbmV4dChfX2JmYSwgX19yZXFxKQkJCQlcCisJKGJmYV9yZXFxX2Z1bGwoX19iZmEsIF9fcmVxcSkgPyBOVUxMIDoJCQlcCisJICgodm9pZCAqKSgoc3RydWN0IGJmaV9tc2dfcyAqKSgoX19iZmEpLT5pb2NmYy5yZXFfY3FfYmFbX19yZXFxXS5rdmEpIFwKKwkJCSAgKyBiZmFfcmVxcV9waSgoX19iZmEpLCAoX19yZXFxKSkpKSkKKworI2RlZmluZSBiZmFfcmVxcV9wcm9kdWNlKF9fYmZhLCBfX3JlcXEpCWRvIHsJCQkJXAorCShfX2JmYSktPmlvY2ZjLnJlcV9jcV9waVtfX3JlcXFdKys7CQkJCVwKKwkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSAmPQkJCQlcCisJCSgoX19iZmEpLT5pb2NmYy5jZmcuZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zIC0gMSk7ICAgICAgXAorCWJmYV9yZWdfd3JpdGUoKF9fYmZhKS0+aW9jZmMuYmZhX3JlZ3MuY3BlX3FfcGlbX19yZXFxXSwJCVwKKwkJCQkoX19iZmEpLT5pb2NmYy5yZXFfY3FfcGlbX19yZXFxXSk7ICAgICAgXAorCWJmYV9vc19tbWlvd2IoKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yc3BxX3BpKF9fYmZhLCBfX3JzcHEpCQkJCQlcCisJKih1MzIgKikoKF9fYmZhKS0+aW9jZmMucnNwX2NxX3NoYWRvd19waVtfX3JzcHFdLmt2YSkKKworI2RlZmluZSBiZmFfcnNwcV9jaShfX2JmYSwgX19yc3BxKQkoX19iZmEpLT5pb2NmYy5yc3BfY3FfY2lbX19yc3BxXQorI2RlZmluZSBiZmFfcnNwcV9lbGVtKF9fYmZhLCBfX3JzcHEsIF9fY2kpCQkJCVwKKwkmKChzdHJ1Y3QgYmZpX21zZ19zICopKChfX2JmYSktPmlvY2ZjLnJzcF9jcV9iYVtfX3JzcHFdLmt2YSkpW19fY2ldCisKKyNkZWZpbmUgQ1FfSU5DUihfX2luZGV4LCBfX3NpemUpCQkJCQlcCisJCQkoX19pbmRleCkrKzsgKF9faW5kZXgpICY9ICgoX19zaXplKSAtIDEpCisKKy8qKgorICogUXVldWUgZWxlbWVudCB0byB3YWl0IGZvciByb29tIGluIHJlcXVlc3QgcXVldWUuIEZJRk8gb3JkZXIgaXMKKyAqIG1haW50YWluZWQgd2hlbiBmdWxsZmlsbGluZyByZXF1ZXN0cy4KKyAqLworc3RydWN0IGJmYV9yZXFxX3dhaXRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CisJdm9pZAkJKCpxcmVzdW1lKSAodm9pZCAqY2JhcmcpOworCXZvaWQJCSpjYmFyZzsKK307CisKKy8qKgorICogQ2lyY3VsYXIgcXVldWUgdXNhZ2UgYXNzaWdubWVudHMKKyAqLworZW51bSB7CisJQkZBX1JFUVFfSU9DCT0gMCwJLyogIGFsbCBsb3ctcHJpb3JpdHkgSU9DIG1zZ3MJKi8KKwlCRkFfUkVRUV9GQ1hQCT0gMCwJLyogIGFsbCBGQ1hQIG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX0xQUwk9IDAsCS8qICBhbGwgbHBvcnQgc2VydmljZSBtc2dzCSovCisJQkZBX1JFUVFfUE9SVAk9IDAsCS8qICBhbGwgcG9ydCBtZXNzYWdlcwkJKi8KKwlCRkFfUkVRUV9GTEFTSAk9IDAsCS8qICBmb3IgZmxhc2ggbW9kdWxlCQkqLworCUJGQV9SRVFRX0RJQUcJPSAwLAkvKiAgZm9yIGRpYWcgbW9kdWxlCQkqLworCUJGQV9SRVFRX1JQT1JUCT0gMCwJLyogIGFsbCBwb3J0IG1lc3NhZ2VzCQkqLworCUJGQV9SRVFRX1NCT09UCT0gMCwJLyogIGFsbCBzYW4gYm9vdCBtZXNzYWdlcwkqLworCUJGQV9SRVFRX1FPU19MTwk9IDEsCS8qICBhbGwgbG93IHByaW9yaXR5IElPCSovCisJQkZBX1JFUVFfUU9TX01ECT0gMiwJLyogIGFsbCBtZWRpdW0gcHJpb3JpdHkgSU8JKi8KKwlCRkFfUkVRUV9RT1NfSEkJPSAzLAkvKiAgYWxsIGhpZ2ggcHJpb3JpdHkgSU8JKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3JlcXFfd2luaXQoc3RydWN0IGJmYV9yZXFxX3dhaXRfcyAqd3FlLCB2b2lkICgqcXJlc3VtZSkgKHZvaWQgKmNiYXJnKSwKKwkJCXZvaWQgKmNiYXJnKQoreworCXdxZS0+cXJlc3VtZSA9IHFyZXN1bWU7CisJd3FlLT5jYmFyZyA9IGNiYXJnOworfQorCisjZGVmaW5lIGJmYV9yZXFxKF9fYmZhLCBfX3JlcXEpCSYoX19iZmEpLT5yZXFxX3dhaXRxW19fcmVxcV0KKworLyoqCisgKiBzdGF0aWMgaW5saW5lIHZvaWQKKyAqIGJmYV9yZXFxX3dhaXQoc3RydWN0IGJmYV9zICpiZmEsIGludCByZXFxLCBzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zICp3cWUpCisgKi8KKyNkZWZpbmUgYmZhX3JlcXFfd2FpdChfX2JmYSwgX19yZXFxLCBfX3dxZSkgZG8gewkJCVwKKwkJCQkJCQkJCVwKKwkJc3RydWN0IGxpc3RfaGVhZCAqd2FpdHEgPSBiZmFfcmVxcShfX2JmYSwgX19yZXFxKTsgICAgICBcCisJCQkJCQkJCQlcCisJCWJmYV9hc3NlcnQoKChfX3JlcXEpIDwgQkZJX0lPQ19NQVhfQ1FTKSk7ICAgICAgXAorCQliZmFfYXNzZXJ0KChfX3dxZSktPnFyZXN1bWUgJiYgKF9fd3FlKS0+Y2JhcmcpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwkJbGlzdF9hZGRfdGFpbCgmKF9fd3FlKS0+cWUsIHdhaXRxKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9yZXFxX3djYW5jZWwoX193cWUpCWxpc3RfZGVsKCYoX193cWUpLT5xZSkKKworI2VuZGlmIC8qIF9fQkZBX0lOVFJfUFJJVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5MzQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5jCkBAIC0wLDAgKzEsMjM4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGJmYV9md2ltZ19wcml2Lmg+CisjaW5jbHVkZSA8YmZhX3RyY21vZF9wcml2Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2N0cmVnLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW4uaD4KKyNpbmNsdWRlIDxsb2cvYmZhX2xvZ19oYWwuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBJT0MpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NfVE9WCQkyMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfVE9WCQkxMDAwCS8qIG1zZWNzICovCisjZGVmaW5lIEJGQV9JT0NfSEJfRkFJTF9NQVgJNAorI2RlZmluZSBCRkFfSU9DX0hXSU5JVF9NQVgJMgorI2RlZmluZSBCRkFfSU9DX0ZXSU1HX01JTlNaICAgICAoMTYgKiAxMDI0KQorI2RlZmluZSBCRkFfSU9DX1RPVl9SRUNPVkVSCShCRkFfSU9DX0hCX0ZBSUxfTUFYICogQkZBX0lPQ19IQl9UT1YgXAorCQkJCSsgQkZBX0lPQ19UT1YpCisKKyNkZWZpbmUgYmZhX2lvY190aW1lcl9zdGFydChfX2lvYykJCQkJCVwKKwliZmFfdGltZXJfYmVnaW4oKF9faW9jKS0+dGltZXJfbW9kLCAmKF9faW9jKS0+aW9jX3RpbWVyLAlcCisJCQliZmFfaW9jX3RpbWVvdXQsIChfX2lvYyksIEJGQV9JT0NfVE9WKQorI2RlZmluZSBiZmFfaW9jX3RpbWVyX3N0b3AoX19pb2MpICAgYmZhX3RpbWVyX3N0b3AoJihfX2lvYyktPmlvY190aW1lcikKKworI2RlZmluZSBCRkFfREJHX0ZXVFJDX0VOVFMJKEJGSV9JT0NfVFJDX0VOVFMpCisjZGVmaW5lIEJGQV9EQkdfRldUUkNfTEVOCQkJCQlcCisJKEJGQV9EQkdfRldUUkNfRU5UUyAqIHNpemVvZihzdHJ1Y3QgYmZhX3RyY19zKSArCVwKKwkgKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcykgLQkJCVwKKwkgIEJGQV9UUkNfTUFYICogc2l6ZW9mKHN0cnVjdCBiZmFfdHJjX3MpKSkKKyNkZWZpbmUgQkZBX0RCR19GV1RSQ19PRkYoX2ZuKQkoQkZJX0lPQ19UUkNfT0ZGICsgQkZBX0RCR19GV1RSQ19MRU4gKiAoX2ZuKSkKKyNkZWZpbmUgYmZhX2lvY19zdGF0cyhfaW9jLCBfc3RhdHMpCShfaW9jKS0+c3RhdHMuX3N0YXRzICsrCisKKyNkZWZpbmUgQkZBX0ZMQVNIX0NIVU5LX05PKG9mZikgICAgICAgICAob2ZmIC8gQkZJX0ZMQVNIX0NIVU5LX1NaX1dPUkRTKQorI2RlZmluZSBCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKG9mZikgIChvZmYgJSBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCisjZGVmaW5lIEJGQV9GTEFTSF9DSFVOS19BRERSKGNodW5rbm8pICAgKGNodW5rbm8gKiBCRklfRkxBU0hfQ0hVTktfU1pfV09SRFMpCitiZmFfYm9vbGVhbl90ICAgYmZhX2F1dG9fcmVjb3ZlciA9IEJGQV9GQUxTRTsKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmJmYSwKKwkJCQkgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfdGltZW91dCh2b2lkICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX3NlbmRfZGlzYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2Nfc2VuZF9nZXRhdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9tb25pdG9yKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19oYl9zdG9wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19yZXNldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgZm9yY2UpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbWJveF9wb2xsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19tYm94X2hiZmFpbChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2lvY19maXJtd2FyZV9sb2NrKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvY19maXJtd2FyZV91bmxvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9jX2Rpc2FibGVfY29tcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2NfbHB1X3N0b3Aoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworLyoqCisgKiAgYmZhX2lvY19zbQorICovCisKKy8qKgorICogSU9DIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gaW9jX2V2ZW50IHsKKwlJT0NfRV9FTkFCTEUgPSAxLAkvKiAgSU9DIGVuYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfRElTQUJMRSA9IDIsCS8qICBJT0MgZGlzYWJsZSByZXF1ZXN0ICovCisJSU9DX0VfVElNRU9VVCA9IDMsCS8qICBmL3cgcmVzcG9uc2UgdGltZW91dCAqLworCUlPQ19FX0ZXUkVBRFkgPSA0LAkvKiAgZi93IGluaXRpYWxpemF0aW9uIGRvbmUgKi8KKwlJT0NfRV9GV1JTUF9HRVRBVFRSID0gNSwJLyogIElPQyBnZXQgYXR0cmlidXRlIHJlc3BvbnNlICovCisJSU9DX0VfRldSU1BfRU5BQkxFID0gNiwJLyogIGVuYWJsZSBmL3cgcmVzcG9uc2UgKi8KKwlJT0NfRV9GV1JTUF9ESVNBQkxFID0gNywJLyogIGRpc2FibGUgZi93IHJlc3BvbnNlICovCisJSU9DX0VfSEJGQUlMID0gOCwJLyogIGhlYXJ0YmVhdCBmYWlsdXJlICovCisJSU9DX0VfSFdFUlJPUiA9IDksCS8qICBoYXJkd2FyZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwlJT0NfRV9TRU1MT0NLRUQgPSAxMCwJLyogIGgvdyBzZW1hcGhvcmUgaXMgbG9ja2VkICovCisJSU9DX0VfREVUQUNIID0gMTEsCS8qICBkcml2ZXIgZGV0YWNoIGNsZWFudXAgKi8KK307CisKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCByZXNldCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGZ3Y2hlY2ssIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBtaXNtYXRjaCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIHNlbXdhaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBod2luaXQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBlbmFibGluZywgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGdldGF0dHIsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKK2JmYV9mc21fc3RhdGVfZGVjbChiZmFfaW9jLCBvcCwgc3RydWN0IGJmYV9pb2NfcywgZW51bSBpb2NfZXZlbnQpOworYmZhX2ZzbV9zdGF0ZV9kZWNsKGJmYV9pb2MsIGluaXRmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgaGJmYWlsLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsaW5nLCBzdHJ1Y3QgYmZhX2lvY19zLCBlbnVtIGlvY19ldmVudCk7CitiZmFfZnNtX3N0YXRlX2RlY2woYmZhX2lvYywgZGlzYWJsZWQsIHN0cnVjdCBiZmFfaW9jX3MsIGVudW0gaW9jX2V2ZW50KTsKKworc3RhdGljIHN0cnVjdCBiZmFfc21fdGFibGVfcyBpb2Nfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9pb2Nfc21fcmVzZXQpLCBCRkFfSU9DX1JFU0VUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZndjaGVjayksIEJGQV9JT0NfRldNSVNNQVRDSH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX21pc21hdGNoKSwgQkZBX0lPQ19GV01JU01BVENIfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fc2Vtd2FpdCksIEJGQV9JT0NfU0VNV0FJVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2h3aW5pdCksIEJGQV9JT0NfSFdJTklUfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZW5hYmxpbmcpLCBCRkFfSU9DX0hXSU5JVH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2dldGF0dHIpLCBCRkFfSU9DX0dFVEFUVFJ9LAorCXtCRkFfU00oYmZhX2lvY19zbV9vcCksIEJGQV9JT0NfT1BFUkFUSU9OQUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9pbml0ZmFpbCksIEJGQV9JT0NfSU5JVEZBSUx9LAorCXtCRkFfU00oYmZhX2lvY19zbV9oYmZhaWwpLCBCRkFfSU9DX0hCRkFJTH0sCisJe0JGQV9TTShiZmFfaW9jX3NtX2Rpc2FibGluZyksIEJGQV9JT0NfRElTQUJMSU5HfSwKKwl7QkZBX1NNKGJmYV9pb2Nfc21fZGlzYWJsZWQpLCBCRkFfSU9DX0RJU0FCTEVEfSwKK307CisKKy8qKgorICogUmVzZXQgZW50cnkgYWN0aW9ucyAtLSBpbml0aWFsaXplIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+cmV0cnlfY291bnQgPSAwOworCWlvYy0+YXV0b19yZWNvdmVyID0gYmZhX2F1dG9fcmVjb3ZlcjsKK30KKworLyoqCisgKiBCZWdpbm5pbmcgc3RhdGUuIElPQyBpcyBpbiByZXNldCBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZndjaGVjayk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogU2VtYXBob3JlIHNob3VsZCBiZSBhY3F1aXJlZCBmb3IgdmVyc2lvbiBjaGVjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZndjaGVja19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19od19zZW1fZ2V0KGlvYyk7Cit9CisKKy8qKgorICogQXdhaXRpbmcgaC93IHNlbWFwaG9yZSB0byBjb250aW51ZSB3aXRoIHZlcnNpb24gY2hlY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2Z3Y2hlY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpZiAoYmZhX2lvY19maXJtd2FyZV9sb2NrKGlvYykpIHsKKwkJCWlvYy0+cmV0cnlfY291bnQgPSAwOworCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCX0gZWxzZSB7CisJCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2Rpc2FibGVfY29tcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX0RFVEFDSDoKKwkJYmZhX2lvY19od19zZW1fZ2V0X2NhbmNlbChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRldSRUFEWToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisvKioKKyAqIE5vdGlmeSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgZ2VuZXJhdGUgbWlzbWF0Y2ggQUVOLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9taXNtYXRjaF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJLyoqCisJICogUHJvdmlkZSBlbmFibGUgY29tcGxldGlvbiBjYWxsYmFjayBhbmQgQUVOIG5vdGlmaWNhdGlvbiBvbmx5IG9uY2UuCisJICovCisJaWYgKGlvYy0+cmV0cnlfY291bnQgPT0gMCkgeworCQlpb2MtPmNiZm4tPmVuYWJsZV9jYmZuKGlvYy0+YmZhLCBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFKTsKKwkJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0ZXTUlTTUFUQ0gpOworCX0KKwlpb2MtPnJldHJ5X2NvdW50Kys7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIGZpcm13YXJlIHZlcnNpb24gbWF0Y2guCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfZGlzYWJsZV9jb21wKGlvYyk7CisJCS8qCisJCSAqIGZhbGwgdGhyb3VnaAorCQkgKi8KKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBSZXF1ZXN0IGZvciBzZW1hcGhvcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCisvKioKKyAqIEF3YWl0aW5nIHNlbWFwaG9yZSBmb3IgaC93IGluaXRpYWx6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX3NlbXdhaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfU0VNTE9DS0VEOgorCQlpb2MtPnJldHJ5X2NvdW50ID0gMDsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2h3aW5pdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQliZmFfaW9jX2h3X3NlbV9nZXRfY2FuY2VsKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9od2luaXRfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3Jlc2V0KGlvYywgQkZBX0ZBTFNFKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZC4gSW50ZXJydXB0cyBhcmUgZW5hYmxlZC4KKyAqIEhvbGRpbmcgaGFyZHdhcmUgc2VtYXBob3JlIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2h3aW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2VuYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwkJCWJmYV9pb2NfcmVzZXQoaW9jLCBCRkFfVFJVRSk7CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2luaXRmYWlsKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZ19lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY190aW1lcl9zdGFydChpb2MpOworCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKK30KKworLyoqCisgKiBIb3N0IElPQyBmdW5jdGlvbiBpcyBiZWluZyBlbmFibGVkLCBhd2FpdGluZyByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICogU2VtYXBob3JlIGlzIGFjcXVpcmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9lbmFibGluZyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gaW9jX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9jLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBJT0NfRV9GV1JTUF9FTkFCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfaW9jX2h3X3NlbV9yZWxlYXNlKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9nZXRhdHRyKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQkvKgorCQkgKiBmYWxsIHRocm91Z2gKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWlvYy0+cmV0cnlfY291bnQrKzsKKwkJaWYgKGlvYy0+cmV0cnlfY291bnQgPCBCRkFfSU9DX0hXSU5JVF9NQVgpIHsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwKKwkJCQkgICAgICBCRklfSU9DX1VOSU5JVCk7CisJCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faHdpbml0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX2lvY19od19zZW1fcmVsZWFzZShpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9pb2NfaHdfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0ZXUkVBRFk6CisJCWJmYV9pb2Nfc2VuZF9lbmFibGUoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHJfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKKwliZmFfaW9jX3NlbmRfZ2V0YXR0cihpb2MpOworfQorCisvKioKKyAqIElPQyBjb25maWd1cmF0aW9uIGluIHByb2dyZXNzLiBUaW1lciBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2dldGF0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRldSU1BfR0VUQVRUUjoKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9vcCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9IV0VSUk9SOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogZmFsbCB0aHJvdWdoCisJCSAqLworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21faW5pdGZhaWwpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9vcF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaW9jLT5jYmZuLT5lbmFibGVfY2Jmbihpb2MtPmJmYSwgQkZBX1NUQVRVU19PSyk7CisJYmZhX2lvY19oYl9tb25pdG9yKGlvYyk7CisJYmZhX2lvY19hZW5fcG9zdChpb2MsIEJGQV9JT0NfQUVOX0VOQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX29wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0VOQUJMRToKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfaGJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsaW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogSGFyZCBlcnJvciBvciBJT0MgcmVjb3ZlcnkgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqIFRyZWF0IGl0IHNhbWUgYXMgaGVhcnRiZWF0IGZhaWx1cmUuCisJCSAqLworCQliZmFfaW9jX2hiX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX0hCRkFJTDoKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2hiZmFpbCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxpbmdfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9ESVNBQkxFKTsKKwliZmFfaW9jX3RpbWVyX3N0YXJ0KGlvYyk7CisJYmZhX2lvY19zZW5kX2Rpc2FibGUoaW9jKTsKK30KKworLyoqCisgKiBJT0MgaXMgYmVpbmcgZGlzYWJsZWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsaW5nKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0hXRVJST1I6CisJY2FzZSBJT0NfRV9GV1JTUF9ESVNBQkxFOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGlvYywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBJT0MgZGlzYWJsZSBjb21wbGV0aW9uIGVudHJ5LgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9kaXNhYmxlZF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2lvY19kaXNhYmxlX2NvbXAoaW9jKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21fZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgSU9DX0VfRU5BQkxFOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9ESVNBQkxFOgorCQlpb2MtPmNiZm4tPmRpc2FibGVfY2Jmbihpb2MtPmJmYSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX2Zpcm13YXJlX3VubG9jayhpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc21faW5pdGZhaWxfZW50cnkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCWJmYV9pb2NfdGltZXJfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBIYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2luaXRmYWlsKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBpb2NfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIElPQ19FX0RJU0FCTEU6CisJCWJmYV9pb2NfdGltZXJfc3RvcChpb2MpOworCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfREVUQUNIOgorCQliZmFfaW9jX3RpbWVyX3N0b3AoaW9jKTsKKwkJYmZhX2lvY19maXJtd2FyZV91bmxvY2soaW9jKTsKKwkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX3Jlc2V0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ19FX1RJTUVPVVQ6CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9zZW13YWl0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoaW9jLCBldmVudCk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NtX2hiZmFpbF9lbnRyeShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWU7CisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnk7CisKKwkvKioKKwkgKiBNYXJrIElPQyBhcyBmYWlsZWQgaW4gaGFyZHdhcmUgYW5kIHN0b3AgZmlybXdhcmUuCisJICovCisJYmZhX2lvY19scHVfc3RvcChpb2MpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSwgQkZJX0lPQ19IQkZBSUwpOworCisJaWYgKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubGxfaGFsdCwgX19GV19JTklUX0hBTFRfUCk7CisJCS8qCisJCSAqIFdhaXQgZm9yIGhhbHQgdG8gdGFrZSBlZmZlY3QKKwkJICovCisJCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxsX2hhbHQpOworCX0KKworCS8qKgorCSAqIE5vdGlmeSBkcml2ZXIgYW5kIGNvbW1vbiBtb2R1bGVzIHJlZ2lzdGVyZWQgZm9yIG5vdGlmaWNhdGlvbi4KKwkgKi8KKwlpb2MtPmNiZm4tPmhiZmFpbF9jYmZuKGlvYy0+YmZhKTsKKwlsaXN0X2Zvcl9lYWNoKHFlLCAmaW9jLT5oYl9ub3RpZnlfcSkgeworCQlub3RpZnkgPSAoc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICopcWU7CisJCW5vdGlmeS0+Y2Jmbihub3RpZnktPmNiYXJnKTsKKwl9CisKKwkvKioKKwkgKiBGbHVzaCBhbnkgcXVldWVkIHVwIG1haWxib3ggcmVxdWVzdHMuCisJICovCisJYmZhX2lvY19tYm94X2hiZmFpbChpb2MpOworCWJmYV9pb2NfYWVuX3Bvc3QoaW9jLCBCRkFfSU9DX0FFTl9IQkZBSUwpOworCisJLyoqCisJICogVHJpZ2dlciBhdXRvLXJlY292ZXJ5IGFmdGVyIGEgZGVsYXkuCisJICovCisJaWYgKGlvYy0+YXV0b19yZWNvdmVyKSB7CisJCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLAorCQkJCWJmYV9pb2NfdGltZW91dCwgaW9jLCBCRkFfSU9DX1RPVl9SRUNPVkVSKTsKKwl9Cit9CisKKy8qKgorICogSU9DIGhlYXJ0YmVhdCBmYWlsdXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19zbV9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGlvY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvYywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCisJY2FzZSBJT0NfRV9FTkFCTEU6CisJCWlvYy0+Y2Jmbi0+ZW5hYmxlX2NiZm4oaW9jLT5iZmEsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlicmVhazsKKworCWNhc2UgSU9DX0VfRElTQUJMRToKKwkJaWYgKGlvYy0+YXV0b19yZWNvdmVyKQorCQkJYmZhX2lvY190aW1lcl9zdG9wKGlvYyk7CisJCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9kaXNhYmxlZCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9USU1FT1VUOgorCQliZmFfZnNtX3NldF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fc2Vtd2FpdCk7CisJCWJyZWFrOworCisJY2FzZSBJT0NfRV9GV1JFQURZOgorCQkvKioKKwkJICogUmVjb3ZlcnkgaXMgYWxyZWFkeSBpbml0aWF0ZWQgYnkgb3RoZXIgZnVuY3Rpb24uCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChpb2MsIGV2ZW50KTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfZGlzYWJsZV9jb21wKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgKm5vdGlmeTsKKworCWlvYy0+Y2Jmbi0+ZGlzYWJsZV9jYmZuKGlvYy0+YmZhKTsKKworCS8qKgorCSAqIE5vdGlmeSBjb21tb24gbW9kdWxlcyByZWdpc3RlcmVkIGZvciBub3RpZmljYXRpb24uCisJICovCisJbGlzdF9mb3JfZWFjaChxZSwgJmlvYy0+aGJfbm90aWZ5X3EpIHsKKwkJbm90aWZ5ID0gKHN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyAqKXFlOworCQlub3RpZnktPmNiZm4obm90aWZ5LT5jYmFyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW1fdGltZW91dCh2b2lkICppb2NfYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IChzdHJ1Y3QgYmZhX2lvY19zICopaW9jX2FyZzsKKworCWJmYV9pb2NfaHdfc2VtX2dldChpb2MpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY191c2FnZV9zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKwlpbnQgICAgICAgICAgICAgY250ID0gMDsKKyNkZWZpbmUgQkZBX1NFTV9TUElOQ05UCTEwMDAKKworCWRvIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcpOworCQljbnQrKzsKKwkJaWYgKGNudCA+IEJGQV9TRU1fU1BJTkNOVCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHIzMiAhPSAwKTsKKwliZmFfYXNzZXJ0KGNudCA8IEJGQV9TRU1fU1BJTkNOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3VzYWdlX3NlbV9yZWxlYXNlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3NlbV9yZWcsIDEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fZ2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZpcnN0IHJlYWQgdG8gdGhlIHNlbWFwaG9yZSByZWdpc3RlciB3aWxsIHJldHVybiAwLCBzdWJzZXF1ZW50IHJlYWRzCisJICogd2lsbCByZXR1cm4gMS4gU2VtYXBob3JlIGlzIHJlbGVhc2VkIGJ5IHdyaXRpbmcgMCB0byB0aGUgcmVnaXN0ZXIKKwkgKi8KKwlyMzIgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5pb2Nfc2VtX3JlZyk7CisJaWYgKHIzMiA9PSAwKSB7CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX1NFTUxPQ0tFRCk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdGltZXJfYmVnaW4oaW9jLT50aW1lcl9tb2QsICZpb2MtPnNlbV90aW1lciwgYmZhX2lvY19zZW1fdGltZW91dCwKKwkJCWlvYywgQkZBX0lPQ19UT1YpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19od19zZW1fcmVsZWFzZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnLCAxKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaHdfc2VtX2dldF9jYW5jZWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV90aW1lcl9zdG9wKCZpb2MtPnNlbV90aW1lcik7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBMUFUgbG9jYWwgbWVtb3J5IChha2Egc2Vjb25kYXJ5IG1lbW9yeSAvIFNSQU0pCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2xtZW1faW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCWludCAgICAgICAgICAgICBpOworI2RlZmluZSBQU1NfTE1FTV9JTklUX1RJTUUgIDEwMDAwCisKKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xNRU1fUkVTRVQ7CisJcHNzX2N0bCB8PSBfX1BTU19MTUVNX0lOSVRfRU47CisJcHNzX2N0bCB8PSBfX1BTU19JMkNfQ0xLX0RJVigzVUwpOyAvKiBpMmMgd29ya2Fyb3VuZCAxMi41a2h6IGNsb2NrICovCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnLCBwc3NfY3RsKTsKKworCS8qKgorCSAqIHdhaXQgZm9yIG1lbW9yeSBpbml0aWFsaXphdGlvbiB0byBiZSBjb21wbGV0ZQorCSAqLworCWkgPSAwOworCWRvIHsKKwkJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwkJaSsrOworCX0gd2hpbGUgKCEocHNzX2N0bCAmIF9fUFNTX0xNRU1fSU5JVF9ET05FKSAmJiAoaSA8IFBTU19MTUVNX0lOSVRfVElNRSkpOworCisJLyoqCisJICogSWYgbWVtb3J5IGluaXRpYWxpemF0aW9uIGlzIG5vdCBzdWNjZXNzZnVsLCBJT0MgdGltZW91dCB3aWxsIGNhdGNoCisJICogc3VjaCBmYWlsdXJlcy4KKwkgKi8KKwliZmFfYXNzZXJ0KHBzc19jdGwgJiBfX1BTU19MTUVNX0lOSVRfRE9ORSk7CisJYmZhX3RyYyhpb2MsIHBzc19jdGwpOworCisJcHNzX2N0bCAmPSB+KF9fUFNTX0xNRU1fSU5JVF9ET05FIHwgX19QU1NfTE1FTV9JTklUX0VOKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RhcnQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcHNzX2N0bDsKKworCS8qKgorCSAqIFRha2UgcHJvY2Vzc29yIG91dCBvZiByZXNldC4KKwkgKi8KKwlwc3NfY3RsID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcpOworCXBzc19jdGwgJj0gfl9fUFNTX0xQVTBfUkVTRVQ7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19scHVfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICBwc3NfY3RsOworCisJLyoqCisJICogUHV0IHByb2Nlc3NvcnMgaW4gcmVzZXQuCisJICovCisJcHNzX2N0bCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLnBzc19jdGxfcmVnKTsKKwlwc3NfY3RsIHw9IChfX1BTU19MUFUwX1JFU0VUIHwgX19QU1NfTFBVMV9SRVNFVCk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcsIHBzc19jdGwpOworfQorCisvKioKKyAqIEdldCBkcml2ZXIgYW5kIGZpcm13YXJlIHZlcnNpb25zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19md3Zlcl9nZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZndoZHIpCit7CisJdTMyICAgICAgICBwZ251bSwgcGdvZmY7CisJdTMyICAgICAgICBsb2ZmID0gMDsKKwlpbnQgICAgICAgICAgICAgaTsKKwl1MzIgICAgICAgKmZ3c2lnID0gKHUzMiAqKSBmd2hkcjsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MpIC8gc2l6ZW9mKHUzMikpOworCSAgICAgaSsrKSB7CisJCWZ3c2lnW2ldID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgKgorYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgb2ZmKQoreworCWlmIChpb2MtPmN0ZGV2KQorCQlyZXR1cm4gYmZpX2ltYWdlX2N0X2dldF9jaHVuayhvZmYpOworCXJldHVybiBiZmlfaW1hZ2VfY2JfZ2V0X2NodW5rKG9mZik7Cit9CisKK3N0YXRpYyAgICAgICAgICB1MzIKK2JmYV9pb2NfZndpbWdfZ2V0X3NpemUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworcmV0dXJuIChpb2MtPmN0ZGV2KSA/IGJmaV9pbWFnZV9jdF9zaXplIDogYmZpX2ltYWdlX2NiX3NpemU7Cit9CisKKy8qKgorICogUmV0dXJucyBUUlVFIGlmIHNhbWUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Z3dmVyX2NtcChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICpmd2hkcikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyAqZHJ2X2Z3aGRyOworCWludCAgICAgICAgICAgICBpOworCisJZHJ2X2Z3aGRyID0KKwkJKHN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zICopYmZhX2lvY19md2ltZ19nZXRfY2h1bmsoaW9jLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRklfSU9DX01ENVNVTV9TWjsgaSsrKSB7CisJCWlmIChmd2hkci0+bWQ1c3VtW2ldICE9IGRydl9md2hkci0+bWQ1c3VtW2ldKSB7CisJCQliZmFfdHJjKGlvYywgaSk7CisJCQliZmFfdHJjKGlvYywgZndoZHItPm1kNXN1bVtpXSk7CisJCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5tZDVzdW1baV0pOworCQkJcmV0dXJuIEJGQV9GQUxTRTsKKwkJfQorCX0KKworCWJmYV90cmMoaW9jLCBmd2hkci0+bWQ1c3VtWzBdKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgY3VycmVudCBydW5uaW5nIHZlcnNpb24gaXMgdmFsaWQuIEZpcm13YXJlIHNpZ25hdHVyZSBhbmQKKyAqIGV4ZWN1dGlvbiBjb250ZXh0IChkcml2ZXIvYmlvcykgbXVzdCBtYXRjaC4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2NfZnd2ZXJfdmFsaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIGZ3aGRyLCAqZHJ2X2Z3aGRyOworCisJLyoqCisJICogSWYgYmlvcy9lZmkgYm9vdCAoZmxhc2ggYmFzZWQpIC0tIHJldHVybiB0cnVlCisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfZnd2ZXJfZ2V0KGlvYywgJmZ3aGRyKTsKKwlkcnZfZndoZHIgPQorCQkoc3RydWN0IGJmaV9pb2NfaW1hZ2VfaGRyX3MgKiliZmFfaW9jX2Z3aW1nX2dldF9jaHVuayhpb2MsIDApOworCisJaWYgKGZ3aGRyLnNpZ25hdHVyZSAhPSBkcnZfZndoZHItPnNpZ25hdHVyZSkgeworCQliZmFfdHJjKGlvYywgZndoZHIuc2lnbmF0dXJlKTsKKwkJYmZhX3RyYyhpb2MsIGRydl9md2hkci0+c2lnbmF0dXJlKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlpZiAoZndoZHIuZXhlYyAhPSBkcnZfZndoZHItPmV4ZWMpIHsKKwkJYmZhX3RyYyhpb2MsIGZ3aGRyLmV4ZWMpOworCQliZmFfdHJjKGlvYywgZHJ2X2Z3aGRyLT5leGVjKTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwlyZXR1cm4gYmZhX2lvY19md3Zlcl9jbXAoaW9jLCAmZndoZHIpOworfQorCisvKioKKyAqIFJldHVybiB0cnVlIGlmIGZpcm13YXJlIG9mIGN1cnJlbnQgZHJpdmVyIG1hdGNoZXMgdGhlIHJ1bm5pbmcgZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9jX2Zpcm13YXJlX2xvY2soc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwl1MzIgICAgICAgIHVzZWNudDsKKwlzdHJ1Y3QgYmZpX2lvY19pbWFnZV9oZHJfcyBmd2hkcjsKKworCS8qKgorCSAqIEZpcm13YXJlIG1hdGNoIGNoZWNrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKi8KKwlpZiAoIWlvYy0+Y25hKQorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgaW5jcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKGJmYV9pb2NfZndpbWdfZ2V0X3NpemUoaW9jKSA8IEJGQV9JT0NfRldJTUdfTUlOU1opCisJCXJldHVybiBCRkFfVFJVRTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCisJLyoqCisJICogSWYgdXNhZ2UgY291bnQgaXMgMCwgYWx3YXlzIHJldHVybiBUUlVFLgorCSAqLworCWlmICh1c2VjbnQgPT0gMCkgeworCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgMSk7CisJCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwkJYmZhX3RyYyhpb2MsIHVzZWNudCk7CisJCXJldHVybiBCRkFfVFJVRTsKKwl9CisKKwlpb2NfZndzdGF0ZSA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlKTsKKwliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJLyoqCisJICogVXNlIGNvdW50IGNhbm5vdCBiZSBub24temVybyBhbmQgY2hpcCBpbiB1bmluaXRpYWxpemVkIHN0YXRlLgorCSAqLworCWJmYV9hc3NlcnQoaW9jX2Z3c3RhdGUgIT0gQkZJX0lPQ19VTklOSVQpOworCisJLyoqCisJICogQ2hlY2sgaWYgYW5vdGhlciBkcml2ZXIgd2l0aCBhIGRpZmZlcmVudCBmaXJtd2FyZSBpcyBhY3RpdmUKKwkgKi8KKwliZmFfaW9jX2Z3dmVyX2dldChpb2MsICZmd2hkcik7CisJaWYgKCFiZmFfaW9jX2Z3dmVyX2NtcChpb2MsICZmd2hkcikpIHsKKwkJYmZhX2lvY191c2FnZV9zZW1fcmVsZWFzZShpb2MpOworCQliZmFfdHJjKGlvYywgdXNlY250KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwkvKioKKwkgKiBTYW1lIGZpcm13YXJlIHZlcnNpb24uIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50LgorCSAqLworCXVzZWNudCsrOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2VfcmVnLCB1c2VjbnQpOworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Zpcm13YXJlX3VubG9jayhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJdTMyICAgICAgICB1c2VjbnQ7CisKKwkvKioKKwkgKiBGaXJtd2FyZSBsb2NrIGlzIHJlbGV2YW50IG9ubHkgZm9yIENOQS4KKwkgKiBJZiBiaW9zIGJvb3QgKGZsYXNoIGJhc2VkKSAtLSBkbyBub3QgZGVjcmVtZW50IHVzYWdlIGNvdW50CisJICovCisJaWYgKCFpb2MtPmNuYSB8fCAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikpCisJCXJldHVybjsKKworCS8qKgorCSAqIGRlY3JlbWVudCB1c2FnZSBjb3VudAorCSAqLworCWJmYV9pb2NfdXNhZ2Vfc2VtX2dldChpb2MpOworCXVzZWNudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmlvY191c2FnZV9yZWcpOworCWJmYV9hc3NlcnQodXNlY250ID4gMCk7CisKKwl1c2VjbnQtLTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZywgdXNlY250KTsKKwliZmFfdHJjKGlvYywgdXNlY250KTsKKworCWJmYV9pb2NfdXNhZ2Vfc2VtX3JlbGVhc2UoaW9jKTsKK30KKworLyoqCisgKiBDb25kaXRpb25hbGx5IGZsdXNoIGFueSBwZW5kaW5nIG1lc3NhZ2UgZnJvbSBmaXJtd2FyZSBhdCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbXNnZmx1c2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgcjMyOworCisJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kKTsKKwlpZiAocjMyKQorCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kLCAxKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2lvY19od2luaXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWVudW0gYmZpX2lvY19zdGF0ZSBpb2NfZndzdGF0ZTsKKwliZmFfYm9vbGVhbl90ICAgZnd2YWxpZDsKKworCWlvY19md3N0YXRlID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUpOworCisJaWYgKGZvcmNlKQorCQlpb2NfZndzdGF0ZSA9IEJGSV9JT0NfVU5JTklUOworCisJYmZhX3RyYyhpb2MsIGlvY19md3N0YXRlKTsKKworCS8qKgorCSAqIGNoZWNrIGlmIGZpcm13YXJlIGlzIHZhbGlkCisJICovCisJZnd2YWxpZCA9IChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX1VOSU5JVCkgPworCQkJQkZBX0ZBTFNFIDogYmZhX2lvY19md3Zlcl92YWxpZChpb2MpOworCisJaWYgKCFmd3ZhbGlkKSB7CisJCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogSWYgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gaXMgaW4gcHJvZ3Jlc3MgKGluaXRpYWxpemVkIGJ5IG90aGVyIElPQyksCisJICoganVzdCB3YWl0IGZvciBhbiBpbml0aWFsaXphdGlvbiBjb21wbGV0aW9uIGludGVycnVwdC4KKwkgKi8KKwlpZiAoaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19JTklUSU5HKSB7CisJCWJmYV90cmMoaW9jLCBpb2NfZndzdGF0ZSk7CisJCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBJT0MgZnVuY3Rpb24gaXMgZGlzYWJsZWQgYW5kIGZpcm13YXJlIHZlcnNpb24gaXMgc2FtZSwKKwkgKiBqdXN0IHJlLWVuYWJsZSBJT0MuCisJICovCisJaWYgKGlvY19md3N0YXRlID09IEJGSV9JT0NfRElTQUJMRUQgfHwgaW9jX2Z3c3RhdGUgPT0gQkZJX0lPQ19PUCkgeworCQliZmFfdHJjKGlvYywgaW9jX2Z3c3RhdGUpOworCisJCS8qKgorCQkgKiBXaGVuIHVzaW5nIE1TSS1YIGFueSBwZW5kaW5nIGZpcm13YXJlIHJlYWR5IGV2ZW50IHNob3VsZAorCQkgKiBiZSBmbHVzaGVkLiBPdGhlcndpc2UgTVNJLVggaW50ZXJydXB0cyBhcmUgbm90IGRlbGl2ZXJlZC4KKwkJICovCisJCWJmYV9pb2NfbXNnZmx1c2goaW9jKTsKKwkJaW9jLT5jYmZuLT5yZXNldF9jYmZuKGlvYy0+YmZhKTsKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSRUFEWSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplIHRoZSBoL3cgZm9yIGFueSBvdGhlciBzdGF0ZXMuCisJICovCisJYmZhX2lvY19ib290KGlvYywgQkZJX0JPT1RfVFlQRV9OT1JNQUwsIGlvYy0+cGNpZGV2LmRldmljZV9pZCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3RpbWVvdXQodm9pZCAqaW9jX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2lvY19zICppb2MgPSAoc3RydWN0IGJmYV9pb2NfcyAqKWlvY19hcmc7CisKKwliZmFfdHJjKGlvYywgMCk7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfVElNRU9VVCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfbWJveF9zZW5kKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqaW9jX21zZywgaW50IGxlbikKK3sKKwl1MzIgICAgICAgKm1zZ3AgPSAodTMyICopIGlvY19tc2c7CisJdTMyICAgICAgICBpOworCisJYmZhX3RyYyhpb2MsIG1zZ3BbMF0pOworCWJmYV90cmMoaW9jLCBsZW4pOworCisJYmZhX2Fzc2VydChsZW4gPD0gQkZJX0lPQ19NU0dMRU5fTUFYKTsKKworCS8qCisJICogZmlyc3Qgd3JpdGUgbXNnIHRvIG1haWxib3ggcmVnaXN0ZXJzCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbiAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwKKwkJCSAgICAgIGJmYV9vc193dG9sZShtc2dwW2ldKSk7CisKKwlmb3IgKDsgaSA8IEJGSV9JT0NfTVNHTEVOX01BWCAvIHNpemVvZih1MzIpOyBpKyspCisJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5oZm5fbWJveCArIGkgKiBzaXplb2YodTMyKSwgMCk7CisKKwkvKgorCSAqIHdyaXRlIDEgdG8gbWFpbGJveCBDTUQgdG8gdHJpZ2dlciBMUFUgZXZlbnQKKwkgKi8KKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kLCAxKTsKKwkodm9pZCliZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5oZm5fbWJveF9jbWQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY19zZW5kX2VuYWJsZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBlbmFibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZW5hYmxlX3JlcS5taCwgQkZJX01DX0lPQywgQkZJX0lPQ19IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWVuYWJsZV9yZXEuaW9jX2NsYXNzID0gaW9jLT5pb2NfbWM7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZW5hYmxlX3JlcSwgc2l6ZW9mKHN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2Nfc2VuZF9kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIGRpc2FibGVfcmVxOworCisJYmZpX2gyaV9zZXQoZGlzYWJsZV9yZXEubWgsIEJGSV9NQ19JT0MsIEJGSV9JT0NfSDJJX0RJU0FCTEVfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQoaW9jKSk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCAmZGlzYWJsZV9yZXEsIHNpemVvZihzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3NlbmRfZ2V0YXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyBhdHRyX3JlcTsKKworCWJmaV9oMmlfc2V0KGF0dHJfcmVxLm1oLCBCRklfTUNfSU9DLCBCRklfSU9DX0gySV9HRVRBVFRSX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoYXR0cl9yZXEuYXR0cl9hZGRyLCBpb2MtPmF0dHJfZG1hLnBhKTsKKwliZmFfaW9jX21ib3hfc2VuZChpb2MsICZhdHRyX3JlcSwgc2l6ZW9mKGF0dHJfcmVxKSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX2NoZWNrKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYyA9IGNiYXJnOworCXUzMiAgICAgICAgaGJfY291bnQ7CisKKwloYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJaWYgKGlvYy0+aGJfY291bnQgPT0gaGJfY291bnQpIHsKKwkJaW9jLT5oYl9mYWlsKys7CisJfSBlbHNlIHsKKwkJaW9jLT5oYl9jb3VudCA9IGhiX2NvdW50OworCQlpb2MtPmhiX2ZhaWwgPSAwOworCX0KKworCWlmIChpb2MtPmhiX2ZhaWwgPj0gQkZBX0lPQ19IQl9GQUlMX01BWCkgeworCQliZmFfbG9nKGlvYy0+bG9nbSwgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUsIGhiX2NvdW50KTsKKwkJaW9jLT5oYl9mYWlsID0gMDsKKwkJYmZhX2lvY19yZWNvdmVyKGlvYyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfaW9jX21ib3hfcG9sbChpb2MpOworCWJmYV90aW1lcl9iZWdpbihpb2MtPnRpbWVyX21vZCwgJmlvYy0+aW9jX3RpbWVyLCBiZmFfaW9jX2hiX2NoZWNrLCBpb2MsCisJCQlCRkFfSU9DX0hCX1RPVik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2hiX21vbml0b3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWlvYy0+aGJfZmFpbCA9IDA7CisJaW9jLT5oYl9jb3VudCA9IGJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCk7CisJYmZhX3RpbWVyX2JlZ2luKGlvYy0+dGltZXJfbW9kLCAmaW9jLT5pb2NfdGltZXIsIGJmYV9pb2NfaGJfY2hlY2ssIGlvYywKKwkJCUJGQV9JT0NfSEJfVE9WKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfaGJfc3RvcChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX3RpbWVyX3N0b3AoJmlvYy0+aW9jX3RpbWVyKTsKK30KKworLyoqCisgKiBIb3N0IHRvIExQVSBtYWlsYm94IG1lc3NhZ2UgYWRkcmVzc2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaGZuX21ib3gsIGxwdV9tYm94LCBoZm5fcGduOworfSBpb2NyZWdfZm5yZWdbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjBfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjB9LCB7CisJSE9TVEZOMV9MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjFfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjF9LCB7CisJSE9TVEZOMl9MUFVfTUJPWDBfMCwgTFBVX0hPU1RGTjJfTUJPWDBfMCwgSE9TVF9QQUdFX05VTV9GTjJ9LCB7CisJSE9TVEZOM19MUFVfTUJPWDBfOCwgTFBVX0hPU1RGTjNfTUJPWDBfOCwgSE9TVF9QQUdFX05VTV9GTjN9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMAorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDBbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFULCBMUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIEhvc3QgPC0+IExQVSBtYWlsYm94IGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVycyAtIHBvcnQgMQorICovCitzdGF0aWMgc3RydWN0IHsKKwl1MzIgICAgICAgIGhmbiwgbHB1OworfSBpb2NyZWdfbWJjbWRfcDFbXSA9IHsKKwl7CisJSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMV9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOMl9MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVR9LCB7CisJSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFULCBMUFUxX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVR9Cit9OworCisvKioKKyAqIFNoYXJlZCBJUlEgaGFuZGxpbmcgaW4gSU5UWCBtb2RlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgeworCXUzMiAgICAgICAgaXNyLCBtc2s7Cit9IGlvY3JlZ19zaGlycV9uZXh0W10gPSB7CisJeworCUhPU1RGTjFfSU5UX1NUQVRVUywgSE9TVEZOMV9JTlRfTVNLfSwgeworCUhPU1RGTjJfSU5UX1NUQVRVUywgSE9TVEZOMl9JTlRfTVNLfSwgeworCUhPU1RGTjNfSU5UX1NUQVRVUywgSE9TVEZOM19JTlRfTVNLfSwgeworSE9TVEZOMF9JTlRfU1RBVFVTLCBIT1NURk4wX0lOVF9NU0t9LH07CisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX3JlZ19pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmI7CisJaW50ICAgICAgICAgICAgIHBjaWZuID0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmIgPSBiZmFfaW9jX2JhcjAoaW9jKTsKKworCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3ggPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX21ib3g7CisJaW9jLT5pb2NfcmVncy5scHVfbWJveCA9IHJiICsgaW9jcmVnX2ZucmVnW3BjaWZuXS5scHVfbWJveDsKKwlpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4gPSByYiArIGlvY3JlZ19mbnJlZ1twY2lmbl0uaGZuX3BnbjsKKworCWlmIChpb2MtPnBvcnRfaWQgPT0gMCkgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IHJiICsgQkZBX0lPQzBfSEJFQVRfUkVHOworCQlpb2MtPmlvY19yZWdzLmlvY19md3N0YXRlID0gcmIgKyBCRkFfSU9DMF9TVEFURV9SRUc7CisJCWlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDBbcGNpZm5dLmhmbjsKKwkJaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQgPSByYiArIGlvY3JlZ19tYmNtZF9wMFtwY2lmbl0ubHB1OworCQlpb2MtPmlvY19yZWdzLmxsX2hhbHQgPSByYiArIEZXX0lOSVRfSEFMVF9QMDsKKwl9IGVsc2UgeworCQlpb2MtPmlvY19yZWdzLmhlYXJ0YmVhdCA9IChyYiArIEJGQV9JT0MxX0hCRUFUX1JFRyk7CisJCWlvYy0+aW9jX3JlZ3MuaW9jX2Z3c3RhdGUgPSAocmIgKyBCRkFfSU9DMV9TVEFURV9SRUcpOworCQlpb2MtPmlvY19yZWdzLmhmbl9tYm94X2NtZCA9IHJiICsgaW9jcmVnX21iY21kX3AxW3BjaWZuXS5oZm47CisJCWlvYy0+aW9jX3JlZ3MubHB1X21ib3hfY21kID0gcmIgKyBpb2NyZWdfbWJjbWRfcDFbcGNpZm5dLmxwdTsKKwkJaW9jLT5pb2NfcmVncy5sbF9oYWx0ID0gcmIgKyBGV19JTklUX0hBTFRfUDE7CisJfQorCisJLyoqCisJICogU2hhcmVkIElSUSBoYW5kbGluZyBpbiBJTlRYIG1vZGUKKwkgKi8KKwlpb2MtPmlvY19yZWdzLnNoaXJxX2lzcl9uZXh0ID0gcmIgKyBpb2NyZWdfc2hpcnFfbmV4dFtwY2lmbl0uaXNyOworCWlvYy0+aW9jX3JlZ3Muc2hpcnFfbXNrX25leHQgPSByYiArIGlvY3JlZ19zaGlycV9uZXh0W3BjaWZuXS5tc2s7CisKKwkvKgorCSAqIFBTUyBjb250cm9sIHJlZ2lzdGVycworCSAqLworCWlvYy0+aW9jX3JlZ3MucHNzX2N0bF9yZWcgPSAocmIgKyBQU1NfQ1RMX1JFRyk7CisJaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZyA9IChyYiArIEFQUF9QTExfNDI1X0NUTF9SRUcpOworCWlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcgPSAocmIgKyBBUFBfUExMXzMxMl9DVExfUkVHKTsKKworCS8qCisJICogSU9DIHNlbWFwaG9yZSByZWdpc3RlcnMgYW5kIHNlcmlhbGl6YXRpb24KKwkgKi8KKwlpb2MtPmlvY19yZWdzLmlvY19zZW1fcmVnID0gKHJiICsgSE9TVF9TRU0wX1JFRyk7CisJaW9jLT5pb2NfcmVncy5pb2NfdXNhZ2Vfc2VtX3JlZyA9IChyYiArIEhPU1RfU0VNMV9SRUcpOworCWlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyA9IChyYiArIEJGQV9GV19VU0VfQ09VTlQpOworCisJLyoqCisJICogc3JhbSBtZW1vcnkgYWNjZXNzCisJICovCisJaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQgPSAocmIgKyBQU1NfU01FTV9QQUdFX1NUQVJUKTsKKwlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DQjsKKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkID09IEJGQV9QQ0lfREVWSUNFX0lEX0NUKQorCQlpb2MtPmlvY19yZWdzLnNtZW1fcGcwID0gQkZJX0lPQ19TTUVNX1BHMF9DVDsKK30KKworLyoqCisgKiAgICAgIEluaXRpYXRlIGEgZnVsbCBmaXJtd2FyZSBkb3dubG9hZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfZG93bmxvYWRfZncoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgYm9vdF90eXBlLAorCQkgICAgdTMyIGJvb3RfcGFyYW0pCit7CisJdTMyICAgICAgICpmd2ltZzsKKwl1MzIgICAgICAgIHBnbnVtLCBwZ29mZjsKKwl1MzIgICAgICAgIGxvZmYgPSAwOworCXUzMiAgICAgICAgY2h1bmtubyA9IDA7CisJdTMyICAgICAgICBpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBMTUVNIGZpcnN0IGJlZm9yZSBjb2RlIGRvd25sb2FkCisJICovCisJYmZhX2lvY19sbWVtX2luaXQoaW9jKTsKKworCS8qKgorCSAqIEZsYXNoIGJhc2VkIGZpcm13YXJlIGJvb3QKKwkgKi8KKwliZmFfdHJjKGlvYywgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpKTsKKwlpZiAoYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpIDwgQkZBX0lPQ19GV0lNR19NSU5TWikKKwkJYm9vdF90eXBlID0gQkZJX0JPT1RfVFlQRV9GTEFTSDsKKwlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywgY2h1bmtubyk7CisJZndpbWdbQkZJX0JPT1RfVFlQRV9PRkYgLyBzaXplb2YodTMyKV0gPSBiZmFfb3Nfc3dhcDMyKGJvb3RfdHlwZSk7CisJZndpbWdbQkZJX0JPT1RfUEFSQU1fT0ZGIC8gc2l6ZW9mKHUzMildID0KKwkJYmZhX29zX3N3YXAzMihib290X3BhcmFtKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJcGdvZmYgPSBiZmFfaW9jX3NtZW1fcGdvZmYoaW9jLCBsb2ZmKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhX2lvY19md2ltZ19nZXRfc2l6ZShpb2MpOyBpKyspIHsKKworCQlpZiAoQkZBX0ZMQVNIX0NIVU5LX05PKGkpICE9IGNodW5rbm8pIHsKKwkJCWNodW5rbm8gPSBCRkFfRkxBU0hfQ0hVTktfTk8oaSk7CisJCQlmd2ltZyA9IGJmYV9pb2NfZndpbWdfZ2V0X2NodW5rKGlvYywKKwkJCQkJQkZBX0ZMQVNIX0NIVU5LX0FERFIoY2h1bmtubykpOworCQl9CisKKwkJLyoqCisJCSAqIHdyaXRlIHNtZW0KKwkJICovCisJCWJmYV9tZW1fd3JpdGUoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQsIGxvZmYsCisJCQkgICAgICBmd2ltZ1tCRkFfRkxBU0hfT0ZGU0VUX0lOX0NIVU5LKGkpXSk7CisKKwkJbG9mZiArPSBzaXplb2YodTMyKTsKKworCQkvKioKKwkJICogaGFuZGxlIHBhZ2Ugb2Zmc2V0IHdyYXAgYXJvdW5kCisJCSAqLworCQlsb2ZmID0gUFNTX1NNRU1fUEdPRkYobG9mZik7CisJCWlmIChsb2ZmID09IDApIHsKKwkJCXBnbnVtKys7CisJCQliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuaG9zdF9wYWdlX251bV9mbiwgcGdudW0pOworCQl9CisJfQorCisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVzZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfYm9vbGVhbl90IGZvcmNlKQoreworCWJmYV9pb2NfaHdpbml0KGlvYywgZm9yY2UpOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2dldGF0dHJfcmVwbHkoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqYXR0ciA9IGlvYy0+YXR0cjsKKworCWF0dHItPmFkYXB0ZXJfcHJvcCA9IGJmYV9vc19udG9obChhdHRyLT5hZGFwdGVyX3Byb3ApOworCWF0dHItPm1heGZyc2l6ZSA9IGJmYV9vc19udG9ocyhhdHRyLT5tYXhmcnNpemUpOworCisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfR0VUQVRUUik7Cit9CisKKy8qKgorICogQXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gb2YgbWJveCBsb2dpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9hdHRhY2goc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCWludCAgICAgICAgICAgICBtYzsKKworCUlOSVRfTElTVF9IRUFEKCZtb2QtPmNtZF9xKTsKKwlmb3IgKG1jID0gMDsgbWMgPCBCRklfTUNfTUFYOyBtYysrKSB7CisJCW1vZC0+bWJoZGxyW21jXS5jYmZuID0gTlVMTDsKKwkJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gaW9jLT5iZmE7CisJfQorfQorCisvKioKKyAqIE1ib3ggcG9sbCB0aW1lciAtLSByZXN0YXJ0cyBhbnkgcGVuZGluZyBtYWlsYm94IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19tYm94X3BvbGwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCXUzMiAgICAgICAgc3RhdDsKKworCS8qKgorCSAqIElmIG5vIGNvbW1hbmQgcGVuZGluZywgZG8gbm90aGluZworCSAqLworCWlmIChsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJcmV0dXJuOworCisJLyoqCisJICogSWYgcHJldmlvdXMgY29tbWFuZCBpcyBub3QgeWV0IGZldGNoZWQgYnkgZmlybXdhcmUsIGRvIG5vdGhpbmcKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkKKwkJcmV0dXJuOworCisJLyoqCisJICogRW5xdWV1ZSBjb21tYW5kIHRvIGZpcm13YXJlLgorCSAqLworCWJmYV9xX2RlcSgmbW9kLT5jbWRfcSwgJmNtZCk7CisJYmZhX2lvY19tYm94X3NlbmQoaW9jLCBjbWQtPm1zZywgc2l6ZW9mKGNtZC0+bXNnKSk7Cit9CisKKy8qKgorICogQ2xlYW51cCBhbnkgcGVuZGluZyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfbWJveF9oYmZhaWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXN0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgKm1vZCA9ICZpb2MtPm1ib3hfbW9kOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyAqY21kOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkKKwkJYmZhX3FfZGVxKCZtb2QtPmNtZF9xLCAmY21kKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIElPQyB0byBwb3J0IG1hcHBpbmcuCisgKi8KKworI2RlZmluZSBGTkNfUEVSU19GTl9TSElGVChfX2ZuKQkoKF9fZm4pICogOCkKK3N0YXRpYyB2b2lkCitiZmFfaW9jX21hcF9wb3J0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMjsKKworCS8qKgorCSAqIEZvciBjcm9zc2JvdywgcG9ydCBpZCBpcyBzYW1lIGFzIHBjaSBmdW5jdGlvbi4KKwkgKi8KKwlpZiAoaW9jLT5wY2lkZXYuZGV2aWNlX2lkICE9IEJGQV9QQ0lfREVWSUNFX0lEX0NUKSB7CisJCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZvciBjYXRhcHVsdCwgYmFzZSBwb3J0IGlkIG9uIHBlcnNvbmFsaXR5IHJlZ2lzdGVyIGFuZCBJT0MgdHlwZQorCSAqLworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJcjMyID4+PSBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpOworCWlvYy0+cG9ydF9pZCA9IChyMzIgJiBfX0YwX1BPUlRfTUFQX01LKSA+PiBfX0YwX1BPUlRfTUFQX1NIOworCisJYmZhX3RyYyhpb2MsIGJmYV9pb2NfcGNpZm4oaW9jKSk7CisJYmZhX3RyYyhpb2MsIGlvYy0+cG9ydF9pZCk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9jX3B1YmxpYworICovCisKKy8qKgorKiBTZXQgaW50ZXJydXB0IG1vZGUgZm9yIGEgZnVuY3Rpb246IElOVFggb3IgTVNJWAorICovCit2b2lkCitiZmFfaW9jX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGJmYV9ib29sZWFuX3QgbXNpeCkKK3sKKwliZmFfb3NfYWRkcl90ICAgcmIgPSBpb2MtPnBjaWRldi5wY2lfYmFyX2t2YTsKKwl1MzIgICAgICAgIHIzMiwgbW9kZTsKKworCXIzMiA9IGJmYV9yZWdfcmVhZChyYiArIEZOQ19QRVJTX1JFRyk7CisJYmZhX3RyYyhpb2MsIHIzMik7CisKKwltb2RlID0gKHIzMiA+PiBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKSAmCisJCV9fRjBfSU5UWF9TVEFUVVM7CisKKwkvKioKKwkgKiBJZiBhbHJlYWR5IGluIGRlc2lyZWQgbW9kZSwgZG8gbm90IGNoYW5nZSBhbnl0aGluZworCSAqLworCWlmICghbXNpeCAmJiBtb2RlKQorCQlyZXR1cm47CisKKwlpZiAobXNpeCkKKwkJbW9kZSA9IF9fRjBfSU5UWF9TVEFUVVNfTVNJWDsKKwllbHNlCisJCW1vZGUgPSBfX0YwX0lOVFhfU1RBVFVTX0lOVEE7CisKKwlyMzIgJj0gfihfX0YwX0lOVFhfU1RBVFVTIDw8IEZOQ19QRVJTX0ZOX1NISUZUKGJmYV9pb2NfcGNpZm4oaW9jKSkpOworCXIzMiB8PSAobW9kZSA8PCBGTkNfUEVSU19GTl9TSElGVChiZmFfaW9jX3BjaWZuKGlvYykpKTsKKwliZmFfdHJjKGlvYywgcjMyKTsKKworCWJmYV9yZWdfd3JpdGUocmIgKyBGTkNfUEVSU19SRUcsIHIzMik7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY19wbGxfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX29zX2FkZHJfdCAgIHJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7CisJdTMyICAgICAgICBwbGxfc2NsaywgcGxsX2ZjbGssIHIzMjsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJcGxsX3NjbGsgPQorCQkJX19BUFBfUExMXzMxMl9FTkFCTEUgfCBfX0FQUF9QTExfMzEyX0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzMxMl9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzMxMl9QMF8xKDBVKSB8CisJCQlfX0FQUF9QTExfMzEyX0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoMVUpOworCQlwbGxfZmNsayA9CisJCQlfX0FQUF9QTExfNDI1X0VOQUJMRSB8IF9fQVBQX1BMTF80MjVfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgfCBfX0FQUF9QTExfNDI1X1AwXzEoMFUpIHwKKwkJCV9fQVBQX1BMTF80MjVfSklUTE1UMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0NOVExNVDBfMSgxVSk7CisKKwkJLyoqCisJCSAqIAlGb3IgY2F0YXB1bHQsIGNob29zZSBvcGVyYXRpb25hbCBtb2RlIEZDL0ZDb0UKKwkJICovCisJCWlmIChpb2MtPmZjbW9kZSkgeworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBPUF9NT0RFKSwgMCk7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIEVUSF9NQUNfU0VSX1JFRyksCisJCQkJICAgICAgX19BUFBfRU1TX0NNTENLU0VMIHwgX19BUFBfRU1TX1JFRkNLQlVGRU4yCisJCQkJICAgICAgfCBfX0FQUF9FTVNfQ0hBTk5FTF9TRUwpOworCQl9IGVsc2UgeworCQkJaW9jLT5wbGxpbml0ID0gQkZBX1RSVUU7CisJCQliZmFfcmVnX3dyaXRlKChyYiArIE9QX01PREUpLCBfX0dMT0JBTF9GQ09FX01PREUpOworCQkJYmZhX3JlZ193cml0ZSgocmIgKyBFVEhfTUFDX1NFUl9SRUcpLAorCQkJCSAgICAgIF9fQVBQX0VNU19SRUZDS0JVRkVOMSk7CisJCX0KKwl9IGVsc2UgeworCQlwbGxfc2NsayA9CisJCQlfX0FQUF9QTExfMzEyX0VOQUJMRSB8IF9fQVBQX1BMTF8zMTJfTFJFU0VUTiB8CisJCQlfX0FQUF9QTExfMzEyX1AwXzEoM1UpIHwgX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoM1UpIHwKKwkJCV9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xKDNVKTsKKwkJcGxsX2ZjbGsgPQorCQkJX19BUFBfUExMXzQyNV9FTkFCTEUgfCBfX0FQUF9QTExfNDI1X0xSRVNFVE4gfAorCQkJX19BUFBfUExMXzQyNV9SU0VMMjAwNTAwIHwgX19BUFBfUExMXzQyNV9QMF8xKDNVKSB8CisJCQlfX0FQUF9QTExfNDI1X0pJVExNVDBfMSgzVSkgfAorCQkJX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoM1UpOworCX0KKworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19VTklOSVQpOworCisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9NU0spLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsCisJCSAgICAgIF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0JZUEFTUyB8IF9fQVBQX1BMTF8zMTJfTE9HSUNfU09GVF9SRVNFVCk7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfZmFzdF9jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9CWVBBU1MgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9vc191ZGVsYXkoMik7CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmFwcF9wbGxfc2xvd19jdGxfcmVnLAorCQkgICAgICBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgX19BUFBfUExMXzQyNV9MT0dJQ19TT0ZUX1JFU0VUKTsKKworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX3Nsb3dfY3RsX3JlZywKKwkJICAgICAgcGxsX3NjbGsgfCBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5hcHBfcGxsX2Zhc3RfY3RsX3JlZywKKwkJICAgICAgcGxsX2ZjbGsgfCBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQpOworCisJLyoqCisJICogV2FpdCBmb3IgUExMcyB0byBsb2NrLgorCSAqLworCWJmYV9vc191ZGVsYXkoMjAwMCk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4wX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisJYmZhX3JlZ193cml0ZSgocmIgKyBIT1NURk4xX0lOVF9TVEFUVVMpLCAweGZmZmZmZmZmVSk7CisKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9zbG93X2N0bF9yZWcsIHBsbF9zY2xrKTsKKwliZmFfcmVnX3dyaXRlKGlvYy0+aW9jX3JlZ3MuYXBwX3BsbF9mYXN0X2N0bF9yZWcsIHBsbF9mY2xrKTsKKworCWlmIChpb2MtPnBjaWRldi5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJYmZhX3JlZ193cml0ZSgocmIgKyBNQklTVF9DVExfUkVHKSwgX19FRFJBTV9CSVNUUl9TVEFSVCk7CisJCWJmYV9vc191ZGVsYXkoMTAwMCk7CisJCXIzMiA9IGJmYV9yZWdfcmVhZCgocmIgKyBNQklTVF9TVEFUX1JFRykpOworCQliZmFfdHJjKGlvYywgcjMyKTsKKwl9CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBJbnRlcmZhY2UgdXNlZCBieSBkaWFnIG1vZHVsZSB0byBkbyBmaXJtd2FyZSBib290IHdpdGggbWVtb3J5IHRlc3QKKyAqIGFzIHRoZSBlbnRyeSB2ZWN0b3IuCisgKi8KK3ZvaWQKK2JmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKQoreworCWJmYV9vc19hZGRyX3QgICByYjsKKworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfYm9vdHMpOworCisJaWYgKGJmYV9pb2NfcGxsX2luaXQoaW9jKSAhPSBCRkFfU1RBVFVTX09LKQorCQlyZXR1cm47CisKKwkvKioKKwkgKiBJbml0aWFsaXplIElPQyBzdGF0ZSBvZiBhbGwgZnVuY3Rpb25zIG9uIGEgY2hpcCByZXNldC4KKwkgKi8KKwlyYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCWlmIChib290X3BhcmFtID09IEJGSV9CT09UX1RZUEVfTUVNVEVTVCkgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfTUVNVEVTVCk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19NRU1URVNUKTsKKwl9IGVsc2UgeworCQliZmFfcmVnX3dyaXRlKChyYiArIEJGQV9JT0MwX1NUQVRFX1JFRyksIEJGSV9JT0NfSU5JVElORyk7CisJCWJmYV9yZWdfd3JpdGUoKHJiICsgQkZBX0lPQzFfU1RBVEVfUkVHKSwgQkZJX0lPQ19JTklUSU5HKTsKKwl9CisKKwliZmFfaW9jX2Rvd25sb2FkX2Z3KGlvYywgYm9vdF90eXBlLCBib290X3BhcmFtKTsKKworCS8qKgorCSAqIEVuYWJsZSBpbnRlcnJ1cHRzIGp1c3QgYmVmb3JlIHN0YXJ0aW5nIExQVQorCSAqLworCWlvYy0+Y2Jmbi0+cmVzZXRfY2Jmbihpb2MtPmJmYSk7CisJYmZhX2lvY19scHVfc3RhcnQoaW9jKTsKK30KKworLyoqCisgKiBFbmFibGUvZGlzYWJsZSBJT0MgZmFpbHVyZSBhdXRvIHJlY292ZXJ5LgorICovCit2b2lkCitiZmFfaW9jX2F1dG9fcmVjb3ZlcihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKKwliZmFfYXV0b19yZWNvdmVyID0gQkZBX0ZBTFNFOworfQorCisKK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fb3ApOworfQorCit2b2lkCitiZmFfaW9jX21zZ2dldChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKm1ibXNnKQoreworCXUzMiAgICAgICAqbXNncCA9IG1ibXNnOworCXUzMiAgICAgICAgcjMyOworCWludCAgICAgICAgICAgICBpOworCisJLyoqCisJICogcmVhZCB0aGUgTUJPWCBtc2cKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih1bmlvbiBiZmlfaW9jX2kyaF9tc2dfdSkgLyBzaXplb2YodTMyKSk7CisJICAgICBpKyspIHsKKwkJcjMyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MubHB1X21ib3ggKworCQkJCSAgIGkgKiBzaXplb2YodTMyKSk7CisJCW1zZ3BbaV0gPSBiZmFfb3NfaHRvbmwocjMyKTsKKwl9CisKKwkvKioKKwkgKiB0dXJuIG9mZiBtYWlsYm94IGludGVycnVwdCBieSBjbGVhcmluZyBtYWlsYm94IHN0YXR1cworCSAqLworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5scHVfbWJveF9jbWQsIDEpOworCWJmYV9yZWdfcmVhZChpb2MtPmlvY19yZWdzLmxwdV9tYm94X2NtZCk7Cit9CisKK3ZvaWQKK2JmYV9pb2NfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXVuaW9uIGJmaV9pb2NfaTJoX21zZ191ICptc2c7CisKKwltc2cgPSAodW5pb24gYmZpX2lvY19pMmhfbXNnX3UgKiltOworCisJYmZhX2lvY19zdGF0cyhpb2MsIGlvY19pc3JzKTsKKworCXN3aXRjaCAobXNnLT5taC5tc2dfaWQpIHsKKwljYXNlIEJGSV9JT0NfSTJIX0hCRUFUOgorCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfUkVBRFlfRVZFTlQ6CisJCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0ZXUkVBRFkpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRU5BQkxFX1JFUExZOgorCQliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9GV1JTUF9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPQ19JMkhfRElTQUJMRV9SRVBMWToKKwkJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfRldSU1BfRElTQUJMRSk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9DX0kySF9HRVRBVFRSX1JFUExZOgorCQliZmFfaW9jX2dldGF0dHJfcmVwbHkoaW9jKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGlvYywgbXNnLT5taC5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJT0MgYXR0YWNoIHRpbWUgaW5pdGlhbGl6YXRpb24gYW5kIHNldHVwLgorICoKKyAqIEBwYXJhbVtpbl0JaW9jCW1lbW9yeSBmb3IgSU9DCisgKiBAcGFyYW1baW5dCWJmYQlkcml2ZXIgaW5zdGFuY2Ugc3RydWN0dXJlCisgKiBAcGFyYW1baW5dCXRyY21vZAlrZXJuZWwgdHJhY2UgbW9kdWxlCisgKiBAcGFyYW1baW5dCWFlbglrZXJuZWwgYWVuIGV2ZW50IG1vZHVsZQorICogQHBhcmFtW2luXQlsb2dtCWtlcm5lbCBsb2dnaW5nIG1vZHVsZQorICovCit2b2lkCitiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwgc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLAorCSAgICAgICBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsIHN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJICAgICAgIHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pCit7CisJaW9jLT5iZmEgPSBiZmE7CisJaW9jLT5jYmZuID0gY2JmbjsKKwlpb2MtPnRpbWVyX21vZCA9IHRpbWVyX21vZDsKKwlpb2MtPnRyY21vZCA9IHRyY21vZDsKKwlpb2MtPmFlbiA9IGFlbjsKKwlpb2MtPmxvZ20gPSBsb2dtOworCWlvYy0+ZmNtb2RlID0gQkZBX0ZBTFNFOworCWlvYy0+cGxsaW5pdCA9IEJGQV9GQUxTRTsKKwlpb2MtPmRiZ19md3NhdmVfb25jZSA9IEJGQV9UUlVFOworCisJYmZhX2lvY19tYm94X2F0dGFjaChpb2MpOworCUlOSVRfTElTVF9IRUFEKCZpb2MtPmhiX25vdGlmeV9xKTsKKworCWJmYV9mc21fc2V0X3N0YXRlKGlvYywgYmZhX2lvY19zbV9yZXNldCk7Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIElPQyBjbGVhbnVwLgorICovCit2b2lkCitiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2ZzbV9zZW5kX2V2ZW50KGlvYywgSU9DX0VfREVUQUNIKTsKK30KKworLyoqCisgKiBTZXR1cCBJT0MgUENJIHByb3BlcnRpZXMuCisgKgorICogQHBhcmFtW2luXQlwY2lkZXYJUENJIGRldmljZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBJT0MKKyAqLwordm9pZAorYmZhX2lvY19wY2lfaW5pdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldiwKKwkJIGVudW0gYmZpX21jbGFzcyBtYykKK3sKKwlpb2MtPmlvY19tYyA9IG1jOworCWlvYy0+cGNpZGV2ID0gKnBjaWRldjsKKwlpb2MtPmN0ZGV2ID0gKGlvYy0+cGNpZGV2LmRldmljZV9pZCA9PSBCRkFfUENJX0RFVklDRV9JRF9DVCk7CisJaW9jLT5jbmEgPSBpb2MtPmN0ZGV2ICYmICFpb2MtPmZjbW9kZTsKKworCWJmYV9pb2NfbWFwX3BvcnQoaW9jKTsKKwliZmFfaW9jX3JlZ19pbml0KGlvYyk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZSBJT0MgZG1hIG1lbW9yeQorICoKKyAqIEBwYXJhbVtpbl0JZG1fa3ZhCWtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgSU9DIGRtYSBtZW1vcnkKKyAqIEBwYXJhbVtpbl0JZG1fcGEJcGh5c2ljYWwgYWRkcmVzcyBvZiBJT0MgZG1hIG1lbW9yeQorICovCit2b2lkCitiZmFfaW9jX21lbV9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHU4ICpkbV9rdmEsIHU2NCBkbV9wYSkKK3sKKwkvKioKKwkgKiBkbWEgbWVtb3J5IGZvciBmaXJtd2FyZSBhdHRyaWJ1dGUKKwkgKi8KKwlpb2MtPmF0dHJfZG1hLmt2YSA9IGRtX2t2YTsKKwlpb2MtPmF0dHJfZG1hLnBhID0gZG1fcGE7CisJaW9jLT5hdHRyID0gKHN0cnVjdCBiZmlfaW9jX2F0dHJfcyAqKWRtX2t2YTsKK30KKworLyoqCisgKiBSZXR1cm4gc2l6ZSBvZiBkbWEgbWVtb3J5IHJlcXVpcmVkLgorICovCit1MzIKK2JmYV9pb2NfbWVtaW5mbyh2b2lkKQoreworCXJldHVybiBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NfYXR0cl9zKSwgQkZBX0RNQV9BTElHTl9TWik7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZW5hYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2VuYWJsZXMpOworCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX1RSVUU7CisKKwliZmFfZnNtX3NlbmRfZXZlbnQoaW9jLCBJT0NfRV9FTkFCTEUpOworfQorCit2b2lkCitiZmFfaW9jX2Rpc2FibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9pb2Nfc3RhdHMoaW9jLCBpb2NfZGlzYWJsZXMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0RJU0FCTEUpOworfQorCisvKioKKyAqIFJldHVybnMgbWVtb3J5IHJlcXVpcmVkIGZvciBzYXZpbmcgZmlybXdhcmUgdHJhY2UgaW4gY2FzZSBvZiBjcmFzaC4KKyAqIERyaXZlciBtdXN0IGNhbGwgdGhpcyBpbnRlcmZhY2UgdG8gYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGZvcgorICogYXV0b21hdGljIHNhdmluZyBvZiBmaXJtd2FyZSB0cmFjZS4gRHJpdmVyIHNob3VsZCBjYWxsCisgKiBiZmFfaW9jX2RlYnVnX21lbWNsYWltKCkgcmlnaHQgYWZ0ZXIgYmZhX2lvY19hdHRhY2goKSB0byBzZXR1cCB0aGlzCisgKiB0cmFjZSBtZW1vcnkuCisgKi8KK2ludAorYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3ZlcikKK3sKK3JldHVybiAoYXV0b19yZWNvdmVyKSA/IEJGQV9EQkdfRldUUkNfTEVOIDogMDsKK30KKworLyoqCisgKiBJbml0aWFsaXplIG1lbW9yeSBmb3Igc2F2aW5nIGZpcm13YXJlIHRyYWNlLiBEcml2ZXIgbXVzdCBpbml0aWFsaXplCisgKiB0cmFjZSBtZW1vcnkgYmVmb3JlIGNhbGwgYmZhX2lvY19lbmFibGUoKS4KKyAqLwordm9pZAorYmZhX2lvY19kZWJ1Z19tZW1jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmRiZ19md3NhdmUpCit7CisJYmZhX2Fzc2VydChpb2MtPmF1dG9fcmVjb3Zlcik7CisJaW9jLT5kYmdfZndzYXZlID0gZGJnX2Z3c2F2ZTsKKwlpb2MtPmRiZ19md3NhdmVfbGVuID0gYmZhX2lvY19kZWJ1Z190cmNzeihpb2MtPmF1dG9fcmVjb3Zlcik7Cit9CisKK3UzMgorYmZhX2lvY19zbWVtX3BnbnVtKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdTMyIGZtYWRkcikKK3sKKwlyZXR1cm4gUFNTX1NNRU1fUEdOVU0oaW9jLT5pb2NfcmVncy5zbWVtX3BnMCwgZm1hZGRyKTsKK30KKwordTMyCitiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKQoreworCXJldHVybiBQU1NfU01FTV9QR09GRihmbWFkZHIpOworfQorCisvKioKKyAqIFJlZ2lzdGVyIG1haWxib3ggbWVzc2FnZSBoYW5kbGVyIGZ1bmN0aW9ucworICoKKyAqIEBwYXJhbVtpbl0JaW9jCQlJT0MgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0JbWNmdW5jcwkJbWVzc2FnZSBjbGFzcyBoYW5kbGVyIGZ1bmN0aW9ucworICovCit2b2lkCitiZmFfaW9jX21ib3hfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBiZmFfaW9jX21ib3hfbWNmdW5jX3QgKm1jZnVuY3MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJaW50ICAgICAgICAgICAgIG1jOworCisJZm9yIChtYyA9IDA7IG1jIDwgQkZJX01DX01BWDsgbWMrKykKKwkJbW9kLT5tYmhkbHJbbWNdLmNiZm4gPSBtY2Z1bmNzW21jXTsKK30KKworLyoqCisgKiBSZWdpc3RlciBtYWlsYm94IG1lc3NhZ2UgaGFuZGxlciBmdW5jdGlvbiwgdG8gYmUgY2FsbGVkIGJ5IGNvbW1vbiBtb2R1bGVzCisgKi8KK3ZvaWQKK2JmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCSAgICBiZmFfaW9jX21ib3hfbWNmdW5jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisKKwltb2QtPm1iaGRsclttY10uY2JmbiA9IGNiZm47CisJbW9kLT5tYmhkbHJbbWNdLmNiYXJnID0gY2Jhcmc7Cit9CisKKy8qKgorICogUXVldWUgYSBtYWlsYm94IGNvbW1hbmQgcmVxdWVzdCB0byBmaXJtd2FyZS4gV2FpdHMgaWYgbWFpbGJveCBpcyBidXN5LgorICogUmVzcG9uc2liaWxpdHkgb2YgY2FsbGVyIHRvIHNlcmlhbGl6ZQorICoKKyAqIEBwYXJhbVtpbl0JaW9jCUlPQyBpbnN0YW5jZQorICogQHBhcmFtW2ldCWNtZAlNYWlsYm94IGNvbW1hbmQKKyAqLwordm9pZAorYmZhX2lvY19tYm94X3F1ZXVlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9tYm94X2NtZF9zICpjbWQpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJdTMyICAgICAgICBzdGF0OworCisJLyoqCisJICogSWYgYSBwcmV2aW91cyBjb21tYW5kIGlzIHBlbmRpbmcsIHF1ZXVlIG5ldyBjb21tYW5kCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZtb2QtPmNtZF9xKSkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBJZiBtYWlsYm94IGlzIGJ1c3ksIHF1ZXVlIGNvbW1hbmQgZm9yIHBvbGwgdGltZXIKKwkgKi8KKwlzdGF0ID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3MuaGZuX21ib3hfY21kKTsKKwlpZiAoc3RhdCkgeworCQlsaXN0X2FkZF90YWlsKCZjbWQtPnFlLCAmbW9kLT5jbWRfcSk7CisJCXJldHVybjsKKwl9CisKKwkvKioKKwkgKiBtYWlsYm94IGlzIGZyZWUgLS0gcXVldWUgY29tbWFuZCB0byBmaXJtd2FyZQorCSAqLworCWJmYV9pb2NfbWJveF9zZW5kKGlvYywgY21kLT5tc2csIHNpemVvZihjbWQtPm1zZykpOworfQorCisvKioKKyAqIEhhbmRsZSBtYWlsYm94IGludGVycnVwdHMKKyAqLwordm9pZAorYmZhX2lvY19tYm94X2lzcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJc3RydWN0IGJmYV9pb2NfbWJveF9tb2RfcyAqbW9kID0gJmlvYy0+bWJveF9tb2Q7CisJc3RydWN0IGJmaV9tYm1zZ19zIG07CisJaW50ICAgICAgICAgICAgIG1jOworCisJYmZhX2lvY19tc2dnZXQoaW9jLCAmbSk7CisKKwkvKioKKwkgKiBUcmVhdCBJT0MgbWVzc2FnZSBjbGFzcyBhcyBzcGVjaWFsLgorCSAqLworCW1jID0gbS5taC5tc2dfY2xhc3M7CisJaWYgKG1jID09IEJGSV9NQ19JT0MpIHsKKwkJYmZhX2lvY19pc3IoaW9jLCAmbSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKG1jID4gQkZJX01DX01BWCkgfHwgKG1vZC0+bWJoZGxyW21jXS5jYmZuID09IE5VTEwpKQorCQlyZXR1cm47CisKKwltb2QtPm1iaGRsclttY10uY2Jmbihtb2QtPm1iaGRsclttY10uY2JhcmcsICZtKTsKK30KKwordm9pZAorYmZhX2lvY19lcnJvcl9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hXRVJST1IpOworfQorCisjaWZuZGVmIEJGQV9CSU9TX0JVSUxECisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGlzIGRpc2FibGVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9pb2NfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXJldHVybiAoYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGluZykKKwkJfHwgYmZhX2ZzbV9jbXBfc3RhdGUoaW9jLCBiZmFfaW9jX3NtX2Rpc2FibGVkKSk7Cit9CisKKy8qKgorICogcmV0dXJuIHRydWUgaWYgSU9DIGZpcm13YXJlIGlzIGRpZmZlcmVudC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19md19taXNtYXRjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIChiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fcmVzZXQpCisJCXx8IGJmYV9mc21fY21wX3N0YXRlKGlvYywgYmZhX2lvY19zbV9md2NoZWNrKQorCQl8fCBiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fbWlzbWF0Y2gpKTsKK30KKworI2RlZmluZSBiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKF9fc20pCQlcCisJKCgoX19zbSkgPT0gQkZJX0lPQ19VTklOSVQpIHx8CQlcCisJICgoX19zbSkgPT0gQkZJX0lPQ19JTklUSU5HKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfSFdJTklUKSB8fAkJXAorCSAoKF9fc20pID09IEJGSV9JT0NfRElTQUJMRUQpIHx8CVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0hCRkFJTCkgfHwJCVwKKwkgKChfX3NtKSA9PSBCRklfSU9DX0NGR19ESVNBQkxFRCkpCisKKy8qKgorICogQ2hlY2sgaWYgYWRhcHRlciBpcyBkaXNhYmxlZCAtLSBib3RoIElPQ3Mgc2hvdWxkIGJlIGluIGEgZGlzYWJsZWQKKyAqIHN0YXRlLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2FkYXB0ZXJfaXNfZGlzYWJsZWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaW9jX3N0YXRlOworCWJmYV9vc19hZGRyX3QgICByYiA9IGlvYy0+cGNpZGV2LnBjaV9iYXJfa3ZhOworCisJaWYgKCFiZmFfZnNtX2NtcF9zdGF0ZShpb2MsIGJmYV9pb2Nfc21fZGlzYWJsZWQpKQorCQlyZXR1cm4gQkZBX0ZBTFNFOworCisJaW9jX3N0YXRlID0gYmZhX3JlZ19yZWFkKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKTsKKwlpZiAoIWJmYV9pb2Nfc3RhdGVfZGlzYWJsZWQoaW9jX3N0YXRlKSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCWlvY19zdGF0ZSA9IGJmYV9yZWdfcmVhZChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRyk7CisJaWYgKCFiZmFfaW9jX3N0YXRlX2Rpc2FibGVkKGlvY19zdGF0ZSkpCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKy8qKgorICogQWRkIHRvIElPQyBoZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUuIFRvIGJlIHVzZWQgYnkgY29tbW9uCisgKiBtb2R1bGVzIHN1Y2ggYXMKKyAqLwordm9pZAorYmZhX2lvY19oYmZhaWxfcmVnaXN0ZXIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpCit7CisJbGlzdF9hZGRfdGFpbCgmbm90aWZ5LT5xZSwgJmlvYy0+aGJfbm90aWZ5X3EpOworfQorCisjZGVmaW5lIEJGQV9NRkdfTkFNRSAiQnJvY2FkZSIKK3ZvaWQKK2JmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCQkgc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyAqYWRfYXR0cikKK3sKKwlzdHJ1Y3QgYmZpX2lvY19hdHRyX3MgKmlvY19hdHRyOworCWNoYXIgICAgICAgICAgICBtb2RlbFtCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTl07CisKKwlpb2NfYXR0ciA9IGlvYy0+YXR0cjsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopJmFkX2F0dHItPnNlcmlhbF9udW0sCisJCSAgICAgICh2b2lkICopaW9jX2F0dHItPmJyY2Rfc2VyaWFsbnVtLAorCQkgICAgICBCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTik7CisKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5md192ZXIsIGlvY19hdHRyLT5md192ZXJzaW9uLCBCRkFfVkVSU0lPTl9MRU4pOworCWJmYV9vc19tZW1jcHkoJmFkX2F0dHItPm9wdHJvbV92ZXIsIGlvY19hdHRyLT5vcHRyb21fdmVyc2lvbiwKKwkJICAgICAgQkZBX1ZFUlNJT05fTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT5tYW51ZmFjdHVyZXIsIEJGQV9NRkdfTkFNRSwKKwkJICAgICAgQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOKTsKKwliZmFfb3NfbWVtY3B5KCZhZF9hdHRyLT52cGQsICZpb2NfYXR0ci0+dnBkLAorCQkgICAgICBzaXplb2Yoc3RydWN0IGJmYV9tZmdfdnBkX3MpKTsKKworCWFkX2F0dHItPm5wb3J0cyA9IEJGSV9BREFQVEVSX0dFVFAoTlBPUlRTLCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwlhZF9hdHRyLT5tYXhfc3BlZWQgPSBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKworCS8qKgorCSAqIG1vZGVsIG5hbWUKKwkgKi8KKwlpZiAoQkZJX0FEQVBURVJfR0VUUChTUEVFRCwgaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkgPT0gMTApIHsKKwkJc3RyY3B5KG1vZGVsLCAiQlItMTA/MCIpOworCQltb2RlbFs1XSA9ICcwJyArIGFkX2F0dHItPm5wb3J0czsKKwl9IGVsc2UgeworCQlzdHJjcHkobW9kZWwsICJCcm9jYWRlLT8/NSIpOworCQltb2RlbFs4XSA9CisJCQknMCcgKyBCRklfQURBUFRFUl9HRVRQKFNQRUVELCBpb2NfYXR0ci0+YWRhcHRlcl9wcm9wKTsKKwkJbW9kZWxbOV0gPSAnMCcgKyBhZF9hdHRyLT5ucG9ydHM7CisJfQorCisJaWYgKEJGSV9BREFQVEVSX0lTX1NQRUNJQUwoaW9jX2F0dHItPmFkYXB0ZXJfcHJvcCkpCisJCWFkX2F0dHItPnByb3RvdHlwZSA9IDE7CisJZWxzZQorCQlhZF9hdHRyLT5wcm90b3R5cGUgPSAwOworCisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWwsIG1vZGVsLCBCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTik7CisJYmZhX29zX21lbWNweSgmYWRfYXR0ci0+bW9kZWxfZGVzY3IsICZhZF9hdHRyLT5tb2RlbCwKKwkJICAgICAgQkZBX0FEQVBURVJfTU9ERUxfTkFNRV9MRU4pOworCisJYWRfYXR0ci0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwlhZF9hdHRyLT5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKworCWFkX2F0dHItPnBjaWVfZ2VuID0gaW9jX2F0dHItPnBjaWVfZ2VuOworCWFkX2F0dHItPnBjaWVfbGFuZXMgPSBpb2NfYXR0ci0+cGNpZV9sYW5lczsKKwlhZF9hdHRyLT5wY2llX2xhbmVzX29yaWcgPSBpb2NfYXR0ci0+cGNpZV9sYW5lc19vcmlnOworCWFkX2F0dHItPmFzaWNfcmV2ID0gaW9jX2F0dHItPmFzaWNfcmV2OworCWFkX2F0dHItPmh3X3ZlclswXSA9ICdSJzsKKwlhZF9hdHRyLT5od192ZXJbMV0gPSAnZSc7CisJYWRfYXR0ci0+aHdfdmVyWzJdID0gJ3YnOworCWFkX2F0dHItPmh3X3ZlclszXSA9ICctJzsKKwlhZF9hdHRyLT5od192ZXJbNF0gPSBpb2NfYXR0ci0+YXNpY19yZXY7CisJYWRfYXR0ci0+aHdfdmVyWzVdID0gJ1wwJzsKKworCWFkX2F0dHItPmNuYV9jYXBhYmxlID0gaW9jLT5jbmE7Cit9CisKK3ZvaWQKK2JmYV9pb2NfZ2V0X2F0dHIoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKQoreworCWJmYV9vc19tZW1zZXQoKHZvaWQgKilpb2NfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9jX2F0dHJfcykpOworCisJaW9jX2F0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGlvY19zbV90YWJsZSwgaW9jLT5mc20pOworCWlvY19hdHRyLT5wb3J0X2lkID0gaW9jLT5wb3J0X2lkOworCisJaWYgKCFpb2MtPmN0ZGV2KQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkM7CisJZWxzZSBpZiAoaW9jLT5pb2NfbWMgPT0gQkZJX01DX0lPQ0ZDKQorCQlpb2NfYXR0ci0+aW9jX3R5cGUgPSBCRkFfSU9DX1RZUEVfRkNvRTsKKwllbHNlIGlmIChpb2MtPmlvY19tYyA9PSBCRklfTUNfTEwpCisJCWlvY19hdHRyLT5pb2NfdHlwZSA9IEJGQV9JT0NfVFlQRV9MTDsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihpb2MsICZpb2NfYXR0ci0+YWRhcHRlcl9hdHRyKTsKKworCWlvY19hdHRyLT5wY2lfYXR0ci5kZXZpY2VfaWQgPSBpb2MtPnBjaWRldi5kZXZpY2VfaWQ7CisJaW9jX2F0dHItPnBjaV9hdHRyLnBjaWZuID0gaW9jLT5wY2lkZXYucGNpX2Z1bmM7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzBdID0gJ1InOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3JldlsxXSA9ICdlJzsKKwlpb2NfYXR0ci0+cGNpX2F0dHIuY2hpcF9yZXZbMl0gPSAndic7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzNdID0gJy0nOworCWlvY19hdHRyLT5wY2lfYXR0ci5jaGlwX3Jldls0XSA9IGlvY19hdHRyLT5hZGFwdGVyX2F0dHIuYXNpY19yZXY7CisJaW9jX2F0dHItPnBjaV9hdHRyLmNoaXBfcmV2WzVdID0gJ1wwJzsKK30KKworLyoqCisgKiAgaGFsX3d3bl9wdWJsaWMKKyAqLword3duX3QKK2JmYV9pb2NfZ2V0X3B3d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXJldHVybiB3Lnd3bjsKK30KKword3duX3QKK2JmYV9pb2NfZ2V0X253d24oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3OworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisKKwlpZiAoYmZhX2lvY19wb3J0aWQoaW9jKSA9PSAxKQorCQl3LmJ5dGVbN10rKzsKKworCXcuYnl0ZVswXSA9IDB4MjA7CisKKwlyZXR1cm4gdy53d247Cit9CisKK3d3bl90CitiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KQoreworCXVuaW9uIHsKKwkJd3duX3QgICAgICAgICAgIHd3bjsKKwkJdTggICAgICAgICBieXRlW3NpemVvZih3d25fdCldOworCX0KKwl3ICAgICAgICAgICAgICAsIHc1OworCisJYmZhX3RyYyhpb2MsIGluc3QpOworCisJdy53d24gPSBpb2MtPmF0dHItPm1mZ193d247CisJdzUuYnl0ZVswXSA9IDB4NTAgfCB3LmJ5dGVbMl0gPj4gNDsKKwl3NS5ieXRlWzFdID0gdy5ieXRlWzJdIDw8IDQgfCB3LmJ5dGVbM10gPj4gNDsKKwl3NS5ieXRlWzJdID0gdy5ieXRlWzNdIDw8IDQgfCB3LmJ5dGVbNF0gPj4gNDsKKwl3NS5ieXRlWzNdID0gdy5ieXRlWzRdIDw8IDQgfCB3LmJ5dGVbNV0gPj4gNDsKKwl3NS5ieXRlWzRdID0gdy5ieXRlWzVdIDw8IDQgfCB3LmJ5dGVbNl0gPj4gNDsKKwl3NS5ieXRlWzVdID0gdy5ieXRlWzZdIDw8IDQgfCB3LmJ5dGVbN10gPj4gNDsKKwl3NS5ieXRlWzZdID0gdy5ieXRlWzddIDw8IDQgfCAoaW5zdCAmIDB4MGYwMCkgPj4gODsKKwl3NS5ieXRlWzddID0gKGluc3QgJiAweGZmKTsKKworCXJldHVybiB3NS53d247Cit9CisKK3U2NAorYmZhX2lvY19nZXRfYWRpZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJcmV0dXJuIGlvYy0+YXR0ci0+bWZnX3d3bjsKK30KKworbWFjX3QKK2JmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJbWFjX3QgICAgICAgICAgIG1hYzsKKworCW1hYyA9IGlvYy0+YXR0ci0+bWZnX21hYzsKKwltYWMubWFjW01BQ19BRERSTEVOIC0gMV0gKz0gYmZhX2lvY19wY2lmbihpb2MpOworCisJcmV0dXJuIG1hYzsKK30KKwordm9pZAorYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlpb2MtPmZjbW9kZSA9IEJGQV9UUlVFOworCWlvYy0+cG9ydF9pZCA9IGJmYV9pb2NfcGNpZm4oaW9jKTsKK30KKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY19nZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYykKK3sKKwlyZXR1cm4gaW9jLT5mY21vZGUgfHwgKGlvYy0+cGNpZGV2LmRldmljZV9pZCAhPSBCRkFfUENJX0RFVklDRV9JRF9DVCk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaW50ZXJydXB0IHNob3VsZCBiZSBjbGFpbWVkLgorICovCitiZmFfYm9vbGVhbl90CitiZmFfaW9jX2ludHhfY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCXUzMiAgICAgICAgaXNyLCBtc2s7CisKKwkvKioKKwkgKiBBbHdheXMgY2xhaW0gaWYgbm90IGNhdGFwdWx0LgorCSAqLworCWlmICghaW9jLT5jdGRldikKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJLyoqCisJICogRkFMU0UgaWYgbmV4dCBkZXZpY2UgaXMgY2xhaW1pbmcgaW50ZXJydXB0LgorCSAqIFRSVUUgaWYgbmV4dCBkZXZpY2UgaXMgbm90IGludGVycnVwdGluZyBvciBub3QgcHJlc2VudC4KKwkgKi8KKwltc2sgPSBiZmFfcmVnX3JlYWQoaW9jLT5pb2NfcmVncy5zaGlycV9tc2tfbmV4dCk7CisJaXNyID0gYmZhX3JlZ19yZWFkKGlvYy0+aW9jX3JlZ3Muc2hpcnFfaXNyX25leHQpOworCXJldHVybiAhKGlzciAmIH5tc2spOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY19hZW5fcG9zdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIGVudW0gYmZhX2lvY19hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IGlvYy0+bG9nbTsKKwlzMzIgICAgICAgICBpbnN0X251bSA9IDA7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zIGlvY19hdHRyOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPQ19BRU5fSEJHT09EOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJHT09ELCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fSEJGQUlMOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfSEJGQUlMLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRU5BQkxFOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRU5BQkxFLCBpbnN0X251bSk7CisJCWJyZWFrOworCWNhc2UgQkZBX0lPQ19BRU5fRElTQUJMRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fSU9DX0RJU0FCTEUsIGluc3RfbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX0FFTl9GV01JU01BVENIOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCwgaW5zdF9udW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5wd3duLCAwLCBzaXplb2YoYWVuX2RhdGEuaW9jLnB3d24pKTsKKwltZW1zZXQoJmFlbl9kYXRhLmlvYy5tYWMsIDAsIHNpemVvZihhZW5fZGF0YS5pb2MubWFjKSk7CisJYmZhX2lvY19nZXRfYXR0cihpb2MsICZpb2NfYXR0cik7CisJc3dpdGNoIChpb2NfYXR0ci5pb2NfdHlwZSkgeworCWNhc2UgQkZBX0lPQ19UWVBFX0ZDOgorCQlhZW5fZGF0YS5pb2MucHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfRkNvRToKKwkJYWVuX2RhdGEuaW9jLnB3d24gPSBiZmFfaW9jX2dldF9wd3duKGlvYyk7CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSU9DX1RZUEVfTEw6CisJCWFlbl9kYXRhLmlvYy5tYWMgPSBiZmFfaW9jX2dldF9tYWMoaW9jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydChpb2NfYXR0ci5pb2NfdHlwZSA9PSBCRkFfSU9DX1RZUEVfRkMpOworCQlicmVhazsKKwl9CisJYWVuX2RhdGEuaW9jLmlvY190eXBlID0gaW9jX2F0dHIuaW9jX3R5cGU7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqdHJjZGF0YSwgaW50ICp0cmNsZW4pCit7CisJaW50ICAgICAgICAgICAgIHRsZW47CisKKwlpZiAoaW9jLT5kYmdfZndzYXZlX2xlbiA9PSAwKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FTk9GU0FWRTsKKworCXRsZW4gPSAqdHJjbGVuOworCWlmICh0bGVuID4gaW9jLT5kYmdfZndzYXZlX2xlbikKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisKKwliZmFfb3NfbWVtY3B5KHRyY2RhdGEsIGlvYy0+ZGJnX2Z3c2F2ZSwgdGxlbik7CisJKnRyY2xlbiA9IHRsZW47CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogUmV0cmlldmUgc2F2ZWQgZmlybXdhcmUgdHJhY2UgZnJvbSBhIHByaW9yIElPQyBmYWlsdXJlLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbikKK3sKKwl1MzIgICAgICAgIHBnbnVtOworCXUzMiAgICAgICAgbG9mZiA9IEJGQV9EQkdfRldUUkNfT0ZGKGJmYV9pb2NfcG9ydGlkKGlvYykpOworCWludCAgICAgICAgICAgICBpLCB0bGVuOworCXUzMiAgICAgICAqdGJ1ZiA9IHRyY2RhdGEsIHIzMjsKKworCWJmYV90cmMoaW9jLCAqdHJjbGVuKTsKKworCXBnbnVtID0gYmZhX2lvY19zbWVtX3BnbnVtKGlvYywgbG9mZik7CisJbG9mZiA9IGJmYV9pb2Nfc21lbV9wZ29mZihpb2MsIGxvZmYpOworCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisKKwl0bGVuID0gKnRyY2xlbjsKKwlpZiAodGxlbiA+IEJGQV9EQkdfRldUUkNfTEVOKQorCQl0bGVuID0gQkZBX0RCR19GV1RSQ19MRU47CisJdGxlbiAvPSBzaXplb2YodTMyKTsKKworCWJmYV90cmMoaW9jLCB0bGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCB0bGVuOyBpKyspIHsKKwkJcjMyID0gYmZhX21lbV9yZWFkKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0LCBsb2ZmKTsKKwkJdGJ1ZltpXSA9IGJmYV9vc19udG9obChyMzIpOworCQlsb2ZmICs9IHNpemVvZih1MzIpOworCisJCS8qKgorCQkgKiBoYW5kbGUgcGFnZSBvZmZzZXQgd3JhcCBhcm91bmQKKwkJICovCisJCWxvZmYgPSBQU1NfU01FTV9QR09GRihsb2ZmKTsKKwkJaWYgKGxvZmYgPT0gMCkgeworCQkJcGdudW0rKzsKKwkJCWJmYV9yZWdfd3JpdGUoaW9jLT5pb2NfcmVncy5ob3N0X3BhZ2VfbnVtX2ZuLCBwZ251bSk7CisJCX0KKwl9CisJYmZhX3JlZ193cml0ZShpb2MtPmlvY19yZWdzLmhvc3RfcGFnZV9udW1fZm4sCisJCSAgICAgIGJmYV9pb2Nfc21lbV9wZ251bShpb2MsIDApKTsKKwliZmFfdHJjKGlvYywgcGdudW0pOworCisJKnRyY2xlbiA9IHRsZW4gKiBzaXplb2YodTMyKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBTYXZlIGZpcm13YXJlIHRyYWNlIGlmIGNvbmZpZ3VyZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jX2RlYnVnX3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKQoreworCWludCAgICAgICAgICAgICB0bGVuOworCisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9sZW4pIHsKKwkJdGxlbiA9IGlvYy0+ZGJnX2Z3c2F2ZV9sZW47CisJCWJmYV9pb2NfZGVidWdfZnd0cmMoaW9jLCBpb2MtPmRiZ19md3NhdmUsICZ0bGVuKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgZmFpbHVyZSBkZXRlY3RlZC4gU3RhcnQgcmVjb3ZlcnkgYWN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJaWYgKGlvYy0+ZGJnX2Z3c2F2ZV9vbmNlKSB7CisJCWlvYy0+ZGJnX2Z3c2F2ZV9vbmNlID0gQkZBX0ZBTFNFOworCQliZmFfaW9jX2RlYnVnX3NhdmUoaW9jKTsKKwl9CisKKwliZmFfaW9jX3N0YXRzKGlvYywgaW9jX2hiZmFpbHMpOworCWJmYV9mc21fc2VuZF9ldmVudChpb2MsIElPQ19FX0hCRkFJTCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkCitiZmFfaW9jX2Flbl9wb3N0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgZW51bSBiZmFfaW9jX2Flbl9ldmVudCBldmVudCkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NfcmVjb3ZlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworI2VuZGlmCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGVmZDRiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvYy5oCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfSU9DX0hfXworI2RlZmluZSBfX0JGQV9JT0NfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9pb2MuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2Jvb3QuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHJlcXVpcmVkIGJ5IElPQworICovCitzdHJ1Y3QgYmZhX3BjaWRldl9zIHsKKwlpbnQgICAgICAgICAgICAgcGNpX3Nsb3Q7CisJdTggICAgICAgICBwY2lfZnVuYzsKKwl1MTYJZGV2aWNlX2lkOworCWJmYV9vc19hZGRyX3QgICBwY2lfYmFyX2t2YTsKK307CisKKy8qKgorICogU3RydWN0dXJlIHVzZWQgdG8gcmVtZW1iZXIgdGhlIERNQS1hYmxlIG1lbW9yeSBibG9jaydzIEtWQSBhbmQgUGh5c2ljYWwKKyAqIEFkZHJlc3MKKyAqLworc3RydWN0IGJmYV9kbWFfcyB7CisJdm9pZAkJKmt2YTsJLyohIEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MJKi8KKwl1NjQJcGE7CS8qISBQaHlzaWNhbCBhZGRyZXNzCQkqLworfTsKKworI2RlZmluZSBCRkFfRE1BX0FMSUdOX1NaCTI1NgorI2RlZmluZSBCRkFfUk9VTkRVUChfbCwgX3MpCSgoKF9sKSArICgoX3MpIC0gMSkpICYgfigoX3MpIC0gMSkpCisKKworCisjZGVmaW5lIGJmYV9kbWFfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19iZmFfZG1hX2FkZHJfc2V0KHVuaW9uIGJmaV9hZGRyX3UgKmRtYV9hZGRyLCB1NjQgcGEpCit7CisJZG1hX2FkZHItPmEzMi5hZGRyX2xvID0gKHUzMikgcGE7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgKGJmYV9vc191MzIocGEpKTsKK30KKworCisjZGVmaW5lIGJmYV9kbWFfYmVfYWRkcl9zZXQoZG1hX2FkZHIsIHBhKQlcCisJCV9fYmZhX2RtYV9iZV9hZGRyX3NldCgmZG1hX2FkZHIsICh1NjQpcGEpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYmZhX2RtYV9iZV9hZGRyX3NldCh1bmlvbiBiZmlfYWRkcl91ICpkbWFfYWRkciwgdTY0IHBhKQoreworCWRtYV9hZGRyLT5hMzIuYWRkcl9sbyA9ICh1MzIpIGJmYV9vc19odG9ubChwYSk7CisJZG1hX2FkZHItPmEzMi5hZGRyX2hpID0gKHUzMikgYmZhX29zX2h0b25sKGJmYV9vc191MzIocGEpKTsKK30KKworc3RydWN0IGJmYV9pb2NfcmVnc19zIHsKKwliZmFfb3NfYWRkcl90ICAgaGZuX21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBoZm5fbWJveDsKKwliZmFfb3NfYWRkcl90ICAgbHB1X21ib3hfY21kOworCWJmYV9vc19hZGRyX3QgICBscHVfbWJveDsKKwliZmFfb3NfYWRkcl90ICAgcHNzX2N0bF9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGFwcF9wbGxfZmFzdF9jdGxfcmVnOworCWJmYV9vc19hZGRyX3QgICBhcHBfcGxsX3Nsb3dfY3RsX3JlZzsKKwliZmFfb3NfYWRkcl90ICAgaW9jX3NlbV9yZWc7CisJYmZhX29zX2FkZHJfdCAgIGlvY191c2FnZV9zZW1fcmVnOworCWJmYV9vc19hZGRyX3QgICBpb2NfdXNhZ2VfcmVnOworCWJmYV9vc19hZGRyX3QgICBob3N0X3BhZ2VfbnVtX2ZuOworCWJmYV9vc19hZGRyX3QgICBoZWFydGJlYXQ7CisJYmZhX29zX2FkZHJfdCAgIGlvY19md3N0YXRlOworCWJmYV9vc19hZGRyX3QgICBsbF9oYWx0OworCWJmYV9vc19hZGRyX3QgICBzaGlycV9pc3JfbmV4dDsKKwliZmFfb3NfYWRkcl90ICAgc2hpcnFfbXNrX25leHQ7CisJYmZhX29zX2FkZHJfdCAgIHNtZW1fcGFnZV9zdGFydDsKKwl1MzIJc21lbV9wZzA7Cit9OworCisjZGVmaW5lIGJmYV9yZWdfcmVhZChfcmFkZHIpCWJmYV9vc19yZWdfcmVhZChfcmFkZHIpCisjZGVmaW5lIGJmYV9yZWdfd3JpdGUoX3JhZGRyLCBfdmFsKQliZmFfb3NfcmVnX3dyaXRlKF9yYWRkciwgX3ZhbCkKKyNkZWZpbmUgYmZhX21lbV9yZWFkKF9yYWRkciwgX29mZikJYmZhX29zX21lbV9yZWFkKF9yYWRkciwgX29mZikKKyNkZWZpbmUgYmZhX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCVwKKwkJCQkJYmZhX29zX21lbV93cml0ZShfcmFkZHIsIF9vZmYsIF92YWwpCisvKioKKyAqIElPQyBNYWlsYm94IHN0cnVjdHVyZXMKKyAqLworc3RydWN0IGJmYV9tYm94X2NtZF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwl1MzIJbXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJT0MgbWFpbGJveCBtb2R1bGUKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2lvY19tYm94X21jZnVuY190KSh2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKTsKK3N0cnVjdCBiZmFfaW9jX21ib3hfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQJY21kX3E7CQkvKiAgcGVuZGluZyBtYm94IHF1ZXVlCSovCisJaW50CQlubWNsYXNzOwkvKiAgbnVtYmVyIG9mIGhhbmRsZXJzICovCisJc3RydWN0IHsKKwkJYmZhX2lvY19tYm94X21jZnVuY190CWNiZm47CS8qICBtZXNzYWdlIGhhbmRsZXJzCSovCisJCXZvaWQJCQkqY2Jhcmc7CisJfSBtYmhkbHJbQkZJX01DX01BWF07Cit9OworCisvKioKKyAqIElPQyBjYWxsYmFjayBmdW5jdGlvbiBpbnRlcmZhY2VzCisgKi8KK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZW5hYmxlX2NiZm5fdCkodm9pZCAqYmZhLCBlbnVtIGJmYV9zdGF0dXMgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9pb2NfZGlzYWJsZV9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX2hiZmFpbF9jYmZuX3QpKHZvaWQgKmJmYSk7Cit0eXBlZGVmIHZvaWQgKCpiZmFfaW9jX3Jlc2V0X2NiZm5fdCkodm9pZCAqYmZhKTsKK3N0cnVjdCBiZmFfaW9jX2NiZm5fcyB7CisJYmZhX2lvY19lbmFibGVfY2Jmbl90CWVuYWJsZV9jYmZuOworCWJmYV9pb2NfZGlzYWJsZV9jYmZuX3QJZGlzYWJsZV9jYmZuOworCWJmYV9pb2NfaGJmYWlsX2NiZm5fdAloYmZhaWxfY2JmbjsKKwliZmFfaW9jX3Jlc2V0X2NiZm5fdAlyZXNldF9jYmZuOworfTsKKworLyoqCisgKiBIZWFydGJlYXQgZmFpbHVyZSBub3RpZmljYXRpb24gcXVldWUgZWxlbWVudC4KKyAqLworc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxZTsKKwliZmFfaW9jX2hiZmFpbF9jYmZuX3QJY2JmbjsKKwl2b2lkCQkJKmNiYXJnOworfTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgaGVhcnRiZWF0IGZhaWx1cmUgbm90aWZpY2F0aW9uIHN0cnVjdHVyZQorICovCisjZGVmaW5lIGJmYV9pb2NfaGJmYWlsX2luaXQoX19ub3RpZnksIF9fY2JmbiwgX19jYmFyZykgZG8gewlcCisJKF9fbm90aWZ5KS0+Y2JmbiA9IChfX2NiZm4pOyAgICAgIFwKKwkoX19ub3RpZnkpLT5jYmFyZyA9IChfX2NiYXJnKTsgICAgICBcCit9IHdoaWxlICgwKQorCitzdHJ1Y3QgYmZhX2lvY19zIHsKKwliZmFfZnNtX3QJCWZzbTsKKwlzdHJ1Y3QgYmZhX3MJCSpiZmE7CisJc3RydWN0IGJmYV9wY2lkZXZfcwlwY2lkZXY7CisJc3RydWN0IGJmYV90aW1lcl9tb2RfcyAJKnRpbWVyX21vZDsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCWlvY190aW1lcjsKKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXNlbV90aW1lcjsKKwl1MzIJCWhiX2NvdW50OworCXUzMgkJaGJfZmFpbDsKKwl1MzIJCXJldHJ5X2NvdW50OworCXN0cnVjdCBsaXN0X2hlYWQJCWhiX25vdGlmeV9xOworCXZvaWQJCQkqZGJnX2Z3c2F2ZTsKKwlpbnQJCQlkYmdfZndzYXZlX2xlbjsKKwliZmFfYm9vbGVhbl90CQlkYmdfZndzYXZlX29uY2U7CisJZW51bSBiZmlfbWNsYXNzCQlpb2NfbWM7CisJc3RydWN0IGJmYV9pb2NfcmVnc19zIAlpb2NfcmVnczsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcwkqdHJjbW9kOworCXN0cnVjdCBiZmFfYWVuX3MJKmFlbjsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcwkqbG9nbTsKKwlzdHJ1Y3QgYmZhX2lvY19kcnZfc3RhdHNfcwlzdGF0czsKKwliZmFfYm9vbGVhbl90CQlhdXRvX3JlY292ZXI7CisJYmZhX2Jvb2xlYW5fdAkJZmNtb2RlOworCWJmYV9ib29sZWFuX3QJCWN0ZGV2OworCWJmYV9ib29sZWFuX3QJCWNuYTsKKwliZmFfYm9vbGVhbl90CQlwbGxpbml0OworCXU4CQkJcG9ydF9pZDsKKworCXN0cnVjdCBiZmFfZG1hX3MJYXR0cl9kbWE7CisJc3RydWN0IGJmaV9pb2NfYXR0cl9zCSphdHRyOworCXN0cnVjdCBiZmFfaW9jX2NiZm5fcwkqY2JmbjsKKwlzdHJ1Y3QgYmZhX2lvY19tYm94X21vZF9zIG1ib3hfbW9kOworfTsKKworI2RlZmluZSBiZmFfaW9jX3BjaWZuKF9faW9jKQkJKF9faW9jKS0+cGNpZGV2LnBjaV9mdW5jCisjZGVmaW5lIGJmYV9pb2NfZGV2aWQoX19pb2MpCQkoX19pb2MpLT5wY2lkZXYuZGV2aWNlX2lkCisjZGVmaW5lIGJmYV9pb2NfYmFyMChfX2lvYykJCShfX2lvYyktPnBjaWRldi5wY2lfYmFyX2t2YQorI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykJCSgoX19pb2MpLT5wb3J0X2lkKQorI2RlZmluZSBiZmFfaW9jX2ZldGNoX3N0YXRzKF9faW9jLCBfX3N0YXRzKSBcCisJCSgoX19zdGF0cyktPmRydl9zdGF0cykgPSAoX19pb2MpLT5zdGF0cworI2RlZmluZSBiZmFfaW9jX2Nscl9zdGF0cyhfX2lvYykJXAorCQliZmFfb3NfbWVtc2V0KCYoX19pb2MpLT5zdGF0cywgMCwgc2l6ZW9mKChfX2lvYyktPnN0YXRzKSkKKyNkZWZpbmUgYmZhX2lvY19tYXhmcnNpemUoX19pb2MpCShfX2lvYyktPmF0dHItPm1heGZyc2l6ZQorI2RlZmluZSBiZmFfaW9jX3J4X2JiY3JlZGl0KF9faW9jKQkoX19pb2MpLT5hdHRyLT5yeF9iYmNyZWRpdAorI2RlZmluZSBiZmFfaW9jX3NwZWVkX3N1cChfX2lvYykJXAorCUJGSV9BREFQVEVSX0dFVFAoU1BFRUQsIChfX2lvYyktPmF0dHItPmFkYXB0ZXJfcHJvcCkKKworLyoqCisgKiBJT0MgbWFpbGJveCBpbnRlcmZhY2UKKyAqLwordm9pZCBiZmFfaW9jX21ib3hfcXVldWUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZhX21ib3hfY21kX3MgKmNtZCk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCAqbWNmdW5jcyk7Cit2b2lkIGJmYV9pb2NfbWJveF9pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19tYm94X3NlbmQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICppb2NfbXNnLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2lvY19tc2dnZXQoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICptYm1zZyk7Cit2b2lkIGJmYV9pb2NfbWJveF9yZWdpc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBlbnVtIGJmaV9tY2xhc3MgbWMsCisJCWJmYV9pb2NfbWJveF9tY2Z1bmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKKy8qKgorICogSU9DIGludGVyZmFjZXMKKyAqLwordm9pZCBiZmFfaW9jX2F0dGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKmJmYSwKKwkJc3RydWN0IGJmYV9pb2NfY2Jmbl9zICpjYmZuLCBzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICp0aW1lcl9tb2QsCisJCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2QsCisJCXN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20pOwordm9pZCBiZmFfaW9jX2RldGFjaChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX3BjaV9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2LAorCQllbnVtIGJmaV9tY2xhc3MgbWMpOwordTMyIGJmYV9pb2NfbWVtaW5mbyh2b2lkKTsKK3ZvaWQgYmZhX2lvY19tZW1fY2xhaW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCAgdTggKmRtX2t2YSwgdTY0IGRtX3BhKTsKK3ZvaWQgYmZhX2lvY19lbmFibGUoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK3ZvaWQgYmZhX2lvY19kaXNhYmxlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaW50eF9jbGFpbShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworCit2b2lkIGJmYV9pb2NfYm9vdChzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKTsKK3ZvaWQgYmZhX2lvY19pc3Ioc3RydWN0IGJmYV9pb2NfcyAqaW9jLCBzdHJ1Y3QgYmZpX21ibXNnX3MgKm1zZyk7Cit2b2lkIGJmYV9pb2NfZXJyb3JfaXNyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit2b2lkIGJmYV9pb2NfaXNyX21vZGVfc2V0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgYmZhX2Jvb2xlYW5fdCBpbnR4KTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jX3BsbF9pbml0KHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKK2JmYV9ib29sZWFuX3QgYmZhX2lvY19pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOworYmZhX2Jvb2xlYW5fdCBiZmFfaW9jX2Z3X21pc21hdGNoKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfYWRhcHRlcl9pc19kaXNhYmxlZChzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2NmZ19jb21wbGV0ZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2dldF9hdHRyKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgc3RydWN0IGJmYV9pb2NfYXR0cl9zICppb2NfYXR0cik7Cit2b2lkIGJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOworaW50IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2Jvb2xlYW5fdCBhdXRvX3JlY292ZXIpOwordm9pZCBiZmFfaW9jX2RlYnVnX21lbWNsYWltKHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGJnX2Z3c2F2ZSk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3NhdmUoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICp0cmNkYXRhLAorCQlpbnQgKnRyY2xlbik7CitiZmFfc3RhdHVzX3QgYmZhX2lvY19kZWJ1Z19md3RyYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHZvaWQgKnRyY2RhdGEsCisJCQkJIGludCAqdHJjbGVuKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdudW0oc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3UzMiBiZmFfaW9jX3NtZW1fcGdvZmYoc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB1MzIgZm1hZGRyKTsKK3ZvaWQgYmZhX2lvY19zZXRfZmNtb2RlKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NfZ2V0X2ZjbW9kZShzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordm9pZCBiZmFfaW9jX2hiZmFpbF9yZWdpc3RlcihzdHJ1Y3QgYmZhX2lvY19zICppb2MsCisJc3RydWN0IGJmYV9pb2NfaGJmYWlsX25vdGlmeV9zICpub3RpZnkpOworCisvKgorICogYmZhIG1mZyB3d24gQVBJIGZ1bmN0aW9ucworICovCit3d25fdCBiZmFfaW9jX2dldF9wd3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF9ud3duKHN0cnVjdCBiZmFfaW9jX3MgKmlvYyk7Cit3d25fdCBiZmFfaW9jX2dldF93d25fbmFhNShzdHJ1Y3QgYmZhX2lvY19zICppb2MsIHUxNiBpbnN0KTsKK21hY190IGJmYV9pb2NfZ2V0X21hYyhzdHJ1Y3QgYmZhX2lvY19zICppb2MpOwordTY0IGJmYV9pb2NfZ2V0X2FkaWQoc3RydWN0IGJmYV9pb2NfcyAqaW9jKTsKKworI2VuZGlmIC8qIF9fQkZBX0lPQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIzNTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjLmMKQEAgLTAsMCArMSw4NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGJmYV9wcml2Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfaGFsLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9ib290Lmg+CisjaW5jbHVkZSA8YmZpL2JmaV9jYnJlZy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorI2luY2x1ZGUgImJmYV9jYWxsYmFja19wcml2LmgiCisjaW5jbHVkZSAiYmZhZF9kcnYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkMpOworCisvKioKKyAqIElPQyBsb2NhbCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEJGQV9JT0NGQ19UT1YJCTUwMDAJLyogbXNlY3MgKi8KKworZW51bSB7CisJQkZBX0lPQ0ZDX0FDVF9OT05FCT0gMCwKKwlCRkFfSU9DRkNfQUNUX0lOSVQJPSAxLAorCUJGQV9JT0NGQ19BQ1RfU1RPUAk9IDIsCisJQkZBX0lPQ0ZDX0FDVF9ESVNBQkxFCT0gMywKK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfZGlzYWJsZV9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX2hiZmFpbF9jYmZuKHZvaWQgKmJmYV9hcmcpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3Jlc2V0X2NiZm4odm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfY2xlYXIodm9pZCAqYmZhX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfaW9jZmNfc3RhdHNfc3dhcChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKmQsCisJCQlzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKnMpOworc3RhdGljIHZvaWQgYmZhX2lvY2ZjX3N0YXRzX2Nscl9jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c19jYih2b2lkICpiZmFfYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGJmYV9pb2NmY19zdGF0c190aW1lb3V0KHZvaWQgKmJmYV9hcmcpOworCitzdGF0aWMgc3RydWN0IGJmYV9pb2NfY2Jmbl9zIGJmYV9pb2NmY19jYmZuOworCisvKioKKyAqICBiZmFfaW9jX3B2dCBCRkEgSU9DIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19jcXNfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwlpbnQgICAgICAgICAgICAgaSwgcGVyX3JlcXFfc3osIHBlcl9yc3BxX3N6OworCisJcGVyX3JlcXFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisJcGVyX3JzcHFfc3ogPSBCRkFfUk9VTkRVUCgoY2ZnLT5kcnZjZmcubnVtX3JzcHFfZWxlbXMgKiBCRklfTE1TR19TWiksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBDUSBzaXplCisJICovCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JlcXFfc3o7CisJCSpkbV9sZW4gPSAqZG1fbGVuICsgcGVyX3JzcHFfc3o7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgU2hhZG93IENJL1BJIHNpemUKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5md2NmZy5udW1fY3FzOyBpKyspCisJCSpkbV9sZW4gKz0gKDIgKiBCRkFfQ0FDSEVMSU5FX1NaKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19md19jZmdfc3ooc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmRtX2xlbikKK3sKKwkqZG1fbGVuICs9CisJCUJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPQorCQlCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyksCisJCQkgICAgQkZBX0NBQ0hFTElORV9TWik7CisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7Cit9CisKKy8qKgorICogVXNlIHRoZSBNYWlsYm94IGludGVyZmFjZSB0byBzZW5kIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUQorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3NlbmRfY2ZnKHZvaWQgKmJmYV9hcmcpCit7CisJc3RydWN0IGJmYV9zICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcyAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcyBjZmdfcmVxOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKmNmZ19pbmZvID0gaW9jZmMtPmNmZ2luZm87CisJc3RydWN0IGJmYV9pb2NmY19jZmdfcyAgKmNmZyA9ICZpb2NmYy0+Y2ZnOworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2Fzc2VydChjZmctPmZ3Y2ZnLm51bV9jcXMgPD0gQkZJX0lPQ19NQVhfQ1FTKTsKKwliZmFfdHJjKGJmYSwgY2ZnLT5md2NmZy5udW1fY3FzKTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX0ZBTFNFOworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKworCS8qKgorCSAqIGluaXRpYWxpemUgSU9DIGNvbmZpZ3VyYXRpb24gaW5mbworCSAqLworCWNmZ19pbmZvLT5lbmRpYW5fc2lnID0gQkZJX0lPQ19FTkRJQU5fU0lHOworCWNmZ19pbmZvLT5udW1fY3FzID0gY2ZnLT5md2NmZy5udW1fY3FzOworCisJYmZhX2RtYV9iZV9hZGRyX3NldChjZmdfaW5mby0+Y2ZncnNwX2FkZHIsIGlvY2ZjLT5jZmdyc3BfZG1hLnBhKTsKKwliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5zdGF0c19hZGRyLCBpb2NmYy0+c3RhdHNfcGEpOworCisJLyoqCisJICogZG1hIG1hcCBSRVEgYW5kIFJTUCBjaXJjdWxhciBxdWV1ZXMgYW5kIHNoYWRvdyBwb2ludGVycworCSAqLworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yZXFfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yZXFfc2hhZG93X2NpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cmVxX2NxX3NoYWRvd19jaVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yZXFfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yZXFxX2VsZW1zKTsKKworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3BfY3FfYmFbaV0sCisJCQkJICAgICAgIGlvY2ZjLT5yc3BfY3FfYmFbaV0ucGEpOworCQliZmFfZG1hX2JlX2FkZHJfc2V0KGNmZ19pbmZvLT5yc3Bfc2hhZG93X3BpW2ldLAorCQkJCSAgICAgICBpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSk7CisJCWNmZ19pbmZvLT5yc3BfY3FfZWxlbXNbaV0gPQorCQkJYmZhX29zX2h0b25zKGNmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zKTsKKwl9CisKKwkvKioKKwkgKiBkbWEgbWFwIElPQyBjb25maWd1cmF0aW9uIGl0c2VsZgorCSAqLworCWJmaV9oMmlfc2V0KGNmZ19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9DRkdfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9kbWFfYmVfYWRkcl9zZXQoY2ZnX3JlcS5pb2NfY2ZnX2RtYV9hZGRyLCBpb2NmYy0+Y2ZnX2luZm8ucGEpOworCisJYmZhX2lvY19tYm94X3NlbmQoJmJmYS0+aW9jLCAmY2ZnX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19yZXFfcykpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfbWVtKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhLT5iZmFkID0gYmZhZDsKKwlpb2NmYy0+YmZhID0gYmZhOworCWlvY2ZjLT5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX05PTkU7CisKKwliZmFfb3NfYXNzaWduKGlvY2ZjLT5jZmcsICpjZmcpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBjaGlwIHNwZWNpZmljIGhhbmRsZXJzLgorCSAqLworCWlmIChiZmFfaW9jX2RldmlkKCZiZmEtPmlvYykgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaW9jZmMtPmh3aWYuaHdfcmVnaW5pdCA9IGJmYV9od2N0X3JlZ2luaXQ7CisJCWlvY2ZjLT5od2lmLmh3X3JzcHFfYWNrID0gYmZhX2h3Y3RfcnNwcV9hY2s7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfaW5pdCA9IGJmYV9od2N0X21zaXhfaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbnN0YWxsID0gYmZhX2h3Y3RfbXNpeF9pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19tc2l4X3VuaW5zdGFsbCA9IGJmYV9od2N0X21zaXhfdW5pbnN0YWxsOworCQlpb2NmYy0+aHdpZi5od19pc3JfbW9kZV9zZXQgPSBiZmFfaHdjdF9pc3JfbW9kZV9zZXQ7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfZ2V0dmVjcyA9IGJmYV9od2N0X21zaXhfZ2V0dmVjczsKKwl9IGVsc2UgeworCQlpb2NmYy0+aHdpZi5od19yZWdpbml0ID0gYmZhX2h3Y2JfcmVnaW5pdDsKKwkJaW9jZmMtPmh3aWYuaHdfcnNwcV9hY2sgPSBiZmFfaHdjYl9yc3BxX2FjazsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9pbml0ID0gYmZhX2h3Y2JfbXNpeF9pbml0OworCQlpb2NmYy0+aHdpZi5od19tc2l4X2luc3RhbGwgPSBiZmFfaHdjYl9tc2l4X2luc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X21zaXhfdW5pbnN0YWxsID0gYmZhX2h3Y2JfbXNpeF91bmluc3RhbGw7CisJCWlvY2ZjLT5od2lmLmh3X2lzcl9tb2RlX3NldCA9IGJmYV9od2NiX2lzcl9tb2RlX3NldDsKKwkJaW9jZmMtPmh3aWYuaHdfbXNpeF9nZXR2ZWNzID0gYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzOworCX0KKworCWlvY2ZjLT5od2lmLmh3X3JlZ2luaXQoYmZhKTsKKwliZmEtPm1zaXgubnZlY3MgPSAwOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbykKK3sKKwl1OCAgICAgICAgKmRtX2t2YTsKKwl1NjQgICAgICAgIGRtX3BhOworCWludCAgICAgICAgICAgICBpLCBwZXJfcmVxcV9zeiwgcGVyX3JzcHFfc3o7CisJc3RydWN0IGJmYV9pb2NmY19zICAqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlpbnQJCWRiZ3N6OworCisJZG1fa3ZhID0gYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbyk7CisJZG1fcGEgPSBiZmFfbWVtaW5mb19kbWFfcGh5cyhtZW1pbmZvKTsKKworCS8qCisJICogRmlyc3QgYWxsb2NhdGUgZG1hIG1lbW9yeSBmb3IgSU9DLgorCSAqLworCWJmYV9pb2NfbWVtX2NsYWltKCZiZmEtPmlvYywgZG1fa3ZhLCBkbV9wYSk7CisJZG1fa3ZhICs9IGJmYV9pb2NfbWVtaW5mbygpOworCWRtX3BhICArPSBiZmFfaW9jX21lbWluZm8oKTsKKworCS8qCisJICogQ2xhaW0gRE1BLWFibGUgbWVtb3J5IGZvciB0aGUgcmVxdWVzdC9yZXNwb25zZSBxdWV1ZXMgYW5kIGZvciBzaGFkb3cKKwkgKiBjaS9waSByZWdpc3RlcnMKKwkgKi8KKwlwZXJfcmVxcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKwlwZXJfcnNwcV9zeiA9IEJGQV9ST1VORFVQKChjZmctPmRydmNmZy5udW1fcnNwcV9lbGVtcyAqIEJGSV9MTVNHX1NaKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWZvciAoaSA9IDA7IGkgPCBjZmctPmZ3Y2ZnLm51bV9jcXM7IGkrKykgeworCQlpb2NmYy0+cmVxX2NxX2JhW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9iYVtpXS5wYSA9IGRtX3BhOworCQliZmFfb3NfbWVtc2V0KGRtX2t2YSwgMCwgcGVyX3JlcXFfc3opOworCQlkbV9rdmEgKz0gcGVyX3JlcXFfc3o7CisJCWRtX3BhICs9IHBlcl9yZXFxX3N6OworCisJCWlvY2ZjLT5yc3BfY3FfYmFbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX2JhW2ldLnBhID0gZG1fcGE7CisJCWJmYV9vc19tZW1zZXQoZG1fa3ZhLCAwLCBwZXJfcnNwcV9zeik7CisJCWRtX2t2YSArPSBwZXJfcnNwcV9zejsKKwkJZG1fcGEgKz0gcGVyX3JzcHFfc3o7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGNmZy0+ZndjZmcubnVtX2NxczsgaSsrKSB7CisJCWlvY2ZjLT5yZXFfY3Ffc2hhZG93X2NpW2ldLmt2YSA9IGRtX2t2YTsKKwkJaW9jZmMtPnJlcV9jcV9zaGFkb3dfY2lbaV0ucGEgPSBkbV9wYTsKKwkJZG1fa3ZhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisJCWRtX3BhICs9IEJGQV9DQUNIRUxJTkVfU1o7CisKKwkJaW9jZmMtPnJzcF9jcV9zaGFkb3dfcGlbaV0ua3ZhID0gZG1fa3ZhOworCQlpb2NmYy0+cnNwX2NxX3NoYWRvd19waVtpXS5wYSA9IGRtX3BhOworCQlkbV9rdmEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwkJZG1fcGEgKz0gQkZBX0NBQ0hFTElORV9TWjsKKwl9CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyBpbmZvIHBhZ2UKKwkgKi8KKwliZmEtPmlvY2ZjLmNmZ19pbmZvLmt2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLmNmZ19pbmZvLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdpbmZvID0gKHN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmaV9pb2NmY19jZmdfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgdGhlIGNvbmZpZyByZXNwb25zZQorCSAqLworCWJmYS0+aW9jZmMuY2ZncnNwX2RtYS5rdmEgPSBkbV9rdmE7CisJYmZhLT5pb2NmYy5jZmdyc3BfZG1hLnBhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5jZmdyc3AgPSAoc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqKSBkbV9rdmE7CisKKwlkbV9rdmEgKz0KKwkJQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MpLAorCQkJICAgIEJGQV9DQUNIRUxJTkVfU1opOworCWRtX3BhICs9IEJGQV9ST1VORFVQKHNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX2NmZ3JzcF9zKSwKKwkJCSAgICAgQkZBX0NBQ0hFTElORV9TWik7CisKKwkvKgorCSAqIENsYWltIERNQS1hYmxlIG1lbW9yeSBmb3IgaW9jZmMgc3RhdHMKKwkgKi8KKwliZmEtPmlvY2ZjLnN0YXRzX2t2YSA9IGRtX2t2YTsKKwliZmEtPmlvY2ZjLnN0YXRzX3BhID0gZG1fcGE7CisJYmZhLT5pb2NmYy5md19zdGF0cyA9IChzdHJ1Y3QgYmZhX2Z3X3N0YXRzX3MgKikgZG1fa3ZhOworCWRtX2t2YSArPSBCRkFfUk9VTkRVUChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSwgQkZBX0NBQ0hFTElORV9TWik7CisJZG1fcGEgKz0gQkZBX1JPVU5EVVAoc2l6ZW9mKHN0cnVjdCBiZmFfZndfc3RhdHNfcyksIEJGQV9DQUNIRUxJTkVfU1opOworCisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWVtaW5mbykgPSBkbV9rdmE7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWVtaW5mbykgPSBkbV9wYTsKKworCWRiZ3N6ID0gYmZhX2lvY19kZWJ1Z190cmNzeihiZmFfYXV0b19yZWNvdmVyKTsKKwlpZiAoZGJnc3ogPiAwKSB7CisJCWJmYV9pb2NfZGVidWdfbWVtY2xhaW0oJmJmYS0+aW9jLCBiZmFfbWVtaW5mb19rdmEobWVtaW5mbykpOworCQliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgKz0gZGJnc3o7CisJfQorfQorCisvKioKKyAqIEJGQSBzdWJtb2R1bGVzIGluaXRpYWxpemF0aW9uIGNvbXBsZXRpb24gbm90aWZpY2F0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5pbml0ZG9uZShiZmEpOworfQorCisvKioKKyAqIFN0YXJ0IEJGQSBzdWJtb2R1bGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfVFJVRTsKKworCWZvciAoaSA9IDA7IGhhbF9tb2RzW2ldOyBpKyspCisJCWhhbF9tb2RzW2ldLT5zdGFydChiZmEpOworfQorCisvKioKKyAqIERpc2FibGUgQkZBIHN1Ym1vZHVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2Qoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBoYWxfbW9kc1tpXTsgaSsrKQorCQloYWxfbW9kc1tpXS0+aW9jZGlzYWJsZShiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2luaXRfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19PSyk7CisJCWVsc2UKKwkJCWJmYV9jYl9pbml0KGJmYS0+YmZhZCwgQkZBX1NUQVRVU19GQUlMRUQpOworCX0gZWxzZQorCQliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfTk9ORTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdG9wX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGwpCit7CisJc3RydWN0IGJmYV9zICAqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gYmZhLT5iZmFkOworCisJaWYgKGNvbXBsKQorCQljb21wbGV0ZSgmYmZhZC0+Y29tcCk7CisKKwllbHNlCisJCWJmYS0+aW9jZmMuYWN0aW9uID0gQkZBX0lPQ0ZDX0FDVF9OT05FOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX2Rpc2FibGVfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbCkKK3sKKwlzdHJ1Y3QgYmZhX3MgICpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFkX3MgKmJmYWQgPSBiZmEtPmJmYWQ7CisKKwlpZiAoY29tcGwpCisJCWNvbXBsZXRlKCZiZmFkLT5kaXNhYmxlX2NvbXApOworfQorCisvKioKKyAqIFVwZGF0ZSBCRkEgY29uZmlndXJhdGlvbiBmcm9tIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfY2ZncnNwKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCXN0cnVjdCBiZmFfaW9jZmNfZndjZmdfcwkqZndjZmcgICA9ICZjZmdyc3AtPmZ3Y2ZnOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgCQkqY2ZnaW5mbyA9IGlvY2ZjLT5jZmdpbmZvOworCisJZndjZmctPm51bV9jcXMgICAgICAgID0gZndjZmctPm51bV9jcXM7CisJZndjZmctPm51bV9pb2ltX3JlcXMgID0gYmZhX29zX250b2hzKGZ3Y2ZnLT5udW1faW9pbV9yZXFzKTsKKwlmd2NmZy0+bnVtX3Rza2ltX3JlcXMgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV90c2tpbV9yZXFzKTsKKwlmd2NmZy0+bnVtX2ZjeHBfcmVxcyAgPSBiZmFfb3NfbnRvaHMoZndjZmctPm51bV9mY3hwX3JlcXMpOworCWZ3Y2ZnLT5udW1fdWZfYnVmcyAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3VmX2J1ZnMpOworCWZ3Y2ZnLT5udW1fcnBvcnRzICAgICA9IGJmYV9vc19udG9ocyhmd2NmZy0+bnVtX3Jwb3J0cyk7CisKKwljZmdpbmZvLT5pbnRyX2F0dHIuY29hbGVzY2UgPSBjZmdyc3AtPmludHJfYXR0ci5jb2FsZXNjZTsKKwljZmdpbmZvLT5pbnRyX2F0dHIuZGVsYXkgICAgPSBiZmFfb3NfbnRvaHMoY2ZncnNwLT5pbnRyX2F0dHIuZGVsYXkpOworCWNmZ2luZm8tPmludHJfYXR0ci5sYXRlbmN5ICA9IGJmYV9vc19udG9ocyhjZmdyc3AtPmludHJfYXR0ci5sYXRlbmN5KTsKKworCWlvY2ZjLT5jZmdkb25lID0gQkZBX1RSVUU7CisKKwkvKioKKwkgKiBDb25maWd1cmF0aW9uIGlzIGNvbXBsZXRlIC0gaW5pdGlhbGl6ZS9zdGFydCBzdWJtb2R1bGVzCisJICovCisJaWYgKGlvY2ZjLT5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPmluaXRfaGNiX3FlLCBiZmFfaW9jZmNfaW5pdF9jYiwgYmZhKTsKKwllbHNlCisJCWJmYV9pb2NmY19zdGFydF9zdWJtb2QoYmZhKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbGVhcih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3Mgc3RhdHNfcmVxOworCisJYmZhX3RpbWVyX3N0YXJ0KGJmYSwgJmlvY2ZjLT5zdGF0c190aW1lciwKKwkJCSAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX3RpbWVvdXQsIGJmYSwKKwkJCSAgICBCRkFfSU9DRkNfVE9WKTsKKworCWJmaV9oMmlfc2V0KHN0YXRzX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX0NMRUFSX1NUQVRTX1JFUSwKKwkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19zd2FwKHN0cnVjdCBiZmFfZndfc3RhdHNfcyAqZCwgc3RydWN0IGJmYV9md19zdGF0c19zICpzKQoreworCXUzMiAgICAgICAqZGlwID0gKHUzMiAqKSBkOworCXUzMiAgICAgICAqc2lwID0gKHUzMiAqKSBzOworCWludCAgICAgICAgICAgICBpOworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IGJmYV9md19zdGF0c19zKSAvIHNpemVvZih1MzIpKTsgaSsrKQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwoc2lwW2ldKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfY2Iodm9pZCAqYmZhX2FyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX3MgKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGNvbXBsZXRlKSB7CisJCWJmYV9pb2NfY2xyX3N0YXRzKCZiZmEtPmlvYyk7CisJCWlvY2ZjLT5zdGF0c19jYmZuKGlvY2ZjLT5zdGF0c19jYmFyZywgaW9jZmMtPnN0YXRzX3N0YXR1cyk7CisJfSBlbHNlIHsKKwkJaW9jZmMtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisJCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX09LOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19zdGF0c19jbHJfdGltZW91dCh2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYV9hcmc7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYmZhX3RyYyhiZmEsIDApOworCisJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfRVRJTUVSOworCWJmYV9jYl9xdWV1ZShiZmEsICZpb2NmYy0+c3RhdHNfaGNiX3FlLCBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX2NiKHZvaWQgKmJmYV9hcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9zCQkqYmZhID0gYmZhX2FyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJaWYgKGlvY2ZjLT5zdGF0c19zdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQkJYmZhX29zX21lbXNldChpb2NmYy0+c3RhdHNfcmV0LCAwLAorCQkJCXNpemVvZigqaW9jZmMtPnN0YXRzX3JldCkpOworCQkJYmZhX2lvY2ZjX3N0YXRzX3N3YXAoJmlvY2ZjLT5zdGF0c19yZXQtPmZ3X3N0YXRzLAorCQkJCWlvY2ZjLT5md19zdGF0cyk7CisJCX0KKwkJaW9jZmMtPnN0YXRzX2NiZm4oaW9jZmMtPnN0YXRzX2NiYXJnLCBpb2NmYy0+c3RhdHNfc3RhdHVzKTsKKwl9IGVsc2UgeworCQlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKwkJaW9jZmMtPnN0YXRzX3N0YXR1cyA9IEJGQV9TVEFUVVNfT0s7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQodm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJCSpiZmEgPSBiZmFfYXJnOworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKworCWJmYV90cmMoYmZhLCAwKTsKKworCWlvY2ZjLT5zdGF0c19zdGF0dXMgPSBCRkFfU1RBVFVTX0VUSU1FUjsKKwliZmFfY2JfcXVldWUoYmZhLCAmaW9jZmMtPnN0YXRzX2hjYl9xZSwgYmZhX2lvY2ZjX3N0YXRzX2NiLCBiZmEpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvY2ZjX3N0YXRzX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkqaW9jZmMgPSAmYmZhLT5pb2NmYzsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKKworCWJmYV90aW1lcl9zdGFydChiZmEsICZpb2NmYy0+c3RhdHNfdGltZXIsCisJCQkgICAgYmZhX2lvY2ZjX3N0YXRzX3RpbWVvdXQsIGJmYSwgQkZBX0lPQ0ZDX1RPVik7CisKKwliZmlfaDJpX3NldChzdGF0c19yZXEubWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCWJmYV9pb2NfbWJveF9zZW5kKCZiZmEtPmlvYywgJnN0YXRzX3JlcSwKKwkJc2l6ZW9mKHN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcmVxX3MpKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlpbnQgICAgICAgICAgICAgcTsKKworCWZvciAocSA9IDA7IHEgPCBCRklfSU9DX01BWF9DUVM7IHErKykgeworCQliZmFfcmVxcV9jaShiZmEsIHEpID0gMDsKKwkJYmZhX3JlcXFfcGkoYmZhLCBxKSA9IDA7CisJCWJmYV9yc3BxX2NpKGJmYSwgcSkgPSAwOworCQliZmFfcnNwcV9waShiZmEsIHEpID0gMDsKKwl9Cit9CisKKy8qKgorICogSU9DIGVuYWJsZSByZXF1ZXN0IGlzIGNvbXBsZXRlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfZW5hYmxlX2NiZm4odm9pZCAqYmZhX2FyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwlpZiAoc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0lOSVQpCisJCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwKKwkJCQkgICAgIGJmYV9pb2NmY19pbml0X2NiLCBiZmEpOworCQlyZXR1cm47CisJfQorCisJYmZhX2lvY2ZjX2luaXRkb25lX3N1Ym1vZChiZmEpOworCWJmYV9pb2NmY19zZW5kX2NmZyhiZmEpOworfQorCisvKioKKyAqIElPQyBkaXNhYmxlIHJlcXVlc3QgaXMgY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2NmY19kaXNhYmxlX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmFfaXNyX2Rpc2FibGUoYmZhKTsKKwliZmFfaW9jZmNfZGlzYWJsZV9zdWJtb2QoYmZhKTsKKworCWlmIChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX1NUT1ApCisJCWJmYV9jYl9xdWV1ZShiZmEsICZiZmEtPmlvY2ZjLnN0b3BfaGNiX3FlLCBiZmFfaW9jZmNfc3RvcF9jYiwKKwkJCSAgICAgYmZhKTsKKwllbHNlIHsKKwkJYmZhX2Fzc2VydChiZmEtPmlvY2ZjLmFjdGlvbiA9PSBCRkFfSU9DRkNfQUNUX0RJU0FCTEUpOworCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5kaXNfaGNiX3FlLCBiZmFfaW9jZmNfZGlzYWJsZV9jYiwKKwkJCSAgICAgYmZhKTsKKwl9Cit9CisKKy8qKgorICogTm90aWZ5IHN1Yi1tb2R1bGVzIG9mIGhhcmR3YXJlIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfaGJmYWlsX2NiZm4odm9pZCAqYmZhX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX3MJKmJmYSA9IGJmYV9hcmc7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCisJYmZhX2lzcl9kaXNhYmxlKGJmYSk7CisJYmZhX2lvY2ZjX2Rpc2FibGVfc3VibW9kKGJmYSk7CisKKwlpZiAoYmZhLT5pb2NmYy5hY3Rpb24gPT0gQkZBX0lPQ0ZDX0FDVF9JTklUKQorCQliZmFfY2JfcXVldWUoYmZhLCAmYmZhLT5pb2NmYy5pbml0X2hjYl9xZSwgYmZhX2lvY2ZjX2luaXRfY2IsCisJCQkgICAgIGJmYSk7Cit9CisKKy8qKgorICogQWN0aW9ucyBvbiBjaGlwLXJlc2V0IGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9jZmNfcmVzZXRfY2Jmbih2b2lkICpiZmFfYXJnKQoreworCXN0cnVjdCBiZmFfcwkqYmZhID0gYmZhX2FyZzsKKworCWJmYV9pb2NmY19yZXNldF9xdWV1ZXMoYmZhKTsKKwliZmFfaXNyX2VuYWJsZShiZmEpOworfQorCisKKworLyoqCisgKiAgYmZhX2lvY19wdWJsaWMKKyAqLworCisvKioKKyAqIFF1ZXJ5IElPQyBtZW1vcnkgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICprbV9sZW4sCisJCXUzMiAqZG1fbGVuKQoreworCS8qIGRtYSBtZW1vcnkgZm9yIElPQyAqLworCSpkbV9sZW4gKz0gYmZhX2lvY19tZW1pbmZvKCk7CisKKwliZmFfaW9jZmNfZndfY2ZnX3N6KGNmZywgZG1fbGVuKTsKKwliZmFfaW9jZmNfY3FzX3N6KGNmZywgZG1fbGVuKTsKKwkqa21fbGVuICs9IGJmYV9pb2NfZGVidWdfdHJjc3ooYmZhX2F1dG9fcmVjb3Zlcik7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCWludCAgICAgICAgICAgICBpOworCisJYmZhX2lvY2ZjX2NiZm4uZW5hYmxlX2NiZm4gPSBiZmFfaW9jZmNfZW5hYmxlX2NiZm47CisJYmZhX2lvY2ZjX2NiZm4uZGlzYWJsZV9jYmZuID0gYmZhX2lvY2ZjX2Rpc2FibGVfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5oYmZhaWxfY2JmbiA9IGJmYV9pb2NmY19oYmZhaWxfY2JmbjsKKwliZmFfaW9jZmNfY2Jmbi5yZXNldF9jYmZuID0gYmZhX2lvY2ZjX3Jlc2V0X2NiZm47CisKKwliZmFfaW9jX2F0dGFjaCgmYmZhLT5pb2MsIGJmYSwgJmJmYV9pb2NmY19jYmZuLCAmYmZhLT50aW1lcl9tb2QsCisJCWJmYS0+dHJjbW9kLCBiZmEtPmFlbiwgYmZhLT5sb2dtKTsKKwliZmFfaW9jX3BjaV9pbml0KCZiZmEtPmlvYywgcGNpZGV2LCBCRklfTUNfSU9DRkMpOworCWJmYV9pb2NfbWJveF9yZWdpc3RlcigmYmZhLT5pb2MsIGJmYV9tYm94X2lzcnMpOworCisJLyoqCisJICogQ2hvb3NlIEZDIChzc2lkOiAweDFDKSB2L3MgRkNvRSAoc3NpZDogMHgxNCkgbW9kZS4KKwkgKi8KKwlpZiAoMCkKKwkJYmZhX2lvY19zZXRfZmNtb2RlKCZiZmEtPmlvYyk7CisKKwliZmFfaW9jZmNfaW5pdF9tZW0oYmZhLCBiZmFkLCBjZmcsIHBjaWRldik7CisJYmZhX2lvY2ZjX21lbV9jbGFpbShiZmEsIGNmZywgbWVtaW5mbyk7CisJYmZhX3RpbWVyX2luaXQoJmJmYS0+dGltZXJfbW9kKTsKKworCUlOSVRfTElTVF9IRUFEKCZiZmEtPmNvbXBfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGSV9JT0NfTUFYX0NRUzsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYmZhLT5yZXFxX3dhaXRxW2ldKTsKK30KKworLyoqCisgKiBRdWVyeSBJT0MgbWVtb3J5IHJlcXVpcmVtZW50IGluZm9ybWF0aW9uLgorICovCit2b2lkCitiZmFfaW9jZmNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV9pb2NfZGV0YWNoKCZiZmEtPmlvYyk7Cit9CisKKy8qKgorICogUXVlcnkgSU9DIG1lbW9yeSByZXF1aXJlbWVudCBpbmZvcm1hdGlvbi4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2luaXQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX0lOSVQ7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKKwliZmFfbXNpeF9pbnN0YWxsKGJmYSk7Cit9CisKKy8qKgorICogSU9DIHN0YXJ0IGNhbGxlZCBmcm9tIGJmYV9zdGFydCgpLiBDYWxsZWQgdG8gc3RhcnQgSU9DIG9wZXJhdGlvbnMKKyAqIGF0IGRyaXZlciBpbnN0YW50aWF0aW9uIGZvciB0aGlzIGluc3RhbmNlLgorICovCit2b2lkCitiZmFfaW9jZmNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7CisJaWYgKGJmYS0+aW9jZmMuY2ZnZG9uZSkKKwkJYmZhX2lvY2ZjX3N0YXJ0X3N1Ym1vZChiZmEpOworfQorCisvKioKKyAqIElPQyBzdG9wIGNhbGxlZCBmcm9tIGJmYV9zdG9wKCkuIENhbGxlZCBvbmx5IHdoZW4gZHJpdmVyIGlzIHVubG9hZGVkCisgKiBmb3IgdGhpcyBpbnN0YW5jZS4KKyAqLwordm9pZAorYmZhX2lvY2ZjX3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhLT5pb2NmYy5hY3Rpb24gPSBCRkFfSU9DRkNfQUNUX1NUT1A7CisKKwliZmEtPnJtZV9wcm9jZXNzID0gQkZBX0ZBTFNFOworCWJmYV9pb2NfZGlzYWJsZSgmYmZhLT5pb2MpOworfQorCit2b2lkCitiZmFfaW9jZmNfaXNyKHZvaWQgKmJmYWFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcwkJKmJmYSA9IGJmYWFyZzsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJKmlvY2ZjID0gJmJmYS0+aW9jZmM7CisJdW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdQkqbXNnOworCisJbXNnID0gKHVuaW9uIGJmaV9pb2NmY19pMmhfbXNnX3UgKikgbTsKKwliZmFfdHJjKGJmYSwgbXNnLT5taC5tc2dfaWQpOworCisJc3dpdGNoIChtc2ctPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DRkdfUkVQTFk6CisJCWlvY2ZjLT5jZmdfcmVwbHkgPSAmbXNnLT5jZmdfcmVwbHk7CisJCWJmYV9pb2NmY19jZmdyc3AoYmZhKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUDoKKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsIGJmYV9pb2NmY19zdGF0c19jYiwKKwkJCSAgICAgIGJmYSk7CisJCWJyZWFrOworCWNhc2UgQkZJX0lPQ0ZDX0kySF9DTEVBUl9TVEFUU19SU1A6CisJCS8qCisJCSAqIGNoZWNrIGZvciB0aW1lciBwb3AgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIHJzcAorCQkgKi8KKwkJaWYgKGlvY2ZjLT5zdGF0c19idXN5ID09IEJGQV9GQUxTRQorCQkgICAgfHwgaW9jZmMtPnN0YXRzX3N0YXR1cyA9PSBCRkFfU1RBVFVTX0VUSU1FUikKKwkJCWJyZWFrOworCisJCWJmYV90aW1lcl9zdG9wKCZpb2NmYy0+c3RhdHNfdGltZXIpOworCQlpb2NmYy0+c3RhdHNfc3RhdHVzID0gQkZBX1NUQVRVU19PSzsKKwkJYmZhX2NiX3F1ZXVlKGJmYSwgJmlvY2ZjLT5zdGF0c19oY2JfcWUsCisJCQkgICAgICBiZmFfaW9jZmNfc3RhdHNfY2xyX2NiLCBiZmEpOworCQlicmVhazsKKwljYXNlIEJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1A6CisJCWlvY2ZjLT51cGRhdGVxX2NiZm4oaW9jZmMtPnVwZGF0ZXFfY2JhcmcsIEJGQV9TVEFUVVNfT0spOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworI2lmbmRlZiBCRkFfQklPU19CVUlMRAordm9pZAorYmZhX2FkYXB0ZXJfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpCit7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZiZmEtPmlvYywgYWRfYXR0cik7Cit9CisKK3U2NAorYmZhX2FkYXB0ZXJfZ2V0X2lkKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2dldF9hZGlkKCZiZmEtPmlvYyk7Cit9CisKK3ZvaWQKK2JmYV9pb2NmY19nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgKmF0dHIpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJYXR0ci0+aW50cl9hdHRyID0gaW9jZmMtPmNmZ2luZm8tPmludHJfYXR0cjsKKwlhdHRyLT5jb25maWcJPSBpb2NmYy0+Y2ZnOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9pb2NmY19pc3JhdHRyX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfc2V0X2ludHJfcmVxX3MgKm07CisKKwlpb2NmYy0+Y2ZnaW5mby0+aW50cl9hdHRyID0gKmF0dHI7CisJaWYgKCFiZmFfaW9jZmNfaXNfb3BlcmF0aW9uYWwoYmZhKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfT0s7CisKKwltID0gYmZhX3JlcXFfbmV4dChiZmEsIEJGQV9SRVFRX0lPQyk7CisJaWYgKCFtKQorCQlyZXR1cm4gQkZBX1NUQVRVU19ERVZCVVNZOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0NGQywgQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEsCisJCQliZmFfbHB1aWQoYmZhKSk7CisJbS0+Y29hbGVzY2UgPSBhdHRyLT5jb2FsZXNjZTsKKwltLT5kZWxheSAgICA9IGJmYV9vc19odG9ucyhhdHRyLT5kZWxheSk7CisJbS0+bGF0ZW5jeSAgPSBiZmFfb3NfaHRvbnMoYXR0ci0+bGF0ZW5jeSk7CisKKwliZmFfdHJjKGJmYSwgYXR0ci0+ZGVsYXkpOworCWJmYV90cmMoYmZhLCBhdHRyLT5sYXRlbmN5KTsKKworCWJmYV9yZXFxX3Byb2R1Y2UoYmZhLCBCRkFfUkVRUV9JT0MpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfaW9jZmNfc2V0X3Nuc2Jhc2Uoc3RydWN0IGJmYV9zICpiZmEsIHU2NCBzbnNiYXNlX3BhKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcyAgICAgICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaW9jZmMtPmNmZ2luZm8tPnNlbnNlX2J1Zl9sZW4gPSAoQkZJX0lPSU1fU05TTEVOIC0gMSk7CisJYmZhX2RtYV9iZV9hZGRyX3NldChpb2NmYy0+Y2ZnaW5mby0+aW9pbV9zbnNiYXNlLCBzbnNiYXNlX3BhKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfaW9jZmNfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY2ZjX3N0YXRzX3MgKnN0YXRzLAorCQkgICAgICBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19yZXQgPSBzdGF0czsKKwlpb2NmYy0+c3RhdHNfY2JmbiA9IGNiZm47CisJaW9jZmMtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisKKwliZmFfaW9jZmNfc3RhdHNfcXVlcnkoYmZhKTsKKworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2lvY2ZjX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfY2JfaW9jX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zCSppb2NmYyA9ICZiZmEtPmlvY2ZjOworCisJaWYgKGlvY2ZjLT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMoYmZhLCBpb2NmYy0+c3RhdHNfYnVzeSk7CisJCXJldHVybiAoQkZBX1NUQVRVU19ERVZCVVNZKTsKKwl9CisKKwlpb2NmYy0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWlvY2ZjLT5zdGF0c19jYmZuID0gY2JmbjsKKwlpb2NmYy0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKworCWJmYV9pb2NmY19zdGF0c19jbGVhcihiZmEpOworCXJldHVybiAoQkZBX1NUQVRVU19PSyk7Cit9CisKKy8qKgorICogRW5hYmxlIElPQyBhZnRlciBpdCBpcyBkaXNhYmxlZC4KKyAqLwordm9pZAorYmZhX2lvY2ZjX2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwliZmFfcGxvZ19zdHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTCwgQkZBX1BMX0VJRF9NSVNDLCAwLAorCQkgICAgICJJT0MgRW5hYmxlIik7CisJYmZhX2lvY19lbmFibGUoJmJmYS0+aW9jKTsKK30KKwordm9pZAorYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpCit7CisJYmZhX3Bsb2dfc3RyKGJmYS0+cGxvZywgQkZBX1BMX01JRF9IQUwsIEJGQV9QTF9FSURfTUlTQywgMCwKKwkJICAgICAiSU9DIERpc2FibGUiKTsKKwliZmEtPmlvY2ZjLmFjdGlvbiA9IEJGQV9JT0NGQ19BQ1RfRElTQUJMRTsKKworCWJmYS0+cm1lX3Byb2Nlc3MgPSBCRkFfRkFMU0U7CisJYmZhX2lvY19kaXNhYmxlKCZiZmEtPmlvYyk7Cit9CisKKworYmZhX2Jvb2xlYW5fdAorYmZhX2lvY2ZjX2lzX29wZXJhdGlvbmFsKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXJldHVybiBiZmFfaW9jX2lzX29wZXJhdGlvbmFsKCZiZmEtPmlvYykgJiYgYmZhLT5pb2NmYy5jZmdkb25lOworfQorCisvKioKKyAqIFJldHVybiBib290IHRhcmdldCBwb3J0IHd3bnMgLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisgKi8KK3ZvaWQKK2JmYV9pb2NmY19nZXRfYm9vdHd3bnMoc3RydWN0IGJmYV9zICpiZmEsIHU4ICpud3ducywgd3duX3QgKip3d25zKQoreworCXN0cnVjdCBiZmFfaW9jZmNfcwkJKmlvY2ZjCSA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZncnNwX3MJKmNmZ3JzcCAgPSBpb2NmYy0+Y2ZncnNwOworCisJKm53d25zID0gY2ZncnNwLT5ib290d3ducy5ud3duczsKKwkqd3ducyA9IGNmZ3JzcC0+Ym9vdHd3bnMud3duOworfQorCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pb2NmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQxNzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmMuaApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0lPQ0ZDX0hfXworI2RlZmluZSBfX0JGQV9JT0NGQ19IX18KKworI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2lvY2ZjLmg+CisjaW5jbHVkZSA8YmZhX2NhbGxiYWNrX3ByaXYuaD4KKworI2RlZmluZSBCRkFfUkVRUV9ORUxFTVNfTUlOCSg0KQorI2RlZmluZSBCRkFfUlNQUV9ORUxFTVNfTUlOCSg0KQorCitzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcyB7CisJYmZhX29zX2FkZHJfdCAgIGludHJfc3RhdHVzOworCWJmYV9vc19hZGRyX3QgICBpbnRyX21hc2s7CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX3BpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2NpW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2RlcHRoW0JGSV9JT0NfTUFYX0NRU107CisJYmZhX29zX2FkZHJfdCAgIGNwZV9xX2N0cmxbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY2lbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfZGVwdGhbQkZJX0lPQ19NQVhfQ1FTXTsKKwliZmFfb3NfYWRkcl90ICAgcm1lX3FfY3RybFtCRklfSU9DX01BWF9DUVNdOworfTsKKworLyoqCisgKiBNU0lYIHZlY3RvciBoYW5kbGVycworICovCisjZGVmaW5lIEJGQV9NU0lYX01BWF9WRUNUT1JTCTIyCit0eXBlZGVmIHZvaWQgKCpiZmFfbXNpeF9oYW5kbGVyX3QpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3N0cnVjdCBiZmFfbXNpeF9zIHsKKwlpbnQJbnZlY3M7CisJYmZhX21zaXhfaGFuZGxlcl90IGhhbmRsZXJbQkZBX01TSVhfTUFYX1ZFQ1RPUlNdOworfTsKKworLyoqCisgKiBDaGlwIHNwZWNpZmljIGludGVyZmFjZXMKKyAqLworc3RydWN0IGJmYV9od2lmX3MgeworCXZvaWQgKCpod19yZWdpbml0KShzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKmh3X3JzcHFfYWNrKShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHJzcHEpOworCXZvaWQgKCpod19tc2l4X2luaXQpKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOworCXZvaWQgKCpod19tc2l4X2luc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfbXNpeF91bmluc3RhbGwpKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwl2b2lkICgqaHdfaXNyX21vZGVfc2V0KShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKKwl2b2lkICgqaHdfbXNpeF9nZXR2ZWNzKShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7Cit9OwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY2ZjX3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfaW9jZmNfcyB7CisJc3RydWN0IGJmYV9zIAkJKmJmYTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zIAljZmc7CisJaW50CQkJYWN0aW9uOworCisJdTMyICAgICAgICAJcmVxX2NxX3BpW0JGSV9JT0NfTUFYX0NRU107CisJdTMyICAgICAgICAJcnNwX2NxX2NpW0JGSV9JT0NfTUFYX0NRU107CisKKwlzdHJ1Y3QgYmZhX2NiX3FlX3MJaW5pdF9oY2JfcWU7CisJc3RydWN0IGJmYV9jYl9xZV9zCXN0b3BfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlkaXNfaGNiX3FlOworCXN0cnVjdCBiZmFfY2JfcWVfcwlzdGF0c19oY2JfcWU7CisJYmZhX2Jvb2xlYW5fdAkJY2ZnZG9uZTsKKworCXN0cnVjdCBiZmFfZG1hX3MJY2ZnX2luZm87CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcyAqY2ZnaW5mbzsKKwlzdHJ1Y3QgYmZhX2RtYV9zCWNmZ3JzcF9kbWE7CisJc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyAqY2ZncnNwOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgKmNmZ19yZXBseTsKKworCXU4CQkJKnN0YXRzX2t2YTsKKwl1NjQJCXN0YXRzX3BhOworCXN0cnVjdCBiZmFfZndfc3RhdHNfcyAJKmZ3X3N0YXRzOworCXN0cnVjdCBiZmFfdGltZXJfcyAJc3RhdHNfdGltZXI7CS8qICB0aW1lciAqLworCXN0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyAqc3RhdHNfcmV0OwkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CS8qICBvdXRzdGFuZGluZyBzdGF0cyAqLworCWJmYV9jYl9pb2NfdAkJc3RhdHNfY2JmbjsJLyogIGRyaXZlciBjYWxsYmFjayBmdW5jdGlvbiAqLworCXZvaWQgICAgICAgICAgIAkJKnN0YXRzX2NiYXJnOwkvKiAgdXNlciBjYWxsYmFjayBhcmcgKi8KKworCXN0cnVjdCBiZmFfZG1hX3MgICAJcmVxX2NxX2JhW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyZXFfY3Ffc2hhZG93X2NpW0JGSV9JT0NfTUFYX0NRU107CisJc3RydWN0IGJmYV9kbWFfcyAgIAlyc3BfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2RtYV9zICAgCXJzcF9jcV9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwlzdHJ1Y3QgYmZhX2lvY2ZjX3JlZ3NfcwliZmFfcmVnczsJLyogIEJGQSBkZXZpY2UgcmVnaXN0ZXJzICovCisJc3RydWN0IGJmYV9od2lmX3MJaHdpZjsKKworCWJmYV9jYl9pb2NmY190CQl1cGRhdGVxX2NiZm47IC8qICBiaW9zIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCQkqdXBkYXRlcV9jYmFyZzsJLyogIGJpb3MgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIGJmYV9scHVpZChfX2JmYSkJCWJmYV9pb2NfcG9ydGlkKCYoX19iZmEpLT5pb2MpCisjZGVmaW5lIGJmYV9tc2l4X2luaXQoX19iZmEsIF9fbnZlY3MpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfaW5pdChfX2JmYSwgX19udmVjcykKKyNkZWZpbmUgYmZhX21zaXhfaW5zdGFsbChfX2JmYSkJXAorCShfX2JmYSktPmlvY2ZjLmh3aWYuaHdfbXNpeF9pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfbXNpeF91bmluc3RhbGwoX19iZmEpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfdW5pbnN0YWxsKF9fYmZhKQorI2RlZmluZSBiZmFfaXNyX21vZGVfc2V0KF9fYmZhLCBfX21zaXgpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X2lzcl9tb2RlX3NldChfX2JmYSwgX19tc2l4KQorI2RlZmluZSBiZmFfbXNpeF9nZXR2ZWNzKF9fYmZhLCBfX3ZlY21hcCwgX19udmVjcywgX19tYXh2ZWMpCVwKKwkoX19iZmEpLT5pb2NmYy5od2lmLmh3X21zaXhfZ2V0dmVjcyhfX2JmYSwgX192ZWNtYXAsIF9fbnZlY3MsIF9fbWF4dmVjKQorCisvKgorICogRkMgc3BlY2lmaWMgSU9DIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBiZmFfaW9jZmNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9pb2NmY19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sCisJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Cit2b2lkIGJmYV9pb2NmY19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdGFydChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2lzcih2b2lkICpiZmEsIHN0cnVjdCBiZmlfbWJtc2dfcyAqbXNnKTsKK3ZvaWQgYmZhX2lvY2ZjX3NldF9zbnNiYXNlKHN0cnVjdCBiZmFfcyAqYmZhLCB1NjQgc25zYmFzZV9wYSk7CitiZmFfYm9vbGVhbl90IGJmYV9pb2NmY19pc19vcGVyYXRpb25hbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pb2NmY19yZXNldF9xdWV1ZXMoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jZmNfdXBkYXRlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHJlcXFfYmEsIHUzMiByc3BxX2JhLAorCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksCisJCQliZmFfY2JfaW9jZmNfdCBjYmZuLCB2b2lkICpjYmFyZyk7CisKK3ZvaWQgYmZhX21zaXhfYWxsKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKK3ZvaWQgYmZhX21zaXhfcmVxcShzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IHZlYyk7Cit2b2lkIGJmYV9tc2l4X3JzcHEoc3RydWN0IGJmYV9zICpiZmEsIGludCB2ZWMpOwordm9pZCBiZmFfbXNpeF9scHVfZXJyKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgdmVjKTsKKwordm9pZCBiZmFfaHdjYl9yZWdpbml0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y2JfcnNwcV9hY2soc3RydWN0IGJmYV9zICpiZmEsIGludCByc3BxKTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9pbml0KHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgbnZlY3MpOwordm9pZCBiZmFfaHdjYl9tc2l4X2luc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjYl9tc2l4X3VuaW5zdGFsbChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2NiX2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBtc2l4KTsKK3ZvaWQgYmZhX2h3Y2JfbXNpeF9nZXR2ZWNzKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKnZlY21hcCwKKwkJCXUzMiAqbnZlY3MsIHUzMiAqbWF4dmVjKTsKK3ZvaWQgYmZhX2h3Y3RfcmVnaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9od2N0X3JzcHFfYWNrKHN0cnVjdCBiZmFfcyAqYmZhLCBpbnQgcnNwcSk7Cit2b2lkIGJmYV9od2N0X21zaXhfaW5pdChzdHJ1Y3QgYmZhX3MgKmJmYSwgaW50IG52ZWNzKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF9pbnN0YWxsKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2h3Y3RfbXNpeF91bmluc3RhbGwoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaHdjdF9pc3JfbW9kZV9zZXQoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3QgbXNpeCk7Cit2b2lkIGJmYV9od2N0X21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICp2ZWNtYXAsCisJCQl1MzIgKm52ZWNzLCB1MzIgKm1heHZlYyk7CisKK3ZvaWQgYmZhX2NvbV9tZW1pbmZvKGJmYV9ib29sZWFuX3QgbWluY2ZnLCB1MzIgKmRtX2xlbik7Cit2b2lkIGJmYV9jb21fYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWksCisJCWJmYV9ib29sZWFuX3QgbWluY2ZnKTsKK3ZvaWQgYmZhX2lvY2ZjX2dldF9ib290d3ducyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKm53d25zLCB3d25fdCAqKnd3bnMpOworCisjZW5kaWYgLyogX19CRkFfSU9DRkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvY2ZjX3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBhMTdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9jZmNfcS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgImJmYV9pbnRyX3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEhBTCwgSU9DRkNfUSk7CisKK3ZvaWQKK2JmYV9pb2NmY191cGRhdGVxKHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgcmVxcV9iYSwgdTMyIHJzcHFfYmEsCisJCQkJdTMyIHJlcXFfc2NpLCB1MzIgcnNwcV9zcGksIGJmYV9jYl9pb2NmY190IGNiZm4sCisJCQkJdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2NmY19zICppb2NmYyA9ICZiZmEtPmlvY2ZjOworCXN0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB1cGRhdGVxX3JlcTsKKworCWlvY2ZjLT51cGRhdGVxX2NiZm4gPSBjYmZuOworCWlvY2ZjLT51cGRhdGVxX2NiYXJnID0gY2Jhcmc7CisKKwliZmlfaDJpX3NldCh1cGRhdGVxX3JlcS5taCwgQkZJX01DX0lPQ0ZDLCBCRklfSU9DRkNfSDJJX1VQREFURVFfUkVRLAorCQkJYmZhX2xwdWlkKGJmYSkpOworCisJdXBkYXRlcV9yZXEucmVxcV9iYSA9IGJmYV9vc19odG9ubChyZXFxX2JhKTsKKwl1cGRhdGVxX3JlcS5yc3BxX2JhID0gYmZhX29zX2h0b25sKHJzcHFfYmEpOworCXVwZGF0ZXFfcmVxLnJlcXFfc2NpID0gYmZhX29zX2h0b25sKHJlcXFfc2NpKTsKKwl1cGRhdGVxX3JlcS5yc3BxX3NwaSA9IGJmYV9vc19odG9ubChyc3BxX3NwaSk7CisKKwliZmFfaW9jX21ib3hfc2VuZCgmYmZhLT5pb2MsICZ1cGRhdGVxX3JlcSwKKwkJCXNpemVvZihzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcmVxX3MpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX2lvaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWUyNTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaW9pbS5jCkBAIC0wLDAgKzEsMTMxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8YmZhX2NiX2lvaW1fbWFjcm9zLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIElPSU0pOworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisgKi8KK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfaW9yZXEoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QJYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkCQliZmFfaW9pbV9zZ3BnX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90CWJmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pOworc3RhdGljIHZvaWQJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fY29tcCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIF9fYmZhX2NiX2lvaW1fcGF0aHRvdih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9pb2ltX3NtCisgKi8KKworLyoqCisgKiBJTyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9pb2ltX2V2ZW50IHsKKwlCRkFfSU9JTV9TTV9TVEFSVCA9IDEsCQkvKiAgaW8gc3RhcnQgcmVxdWVzdCBmcm9tIGhvc3QgKi8KKwlCRkFfSU9JTV9TTV9DT01QX0dPT0QgPSAyLAkvKiAgaW8gZ29vZCBjb21wLCByZXNvdXJjZSBmcmVlICovCisJQkZBX0lPSU1fU01fQ09NUCA9IDMsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2UgaXMgZnJlZSAqLworCUJGQV9JT0lNX1NNX0NPTVBfVVRBRyA9IDQsCS8qICBpbyBjb21wLCByZXNvdXJjZSBpcyBmcmVlICovCisJQkZBX0lPSU1fU01fRE9ORSA9IDUsCQkvKiAgaW8gY29tcCwgcmVzb3VyY2Ugbm90IGZyZWUgKi8KKwlCRkFfSU9JTV9TTV9GUkVFID0gNiwJCS8qICBpbyByZXNvdXJjZSBpcyBmcmVlZCAqLworCUJGQV9JT0lNX1NNX0FCT1JUID0gNywJCS8qICBhYm9ydCByZXF1ZXN0IGZyb20gc2NzaSBzdGFjayAqLworCUJGQV9JT0lNX1NNX0FCT1JUX0NPTVAgPSA4LAkvKiAgYWJvcnQgZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9BQk9SVF9ET05FID0gOSwJLyogIGFib3J0IGNvbXBsZXRpb24gZnJvbSBmL3cgKi8KKwlCRkFfSU9JTV9TTV9RUkVTVU1FID0gMTAsCS8qICBDUSBzcGFjZSBhdmFpbGFibGUgdG8gcXVldWUgSU8gKi8KKwlCRkFfSU9JTV9TTV9TR0FMTE9DRUQgPSAxMSwJLyogIFNHIHBhZ2UgYWxsb2NhdGlvbiBzdWNjZXNzZnVsICovCisJQkZBX0lPSU1fU01fU1FSRVRSWSA9IDEyLAkvKiAgc2VxdWVuY2UgcmVjb3ZlcnkgcmV0cnkgKi8KKwlCRkFfSU9JTV9TTV9IQ0IJPSAxMywJCS8qICBiZmEgY2FsbGJhY2sgY29tcGxldGUgKi8KKwlCRkFfSU9JTV9TTV9DTEVBTlVQID0gMTQsCS8qICBJTyBjbGVhbnVwIGZyb20gaXRuaW0gKi8KKwlCRkFfSU9JTV9TTV9UTVNUQVJUID0gMTUsCS8qICBJTyBjbGVhbnVwIGZyb20gdHNraW0gKi8KKwlCRkFfSU9JTV9TTV9UTURPTkUgPSAxNiwJLyogIElPIGNsZWFudXAgZnJvbSB0c2tpbSAqLworCUJGQV9JT0lNX1NNX0hXRkFJTCA9IDE3LAkvKiAgSU9DIGgvdyBmYWlsdXJlIGV2ZW50ICovCisJQkZBX0lPSU1fU01fSU9UT1YgPSAxOCwJCS8qICBJVE4gb2ZmbGluZSBUT1YgICAgICAgKi8KK307CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIElPIHN0YXRlIG1hY2hpbmUKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21fYWN0aXZlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkJICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSAgICAgIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pb2ltX3NtX2hjYihzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwKKwkJCQkgICAgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sCisJCQkJCSBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCQllbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAJCUlPIGlzIG5vdCBzdGFydGVkICh1bmFsbG9jYXRlZCkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV91bmluaXQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fU1RBUlQ6CisJCWlmICghYmZhX2l0bmltX2lzX29ubGluZShpb2ltLT5pdG5pbSkpIHsKKwkJCWlmICghYmZhX2l0bmltX2hvbGRfaW8oaW9pbS0+aXRuaW0pKSB7CisJCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQkJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsCisJCQkJCSZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQkJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQkJfSBlbHNlIHsKKwkJCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLAorCQkJCQkmaW9pbS0+aXRuaW0tPnBlbmRpbmdfcSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSB7CisJCQlpZiAoIWJmYV9pb2ltX3NnZV9zZXR1cChpb2ltKSkgeworCQkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fc2dhbGxvYyk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJaWYgKCFiZmFfaW9pbV9zZW5kX2lvcmVxKGlvaW0pKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3FmdWxsKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hY3RpdmUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSU9UT1Y6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwKKwkJCQlfX2JmYV9jYl9pb2ltX3BhdGh0b3YsIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCS8qKgorCQkgKiBJTyBpbiBwZW5kaW5nIHF1ZXVlIGNhbiBnZXQgYWJvcnQgcmVxdWVzdHMuIENvbXBsZXRlIGFib3J0CisJCSAqIHJlcXVlc3RzIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJmlvaW0tPml0bmltLT5wZW5kaW5nX3EsIGlvaW0pKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCQlpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUlPIGlzIHdhaXRpbmcgZm9yIFNHIHBhZ2VzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fc2dhbGxvYyhzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9TR0FMTE9DRUQ6CisJCWlmICghYmZhX2lvaW1fc2VuZF9pb3JlcShpb2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9xZnVsbCk7CisJCQlicmVhazsKKwkJfQorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9zZ3BnX3djYW5jZWwoaW9pbS0+YmZhLCAmaW9pbS0+aW9zcC0+c2dwZ193cWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3NncGdfd2NhbmNlbChpb2ltLT5iZmEsICZpb2ltLT5pb3NwLT5zZ3BnX3dxZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJTyBpcyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9hY3RpdmUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsCisJCQkgICAgICBfX2JmYV9jYl9pb2ltX2dvb2RfY29tcCwgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fY29tcCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlQ6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX1RSVUU7CisJCWlvaW0tPmlvX2NiZm4gPSBfX2JmYV9jYl9pb2ltX2Fib3J0OworCisJCWlmIChiZmFfaW9pbV9zZW5kX2Fib3J0KGlvaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID0gQkZBX0ZBTFNFOworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9mYWlsZWQ7CisKKwkJaWYgKGJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2NsZWFudXApOworCQllbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KGlvaW0tPmJmYSwgaW9pbS0+aXRuaW0tPnJlcXEsCisJCQkJCSAgJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3IgY29tcGxldGlvbiBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9HT09EOgorCWNhc2UgQkZBX0lPSU1fU01fQ09NUDoKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQUJPUlRfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9hYm9ydCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ09NUF9VVEFHOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCWJmYV9hc3NlcnQoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPT0gQkZBX1RSVUUpOworCQlpb2ltLT5pb3NwLT5hYm9ydF9leHBsaWNpdCA9IEJGQV9GQUxTRTsKKworCQlpZiAoYmZhX2lvaW1fc2VuZF9hYm9ydChpb2ltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKTsKKwkJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogSU8gaXMgYmVpbmcgY2xlYW5lZCB1cCAoaW1wbGljaXQgYWJvcnQpLCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGZyb20KKyAqIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmVhZHkgYmVpbmcgYWJvcnRlZCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0FCT1JUX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVF9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfVVRBRzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBpb2ltLT5pb19jYmZuLCBpb2ltKTsKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NMRUFOVVA6CisJCS8qKgorCQkgKiBJTyBjYW4gYmUgaW4gY2xlYW51cCBzdGF0ZSBhbHJlYWR5IGR1ZSB0byBUTSBjb21tYW5kLiAybmQgY2xlYW51cAorCQkgKiByZXF1ZXN0IGNvbWVzIGZyb20gSVROIG9mZmxpbmUgZXZlbnQuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU8gaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgZW51bSBiZmFfaW9pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSU9JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSk7CisJCWJmYV9pb2ltX3NlbmRfaW9yZXEoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fZmFpbGVkLAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBY3RpdmUgSU8gaXMgYmVpbmcgYWJvcnRlZCwgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21fYWJvcnRfcWZ1bGwoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9hYm9ydCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfYXNzZXJ0KGlvaW0tPmlvc3AtPmFib3J0X2V4cGxpY2l0ID09IEJGQV9UUlVFKTsKKwkJaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQgPSBCRkFfRkFMU0U7CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cF9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DT01QX0dPT0Q6CisJY2FzZSBCRkFfSU9JTV9TTV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIF9fYmZhX2NiX2lvaW1fYWJvcnQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0RPTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiX2ZyZWUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2Fib3J0LAorCQkJICAgICAgaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgX19iZmFfY2JfaW9pbV9mYWlsZWQsCisJCQkgICAgICBpb2ltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCUFjdGl2ZSBJTyBpcyBiZWluZyBjbGVhbmVkIHVwLCB3YWl0aW5nIGZvciByb29tIGluIHJlcXVlc3QgQ1EuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9jbGVhbnVwX3FmdWxsKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fY2xlYW51cCk7CisJCWJmYV9pb2ltX3NlbmRfYWJvcnQoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9BQk9SVDoKKwkJLyoqCisJCSAqIElPIGlzIGFscmFlZHkgYmVpbmcgY2xlYW5lZCB1cCBpbXBsaWNpdGx5CisJCSAqLworCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9hYm9ydDsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVBfR09PRDoKKwljYXNlIEJGQV9JT0lNX1NNX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0KTsKKwkJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisJCWJmYV9pb2ltX25vdGlmeV9jbGVhbnVwKGlvaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2JfZnJlZSk7CisJCWJmYV9yZXFxX3djYW5jZWwoJmlvaW0tPmlvc3AtPnJlcXFfd2FpdCk7CisJCWJmYV9jYl9xdWV1ZShpb2ltLT5iZmEsICZpb2ltLT5oY2JfcWUsIGlvaW0tPmlvX2NiZm4sIGlvaW0pOworCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQliZmFfY2JfcXVldWUoaW9pbS0+YmZhLCAmaW9pbS0+aGNiX3FlLCBfX2JmYV9jYl9pb2ltX2ZhaWxlZCwKKwkJCSAgICAgIGlvaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGJmYSBjYWxsYmFjayBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyY19mcChpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCQliZmFfaW9pbV9mcmVlKGlvaW0pOworCQliZmFfY2JfaW9pbV9yZXNmcmVlKGlvaW0tPmJmYS0+YmZhZCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBJTyBiZmEgY2FsbGJhY2sgaXMgcGVuZGluZy4gSU8gcmVzb3VyY2UgY2Fubm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc21faGNiX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGVudW0gYmZhX2lvaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfdHJjKGlvaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lPSU1fU01fSENCOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3Jlc2ZyZWUpOworCQlsaXN0X2RlbCgmaW9pbS0+cWUpOworCQlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9GUkVFOgorCQliZmFfc21fc2V0X3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2hjYik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9DTEVBTlVQOgorCQliZmFfaW9pbV9ub3RpZnlfY2xlYW51cChpb2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JT0lNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV9oY2IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPIGlzIGNvbXBsZXRlZCwgd2FpdGluZyByZXNvdXJjZSBmcmVlIGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zbV9yZXNmcmVlKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLCBlbnVtIGJmYV9pb2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JT0lNX1NNX0ZSRUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaW9pbSwgYmZhX2lvaW1fc21fdW5pbml0KTsKKwkJYmZhX2lvaW1fZnJlZShpb2ltKTsKKwkJYmZhX2NiX2lvaW1fcmVzZnJlZShpb2ltLT5iZmEtPmJmYWQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lPSU1fU01fQ0xFQU5VUDoKKwkJYmZhX2lvaW1fbm90aWZ5X2NsZWFudXAoaW9pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSU9JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9nb29kX2NvbXAoaW9pbS0+YmZhLT5iZmFkLCBpb2ltLT5kaW8pOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9jb21wKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zCSppb2ltID0gY2Jhcmc7CisJc3RydWN0IGJmaV9pb2ltX3JzcF9zICptOworCXU4CQkqc25zaW5mbyA9IE5VTEw7CisJdTggICAgICAgICBzbnNfbGVuID0gMDsKKwlzMzIgICAgICAgICByZXNpZHVlID0gMDsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgQkZBX0lPSU1fU01fSENCKTsKKwkJcmV0dXJuOworCX0KKworCW0gPSAoc3RydWN0IGJmaV9pb2ltX3JzcF9zICopICZpb2ltLT5pb3NwLT5jb21wX3JzcG1zZzsKKwlpZiAobS0+aW9fc3RhdHVzID09IEJGSV9JT0lNX1NUU19PSykgeworCQkvKioKKwkJICogc2V0dXAgc2Vuc2UgaW5mb3JtYXRpb24sIGlmIHByZXNlbnQKKwkJICovCisJCWlmIChtLT5zY3NpX3N0YXR1cyA9PSBTQ1NJX1NUQVRVU19DSEVDS19DT05ESVRJT04KKwkJCQkJJiYgbS0+c25zX2xlbikgeworCQkJc25zX2xlbiA9IG0tPnNuc19sZW47CisJCQlzbnNpbmZvID0gaW9pbS0+aW9zcC0+c25zaW5mbzsKKwkJfQorCisJCS8qKgorCQkgKiBzZXR1cCByZXNpZHVlIHZhbHVlIGNvcnJlY3RseSBmb3Igbm9ybWFsIGNvbXBsZXRpb25zCisJCSAqLworCQlpZiAobS0+cmVzaWRfZmxhZ3MgPT0gRkNQX1JFU0lEX1VOREVSKQorCQkJcmVzaWR1ZSA9IGJmYV9vc19udG9obChtLT5yZXNpZHVlKTsKKwkJaWYgKG0tPnJlc2lkX2ZsYWdzID09IEZDUF9SRVNJRF9PVkVSKSB7CisJCQlyZXNpZHVlID0gYmZhX29zX250b2hsKG0tPnJlc2lkdWUpOworCQkJcmVzaWR1ZSA9IC1yZXNpZHVlOworCQl9CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgbS0+aW9fc3RhdHVzLAorCQkJICBtLT5zY3NpX3N0YXR1cywgc25zX2xlbiwgc25zaW5mbywgcmVzaWR1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX2NiX2lvaW1fZG9uZShpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbywgQkZJX0lPSU1fU1RTX0FCT1JURUQsCisJCQkgIDAsIDAsIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfaW9pbV9wYXRodG92KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9kb25lKGlvaW0tPmJmYS0+YmZhZCwgaW9pbS0+ZGlvLCBCRklfSU9JTV9TVFNfUEFUSFRPViwKKwkJCSAgMCwgMCwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltID0gY2Jhcmc7CisKKwlpZiAoIWNvbXBsZXRlKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfY2JfaW9pbV9hYm9ydChpb2ltLT5iZmEtPmJmYWQsIGlvaW0tPmRpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9zZ3BnX2FsbG9jZWQodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWlvaW0tPm5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmlvaW0tPmlvc3AtPnNncGdfd3FlLnNncGdfcSwgJmlvaW0tPnNncGdfcSk7CisJYmZhX2lvaW1fc2dwZ19zZXR1cChpb2ltKTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9TR0FMTE9DRUQpOworfQorCisvKioKKyAqIFNlbmQgSS9PIHJlcXVlc3QgdG8gZmlybXdhcmUuCisgKi8KK3N0YXRpYyAgICAgICAgICBiZmFfYm9vbGVhbl90CitiZmFfaW9pbV9zZW5kX2lvcmVxKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBpb2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcmVxX3MgKm07CisJc3RhdGljIHN0cnVjdCBmY3BfY21uZF9zIGNtbmRfejAgPSB7IDAgfTsKKwlzdHJ1Y3QgYmZpX3NnZV9zICAgICAgKnNnZTsKKwl1MzIgICAgICAgIHBnZGxlbiA9IDA7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQoaW9pbS0+YmZhLCBpb2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkgICZpb2ltLT5pb3NwLT5yZXFxX3dhaXQpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCW0tPmlvX3RhZyA9IGJmYV9vc19odG9ucyhpb2ltLT5pb3RhZyk7CisJbS0+cnBvcnRfaGRsID0gaW9pbS0+aXRuaW0tPnJwb3J0LT5md19oYW5kbGU7CisJbS0+aW9fdGltZW91dCA9IGJmYV9jYl9pb2ltX2dldF90aW1lb3V0KGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBidWlsZCBpbmxpbmUgSU8gU0cgZWxlbWVudCBoZXJlCisJICovCisJc2dlID0gJm0tPnNnZXNbMF07CisJaWYgKGlvaW0tPm5zZ2VzKSB7CisJCXNnZS0+c2dhID0gYmZhX2NiX2lvaW1fZ2V0X3NnYWRkcihpb2ltLT5kaW8sIDApOworCQlwZ2RsZW4gPSBiZmFfY2JfaW9pbV9nZXRfc2dsZW4oaW9pbS0+ZGlvLCAwKTsKKwkJc2dlLT5zZ19sZW4gPSBwZ2RsZW47CisJCXNnZS0+ZmxhZ3MgPSAoaW9pbS0+bnNnZXMgPiBCRklfU0dFX0lOTElORSkgPworCQkJCQlCRklfU0dFX0RBVEFfQ1BMIDogQkZJX1NHRV9EQVRBX0xBU1Q7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKwkJc2dlKys7CisJfQorCisJaWYgKGlvaW0tPm5zZ2VzID4gQkZJX1NHRV9JTkxJTkUpIHsKKwkJc2dlLT5zZ2EgPSBpb2ltLT5zZ3BnLT5zZ3BnX3BhOworCX0gZWxzZSB7CisJCXNnZS0+c2dhLmEzMi5hZGRyX2xvID0gMDsKKwkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCX0KKwlzZ2UtPnNnX2xlbiA9IHBnZGxlbjsKKwlzZ2UtPmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJYmZhX3NnZV90b19iZShzZ2UpOworCisJLyoqCisJICogc2V0IHVwIEkvTyBjb21tYW5kIHBhcmFtZXRlcnMKKwkgKi8KKwliZmFfb3NfYXNzaWduKG0tPmNtbmQsIGNtbmRfejApOworCW0tPmNtbmQubHVuID0gYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pOworCW0tPmNtbmQuaW9kaXIgPSBiZmFfY2JfaW9pbV9nZXRfaW9kaXIoaW9pbS0+ZGlvKTsKKwliZmFfb3NfYXNzaWduKG0tPmNtbmQuY2RiLAorCQkJKihzdHJ1Y3Qgc2NzaV9jZGJfcyAqKWJmYV9jYl9pb2ltX2dldF9jZGIoaW9pbS0+ZGlvKSk7CisJbS0+Y21uZC5mY3BfZGwgPSBiZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisKKwkvKioKKwkgKiBzZXQgdXAgSS9PIG1lc3NhZ2UgaGVhZGVyCisJICovCisJc3dpdGNoIChtLT5jbW5kLmlvZGlyKSB7CisJY2FzZSBGQ1BfSU9ESVJfUkVBRDoKKwkJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JT0lNX1JFQUQsIDAsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwkJYmZhX3N0YXRzKGl0bmltLCBpbnB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfV1JJVEU6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9XUklURSwgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCQliZmFfc3RhdHMoaXRuaW0sIG91dHB1dF9yZXFzKTsKKwkJYnJlYWs7CisJY2FzZSBGQ1BfSU9ESVJfUlc6CisJCWJmYV9zdGF0cyhpdG5pbSwgaW5wdXRfcmVxcyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgb3V0cHV0X3JlcXMpOworCWRlZmF1bHQ6CisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCX0KKwlpZiAoaXRuaW0tPnNlcV9yZWMgfHwKKwkgICAgKGJmYV9jYl9pb2ltX2dldF9zaXplKGlvaW0tPmRpbykgJiAoc2l6ZW9mKHUzMikgLSAxKSkpCisJCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTV9JTywgMCwgYmZhX2xwdWlkKGlvaW0tPmJmYSkpOworCisjaWZkZWYgSU9JTV9BRFZBTkNFRAorCW0tPmNtbmQuY3JuID0gYmZhX2NiX2lvaW1fZ2V0X2Nybihpb2ltLT5kaW8pOworCW0tPmNtbmQucHJpb3JpdHkgPSBiZmFfY2JfaW9pbV9nZXRfcHJpb3JpdHkoaW9pbS0+ZGlvKTsKKwltLT5jbW5kLnRhc2thdHRyID0gYmZhX2NiX2lvaW1fZ2V0X3Rhc2thdHRyKGlvaW0tPmRpbyk7CisKKwkvKioKKwkgKiBIYW5kbGUgbGFyZ2UgQ0RCICg+MTYgYnl0ZXMpLgorCSAqLworCW0tPmNtbmQuYWRkbF9jZGJfbGVuID0gKGJmYV9jYl9pb2ltX2dldF9jZGJsZW4oaW9pbS0+ZGlvKSAtCisJCQkJCUZDUF9DTU5EX0NEQl9MRU4pIC8gc2l6ZW9mKHUzMik7CisJaWYgKG0tPmNtbmQuYWRkbF9jZGJfbGVuKSB7CisJCWJmYV9vc19tZW1jcHkoJm0tPmNtbmQuY2RiICsgMSwgKHN0cnVjdCBzY3NpX2NkYl9zICopCisJCQkJYmZhX2NiX2lvaW1fZ2V0X2NkYihpb2ltLT5kaW8pICsgMSwKKwkJCQltLT5jbW5kLmFkZGxfY2RiX2xlbiAqIHNpemVvZih1MzIpKTsKKwkJZmNwX2NtbmRfZmNwZGwoJm0tPmNtbmQpID0KKwkJCQliZmFfb3NfaHRvbmwoYmZhX2NiX2lvaW1fZ2V0X3NpemUoaW9pbS0+ZGlvKSk7CisJfQorI2VuZGlmCisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaW9pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIFNldHVwIGFueSBhZGRpdGlvbmFsIFNHIHBhZ2VzIG5lZWRlZC5JbmxpbmUgU0cgZWxlbWVudCBpcyBzZXR1cAorICogYXQgcXVldWluZyB0aW1lLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX2lvaW1fc2dlX3NldHVwKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCXUxNiAgICAgICAgbnNncGdzOworCisJYmZhX2Fzc2VydChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKTsKKworCS8qKgorCSAqIGFsbG9jYXRlIFNHIHBhZ2VzIG5lZWRlZAorCSAqLworCW5zZ3BncyA9IEJGQV9TR1BHX05QQUdFKGlvaW0tPm5zZ2VzKTsKKwlpZiAoIW5zZ3BncykKKwkJcmV0dXJuIEJGQV9UUlVFOworCisJaWYgKGJmYV9zZ3BnX21hbGxvYyhpb2ltLT5iZmEsICZpb2ltLT5zZ3BnX3EsIG5zZ3BncykKKwkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfc2dwZ193YWl0KGlvaW0tPmJmYSwgJmlvaW0tPmlvc3AtPnNncGdfd3FlLCBuc2dwZ3MpOworCQlyZXR1cm4gQkZBX0ZBTFNFOworCX0KKworCWlvaW0tPm5zZ3BncyA9IG5zZ3BnczsKKwliZmFfaW9pbV9zZ3BnX3NldHVwKGlvaW0pOworCisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgdm9pZAorYmZhX2lvaW1fc2dwZ19zZXR1cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwlpbnQgICAgICAgICAgICAgc2dlaWQsIG5zZ2VzLCBpOworCXN0cnVjdCBiZmlfc2dlX3MgICAgICAqc2dlOworCXN0cnVjdCBiZmFfc2dwZ19zICpzZ3BnOworCXUzMiAgICAgICAgcGdjdW1zejsKKworCXNnZWlkID0gQkZJX1NHRV9JTkxJTkU7CisJaW9pbS0+c2dwZyA9IHNncGcgPSBiZmFfcV9maXJzdCgmaW9pbS0+c2dwZ19xKTsKKworCWRvIHsKKwkJc2dlID0gc2dwZy0+c2dwZy0+c2dlczsKKwkJbnNnZXMgPSBpb2ltLT5uc2dlcyAtIHNnZWlkOworCQlpZiAobnNnZXMgPiBCRklfU0dQR19EQVRBX1NHRVMpCisJCQluc2dlcyA9IEJGSV9TR1BHX0RBVEFfU0dFUzsKKworCQlwZ2N1bXN6ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG5zZ2VzOyBpKyssIHNnZSsrLCBzZ2VpZCsrKSB7CisJCQlzZ2UtPnNnYSA9IGJmYV9jYl9pb2ltX2dldF9zZ2FkZHIoaW9pbS0+ZGlvLCBzZ2VpZCk7CisJCQlzZ2UtPnNnX2xlbiA9IGJmYV9jYl9pb2ltX2dldF9zZ2xlbihpb2ltLT5kaW8sIHNnZWlkKTsKKwkJCXBnY3Vtc3ogKz0gc2dlLT5zZ19sZW47CisKKwkJCS8qKgorCQkJICogc2V0IGZsYWdzCisJCQkgKi8KKwkJCWlmIChpIDwgKG5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQTsKKwkJCWVsc2UgaWYgKHNnZWlkIDwgKGlvaW0tPm5zZ2VzIC0gMSkpCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9DUEw7CisJCQllbHNlCisJCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQl9CisKKwkJc2dwZyA9IChzdHJ1Y3QgYmZhX3NncGdfcyAqKSBiZmFfcV9uZXh0KHNncGcpOworCisJCS8qKgorCQkgKiBzZXQgdGhlIGxpbmsgZWxlbWVudCBvZiBlYWNoIHBhZ2UKKwkJICovCisJCWlmIChzZ2VpZCA9PSBpb2ltLT5uc2dlcykgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfUEdETEVOOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfbG8gPSAwOworCQkJc2dlLT5zZ2EuYTMyLmFkZHJfaGkgPSAwOworCQl9IGVsc2UgeworCQkJc2dlLT5mbGFncyA9IEJGSV9TR0VfTElOSzsKKwkJCXNnZS0+c2dhID0gc2dwZy0+c2dwZ19wYTsKKwkJfQorCQlzZ2UtPnNnX2xlbiA9IHBnY3Vtc3o7CisJfSB3aGlsZSAoc2dlaWQgPCBpb2ltLT5uc2dlcyk7Cit9CisKKy8qKgorICogU2VuZCBJL08gYWJvcnQgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljICAgICAgICAgIGJmYV9ib29sZWFuX3QKK2JmYV9pb2ltX3NlbmRfYWJvcnQoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICppdG5pbSA9IGlvaW0tPml0bmltOworCXN0cnVjdCBiZmlfaW9pbV9hYm9ydF9yZXFfcyAqbTsKKwllbnVtIGJmaV9pb2ltX2gyaSAgICAgICBtc2dvcDsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChpb2ltLT5iZmEsIGl0bmltLT5yZXFxKTsKKwlpZiAoIW0pCisJCXJldHVybiBCRkFfRkFMU0U7CisKKwkvKioKKwkgKiBidWlsZCBpL28gcmVxdWVzdCBtZXNzYWdlIG5leHQKKwkgKi8KKwlpZiAoaW9pbS0+aW9zcC0+YWJvcnRfZXhwbGljaXQpCisJCW1zZ29wID0gQkZJX0lPSU1fSDJJX0lPQUJPUlRfUkVROworCWVsc2UKKwkJbXNnb3AgPSBCRklfSU9JTV9IMklfSU9DTEVBTlVQX1JFUTsKKworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfSU9JTSwgbXNnb3AsIGJmYV9scHVpZChpb2ltLT5iZmEpKTsKKwltLT5pb190YWcgICAgPSBiZmFfb3NfaHRvbnMoaW9pbS0+aW90YWcpOworCW0tPmFib3J0X3RhZyA9ICsraW9pbS0+YWJvcnRfdGFnOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKGlvaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiBDYWxsIHRvIHJlc3VtZSBhbnkgSS9PIHJlcXVlc3RzIHdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pb2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0gPSBjYmFyZzsKKworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1FSRVNVTUUpOworfQorCisKK3N0YXRpYyB2b2lkCitiZmFfaW9pbV9ub3RpZnlfY2xlYW51cChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwkvKioKKwkgKiBNb3ZlIElPIGZyb20gaXRuaW0gcXVldWUgdG8gZmNwaW0gZ2xvYmFsIHF1ZXVlIHNpbmNlIGl0bmltIHdpbGwgYmUKKwkgKiBmcmVlZC4KKwkgKi8KKwlsaXN0X2RlbCgmaW9pbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKworCWlmICghaW9pbS0+aW9zcC0+dHNraW0pIHsKKwkJaWYgKGlvaW0tPmZjcGltLT5kZWxheV9jb21wICYmIGlvaW0tPml0bmltLT5pb3Rvdl9hY3RpdmUpIHsKKwkJCWJmYV9jYl9kZXF1ZXVlKCZpb2ltLT5oY2JfcWUpOworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+aXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCX0KKwkJYmZhX2l0bmltX2lvZG9uZShpb2ltLT5pdG5pbSk7CisJfSBlbHNlCisJCWJmYV90c2tpbV9pb2RvbmUoaW9pbS0+aW9zcC0+dHNraW0pOworfQorCisvKioKKyAqIAkJICBvciBhZnRlciB0aGUgbGluayBjb21lcyBiYWNrLgorICovCit2b2lkCitiZmFfaW9pbV9kZWxheWVkX2NvbXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0sIGJmYV9ib29sZWFuX3QgaW90b3YpCit7CisJLyoqCisJICogSWYgcGF0aCB0b3YgdGltZXIgZXhwaXJlZCwgZmFpbGJhY2sgd2l0aCBQQVRIVE9WIHN0YXR1cyAtIHRoZXNlCisJICogSU8gcmVxdWVzdHMgYXJlIG5vdCBub3JtYWxseSByZXRyaWVkIGJ5IElPIHN0YWNrLgorCSAqCisJICogT3RoZXJ3aXNlIGRldmljZSBjYW1lYmFjayBvbmxpbmUgYW5kIGZhaWwgaXQgd2l0aCBub3JtYWwgZmFpbGVkCisJICogc3RhdHVzIHNvIHRoYXQgSU8gc3RhY2sgcmV0cmllcyB0aGVzZSBmYWlsZWQgSU8gcmVxdWVzdHMuCisJICovCisJaWYgKGlvdG92KQorCQlpb2ltLT5pb19jYmZuID0gX19iZmFfY2JfaW9pbV9wYXRodG92OworCWVsc2UKKwkJaW9pbS0+aW9fY2JmbiA9IF9fYmZhX2NiX2lvaW1fZmFpbGVkOworCisJYmZhX2NiX3F1ZXVlKGlvaW0tPmJmYSwgJmlvaW0tPmhjYl9xZSwgaW9pbS0+aW9fY2JmbiwgaW9pbSk7CisKKyAgICAvKioKKyAgICAgKiBNb3ZlIElPIHRvIGZjcGltIGdsb2JhbCBxdWV1ZSBzaW5jZSBpdG5pbSB3aWxsIGJlCisgICAgICogZnJlZWQuCisgICAgICovCisgICAgbGlzdF9kZWwoJmlvaW0tPnFlKTsKKyAgICBsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJmlvaW0tPmZjcGltLT5pb2ltX2NvbXBfcSk7Cit9CisKKworCisvKioKKyAqICBiZmFfaW9pbV9mcmllbmQKKyAqLworCisvKioKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX2lvaW1fYXR0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8pCit7CisJc3RydWN0IGJmYV9pb2ltX3MJCSppb2ltOworCXN0cnVjdCBiZmFfaW9pbV9zcF9zCSppb3NwOworCXUxNgkJaTsKKwl1OAkJCSpzbnNpbmZvOworCXUzMgkJc25zYnVmc3o7CisKKwkvKioKKwkgKiBjbGFpbSBtZW1vcnkgZmlyc3QKKwkgKi8KKwlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPmlvaW1fYXJyID0gaW9pbTsKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIChpb2ltICsgZmNwaW0tPm51bV9pb2ltX3JlcXMpOworCisJaW9zcCA9IChzdHJ1Y3QgYmZhX2lvaW1fc3BfcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pb2ltX3NwX2FyciA9IGlvc3A7CisJYmZhX21lbWluZm9fa3ZhKG1pbmZvKSA9ICh1OCAqKSAoaW9zcCArIGZjcGltLT5udW1faW9pbV9yZXFzKTsKKworCS8qKgorCSAqIENsYWltIERNQSBtZW1vcnkgZm9yIHBlciBJTyBzZW5zZSBkYXRhLgorCSAqLworCXNuc2J1ZnN6ID0gZmNwaW0tPm51bV9pb2ltX3JlcXMgKiBCRklfSU9JTV9TTlNMRU47CisJZmNwaW0tPnNuc2Jhc2UucGEgID0gYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pOworCWJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKSArPSBzbnNidWZzejsKKworCWZjcGltLT5zbnNiYXNlLmt2YSA9IGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pbmZvKTsKKwliZmFfbWVtaW5mb19kbWFfdmlydChtaW5mbykgKz0gc25zYnVmc3o7CisJc25zaW5mbyA9IGZjcGltLT5zbnNiYXNlLmt2YTsKKwliZmFfaW9jZmNfc2V0X3Nuc2Jhc2UoZmNwaW0tPmJmYSwgZmNwaW0tPnNuc2Jhc2UucGEpOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBpb2ltIGZyZWUgcXVldWVzCisJICovCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX3Jlc2ZyZWVfcSk7CisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pb2ltX2NvbXBfcSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmNwaW0tPm51bV9pb2ltX3JlcXM7CisJICAgICBpKyssIGlvaW0rKywgaW9zcCsrLCBzbnNpbmZvICs9IEJGSV9JT0lNX1NOU0xFTikgeworCQkvKgorCQkgKiBpbml0aWFsaXplIElPSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQoaW9pbSwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaW9pbV9zKSk7CisJCWlvaW0tPmlvdGFnICAgPSBpOworCQlpb2ltLT5iZmEgICAgID0gZmNwaW0tPmJmYTsKKwkJaW9pbS0+ZmNwaW0gICA9IGZjcGltOworCQlpb2ltLT5pb3NwICAgID0gaW9zcDsKKwkJaW9zcC0+c25zaW5mbyA9IHNuc2luZm87CisJCUlOSVRfTElTVF9IRUFEKCZpb2ltLT5zZ3BnX3EpOworCQliZmFfcmVxcV93aW5pdCgmaW9pbS0+aW9zcC0+cmVxcV93YWl0LAorCQkJCSAgIGJmYV9pb2ltX3FyZXN1bWUsIGlvaW0pOworCQliZmFfc2dwZ193aW5pdCgmaW9pbS0+aW9zcC0+c2dwZ193cWUsCisJCQkJICAgYmZhX2lvaW1fc2dwZ19hbGxvY2VkLCBpb2ltKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShpb2ltLCBiZmFfaW9pbV9zbV91bmluaXQpOworCisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmZmNwaW0tPmlvaW1fZnJlZV9xKTsKKwl9Cit9CisKKy8qKgorICogRHJpdmVyIGRldGFjaCB0aW1lIGNhbGwuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2RldGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSkKK3sKK30KKwordm9pZAorYmZhX2lvaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfaW9pbV9yc3BfcyAqKSBtOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXUxNiAgICAgICAgaW90YWc7CisJZW51bSBiZmFfaW9pbV9ldmVudCBldnQgPSBCRkFfSU9JTV9TTV9DT01QOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV90cmMoaW9pbS0+YmZhLCByc3AtPmlvX3N0YXR1cyk7CisJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+cmV1c2VfaW9fdGFnKTsKKworCWlmIChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX2FjdGl2ZSkpCisJCWJmYV9vc19hc3NpZ24oaW9pbS0+aW9zcC0+Y29tcF9yc3Btc2csICptKTsKKworCXN3aXRjaCAocnNwLT5pb19zdGF0dXMpIHsKKwljYXNlIEJGSV9JT0lNX1NUU19PSzoKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfb2spOworCQlpZiAocnNwLT5yZXVzZV9pb190YWcgPT0gMCkKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0RPTkU7CisJCWVsc2UKKwkJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfQUJPUlRFRDoKKwkJcnNwLT5pb19zdGF0dXMgPSBCRklfSU9JTV9TVFNfQUJPUlRFRDsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBpb2NvbXBfYWJvcnRlZCk7CisJCWlmIChyc3AtPnJldXNlX2lvX3RhZyA9PSAwKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fRE9ORTsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUDsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19QUk9UT19FUlI6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fcHJvdG9fZXJyKTsKKwkJYmZhX2Fzc2VydChyc3AtPnJldXNlX2lvX3RhZyk7CisJCWV2dCA9IEJGQV9JT0lNX1NNX0NPTVA7CisJCWJyZWFrOworCisJY2FzZSBCRklfSU9JTV9TVFNfU1FFUl9ORUVERUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21fc3Flcl9uZWVkZWQpOworCQliZmFfYXNzZXJ0KHJzcC0+cmV1c2VfaW9fdGFnID09IDApOworCQlldnQgPSBCRkFfSU9JTV9TTV9TUVJFVFJZOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX1JFU19GUkVFOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3Jlc19mcmVlKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fRlJFRTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQ6CisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgaW9jb21faG9zdGFicnRzKTsKKwkJaWYgKHJzcC0+YWJvcnRfdGFnICE9IGlvaW0tPmFib3J0X3RhZykgeworCQkJYmZhX3RyYyhpb2ltLT5iZmEsIHJzcC0+YWJvcnRfdGFnKTsKKwkJCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5hYm9ydF90YWcpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKHJzcC0+cmV1c2VfaW9fdGFnKQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfQ09NUDsKKwkJZWxzZQorCQkJZXZ0ID0gQkZBX0lPSU1fU01fQUJPUlRfRE9ORTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9JT0lNX1NUU19VVEFHOgorCQliZmFfZmNwaW1fc3RhdHMoZmNwaW0sIGlvY29tX3V0YWdzKTsKKwkJZXZ0ID0gQkZBX0lPSU1fU01fQ09NUF9VVEFHOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJYmZhX3NtX3NlbmRfZXZlbnQoaW9pbSwgZXZ0KTsKK30KKwordm9pZAorYmZhX2lvaW1fZ29vZF9jb21wX2lzcihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmaV9tc2dfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKnJzcCA9IChzdHJ1Y3QgYmZpX2lvaW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwl1MTYgICAgICAgIGlvdGFnOworCisJaW90YWcgPSBiZmFfb3NfbnRvaHMocnNwLT5pb190YWcpOworCisJaW9pbSA9IEJGQV9JT0lNX0ZST01fVEFHKGZjcGltLCBpb3RhZyk7CisJYmZhX2Fzc2VydChpb2ltLT5pb3RhZyA9PSBpb3RhZyk7CisKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0NPTVBfR09PRCk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IGl0bmltIHRvIGNsZWFuIHVwIElPIHdoaWxlIGdvaW5nIG9mZmxpbmUuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2NsZWFudXAoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJYmZhX3RyYyhpb2ltLT5iZmEsIGlvaW0tPmlvdGFnKTsKKwliZmFfZmNwaW1fc3RhdHMoaW9pbS0+ZmNwaW0sIGlvX2NsZWFudXBzKTsKKworCWlvaW0tPmlvc3AtPnRza2ltID0gTlVMTDsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKwordm9pZAorYmZhX2lvaW1fY2xlYW51cF90bShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSwgc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfdHJjKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9mY3BpbV9zdGF0cyhpb2ltLT5mY3BpbSwgaW9fdG1hYm9ydHMpOworCisJaW9pbS0+aW9zcC0+dHNraW0gPSB0c2tpbTsKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiBJT0MgZmFpbHVyZSBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2lvaW1faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfc21fc2VuZF9ldmVudChpb2ltLCBCRkFfSU9JTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIElPIG9mZmxpbmUgVE9WIHBvcHBlZC4gRmFpbCB0aGUgcGVuZGluZyBJTy4KKyAqLwordm9pZAorYmZhX2lvaW1fdG92KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0lPVE9WKTsKK30KKworCisKKy8qKgorICogIGJmYV9pb2ltX2FwaQorICovCisKKy8qKgorICogQWxsb2NhdGUgSU9JTSByZXNvdXJjZSBmb3IgaW5pdGlhdG9yIG1vZGUgSS9PIHJlcXVlc3QuCisgKi8KK3N0cnVjdCBiZmFfaW9pbV9zICoKK2JmYV9pb2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgdTE2IG5zZ2VzKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCisJLyoqCisJICogYWxvY2F0ZSBJT0lNIHJlc291cmNlCisJICovCisJYmZhX3FfZGVxKCZmY3BpbS0+aW9pbV9mcmVlX3EsICZpb2ltKTsKKwlpZiAoIWlvaW0pIHsKKwkJYmZhX2ZjcGltX3N0YXRzKGZjcGltLCBub19pb3RhZ3MpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpb2ltLT5kaW8gPSBkaW87CisJaW9pbS0+aXRuaW0gPSBpdG5pbTsKKwlpb2ltLT5uc2dlcyA9IG5zZ2VzOworCWlvaW0tPm5zZ3BncyA9IDA7CisKKwliZmFfc3RhdHMoZmNwaW0sIHRvdGFsX2lvcyk7CisJYmZhX3N0YXRzKGl0bmltLCBpb3MpOworCWZjcGltLT5pb3NfYWN0aXZlKys7CisKKwlsaXN0X2FkZF90YWlsKCZpb2ltLT5xZSwgJml0bmltLT5pb19xKTsKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCisJcmV0dXJuIGlvaW07Cit9CisKK3ZvaWQKK2JmYV9pb2ltX2ZyZWUoc3RydWN0IGJmYV9pb2ltX3MgKmlvaW0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBpb2ltLT5mY3BpbTsKKworCWJmYV90cmNfZnAoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2Fzc2VydF9mcChiZmFfc21fY21wX3N0YXRlKGlvaW0sIGJmYV9pb2ltX3NtX3VuaW5pdCkpOworCisJYmZhX2Fzc2VydF9mcChsaXN0X2VtcHR5KCZpb2ltLT5zZ3BnX3EpCisJCSAgIHx8IChpb2ltLT5uc2dlcyA+IEJGSV9TR0VfSU5MSU5FKSk7CisKKwlpZiAoaW9pbS0+bnNncGdzID4gMCkKKwkJYmZhX3NncGdfbWZyZWUoaW9pbS0+YmZhLCAmaW9pbS0+c2dwZ19xLCBpb2ltLT5uc2dwZ3MpOworCisJYmZhX3N0YXRzKGlvaW0tPml0bmltLCBpb19jb21wcyk7CisJZmNwaW0tPmlvc19hY3RpdmUtLTsKKworCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZmY3BpbS0+aW9pbV9mcmVlX3EpOworfQorCit2b2lkCitiZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSkKK3sKKwliZmFfdHJjX2ZwKGlvaW0tPmJmYSwgaW9pbS0+aW90YWcpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiBEcml2ZXIgSS9PIGFib3J0IHJlcXVlc3QuCisgKi8KK3ZvaWQKK2JmYV9pb2ltX2Fib3J0KHN0cnVjdCBiZmFfaW9pbV9zICppb2ltKQoreworCWJmYV90cmMoaW9pbS0+YmZhLCBpb2ltLT5pb3RhZyk7CisJYmZhX2ZjcGltX3N0YXRzKGlvaW0tPmZjcGltLCBpb19hYm9ydHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGlvaW0sIEJGQV9JT0lNX1NNX0FCT1JUKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9pdG5pbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDVjNjFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfaXRuaW0uYwpAQCAtMCwwICsxLDEwODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9mY3BpbS5oPgorI2luY2x1ZGUgImJmYV9mY3BpbV9wcml2LmgiCisKK0JGQV9UUkNfRklMRShIQUwsIElUTklNKTsKKworI2RlZmluZSBCRkFfSVROSU1fRlJPTV9UQUcoX2ZjcGltLCBfdGFnKQkJCQlcCisJKChfZmNwaW0pLT5pdG5pbV9hcnIgKyAoKF90YWcpICYgKChfZmNwaW0pLT5udW1faXRuaW1zIC0gMSkpKQorCisjZGVmaW5lIGJmYV9mY3BpbV9hZGRpdG4oX19pdG5pbSkJCQkJCVwKKwlsaXN0X2FkZF90YWlsKCYoX19pdG5pbSktPnFlLCAmKF9faXRuaW0pLT5mY3BpbS0+aXRuaW1fcSkKKyNkZWZpbmUgYmZhX2ZjcGltX2RlbGl0bihfX2l0bmltKQlkbyB7CQkJCVwKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3EoJihfX2l0bmltKS0+ZmNwaW0tPml0bmltX3EsIF9faXRuaW0pKTsgICAgICBcCisJbGlzdF9kZWwoJihfX2l0bmltKS0+cWUpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fcSkpOyAgICAgIFwKKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJihfX2l0bmltKS0+aW9fY2xlYW51cF9xKSk7ICAgICAgXAorCWJmYV9hc3NlcnQobGlzdF9lbXB0eSgmKF9faXRuaW0pLT5wZW5kaW5nX3EpKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV9pdG5pbV9vbmxpbmVfY2IoX19pdG5pbSkgZG8gewkJCQlcCisJaWYgKChfX2l0bmltKS0+YmZhLT5mY3MpCQkJCQlcCisJCWJmYV9jYl9pdG5pbV9vbmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29ubGluZSwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfaXRuaW1fb2ZmbGluZV9jYihfX2l0bmltKSBkbyB7CQkJCVwKKwlpZiAoKF9faXRuaW0pLT5iZmEtPmZjcykJCQkJCVwKKwkJYmZhX2NiX2l0bmltX29mZmxpbmUoKF9faXRuaW0pLT5kaXRuKTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19pdG5pbSktPmJmYSwgJihfX2l0bmltKS0+aGNiX3FlLAlcCisJCV9fYmZhX2NiX2l0bmltX29mZmxpbmUsIChfX2l0bmltKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX2l0bmltX3NsZXJfY2IoX19pdG5pbSkgZG8gewkJCQkJXAorCWlmICgoX19pdG5pbSktPmJmYS0+ZmNzKQkJCQkJXAorCQliZmFfY2JfaXRuaW1fc2xlcigoX19pdG5pbSktPmRpdG4pOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX2l0bmltKS0+YmZhLCAmKF9faXRuaW0pLT5oY2JfcWUsCVwKKwkJX19iZmFfY2JfaXRuaW1fc2xlciwgKF9faXRuaW0pKTsgICAgICBcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX2l0bmltX29ubGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgX19iZmFfY2JfaXRuaW1fc2xlcih2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3ZfY2xlYW51cChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Yodm9pZCAqaXRuaW1fYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1faW90b3Zfc3RhcnQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX2lvdG92X2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworLyoqCisgKiAgYmZhX2l0bmltX3NtIEJGQSBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworCitlbnVtIGJmYV9pdG5pbV9ldmVudCB7CisJQkZBX0lUTklNX1NNX0NSRUFURSA9IDEsCS8qICBpdG5pbSBpcyBjcmVhdGVkICovCisJQkZBX0lUTklNX1NNX09OTElORSA9IDIsCS8qICBpdG5pbSBpcyBvbmxpbmUgKi8KKwlCRkFfSVROSU1fU01fT0ZGTElORSA9IDMsCS8qICBpdG5pbSBpcyBvZmZsaW5lICovCisJQkZBX0lUTklNX1NNX0ZXUlNQID0gNCwJCS8qICBmaXJtd2FyZSByZXNwb25zZSAqLworCUJGQV9JVE5JTV9TTV9ERUxFVEUgPSA1LAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgaXRuaW0gKi8KKwlCRkFfSVROSU1fU01fQ0xFQU5VUCA9IDYsCS8qICBJTyBjbGVhbnVwIGNvbXBsZXRpb24gKi8KKwlCRkFfSVROSU1fU01fU0xFUiA9IDcsCQkvKiAgc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5ICovCisJQkZBX0lUTklNX1NNX0hXRkFJTCA9IDgsCS8qICBJT0MgaC93IGZhaWx1cmUgZXZlbnQgKi8KKwlCRkFfSVROSU1fU01fUVJFU1VNRSA9IDksCS8qICBxdWV1ZSBzcGFjZSBhdmFpbGFibGUgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fdW5pbml0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY3JlYXRlZChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9pdG5pbV9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9jbGVhbnVwX2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9pdG5pbV9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQkgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkJICBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2l0bmltX3NtX2RlbGV0aW5nX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJQmVnaW5uaW5nL3VuYWxsb2NhdGVkIHN0YXRlIC0gbm8gZXZlbnRzIGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jcmVhdGVkKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9GQUxTRTsKKwkJYmZhX2ZjcGltX2FkZGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlCZWdpbm5pbmcgc3RhdGUsIG9ubHkgb25saW5lIGV2ZW50IGV4cGVjdGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0ZXUlNQOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fb25saW5lKTsKKwkJaXRuaW0tPmlzX29ubGluZSA9IEJGQV9UUlVFOworCQliZmFfaXRuaW1faW90b3Zfb25saW5lKGl0bmltKTsKKwkJYmZhX2l0bmltX29ubGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQliZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmaXRuaW0tPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVdhaXRpbmcgZm9yIGl0bmltIGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLCBhIGRlbGV0ZSBpcyBwZW5kaW5nLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2RlbGV0ZV9wZW5kaW5nKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9mY3BpbV9kZWxpdG4oaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT25saW5lIHN0YXRlIC0gbm9ybWFsIHBhcmtpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1fY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fU0xFUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3NsZXIpOworCQlpdG5pbS0+aXNfb25saW5lID0gQkZBX0ZBTFNFOworCQliZmFfaXRuaW1faW90b3Zfc3RhcnQoaXRuaW0pOworCQliZmFfaXRuaW1fc2xlcl9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWl0bmltLT5pc19vbmxpbmUgPSBCRkFfRkFMU0U7CisJCWJmYV9pdG5pbV9pb3Rvdl9zdGFydChpdG5pbSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJU2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5IG5lZWQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fc2xlcihzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBlbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKTsKKwkJYmZhX2l0bmltX2NsZWFudXAoaXRuaW0pOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlHb2luZyBvZmZsaW5lLiBXYWl0aW5nIGZvciBhY3RpdmUgSU8gY2xlYW51cC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9jbGVhbnVwX29mZmxpbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCQkgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fY2xlYW51cF9kZWxldGUpOworCQliZmFfaXRuaW1faW90b3ZfZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX2lvY2Rpc2FibGVfY2xlYW51cChpdG5pbSk7CisJCWJmYV9pdG5pbV9vZmZsaW5lX2NiKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9TTEVSOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJRGVsZXRpbmcgaXRuaW0uIFdhaXRpbmcgZm9yIGFjdGl2ZSBJTyBjbGVhbnVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2NsZWFudXBfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fQ0xFQU5VUDoKKwkJaWYgKGJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZ19xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21faW9jZGlzYWJsZSk7CisJCWJmYV9pdG5pbV9pb2NkaXNhYmxlX2NsZWFudXAoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IG9mZmxpbmUuIEZpbXJ3YXJlIGl0bmltIGlzIGJlaW5nIGRlbGV0ZWQgLSBhd2FpdGluZyBmL3cgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZndkZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2RlbGV0aW5nKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5iZmEsIGl0bmltLT5ycG9ydC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKGl0bmltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9TTV9RUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndkZWxldGUpOworCQliZmFfaXRuaW1fc2VuZF9md2RlbGV0ZShpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2l0bmltX29mZmxpbmVfY2IoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJT2ZmbGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PTkxJTkU6CisJCWlmIChiZmFfaXRuaW1fc2VuZF9md2NyZWF0ZShpdG5pbSkpCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fZndjcmVhdGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0lUTklNX1NNX0hXRkFJTDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJSU9DIGgvdyBmYWlsZWQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21faW9jZGlzYWJsZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJICAgIGVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX3VuaW5pdCk7CisJCWJmYV9pdG5pbV9pb3Rvdl9kZWxldGUoaXRuaW0pOworCQliZmFfZmNwaW1fZGVsaXRuKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfaXRuaW1fb2ZmbGluZV9jYihpdG5pbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfSVROSU1fU01fT05MSU5FOgorCQlpZiAoYmZhX2l0bmltX3NlbmRfZndjcmVhdGUoaXRuaW0pKQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlJdG5pbSBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmcoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgZW51bSBiZmFfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBpdG5pbS0+cnBvcnQtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhpdG5pbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfSVROSU1fU01fRldSU1A6CisJY2FzZSBCRkFfSVROSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfaXRuaW1fc21fdW5pbml0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCWVudW0gYmZhX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmJmYSwgaXRuaW0tPnJwb3J0LT5ycG9ydF90YWcpOworCWJmYV90cmMoaXRuaW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0lUTklNX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9kZWxldGluZyk7CisJCWJmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKGl0bmltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9JVE5JTV9TTV9IV0ZBSUw6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZpdG5pbS0+cmVxcV93YWl0KTsKKwkJYmZhX2ZjcGltX2RlbGl0bihpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHJpdmF0ZQorICovCisKKy8qKgorICogCQlJbml0aWF0ZSBjbGVhbnVwIG9mIGFsbCBJT3Mgb24gYW4gSU9DIGZhaWx1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW9jZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT50c2tfcSkgeworCQl0c2tpbSA9IChzdHJ1Y3QgYmZhX3Rza2ltX3MgKikgcWU7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlKHRza2ltKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorCisJLyoqCisJICogRm9yIElPIHJlcXVlc3QgaW4gcGVuZGluZyBxdWV1ZSwgd2UgcHJldGVuZCBhbiBlYXJseSB0aW1lb3V0LgorCSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnBlbmRpbmdfcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+aW9fY2xlYW51cF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV9pb2ltX2lvY2Rpc2FibGUoaW9pbSk7CisJfQorfQorCisvKioKKyAqIAkJSU8gY2xlYW51cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1fY2xlYW5wX2NvbXAodm9pZCAqaXRuaW1fY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2NiYXJnOworCisJYmZhX3N0YXRzKGl0bmltLCBjbGVhbnVwX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0lUTklNX1NNX0NMRUFOVVApOworfQorCisvKioKKyAqIAkJSW5pdGlhdGUgY2xlYW51cCBvZiBhbGwgSU9zLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAgKmlvaW07CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJml0bmltLT53YywgYmZhX2l0bmltX2NsZWFucF9jb21wLCBpdG5pbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisKKwkJLyoqCisJCSAqIE1vdmUgSU8gdG8gYSBjbGVhbnVwIHF1ZXVlIGZyb20gYWN0aXZlIHF1ZXVlIHNvIHRoYXQgYSBsYXRlcgorCQkgKiBUTSB3aWxsIG5vdCBwaWNrdXAgdGhpcyBJTy4KKwkJICovCisJCWxpc3RfZGVsKCZpb2ltLT5xZSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX2NsZWFudXBfcSk7CisKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfaW9pbV9jbGVhbnVwKGlvaW0pOworCX0KKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmaXRuaW0tPnRza19xKSB7CisJCXRza2ltID0gKHN0cnVjdCBiZmFfdHNraW1fcyAqKSBxZTsKKwkJYmZhX3djX3VwKCZpdG5pbS0+d2MpOworCQliZmFfdHNraW1fY2xlYW51cCh0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJml0bmltLT53Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb25saW5lKGl0bmltLT5kaXRuKTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX2l0bmltX29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfaXRuaW1fb2ZmbGluZShpdG5pbS0+ZGl0bik7Cit9CisKK3N0YXRpYyB2b2lkCitfX2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0gPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX2l0bmltX3NsZXIoaXRuaW0tPmRpdG4pOworfQorCisvKioKKyAqIENhbGwgdG8gcmVzdW1lIGFueSBJL08gcmVxdWVzdHMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGNiYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9RUkVTVU1FKTsKK30KKworCisKKworLyoqCisgKiAgYmZhX2l0bmltX3B1YmxpYworICovCisKK3ZvaWQKK2JmYV9pdG5pbV9pb2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX3Rza2RvbmUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfd2NfZG93bigmaXRuaW0tPndjKTsKK30KKwordm9pZAorYmZhX2l0bmltX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJLyoqCisJICogSVROIG1lbW9yeQorCSAqLworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fcyk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9hdHRhY2goc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaW5mbykKK3sKKwlzdHJ1Y3QgYmZhX3MgICAgICAqYmZhID0gZmNwaW0tPmJmYTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCWludCAgICAgICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT5pdG5pbV9xKTsKKworCWl0bmltID0gKHN0cnVjdCBiZmFfaXRuaW1fcyAqKSBiZmFfbWVtaW5mb19rdmEobWluZm8pOworCWZjcGltLT5pdG5pbV9hcnIgPSBpdG5pbTsKKworCWZvciAoaSA9IDA7IGkgPCBmY3BpbS0+bnVtX2l0bmltczsgaSsrLCBpdG5pbSsrKSB7CisJCWJmYV9vc19tZW1zZXQoaXRuaW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3MpKTsKKwkJaXRuaW0tPmJmYSA9IGJmYTsKKwkJaXRuaW0tPmZjcGltID0gZmNwaW07CisJCWl0bmltLT5yZXFxID0gQkZBX1JFUVFfUU9TX0xPOworCQlpdG5pbS0+cnBvcnQgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBpKTsKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKwkJYmZhX3JlcXFfd2luaXQoJml0bmltLT5yZXFxX3dhaXQsIGJmYV9pdG5pbV9xcmVzdW1lLCBpdG5pbSk7CisKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19xKTsKKwkJSU5JVF9MSVNUX0hFQUQoJml0bmltLT5pb19jbGVhbnVwX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPnBlbmRpbmdfcSk7CisJCUlOSVRfTElTVF9IRUFEKCZpdG5pbS0+dHNrX3EpOworCQlJTklUX0xJU1RfSEVBRCgmaXRuaW0tPmRlbGF5X2NvbXBfcSk7CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV91bmluaXQpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaXRuaW07Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX3N0YXRzKGl0bmltLCBpb2NfZGlzYWJsZWQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fSFdGQUlMKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcmVxX3MgKm07CisKKwlpdG5pbS0+bXNnX25vKys7CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKwltLT5jbGFzcyA9IEZDX0NMQVNTXzM7CisJbS0+c2VxX3JlYyA9IGl0bmltLT5zZXFfcmVjOworCW0tPm1zZ19ubyA9IGl0bmltLT5tc2dfbm87CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9pdG5pbV9zZW5kX2Z3ZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQoaXRuaW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KGl0bmltLT5iZmEsIGl0bmltLT5yZXFxLCAmaXRuaW0tPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19JVE5JTSwgQkZJX0lUTklNX0gySV9ERUxFVEVfUkVRLAorCQkJYmZhX2xwdWlkKGl0bmltLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBpdG5pbS0+cnBvcnQtPmZ3X2hhbmRsZTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShpdG5pbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqIENsZWFudXAgYWxsIHBlbmRpbmcgZmFpbGVkIGluZmxpZ2h0IHJlcXVlc3RzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2RlbGF5ZWRfY29tcChzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IGlvdG92KQoreworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+ZGVsYXlfY29tcF9xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKilxZTsKKwkJYmZhX2lvaW1fZGVsYXllZF9jb21wKGlvaW0sIGlvdG92KTsKKwl9Cit9CisKKy8qKgorICogU3RhcnQgYWxsIHBlbmRpbmcgSU8gcmVxdWVzdHMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3Zfb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisKKwliZmFfaXRuaW1faW90b3Zfc3RvcChpdG5pbSk7CisKKwkvKioKKwkgKiBBYm9ydCBhbGwgaW5mbGlnaHQgSU8gcmVxdWVzdHMgaW4gdGhlIHF1ZXVlCisJICovCisJYmZhX2l0bmltX2RlbGF5ZWRfY29tcChpdG5pbSwgQkZBX0ZBTFNFKTsKKworCS8qKgorCSAqIFN0YXJ0IGFsbCBwZW5kaW5nIElPIHJlcXVlc3RzLgorCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmaXRuaW0tPnBlbmRpbmdfcSkpIHsKKwkJYmZhX3FfZGVxKCZpdG5pbS0+cGVuZGluZ19xLCAmaW9pbSk7CisJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaXRuaW0tPmlvX3EpOworCQliZmFfaW9pbV9zdGFydChpb2ltKTsKKwl9Cit9CisKKy8qKgorICogRmFpbCBhbGwgcGVuZGluZyBJTyByZXF1ZXN0cworICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X2NsZWFudXAoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbTsKKworCS8qKgorCSAqIEZhaWwgYWxsIGluZmxpZ2h0IElPIHJlcXVlc3RzIGluIHRoZSBxdWV1ZQorCSAqLworCWJmYV9pdG5pbV9kZWxheWVkX2NvbXAoaXRuaW0sIEJGQV9UUlVFKTsKKworCS8qKgorCSAqIEZhaWwgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZpdG5pbS0+cGVuZGluZ19xKSkgeworCQliZmFfcV9kZXEoJml0bmltLT5wZW5kaW5nX3EsICZpb2ltKTsKKwkJbGlzdF9hZGRfdGFpbCgmaW9pbS0+cWUsICZpb2ltLT5mY3BpbS0+aW9pbV9jb21wX3EpOworCQliZmFfaW9pbV90b3YoaW9pbSk7CisJfQorfQorCisvKioKKyAqIElPIFRPViB0aW1lciBjYWxsYmFjay4gRmFpbCBhbnkgcGVuZGluZyBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9pdG5pbV9pb3Rvdih2b2lkICppdG5pbV9hcmcpCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSA9IGl0bmltX2FyZzsKKworCWl0bmltLT5pb3Rvdl9hY3RpdmUgPSBCRkFfRkFMU0U7CisKKwliZmFfY2JfaXRuaW1fdG92X2JlZ2luKGl0bmltLT5kaXRuKTsKKwliZmFfaXRuaW1faW90b3ZfY2xlYW51cChpdG5pbSk7CisJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKy8qKgorICogU3RhcnQgSU8gVE9WIHRpbWVyIGZvciBmYWlsaW5nIGJhY2sgcGVuZGluZyBJTyByZXF1ZXN0cyBpbiBvZmZsaW5lIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0YXJ0KHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJaWYgKGl0bmltLT5mY3BpbS0+cGF0aF90b3YgPiAwKSB7CisKKwkJaXRuaW0tPmlvdG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCQliZmFfYXNzZXJ0KGJmYV9pdG5pbV9ob2xkX2lvKGl0bmltKSk7CisJCWJmYV90aW1lcl9zdGFydChpdG5pbS0+YmZhLCAmaXRuaW0tPnRpbWVyLAorCQkJYmZhX2l0bmltX2lvdG92LCBpdG5pbSwgaXRuaW0tPmZjcGltLT5wYXRoX3Rvdik7CisJfQorfQorCisvKioKKyAqIFN0b3AgSU8gVE9WIHRpbWVyLgorICovCitzdGF0aWMgdm9pZAorYmZhX2l0bmltX2lvdG92X3N0b3Aoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlpZiAoaXRuaW0tPmlvdG92X2FjdGl2ZSkgeworCQlpdG5pbS0+aW90b3ZfYWN0aXZlID0gQkZBX0ZBTFNFOworCQliZmFfdGltZXJfc3RvcCgmaXRuaW0tPnRpbWVyKTsKKwl9Cit9CisKKy8qKgorICogU3RvcCBJTyBUT1YgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfaXRuaW1faW90b3ZfZGVsZXRlKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisgICAgYmZhX2Jvb2xlYW5fdCBwYXRodG92X2FjdGl2ZSA9IEJGQV9GQUxTRTsKKworICAgIGlmIChpdG5pbS0+aW90b3ZfYWN0aXZlKQorCQlwYXRodG92X2FjdGl2ZSA9IEJGQV9UUlVFOworCisJYmZhX2l0bmltX2lvdG92X3N0b3AoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3Rvdl9iZWdpbihpdG5pbS0+ZGl0bik7CisJYmZhX2l0bmltX2lvdG92X2NsZWFudXAoaXRuaW0pOworCWlmIChwYXRodG92X2FjdGl2ZSkKKwkJYmZhX2NiX2l0bmltX3RvdihpdG5pbS0+ZGl0bik7Cit9CisKKworCisvKioKKyAqICBiZmFfaXRuaW1fcHVibGljCisgKi8KKworLyoqCisgKiAJCUl0bmltIGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfaXRuaW1faXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltID0gQkZBX0ZDUElNX01PRChiZmEpOworCXVuaW9uIGJmaV9pdG5pbV9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW07CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfSVROSU1fSTJIX0NSRUFURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX0RFTEVURV9SU1A6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLmRlbGV0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQliZmFfYXNzZXJ0KG1zZy5kZWxldGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zdGF0cyhpdG5pbSwgZGVsZXRlX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9GV1JTUCk7CisJCWJyZWFrOworCisJY2FzZSBCRklfSVROSU1fSTJIX1NMRVJfRVZFTlQ6CisJCWl0bmltID0gQkZBX0lUTklNX0ZST01fVEFHKGZjcGltLAorCQkJCQkgICAgICAgbXNnLnNsZXJfZXZlbnQtPmJmYV9oYW5kbGUpOworCQliZmFfc3RhdHMoaXRuaW0sIHNsZXJfZXZlbnRzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9TTEVSKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9pdG5pbV9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdm9pZCAqZGl0bikKK3sKKwlzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSA9IEJGQV9GQ1BJTV9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltOworCisJaXRuaW0gPSBCRkFfSVROSU1fRlJPTV9UQUcoZmNwaW0sIHJwb3J0LT5ycG9ydF90YWcpOworCWJmYV9hc3NlcnQoaXRuaW0tPnJwb3J0ID09IHJwb3J0KTsKKworCWl0bmltLT5kaXRuID0gZGl0bjsKKworCWJmYV9zdGF0cyhpdG5pbSwgY3JlYXRlcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9DUkVBVEUpOworCisJcmV0dXJuIChpdG5pbSk7Cit9CisKK3ZvaWQKK2JmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfc3RhdHMoaXRuaW0sIGRlbGV0ZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fREVMRVRFKTsKK30KKwordm9pZAorYmZhX2l0bmltX29ubGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLCBiZmFfYm9vbGVhbl90IHNlcV9yZWMpCit7CisJaXRuaW0tPnNlcV9yZWMgPSBzZXFfcmVjOworCWJmYV9zdGF0cyhpdG5pbSwgb25saW5lcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9JVE5JTV9TTV9PTkxJTkUpOworfQorCit2b2lkCitiZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKQoreworCWJmYV9zdGF0cyhpdG5pbSwgb2ZmbGluZXMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIHRydWUgaWYgaXRuaW0gaXMgY29uc2lkZXJlZCBvZmZsaW5lIGZvciBob2xkaW5nIG9mZiBJTyByZXF1ZXN0LgorICogSU8gaXMgbm90IGhlbGQgaWYgaXRuaW0gaXMgYmVpbmcgZGVsZXRlZC4KKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2l0bmltX2hvbGRfaW8oc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gKAorCQlpdG5pbS0+ZmNwaW0tPnBhdGhfdG92ICYmIGl0bmltLT5pb3Rvdl9hY3RpdmUgJiYKKwkJKGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2NyZWF0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9zbGVyKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2NsZWFudXBfb2ZmbGluZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9md2RlbGV0ZSkgfHwKKwkJIGJmYV9zbV9jbXBfc3RhdGUoaXRuaW0sIGJmYV9pdG5pbV9zbV9vZmZsaW5lKSB8fAorCQkgYmZhX3NtX2NtcF9zdGF0ZShpdG5pbSwgYmZhX2l0bmltX3NtX2lvY2Rpc2FibGUpKQorKTsKK30KKwordm9pZAorYmZhX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgKnN0YXRzKQoreworCSpzdGF0cyA9IGl0bmltLT5zdGF0czsKK30KKwordm9pZAorYmZhX2l0bmltX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0pCit7CisJYmZhX29zX21lbXNldCgmaXRuaW0tPnN0YXRzLCAwLCBzaXplb2YoaXRuaW0tPnN0YXRzKSk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjczNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nLmMKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2xvZy5jIEJGQSBsb2cgbGlicmFyeQorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCisvKgorICogZ2xvYmFsIGxvZyBpbmZvIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX2xvZ19pbmZvX3MgeworCXUzMiAgICAgICAgc3RhcnRfaWR4OwkvKiAgc3RhcnQgaW5kZXggZm9yIGEgbW9kdWxlICovCisJdTMyICAgICAgICB0b3RhbF9jb3VudDsJLyogIHRvdGFsIGNvdW50IGZvciBhIG1vZHVsZSAqLworCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsZXZlbDsJLyogIGdsb2JhbCBsb2cgbGV2ZWwgKi8KKwliZmFfbG9nX2NiX3QJY2JmbjsJCS8qICBjYWxsYmFjayBmdW5jdGlvbiAqLworfTsKKworc3RhdGljIHN0cnVjdCBiZmFfbG9nX2luZm9fcyBiZmFfbG9nX2luZm9bQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMV07CitzdGF0aWMgdTMyIGJmYV9sb2dfbXNnX3RvdGFsX2NvdW50Oworc3RhdGljIGludCAgICAgIGJmYV9sb2dfaW5pdGlhbGl6ZWQ7CisKK3N0YXRpYyBjaGFyICAgICpiZmFfbG9nX3NldmVyaXR5W10gPQorCXsgIltub25lXSIsICJbY3JpdGljYWxdIiwgIltlcnJvcl0iLCAiW3dhcm5dIiwgIltpbmZvXSIsICIiIH07CisKKy8qKgorICogQkZBIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uCisgKgorICogVGhlIGxvZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcsCisgKiAgICAtIHNldCBsb2cgaW5zdGFuY2UgbmFtZSBhbmQgY2FsbGJhY2sgZnVuY3Rpb24KKyAqICAgIC0gcmVhZCB0aGUgbWVzc2FnZSBhcnJheSBnZW5lcmF0ZWQgZnJvbSB4bWwgZmlsZXMKKyAqICAgIC0gY2FsY3VsYXRlIHN0YXJ0IGluZGV4IGZvciBlYWNoIG1vZHVsZQorICogICAgLSBjYWxjdWxhdGUgbWVzc2FnZSBjb3VudCBmb3IgZWFjaCBtb2R1bGUKKyAqICAgIC0gcGVyZm9ybSBlcnJvciBjaGVja2luZworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBpbnN0YW5jZV9uYW1lIC0gaW5zdGFuY2UgbmFtZQorICogQHBhcmFtW2luXSBjYmZuIC0gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBJdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlCisgKi8KK2ludAorYmZhX2xvZ19pbml0KHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBjaGFyICppbnN0YW5jZV9uYW1lLAorCQkJYmZhX2xvZ19jYl90IGNiZm4pCit7CisJc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgKm1zZzsKKwl1MzIgICAgICAgIHByZV9tb2RfaWQgPSAwOworCXUzMiAgICAgICAgY3VyX21vZF9pZCA9IDA7CisJdTMyICAgICAgICBpLCBwcmVfaWR4LCBpZHgsIG1zZ19pZDsKKworCS8qCisJICogc2V0IGluc3RhbmNlIG5hbWUKKwkgKi8KKwlpZiAobG9nX21vZCkgeworCQlzdHJuY3B5KGxvZ19tb2QtPmluc3RhbmNlX2luZm8sIGluc3RhbmNlX25hbWUsCisJCQlzaXplb2YobG9nX21vZC0+aW5zdGFuY2VfaW5mbykpOworCQlsb2dfbW9kLT5jYmZuID0gY2JmbjsKKwkJZm9yIChpID0gMDsgaSA8PSBCRkFfTE9HX01PRFVMRV9JRF9NQVg7IGkrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFtpXSA9IEJGQV9MT0dfV0FSTklORzsKKwl9CisKKwlpZiAoYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IEJGQV9MT0dfTU9EVUxFX0lEX01BWDsgaSsrKSB7CisJCWJmYV9sb2dfaW5mb1tpXS5zdGFydF9pZHggPSAwOworCQliZmFfbG9nX2luZm9baV0udG90YWxfY291bnQgPSAwOworCQliZmFfbG9nX2luZm9baV0ubGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CisJCWJmYV9sb2dfaW5mb1tpXS5jYmZuID0gY2JmbjsKKwl9CisKKwlwcmVfaWR4ID0gMDsKKwlpZHggPSAwOworCW1zZyA9IGJmYV9sb2dfbXNnX2FycmF5OworCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCXByZV9tb2RfaWQgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl3aGlsZSAobXNnX2lkICE9IDApIHsKKwkJY3VyX21vZF9pZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCisJCWlmIChjdXJfbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKSB7CisJCQljYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCQkiJXMlcyBsb2c6IG1vZHVsZSBpZCAldSBvdXQgb2YgcmFuZ2VcbiIsCisJCQkJQkZBX0xPR19DQVRfTkFNRSwKKwkJCQliZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJCWN1cl9tb2RfaWQpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKHByZV9tb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpIHsKKwkJCWNiZm4obG9nX21vZCwgbXNnX2lkLAorCQkJCSIlcyVzIGxvZzogbW9kdWxlIGlkICV1IG91dCBvZiByYW5nZVxuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19FUlJPUl0sCisJCQkJcHJlX21vZF9pZCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoY3VyX21vZF9pZCAhPSBwcmVfbW9kX2lkKSB7CisJCQliZmFfbG9nX2luZm9bcHJlX21vZF9pZF0uc3RhcnRfaWR4ID0gcHJlX2lkeDsKKwkJCWJmYV9sb2dfaW5mb1twcmVfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJCQlwcmVfbW9kX2lkID0gY3VyX21vZF9pZDsKKwkJCXByZV9pZHggPSBpZHg7CisJCX0KKworCQlpZHgrKzsKKwkJbXNnKys7CisJCW1zZ19pZCA9IEJGQV9MT0dfR0VUX01TR19JRChtc2cpOworCX0KKworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS5zdGFydF9pZHggPSBwcmVfaWR4OworCWJmYV9sb2dfaW5mb1tjdXJfbW9kX2lkXS50b3RhbF9jb3VudCA9IGlkeCAtIHByZV9pZHg7CisJYmZhX2xvZ19tc2dfdG90YWxfY291bnQgPSBpZHg7CisKKwljYmZuKGxvZ19tb2QsIG1zZ19pZCwgIiVzJXMgbG9nOiBpbml0IE9LLCBtc2cgdG90YWwgY291bnQgJXVcbiIsCisJCUJGQV9MT0dfQ0FUX05BTUUsCisJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19JTkZPXSwgYmZhX2xvZ19tc2dfdG90YWxfY291bnQpOworCisJYmZhX2xvZ19pbml0aWFsaXplZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBCRkEgbG9nIHNldCBsb2cgbGV2ZWwgZm9yIGEgbW9kdWxlCisgKgorICogQHBhcmFtW2luXSBsb2dfbW9kIC0gbG9nIG1vZHVsZSBpbmZvCisgKiBAcGFyYW1baW5dIG1vZF9pZCAtIG1vZHVsZSBpZAorICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkLAorCQkgIGVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpCit7CisJaWYgKG1vZF9pZCA8PSBCRkFfTE9HX1VOVVNFRF9JRCB8fCBtb2RfaWQgPiBCRkFfTE9HX01PRFVMRV9JRF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbGV2ZWwgPD0gQkZBX0xPR19JTlZBTElEIHx8IGxvZ19sZXZlbCA+IEJGQV9MT0dfTEVWRUxfTUFYKQorCQlyZXR1cm4gQkZBX1NUQVRVU19FSU5WQUw7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJZWxzZQorCQliZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCA9IGxvZ19sZXZlbDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIG1vZHVsZXMKKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbG9nX2xldmVsIC0gbG9nIHNldmVyaXR5IGxldmVsCisgKgorICogSXQgcmV0dXJuIEJGQV9TVEFUVVNfT0sgb24gc3VjY2Vzcywgb3IgPiAwIG9uIGZhaWx1cmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfbG9nX3NldF9sZXZlbF9hbGwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCSAgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCkKK3sKKwlpbnQgbW9kX2lkID0gQkZBX0xPR19VTlVTRURfSUQgKyAxOworCisJaWYgKGxvZ19sZXZlbCA8PSBCRkFfTE9HX0lOVkFMSUQgfHwgbG9nX2xldmVsID4gQkZBX0xPR19MRVZFTF9NQVgpCisJCXJldHVybiBCRkFfU1RBVFVTX0VJTlZBTDsKKworCWlmIChsb2dfbW9kKSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWxvZ19tb2QtPmxvZ19sZXZlbFttb2RfaWRdID0gbG9nX2xldmVsOworCX0gZWxzZSB7CisJCWZvciAoOyBtb2RfaWQgPD0gQkZBX0xPR19NT0RVTEVfSURfTUFYOyBtb2RfaWQrKykKKwkJCWJmYV9sb2dfaW5mb1ttb2RfaWRdLmxldmVsID0gbG9nX2xldmVsOworCX0KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIEJGQSBsb2cgc2V0IGxvZyBsZXZlbCBmb3IgYWxsIGFlbiBzdWItbW9kdWxlcworICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBsb2dfbGV2ZWwgLSBsb2cgc2V2ZXJpdHkgbGV2ZWwKKyAqCisgKiBJdCByZXR1cm4gQkZBX1NUQVRVU19PSyBvbiBzdWNjZXNzLCBvciA+IDAgb24gZmFpbHVyZQorICovCitiZmFfc3RhdHVzX3QKK2JmYV9sb2dfc2V0X2xldmVsX2FlbihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJICBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKQoreworCWludCBtb2RfaWQgPSBCRkFfTE9HX0FFTl9NSU4gKyAxOworCisJaWYgKGxvZ19tb2QpIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJbG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0gPSBsb2dfbGV2ZWw7CisJfSBlbHNlIHsKKwkJZm9yICg7IG1vZF9pZCA8PSBCRkFfTE9HX0FFTl9NQVg7IG1vZF9pZCsrKQorCQkJYmZhX2xvZ19pbmZvW21vZF9pZF0ubGV2ZWwgPSBsb2dfbGV2ZWw7CisJfQorCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogQkZBIGxvZyBnZXQgbG9nIGxldmVsIGZvciBhIG1vZHVsZQorICoKKyAqIEBwYXJhbVtpbl0gbG9nX21vZCAtIGxvZyBtb2R1bGUgaW5mbworICogQHBhcmFtW2luXSBtb2RfaWQgLSBtb2R1bGUgaWQKKyAqCisgKiBJdCByZXR1cm5zIGxvZyBsZXZlbCBvciAtMSBvbiBlcnJvcgorICovCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkKK2JmYV9sb2dfZ2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCBpbnQgbW9kX2lkKQoreworCWlmIChtb2RfaWQgPD0gQkZBX0xPR19VTlVTRURfSUQgfHwgbW9kX2lkID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGxvZ19tb2QpCisJCXJldHVybiAobG9nX21vZC0+bG9nX2xldmVsW21vZF9pZF0pOworCWVsc2UKKwkJcmV0dXJuIChiZmFfbG9nX2luZm9bbW9kX2lkXS5sZXZlbCk7Cit9CisKK2VudW0gYmZhX2xvZ19zZXZlcml0eQorYmZhX2xvZ19nZXRfbXNnX2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLCB1MzIgbXNnX2lkKQoreworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJdTMyICAgICAgICBtb2QgPSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnX2lkKTsKKwl1MzIgICAgICAgIGlkeCA9IEJGQV9MT0dfR0VUX01TR19JRFgobXNnX2lkKSAtIDE7CisKKwlpZiAoIWJmYV9sb2dfaW5pdGlhbGl6ZWQpCisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisKKwlpZiAobW9kID4gQkZBX0xPR19NT0RVTEVfSURfTUFYKQorCQlyZXR1cm4gQkZBX0xPR19JTlZBTElEOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IGlkeCAldSB2cy4gdG90YWwgY291bnQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLCBpZHgsCisJCQliZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS5jYmZuKGxvZ19tb2QsIG1zZ19pZCwKKwkJCSIlcyVzIGxvZzogaW5jb25zaXN0ZW50IG1zZyBpZCAldSBhcnJheSBtc2cgaWQgJXVcbiIsCisJCQlCRkFfTE9HX0NBVF9OQU1FLCBiZmFfbG9nX3NldmVyaXR5W0JGQV9MT0dfRVJST1JdLAorCQkJbXNnX2lkLCBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSk7CisJCXJldHVybiBCRkFfTE9HX0lOVkFMSUQ7CisJfQorCisJcmV0dXJuIEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZyk7Cit9CisKKy8qKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nCisgKgorICogQkZBIGxvZyBtZXNzYWdlIGhhbmRsaW5nIGZpbmRzIHRoZSBtZXNzYWdlIGJhc2VkIG9uIG1lc3NhZ2UgaWQgYW5kIHByaW50cworICogb3V0IHRoZSBtZXNzYWdlIGJhc2VkIG9uIGl0cyBmb3JtYXQgYW5kIGFyZ3VtZW50cy4gSXQgYWxzbyBkb2VzIHByZWZpeAorICogdGhlIHNldmVyaXR5IGV0Yy4KKyAqCisgKiBAcGFyYW1baW5dIGxvZ19tb2QgLSBsb2cgbW9kdWxlIGluZm8KKyAqIEBwYXJhbVtpbl0gbXNnX2lkIC0gbWVzc2FnZSBpZAorICogQHBhcmFtW2luXSAuLi4gLSBtZXNzYWdlIGFyZ3VtZW50cworICoKKyAqIEl0IHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9ycworICovCitpbnQKK2JmYV9sb2coc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsIC4uLikKK3sKKwl2YV9saXN0ICAgICAgICAgYXA7CisJY2hhciAgICAgICAgICAgIGJ1ZlsyNTZdOworCXN0cnVjdCBiZmFfbG9nX21zZ2RlZl9zICptc2c7CisJaW50ICAgICAgICAgICAgIGxvZ19sZXZlbDsKKwl1MzIgICAgICAgIG1vZCA9IEJGQV9MT0dfR0VUX01PRF9JRChtc2dfaWQpOworCXUzMiAgICAgICAgaWR4ID0gQkZBX0xPR19HRVRfTVNHX0lEWChtc2dfaWQpIC0gMTsKKworCWlmICghYmZhX2xvZ19pbml0aWFsaXplZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1vZCA+IEJGQV9MT0dfTU9EVUxFX0lEX01BWCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGlkeCA+PSBiZmFfbG9nX2luZm9bbW9kXS50b3RhbF9jb3VudCkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBpZHggJXUgdnMuIHRvdGFsIGNvdW50ICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwgaWR4LAorCQkJYmZhX2xvZ19pbmZvW21vZF0udG90YWxfY291bnQpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXNnID0gYmZhX2xvZ19tc2dfYXJyYXkgKyBiZmFfbG9nX2luZm9bbW9kXS5zdGFydF9pZHggKyBpZHg7CisJaWYgKG1zZ19pZCAhPSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnKSkgeworCQliZmFfbG9nX2luZm9bbW9kXS4KKwkJCWNiZm4KKwkJCShsb2dfbW9kLCBtc2dfaWQsCisJCQkiJXMlcyBsb2c6IGluY29uc2lzdGVudCBtc2cgaWQgJXUgYXJyYXkgbXNnIGlkICV1XG4iLAorCQkJQkZBX0xPR19DQVRfTkFNRSwgYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0VSUk9SXSwKKwkJCW1zZ19pZCwgQkZBX0xPR19HRVRfTVNHX0lEKG1zZykpOworCQlyZXR1cm4gLTE7CisJfQorCisJbG9nX2xldmVsID0gbG9nX21vZCA/IGxvZ19tb2QtPmxvZ19sZXZlbFttb2RdIDogYmZhX2xvZ19pbmZvW21vZF0ubGV2ZWw7CisJaWYgKChCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpID4gbG9nX2xldmVsKSAmJgorCQkJKG1zZy0+YXR0cmlidXRlcyAhPSBCRkFfTE9HX0FUVFJfTk9ORSkpCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIG1zZ19pZCk7CisJYmZhX29zX3ZzcHJpbnRmKGJ1ZiwgQkZBX0xPR19HRVRfTVNHX0ZNVF9TVFJJTkcobXNnKSwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAobG9nX21vZCkKKwkJbG9nX21vZC0+Y2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlc1slc10lcyVzICVzOiAlc1xuIiwKKwkJCQlCRkFfTE9HX0NBVF9OQU1FLCBsb2dfbW9kLT5pbnN0YW5jZV9pbmZvLAorCQkJCWJmYV9sb2dfc2V2ZXJpdHlbQkZBX0xPR19HRVRfU0VWRVJJVFkobXNnKV0sCisJCQkJKG1zZy0+YXR0cmlidXRlcyAmIEJGQV9MT0dfQVRUUl9BVURJVCkKKwkJCQk/ICIgKGF1ZGl0KSAiIDogIiIsIG1zZy0+bXNnX3ZhbHVlLCBidWYpOworCWVsc2UKKwkJYmZhX2xvZ19pbmZvW21vZF0uY2Jmbihsb2dfbW9kLCBtc2dfaWQsICIlcyVzJXMgJXM6ICVzXG4iLAorCQkJCUJGQV9MT0dfQ0FUX05BTUUsCisJCQkJYmZhX2xvZ19zZXZlcml0eVtCRkFfTE9HX0dFVF9TRVZFUklUWShtc2cpXSwKKwkJCQkobXNnLT5hdHRyaWJ1dGVzICYgQkZBX0xPR19BVFRSX0FVRElUKSA/CisJCQkJIiAoYXVkaXQpICIgOiAiIiwgbXNnLT5tc2dfdmFsdWUsIGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbG9nX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTU0ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9sb2dfbW9kdWxlLmMKQEAgLTAsMCArMSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9hZGFwdGVyLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fYXVkaXQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ldGhwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faW9jLmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5faXRuaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9scG9ydC5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9ycG9ydC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2hhbC5oPgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2xpbnV4Lmg+CisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfd2Rydi5oPgorCitzdHJ1Y3QgYmZhX2xvZ19tc2dkZWZfcyBiZmFfbG9nX21zZ19hcnJheVtdID0geworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfQURBUFRFUiBNb2R1bGUgKi8KK3tCRkFfQUVOX0FEQVBURVJfQURELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9BREFQVEVSX0FERCIsCisgIk5ldyBhZGFwdGVyIGZvdW5kOiBTTiA9ICVzLCBiYXNlIHBvcnQgV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9BREFQVEVSX1JFTU9WRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfV0FSTklORywgIkJGQV9BRU5fQURBUFRFUl9SRU1PVkUiLAorICJBZGFwdGVyIHJlbW92ZWQ6IFNOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FVRElUIE1vZHVsZSAqLwore0JGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJCRkFfQUVOX0FVRElUX0FVVEhfRU5BQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZW5hYmxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fQVVESVRfQVVUSF9ESVNBQkxFIiwKKyAiQXV0aGVudGljYXRpb24gZGlzYWJsZWQgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCit7QkZBX0FFTl9FVEhQT1JUX0xJTktVUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9MSU5LVVAiLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua3VwOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfTElOS0RPV04iLAorICJCYXNlIHBvcnQgZXRoZXJuZXQgbGlua2Rvd246IG1hYyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fRVRIUE9SVF9FTkFCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0VUSFBPUlRfRU5BQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBlbmFibGVkOiBtYWMgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX0VUSFBPUlRfRElTQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIiwKKyAiQmFzZSBwb3J0IGV0aGVybmV0IGludGVyZmFjZSBkaXNhYmxlZDogbWFjID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lPQyBNb2R1bGUgKi8KK3tCRkFfQUVOX0lPQ19IQkdPT0QsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19IQkdPT0QiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBpcyBnb29kLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0hCRkFJTCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0NSSVRJQ0FMLAorICJCRkFfQUVOX0lPQ19IQkZBSUwiLAorICJIZWFydCBCZWF0IG9mIElPQyAlZCBoYXMgZmFpbGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSU9DX0VOQUJMRSIsCisgIklPQyAlZCBpcyBlbmFibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0lPQ19ESVNBQkxFIiwKKyAiSU9DICVkIGlzIGRpc2FibGVkLiIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fSU9DX0ZXTUlTTUFUQ0gsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0NSSVRJQ0FMLCAiQkZBX0FFTl9JT0NfRldNSVNNQVRDSCIsCisgIlJ1bm5pbmcgZmlybXdhcmUgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgZHJpdmVyIHZlcnNpb24uIiwKKyAoMCksIDB9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLwore0JGQV9BRU5fSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9JVE5JTV9PTkxJTkUiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBpcyBvbmxpbmUgZm9yIGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fSVROSU1fT0ZGTElORSIsCisgIlRhcmdldCAoV1dOID0gJXMpIG9mZmxpbmVkIGJ5IGluaXRpYXRvciAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fSVROSU1fRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QiLAorICJUYXJnZXQgKFdXTiA9ICVzKSBjb25uZWN0aXZpdHkgbG9zdCBmb3IgaW5pdGlhdG9yIChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCisKKworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0xQT1JUIE1vZHVsZSAqLwore0JGQV9BRU5fTFBPUlRfTkVXLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9ORVciLAorICJOZXcgbG9naWNhbCBwb3J0IGNyZWF0ZWQ6IFdXTiA9ICVzLCBSb2xlID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9MUE9SVF9ERUxFVEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX0RFTEVURSIsCisgIkxvZ2ljYWwgcG9ydCBkZWxldGVkOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9MUE9SVF9PTkxJTkUiLAorICJMb2dpY2FsIHBvcnQgb25saW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fTFBPUlRfT0ZGTElORSIsCisgIkxvZ2ljYWwgcG9ydCB0YWtlbiBvZmZsaW5lOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfRVJST1IsICJCRkFfQUVOX0xQT1JUX0RJU0NPTk5FQ1QiLAorICJMb2dpY2FsIHBvcnQgbG9zdCBmYWJyaWMgY29ubmVjdGl2aXR5OiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTkVXX1BST1AsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX0xQT1JUX05FV19QUk9QIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9QUk9QLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9MUE9SVF9ERUxFVEVfUFJPUCIsCisgIlZpcnR1YWwgcG9ydCBkZWxldGVkIHVzaW5nIHByb3ByaWV0YXJ5IGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfTkVXX1NUQU5EQVJEIiwKKyAiTmV3IHZpcnR1YWwgcG9ydCBjcmVhdGVkIHVzaW5nIHN0YW5kYXJkIGludGVyZmFjZTogV1dOID0gJXMsIFJvbGUgPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfCAwKSwgMn0sCisKK3tCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkJGQV9BRU5fTFBPUlRfREVMRVRFX1NUQU5EQVJEIiwKKyAiVmlydHVhbCBwb3J0IGRlbGV0ZWQgdXNpbmcgc3RhbmRhcmQgaW50ZXJmYWNlOiBXV04gPSAlcywgUm9sZSA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9EVVBfV1dOLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0RVUF9XV04iLAorICJWaXJ0dWFsIHBvcnQgbG9naW4gZmFpbGVkLiBEdXBsaWNhdGUgV1dOID0gJXMgcmVwb3J0ZWQgYnkgZmFicmljLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9MUE9SVF9OUElWX0ZBQlJJQ19NQVgiLAorICJWaXJ0dWFsIHBvcnQgKFdXTiA9ICVzKSBsb2dpbiBmYWlsZWQuIE1heCBOUElWIHBvcnRzIGFscmVhZHkgZXhpc3QgaW4iCisgIiBmYWJyaWMvZnBvcnQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiIsCisgIlZpcnR1YWwgcG9ydCAoV1dOID0gJXMpIGxvZ2luIGZhaWxlZC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1BPUlRfT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSwgQkZBX0xPR19JTkZPLCAiQkZBX0FFTl9QT1JUX09OTElORSIsCisgIkJhc2UgcG9ydCBvbmxpbmU6IFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX09GRkxJTkUiLAorICJCYXNlIHBvcnQgb2ZmbGluZTogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1JMSVIsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfUkxJUiIsCisgIlJMSVIgZXZlbnQgbm90IHN1cHBvcnRlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfQUVOX1BPUlRfU0ZQX0lOU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIiwKKyAiTmV3IFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUkVNT1ZFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUiLAorICJTRlAgcmVtb3ZlZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfUE9NLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfV0FSTklORywKKyAiQkZBX0FFTl9QT1JUX1NGUF9QT00iLAorICJTRlAgUE9NIGxldmVsIHRvICVzOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9QT1JUX0VOQUJMRSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUE9SVF9FTkFCTEUiLAorICJCYXNlIHBvcnQgZW5hYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0RJU0FCTEUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfRElTQUJMRSIsCisgIkJhc2UgcG9ydCBkaXNhYmxlZDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT04sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1BPUlRfQVVUSF9PTiIsCisgIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWwgZm9yIGJhc2UgcG9ydDogV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX0FVVEhfT0ZGLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkJGQV9BRU5fUE9SVF9BVVRIX09GRiIsCisgIkF1dGhlbnRpY2F0aW9uIHVuc3VjY2Vzc2Z1bCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJCRkFfQUVOX1BPUlRfRElTQ09OTkVDVCIsCisgIkJhc2UgcG9ydCAoV1dOID0gJXMpIGxvc3QgZmFicmljIGNvbm5lY3Rpdml0eS4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfUU9TX05FRywgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX1dBUk5JTkcsCisgIkJGQV9BRU5fUE9SVF9RT1NfTkVHIiwKKyAiUU9TIG5lZ290aWF0aW9uIGZhaWxlZCBmb3IgYmFzZSBwb3J0OiBXV04gPSAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfQUVOX1BPUlRfRkFCUklDX05BTUVfQ0hBTkdFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX0ZBQlJJQ19OQU1FX0NIQU5HRSIsCisgIkJhc2UgcG9ydCBXV04gPSAlcywgRmFicmljIFdXTiA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19XQVJOSU5HLCAiQkZBX0FFTl9QT1JUX1NGUF9BQ0NFU1NfRVJST1IiLAorICJTRlAgYWNjZXNzIGVycm9yOiBXV04vTUFDID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX1dBUk5JTkcsICJCRkFfQUVOX1BPUlRfU0ZQX1VOU1VQUE9SVCIsCisgIlVuc3VwcG9ydGVkIFNGUCBmb3VuZDogV1dOL01BQyA9ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9SUE9SVCBNb2R1bGUgKi8KK3tCRkFfQUVOX1JQT1JUX09OTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT05MSU5FIiwKKyAiUmVtb3RlIHBvcnQgKFdXTiA9ICVzKSBvbmxpbmUgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfT0ZGTElORSwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkJGQV9BRU5fUlBPUlRfT0ZGTElORSIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgb2ZmbGluZWQgYnkgbG9naWNhbCBwb3J0IChXV04gPSAlcykuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwgMCksIDJ9LAorCit7QkZBX0FFTl9SUE9SVF9ESVNDT05ORUNULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19FUlJPUiwgIkJGQV9BRU5fUlBPUlRfRElTQ09OTkVDVCIsCisgIlJlbW90ZSBwb3J0IChXV04gPSAlcykgY29ubmVjdGl2aXR5IGxvc3QgZm9yIGxvZ2ljYWwgcG9ydCAoV1dOID0gJXMpLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8IDApLCAyfSwKKwore0JGQV9BRU5fUlBPUlRfUU9TX1BSSU8sIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJCRkFfQUVOX1JQT1JUX1FPU19QUklPIiwKKyAiUU9TIHByaW9yaXR5IGNoYW5nZWQgdG8gJXM6IFJQV1dOID0gJXMgYW5kIExQV1dOID0gJXMuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgMCksIDN9LAorCit7QkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiQkZBX0FFTl9SUE9SVF9RT1NfRkxPV0lEIiwKKyAiUU9TIGZsb3cgSUQgY2hhbmdlZCB0byAlZDogUlBXV04gPSAlcyBhbmQgTFBXV04gPSAlcy4iLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgRkNTIE1vZHVsZSAqLwore0JGQV9MT0dfRkNTX0ZBQlJJQ19OT1NXSVRDSCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkZDU19GQUJSSUNfTk9TV0lUQ0giLAorICJObyBzd2l0Y2hlZCBmYWJyaWMgcHJlc2VuY2UgaXMgZGV0ZWN0ZWQuIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiRkNTX0ZBQlJJQ19JU09MQVRFRCIsCisgIlBvcnQgaXMgaXNvbGF0ZWQgZHVlIHRvIFZGX0lEIG1pc21hdGNoLiBQV1dOOiAlcywgUG9ydCBWRl9JRDogJTA0eCBhbmQiCisgIiBzd2l0Y2ggcG9ydCBWRl9JRDogJTA0eC4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgSEFMIE1vZHVsZSAqLwore0JGQV9MT0dfSEFMX0FTU0VSVCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0VSUk9SLAorICJIQUxfQVNTRVJUIiwKKyAiQXNzZXJ0aW9uIGZhaWx1cmU6ICVzOiVkOiAlcyIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfSEFMX0hFQVJUQkVBVF9GQUlMVVJFLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19DUklUSUNBTCwgIkhBTF9IRUFSVEJFQVRfRkFJTFVSRSIsCisgIkZpcm13YXJlIGhlYXJ0YmVhdCBmYWlsdXJlIGF0ICVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiSEFMX0ZDUElNX1BBUk1fSU5WQUxJRCIsCisgIkRyaXZlciBjb25maWd1cmF0aW9uICVzIHZhbHVlICVkIGlzIGludmFsaWQuIFZhbHVlIHNob3VsZCBiZSB3aXRoaW4iCisgIiAlZCBhbmQgJWQuIiwKKyAoKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19IQUxfU01fQVNTRVJULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfRVJST1IsCisgIkhBTF9TTV9BU1NFUlQiLAorICJTTSBBc3NlcnRpb24gZmFpbHVyZTogJXM6JWQ6IGV2ZW50ID0gJWQiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKKworCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCit7QkZBX0xPR19MSU5VWF9ERVZJQ0VfQ0xBSU1FRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0RFVklDRV9DTEFJTUVEIiwKKyAiYmZhIGRldmljZSBhdCAlcyBjbGFpbWVkLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfSEFTSF9JTklUX0ZBSUxFRCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX0hBU0hfSU5JVF9GQUlMRUQiLAorICJIYXNoIHRhYmxlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUgZm9yIHRoZSBwb3J0ICVzLiIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVELCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfU1lTRlNfRkFJTEVEIiwKKyAic3lzZnMgZmlsZSBjcmVhdGlvbiBmYWlsdXJlIGZvciB0aGUgcG9ydCAlcy4iLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX01FTV9BTExPQ19GQUlMRUQsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9NRU1fQUxMT0NfRkFJTEVEIiwKKyAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkOiAlcy4gICIsCisgKChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcwKSB8IDApLCAxfSwKKwore0JGQV9MT0dfTElOVVhfRFJJVkVSX1JFR0lTVFJBVElPTl9GQUlMRUQsCisgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLCBCRkFfTE9HX0lORk8sCisgIkxJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIiwKKyAiJXMuICAiLAorICgoQkZBX0xPR19TIDw8IEJGQV9MT0dfQVJHMCkgfCAwKSwgMX0sCisKK3tCRkFfTE9HX0xJTlVYX0lUTklNX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywgQkZBX0xPR19JTkZPLAorICJMSU5VWF9JVE5JTV9GUkVFIiwKKyAic2NzaSVkOiBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKwore0JGQV9MT0dfTElOVVhfSVROSU1fT05MSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT05MSU5FIiwKKyAiVGFyZ2V0OiAlZDowOiVkIEZDSUQ6ICVzIFdXUE46ICVzIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzEpIHwKKyAgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzIpIHwgKEJGQV9MT0dfUyA8PCBCRkFfTE9HX0FSRzMpIHwgMCksIDR9LAorCit7QkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiTElOVVhfSVROSU1fT0ZGTElORSIsCisgIlRhcmdldDogJWQ6MDolZCBGQ0lEOiAlcyBXV1BOOiAlcyIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkcyKSB8IChCRkFfTE9HX1MgPDwgQkZBX0xPR19BUkczKSB8IDApLCA0fSwKKwore0JGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJMSU5VWF9TQ1NJX0hPU1RfRlJFRSIsCisgIkZyZWUgc2NzaSVkIiwKKyAoKEJGQV9MT0dfRCA8PCBCRkFfTE9HX0FSRzApIHwgMCksIDF9LAorCit7QkZBX0xPR19MSU5VWF9TQ1NJX0FCT1JULCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csIEJGQV9MT0dfSU5GTywKKyAiTElOVVhfU0NTSV9BQk9SVCIsCisgInNjc2klZDogYWJvcnQgY21uZCAlcCwgaW90YWcgJXgiLAorICgoQkZBX0xPR19EIDw8IEJGQV9MT0dfQVJHMCkgfCAoQkZBX0xPR19QIDw8IEJGQV9MT0dfQVJHMSkgfAorICAoQkZBX0xPR19YIDw8IEJGQV9MT0dfQVJHMikgfCAwKSwgM30sCisKK3tCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIkxJTlVYX1NDU0lfQUJPUlRfQ09NUCIsCisgInNjc2klZDogY29tcGxldGUgYWJvcnQgMHglcCwgaW90YWcgMHgleCIsCisgKChCRkFfTE9HX0QgPDwgQkZBX0xPR19BUkcwKSB8IChCRkFfTE9HX1AgPDwgQkZBX0xPR19BUkcxKSB8CisgIChCRkFfTE9HX1ggPDwgQkZBX0xPR19BUkcyKSB8IDApLCAzfSwKKworCisKKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBXRFJWIE1vZHVsZSAqLwore0JGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiwgQkZBX0xPR19BVFRSX05PTkUgfCBCRkFfTE9HX0FUVFJfTE9HLAorIEJGQV9MT0dfSU5GTywgIldEUlZfSU9DX0lOSVRfRVJST1IiLAorICJJT0MgaW5pdGlhbGl6YXRpb24gaGFzIGZhaWxlZC4iLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX0lOVEVSTkFMX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfSU5URVJOQUxfRVJST1IiLAorICJJT0MgaW50ZXJuYWwgZXJyb3IuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUQVJUX0VSUk9SLCBCRkFfTE9HX0FUVFJfTk9ORSB8IEJGQV9MT0dfQVRUUl9MT0csCisgQkZBX0xPR19JTkZPLCAiV0RSVl9JT0NfU1RBUlRfRVJST1IiLAorICJJT0MgY291bGQgbm90IGJlIHN0YXJ0ZWQuICAiLAorICgwKSwgMH0sCisKK3tCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lPQ19TVE9QX0VSUk9SIiwKKyAiSU9DIGNvdWxkIG5vdCBiZSBzdG9wcGVkLiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMiLAorICJJbnN1ZmZpY2llbnQgbWVtb3J5LiAgIiwKKyAoMCksIDB9LAorCit7QkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IsIEJGQV9MT0dfQVRUUl9OT05FIHwgQkZBX0xPR19BVFRSX0xPRywKKyBCRkFfTE9HX0lORk8sICJXRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IiLAorICJVbmFibGUgdG8gbWFwIHRoZSBJT0Mgb250byB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UuICAiLAorICgwKSwgMH0sCisKKworezAsIDAsIDAsICIiLCAiIiwgMCwgMH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODQ0YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzLmMKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmaS9iZmlfbHBzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIExQUyk7CitCRkFfTU9EVUxFKGxwcyk7CisKKyNkZWZpbmUgQkZBX0xQU19NSU5fTFBPUlRTCSgxKQorI2RlZmluZSBCRkFfTFBTX01BWF9MUE9SVFMJKDI1NikKKworLyoqCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCBiZmFfbHBzX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKm5kbV9sZW4sCisJCQkgICAgdTMyICpkbV9sZW4pOworc3RhdGljIHZvaWQgYmZhX2xwc19hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQkgICBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQkgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCSAgIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOworc3RhdGljIHZvaWQgYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ2luX3JzcChzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCSAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dvdXRfcnNwKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJICAgICAgIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2ZyZWUoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19zZW5kX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworc3RhdGljIHZvaWQgYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX2xvZ291dF9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CisKKworLyoqCisgKiAgbHBzX3B2dCBCRkEgTFBTIHByaXZhdGUgZnVuY3Rpb25zCisgKi8KKworZW51bSBiZmFfbHBzX2V2ZW50IHsKKwlCRkFfTFBTX1NNX0xPR0lOCT0gMSwJLyogbG9naW4gcmVxdWVzdCBmcm9tIHVzZXIJKi8KKwlCRkFfTFBTX1NNX0xPR09VVAk9IDIsCS8qIGxvZ291dCByZXF1ZXN0IGZyb20gdXNlcgkqLworCUJGQV9MUFNfU01fRldSU1AJPSAzLAkvKiBmL3cgcmVzcG9uc2UgdG8gbG9naW4vbG9nb3V0CSovCisJQkZBX0xQU19TTV9SRVNVTUUJPSA0LAkvKiBzcGFjZSBwcmVzZW50IGluIHJlcXEgcXVldWUJKi8KKwlCRkFfTFBTX1NNX0RFTEVURQk9IDUsCS8qIGxwcyBkZWxldGUgZnJvbSB1c2VyCQkqLworCUJGQV9MUFNfU01fT0ZGTElORQk9IDYsCS8qIExpbmsgaXMgb2ZmbGluZQkJKi8KK307CisKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21faW5pdChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ2luKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9scHNfc21fbG9naW53YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX29ubGluZShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ291dChzdHJ1Y3QgYmZhX2xwc19zICpscHMsIGVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfbHBzX3NtX2xvZ293YWl0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywKKwkJCWVudW0gYmZhX2xwc19ldmVudCBldmVudCk7CisKKy8qKgorICogSW5pdCBzdGF0ZSAtLSBubyBsb2dpbgorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9pbml0KHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR0lOOgorCQlpZiAoYmZhX3JlcXFfZnVsbChscHMtPmJmYSwgbHBzLT5yZXFxKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fbG9naW53YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ2luKTsKKwkJCWJmYV9scHNfc2VuZF9sb2dpbihscHMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJYmZhX2xwc19sb2dvdXRfY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9ERUxFVEU6CisJCWJmYV9scHNfZnJlZShscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9GV1JTUDoKKwkJLyogQ291bGQgaGFwcGVuIHdoZW4gZmFicmljIGRldGVjdHMgbG9vcGJhY2sgYW5kIGRpc2NhcmRzCisJCSAqIHRoZSBscHMgcmVxdWVzdC4gRncgd2lsbCBldmVudHVhbGx5IHNlbnQgb3V0IHRoZSB0aW1lb3V0CisJCSAqIEp1c3QgaWdub3JlCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ2luIGlzIGluIHByb2dyZXNzIC0tIGF3YWl0aW5nIHJlc3BvbnNlIGZyb20gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9naW4oc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWlmIChscHMtPnN0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21fb25saW5lKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShscHMsIGJmYV9scHNfc21faW5pdCk7CisJCWJmYV9scHNfbG9naW5fY29tcChscHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0xQU19TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dpbiBwZW5kaW5nIC0gYXdhaXRpbmcgc3BhY2UgaW4gcmVxdWVzdCBxdWV1ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dpbndhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dpbik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogbG9naW4gY29tcGxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fb25saW5lKHN0cnVjdCBiZmFfbHBzX3MgKmxwcywgZW51bSBiZmFfbHBzX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobHBzLT5iZmEsIGxwcy0+bHBfdGFnKTsKKwliZmFfdHJjKGxwcy0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfTFBTX1NNX0xPR09VVDoKKwkJaWYgKGJmYV9yZXFxX2Z1bGwobHBzLT5iZmEsIGxwcy0+cmVxcSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ293YWl0KTsKKwkJCWJmYV9yZXFxX3dhaXQobHBzLT5iZmEsIGxwcy0+cmVxcSwgJmxwcy0+d3FlKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2xvZ291dCk7CisJCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9MUFNfU01fT0ZGTElORToKKwljYXNlIEJGQV9MUFNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9pbml0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBsb2dvdXQgaW4gcHJvZ3Jlc3MgLSBhd2FpdGluZyBmaXJtd2FyZSByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19zbV9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fRldSU1A6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfbHBzX2xvZ291dF9jb21wKGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIGxvZ291dCBwZW5kaW5nIC0tIGF3YWl0aW5nIHNwYWNlIGluIHJlcXVlc3QgcXVldWUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc21fbG9nb3dhaXQoc3RydWN0IGJmYV9scHNfcyAqbHBzLCBlbnVtIGJmYV9scHNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhscHMtPmJmYSwgbHBzLT5scF90YWcpOworCWJmYV90cmMobHBzLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9MUFNfU01fUkVTVU1FOgorCQliZmFfc21fc2V0X3N0YXRlKGxwcywgYmZhX2xwc19zbV9sb2dvdXQpOworCQliZmFfbHBzX3NlbmRfbG9nb3V0KGxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfTFBTX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZscHMtPndxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBscHNfcHZ0IEJGQSBMUFMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIHJldHVybiBtZW1vcnkgcmVxdWlyZW1lbnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwgdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm1pbl9jZmcpCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUlOX0xQT1JUUzsKKwllbHNlCisJCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZhX2xwc19zKSAqIEJGQV9MUFNfTUFYX0xQT1JUUzsKK30KKworLyoqCisgKiBiZmEgbW9kdWxlIGF0dGFjaCBhdCBpbml0aWFsaXphdGlvbiB0aW1lCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2F0dGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqYmZhZCwgc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKwlpbnQJCQlpOworCisJYmZhX29zX21lbXNldChtb2QsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX2xwc19tb2RfcykpOworCW1vZC0+bnVtX2xwcyA9IEJGQV9MUFNfTUFYX0xQT1JUUzsKKwlpZiAoY2ZnLT5kcnZjZmcubWluX2NmZykKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NSU5fTFBPUlRTOworCWVsc2UKKwkJbW9kLT5udW1fbHBzID0gQkZBX0xQU19NQVhfTFBPUlRTOworCW1vZC0+bHBzX2FyciA9IGxwcyA9IChzdHJ1Y3QgYmZhX2xwc19zICopIGJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKTsKKworCWJmYV9tZW1pbmZvX2t2YShtZW1pbmZvKSArPSBtb2QtPm51bV9scHMgKiBzaXplb2Yoc3RydWN0IGJmYV9scHNfcyk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5scHNfYWN0aXZlX3EpOworCisJZm9yIChpID0gMDsgaSA8IG1vZC0+bnVtX2xwczsgaSsrLCBscHMrKykgeworCQlscHMtPmJmYQk9IGJmYTsKKwkJbHBzLT5scF90YWcJPSAodTgpIGk7CisJCWxwcy0+cmVxcQk9IEJGQV9SRVFRX0xQUzsKKwkJYmZhX3JlcXFfd2luaXQoJmxwcy0+d3FlLCBiZmFfbHBzX3JlcXFfcmVzdW1lLCBscHMpOworCQlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfbHBzX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX2xwc19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCisvKioKKyAqIElPQyBpbiBkaXNhYmxlZCBzdGF0ZSAtLSBjb25zaWRlciBhbGwgbHBzIG9mZmxpbmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcwkqbW9kID0gQkZBX0xQU19NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHM7CisJc3RydWN0IGxpc3RfaGVhZAkJKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZtb2QtPmxwc19hY3RpdmVfcSkgeworCQlscHMgPSAoc3RydWN0IGJmYV9scHNfcyAqKSBxZTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX09GRkxJTkUpOworCX0KK30KKworLyoqCisgKiBGaXJtd2FyZSBsb2dpbiByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ2luX3JzcF9zICpyc3ApCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCisJYmZhX2Fzc2VydChyc3AtPmxwX3RhZyA8IG1vZC0+bnVtX2xwcyk7CisJbHBzID0gQkZBX0xQU19GUk9NX1RBRyhtb2QsIHJzcC0+bHBfdGFnKTsKKworCWxwcy0+c3RhdHVzID0gcnNwLT5zdGF0dXM7CisJc3dpdGNoIChyc3AtPnN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJbHBzLT5mcG9ydAk9IHJzcC0+Zl9wb3J0OworCQlscHMtPm5waXZfZW4JPSByc3AtPm5waXZfZW47CisJCWxwcy0+bHBfcGlkCT0gcnNwLT5scF9waWQ7CisJCWxwcy0+cHJfYmJjcmVkCT0gYmZhX29zX250b2hzKHJzcC0+YmJfY3JlZGl0KTsKKwkJbHBzLT5wcl9wd3duCT0gcnNwLT5wb3J0X25hbWU7CisJCWxwcy0+cHJfbnd3bgk9IHJzcC0+bm9kZV9uYW1lOworCQlscHMtPmF1dGhfcmVxCT0gcnNwLT5hdXRoX3JlcTsKKwkJbHBzLT5scF9tYWMJPSByc3AtPmxwX21hYzsKKwkJbHBzLT5icmNkX3N3aXRjaCA9IHJzcC0+YnJjZF9zd2l0Y2g7CisJCWxwcy0+ZmNmX21hYwk9IHJzcC0+ZmNmX21hYzsKKworCQlicmVhazsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlscHMtPmxzcmp0X3JzbiA9IHJzcC0+bHNyanRfcnNuOworCQlscHMtPmxzcmp0X2V4cGwgPSByc3AtPmxzcmp0X2V4cGw7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlscHMtPmV4dF9zdGF0dXMgPSByc3AtPmV4dF9zdGF0dXM7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkvKiBOb3RoaW5nIHRvIGRvIHdpdGggb3RoZXIgc3RhdHVzICovCisJCWJyZWFrOworCX0KKworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9GV1JTUCk7Cit9CisKKy8qKgorICogRmlybXdhcmUgbG9nb3V0IHJlc3BvbnNlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ291dF9yc3Aoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbHBzX2xvZ291dF9yc3BfcyAqcnNwKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsKKworCWJmYV9hc3NlcnQocnNwLT5scF90YWcgPCBtb2QtPm51bV9scHMpOworCWxwcyA9IEJGQV9MUFNfRlJPTV9UQUcobW9kLCByc3AtPmxwX3RhZyk7CisKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fRldSU1ApOworfQorCisvKioKKyAqIFNwYWNlIGlzIGF2YWlsYWJsZSBpbiByZXF1ZXN0IHF1ZXVlLCByZXN1bWUgcXVldWVpbmcgcmVxdWVzdCB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfcmVxcV9yZXN1bWUodm9pZCAqbHBzX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2xwc19zCSpscHMgPSBscHNfYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX1JFU1VNRSk7Cit9CisKKy8qKgorICogbHBzIGlzIGZyZWVkIC0tIHRyaWdnZXJlZCBieSB2cG9ydCBkZWxldGUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfZnJlZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGxwcy0+YmZhKTsKKworCWxpc3RfZGVsKCZscHMtPnFlKTsKKwlsaXN0X2FkZF90YWlsKCZscHMtPnFlLCAmbW9kLT5scHNfZnJlZV9xKTsKK30KKworLyoqCisgKiBzZW5kIGxvZ2luIHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dpbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcmVxX3MJKm07CisKKwltID0gYmZhX3JlcXFfbmV4dChscHMtPmJmYSwgbHBzLT5yZXFxKTsKKwliZmFfYXNzZXJ0KG0pOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19MUFMsIEJGSV9MUFNfSDJJX0xPR0lOX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnCT0gbHBzLT5scF90YWc7CisJbS0+YWxwYQkJPSBscHMtPmFscGE7CisJbS0+cGR1X3NpemUJPSBiZmFfb3NfaHRvbnMobHBzLT5wZHVzeik7CisJbS0+cHd3bgkJPSBscHMtPnB3d247CisJbS0+bnd3bgkJPSBscHMtPm53d247CisJbS0+ZmRpc2MJPSBscHMtPmZkaXNjOworCW0tPmF1dGhfZW4JPSBscHMtPmF1dGhfZW47CisKKwliZmFfcmVxcV9wcm9kdWNlKGxwcy0+YmZhLCBscHMtPnJlcXEpOworfQorCisvKioKKyAqIHNlbmQgbG9nb3V0IHJlcXVlc3QgdG8gZmlybXdhcmUKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfc2VuZF9sb2dvdXQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXN0cnVjdCBiZmlfbHBzX2xvZ291dF9yZXFfcyAqbTsKKworCW0gPSBiZmFfcmVxcV9uZXh0KGxwcy0+YmZhLCBscHMtPnJlcXEpOworCWJmYV9hc3NlcnQobSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX0xQUywgQkZJX0xQU19IMklfTE9HT1VUX1JFUSwKKwkJCWJmYV9scHVpZChscHMtPmJmYSkpOworCisJbS0+bHBfdGFnICAgID0gbHBzLT5scF90YWc7CisJbS0+cG9ydF9uYW1lID0gbHBzLT5wd3duOworCWJmYV9yZXFxX3Byb2R1Y2UobHBzLT5iZmEsIGxwcy0+cmVxcSk7Cit9CisKKy8qKgorICogSW5kaXJlY3QgbG9naW4gY29tcGxldGlvbiBoYW5kbGVyIGZvciBub24tZmNzCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfbHBzX2xvZ2luX2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9naV9jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcsIGxwcy0+c3RhdHVzKTsKK30KKworLyoqCisgKiBMb2dpbiBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dpbl9jb21wKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlpZiAoIWxwcy0+YmZhLT5mY3MpIHsKKwkJYmZhX2NiX3F1ZXVlKGxwcy0+YmZhLCAmbHBzLT5oY2JfcWUsCisJCQkJYmZhX2xwc19sb2dpbl9jb21wX2NiLCBscHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2NfY29tcChscHMtPmJmYS0+YmZhZCwgbHBzLT51YXJnLCBscHMtPnN0YXR1cyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dpX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZywgbHBzLT5zdGF0dXMpOworfQorCisvKioKKyAqIEluZGlyZWN0IGxvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgZm9yIG5vbi1mY3MKKyAqLworc3RhdGljIHZvaWQKK2JmYV9scHNfbG9nb3V0X2NvbXBfY2Iodm9pZCAqYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfbHBzX3MgKmxwcwk9IGFyZzsKKworCWlmICghY29tcGxldGUpCisJCXJldHVybjsKKworCWlmIChscHMtPmZkaXNjKQorCQliZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworCWVsc2UKKwkJYmZhX2NiX2xwc19mbG9nb19jb21wKGxwcy0+YmZhLT5iZmFkLCBscHMtPnVhcmcpOworfQorCisvKioKKyAqIExvZ291dCBjb21wbGV0aW9uIGhhbmRsZXIgLS0gZGlyZWN0IGNhbGwgZm9yIGZjcywgcXVldWUgZm9yIG90aGVycworICovCitzdGF0aWMgdm9pZAorYmZhX2xwc19sb2dvdXRfY29tcChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJaWYgKCFscHMtPmJmYS0+ZmNzKSB7CisJCWJmYV9jYl9xdWV1ZShscHMtPmJmYSwgJmxwcy0+aGNiX3FlLAorCQkJCWJmYV9scHNfbG9nb3V0X2NvbXBfY2IsIGxwcyk7CisJCXJldHVybjsKKwl9CisJaWYgKGxwcy0+ZmRpc2MpCisJCWJmYV9jYl9scHNfZmRpc2Nsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7CisJZWxzZQorCQliZmFfY2JfbHBzX2Zsb2dvX2NvbXAobHBzLT5iZmEtPmJmYWQsIGxwcy0+dWFyZyk7Cit9CisKKworCisvKioKKyAqICBscHNfcHVibGljIEJGQSBMUFMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogQWxsb2NhdGUgYSBscG9ydCBzcnZpY2UgdGFnLgorICovCitzdHJ1Y3QgYmZhX2xwc19zICAqCitiZmFfbHBzX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfbHBzX21vZF9zCSptb2QgPSBCRkFfTFBTX01PRChiZmEpOworCXN0cnVjdCBiZmFfbHBzX3MJKmxwcyA9IE5VTEw7CisKKwliZmFfcV9kZXEoJm1vZC0+bHBzX2ZyZWVfcSwgJmxwcyk7CisKKwlpZiAobHBzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJbGlzdF9hZGRfdGFpbCgmbHBzLT5xZSwgJm1vZC0+bHBzX2FjdGl2ZV9xKTsKKworCWJmYV9zbV9zZXRfc3RhdGUobHBzLCBiZmFfbHBzX3NtX2luaXQpOworCXJldHVybiBscHM7Cit9CisKKy8qKgorICogRnJlZSBscG9ydCBzZXJ2aWNlIHRhZy4gVGhpcyBjYW4gYmUgY2FsbGVkIGFueXRpbWUgYWZ0ZXIgYW4gYWxsb2MuCisgKiBObyBuZWVkIHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nIGxvZ2luL2xvZ291dCBjb21wbGV0aW9ucy4KKyAqLwordm9pZAorYmZhX2xwc19kZWxldGUoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9ERUxFVEUpOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmxvZ2koc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1OCBhbHBhLCB1MTYgcGR1c3osCisJd3duX3QgcHd3biwgd3duX3Qgbnd3biwgYmZhX2Jvb2xlYW5fdCBhdXRoX2VuKQoreworCWxwcy0+dWFyZwk9IHVhcmc7CisJbHBzLT5hbHBhCT0gYWxwYTsKKwlscHMtPnBkdXN6CT0gcGR1c3o7CisJbHBzLT5wd3duCT0gcHd3bjsKKwlscHMtPm53d24JPSBud3duOworCWxwcy0+ZmRpc2MJPSBCRkFfRkFMU0U7CisJbHBzLT5hdXRoX2VuCT0gYXV0aF9lbjsKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HSU4pOworfQorCisvKioKKyAqIEluaXRpYXRlIGEgbHBvcnQgZmRpc2MgbG9naW4uCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Moc3RydWN0IGJmYV9scHNfcyAqbHBzLCB2b2lkICp1YXJnLCB1MTYgcGR1c3osIHd3bl90IHB3d24sCisJd3duX3Qgbnd3bikKK3sKKwlscHMtPnVhcmcJPSB1YXJnOworCWxwcy0+YWxwYQk9IDA7CisJbHBzLT5wZHVzegk9IHBkdXN6OworCWxwcy0+cHd3bgk9IHB3d247CisJbHBzLT5ud3duCT0gbnd3bjsKKwlscHMtPmZkaXNjCT0gQkZBX1RSVUU7CisJbHBzLT5hdXRoX2VuCT0gQkZBX0ZBTFNFOworCWJmYV9zbV9zZW5kX2V2ZW50KGxwcywgQkZBX0xQU19TTV9MT0dJTik7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBsb2dvdXQgKGZsb2dpKS4KKyAqLwordm9pZAorYmZhX2xwc19mbG9nbyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQobHBzLCBCRkFfTFBTX1NNX0xPR09VVCk7Cit9CisKKy8qKgorICogSW5pdGlhdGUgYSBscG9ydCBGRFNJQyBsb2dvdXQuCisgKi8KK3ZvaWQKK2JmYV9scHNfZmRpc2Nsb2dvKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fTE9HT1VUKTsKK30KKworLyoqCisgKiBEaXNjYXJkIGEgcGVuZGluZyBsb2dpbiByZXF1ZXN0IC0tIHNob3VsZCBiZSBjYWxsZWQgb25seSBmb3IKKyAqIGxpbmsgZG93biBoYW5kbGluZy4KKyAqLwordm9pZAorYmZhX2xwc19kaXNjYXJkKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwliZmFfc21fc2VuZF9ldmVudChscHMsIEJGQV9MUFNfU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZworICovCit1OAorYmZhX2xwc19nZXRfdGFnKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5scF90YWc7Cit9CisKKy8qKgorICogUmV0dXJuIGxwb3J0IHNlcnZpY2VzIHRhZyBnaXZlbiB0aGUgcGlkCisgKi8KK3U4CitiZmFfbHBzX2dldF90YWdfZnJvbV9waWQoc3RydWN0IGJmYV9zICpiZmEsIHUzMiBwaWQpCit7CisJc3RydWN0IGJmYV9scHNfbW9kX3MJKm1vZCA9IEJGQV9MUFNfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzOworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwLCBscHMgPSBtb2QtPmxwc19hcnI7IGkgPCBtb2QtPm51bV9scHM7IGkrKywgbHBzKyspIHsKKwkJaWYgKGxwcy0+bHBfcGlkID09IHBpZCkKKwkJCXJldHVybiBscHMtPmxwX3RhZzsKKwl9CisKKwkvKiBSZXR1cm4gYmFzZSBwb3J0IHRhZyBhbnl3YXkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiByZXR1cm4gaWYgZmFicmljIGxvZ2luIGluZGljYXRlcyBzdXBwb3J0IGZvciBOUElWCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfbnBpdl9lbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+bnBpdl9lbjsKK30KKworLyoqCisgKiBSZXR1cm4gVFJVRSBpZiBhdHRhY2hlZCB0byBGLVBvcnQsIGVsc2UgcmV0dXJuIEZBTFNFCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfZnBvcnQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmZwb3J0OworfQorCisvKioKKyAqIFJldHVybiBUUlVFIGlmIGF0dGFjaGVkIHRvIGEgQnJvY2FkZSBGYWJyaWMKKyAqLworYmZhX2Jvb2xlYW5fdAorYmZhX2xwc19pc19icmNkX2ZhYnJpYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YnJjZF9zd2l0Y2g7Cit9CisvKioKKyAqIHJldHVybiBUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkCisgKi8KK2JmYV9ib29sZWFuX3QKK2JmYV9scHNfaXNfYXV0aHJlcShzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+YXV0aF9yZXE7Cit9CisKK2JmYV9lcHJvdG9fc3RhdHVzX3QKK2JmYV9scHNfZ2V0X2V4dHN0YXR1cyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+ZXh0X3N0YXR1czsKK30KKworLyoqCisgKiByZXR1cm4gcG9ydCBpZCBhc3NpZ25lZCB0byB0aGUgbHBvcnQKKyAqLwordTMyCitiZmFfbHBzX2dldF9waWQoc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxwX3BpZDsKK30KKworLyoqCisgKiBSZXR1cm4gYmJfY3JlZGl0IGFzc2lnbmVkIGluIEZMT0dJIHJlc3BvbnNlCisgKi8KK3UxNgorYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpCit7CisJcmV0dXJuIGxwcy0+cHJfYmJjcmVkOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIHBvcnQgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9wd3duOworfQorCisvKioKKyAqIFJldHVybiBwZWVyIG5vZGUgbmFtZQorICovCit3d25fdAorYmZhX2xwc19nZXRfcGVlcl9ud3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5wcl9ud3duOworfQorCisvKioKKyAqIHJldHVybiByZWFzb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9yc24oc3RydWN0IGJmYV9scHNfcyAqbHBzKQoreworCXJldHVybiBscHMtPmxzcmp0X3JzbjsKK30KKworLyoqCisgKiByZXR1cm4gZXhwbGFuYXRpb24gY29kZSBpZiBsb2dpbiByZXF1ZXN0IGlzIHJlamVjdGVkCisgKi8KK3U4CitiZmFfbHBzX2dldF9sc3JqdF9leHBsKHN0cnVjdCBiZmFfbHBzX3MgKmxwcykKK3sKKwlyZXR1cm4gbHBzLT5sc3JqdF9leHBsOworfQorCisKKy8qKgorICogTFBTIGZpcm13YXJlIG1lc3NhZ2UgY2xhc3MgaGFuZGxlci4KKyAqLwordm9pZAorYmZhX2xwc19pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJdW5pb24gYmZpX2xwc19pMmhfbXNnX3UJbXNnOworCisJYmZhX3RyYyhiZmEsIG0tPm1oZHIubXNnX2lkKTsKKwltc2cubXNnID0gbTsKKworCXN3aXRjaCAobS0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9MUFNfSDJJX0xPR0lOX1JTUDoKKwkJYmZhX2xwc19sb2dpbl9yc3AoYmZhLCBtc2cubG9naW5fcnNwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9MUFNfSDJJX0xPR09VVF9SU1A6CisJCWJmYV9scHNfbG9nb3V0X3JzcChiZmEsIG1zZy5sb2dvdXRfcnNwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9scHNfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTZjNmNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbHBzX3ByaXYuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfTFBTX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX0xQU19QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCitzdHJ1Y3QgYmZhX2xwc19tb2RfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJbHBzX2ZyZWVfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlscHNfYWN0aXZlX3E7CisJc3RydWN0IGJmYV9scHNfcwkqbHBzX2FycjsKKwlpbnQJCQludW1fbHBzOworfTsKKworI2RlZmluZSBCRkFfTFBTX01PRChfX2JmYSkJCSgmKF9fYmZhKS0+bW9kdWxlcy5scHNfbW9kKQorI2RlZmluZSBCRkFfTFBTX0ZST01fVEFHKF9fbW9kLCBfX3RhZykJKCYoX19tb2QpLT5scHNfYXJyW19fdGFnXSkKKworLyoKKyAqIGV4dGVybmFsIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9scHNfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworCisjZW5kaWYgLyogX19CRkFfTFBTX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZWRhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGUuYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wY2kuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmFfaW9jZmMuaD4KKworLyoqCisgKiBCRkEgbW9kdWxlIGxpc3QgdGVybWluYXRlZCBieSBOVUxMCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW10gPSB7CisJJmhhbF9tb2Rfc2dwZywKKwkmaGFsX21vZF9wcG9ydCwKKwkmaGFsX21vZF9mY3hwLAorCSZoYWxfbW9kX2xwcywKKwkmaGFsX21vZF91ZiwKKwkmaGFsX21vZF9ycG9ydCwKKwkmaGFsX21vZF9mY3BpbSwKKyNpZmRlZiBCRkFfQ0ZHX1BCSU5ECisJJmhhbF9tb2RfcGJpbmQsCisjZW5kaWYKKwlOVUxMCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIHZhcmlvdXMgbW9kdWxlcy4KKyAqLworYmZhX2lzcl9mdW5jX3QgIGJmYV9pc3JzW0JGSV9NQ19NQVhdID0geworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBOT05FICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0MgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0RJQUcgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0ZMQVNIICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19DRUUgKi8KKwliZmFfcHBvcnRfaXNyLAkJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPQ0ZDICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19MTCAqLworCWJmYV91Zl9pc3IsCQkvKiBCRklfTUNfVUYgKi8KKwliZmFfZmN4cF9pc3IsCQkvKiBCRklfTUNfRkNYUCAqLworCWJmYV9scHNfaXNyLAkJLyogQkZJX01DX0xQUyAqLworCWJmYV9ycG9ydF9pc3IsCQkvKiBCRklfTUNfUlBPUlQgKi8KKwliZmFfaXRuaW1faXNyLAkJLyogQkZJX01DX0lUTklNICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIEJGSV9NQ19JT0lNX1JFQUQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fV1JJVEUgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lPSU1fSU8gKi8KKwliZmFfaW9pbV9pc3IsCQkvKiBCRklfTUNfSU9JTSAqLworCWJmYV9pb2ltX2dvb2RfY29tcF9pc3IsCS8qIEJGSV9NQ19JT0lNX0lPQ09NICovCisJYmZhX3Rza2ltX2lzciwJCS8qIEJGSV9NQ19UU0tJTSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiBCRklfTUNfU0JPT1QgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX0lQRkMgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogQkZJX01DX1BPUlQgKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCisJYmZhX2lzcl91bmhhbmRsZWQsCS8qIC0tLS0tLS0tLSAqLworCWJmYV9pc3JfdW5oYW5kbGVkLAkvKiAtLS0tLS0tLS0gKi8KKwliZmFfaXNyX3VuaGFuZGxlZCwJLyogLS0tLS0tLS0tICovCit9OworCisvKioKKyAqIE1lc3NhZ2UgaGFuZGxlcnMgZm9yIG1haWxib3ggY29tbWFuZCBjbGFzc2VzCisgKi8KK2JmYV9pb2NfbWJveF9tY2Z1bmNfdCAgYmZhX21ib3hfaXNyc1tCRklfTUNfTUFYXSA9IHsKKwlOVUxMLAorCU5VTEwsCQkJLyogQkZJX01DX0lPQwkqLworCU5VTEwsCQkJLyogQkZJX01DX0RJQUcJKi8KKwlOVUxMLAkJLyogQkZJX01DX0ZMQVNIICovCisJTlVMTCwJCQkvKiBCRklfTUNfQ0VFCSovCisJTlVMTCwJCQkvKiBCRklfTUNfUE9SVAkqLworCWJmYV9pb2NmY19pc3IsCQkvKiBCRklfTUNfSU9DRkMgKi8KKwlOVUxMLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9tb2R1bGVzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmY3MDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfbW9kdWxlc19wcml2LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX01PRFVMRVNfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfTU9EVUxFU19QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX3VmX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfcG9ydF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX3Jwb3J0X3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZmN4cF9wcml2LmgiCisjaW5jbHVkZSAiYmZhX2xwc19wcml2LmgiCisjaW5jbHVkZSAiYmZhX2ZjcGltX3ByaXYuaCIKKyNpbmNsdWRlIDxjZWUvYmZhX2NlZS5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKworCitzdHJ1Y3QgYmZhX21vZHVsZXNfcyB7CisJc3RydWN0IGJmYV9wcG9ydF9zCXBwb3J0OwkvKiAgcGh5c2ljYWwgcG9ydCBtb2R1bGUJKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfbW9kX3MgZmN4cF9tb2Q7IC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX2xwc19tb2RfcyBscHNfbW9kOyAgIC8qICBmY3hwIG1vZHVsZQkJKi8KKwlzdHJ1Y3QgYmZhX3VmX21vZF9zIHVmX21vZDsJLyogIHVuc29saWNpdGVkIGZyYW1lIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfcnBvcnRfbW9kX3MgcnBvcnRfbW9kOyAvKiAgcmVtb3RlIHBvcnQgbW9kdWxlCSovCisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyBmY3BpbV9tb2Q7IC8qICBGQ1AgaW5pdGlhdG9yIG1vZHVsZQkqLworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyBzZ3BnX21vZDsgLyogIFNHIHBhZ2UgbW9kdWxlCQkqLworCXN0cnVjdCBiZmFfY2VlX3MgY2VlOyAgIAkvKiAgQ0VFIE1vZHVsZSAgICAgICAgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfcyBwb3J0OwkJLyogIFBoeXNpY2FsIHBvcnQgbW9kdWxlCSovCit9OworCisjZW5kaWYgLyogX19CRkFfTU9EVUxFU19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9vc19pbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGE4OWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfb3NfaW5jLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBDb250YWlucyBkZWNsYXJhdGlvbnMgYWxsIE9TIFNwZWNpZmljIGZpbGVzIG5lZWRlZCBmb3IgQkZBIGxheWVyCisgKi8KKworI2lmbmRlZiBfX0JGQV9PU19JTkNfSF9fCisjZGVmaW5lIF9fQkZBX09TX0lOQ19IX18KKworI2lmbmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxzZQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2RlZmluZSBTRVRfTU9EVUxFX1ZFUlNJT04oVkVSKQorCisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKworI2luY2x1ZGUgPHNjc2kvc2NzaV90Y3EuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX3RyYW5zcG9ydC5oPgorCisjZGVmaW5lIEJGQV9FUlIJCQlLRVJOX0VSUgorI2RlZmluZSBCRkFfV0FSTklORwkJS0VSTl9XQVJOSU5HCisjZGVmaW5lIEJGQV9OT1RJQ0UJCUtFUk5fTk9USUNFCisjZGVmaW5lIEJGQV9JTkZPCQlLRVJOX0lORk8KKyNkZWZpbmUgQkZBX0RFQlVHCQlLRVJOX0RFQlVHCisKKyNkZWZpbmUgTE9HX0JGQURfSU5JVAkJMHgwMDAwMDAwMQorI2RlZmluZSBMT0dfRkNQX0lPCQkweDAwMDAwMDAyCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBCRkFfTE9HX1RSQUNFKGJmYWQsIGxldmVsLCBtYXNrLCBmbXQsIGFyZy4uLikJCQlcCisJCUJGQV9MT0coYmZhZCwgbGV2ZWwsIG1hc2ssIGZtdCwgIyMgYXJnKQorI2RlZmluZSBCRkFfREVWX1RSQUNFKGJmYWQsIGxldmVsLCBmbXQsIGFyZy4uLikJCQkJXAorCQlCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCAjIyBhcmcpCisjZGVmaW5lIEJGQV9UUkFDRShsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCisJCUJGQV9QUklOVEYobGV2ZWwsIGZtdCwgIyMgYXJnKQorI2Vsc2UKKyNkZWZpbmUgQkZBX0xPR19UUkFDRShiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCisjZGVmaW5lIEJGQV9ERVZfVFJBQ0UoYmZhZCwgbGV2ZWwsIGZtdCwgYXJnLi4uKQorI2RlZmluZSBCRkFfVFJBQ0UobGV2ZWwsIGZtdCwgYXJnLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgQkZBX0FTU0VSVChwKSBkbyB7CQkJCQkJXAorCWlmICghKHApKSB7ICAgICAgXAorCQlwcmludGsoS0VSTl9FUlIgImFzc2VydCglcykgZmFpbGVkIGF0ICVzOiVkXG4iLAkJXAorCQkjcCwgX19GSUxFX18sIF9fTElORV9fKTsgICAgICBcCisJCUJVRygpOyAgICAgIFwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKyNkZWZpbmUgQkZBX0xPRyhiZmFkLCBsZXZlbCwgbWFzaywgZm10LCBhcmcuLi4pCQkJCVwKK2RvIHsgCQkJCQkJCQkJXAorCWlmICgoKG1hc2spICYgKCgoc3RydWN0IGJmYWRfcyAqKShiZmFkKSktPgkJCVwKKwkJY2ZnX2RhdGFbY2ZnX2xvZ19tYXNrXSkpIHx8IChsZXZlbFsxXSA8PSAnMycpKQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2lmbmRlZiBCRkFfREVWX1BSSU5URgorI2RlZmluZSBCRkFfREVWX1BSSU5URihiZmFkLCBsZXZlbCwgZm10LCBhcmcuLi4pCQkJXAorCQlkZXZfcHJpbnRrKGxldmVsLCAmKCgoc3RydWN0IGJmYWRfcyAqKQkJCVwKKwkJCShiZmFkKSktPnBjaWRldi0+ZGV2KSwgZm10LCAjI2FyZyk7CisjZW5kaWYKKworI2RlZmluZSBCRkFfUFJJTlRGKGxldmVsLCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJcHJpbnRrKGxldmVsIGZtdCwgIyNhcmcpOworCitpbnQgYmZhX29zX01XQih2b2lkICopOworCisjZGVmaW5lIGJmYV9vc19tbWlvd2IoKQkJbW1pb3diKCkKKworI2RlZmluZSBiZmFfc3dhcF8zYihfeCkJCQkJXAorCSgoKChfeCkgJiAweGZmKSA8PCAxNikgfAkJXAorCSgoX3gpICYgMHgwMGZmMDApIHwJCQlcCisJKCgoX3gpICYgMHhmZjAwMDApID4+IDE2KSkKKworI2RlZmluZSBiZmFfc3dhcF84YihfeCkgCQkJCVwKKyAgICAgKCgoKF94KSAmIDB4ZmYwMDAwMDAwMDAwMDAwMHVsbCkgPj4gNTYpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDBmZjAwMDAwMDAwMDAwMHVsbCkgPj4gNDApCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMGZmMDAwMDAwMDAwMHVsbCkgPj4gMjQpCQlcCisgICAgICB8ICgoKF94KSAmIDB4MDAwMDAwZmYwMDAwMDAwMHVsbCkgPj4gOCkJCVwKKyAgICAgIHwgKCgoX3gpICYgMHgwMDAwMDAwMGZmMDAwMDAwdWxsKSA8PCA4KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDBmZjAwMDB1bGwpIDw8IDI0KQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMGZmMDB1bGwpIDw8IDQwKQkJXAorICAgICAgfCAoKChfeCkgJiAweDAwMDAwMDAwMDAwMDAwZmZ1bGwpIDw8IDU2KSkKKworI2RlZmluZSBiZmFfb3Nfc3dhcDMyKF94KSAJCQlcCisJKCgoKF94KSAmIDB4ZmYpIDw8IDI0KSAJCXwJXAorCSgoKF94KSAmIDB4MDAwMGZmMDApIDw8IDgpCXwJXAorCSgoKF94KSAmIDB4MDBmZjAwMDApID4+IDgpCXwJXAorCSgoKF94KSAmIDB4ZmYwMDAwMDApID4+IDI0KSkKKworCisjaWZuZGVmIF9fQklHRU5ESUFOCisjZGVmaW5lIGJmYV9vc19odG9ucyhfeCkgKCh1MTYpKCgoKF94KSAmIDB4ZmYwMCkgPj4gOCkgfCBcCisJCQkJICgoKF94KSAmIDB4MDBmZikgPDwgOCkpKQorCisjZGVmaW5lIGJmYV9vc19odG9ubChfeCkJYmZhX29zX3N3YXAzMihfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkJYmZhX3N3YXBfOGIoX3gpCisjZGVmaW5lIGJmYV9vc19odG9uM2IoX3gpCWJmYV9zd2FwXzNiKF94KQorCisjZGVmaW5lIGJmYV9vc193dG9sZShfeCkgICAoX3gpCisKKyNlbHNlCisKKyNkZWZpbmUgYmZhX29zX2h0b25zKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sKF94KSAgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b24zYihfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX2h0b25sbChfeCkgIChfeCkKKyNkZWZpbmUgYmZhX29zX3d0b2xlKF94KSAgIGJmYV9vc19zd2FwMzIoX3gpCisKKyNlbmRpZgorCisjZGVmaW5lIGJmYV9vc19udG9ocyhfeCkgICBiZmFfb3NfaHRvbnMoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obChfeCkgICBiZmFfb3NfaHRvbmwoX3gpCisjZGVmaW5lIGJmYV9vc19udG9obGwoX3gpICBiZmFfb3NfaHRvbmxsKF94KQorI2RlZmluZSBiZmFfb3NfbnRvaDNiKF94KSAgYmZhX29zX2h0b24zYihfeCkKKworI2RlZmluZSBiZmFfb3NfdTMyKF9fcGE2NCkgKChfX3BhNjQpID4+IDMyKQorCisjZGVmaW5lIGJmYV9vc19tZW1zZXQJbWVtc2V0CisjZGVmaW5lIGJmYV9vc19tZW1jcHkJbWVtY3B5CisjZGVmaW5lIGJmYV9vc191ZGVsYXkJdWRlbGF5CisjZGVmaW5lIGJmYV9vc192c3ByaW50ZiB2c3ByaW50ZgorCisjZGVmaW5lIGJmYV9vc19hc3NpZ24oX190LCBfX3MpIF9fdCA9IF9fcworCisjZGVmaW5lIGJmYV9vc19hZGRyX3QgY2hhciBfX2lvbWVtICoKKyNkZWZpbmUgYmZhX29zX3BhbmljKCkKKworI2RlZmluZSBiZmFfb3NfcmVnX3JlYWQoX3JhZGRyKSBiZmFfb3Nfd3RvbGUocmVhZGwoX3JhZGRyKSkKKyNkZWZpbmUgYmZhX29zX3JlZ193cml0ZShfcmFkZHIsIF92YWwpIHdyaXRlbChiZmFfb3Nfd3RvbGUoKF92YWwpKSwgKF9yYWRkcikpCisjZGVmaW5lIGJmYV9vc19tZW1fcmVhZChfcmFkZHIsIF9vZmYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJYmZhX29zX250b2hsKHJlYWRsKCgoX3JhZGRyKSArIChfb2ZmKSkpKQorI2RlZmluZSBiZmFfb3NfbWVtX3dyaXRlKF9yYWRkciwgX29mZiwgX3ZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbChiZmFfb3NfaHRvbmwoKF92YWwpKSwgKChfcmFkZHIpICsgKF9vZmYpKSkKKworI2RlZmluZSBCRkFfVFJDX1RTKF90cmNtKQkJCQkJCVwKKwkJCSh7CQkJCQkJXAorCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwkJCVwKKwkJCQkJCQkJCVwKKwkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsgICAgICBcCisJCQkJKHR2LnR2X3NlYyoxMDAwMDAwK3R2LnR2X3VzZWMpOyAgICAgIFwKKwkJCSB9KQorCitzdHJ1Y3QgYmZhX2xvZ19tb2RfczsKK3ZvaWQgYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNlbmRpZgorCisjZGVmaW5lIGJvb2xlYW5fdCBpbnQKKworLyoqCisgKiBGb3IgY3VycmVudCB0aW1lIHN0YW1wLCBPUyBBUEkgd2lsbCBmaWxsLWluCisgKi8KK3N0cnVjdCBiZmFfdGltZXZhbF9zIHsKKwl1MzIJdHZfc2VjOwkJLyogIHNlY29uZHMgICAgICAgICovCisJdTMyCXR2X3VzZWM7CS8qICBtaWNyb3NlY29uZHMgICAqLworfTsKKwordm9pZCBiZmFfb3NfZ2V0dGltZW9mZGF5KHN0cnVjdCBiZmFfdGltZXZhbF9zICp0dik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3duMnN0cihjaGFyICp3d25fc3RyLCB1NjQgd3duKQoreworCXVuaW9uIHsKKwkJdTY0IHd3bjsKKwkJdTggYnl0ZVs4XTsKKwl9IHc7CisKKwl3Lnd3biA9IHd3bjsKKwlzcHJpbnRmKHd3bl9zdHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB3LmJ5dGVbMF0sCisJCXcuYnl0ZVsxXSwgdy5ieXRlWzJdLCB3LmJ5dGVbM10sIHcuYnl0ZVs0XSwgdy5ieXRlWzVdLAorCQl3LmJ5dGVbNl0sIHcuYnl0ZVs3XSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmNpZDJzdHIoY2hhciAqZmNpZF9zdHIsIHUzMiBmY2lkKQoreworCXVuaW9uIHsKKwkJdTMyIGZjaWQ7CisJCXU4IGJ5dGVbNF07CisJfSBmOworCisJZi5mY2lkID0gZmNpZDsKKwlzcHJpbnRmKGZjaWRfc3RyLCAiJTAyeDolMDJ4OiUwMngiLCBmLmJ5dGVbMV0sIGYuYnl0ZVsyXSwgZi5ieXRlWzNdKTsKK30KKworI2VuZGlmIC8qIF9fQkZBX09TX0lOQ19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIxOTAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydC5jCkBAIC0wLDAgKzEsNDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPHBvcnQvYmZhX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9wb3J0Lmg+CisjaW5jbHVkZSA8YmZhX2lvYy5oPgorI2luY2x1ZGUgPGNuYS9iZmFfY25hX3RyY21vZC5oPgorCitCRkFfVFJDX0ZJTEUoQ05BLCBQT1JUKTsKKworI2RlZmluZSBiZmFfaW9jX3BvcnRpZChfX2lvYykgKChfX2lvYyktPnBvcnRfaWQpCisjZGVmaW5lIGJmYV9scHVpZChfX2FyZykgYmZhX2lvY19wb3J0aWQoJihfX2FyZyktPmlvYykKKworc3RhdGljIHZvaWQKK2JmYV9wb3J0X3N0YXRzX3N3YXAoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cykKK3sKKwl1MzIgICAgICAgKmRpcCA9ICh1MzIgKikgc3RhdHM7CisJdTMyICAgICAgICB0MCwgdDE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVuaW9uIGJmYV9wcG9ydF9zdGF0c191KSAvIHNpemVvZih1MzIpOworCSAgICAgaSArPSAyKSB7CisJCXQwID0gZGlwW2ldOworCQl0MSA9IGRpcFtpICsgMV07CisjaWZkZWYgX19CSUdFTkRJQU4KKwkJZGlwW2ldID0gYmZhX29zX250b2hsKHQwKTsKKwkJZGlwW2kgKyAxXSA9IGJmYV9vc19udG9obCh0MSk7CisjZWxzZQorCQlkaXBbaV0gPSBiZmFfb3NfbnRvaGwodDEpOworCQlkaXBbaSArIDFdID0gYmZhX29zX250b2hsKHQwKTsKKyNlbmRpZgorCX0KKworICAgIC8qKiB0b2RvCisgICAgICogUW9TIHN0YXRzIHIgYWxzbyBzd2FwcGVkIGFzIDY0Yml0OyB0aGF0IHN0cnVjdHVyZSBhbHNvCisgICAgICogaGFzIHRvIHVzZSA2NCBiaXQgY291bnRlcnMKKyAgICAgKi8KK30KKworLyoqCisgKiBiZmFfcG9ydF9lbmFibGVfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBwb3J0IC0gUG9pbnRlciB0byB0aGUgcG9ydCBtb2R1bGUKKyAqICAgICAgICAgICAgc3RhdHVzIC0gUmV0dXJuIHN0YXR1cyBmcm9tIHRoZSBmL3cKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2VuYWJsZV9pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJYmZhX2Fzc2VydCgwKTsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIHBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9kaXNhYmxlX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwliZmFfYXNzZXJ0KDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2dldF9zdGF0c19pc3IoKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZQorICogICAgICAgICAgICBzdGF0dXMgLSBSZXR1cm4gc3RhdHVzIGZyb20gdGhlIGYvdworICoKKyAqIEByZXR1cm4gdm9pZAorICovCitzdGF0aWMgdm9pZAorYmZhX3BvcnRfZ2V0X3N0YXRzX2lzcihzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlwb3J0LT5zdGF0c19zdGF0dXMgPSBzdGF0dXM7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9GQUxTRTsKKworCWlmIChzdGF0dXMgPT0gQkZBX1NUQVRVU19PSykgeworCQltZW1jcHkocG9ydC0+c3RhdHMsIHBvcnQtPnN0YXRzX2RtYS5rdmEsCisJCSAgICAgICBzaXplb2YodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UpKTsKKwkJYmZhX3BvcnRfc3RhdHNfc3dhcChwb3J0LCBwb3J0LT5zdGF0cyk7CisJfQorCisJaWYgKHBvcnQtPnN0YXRzX2NiZm4pIHsKKwkJcG9ydC0+c3RhdHNfY2Jmbihwb3J0LT5zdGF0c19jYmFyZywgc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHNfY2JmbiA9IE5VTEw7CisJfQorfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzX2lzcigpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlCisgKiAgICAgICAgICAgIHN0YXR1cyAtIFJldHVybiBzdGF0dXMgZnJvbSB0aGUgZi93CisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcG9ydF9jbGVhcl9zdGF0c19pc3Ioc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpCit7CisJcG9ydC0+c3RhdHNfc3RhdHVzID0gc3RhdHVzOworCXBvcnQtPnN0YXRzX2J1c3kgPSBCRkFfRkFMU0U7CisKKwlpZiAocG9ydC0+c3RhdHNfY2JmbikgeworCQlwb3J0LT5zdGF0c19jYmZuKHBvcnQtPnN0YXRzX2NiYXJnLCBzdGF0dXMpOworCQlwb3J0LT5zdGF0c19jYmZuID0gTlVMTDsKKwl9Cit9CisKKy8qKgorICogYmZhX3BvcnRfaXNyKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9wb3J0X2lzcih2b2lkICpjYmFyZywgc3RydWN0IGJmaV9tYm1zZ19zICptKQoreworCXN0cnVjdCBiZmFfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfcG9ydF9zICopY2Jhcmc7CisJdW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICppMmhtc2c7CisKKwlpMmhtc2cgPSAodW5pb24gYmZpX3BvcnRfaTJoX21zZ191ICopbTsKKwliZmFfdHJjKHBvcnQsIG0tPm1oLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG0tPm1oLm1zZ19pZCkgeworCWNhc2UgQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1A6CisJCWlmIChwb3J0LT5lbmRpc19wZW5kaW5nID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9lbmFibGVfaXNyKHBvcnQsIGkyaG1zZy0+ZW5hYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQOgorCQlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZyA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfZGlzYWJsZV9pc3IocG9ydCwgaTJobXNnLT5kaXNhYmxlX3JzcC5zdGF0dXMpOworCQlicmVhazsKKworCWNhc2UgQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1A6CisJCS8qCisJCSAqIFN0YXRzIGJ1c3kgZmxhZyBpcyBzdGlsbCBzZXQ/IChtYXkgYmUgY21kIHRpbWVkIG91dCkKKwkJICovCisJCWlmIChwb3J0LT5zdGF0c19idXN5ID09IEJGQV9GQUxTRSkKKwkJCWJyZWFrOworCQliZmFfcG9ydF9nZXRfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Z2V0c3RhdHNfcnNwLnN0YXR1cyk7CisJCWJyZWFrOworCisJY2FzZSBCRklfUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQOgorCQlpZiAocG9ydC0+c3RhdHNfYnVzeSA9PSBCRkFfRkFMU0UpCisJCQlicmVhazsKKwkJYmZhX3BvcnRfY2xlYXJfc3RhdHNfaXNyKHBvcnQsIGkyaG1zZy0+Y2xlYXJzdGF0c19yc3Auc3RhdHVzKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9tZW1pbmZvKCkKKyAqCisgKgorICogQHBhcmFtW2luXSB2b2lkCisgKgorICogQHJldHVybiBTaXplIG9mIERNQSByZWdpb24KKyAqLwordTMyCitiZmFfcG9ydF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIEJGQV9ST1VORFVQKHNpemVvZih1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSksIEJGQV9ETUFfQUxJR05fU1opOworfQorCisvKioKKyAqIGJmYV9wb3J0X21lbV9jbGFpbSgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCBQb3J0IG1vZHVsZSBwb2ludGVyCisgKiAJICAgICAgZG1hX2t2YSBLZXJuZWwgVmlydHVhbCBBZGRyZXNzIG9mIFBvcnQgRE1BIE1lbW9yeQorICogCSAgICAgIGRtYV9wYSAgUGh5c2ljYWwgQWRkcmVzcyBvZiBQb3J0IERNQSBNZW1vcnkKKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfbWVtX2NsYWltKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCB1OCAqZG1hX2t2YSwgdTY0IGRtYV9wYSkKK3sKKwlwb3J0LT5zdGF0c19kbWEua3ZhID0gZG1hX2t2YTsKKwlwb3J0LT5zdGF0c19kbWEucGEgPSBkbWFfcGE7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZW5hYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZW5hYmxlIHJlcXVlc3QgdG8gdGhlIGYvdworICoKKyAqIEBwYXJhbVtpbl0gUG9pbnRlciB0byB0aGUgUG9ydCBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogQHJldHVybiBTdGF0dXMKKyAqLworYmZhX3N0YXR1c190CitiZmFfcG9ydF9lbmFibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIGJmYV9wb3J0X2VuZGlzX2NiZm5fdCBjYmZuLAorCQl2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRU5BQkxFX1JFUSwKKwkJICAgIGJmYV9pb2NfcG9ydGlkKHBvcnQtPmlvYykpOworCWJmYV9pb2NfbWJveF9xdWV1ZShwb3J0LT5pb2MsICZwb3J0LT5lbmRpc19tYik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBiZmFfcG9ydF9kaXNhYmxlKCkKKyAqCisgKiAgIFNlbmQgdGhlIFBvcnQgZGlzYWJsZSByZXF1ZXN0IHRvIHRoZSBmL3cKKyAqCisgKiBAcGFyYW1baW5dIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIEByZXR1cm4gU3RhdHVzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX3BvcnRfZGlzYWJsZShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sCisJCSB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCS8qKiB0b2RvIE5vdCBpbXBsZW1lbnRlZCAqLworCWJmYV9hc3NlcnQoMCk7CisKKwlpZiAoIWJmYV9pb2NfaXNfb3BlcmF0aW9uYWwocG9ydC0+aW9jKSkgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUpOworCQlyZXR1cm4gQkZBX1NUQVRVU19JT0NfRkFJTFVSRTsKKwl9CisKKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQliZmFfdHJjKHBvcnQsIEJGQV9TVEFUVVNfREVWQlVTWSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0RFVkJVU1k7CisJfQorCisJbSA9IChzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqKXBvcnQtPmVuZGlzX21iLm1zZzsKKworCXBvcnQtPm1zZ3RhZysrOworCXBvcnQtPmVuZGlzX2NiZm4gPSBjYmZuOworCXBvcnQtPmVuZGlzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9UUlVFOworCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19QT1JULCBCRklfUE9SVF9IMklfRElTQUJMRV9SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+ZW5kaXNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfZ2V0X3N0YXRzKCkKKyAqCisgKiAgIFNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGYvdyB0byBmZXRjaCBQb3J0IHN0YXRpc3RpY3MuCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzLAorCQkgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmaV9wb3J0X2dldF9zdGF0c19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MgKilwb3J0LT5zdGF0c19tYi5tc2c7CisKKwlwb3J0LT5zdGF0cyA9IHN0YXRzOworCXBvcnQtPnN0YXRzX2NiZm4gPSBjYmZuOworCXBvcnQtPnN0YXRzX2NiYXJnID0gY2Jhcmc7CisJcG9ydC0+c3RhdHNfYnVzeSA9IEJGQV9UUlVFOworCWJmYV9kbWFfYmVfYWRkcl9zZXQobS0+ZG1hX2FkZHIsIHBvcnQtPnN0YXRzX2RtYS5wYSk7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9HRVRfU1RBVFNfUkVRLAorCQkgICAgYmZhX2lvY19wb3J0aWQocG9ydC0+aW9jKSk7CisJYmZhX2lvY19tYm94X3F1ZXVlKHBvcnQtPmlvYywgJnBvcnQtPnN0YXRzX21iKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIGJmYV9wb3J0X2NsZWFyX3N0YXRzKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIFN0YXR1cworICovCitiZmFfc3RhdHVzX3QKK2JmYV9wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LCBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2JmbiwKKwkJICAgICB2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyAqbTsKKworCWlmICghYmZhX2lvY19pc19vcGVyYXRpb25hbChwb3J0LT5pb2MpKSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19JT0NfRkFJTFVSRSk7CisJCXJldHVybiBCRkFfU1RBVFVTX0lPQ19GQUlMVVJFOworCX0KKworCWlmIChwb3J0LT5zdGF0c19idXN5KSB7CisJCWJmYV90cmMocG9ydCwgQkZBX1NUQVRVU19ERVZCVVNZKTsKKwkJcmV0dXJuIEJGQV9TVEFUVVNfREVWQlVTWTsKKwl9CisKKwltID0gKHN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zICopcG9ydC0+c3RhdHNfbWIubXNnOworCisJcG9ydC0+c3RhdHNfY2JmbiA9IGNiZm47CisJcG9ydC0+c3RhdHNfY2JhcmcgPSBjYmFyZzsKKwlwb3J0LT5zdGF0c19idXN5ID0gQkZBX1RSVUU7CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1BPUlQsIEJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEsCisJCSAgICBiZmFfaW9jX3BvcnRpZChwb3J0LT5pb2MpKTsKKwliZmFfaW9jX21ib3hfcXVldWUocG9ydC0+aW9jLCAmcG9ydC0+c3RhdHNfbWIpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogYmZhX3BvcnRfaGJmYWlsKCkKKyAqCisgKgorICogQHBhcmFtW2luXSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBAcmV0dXJuIHZvaWQKKyAqLwordm9pZAorYmZhX3BvcnRfaGJmYWlsKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX3BvcnRfcyAqKWFyZzsKKworCS8qCisJICogRmFpbCBhbnkgcGVuZGluZyBnZXRfc3RhdHMvY2xlYXJfc3RhdHMgcmVxdWVzdHMKKwkgKi8KKwlpZiAocG9ydC0+c3RhdHNfYnVzeSkgeworCQlpZiAocG9ydC0+c3RhdHNfY2JmbikKKwkJCXBvcnQtPnN0YXRzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPnN0YXRzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5zdGF0c19idXN5ID0gQkZBX0ZBTFNFOworCX0KKworCS8qCisJICogQ2xlYXIgYW55IGVuYWJsZS9kaXNhYmxlIGlzIHBlbmRpbmcKKwkgKi8KKwlpZiAocG9ydC0+ZW5kaXNfcGVuZGluZykgeworCQlpZiAocG9ydC0+ZW5kaXNfY2JmbikKKwkJCXBvcnQtPmVuZGlzX2NiZm4ocG9ydC0+ZGV2LCBCRkFfU1RBVFVTX0ZBSUxFRCk7CisJCXBvcnQtPmVuZGlzX2NiZm4gPSBOVUxMOworCQlwb3J0LT5lbmRpc19wZW5kaW5nID0gQkZBX0ZBTFNFOworCX0KK30KKworLyoqCisgKiBiZmFfcG9ydF9hdHRhY2goKQorICoKKyAqCisgKiBAcGFyYW1baW5dIHBvcnQgLSBQb2ludGVyIHRvIHRoZSBQb3J0IG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBpb2MgIC0gUG9pbnRlciB0byB0aGUgaW9jIG1vZHVsZSBkYXRhIHN0cnVjdHVyZQorICogICAgICAgICAgICBkZXYgIC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIGRyaXZlciBtb2R1bGUgZGF0YSBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICAgICAgICAgIFRoZSBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIG1ib3ggSVNSIGZ1bmN0aW9ucyBoYXZlCisgKiAgICAgICAgICAgICAgICAgICB0aGlzIHBvaW50ZXIgYXMgb25lIG9mIHRoZSBwYXJhbWV0ZXJzLgorICogICAgICAgICAgICB0cmNtb2QgLQorICogICAgICAgICAgICBsb2dtb2QgLQorICoKKyAqIEByZXR1cm4gdm9pZAorICovCit2b2lkCitiZmFfcG9ydF9hdHRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsIHN0cnVjdCBiZmFfaW9jX3MgKmlvYywgdm9pZCAqZGV2LAorCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCBzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKQoreworCWJmYV9hc3NlcnQocG9ydCk7CisKKwlwb3J0LT5kZXYgPSBkZXY7CisJcG9ydC0+aW9jID0gaW9jOworCXBvcnQtPnRyY21vZCA9IHRyY21vZDsKKwlwb3J0LT5sb2dtb2QgPSBsb2dtb2Q7CisKKwlwb3J0LT5zdGF0c19idXN5ID0gcG9ydC0+ZW5kaXNfcGVuZGluZyA9IEJGQV9GQUxTRTsKKwlwb3J0LT5zdGF0c19jYmZuID0gcG9ydC0+ZW5kaXNfY2JmbiA9IE5VTEw7CisKKwliZmFfaW9jX21ib3hfcmVnaXNyKHBvcnQtPmlvYywgQkZJX01DX1BPUlQsIGJmYV9wb3J0X2lzciwgcG9ydCk7CisJYmZhX2lvY19oYmZhaWxfaW5pdCgmcG9ydC0+aGJmYWlsLCBiZmFfcG9ydF9oYmZhaWwsIHBvcnQpOworCWJmYV9pb2NfaGJmYWlsX3JlZ2lzdGVyKHBvcnQtPmlvYywgJnBvcnQtPmhiZmFpbCk7CisKKwliZmFfdHJjKHBvcnQsIDApOworfQorCisvKioKKyAqIGJmYV9wb3J0X2RldGFjaCgpCisgKgorICoKKyAqIEBwYXJhbVtpbl0gcG9ydCAtIFBvaW50ZXIgdG8gdGhlIFBvcnQgbW9kdWxlIGRhdGEgc3RydWN0dXJlCisgKgorICogQHJldHVybiB2b2lkCisgKi8KK3ZvaWQKK2JmYV9wb3J0X2RldGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfdHJjKHBvcnQsIDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjk3ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcG9ydF9wcml2LmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX1BPUlRfUFJJVl9IX18KKyNkZWZpbmUgX19CRkFfUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGJmaS9iZmlfcHBvcnQuaD4KKyNpbmNsdWRlICJiZmFfaW50cl9wcml2LmgiCisKKy8qKgorICogQkZBIHBoeXNpY2FsIHBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9wcG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX3MgCQkqYmZhOwkvKiAgcGFyZW50IEJGQSBpbnN0YW5jZSAqLworCWJmYV9zbV90CQlzbTsJLyogIHBvcnQgc3RhdGUgbWFjaGluZSAqLworCXd3bl90CQkJbnd3bjsJLyogIG5vZGUgd3duIG9mIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdAkJCXB3d247CS8qICBwb3J0IHd3biBvZiBwaHlzaWNhbCBvcHJ0ICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWRfc3VwOworCQkJCQkvKiAgc3VwcG9ydGVkIHNwZWVkcyAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkOwkvKiAgY3VycmVudCBzcGVlZCAqLworCWVudW0gYmZhX3Bwb3J0X3RvcG9sb2d5IHRvcG9sb2d5OwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXU4CQkJbXlhbHBhOwkvKiAgbXkgQUxQQSBpbiBMT09QIHRvcG9sb2d5ICovCisJdTgJCQlyc3ZkWzNdOworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MJY2ZnOwkvKiAgY3VycmVudCBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgYmZhX3Fvc19hdHRyX3MgIHFvc19hdHRyOyAgIC8qIFFvUyBBdHRyaWJ1dGVzICovCisJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zIHFvc192Y19hdHRyOyAgLyogIFZDIGluZm8gZnJvbSBFTFAgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXJlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAqLworCXN0cnVjdCBiZmFfcmVxcV93YWl0X3MJc3ZjcmVxX3dhaXQ7CisJCQkJCS8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXN0YXRzX3JlcXFfd2FpdDsKKwkJCQkJLyogIHRvIHdhaXQgZm9yIHJvb20gaW4gcmVxcSAoc3RhdHMpICovCisJdm9pZAkJCSpldmVudF9jYmFyZzsKKwl2b2lkCQkJKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCisJCQkJCQliZmFfcHBvcnRfZXZlbnRfdCBldmVudCk7CisJdW5pb24geworCQl1bmlvbiBiZmlfcHBvcnRfaTJoX21zZ191IGkyaG1zZzsKKwl9IGV2ZW50X2FyZzsKKwl2b2lkCQkJKmJmYWQ7CS8qICBCRkEgZHJpdmVyIGhhbmRsZSAqLworCXN0cnVjdCBiZmFfY2JfcWVfcwkJaGNiX3FlOwkvKiAgQkZBIGNhbGxiYWNrIHF1ZXVlIGVsZW0gKi8KKwllbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUJaGNiX2V2ZW50OworCQkJCQkvKiAgbGluayBldmVudCBmb3IgY2FsbGJhY2sgKi8KKwl1MzIJCW1zZ3RhZzsJLyogIGZpbXJ3YXJlIG1zZyB0YWcgZm9yIHJlcGx5ICovCisJdTgJCQkqc3RhdHNfa3ZhOworCXU2NAkJc3RhdHNfcGE7CisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzOwkvKiAgcHBvcnQgc3RhdHMgKi8KKwl1MzIJCW15cGlkIDogMjQ7CisJdTMyCQlyc3ZkX2IgOiA4OworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICB0aW1lciAqLworCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191IAkqc3RhdHNfcmV0OworCQkJCQkvKiAgZHJpdmVyIHN0YXRzIGxvY2F0aW9uICovCisJYmZhX3N0YXR1c190CQlzdGF0c19zdGF0dXM7CisJCQkJCS8qICBzdGF0cy9zdGF0c2NsciBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCXN0YXRzX2J1c3k7CisJCQkJCS8qICBvdXRzdGFuZGluZyBzdGF0cy9zdGF0c2NsciAqLworCWJmYV9ib29sZWFuX3QgICAJc3RhdHNfcWZ1bGw7CisJYmZhX2Jvb2xlYW5fdCAgIAlkaWFnX2J1c3k7CisJCQkJCS8qICBkaWFnIGJ1c3kgc3RhdHVzICovCisJYmZhX2Jvb2xlYW5fdCAgIAliZWFjb247CisJCQkJCS8qICBwb3J0IGJlYWNvbiBzdGF0dXMgKi8KKwliZmFfYm9vbGVhbl90ICAgCWxpbmtfZTJlX2JlYWNvbjsKKwkJCQkJLyogIGxpbmsgYmVhY29uIHN0YXR1cyAqLworCWJmYV9jYl9wcG9ydF90CQlzdGF0c19jYmZuOworCQkJCQkvKiAgZHJpdmVyIGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJCSpzdGF0c19jYmFyZzsKKwkJCQkJLyogKiE8IHVzZXIgY2FsbGJhY2sgYXJnICovCit9OworCisjZGVmaW5lIEJGQV9QT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnBwb3J0KQorCisvKgorICogcHVibGljIGZ1bmN0aW9ucworICovCit2b2lkCWJmYV9wcG9ydF9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisjZW5kaWYgLyogX19CRkFfUE9SVF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NDdhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9wcml2LmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9QUklWX0hfXworI2RlZmluZSBfX0JGQV9QUklWX0hfXworCisjaW5jbHVkZSAiYmZhX2lvY2ZjLmgiCisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorI2luY2x1ZGUgImJmYV90cmNtb2RfcHJpdi5oIgorI2luY2x1ZGUgImJmYV9tb2R1bGVzX3ByaXYuaCIKKyNpbmNsdWRlICJiZmFfZndpbWdfcHJpdi5oIgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlIDxiZmFfdGltZXIuaD4KKworLyoqCisgKiBNYWNybyB0byBkZWZpbmUgYSBuZXcgQkZBIG1vZHVsZQorICovCisjZGVmaW5lIEJGQV9NT0RVTEUoX19tb2QpIAkJCQkJCVwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9tZW1pbmZvKAkJCQlcCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqbmRtX2xlbiwJXAorCQkJdTMyICpkbV9sZW4pOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsCQlcCisJCQl2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIAlcCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywJCQlcCisJCQlzdHJ1Y3QgYmZhX3BjaWRldl9zICpwY2lkZXYpOyAgICAgIFwKKwlzdGF0aWMgdm9pZCBiZmFfICMjIF9fbW9kICMjIF9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2RldGFjaChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKTsgICAgICBcCisJc3RhdGljIHZvaWQgYmZhXyAjIyBfX21vZCAjIyBfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7ICAgICAgXAorCXN0YXRpYyB2b2lkIGJmYV8gIyMgX19tb2QgIyMgX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOyAgICAgIFwKKwkJCQkJCQkJCVwKKwlleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZDsJCQlcCisJc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kXyAjIyBfX21vZCA9IHsJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX21lbWluZm8sCQkJCVwKKwkJYmZhXyAjIyBfX21vZCAjIyBfYXR0YWNoLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2luaXRkb25lLAkJCQlcCisJCWJmYV8gIyMgX19tb2QgIyMgX2RldGFjaCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdGFydCwJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9zdG9wLAkJCQkJXAorCQliZmFfICMjIF9fbW9kICMjIF9pb2NkaXNhYmxlLAkJCQlcCisJfQorCisjZGVmaW5lIEJGQV9DQUNIRUxJTkVfU1oJKDI1NikKKworLyoqCisgKiBTdHJ1Y3R1cmUgdXNlZCB0byBpbnRlcmFjdCBiZXR3ZWVuIGRpZmZlcmVudCBCRkEgc3ViIG1vZHVsZXMKKyAqCisgKiBFYWNoIHN1YiBtb2R1bGUgbmVlZHMgdG8gaW1wbGVtZW50IG9ubHkgdGhlIGVudHJ5IHBvaW50cyByZWxldmFudCB0byBpdCAoYW5kCisgKiBjYW4gbGVhdmUgZW50cnkgcG9pbnRzIGFzIE5VTEwpCisgKi8KK3N0cnVjdCBiZmFfbW9kdWxlX3MgeworCXZvaWQgKCptZW1pbmZvKSAoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJCXUzMiAqZG1fbGVuKTsKKwl2b2lkICgqYXR0YWNoKSAoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7CisJdm9pZCAoKmluaXRkb25lKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpkZXRhY2gpIChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisJdm9pZCAoKnN0YXJ0KSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCpzdG9wKSAoc3RydWN0IGJmYV9zICpiZmEpOworCXZvaWQgKCppb2NkaXNhYmxlKSAoc3RydWN0IGJmYV9zICpiZmEpOworfTsKKworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgKmhhbF9tb2RzW107CisKK3N0cnVjdCBiZmFfcyB7CisJdm9pZAkJCSpiZmFkOwkJLyogIEJGQSBkcml2ZXIgaW5zdGFuY2UgICAgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zCSphZW47CQkvKiAgQUVOIG1vZHVsZQkJICAgICovCisJc3RydWN0IGJmYV9wbG9nX3MJKnBsb2c7CQkvKiAgcG9ydGxvZyBidWZmZXIJICAgICovCisJc3RydWN0IGJmYV9sb2dfbW9kX3MJKmxvZ207CQkvKiAgZHJpdmVyIGxvZ2dpbmcgbW9kdWxlbiAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zCSp0cmNtb2Q7CS8qICBkcml2ZXIgdHJhY2luZwkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY19zCWlvYzsJCS8qICBJT0MgbW9kdWxlCQkgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX3MJaW9jZmM7CQkvKiAgSU9DRkMgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfdGltZXJfbW9kX3MJdGltZXJfbW9kOwkvKiAgdGltZXIgbW9kdWxlCSAgICAqLworCXN0cnVjdCBiZmFfbW9kdWxlc19zCW1vZHVsZXM7CS8qICBCRkEgbW9kdWxlcwkgICAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWNvbXBfcTsJCS8qICBwZW5kaW5nIGNvbXBsZXRpb25zICAgICovCisJYmZhX2Jvb2xlYW5fdAkJcm1lX3Byb2Nlc3M7CS8qICBSTUUgcHJvY2Vzc2luZyBlbmFibGVkICovCisJc3RydWN0IGxpc3RfaGVhZAkJcmVxcV93YWl0cVtCRklfSU9DX01BWF9DUVNdOworCWJmYV9ib29sZWFuX3QJCWZjczsJCS8qICBGQ1MgaXMgYXR0YWNoZWQgdG8gQkZBICovCisJc3RydWN0IGJmYV9tc2l4X3MJbXNpeDsKK307CisKK2V4dGVybiBiZmFfaXNyX2Z1bmNfdCBiZmFfaXNyc1tCRklfTUNfTUFYXTsKK2V4dGVybiBiZmFfaW9jX21ib3hfbWNmdW5jX3QgIGJmYV9tYm94X2lzcnNbXTsKK2V4dGVybiBiZmFfYm9vbGVhbl90IGJmYV9hdXRvX3JlY292ZXI7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX2ZsYXNoOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY2RpYWc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3NncGc7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3Bwb3J0OworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9mY3hwOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9scHM7CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3VmOworZXh0ZXJuIHN0cnVjdCBiZmFfbW9kdWxlX3MgaGFsX21vZF9ycG9ydDsKK2V4dGVybiBzdHJ1Y3QgYmZhX21vZHVsZV9zIGhhbF9tb2RfZmNwaW07CitleHRlcm4gc3RydWN0IGJmYV9tb2R1bGVfcyBoYWxfbW9kX3BiaW5kOworCisjZW5kaWYgLyogX19CRkFfUFJJVl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkYTc3YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0LmMKQEAgLTAsMCArMSw5MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX3Jwb3J0Lmg+CisjaW5jbHVkZSAiYmZhX2ludHJfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoSEFMLCBSUE9SVCk7CitCRkFfTU9EVUxFKHJwb3J0KTsKKworI2RlZmluZSBiZmFfcnBvcnRfb2ZmbGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vZmZsaW5lKChfX3JwKS0+cnBvcnRfZHJ2KTsgICAgICBcCisJZWxzZSB7CQkJCQkJCQlcCisJCWJmYV9jYl9xdWV1ZSgoX19ycCktPmJmYSwgJihfX3JwKS0+aGNiX3FlLAkJXAorCQkJCV9fYmZhX2NiX3Jwb3J0X29mZmxpbmUsIChfX3JwKSk7ICAgICAgXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhX3Jwb3J0X29ubGluZV9jYihfX3JwKSBkbyB7CQkJCVwKKwlpZiAoKF9fcnApLT5iZmEtPmZjcykJCQkJCQlcCisJCWJmYV9jYl9ycG9ydF9vbmxpbmUoKF9fcnApLT5ycG9ydF9kcnYpOyAgICAgIFwKKwllbHNlIHsJCQkJCQkJCVwKKwkJYmZhX2NiX3F1ZXVlKChfX3JwKS0+YmZhLCAmKF9fcnApLT5oY2JfcWUsCQlcCisJCQkJICBfX2JmYV9jYl9ycG9ydF9vbmxpbmUsIChfX3JwKSk7ICAgICAgXAorCQl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9ycG9ydF9tb2RfcyAqcnBfbW9kKTsKK3N0YXRpYyB2b2lkIGJmYV9ycG9ydF9mcmVlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIGJmYV9ib29sZWFuX3QgYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCk7CitzdGF0aWMgdm9pZCBfX2JmYV9jYl9ycG9ydF9vbmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgX19iZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CisKKy8qKgorICogIGJmYV9ycG9ydF9zbSBCRkEgcnBvcnQgc3RhdGUgbWFjaGluZQorICovCisKKworZW51bSBiZmFfcnBvcnRfZXZlbnQgeworCUJGQV9SUE9SVF9TTV9DUkVBVEUJPSAxLAkvKiAgcnBvcnQgY3JlYXRlIGV2ZW50CQkqLworCUJGQV9SUE9SVF9TTV9ERUxFVEUJPSAyLAkvKiAgZGVsZXRpbmcgYW4gZXhpc3RpbmcgcnBvcnQgKi8KKwlCRkFfUlBPUlRfU01fT05MSU5FCT0gMywJLyogIHJwb3J0IGlzIG9ubGluZQkJKi8KKwlCRkFfUlBPUlRfU01fT0ZGTElORQk9IDQsCS8qICBycG9ydCBpcyBvZmZsaW5lCQkqLworCUJGQV9SUE9SVF9TTV9GV1JTUAk9IDUsCS8qICBmaXJtd2FyZSByZXNwb25zZQkJKi8KKwlCRkFfUlBPUlRfU01fSFdGQUlMCT0gNiwJLyogIElPQyBoL3cgZmFpbHVyZQkJKi8KKwlCRkFfUlBPUlRfU01fUU9TX1NDTgk9IDcsCS8qICBRb1MgU0NOIGZyb20gZmlybXdhcmUJKi8KKwlCRkFfUlBPUlRfU01fU0VUX1NQRUVECT0gOCwJLyogIFNldCBScG9ydCBTcGVlZCAJCSovCisJQkZBX1JQT1JUX1NNX1FSRVNVTUUJPSA5LAkvKiAgc3BhY2UgaW4gcmVxdWV1ZSBxdWV1ZQkqLworfTsKKworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fY3JlYXRlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQJYmZhX3Jwb3J0X3NtX29mZmxpbmVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLAorCQkJCQkgIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkCWJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJCSAgICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndjcmVhdGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZAliZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQkJICBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCk7CisKKy8qKgorICogQmVnaW5uaW5nIHN0YXRlLCBvbmx5IG9ubGluZSBldmVudCBleHBlY3RlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zdGF0cyhycCwgc21fdW5fY3IpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fY3JlYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV91bl91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2NyZWF0ZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fY3Jfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fY3JfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBXYWl0aW5nIGZvciBycG9ydCBjcmVhdGUgcmVzcG9uc2UgZnJvbSBmaXJtd2FyZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX3Jwb3J0X29ubGluZV9jYihycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3Y19kZWwpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lX3BlbmRpbmcpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUmVxdWVzdCBxdWV1ZSBpcyBmdWxsLCBhd2FpdGluZyBxdWV1ZSByZXN1bWUgdG8gc2VuZCBjcmVhdGUgcmVxdWVzdC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcmVxcV93Y2FuY2VsKCZycC0+cmVxcV93YWl0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX29mZik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndjX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2NfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPbmxpbmUgc3RhdGUgLSBub3JtYWwgcGFya2luZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgKnFvc19zY247CisKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb25fb2ZmKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3ZGVsZXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2RlbGV0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fREVMRVRFOgorCQliZmFfc3RhdHMocnAsIHNtX29uX2RlbCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmcpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZGVsZXRpbmdfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vbl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fU0VUX1NQRUVEOgorCQliZmFfcnBvcnRfc2VuZF9md3NwZWVkKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9RT1NfU0NOOgorCQlxb3Nfc2NuID0gKHN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zICopIHJwLT5ldmVudF9hcmcuZndfbXNnOworCQlycC0+cW9zX2F0dHIgPSBxb3Nfc2NuLT5uZXdfcW9zX2F0dHI7CisJCWJmYV90cmMocnAtPmJmYSwgcW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkKTsKKwkJYmZhX3RyYyhycC0+YmZhLCBxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQliZmFfdHJjKHJwLT5iZmEsIHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCAgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfZmxvd19pZCk7CisJCXFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgPQorCQkJYmZhX29zX250b2hsKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkpOworCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5ID0KKwkJCWJmYV9vc19udG9obChxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX3ByaW9yaXR5KTsKKworCQlpZiAocW9zX3Njbi0+b2xkX3Fvc19hdHRyLnFvc19mbG93X2lkICE9CisJCQlxb3Nfc2NuLT5uZXdfcW9zX2F0dHIucW9zX2Zsb3dfaWQpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQocnAtPnJwb3J0X2RydiwKKwkJCQkJCSAgICBxb3Nfc2NuLT5vbGRfcW9zX2F0dHIsCisJCQkJCQkgICAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJaWYgKHFvc19zY24tPm9sZF9xb3NfYXR0ci5xb3NfcHJpb3JpdHkgIT0KKwkJCXFvc19zY24tPm5ld19xb3NfYXR0ci5xb3NfcHJpb3JpdHkpCisJCQliZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHJwLT5ycG9ydF9kcnYsCisJCQkJCQkgIHFvc19zY24tPm9sZF9xb3NfYXR0ciwKKwkJCQkJCSAgcW9zX3Njbi0+bmV3X3Fvc19hdHRyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX29uX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogRmlybXdhcmUgcnBvcnQgaXMgYmVpbmcgZGVsZXRlZCAtIGF3YWl0aW5nIGYvdyByZXNwb25zZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9md2RlbGV0ZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9yc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlX3FmdWxsKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3ZGVsZXRlKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9md2RfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZndkX2h3Zik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9pb2NkaXNhYmxlKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmcnAtPnJlcXFfd2FpdCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lX2NiKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc3RhdHMocnAsIHNtX2Z3ZF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIE9mZmxpbmUgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfZGVsKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmX29uKTsKKwkJaWYgKGJmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHJwKSkKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZSk7CisJCWVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9md2NyZWF0ZV9xZnVsbCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZl9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21faW9jZGlzYWJsZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZfdW5leHApOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBScG9ydCBpcyBkZWxldGVkLCB3YWl0aW5nIGZvciBmaXJtd2FyZSByZXNwb25zZSB0byBkZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9GV1JTUDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfZndyc3ApOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9ycG9ydF9mcmVlKHJwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9zbV9kZWxldGluZ19xZnVsbChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwLCBlbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX1FSRVNVTUU6CisJCWJmYV9zdGF0cyhycCwgc21fZGVsX2Z3cnNwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0hXRkFJTDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9kZWxfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9yZXFxX3djYW5jZWwoJnJwLT5yZXFxX3dhaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogV2FpdGluZyBmb3IgcnBvcnQgY3JlYXRlIHJlc3BvbnNlIGZyb20gZmlybXdhcmUuIEEgZGVsZXRlIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fZGVsZXRlX3BlbmRpbmcoc3RydWN0IGJmYV9ycG9ydF9zICpycCwKKwkJCQllbnVtIGJmYV9ycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwLT5iZmEsIHJwLT5ycG9ydF90YWcpOworCWJmYV90cmMocnAtPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1JQT1JUX1NNX0ZXUlNQOgorCQliZmFfc3RhdHMocnAsIHNtX2RlbHBfZndyc3ApOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2RlbGV0aW5nX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF9od2YpOworCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3Jwb3J0X2ZyZWUocnApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fZGVscF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFdhaXRpbmcgZm9yIHJwb3J0IGNyZWF0ZSByZXNwb25zZSBmcm9tIGZpcm13YXJlLiBScG9ydCBvZmZsaW5lIGlzIHBlbmRpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfc21fb2ZmbGluZV9wZW5kaW5nKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnAsCisJCQkJIGVudW0gYmZhX3Jwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnAtPmJmYSwgcnAtPnJwb3J0X3RhZyk7CisJYmZhX3RyYyhycC0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfU01fRldSU1A6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF9md3JzcCk7CisJCWlmIChiZmFfcnBvcnRfc2VuZF9md2RlbGV0ZShycCkpCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGUpOworCQllbHNlCisJCQliZmFfc21fc2V0X3N0YXRlKHJwLCBiZmFfcnBvcnRfc21fZndkZWxldGVfcWZ1bGwpOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9vZmZwX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV9kZWxldGVfcGVuZGluZyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fSFdGQUlMOgorCQliZmFfc3RhdHMocnAsIHNtX29mZnBfaHdmKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zdGF0cyhycCwgc21fb2ZmcF91bmV4cCk7CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIElPQyBoL3cgZmFpbGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3NtX2lvY2Rpc2FibGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCwgZW51bSBiZmFfcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfdGFnKTsKKwliZmFfdHJjKHJwLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9SUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb2ZmKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmVfY2IocnApOworCQlicmVhazsKKworCWNhc2UgQkZBX1JQT1JUX1NNX0RFTEVURToKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX2RlbCk7CisJCWJmYV9zbV9zZXRfc3RhdGUocnAsIGJmYV9ycG9ydF9zbV91bmluaXQpOworCQliZmFfcnBvcnRfZnJlZShycCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfUlBPUlRfU01fT05MSU5FOgorCQliZmFfc3RhdHMocnAsIHNtX2lvY2Rfb24pOworCQlpZiAoYmZhX3Jwb3J0X3NlbmRfZndjcmVhdGUocnApKQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlKTsKKwkJZWxzZQorCQkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX2Z3Y3JlYXRlX3FmdWxsKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9SUE9SVF9TTV9IV0ZBSUw6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3N0YXRzKHJwLCBzbV9pb2NkX3VuZXhwKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHJpdmF0ZSBCRkEgcnBvcnQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorX19iZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnAgPSBjYmFyZzsKKworCWlmIChjb21wbGV0ZSkKKwkJYmZhX2NiX3Jwb3J0X29ubGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycCA9IGNiYXJnOworCisJaWYgKGNvbXBsZXRlKQorCQliZmFfY2JfcnBvcnRfb2ZmbGluZShycC0+cnBvcnRfZHJ2KTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9ycG9ydF9xcmVzdW1lKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfcnBvcnRfcwkqcnAgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fUVJFU1VNRSk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfbWVtaW5mbyhzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsIHUzMiAqa21fbGVuLAorCQl1MzIgKmRtX2xlbikKK3sKKwlpZiAoY2ZnLT5md2NmZy5udW1fcnBvcnRzIDwgQkZBX1JQT1JUX01JTikKKwkJY2ZnLT5md2NmZy5udW1fcnBvcnRzID0gQkZBX1JQT1JUX01JTjsKKworCSprbV9sZW4gKz0gY2ZnLT5md2NmZy5udW1fcnBvcnRzICogc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICAgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycDsKKwl1MTYgICAgICAgIGk7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5ycF9mcmVlX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJwID0gKHN0cnVjdCBiZmFfcnBvcnRfcyAqKSBiZmFfbWVtaW5mb19rdmEobWVtaW5mbyk7CisJbW9kLT5ycHNfbGlzdCA9IHJwOworCW1vZC0+bnVtX3Jwb3J0cyA9IGNmZy0+ZndjZmcubnVtX3Jwb3J0czsKKworCWJmYV9hc3NlcnQobW9kLT5udW1fcnBvcnRzCisJCSAgICYmICEobW9kLT5udW1fcnBvcnRzICYgKG1vZC0+bnVtX3Jwb3J0cyAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fcnBvcnRzOyBpKyssIHJwKyspIHsKKwkJYmZhX29zX21lbXNldChycCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfcykpOworCQlycC0+YmZhID0gYmZhOworCQlycC0+cnBvcnRfdGFnID0gaTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCk7CisKKwkJLyoqCisJCSAqICAtIGlzIHVudXNlZAorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZycC0+cWUsICZtb2QtPnJwX2ZyZWVfcSk7CisKKwkJYmZhX3JlcXFfd2luaXQoJnJwLT5yZXFxX3dhaXQsIGJmYV9ycG9ydF9xcmVzdW1lLCBycCk7CisJfQorCisJLyoqCisJICogY29uc3VtZSBtZW1vcnkKKwkgKi8KKwliZmFfbWVtaW5mb19rdmEobWVtaW5mbykgPSAodTggKikgcnA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW5pdGRvbmUoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X3N0b3Aoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcnBvcnRfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWUsICpxZW47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJm1vZC0+cnBfYWN0aXZlX3EpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9ycG9ydF9zICopIHFlOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX0hXRkFJTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QpCit7CisJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydDsKKworCWJmYV9xX2RlcSgmbW9kLT5ycF9mcmVlX3EsICZycG9ydCk7CisJaWYgKHJwb3J0KQorCQlsaXN0X2FkZF90YWlsKCZycG9ydC0+cWUsICZtb2QtPnJwX2FjdGl2ZV9xKTsKKworCXJldHVybiAocnBvcnQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zICptb2QgPSBCRkFfUlBPUlRfTU9EKHJwb3J0LT5iZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnJwX2FjdGl2ZV9xLCBycG9ydCkpOworCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnJwb3J0LT5xZSwgJm1vZC0+cnBfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3Y3JlYXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnApCit7CisJc3RydWN0IGJmaV9ycG9ydF9jcmVhdGVfcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCWlmICghbSkgeworCQliZmFfcmVxcV93YWl0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JULCAmcnAtPnJlcXFfd2FpdCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9DUkVBVEVfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5iZmFfaGFuZGxlID0gcnAtPnJwb3J0X3RhZzsKKwltLT5tYXhfZnJtc3ogPSBiZmFfb3NfaHRvbnMocnAtPnJwb3J0X2luZm8ubWF4X2ZybXN6KTsKKwltLT5waWQgPSBycC0+cnBvcnRfaW5mby5waWQ7CisJbS0+bHBfdGFnID0gcnAtPnJwb3J0X2luZm8ubHBfdGFnOworCW0tPmxvY2FsX3BpZCA9IHJwLT5ycG9ydF9pbmZvLmxvY2FsX3BpZDsKKwltLT5mY19jbGFzcyA9IHJwLT5ycG9ydF9pbmZvLmZjX2NsYXNzOworCW0tPnZmX2VuID0gcnAtPnJwb3J0X2luZm8udmZfZW47CisJbS0+dmZfaWQgPSBycC0+cnBvcnRfaW5mby52Zl9pZDsKKwltLT5jaXNjID0gcnAtPnJwb3J0X2luZm8uY2lzYzsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZShycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Jwb3J0X3NlbmRfZndkZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZpX3Jwb3J0X2RlbGV0ZV9yZXFfcyAqbTsKKworCS8qKgorCSAqIGNoZWNrIGZvciByb29tIGluIHF1ZXVlIHRvIHNlbmQgcmVxdWVzdCBub3cKKwkgKi8KKwltID0gYmZhX3JlcXFfbmV4dChycC0+YmZhLCBCRkFfUkVRUV9SUE9SVCk7CisJaWYgKCFtKSB7CisJCWJmYV9yZXFxX3dhaXQocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQsICZycC0+cmVxcV93YWl0KTsKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKwl9CisKKwliZmlfaDJpX3NldChtLT5taCwgQkZJX01DX1JQT1JULCBCRklfUlBPUlRfSDJJX0RFTEVURV9SRVEsCisJCQliZmFfbHB1aWQocnAtPmJmYSkpOworCW0tPmZ3X2hhbmRsZSA9IHJwLT5md19oYW5kbGU7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UocnAtPmJmYSwgQkZBX1JFUVFfUlBPUlQpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV9ycG9ydF9zZW5kX2Z3c3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycCkKK3sKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3NwZWVkX3JlcV9zICptOworCisJLyoqCisJICogY2hlY2sgZm9yIHJvb20gaW4gcXVldWUgdG8gc2VuZCByZXF1ZXN0IG5vdworCSAqLworCW0gPSBiZmFfcmVxcV9uZXh0KHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlpZiAoIW0pIHsKKwkJYmZhX3RyYyhycC0+YmZhLCBycC0+cnBvcnRfaW5mby5zcGVlZCk7CisJCXJldHVybiBCRkFfRkFMU0U7CisJfQorCisJYmZpX2gyaV9zZXQobS0+bWgsIEJGSV9NQ19SUE9SVCwgQkZJX1JQT1JUX0gySV9TRVRfU1BFRURfUkVRLAorCQkJYmZhX2xwdWlkKHJwLT5iZmEpKTsKKwltLT5md19oYW5kbGUgPSBycC0+ZndfaGFuZGxlOworCW0tPnNwZWVkID0gKHU4KXJwLT5ycG9ydF9pbmZvLnNwZWVkOworCisJLyoqCisJICogcXVldWUgSS9PIG1lc3NhZ2UgdG8gZmlybXdhcmUKKwkgKi8KKwliZmFfcmVxcV9wcm9kdWNlKHJwLT5iZmEsIEJGQV9SRVFRX1JQT1JUKTsKKwlyZXR1cm4gQkZBX1RSVUU7Cit9CisKKworCisvKioKKyAqICBiZmFfcnBvcnRfcHVibGljCisgKi8KKworLyoqCisgKiAJCVJwb3J0IGludGVycnVwdCBwcm9jZXNzaW5nLgorICovCit2b2lkCitiZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptKQoreworCXVuaW9uIGJmaV9ycG9ydF9pMmhfbXNnX3UgbXNnOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCisJbXNnLm1zZyA9IG07CisKKwlzd2l0Y2ggKG0tPm1oZHIubXNnX2lkKSB7CisJY2FzZSBCRklfUlBPUlRfSTJIX0NSRUFURV9SU1A6CisJCXJwID0gQkZBX1JQT1JUX0ZST01fVEFHKGJmYSwgbXNnLmNyZWF0ZV9yc3AtPmJmYV9oYW5kbGUpOworCQlycC0+ZndfaGFuZGxlID0gbXNnLmNyZWF0ZV9yc3AtPmZ3X2hhbmRsZTsKKwkJcnAtPnFvc19hdHRyID0gbXNnLmNyZWF0ZV9yc3AtPnFvc19hdHRyOworCQliZmFfYXNzZXJ0KG1zZy5jcmVhdGVfcnNwLT5zdGF0dXMgPT0gQkZBX1NUQVRVU19PSyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fRldSU1ApOworCQlicmVhazsKKworCWNhc2UgQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQOgorCQlycCA9IEJGQV9SUE9SVF9GUk9NX1RBRyhiZmEsIG1zZy5kZWxldGVfcnNwLT5iZmFfaGFuZGxlKTsKKwkJYmZhX2Fzc2VydChtc2cuZGVsZXRlX3JzcC0+c3RhdHVzID09IEJGQV9TVEFUVVNfT0spOworCQliZmFfc21fc2VuZF9ldmVudChycCwgQkZBX1JQT1JUX1NNX0ZXUlNQKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGSV9SUE9SVF9JMkhfUU9TX1NDTjoKKwkJcnAgPSBCRkFfUlBPUlRfRlJPTV9UQUcoYmZhLCBtc2cucW9zX3Njbl9ldnQtPmJmYV9oYW5kbGUpOworCQlycC0+ZXZlbnRfYXJnLmZ3X21zZyA9IG1zZy5xb3Nfc2NuX2V2dDsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnAsIEJGQV9SUE9SVF9TTV9RT1NfU0NOKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKGJmYSwgbS0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV9ycG9ydF9hcGkKKyAqLworCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgKgorYmZhX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX3MgKmJmYSwgdm9pZCAqcnBvcnRfZHJ2KQoreworCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnA7CisKKwlycCA9IGJmYV9ycG9ydF9hbGxvYyhCRkFfUlBPUlRfTU9EKGJmYSkpOworCisJaWYgKHJwID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwlycC0+YmZhID0gYmZhOworCXJwLT5ycG9ydF9kcnYgPSBycG9ydF9kcnY7CisJYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHJwKTsKKworCWJmYV9hc3NlcnQoYmZhX3NtX2NtcF9zdGF0ZShycCwgYmZhX3Jwb3J0X3NtX3VuaW5pdCkpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwLCBCRkFfUlBPUlRfU01fQ1JFQVRFKTsKKworCXJldHVybiAocnApOworfQorCit2b2lkCitiZmFfcnBvcnRfZGVsZXRlKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9ERUxFVEUpOworfQorCit2b2lkCitiZmFfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBiZmFfcnBvcnRfaW5mb19zICpycG9ydF9pbmZvKQoreworCWJmYV9hc3NlcnQocnBvcnRfaW5mby0+bWF4X2ZybXN6ICE9IDApOworCisJLyoqCisJICogU29tZSBKQk9EcyBhcmUgc2VlbiB0byBiZSBub3Qgc2V0dGluZyBQRFUgc2l6ZSBjb3JyZWN0bHkgaW4gUExPR0kKKwkgKiByZXNwb25zZXMuIERlZmF1bHQgdG8gbWluaW11bSBzaXplLgorCSAqLworCWlmIChycG9ydF9pbmZvLT5tYXhfZnJtc3ogPT0gMCkgeworCQliZmFfdHJjKHJwb3J0LT5iZmEsIHJwb3J0LT5ycG9ydF90YWcpOworCQlycG9ydF9pbmZvLT5tYXhfZnJtc3ogPSBGQ19NSU5fUERVU1o7CisJfQorCisJYmZhX29zX2Fzc2lnbihycG9ydC0+cnBvcnRfaW5mbywgKnJwb3J0X2luZm8pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBCRkFfUlBPUlRfU01fT05MSU5FKTsKK30KKwordm9pZAorYmZhX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgQkZBX1JQT1JUX1NNX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfcnBvcnRfc3BlZWQoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpCit7CisJYmZhX2Fzc2VydChzcGVlZCAhPSAwKTsKKwliZmFfYXNzZXJ0KHNwZWVkICE9IEJGQV9QUE9SVF9TUEVFRF9BVVRPKTsKKworCXJwb3J0LT5ycG9ydF9pbmZvLnNwZWVkID0gc3BlZWQ7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIEJGQV9SUE9SVF9TTV9TRVRfU1BFRUQpOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gcnBvcnQtPnN0YXRzOworfQorCit2b2lkCitiZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsCisJCQkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpCit7CisJcW9zX2F0dHItPnFvc19wcmlvcml0eSAgPSBiZmFfb3NfbnRvaGwocnBvcnQtPnFvc19hdHRyLnFvc19wcmlvcml0eSk7CisJcW9zX2F0dHItPnFvc19mbG93X2lkICA9IGJmYV9vc19udG9obChycG9ydC0+cW9zX2F0dHIucW9zX2Zsb3dfaWQpOworCit9CisKK3ZvaWQKK2JmYV9ycG9ydF9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9vc19tZW1zZXQoJnJwb3J0LT5zdGF0cywgMCwgc2l6ZW9mKHJwb3J0LT5zdGF0cykpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Jwb3J0X3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkwY2UyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFfcnBvcnRfcHJpdi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9SUE9SVF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9SUE9SVF9QUklWX0hfXworCisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorCisjZGVmaW5lIEJGQV9SUE9SVF9NSU4JNAorCitzdHJ1Y3QgYmZhX3Jwb3J0X21vZF9zIHsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwc19saXN0OwkvKiAgbGlzdCBvZiBycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9mcmVlX3E7CS8qICBmcmVlIGJmYV9ycG9ydHMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAlycF9hY3RpdmVfcTsJLyogIGZyZWUgYmZhX3Jwb3J0cyAJKi8KKwl1MTYJbnVtX3Jwb3J0czsJLyogIG51bWJlciBvZiBycG9ydHMJKi8KK307CisKKyNkZWZpbmUgQkZBX1JQT1JUX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnJwb3J0X21vZCkKKworLyoqCisgKiBDb252ZXJ0IHJwb3J0IHRhZyB0byBSUE9SVAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9GUk9NX1RBRyhfX2JmYSwgX3RhZykJCQkJXAorCShCRkFfUlBPUlRfTU9EKF9fYmZhKS0+cnBzX2xpc3QgKwkJCQlcCisJICgoX3RhZykgJiAoQkZBX1JQT1JUX01PRChfX2JmYSktPm51bV9ycG9ydHMgLSAxKSkpCisKKy8qCisgKiBleHRlcm5hbCBmdW5jdGlvbnMKKyAqLwordm9pZAliZmFfcnBvcnRfaXNyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZpX21zZ19zICptc2cpOworI2VuZGlmIC8qIF9fQkZBX1JQT1JUX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5ZDhmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGcuYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisKK0JGQV9UUkNfRklMRShIQUwsIFNHUEcpOworQkZBX01PRFVMRShzZ3BnKTsKKworLyoqCisgKiAgYmZhX3NncGdfbW9kIEJGQSBTR1BHIE1vZGUgbW9kdWxlCisgKi8KKworLyoqCisgKiBDb21wdXRlIGFuZCByZXR1cm4gbWVtb3J5IG5lZWRlZCBieSBGQ1AoaW0pIG1vZHVsZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLCB1MzIgKmttX2xlbiwKKwkJdTMyICpkbV9sZW4pCit7CisJaWYgKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyA8IEJGQV9TR1BHX01JTikKKwkJY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gQkZBX1NHUEdfTUlOOworCisJKmttX2xlbiArPSAoY2ZnLT5kcnZjZmcubnVtX3NncGdzICsgMSkgKiBzaXplb2Yoc3RydWN0IGJmYV9zZ3BnX3MpOworCSpkbV9sZW4gKz0gKGNmZy0+ZHJ2Y2ZnLm51bV9zZ3BncyArIDEpICogc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKTsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX3NncGdfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCSAgICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWluZm8sIHN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldikKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MJKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCWludAkJCQlpOworCXN0cnVjdCBiZmFfc2dwZ19zCQkqaHNncGc7CisJc3RydWN0IGJmaV9zZ3BnX3MgCSpzZ3BnOworCXU2NAkJYWxpZ25fbGVuOworCisJdW5pb24geworCQl1NjQgICAgICAgIHBhOworCQl1bmlvbiBiZmlfYWRkcl91ICAgICAgYWRkcjsKKwl9IHNncGdfcGE7CisKKwlJTklUX0xJU1RfSEVBRCgmbW9kLT5zZ3BnX3EpOworCUlOSVRfTElTVF9IRUFEKCZtb2QtPnNncGdfd2FpdF9xKTsKKworCWJmYV90cmMoYmZhLCBjZmctPmRydmNmZy5udW1fc2dwZ3MpOworCisJbW9kLT5udW1fc2dwZ3MgPSBjZmctPmRydmNmZy5udW1fc2dwZ3M7CisJbW9kLT5zZ3BnX2Fycl9wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pbmZvKTsKKwlhbGlnbl9sZW4gPSAoQkZBX1NHUEdfUk9VTkRVUChtb2QtPnNncGdfYXJyX3BhKSAtIG1vZC0+c2dwZ19hcnJfcGEpOworCW1vZC0+c2dwZ19hcnJfcGEgKz0gYWxpZ25fbGVuOworCW1vZC0+aHNncGdfYXJyID0gKHN0cnVjdCBiZmFfc2dwZ19zICopIChiZmFfbWVtaW5mb19rdmEobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisJbW9kLT5zZ3BnX2FyciA9IChzdHJ1Y3QgYmZpX3NncGdfcyAqKSAoYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pICsKKwkJCQkJCWFsaWduX2xlbik7CisKKwloc2dwZyA9IG1vZC0+aHNncGdfYXJyOworCXNncGcgPSBtb2QtPnNncGdfYXJyOworCXNncGdfcGEucGEgPSBtb2QtPnNncGdfYXJyX3BhOworCW1vZC0+ZnJlZV9zZ3BncyA9IG1vZC0+bnVtX3NncGdzOworCisJYmZhX2Fzc2VydCghKHNncGdfcGEucGEgJiAoc2l6ZW9mKHN0cnVjdCBiZmlfc2dwZ19zKSAtIDEpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fc2dwZ3M7IGkrKykgeworCQliZmFfb3NfbWVtc2V0KGhzZ3BnLCAwLCBzaXplb2YoKmhzZ3BnKSk7CisJCWJmYV9vc19tZW1zZXQoc2dwZywgMCwgc2l6ZW9mKCpzZ3BnKSk7CisKKwkJaHNncGctPnNncGcgPSBzZ3BnOworCQloc2dwZy0+c2dwZ19wYSA9IHNncGdfcGEuYWRkcjsKKwkJbGlzdF9hZGRfdGFpbCgmaHNncGctPnFlLCAmbW9kLT5zZ3BnX3EpOworCisJCWhzZ3BnKys7CisJCXNncGcrKzsKKwkJc2dwZ19wYS5wYSArPSBzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpOworCX0KKworCWJmYV9tZW1pbmZvX2t2YShtaW5mbykgPSAodTggKikgaHNncGc7CisJYmZhX21lbWluZm9fZG1hX3ZpcnQobWluZm8pID0gKHU4ICopIHNncGc7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWluZm8pID0gc2dwZ19wYS5wYTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9zZ3BnX2luaXRkb25lKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfc2dwZ19zdG9wKHN0cnVjdCBiZmFfcyAqYmZhKQoreworfQorCitzdGF0aWMgdm9pZAorYmZhX3NncGdfaW9jZGlzYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworCisKKy8qKgorICogIGJmYV9zZ3BnX3B1YmxpYyBCRkEgU0dQRyBwdWJsaWMgZnVuY3Rpb25zCisgKi8KKworYmZhX3N0YXR1c190CitiZmFfc2dwZ19tYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BncykKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCXN0cnVjdCBiZmFfc2dwZ19zICpoc2dwZzsKKwlpbnQgICAgICAgICAgICAgaTsKKworCWJmYV90cmNfZnAoYmZhLCBuc2dwZ3MpOworCisJaWYgKG1vZC0+ZnJlZV9zZ3BncyA8IG5zZ3BncykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IG5zZ3BnczsgaSsrKSB7CisJCWJmYV9xX2RlcSgmbW9kLT5zZ3BnX3EsICZoc2dwZyk7CisJCWJmYV9hc3NlcnQoaHNncGcpOworCQlsaXN0X2FkZF90YWlsKCZoc2dwZy0+cWUsIHNncGdfcSk7CisJfQorCisJbW9kLT5mcmVlX3NncGdzIC09IG5zZ3BnczsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKwordm9pZAorYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisJc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWU7CisKKwliZmFfdHJjX2ZwKGJmYSwgbnNncGcpOworCisJbW9kLT5mcmVlX3NncGdzICs9IG5zZ3BnOworCWJmYV9hc3NlcnQobW9kLT5mcmVlX3NncGdzIDw9IG1vZC0+bnVtX3NncGdzKTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChzZ3BnX3EsICZtb2QtPnNncGdfcSk7CisKKwlpZiAobGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpCisJCXJldHVybjsKKworCS8qKgorCSAqIHNhdGlzZnkgYXMgbWFueSB3YWl0aW5nIHJlcXVlc3RzIGFzIHBvc3NpYmxlCisJICovCisJZG8geworCQl3cWUgPSBiZmFfcV9maXJzdCgmbW9kLT5zZ3BnX3dhaXRfcSk7CisJCWlmIChtb2QtPmZyZWVfc2dwZ3MgPCB3cWUtPm5zZ3BnKQorCQkJbnNncGcgPSBtb2QtPmZyZWVfc2dwZ3M7CisJCWVsc2UKKwkJCW5zZ3BnID0gd3FlLT5uc2dwZzsKKwkJYmZhX3NncGdfbWFsbG9jKGJmYSwgJndxZS0+c2dwZ19xLCBuc2dwZyk7CisJCXdxZS0+bnNncGcgLT0gbnNncGc7CisJCWlmICh3cWUtPm5zZ3BnID09IDApIHsKKwkJCWxpc3RfZGVsKCZ3cWUtPnFlKTsKKwkJCXdxZS0+Y2Jmbih3cWUtPmNiYXJnKTsKKwkJfQorCX0gd2hpbGUgKG1vZC0+ZnJlZV9zZ3BncyAmJiAhbGlzdF9lbXB0eSgmbW9kLT5zZ3BnX3dhaXRfcSkpOworfQorCit2b2lkCitiZmFfc2dwZ193YWl0KHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwgaW50IG5zZ3BnKQoreworCXN0cnVjdCBiZmFfc2dwZ19tb2RfcyAqbW9kID0gQkZBX1NHUEdfTU9EKGJmYSk7CisKKwliZmFfYXNzZXJ0KG5zZ3BnID4gMCk7CisJYmZhX2Fzc2VydChuc2dwZyA+IG1vZC0+ZnJlZV9zZ3Bncyk7CisKKwl3cWUtPm5zZ3BnX3RvdGFsID0gd3FlLT5uc2dwZyA9IG5zZ3BnOworCisJLyoqCisJICogYWxsb2NhdGUgYW55IGxlZnQgdG8gdGhpcyBvbmUgZmlyc3QKKwkgKi8KKwlpZiAobW9kLT5mcmVlX3NncGdzKSB7CisJCS8qKgorCQkgKiBubyBvbmUgZWxzZSBpcyB3YWl0aW5nIGZvciBTR1BHCisJCSAqLworCQliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJm1vZC0+c2dwZ193YWl0X3EpKTsKKwkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtb2QtPnNncGdfcSwgJndxZS0+c2dwZ19xKTsKKwkJd3FlLT5uc2dwZyAtPSBtb2QtPmZyZWVfc2dwZ3M7CisJCW1vZC0+ZnJlZV9zZ3BncyA9IDA7CisJfQorCisJbGlzdF9hZGRfdGFpbCgmd3FlLT5xZSwgJm1vZC0+c2dwZ193YWl0X3EpOworfQorCit2b2lkCitiZmFfc2dwZ193Y2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSkKK3sKKwlzdHJ1Y3QgYmZhX3NncGdfbW9kX3MgKm1vZCA9IEJGQV9TR1BHX01PRChiZmEpOworCisJYmZhX2Fzc2VydChiZmFfcV9pc19vbl9xKCZtb2QtPnNncGdfd2FpdF9xLCB3cWUpKTsKKwlsaXN0X2RlbCgmd3FlLT5xZSk7CisKKwlpZiAod3FlLT5uc2dwZ190b3RhbCAhPSB3cWUtPm5zZ3BnKQorCQliZmFfc2dwZ19tZnJlZShiZmEsICZ3cWUtPnNncGdfcSwKKwkJCQkgICB3cWUtPm5zZ3BnX3RvdGFsIC0gd3FlLT5uc2dwZyk7Cit9CisKK3ZvaWQKK2JmYV9zZ3BnX3dpbml0KHN0cnVjdCBiZmFfc2dwZ193cWVfcyAqd3FlLCB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwKKwkJICAgdm9pZCAqY2JhcmcpCit7CisJSU5JVF9MSVNUX0hFQUQoJndxZS0+c2dwZ19xKTsKKwl3cWUtPmNiZm4gPSBjYmZuOworCXdxZS0+Y2JhcmcgPSBjYmFyZzsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NncGdfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMmE4Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV9zZ3BnX3ByaXYuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGhhbF9zZ3BnLmggQkZBIFNHIHBhZ2UgbW9kdWxlCisgKi8KKworI2lmbmRlZiBfX0JGQV9TR1BHX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1NHUEdfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisKKyNkZWZpbmUgQkZBX1NHUEdfTUlOCSgxNikKKworLyoqCisgKiBBbGlnbm1lbnQgbWFjcm8gZm9yIFNHIHBhZ2UgYWxsb2NhdGlvbgorICovCisjZGVmaW5lIEJGQV9TR1BHX1JPVU5EVVAoX2wpICgoKF9sKSArIChzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpIFwKKwkJCSYgfihzaXplb2Yoc3RydWN0IGJmaV9zZ3BnX3MpIC0gMSkpCisKK3N0cnVjdCBiZmFfc2dwZ193cWVfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBxZTsJLyogIHF1ZXVlIHNnIHBhZ2UgZWxlbWVudAkqLworCWludAluc2dwZzsJCS8qICBwYWdlcyB0byBiZSBhbGxvY2F0ZWQJKi8KKwlpbnQJbnNncGdfdG90YWw7CS8qICB0b3RhbCBwYWdlcyByZXF1aXJlZAkqLworCXZvaWQJKCpjYmZuKSAodm9pZCAqY2JhcmcpOworCQkJCS8qICBjYWxsYmFjayBmdW5jdGlvbgkJKi8KKwl2b2lkCSpjYmFyZzsJCS8qICBjYWxsYmFjayBhcmcJCSovCisJc3RydWN0IGxpc3RfaGVhZCBzZ3BnX3E7CS8qICBxdWV1ZSBvZiBhbGxvY2VkIHNncGdzCSovCit9OworCitzdHJ1Y3QgYmZhX3NncGdfcyB7CisJc3RydWN0IGxpc3RfaGVhZCAJcWU7CS8qICBxdWV1ZSBzZyBwYWdlIGVsZW1lbnQJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZzsgLyogIHZhIG9mIFNHIHBhZ2UJCSovCisJdW5pb24gYmZpX2FkZHJfdSBzZ3BnX3BhOy8qICBwYSBvZiBTRyBwYWdlCQkqLworfTsKKworLyoqCisgKiBHaXZlbiBudW1iZXIgb2YgU0cgZWxlbWVudHMsIEJGQV9TR1BHX05QQUdFKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgKiBTRyBwYWdlcyByZXF1aXJlZC4KKyAqLworI2RlZmluZSBCRkFfU0dQR19OUEFHRShfbnNnZXMpICAoKChfbnNnZXMpIC8gQkZJX1NHUEdfREFUQV9TR0VTKSArIDEpCisKK3N0cnVjdCBiZmFfc2dwZ19tb2RfcyB7CisJc3RydWN0IGJmYV9zICpiZmE7CisJaW50CQludW1fc2dwZ3M7CS8qICBudW1iZXIgb2YgU0cgcGFnZXMJCSovCisJaW50CQlmcmVlX3NncGdzOwkvKiAgbnVtYmVyIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgYmZhX3NncGdfcyAqaHNncGdfYXJyOwkvKiAgQkZBIFNHIHBhZ2UgYXJyYXkJKi8KKwlzdHJ1Y3QgYmZpX3NncGdfcyAqc2dwZ19hcnI7CS8qICBhY3R1YWwgU0cgcGFnZSBhcnJheQkqLworCXU2NAlzZ3BnX2Fycl9wYTsJLyogIFNHIHBhZ2UgYXJyYXkgRE1BIGFkZHIJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfcTsJLyogIHF1ZXVlIG9mIGZyZWUgU0cgcGFnZXMJKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNncGdfd2FpdF9xOyAvKiAgd2FpdCBxdWV1ZSBmb3IgU0cgcGFnZXMJKi8KK307CisjZGVmaW5lIEJGQV9TR1BHX01PRChfX2JmYSkJKCYoX19iZmEpLT5tb2R1bGVzLnNncGdfbW9kKQorCitiZmFfc3RhdHVzX3QJYmZhX3NncGdfbWFsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgbGlzdF9oZWFkICpzZ3BnX3EsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfbWZyZWUoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBsaXN0X2hlYWQgKnNncGdfcSwKKwkJCQkJCQkJaW50IG5zZ3Bncyk7Cit2b2lkCQliZmFfc2dwZ193aW5pdChzdHJ1Y3QgYmZhX3NncGdfd3FlX3MgKndxZSwKKwkJCQkgICB2b2lkICgqY2JmbikgKHZvaWQgKmNiYXJnKSwgdm9pZCAqY2JhcmcpOwordm9pZAkJYmZhX3NncGdfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUsCisJCQkJCQkJCWludCBuc2dwZ3MpOwordm9pZAkJYmZhX3NncGdfd2NhbmNlbChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9zZ3BnX3dxZV9zICp3cWUpOworCisjZW5kaWYgLyogX19CRkFfU0dQR19QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfc20uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMGY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3NtLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFzbS5jIEJGQSBTdGF0ZSBtYWNoaW5lIHV0aWxpdHkgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorCisvKioKKyAqICBjc19zbV9hcGkKKyAqLworCitpbnQKK2JmYV9zbV90b19zdGF0ZShzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgKnNtdCwgYmZhX3NtX3Qgc20pCit7CisJaW50ICAgICAgICAgICAgIGkgPSAwOworCisJd2hpbGUgKHNtdFtpXS5zbSAmJiBzbXRbaV0uc20gIT0gc20pCisJCWkrKzsKKwlyZXR1cm4gc210W2ldLnN0YXRlOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RpbWVyLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNzY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV90aW1lci5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYV90aW1lci5oPgorI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorCit2b2lkCitiZmFfdGltZXJfaW5pdChzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QpCit7CisJSU5JVF9MSVNUX0hFQUQoJm1vZC0+dGltZXJfcSk7Cit9CisKK3ZvaWQKK2JmYV90aW1lcl9iZWF0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWggPSAmbW9kLT50aW1lcl9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlX25leHQ7CisJc3RydWN0IGJmYV90aW1lcl9zICplbGVtOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB0aW1lZG91dF9xOworCisJSU5JVF9MSVNUX0hFQUQoJnRpbWVkb3V0X3EpOworCisJcWUgPSBiZmFfcV9uZXh0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlxZV9uZXh0ID0gYmZhX3FfbmV4dChxZSk7CisKKwkJZWxlbSA9IChzdHJ1Y3QgYmZhX3RpbWVyX3MgKikgcWU7CisJCWlmIChlbGVtLT50aW1lb3V0IDw9IEJGQV9USU1FUl9GUkVRKSB7CisJCQllbGVtLT50aW1lb3V0ID0gMDsKKwkJCWxpc3RfZGVsKCZlbGVtLT5xZSk7CisJCQlsaXN0X2FkZF90YWlsKCZlbGVtLT5xZSwgJnRpbWVkb3V0X3EpOworCQl9IGVsc2UgeworCQkJZWxlbS0+dGltZW91dCAtPSBCRkFfVElNRVJfRlJFUTsKKwkJfQorCisJCXFlID0gcWVfbmV4dDsJLyogZ28gdG8gbmV4dCBlbGVtICovCisJfQorCisJLyoKKwkgKiBQb3AgYWxsIHRoZSB0aW1lb3V0IGVudHJpZXMKKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpbWVkb3V0X3EpKSB7CisJCWJmYV9xX2RlcSgmdGltZWRvdXRfcSwgJmVsZW0pOworCQllbGVtLT50aW1lcmNiKGVsZW0tPmFyZyk7CisJfQorfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX2JlZ2luKHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCwgc3RydWN0IGJmYV90aW1lcl9zICp0aW1lciwKKwkJICAgIHZvaWQgKCp0aW1lcmNiKSAodm9pZCAqKSwgdm9pZCAqYXJnLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKK3sKKworCWJmYV9hc3NlcnQodGltZXJjYiAhPSBOVUxMKTsKKwliZmFfYXNzZXJ0KCFiZmFfcV9pc19vbl9xKCZtb2QtPnRpbWVyX3EsIHRpbWVyKSk7CisKKwl0aW1lci0+dGltZW91dCA9IHRpbWVvdXQ7CisJdGltZXItPnRpbWVyY2IgPSB0aW1lcmNiOworCXRpbWVyLT5hcmcgPSBhcmc7CisKKwlsaXN0X2FkZF90YWlsKCZ0aW1lci0+cWUsICZtb2QtPnRpbWVyX3EpOworfQorCisvKioKKyAqIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBsb2NrIHByb3RlY3Rpb24KKyAqLwordm9pZAorYmZhX3RpbWVyX3N0b3Aoc3RydWN0IGJmYV90aW1lcl9zICp0aW1lcikKK3sKKwliZmFfYXNzZXJ0KCFsaXN0X2VtcHR5KCZ0aW1lci0+cWUpKTsKKworCWxpc3RfZGVsKCZ0aW1lci0+cWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHJjbW9kX3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1NjJkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3RyY21vZF9wcml2LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBoYWxfdHJjbW9kLmggQkZBIHRyYWNlIG1vZHVsZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX1RSQ01PRF9QUklWX0hfXworI2RlZmluZSBfX0JGQV9UUkNNT0RfUFJJVl9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19IQUxfSU9DCQk9IDEsCisJQkZBX1RSQ19IQUxfSU5UUgk9IDIsCisJQkZBX1RSQ19IQUxfRkNYUAk9IDMsCisJQkZBX1RSQ19IQUxfVUYJCT0gNCwKKwlCRkFfVFJDX0hBTF9ESUFHCT0gNSwKKwlCRkFfVFJDX0hBTF9SUE9SVAk9IDYsCisJQkZBX1RSQ19IQUxfRkNQSU0JPSA3LAorCUJGQV9UUkNfSEFMX0lPSU0JPSA4LAorCUJGQV9UUkNfSEFMX1RTS0lNCT0gOSwKKwlCRkFfVFJDX0hBTF9JVE5JTQk9IDEwLAorCUJGQV9UUkNfSEFMX1BQT1JUCT0gMTEsCisJQkZBX1RSQ19IQUxfU0dQRwk9IDEyLAorCUJGQV9UUkNfSEFMX0ZMQVNICT0gMTMsCisJQkZBX1RSQ19IQUxfREVCVUcJPSAxNCwKKwlCRkFfVFJDX0hBTF9XV04JCT0gMTUsCisJQkZBX1RSQ19IQUxfRkxBU0hfUkFXCT0gMTYsCisJQkZBX1RSQ19IQUxfU0JPT1QJPSAxNywKKwlCRkFfVFJDX0hBTF9TQk9PVF9JTwk9IDE4LAorCUJGQV9UUkNfSEFMX1NCT09UX0lOVFIJPSAxOSwKKwlCRkFfVFJDX0hBTF9TQlRFU1QJPSAyMCwKKwlCRkFfVFJDX0hBTF9JUEZDCT0gMjEsCisJQkZBX1RSQ19IQUxfSU9DRkMJPSAyMiwKKwlCRkFfVFJDX0hBTF9GQ1BUTQk9IDIzLAorCUJGQV9UUkNfSEFMX0lPVE0JPSAyNCwKKwlCRkFfVFJDX0hBTF9UU0tUTQk9IDI1LAorCUJGQV9UUkNfSEFMX1RJTgkJPSAyNiwKKwlCRkFfVFJDX0hBTF9MUFMJCT0gMjcsCisJQkZBX1RSQ19IQUxfRkNESUFHCT0gMjgsCisJQkZBX1RSQ19IQUxfUEJJTkQJPSAyOSwKKwlCRkFfVFJDX0hBTF9JT0NGQ19DVAk9IDMwLAorCUJGQV9UUkNfSEFMX0lPQ0ZDX0NCCT0gMzEsCisJQkZBX1RSQ19IQUxfSU9DRkNfUQk9IDMyLAorfTsKKworI2VuZGlmIC8qIF9fQkZBX1RSQ01PRF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdHNraW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwZDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3Rza2ltLmMKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9jYl9pb2ltX21hY3Jvcy5oPgorCitCRkFfVFJDX0ZJTEUoSEFMLCBUU0tJTSk7CisKKy8qKgorICogdGFzayBtYW5hZ2VtZW50IGNvbXBsZXRpb24gaGFuZGxpbmcKKyAqLworI2RlZmluZSBiZmFfdHNraW1fcWNvbXAoX190c2tpbSwgX19jYmZuKSBkbyB7CQkJICAgICBcCisJYmZhX2NiX3F1ZXVlKChfX3Rza2ltKS0+YmZhLCAmKF9fdHNraW0pLT5oY2JfcWUsIF9fY2JmbiwgKF9fdHNraW0pKTsgXAorCWJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYV90c2tpbV9ub3RpZnlfY29tcChfX3Rza2ltKSBkbyB7CQkJCSAgICAgXAorCWlmICgoX190c2tpbSktPm5vdGlmeSkJCQkJCSAgICAgCSAgICAgXAorCQliZmFfaXRuaW1fdHNrZG9uZSgoX190c2tpbSktPml0bmltKTsgICAgICBcCit9IHdoaWxlICgwKQorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpOworc3RhdGljIHZvaWQgICAgIF9fYmZhX2NiX3Rza2ltX2ZhaWxlZCh2b2lkICpjYmFyZywgYmZhX2Jvb2xlYW5fdCBjb21wbGV0ZSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fbWF0Y2hfc2NvcGUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJICAgICAgIGx1bl90IGx1bik7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfdHNraW1fY2xlYW51cF9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSk7CitzdGF0aWMgYmZhX2Jvb2xlYW5fdCBiZmFfdHNraW1fc2VuZChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKK3N0YXRpYyBiZmFfYm9vbGVhbl90IGJmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyhzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKTsKKworLyoqCisgKiAgYmZhX3Rza2ltX3NtCisgKi8KKworZW51bSBiZmFfdHNraW1fZXZlbnQgeworCUJGQV9UU0tJTV9TTV9TVEFSVCAgICAgICAgPSAxLCAgLyogIFRNIGNvbW1hbmQgc3RhcnQgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9ET05FICAgICAgICAgPSAyLCAgLyogIFRNIGNvbXBsZXRpb24gICAgICAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9RUkVTVU1FICAgICAgPSAzLCAgLyogIHJlc3VtZSBhZnRlciBxZnVsbCAgICAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IV0ZBSUwgICAgICAgPSA1LCAgLyogIElPQyBoL3cgZmFpbHVyZSBldmVudCAgICAgICAqLworCUJGQV9UU0tJTV9TTV9IQ0IgICAgICAgICAgPSA2LCAgLyogIEJGQSBjYWxsYmFjayBjb21wbGV0aW9uICAgICAqLworCUJGQV9UU0tJTV9TTV9JT1NfRE9ORSAgICAgPSA3LCAgLyogIElPIGFuZCBzdWIgVE0gY29tcGxldGlvbnMgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQICAgICAgPSA4LCAgLyogIFRNIGNsZWFudXAgb24gSVROIG9mZmxpbmUgICAqLworCUJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUgPSA5LCAgLyogIFRNIGFib3J0IGNvbXBsZXRpb24gICAgICAgICAqLworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9jbGVhbnVwKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJCSBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCQkgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9xZnVsbChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLAorCQkJCSAgICAgICBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgICAgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV90c2tpbV9zbV9oY2Ioc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJCQkgICAgIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KTsKKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV91bmluaXQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fU1RBUlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9hY3RpdmUpOworCQliZmFfdHNraW1fZ2F0aGVyX2lvcyh0c2tpbSk7CisKKwkJLyoqCisJCSAqIElmIGRldmljZSBpcyBvZmZsaW5lLCBkbyBub3Qgc2VuZCBUTSBvbiB3aXJlLiBKdXN0IGNsZWFudXAKKwkJICogYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgYW5kIGNvbXBsZXRlIFRNIHJlcXVlc3QuCisJCSAqLworCQlpZiAoIWJmYV9pdG5pbV9pc19vbmxpbmUodHNraW0tPml0bmltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCQl0c2tpbS0+dHNrX3N0YXR1cyA9IEJGSV9UU0tJTV9TVFNfT0s7CisJCQliZmFfdHNraW1fY2xlYW51cF9pb3ModHNraW0pOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKCFiZmFfdHNraW1fc2VuZCh0c2tpbSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodHNraW0sIGJmYV90c2tpbV9zbV9xZnVsbCk7CisJCQliZmFfcmVxcV93YWl0KHRza2ltLT5iZmEsIHRza2ltLT5pdG5pbS0+cmVxcSwKKwkJCQkJICAmdHNraW0tPnJlcXFfd2FpdCk7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBicmllZgorICoJVE0gY29tbWFuZCBpcyBhY3RpdmUsIGF3YWl0aW5nIGNvbXBsZXRpb24gZnJvbSBmaXJtd2FyZSB0bworICoJY2xlYW51cCBJTyByZXF1ZXN0cyBpbiBUTSBzY29wZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV90c2tpbV9zbV9hY3RpdmUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQlpZiAoIWJmYV90c2tpbV9zZW5kX2Fib3J0KHRza2ltKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwpOworCQkJYmZhX3JlcXFfd2FpdCh0c2tpbS0+YmZhLCB0c2tpbS0+aXRuaW0tPnJlcXEsCisJCQkJJnRza2ltLT5yZXFxX3dhaXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqCUFuIGFjdGl2ZSBUTSBpcyBiZWluZyBjbGVhbmVkIHVwIHNpbmNlIElUTiBpcyBvZmZsaW5lLiBBd2FpdGluZyBjbGVhbnVwCisgKgljb21wbGV0aW9uIGV2ZW50IGZyb20gZmlybXdhcmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9ET05FOgorCQkvKioKKwkJICogSWdub3JlIGFuZCB3YWl0IGZvciBBQk9SVCBjb21wbGV0aW9uIGZyb20gZmlybXdhcmUuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0NMRUFOVVBfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2lvY2xlYW51cCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2lvY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltLCBlbnVtIGJmYV90c2tpbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHRza2ltLT5iZmEsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9UU0tJTV9TTV9JT1NfRE9ORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2hjYik7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZG9uZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fQ0xFQU5VUDoKKwkJLyoqCisJCSAqIElnbm9yZSwgVE0gY29tbWFuZCBjb21wbGV0ZWQgb24gd2lyZS4KKwkJICogTm90aWZ5IFRNIGNvbm1wbGV0aW9uIG9uIElPIGNsZWFudXAgY29tcGxldGlvbi4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHRza2ltKTsKKwkJYmZhX3Rza2ltX3Fjb21wKHRza2ltLCBfX2JmYV9jYl90c2tpbV9mYWlsZWQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICAgICAgVGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaXMgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IENRCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21fcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwgZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2FjdGl2ZSk7CisJCWJmYV90c2tpbV9zZW5kKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQkvKioKKwkJICogTm8gbmVlZCB0byBzZW5kIFRNIG9uIHdpcmUgc2luY2UgSVROIGlzIG9mZmxpbmUuCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faW9jbGVhbnVwKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9jbGVhbnVwX2lvcyh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGlzIGFjdGl2ZSwgYXdhaXRpbmcgZm9yIHJvb20gaW4gcmVxdWVzdCBDUQorICoJdG8gc2VuZCBjbGVhbiB1cCByZXF1ZXN0LgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3NtX2NsZWFudXBfcWZ1bGwoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSwKKwkJZW51bSBiZmFfdHNraW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyh0c2tpbS0+YmZhLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfVFNLSU1fU01fRE9ORToKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCS8qKgorCQkgKgorCQkgKiBGYWxsIHRocm91Z2ggISEhCisJCSAqLworCisJY2FzZSBCRkFfVFNLSU1fU01fUVJFU1VNRToKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX2NsZWFudXApOworCQliZmFfdHNraW1fc2VuZF9hYm9ydCh0c2tpbSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfVFNLSU1fU01fSFdGQUlMOgorCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21faGNiKTsKKwkJYmZhX3JlcXFfd2NhbmNlbCgmdHNraW0tPnJlcXFfd2FpdCk7CisJCWJmYV90c2tpbV9pb2NkaXNhYmxlX2lvcyh0c2tpbSk7CisJCWJmYV90c2tpbV9xY29tcCh0c2tpbSwgX19iZmFfY2JfdHNraW1fZmFpbGVkKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAgICAgIEJGQSBjYWxsYmFjayBpcyBwZW5kaW5nCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfdHNraW1fc21faGNiKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGVudW0gYmZhX3Rza2ltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmModHNraW0tPmJmYSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1RTS0lNX1NNX0hDQjoKKwkJYmZhX3NtX3NldF9zdGF0ZSh0c2tpbSwgYmZhX3Rza2ltX3NtX3VuaW5pdCk7CisJCWJmYV90c2tpbV9mcmVlKHRza2ltKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9UU0tJTV9TTV9DTEVBTlVQOgorCQliZmFfdHNraW1fbm90aWZ5X2NvbXAodHNraW0pOworCQlicmVhazsKKworCWNhc2UgQkZBX1RTS0lNX1NNX0hXRkFJTDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9wcml2YXRlCisgKi8KKworc3RhdGljIHZvaWQKK19fYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqY2JhcmcsIGJmYV9ib29sZWFuX3QgY29tcGxldGUpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJaWYgKCFjb21wbGV0ZSkgeworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0hDQik7CisJCXJldHVybjsKKwl9CisKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9zdWNjZXNzKTsKKwliZmFfY2JfdHNraW1fZG9uZSh0c2tpbS0+YmZhLT5iZmFkLCB0c2tpbS0+ZHRzaywgdHNraW0tPnRza19zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZAorX19iZmFfY2JfdHNraW1fZmFpbGVkKHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSBjYmFyZzsKKworCWlmICghY29tcGxldGUpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IQ0IpOworCQlyZXR1cm47CisJfQorCisJYmZhX3N0YXRzKHRza2ltLT5pdG5pbSwgdG1fZmFpbHVyZXMpOworCWJmYV9jYl90c2tpbV9kb25lKHRza2ltLT5iZmEtPmJmYWQsIHRza2ltLT5kdHNrLAorCQkJICAgQkZJX1RTS0lNX1NUU19GQUlMRUQpOworfQorCitzdGF0aWMgICAgICAgICAgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX21hdGNoX3Njb3BlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIGx1bl90IGx1bikKK3sKKwlzd2l0Y2ggKHRza2ltLT50bV9jbW5kKSB7CisJY2FzZSBGQ1BfVE1fVEFSR0VUX1JFU0VUOgorCQlyZXR1cm4gQkZBX1RSVUU7CisKKwljYXNlIEZDUF9UTV9BQk9SVF9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9DTEVBUl9UQVNLX1NFVDoKKwljYXNlIEZDUF9UTV9MVU5fUkVTRVQ6CisJY2FzZSBGQ1BfVE1fQ0xFQVJfQUNBOgorCQlyZXR1cm4gKHRza2ltLT5sdW4gPT0gbHVuKTsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCisJcmV0dXJuIEJGQV9GQUxTRTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2dhdGhlcl9pb3Moc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICppb2ltOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICpxZSwgKnFlbjsKKworCUlOSVRfTElTVF9IRUFEKCZ0c2tpbS0+aW9fcSk7CisKKwkvKioKKwkgKiBHYXRoZXIgYW55IGFjdGl2ZSBJTyByZXF1ZXN0cyBmaXJzdC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJml0bmltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmdHNraW0tPmlvX3EpOworCQl9CisJfQorCisJLyoqCisJICogRmFpbGJhY2sgYW55IHBlbmRpbmcgSU8gcmVxdWVzdHMgaW1tZWRpYXRlbHkuCisJICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZpdG5pbS0+cGVuZGluZ19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWlmIChiZmFfdHNraW1fbWF0Y2hfc2NvcGUKKwkJICAgICh0c2tpbSwgYmZhX2NiX2lvaW1fZ2V0X2x1bihpb2ltLT5kaW8pKSkgeworCQkJbGlzdF9kZWwoJmlvaW0tPnFlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmlvaW0tPnFlLCAmaW9pbS0+ZmNwaW0tPmlvaW1fY29tcF9xKTsKKwkJCWJmYV9pb2ltX3Rvdihpb2ltKTsKKwkJfQorCX0KK30KKworLyoqCisgKiAJCUlPIGNsZWFudXAgY29tcGxldGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFucF9jb21wKHZvaWQgKnRza2ltX2NiYXJnKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0gPSB0c2tpbV9jYmFyZzsKKworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2lvX2NvbXBzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0lPU19ET05FKTsKK30KKworLyoqCisgKiAgICAgIEdhdGhlciBhZmZlY3RlZCBJTyByZXF1ZXN0cyBhbmQgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2NsZWFudXBfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJYmZhX3djX2luaXQoJnRza2ltLT53YywgYmZhX3Rza2ltX2NsZWFucF9jb21wLCB0c2tpbSk7CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJnRza2ltLT5pb19xKSB7CisJCWlvaW0gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgcWU7CisJCWJmYV93Y191cCgmdHNraW0tPndjKTsKKwkJYmZhX2lvaW1fY2xlYW51cF90bShpb2ltLCB0c2tpbSk7CisJfQorCisJYmZhX3djX3dhaXQoJnRza2ltLT53Yyk7Cit9CisKKy8qKgorICogICAgICBTZW5kIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IHRvIGZpcm13YXJlLgorICovCitzdGF0aWMgYmZhX2Jvb2xlYW5fdAorYmZhX3Rza2ltX3NlbmQoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltID0gdHNraW0tPml0bmltOworCXN0cnVjdCBiZmlfdHNraW1fcmVxX3MgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfVE1fUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgPSBiZmFfb3NfaHRvbnModHNraW0tPnRza190YWcpOworCW0tPml0bl9maGRsID0gdHNraW0tPml0bmltLT5ycG9ydC0+ZndfaGFuZGxlOworCW0tPnRfc2VjcyA9IHRza2ltLT50c2VjczsKKwltLT5sdW4gPSB0c2tpbS0+bHVuOworCW0tPnRtX2ZsYWdzID0gdHNraW0tPnRtX2NtbmQ7CisKKwkvKioKKwkgKiBxdWV1ZSBJL08gbWVzc2FnZSB0byBmaXJtd2FyZQorCSAqLworCWJmYV9yZXFxX3Byb2R1Y2UodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCXJldHVybiBCRkFfVFJVRTsKK30KKworLyoqCisgKiAgICAgIFNlbmQgYWJvcnQgcmVxdWVzdCB0byBjbGVhbnVwIGFuIGFjdGl2ZSBUTSB0byBmaXJtd2FyZS4KKyAqLworc3RhdGljIGJmYV9ib29sZWFuX3QKK2JmYV90c2tpbV9zZW5kX2Fib3J0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pdG5pbV9zICAgICAgICAgICAgICppdG5pbSA9IHRza2ltLT5pdG5pbTsKKwlzdHJ1Y3QgYmZpX3Rza2ltX2Fib3J0cmVxX3MgICAgKm07CisKKwkvKioKKwkgKiBjaGVjayBmb3Igcm9vbSBpbiBxdWV1ZSB0byBzZW5kIHJlcXVlc3Qgbm93CisJICovCisJbSA9IGJmYV9yZXFxX25leHQodHNraW0tPmJmYSwgaXRuaW0tPnJlcXEpOworCWlmICghbSkKKwkJcmV0dXJuIEJGQV9GQUxTRTsKKworCS8qKgorCSAqIGJ1aWxkIGkvbyByZXF1ZXN0IG1lc3NhZ2UgbmV4dAorCSAqLworCWJmaV9oMmlfc2V0KG0tPm1oLCBCRklfTUNfVFNLSU0sIEJGSV9UU0tJTV9IMklfQUJPUlRfUkVRLAorCQkJYmZhX2xwdWlkKHRza2ltLT5iZmEpKTsKKworCW0tPnRza190YWcgID0gYmZhX29zX2h0b25zKHRza2ltLT50c2tfdGFnKTsKKworCS8qKgorCSAqIHF1ZXVlIEkvTyBtZXNzYWdlIHRvIGZpcm13YXJlCisJICovCisJYmZhX3JlcXFfcHJvZHVjZSh0c2tpbS0+YmZhLCBpdG5pbS0+cmVxcSk7CisJcmV0dXJuIEJGQV9UUlVFOworfQorCisvKioKKyAqICAgICAgQ2FsbCB0byByZXN1bWUgdGFzayBtYW5hZ2VtZW50IGNtbmQgd2FpdGluZyBmb3Igcm9vbSBpbiByZXF1ZXN0IHF1ZXVlLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX3FyZXN1bWUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSA9IGNiYXJnOworCisJYmZhX2ZjcGltX3N0YXRzKHRza2ltLT5mY3BpbSwgcXJlc3VtZXMpOworCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX3FyZXN1bWVzKTsKKwliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX1FSRVNVTUUpOworfQorCisvKioKKyAqIENsZWFudXAgSU9zIGFzc29jaWF0ZWQgd2l0aCBhIHRhc2sgbWFuZ2VtZW50IGNvbW1hbmQgb24gSU9DIGZhaWx1cmVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX3Rza2ltX2lvY2Rpc2FibGVfaW9zKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJc3RydWN0IGJmYV9pb2ltX3MgKmlvaW07CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ0c2tpbS0+aW9fcSkgeworCQlpb2ltID0gKHN0cnVjdCBiZmFfaW9pbV9zICopIHFlOworCQliZmFfaW9pbV9pb2NkaXNhYmxlKGlvaW0pOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9mcmllbmQKKyAqLworCisvKioKKyAqIE5vdGlmaWNhdGlvbiBvbiBjb21wbGV0aW9ucyBmcm9tIHJlbGF0ZWQgaW9pbS4KKyAqLwordm9pZAorYmZhX3Rza2ltX2lvZG9uZShzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCWJmYV93Y19kb3duKCZ0c2tpbS0+d2MpOworfQorCisvKioKKyAqIEhhbmRsZSBJT0MgaC93IGZhaWx1cmUgbm90aWZpY2F0aW9uIGZyb20gaXRuaW0uCisgKi8KK3ZvaWQKK2JmYV90c2tpbV9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pCit7CisJdHNraW0tPm5vdGlmeSA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9pb2Nkb3ducyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9IV0ZBSUwpOworfQorCisvKioKKyAqIENsZWFudXAgVE0gY29tbWFuZCBhbmQgYXNzb2NpYXRlZCBJT3MgYXMgcGFydCBvZiBJVE5JTSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfdHNraW1fY2xlYW51cChzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltKQoreworCXRza2ltLT5ub3RpZnkgPSBCRkFfVFJVRTsKKwliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwcyk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQKTsKK30KKworLyoqCisgKiAgICAgIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbi4KKyAqLwordm9pZAorYmZhX3Rza2ltX2F0dGFjaChzdHJ1Y3QgYmZhX2ZjcGltX21vZF9zICpmY3BpbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pbmZvKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJdTE2ICAgICAgICBpOworCisJSU5JVF9MSVNUX0hFQUQoJmZjcGltLT50c2tpbV9mcmVlX3EpOworCisJdHNraW0gPSAoc3RydWN0IGJmYV90c2tpbV9zICopIGJmYV9tZW1pbmZvX2t2YShtaW5mbyk7CisJZmNwaW0tPnRza2ltX2FyciA9IHRza2ltOworCisJZm9yIChpID0gMDsgaSA8IGZjcGltLT5udW1fdHNraW1fcmVxczsgaSsrLCB0c2tpbSsrKSB7CisJCS8qCisJCSAqIGluaXRpYWxpemUgVFNLSU0KKwkJICovCisJCWJmYV9vc19tZW1zZXQodHNraW0sIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Rza2ltX3MpKTsKKwkJdHNraW0tPnRza190YWcgPSBpOworCQl0c2tpbS0+YmZhICAgICA9IGZjcGltLT5iZmE7CisJCXRza2ltLT5mY3BpbSAgID0gZmNwaW07CisJCXRza2ltLT5ub3RpZnkgID0gQkZBX0ZBTFNFOworCQliZmFfcmVxcV93aW5pdCgmdHNraW0tPnJlcXFfd2FpdCwgYmZhX3Rza2ltX3FyZXN1bWUsCisJCQkJICAgdHNraW0pOworCQliZmFfc21fc2V0X3N0YXRlKHRza2ltLCBiZmFfdHNraW1fc21fdW5pbml0KTsKKworCQlsaXN0X2FkZF90YWlsKCZ0c2tpbS0+cWUsICZmY3BpbS0+dHNraW1fZnJlZV9xKTsKKwl9CisKKwliZmFfbWVtaW5mb19rdmEobWluZm8pID0gKHU4ICopIHRza2ltOworfQorCit2b2lkCitiZmFfdHNraW1fZGV0YWNoKHN0cnVjdCBiZmFfZmNwaW1fbW9kX3MgKmZjcGltKQoreworICAgIC8qKgorICAgICAqIEB0b2RvCisgICAgICovCit9CisKK3ZvaWQKK2JmYV90c2tpbV9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm0pCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmaV90c2tpbV9yc3BfcyAqcnNwID0gKHN0cnVjdCBiZmlfdHNraW1fcnNwX3MgKikgbTsKKwlzdHJ1Y3QgYmZhX3Rza2ltX3MgKnRza2ltOworCXUxNiAgICAgICAgdHNrX3RhZyA9IGJmYV9vc19udG9ocyhyc3AtPnRza190YWcpOworCisJdHNraW0gPSBCRkFfVFNLSU1fRlJPTV9UQUcoZmNwaW0sIHRza190YWcpOworCWJmYV9hc3NlcnQodHNraW0tPnRza190YWcgPT0gdHNrX3RhZyk7CisKKwl0c2tpbS0+dHNrX3N0YXR1cyA9IHJzcC0+dHNrX3N0YXR1czsKKworCS8qKgorCSAqIEZpcm13YXJlIHNlbmRzIEJGSV9UU0tJTV9TVFNfQUJPUlRFRCBzdGF0dXMgZm9yIGFib3J0CisJICogcmVxdWVzdHMuIEFsbCBvdGhlciBzdGF0dXNlcyBhcmUgZm9yIG5vcm1hbCBjb21wbGV0aW9ucy4KKwkgKi8KKwlpZiAocnNwLT50c2tfc3RhdHVzID09IEJGSV9UU0tJTV9TVFNfQUJPUlRFRCkgeworCQliZmFfc3RhdHModHNraW0tPml0bmltLCB0bV9jbGVhbnVwX2NvbXBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9DTEVBTlVQX0RPTkUpOworCX0gZWxzZSB7CisJCWJmYV9zdGF0cyh0c2tpbS0+aXRuaW0sIHRtX2Z3X3JzcHMpOworCQliZmFfc21fc2VuZF9ldmVudCh0c2tpbSwgQkZBX1RTS0lNX1NNX0RPTkUpOworCX0KK30KKworCisKKy8qKgorICogIGJmYV90c2tpbV9hcGkKKyAqLworCisKK3N0cnVjdCBiZmFfdHNraW1fcyAqCitiZmFfdHNraW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFkX3Rza2ltX3MgKmR0c2spCit7CisJc3RydWN0IGJmYV9mY3BpbV9tb2RfcyAqZmNwaW0gPSBCRkFfRkNQSU1fTU9EKGJmYSk7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKworCWJmYV9xX2RlcSgmZmNwaW0tPnRza2ltX2ZyZWVfcSwgJnRza2ltKTsKKworCWlmICghdHNraW0pCisJCWJmYV9mY3BpbV9zdGF0cyhmY3BpbSwgbm9fdHNraW1zKTsKKwllbHNlCisJCXRza2ltLT5kdHNrID0gZHRzazsKKworCXJldHVybiB0c2tpbTsKK30KKwordm9pZAorYmZhX3Rza2ltX2ZyZWUoc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbSkKK3sKKwliZmFfYXNzZXJ0KGJmYV9xX2lzX29uX3FfZnVuYygmdHNraW0tPml0bmltLT50c2tfcSwgJnRza2ltLT5xZSkpOworCWxpc3RfZGVsKCZ0c2tpbS0+cWUpOworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJnRza2ltLT5mY3BpbS0+dHNraW1fZnJlZV9xKTsKK30KKworLyoqCisgKiAgICAgIFN0YXJ0IGEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQuCisgKgorICogQHBhcmFtW2luXSAgICAgICB0c2tpbSAgICAgICBCRkEgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gICAgICAgaXRuaW0gICAgICAgaS10IG5leHVzIGZvciB0aGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQKKyAqIEBwYXJhbVtpbl0gICAgICAgbHVuICAgICAgICAgbHVuLCBpZiBhcHBsaWNhYmxlCisgKiBAcGFyYW1baW5dICAgICAgIHRtX2NtbmQgICAgIFRhc2sgbWFuYWdlbWVudCBjb21tYW5kIGNvZGUuCisgKiBAcGFyYW1baW5dICAgICAgIHRfc2VjcyAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcworICoKKyAqIEByZXR1cm4gTm9uZS4KKyAqLwordm9pZAorYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sIHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sIGx1bl90IGx1biwKKwkJICAgIGVudW0gZmNwX3RtX2NtbmQgdG1fY21uZCwgdTggdHNlY3MpCit7CisJdHNraW0tPml0bmltICAgPSBpdG5pbTsKKwl0c2tpbS0+bHVuICAgICA9IGx1bjsKKwl0c2tpbS0+dG1fY21uZCA9IHRtX2NtbmQ7CisJdHNraW0tPnRzZWNzICAgPSB0c2VjczsKKwl0c2tpbS0+bm90aWZ5ICA9IEJGQV9GQUxTRTsKKwliZmFfc3RhdHMoaXRuaW0sIHRtX2NtbmRzKTsKKworCWxpc3RfYWRkX3RhaWwoJnRza2ltLT5xZSwgJml0bmltLT50c2tfcSk7CisJYmZhX3NtX3NlbmRfZXZlbnQodHNraW0sIEJGQV9UU0tJTV9TTV9TVEFSVCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFfdWYuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZjlkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX3VmLmMgQkZBIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUgaW1wbGVtZW50YXRpb24KKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGJmaS9iZmlfdWYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworQkZBX1RSQ19GSUxFKEhBTCwgVUYpOworQkZBX01PRFVMRSh1Zik7CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEludGVybmFsIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3N0YXRpYyB2b2lkCitfX2JmYV9jYl91Zl9yZWN2KHZvaWQgKmNiYXJnLCBiZmFfYm9vbGVhbl90IGNvbXBsZXRlKQoreworCXN0cnVjdCBiZmFfdWZfcyAgICp1ZiA9IGNiYXJnOworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QodWYtPmJmYSk7CisKKwlpZiAoY29tcGxldGUpCisJCXVmbS0+dWZyZWN2KHVmbS0+Y2JhcmcsIHVmKTsKK30KKworc3RhdGljIHZvaWQKK2NsYWltX3VmX3BicyhzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwl1MzIgICAgICAgIHVmX3BiX3RvdF9zejsKKworCXVmbS0+dWZfcGJzX2t2YSA9IChzdHJ1Y3QgYmZhX3VmX2J1Zl9zICopIGJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKTsKKwl1Zm0tPnVmX3Bic19wYSA9IGJmYV9tZW1pbmZvX2RtYV9waHlzKG1pKTsKKwl1Zl9wYl90b3Rfc3ogPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogdWZtLT5udW1fdWZzKSwKKwkJCQkJCQlCRkFfRE1BX0FMSUdOX1NaKTsKKworCWJmYV9tZW1pbmZvX2RtYV92aXJ0KG1pKSArPSB1Zl9wYl90b3Rfc3o7CisJYmZhX21lbWluZm9fZG1hX3BoeXMobWkpICs9IHVmX3BiX3RvdF9zejsKKworCWJmYV9vc19tZW1zZXQoKHZvaWQgKil1Zm0tPnVmX3Bic19rdmEsIDAsIHVmX3BiX3RvdF9zeik7Cit9CisKK3N0YXRpYyB2b2lkCitjbGFpbV91Zl9wb3N0X21zZ3Moc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWkpCit7CisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9icF9tc2c7CisJc3RydWN0IGJmaV9zZ2VfcyAgICAgICpzZ2U7CisJdW5pb24gYmZpX2FkZHJfdSAgICAgIHNnYV96ZXJvID0geyB7MH0gfTsKKwl1MTYgICAgICAgIGk7CisJdTE2ICAgICAgICBidWZfbGVuOworCisJdWZtLT51Zl9idWZfcG9zdHMgPSAoc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICopIGJmYV9tZW1pbmZvX2t2YShtaSk7CisJdWZfYnBfbXNnID0gdWZtLT51Zl9idWZfcG9zdHM7CisKKwlmb3IgKGkgPSAwLCB1Zl9icF9tc2cgPSB1Zm0tPnVmX2J1Zl9wb3N0czsgaSA8IHVmbS0+bnVtX3VmczsKKwkgICAgIGkrKywgdWZfYnBfbXNnKyspIHsKKwkJYmZhX29zX21lbXNldCh1Zl9icF9tc2csIDAsIHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpKTsKKworCQl1Zl9icF9tc2ctPmJ1Zl90YWcgPSBpOworCQlidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpOworCQl1Zl9icF9tc2ctPmJ1Zl9sZW4gPSBiZmFfb3NfaHRvbnMoYnVmX2xlbik7CisJCWJmaV9oMmlfc2V0KHVmX2JwX21zZy0+bWgsIEJGSV9NQ19VRiwgQkZJX1VGX0gySV9CVUZfUE9TVCwKKwkJCSAgICBiZmFfbHB1aWQodWZtLT5iZmEpKTsKKworCQlzZ2UgPSB1Zl9icF9tc2ctPnNnZTsKKwkJc2dlWzBdLnNnX2xlbiA9IGJ1Zl9sZW47CisJCXNnZVswXS5mbGFncyA9IEJGSV9TR0VfREFUQV9MQVNUOworCQliZmFfZG1hX2FkZHJfc2V0KHNnZVswXS5zZ2EsIHVmbV9wYnNfcGEodWZtLCBpKSk7CisJCWJmYV9zZ2VfdG9fYmUoc2dlKTsKKworCQlzZ2VbMV0uc2dfbGVuID0gYnVmX2xlbjsKKwkJc2dlWzFdLmZsYWdzID0gQkZJX1NHRV9QR0RMRU47CisJCXNnZVsxXS5zZ2EgPSBzZ2FfemVybzsKKwkJYmZhX3NnZV90b19iZSgmc2dlWzFdKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIHBvaW50ZXIgYmV5b25kIGNvbnN1bWVkIG1lbW9yeQorCSAqLworCWJmYV9tZW1pbmZvX2t2YShtaSkgPSAodTggKikgdWZfYnBfbXNnOworfQorCitzdGF0aWMgdm9pZAorY2xhaW1fdWZzKHN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSwgc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1pKQoreworCXUxNiAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisKKwkvKgorCSAqIENsYWltIGJsb2NrIG9mIG1lbW9yeSBmb3IgVUYgbGlzdAorCSAqLworCXVmbS0+dWZfbGlzdCA9IChzdHJ1Y3QgYmZhX3VmX3MgKikgYmZhX21lbWluZm9fa3ZhKG1pKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBVRnMgYW5kIHF1ZXVlIGl0IGluIFVGIGZyZWUgcXVldWUKKwkgKi8KKwlmb3IgKGkgPSAwLCB1ZiA9IHVmbS0+dWZfbGlzdDsgaSA8IHVmbS0+bnVtX3VmczsgaSsrLCB1ZisrKSB7CisJCWJmYV9vc19tZW1zZXQodWYsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3VmX3MpKTsKKwkJdWYtPmJmYSA9IHVmbS0+YmZhOworCQl1Zi0+dWZfdGFnID0gaTsKKwkJdWYtPnBiX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKTsKKwkJdWYtPmJ1Zl9rdmEgPSAodm9pZCAqKSZ1Zm0tPnVmX3Bic19rdmFbaV07CisJCXVmLT5idWZfcGEgPSB1Zm1fcGJzX3BhKHVmbSwgaSk7CisJCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmbS0+dWZfZnJlZV9xKTsKKwl9CisKKwkvKioKKwkgKiBhZHZhbmNlIG1lbW9yeSBwb2ludGVyCisJICovCisJYmZhX21lbWluZm9fa3ZhKG1pKSA9ICh1OCAqKSB1ZjsKK30KKworc3RhdGljIHZvaWQKK3VmX21lbV9jbGFpbShzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0sIHN0cnVjdCBiZmFfbWVtaW5mb19zICptaSkKK3sKKwljbGFpbV91Zl9wYnModWZtLCBtaSk7CisJY2xhaW1fdWZzKHVmbSwgbWkpOworCWNsYWltX3VmX3Bvc3RfbXNncyh1Zm0sIG1pKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9tZW1pbmZvKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywgdTMyICpuZG1fbGVuLCB1MzIgKmRtX2xlbikKK3sKKwl1MzIgICAgICAgIG51bV91ZnMgPSBjZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCisJLyoKKwkgKiBkbWEtYWJsZSBtZW1vcnkgZm9yIFVGIHBvc3RlZCBidWZzCisJICovCisJKmRtX2xlbiArPSBCRkFfUk9VTkRVUCgoc2l6ZW9mKHN0cnVjdCBiZmFfdWZfYnVmX3MpICogbnVtX3VmcyksCisJCQkJCQkJQkZBX0RNQV9BTElHTl9TWik7CisKKwkvKgorCSAqIGtlcm5lbCBWaXJ0dWFsIG1lbW9yeSBmb3IgVUZzIGFuZCBVRiBidWYgcG9zdCBtc2cgY29waWVzCisJICovCisJKm5kbV9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBiZmFfdWZfcykgKiBudW1fdWZzOworCSpuZG1fbGVuICs9IHNpemVvZihzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MpICogbnVtX3VmczsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9hdHRhY2goc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZywKKwkJICBzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywgc3RydWN0IGJmYV9wY2lkZXZfcyAqcGNpZGV2KQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCWJmYV9vc19tZW1zZXQodWZtLCAwLCBzaXplb2Yoc3RydWN0IGJmYV91Zl9tb2RfcykpOworCXVmbS0+YmZhID0gYmZhOworCXVmbS0+bnVtX3VmcyA9IGNmZy0+ZndjZmcubnVtX3VmX2J1ZnM7CisJSU5JVF9MSVNUX0hFQUQoJnVmbS0+dWZfZnJlZV9xKTsKKwlJTklUX0xJU1RfSEVBRCgmdWZtLT51Zl9wb3N0ZWRfcSk7CisKKwl1Zl9tZW1fY2xhaW0odWZtLCBtZW1pbmZvKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pbml0ZG9uZShzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9kZXRhY2goc3RydWN0IGJmYV9zICpiZmEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3VmX3MgKgorYmZhX3VmX2dldChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJYmZhX3FfZGVxKCZ1Zl9tb2QtPnVmX2ZyZWVfcSwgJnVmKTsKKwlyZXR1cm4gKHVmKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wdXQoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZfbW9kLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCWxpc3RfYWRkX3RhaWwoJnVmLT5xZSwgJnVmX21vZC0+dWZfZnJlZV9xKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhX3VmX3Bvc3Qoc3RydWN0IGJmYV91Zl9tb2RfcyAqdWZtLCBzdHJ1Y3QgYmZhX3VmX3MgKnVmKQoreworCXN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcyAqdWZfcG9zdF9tc2c7CisKKwl1Zl9wb3N0X21zZyA9IGJmYV9yZXFxX25leHQodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCWlmICghdWZfcG9zdF9tc2cpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCWJmYV9vc19tZW1jcHkodWZfcG9zdF9tc2csICZ1Zm0tPnVmX2J1Zl9wb3N0c1t1Zi0+dWZfdGFnXSwKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmlfdWZfYnVmX3Bvc3RfcykpOworCWJmYV9yZXFxX3Byb2R1Y2UodWZtLT5iZmEsIEJGQV9SRVFRX0ZDWFApOworCisJYmZhX3RyYyh1Zm0tPmJmYSwgdWYtPnVmX3RhZyk7CisKKwlsaXN0X2FkZF90YWlsKCZ1Zi0+cWUsICZ1Zm0tPnVmX3Bvc3RlZF9xKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9wb3N0X2FsbChzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zl9tb2QpCit7CisJc3RydWN0IGJmYV91Zl9zICAgKnVmOworCisJd2hpbGUgKCh1ZiA9IGJmYV91Zl9nZXQodWZfbW9kKSkgIT0gTlVMTCkgeworCQlpZiAoYmZhX3VmX3Bvc3QodWZfbW9kLCB1ZikgIT0gQkZBX1NUQVRVU19PSykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3VmX3JlY3Yoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfdWZfZnJtX3JjdmRfcyAqbSkKK3sKKwlzdHJ1Y3QgYmZhX3VmX21vZF9zICp1Zm0gPSBCRkFfVUZfTU9EKGJmYSk7CisJdTE2ICAgICAgICB1Zl90YWcgPSBtLT5idWZfdGFnOworCXN0cnVjdCBiZmFfdWZfYnVmX3MgKnVmX2J1ZiA9ICZ1Zm0tPnVmX3Bic19rdmFbdWZfdGFnXTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWYgPSAmdWZtLT51Zl9saXN0W3VmX3RhZ107CisJdTggICAgICAgICpidWYgPSAmdWZfYnVmLT5kWzBdOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAqZmNoczsKKworCW0tPmZybV9sZW4gPSBiZmFfb3NfbnRvaHMobS0+ZnJtX2xlbik7CisJbS0+eGZyX2xlbiA9IGJmYV9vc19udG9ocyhtLT54ZnJfbGVuKTsKKworCWZjaHMgPSAoc3RydWN0IGZjaHNfcyAqKSB1Zl9idWY7CisKKwlsaXN0X2RlbCgmdWYtPnFlKTsJLyogZGVxdWV1ZSBmcm9tIHBvc3RlZCBxdWV1ZSAqLworCisJdWYtPmRhdGFfcHRyID0gYnVmOworCXVmLT5kYXRhX2xlbiA9IG0tPnhmcl9sZW47CisKKwliZmFfYXNzZXJ0KHVmLT5kYXRhX2xlbiA+PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpOworCisJaWYgKHVmLT5kYXRhX2xlbiA9PSBzaXplb2Yoc3RydWN0IGZjaHNfcykpIHsKKwkJYmZhX3Bsb2dfZmNoZHIoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwgQkZBX1BMX0VJRF9SWCwKKwkJCSAgICAgICB1Zi0+ZGF0YV9sZW4sIChzdHJ1Y3QgZmNoc19zICopIGJ1Zik7CisJfSBlbHNlIHsKKwkJdTMyICAgICAgICBwbGRfdzAgPSAqKCh1MzIgKikgKGJ1ZiArIHNpemVvZihzdHJ1Y3QgZmNoc19zKSkpOworCQliZmFfcGxvZ19mY2hkcl9hbmRfcGwoYmZhLT5wbG9nLCBCRkFfUExfTUlEX0hBTF9VRiwKKwkJCQkgICAgICBCRkFfUExfRUlEX1JYLCB1Zi0+ZGF0YV9sZW4sCisJCQkJICAgICAgKHN0cnVjdCBmY2hzX3MgKikgYnVmLCBwbGRfdzApOworCX0KKworCWJmYV9jYl9xdWV1ZShiZmEsICZ1Zi0+aGNiX3FlLCBfX2JmYV9jYl91Zl9yZWN2LCB1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfdWZfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSkKK3sKK30KKworc3RhdGljIHZvaWQKK2JmYV91Zl9pb2NkaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKwlzdHJ1Y3QgYmZhX3VmX3MgICAqdWY7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgKnFlLCAqcWVuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZW4sICZ1Zm0tPnVmX3Bvc3RlZF9xKSB7CisJCXVmID0gKHN0cnVjdCBiZmFfdWZfcyAqKSBxZTsKKwkJbGlzdF9kZWwoJnVmLT5xZSk7CisJCWJmYV91Zl9wdXQodWZtLCB1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX3VmX3N0YXJ0KHN0cnVjdCBiZmFfcyAqYmZhKQoreworCWJmYV91Zl9wb3N0X2FsbChCRkFfVUZfTU9EKGJmYSkpOworfQorCisKKworLyoqCisgKiAgYmZhX3VmX2FwaQorICovCisKKy8qKgorICogCQlSZWdpc3RlciBoYW5kbGVyIGZvciBhbGwgdW5zb2xpY3RlZCByZWNpZXZlIGZyYW1lcy4KKyAqCisgKiBAcGFyYW1baW5dCWJmYQkJQkZBIGluc3RhbmNlCisgKiBAcGFyYW1baW5dCXVmcmVjdglyZWNlaXZlIGhhbmRsZXIgZnVuY3Rpb24KKyAqIEBwYXJhbVtpbl0JY2JhcmcJcmVjZWl2ZSBoYW5kbGVyIGFyZworICovCit2b2lkCitiZmFfdWZfcmVjdl9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3YsIHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfdWZfbW9kX3MgKnVmbSA9IEJGQV9VRl9NT0QoYmZhKTsKKworCXVmbS0+dWZyZWN2ID0gdWZyZWN2OworCXVmbS0+Y2JhcmcgPSBjYmFyZzsKK30KKworLyoqCisgKiAJCUZyZWUgYW4gdW5zb2xpY2l0ZWQgZnJhbWUgYmFjayB0byBCRkEuCisgKgorICogQHBhcmFtW2luXQkJdWYJCXVuc29saWNpdGVkIGZyYW1lIHRvIGJlIGZyZWVkCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV91Zl9mcmVlKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJYmZhX3VmX3B1dChCRkFfVUZfTU9EKHVmLT5iZmEpLCB1Zik7CisJYmZhX3VmX3Bvc3RfYWxsKEJGQV9VRl9NT0QodWYtPmJmYSkpOworfQorCisKKworLyoqCisgKiAgdWZfcHViIEJGQSB1ZiBtb2R1bGUgcHVibGljIGZ1bmN0aW9ucworICovCisKK3ZvaWQKK2JmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZykKK3sKKwliZmFfdHJjKGJmYSwgbXNnLT5taGRyLm1zZ19pZCk7CisKKwlzd2l0Y2ggKG1zZy0+bWhkci5tc2dfaWQpIHsKKwljYXNlIEJGSV9VRl9JMkhfRlJNX1JDVkQ6CisJCXVmX3JlY3YoYmZhLCAoc3RydWN0IGJmaV91Zl9mcm1fcmN2ZF9zICopIG1zZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3RyYyhiZmEsIG1zZy0+bWhkci5tc2dfaWQpOworCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYV91Zl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNiNDkwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhX3VmX3ByaXYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1VGX1BSSVZfSF9fCisjZGVmaW5lIF9fQkZBX1VGX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV91Zi5oPgorCisjZGVmaW5lIEJGQV9VRl9NSU4JKDQpCisKK3N0cnVjdCBiZmFfdWZfbW9kX3MgeworCXN0cnVjdCBiZmFfcyAqYmZhOwkJLyogIGJhY2sgcG9pbnRlciB0byBCRkEgKi8KKwlzdHJ1Y3QgYmZhX3VmX3MgKnVmX2xpc3Q7CS8qICBhcnJheSBvZiBVRnMgKi8KKwl1MTYJbnVtX3VmczsJLyogIG51bSB1bnNvbGljaXRlZCByeCBmcmFtZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIAl1Zl9mcmVlX3E7CS8qICBmcmVlIFVGcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCXVmX3Bvc3RlZF9xOwkvKiAgVUZzIHBvc3RlZCB0byBJT0MgKi8KKwlzdHJ1Y3QgYmZhX3VmX2J1Zl9zICp1Zl9wYnNfa3ZhOwkvKiAgbGlzdCBVRiBidWZzIHJlcXVlc3QgcGxkICovCisJdTY0CXVmX3Bic19wYTsJLyogIHBoeSBhZGRyIGZvciBVRiBidWZzICovCisJc3RydWN0IGJmaV91Zl9idWZfcG9zdF9zICp1Zl9idWZfcG9zdHM7CisJCQkJCS8qICBwcmUtYnVpbHQgVUYgcG9zdCBtc2dzICovCisJYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3Y7CS8qICB1ZiByZWN2IGhhbmRsZXIgZnVuY3Rpb24gKi8KKwl2b2lkCQkqY2Jhcmc7CQkvKiAgdWYgcmVjZWl2ZSBoYW5kbGVyIGFyZyAqLworfTsKKworI2RlZmluZSBCRkFfVUZfTU9EKF9fYmZhKQkoJihfX2JmYSktPm1vZHVsZXMudWZfbW9kKQorCisjZGVmaW5lIHVmbV9wYnNfcGEoX3VmbW9kLCBfdWZ0YWcpCVwKKwkoKF91Zm1vZCktPnVmX3Bic19wYSArIHNpemVvZihzdHJ1Y3QgYmZhX3VmX2J1Zl9zKSAqIChfdWZ0YWcpKQorCit2b2lkCWJmYV91Zl9pc3Ioc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmlfbXNnX3MgKm1zZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9VRl9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjJiZTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkLmMKQEAgLTAsMCArMSwxMTgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYWQuYyBMaW51eCBkcml2ZXIgUENJIGludGVyZmFjZSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdG0uaCIKKyNpbmNsdWRlICJiZmFkX2lwZmMuaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3ZmLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfcnBvcnQuaD4KKyNpbmNsdWRlIDxmY2IvYmZhX2ZjYl9wb3J0Lmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2IuaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIEJGQUQpOworc3RhdGljIERFRklORV9NVVRFWChiZmFkX211dGV4KTsKK0xJU1RfSEVBRChiZmFkX2xpc3QpOworc3RhdGljIGludCAgICAgIGJmYWRfaW5zdDsKK2ludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworCitzdGF0aWMgY2hhciAgICAgKmhvc3RfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfbmFtZTsKK3N0YXRpYyBjaGFyICAgICAqb3NfcGF0Y2g7CitzdGF0aWMgaW50ICAgICAgbnVtX3Jwb3J0czsKK3N0YXRpYyBpbnQgICAgICBudW1faW9zOworc3RhdGljIGludCAgICAgIG51bV90bXM7CitzdGF0aWMgaW50ICAgICAgbnVtX2ZjeHBzOworc3RhdGljIGludCAgICAgIG51bV91ZmJ1ZnM7CitzdGF0aWMgaW50ICAgICAgcmVxcV9zaXplOworc3RhdGljIGludCAgICAgIHJzcHFfc2l6ZTsKK3N0YXRpYyBpbnQgICAgICBudW1fc2dwZ3M7CitzdGF0aWMgaW50ICAgICAgcnBvcnRfZGVsX3RpbWVvdXQgPSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVDsKK3N0YXRpYyBpbnQgICAgICBiZmFfaW9fbWF4X3NnZSA9IEJGQURfSU9fTUFYX1NHRTsKK3N0YXRpYyBpbnQgICAgICBsb2dfbGV2ZWwgPSBCRkFfTE9HX1dBUk5JTkc7CitzdGF0aWMgaW50ICAgICAgaW9jX2F1dG9fcmVjb3ZlciA9IEJGQV9UUlVFOworc3RhdGljIGludCAgICAgIGlwZmNfZW5hYmxlID0gQkZBX0ZBTFNFOworc3RhdGljIGludCAgICAgIGlwZmNfbXR1ID0gLTE7CitpbnQgCQliZmFfbHVuX3F1ZXVlX2RlcHRoID0gQkZBRF9MVU5fUVVFVUVfREVQVEg7CitpbnQgICAgICAJYmZhX2xpbmt1cF9kZWxheSA9IC0xOworCittb2R1bGVfcGFyYW0ob3NfbmFtZSwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShvc19wYXRjaCwgY2hhcnAsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShob3N0X25hbWUsIGNoYXJwLCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3Jwb3J0cywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2lvcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3RtcywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX2ZjeHBzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShudW1fdWZidWZzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShyZXFxX3NpemUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKHJzcHFfc2l6ZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0obnVtX3NncGdzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShycG9ydF9kZWxfdGltZW91dCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2x1bl9xdWV1ZV9kZXB0aCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oYmZhX2lvX21heF9zZ2UsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGxvZ19sZXZlbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaW9jX2F1dG9fcmVjb3ZlciwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7Cittb2R1bGVfcGFyYW0oaXBmY19lbmFibGUsIGludCwgU19JUlVHTyB8IFNfSVdVU1IpOworbW9kdWxlX3BhcmFtKGlwZmNfbXR1LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK21vZHVsZV9wYXJhbShiZmFfbGlua3VwX2RlbGF5LCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKKworLyoKKyAqIFN0b3JlcyB0aGUgbW9kdWxlIHBhcm0gbnVtX3NncGdzIHZhbHVlOworICogdXNlZCB0byByZXNldCBmb3IgYmZhZCBuZXh0IGluc3RhbmNlLgorICovCitzdGF0aWMgaW50IG51bV9zZ3Bnc19wYXJtOworCitzdGF0aWMgYmZhX3N0YXR1c190CitiZmFkX2ZjNF9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICByYzsKKworCXJjID0gYmZhZF9pbV9wcm9iZShiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX3Byb2JlKGJmYWQpOworCisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmUoYmZhZCk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcHJvYmVfdW5kbyhzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWJmYWRfaW1fcHJvYmVfdW5kbyhiZmFkKTsKKwliZmFkX3RtX3Byb2JlX3VuZG8oYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfdW5kbyhiZmFkKTsKK30KKworc3RhdGljIHZvaWQKK2JmYWRfZmM0X3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pCisJCWJmYWRfaW1fcHJvYmVfcG9zdChiZmFkLT5pbSk7CisKKwliZmFkX3RtX3Byb2JlX3Bvc3QoYmZhZCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcHJvYmVfcG9zdChiZmFkKTsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9mYzRfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkJcmMgPSBiZmFkX2ltX3BvcnRfbmV3KGJmYWQsIHBvcnQpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dDsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlyYyA9IGJmYWRfdG1fcG9ydF9uZXcoYmZhZCwgcG9ydCk7CisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gZXh0OworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQlyYyA9IGJmYWRfaXBmY19wb3J0X25ldyhiZmFkLCBwb3J0LCBwb3J0LT5wdmJfdHlwZSk7CitleHQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYmZhZF9mYzRfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0LCBpbnQgcm9sZXMpCit7CisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9kZWxldGUoYmZhZCwgcG9ydCk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0KTsKKworCWlmICgocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSAmJiBpcGZjX2VuYWJsZSkKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsIHBvcnQpOworfQorCisvKioKKyAqICBCRkEgY2FsbGJhY2tzCisgKi8KK3ZvaWQKK2JmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKQoreworCXN0cnVjdCBiZmFkX2hhbF9jb21wICpmY29tcCA9IChzdHJ1Y3QgYmZhZF9oYWxfY29tcCAqKWFyZzsKKworCWZjb21wLT5zdGF0dXMgPSBzdGF0dXM7CisJY29tcGxldGUoJmZjb21wLT5jb21wKTsKK30KKworLyoqCisgKiBiZmFfaW5pdCBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfaW5pdCh2b2lkICpkcnYsIGJmYV9zdGF0dXNfdCBpbml0X3N0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IGRydjsKKworCWlmIChpbml0X3N0YXR1cyA9PSBCRkFfU1RBVFVTX09LKQorCQliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfSEFMX0lOSVRfRE9ORTsKKworCWNvbXBsZXRlKCZiZmFkLT5jb21wKTsKK30KKworCisKKy8qKgorICogIEJGQV9GQ1MgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhZF9nZXRfZHJ2X3BvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LAorCQkgIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlyZXR1cm4gKCh2cF9kcnYpID8gKCYodnBfZHJ2KS0+ZHJ2X3BvcnQpCisJCTogKCh2Zl9kcnYpID8gKCYodmZfZHJ2KS0+YmFzZV9wb3J0KSA6ICgmKGJmYWQpLT5wcG9ydCkpKTsKK30KKworc3RydWN0IGJmYWRfcG9ydF9zICoKK2JmYV9mY2JfcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCSBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydF9kcnY7CisKKwlpZiAoIXZwX2RydiAmJiAhdmZfZHJ2KSB7CisJCXBvcnRfZHJ2ID0gJmJmYWQtPnBwb3J0OworCQlwb3J0X2Rydi0+cHZiX3R5cGUgPSBCRkFEX1BPUlRfUEhZU19CQVNFOworCX0gZWxzZSBpZiAoIXZwX2RydiAmJiB2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdmZfZHJ2LT5iYXNlX3BvcnQ7CisJCXBvcnRfZHJ2LT5wdmJfdHlwZSA9IEJGQURfUE9SVF9WRl9CQVNFOworCX0gZWxzZSBpZiAodnBfZHJ2ICYmICF2Zl9kcnYpIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1BIWVNfVlBPUlQ7CisJfSBlbHNlIHsKKwkJcG9ydF9kcnYgPSAmdnBfZHJ2LT5kcnZfcG9ydDsKKwkJcG9ydF9kcnYtPnB2Yl90eXBlID0gQkZBRF9QT1JUX1ZGX1ZQT1JUOworCX0KKworCXBvcnRfZHJ2LT5mY3NfcG9ydCA9IHBvcnQ7CisJcG9ydF9kcnYtPnJvbGVzID0gcm9sZXM7CisJcmMgPSBiZmFkX2ZjNF9wb3J0X25ldyhiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYWRfZmM0X3BvcnRfZGVsZXRlKGJmYWQsIHBvcnRfZHJ2LCByb2xlcyk7CisJCXBvcnRfZHJ2ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9ydF9kcnY7Cit9CisKK3ZvaWQKK2JmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydjsKKworCS8qCisJICogdGhpcyB3aWxsIGJlIG9ubHkgY2FsbGVkIGZyb20gcm1tb2QgY29udGV4dAorCSAqLworCWlmICh2cF9kcnYgJiYgIXZwX2Rydi0+Y29tcF9kZWwpIHsKKwkJcG9ydF9kcnYgPSBiZmFkX2dldF9kcnZfcG9ydChiZmFkLCB2Zl9kcnYsIHZwX2Rydik7CisJCWJmYV90cmMoYmZhZCwgcm9sZXMpOworCQliZmFkX2ZjNF9wb3J0X2RlbGV0ZShiZmFkLCBwb3J0X2Rydiwgcm9sZXMpOworCX0KK30KKwordm9pZAorYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnRfZHJ2ID0gYmZhZF9nZXRfZHJ2X3BvcnQoYmZhZCwgdmZfZHJ2LCB2cF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisJCWJmYWRfaW1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKHJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisJCWJmYWRfdG1fcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vbmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1BPUlRfT05MSU5FOworfQorCit2b2lkCitiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCSAgICAgc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0X2RydiA9IGJmYWRfZ2V0X2Rydl9wb3J0KGJmYWQsIHZmX2RydiwgdnBfZHJ2KTsKKworCWlmIChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCQliZmFkX2ltX3BvcnRfb2ZmbGluZShiZmFkLCBwb3J0X2Rydik7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkKKwkJYmZhZF90bV9wb3J0X29mZmxpbmUoYmZhZCwgcG9ydF9kcnYpOworCisJaWYgKChyb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpICYmIGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfcG9ydF9vZmZsaW5lKGJmYWQsIHBvcnRfZHJ2KTsKK30KKwordm9pZAorYmZhX2ZjYl92cG9ydF9kZWxldGUoc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnRfZHJ2KQoreworCWlmICh2cG9ydF9kcnYtPmNvbXBfZGVsKSB7CisJCWNvbXBsZXRlKHZwb3J0X2Rydi0+Y29tcF9kZWwpOworCQlyZXR1cm47CisJfQorCisJa2ZyZWUodnBvcnRfZHJ2KTsKK30KKworLyoqCisgKiBGQ1MgUlBPUlQgYWxsb2MgY2FsbGJhY2ssIGFmdGVyIHN1Y2Nlc3NmdWwgUExPR0kgYnkgRkNTCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoqcnBvcnQsCisJCSAgICBzdHJ1Y3QgYmZhZF9ycG9ydF9zICoqcnBvcnRfZHJ2KQoreworCWJmYV9zdGF0dXNfdCAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkqcnBvcnRfZHJ2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfcnBvcnRfcyksIEdGUF9BVE9NSUMpOworCWlmICgqcnBvcnRfZHJ2ID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJKnJwb3J0ID0gJigqcnBvcnRfZHJ2KS0+ZmNzX3Jwb3J0OworCitleHQ6CisJcmV0dXJuIHJjOworfQorCisKKwordm9pZAorYmZhZF9oYWxfbWVtX3JlbGVhc2Uoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlpZiAobWVtaW5mb19lbGVtLT5rdmEgIT0gTlVMTCkgeworCQkJc3dpdGNoIChtZW1pbmZvX2VsZW0tPm1lbV90eXBlKSB7CisJCQljYXNlIEJGQV9NRU1fVFlQRV9LVkE6CisJCQkJdmZyZWUobWVtaW5mb19lbGVtLT5rdmEpOworCQkJCWJyZWFrOworCQkJY2FzZSBCRkFfTUVNX1RZUEVfRE1BOgorCQkJCWRtYV9mcmVlX2NvaGVyZW50KCZiZmFkLT5wY2lkZXYtPmRldiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+bWVtX2xlbiwKKwkJCQkJCW1lbWluZm9fZWxlbS0+a3ZhLAorCQkJCQkJKGRtYV9hZGRyX3QpIG1lbWluZm9fZWxlbS0+ZG1hKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYmZhX2Fzc2VydCgwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCW1lbXNldChoYWxfbWVtaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfbWVtaW5mb19zKSk7Cit9CisKK3ZvaWQKK2JmYWRfdXBkYXRlX2hhbF9jZmcoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqYmZhX2NmZykKK3sKKwlpZiAobnVtX3Jwb3J0cyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9ycG9ydHMgPSBudW1fcnBvcnRzOworCWlmIChudW1faW9zID4gMCkKKwkJYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxcyA9IG51bV9pb3M7CisJaWYgKG51bV90bXMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdHNraW1fcmVxcyA9IG51bV90bXM7CisJaWYgKG51bV9mY3hwcyA+IDApCisJCWJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXMgPSBudW1fZmN4cHM7CisJaWYgKG51bV91ZmJ1ZnMgPiAwKQorCQliZmFfY2ZnLT5md2NmZy5udW1fdWZfYnVmcyA9IG51bV91ZmJ1ZnM7CisJaWYgKHJlcXFfc2l6ZSA+IDApCisJCWJmYV9jZmctPmRydmNmZy5udW1fcmVxcV9lbGVtcyA9IHJlcXFfc2l6ZTsKKwlpZiAocnNwcV9zaXplID4gMCkKKwkJYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9yc3BxX2VsZW1zID0gcnNwcV9zaXplOworCWlmIChudW1fc2dwZ3MgPiAwKQorCQliZmFfY2ZnLT5kcnZjZmcubnVtX3NncGdzID0gbnVtX3NncGdzOworCisJLyoKKwkgKiBwb3B1bGF0ZSB0aGUgaGFsIHZhbHVlcyBiYWNrIHRvIHRoZSBkcml2ZXIgZm9yIHN5c2ZzIHVzZS4KKwkgKiBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHNob3duIGFzIDAgaW4gc3lzZnMKKwkgKi8KKwludW1fcnBvcnRzID0gYmZhX2NmZy0+ZndjZmcubnVtX3Jwb3J0czsKKwludW1faW9zICAgID0gYmZhX2NmZy0+ZndjZmcubnVtX2lvaW1fcmVxczsKKwludW1fdG1zCSAgID0gYmZhX2NmZy0+ZndjZmcubnVtX3Rza2ltX3JlcXM7CisJbnVtX2ZjeHBzICA9IGJmYV9jZmctPmZ3Y2ZnLm51bV9mY3hwX3JlcXM7CisJbnVtX3VmYnVmcyA9IGJmYV9jZmctPmZ3Y2ZnLm51bV91Zl9idWZzOworCXJlcXFfc2l6ZSAgPSBiZmFfY2ZnLT5kcnZjZmcubnVtX3JlcXFfZWxlbXM7CisJcnNwcV9zaXplICA9IGJmYV9jZmctPmRydmNmZy5udW1fcnNwcV9lbGVtczsKKwludW1fc2dwZ3MgID0gYmZhX2NmZy0+ZHJ2Y2ZnLm51bV9zZ3BnczsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2hhbF9tZW1fYWxsb2Moc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqaGFsX21lbWluZm8gPSAmYmZhZC0+bWVtaW5mbzsKKwlzdHJ1Y3QgYmZhX21lbV9lbGVtX3MgKm1lbWluZm9fZWxlbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCWRtYV9hZGRyX3QgICAgICBwaHlzX2FkZHI7CisJaW50ICAgICAgICAgICAgIHJldHJ5X2NvdW50ID0gMDsKKwlpbnQgICAgICAgICAgICAgcmVzZXRfdmFsdWUgPSAxOworCWludCAgICAgICAgICAgICBtaW5fbnVtX3NncGdzID0gNTEyOworCXZvaWQgICAgICAgICAgICprdmE7CisJaW50ICAgICAgICAgICAgIGk7CisKKwliZmFfY2ZnX2dldF9kZWZhdWx0KCZiZmFkLT5pb2NfY2ZnKTsKKworcmV0cnk6CisJYmZhZF91cGRhdGVfaGFsX2NmZygmYmZhZC0+aW9jX2NmZyk7CisJYmZhZC0+Y2ZnX2RhdGEuaW9jX3F1ZXVlX2RlcHRoID0gYmZhZC0+aW9jX2NmZy5md2NmZy5udW1faW9pbV9yZXFzOworCWJmYV9jZmdfZ2V0X21lbWluZm8oJmJmYWQtPmlvY19jZmcsIGhhbF9tZW1pbmZvKTsKKworCWZvciAoaSA9IDA7IGkgPCBCRkFfTUVNX1RZUEVfTUFYOyBpKyspIHsKKwkJbWVtaW5mb19lbGVtID0gJmhhbF9tZW1pbmZvLT5tZW1pbmZvW2ldOworCQlzd2l0Y2ggKG1lbWluZm9fZWxlbS0+bWVtX3R5cGUpIHsKKwkJY2FzZSBCRkFfTUVNX1RZUEVfS1ZBOgorCQkJa3ZhID0gdm1hbGxvYyhtZW1pbmZvX2VsZW0tPm1lbV9sZW4pOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJCQlnb3RvIGV4dDsKKwkJCX0KKwkJCW1lbXNldChrdmEsIDAsIG1lbWluZm9fZWxlbS0+bWVtX2xlbik7CisJCQltZW1pbmZvX2VsZW0tPmt2YSA9IGt2YTsKKwkJCWJyZWFrOworCQljYXNlIEJGQV9NRU1fVFlQRV9ETUE6CisJCQlrdmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJmYWQtPnBjaWRldi0+ZGV2LAorCQkJCQltZW1pbmZvX2VsZW0tPm1lbV9sZW4sCisJCQkJCSZwaHlzX2FkZHIsIEdGUF9LRVJORUwpOworCQkJaWYgKGt2YSA9PSBOVUxMKSB7CisJCQkJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBjYW5ub3QgYWxsb2NhdGUgd2l0aCBkZWZhdWx0CisJCQkJICogbnVtX3NncGFnZXMgdHJ5IHdpdGggaGFsZiB0aGUgdmFsdWUuCisJCQkJICovCisJCQkJaWYgKG51bV9zZ3BncyA+IG1pbl9udW1fc2dwZ3MpIHsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IG1lbW9yeSIKKwkJCQkJCSIgYWxsb2NhdGlvbiBmYWlsZWQgd2l0aCIKKwkJCQkJCSIgbnVtX3NncGdzOiAlZFxuIiwKKwkJCQkJCWJmYWQtPmluc3Rfbm8sIG51bV9zZ3Bncyk7CisJCQkJCW5leHRMb3dlckludCgmbnVtX3NncGdzKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiYmZhZFslZF06IHRyeWluZyB0byIKKwkJCQkJCSIgYWxsb2NhdGUgbWVtb3J5IHdpdGgiCisJCQkJCQkiIG51bV9zZ3BnczogJWRcbiIsCisJCQkJCQliZmFkLT5pbnN0X25vLCBudW1fc2dwZ3MpOworCQkJCQlyZXRyeV9jb3VudCsrOworCQkJCQlnb3RvIHJldHJ5OworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChudW1fc2dwZ3NfcGFybSA+IDApCisJCQkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCQkJZWxzZSB7CisJCQkJCQlyZXNldF92YWx1ZSA9CisJCQkJCQkJKDEgPDwgcmV0cnlfY291bnQpOworCQkJCQkJbnVtX3NncGdzICo9IHJlc2V0X3ZhbHVlOworCQkJCQl9CisJCQkJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCQkJCWdvdG8gZXh0OworCQkJCX0KKwkJCX0KKworCQkJaWYgKG51bV9zZ3Bnc19wYXJtID4gMCkKKwkJCQludW1fc2dwZ3MgPSBudW1fc2dwZ3NfcGFybTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3ZhbHVlID0gKDEgPDwgcmV0cnlfY291bnQpOworCQkJCW51bV9zZ3BncyAqPSByZXNldF92YWx1ZTsKKwkJCX0KKworCQkJbWVtc2V0KGt2YSwgMCwgbWVtaW5mb19lbGVtLT5tZW1fbGVuKTsKKwkJCW1lbWluZm9fZWxlbS0+a3ZhID0ga3ZhOworCQkJbWVtaW5mb19lbGVtLT5kbWEgPSBwaHlzX2FkZHI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCisJCX0KKwl9CitleHQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIENyZWF0ZSBhIHZwb3J0IHVuZGVyIGEgdmYuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7CisJc3RydWN0IGJmYWRfdnBvcnRfcyAqdnBvcnQ7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGNvbXBsZXRpb24gZmNvbXA7CisKKwl2cG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3Zwb3J0X3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwb3J0KSB7CisJCXJjID0gQkZBX1NUQVRVU19FTk9NRU07CisJCWdvdG8gZXh0OworCX0KKworCXZwb3J0LT5kcnZfcG9ydC5iZmFkID0gYmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfZmNzX3Zwb3J0X2NyZWF0ZSgmdnBvcnQtPmZjc192cG9ydCwgJmJmYWQtPmJmYV9mY3MsIHZmX2lkLAorCQkJCSAgcG9ydF9jZmcsIHZwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlnb3RvIGV4dF9mcmVlX3Zwb3J0OworCisJaWYgKHBvcnRfY2ZnLT5yb2xlcyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKSB7CisJCXJjID0gYmZhZF9pbV9zY3NpX2hvc3RfYWxsb2MoYmZhZCwgdnBvcnQtPmRydl9wb3J0LmltX3BvcnQpOworCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJCWdvdG8gZXh0X2ZyZWVfZmNzX3Zwb3J0OworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3Zwb3J0X3N0YXJ0KCZ2cG9ydC0+ZmNzX3Zwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitleHRfZnJlZV9mY3NfdnBvcnQ6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXZwb3J0LT5jb21wX2RlbCA9ICZmY29tcDsKKwlpbml0X2NvbXBsZXRpb24odnBvcnQtPmNvbXBfZGVsKTsKKwliZmFfZmNzX3Zwb3J0X2RlbGV0ZSgmdnBvcnQtPmZjc192cG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbih2cG9ydC0+Y29tcF9kZWwpOworZXh0X2ZyZWVfdnBvcnQ6CisJa2ZyZWUodnBvcnQpOworZXh0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBDcmVhdGUgYSB2ZiBhbmQgaXRzIGJhc2UgdnBvcnQgaW1wbGljaXRlbHkuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCSAgICAgICBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnKQoreworCXN0cnVjdCBiZmFkX3ZmX3MgKnZmOworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwl2ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3ZmX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZmKSB7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJCWdvdG8gZXh0OworCX0KKworCXJjID0gYmZhX2Zjc192Zl9jcmVhdGUoJnZmLT5mY3NfdmYsICZiZmFkLT5iZmFfZmNzLCB2Zl9pZCwgcG9ydF9jZmcsCisJCQkgICAgICAgdmYpOworCWlmIChyYyAhPSBCRkFfU1RBVFVTX09LKQorCQlrZnJlZSh2Zik7CitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2JmYV90bW8odW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkID0gKHN0cnVjdCBiZmFkX3MgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBkb25lcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYV90aW1lcl90aWNrKCZiZmFkLT5iZmEpOworCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJYmZhX2NvbXBfZnJlZSgmYmZhZC0+YmZhLCAmZG9uZXEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwl9CisKKwltb2RfdGltZXIoJmJmYWQtPmhhbF90bW8sIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEJGQV9USU1FUl9GUkVRKSk7Cit9CisKK3ZvaWQKK2JmYWRfaW5pdF90aW1lcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWluaXRfdGltZXIoJmJmYWQtPmhhbF90bW8pOworCWJmYWQtPmhhbF90bW8uZnVuY3Rpb24gPSBiZmFkX2JmYV90bW87CisJYmZhZC0+aGFsX3Rtby5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYmZhZDsKKworCW1vZF90aW1lcigmYmZhZC0+aGFsX3RtbywgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQkZBX1RJTUVSX0ZSRVEpKTsKK30KKworaW50CitiZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCXVuc2lnbmVkIGxvbmcgICBiYXIwX2xlbjsKKwlpbnQgICAgICAgICAgICAgcmMgPSAtRU5PREVWOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCUJGQV9QUklOVEYoQkZBX0VSUiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWwgJXBcbiIsIHBkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBCRkFEX0RSSVZFUl9OQU1FKSkKKwkJZ290byBvdXRfZGlzYWJsZV9kZXZpY2U7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCisJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkKKwkJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgeworCQkJQkZBX1BSSU5URihCRkFfRVJSLCAicGNpX3NldF9kbWFfbWFzayBmYWlsICVwXG4iLCBwZGV2KTsKKwkJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCQl9CisKKwliZmFkLT5wY2lfYmFyMF9tYXAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJYmFyMF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOworCWJmYWQtPnBjaV9iYXIwX2t2YSA9IGlvcmVtYXAoYmZhZC0+cGNpX2JhcjBfbWFwLCBiYXIwX2xlbik7CisKKwlpZiAoYmZhZC0+cGNpX2JhcjBfa3ZhID09IE5VTEwpIHsKKwkJQkZBX1BSSU5URihCRkFfRVJSLCAiRmFpbCB0byBtYXAgYmFyMFxuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVnaW9uOworCX0KKworCWJmYWQtPmhhbF9wY2lkZXYucGNpX3Nsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7CisJYmZhZC0+aGFsX3BjaWRldi5wY2lfZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKwliZmFkLT5oYWxfcGNpZGV2LnBjaV9iYXJfa3ZhID0gYmZhZC0+cGNpX2JhcjBfa3ZhOworCWJmYWQtPmhhbF9wY2lkZXYuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9uYW1lID0gcGNpX25hbWUocGRldik7CisKKwliZmFkLT5wY2lfYXR0ci52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CisJYmZhZC0+cGNpX2F0dHIuZGV2aWNlX2lkID0gcGRldi0+ZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzaWQgPSBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlOworCWJmYWQtPnBjaV9hdHRyLnNzdmlkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwliZmFkLT5wY2lfYXR0ci5wY2lmbiA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKworCWJmYWQtPnBjaWRldiA9IHBkZXY7CisJcmV0dXJuIDA7CisKK291dF9yZWxlYXNlX3JlZ2lvbjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworb3V0X2Rpc2FibGVfZGV2aWNlOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyNpZiBkZWZpbmVkKF9faWE2NF9fKQorCXBjaV9pb3VubWFwKHBkZXYsIGJmYWQtPnBjaV9iYXIwX2t2YSk7CisjZWxzZQorCWlvdW5tYXAoYmZhZC0+cGNpX2JhcjBfa3ZhKTsKKyNlbmRpZgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK30KKwordm9pZAorYmZhZF9mY3NfcG9ydF9jZmcoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgcG9ydF9jZmc7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfU1lNTkFNRV9NQVhMRU5dOworCisJc3ByaW50ZihzeW1uYW1lLCAiJXMtJWQiLCBCRkFEX0RSSVZFUl9OQU1FLCBiZmFkLT5pbnN0X25vKTsKKwltZW1jcHkocG9ydF9jZmcuc3ltX25hbWUuc3ltbmFtZSwgc3ltbmFtZSwgc3RybGVuKHN5bW5hbWUpKTsKKwliZmFfcHBvcnRfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmF0dHIpOworCXBvcnRfY2ZnLm53d24gPSBhdHRyLm53d247CisJcG9ydF9jZmcucHd3biA9IGF0dHIucHd3bjsKKworCWJmYV9mY3NfY2ZnX2Jhc2VfcG9ydCgmYmZhZC0+YmZhX2ZjcywgJnBvcnRfY2ZnKTsKK30KKworYmZhX3N0YXR1c190CitiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zIGRyaXZlcl9pbmZvOworCWludCAgICAgICAgICAgICBpOworCisJYmZhZC0+Y2ZnX2RhdGEucnBvcnRfZGVsX3RpbWVvdXQgPSBycG9ydF9kZWxfdGltZW91dDsKKwliZmFkLT5jZmdfZGF0YS5sdW5fcXVldWVfZGVwdGggPSBiZmFfbHVuX3F1ZXVlX2RlcHRoOworCWJmYWQtPmNmZ19kYXRhLmlvX21heF9zZ2UgPSBiZmFfaW9fbWF4X3NnZTsKKwliZmFkLT5jZmdfZGF0YS5iaW5kaW5nX21ldGhvZCA9IEZDUF9QV1dOX0JJTkRJTkc7CisKKwlyYyA9IGJmYWRfaGFsX21lbV9hbGxvYyhiZmFkKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQgYmZhZF9oYWxfbWVtX2FsbG9jIGZhaWx1cmVcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIk5vdCBlbm91Z2ggbWVtb3J5IHRvIGF0dGFjaCBhbGwgQnJvY2FkZSBIQkEgcG9ydHMsIgorCQkJIiBTeXN0ZW0gbWF5IG5lZWQgbW9yZSBtZW1vcnkuXG4iKTsKKwkJZ290byBvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOworCX0KKworCWJmYV9pbml0X2xvZygmYmZhZC0+YmZhLCBiZmFkLT5sb2dtb2QpOworCWJmYV9pbml0X3RyYygmYmZhZC0+YmZhLCBiZmFkLT50cmNtb2QpOworCWJmYV9pbml0X2FlbigmYmZhZC0+YmZhLCBiZmFkLT5hZW4pOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX3EpOworCUlOSVRfTElTVF9IRUFEKCZiZmFkLT5maWxlX2ZyZWVfcSk7CisJZm9yIChpID0gMDsgaSA8IEJGQURfQUVOX01BWF9BUFBTOyBpKyspIHsKKwkJYmZhX3FfcWVfaW5pdCgmYmZhZC0+ZmlsZV9idWZbaV0ucWUpOworCQlsaXN0X2FkZF90YWlsKCZiZmFkLT5maWxlX2J1ZltpXS5xZSwgJmJmYWQtPmZpbGVfZnJlZV9xKTsKKwl9CisJYmZhX2luaXRfcGxvZygmYmZhZC0+YmZhLCAmYmZhZC0+cGxvZ19idWYpOworCWJmYV9wbG9nX2luaXQoJmJmYWQtPnBsb2dfYnVmKTsKKwliZmFfcGxvZ19zdHIoJmJmYWQtPnBsb2dfYnVmLCBCRkFfUExfTUlEX0RSVlIsIEJGQV9QTF9FSURfRFJJVkVSX1NUQVJULAorCQkgICAgIDAsICJEcml2ZXIgQXR0YWNoIik7CisKKwliZmFfYXR0YWNoKCZiZmFkLT5iZmEsIGJmYWQsICZiZmFkLT5pb2NfY2ZnLCAmYmZhZC0+bWVtaW5mbywKKwkJICAgJmJmYWQtPmhhbF9wY2lkZXYpOworCisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKworCS8qCisJICogRW5hYmxlIEludGVycnVwdCBhbmQgd2FpdCBiZmFfaW5pdCBjb21wbGV0aW9uCisJICovCisJaWYgKGJmYWRfc2V0dXBfaW50cihiZmFkKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6IGJmYWRfc2V0dXBfaW50ciBmYWlsZWRcbiIsCisJCSAgICAgICBiZmFkLT5pbnN0X25vKTsKKwkJZ290byBvdXRfc2V0dXBfaW50cl9mYWlsdXJlOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfaW5pdCgmYmZhZC0+YmZhKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogU2V0IHVwIGludGVycnVwdCBoYW5kbGVyIGZvciBlYWNoIHZlY3RvcnMKKwkgKi8KKwlpZiAoKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pCisJICAgICYmIGJmYWRfaW5zdGFsbF9tc2l4X2hhbmRsZXIoYmZhZCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGluc3RhbGxfbXNpeCBmYWlsZWQsIGJmYWQlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgYmZhZC0+aW5zdF9ubyk7CisJfQorCisJYmZhZF9pbml0X3RpbWVyKGJmYWQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwltZW1zZXQoJmRyaXZlcl9pbmZvLCAwLCBzaXplb2YoZHJpdmVyX2luZm8pKTsKKwlzdHJuY3B5KGRyaXZlcl9pbmZvLnZlcnNpb24sIEJGQURfRFJJVkVSX1ZFUlNJT04sCisJCXNpemVvZihkcml2ZXJfaW5mby52ZXJzaW9uKSAtIDEpOworCWlmIChob3N0X25hbWUpCisJCXN0cm5jcHkoZHJpdmVyX2luZm8uaG9zdF9tYWNoaW5lX25hbWUsIGhvc3RfbmFtZSwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X21hY2hpbmVfbmFtZSkgLSAxKTsKKwlpZiAob3NfbmFtZSkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX25hbWUsIG9zX25hbWUsCisJCQlzaXplb2YoZHJpdmVyX2luZm8uaG9zdF9vc19uYW1lKSAtIDEpOworCWlmIChvc19wYXRjaCkKKwkJc3RybmNweShkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoLCBvc19wYXRjaCwKKwkJCXNpemVvZihkcml2ZXJfaW5mby5ob3N0X29zX3BhdGNoKSAtIDEpOworCisJc3RybmNweShkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSwgYmZhZC0+cGNpX25hbWUsCisJCXNpemVvZihkcml2ZXJfaW5mby5vc19kZXZpY2VfbmFtZSAtIDEpKTsKKworCS8qCisJICogRkNTIElOSVQKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX2Zjc19sb2dfaW5pdCgmYmZhZC0+YmZhX2ZjcywgYmZhZC0+bG9nbW9kKTsKKwliZmFfZmNzX3RyY19pbml0KCZiZmFkLT5iZmFfZmNzLCBiZmFkLT50cmNtb2QpOworCWJmYV9mY3NfYWVuX2luaXQoJmJmYWQtPmJmYV9mY3MsIGJmYWQtPmFlbik7CisJYmZhX2Zjc19pbml0KCZiZmFkLT5iZmFfZmNzLCAmYmZhZC0+YmZhLCBiZmFkLCBCRkFfRkFMU0UpOworCWJmYV9mY3NfZHJpdmVyX2luZm9faW5pdCgmYmZhZC0+YmZhX2ZjcywgJmRyaXZlcl9pbmZvKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9EUlZfSU5JVF9ET05FOworCXJldHVybiBCRkFfU1RBVFVTX09LOworCitvdXRfc2V0dXBfaW50cl9mYWlsdXJlOgorCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CitvdXRfaGFsX21lbV9hbGxvY19mYWlsdXJlOgorCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKK30KKwordm9pZAorYmZhZF9kcnZfdW5pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYV9pc3JfZGlzYWJsZSgmYmZhZC0+YmZhKTsKKwliZmFfZGV0YWNoKCZiZmFkLT5iZmEpOworCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJYmZhX2Fzc2VydChsaXN0X2VtcHR5KCZiZmFkLT5maWxlX3EpKTsKKwliZmFkX2hhbF9tZW1fcmVsZWFzZShiZmFkKTsKK30KKwordm9pZAorYmZhZF9kcnZfc3RhcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhX3N0YXJ0KCZiZmFkLT5iZmEpOworCWJmYV9mY3Nfc3RhcnQoJmJmYWQtPmJmYV9mY3MpOworCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9IQUxfU1RBUlRfRE9ORTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWJmYWRfZmM0X3Byb2JlX3Bvc3QoYmZhZCk7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X3N0b3Aoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFkLT5wcG9ydC5mbGFncyB8PSBCRkFEX1BPUlRfREVMRVRFOworCWJmYV9mY3NfZXhpdCgmYmZhZC0+YmZhX2Zjcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmYmZhZC0+Y29tcCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW5pdF9jb21wbGV0aW9uKCZiZmFkLT5jb21wKTsKKwliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwliZmFkLT5iZmFkX2ZsYWdzICY9IH5CRkFEX0hBTF9TVEFSVF9ET05FOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworfQorCitiZmFfc3RhdHVzX3QKK2JmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKQoreworCWludCAgICAgICAgICAgICByYyA9IEJGQV9TVEFUVVNfT0s7CisKKwkvKgorCSAqIEFsbG9jYXRlIHNjc2lfaG9zdCBmb3IgdGhlIHBoeXNpY2FsIHBvcnQKKwkgKi8KKwlpZiAoKGJmYWRfc3VwcG9ydGVkX2ZjNHMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKwkgICAgJiYgKHJvbGUgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJaWYgKGJmYWQtPnBwb3J0LmltX3BvcnQgPT0gTlVMTCkgeworCQkJcmMgPSBCRkFfU1RBVFVTX0ZBSUxFRDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmMgPSBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCQlnb3RvIG91dDsKKworCQliZmFkLT5wcG9ydC5yb2xlcyB8PSBCRkFfUE9SVF9ST0xFX0ZDUF9JTTsKKwl9CisKKwliZmFkLT5iZmFkX2ZsYWdzIHw9IEJGQURfQ0ZHX1BQT1JUX0RPTkU7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoKGJmYWQtPnBwb3J0LnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQykgJiYgaXBmY19lbmFibGUpIHsKKwkJYmZhZF9pcGZjX3BvcnRfZGVsZXRlKGJmYWQsICZiZmFkLT5wcG9ydCk7CisJCWJmYWQtPnBwb3J0LnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCX0KKworCWlmICgoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lNKQorCSAgICAmJiAoYmZhZC0+cHBvcnQucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkpIHsKKwkJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShiZmFkLCBiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZF9pbV9wb3J0X2NsZWFuKGJmYWQtPnBwb3J0LmltX3BvcnQpOworCQlrZnJlZShiZmFkLT5wcG9ydC5pbV9wb3J0KTsKKwkJYmZhZC0+cHBvcnQucm9sZXMgJj0gfkJGQV9QT1JUX1JPTEVfRkNQX0lNOworCX0KKworCWJmYWQtPmJmYWRfZmxhZ3MgJj0gfkJGQURfQ0ZHX1BQT1JUX0RPTkU7Cit9CisKK3ZvaWQKK2JmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAobG9nX2xldmVsID4gQkZBX0xPR19JTlZBTElEICYmIGxvZ19sZXZlbCA8PSBCRkFfTE9HX0xFVkVMX01BWCkKKwkJYmZhX2xvZ19zZXRfbGV2ZWxfYWxsKCZiZmFkLT5sb2dfZGF0YSwgbG9nX2xldmVsKTsKK30KKworIC8qCisgICogIFBDSV9lbnRyeSBQQ0kgZHJpdmVyIGVudHJpZXMgKiB7CisgICovCisKKy8qKgorICogUENJIHByb2JlIGVudHJ5LgorICovCitpbnQKK2JmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKQoreworCXN0cnVjdCBiZmFkX3MgICpiZmFkOworCWludCAgICAgICAgICAgICBlcnJvciA9IC1FTk9ERVYsIHJldHZhbDsKKwljaGFyICAgICAgICAgICAgYnVmWzE2XTsKKworCS8qCisJICogRm9yIHNpbmdsZSBwb3J0IGNhcmRzIC0gb25seSBjbGFpbSBmdW5jdGlvbiAwCisJICovCisJaWYgKChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCkKKwkgICAgJiYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSAhPSAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlCRkFfVFJBQ0UoQkZBX0lORk8sICJiZmFkX3BjaV9wcm9iZSBlbnRyeSIpOworCisJYmZhZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJmYWQpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwliZmFkLT50cmNtb2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhX3RyY19tb2RfcyksIEdGUF9LRVJORUwpOworCWlmICghYmZhZC0+dHJjbW9kKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVycm9yIGFsbG9jIHRyYWNlIGJ1ZmZlciFcbiIpOworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU7CisJfQorCisJLyoKKwkgKiBMT0cvVFJBQ0UgSU5JVAorCSAqLworCWJmYV90cmNfaW5pdChiZmFkLT50cmNtb2QpOworCWJmYV90cmMoYmZhZCwgYmZhZF9pbnN0KTsKKworCWJmYWQtPmxvZ21vZCA9ICZiZmFkLT5sb2dfZGF0YTsKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgYmZhZF9pbnN0KTsKKwliZmFfbG9nX2luaXQoYmZhZC0+bG9nbW9kLCBidWYsIGJmYV9vc19wcmludGYpOworCisJYmZhZF9kcnZfbG9nX2xldmVsX3NldChiZmFkKTsKKworCWJmYWQtPmFlbiA9ICZiZmFkLT5hZW5fYnVmOworCisJaWYgKCEoYmZhZF9sb2FkX2Z3aW1nKHBkZXYpKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX2xvYWRfZndpbWcgZmFpbHVyZSFcbiIpOworCQlrZnJlZShiZmFkLT50cmNtb2QpOworCQlnb3RvIG91dF9hbGxvY190cmFjZV9mYWlsdXJlOworCX0KKworCXJldHZhbCA9IGJmYWRfcGNpX2luaXQocGRldiwgYmZhZCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkX3BjaV9pbml0IGZhaWx1cmUhXG4iKTsKKwkJZXJyb3IgPSByZXR2YWw7CisJCWdvdG8gb3V0X3BjaV9pbml0X2ZhaWx1cmU7CisJfQorCisJbXV0ZXhfbG9jaygmYmZhZF9tdXRleCk7CisJYmZhZC0+aW5zdF9ubyA9IGJmYWRfaW5zdCsrOworCWxpc3RfYWRkX3RhaWwoJmJmYWQtPmxpc3RfZW50cnksICZiZmFkX2xpc3QpOworCW11dGV4X3VubG9jaygmYmZhZF9tdXRleCk7CisKKwlzcGluX2xvY2tfaW5pdCgmYmZhZC0+YmZhZF9sb2NrKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYmZhZCk7CisKKwliZmFkLT5yZWZfY291bnQgPSAwOworCWJmYWQtPnBwb3J0LmJmYWQgPSBiZmFkOworCisJcmV0dmFsID0gYmZhZF9kcnZfaW5pdChiZmFkKTsKKwlpZiAocmV0dmFsICE9IEJGQV9TVEFUVVNfT0spCisJCWdvdG8gb3V0X2Rydl9pbml0X2ZhaWx1cmU7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX0lOSVRfRE9ORSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCVkOiBoYWwgaW5pdCBmYWlsZWRcbiIsIGJmYWQtPmluc3Rfbm8pOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogUFBPUlQgRkNTIGNvbmZpZworCSAqLworCWJmYWRfZmNzX3BvcnRfY2ZnKGJmYWQpOworCisJcmV0dmFsID0gYmZhZF9jZmdfcHBvcnQoYmZhZCwgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pOworCWlmIChyZXR2YWwgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBvdXRfY2ZnX3Bwb3J0X2ZhaWx1cmU7CisKKwkvKgorCSAqIEJGQUQgbGV2ZWwgRkM0IChJTS9UTS9JUEZDKSBzcGVjaWZpYyByZXNvdXJjZSBhbGxvY2F0aW9uCisJICovCisJcmV0dmFsID0gYmZhZF9mYzRfcHJvYmUoYmZhZCk7CisJaWYgKHJldHZhbCAhPSBCRkFfU1RBVFVTX09LKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfZmM0X3Byb2JlIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOworCX0KKworCWJmYWRfZHJ2X3N0YXJ0KGJmYWQpOworCisJLyoKKwkgKiBJZiBiZmFfbGlua3VwX2RlbGF5IGlzIHNldCB0byAtMSBkZWZhdWx0OyB0cnkgdG8gcmV0cml2ZSB0aGUKKwkgKiB2YWx1ZSB1c2luZyB0aGUgYmZhZF9vc19nZXRfbGlua3VwX2RlbGF5KCk7IGVsc2UgdXNlIHRoZQorCSAqIHBhc3NlZCBpbiBtb2R1bGUgcGFyYW0gdmFsdWUgYXMgdGhlIGJmYV9saW5rdXBfZGVsYXkuCisJICovCisJaWYgKGJmYV9saW5rdXBfZGVsYXkgPCAwKSB7CisJCWJmYV9saW5rdXBfZGVsYXkgPSBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoYmZhZCk7CisJCWJmYWRfb3NfcnBvcnRfb25saW5lX3dhaXQoYmZhZCk7CisJCWJmYV9saW5rdXBfZGVsYXkgPSAtMTsKKwl9IGVsc2UgeworCQliZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KGJmYWQpOworCX0KKworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX0RFVklDRV9DTEFJTUVELCBiZmFkLT5wY2lfbmFtZSk7CitvazoKKwlyZXR1cm4gMDsKKworb3V0X2ZjNF9wcm9iZV9mYWlsdXJlOgorCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisJYmZhZF91bmNmZ19wcG9ydChiZmFkKTsKK291dF9jZmdfcHBvcnRfZmFpbHVyZToKKwliZmFkX2Rydl91bmluaXQoYmZhZCk7CitvdXRfZHJ2X2luaXRfZmFpbHVyZToKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CitvdXRfcGNpX2luaXRfZmFpbHVyZToKKwlrZnJlZShiZmFkLT50cmNtb2QpOworb3V0X2FsbG9jX3RyYWNlX2ZhaWx1cmU6CisJa2ZyZWUoYmZhZCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIFBDSSByZW1vdmUgZW50cnkuCisgKi8KK3ZvaWQKK2JmYWRfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYmZhZF9zICAqYmZhZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwliZmFfdHJjKGJmYWQsIGJmYWQtPmluc3Rfbm8pOworCisJaWYgKChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKQorCSAgICAmJiAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX0hBTF9JTklUX0RPTkUpKSB7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlpbml0X2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCQliZmFfc3RvcCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJmYWQtPmNvbXApOworCisJCWJmYWRfcmVtb3ZlX2ludHIoYmZhZCk7CisJCWRlbF90aW1lcl9zeW5jKCZiZmFkLT5oYWxfdG1vKTsKKwkJZ290byBoYWxfZGV0YWNoOworCX0gZWxzZSBpZiAoIShiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9EUlZfSU5JVF9ET05FKSkgeworCQlnb3RvIHJlbW92ZV9zeXNmczsKKwl9CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpCisJCWJmYWRfZHJ2X3N0b3AoYmZhZCk7CisKKwliZmFkX3JlbW92ZV9pbnRyKGJmYWQpOworCisJZGVsX3RpbWVyX3N5bmMoJmJmYWQtPmhhbF90bW8pOworCWJmYWRfZmM0X3Byb2JlX3VuZG8oYmZhZCk7CisKKwlpZiAoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfQ0ZHX1BQT1JUX0RPTkUpCisJCWJmYWRfdW5jZmdfcHBvcnQoYmZhZCk7CisKK2hhbF9kZXRhY2g6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWJmYV9kZXRhY2goJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJYmZhZF9oYWxfbWVtX3JlbGVhc2UoYmZhZCk7CityZW1vdmVfc3lzZnM6CisKKwltdXRleF9sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX2luc3QtLTsKKwlsaXN0X2RlbCgmYmZhZC0+bGlzdF9lbnRyeSk7CisJbXV0ZXhfdW5sb2NrKCZiZmFkX211dGV4KTsKKwliZmFkX3BjaV91bmluaXQocGRldiwgYmZhZCk7CisKKwlrZnJlZShiZmFkLT50cmNtb2QpOworCWtmcmVlKGJmYWQpOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiZmFkX2lkX3RhYmxlW10gPSB7CisJeworCSAudmVuZG9yID0gQkZBX1BDSV9WRU5ET1JfSURfQlJPQ0FERSwKKwkgLmRldmljZSA9IEJGQV9QQ0lfREVWSUNFX0lEX0ZDXzhHMlAsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgfSwKKwl7CisJIC52ZW5kb3IgPSBCRkFfUENJX1ZFTkRPUl9JRF9CUk9DQURFLAorCSAuZGV2aWNlID0gQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSB9LAorCXsKKwkgLnZlbmRvciA9IEJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUsCisJIC5kZXZpY2UgPSBCRkFfUENJX0RFVklDRV9JRF9DVCwKKwkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCSAuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9GSUJFUiA8PCA4KSwKKwkgLmNsYXNzX21hc2sgPSB+MCwKKwkgfSwKKworCXswLCAwfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZmFkX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJmYWRfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IEJGQURfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gYmZhZF9pZF90YWJsZSwKKwkucHJvYmUgPSBiZmFkX3BjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYmZhZF9wY2lfcmVtb3ZlKSwKK307CisKKy8qKgorICogIExpbnV4IGRyaXZlciBtb2R1bGUgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgICAgICAgICAgICAgcmM7CisKKwlyYyA9IGJmYWRfaW1fbW9kdWxlX2luaXQoKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJZ290byBleHQ7CisKKwliZmFkX3RtX21vZHVsZV9pbml0KCk7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2luaXQoKTsKK2V4dDoKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQKK2JmYWRfZmM0X21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGlwZmNfZW5hYmxlKQorCQliZmFkX2lwZmNfbW9kdWxlX2V4aXQoKTsKKwliZmFkX3RtX21vZHVsZV9leGl0KCk7CisJYmZhZF9pbV9tb2R1bGVfZXhpdCgpOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgaW5pdC4KKyAqLworc3RhdGljIGludCAgICAgIF9faW5pdAorYmZhZF9pbml0KHZvaWQpCit7CisJaW50ICAgICAgICAgICAgIGVycm9yID0gMDsKKworCXByaW50ayhLRVJOX0lORk8gIkJyb2NhZGUgQkZBIEZDL0ZDT0UgU0NTSSBkcml2ZXIgLSB2ZXJzaW9uOiAlc1xuIiwKKwkgICAgICAgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlpZiAobnVtX3NncGdzID4gMCkKKwkJbnVtX3NncGdzX3Bhcm0gPSBudW1fc2dwZ3M7CisKKwllcnJvciA9IGJmYWRfZmM0X21vZHVsZV9pbml0KCk7CisJaWYgKGVycm9yKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZF9mYzRfbW9kdWxlX2luaXQgZmFpbHVyZVxuIik7CisJCWdvdG8gZXh0OworCX0KKworCWlmICghc3RyY21wKEZDUElfTkFNRSwgIiBmY3BpbSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCWlmICghc3RyY21wKEZDUFRfTkFNRSwgIiBmY3B0bSIpKQorCQliZmFkX3N1cHBvcnRlZF9mYzRzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX1RNOworCWlmICghc3RyY21wKElQRkNfTkFNRSwgIiBpcGZjIikpCisJCWJmYWRfc3VwcG9ydGVkX2ZjNHMgfD0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQzsKKworCWJmYV9pb2NfYXV0b19yZWNvdmVyKGlvY19hdXRvX3JlY292ZXIpOworCWJmYV9mY3NfcnBvcnRfc2V0X2RlbF90aW1lb3V0KHJwb3J0X2RlbF90aW1lb3V0KTsKKwllcnJvciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJmYWRfcGNpX2RyaXZlcik7CisKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmZhZCBwY2lfcmVnaXN0ZXJfZHJpdmVyIGZhaWx1cmVcbiIpOworCQlnb3RvIGV4dDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXh0OgorCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIERyaXZlciBtb2R1bGUgZXhpdC4KKyAqLworc3RhdGljIHZvaWQgICAgIF9fZXhpdAorYmZhZF9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiZmFkX3BjaV9kcml2ZXIpOworCWJmYWRfZmM0X21vZHVsZV9leGl0KCk7CisJYmZhZF9mcmVlX2Z3aW1nKCk7Cit9CisKKyNkZWZpbmUgQkZBRF9QUk9UT19OQU1FIEZDUElfTkFNRSBGQ1BUX05BTUUgSVBGQ19OQU1FCisKK21vZHVsZV9pbml0KGJmYWRfaW5pdCk7Cittb2R1bGVfZXhpdChiZmFkX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIERyaXZlciIgQkZBRF9QUk9UT19OQU1FKTsKK01PRFVMRV9BVVRIT1IoIkJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLiIpOworTU9EVUxFX1ZFUlNJT04oQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyOWFlMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmMKQEAgLTAsMCArMSw2NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2F0dHIuYyBMaW51eCBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKyNpbmNsdWRlICJiZmFkX2Rydi5oIgorI2luY2x1ZGUgImJmYWRfaW0uaCIKKyNpbmNsdWRlICJiZmFkX3RyY21vZC5oIgorI2luY2x1ZGUgImJmYWRfYXR0ci5oIgorCisvKioKKyAqICBGQ190cmFuc3BvcnRfdGVtcGxhdGUgRkMgdHJhbnNwb3J0IHRlbXBsYXRlCisgKi8KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IE5VTEw7CisJdTMyICAgICAgICBmY19pZCA9IC0xOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCWZjX2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlmY19zdGFyZ2V0X3BvcnRfaWQoc3RhcmdldCkgPSBmY19pZDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKwl1NjQgICAgICAgICAgICAgbm9kZV9uYW1lID0gMDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzaG9zdCA9IGJmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdGFyZ2V0KTsKKwlpbV9wb3J0ID0gKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaXRuaW0gPSBiZmFkX29zX2dldF9pdG5pbShpbV9wb3J0LCBzdGFyZ2V0LT5pZCk7CisJaWYgKGl0bmltKQorCQlub2RlX25hbWUgPSBiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKTsKKworCWZjX3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0gYmZhX29zX2h0b25sbChub2RlX25hbWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBOVUxMOworCXU2NCAgICAgICAgICAgICBwb3J0X25hbWUgPSAwOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCXNob3N0ID0gYmZhZF9vc19zdGFyZ2V0X3RvX3Nob3N0KHN0YXJnZXQpOworCWltX3BvcnQgPSAoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwliZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIHN0YXJnZXQtPmlkKTsKKwlpZiAoaXRuaW0pCisJCXBvcnRfbmFtZSA9IGJmYV9mY3NfaXRuaW1fZ2V0X3B3d24oJml0bmltLT5mY3NfaXRuaW0pOworCisJZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSBiZmFfb3NfaHRvbmxsKHBvcnRfbmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPQorCQkJYmZhX29zX2h0b24zYihiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydC0+ZmNzX3BvcnQpKTsKK30KKworCisKKworCitzdHJ1Y3QgU2NzaV9Ib3N0ICoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJcmV0dXJuIGRldl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgcG9ydCB0eXBlLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9wb3J0X3R5cGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF90eXBlKSB7CisJY2FzZSBCRkFfUFBPUlRfVFlQRV9OUE9SVDoKKwkJZmNfaG9zdF9wb3J0X3R5cGUoc2hvc3QpID0gRkNfUE9SVFRZUEVfTlBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTkxQT1JUOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9OTFBPUlQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfUDJQOgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9QVFA7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1RZUEVfTFBPUlQ6CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IEZDX1BPUlRUWVBFX0xQT1JUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3BvcnRfdHlwZShzaG9zdCkgPSBGQ19QT1JUVFlQRV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisKKwlzd2l0Y2ggKGF0dHIucG9ydF9zdGF0ZSkgeworCWNhc2UgQkZBX1BQT1JUX1NUX0xJTktET1dOOgorCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gRkNfUE9SVFNUQVRFX0xJTktET1dOOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9MSU5LVVA6CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSBGQ19QT1JUU1RBVEVfT05MSU5FOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TVF9VTklOSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkdfUVdBSVQ6CisJY2FzZSBCRkFfUFBPUlRfU1RfRU5BQkxJTkc6CisJY2FzZSBCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUOgorCWNhc2UgQkZBX1BQT1JUX1NUX0RJU0FCTElORzoKKwljYXNlIEJGQV9QUE9SVF9TVF9ESVNBQkxFRDoKKwljYXNlIEJGQV9QUE9SVF9TVF9TVE9QUEVEOgorCWNhc2UgQkZBX1BQT1JUX1NUX0lPQ0RPV046CisJZGVmYXVsdDoKKwkJZmNfaG9zdF9wb3J0X3N0YXRlKHNob3N0KSA9IEZDX1BPUlRTVEFURV9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IGFjdGl2ZSBmYzRzLgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKworCW1lbXNldChmY19ob3N0X2FjdGl2ZV9mYzRzKHNob3N0KSwgMCwKKwkgICAgICAgc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7CisKKwlpZiAocG9ydC0+c3VwcG9ydGVkX2ZjNHMgJgorCQkoQkZBX1BPUlRfUk9MRV9GQ1BfSU0gfCBCRkFfUE9SVF9ST0xFX0ZDUF9UTSkpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzJdID0gMTsKKworCWlmIChwb3J0LT5zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzNdID0gMHgyMDsKKworCWZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpWzddID0gMTsKK30KKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIGhvc3QgbGluayBzcGVlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3Rfc3BlZWQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgYXR0cjsKKworCWJmYV9wcG9ydF9nZXRfYXR0cigmYmZhZC0+YmZhLCAmYXR0cik7CisJc3dpdGNoIChhdHRyLnNwZWVkKSB7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfOEdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzhHQklUOworCQlicmVhazsKKwljYXNlIEJGQV9QUE9SVF9TUEVFRF80R0JQUzoKKwkJZmNfaG9zdF9zcGVlZChzaG9zdCkgPSBGQ19QT1JUU1BFRURfNEdCSVQ7CisJCWJyZWFrOworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF8yR0JJVDsKKwkJYnJlYWs7CisJY2FzZSBCRkFfUFBPUlRfU1BFRURfMUdCUFM6CisJCWZjX2hvc3Rfc3BlZWQoc2hvc3QpID0gRkNfUE9SVFNQRUVEXzFHQklUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmY19ob3N0X3NwZWVkKHNob3N0KSA9IEZDX1BPUlRTUEVFRF9VTktOT1dOOworCQlicmVhazsKKwl9Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydCA9IGltX3BvcnQtPnBvcnQ7CisJd3duX3QgICAgICAgICAgIGZhYnJpY19ud3duID0gMDsKKworCWZhYnJpY19ud3duID0gYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShwb3J0LT5mY3NfcG9ydCk7CisKKwlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9IGJmYV9vc19odG9ubGwoZmFicmljX253d24pOworCit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgQkZBRCBzdGF0aXN0aWNzLgorICovCitzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqCitiZmFkX2ltX2dldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhZF9oYWxfY29tcCBmY29tcDsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzICpoc3RhdHM7CisJYmZhX3N0YXR1c190ICAgIHJjOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKworCWhzdGF0cyA9ICZiZmFkLT5saW5rX3N0YXRzOworCWluaXRfY29tcGxldGlvbigmZmNvbXAuY29tcCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCW1lbXNldChoc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzKSk7CisJcmMgPSBiZmFfcHBvcnRfZ2V0X3N0YXRzKCZiZmFkLT5iZmEsCisJCQkJICAgICAodW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKikgaHN0YXRzLAorCQkJCSAgICAgYmZhZF9oY2JfY29tcCwgJmZjb21wKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykKKwkJcmV0dXJuIE5VTEw7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZmY29tcC5jb21wKTsKKworCXJldHVybiBoc3RhdHM7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCByZXNldCBCRkFEIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3Jlc2V0X3N0YXRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFkX2hhbF9jb21wIGZjb21wOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwliZmFfc3RhdHVzX3QgICAgcmM7CisKKwlpbml0X2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlyYyA9IGJmYV9wcG9ydF9jbGVhcl9zdGF0cygmYmZhZC0+YmZhLCBiZmFkX2hjYl9jb21wLCAmZmNvbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJaWYgKHJjICE9IEJGQV9TVEFUVVNfT0spCisJCXJldHVybjsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmZjb21wLmNvbXApOworCisJcmV0dXJuOworfQorCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IHJwb3J0IGxvc3MgdGltZW91dC4KKyAqLworc3RhdGljIHZvaWQKK2JmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcnBvcnQtPmRldl9sb3NzX3RtbyA9IGJmYV9mY3BpbV9wYXRoX3Rvdl9nZXQoJmJmYWQtPmJmYSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBzZXQgcnBvcnQgbG9zcyB0aW1lb3V0LgorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCwgdTMyIHRpbWVvdXQpCit7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gcnBvcnQtPmRkX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGl0bmltLT5pbS0+YmZhZDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlpZiAodGltZW91dCA+IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfZmNwaW1fcGF0aF90b3Zfc2V0KCZiZmFkLT5iZmEsIHRpbWVvdXQpOworCQlycG9ydC0+ZGV2X2xvc3NfdG1vID0gYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCit9CisKK3N0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSBiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlID0geworCisJLyogVGFyZ2V0IGR5bmFtaWMgYXR0cmlidXRlcyAqLworCS5nZXRfc3RhcmdldF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X2lkLAorCS5zaG93X3N0YXJnZXRfcG9ydF9pZCA9IDEsCisJLmdldF9zdGFyZ2V0X25vZGVfbmFtZSA9IGJmYWRfaW1fZ2V0X3N0YXJnZXRfbm9kZV9uYW1lLAorCS5zaG93X3N0YXJnZXRfbm9kZV9uYW1lID0gMSwKKwkuZ2V0X3N0YXJnZXRfcG9ydF9uYW1lID0gYmZhZF9pbV9nZXRfc3RhcmdldF9wb3J0X25hbWUsCisJLnNob3dfc3RhcmdldF9wb3J0X25hbWUgPSAxLAorCisJLyogSG9zdCBkeW5hbWljIGF0dHJpYnV0ZSAqLworCS5nZXRfaG9zdF9wb3J0X2lkID0gYmZhZF9pbV9nZXRfaG9zdF9wb3J0X2lkLAorCS5zaG93X2hvc3RfcG9ydF9pZCA9IDEsCisKKwkvKiBIb3N0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X25vZGVfbmFtZSA9IDEsCisJLnNob3dfaG9zdF9wb3J0X25hbWUgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2NsYXNzZXMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX2ZjNHMgPSAxLAorCS5zaG93X2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyA9IDEsCisJLnNob3dfaG9zdF9tYXhmcmFtZV9zaXplID0gMSwKKworCS8qIE1vcmUgaG9zdCBkeW5hbWljIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X3BvcnRfdHlwZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfdHlwZSA9IGJmYWRfaW1fZ2V0X2hvc3RfcG9ydF90eXBlLAorCS5zaG93X2hvc3RfcG9ydF9zdGF0ZSA9IDEsCisJLmdldF9ob3N0X3BvcnRfc3RhdGUgPSBiZmFkX2ltX2dldF9ob3N0X3BvcnRfc3RhdGUsCisJLnNob3dfaG9zdF9hY3RpdmVfZmM0cyA9IDEsCisJLmdldF9ob3N0X2FjdGl2ZV9mYzRzID0gYmZhZF9pbV9nZXRfaG9zdF9hY3RpdmVfZmM0cywKKwkuc2hvd19ob3N0X3NwZWVkID0gMSwKKwkuZ2V0X2hvc3Rfc3BlZWQgPSBiZmFkX2ltX2dldF9ob3N0X3NwZWVkLAorCS5zaG93X2hvc3RfZmFicmljX25hbWUgPSAxLAorCS5nZXRfaG9zdF9mYWJyaWNfbmFtZSA9IGJmYWRfaW1fZ2V0X2hvc3RfZmFicmljX25hbWUsCisKKwkuc2hvd19ob3N0X3N5bWJvbGljX25hbWUgPSAxLAorCisJLyogU3RhdGlzdGljcyAqLworCS5nZXRfZmNfaG9zdF9zdGF0cyA9IGJmYWRfaW1fZ2V0X3N0YXRzLAorCS5yZXNldF9mY19ob3N0X3N0YXRzID0gYmZhZF9pbV9yZXNldF9zdGF0cywKKworCS8qIEFsbG9jYXRpb24gbGVuZ3RoIGZvciBob3N0IHNwZWNpZmljIGRhdGEgKi8KKwkuZGRfZmNycG9ydF9zaXplID0gc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKSwKKworCS8qIFJlbW90ZSBwb3J0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ycG9ydF9tYXhmcmFtZV9zaXplID0gMSwKKwkuc2hvd19ycG9ydF9zdXBwb3J0ZWRfY2xhc3NlcyA9IDEsCisJLnNob3dfcnBvcnRfZGV2X2xvc3NfdG1vID0gMSwKKwkuZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbyA9IGJmYWRfaW1fZ2V0X3Jwb3J0X2xvc3NfdG1vLAorCS5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vID0gYmZhZF9pbV9zZXRfcnBvcnRfbG9zc190bW8sCit9OworCisvKioKKyAqICBTY3NpX0hvc3RfYXR0cnMgU0NTSSBob3N0IGF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fc2VyaWFsX251bV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIuc2VyaWFsX251bSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX21vZGVsX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9tb2RlbF9kZXNjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY2xhc3NfdG9fc2hvc3QoZGV2KTsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBzaG9zdC0+aG9zdGRhdGFbMF07CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKwlzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgIGlvY19hdHRyOworCisJbWVtc2V0KCZpb2NfYXR0ciwgMCwgc2l6ZW9mKGlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZpb2NfYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQlpb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9ub2RlX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXU2NCAgICAgICAgbnd3bjsKKworCW53d24gPSBiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JWxseFxuIiwgYmZhX29zX2h0b25sbChud3duKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX3N5bWJvbGljX25hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzXG4iLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm1vZGVsLAorCQkJaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2h3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuaHdfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgQkZBRF9EUklWRVJfVkVSU0lPTik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX29wdGlvbnJvbV92ZXJzaW9uX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCWlvY19hdHRyLmFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fZndfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2NfYXR0cl9zICBpb2NfYXR0cjsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBpb2NfYXR0ci5hZGFwdGVyX2F0dHIuZndfdmVyKTsKK30KKworc3RhdGljIHNzaXplX3QKK2JmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9zICAgICAgICAgKmJmYWQgPSBpbV9wb3J0LT5iZmFkOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisKKwltZW1zZXQoJmlvY19hdHRyLCAwLCBzaXplb2YoaW9jX2F0dHIpKTsKKwliZmFfZ2V0X2F0dHIoJmJmYWQtPmJmYSwgJmlvY19hdHRyKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgaW9jX2F0dHIuYWRhcHRlcl9hdHRyLm5wb3J0cyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitiZmFkX2ltX2Rydl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIEJGQURfRFJJVkVSX05BTUUpOworfQorCitzdGF0aWMgc3NpemVfdAorYmZhZF9pbV9udW1fb2ZfZGlzY292ZXJlZF9wb3J0c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbGFzc190b19zaG9zdChkZXYpOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQgPSBpbV9wb3J0LT5wb3J0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJaW50ICAgICAgICBucnBvcnRzID0gMjA0ODsKKwl3d25fdCAgICAgICAgICAqcnBvcnRzID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisKKwlycG9ydHMgPSBremFsbG9jKHNpemVvZih3d25fdCkgKiBucnBvcnRzICwgR0ZQX0FUT01JQyk7CisJaWYgKHJwb3J0cyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0cyhwb3J0LT5mY3NfcG9ydCwgcnBvcnRzLCAmbnJwb3J0cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJa2ZyZWUocnBvcnRzKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBucnBvcnRzKTsKK30KKworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHNlcmlhbF9udW1iZXIsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zZXJpYWxfbnVtX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsLCBTX0lSVUdPLCBiZmFkX2ltX21vZGVsX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG1vZGVsX2Rlc2NyaXB0aW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbW9kZWxfZGVzY19zaG93LCBOVUxMKTsKK3N0YXRpYyAgICAgICAgICBERVZJQ0VfQVRUUihub2RlX25hbWUsIFNfSVJVR08sIGJmYWRfaW1fbm9kZV9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKHN5bWJvbGljX25hbWUsIFNfSVJVR08sCisJCQkJYmZhZF9pbV9zeW1ib2xpY19uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGhhcmR3YXJlX3ZlcnNpb24sIFNfSVJVR08sCisJCQkJYmZhZF9pbV9od192ZXJzaW9uX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fZHJ2X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIob3B0aW9uX3JvbV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fb3B0aW9ucm9tX3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgU19JUlVHTywKKwkJCQliZmFkX2ltX2Z3X3ZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgICAgICAgICAgREVWSUNFX0FUVFIobnVtYmVyX29mX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX3BvcnRzX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKGRyaXZlcl9uYW1lLCBTX0lSVUdPLCBiZmFkX2ltX2Rydl9uYW1lX3Nob3csIE5VTEwpOworc3RhdGljICAgICAgICAgIERFVklDRV9BVFRSKG51bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLCBTX0lSVUdPLAorCQkJCWJmYWRfaW1fbnVtX29mX2Rpc2NvdmVyZWRfcG9ydHNfc2hvdywgTlVMTCk7CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc2VyaWFsX251bWJlciwKKwkmZGV2X2F0dHJfbW9kZWwsCisJJmRldl9hdHRyX21vZGVsX2Rlc2NyaXB0aW9uLAorCSZkZXZfYXR0cl9ub2RlX25hbWUsCisJJmRldl9hdHRyX3N5bWJvbGljX25hbWUsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX2RyaXZlcl92ZXJzaW9uLAorCSZkZXZfYXR0cl9vcHRpb25fcm9tX3ZlcnNpb24sCisJJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24sCisJJmRldl9hdHRyX251bWJlcl9vZl9wb3J0cywKKwkmZGV2X2F0dHJfZHJpdmVyX25hbWUsCisJJmRldl9hdHRyX251bWJlcl9vZl9kaXNjb3ZlcmVkX3BvcnRzLAorCU5VTEwsCit9OworCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdID0geworICAgICZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyLAorICAgICZkZXZfYXR0cl9tb2RlbCwKKyAgICAmZGV2X2F0dHJfbW9kZWxfZGVzY3JpcHRpb24sCisgICAgJmRldl9hdHRyX25vZGVfbmFtZSwKKyAgICAmZGV2X2F0dHJfc3ltYm9saWNfbmFtZSwKKyAgICAmZGV2X2F0dHJfaGFyZHdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZHJpdmVyX3ZlcnNpb24sCisgICAgJmRldl9hdHRyX29wdGlvbl9yb21fdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbiwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX3BvcnRzLAorICAgICZkZXZfYXR0cl9kcml2ZXJfbmFtZSwKKyAgICAmZGV2X2F0dHJfbnVtYmVyX29mX2Rpc2NvdmVyZWRfcG9ydHMsCisgICAgTlVMTCwKK307CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2F0dHIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzMzEyZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9hdHRyLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9BVFRSX0hfXworI2RlZmluZSBfX0JGQURfQVRUUl9IX18KKy8qKgorICogIGJmYWRfYXR0ci5oIFZNd2FyZSBkcml2ZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbW9kdWxlLgorICovCisKKy8qKgorICogIEZDX3RyYW5zcG9ydF90ZW1wbGF0ZSBGQyB0cmFuc3BvcnQgdGVtcGxhdGUKKyAqLworCitzdHJ1Y3QgU2NzaV9Ib3N0KgorYmZhZF9vc19kZXZfdG9fc2hvc3Qoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBwb3J0IElELgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X3BvcnRfaWQoc3RydWN0IHNjc2lfdGFyZ2V0ICpzdGFyZ2V0KTsKKworLyoqCisgKiBGQyB0cmFuc3BvcnQgdGVtcGxhdGUgZW50cnksIGdldCBTQ1NJIHRhcmdldCBud3duLgorICovCit2b2lkCitiZmFkX2ltX2dldF9zdGFyZ2V0X25vZGVfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisvKioKKyAqIEZDIHRyYW5zcG9ydCB0ZW1wbGF0ZSBlbnRyeSwgZ2V0IFNDU0kgdGFyZ2V0IHB3d24uCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X3N0YXJnZXRfcG9ydF9uYW1lKHN0cnVjdCBzY3NpX3RhcmdldCAqc3RhcmdldCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBnZXQgU0NTSSBob3N0IHBvcnQgSUQuCisgKi8KK3ZvaWQKK2JmYWRfaW1fZ2V0X2hvc3RfcG9ydF9pZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCk7CisKKy8qKgorICogRkMgdHJhbnNwb3J0IHRlbXBsYXRlIGVudHJ5LCBpc3N1ZSBhIExJUC4KKyAqLworaW50CitiZmFkX2ltX2lzc3VlX2ZjX2hvc3RfbGlwKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KTsKKworc3RydWN0IFNjc2lfSG9zdCoKK2JmYWRfb3Nfc3RhcmdldF90b19zaG9zdChzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpOworCisKKyNlbmRpZiAvKiAgX19CRkFEX0FUVFJfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyYzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9kcnYuaApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIENvbnRhaW5zIGJhc2UgZHJpdmVyIGRlZmluaXRpb25zLgorICovCisKKy8qKgorICogIGJmYV9kcnYuaCBMaW51eCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLgorICovCisKKyNpZm5kZWYgX19CRkFEX0RSVl9IX18KKyNkZWZpbmUgX19CRkFEX0RSVl9IX18KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcGNpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKyNpbmNsdWRlIDxjcy9iZmFfcGxvZy5oPgorI2luY2x1ZGUgImFlbi9iZmFfYWVuLmgiCisjaW5jbHVkZSA8bG9nL2JmYV9sb2dfbGludXguaD4KKworI2RlZmluZSBCRkFEX0RSSVZFUl9OQU1FICAgICAgICAiYmZhIgorI2lmZGVmIEJGQV9EUklWRVJfVkVSU0lPTgorI2RlZmluZSBCRkFEX0RSSVZFUl9WRVJTSU9OICAgIEJGQV9EUklWRVJfVkVSU0lPTgorI2Vsc2UKKyNkZWZpbmUgQkZBRF9EUklWRVJfVkVSU0lPTiAgICAiMi4wLjAuMCIKKyNlbmRpZgorCisKKyNkZWZpbmUgQkZBRF9JUlFfRkxBR1MgSVJRRl9TSEFSRUQKKworLyoKKyAqIEJGQUQgZmxhZ3MKKyAqLworI2RlZmluZSBCRkFEX01TSVhfT04JCQkJMHgwMDAwMDAwMQorI2RlZmluZSBCRkFEX0hBTF9JTklUX0RPTkUJCQkweDAwMDAwMDAyCisjZGVmaW5lIEJGQURfRFJWX0lOSVRfRE9ORQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQkZBRF9DRkdfUFBPUlRfRE9ORQkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgQkZBRF9IQUxfU1RBUlRfRE9ORQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQkZBRF9QT1JUX09OTElORQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgQkZBRF9SUE9SVF9PTkxJTkUJCQkweDAwMDAwMDQwCisKKyNkZWZpbmUgQkZBRF9QT1JUX0RFTEVURQkJCTB4MDAwMDAwMDEKKworLyoKKyAqIEJGQUQgcmVsYXRlZCBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9TQ0FOX0RFTEFZCQlIWgorI2RlZmluZSBCRkFEX1NUT1BfVElNRU9VVAkzMAorI2RlZmluZSBCRkFEX1NVU1BFTkRfVElNRU9VVAlCRkFEX1NUT1BfVElNRU9VVAorCisvKgorICogQkZBRCBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcworICovCisjZGVmaW5lIEJGQURfTFVOX1FVRVVFX0RFUFRIIAkJMzIKKyNkZWZpbmUgQkZBRF9JT19NQVhfU0dFIAkJU0dfQUxMCisKKyNkZWZpbmUgYmZhZF9pc3JfdCBpcnFfaGFuZGxlcl90CisKKyNkZWZpbmUgTUFYX01TSVhfRU5UUlkgMjIKKworc3RydWN0IGJmYWRfbXNpeF9zIHsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXg7Cit9OworCitlbnVtIGJmYWRfcG9ydF9wdmJfdHlwZSB7CisJQkZBRF9QT1JUX1BIWVNfQkFTRSA9IDAsCisJQkZBRF9QT1JUX1BIWVNfVlBPUlQgPSAxLAorCUJGQURfUE9SVF9WRl9CQVNFID0gMiwKKwlCRkFEX1BPUlRfVkZfVlBPUlQgPSAzLAorfTsKKworLyoKKyAqIFBPUlQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQ7CisJdTMyICAgICAgICByb2xlczsKKwlzMzIgICAgICAgICBmbGFnczsKKwl1MzIgICAgICAgIHN1cHBvcnRlZF9mYzRzOworCXU4CQlpcGZjX2ZsYWdzOworCWVudW0gYmZhZF9wb3J0X3B2Yl90eXBlIHB2Yl90eXBlOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsJLyogSU0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX3RtX3BvcnRfcyAqdG1fcG9ydDsJLyogVE0gc3BlY2lmaWMgZGF0YSAqLworCXN0cnVjdCBiZmFkX2lwZmNfcG9ydF9zICppcGZjX3BvcnQ7CS8qIElQRkMgc3BlY2lmaWMgZGF0YSAqLworfTsKKworLyoKKyAqIFZQT1JUIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3Zwb3J0X3MgeworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgZHJ2X3BvcnQ7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyBmY3NfdnBvcnQ7CisJc3RydWN0IGNvbXBsZXRpb24gKmNvbXBfZGVsOworfTsKKworLyoKKyAqIFZGIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3MgeworCWJmYV9mY3NfdmZfdCAgICBmY3NfdmY7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgIGJhc2VfcG9ydDsJLyogYmFzZSBwb3J0IGZvciB2ZiAqLworCXN0cnVjdCBiZmFkX3MgICAqYmZhZDsKK307CisKK3N0cnVjdCBiZmFkX2NmZ19wYXJhbV9zIHsKKwl1MzIgICAgICAgIHJwb3J0X2RlbF90aW1lb3V0OworCXUzMiAgICAgICAgaW9jX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgbHVuX3F1ZXVlX2RlcHRoOworCXUzMiAgICAgICAgaW9fbWF4X3NnZTsKKwl1MzIgICAgICAgIGJpbmRpbmdfbWV0aG9kOworfTsKKworI2RlZmluZSBCRkFEX0FFTl9NQVhfQVBQUyA4CitzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICBxZTsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCXMzMiByaTsKKwlzMzIgYXBwX2lkOworfTsKKworLyoKKyAqIEJGQUQgKFBDSSBmdW5jdGlvbikgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfcyAgICAgICBiZmE7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICBiZmFfZmNzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJY29uc3QgY2hhciAqcGNpX25hbWU7CisJc3RydWN0IGJmYV9wY2lkZXZfcyBoYWxfcGNpZGV2OworCXN0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MgcGNpX2F0dHI7CisJdW5zaWduZWQgbG9uZyAgIHBjaV9iYXIwX21hcDsKKwl2b2lkIF9faW9tZW0gICAqcGNpX2JhcjBfa3ZhOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7CisJc3RydWN0IGNvbXBsZXRpb24gc3VzcGVuZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBkaXNhYmxlX2NvbXA7CisJYmZhX2Jvb2xlYW5fdCAgIGRpc2FibGVfYWN0aXZlOworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAgcHBvcnQ7CS8qIHBoeXNpY2FsIHBvcnQgb2YgdGhlIEJGQUQgKi8KKwlzdHJ1Y3QgYmZhX21lbWluZm9fcyBtZW1pbmZvOworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgICBpb2NfY2ZnOworCXUzMiAgICAgICAgaW5zdF9ubzsJLyogQkZBRCBpbnN0YW5jZSBudW1iZXIgKi8KKwl1MzIgICAgICAgIGJmYWRfZmxhZ3M7CisJc3BpbmxvY2tfdCAgICAgIGJmYWRfbG9jazsKKwlzdHJ1Y3QgYmZhZF9jZmdfcGFyYW1fcyBjZmdfZGF0YTsKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgbXNpeF90YWJbTUFYX01TSVhfRU5UUlldOworCWludCAgICAgICAgICAgICBudmVjOworCWNoYXIgICAgICAgICAgICBhZGFwdGVyX25hbWVbQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgcG9ydF9uYW1lW0JGQV9BREFQVEVSX1NZTV9OQU1FX0xFTl07CisJc3RydWN0IHRpbWVyX2xpc3QgaGFsX3RtbzsKKwl1bnNpZ25lZCBsb25nICAgaHNfc3RhcnQ7CisJc3RydWN0IGJmYWRfaW1fcyAqaW07CQkvKiBJTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfdG1fcyAqdG07CQkvKiBUTSBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGJmYWRfaXBmY19zICppcGZjOwkvKiBJUEZDIHNwZWNpZmljIGRhdGEgKi8KKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAgIGxvZ19kYXRhOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbW9kOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAqYWVuOworCXN0cnVjdCBiZmFfYWVuX3MgICAgICAgYWVuX2J1ZjsKKwlzdHJ1Y3QgYmZhZF9hZW5fZmlsZV9zIGZpbGVfYnVmW0JGQURfQUVOX01BWF9BUFBTXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZmlsZV9xOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBmaWxlX2ZyZWVfcTsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcyAgICAgIHBsb2dfYnVmOworCWludCAgICAgICAgICAgICByZWZfY291bnQ7CisJYmZhX2Jvb2xlYW5fdAlpcGZjX2VuYWJsZWQ7CisJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyBsaW5rX3N0YXRzOworCisJc3RydWN0IGtvYmplY3QgKmJmYV9rb2JqOworCXN0cnVjdCBrb2JqZWN0ICppb2Nfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqcHBvcnRfa29iajsKKwlzdHJ1Y3Qga29iamVjdCAqbHBvcnRfa29iajsKK307CisKKy8qCisgKiBSUE9SVCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zIHsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zIGZjc19ycG9ydDsKK307CisKK3N0cnVjdCBiZmFkX2J1Zl9pbmZvIHsKKwl2b2lkICAgICAgICAgICAqdmlydDsKKwlkbWFfYWRkcl90ICAgICAgcGh5czsKKwl1MzIgICAgICAgIHNpemU7Cit9OworCitzdHJ1Y3QgYmZhZF9mY3hwIHsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9zICpiZmFfcnBvcnQ7CisJYmZhX3N0YXR1c190ICAgIHJlcV9zdGF0dXM7CisJdTE2ICAgICAgICB0YWc7CisJdTE2ICAgICAgICByc3BfbGVuOworCXUxNiAgICAgICAgcnNwX21heGxlbjsKKwl1OCAgICAgICAgIHVzZV9pcmVxYnVmOworCXU4ICAgICAgICAgdXNlX2lyc3BidWY7CisJdTMyICAgICAgICBudW1fcmVxX3NnbGVzOworCXUzMiAgICAgICAgbnVtX3JzcF9zZ2xlczsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJdm9pZCAgICAgICAgICAgKnJlcWJ1Zl9pbmZvOworCXZvaWQgICAgICAgICAgICpyc3BidWZfaW5mbzsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcmVxX3NnZTsKKwlzdHJ1Y3QgYmZhX3NnZV9zICAqcnNwX3NnZTsKKwlmY3hwX3NlbmRfY2JfdCAgc2VuZF9jYmZuOworCXZvaWQgICAgICAgICAgICpzZW5kX2NiYXJnOworCXZvaWQgICAgICAgICAgICpiZmFfZmN4cDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOworfTsKKworc3RydWN0IGJmYWRfaGFsX2NvbXAgeworCWJmYV9zdGF0dXNfdCAgICBzdGF0dXM7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcDsKK307CisKKy8qCisgKiBNYWNybyB0byBvYnRhaW4gdGhlIGltbWVkaWF0ZSBsb3dlciBwb3dlcgorICogb2YgdHdvIGZvciB0aGUgaW50ZWdlci4KKyAqLworI2RlZmluZSBuZXh0TG93ZXJJbnQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJaW50IGo7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJKCp4KS0tOyAgICAJCSAgICAgICAgICAgICAgICAJXAorCWZvciAoaiA9IDE7IGogPCAoc2l6ZW9mKGludCkgKiA4KTsgaiA8PD0gMSkgICAgIFwKKwkJKCp4KSA9ICgqeCkgfCAoKngpID4+IGo7ICAgICAgICAJXAorCSgqeCkrKzsgICAgICAgICAgICAgICAgICAJICAgICAgICAJXAorCSgqeCkgPSAoKngpID4+IDE7ICAgICAgICAgICAgICAgICAgICAgICAJXAorfSB3aGlsZSAoMCkKKworCitiZmFfc3RhdHVzX3QgICAgYmZhZF92cG9ydF9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJCSAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZyk7CitiZmFfc3RhdHVzX3QgICAgYmZhZF92Zl9jcmVhdGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgdTE2IHZmX2lkLAorCQkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworYmZhX3N0YXR1c190ICAgIGJmYWRfY2ZnX3Bwb3J0KHN0cnVjdCBiZmFkX3MgKmJmYWQsIGVudW0gYmZhX3BvcnRfcm9sZSByb2xlKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFkX2Rydl9pbml0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfZHJ2X3N0YXJ0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfdW5jZmdfcHBvcnQoc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkICAgICAgICAgICAgYmZhZF9kcnZfc3RvcChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGFsX21lbV9yZWxlYXNlKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCAgICAgICAgICAgIGJmYWRfaGNiX2NvbXAodm9pZCAqYXJnLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworaW50ICAgICAgICAgICAgIGJmYWRfc2V0dXBfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgICAgICAgICAgICBiZmFkX3JlbW92ZV9pbnRyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCit2b2lkCQliZmFkX3VwZGF0ZV9oYWxfY2ZnKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmJmYV9jZmcpOworYmZhX3N0YXR1c190CWJmYWRfaGFsX21lbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfYmZhX3Rtbyh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZAkJYmZhZF9pbml0X3RpbWVyKHN0cnVjdCBiZmFkX3MgKmJmYWQpOworaW50CQliZmFkX3BjaV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfcGNpX3VuaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGJmYWRfcyAqYmZhZCk7Cit2b2lkCQliZmFkX2Zjc19wb3J0X2NmZyhzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X3VuaW5pdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQJCWJmYWRfZHJ2X2xvZ19sZXZlbF9zZXQoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitiZmFfc3RhdHVzX3QJYmZhZF9mYzRfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkCQliZmFkX2ZjNF9tb2R1bGVfZXhpdCh2b2lkKTsKKwordm9pZCBiZmFkX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IGJmYWRfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkKTsKK3ZvaWQgYmZhZF9vc19ycG9ydF9vbmxpbmVfd2FpdChzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK2ludCBiZmFkX29zX2dldF9saW5rdXBfZGVsYXkoc3RydWN0IGJmYWRfcyAqYmZhZCk7CitpbnQgYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKKworZXh0ZXJuIHN0cnVjdCBpZHIgYmZhZF9pbV9wb3J0X2luZGV4OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmZhZF9saXN0OworZXh0ZXJuIGludCBiZmFfbHVuX3F1ZXVlX2RlcHRoOworZXh0ZXJuIGludCBiZmFkX3N1cHBvcnRlZF9mYzRzOworZXh0ZXJuIGludCBiZmFfbGlua3VwX2RlbGF5OworCisjZW5kaWYgLyogX19CRkFEX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2Z3aW1nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzNGIwZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9md2ltZy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9md2ltZy5jIExpbnV4IGRyaXZlciBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxiZmFkX2Rydi5oPgorI2luY2x1ZGUgPGJmYWRfaW1fY29tcGF0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxiZmFfZndpbWdfcHJpdi5oPgorI2luY2x1ZGUgPGJmYS5oPgorCit1MzIgYmZpX2ltYWdlX2N0X3NpemU7Cit1MzIgYmZpX2ltYWdlX2NiX3NpemU7Cit1MzIgKmJmaV9pbWFnZV9jdDsKK3UzMiAqYmZpX2ltYWdlX2NiOworCisKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NUCSJjdGZ3LmJpbiIKKyNkZWZpbmUJQkZBRF9GV19GSUxFX0NCCSJjYmZ3LmJpbiIKK01PRFVMRV9GSVJNV0FSRShCRkFEX0ZXX0ZJTEVfQ1QpOworTU9EVUxFX0ZJUk1XQVJFKEJGQURfRldfRklMRV9DQik7CisKK3UzMiAqCitiZmFkX3JlYWRfZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqKmJmaV9pbWFnZSwKKwkJCXUzMiAqYmZpX2ltYWdlX3NpemUsIGNoYXIgKmZ3X25hbWUpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJnBkZXYtPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkNhbid0IGxvY2F0ZSBmaXJtd2FyZSAlc1xuIiwgZndfbmFtZSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJKmJmaV9pbWFnZSA9IHZtYWxsb2MoZnctPnNpemUpOworCWlmIChOVUxMID09ICpiZmlfaW1hZ2UpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkZhaWwgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBmdyBpbWFnZSAiCisJCQkic2l6ZT0leCFcbiIsICh1MzIpIGZ3LT5zaXplKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltZW1jcHkoKmJmaV9pbWFnZSwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKwkqYmZpX2ltYWdlX3NpemUgPSBmdy0+c2l6ZS9zaXplb2YodTMyKTsKKworCXJldHVybigqYmZpX2ltYWdlKTsKKworZXJyb3I6CisJcmV0dXJuKE5VTEwpOworfQorCit1MzIgKgorYmZhZF9nZXRfZmlybXdhcmVfYnVmKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlmIChwZGV2LT5kZXZpY2UgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpIHsKKwkJaWYgKGJmaV9pbWFnZV9jdF9zaXplID09IDApCisJCQliZmFkX3JlYWRfZmlybXdhcmUocGRldiwgJmJmaV9pbWFnZV9jdCwKKwkJCQkmYmZpX2ltYWdlX2N0X3NpemUsIEJGQURfRldfRklMRV9DVCk7CisJCXJldHVybihiZmlfaW1hZ2VfY3QpOworCX0gZWxzZSB7CisJCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSA9PSAwKQorCQkJYmZhZF9yZWFkX2Zpcm13YXJlKHBkZXYsICZiZmlfaW1hZ2VfY2IsCisJCQkJJmJmaV9pbWFnZV9jYl9zaXplLCBCRkFEX0ZXX0ZJTEVfQ0IpOworCQlyZXR1cm4oYmZpX2ltYWdlX2NiKTsKKwl9Cit9CisKK3UzMiAqCitiZmlfaW1hZ2VfY3RfZ2V0X2NodW5rKHUzMiBvZmYpCit7IHJldHVybiAodTMyICopKGJmaV9pbWFnZV9jdCArIG9mZik7IH0KKwordTMyICoKK2JmaV9pbWFnZV9jYl9nZXRfY2h1bmsodTMyIG9mZikKK3sgcmV0dXJuICh1MzIgKikoYmZpX2ltYWdlX2NiICsgb2ZmKTsgfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDAxMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uYwpAQCAtMCwwICsxLDEyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9pbS5jIExpbnV4IGRyaXZlciBJTSBtb2R1bGUuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF9pbS5oIgorI2luY2x1ZGUgImJmYWRfdHJjbW9kLmgiCisjaW5jbHVkZSAiYmZhX2NiX2lvaW1fbWFjcm9zLmgiCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKworQkZBX1RSQ19GSUxFKExEUlYsIElNKTsKKworREVGSU5FX0lEUihiZmFkX2ltX3BvcnRfaW5kZXgpOworc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworc3RhdGljIHZvaWQgYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgYmZhZF9pbV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21uZCwKKwkJdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOworc3RhdGljIGludCBiZmFkX2ltX3NsYXZlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2RvbmUodm9pZCAqZHJ2LCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCWVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywgdTggc2NzaV9zdGF0dXMsCisJCQlpbnQgc25zX2xlbiwgdTggKnNuc19pbmZvLCBzMzIgcmVzaWR1ZSkKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kID0gKHN0cnVjdCBzY3NpX2NtbmQgKilkaW87CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gZHJ2OworCXN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqaXRuaW1fZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbTsKKworCXN3aXRjaCAoaW9fc3RhdHVzKSB7CisJY2FzZSBCRklfSU9JTV9TVFNfT0s6CisJCWJmYV90cmMoYmZhZCwgc2NzaV9zdGF0dXMpOworCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgc2NzaV9zdGF0dXMpOworCQlzY3NpX3NldF9yZXNpZChjbW5kLCAwKTsKKworCQlpZiAoc25zX2xlbiA+IDApIHsKKwkJCWJmYV90cmMoYmZhZCwgc25zX2xlbik7CisJCQlpZiAoc25zX2xlbiA+IFNDU0lfU0VOU0VfQlVGRkVSU0laRSkKKwkJCQlzbnNfbGVuID0gU0NTSV9TRU5TRV9CVUZGRVJTSVpFOworCQkJbWVtY3B5KGNtbmQtPnNlbnNlX2J1ZmZlciwgc25zX2luZm8sIHNuc19sZW4pOworCQl9CisJCWlmIChyZXNpZHVlID4gMCkKKwkJCXNjc2lfc2V0X3Jlc2lkKGNtbmQsIHJlc2lkdWUpOworCQlicmVhazsKKworCWNhc2UgQkZJX0lPSU1fU1RTX0FCT1JURUQ6CisJY2FzZSBCRklfSU9JTV9TVFNfVElNRURPVVQ6CisJY2FzZSBCRklfSU9JTV9TVFNfUEFUSFRPVjoKKwlkZWZhdWx0OgorCQljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9FUlJPUiwgMCk7CisJfQorCisJLyogVW5tYXAgRE1BLCBpZiBob3N0IGlzIE5VTEwsIGl0IG1lYW5zIGEgc2NzaSBwYXNzdGhydSBjbWQgKi8KKwlpZiAoY21uZC0+ZGV2aWNlLT5ob3N0ICE9IE5VTEwpCisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCisJY21uZC0+aG9zdF9zY3JpYmJsZSA9IE5VTEw7CisJYmZhX3RyYyhiZmFkLCBjbW5kLT5yZXN1bHQpOworCisJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKGl0bmltX2RhdGEpIHsKKwkJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwkJaWYgKCFjbW5kLT5yZXN1bHQgJiYgaXRuaW0gJiYKKwkJCSAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpKSB7CisJCQkvKiBRdWV1ZSBkZXB0aCBhZGp1c3RtZW50IGZvciBnb29kIHN0YXR1cyBjb21wbGV0aW9uICovCisJCQliZmFkX29zX3JhbXBfdXBfcWRlcHRoKGl0bmltLCBjbW5kLT5kZXZpY2UpOworCQl9IGVsc2UgaWYgKGNtbmQtPnJlc3VsdCA9PSBTQU1fU1RBVF9UQVNLX1NFVF9GVUxMICYmIGl0bmltKSB7CisJCQkvKiBxZnVsbCBoYW5kbGluZyAqLworCQkJYmZhZF9vc19oYW5kbGVfcWZ1bGwoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2dvb2RfY29tcCh2b2lkICpkcnYsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKQoreworCXN0cnVjdCBzY3NpX2NtbmQgKmNtbmQgPSAoc3RydWN0IHNjc2lfY21uZCAqKWRpbzsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07CisKKwljbW5kLT5yZXN1bHQgPSBTY3NpUmVzdWx0KERJRF9PSywgU0NTSV9TVEFUVVNfR09PRCk7CisKKwkvKiBVbm1hcCBETUEsIGlmIGhvc3QgaXMgTlVMTCwgaXQgbWVhbnMgYSBzY3NpIHBhc3N0aHJ1IGNtZCAqLworCWlmIChjbW5kLT5kZXZpY2UtPmhvc3QgIT0gTlVMTCkKKwkJc2NzaV9kbWFfdW5tYXAoY21uZCk7CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKworCS8qIFF1ZXVlIGRlcHRoIGFkanVzdG1lbnQgKi8KKwlpZiAoYmZhX2x1bl9xdWV1ZV9kZXB0aCA+IGNtbmQtPmRldmljZS0+cXVldWVfZGVwdGgpIHsKKwkJaXRuaW1fZGF0YSA9IGNtbmQtPmRldmljZS0+aG9zdGRhdGE7CisJCWlmIChpdG5pbV9kYXRhKSB7CisJCQlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCQkJaWYgKGl0bmltKQorCQkJCWJmYWRfb3NfcmFtcF91cF9xZGVwdGgoaXRuaW0sIGNtbmQtPmRldmljZSk7CisJCX0KKwl9CisKKwljbW5kLT5zY3NpX2RvbmUoY21uZCk7Cit9CisKK3ZvaWQKK2JmYV9jYl9pb2ltX2Fib3J0KHZvaWQgKmRydiwgc3RydWN0IGJmYWRfaW9pbV9zICpkaW8pCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZGlvOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRydjsKKworCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX0VSUk9SLCAwKTsKKworCS8qIFVubWFwIERNQSwgaWYgaG9zdCBpcyBOVUxMLCBpdCBtZWFucyBhIHNjc2kgcGFzc3RocnUgY21kICovCisJaWYgKGNtbmQtPmRldmljZS0+aG9zdCAhPSBOVUxMKQorCQlzY3NpX2RtYV91bm1hcChjbW5kKTsKKworCWJmYV90cmMoYmZhZCwgY21uZC0+cmVzdWx0KTsKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKK30KKwordm9pZAorYmZhX2NiX3Rza2ltX2RvbmUodm9pZCAqYmZhZCwgc3RydWN0IGJmYWRfdHNraW1fcyAqZHRzaywKKwkJICAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpCit7CisJc3RydWN0IHNjc2lfY21uZCAqY21uZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopZHRzazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisKKwljbW5kLT5TQ3AuU3RhdHVzIHw9IHRza19zdGF0dXMgPDwgMTsKKwlzZXRfYml0KElPX0RPTkVfQklULCAodW5zaWduZWQgbG9uZyAqKSZjbW5kLT5TQ3AuU3RhdHVzKTsKKwl3cSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBjbW5kLT5TQ3AucHRyOworCWNtbmQtPlNDcC5wdHIgPSBOVUxMOworCisJaWYgKHdxKQorCQl3YWtlX3VwKHdxKTsKK30KKwordm9pZAorYmZhX2NiX2lvaW1fcmVzZnJlZSh2b2lkICpkcnYpCit7Cit9CisKKy8qKgorICogIFNjc2lfSG9zdF90ZW1wbGF0ZSBTQ1NJIGhvc3QgdGVtcGxhdGUKKyAqLworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJldHVybnMgQkZBRCBQQ0kgaW5mby4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorYmZhZF9pbV9pbmZvKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0YXRpYyBjaGFyICAgICBiZmFfYnVmWzI1Nl07CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkID0gaW1fcG9ydC0+YmZhZDsKKworCW1lbXNldCgmaW9jX2F0dHIsIDAsIHNpemVvZihpb2NfYXR0cikpOworCWJmYV9nZXRfYXR0cigmYmZhZC0+YmZhLCAmaW9jX2F0dHIpOworCisJbWVtc2V0KGJmYV9idWYsIDAsIHNpemVvZihiZmFfYnVmKSk7CisJc25wcmludGYoYmZhX2J1Ziwgc2l6ZW9mKGJmYV9idWYpLAorCQkgIkJyb2NhZGUgRkMvRkNPRSBBZGFwdGVyLCAiICJtb2RlbDogJXMgaHdwYXRoOiAlcyBkcml2ZXI6ICVzIiwKKwkJIGlvY19hdHRyLmFkYXB0ZXJfYXR0ci5tb2RlbCwgYmZhZC0+cGNpX25hbWUsCisJCSBCRkFEX0RSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gYmZhX2J1ZjsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIGFib3J0cyB0aGUgc3BlY2lmaWVkIFNDU0kgY29tbWFuZC4KKyAqCisgKiBSZXR1cm5zOiBTVUNDRVNTIG9yIEZBSUxFRC4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV9pb2ltX3MgKmhhbF9pbzsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICB0aW1lb3V0OworCWludCAgICAgICAgICAgICByYyA9IEZBSUxFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwloYWxfaW8gPSAoc3RydWN0IGJmYV9pb2ltX3MgKikgY21uZC0+aG9zdF9zY3JpYmJsZTsKKwlpZiAoIWhhbF9pbykgeworCQkvKiBJTyBoYXMgYmVlbiBjb21wbGV0ZWQsIHJldHJ1biBzdWNjZXNzICovCisJCXJjID0gU1VDQ0VTUzsKKwkJZ290byBvdXQ7CisJfQorCWlmIChoYWxfaW8tPmRpbyAhPSAoc3RydWN0IGJmYWRfaW9pbV9zICopIGNtbmQpIHsKKwkJcmMgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCWJmYV90cmMoYmZhZCwgaGFsX2lvLT5pb3RhZyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCWJmYV9pb2ltX2Fib3J0KGhhbF9pbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwkvKiBOZWVkIHRvIHdhaXQgdW50aWwgdGhlIGNvbW1hbmQgZ2V0IGFib3J0ZWQgKi8KKwl0aW1lb3V0ID0gMTA7CisJd2hpbGUgKChzdHJ1Y3QgYmZhX2lvaW1fcyAqKSBjbW5kLT5ob3N0X3NjcmliYmxlID09IGhhbF9pbykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCWlmICh0aW1lb3V0IDwgNCAqIEhaKQorCQkJdGltZW91dCAqPSAyOworCX0KKworCWNtbmQtPnNjc2lfZG9uZShjbW5kKTsKKwliZmFfdHJjKGJmYWQsIGhhbF9pby0+aW90YWcpOworCWJmYV9sb2coYmZhZC0+bG9nbW9kLCBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlRfQ09NUCwKKwkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sIGNtbmQsIGhhbF9pby0+aW90YWcpOworCXJldHVybiBTVUNDRVNTOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGJmYV9zdGF0dXNfdAorYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLAorCQkgICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW07CisJc3RydWN0IGJmYV9pdG5pbV9zICpiZmFfaXRuaW07CisJYmZhX3N0YXR1c190ICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJICAgICAgICJ0YXJnZXQgcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW1cbiIpOworCQlyYyA9IEJGQV9TVEFUVVNfRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFNldCBob3N0X3NjcmliYmxlIHRvIE5VTEwgdG8gYXZvaWQgYWJvcnRpbmcgYSB0YXNrIGNvbW1hbmQgaWYKKwkgKiBoYXBwZW5zLgorCSAqLworCWNtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOworCWNtbmQtPlNDcC5TdGF0dXMgPSAwOworCWJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW0tPmZjc19pdG5pbSk7CisJYmZhX3Rza2ltX3N0YXJ0KHRza2ltLCBiZmFfaXRuaW0sIChsdW5fdCkwLAorCQkJICAgIEZDUF9UTV9UQVJHRVRfUkVTRVQsIEJGQURfVEFSR0VUX1JFU0VUX1RNTyk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeSwgcmVzZXRzIGEgTFVOIGFuZCBhYm9ydCBpdHMgYWxsIGNvbW1hbmRzLgorICoKKyAqIFJldHVybnM6IFNVQ0NFU1Mgb3IgRkFJTEVELgorICoKKyAqLworc3RhdGljIGludAorYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kKQoreworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gY21uZC0+ZGV2aWNlLT5ob3N0OworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCQkoc3RydWN0IGJmYWRfaW1fcG9ydF9zICopIHNob3N0LT5ob3N0ZGF0YVswXTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGEgPSBjbW5kLT5kZXZpY2UtPmhvc3RkYXRhOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYV90c2tpbV9zICp0c2tpbTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKwlpbnQgICAgICAgICAgICAgcmMgPSBTVUNDRVNTOworCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKKwllbnVtIGJmaV90c2tpbV9zdGF0dXMgdGFza19zdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaXRuaW0gPSBpdG5pbV9kYXRhLT5pdG5pbTsKKwlpZiAoIWl0bmltKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyYyA9IEZBSUxFRDsKKwkJZ290byBvdXQ7CisJfQorCisJdHNraW0gPSBiZmFfdHNraW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX3Rza2ltX3MgKikgY21uZCk7CisJaWYgKCF0c2tpbSkgeworCQlCRkFfREVWX1BSSU5URihiZmFkLCBCRkFfRVJSLAorCQkJCSJMVU4gcmVzZXQsIGZhaWwgdG8gYWxsb2NhdGUgdHNraW0iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXJjID0gRkFJTEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKioKKwkgKiBTZXQgaG9zdF9zY3JpYmJsZSB0byBOVUxMIHRvIGF2b2lkIGFib3J0aW5nIGEgdGFzayBjb21tYW5kCisJICogaWYgaGFwcGVucy4KKwkgKi8KKwljbW5kLT5ob3N0X3NjcmliYmxlID0gTlVMTDsKKwljbW5kLT5TQ3AucHRyID0gKGNoYXIgKikmd3E7CisJY21uZC0+U0NwLlN0YXR1cyA9IDA7CisJYmZhX2l0bmltID0gYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKCZpdG5pbS0+ZmNzX2l0bmltKTsKKwliZmFfdHNraW1fc3RhcnQodHNraW0sIGJmYV9pdG5pbSwKKwkJCSAgICBiZmFkX2ludF90b19sdW4oY21uZC0+ZGV2aWNlLT5sdW4pLAorCQkJICAgIEZDUF9UTV9MVU5fUkVTRVQsIEJGQURfTFVOX1JFU0VUX1RNTyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwl3YWl0X2V2ZW50KHdxLCB0ZXN0X2JpdChJT19ET05FX0JJVCwKKwkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKworCXRhc2tfc3RhdHVzID0gY21uZC0+U0NwLlN0YXR1cyA+PiAxOworCWlmICh0YXNrX3N0YXR1cyAhPSBCRklfVFNLSU1fU1RTX09LKSB7CisJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsICJMVU4gcmVzZXQgZmFpbHVyZSwgc3RhdHVzOiAlZFxuIiwKKwkJCSAgICAgICB0YXNrX3N0YXR1cyk7CisJCXJjID0gRkFJTEVEOworCX0KKworb3V0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHJlc2V0cyB0aGUgYnVzIGFuZCBhYm9ydCBhbGwgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqY21uZCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNtbmQtPmRldmljZS0+aG9zdDsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQgPQorCQkJCShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKikgc2hvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAgICppdG5pbTsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJdTMyICAgICAgICBpLCByYywgZXJyX2NudCA9IDA7CisJREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCWVudW0gYmZpX3Rza2ltX3N0YXR1cyB0YXNrX3N0YXR1czsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZDUF9UQVJHRVQ7IGkrKykgeworCQlpdG5pbSA9IGJmYWRfb3NfZ2V0X2l0bmltKGltX3BvcnQsIGkpOworCQlpZiAoaXRuaW0pIHsKKwkJCWNtbmQtPlNDcC5wdHIgPSAoY2hhciAqKSZ3cTsKKwkJCXJjID0gYmZhZF9pbV90YXJnZXRfcmVzZXRfc2VuZChiZmFkLCBjbW5kLCBpdG5pbSk7CisJCQlpZiAocmMgIT0gQkZBX1NUQVRVU19PSykgeworCQkJCWVycl9jbnQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogd2FpdCB0YXJnZXQgcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQkJd2FpdF9ldmVudCh3cSwgdGVzdF9iaXQoSU9fRE9ORV9CSVQsCisJCQkJCSh1bnNpZ25lZCBsb25nICopJmNtbmQtPlNDcC5TdGF0dXMpKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCQkJdGFza19zdGF0dXMgPSBjbW5kLT5TQ3AuU3RhdHVzID4+IDE7CisJCQlpZiAodGFza19zdGF0dXMgIT0gQkZJX1RTS0lNX1NUU19PSykgeworCQkJCUJGQV9ERVZfUFJJTlRGKGJmYWQsIEJGQV9FUlIsCisJCQkJCSJ0YXJnZXQgcmVzZXQgZmFpbHVyZSwiCisJCQkJCSIgc3RhdHVzOiAlZFxuIiwgdGFza19zdGF0dXMpOworCQkJCWVycl9jbnQrKzsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmIChlcnJfY250KQorCQlyZXR1cm4gRkFJTEVEOworCisJcmV0dXJuIFNVQ0NFU1M7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2Rlc3Ryb3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2ltX3NsYXZlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXNkZXYtPmhvc3RkYXRhID0gTlVMTDsKKwlyZXR1cm47Cit9CisKKy8qKgorICogIEJGQSBGQ1MgaXRuaW0gY2FsbGJhY2tzCisgKi8KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGFsbG9jIGNhbGxiYWNrLCBhZnRlciBzdWNjZXNzZnVsIFBSTEkKKyAqIENvbnRleHQ6IEludGVycnVwdAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX2FsbG9jKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKippdG5pbSwKKwkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpCit7CisJKml0bmltX2RydiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiZmFkX2l0bmltX3MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoKml0bmltX2RydiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkoKml0bmltX2RydiktPmltID0gYmZhZC0+aW07CisJKml0bmltID0gJigqaXRuaW1fZHJ2KS0+ZmNzX2l0bmltOworCSgqaXRuaW1fZHJ2KS0+c3RhdGUgPSBJVE5JTV9TVEFURV9OT05FOworCisJLyoKKwkgKiBJbml0aWF6ZSB0aGUgaXRuaW1fd29yaworCSAqLworCUlOSVRfV09SSygmKCppdG5pbV9kcnYpLT5pdG5pbV93b3JrLCBiZmFkX2ltX2l0bmltX3dvcmtfaGFuZGxlcik7CisJYmZhZC0+YmZhZF9mbGFncyB8PSBCRkFEX1JQT1JUX09OTElORTsKK30KKworLyoqCisgKiBCRkEgRkNTIGl0bmltIGZyZWUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbV9kcnYpCit7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0OworCXd3bl90IHd3cG47CisJdTMyIGZjaWQ7CisJY2hhciB3d3BuX3N0clszMl0sIGZjaWRfc3RyWzE2XTsKKworCS8qIG9ubGluZSB0byBmcmVlIHN0YXRlIHRyYW5zdGlvbiBzaG91bGQgbm90IGhhcHBlbiAqLworCWJmYV9hc3NlcnQoaXRuaW1fZHJ2LT5zdGF0ZSAhPSBJVE5JTV9TVEFURV9PTkxJTkUpOworCisJaXRuaW1fZHJ2LT5xdWV1ZV93b3JrID0gMTsKKwkvKiBvZmZsaW5lIHJlcXVlc3QgaXMgbm90IHlldCBkb25lLCB1c2UgdGhlIHNhbWUgcmVxdWVzdCB0byBmcmVlICovCisJaWYgKGl0bmltX2Rydi0+c3RhdGUgPT0gSVROSU1fU1RBVEVfT0ZGTElORV9QRU5ESU5HKQorCQlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAwOworCisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX0ZSRUU7CisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwlpdG5pbV9kcnYtPmltX3BvcnQgPSBwb3J0LT5pbV9wb3J0OworCXd3cG4gPSBiZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJZmNpZCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwlmY2lkMnN0cihmY2lkX3N0ciwgZmNpZCk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSwKKwkJcG9ydC0+aW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvbmxpbmUgY2FsbGJhY2suCisgKiBDb250ZXh0OiBJbnRlcnJ1cHQuIGJmYWRfbG9jayBpcyBoZWxkCisgKi8KK3ZvaWQKK2JmYV9mY2JfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2RydikKK3sKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisKKwlpdG5pbV9kcnYtPmJmYV9pdG5pbSA9IGJmYV9mY3NfaXRuaW1fZ2V0X2hhbGl0bigmaXRuaW1fZHJ2LT5mY3NfaXRuaW0pOworCXBvcnQgPSBiZmFfZmNzX2l0bmltX2dldF9kcnZwb3J0KCZpdG5pbV9kcnYtPmZjc19pdG5pbSk7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09OTElORTsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJYmZhZF9vc19pdG5pbV9wcm9jZXNzKGl0bmltX2Rydik7Cit9CisKKy8qKgorICogQkZBIEZDUyBpdG5pbSBvZmZsaW5lIGNhbGxiYWNrLgorICogQ29udGV4dDogSW50ZXJydXB0LiBiZmFkX2xvY2sgaXMgaGVsZAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX3BvcnRfcyAgICAqcG9ydDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkOworCisJcG9ydCA9IGJmYV9mY3NfaXRuaW1fZ2V0X2RydnBvcnQoJml0bmltX2Rydi0+ZmNzX2l0bmltKTsKKwliZmFkID0gcG9ydC0+YmZhZDsKKwlpZiAoKGJmYWQtPnBwb3J0LmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkgfHwKKwkJIChwb3J0LT5mbGFncyAmIEJGQURfUE9SVF9ERUxFVEUpKSB7CisJCWl0bmltX2Rydi0+c3RhdGUgPSBJVE5JTV9TVEFURV9PRkZMSU5FOworCQlyZXR1cm47CisJfQorCWl0bmltX2Rydi0+aW1fcG9ydCA9IHBvcnQtPmltX3BvcnQ7CisJaXRuaW1fZHJ2LT5zdGF0ZSA9IElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzsKKwlpdG5pbV9kcnYtPnF1ZXVlX3dvcmsgPSAxOworCWJmYWRfb3NfaXRuaW1fcHJvY2VzcyhpdG5pbV9kcnYpOworfQorCisvKioKKyAqIEJGQSBGQ1MgaXRuaW0gdGltZW91dCBjYWxsYmFjay4KKyAqIENvbnRleHQ6IEludGVycnVwdC4gYmZhZF9sb2NrIGlzIGhlbGQKKyAqLwordm9pZCBiZmFfZmNiX2l0bmltX3RvdihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdGUgPSBJVE5JTV9TVEFURV9USU1FT1VUOworfQorCisvKioKKyAqIFBhdGggVE9WIHByb2Nlc3NpbmcgYmVnaW4gbm90aWZpY2F0aW9uIC0tIGR1bW15IGZvciBsaW51eAorICovCit2b2lkCitiZmFfZmNiX2l0bmltX3Rvdl9iZWdpbihzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSkKK3sKK30KKworCisKKy8qKgorICogQWxsb2NhdGUgYSBTY3NpX0hvc3QgZm9yIGEgcG9ydC4KKyAqLworaW50CitiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJaW50IGVycm9yID0gMTsKKworCWlmICghaWRyX3ByZV9nZXQoJmJmYWRfaW1fcG9ydF9pbmRleCwgR0ZQX0tFUk5FTCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRyX3ByZV9nZXQgZmFpbHVyZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gaWRyX2dldF9uZXcoJmJmYWRfaW1fcG9ydF9pbmRleCwgaW1fcG9ydCwKKwkJCQkJICZpbV9wb3J0LT5pZHJfaWQpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZHJfZ2V0X25ldyBmYWlsdXJlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaW1fcG9ydC0+c2hvc3QgPSBiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhpbV9wb3J0LCBiZmFkKTsKKwlpZiAoIWltX3BvcnQtPnNob3N0KSB7CisJCWVycm9yID0gMTsKKwkJZ290byBvdXRfZnJlZV9pZHI7CisJfQorCisJaW1fcG9ydC0+c2hvc3QtPmhvc3RkYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpaW1fcG9ydDsKKwlpbV9wb3J0LT5zaG9zdC0+dW5pcXVlX2lkID0gaW1fcG9ydC0+aWRyX2lkOworCWltX3BvcnQtPnNob3N0LT50aGlzX2lkID0gLTE7CisJaW1fcG9ydC0+c2hvc3QtPm1heF9pZCA9IE1BWF9GQ1BfVEFSR0VUOworCWltX3BvcnQtPnNob3N0LT5tYXhfbHVuID0gTUFYX0ZDUF9MVU47CisJaW1fcG9ydC0+c2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CisJaW1fcG9ydC0+c2hvc3QtPmNhbl9xdWV1ZSA9IGJmYWQtPmNmZ19kYXRhLmlvY19xdWV1ZV9kZXB0aDsKKwlpbV9wb3J0LT5zaG9zdC0+dHJhbnNwb3J0dCA9IGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGU7CisKKwllcnJvciA9IGJmYWRfb3Nfc2NzaV9hZGRfaG9zdChpbV9wb3J0LT5zaG9zdCwgaW1fcG9ydCwgYmZhZCk7CisJaWYgKGVycm9yKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJmYWRfb3Nfc2NzaV9hZGRfaG9zdCBmYWlsdXJlICVkXG4iLAorCQkJCQkJCWVycm9yKTsKKwkJZ290byBvdXRfZmNfcmVsOworCX0KKworCS8qIHNldHVwIGhvc3QgZml4ZWQgYXR0cmlidXRlIGlmIHRoZSBsayBzdXBwb3J0cyAqLworCWJmYWRfb3NfZmNfaG9zdF9pbml0KGltX3BvcnQpOworCisJcmV0dXJuIDA7CisKK291dF9mY19yZWw6CisJc2NzaV9ob3N0X3B1dChpbV9wb3J0LT5zaG9zdCk7CitvdXRfZnJlZV9pZHI6CisJaWRyX3JlbW92ZSgmYmZhZF9pbV9wb3J0X2luZGV4LCBpbV9wb3J0LT5pZHJfaWQpOworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWJmYV90cmMoYmZhZCwgYmZhZC0+aW5zdF9ubyk7CisJYmZhX2xvZyhiZmFkLT5sb2dtb2QsIEJGQV9MT0dfTElOVVhfU0NTSV9IT1NUX0ZSRUUsCisJCQlpbV9wb3J0LT5zaG9zdC0+aG9zdF9ubyk7CisKKwlmY19yZW1vdmVfaG9zdChpbV9wb3J0LT5zaG9zdCk7CisKKwlzY3NpX3JlbW92ZV9ob3N0KGltX3BvcnQtPnNob3N0KTsKKwlzY3NpX2hvc3RfcHV0KGltX3BvcnQtPnNob3N0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlpZHJfcmVtb3ZlKCZiZmFkX2ltX3BvcnRfaW5kZXgsIGltX3BvcnQtPmlkcl9pZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX3BvcnRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MsIHBvcnRfZGVsZXRlX3dvcmspOworCisJYmZhZF9pbV9zY3NpX2hvc3RfZnJlZShpbV9wb3J0LT5iZmFkLCBpbV9wb3J0KTsKKwliZmFkX2ltX3BvcnRfY2xlYW4oaW1fcG9ydCk7CisJa2ZyZWUoaW1fcG9ydCk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJaW50ICAgICAgICAgICAgIHJjID0gQkZBX1NUQVRVU19PSzsKKwlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQ7CisKKwlpbV9wb3J0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmYWRfaW1fcG9ydF9zKSwgR0ZQX0FUT01JQyk7CisJaWYgKGltX3BvcnQgPT0gTlVMTCkgeworCQlyYyA9IEJGQV9TVEFUVVNfRU5PTUVNOworCQlnb3RvIGV4dDsKKwl9CisJcG9ydC0+aW1fcG9ydCA9IGltX3BvcnQ7CisJaW1fcG9ydC0+cG9ydCA9IHBvcnQ7CisJaW1fcG9ydC0+YmZhZCA9IGJmYWQ7CisKKwlJTklUX1dPUksoJmltX3BvcnQtPnBvcnRfZGVsZXRlX3dvcmssIGJmYWRfaW1fcG9ydF9kZWxldGVfaGFuZGxlcik7CisJSU5JVF9MSVNUX0hFQUQoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW1fcG9ydC0+YmluZGluZ19saXN0KTsKKworZXh0OgorCXJldHVybiByYzsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0gcG9ydC0+aW1fcG9ydDsKKworCXF1ZXVlX3dvcmsoYmZhZC0+aW0tPmRydl93b3JrcSwKKwkJCQkmaW1fcG9ydC0+cG9ydF9kZWxldGVfd29yayk7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IGJmYWRfZmNwX2JpbmRpbmcgKmJwLCAqYnBfbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJmYWRfcyAqYmZhZCA9ICBpbV9wb3J0LT5iZmFkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgYnBfbmV3LCAmaW1fcG9ydC0+YmluZGluZ19saXN0LAorCQkJCQlsaXN0X2VudHJ5KSB7CisJCWxpc3RfZGVsKCZicC0+bGlzdF9lbnRyeSk7CisJCWtmcmVlKGJwKTsKKwl9CisKKwkvKiB0aGUgaXRuaW1fbWFwcGVkX2xpc3QgbXVzdCBiZSBlbXB0eSBhdCB0aGlzIHRpbWUgKi8KKwliZmFfYXNzZXJ0KGxpc3RfZW1wdHkoJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0KSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZAorYmZhZF9pbV9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpCit7Cit9CisKK3ZvaWQKK2JmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCkKK3sKK30KKworYmZhX3N0YXR1c190CitiZmFkX2ltX3Byb2JlKHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IGJmYWRfaW1fcyAgICAgICppbTsKKwliZmFfc3RhdHVzX3QgICAgcmMgPSBCRkFfU1RBVFVTX09LOworCisJaW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZhZF9pbV9zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGltID09IE5VTEwpIHsKKwkJcmMgPSBCRkFfU1RBVFVTX0VOT01FTTsKKwkJZ290byBleHQ7CisJfQorCisJYmZhZC0+aW0gPSBpbTsKKwlpbS0+YmZhZCA9IGJmYWQ7CisKKwlpZiAoYmZhZF9vc190aHJlYWRfd29ya3EoYmZhZCkgIT0gQkZBX1NUQVRVU19PSykgeworCQlrZnJlZShpbSk7CisJCXJjID0gQkZBX1NUQVRVU19GQUlMRUQ7CisJfQorCitleHQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkCitiZmFkX2ltX3Byb2JlX3VuZG8oc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpZiAoYmZhZC0+aW0pIHsKKwkJYmZhZF9vc19kZXN0cm95X3dvcmtxKGJmYWQtPmltKTsKKwkJa2ZyZWUoYmZhZC0+aW0pOworCQliZmFkLT5pbSA9IE5VTEw7CisJfQorfQorCisKKworCitpbnQKK2JmYWRfb3Nfc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0LAorCQkJc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKyAgICBpZiAoaW1fcG9ydC0+cG9ydC0+cHZiX3R5cGUgPT0gQkZBRF9QT1JUX1BIWVNfQkFTRSkKKwkJZGV2ID0gJmJmYWQtPnBjaWRldi0+ZGV2OworICAgIGVsc2UKKwkJZGV2ID0gJmJmYWQtPnBwb3J0LmltX3BvcnQtPnNob3N0LT5zaG9zdF9nZW5kZXY7CisKKyAgICByZXR1cm4gc2NzaV9hZGRfaG9zdChzaG9zdCwgZGV2KTsKK30KKworc3RydWN0IFNjc2lfSG9zdCAqCitiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqc2h0OworCisJaWYgKGltX3BvcnQtPnBvcnQtPnB2Yl90eXBlID09IEJGQURfUE9SVF9QSFlTX0JBU0UpCisJCXNodCA9ICZiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKKwllbHNlCisJCXNodCA9ICZiZmFkX2ltX3Zwb3J0X3RlbXBsYXRlOworCisJc2h0LT5zZ190YWJsZXNpemUgPSBiZmFkLT5jZmdfZGF0YS5pb19tYXhfc2dlOworCisJcmV0dXJuIHNjc2lfaG9zdF9hbGxvYyhzaHQsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7Cit9CisKK3ZvaWQKK2JmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KQoreworCWZsdXNoX3dvcmtxdWV1ZShiZmFkLT5pbS0+ZHJ2X3dvcmtxKTsKKwliZmFkX2ltX3Njc2lfaG9zdF9mcmVlKGltX3BvcnQtPmJmYWQsIGltX3BvcnQpOworCWJmYWRfaW1fcG9ydF9jbGVhbihpbV9wb3J0KTsKKwlrZnJlZShpbV9wb3J0KTsKK30KKwordm9pZAorYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKQoreworCWlmIChpbSAmJiBpbS0+ZHJ2X3dvcmtxKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGltLT5kcnZfd29ya3EpOworCQlpbS0+ZHJ2X3dvcmtxID0gTlVMTDsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9vc190aHJlYWRfd29ya3Eoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gYmZhZC0+aW07CisKKwliZmFfdHJjKGJmYWQsIDApOworCXNucHJpbnRmKGltLT5kcnZfd29ya3FfbmFtZSwgQkZBRF9LT0JKX05BTUVfTEVOLCAiYmZhZF93cV8lZCIsCisJCSBiZmFkLT5pbnN0X25vKTsKKwlpbS0+ZHJ2X3dvcmtxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoaW0tPmRydl93b3JrcV9uYW1lKTsKKwlpZiAoIWltLT5kcnZfd29ya3EpCisJCXJldHVybiBCRkFfU1RBVFVTX0ZBSUxFRDsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqIFNjc2lfSG9zdCB0ZW1wbGF0ZSBlbnRyeS4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE9TIGVudHJ5IHBvaW50IHRvIGFkanVzdCB0aGUgcXVldWVfZGVwdGhzIG9uIGEgcGVyLWRldmljZSBiYXNpcy4KKyAqIENhbGxlZCBvbmNlIHBlciBkZXZpY2UgZHVyaW5nIHRoZSBidXMgc2Nhbi4KKyAqIFJldHVybiBub24temVybyBpZiBmYWlscy4KKyAqLworc3RhdGljIGludAorYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCWlmIChzZGV2LT50YWdnZWRfc3VwcG9ydGVkKQorCQlzY3NpX2FjdGl2YXRlX3RjcShzZGV2LCBiZmFfbHVuX3F1ZXVlX2RlcHRoKTsKKwllbHNlCisJCXNjc2lfZGVhY3RpdmF0ZV90Y3Eoc2RldiwgYmZhX2x1bl9xdWV1ZV9kZXB0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZSA9IHsKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLm5hbWUgPSBCRkFEX0RSSVZFUl9OQU1FLAorCS5pbmZvID0gYmZhZF9pbV9pbmZvLAorCS5xdWV1ZWNvbW1hbmQgPSBiZmFkX2ltX3F1ZXVlY29tbWFuZCwKKwkuZWhfYWJvcnRfaGFuZGxlciA9IGJmYWRfaW1fYWJvcnRfaGFuZGxlciwKKwkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2x1bl9oYW5kbGVyLAorCS5laF9idXNfcmVzZXRfaGFuZGxlciA9IGJmYWRfaW1fcmVzZXRfYnVzX2hhbmRsZXIsCisKKwkuc2xhdmVfYWxsb2MgPSBiZmFkX2ltX3NsYXZlX2FsbG9jLAorCS5zbGF2ZV9jb25maWd1cmUgPSBiZmFkX2ltX3NsYXZlX2NvbmZpZ3VyZSwKKwkuc2xhdmVfZGVzdHJveSA9IGJmYWRfaW1fc2xhdmVfZGVzdHJveSwKKworCS50aGlzX2lkID0gLTEsCisJLnNnX3RhYmxlc2l6ZSA9IEJGQURfSU9fTUFYX1NHRSwKKwkuY21kX3Blcl9sdW4gPSAzLAorCS51c2VfY2x1c3RlcmluZyA9IEVOQUJMRV9DTFVTVEVSSU5HLAorCS5zaG9zdF9hdHRycyA9IGJmYWRfaW1faG9zdF9hdHRycywKKwkubWF4X3NlY3RvcnMgPSAweEZGRkYsCit9OworCitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGUgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gQkZBRF9EUklWRVJfTkFNRSwKKwkuaW5mbyA9IGJmYWRfaW1faW5mbywKKwkucXVldWVjb21tYW5kID0gYmZhZF9pbV9xdWV1ZWNvbW1hbmQsCisJLmVoX2Fib3J0X2hhbmRsZXIgPSBiZmFkX2ltX2Fib3J0X2hhbmRsZXIsCisJLmVoX2RldmljZV9yZXNldF9oYW5kbGVyID0gYmZhZF9pbV9yZXNldF9sdW5faGFuZGxlciwKKwkuZWhfYnVzX3Jlc2V0X2hhbmRsZXIgPSBiZmFkX2ltX3Jlc2V0X2J1c19oYW5kbGVyLAorCisJLnNsYXZlX2FsbG9jID0gYmZhZF9pbV9zbGF2ZV9hbGxvYywKKwkuc2xhdmVfY29uZmlndXJlID0gYmZhZF9pbV9zbGF2ZV9jb25maWd1cmUsCisJLnNsYXZlX2Rlc3Ryb3kgPSBiZmFkX2ltX3NsYXZlX2Rlc3Ryb3ksCisKKwkudGhpc19pZCA9IC0xLAorCS5zZ190YWJsZXNpemUgPSBCRkFEX0lPX01BWF9TR0UsCisJLmNtZF9wZXJfbHVuID0gMywKKwkudXNlX2NsdXN0ZXJpbmcgPSBFTkFCTEVfQ0xVU1RFUklORywKKwkuc2hvc3RfYXR0cnMgPSBiZmFkX2ltX3Zwb3J0X2F0dHJzLAorCS5tYXhfc2VjdG9ycyA9IDB4RkZGRiwKK307CisKK3ZvaWQKK2JmYWRfaW1fcHJvYmVfcG9zdChzdHJ1Y3QgYmZhZF9pbV9zICppbSkKK3sKKwlmbHVzaF93b3JrcXVldWUoaW0tPmRydl93b3JrcSk7Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhZF9pbV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgPQorCQlmY19hdHRhY2hfdHJhbnNwb3J0KCZiZmFkX2ltX2ZjX2Z1bmN0aW9uX3RlbXBsYXRlKTsKKwlpZiAoIWJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCXJldHVybiBCRkFfU1RBVFVTX0VOT01FTTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFkX2ltX21vZHVsZV9leGl0KHZvaWQpCit7CisJaWYgKGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpCisJCWZjX3JlbGVhc2VfdHJhbnNwb3J0KGJmYWRfaW1fc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUpOworfQorCit2b2lkCitiZmFkX29zX2l0bmltX3Byb2Nlc3Moc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KQoreworCXN0cnVjdCBiZmFkX2ltX3MgICAgICAqaW0gPSBpdG5pbV9kcnYtPmltOworCisJaWYgKGl0bmltX2Rydi0+cXVldWVfd29yaykKKwkJcXVldWVfd29yayhpbS0+ZHJ2X3dvcmtxLCAmaXRuaW1fZHJ2LT5pdG5pbV93b3JrKTsKK30KKwordm9pZAorYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBzY3NpX2RldmljZSAqdG1wX3NkZXY7CisKKwlpZiAoKChqaWZmaWVzIC0gaXRuaW0tPmxhc3RfcmFtcF91cF90aW1lKSA+CisJCUJGQV9RVUVVRV9GVUxMX1JBTVBfVVBfVElNRSAqIEhaKSAmJgorCQkoKGppZmZpZXMgLSBpdG5pbS0+bGFzdF9xdWV1ZV9mdWxsX3RpbWUpID4KKwkJQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FICogSFopKSB7CisJCXNob3N0X2Zvcl9lYWNoX2RldmljZSh0bXBfc2Rldiwgc2Rldi0+aG9zdCkgeworCQkJaWYgKGJmYV9sdW5fcXVldWVfZGVwdGggPiB0bXBfc2Rldi0+cXVldWVfZGVwdGgpIHsKKwkJCQlpZiAodG1wX3NkZXYtPmlkICE9IHNkZXYtPmlkKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAodG1wX3NkZXYtPm9yZGVyZWRfdGFncykKKwkJCQkJc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgodG1wX3NkZXYsCisJCQkJCQlNU0dfT1JERVJFRF9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKwkJCQllbHNlCisJCQkJCXNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKHRtcF9zZGV2LAorCQkJCQkJTVNHX1NJTVBMRV9UQUcsCisJCQkJCQl0bXBfc2Rldi0+cXVldWVfZGVwdGggKyAxKTsKKworCQkJCWl0bmltLT5sYXN0X3JhbXBfdXBfdGltZSA9IGppZmZpZXM7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQKK2JmYWRfb3NfaGFuZGxlX3FmdWxsKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltLCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCit7CisJc3RydWN0IHNjc2lfZGV2aWNlICp0bXBfc2RldjsKKworCWl0bmltLT5sYXN0X3F1ZXVlX2Z1bGxfdGltZSA9IGppZmZpZXM7CisKKwlzaG9zdF9mb3JfZWFjaF9kZXZpY2UodG1wX3NkZXYsIHNkZXYtPmhvc3QpIHsKKwkJaWYgKHRtcF9zZGV2LT5pZCAhPSBzZGV2LT5pZCkKKwkJCWNvbnRpbnVlOworCQlzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwodG1wX3NkZXYsIHRtcF9zZGV2LT5xdWV1ZV9kZXB0aCAtIDEpOworCX0KK30KKworCisKKworc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCkKK3sKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltID0gTlVMTDsKKworCS8qIFNlYXJjaCB0aGUgbWFwcGVkIGxpc3QgZm9yIHRoaXMgdGFyZ2V0IElEICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdG5pbSwgJmltX3BvcnQtPml0bmltX21hcHBlZF9saXN0LCBsaXN0X2VudHJ5KSB7CisJCWlmIChpZCA9PSBpdG5pbS0+c2NzaV90Z3RfaWQpCisJCQlyZXR1cm4gaXRuaW07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogU2NzaV9Ib3N0IHRlbXBsYXRlIGVudHJ5IHNsYXZlX2FsbG9jCisgKi8KK3N0YXRpYyBpbnQKK2JmYWRfaW1fc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQoreworCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQgPSBzdGFyZ2V0X3RvX3Jwb3J0KHNjc2lfdGFyZ2V0KHNkZXYpKTsKKworCWlmICghcnBvcnQgfHwgZmNfcmVtb3RlX3BvcnRfY2hrcmVhZHkocnBvcnQpKQorCQlyZXR1cm4gLUVOWElPOworCisJc2Rldi0+aG9zdGRhdGEgPSBycG9ydC0+ZGRfZGF0YTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX2ZjX2hvc3RfaW5pdChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGltX3BvcnQtPnNob3N0OworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfcG9ydF9zICAgICpwb3J0ID0gaW1fcG9ydC0+cG9ydDsKKwl1bmlvbiBhdHRyIHsKKwkJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcGF0dHI7CisJCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyAgaW9jX2F0dHI7CisJfSBhdHRyOworCisJZmNfaG9zdF9ub2RlX25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisJZmNfaG9zdF9wb3J0X25hbWUoaG9zdCkgPQorCQliZmFfb3NfaHRvbmxsKChiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydC0+ZmNzX3BvcnQpKSk7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzKGhvc3QpID0gRkNfQ09TX0NMQVNTMzsKKworCW1lbXNldChmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpLCAwLAorCSAgICAgICBzaXplb2YoZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KSkpOworCWlmIChiZmFkX3N1cHBvcnRlZF9mYzRzICYgKEJGQV9QT1JUX1JPTEVfRkNQX0lNIHwgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pKQorCQkvKiBGb3IgRkNQIHR5cGUgMHgwOCAqLworCQlmY19ob3N0X3N1cHBvcnRlZF9mYzRzKGhvc3QpWzJdID0gMTsKKwlpZiAoYmZhZF9zdXBwb3J0ZWRfZmM0cyAmIEJGQV9QT1JUX1JPTEVfRkNQX0lQRkMpCisJCS8qIEZvciBMTEMvU05BUCB0eXBlIDB4MDUgKi8KKwkJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVszXSA9IDB4MjA7CisJLyogRm9yIGZpYnJlIGNoYW5uZWwgc2VydmljZXMgdHlwZSAweDIwICovCisJZmNfaG9zdF9zdXBwb3J0ZWRfZmM0cyhob3N0KVs3XSA9IDE7CisKKwltZW1zZXQoJmF0dHIuaW9jX2F0dHIsIDAsIHNpemVvZihhdHRyLmlvY19hdHRyKSk7CisJYmZhX2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLmlvY19hdHRyKTsKKwlzcHJpbnRmKGZjX2hvc3Rfc3ltYm9saWNfbmFtZShob3N0KSwgIkJyb2NhZGUgJXMgRlYlcyBEViVzIiwKKwkJYXR0ci5pb2NfYXR0ci5hZGFwdGVyX2F0dHIubW9kZWwsCisJCWF0dHIuaW9jX2F0dHIuYWRhcHRlcl9hdHRyLmZ3X3ZlciwgQkZBRF9EUklWRVJfVkVSU0lPTik7CisKKwlmY19ob3N0X3N1cHBvcnRlZF9zcGVlZHMoaG9zdCkgPSAwOworCWZjX2hvc3Rfc3VwcG9ydGVkX3NwZWVkcyhob3N0KSB8PQorCQlGQ19QT1JUU1BFRURfOEdCSVQgfCBGQ19QT1JUU1BFRURfNEdCSVQgfCBGQ19QT1JUU1BFRURfMkdCSVQgfAorCQlGQ19QT1JUU1BFRURfMUdCSVQ7CisKKwltZW1zZXQoJmF0dHIucGF0dHIsIDAsIHNpemVvZihhdHRyLnBhdHRyKSk7CisJYmZhX3Bwb3J0X2dldF9hdHRyKCZiZmFkLT5iZmEsICZhdHRyLnBhdHRyKTsKKwlmY19ob3N0X21heGZyYW1lX3NpemUoaG9zdCkgPSBhdHRyLnBhdHRyLnBwb3J0X2NmZy5tYXhmcnNpemU7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFkX2ltX2ZjX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltKQoreworCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycyBycG9ydF9pZHM7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9kYXRhX3MgKml0bmltX2RhdGE7CisKKwlycG9ydF9pZHMubm9kZV9uYW1lID0KKwkJYmZhX29zX2h0b25sbChiZmFfZmNzX2l0bmltX2dldF9ud3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnBvcnRfbmFtZSA9CisJCWJmYV9vc19odG9ubGwoYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSkpOworCXJwb3J0X2lkcy5wb3J0X2lkID0KKwkJYmZhX29zX2h0b24zYihiZmFfZmNzX2l0bmltX2dldF9mY2lkKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJcnBvcnRfaWRzLnJvbGVzID0gRkNfUlBPUlRfUk9MRV9VTktOT1dOOworCisJaXRuaW0tPmZjX3Jwb3J0ID0gZmNfcnBvcnQgPQorCQlmY19yZW1vdGVfcG9ydF9hZGQoaW1fcG9ydC0+c2hvc3QsIDAsICZycG9ydF9pZHMpOworCisJaWYgKCFmY19ycG9ydCkKKwkJcmV0dXJuOworCisJZmNfcnBvcnQtPm1heGZyYW1lX3NpemUgPQorCQliZmFfZmNzX2l0bmltX2dldF9tYXhmcnNpemUoJml0bmltLT5mY3NfaXRuaW0pOworCWZjX3Jwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9IGJmYV9mY3NfaXRuaW1fZ2V0X2NvcygmaXRuaW0tPmZjc19pdG5pbSk7CisKKwlpdG5pbV9kYXRhID0gZmNfcnBvcnQtPmRkX2RhdGE7CisJaXRuaW1fZGF0YS0+aXRuaW0gPSBpdG5pbTsKKworCXJwb3J0X2lkcy5yb2xlcyB8PSBGQ19SUE9SVF9ST0xFX0ZDUF9UQVJHRVQ7CisKKwlpZiAocnBvcnRfaWRzLnJvbGVzICE9IEZDX1JQT1JUX1JPTEVfVU5LTk9XTikKKwkJZmNfcmVtb3RlX3BvcnRfcm9sZWNoZyhmY19ycG9ydCwgcnBvcnRfaWRzLnJvbGVzKTsKKworCWlmICgoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkICE9IC0xKQorCSAgICAmJiAoZmNfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkIDwgTUFYX0ZDUF9UQVJHRVQpKQorCQlpdG5pbS0+c2NzaV90Z3RfaWQgPSBmY19ycG9ydC0+c2NzaV90YXJnZXRfaWQ7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogV29yayBxdWV1ZSBoYW5kbGVyIHVzaW5nIEZDIHRyYW5zcG9ydCBzZXJ2aWNlCisqIENvbnRleHQ6IGtlcm5lbAorICovCitzdGF0aWMgdm9pZAorYmZhZF9pbV9pdG5pbV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBiZmFkX2l0bmltX3MgICAqaXRuaW0gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJmYWRfaXRuaW1fcywKKwkJCQkJCQlpdG5pbV93b3JrKTsKKwlzdHJ1Y3QgYmZhZF9pbV9zICAgICAgKmltID0gaXRuaW0tPmltOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltLT5iZmFkOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwl3d25fdCB3d3BuOworCXUzMiBmY2lkOworCWNoYXIgd3dwbl9zdHJbMzJdLCBmY2lkX3N0clsxNl07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaW1fcG9ydCA9IGl0bmltLT5pbV9wb3J0OworCWJmYV90cmMoYmZhZCwgaXRuaW0tPnN0YXRlKTsKKwlzd2l0Y2ggKGl0bmltLT5zdGF0ZSkgeworCWNhc2UgSVROSU1fU1RBVEVfT05MSU5FOgorCQlpZiAoIWl0bmltLT5mY19ycG9ydCkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQliZmFkX2ltX2ZjX3Jwb3J0X2FkZChpbV9wb3J0LCBpdG5pbSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfYWRkX3RhaWwoJml0bmltLT5saXN0X2VudHJ5LAorCQkJCSZpbV9wb3J0LT5pdG5pbV9tYXBwZWRfbGlzdCk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PTkxJTkUsCisJCQkJaW1fcG9ydC0+c2hvc3QtPmhvc3Rfbm8sCisJCQkJaXRuaW0tPnNjc2lfdGd0X2lkLAorCQkJCWZjaWRfc3RyLCB3d3BuX3N0cik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJIiVzOiBpdG5pbSAlbGx4IGlzIGFscmVhZHkgaW4gb25saW5lIHN0YXRlXG4iLAorCQkJCV9fRlVOQ1RJT05fXywKKwkJCQliZmFfZmNzX2l0bmltX2dldF9wd3duKCZpdG5pbS0+ZmNzX2l0bmltKSk7CisJCX0KKworCQlicmVhazsKKwljYXNlIElUTklNX1NUQVRFX09GRkxJTkVfUEVORElORzoKKwkJaXRuaW0tPnN0YXRlID0gSVROSU1fU1RBVEVfT0ZGTElORTsKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQl3d3BuID0gYmZhX2Zjc19pdG5pbV9nZXRfcHd3bigmaXRuaW0tPmZjc19pdG5pbSk7CisJCQlmY2lkID0gYmZhX2Zjc19pdG5pbV9nZXRfZmNpZCgmaXRuaW0tPmZjc19pdG5pbSk7CisJCQl3d24yc3RyKHd3cG5fc3RyLCB3d3BuKTsKKwkJCWZjaWQyc3RyKGZjaWRfc3RyLCBmY2lkKTsKKwkJCWxpc3RfZGVsKCZpdG5pbS0+bGlzdF9lbnRyeSk7CisJCQliZmFfbG9nKGJmYWQtPmxvZ21vZCwgQkZBX0xPR19MSU5VWF9JVE5JTV9PRkZMSU5FLAorCQkJCWltX3BvcnQtPnNob3N0LT5ob3N0X25vLAorCQkJCWl0bmltLT5zY3NpX3RndF9pZCwKKwkJCQlmY2lkX3N0ciwgd3dwbl9zdHIpOworCQl9CisJCWJyZWFrOworCWNhc2UgSVROSU1fU1RBVEVfRlJFRToKKwkJaWYgKGl0bmltLT5mY19ycG9ydCkgeworCQkJZmNfcnBvcnQgPSBpdG5pbS0+ZmNfcnBvcnQ7CisJCQkoKHN0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyAqKQorCQkJCWZjX3Jwb3J0LT5kZF9kYXRhKS0+aXRuaW0gPSBOVUxMOworCQkJaXRuaW0tPmZjX3Jwb3J0ID0gTlVMTDsKKwkJCWlmICghKGltX3BvcnQtPnBvcnQtPmZsYWdzICYgQkZBRF9QT1JUX0RFTEVURSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwkJCQlmY19ycG9ydC0+ZGV2X2xvc3NfdG1vID0KKwkJCQkJYmZhX2ZjcGltX3BhdGhfdG92X2dldCgmYmZhZC0+YmZhKSArIDE7CisJCQkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKGZjX3Jwb3J0KTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCQl9CisJCQlsaXN0X2RlbCgmaXRuaW0tPmxpc3RfZW50cnkpOworCQl9CisKKwkJa2ZyZWUoaXRuaW0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBTY3NpX0hvc3QgdGVtcGxhdGUgZW50cnksIHF1ZXVlIGEgU0NTSSBjb21tYW5kIHRvIHRoZSBCRkFELgorICovCitzdGF0aWMgaW50CitiZmFkX2ltX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpjbW5kLCB2b2lkICgqZG9uZSkgKHN0cnVjdCBzY3NpX2NtbmQgKikpCit7CisJc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0ID0KKwkJKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqKSBjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdOworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGltX3BvcnQtPmJmYWQ7CisJc3RydWN0IGJmYWRfaXRuaW1fZGF0YV9zICppdG5pbV9kYXRhID0gY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlzdHJ1Y3QgYmZhZF9pdG5pbV9zICAgKml0bmltOworCXN0cnVjdCBiZmFfaW9pbV9zICpoYWxfaW87CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWludCAgICAgICAgICAgICByYzsKKwlzMTYgICAgICAgIHNnX2NudCA9IDA7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoY21uZC0+ZGV2aWNlKSk7CisKKwlyYyA9IGZjX3JlbW90ZV9wb3J0X2Noa3JlYWR5KHJwb3J0KTsKKwlpZiAocmMpIHsKKwkJY21uZC0+cmVzdWx0ID0gcmM7CisJCWRvbmUoY21uZCk7CisJCXJldHVybiAwOworCX0KKworCXNnX2NudCA9IHNjc2lfZG1hX21hcChjbW5kKTsKKworCWlmIChzZ19jbnQgPCAwKQorCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKworCWNtbmQtPnNjc2lfZG9uZSA9IGRvbmU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJaWYgKCEoYmZhZC0+YmZhZF9mbGFncyAmIEJGQURfSEFMX1NUQVJUX0RPTkUpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJiZmFkJWQsIHF1ZXVlY29tbWFuZCAlcCAleCBmYWlsZWQsIEJGQSBzdG9wcGVkXG4iLAorCQkgICAgICAgYmZhZC0+aW5zdF9ubywgY21uZCwgY21uZC0+Y21uZFswXSk7CisJCWNtbmQtPnJlc3VsdCA9IFNjc2lSZXN1bHQoRElEX05PX0NPTk5FQ1QsIDApOworCQlnb3RvIG91dF9mYWlsX2NtZDsKKwl9CisKKwlpdG5pbSA9IGl0bmltX2RhdGEtPml0bmltOworCWlmICghaXRuaW0pIHsKKwkJY21uZC0+cmVzdWx0ID0gU2NzaVJlc3VsdChESURfSU1NX1JFVFJZLCAwKTsKKwkJZ290byBvdXRfZmFpbF9jbWQ7CisJfQorCisJaGFsX2lvID0gYmZhX2lvaW1fYWxsb2MoJmJmYWQtPmJmYSwgKHN0cnVjdCBiZmFkX2lvaW1fcyAqKSBjbW5kLAorCQkJCSAgICBpdG5pbS0+YmZhX2l0bmltLCBzZ19jbnQpOworCWlmICghaGFsX2lvKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhhbF9pbyBmYWlsdXJlXG4iKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCXNjc2lfZG1hX3VubWFwKGNtbmQpOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKKwl9CisKKwljbW5kLT5ob3N0X3NjcmliYmxlID0gKGNoYXIgKiloYWxfaW87CisJYmZhX3RyY19mcChiZmFkLCBoYWxfaW8tPmlvdGFnKTsKKwliZmFfaW9pbV9zdGFydChoYWxfaW8pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7CisKK291dF9mYWlsX2NtZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKwlzY3NpX2RtYV91bm1hcChjbW5kKTsKKwlpZiAoZG9uZSkKKwkJZG9uZShjbW5kKTsKKworCXJldHVybiAwOworfQorCit2b2lkCitiZmFkX29zX3Jwb3J0X29ubGluZV93YWl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpCit7CisJaW50IGk7CisJaW50IHJwb3J0X2RlbGF5ID0gMTA7CisKKwlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKQorCQkgJiYgaSA8IGJmYV9saW5rdXBfZGVsYXk7IGkrKykKKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoSFopOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1BPUlRfT05MSU5FKSB7CisJCXJwb3J0X2RlbGF5ID0gcnBvcnRfZGVsYXkgPCBiZmFfbGlua3VwX2RlbGF5ID8KKwkJCQkgcnBvcnRfZGVsYXkgOiBiZmFfbGlua3VwX2RlbGF5OworCQlmb3IgKGkgPSAwOyAhKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX1JQT1JUX09OTElORSkKKwkJCSAmJiBpIDwgcnBvcnRfZGVsYXk7IGkrKykKKwkJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKKworCQlpZiAocnBvcnRfZGVsYXkgPiAwICYmIChiZmFkLT5iZmFkX2ZsYWdzICYgQkZBRF9SUE9SVF9PTkxJTkUpKQorCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUocnBvcnRfZGVsYXkgKiBIWik7CisJfQorfQorCitpbnQKK2JmYWRfb3NfZ2V0X2xpbmt1cF9kZWxheShzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCisJdTggICAgICAgICBud3ducyA9IDA7CisJd3duX3QgICAgICAgICAgICp3d25zOworCWludCAgICAgICAgICAgICBsZGVsYXk7CisKKwkvKgorCSAqIFF1ZXJ5aW5nIGZvciB0aGUgYm9vdCB0YXJnZXQgcG9ydCB3d25zCisJICogLS0gcmVhZCBmcm9tIGJvb3QgaW5mb3JtYXRpb24gaW4gZmxhc2guCisJICogSWYgbnd3bnMgPiAwID0+IGJvb3Qgb3ZlciBTQU4gYW5kIHNldCBiZmFfbGlua3VwX2RlbGF5ID0gMzAKKwkgKiBlbHNlID0+IGxvY2FsIGJvb3QgbWFjaGluZSBzZXQgYmZhX2xpbmt1cF9kZWxheSA9IDEwCisJICovCisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKCZiZmFkLT5iZmEsICZud3ducywgJnd3bnMpOworCisJaWYgKG53d25zID4gMCkgeworCQkvKiBJZiBib290IG92ZXIgU0FOOyBsaW5rdXBfZGVsYXkgPSAzMHNlYyAqLworCQlsZGVsYXkgPSAzMDsKKwl9IGVsc2UgeworCQkvKiBJZiBsb2NhbCBib290OyBsaW5rdXBfZGVsYXkgPSAxMHNlYyAqLworCQlsZGVsYXkgPSAwOworCX0KKworCXJldHVybiBsZGVsYXk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODlhNWIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9JTV9IX18KKworI2luY2x1ZGUgImZjcy9iZmFfZmNzX2ZjcGltLmgiCisjaW5jbHVkZSAiYmZhZF9pbV9jb21wYXQuaCIKKworI2RlZmluZSBGQ1BJX05BTUUgIiBmY3BpbSIKKwordm9pZCBiZmFkX2ZsYWdzX3NldChzdHJ1Y3QgYmZhZF9zICpiZmFkLCB1MzIgZmxhZ3MpOworYmZhX3N0YXR1c190IGJmYWRfaW1fbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkIGJmYWRfaW1fbW9kdWxlX2V4aXQodm9pZCk7CitiZmFfc3RhdHVzX3QgYmZhZF9pbV9wcm9iZShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9pbV9wcm9iZV91bmRvKHN0cnVjdCBiZmFkX3MgKmJmYWQpOwordm9pZCBiZmFkX2ltX3Byb2JlX3Bvc3Qoc3RydWN0IGJmYWRfaW1fcyAqaW0pOworYmZhX3N0YXR1c190IGJmYWRfaW1fcG9ydF9uZXcoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhZF9pbV9wb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhZF9wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFkX2ltX3BvcnRfb25saW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFkX3MgKmJmYWQsIHN0cnVjdCBiZmFkX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYWRfaW1fcG9ydF9jbGVhbihzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworaW50ICBiZmFkX2ltX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfaW1fc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQpOworCisjZGVmaW5lIE1BWF9GQ1BfVEFSR0VUIDEwMjQKKyNkZWZpbmUgTUFYX0ZDUF9MVU4gMTYzODQKKyNkZWZpbmUgQkZBRF9UQVJHRVRfUkVTRVRfVE1PIDYwCisjZGVmaW5lIEJGQURfTFVOX1JFU0VUX1RNTyA2MAorI2RlZmluZSBTY3NpUmVzdWx0KGhvc3RfY29kZSwgc2NzaV9jb2RlKSAoKChob3N0X2NvZGUpIDw8IDE2KSB8IHNjc2lfY29kZSkKKyNkZWZpbmUgQkZBX1FVRVVFX0ZVTExfUkFNUF9VUF9USU1FIDEyMAorI2RlZmluZSBCRkFEX0tPQkpfTkFNRV9MRU4gMjAKKworLyoKKyAqIGl0bmltIGZsYWdzCisgKi8KKyNkZWZpbmUgSVROSU1fTUFQUEVECQkweDAwMDAwMDAxCisKKyNkZWZpbmUgU0NTSV9UQVNLX01HTVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSU9fRE9ORV9CSVQJCQkwCisKK3N0cnVjdCBiZmFkX2l0bmltX2RhdGFfcyB7CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW07Cit9OworCitzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgeworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsKKwlzdHJ1Y3QgYmZhZF9wb3J0X3MgICAgKnBvcnQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHBvcnRfZGVsZXRlX3dvcms7CisJaW50ICAgICAgICAgICAgIGlkcl9pZDsKKwl1MTYgICAgICAgIGN1cl9zY3NpX2lkOworCXN0cnVjdCBsaXN0X2hlYWQgYmluZGluZ19saXN0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OworCXN0cnVjdCBsaXN0X2hlYWQgaXRuaW1fbWFwcGVkX2xpc3Q7Cit9OworCitlbnVtIGJmYWRfaXRuaW1fc3RhdGUgeworCUlUTklNX1NUQVRFX05PTkUsCisJSVROSU1fU1RBVEVfT05MSU5FLAorCUlUTklNX1NUQVRFX09GRkxJTkVfUEVORElORywKKwlJVE5JTV9TVEFURV9PRkZMSU5FLAorCUlUTklNX1NUQVRFX1RJTUVPVVQsCisJSVROSU1fU1RBVEVfRlJFRSwKK307CisKKy8qCisgKiBQZXIgaXRuaW0gZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYWRfaXRuaW1fcyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5OworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgZmNzX2l0bmltOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpdG5pbV93b3JrOworCXUzMiAgICAgICAgZmxhZ3M7CisJZW51bSBiZmFkX2l0bmltX3N0YXRlIHN0YXRlOworCXN0cnVjdCBiZmFkX2ltX3MgKmltOworCXN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydDsKKwlzdHJ1Y3QgYmZhZF9ycG9ydF9zICpkcnZfcnBvcnQ7CisJc3RydWN0IGZjX3Jwb3J0ICpmY19ycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbTsKKwl1MTYgICAgICAgIHNjc2lfdGd0X2lkOworCXUxNiAgICAgICAgcXVldWVfd29yazsKKwl1bnNpZ25lZCBsb25nCWxhc3RfcmFtcF91cF90aW1lOworCXVuc2lnbmVkIGxvbmcJbGFzdF9xdWV1ZV9mdWxsX3RpbWU7Cit9OworCitlbnVtIGJmYWRfYmluZGluZ190eXBlIHsKKwlGQ1BfUFdXTl9CSU5ESU5HID0gMHgxLAorCUZDUF9OV1dOX0JJTkRJTkcgPSAweDIsCisJRkNQX0ZDSURfQklORElORyA9IDB4MywKK307CisKK3N0cnVjdCBiZmFkX2ZjcF9iaW5kaW5nIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CisJZW51bSBiZmFkX2JpbmRpbmdfdHlwZSBiaW5kaW5nX3R5cGU7CisJdTE2ICAgICAgICBzY3NpX3RhcmdldF9pZDsKKwl1MzIgICAgICAgIGZjX2lkOworCXd3bl90ICAgICAgICAgICBud3duOworCXd3bl90ICAgICAgICAgICBwd3duOworfTsKKworc3RydWN0IGJmYWRfaW1fcyB7CisJc3RydWN0IGJmYWRfcyAgICAgICAgICpiZmFkOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcnZfd29ya3E7CisJY2hhciAgIGRydl93b3JrcV9uYW1lW0JGQURfS09CSl9OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgU2NzaV9Ib3N0ICpiZmFkX29zX3Njc2lfaG9zdF9hbGxvYyhzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsCisJCQkJc3RydWN0IGJmYWRfcyAqKTsKK2JmYV9zdGF0dXNfdCBiZmFkX29zX3RocmVhZF93b3JrcShzdHJ1Y3QgYmZhZF9zICpiZmFkKTsKK3ZvaWQgYmZhZF9vc19kZXN0cm95X3dvcmtxKHN0cnVjdCBiZmFkX2ltX3MgKmltKTsKK3ZvaWQgYmZhZF9vc19pdG5pbV9wcm9jZXNzKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkIGJmYWRfb3NfZmNfaG9zdF9pbml0KHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3NfaW5pdF93b3JrKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAqaW1fcG9ydCk7Cit2b2lkIGJmYWRfb3Nfc2NzaV9ob3N0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwKKwkJCQkgc3RydWN0IGJmYWRfaW1fcG9ydF9zICppbV9wb3J0KTsKK3ZvaWQgYmZhZF9vc19yYW1wX3VwX3FkZXB0aChzdHJ1Y3QgYmZhZF9pdG5pbV9zICppdG5pbSwKKwkJCQkgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKK3ZvaWQgYmZhZF9vc19oYW5kbGVfcWZ1bGwoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CitzdHJ1Y3QgYmZhZF9pdG5pbV9zICpiZmFkX29zX2dldF9pdG5pbShzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIGludCBpZCk7CitpbnQgYmZhZF9vc19zY3NpX2FkZF9ob3N0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAorCQlzdHJ1Y3QgYmZhZF9pbV9wb3J0X3MgKmltX3BvcnQsIHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisvKgorICogc2NzaV9ob3N0X3RlbXBsYXRlIGVudHJpZXMKKyAqLwordm9pZCBiZmFkX2ltX2l0bmltX3VubWFwKHN0cnVjdCBiZmFkX2ltX3BvcnRfcyAgKmltX3BvcnQsCisJCQkgc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW0pOworCitleHRlcm4gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBiZmFkX2ltX3Njc2lfaG9zdF90ZW1wbGF0ZTsKK2V4dGVybiBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGJmYWRfaW1fdnBvcnRfdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlIGJmYWRfaW1fZmNfZnVuY3Rpb25fdGVtcGxhdGU7CitleHRlcm4gc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlICpiZmFkX2ltX3Njc2lfdHJhbnNwb3J0X3RlbXBsYXRlOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbV9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDNlNzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ltX2NvbXBhdC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQURfSU1fQ09NUEFUX0hfXworI2RlZmluZSBfX0JGQURfSU1fQ09NUEFUX0hfXworCitleHRlcm4gdTMyICpiZmlfaW1hZ2VfYnVmOworZXh0ZXJuIHUzMiBiZmlfaW1hZ2Vfc2l6ZTsKKworZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpiZmFkX2ltX2hvc3RfYXR0cnNbXTsKK2V4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYmZhZF9pbV92cG9ydF9hdHRyc1tdOworCit1MzIgKmJmYWRfZ2V0X2Zpcm13YXJlX2J1ZihzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit1MzIgKmJmYWRfcmVhZF9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyICoqYmZpX2ltYWdlLAorCQkJdTMyICpiZmlfaW1hZ2Vfc2l6ZSwgY2hhciAqZndfbmFtZSk7CisKK3N0YXRpYyBpbmxpbmUgdTMyICoKK2JmYWRfbG9hZF9md2ltZyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4oYmZhZF9nZXRfZmlybXdhcmVfYnVmKHBkZXYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiZmFkX2ZyZWVfZndpbWcodm9pZCkKK3sKKwlpZiAoYmZpX2ltYWdlX2N0X3NpemUgJiYgYmZpX2ltYWdlX2N0KQorCQl2ZnJlZShiZmlfaW1hZ2VfY3QpOworCWlmIChiZmlfaW1hZ2VfY2Jfc2l6ZSAmJiBiZmlfaW1hZ2VfY2IpCisJCXZmcmVlKGJmaV9pbWFnZV9jYik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2ludHIuYyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEwNGUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pbnRyLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisjaW5jbHVkZSAiYmZhZF90cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKExEUlYsIElOVFIpOworCisvKioKKyAqICBiZmFfaXNyIEJGQSBkcml2ZXIgaW50ZXJydXB0IGZ1bmN0aW9ucworICovCitpcnFyZXR1cm5fdCBiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpbnQgbXNpeF9kaXNhYmxlOworbW9kdWxlX3BhcmFtKG1zaXhfZGlzYWJsZSwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CisvKioKKyAqIExpbmUgYmFzZWQgaW50ZXJydXB0IGhhbmRsZXIuCisgKi8KK2lycXJldHVybl90CitiZmFkX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZCA9IGRldl9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCWJmYV9ib29sZWFuX3QgcmM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJcmMgPSBiZmFfaW50eCgmYmZhZC0+YmZhKTsKKwlpZiAoIXJjKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJYmZhX2NvbXBfZGVxKCZiZmFkLT5iZmEsICZkb25lcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmRvbmVxKSkgeworCQliZmFfY29tcF9wcm9jZXNzKCZiZmFkLT5iZmEsICZkb25lcSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfY29tcF9mcmVlKCZiZmFkLT5iZmEsICZkb25lcSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCQliZmFfdHJjX2ZwKGJmYWQsIGlycSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworCit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorYmZhZF9tc2l4KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYmZhZF9tc2l4X3MgKnZlYyA9IGRldl9pZDsKKwlzdHJ1Y3QgYmZhZF9zICpiZmFkID0gdmVjLT5iZmFkOworCXN0cnVjdCBsaXN0X2hlYWQgZG9uZXE7CisJdW5zaWduZWQgbG9uZyAgIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJmYWQtPmJmYWRfbG9jaywgZmxhZ3MpOworCisJYmZhX21zaXgoJmJmYWQtPmJmYSwgdmVjLT5tc2l4LmVudHJ5KTsKKwliZmFfY29tcF9kZXEoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiZmFkLT5iZmFkX2xvY2ssIGZsYWdzKTsKKworCWlmICghbGlzdF9lbXB0eSgmZG9uZXEpKSB7CisJCWJmYV9jb21wX3Byb2Nlc3MoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJCWJmYV9jb21wX2ZyZWUoJmJmYWQtPmJmYSwgJmRvbmVxKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmZhZC0+YmZhZF9sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIE1TSVggZW50cnkgdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFkX2luaXRfbXNpeF9lbnRyeShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgbXNpeF9lbnRyeSAqbXNpeF9lbnRyaWVzLAorCQkJIGludCBtYXNrLCBpbnQgbWF4X2JpdCkKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwlpbnQgICAgICAgICAgICAgbWF0Y2ggPSAweDAwMDAwMDAxOworCisJZm9yIChpID0gMCwgYmZhZC0+bnZlYyA9IDA7IGkgPCBNQVhfTVNJWF9FTlRSWTsgaSsrKSB7CisJCWlmIChtYXNrICYgbWF0Y2gpIHsKKwkJCWJmYWQtPm1zaXhfdGFiW2JmYWQtPm52ZWNdLm1zaXguZW50cnkgPSBpOworCQkJYmZhZC0+bXNpeF90YWJbYmZhZC0+bnZlY10uYmZhZCA9IGJmYWQ7CisJCQltc2l4X2VudHJpZXNbYmZhZC0+bnZlY10uZW50cnkgPSBpOworCQkJYmZhZC0+bnZlYysrOworCQl9CisKKwkJbWF0Y2ggPDw9IDE7CisJfQorCit9CisKK2ludAorYmZhZF9pbnN0YWxsX21zaXhfaGFuZGxlcihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpLCBlcnJvciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmZhZC0+bnZlYzsgaSsrKSB7CisJCWVycm9yID0gcmVxdWVzdF9pcnEoYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IsCisJCQkJICAgIChpcnFfaGFuZGxlcl90KSBiZmFkX21zaXgsIDAsCisJCQkJICAgIEJGQURfRFJJVkVSX05BTUUsICZiZmFkLT5tc2l4X3RhYltpXSk7CisJCWJmYV90cmMoYmZhZCwgaSk7CisJCWJmYV90cmMoYmZhZCwgYmZhZC0+bXNpeF90YWJbaV0ubXNpeC52ZWN0b3IpOworCQlpZiAoZXJyb3IpIHsKKwkJCWludCAgICAgICAgICAgICBqOworCisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorCQkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2pdLm1zaXgudmVjdG9yLAorCQkJCQkJJmJmYWQtPm1zaXhfdGFiW2pdKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZXR1cCBNU0lYIGJhc2VkIGludGVycnVwdC4KKyAqLworaW50CitiZmFkX3NldHVwX2ludHIoc3RydWN0IGJmYWRfcyAqYmZhZCkKK3sKKwlpbnQgZXJyb3IgPSAwOworCXUzMiBtYXNrID0gMCwgaSwgbnVtX2JpdCA9IDAsIG1heF9iaXQgPSAwOworCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tNQVhfTVNJWF9FTlRSWV07CisKKwkvKiBDYWxsIEJGQSB0byBnZXQgdGhlIG1zaXggbWFwIGZvciB0aGlzIFBDSSBmdW5jdGlvbi4gICovCisJYmZhX21zaXhfZ2V0dmVjcygmYmZhZC0+YmZhLCAmbWFzaywgJm51bV9iaXQsICZtYXhfYml0KTsKKworCS8qIFNldCB1cCB0aGUgbXNpeCBlbnRyeSB0YWJsZSAqLworCWJmYWRfaW5pdF9tc2l4X2VudHJ5KGJmYWQsIG1zaXhfZW50cmllcywgbWFzaywgbWF4X2JpdCk7CisKKwlpZiAoIW1zaXhfZGlzYWJsZSkgeworCQllcnJvciA9IHBjaV9lbmFibGVfbXNpeChiZmFkLT5wY2lkZXYsIG1zaXhfZW50cmllcywgYmZhZC0+bnZlYyk7CisJCWlmIChlcnJvcikgeworCQkJLyoKKwkJCSAqIE9ubHkgZXJyb3IgbnVtYmVyIG9mIHZlY3RvciBpcyBhdmFpbGFibGUuCisJCQkgKiBXZSBkb24ndCBoYXZlIGEgbWVjaGFuaXNtIHRvIG1hcCBtdWx0aXBsZQorCQkJICogaW50ZXJydXB0cyBpbnRvIG9uZSB2ZWN0b3IsIHNvIGV2ZW4gaWYgd2UKKwkJCSAqIGNhbiB0cnkgdG8gcmVxdWVzdCBsZXNzIHZlY3RvcnMsIHdlIGRvbid0CisJCQkgKiBrbm93IGhvdyB0byBhc3NvY2lhdGUgaW50ZXJydXB0IGV2ZW50cyB0bworCQkJICogIHZlY3RvcnMuIExpbnV4IGRvZXNuJ3QgZHVwaWNhdGUgdmVjdG9ycworCQkJICogaW4gdGhlIE1TSVggdGFibGUgZm9yIHRoaXMgY2FzZS4KKwkJCSAqLworCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJiZmFkJWQ6ICIKKwkJCQkicGNpX2VuYWJsZV9tc2l4IGZhaWxlZCAoJWQpLCIKKwkJCQkiIHVzZSBsaW5lIGJhc2VkLlxuIiwgYmZhZC0+aW5zdF9ubywgZXJyb3IpOworCisJCQlnb3RvIGxpbmVfYmFzZWQ7CisJCX0KKworCQkvKiBTYXZlIHRoZSB2ZWN0b3JzICovCisJCWZvciAoaSA9IDA7IGkgPCBiZmFkLT5udmVjOyBpKyspIHsKKwkJCWJmYV90cmMoYmZhZCwgbXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJCQliZmFkLT5tc2l4X3RhYltpXS5tc2l4LnZlY3RvciA9IG1zaXhfZW50cmllc1tpXS52ZWN0b3I7CisJCX0KKworCQliZmFfbXNpeF9pbml0KCZiZmFkLT5iZmEsIGJmYWQtPm52ZWMpOworCisJCWJmYWQtPmJmYWRfZmxhZ3MgfD0gQkZBRF9NU0lYX09OOworCisJCXJldHVybiBlcnJvcjsKKwl9CisKK2xpbmVfYmFzZWQ6CisJZXJyb3IgPSAwOworCWlmIChyZXF1ZXN0X2lycQorCSAgICAoYmZhZC0+cGNpZGV2LT5pcnEsIChpcnFfaGFuZGxlcl90KSBiZmFkX2ludHgsIEJGQURfSVJRX0ZMQUdTLAorCSAgICAgQkZBRF9EUklWRVJfTkFNRSwgYmZhZCkgIT0gMCkgeworCQkvKiBFbmFibGUgaW50ZXJydXB0IGhhbmRsZXIgZmFpbGVkICovCisJCXJldHVybiAxOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZAorYmZhZF9yZW1vdmVfaW50cihzdHJ1Y3QgYmZhZF9zICpiZmFkKQoreworCWludCAgICAgICAgICAgICBpOworCisJaWYgKGJmYWQtPmJmYWRfZmxhZ3MgJiBCRkFEX01TSVhfT04pIHsKKwkJZm9yIChpID0gMDsgaSA8IGJmYWQtPm52ZWM7IGkrKykKKwkJCWZyZWVfaXJxKGJmYWQtPm1zaXhfdGFiW2ldLm1zaXgudmVjdG9yLAorCQkJCQkmYmZhZC0+bXNpeF90YWJbaV0pOworCisJCXBjaV9kaXNhYmxlX21zaXgoYmZhZC0+cGNpZGV2KTsKKwkJYmZhZC0+YmZhZF9mbGFncyAmPSB+QkZBRF9NU0lYX09OOworCX0gZWxzZSB7CisJCWZyZWVfaXJxKGJmYWQtPnBjaWRldi0+aXJxLCBiZmFkKTsKKwl9Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9iZmFkX2lwZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4YmM1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9pcGZjLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9EUlZfSVBGQ19IX18KKyNkZWZpbmUgX19CRkFfRFJWX0lQRkNfSF9fCisKKworI2RlZmluZSBJUEZDX05BTUUgIiIKKworI2RlZmluZSBiZmFkX2lwZmNfbW9kdWxlX2luaXQoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19tb2R1bGVfZXhpdCh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcHJvYmVfdW5kbyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfY29uZmlnKHgsIHkpIEJGQV9TVEFUVVNfT0sKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfdW5jb25maWcoeCwgeSkgZG8ge30gd2hpbGUgKDApCisKKyNkZWZpbmUgYmZhZF9pcGZjX3Byb2JlX3Bvc3QoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X25ldyh4LCB5LCB6KSBCRkFfU1RBVFVTX09LCisjZGVmaW5lIGJmYWRfaXBmY19wb3J0X2RlbGV0ZSh4LCB5KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF9pcGZjX3BvcnRfb25saW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBiZmFkX2lwZmNfcG9ydF9vZmZsaW5lKHgsIHkpIGRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfaXBfZ2V0X2F0dHIoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9yZXNldF9kcnZfc3RhdHMoeCkgQkZBX1NUQVRVU19GQUlMRUQKKyNkZWZpbmUgYmZhZF9pcF9nZXRfZHJ2X3N0YXRzKHgsIHkpIEJGQV9TVEFUVVNfRkFJTEVECisjZGVmaW5lIGJmYWRfaXBfZW5hYmxlX2lwZmMoeCwgeSwgeikgQkZBX1NUQVRVU19GQUlMRUQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX29zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNDdiNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF9vcy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF9vcy5jIExpbnV4IGRyaXZlciBPUyBzcGVjaWZpYyBjYWxscy4KKyAqLworCisjaW5jbHVkZSAiYmZhX29zX2luYy5oIgorI2luY2x1ZGUgImJmYWRfZHJ2LmgiCisKK3ZvaWQKK2JmYV9vc19nZXR0aW1lb2ZkYXkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KQoreworCXN0cnVjdCB0aW1ldmFsICB0bXBfdHY7CisKKwlkb19nZXR0aW1lb2ZkYXkoJnRtcF90dik7CisJdHYtPnR2X3NlYyA9ICh1MzIpIHRtcF90di50dl9zZWM7CisJdHYtPnR2X3VzZWMgPSAodTMyKSB0bXBfdHYudHZfdXNlYzsKK30KKwordm9pZAorYmZhX29zX3ByaW50ZihzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJI2RlZmluZSBCRkFfU1RSSU5HXzI1NgkyNTYKKwljaGFyIHRtcFtCRkFfU1RSSU5HXzI1Nl07CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c3ByaW50Zih0bXAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlwcmludGsodG1wKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDFiMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2JmYWRfdG0uaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSEJBIExpbnV4IFRhcmdldCBNb2RlIERyaXZlcgorICovCisKKy8qKgorICogIHRtL2R1bW15L2JmYWRfdG0uaCBCRkEgY2FsbGJhY2sgZHVtbXkgaGVhZGVyIGZpbGUgZm9yIEJGQSBMaW51eCB0YXJnZXQgbW9kZSBQQ0kgaW50ZXJmYWNlIG1vZHVsZS4KKyAqLworCisjaWZuZGVmIF9fQkZBRF9UTV9IX18KKyNkZWZpbmUgX19CRkFEX1RNX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKworI2RlZmluZSBGQ1BUX05BTUUgCQkiIgorCisvKgorICogQ2FsbGVkIGZyb20gYmFzZSBMaW51eCBkcml2ZXIgb24gKERlKUluaXQgZXZlbnRzCisgKi8KKworLyogYXR0YWNoIHRndCB0ZW1wbGF0ZSB3aXRoIHNjc3QgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfaW5pdCgpCWRvIHt9IHdoaWxlICgwKQorCisvKiBkZXRhY2gvcmVsZWFzZSB0Z3QgdGVtcGxhdGUgKi8KKyNkZWZpbmUgYmZhZF90bV9tb2R1bGVfZXhpdCgpCWRvIHt9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmYWRfdG1fcHJvYmUoeCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcHJvYmVfdW5kbyh4KQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgYmZhZF90bV9wcm9iZV9wb3N0KHgpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBjb25maWcgZXZlbnRzCisgKi8KKyNkZWZpbmUgYmZhZF90bV9wb3J0X25ldyh4LCB5KQkJQkZBX1NUQVRVU19PSworI2RlZmluZSBiZmFkX3RtX3BvcnRfZGVsZXRlKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisvKgorICogQ2FsbGVkIGJ5IGJhc2UgTGludXggZHJpdmVyIGJ1dCB0cmlnZ2VyZWQgYnkgQkZBIEZDUyBvbiBQTE9HSS9PIGV2ZW50cworICovCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vbmxpbmUoeCwgeSkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGJmYWRfdG1fcG9ydF9vZmZsaW5lKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvYmZhZF90cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODI3YjJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9iZmFkX3RyY21vZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhZF90cmNtb2QuaCBMaW51eCBkcml2ZXIgdHJhY2UgbW9kdWxlcworICovCisKKworI2lmbmRlZiBfX0JGQURfVFJDTU9EX0hfXworI2RlZmluZSBfX0JGQURfVFJDTU9EX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwkvKiAyLjYgRHJpdmVyICovCisJQkZBX1RSQ19MRFJWX0JGQUQJCT0gMSwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzYJCT0gMiwKKwlCRkFfVFJDX0xEUlZfQkZBRF8yXzZfOQkJPSAzLAorCUJGQV9UUkNfTERSVl9CRkFEXzJfNl8xMAk9IDQsCisJQkZBX1RSQ19MRFJWX0lOVFIJCT0gNSwKKwlCRkFfVFJDX0xEUlZfSU9DVEwJCT0gNiwKKwlCRkFfVFJDX0xEUlZfT1MJCQk9IDcsCisJQkZBX1RSQ19MRFJWX0lNCQkJPSA4LAorCUJGQV9UUkNfTERSVl9JTV8yXzYJCT0gOSwKKwlCRkFfVFJDX0xEUlZfSU1fMl82XzkJCT0gMTAsCisJQkZBX1RSQ19MRFJWX0lNXzJfNl8xMAkJPSAxMSwKKwlCRkFfVFJDX0xEUlZfVE0JCQk9IDEyLAorCUJGQV9UUkNfTERSVl9JUEZDCQk9IDEzLAorCUJGQV9UUkNfTERSVl9JTV8yXzQJCT0gMTQsCisJQkZBX1RSQ19MRFJWX0lNX1ZNVwkJPSAxNSwKKwlCRkFfVFJDX0xEUlZfSU1fTFRfMl82XzEwCT0gMTYsCit9OworCisjZW5kaWYgLyogX19CRkFEX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmFiLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2E0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZhYi5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlICJmY3NfbHBvcnQuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKKy8qKgorICogIGZhYi5jIHBvcnQgZmFiIGltcGxlbWVudGF0aW9uLgorICovCisKKy8qKgorICogIGJmYV9mY3NfcG9ydF9mYWJfcHVibGljIHBvcnQgZmFiIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gaW5pdGlhbGl6ZSBmYWJyaWMgc2VydmljZXMgb2YgdGhlIGJhc2UgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfaW5pdChwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX2luaXQocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX2luaXQocG9ydCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9mYWJfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb25saW5lKHBvcnQpOworCWJmYV9mY3NfcG9ydF9zY25fb25saW5lKHBvcnQpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IHBvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwliZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShwb3J0KTsKKwliZmFfZmNzX3BvcnRfc2NuX29mZmxpbmUocG9ydCk7CisJYmZhX2Zjc19wb3J0X21zX29mZmxpbmUocG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZhYnJpYy5jIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGIxNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mYWJyaWMuYwpAQCAtMCwwICsxLDEyNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmFicmljLmMgRmFicmljIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZmNzX2ZhYnJpYy5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjc19hdXRoLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgPGxvZy9iZmFfbG9nX2Zjcy5oPgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIEZBQlJJQyk7CisKKyNkZWZpbmUgQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkJKDIwMDApCS8qIE1pbGxpc2Vjb25kcyAqLworI2RlZmluZSBCRkFfRkNTX0ZBQlJJQ19DTEVBTlVQX0RFTEFZCSgxMDAwMCkJLyogTWlsbGlzZWNvbmRzICovCisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKF9fZmFicmljKSBkbyB7ICAgICAgICAgIFwKKyAgICBpZiAoYmZhX3Bwb3J0X2dldF90b3BvbG9neSgoX19mYWJyaWMpLT5mY3MtPmJmYSkgICAgXAorCQkJCT09IEJGQV9QUE9SVF9UT1BPTE9HWV9QMlApICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OUE9SVDsgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAoX19mYWJyaWMpLT5vcGVyX3R5cGUgPSBCRkFfUFBPUlRfVFlQRV9OTFBPUlQ7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfZGVsYXkodm9pZCAqY2JhcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19kZWxldGVfY29tcCh2b2lkICpjYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc191ZihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3Byb2Nlc3NfZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19mbG9naWFjY19jb21wKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHN0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcGZjaHMpOworLyoqCisgKiAgZmNzX2ZhYnJpY19zbSBmYWJyaWMgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIEZhYnJpYyBzdGF0ZSBtYWNoaW5lIGV2ZW50cworICovCitlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IHsKKwlCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEUgPSAxLAkvKiAgZmFicmljIGNyZWF0ZSBmcm9tIGRyaXZlciAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURSA9IDIsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCisJQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOID0gMywJLyogIGxpbmsgZG93biBmcm9tIHBvcnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQID0gNCwJLyogIGxpbmsgdXAgZnJvbSBwb3J0ICovCisJQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUCA9IDUsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCA9IDYsCS8qICBjb250aW51ZSBvcCBmcm9tIGZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMgPSA3LAkvKiAgbm8gZmFicmljIGZyb20gZmxvZ2kvYXV0aAorCQkJCQkJICovCisJQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQID0gOCwJLyogIHBlcmZvcm0gRVZGUCBmcm9tCisJCQkJCQkgKmZsb2dpL2F1dGggKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9JU09MQVRFID0gOSwJLyogIGlzb2xhdGUgZnJvbSBFVkZQIHByb2Nlc3NpbmcgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9OT19UQUdHSU5HID0gMTAsLyogIG5vIFZGVCB0YWdnaW5nIGZyb20gRVZGUCAqLworCUJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQgPSAxMSwJLyogIHRpbWVvdXQgZGVsYXkgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9BVVRIX0ZBSUxFRCA9IDEyLAkvKiAgYXV0aGVudGljYXRpb24gZmFpbGVkICovCisJQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTID0gMTMsCS8qICBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCisJCQkJCQkgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9ERUxDT01QID0gMTQsCS8qICBhbGwgdnBvcnRzIGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfRkNTX0ZBQlJJQ19TTV9MT09QQkFDSyA9IDE1LAkvKiAgUmVjZWl2ZWQgb3VyIG93biBGTE9HSSAqLworCUJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUID0gMTYsCS8qICBmYWJyaWMgZGVsZXRlIGZyb20gZHJpdmVyICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2koc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCSAgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoX2ZhaWxlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCSAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KTsKKy8qKgorICogICBCZWdpbm5pbmcgc3RhdGUgYmVmb3JlIGZhYnJpYyBjcmVhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKTsKKwkJYmZhX2Zjc19mYWJyaWNfaW5pdChmYWJyaWMpOworCQliZmFfZmNzX2xwb3J0X2luaXQoJmZhYnJpYy0+YnBvcnQsIGZhYnJpYy0+ZmNzLCBGQ19WRl9JRF9OVUxMLAorCQkJCSAgICZmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVA6CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgQmVnaW5uaW5nIHN0YXRlIGJlZm9yZSBmYWJyaWMgY3JlYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9TVEFSVDoKKwkJaWYgKGJmYV9wcG9ydF9pc19saW5rdXAoZmFicmljLT5mY3MtPmJmYSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9mbG9naSk7CisJCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQl9IGVsc2UKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwkJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmFicmljLT5mY3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIExpbmsgaXMgZG93biwgYXdhaXRpbmcgTElOSyBVUCBldmVudCBmcm9tIHBvcnQuIFRoaXMgaXMgYWxzbyB0aGUKKyAqICAgZmlyc3Qgc3RhdGUgYXQgZmFicmljIGNyZWF0aW9uLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24oc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZmxvZ2kpOworCQliZmFfZmNzX2ZhYnJpY19sb2dpbihmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1A6CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEZMT0dJIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBGTE9HSSByZXBseS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQ09OVF9PUDoKKworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJZmFicmljLT5mYWJfdHlwZSA9IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEOworCisJCWlmIChmYWJyaWMtPmF1dGhfcmVxZCAmJiBmYWJyaWMtPmlzX2F1dGgpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9hdXRoKTsKKwkJCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUpOworCQkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGZhYnJpYy0+ZmNzLT5iZmEsICZmYWJyaWMtPmRlbGF5X3RpbWVyLAorCQkJCWJmYV9mY3NfZmFicmljX2RlbGF5LCBmYWJyaWMsCisJCQkJQkZBX0ZDU19GQUJSSUNfUkVUUllfREVMQVkpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTE9PUEJBQ0s6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9sb29wYmFjayk7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJmYV9mY3NfZmFicmljX3NldF9vcGVydHlwZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDOgorCQlmYWJyaWMtPmZhYl90eXBlID0gQkZBX0ZDU19GQUJSSUNfTjJOOworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KGZhYnJpYy0+ZmNzLT5iZmEsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbm9mYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2Zsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICAgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMQVlFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2Zsb2dpKTsKKwkJYmZhX2Zjc19mYWJyaWNfbG9naW4oZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZhYnJpYy0+ZGVsYXlfdGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmZmFicmljLT5kZWxheV90aW1lcik7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGlzIGluIHByb2dyZXNzLCBhd2FpdGluZyBhdXRoZW50aWNhdGlvbiByZXN1bHRzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkgICAgICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fb25saW5lKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29ubGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fUEVSRl9FVkZQOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9scHNfZGlzY2FyZChmYWJyaWMtPmxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEF1dGhlbnRpY2F0aW9uIGZhaWxlZAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX0RPV046CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9saW5rZG93bik7CisJCWJmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyk7CisJCWJmYV9mY3NfZmFicmljX2RlbGV0ZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIFBvcnQgaXMgaW4gbG9vcGJhY2sgbW9kZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfc21fZmF1bHQoZmFicmljLT5mY3MsIGV2ZW50KTsKKwl9Cit9CisKKy8qKgorICogICBUaGVyZSBpcyBubyBhdHRhY2hlZCBmYWJyaWMgLSBwcml2YXRlIGxvb3Agb3IgTlBvcnQtdG8tTlBvcnQgdG9wb2xvZ3kuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9ub2ZhYnJpYyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTjoKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xpbmtkb3duKTsKKwkJYmZhX2xwc19kaXNjYXJkKGZhYnJpYy0+bHBzKTsKKwkJYmZhX2Zjc19mYWJyaWNfbm90aWZ5X29mZmxpbmUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19mYWJyaWNfZGVsZXRlKGZhYnJpYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUM6CisJCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YmJfY3JlZGl0KTsKKwkJYmZhX3Bwb3J0X3NldF90eF9iYmNyZWRpdChmYWJyaWMtPmZjcy0+YmZhLCBmYWJyaWMtPmJiX2NyZWRpdCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRmFicmljIGlzIG9ubGluZSAtIG5vcm1hbCBvcGVyYXRpbmcgc3RhdGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fbGlua2Rvd24pOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZGVsZXRpbmcpOworCQliZmFfZmNzX2ZhYnJpY19kZWxldGUoZmFicmljKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0FVVEhfRkFJTEVEOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fYXV0aF9mYWlsZWQpOworCQliZmFfbHBzX2Rpc2NhcmQoZmFicmljLT5scHMpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworLyoqCisgKiAgIEV4Y2hhbmdpbmcgdmlydHVhbCBmYWJyaWMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJICAgICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QOgorCQliZmFfc21fc2V0X3N0YXRlKGZhYnJpYywgYmZhX2Zjc19mYWJyaWNfc21fZXZmcF9kb25lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0lTT0xBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV9pc29sYXRlZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX3NtX2ZhdWx0KGZhYnJpYy0+ZmNzLCBldmVudCk7CisJfQorfQorCisvKioKKyAqICAgRVZGUCBleGNoYW5nZSBjb21wbGV0ZSBhbmQgVkZUIHRhZ2dpbmcgaXMgZW5hYmxlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2V2ZnBfZG9uZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgIGVudW0gYmZhX2Zjc19mYWJyaWNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBldmVudCk7Cit9CisKKy8qKgorICogICBQb3J0IGlzIGlzb2xhdGVkIGFmdGVyIEVWRlAgZXhjaGFuZ2UgZHVlIHRvIFZGX0lEIG1pc21hdGNoIChOIGFuZCBGKS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NtX2lzb2xhdGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkgICBlbnVtIGJmYV9mY3NfZmFicmljX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZXZlbnQpOworCisJYmZhX2xvZyhmYWJyaWMtPmZjcy0+bG9nbSwgQkZBX0xPR19GQ1NfRkFCUklDX0lTT0xBVEVELAorCQlmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24sIGZhYnJpYy0+ZmNzLT5wb3J0X3ZmaWQsCisJCWZhYnJpYy0+ZXZlbnRfYXJnLnN3cF92ZmlkKTsKK30KKworLyoqCisgKiAgIEZhYnJpYyBpcyBiZWluZyBkZWxldGVkLCBhd2FpdGluZyB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19zbV9kZWxldGluZyhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJICAgZW51bSBiZmFfZmNzX2ZhYnJpY19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmJwb3J0LnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMoZmFicmljLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfRkFCUklDX1NNX0RFTENPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCQliZmFfZmNzX21vZGV4aXRfY29tcChmYWJyaWMtPmZjcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0ZBQlJJQ19TTV9MSU5LX1VQOgorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19GQUJSSUNfU01fTElOS19ET1dOOgorCQliZmFfZmNzX2ZhYnJpY19ub3RpZnlfb2ZmbGluZShmYWJyaWMpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9mYXVsdChmYWJyaWMtPmZjcywgZXZlbnQpOworCX0KK30KKworCisKKy8qKgorICogIGZjc19mYWJyaWNfcHJpdmF0ZSBmYWJyaWMgcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcgPSAmZmFicmljLT5icG9ydC5wb3J0X2NmZzsKKworCXBvcnRfY2ZnLT5yb2xlcyA9IEJGQV9QT1JUX1JPTEVfRkNQX0lNOworCXBvcnRfY2ZnLT5ud3duID0gYmZhX2lvY19nZXRfbnd3bigmZmFicmljLT5mY3MtPmJmYS0+aW9jKTsKKwlwb3J0X2NmZy0+cHd3biA9IGJmYV9pb2NfZ2V0X3B3d24oJmZhYnJpYy0+ZmNzLT5iZmEtPmlvYyk7Cit9CisKKy8qKgorICogUG9ydCBTeW1ib2xpYyBOYW1lIENyZWF0aW9uIGZvciBiYXNlIHBvcnQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX3BzeW1iX2luaXQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcyBhZGFwdGVyX2F0dHI7CisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyAqZHJpdmVyX2luZm8gPSAmZmFicmljLT5mY3MtPmRyaXZlcl9pbmZvOworCisJYmZhX29zX21lbXNldCgodm9pZCAqKSZhZGFwdGVyX2F0dHIsIDAsCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYmZhX2FkYXB0ZXJfYXR0cl9zKSk7CisJYmZhX2lvY19nZXRfYWRhcHRlcl9hdHRyKCZmYWJyaWMtPmZjcy0+YmZhLT5pb2MsICZhZGFwdGVyX2F0dHIpOworCisJLyoKKwkgKiBNb2RlbCBuYW1lL251bWJlcgorCSAqLworCXN0cm5jcHkoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLCBhZGFwdGVyX2F0dHIubW9kZWwsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NT0RFTF9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIERyaXZlciBWZXJzaW9uCisJICovCisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPnZlcnNpb24sCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9WRVJTSU9OX1NaKTsKKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKworCS8qCisJICogSG9zdCBtYWNoaW5lIG5hbWUKKwkgKi8KKwlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9tYWNoaW5lX25hbWUsCisJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9NQUNISU5FTkFNRV9TWik7CisJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisKKwkvKgorCSAqIEhvc3QgT1MgSW5mbyA6CisJICogSWYgT1MgUGF0Y2ggSW5mbyBpcyBub3QgdGhlcmUsIGRvIG5vdCB0cnVuY2F0ZSBhbnkgYnl0ZXMgZnJvbSB0aGUKKwkgKiBPUyBuYW1lIHN0cmluZyBhbmQgaW5zdGVhZCBjb3B5IHRoZSBlbnRpcmUgT1MgaW5mbyBzdHJpbmcgKDY0IGJ5dGVzKS4KKwkgKi8KKwlpZiAoZHJpdmVyX2luZm8tPmhvc3Rfb3NfcGF0Y2hbMF0gPT0gJ1wwJykgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwgQkZBX0ZDU19PU19TVFJfTEVOKTsKKwkJc3RybmNhdCgoY2hhciAqKSZwb3J0X2NmZy0+c3ltX25hbWUsCisJCQlCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SLAorCQkJc2l6ZW9mKEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IpKTsKKwl9IGVsc2UgeworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCShjaGFyICopZHJpdmVyX2luZm8tPmhvc3Rfb3NfbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1opOworCQlzdHJuY2F0KChjaGFyICopJnBvcnRfY2ZnLT5zeW1fbmFtZSwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9TRVBBUkFUT1IsCisJCQlzaXplb2YoQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUikpOworCisJCS8qCisJCSAqIEFwcGVuZCBob3N0IE9TIFBhdGNoIEluZm8KKwkJICovCisJCXN0cm5jYXQoKGNoYXIgKikmcG9ydF9jZmctPnN5bV9uYW1lLAorCQkJKGNoYXIgKilkcml2ZXJfaW5mby0+aG9zdF9vc19wYXRjaCwKKwkJCUJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU1BBVENIX1NaKTsKKwl9CisKKwkvKgorCSAqIG51bGwgdGVybWluYXRlCisJICovCisJcG9ydF9jZmctPnN5bV9uYW1lLnN5bW5hbWVbQkZBX1NZTU5BTUVfTUFYTEVOIC0gMV0gPSAwOworfQorCisvKioKKyAqIGJmYSBscHMgbG9naW4gY29tcGxldGlvbiBjYWxsYmFjaworICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dpX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gdWFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgc3RhdHVzKTsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBCRkFfU1RBVFVTX09LOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX2FjY2VwdHMrKzsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfSU5WQUxJRF9NQUM6CisJCS8qCisJCSAqIE9ubHkgZm9yIENOQQorCQkgKi8KKwkJZmFicmljLT5zdGF0cy5mbG9naV9hY2NfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19FUFJPVE9DT0w6CisJCXN3aXRjaCAoYmZhX2xwc19nZXRfZXh0c3RhdHVzKGZhYnJpYy0+bHBzKSkgeworCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKKwkJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfYWNjX2VycisrOworCQkJYnJlYWs7CisKKwkJY2FzZSBCRkFfRVBST1RPX1VOS05PV05fUlNQOgorCQkJZmFicmljLT5zdGF0cy5mbG9naV91bmtub3duX3JzcCsrOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fUkVUUllfT1ApOworCisJCXJldHVybjsKKworCWNhc2UgQkZBX1NUQVRVU19GQUJSSUNfUkpUOgorCQlmYWJyaWMtPnN0YXRzLmZsb2dpX3JlamVjdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9SRVRSWV9PUCk7CisJCXJldHVybjsKKworCWRlZmF1bHQ6CisJCWZhYnJpYy0+c3RhdHMuZmxvZ2lfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1JFVFJZX09QKTsKKwkJcmV0dXJuOworCX0KKworCWZhYnJpYy0+YmJfY3JlZGl0ID0gYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChmYWJyaWMtPmxwcyk7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5iYl9jcmVkaXQpOworCisJaWYgKCFiZmFfbHBzX2lzX2JyY2RfZmFicmljKGZhYnJpYy0+bHBzKSkKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGJmYV9scHNfZ2V0X3BlZXJfbnd3bihmYWJyaWMtPmxwcyk7CisKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDEgPSBGLXBvcnQuCisJICovCisJaWYgKGJmYV9scHNfaXNfZnBvcnQoZmFicmljLT5scHMpKSB7CisJCWZhYnJpYy0+YnBvcnQucGlkID0gYmZhX2xwc19nZXRfcGlkKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19ucGl2ID0gYmZhX2xwc19pc19ucGl2X2VuKGZhYnJpYy0+bHBzKTsKKwkJZmFicmljLT5pc19hdXRoID0gYmZhX2xwc19pc19hdXRocmVxKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9DT05UX09QKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBOcG9ydC0yLU5wb3J0IGRpcmVjdCBhdHRhY2hlZAorCQkgKi8KKwkJZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPQorCQkJYmZhX2xwc19nZXRfcGVlcl9wd3duKGZhYnJpYy0+bHBzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmFicmljLCBCRkFfRkNTX0ZBQlJJQ19TTV9OT19GQUJSSUMpOworCX0KKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+YnBvcnQucGlkKTsKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmlzX25waXYpOworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+aXNfYXV0aCk7Cit9CisKKy8qKgorICogCQlBbGxvY2F0ZSBhbmQgc2VuZCBGTE9HSS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2xvZ2luKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9zICAgKmJmYSA9IGZhYnJpYy0+ZmNzLT5iZmE7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJdTggICAgICAgICBhbHBhID0gMDsKKworCWlmIChiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KGJmYSkgPT0gQkZBX1BQT1JUX1RPUE9MT0dZX0xPT1ApCisJCWFscGEgPSBiZmFfcHBvcnRfZ2V0X215YWxwYShiZmEpOworCisJYmZhX2xwc19mbG9naShmYWJyaWMtPmxwcywgZmFicmljLCBhbHBhLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkgICAgICBwY2ZnLT5wd3duLCBwY2ZnLT5ud3duLCBmYWJyaWMtPmF1dGhfcmVxZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3NlbnQrKzsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+ZmFicmljX25hbWUpOworCisJYmZhX2Zjc19mYWJyaWNfc2V0X29wZXJ0eXBlKGZhYnJpYyk7CisJZmFicmljLT5zdGF0cy5mYWJyaWNfb25saW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9ubGluZSBldmVudCB0byBiYXNlIGFuZCB0aGVuIHZpcnR1YWwgcG9ydHMKKwkgKi8KKwliZmFfZmNzX3BvcnRfb25saW5lKCZmYWJyaWMtPmJwb3J0KTsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9vbmxpbmUodnBvcnQpOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX25vdGlmeV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcWUsICpxZW47CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWMtPmZhYnJpY19uYW1lKTsKKwlmYWJyaWMtPnN0YXRzLmZhYnJpY19vZmZsaW5lcysrOworCisJLyoqCisJICogbm90aWZ5IG9mZmxpbmUgZXZlbnQgZmlyc3QgdG8gdnBvcnRzIGFuZCB0aGVuIGJhc2UgcG9ydC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocWUsIHFlbiwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWJmYV9mY3NfdnBvcnRfb2ZmbGluZSh2cG9ydCk7CisJfQorCisJYmZhX2Zjc19wb3J0X29mZmxpbmUoJmZhYnJpYy0+YnBvcnQpOworCisJZmFicmljLT5mYWJyaWNfbmFtZSA9IDA7CisJZmFicmljLT5mYWJyaWNfaXBfYWRkclswXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxheSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljID0gY2Jhcmc7CisKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0RFTEFZRUQpOworfQorCisvKioKKyAqIERlbGV0ZSBhbGwgdnBvcnRzIGFuZCB3YWl0IGZvciB2cG9ydCBkZWxldGUgY29tcGxldGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19kZWxldGUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZSwgKnFlbjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShxZSwgcWVuLCAmZmFicmljLT52cG9ydF9xKSB7CisJCXZwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKilxZTsKKwkJYmZhX2Zjc192cG9ydF9kZWxldGUodnBvcnQpOworCX0KKworCWJmYV9mY3NfcG9ydF9kZWxldGUoJmZhYnJpYy0+YnBvcnQpOworCWJmYV93Y193YWl0KCZmYWJyaWMtPndjKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2RlbGV0ZV9jb21wKHZvaWQgKmNiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMQ09NUCk7Cit9CisKKworCisvKioKKyAqICBmY3NfZmFicmljX3B1YmxpYyBmYWJyaWMgcHVibGljIGZ1bmN0aW9ucworICovCisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfb3NfbWVtc2V0KGZhYnJpYywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zKSk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGJhc2UgZmFicmljLgorCSAqLworCWZhYnJpYy0+ZmNzID0gZmNzOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZwb3J0X3EpOworCUlOSVRfTElTVF9IRUFEKCZmYWJyaWMtPnZmX3EpOworCWZhYnJpYy0+bHBzID0gYmZhX2xwc19hbGxvYyhmY3MtPmJmYSk7CisJYmZhX2Fzc2VydChmYWJyaWMtPmxwcyk7CisKKwkvKioKKwkgKiBJbml0aWFsaXplIGZhYnJpYyBkZWxldGUgY29tcGxldGlvbiBoYW5kbGVyLiBGYWJyaWMgZGVsZXRpb24gaXMgY29tcGxldGUKKwkgKiB3aGVuIHRoZSBsYXN0IHZwb3J0IGRlbGV0ZSBpcyBjb21wbGV0ZS4KKwkgKi8KKwliZmFfd2NfaW5pdCgmZmFicmljLT53YywgYmZhX2Zjc19mYWJyaWNfZGVsZXRlX2NvbXAsIGZhYnJpYyk7CisJYmZhX3djX3VwKCZmYWJyaWMtPndjKTsJLyogRm9yIHRoZSBiYXNlIHBvcnQgKi8KKworCWJmYV9zbV9zZXRfc3RhdGUoZmFicmljLCBiZmFfZmNzX2ZhYnJpY19zbV91bmluaXQpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQ1JFQVRFKTsKKwliZmFfdHJjKGZjcywgMCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgY2xlYW51cAorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCisJLyoqCisJICogQ2xlYW51cCBiYXNlIGZhYnJpYy4KKwkgKi8KKwlmYWJyaWMgPSAmZmNzLT5mYWJyaWM7CisJYmZhX2xwc19kZWxldGUoZmFicmljLT5scHMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fREVMRVRFKTsKK30KKworLyoqCisgKiBGYWJyaWMgbW9kdWxlIHN0YXJ0IC0tIGtpY2sgc3RhcnRzIEZDUyBhY3Rpb25zCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN0YXJ0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljOworCisJYmZhX3RyYyhmY3MsIDApOworCWZhYnJpYyA9ICZmY3MtPmZhYnJpYzsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX1NUQVJUKTsKK30KKworLyoqCisgKiAgIFN1c3BlbmQgZmFicmljIGFjdGl2aXR5IGFzIHBhcnQgb2YgZHJpdmVyIHN1c3BlbmQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfZmFicmljX21vZHN1c3Aoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCitiZmFfYm9vbGVhbl90CitiZmFfZmNzX2ZhYnJpY19pc19sb29wYmFjayhzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX2xvb3BiYWNrKSk7Cit9CisKK2VudW0gYmZhX3Bwb3J0X3R5cGUKK2JmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiBmYWJyaWMtPm9wZXJfdHlwZTsKK30KKworLyoqCisgKiAgIExpbmsgdXAgbm90aWZpY2F0aW9uIGZyb20gQkZBIHBoeXNpY2FsIHBvcnQgbW9kdWxlLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19saW5rX3VwKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfVVApOworfQorCisvKioKKyAqICAgTGluayBkb3duIG5vdGlmaWNhdGlvbiBmcm9tIEJGQSBwaHlzaWNhbCBwb3J0IG1vZHVsZS4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmFicmljLT5icG9ydC5wb3J0X2NmZy5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xJTktfRE9XTik7Cit9CisKKy8qKgorICogICBBIGNoaWxkIHZwb3J0IGlzIGJlaW5nIGNyZWF0ZWQgaW4gdGhlIGZhYnJpYy4KKyAqCisgKiAgIENhbGwgZnJvbSB2cG9ydCBtb2R1bGUgYXQgdnBvcnQgY3JlYXRpb24uIEEgbGlzdCBvZiBiYXNlIHBvcnQgYW5kIHZwb3J0cworICogICBiZWxvbmdpbmcgdG8gYSBmYWJyaWMgaXMgbWFpbnRhaW5lZCB0byBwcm9wYWdhdGUgbGluayBldmVudHMuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICogICBwYXJhbVtpbl0gdnBvcnQgIC0gVnBvcnQgYmVpbmcgY3JlYXRlZC4KKyAqCisgKiAgIEByZXR1cm4gTm9uZSAoYWx3YXlzIHN1Y2NlZWRzKQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19hZGR2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJLyoqCisJICogLSBhZGQgdnBvcnQgdG8gZmFicmljJ3MgdnBvcnRfcQorCSAqLworCWJmYV90cmMoZmFicmljLT5mY3MsIGZhYnJpYy0+dmZfaWQpOworCisJbGlzdF9hZGRfdGFpbCgmdnBvcnQtPnFlLCAmZmFicmljLT52cG9ydF9xKTsKKwlmYWJyaWMtPm51bV92cG9ydHMrKzsKKwliZmFfd2NfdXAoJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgQSBjaGlsZCB2cG9ydCBpcyBiZWluZyBkZWxldGVkIGZyb20gZmFicmljLgorICoKKyAqICAgVnBvcnQgaXMgYmVpbmcgZGVsZXRlZC4KKyAqLwordm9pZAorYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWxpc3RfZGVsKCZ2cG9ydC0+cWUpOworCWZhYnJpYy0+bnVtX3Zwb3J0cy0tOworCWJmYV93Y19kb3duKCZmYWJyaWMtPndjKTsKK30KKworLyoqCisgKiAgIEJhc2UgcG9ydCBpcyBkZWxldGVkLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJYmZhX3djX2Rvd24oJmZhYnJpYy0+d2MpOworfQorCisvKioKKyAqICAgIENoZWNrIGlmIGZhYnJpYyBpcyBvbmxpbmUuCisgKgorICogICBwYXJhbVtpbl0gZmFicmljIC0gRmFicmljIGluc3RhbmNlLiBUaGlzIGNhbiBiZSBhIGJhc2UgZmFicmljIG9yIHZmLgorICoKKyAqICAgQHJldHVybiAgVFJVRS9GQUxTRQorICovCitpbnQKK2JmYV9mY3NfZmFicmljX2lzX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKQoreworCXJldHVybiAoYmZhX3NtX2NtcF9zdGF0ZShmYWJyaWMsIGJmYV9mY3NfZmFicmljX3NtX29ubGluZSkpOworfQorCisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLCBzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsCisJCSAgICAgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpCit7CisJYmZhX3NtX3NldF9zdGF0ZSh2ZiwgYmZhX2Zjc19mYWJyaWNfc21fdW5pbml0KTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiBMb29rdXAgZm9yIGEgdnBvcnQgd2l0aGluZyBhIGZhYnJpYyBnaXZlbiBpdHMgcHd3bgorICovCitzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICoKK2JmYV9mY3NfZmFicmljX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCB3d25fdCBwd3duKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJbGlzdF9mb3JfZWFjaChxZSwgJmZhYnJpYy0+dnBvcnRfcSkgeworCQl2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopcWU7CisJCWlmIChiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJnZwb3J0LT5scG9ydCkgPT0gcHd3bikKKwkJCXJldHVybiB2cG9ydDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiAgICBJbiBhIGdpdmVuIGZhYnJpYywgcmV0dXJuIHRoZSBudW1iZXIgb2YgbHBvcnRzLgorICoKKyAqICAgcGFyYW1baW5dIGZhYnJpYyAtIEZhYnJpYyBpbnN0YW5jZS4gVGhpcyBjYW4gYmUgYSBiYXNlIGZhYnJpYyBvciB2Zi4KKyAqCisqICAgIEByZXR1cm4gOiAxIG9yIG1vcmUuCisgKi8KK3UxNgorYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYykKK3sKKwlyZXR1cm4gKGZhYnJpYy0+bnVtX3Zwb3J0cyk7Cit9CisKKy8qKgorICogCQlVbnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsaW5nLgorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgICB1MTYgbGVuKQoreworCXUzMiAgICAgICAgcGlkID0gZmNocy0+ZF9pZDsKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxZTsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQgPSAoc3RydWN0IGZjX2Vsc19jbWRfcyAqKSAoZmNocyArIDEpOworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIGVsc19jbWQ7CisKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBsZW4pOworCWJmYV90cmMoZmFicmljLT5mY3MsIHBpZCk7CisKKwkvKioKKwkgKiBMb29rIGZvciBvdXIgb3duIEZMT0dJIGZyYW1lcyBiZWluZyBsb29wZWQgYmFjay4gVGhpcyBtZWFucyBhbgorCSAqIGV4dGVybmFsIGxvb3BiYWNrIGNhYmxlIGlzIGluIHBsYWNlLiBPdXIgb3duIEZMT0dJIGZyYW1lcyBhcmUKKwkgKiBzb21ldGltZXMgbG9vcGVkIGJhY2sgd2hlbiBzd2l0Y2ggcG9ydCBnZXRzIHRlbXBvcmFyaWx5IGJ5cGFzc2VkLgorCSAqLworCWlmICgocGlkID09IGJmYV9vc19udG9oM2IoRkNfRkFCUklDX1BPUlQpKQorCSAgICAmJiAoZWxzX2NtZC0+ZWxzX2NvZGUgPT0gRkNfRUxTX0ZMT0dJKQorCSAgICAmJiAoZmxvZ2ktPnBvcnRfbmFtZSA9PSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24oJmZhYnJpYy0+YnBvcnQpKSkgeworCQliZmFfc21fc2VuZF9ldmVudChmYWJyaWMsIEJGQV9GQ1NfRkFCUklDX1NNX0xPT1BCQUNLKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIEZMT0dJL0VWRlAgZXhjaGFuZ2VzIHNob3VsZCBiZSBjb25zdW1lZCBieSBiYXNlIGZhYnJpYy4KKwkgKi8KKwlpZiAoZmNocy0+ZF9pZCA9PSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKSkgeworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBwaWQpOworCQliZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKGZhYnJpYywgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChmYWJyaWMtPmJwb3J0LnBpZCA9PSBwaWQpIHsKKwkJLyoqCisJCSAqIEFsbCBhdXRoZW50aWNhdGlvbiBmcmFtZXMgc2hvdWxkIGJlIHJvdXRlZCB0byBhdXRoCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBlbHNfY21kLT5lbHNfY29kZSk7CisJCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQVVUSCkgeworCQkJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQkJZmFicmljLT5hdXRoLnJlc3BvbnNlID0gKHU4ICopIGVsc19jbWQ7CisJCQlyZXR1cm47CisJCX0KKworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCAqKHU4ICopICgodTggKikgZmNocykpOworCQliZmFfZmNzX3BvcnRfdWZfcmVjdigmZmFicmljLT5icG9ydCwgZmNocywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCS8qKgorCSAqIGxvb2sgZm9yIGEgbWF0Y2hpbmcgbG9jYWwgcG9ydCBJRAorCSAqLworCWxpc3RfZm9yX2VhY2gocWUsICZmYWJyaWMtPnZwb3J0X3EpIHsKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKXFlOworCQlpZiAodnBvcnQtPmxwb3J0LnBpZCA9PSBwaWQpIHsKKwkJCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZ2cG9ydC0+bHBvcnQsIGZjaHMsIGxlbik7CisJCQlyZXR1cm47CisJCX0KKwl9CisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCWJmYV9mY3NfcG9ydF91Zl9yZWN2KCZmYWJyaWMtPmJwb3J0LCBmY2hzLCBsZW4pOworfQorCisvKioKKyAqIAkJVW5zb2xpY2l0ZWQgZnJhbWVzIHRvIGJlIHByb2Nlc3NlZCBieSBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX3VmKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQkgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKwljYXNlIEZDX0VMU19GTE9HSToKKwkJYmZhX2Zjc19mYWJyaWNfcHJvY2Vzc19mbG9naShmYWJyaWMsIGZjaHMsIGxlbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyoKKwkJICogbmVlZCB0byBnZW5lcmF0ZSBhIExTX1JKVAorCQkgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKioKKyAqIAlQcm9jZXNzCWluY29taW5nIEZMT0dJCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX2ZhYnJpY19wcm9jZXNzX2Zsb2dpKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBmY19sb2dpX3MgICAgICpmbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpicG9ydCA9ICZmYWJyaWMtPmJwb3J0OworCisJYmZhX3RyYyhmYWJyaWMtPmZjcywgZmNocy0+c19pZCk7CisKKwlmYWJyaWMtPnN0YXRzLmZsb2dpX3JjdmQrKzsKKwkvKgorCSAqIENoZWNrIHBvcnQgdHlwZS4gSXQgc2hvdWxkIGJlIDAgPSBuLXBvcnQuCisJICovCisJaWYgKGZsb2dpLT5jc3AucG9ydF90eXBlKSB7CisJCS8qCisJCSAqIEB0b2RvOiBtYXkgbmVlZCB0byBzZW5kIGEgTFNfUkpUCisJCSAqLworCQliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmbG9naS0+cG9ydF9uYW1lKTsKKwkJZmFicmljLT5zdGF0cy5mbG9naV9yZWplY3RlZCsrOworCQlyZXR1cm47CisJfQorCisJZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfb3NfbnRvaHMoZmxvZ2ktPmNzcC5iYmNyZWQpOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZW1fcG9ydF93d24gPSBmbG9naS0+cG9ydF9uYW1lOworCWJwb3J0LT5wb3J0X3RvcG8ucG4ybi5yZXBseV9veGlkID0gZmNocy0+b3hfaWQ7CisKKwkvKgorCSAqIFNlbmQgYSBGbG9naSBBY2MKKwkgKi8KKwliZmFfZmNzX2ZhYnJpY19zZW5kX2Zsb2dpX2FjYyhmYWJyaWMpOworCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fTk9fRkFCUklDKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX3NlbmRfZmxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpCit7CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJmZhYnJpYy0+YnBvcnQucG9ydF9jZmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmZmFicmljLT5icG9ydC5wb3J0X3RvcG8ucG4ybjsKKwlzdHJ1Y3QgYmZhX3MgICAqYmZhID0gZmFicmljLT5mY3MtPmJmYTsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIHJlcWxlbjsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKGZhYnJpYy0+ZmNzKTsKKwkvKioKKwkgKiBEbyBub3QgZXhwZWN0IHRoaXMgZmFpbHVyZSAtLSBleHBlY3QgcmVtb3RlIG5vZGUgdG8gcmV0cnkKKwkgKi8KKwlpZiAoIWZjeHApCisJCXJldHVybjsKKworCXJlcWxlbiA9IGZjX2Zsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQkgICAgYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCksCisJCQkJICAgIG4ybl9wb3J0LT5yZXBseV9veGlkLCBwY2ZnLT5wd3duLAorCQkJCSAgICBwY2ZnLT5ud3duLCBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShiZmEpLAorCQkJCSAgICBiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KGJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBmYWJyaWMtPnZmX2lkLCBiZmFfbHBzX2dldF90YWcoZmFicmljLT5scHMpLAorCQkJQkZBX0ZBTFNFLCBGQ19DTEFTU18zLCByZXFsZW4sICZmY2hzLAorCQkJYmZhX2Zjc19mYWJyaWNfZmxvZ2lhY2NfY29tcCwgZmFicmljLAorCQkJRkNfTUFYX1BEVVNaLCAwKTsgLyogVGltZW91dCAwIGluZGljYXRlcyBubworCQkJCQkgICAqIHJlc3BvbnNlIGV4cGVjdGVkCisJCQkJCSAgICovCit9CisKKy8qKgorICogICBGbG9naSBBY2MgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfZmFicmljX2Zsb2dpYWNjX2NvbXAodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCBzdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICB1MzIgcmVzaWRfbGVuLCBzdHJ1Y3QgZmNoc19zICpyc3BmY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMgPSBjYmFyZzsKKworCWJmYV90cmMoZmFicmljLT5mY3MsIHN0YXR1cyk7Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gcmVzdWx0IC0gMQorICoKKyAqIEByZXR1cm4gLSBub25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfYXV0aF9maW5pc2hlZChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBlbnVtIGF1dGhfc3RhdHVzIHN0YXR1cykKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyA9PSBGQ19BVVRIX1NUQVRFX1NVQ0NFU1MpCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9TVUNDRVNTKTsKKwllbHNlCisJCWJmYV9zbV9zZW5kX2V2ZW50KGZhYnJpYywgQkZBX0ZDU19GQUJSSUNfU01fQVVUSF9GQUlMRUQpOworfQorCisvKioKKyAqIFNlbmQgQUVOIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19mYWJyaWNfYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9hZW5fZXZlbnQgZXZlbnQpCit7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHBvcnQtPmZjcy0+bG9nbTsKKwl3d25fdCAgICAgICAgICAgcHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwl3d25fdCAgICAgICAgICAgZnd3biA9IGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX25hbWUocG9ydCk7CisJY2hhciAgICAgICAgICAgIHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBmd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKworCXd3bjJzdHIocHd3bl9wdHIsIHB3d24pOworCXd3bjJzdHIoZnd3bl9wdHIsIGZ3d24pOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UsIHB3d25fcHRyLAorCQkJZnd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5wb3J0LnB3d24gPSBwd3duOworCWFlbl9kYXRhLnBvcnQuZnd3biA9IGZ3d247Cit9CisKKy8qCisgKgorICogQHBhcmFtW2luXSBmYWJyaWMgLSBmYWJyaWMKKyAqIEBwYXJhbVtpbl0gd3duX3QgLSBuZXcgZmFicmljIG5hbWUKKyAqCisgKiBAcmV0dXJuIC0gbm9uZQorICovCit2b2lkCitiZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywKKwkJCSAgICAgICB3d25fdCBmYWJyaWNfbmFtZSkKK3sKKwliZmFfdHJjKGZhYnJpYy0+ZmNzLCBmYWJyaWNfbmFtZSk7CisKKwlpZiAoZmFicmljLT5mYWJyaWNfbmFtZSA9PSAwKSB7CisJCS8qCisJCSAqIFdpdGggQlJDRCBzd2l0Y2hlcywgd2UgZG9uJ3QgZ2V0IEZhYnJpYyBOYW1lIGluIEZMT0dJLgorCQkgKiBEb24ndCBnZW5lcmF0ZSBhIGZhYnJpYyBuYW1lIGNoYW5nZSBldmVudCBpbiB0aGlzIGNhc2UuCisJCSAqLworCQlmYWJyaWMtPmZhYnJpY19uYW1lID0gZmFicmljX25hbWU7CisJfSBlbHNlIHsKKwkJZmFicmljLT5mYWJyaWNfbmFtZSA9IGZhYnJpY19uYW1lOworCQkvKgorCQkgKiBHZW5lcmF0ZSBhIEV2ZW50CisJCSAqLworCQliZmFfZmNzX2ZhYnJpY19hZW5fcG9zdCgmZmFicmljLT5icG9ydCwKKwkJCQkJQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRSk7CisJfQorCit9CisKKy8qKgorICogTm90IHVzZWQgYnkgRkNTLgorICovCit2b2lkCitiZmFfY2JfbHBzX2Zsb2dvX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZykKK3sKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzQ3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZjYnVpbGQuYwpAQCAtMCwwICsxLDE0NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qCisgKiBmY2J1aWxkLmMgLSBGQyBsaW5rIHNlcnZpY2UgZnJhbWUgYnVpbGRpbmcgYW5kIHBhcnNpbmcgcm91dGluZXMKKyAqLworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgImZjYnVpbGQuaCIKKworLyoKKyAqIHN0YXRpYyBidWlsZCBmdW5jdGlvbnMKKyAqLworc3RhdGljIHZvaWQgZmNfZWxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHZvaWQgZmNfYmxzX3JzcF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19lbHNfcmVxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjX2Vsc19yc3BfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNoc19zICAgZmNfYmxzX3JlcV90bXBsOworc3RhdGljIHN0cnVjdCBmY2hzX3MgICBmY19ibHNfcnNwX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjX2JhX2FjY19zIGJhX2FjY190bXBsOworc3RhdGljIHN0cnVjdCBmY19sb2dpX3MgcGxvZ2lfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcHJsaV9zIHBybGlfdG1wbDsKK3N0YXRpYyBzdHJ1Y3QgZmNfcnJxX3MgcnJxX3RtcGw7CitzdGF0aWMgc3RydWN0IGZjaHNfcyAgIGZjcF9mY2hzX3RtcGw7CisKK3ZvaWQKK2ZjYnVpbGRfaW5pdCh2b2lkKQoreworCS8qCisJICogZmNfZWxzX3JlcV90bXBsCisJICovCisJZmNfZWxzX3JlcV90bXBsLnJvdXRpbmcgPSBGQ19SVEdfRVhUX0xJTks7CisJZmNfZWxzX3JlcV90bXBsLmNhdF9pbmZvID0gRkNfQ0FUX0xEX1JFUVVFU1Q7CisJZmNfZWxzX3JlcV90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcmVxX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfU0VRX0lOSSB8IEZDVExfRlNfRVhDSCB8IEZDVExfRU5EX1NFUSB8CisJCQkgICAgICBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19lbHNfcnNwX3RtcGwKKwkgKi8KKwlmY19lbHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19FWFRfTElOSzsKKwlmY19lbHNfcnNwX3RtcGwuY2F0X2luZm8gPSBGQ19DQVRfTERfUkVQTFk7CisJZmNfZWxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0VMUzsKKwlmY19lbHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Vsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcmVxX3RtcGwKKwkgKi8KKwlmY19ibHNfcmVxX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yZXFfdG1wbC50eXBlID0gRkNfVFlQRV9CTFM7CisJZmNfYmxzX3JlcV90bXBsLmZfY3RsID0gYmZhX29zX2h0b24zYihGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yZXFfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBmY19ibHNfcnNwX3RtcGwKKwkgKi8KKwlmY19ibHNfcnNwX3RtcGwucm91dGluZyA9IEZDX1JUR19CQVNJQ19MSU5LOworCWZjX2Jsc19yc3BfdG1wbC5jYXRfaW5mbyA9IEZDX0NBVF9CQV9BQ0M7CisJZmNfYmxzX3JzcF90bXBsLnR5cGUgPSBGQ19UWVBFX0JMUzsKKwlmY19ibHNfcnNwX3RtcGwuZl9jdGwgPQorCQliZmFfb3NfaHRvbjNiKEZDVExfRUNfUkVTUCB8IEZDVExfU0VRX0lOSSB8IEZDVExfTFNfRVhDSCB8CisJCQkgICAgICBGQ1RMX0VORF9TRVEgfCBGQ1RMX1NJX1hGRVIpOworCWZjX2Jsc19yc3BfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJLyoKKwkgKiBiYV9hY2NfdG1wbAorCSAqLworCWJhX2FjY190bXBsLnNlcV9pZF92YWxpZCA9IDA7CisJYmFfYWNjX3RtcGwubG93X3NlcV9jbnQgPSAwOworCWJhX2FjY190bXBsLmhpZ2hfc2VxX2NudCA9IDB4RkZGRjsKKworCS8qCisJICogcGxvZ2lfdG1wbAorCSAqLworCXBsb2dpX3RtcGwuY3NwLnZlcmhpID0gRkNfUEhfVkVSX1BIXzM7CisJcGxvZ2lfdG1wbC5jc3AudmVybG8gPSBGQ19QSF9WRVJfNF8zOworCXBsb2dpX3RtcGwuY3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucygweDAwMDQpOworCXBsb2dpX3RtcGwuY3NwLmNpcm8gPSAweDE7CisJcGxvZ2lfdG1wbC5jc3AuY2lzYyA9IDB4MDsKKwlwbG9naV90bXBsLmNzcC5hbHRiYmNyZWQgPSAweDA7CisJcGxvZ2lfdG1wbC5jc3AuY29uc2VxID0gYmZhX29zX2h0b25zKDB4MDBGRik7CisJcGxvZ2lfdG1wbC5jc3Aucm9fYml0bWFwID0gYmZhX29zX2h0b25zKDB4MDAwMik7CisJcGxvZ2lfdG1wbC5jc3AuZV9kX3RvdiA9IGJmYV9vc19odG9ubCgyMDAwKTsKKworCXBsb2dpX3RtcGwuY2xhc3MzLmNsYXNzX3ZhbGlkID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5zZXF1ZW50aWFsID0gMTsKKwlwbG9naV90bXBsLmNsYXNzMy5jb25zZXEgPSAweEZGOworCXBsb2dpX3RtcGwuY2xhc3MzLm9zcHggPSAxOworCisJLyoKKwkgKiBwcmxpX3RtcGwKKwkgKi8KKwlwcmxpX3RtcGwuY29tbWFuZCA9IEZDX0VMU19QUkxJOworCXBybGlfdG1wbC5wZ2xlbiA9IDB4MTA7CisJcHJsaV90bXBsLnBhZ2VieXRlcyA9IGJmYV9vc19odG9ucygweDAwMTQpOworCXBybGlfdG1wbC5wYXJhbXBhZ2UudHlwZSA9IEZDX1RZUEVfRkNQOworCXBybGlfdG1wbC5wYXJhbXBhZ2UuaW1hZ2VwYWlyID0gMTsKKwlwcmxpX3RtcGwucGFyYW1wYWdlLnNlcnZwYXJhbXMucnhyZGlzYWIgPSAxOworCisJLyoKKwkgKiBycnFfdG1wbAorCSAqLworCXJycV90bXBsLmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlJROworCisJLyoKKwkgKiBmY3BfZmNoc190bXBsCisJICovCisJZmNwX2ZjaHNfdG1wbC5yb3V0aW5nID0gRkNfUlRHX0ZDNF9ERVZfREFUQTsKKwlmY3BfZmNoc190bXBsLmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DTUQ7CisJZmNwX2ZjaHNfdG1wbC50eXBlID0gRkNfVFlQRV9GQ1A7CisJZmNwX2ZjaHNfdG1wbC5mX2N0bCA9CisJCWJmYV9vc19odG9uM2IoRkNUTF9GU19FWENIIHwgRkNUTF9FTkRfU0VRIHwgRkNUTF9TSV9YRkVSKTsKKwlmY3BfZmNoc190bXBsLnNlcV9pZCA9IDE7CisJZmNwX2ZjaHNfdG1wbC5yeF9pZCA9IEZDX1JYSURfQU5ZOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfZmNoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTMyIG94X2lkKQoreworCWJmYV9vc19tZW1zZXQoZmNocywgMCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKworCWZjaHMtPnJvdXRpbmcgPSBGQ19SVEdfRkM0X0RFVl9EQVRBOworCWZjaHMtPmNhdF9pbmZvID0gRkNfQ0FUX1VOU09MSUNJVF9DVFJMOworCWZjaHMtPnR5cGUgPSBGQ19UWVBFX1NFUlZJQ0VTOworCWZjaHMtPmZfY3RsID0KKwkJYmZhX29zX2h0b24zYihGQ1RMX1NFUV9JTkkgfCBGQ1RMX0ZTX0VYQ0ggfCBGQ1RMX0VORF9TRVEgfAorCQkJICAgICAgRkNUTF9TSV9YRkVSKTsKKwlmY2hzLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCWZjaHMtPmRfaWQgPSAoZF9pZCk7CisJZmNocy0+c19pZCA9IChzX2lkKTsKKwlmY2hzLT5veF9pZCA9IGJmYV9vc19odG9ucyhveF9pZCk7CisKKwkvKioKKwkgKiBAdG9kbyBubyBuZWVkIHRvIHNldCBveF9pZCBmb3IgcmVxdWVzdAorCSAqICAgICAgIG5vIG5lZWQgdG8gc2V0IHJ4X2lkIGZvciByZXNwb25zZQorCSAqLworfQorCit2b2lkCitmY19lbHNfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19lbHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+ZF9pZCA9IChkX2lkKTsKKwlmY2hzLT5zX2lkID0gKHNfaWQpOworCWZjaHMtPm94X2lkID0gYmZhX29zX2h0b25zKG94X2lkKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Vsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Vsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIGVsc19jbWQ7CisKKwlsZW4gPSBsZW47CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCX0KKwlyZXR1cm4gKEZDX1BBUlNFX09LKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2Jsc19yc3BfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCWJmYV9vc19tZW1jcHkoZmNocywgJmZjX2Jsc19yc3BfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY2hzX3MpKTsKKwlmY2hzLT5kX2lkID0gZF9pZDsKKwlmY2hzLT5zX2lkID0gc19pZDsKKwlmY2hzLT5veF9pZCA9IG94X2lkOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitmY19wbG9naV94X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJIHUxNiBwZHVfc2l6ZSwgdTggZWxzX2NvZGUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKHBsZCk7CisKKwliZmFfb3NfbWVtY3B5KHBsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCXBsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gZWxzX2NvZGU7CisJaWYgKGVsc19jb2RlID09IEZDX0VMU19QTE9HSSkKKwkJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZWxzZQorCQlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBsb2dpLT5jc3AucnhzeiA9IHBsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+cG9ydF9uYW1lLCAmcG9ydF9uYW1lLCBzaXplb2Yod3duX3QpKTsKKwliZmFfb3NfbWVtY3B5KCZwbG9naS0+bm9kZV9uYW1lLCAmbm9kZV9uYW1lLCBzaXplb2Yod3duX3QpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKK30KKwordTE2CitmY19mbG9naV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCXUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCXUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsIHU4IHNldF9hdXRoLAorCQl1MTYgbG9jYWxfYmJfY3JlZGl0cykKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19QT1JUKTsKKwl1MzIgCSp2dmxfaW5mbzsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfRkxPR0k7CisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlmbG9naS0+Y3NwLnJ4c3ogPSBmbG9naS0+Y2xhc3MzLnJ4c3ogPSBiZmFfb3NfaHRvbnMocGR1X3NpemUpOworCWZsb2dpLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJZmxvZ2ktPm5vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKworCS8qCisJICogU2V0IHRoZSBOUElWIENhcGFiaWxpdHkgQml0ICggd29yZCAxLCBiaXQgMzEpIG9mIENvbW1vbgorCSAqIFNlcnZpY2UgUGFyYW1ldGVycy4KKwkgKi8KKwlmbG9naS0+Y3NwLmNpcm8gPSBzZXRfbnBpdjsKKworCS8qIHNldCBBVVRIIGNhcGFiaWxpdHkgKi8KKwlmbG9naS0+Y3NwLnNlY3VyaXR5ID0gc2V0X2F1dGg7CisKKwlmbG9naS0+Y3NwLmJiY3JlZCA9IGJmYV9vc19odG9ucyhsb2NhbF9iYl9jcmVkaXRzKTsKKworCS8qIFNldCBicmNkIHRva2VuIGluIFZWTCAqLworCXZ2bF9pbmZvID0gKHUzMiAqKSZmbG9naS0+dnZsWzBdOworCisJLyogc2V0IHRoZSBmbGFnIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBWVkwgKi8KKwlmbG9naS0+Y3NwLm5waXZfc3VwcCAgICA9IDE7IC8qIEB0b2RvLiBmaWVsZCBuYW1lIGlzIG5vdCBjb3JyZWN0ICovCisJdnZsX2luZm9bMF0JPSBiZmFfb3NfaHRvbmwoRkxPR0lfVlZMX0JSQ0QpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX2Zsb2dpX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9naV9zICpmbG9naSwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpCit7CisJdTMyICAgICAgICBkX2lkID0gMDsKKworCWJmYV9vc19tZW1jcHkoZmxvZ2ksICZwbG9naV90bXBsLCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCWZsb2dpLT5jc3AucnhzeiA9IGZsb2dpLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJZmxvZ2ktPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlmbG9naS0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJZmxvZ2ktPmNzcC5iYmNyZWQgPSBiZmFfb3NfaHRvbnMobG9jYWxfYmJfY3JlZGl0cyk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfZmRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksIHUzMiBzX2lkLAorCQl1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lLAorCQl1MTYgcGR1X3NpemUpCit7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19GQUJSSUNfUE9SVCk7CisKKwliZmFfb3NfbWVtY3B5KGZsb2dpLCAmcGxvZ2lfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19sb2dpX3MpKTsKKworCWZsb2dpLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0ZESVNDOworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmxvZ2ktPmNzcC5yeHN6ID0gZmxvZ2ktPmNsYXNzMy5yeHN6ID0gYmZhX29zX2h0b25zKHBkdV9zaXplKTsKKwlmbG9naS0+cG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWZsb2dpLT5ub2RlX25hbWUgPSBub2RlX25hbWU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7Cit9CisKK3UxNgorZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJICAgICAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJICAgICAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX1BMT0dJKTsKK30KKwordTE2CitmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUsCisJCSAgIHUxNiBwZHVfc2l6ZSkKK3sKKwlyZXR1cm4gZmNfcGxvZ2lfeF9idWlsZChmY2hzLCBwbGQsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBwZHVfc2l6ZSwgRkNfRUxTX0FDQyk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wbG9naV9yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbiwgd3duX3QgcG9ydF9uYW1lKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xTX1JKVDoKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSAoZmNocyArIDEpOworCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiAoRkNfUEFSU0VfQlVTWSk7CisJCWVsc2UKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJY2FzZSBGQ19FTFNfQUNDOgorCQlwbG9naSA9IChzdHJ1Y3QgZmNfbG9naV9zICopIChmY2hzICsgMSk7CisJCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghd3duX2lzX2VxdWFsKHBsb2dpLT5wb3J0X25hbWUsIHBvcnRfbmFtZSkpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCWlmICghcGxvZ2ktPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwkJaWYgKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgKEZDX01JTl9QRFVTWikpCisJCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJCXJldHVybiAoRkNfUEFSU0VfT0spOworCWRlZmF1bHQ6CisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisJfQorfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcGxvZ2lfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocykKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGxvZ2kgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBsb2dpLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwbG9naS0+Y2xhc3MzLnJ4c3opIDwgRkNfTUlOX1BEVVNaKQorCSAgICB8fCAoYmZhX29zX250b2hzKHBsb2dpLT5jbGFzczMucnhzeikgPiBGQ19NQVhfUERVU1opCisJICAgIHx8IChwbG9naS0+Y2xhc3MzLnJ4c3ogPT0gMCkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkgICAgICB1MTYgb3hfaWQpCit7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpID0gKHN0cnVjdCBmY19wcmxpX3MgKikgKHBsZCk7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwliZmFfb3NfbWVtY3B5KHBybGksICZwcmxpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7CisKKwlwcmxpLT5jb21tYW5kID0gRkNfRUxTX1BSTEk7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmV0cnkgICAgICAgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMucmVjX3N1cHBvcnQgICA9IDE7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMudGFza19yZXRyeV9pZCA9IDA7CisJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuY29uZmlybSAgICAgICA9IDE7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSk7Cit9CisKK3UxNgorZmNfcHJsaV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZSkKK3sKKwlzdHJ1Y3QgZmNfcHJsaV9zICAgICAgKnBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocGxkKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWJmYV9vc19tZW1jcHkocHJsaSwgJnBybGlfdG1wbCwgc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKKworCXBybGktPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCisJaWYgKChyb2xlICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pID09IEJGQV9QT1JUX1JPTEVfRkNQX1RNKQorCQlwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgPSAxOworCWVsc2UKKwkJcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yID0gMTsKKworCXBybGktPnBhcmFtcGFnZS5yc3Bjb2RlID0gRkNfUFJMSV9BQ0NfWFFURDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19wcmxpX3MpKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX3BybGlfcnNwX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGksIGludCBsZW4pCit7CisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfcHJsaV9zKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoKHBybGktPnBhcmFtcGFnZS5yc3Bjb2RlICE9IEZDX1BSTElfQUNDX1hRVEQpCisJICAgICYmIChwcmxpLT5wYXJhbXBhZ2UucnNwY29kZSAhPSBGQ19QUkxJX0FDQ19QUkVERUZfSU1HKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmIChwcmxpLT5wYXJhbXBhZ2Uuc2VydnBhcmFtcy50YXJnZXQgIT0gMSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcHJsaV9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpKQoreworCWlmIChwcmxpLT5wYXJhbXBhZ2UudHlwZSAhPSBGQ19UWVBFX0ZDUCkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLmltYWdlcGFpcikKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghcHJsaS0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJcmV0dXJuIChGQ19QQVJTRV9PSyk7Cit9CisKK3UxNgorZmNfbG9nb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbG9nb19zICpsb2dvLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChsb2dvLCAnXDAnLCBzaXplb2Yoc3RydWN0IGZjX2xvZ29fcykpOworCWxvZ28tPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfTE9HTzsKKwlsb2dvLT5ucG9ydF9pZCA9IChzX2lkKTsKKwlsb2dvLT5vcmlnX3BvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sb2dvX3MpKTsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorZmNfYWRpc2NfeF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIHUzMiBkX2lkLAorCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgd3duX3Qgbm9kZV9uYW1lLCB1OCBlbHNfY29kZSkKK3sKKwltZW1zZXQoYWRpc2MsICdcMCcsIHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworCisJYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBlbHNfY29kZTsKKworCWlmIChlbHNfY29kZSA9PSBGQ19FTFNfQURJU0MpCisJCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWVsc2UKKwkJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwlhZGlzYy0+b3JpZ19IQSA9IDA7CisJYWRpc2MtPm9yaWdfcG9ydF9uYW1lID0gcG9ydF9uYW1lOworCWFkaXNjLT5vcmlnX25vZGVfbmFtZSA9IG5vZGVfbmFtZTsKKwlhZGlzYy0+bnBvcnRfaWQgPSAoc19pZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpOworfQorCit1MTYKK2ZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJd3duX3Qgbm9kZV9uYW1lKQoreworCXJldHVybiBmY19hZGlzY194X2J1aWxkKGZjaHMsIGFkaXNjLCBkX2lkLCBzX2lkLCBveF9pZCwgcG9ydF9uYW1lLAorCQkJCW5vZGVfbmFtZSwgRkNfRUxTX0FESVNDKTsKK30KKwordTE2CitmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLCB1MzIgZF9pZCwKKwkJICAgdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkgICB3d25fdCBub2RlX25hbWUpCit7CisJcmV0dXJuIGZjX2FkaXNjX3hfYnVpbGQoZmNocywgYWRpc2MsIGRfaWQsIHNfaWQsIG94X2lkLCBwb3J0X25hbWUsCisJCQkJbm9kZV9uYW1lLCBGQ19FTFNfQUNDKTsKK30KKworZW51bSBmY19wYXJzZV9zdGF0dXMKK2ZjX2FkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNfYWRpc2NfcyAqYWRpc2MsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSwKKwkJCQkgd3duX3Qgbm9kZV9uYW1lKQoreworCisJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgZmNfYWRpc2NfcykpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlpZiAoYWRpc2MtPmVsc19jbWQuZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgaG9zdF9kYXAsCisJCSB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfYWRpc2NfcyAgICAgKmFkaXNjID0gKHN0cnVjdCBmY19hZGlzY19zICopIHBsZDsKKworCWlmIChhZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKChhZGlzYy0+bnBvcnRfaWQgPT0gKGhvc3RfZGFwKSkKKwkgICAgJiYgd3duX2lzX2VxdWFsKGFkaXNjLT5vcmlnX3BvcnRfbmFtZSwgcG9ydF9uYW1lKQorCSAgICAmJiB3d25faXNfZXF1YWwoYWRpc2MtPm9yaWdfbm9kZV9uYW1lLCBub2RlX25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX09LKTsKKworCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7Cit9CisKK2VudW0gZmNfcGFyc2Vfc3RhdHVzCitmY19wZGlzY19wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCB3d25fdCBub2RlX25hbWUsIHd3bl90IHBvcnRfbmFtZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJaWYgKHBkaXNjLT5jbGFzczMuY2xhc3NfdmFsaWQgIT0gMSkKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlpZiAoKGJmYV9vc19udG9ocyhwZGlzYy0+Y2xhc3MzLnJ4c3opIDwKKwkJIChGQ19NSU5fUERVU1ogLSBzaXplb2Yoc3RydWN0IGZjaHNfcykpKQorCSAgICB8fCAocGRpc2MtPmNsYXNzMy5yeHN6ID09IDApKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJaWYgKCF3d25faXNfZXF1YWwocGRpc2MtPnBvcnRfbmFtZSwgcG9ydF9uYW1lKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9GQUlMVVJFKTsKKworCWlmICghd3duX2lzX2VxdWFsKHBkaXNjLT5ub2RlX25hbWUsIG5vZGVfbmFtZSkpCisJCXJldHVybiAoRkNfUEFSU0VfRkFJTFVSRSk7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfYWJ0c19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwliZmFfb3NfbWVtY3B5KGZjaHMsICZmY19ibHNfcmVxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNoc19zKSk7CisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQUJUUzsKKwlmY2hzLT5kX2lkID0gKGRfaWQpOworCWZjaHMtPnNfaWQgPSAoc19pZCk7CisJZmNocy0+b3hfaWQgPSBiZmFfb3NfaHRvbnMob3hfaWQpOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjaHNfcykpOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlpZiAoKGZjaHMtPmNhdF9pbmZvID09IEZDX0NBVF9CQV9BQ0MpCisJICAgIHx8IChmY2hzLT5jYXRfaW5mbyA9PSBGQ19DQVRfQkFfUkpUKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKKwlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworfQorCit1MTYKK2ZjX3JycV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQkgdTMyIHNfaWQsIHUxNiBveF9pZCwgdTE2IHJycV9veGlkKQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJLyoKKwkgKiBidWlsZCBycnEgcGF5bG9hZAorCSAqLworCWJmYV9vc19tZW1jcHkocnJxLCAmcnJxX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfcnJxX3MpKTsKKwlycnEtPnNfaWQgPSAoc19pZCk7CisJcnJxLT5veF9pZCA9IGJmYV9vc19odG9ucyhycnFfb3hpZCk7CisJcnJxLT5yeF9pZCA9IEZDX1JYSURfQU5ZOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JycV9zKSk7Cit9CisKK3UxNgorZmNfbG9nb19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCSAgdTE2IG94X2lkKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqYWNjID0gcGxkOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQoYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworCWFjYy0+ZWxzX2NvZGUgPSBGQ19FTFNfQUNDOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2Vsc19jbWRfcykpOworfQorCit1MTYKK2ZjX2xzX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfbHNfcmp0X3MgKmxzX3JqdCwgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHU4IHJlYXNvbl9jb2RlLAorCQl1OCByZWFzb25fY29kZV9leHBsKQoreworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCW1lbXNldChsc19yanQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfbHNfcmp0X3MpKTsKKworCWxzX3JqdC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19MU19SSlQ7CisJbHNfcmp0LT5yZWFzb25fY29kZSA9IHJlYXNvbl9jb2RlOworCWxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCA9IHJlYXNvbl9jb2RlX2V4cGw7CisJbHNfcmp0LT52ZW5kb3JfdW5pcXVlID0gMHgwMDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19sc19yanRfcykpOworfQorCit1MTYKK2ZjX2JhX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfYmFfYWNjX3MgKmJhX2FjYywgdTMyIGRfaWQsCisJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHUxNiByeF9pZCkKK3sKKwlmY19ibHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCWJmYV9vc19tZW1jcHkoYmFfYWNjLCAmYmFfYWNjX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfYmFfYWNjX3MpKTsKKworCWZjaHMtPnJ4X2lkID0gcnhfaWQ7CisKKwliYV9hY2MtPm94X2lkID0gZmNocy0+b3hfaWQ7CisJYmFfYWNjLT5yeF9pZCA9IGZjaHMtPnJ4X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX2FjY19zKSk7Cit9CisKK3UxNgorZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQoZWxzX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY19lbHNfY21kX3MpKTsKKwllbHNfY21kLT5lbHNfY29kZSA9IEZDX0VMU19BQ0M7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfZWxzX2NtZF9zKSk7Cit9CisKK2ludAorZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpCit7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJc3RydWN0IGZjX3BybG9fcyAgICAgICpwcmxvOworCXN0cnVjdCBmY190cHJsb19zICAgICAqdHBybG87CisKKwlpZiAoZWxzX2NvZGUgPT0gRkNfRUxTX1BSTE8pIHsKKwkJcHJsbyA9IChzdHJ1Y3QgZmNfcHJsb19zICopIChmY19mcmFtZSArIDEpOworCQludW1fcGFnZXMgPSAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfSBlbHNlIHsKKwkJdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX3MgKikgKGZjX2ZyYW1lICsgMSk7CisJCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisJfQorCXJldHVybiBudW1fcGFnZXM7Cit9CisKK3UxNgorZmNfdHBybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG9fYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlpbnQgbnVtX3BhZ2VzKQoreworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JzcF9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisKKwltZW1zZXQodHBybG9fYWNjLCAwLCAobnVtX3BhZ2VzICogMTYpICsgNCk7CisJdHBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKworCXRwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvX2FjYy0+cGF5bG9hZF9sZW4gPSBiZmFfb3NfaHRvbnMoKG51bV9wYWdlcyAqIDE2KSArIDQpOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG51bV9wYWdlczsgcGFnZSsrKSB7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQl0cHJsb19hY2MtPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkID0gMDsKKwkJdHBybG9fYWNjLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLmZjNHR5cGVfY3NwID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXRwcmxvX2FjYy0+dHBybG9fYWNjX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJfQorCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvX2FjYy0+cGF5bG9hZF9sZW4pKTsKK30KKwordTE2CitmY19wcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCBzdHJ1Y3QgZmNfcHJsb19hY2NfcyAqcHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpCit7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChwcmxvX2FjYywgMCwgKG51bV9wYWdlcyAqIDE2KSArIDQpOworCXBybG9fYWNjLT5jb21tYW5kID0gRkNfRUxTX0FDQzsKKwlwcmxvX2FjYy0+cGFnZV9sZW4gPSAweDEwOworCXBybG9fYWNjLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgPSAwOworCQlwcmxvX2FjYy0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0uZmM0dHlwZV9jc3AgPSBGQ19UWVBFX0ZDUDsKKwkJcHJsb19hY2MtPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcmlnX3Byb2Nlc3NfYXNzYyA9IDA7CisJCXBybG9fYWNjLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG9fYWNjLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgdTMyIGRhdGFfZm9ybWF0KQoreworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJbWVtc2V0KHJuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNfcm5pZF9jbWRfcykpOworCisJcm5pZC0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19STklEOworCXJuaWQtPm5vZGVfaWRfZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NtZF9zKSk7Cit9CisKK3UxNgorZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICpnZW5fdG9wb19kYXRhKQoreworCW1lbXNldChybmlkX2FjYywgMCwgc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisKKwlmY19lbHNfcnNwX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXJuaWRfYWNjLT5lbHNfY21kLmVsc19jb2RlID0gRkNfRUxTX0FDQzsKKwlybmlkX2FjYy0+bm9kZV9pZF9kYXRhX2Zvcm1hdCA9IGRhdGFfZm9ybWF0OworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YV9sZW5ndGggPQorCQkJc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2NvbW1vbl9pZF9kYXRhX3MpOworCXJuaWRfYWNjLT5jb21tb25faWRfZGF0YSA9ICpjb21tb25faWRfZGF0YTsKKworCWlmIChkYXRhX2Zvcm1hdCA9PSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9ESVNDT1ZFUlkpIHsKKwkJcm5pZF9hY2MtPnNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoID0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyk7CisJCWJmYV9vc19hc3NpZ24ocm5pZF9hY2MtPmdlbl90b3BvbG9neV9kYXRhLCAqZ2VuX3RvcG9fZGF0YSk7CisJCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19ybmlkX2FjY19zKSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3JuaWRfYWNjX3MpIC0KKwkJCXNpemVvZihzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcykpOworCX0KKworfQorCit1MTYKK2ZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCW1lbXNldChycHNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfY21kX3MpKTsKKworCXJwc2MtPmVsc19jbWQuZWxzX2NvZGUgPSBGQ19FTFNfUlBTQzsKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19jbWRfcykpOworfQorCit1MTYKK2ZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzYzIsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUzMiAqcGlkX2xpc3QsCisJCQl1MTYgbnBpZHMpCit7CisJdTMyIGRjdGxyX2lkID0gRkNfRE9NQUlOX0NUUkxSKGJmYV9vc19odG9uM2IoZF9pZCkpOworCWludCBpID0gMDsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgYmZhX29zX2h0b24zYihkY3Rscl9pZCksIHNfaWQsIDApOworCisJbWVtc2V0KHJwc2MyLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSk7CisKKwlycHNjMi0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19SUFNDOworCXJwc2MyLT50b2tlbiA9IGJmYV9vc19odG9ubChGQ19CUkNEX1RPS0VOKTsKKwlycHNjMi0+bnVtX3BpZHMgID0gYmZhX29zX2h0b25zKG5waWRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKKwkJcnBzYzItPnBpZF9saXN0W2ldLnBpZCA9IHBpZF9saXN0W2ldOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX3Jwc2MyX2NtZF9zKSArICgobnBpZHMgLSAxKSAqCisJCQkoc2l6ZW9mKHUzMikpKSk7Cit9CisKK3UxNgorZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpCit7CisJbWVtc2V0KHJwc2NfYWNjLCAwLCBzaXplb2Yoc3RydWN0IGZjX3Jwc2NfYWNjX3MpKTsKKworCWZjX2Vsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJcnBzY19hY2MtPmNvbW1hbmQgPSBGQ19FTFNfQUNDOworCXJwc2NfYWNjLT5udW1fZW50cmllcyA9IGJmYV9vc19odG9ucygxKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfc3BlZWRfY2FwID0KKwkJYmZhX29zX2h0b25zKG9wZXJfc3BlZWQtPnBvcnRfc3BlZWRfY2FwKTsKKworCXJwc2NfYWNjLT5zcGVlZF9pbmZvWzBdLnBvcnRfb3Bfc3BlZWQgPQorCQliZmFfb3NfaHRvbnMob3Blcl9zcGVlZC0+cG9ydF9vcF9zcGVlZCk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfcnBzY19hY2NfcykpOworCit9CisKKy8qCisgKiBUQkQgLQorICogLiBnZXQgcmlkIG9mIHVubmVjZXNzYXJ5IG1lbXNldHMKKyAqLworCit1MTYKK2ZjX2xvZ29fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWxlbiA9IGxlbjsKKwlpZiAoZWxzX2NtZC0+ZWxzX2NvZGUgIT0gRkNfRUxTX0FDQykKKwkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSkKK3sKKwlzdHJ1Y3QgZmNfbG9naV9zICAgICAqcGRpc2MgPSAoc3RydWN0IGZjX2xvZ2lfcyAqKSAoZmNocyArIDEpOworCisJYmZhX29zX21lbWNweShwZGlzYywgJnBsb2dpX3RtcGwsIHNpemVvZihzdHJ1Y3QgZmNfbG9naV9zKSk7CisKKwlwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSA9IEZDX0VMU19QRElTQzsKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKworCXBkaXNjLT5jc3AucnhzeiA9IHBkaXNjLT5jbGFzczMucnhzeiA9IGJmYV9vc19odG9ucyhwZHVfc2l6ZSk7CisJcGRpc2MtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKwlwZGlzYy0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpOworfQorCit1MTYKK2ZjX3BkaXNjX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLCB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBkaXNjID0gKHN0cnVjdCBmY19sb2dpX3MgKikgKGZjaHMgKyAxKTsKKworCWlmIChsZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpCisJCXJldHVybiAoRkNfUEFSU0VfTEVOX0lOVkFMKTsKKworCWlmIChwZGlzYy0+ZWxzX2NtZC5lbHNfY29kZSAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0FDQ19JTlZBTCk7CisKKwlpZiAoIXd3bl9pc19lcXVhbChwZGlzYy0+cG9ydF9uYW1lLCBwb3J0X25hbWUpKQorCQlyZXR1cm4gKEZDX1BBUlNFX1BXV05fTk9UX0VRVUFMKTsKKworCWlmICghcGRpc2MtPmNsYXNzMy5jbGFzc192YWxpZCkKKwkJcmV0dXJuIChGQ19QQVJTRV9OV1dOX05PVF9FUVVBTCk7CisKKwlpZiAoYmZhX29zX250b2hzKHBkaXNjLT5jbGFzczMucnhzeikgPCAoRkNfTUlOX1BEVVNaKSkKKwkJcmV0dXJuIChGQ19QQVJTRV9SWFNaX0lOVkFMKTsKKworCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCit1MTYKK2ZjX3BybG9fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgaW50IG51bV9wYWdlcykKK3sKKwlzdHJ1Y3QgZmNfcHJsb19zICAgICAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBwYWdlOworCisJZmNfZWxzX3JlcV9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJbWVtc2V0KHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwlwcmxvLT5jb21tYW5kID0gRkNfRUxTX1BSTE87CisJcHJsby0+cGFnZV9sZW4gPSAweDEwOworCXBybG8tPnBheWxvYWRfbGVuID0gYmZhX29zX2h0b25zKChudW1fcGFnZXMgKiAxNikgKyA0KTsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBudW1fcGFnZXM7IHBhZ2UrKykgeworCQlwcmxvLT5wcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9wYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLnJwYV92YWxpZCA9IDA7CisJCXBybG8tPnBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJcHJsby0+cHJsb19wYXJhbXNbcGFnZV0ucmVzcF9wcm9jZXNzX2Fzc2MgPSAwOworCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHBybG8tPnBheWxvYWRfbGVuKSk7Cit9CisKK3UxNgorZmNfcHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcyAgKnBybG8gPSAoc3RydWN0IGZjX3BybG9fYWNjX3MgKikgKGZjaHMgKyAxKTsKKwlpbnQgICAgICAgICAgICAgbnVtX3BhZ2VzID0gMDsKKwlpbnQgICAgICAgICAgICAgcGFnZSA9IDA7CisKKwlsZW4gPSBsZW47CisKKwlpZiAocHJsby0+Y29tbWFuZCAhPSBGQ19FTFNfQUNDKQorCQlyZXR1cm4gKEZDX1BBUlNFX0ZBSUxVUkUpOworCisJbnVtX3BhZ2VzID0gKChiZmFfb3NfbnRvaHMocHJsby0+cGF5bG9hZF9sZW4pKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS50eXBlICE9IEZDX1RZUEVfRkNQKQorCQkJcmV0dXJuIEZDX1BBUlNFX0ZBSUxVUkU7CisKKwkJaWYgKHBybG8tPnBybG9fYWNjX3BhcmFtc1twYWdlXS5vcGFfdmFsaWQgIT0gMCkKKwkJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJCWlmIChwcmxvLT5wcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKworCQlpZiAocHJsby0+cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisJcmV0dXJuIChGQ19QQVJTRV9PSyk7CisKK30KKwordTE2CitmY190cHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMsCisJCQllbnVtIGZjX3RwcmxvX3R5cGUgdHBybG9fdHlwZSwgdTMyIHRwcl9pZCkKK3sKKwlzdHJ1Y3QgZmNfdHBybG9fcyAgICAgKnRwcmxvID0gKHN0cnVjdCBmY190cHJsb19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIHBhZ2U7CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwltZW1zZXQodHBybG8sIDAsIChudW1fcGFnZXMgKiAxNikgKyA0KTsKKwl0cHJsby0+Y29tbWFuZCA9IEZDX0VMU19UUFJMTzsKKwl0cHJsby0+cGFnZV9sZW4gPSAweDEwOworCXRwcmxvLT5wYXlsb2FkX2xlbiA9IGJmYV9vc19odG9ucygobnVtX3BhZ2VzICogMTYpICsgNCk7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50eXBlID0gRkNfVFlQRV9GQ1A7CisJCXRwcmxvLT50cHJsb19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5ycGFfdmFsaWQgPSAwOworCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLm9yaWdfcHJvY2Vzc19hc3NjID0gMDsKKwkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS5yZXNwX3Byb2Nlc3NfYXNzYyA9IDA7CisJCWlmICh0cHJsb190eXBlID09IEZDX0dMT0JBTF9MT0dPKSB7CisJCQl0cHJsby0+dHBybG9fcGFyYW1zW3BhZ2VdLmdsb2JhbF9wcm9jZXNzX2xvZ291dCA9IDE7CisJCX0gZWxzZSBpZiAodHBybG9fdHlwZSA9PSBGQ19UUFJfTE9HTykgeworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfdmFsaWQgPSAxOworCQkJdHBybG8tPnRwcmxvX3BhcmFtc1twYWdlXS50cG9fbnBvcnRfaWQgPSAodHByX2lkKTsKKwkJfQorCX0KKworCXJldHVybiAoYmZhX29zX250b2hzKHRwcmxvLT5wYXlsb2FkX2xlbikpOworfQorCit1MTYKK2ZjX3RwcmxvX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY190cHJsb19hY2NfcyAqdHBybG8gPSAoc3RydWN0IGZjX3RwcmxvX2FjY19zICopIChmY2hzICsgMSk7CisJaW50ICAgICAgICAgICAgIG51bV9wYWdlcyA9IDA7CisJaW50ICAgICAgICAgICAgIHBhZ2UgPSAwOworCisJbGVuID0gbGVuOworCisJaWYgKHRwcmxvLT5jb21tYW5kICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiAoRkNfUEFSU0VfQUNDX0lOVkFMKTsKKworCW51bV9wYWdlcyA9IChiZmFfb3NfbnRvaHModHBybG8tPnBheWxvYWRfbGVuKSAtIDQpIC8gMTY7CisKKwlmb3IgKHBhZ2UgPSAwOyBwYWdlIDwgbnVtX3BhZ2VzOyBwYWdlKyspIHsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnR5cGUgIT0gRkNfVFlQRV9GQ1ApCisJCQlyZXR1cm4gKEZDX1BBUlNFX05PVF9GQ1ApOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3BhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX09QQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ucnBhX3ZhbGlkICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQUZMQUdfSU5WQUwpOworCQlpZiAodHBybG8tPnRwcmxvX2FjY19wYXJhbXNbcGFnZV0ub3JpZ19wcm9jZXNzX2Fzc2MgIT0gMCkKKwkJCXJldHVybiAoRkNfUEFSU0VfT1BBX0lOVkFMKTsKKwkJaWYgKHRwcmxvLT50cHJsb19hY2NfcGFyYW1zW3BhZ2VdLnJlc3BfcHJvY2Vzc19hc3NjICE9IDApCisJCQlyZXR1cm4gKEZDX1BBUlNFX1JQQV9JTlZBTCk7CisJfQorCXJldHVybiAoRkNfUEFSU0VfT0spOworfQorCitlbnVtIGZjX3BhcnNlX3N0YXR1cworZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKQoreworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIChmY2hzICsgMSk7CisKKwlsZW4gPSBsZW47CisJaWYgKGVsc19jbWQtPmVsc19jb2RlICE9IEZDX0VMU19BQ0MpCisJCXJldHVybiBGQ19QQVJTRV9GQUlMVVJFOworCisJcmV0dXJuIEZDX1BBUlNFX09LOworfQorCit1MTYKK2ZjX2JhX3JqdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiByZWFzb25fY29kZSwKKwkJCXUzMiByZWFzb25fZXhwbCkKK3sKKwlzdHJ1Y3QgZmNfYmFfcmp0X3MgICAgKmJhX3JqdCA9IChzdHJ1Y3QgZmNfYmFfcmp0X3MgKikgKGZjaHMgKyAxKTsKKworCWZjX2Jsc19yc3BfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJZmNocy0+Y2F0X2luZm8gPSBGQ19DQVRfQkFfUkpUOworCWJhX3JqdC0+cmVhc29uX2NvZGUgPSByZWFzb25fY29kZTsKKwliYV9yanQtPnJlYXNvbl9leHBsID0gcmVhc29uX2V4cGw7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjX2JhX3JqdF9zKSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19jdGhkcl9idWlsZChzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyLCB1MzIgc19pZCwgdTE2IGNtZF9jb2RlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX0RJUlNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX05BTUVTRVJWRVI7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19odG9ucyhjbWRfY29kZSk7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nc19mZG1pX2N0aGRyX2J1aWxkKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIsIHUzMiBzX2lkLCB1MTYgY21kX2NvZGUpCit7CisJYmZhX29zX21lbXNldChjdGhkciwgMCwgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworCWN0aGRyLT5yZXZfaWQgPSBDVF9HUzNfUkVWSVNJT047CisJY3RoZHItPmdzX3R5cGUgPSBDVF9HU1RZUEVfTUdNVFNFUlZJQ0U7CisJY3RoZHItPmdzX3N1Yl90eXBlID0gQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCitzdGF0aWMgdm9pZAorZmNfZ3NfbXNfY3RoZHJfYnVpbGQoc3RydWN0IGN0X2hkcl9zICpjdGhkciwgdTMyIHNfaWQsIHUxNiBjbWRfY29kZSwKKwkJCQkJIHU4IHN1Yl90eXBlKQoreworCWJmYV9vc19tZW1zZXQoY3RoZHIsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKKwljdGhkci0+cmV2X2lkID0gQ1RfR1MzX1JFVklTSU9OOworCWN0aGRyLT5nc190eXBlID0gQ1RfR1NUWVBFX01HTVRTRVJWSUNFOworCWN0aGRyLT5nc19zdWJfdHlwZSA9IHN1Yl90eXBlOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfaHRvbnMoY21kX2NvZGUpOworfQorCit1MTYKK2ZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHd3bl90IHBvcnRfbmFtZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MgKmdpZHBuID0KKwkJCShzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR0lEX1BOKTsKKworCWJmYV9vc19tZW1zZXQoZ2lkcG4sIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19naWRwbl9yZXFfcykpOworCWdpZHBuLT5wb3J0X25hbWUgPSBwb3J0X25hbWU7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkcG5fcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJICAgICAgIHUzMiBwb3J0X2lkKQoreworCisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dwbmlkX3JlcV90ICpncG5pZCA9IChmY2dzX2dwbmlkX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HUE5fSUQpOworCisJYmZhX29zX21lbXNldChncG5pZCwgMCwgc2l6ZW9mKGZjZ3NfZ3BuaWRfcmVxX3QpKTsKKwlncG5pZC0+ZGFwID0gcG9ydF9pZDsKKwlyZXR1cm4gKHNpemVvZihmY2dzX2dwbmlkX3JlcV90KSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1MzIgcG9ydF9pZCkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJZmNnc19nbm5pZF9yZXFfdCAqZ25uaWQgPSAoZmNnc19nbm5pZF9yZXFfdCAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfR05OX0lEKTsKKworCWJmYV9vc19tZW1zZXQoZ25uaWQsIDAsIHNpemVvZihmY2dzX2dubmlkX3JlcV90KSk7CisJZ25uaWQtPmRhcCA9IHBvcnRfaWQ7CisJcmV0dXJuIChzaXplb2YoZmNnc19nbm5pZF9yZXFfdCkgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfY3RfcnNwX3BhcnNlKHN0cnVjdCBjdF9oZHJfcyAqY3RoZHIpCit7CisJaWYgKGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKSAhPSBDVF9SU1BfQUNDRVBUKSB7CisJCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX0xPR0lDQUxfQlVTWSkKKwkJCXJldHVybiBGQ19QQVJTRV9CVVNZOworCQllbHNlCisJCQlyZXR1cm4gRkNfUEFSU0VfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gRkNfUEFSU0VfT0s7Cit9CisKK3UxNgorZmNfc2NyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19zY3JfcyAqc2NyLCB1OCBzZXRfYnJfcmVnLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCkKK3sKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX0ZBQlJJQ19DT05UUk9MTEVSKTsKKworCWZjX2Vsc19yZXFfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCisJYmZhX29zX21lbXNldChzY3IsIDAsIHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKKwlzY3ItPmNvbW1hbmQgPSBGQ19FTFNfU0NSOworCXNjci0+cmVnX2Z1bmMgPSBGQ19TQ1JfUkVHX0ZVTkNfRlVMTDsKKwlpZiAoc2V0X2JyX3JlZykKKwkJc2NyLT52dV9yZWdfZnVuYyA9IEZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0U7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNfc2NyX3MpKTsKK30KKwordTE2CitmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkKQoreworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfRkFCUklDX0NPTlRST0xMRVIpOworCXUxNiAgICAgICAgcGF5bGRsZW47CisKKwlmY19lbHNfcmVxX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIG94X2lkKTsKKwlyc2NuLT5jb21tYW5kID0gRkNfRUxTX1JTQ047CisJcnNjbi0+cGFnZWxlbiA9IHNpemVvZihyc2NuLT5ldmVudFswXSk7CisKKwlwYXlsZGxlbiA9IHNpemVvZih1MzIpICsgcnNjbi0+cGFnZWxlbjsKKwlyc2NuLT5wYXlsZGxlbiA9IGJmYV9vc19odG9ucyhwYXlsZGxlbik7CisKKwlyc2NuLT5ldmVudFswXS5mb3JtYXQgPSBGQ19SU0NOX0ZPUk1BVF9QT1JUSUQ7CisJcnNjbi0+ZXZlbnRbMF0ucG9ydGlkID0gc19pZDsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY19yc2NuX3BsX3MpKTsKK30KKwordTE2CitmY19yZnRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgdHlwZV92YWx1ZSwgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCXU4ICAgICAgICAgaW5kZXg7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JGVF9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJmdGlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpKTsKKworCXJmdGlkLT5kYXAgPSBzX2lkOworCisJLyogQnkgZGVmYXVsdCwgRkNQIEZDNCBUeXBlIGlzIHJlZ2lzdGVyZWQgKi8KKwlpbmRleCA9IEZDX1RZUEVfRkNQID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKEZDX1RZUEVfRkNQICUgMzIpOworCXJmdGlkLT5mYzRfdHlwZVtpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKKwlpZiAocm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKSB7CisJCWluZGV4ID0gRkNfVFlQRV9JUCA+PiA1OworCQl0eXBlX3ZhbHVlID0gMSA8PCAoRkNfVFlQRV9JUCAlIDMyKTsKKwkJcmZ0aWQtPmZjNF90eXBlW2luZGV4XSB8PSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisJfQorCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19yZnRpZF9yZXFfcyAqcmZ0aWQgPQorCQkJKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRlRfSUQpOworCisJYmZhX29zX21lbXNldChyZnRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSk7CisKKwlyZnRpZC0+ZGFwID0gc19pZDsKKwliZmFfb3NfbWVtY3B5KCh2b2lkICopcmZ0aWQtPmZjNF90eXBlLCAodm9pZCAqKWZjNF9iaXRtYXAsCisJCQkoYml0bWFwX3NpemUgPCAzMiA/IGJpdG1hcF9zaXplIDogMzIpKTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmdGlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yZmZpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCSAgICAgICB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zICpyZmZpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmZmaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgb3hfaWQpOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SRkZfSUQpOworCisJYmZhX29zX21lbXNldChyZmZpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSk7CisKKwlyZmZpZC0+ZGFwIAkJIAk9IHNfaWQ7CisJcmZmaWQtPmZjNGZ0cl9iaXRzICA9IGZjNF9mdHJzOworCXJmZmlkLT5mYzRfdHlwZQkJPSBmYzRfdHlwZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JmZmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19yc3BuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJdTggKm5hbWUpCit7CisKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JzcG5pZF9yZXFfcyAqcnNwbmlkID0KKwkJCShzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCBveF9pZCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JTUE5fSUQpOworCisJYmZhX29zX21lbXNldChyc3BuaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yc3BuaWRfcmVxX3MpKTsKKworCXJzcG5pZC0+ZGFwID0gc19pZDsKKwlyc3BuaWQtPnNwbl9sZW4gPSAodTgpIHN0cmxlbigoY2hhciAqKW5hbWUpOworCXN0cm5jcHkoKGNoYXIgKilyc3BuaWQtPnNwbiwgKGNoYXIgKiluYW1lLCByc3BuaWQtPnNwbl9sZW4pOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcnNwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19naWRfZnRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1OCBmYzRfdHlwZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MgKmdpZGZ0ID0KKwkJCShzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0dJRF9GVCk7CisKKwliZmFfb3NfbWVtc2V0KGdpZGZ0LCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfZ2lkZnRfcmVxX3MpKTsKKwlnaWRmdC0+ZmM0X3R5cGUgPSBmYzRfdHlwZTsKKwlnaWRmdC0+ZG9tYWluX2lkID0gMDsKKwlnaWRmdC0+YXJlYV9pZCA9IDA7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19naWRmdF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfcnBuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkLAorCSAgICAgICB3d25fdCBwb3J0X25hbWUpCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfcyAqcnBuaWQgPQorCQkJKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX1JQTl9JRCk7CisKKwliZmFfb3NfbWVtc2V0KHJwbmlkLCAwLCBzaXplb2Yoc3RydWN0IGZjZ3NfcnBuaWRfcmVxX3MpKTsKKwlycG5pZC0+cG9ydF9pZCA9IHBvcnRfaWQ7CisJcnBuaWQtPnBvcnRfbmFtZSA9IHBvcnRfbmFtZTsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBmY2dzX3JwbmlkX3JlcV9zKSArIHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKwordTE2CitmY19ybm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwgdTMyIHBvcnRfaWQsCisJICAgICAgIHd3bl90IG5vZGVfbmFtZSkKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3JubmlkX3JlcV9zICpybm5pZCA9CisJCQkoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUk5OX0lEKTsKKworCWJmYV9vc19tZW1zZXQocm5uaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfcykpOworCXJubmlkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlybm5pZC0+bm9kZV9uYW1lID0gbm9kZV9uYW1lOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3Nfcm5uaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3Jjc2lkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTMyIGNvcykKK3sKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBweWxkOworCXN0cnVjdCBmY2dzX3Jjc2lkX3JlcV9zICpyY3NpZCA9CisJCQkoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MgKikgKGN0aGRyICsgMSk7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19OQU1FX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19jdGhkcl9idWlsZChjdGhkciwgc19pZCwgR1NfUkNTX0lEKTsKKworCWJmYV9vc19tZW1zZXQocmNzaWQsIDAsIHNpemVvZihzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfcykpOworCXJjc2lkLT5wb3J0X2lkID0gcG9ydF9pZDsKKwlyY3NpZC0+Y29zID0gY29zOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGZjZ3NfcmNzaWRfcmVxX3MpICsgc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykpOworfQorCit1MTYKK2ZjX3JwdGlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB1MzIgcG9ydF9pZCwKKwkgICAgICAgdTggcG9ydF90eXBlKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfcnB0aWRfcmVxX3MgKnJwdGlkID0KKwkJCShzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19SUFRfSUQpOworCisJYmZhX29zX21lbXNldChycHRpZCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX3JwdGlkX3JlcV9zKSk7CisJcnB0aWQtPnBvcnRfaWQgPSBwb3J0X2lkOworCXJwdGlkLT5wb3J0X3R5cGUgPSBwb3J0X3R5cGU7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfcykgKyBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKK3UxNgorZmNfZ2FueHRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsIHUzMiBwb3J0X2lkKQoreworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJc3RydWN0IGZjZ3NfZ2FueHRfcmVxX3MgKmdhbnh0ID0KKwkJCShzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcyAqKSAoY3RoZHIgKyAxKTsKKwl1MzIgICAgICAgIGRfaWQgPSBiZmFfb3NfaHRvbjNiKEZDX05BTUVfU0VSVkVSKTsKKworCWZjX2dzX2ZjaGRyX2J1aWxkKGZjaHMsIGRfaWQsIHNfaWQsIDApOworCWZjX2dzX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBHU19HQV9OWFQpOworCisJYmZhX29zX21lbXNldChnYW54dCwgMCwgc2l6ZW9mKHN0cnVjdCBmY2dzX2dhbnh0X3JlcV9zKSk7CisJZ2FueHQtPnBvcnRfaWQgPSBwb3J0X2lkOworCisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSArIHNpemVvZihzdHJ1Y3QgZmNnc19nYW54dF9yZXFfcykpOworfQorCisvKgorICogQnVpbGRzIGZjIGhkciBhbmQgY3QgaGRyIGZvciBGRE1JIHJlcXVlc3RzLgorICovCit1MTYKK2ZjX2ZkbWlfcmVxaGRyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkgICAgIHUxNiBjbWRfY29kZSkKK3sKKworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIHB5bGQ7CisJdTMyICAgICAgICBkX2lkID0gYmZhX29zX2h0b24zYihGQ19NR01UX1NFUlZFUik7CisKKwlmY19nc19mY2hkcl9idWlsZChmY2hzLCBkX2lkLCBzX2lkLCAwKTsKKwlmY19nc19mZG1pX2N0aGRyX2J1aWxkKGN0aGRyLCBzX2lkLCBjbWRfY29kZSk7CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpKTsKK30KKworLyoKKyAqIEdpdmVuIGEgRkM0IFR5cGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGZjNCB0eXBlIGJpdG1hc2sKKyAqLwordm9pZAorZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKQoreworCXU4ICAgICAgICAgaW5kZXg7CisJdTMyICAgICAgICpwdHIgPSAodTMyICopIGJpdF9tYXNrOworCXUzMiAgICAgICAgdHlwZV92YWx1ZTsKKworCS8qCisJICogQHRvZG8gOiBDaGVjayBmb3IgYml0bWFzayBzaXplCisJICovCisKKwlpbmRleCA9IGZjNF90eXBlID4+IDU7CisJdHlwZV92YWx1ZSA9IDEgPDwgKGZjNF90eXBlICUgMzIpOworCXB0cltpbmRleF0gPSBiZmFfb3NfaHRvbmwodHlwZV92YWx1ZSk7CisKK30KKworLyoKKyAqIEdNQUwgUmVxdWVzdAorICovCit1MTYKK2ZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dtYWxfcmVxX3QgKmdtYWwgPSAoZmNnc19nbWFsX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dNQUxfQ01ELAorCQkJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUik7CisKKwliZmFfb3NfbWVtc2V0KGdtYWwsIDAsIHNpemVvZihmY2dzX2dtYWxfcmVxX3QpKTsKKwlnbWFsLT53d24gPSB3d247CisKKwlyZXR1cm4gKHNpemVvZihzdHJ1Y3QgY3RfaGRyX3MpICsgc2l6ZW9mKGZjZ3NfZ21hbF9yZXFfdCkpOworfQorCisvKgorICogR0ZOIChHZXQgRmFicmljIE5hbWUpIFJlcXVlc3QKKyAqLwordTE2CitmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLCB3d25fdCB3d24pCit7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZDsKKwlmY2dzX2dmbl9yZXFfdCAqZ2ZuID0gKGZjZ3NfZ2ZuX3JlcV90ICopIChjdGhkciArIDEpOworCXUzMiAgICAgICAgZF9pZCA9IGJmYV9vc19odG9uM2IoRkNfTUdNVF9TRVJWRVIpOworCisJZmNfZ3NfZmNoZHJfYnVpbGQoZmNocywgZF9pZCwgc19pZCwgMCk7CisJZmNfZ3NfbXNfY3RoZHJfYnVpbGQoY3RoZHIsIHNfaWQsIEdTX0ZDX0dGTl9DTUQsCisJCQlDVF9HU1NVQlRZUEVfQ0ZHU0VSVkVSKTsKKworCWJmYV9vc19tZW1zZXQoZ2ZuLCAwLCBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKKwlnZm4tPnd3biA9IHd3bjsKKworCXJldHVybiAoc2l6ZW9mKHN0cnVjdCBjdF9oZHJfcykgKyBzaXplb2YoZmNnc19nZm5fcmVxX3QpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY2J1aWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQyNDg0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNidWlsZC5oCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKgorICogZmNidWlsZC5oIC0gRkMgbGluayBzZXJ2aWNlIGZyYW1lIGJ1aWxkaW5nIGFuZCBwYXJzaW5nIHJvdXRpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDQlVJTERfSF9fCisjZGVmaW5lIF9fRkNCVUlMRF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjcC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2N0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisvKgorICogVXRpbGl0eSBNYWNyb3MvZnVuY3Rpb25zCisgKi8KKworI2RlZmluZSBmY2lmX3NvZl9zZXQoX2lmaGRyLCBfc29mKQkoX2lmaGRyKS0+c29mID0gRkNfICMjIF9zb2YKKyNkZWZpbmUgZmNpZl9lb2Zfc2V0KF9pZmhkciwgX2VvZikJKF9pZmhkciktPmVvZiA9IEZDXyAjIyBfZW9mCisKKyNkZWZpbmUgd3duX2lzX2VxdWFsKF93d24xLCBfd3duMikJCVwKKwkobWVtY21wKCYoX3d3bjEpLCAmKF93d24yKSwgc2l6ZW9mKHd3bl90KSkgPT0gMCkKKworI2RlZmluZSBmY19yb3VuZHVwKF9sLCBfcykgKCgoX2wpICsgKChfcykgLSAxKSkgJiB+KChfcykgLSAxKSkKKworLyoKKyAqIEdpdmVuIHRoZSBmYyByZXNwb25zZSBsZW5ndGgsIHRoaXMgcm91dGluZSB3aWxsIHJldHVybgorICogdGhlIGxlbmd0aCBvZiB0aGUgYWN0dWFsIHBheWxvYWQgYnl0ZXMgZm9sbG93aW5nIHRoZSBDVCBoZWFkZXIuCisgKgorICogQXNzdW1lcyB0aGUgaW5wdXQgcmVzcG9uc2UgbGVuZ3RoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGNyYywgZW9mLCBldGMuCisgKi8KK3N0YXRpYyBpbmxpbmUgICB1MzIKK2ZjX2dldF9jdHJlc3BfcHlsZF9sZW4odTMyIHJlc3BfbGVuKQoreworCXJldHVybiAocmVzcF9sZW4gLSBzaXplb2Yoc3RydWN0IGN0X2hkcl9zKSk7Cit9CisKKy8qCisgKiBDb252ZXJ0IGJmYSBzcGVlZCB0byBycHNjIHNwZWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGVudW0gYmZhX3Bwb3J0X3NwZWVkCitmY19ycHNjX29wZXJzcGVlZF90b19iZmFfc3BlZWQoZW51bSBmY19ycHNjX29wX3NwZWVkX3Mgc3BlZWQpCit7CisJc3dpdGNoIChzcGVlZCkgeworCisJY2FzZSBSUFNDX09QX1NQRUVEXzFHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzFHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzJHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzJHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzRHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzRHQlBTOworCisJY2FzZSBSUFNDX09QX1NQRUVEXzhHOgorCQlyZXR1cm4gQkZBX1BQT1JUX1NQRUVEXzhHQlBTOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOOworCX0KK30KKworLyoKKyAqIENvbnZlcnQgUlBTQyBzcGVlZCB0byBiZmEgc3BlZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgICBlbnVtIGZjX3Jwc2Nfb3Bfc3BlZWRfcworZmNfYmZhX3NwZWVkX3RvX3Jwc2Nfb3BlcnNwZWVkKGVudW0gYmZhX3Bwb3J0X3NwZWVkIG9wX3NwZWVkKQoreworCXN3aXRjaCAob3Bfc3BlZWQpIHsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzFHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8xRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzJHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF8yRzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzRHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF80RzsKKworCWNhc2UgQkZBX1BQT1JUX1NQRUVEXzhHQlBTOgorCQlyZXR1cm4gUlBTQ19PUF9TUEVFRF84RzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBSUFNDX09QX1NQRUVEX05PVF9FU1Q7CisJfQorfQorZW51bSBmY19wYXJzZV9zdGF0dXMgeworCUZDX1BBUlNFX09LID0gMCwKKwlGQ19QQVJTRV9GQUlMVVJFID0gMSwKKwlGQ19QQVJTRV9CVVNZID0gMiwKKwlGQ19QQVJTRV9MRU5fSU5WQUwsCisJRkNfUEFSU0VfQUNDX0lOVkFMLAorCUZDX1BBUlNFX1BXV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX05XV05fTk9UX0VRVUFMLAorCUZDX1BBUlNFX1JYU1pfSU5WQUwsCisJRkNfUEFSU0VfTk9UX0ZDUCwKKwlGQ19QQVJTRV9PUEFGTEFHX0lOVkFMLAorCUZDX1BBUlNFX1JQQUZMQUdfSU5WQUwsCisJRkNfUEFSU0VfT1BBX0lOVkFMLAorCUZDX1BBUlNFX1JQQV9JTlZBTCwKKworfTsKKworc3RydWN0IGZjX3RlbXBsYXRlc19zIHsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjX2Vsc19yZXE7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY19ibHNfcmVxOworCXN0cnVjdCBmY19sb2dpX3MgICAgICBwbG9naTsKKwlzdHJ1Y3QgZmNfcnJxX3MgICAgICAgIHJycTsKK307CisKK3ZvaWQgZmNidWlsZF9pbml0KHZvaWQpOworCit1MTYgZmNfZmxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSwgdTggc2V0X25waXYsCisJCQl1OCBzZXRfYXV0aCwgdTE2IGxvY2FsX2JiX2NyZWRpdHMpOwordTE2IGZjX2ZkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmJ1Ziwgc3RydWN0IGZjX2xvZ2lfcyAqZmxvZ2ksCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsCisJCQl3d25fdCBub2RlX25hbWUsIHUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfZmxvZ2lfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sb2dpX3MgKmZsb2dpLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCwgd3duX3QgcG9ydF9uYW1lLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB1MTYgcGR1X3NpemUsCisJCQl1MTYgbG9jYWxfYmJfY3JlZGl0cyk7Cit1MTYgZmNfcGxvZ2lfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsIHd3bl90IHBvcnRfbmFtZSwKKwkJCXd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMpOwordTE2IGZjX2FidHNfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWJ0c19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqYnVmLCBpbnQgbGVuKTsKK3UxNiBmY19ycnFfYnVpbGQoc3RydWN0IGZjaHNfcyAqYnVmLCBzdHJ1Y3QgZmNfcnJxX3MgKnJycSwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLCB1MTYgcnJxX294aWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcnJxX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpidWYsIGludCBsZW4pOwordTE2IGZjX3JzcG5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCAqbmFtZSk7Cit1MTYgZmNfcmZ0aWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JmdGlkX2J1aWxkX3NvbChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTggKmZjNF9iaXRtYXAsCisJCQl1MzIgYml0bWFwX3NpemUpOwordTE2IGZjX3JmZmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB1OCBmYzRfdHlwZSwgdTggZmM0X2Z0cnMpOwordTE2IGZjX2dpZHBuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUpOwordTE2IGZjX2dwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIHUzMiBwb3J0X2lkKTsKK3UxNiBmY19zY3JfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Njcl9zICpzY3IsCisJCQl1OCBzZXRfYnJfcmVnLCB1MzIgc19pZCwgdTE2IG94X2lkKTsKK3UxNiBmY19wbG9naV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLCB1MzIgZF9pZCwKKwkJCXUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwgdTE2IHBkdV9zaXplKTsKKwordTE2IGZjX2FkaXNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19hZGlzY19zICphZGlzYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lLCB3d25fdCBub2RlX25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcGxkLAorCQkJdTMyIGhvc3RfZGFwLAorCQkJd3duX3Qgbm9kZV9uYW1lLCB3d25fdCBwb3J0X25hbWUpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfYWRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY19hZGlzY19zICphZGlzYywgaW50IGxlbiwKKwkJCXd3bl90IHBvcnRfbmFtZSwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19hZGlzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2FkaXNjX3MgKmFkaXNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSk7Cit1MTYgZmNfbHNfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19sc19yanRfcyAqbHNfcmp0LAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCk7Cit1MTYgZmNfbHNfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19lbHNfY21kX3MgKmVsc19jbWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcHJsaV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3JzcF9wYXJzZShzdHJ1Y3QgZmNfcHJsaV9zICpwcmxpLCBpbnQgbGVuKTsKKwordTE2IGZjX3BybGlfYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnBsZCwgdTMyIGRfaWQsCisJCQl1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUpOwordTE2IGZjX3JuaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfY21kX3MgKnJuaWQsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUzMiBkYXRhX2Zvcm1hdCk7Cit1MTYgZmNfcm5pZF9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3JuaWRfYWNjX3MgKnJuaWRfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQl1MzIgZGF0YV9mb3JtYXQsCisJCQlzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zICpjb21tb25faWRfZGF0YSwKKwkJCXN0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zICoKKwkJCWdlbl90b3BvX2RhdGEpOwordTE2IGZjX3Jwc2MyX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19ycHNjMl9jbWRfcyAqcnBzMmMsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MzIgKnBpZF9saXN0LCB1MTYgbnBpZHMpOwordTE2IGZjX3Jwc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfY21kX3MgKnJwc2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfcnBzY19hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX3Jwc2NfYWNjX3MgKnJwc2NfYWNjLAorCQkJdTMyIGRfaWQsIHUzMiBzX2lkLCB1MTYgb3hfaWQsCisJCQlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3MgKm9wZXJfc3BlZWQpOwordTE2IGZjX2dpZF9mdF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBzX2lkLAorCQkJdTggZmM0X3R5cGUpOwordTE2IGZjX3JwbmlkX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQsIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcm5uaWRfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MzIgcG9ydF9pZCwgd3duX3Qgbm9kZV9uYW1lKTsKK3UxNiBmY19yY3NpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1MzIgY29zKTsKK3UxNiBmY19ycHRpZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUzMiBwb3J0X2lkLCB1OCBwb3J0X3R5cGUpOwordTE2IGZjX2dhbnh0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJdTMyIHBvcnRfaWQpOwordTE2IGZjX2xvZ29fYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2xvZ29fcyAqbG9nbywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19sb2dvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpwbGQsIHUzMiBkX2lkLAorCQkJdTMyIHNfaWQsIHUxNiBveF9pZCk7Cit1MTYgZmNfZmRtaV9yZXFoZHJfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdm9pZCAqcHlsZCwgdTMyIHNfaWQsCisJCQl1MTYgY21kX2NvZGUpOwordTE2IGZjX2dtYWxfcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3UxNiBmY19nZm5fcmVxX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHZvaWQgKnB5bGQsIHUzMiBzX2lkLAorCQkJd3duX3Qgd3duKTsKK3ZvaWQgZmNfZ2V0X2ZjNHR5cGVfYml0bWFzayh1OCBmYzRfdHlwZSwgdTggKmJpdF9tYXNrKTsKK3ZvaWQgZmNfZWxzX3JlcV9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfZWxzX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuKTsKK2VudW0gZmNfcGFyc2Vfc3RhdHVzIGZjX3Bsb2dpX3JzcF9wYXJzZShzdHJ1Y3QgZmNoc19zICpmY2hzLCBpbnQgbGVuLAorCQkJIHd3bl90IHBvcnRfbmFtZSk7CitlbnVtIGZjX3BhcnNlX3N0YXR1cyBmY19wcmxpX3BhcnNlKHN0cnVjdCBmY19wcmxpX3MgKnBybGkpOworZW51bSBmY19wYXJzZV9zdGF0dXMgZmNfcGRpc2NfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgd3duX3Qgbm9kZV9uYW1lLAorCQkJd3duX3QgcG9ydF9uYW1lKTsKK3UxNiBmY19iYV9hY2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgc3RydWN0IGZjX2JhX2FjY19zICpiYV9hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCXUxNiByeF9pZCk7CitpbnQgZmNfbG9nb3V0X3BhcmFtc19wYWdlcyhzdHJ1Y3QgZmNoc19zICpmY19mcmFtZSwgdTggZWxzX2NvZGUpOwordTE2IGZjX3RwcmxvX2FjY19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJc3RydWN0IGZjX3RwcmxvX2FjY19zICp0cHJsb19hY2MsCisJCQl1MzIgZF9pZCwgdTMyIHNfaWQsIHUxNiBveF9pZCwKKwkJCWludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fYWNjX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19wcmxvX2FjY19zICpwcmxvX2FjYywKKwkJCXUzMiBkX2lkLCB1MzIgc19pZCwgdTE2IG94X2lkLAorCQkJaW50IG51bV9wYWdlcyk7Cit1MTYgZmNfbG9nb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfcGRpc2NfYnVpbGQoc3RydWN0IGZjaHNfcyAqZmNocywgdTMyIGRfaWQsIHUzMiBzX2lkLAorCQkJdTE2IG94X2lkLCB3d25fdCBwb3J0X25hbWUsIHd3bl90IG5vZGVfbmFtZSwKKwkJCXUxNiBwZHVfc2l6ZSk7Cit1MTYgZmNfcGRpc2NfcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4sIHd3bl90IHBvcnRfbmFtZSk7Cit1MTYgZmNfcHJsb19idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MzIgZF9pZCwgdTMyIHNfaWQsCisJCQl1MTYgb3hfaWQsIGludCBudW1fcGFnZXMpOwordTE2IGZjX3BybG9fcnNwX3BhcnNlKHN0cnVjdCBmY2hzX3MgKmZjaHMsIGludCBsZW4pOwordTE2IGZjX3RwcmxvX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgaW50IG51bV9wYWdlcywKKwkJCWVudW0gZmNfdHBybG9fdHlwZSB0cHJsb190eXBlLCB1MzIgdHByX2lkKTsKK3UxNiBmY190cHJsb19yc3BfcGFyc2Uoc3RydWN0IGZjaHNfcyAqZmNocywgaW50IGxlbik7Cit1MTYgZmNfYmFfcmp0X2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUzMiBkX2lkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHJlYXNvbl9jb2RlLAorCQkJdTMyIHJlYXNvbl9leHBsKTsKK3UxNiBmY19nbm5pZF9idWlsZChzdHJ1Y3QgZmNoc19zICpmY2hzLCB2b2lkICpweWxkLCB1MzIgc19pZCwKKwkJCXUxNiBveF9pZCwgdTMyIHBvcnRfaWQpOwordTE2IGZjX2N0X3JzcF9wYXJzZShzdHJ1Y3QgY3RfaGRyX3MgKmN0aGRyKTsKK3UxNiBmY19yc2NuX2J1aWxkKHN0cnVjdCBmY2hzX3MgKmZjaHMsIHN0cnVjdCBmY19yc2NuX3BsX3MgKnJzY24sCisJCQl1MzIgc19pZCwgdTE2IG94X2lkKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZTVkODkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3BpbS5jCkBAIC0wLDAgKzEsODQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjcGltLmMgLSBGQ1AgaW5pdGlhdG9yIG1vZGUgaS10IG5leHVzIHN0YXRlIG1hY2hpbmUKKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZjcGltLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfZmNwaW0uaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbl9pdG5pbS5oPgorCitCRkFfVFJDX0ZJTEUoRkNTLCBGQ1BJTSk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9mcmVlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NlbmRfcHJsaSh2b2lkICppdG5pbV9jYmFyZywKKwkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgIHUzMiByc3BfbGVuLAorCQkJCQkgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpOworCisvKioKKyAqICBmY3NfaXRuaW1fc20gRkNTIGl0bmltIHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IHsKKwlCRkFfRkNTX0lUTklNX1NNX09OTElORSA9IDEsCS8qICBycG9ydCBvbmxpbmUgZXZlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX09GRkxJTkUgPSAyLAkvKiAgcnBvcnQgb2ZmbGluZSAqLworCUJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCA9IDMsCS8qICBwcmxpIGZyYW1lIGlzIHNlbnQgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyA9IDQsCS8qICBnb29kIHJlc3BvbnNlICovCisJQkZBX0ZDU19JVE5JTV9TTV9SU1BfRVJST1IgPSA1LAkvKiAgZXJyb3IgcmVzcG9uc2UgKi8KKwlCRkFfRkNTX0lUTklNX1NNX1RJTUVPVVQgPSA2LAkvKiAgZGVsYXkgdGltZW91dCAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkUgPSA3LAkvKiAgQkZBIG9ubGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORSA9IDgsCS8qICBCRkEgb2ZmbGluZSBjYWxsYmFjayAqLworCUJGQV9GQ1NfSVROSU1fU01fSU5JVElBVE9SID0gOSwJLyogIHJwb3J0IGlzIGluaXRpYXRvciAqLworCUJGQV9GQ1NfSVROSU1fU01fREVMRVRFID0gMTAsCS8qICBkZWxldGUgZXZlbnQgZnJvbSBycG9ydCAqLworCUJGQV9GQ1NfSVROSU1fU01fUFJMTyA9IDExLAkvKiAgZGVsZXRlIGV2ZW50IGZyb20gcnBvcnQgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkgICAgICBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCQkJZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJCQkgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgaXRuaW1fc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSksIEJGQV9JVE5JTV9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKSwgQkZBX0lUTklNX1BSTElfU0VORH0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX3BybGkpLCBCRkFfSVROSU1fUFJMSV9TRU5UfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fcHJsaV9yZXRyeSksIEJGQV9JVE5JTV9QUkxJX1JFVFJZfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faGNiX29ubGluZSksIEJGQV9JVE5JTV9IQ0JfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21fb25saW5lKSwgQkZBX0lUTklNX09OTElORX0sCisJe0JGQV9TTShiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKSwgQkZBX0lUTklNX0hDQl9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKSwgQkZBX0lUTklNX0lOSVRJQVRJT1J9LAorfTsKKworLyoqCisgKiAgZmNzX2l0bmltX3NtIEZDUyBpdG5pbSBzdGF0ZSBtYWNoaW5lCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSBlbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaV9zZW5kKTsKKwkJYmZhX2Zjc19pdG5pbV9zZW5kX3BybGkoaXRuaW0sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfc2VuZChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0ZSTVNFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fcHJsaSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9pbml0aWF0b3IpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoaXRuaW0tPmZjcy0+YmZhLCAmaXRuaW0tPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgIGVudW0gYmZhX2Zjc19pdG5pbV9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb25saW5lKTsKKwkJYmZhX2l0bmltX29ubGluZShpdG5pbS0+YmZhX2l0bmltLCBpdG5pbS0+c2VxX3JlYyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUjoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KGl0bmltLT5mY3MtPmJmYSwgJml0bmltLT50aW1lciwKKwkJCQliZmFfZmNzX2l0bmltX3RpbWVvdXQsIGl0bmltLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQoaXRuaW0tPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJLyoKKwkJICogZG9udCBkaXNjYXJkIGZjeHAuIGFjY2VwdCB3aWxsIHJlYWNoIHNhbWUgc3RhdGUKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChpdG5pbS0+ZmN4cCk7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX3BybGlfcmV0cnkoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9wcmxpX3NlbmQpOworCQliZmFfZmNzX2l0bmltX3NlbmRfcHJsaShpdG5pbSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZpdG5pbS0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2l0bmltX2FjayhpdG5pbS0+cnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1I6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJml0bmltLT50aW1lcik7CisJCWJmYV9mY3NfaXRuaW1fZnJlZShpdG5pbSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3NtX2hjYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQkgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09OTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUpOworCQliZmFfZmNiX2l0bmltX29ubGluZShpdG5pbS0+aXRuaW1fZHJ2KTsKKwkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9PTkxJTkUpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCQllbnVtIGJmYV9mY3NfaXRuaW1fZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV90cmMoaXRuaW0tPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX2ZjYl9pdG5pbV9vZmZsaW5lKGl0bmltLT5pdG5pbV9kcnYpOworCQliZmFfaXRuaW1fb2ZmbGluZShpdG5pbS0+YmZhX2l0bmltKTsKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUoaXRuaW0tPnJwb3J0LT5wb3J0KSA9PSBCRkFfVFJVRSkgeworCQkJYmZhX2Zjc19pdG5pbV9hZW5fcG9zdChpdG5pbSwgQkZBX0lUTklNX0FFTl9ESVNDT05ORUNUKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9mY3NfaXRuaW1fYWVuX3Bvc3QoaXRuaW0sIEJGQV9JVE5JTV9BRU5fT0ZGTElORSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV9zbV9oY2Jfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCSAgICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fSENCX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKGl0bmltLT5ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19pdG5pbV9mcmVlKGl0bmltKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyAqIFRoaXMgc3RhdGUgaXMgc2V0IHdoZW4gYSBkaXNjb3ZlcmVkIHJwb3J0IGlzIGFsc28gaW4gaW50aWF0b3IgbW9kZS4KKyAqIFRoaXMgSVROIGlzIG1hcmtlZCBhcyBub19vcCBhbmQgaXMgbm90IGFjdGl2ZSBhbmQgd2lsbCBub3QgYmUgdHJ1bmVkIGludG8KKyAqIG9ubGluZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc21faW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJICAgZW51bSBiZmFfZmNzX2l0bmltX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShpdG5pbSwgYmZhX2Zjc19pdG5pbV9zbV9vZmZsaW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soaXRuaW0tPnJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fUlNQX0VSUk9SOgorCWNhc2UgQkZBX0ZDU19JVE5JTV9TTV9PTkxJTkU6CisJY2FzZSBCRkFfRkNTX0lUTklNX1NNX0lOSVRJQVRPUjoKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfSVROSU1fU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKGl0bmltLCBiZmFfZmNzX2l0bmltX3NtX29mZmxpbmUpOworCQliZmFfZmNzX2l0bmltX2ZyZWUoaXRuaW0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgaXRuaW1fcHJpdmF0ZSBGQ1MgSVROSU0gcHJpdmF0ZSBpbnRlcmZhY2VzCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fYWVuX3Bvc3Qoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sCisJCSAgICAgICBlbnVtIGJmYV9pdG5pbV9hZW5fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgYWVuX2RhdGE7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCA9IHJwb3J0LT5mY3MtPmxvZ207CisJd3duX3QgICAgICAgICAgIGxwd3duID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHJwb3J0LT5wb3J0KTsKKwl3d25fdCAgICAgICAgICAgcnB3d24gPSBycG9ydC0+cHd3bjsKKwljaGFyICAgICAgICAgICAgbHB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICBycHd3bl9wdHJbQkZBX1NUUklOR18zMl07CisKKwkvKgorCSAqIERvbid0IHBvc3QgZXZlbnRzIGZvciB3ZWxsIGtub3duIGFkZHJlc3NlcworCSAqLworCWlmIChCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCXJldHVybjsKKworCXd3bjJzdHIobHB3d25fcHRyLCBscHd3bik7CisJd3duMnN0cihycHd3bl9wdHIsIHJwd3duKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9JVE5JTV9BRU5fT05MSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9JVE5JTV9PTkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX09GRkxJTkU6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX09GRkxJTkUsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1Q6CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QsIHJwd3duX3B0ciwgbHB3d25fcHRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWVuX2RhdGEuaXRuaW0udmZfaWQgPSBycG9ydC0+cG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5pdG5pbS5wcHd3biA9CisJCWJmYV9mY3NfcG9ydF9nZXRfcHd3bihiZmFfZmNzX2dldF9iYXNlX3BvcnQoaXRuaW0tPmZjcykpOworCWFlbl9kYXRhLml0bmltLmxwd3duID0gbHB3d247CisJYWVuX2RhdGEuaXRuaW0ucnB3d24gPSBycHd3bjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fc2VuZF9wcmxpKHZvaWQgKml0bmltX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gaXRuaW1fY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBpdG5pbS0+cnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCWludCAgICAgICAgICAgICBsZW47CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWl0bmltLT5zdGF0cy5mY3hwX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJml0bmltLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19pdG5pbV9zZW5kX3BybGksIGl0bmltKTsKKwkJcmV0dXJuOworCX0KKwlpdG5pbS0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wcmxpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBpdG5pbS0+cnBvcnQtPnBpZCwKKwkJCSAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDApOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBycG9ydC0+YmZhX3Jwb3J0LCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsCisJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19pdG5pbV9wcmxpX3Jlc3BvbnNlLCAodm9pZCAqKWl0bmltLCBGQ19NQVhfUERVU1osCisJCSAgICAgIEZDX1JBX1RPVik7CisKKwlpdG5pbS0+c3RhdHMucHJsaV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fRlJNU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX2l0bmltX3BybGlfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYmFyZzsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX3BybGlfcyAgICAgICpwcmxpX3Jlc3A7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3MgKnNwYXJhbXM7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCXBybGlfcmVzcCA9IChzdHJ1Y3QgZmNfcHJsaV9zICopIGVsc19jbWQ7CisKKwkJaWYgKGZjX3BybGlfcnNwX3BhcnNlKHBybGlfcmVzcCwgcnNwX2xlbikgIT0gRkNfUEFSU0VfT0spIHsKKwkJCWJmYV90cmMoaXRuaW0tPmZjcywgcnNwX2xlbik7CisJCQkvKgorCQkJICogQ2hlY2sgaWYgdGhpcyAgci1wb3J0IGlzIGFsc28gaW4gSW5pdGlhdG9yIG1vZGUuCisJCQkgKiBJZiBzbywgd2UgbmVlZCB0byBzZXQgdGhpcyBJVE4gYXMgYSBuby1vcC4KKwkJCSAqLworCQkJaWYgKHBybGlfcmVzcC0+cGFyYW1wYWdlLnNlcnZwYXJhbXMuaW5pdGlhdG9yKSB7CisJCQkJYmZhX3RyYyhpdG5pbS0+ZmNzLCBwcmxpX3Jlc3AtPnBhcmFtcGFnZS50eXBlKTsKKwkJCQlpdG5pbS0+cnBvcnQtPnNjc2lfZnVuY3Rpb24gPQorCQkJCQlCRkFfUlBPUlRfSU5JVElBVE9SOworCQkJCWl0bmltLT5zdGF0cy5wcmxpX3JzcF9hY2MrKzsKKwkJCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwKKwkJCQkJCSAgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaXRuaW0tPnN0YXRzLnBybGlfcnNwX3BhcnNlX2VycisrOworCQkJcmV0dXJuOworCQl9CisJCWl0bmltLT5ycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9UQVJHRVQ7CisKKwkJc3BhcmFtcyA9ICZwcmxpX3Jlc3AtPnBhcmFtcGFnZS5zZXJ2cGFyYW1zOworCQlpdG5pbS0+c2VxX3JlYyA9IHNwYXJhbXMtPnJldHJ5OworCQlpdG5pbS0+cmVjX3N1cHBvcnQgPSBzcGFyYW1zLT5yZWNfc3VwcG9ydDsKKwkJaXRuaW0tPnRhc2tfcmV0cnlfaWQgPSBzcGFyYW1zLT50YXNrX3JldHJ5X2lkOworCQlpdG5pbS0+Y29uZl9jb21wID0gc3BhcmFtcy0+Y29uZmlybTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3BfYWNjKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9PSyk7CisJfSBlbHNlIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMoaXRuaW0tPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlpdG5pbS0+c3RhdHMucHJsaV9yc3Bfcmp0Kys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1JTUF9FUlJPUik7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19pdG5pbV90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopYXJnOworCisJaXRuaW0tPnN0YXRzLnRpbWVvdXQrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfaXRuaW1fZGVsZXRlKGl0bmltLT5iZmFfaXRuaW0pOworCWJmYV9mY2JfaXRuaW1fZnJlZShpdG5pbS0+ZmNzLT5iZmFkLCBpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworCisKKy8qKgorICogIGl0bmltX3B1YmxpYyBGQ1MgSVROSU0gcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIAlDYWxsZWQgYnkgcnBvcnQgd2hlbiBhIG5ldyBycG9ydCBpcyBjcmVhdGVkLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnQJLSAgcmVtb3RlIHBvcnQuCisgKi8KK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CisJc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2OworCXN0cnVjdCBiZmFfaXRuaW1fcyAqYmZhX2l0bmltOworCisJLyoKKwkgKiBjYWxsIGJmYWQgdG8gYWxsb2NhdGUgdGhlIGl0bmltCisJICovCisJYmZhX2ZjYl9pdG5pbV9hbGxvYyhwb3J0LT5mY3MtPmJmYWQsICZpdG5pbSwgJml0bmltX2Rydik7CisJaWYgKGl0bmltID09IE5VTEwpIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIGl0bmltCisJICovCisJaXRuaW0tPnJwb3J0ID0gcnBvcnQ7CisJaXRuaW0tPmZjcyA9IHJwb3J0LT5mY3M7CisJaXRuaW0tPml0bmltX2RydiA9IGl0bmltX2RydjsKKworCS8qCisJICogY2FsbCBCRkEgdG8gY3JlYXRlIHRoZSBpdG5pbQorCSAqLworCWJmYV9pdG5pbSA9IGJmYV9pdG5pbV9jcmVhdGUocG9ydC0+ZmNzLT5iZmEsIHJwb3J0LT5iZmFfcnBvcnQsIGl0bmltKTsKKworCWlmIChiZmFfaXRuaW0gPT0gTlVMTCkgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQliZmFfZmNiX2l0bmltX2ZyZWUocG9ydC0+ZmNzLT5iZmFkLCBpdG5pbV9kcnYpOworCQliZmFfYXNzZXJ0KDApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpdG5pbS0+YmZhX2l0bmltID0gYmZhX2l0bmltOworCWl0bmltLT5zZXFfcmVjID0gQkZBX0ZBTFNFOworCWl0bmltLT5yZWNfc3VwcG9ydCA9IEJGQV9GQUxTRTsKKwlpdG5pbS0+Y29uZl9jb21wID0gQkZBX0ZBTFNFOworCWl0bmltLT50YXNrX3JldHJ5X2lkID0gQkZBX0ZBTFNFOworCisJLyoKKwkgKiBTZXQgU3RhdGUgbWFjaGluZQorCSAqLworCWJmYV9zbV9zZXRfc3RhdGUoaXRuaW0sIGJmYV9mY3NfaXRuaW1fc21fb2ZmbGluZSk7CisKKwlyZXR1cm4gaXRuaW07Cit9CisKKy8qKgorICogCUNhbGxlZCBieSBycG9ydCB0byBkZWxldGUgIHRoZSBpbnN0YW5jZSBvZiBGQ1BJTS4KKyAqCisgKiBAcGFyYW1baW5dIHJwb3J0CS0gIHJlbW90ZSBwb3J0LgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9ERUxFVEUpOworfQorCisvKioKKyAqIE5vdGlmaWNhdGlvbiBmcm9tIHJwb3J0IHRoYXQgUExPR0kgaXMgY29tcGxldGUgdG8gaW5pdGlhdGUgRkMtNCBzZXNzaW9uLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlpdG5pbS0+c3RhdHMub25saW5lcysrOworCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EoaXRuaW0tPnJwb3J0LT5waWQpKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX09OTElORSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRm9yIHdlbGwga25vd24gYWRkcmVzc2VzLCB3ZSBzZXQgdGhlIGl0bmltIHRvIGluaXRpYXRvcgorCQkgKiBzdGF0ZQorCQkgKi8KKwkJaXRuaW0tPnN0YXRzLmluaXRpYXRvcisrOworCQliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworCX0KK30KKworLyoqCisgKiBDYWxsZWQgYnkgcnBvcnQgdG8gaGFuZGxlIGEgcmVtb3RlIGRldmljZSBvZmZsaW5lLgorICovCit2b2lkCitiZmFfZmNzX2l0bmltX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJaXRuaW0tPnN0YXRzLm9mZmxpbmVzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQoaXRuaW0sIEJGQV9GQ1NfSVROSU1fU01fT0ZGTElORSk7Cit9CisKKy8qKgorICogQ2FsbGVkIGJ5IHJwb3J0IHdoZW4gcmVtb3RlIHBvcnQgaXMga25vd24gdG8gYmUgYW4gaW5pdGlhdG9yIGZyb20KKyAqIFBSTEkgcmVjZWl2ZWQuCisgKi8KK3ZvaWQKK2JmYV9mY3NfaXRuaW1faXNfaW5pdGlhdG9yKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5waWQpOworCWl0bmltLT5zdGF0cy5pbml0aWF0b3IrKzsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9JTklUSUFUT1IpOworfQorCisvKioKKyAqIENhbGxlZCBieSBycG9ydCB0byBjaGVjayBpZiB0aGUgaXRuaW0gaXMgb25saW5lLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cGlkKTsKKwlzd2l0Y2ggKGJmYV9zbV90b19zdGF0ZShpdG5pbV9zbV90YWJsZSwgaXRuaW0tPnNtKSkgeworCWNhc2UgQkZBX0lUTklNX09OTElORToKKwljYXNlIEJGQV9JVE5JTV9JTklUSUFUSU9SOgorCQlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworCWRlZmF1bHQ6CisJCXJldHVybiBCRkFfU1RBVFVTX05PX0ZDUElNX05FWFVTOworCisJfQorfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb25saW5lKCkuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9vbmxpbmUodm9pZCAqY2JhcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiYXJnOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBpdG5pbS0+cnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX0hDQl9PTkxJTkUpOworfQorCisvKioKKyAqIEJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgorICovCit2b2lkCitiZmFfY2JfaXRuaW1fb2ZmbGluZSh2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChpdG5pbSwgQkZBX0ZDU19JVE5JTV9TTV9IQ0JfT0ZGTElORSk7Cit9CisKKy8qKgorICogTWFyayB0aGUgYmVnaW5uaW5nIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBJTyBjb21wbGV0aW9uIGNhbGxiYWNrcworICogYXJlIHN0aWxsIHBlbmRpbmcuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV90b3ZfYmVnaW4odm9pZCAqY2JfYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltID0gKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKiljYl9hcmc7CisKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2ZjYl9pdG5pbV90b3ZfYmVnaW4oaXRuaW0tPml0bmltX2Rydik7Cit9CisKKy8qKgorICogTWFyayB0aGUgZW5kIG9mIFBBVEggVE9WIGhhbmRsaW5nLiBBbGwgcGVuZGluZyBJT3MgYXJlIGFscmVhZHkgY2xlYW5lZCB1cC4KKyAqLwordm9pZAorYmZhX2NiX2l0bmltX3Rvdih2b2lkICpjYl9hcmcpCit7CisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0gPSAoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqKWNiX2FyZzsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgaXRuaW0tPnJwb3J0LT5wd3duKTsKKwliZmFfZmNiX2l0bmltX3RvdihpdG5pbS0+aXRuaW1fZHJ2KTsKK30KKworLyoqCisgKiAJCUJGQSBub3RpZmljYXRpb24gdG8gRkNTL2RyaXZlciBmb3Igc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5LgorICoKKyAqIEF0bGVhc3Qgb25lIEkvTyByZXF1ZXN0IGhhcyB0aW1lZG91dCBhbmQgdGFyZ2V0IGlzIHVucmVzcG9uc2l2ZSB0bworICogcmVwZWF0ZWQgYWJvcnQgcmVxdWVzdHMuIFNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBzaG91bGQgYmUgaW5pdGlhdGVkCisgKiBieSBzdGFydGluZyBpbXBsaWNpdCBsb2dvdXQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMuCisgKi8KK3ZvaWQKK2JmYV9jYl9pdG5pbV9zbGVyKHZvaWQgKmNiX2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICopY2JfYXJnOworCisJaXRuaW0tPnN0YXRzLnNsZXIrKzsKKwliZmFfdHJjKGl0bmltLT5mY3MsIGl0bmltLT5ycG9ydC0+cHd3bik7CisJYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChpdG5pbS0+cnBvcnQpOworfQorCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoKK2JmYV9mY3NfaXRuaW1fbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2xvb2t1cChwb3J0LCBycHd3bik7CisKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9hc3NlcnQocnBvcnQtPml0bmltICE9IE5VTEwpOworCXJldHVybiAocnBvcnQtPml0bmltKTsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX2F0dHJfZ2V0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24sCisJCSAgICAgICBzdHJ1Y3QgYmZhX2l0bmltX2F0dHJfcyAqYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWF0dHItPnN0YXRlID0gYmZhX3NtX3RvX3N0YXRlKGl0bmltX3NtX3RhYmxlLCBpdG5pbS0+c20pOworCWF0dHItPnJldHJ5ID0gaXRuaW0tPnNlcV9yZWM7CisJYXR0ci0+cmVjX3N1cHBvcnQgPSBpdG5pbS0+cmVjX3N1cHBvcnQ7CisJYXR0ci0+Y29uZl9jb21wID0gaXRuaW0tPmNvbmZfY29tcDsKKwlhdHRyLT50YXNrX3JldHJ5X2lkID0gaXRuaW0tPnRhc2tfcmV0cnlfaWQ7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworYmZhX3N0YXR1c190CitiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1jcHkoc3RhdHMsICZpdG5pbS0+c3RhdHMsIHNpemVvZihzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MpKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfaXRuaW1fc3RhdHNfY2xlYXIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSA9IE5VTEw7CisKKwliZmFfYXNzZXJ0KHBvcnQgIT0gTlVMTCk7CisKKwlpdG5pbSA9IGJmYV9mY3NfaXRuaW1fbG9va3VwKHBvcnQsIHJwd3duKTsKKworCWlmIChpdG5pbSA9PSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUzsKKworCWJmYV9vc19tZW1zZXQoJml0bmltLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcykpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCit2b2lkCitiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCSAgICAgIHUxNiBsZW4pCit7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhpdG5pbS0+ZmNzLCBmY2hzLT50eXBlKTsKKworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKQorCQlyZXR1cm47CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMoaXRuaW0tPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX1BSTE86CisJCS8qIGJmYV9zbV9zZW5kX2V2ZW50KGl0bmltLCBCRkFfRkNTX0lUTklNX1NNX1BSTE8pOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworfQorCit2b2lkCitiZmFfZmNzX2l0bmltX3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBpbml0aWFsaXphdGlvbgorICovCit2b2lkCitiZmFfZmNzX2ZjcGltX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworfQorCisvKioKKyAqICAgTW9kdWxlIGNsZWFudXAKKyAqLwordm9pZAorYmZhX2Zjc19mY3BpbV9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKKwliZmFfZmNzX21vZGV4aXRfY29tcChmY3MpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNwdG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzhiMDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3B0bS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZHVtbXkgRkNQVE0gcm91dGluZXMgdG8gYWlkIGluIEluaXRpYXRvciBNb2RlIG9ubHkKKyAqIGNvbXBpbGF0aW9uIG9mIE9TIGRyaXZlci4KKyAqCisgKi8KKworI2luY2x1ZGUgImJmYV9vc19pbmMuaCIKKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmNwdG0uaCIKKyNpbmNsdWRlICJmY3MvYmZhX2Zjc19ycG9ydC5oIgorCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqCitiZmFfZmNzX3Rpbl9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfdGluX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yeF9wcmxpKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4sIHN0cnVjdCBmY2hzX3MgKmZjaHMsIHUxNiBsZW4pCit7Cit9CisKK3ZvaWQKK2JmYV9mY3NfZmNwdG1fdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluLCBzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKQoreworfQorCit2b2lkCitiZmFfZmNzX3Rpbl9yZXN1bWUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbikKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZWU2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjcy5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzLmggRkNTIG1vZHVsZSBmdW5jdGlvbnMKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfSF9fCisjZGVmaW5lIF9fRkNTX0hfXworCisjZGVmaW5lIF9fZmNzX21pbl9jZmcoX19mY3MpICAgICAgIChfX2ZjcyktPm1pbl9jZmcKKwordm9pZCBiZmFfZmNzX21vZGV4aXRfY29tcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkMTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2F1dGguaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc191Zi5oIEZDUyB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlCisgKi8KKworCisjaWZuZGVmIF9fRkNTX0FVVEhfSF9fCisjZGVmaW5lIF9fRkNTX0FVVEhfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKworLyoKKyAqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCBiZmFfZmNzX2F1dGhfdWZfcmVjdihzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLCBpbnQgbGVuKTsKK3ZvaWQgYmZhX2Zjc19hdXRoX3N0YXJ0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2F1dGhfc3RvcChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWU5NjA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmFicmljLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfbHBvcnQuaCBGQ1MgbG9naWNhbCBwb3J0IGludGVyZmFjZXMKKyAqLworCisjaWZuZGVmIF9fRkNTX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19GQ1NfRkFCUklDX0hfXworCisjaW5jbHVkZSA8ZmNzL2JmYV9mY3MuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisKKy8qCisqIGZjcyBmcmllbmQgZnVuY3Rpb25zOiBvbmx5IGJldHdlZW4gZmNzIG1vZHVsZXMKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3VzcChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2xpbmtfdXAoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbGlua19kb3duKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfZmFicmljX2FkZHZwb3J0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQkJCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY19kZWx2cG9ydChzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljLAorCQkJCQlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CitpbnQgICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKAorCQkJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYywgd3duX3QgcHd3bik7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19mYWJyaWNfbW9kc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX2ZhYnJpY191Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hzLCB1MTYgbGVuKTsKK3UxNiAgICAgICAgYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitiZmFfYm9vbGVhbl90ICAgYmZhX2Zjc19mYWJyaWNfaXNfbG9vcGJhY2soc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYyk7CitlbnVtIGJmYV9wcG9ydF90eXBlIGJmYV9mY3NfZmFicmljX3BvcnRfdHlwZShzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyAqZmFicmljKTsKK3ZvaWQgICAgIAliZmFfZmNzX2ZhYnJpY19wc3ltYl9pbml0KHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOwordm9pZCBiZmFfZmNzX2ZhYnJpY19wb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMpOworCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19mYWJyaWNfYWRkdmYoc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKnZmLAorCQkJc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKK3ZvaWQgYmZhX2Zjc19hdXRoX2ZpbmlzaGVkKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQllbnVtIGF1dGhfc3RhdHVzIHN0YXR1cyk7CisKK3ZvaWQgYmZhX2Zjc19mYWJyaWNfc2V0X2ZhYnJpY19uYW1lKHN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWMsCisJCQl3d25fdCBmYWJyaWNfbmFtZSk7CisjZW5kaWYgLyogX19GQ1NfRkFCUklDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlOWUyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcGltLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0ZDU19GQ1BJTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQSU0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICpiZmFfZmNzX2l0bmltX2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfaXRuaW1fZGVsZXRlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSk7CisKK3ZvaWQgYmZhX2Zjc19pdG5pbV9pc19pbml0aWF0b3Ioc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOwordm9pZCBiZmFfZmNzX2l0bmltX3BhdXNlKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKTsKK3ZvaWQgYmZhX2Zjc19pdG5pbV9yZXN1bWUoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3BpbV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwaW1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcGltX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0sIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKKyNlbmRpZiAvKiBfX0ZDU19GQ1BJTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjcHRtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZmYwODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3B0bS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDU19GQ1BUTV9IX18KKyNkZWZpbmUgX19GQ1NfRkNQVE1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisKKy8qCisgKiBGb2xsb3dpbmcgcm91dGluZXMgYXJlIGZyb20gRkNQVE0gYW5kIHdpbGwgYmUgY2FsbGVkIGJ5IHJwb3J0LgorICovCitzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqYmZhX2Zjc190aW5fY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOwordm9pZCBiZmFfZmNzX3Rpbl9kZWxldGUoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbik7Cit2b2lkIGJmYV9mY3NfdGluX3J4X3BybGkoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOwordm9pZCBiZmFfZmNzX3Rpbl9wYXVzZShzdHJ1Y3QgYmZhX2Zjc190aW5fcyAqdGluKTsKK3ZvaWQgYmZhX2Zjc190aW5fcmVzdW1lKHN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW4pOworCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KK3ZvaWQgYmZhX2Zjc19mY3B0bV9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfZmNwdG1fbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX2ZjcHRtX3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfdGluX3MgKnRpbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisjZW5kaWYgLyogX19GQ1NfRkNQVE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc19mY3hwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3N2ZlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2ZjeHAuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19mY3hwLmggRkNYUCBoZWxwZXIgbWFjcm9zIGZvciBGQ1MKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfRkNYUF9IX18KKyNkZWZpbmUgX19GQ1NfRkNYUF9IX18KKworI2RlZmluZSBiZmFfZmNzX2ZjeHBfYWxsb2MoX19mY3MpCVwKKwliZmFfZmN4cF9hbGxvYyhOVUxMLCAoX19mY3MpLT5iZmEsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisKKyNlbmRpZiAvKiBfX0ZDU19GQ1hQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3NDRiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX2xwb3J0LmggRkNTIGxvZ2ljYWwgcG9ydCBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0ZDU19MUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfTFBPUlRfSF9fCisKKyNkZWZpbmUgX19WUE9SVF9IX18KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzX2ZhYnJpYy5oPgorI2luY2x1ZGUgPGZjc19tcy5oPgorI2luY2x1ZGUgPGNzL2JmYV9xLmg+CisjaW5jbHVkZSA8ZmNidWlsZC5oPgorCisvKgorICogUElEIHVzZWQgaW4gUDJQL04yTiAoIEluIEJpZyBFbmRpYW4pCisgKi8KKyNkZWZpbmUgTjJOX0xPQ0FMX1BJRAkgICAgMHgwMTAwMDAKKyNkZWZpbmUgTjJOX1JFTU9URV9QSUQJCTB4MDIwMDAwCisKKy8qCisgKiBNaXNjIFRpbWVvdXRzCisgKi8KKy8qCisgKiBUbyBiZSB1c2VkIHdoZW4gc3Bhd25pbmcgYSB0aW1lciBiZWZvcmUgcmV0cnlpbmcgYSBmYWlsZWQgY29tbWFuZC4gTWlsbGkKKyAqIFNlY3MuCisgKi8KKyNkZWZpbmUJQkZBX0ZDU19SRVRSWV9USU1FT1VUIDIwMDAKKworLyoKKyAqIENoZWNrIGZvciBQb3J0L1Zwb3J0IE1vZGUvUm9sZQorICovCisjZGVmaW5lCUJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JTSkKKworI2RlZmluZQlCRkFfRkNTX1ZQT1JUX0lTX1RBUkdFVF9NT0RFKHBvcnQpIFwKKwkJKHBvcnQtPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisKKyNkZWZpbmUJQkZBX0ZDU19WUE9SVF9JU19JUEZDX01PREUocG9ydCkgXAorCQkocG9ydC0+cG9ydF9jZmcucm9sZXMgJiBCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDKQorCisvKgorICogSXMgdGhpcyBhIFdlbGwgS25vd24gQWRkcmVzcworICovCisjZGVmaW5lIEJGQV9GQ1NfUElEX0lTX1dLQShwaWQpICAoKGJmYV9vc19udG9oM2IocGlkKSA+IDB4RkZGMDAwKSA/ICAxIDogMCkKKworLyoKKyAqIFBvaW50ZXIgdG8gZWxlbWVudHMgd2l0aGluIFBvcnQKKyAqLworI2RlZmluZSBCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpICAocG9ydC0+ZmNzLT5iZmEpCisjZGVmaW5lIEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5ucykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfU0NOX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5zY24pCisjZGVmaW5lIEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KSAgKCZwb3J0LT5wb3J0X3RvcG8ucGZhYi5tcykKKyNkZWZpbmUgQkZBX0ZDU19HRVRfRkRNSV9GUk9NX1BPUlQocG9ydCkgICgmcG9ydC0+cG9ydF90b3BvLnBmYWIubXMuZmRtaSkKKworLyoKKyAqIGhhbmRsZXIgZm9yIHVuc29saWNpZWQgZnJhbWVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXUxNiBsZW4pOworCisvKgorICogRm9sbG93aW5nIHJvdXRpbmVzIHdpbGwgYmUgY2FsbGVkIGJ5IEZhYnJpYyB0byBpbmRpY2F0ZSBwb3J0CisgKiBvbmxpbmUvb2ZmbGluZSB0byB2cG9ydC4KKyAqLwordm9pZCBiZmFfZmNzX2xwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpscG9ydCwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJdTE2IHZmX2lkLCBzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgKnBvcnRfY2ZnLAorCQkJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK2JmYV9ib29sZWFuX3QgICBiZmFfZmNzX3BvcnRfaXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7CisKKy8qCisgKiBMb29rdXAgcnBvcnQgYmFzZWQgb24gUElECisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcGlkKTsKKworLyoKKyAqIExvb2t1cCBycG9ydCBiYXNlZCBvbiBQV1dOCisgKi8KK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcHd3bik7CitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X253d24oCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IG53d24pOwordm9pZCBiZmFfZmNzX3BvcnRfYWRkX3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CisKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisjZW5kaWYgLyogX19GQ1NfTFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19tcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmE4YzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfbXMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19tcy5oIEZDUyBtcyBpbnRlcmZhY2VzCisgKi8KKyNpZm5kZWYgX19GQ1NfTVNfSF9fCisjZGVmaW5lIF9fRkNTX01TX0hfXworCisvKiBNUyBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X21zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X21zX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCBiZmFfZmNzX3BvcnRfbXNfZmFicmljX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKworLyogRkRNSSBGQ1Mgcm91dGluZXMgKi8KK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcG9ydC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3Bwb3J0LmggRkNTIHBoeXNpY2FsIHBvcnQgaW50ZXJmYWNlcworICovCisKKworI2lmbmRlZiBfX0ZDU19QUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUFBPUlRfSF9fCisKKy8qCisgKiBmY3MgZnJpZW5kIGZ1bmN0aW9uczogb25seSBiZXR3ZWVuIGZjcyBtb2R1bGVzCisgKi8KK3ZvaWQgYmZhX2Zjc19wcG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfcHBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOworCisjZW5kaWYgLyogX19GQ1NfUFBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2Zjc19ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjAxZTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfcnBvcnQuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGZjc19ycG9ydC5oIEZDUyBycG9ydCBpbnRlcmZhY2VzIGFuZCBkZWZpbmVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19SUE9SVF9IX18KKyNkZWZpbmUgX19GQ1NfUlBPUlRfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19ycG9ydC5oPgorCit2b2lkIGJmYV9mY3NfcnBvcnRfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3Jwb3J0X21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKwordm9pZCBiZmFfZmNzX3Jwb3J0X3VmX3JlY3Yoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMsCisJCQl1MTYgbGVuKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9zY24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpiZmFfZmNzX3Jwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl1MzIgcGlkKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2lfcnNwKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naV9jcmVhdGUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9sb2dvX2ltcChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfaXRuaW1fYWNrKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgYmZhX2Zjc19ycG9ydF9pdG50bV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X3Rpbl9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfZmNzX3Jwb3J0X2ZjcHRtX29mZmxpbmVfZG9uZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitpbnQgIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKmJmYV9mY3NfcnBvcnRfY3JlYXRlX2J5X3d3bihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCB3d24pOworCisKKy8qIFJwb3J0IEZlYXR1cmVzICovCit2b2lkICBiZmFfZmNzX3JwZl9pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3ZvaWQgIGJmYV9mY3NfcnBmX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkICBiZmFfZmNzX3JwZl9ycG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKKworI2VuZGlmIC8qIF9fRkNTX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc190cmNtb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWI1YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9mY3NfdHJjbW9kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBmY3NfdHJjbW9kLmggQkZBIEZDUyB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0ZDU19UUkNNT0RfSF9fCisjZGVmaW5lIF9fRkNTX1RSQ01PRF9IX18KKworI2luY2x1ZGUgPGNzL2JmYV90cmMuaD4KKworLyoKKyAqICEhISBPbmx5IGFwcGVuZCB0byB0aGUgZW51bXMgZGVmaW5lZCBoZXJlIHRvIGF2b2lkIGFueSB2ZXJzaW9uaW5nCisgKiAhISEgbmVlZGVkIGJldHdlZW4gdHJhY2UgdXRpbGl0eSBhbmQgZHJpdmVyIHZlcnNpb24KKyAqLworZW51bSB7CisJQkZBX1RSQ19GQ1NfRkFCUklDCQk9IDEsCisJQkZBX1RSQ19GQ1NfVkZBUEkJCT0gMiwKKwlCRkFfVFJDX0ZDU19QT1JUCQk9IDMsCisJQkZBX1RSQ19GQ1NfVlBPUlQJCT0gNCwKKwlCRkFfVFJDX0ZDU19WUF9BUEkJCT0gNSwKKwlCRkFfVFJDX0ZDU19WUFMJCQk9IDYsCisJQkZBX1RSQ19GQ1NfUlBPUlQJCT0gNywKKwlCRkFfVFJDX0ZDU19GQ1BJTQkJPSA4LAorCUJGQV9UUkNfRkNTX0ZDUFRNCQk9IDksCisJQkZBX1RSQ19GQ1NfTlMJCQk9IDEwLAorCUJGQV9UUkNfRkNTX1NDTgkJCT0gMTEsCisJQkZBX1RSQ19GQ1NfTE9PUAkJPSAxMiwKKwlCRkFfVFJDX0ZDU19VRgkJCT0gMTMsCisJQkZBX1RSQ19GQ1NfUFBPUlQJCT0gMTQsCisJQkZBX1RSQ19GQ1NfRkNQSVAJCT0gMTUsCisJQkZBX1RSQ19GQ1NfUE9SVF9BUEkJPSAxNiwKKwlCRkFfVFJDX0ZDU19SUE9SVF9BUEkJPSAxNywKKwlCRkFfVFJDX0ZDU19BVVRICQk9IDE4LAorCUJGQV9UUkNfRkNTX04yTgkJCT0gMTksCisJQkZBX1RSQ19GQ1NfTVMJCQk9IDIwLAorCUJGQV9UUkNfRkNTX0ZETUkJCT0gMjEsCisJQkZBX1RSQ19GQ1NfUlBPUlRfRlRSUwk9IDIyLAorfTsKKworI2VuZGlmIC8qIF9fRkNTX1RSQ01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3VmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjFiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2Zjc191Zi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgZmNzX3VmLmggRkNTIHVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUKKyAqLworCisKKyNpZm5kZWYgX19GQ1NfVUZfSF9fCisjZGVmaW5lIF9fRkNTX1VGX0hfXworCisvKgorICogZmNzIGZyaWVuZCBmdW5jdGlvbnM6IG9ubHkgYmV0d2VlbiBmY3MgbW9kdWxlcworICovCit2b2lkIGJmYV9mY3NfdWZfbW9kaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpOwordm9pZCBiZmFfZmNzX3VmX21vZGV4aXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MGI2YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvZmNzX3Zwb3J0LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fRkNTX1ZQT1JUX0hfXworI2RlZmluZSBfX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfdnBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BjaS5oPgorCisvKgorICogTW9kdWRsZSBpbml0L2NsZWFudXAgcm91dGluZXMuCisgKi8KKwordm9pZCBiZmFfZmNzX3Zwb3J0X21vZGluaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9tb2RleGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CisKK3ZvaWQgYmZhX2Zjc192cG9ydF9jbGVhbnVwKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3ZvaWQgYmZhX2Zjc192cG9ydF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOwordm9pZCBiZmFfZmNzX3Zwb3J0X2RlbGV0ZV9jb21wKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3UzMiBiZmFfZmNzX3Zwb3J0X2dldF9tYXgoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fRkNTX1ZQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYyBiL2RyaXZlcnMvc2NzaS9iZmEvZmRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDVlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2ZkbWkuYwpAQCAtMCwwICsxLDEyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9hcGkuYyBCRkEgRkNTIHBvcnQKKyAqLworCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2ZkbWkuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgRkRNSSk7CisKKyNkZWZpbmUgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUyAyCisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywKKwkJCQkJICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQl2b2lkICpjYmFyZywKKwkJCQkJCWJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJdTMyIHJzcF9sZW4sCisJCQkJCQl1MzIgcmVzaWRfbGVuLAorCQkJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycHJ0X3B5bGQoCisJCQlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwgdTggKnB5bGQpOworc3RhdGljIHUxNiBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLCB1OCAqcHlsZCk7CitzdGF0aWMgdTE2IGJmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksIHU4ICpweWxkKTsKK3ZvaWQgYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cik7Cit2b2lkIGJmYV9mY3NfZmRtaV9nZXRfcG9ydGF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zICpwb3J0X2F0dHIpOworLyoqCisgKiAgZmNzX2ZkbWlfc20gRkNTIEZETUkgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIEZETUkgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSBwb3J0X2ZkbWlfZXZlbnQgeworCUZETUlTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSA9IDIsCisJRkRNSVNNX0VWRU5UX1JTUF9PSyA9IDQsCisJRkRNSVNNX0VWRU5UX1JTUF9FUlJPUiA9IDUsCisJRkRNSVNNX0VWRU5UX1RJTUVPVVQgPSA2LAorCUZETUlTTV9FVkVOVF9SSEJBX1NFTlQgPSA3LAorCUZETUlTTV9FVkVOVF9SUFJUX1NFTlQgPSA4LAorCUZETUlTTV9FVkVOVF9SUEFfU0VOVCA9IDksCit9OworCitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9zZW5kaW5nX3JwcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCWVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpOworLyoqCisgKiAJCVN0YXJ0IGluIG9mZmxpbmUgc3RhdGUgLSBhd2FpdGluZyBNUyB0byBzZW5kIHN0YXJ0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCWZkbWktPnJldHJ5X2NudCA9IDA7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkU6CisJCWlmIChwb3J0LT52cG9ydCkgeworCQkJLyoKKwkJCSAqIEZvciBWcG9ydHMsIHJlZ2lzdGVyIGEgbmV3IHBvcnQuCisJCQkgKi8KKwkJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwKKwkJCQkJIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQoZmRtaSwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogRm9yIGEgYmFzZSBwb3J0LCB3ZSBzaG91bGQgZmlyc3QgcmVnaXN0ZXIgdGhlIEhCQQorCQkJICogYXRyaWJ1dGUuIFRoZSBIQkEgYXR0cmlidXRlIGFsc28gY29udGFpbnMgdGhlIGJhc2UKKwkJCSAqICBwb3J0IHJlZ2lzdHJhdGlvbi4KKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLAorCQkJCQkgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcmhiYShmZG1pLCBOVUxMKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUkhCQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JoYmEpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9yaGJhX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogc2V0IHN0YXRlIHRvIG9mZmxpbmUKKwkJCSAqLworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJLyoKKwkJICogSW5pdGlhdGUgUmVnaXN0ZXIgUG9ydCBBdHRyaWJ1dGVzCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKTsKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycGEoZmRtaSwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfZmN4cF9kaXNjYXJkKGZkbWktPmZjeHApOworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcmhiYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQllbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19yaGJhKTsKKwkJYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKGZkbWksIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJmZkbWktPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoKKyogUlBSVCA6IFJlZ2lzdGVyIFBvcnQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgIGVudW0gcG9ydF9mZG1pX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMocG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBGRE1JU01fRVZFTlRfUlBSVF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnQpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCSAgICAgICAmZmRtaS0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc21fcnBydChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycHJ0X3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKHBvcnQpLAorCQkJCQkmZmRtaS0+dGltZXIsIGJmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQsCisJCQkJCWZkbWksIEJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwcnRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBydCk7CisJCWJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBydChmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qCisgKiBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3NlbmRpbmdfcnBhKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1JQQV9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYSk7CisJCWJyZWFrOworCisJY2FzZSBGRE1JU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJICAgICAgICZmZG1pLT5mY3hwX3dxZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGEoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIGlmIG1heCByZXRyaWVzIGhhdmUgbm90IGJlZW4gcmVhY2hlZCwgc3RhcnQgdGltZXIgZm9yIGEKKwkJICogZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKGZkbWktPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19GRE1JX0NNRF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9ycGFfcmV0cnkpOworCQkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQocG9ydCksCisJCQkJCSZmZG1pLT50aW1lciwgYmZhX2Zjc19wb3J0X2ZkbWlfdGltZW91dCwKKwkJCQkJZmRtaSwgQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzZXQgc3RhdGUgdG8gb2ZmbGluZQorCQkJICovCisJCQliZmFfc21fc2V0X3N0YXRlKGZkbWksIGJmYV9mY3NfcG9ydF9mZG1pX3NtX29mZmxpbmUpOworCQkJZmRtaS0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUpOworCQlmZG1pLT5yZXRyeV9jbnQgPSAwOworCQlicmVhazsKKworCWNhc2UgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChmZG1pLT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShmZG1pLCBiZmFfZmNzX3BvcnRfZmRtaV9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NtX3JwYV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgICAgICBlbnVtIHBvcnRfZmRtaV9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRkRNSVNNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fc2VuZGluZ19ycGEpOworCQliZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwYShmZG1pLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZmZG1pLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgICAgZW51bSBwb3J0X2ZkbWlfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEZETUlTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKworLyoqCisqICAgUkhCQSA6IFJlZ2lzdGVyIEhCQSBBdHRyaWJ1dGVzLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9yaGJhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SSEJBKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcmhiYV9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIChsZW4gKyBhdHRyX2xlbiksICZmY2hzLAorCQkgICAgICBiZmFfZmNzX3BvcnRfZmRtaV9yaGJhX3Jlc3BvbnNlLCAodm9pZCAqKWZkbWksCisJCSAgICAgIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SSEJBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9yaGJhX3B5bGQoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkJICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX2hiYV9hdHRyX3MgaGJhX2F0dHI7CS8qIEB0b2RvICovCisJc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpmY3NfaGJhX2F0dHIgPSAmaGJhX2F0dHI7IC8qIEB0b2RvICovCisJc3RydWN0IGZkbWlfcmhiYV9zICAgICpyaGJhID0gKHN0cnVjdCBmZG1pX3JoYmFfcyAqKSBweWxkOworCXN0cnVjdCBmZG1pX2F0dHJfcyAgICAqYXR0cjsKKwl1OCAgICAgICAgKmN1cnJfcHRyOworCXUxNiAgICAgICAgbGVuLCBjb3VudDsKKworCS8qCisJICogZ2V0IGhiYSBhdHRyaWJ1dGVzCisJICovCisJYmZhX2Zjc19mZG1pX2dldF9oYmFhdHRyKGZkbWksIGZjc19oYmFfYXR0cik7CisKKwlyaGJhLT5oYmFfaWQgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJcmhiYS0+cG9ydF9saXN0Lm51bV9wb3J0cyA9IGJmYV9vc19odG9ubCgxKTsKKwlyaGJhLT5wb3J0X2xpc3QucG9ydF9lbnRyeSA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKworCWxlbiA9IHNpemVvZihyaGJhLT5oYmFfaWQpICsgc2l6ZW9mKHJoYmEtPnBvcnRfbGlzdCk7CisKKwljb3VudCA9IDA7CisJbGVuICs9IHNpemVvZihyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMgb2YgdGhlIEhCQSBhdHRyaWIgQmxvY2sKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcmhiYS0+aGJhX2F0dHJfYmxrLmhiYV9hdHRyOworCisJLyoKKwkgKiBOb2RlIE5hbWUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfSEJBX0FUVFJJQl9OT0RFTkFNRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKHd3bl90KTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZiZmFfZmNzX3BvcnRfZ2V0X253d24ocG9ydCksIGF0dHItPmxlbik7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE1hbnVmYWN0dXJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BTlVGQUNUVVJFUik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+bWFudWZhY3R1cmVyLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU2VyaWFsIE51bWJlcgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1NFUklBTE5VTSk7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+c2VyaWFsX251bSk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPnNlcmlhbF9udW0sIGF0dHItPmxlbik7CisJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwlhdHRyLT5sZW4gPSBmY19yb3VuZHVwKGF0dHItPmxlbiwgc2l6ZW9mKHUzMikpOworCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCWxlbiArPSBhdHRyLT5sZW47CisJY291bnQrKzsKKwlhdHRyLT5sZW4gPQorCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCSAgICAgc2l6ZW9mKGF0dHItPmxlbikpOworCisJLyoKKwkgKiBNb2RlbAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5tb2RlbCk7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm1vZGVsLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogTW9kZWwgRGVzYworCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01PREVMX0RFU0MpOworCWF0dHItPmxlbiA9ICh1MTYpIHN0cmxlbihmY3NfaGJhX2F0dHItPm1vZGVsX2Rlc2MpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5tb2RlbF9kZXNjLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCWNvdW50Kys7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogSC9XIFZlcnNpb24KKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04pOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5od192ZXJzaW9uKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmh3X3ZlcnNpb24sIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBEcml2ZXIgVmVyc2lvbgorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX0RSSVZFUl9WRVJTSU9OKTsKKwlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbik7CisJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPmRyaXZlcl92ZXJzaW9uLCBhdHRyLT5sZW4pOworCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOzsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9wdGlvbiBSb20gVmVyc2lvbgorCSAqLworCWlmIChmY3NfaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIpOworCQltZW1jcHkoYXR0ci0+dmFsdWUsIGZjc19oYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBmL3cgVmVyc2lvbiA9IGRyaXZlciB2ZXJzaW9uCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTik7CisJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19oYmFfYXR0ci0+ZHJpdmVyX3ZlcnNpb24pOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX2hiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgYXR0ci0+bGVuKTsKKwkvKiB2YXJpYWJsZSBmaWVsZHMgbmVlZCB0byBiZSA0IGJ5dGUgYWxpZ25lZCAqLworCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIE9TIE5hbWUKKwkgKi8KKwlpZiAoZmNzX2hiYV9hdHRyLT5vc19uYW1lWzBdICE9ICdcMCcpIHsKKwkJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX09TX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX2hiYV9hdHRyLT5vc19uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfaGJhX2F0dHItPm9zX25hbWUsIGF0dHItPmxlbik7CisJCS8qIHZhcmlhYmxlIGZpZWxkcyBuZWVkIHRvIGJlIDQgYnl0ZSBhbGlnbmVkICovCisJCWF0dHItPmxlbiA9IGZjX3JvdW5kdXAoYXR0ci0+bGVuLCBzaXplb2YodTMyKSk7CisJCWN1cnJfcHRyICs9IHNpemVvZihhdHRyLT50eXBlKSArIHNpemVvZihhdHRyLT5sZW4pICsgYXR0ci0+bGVuOworCQlsZW4gKz0gYXR0ci0+bGVuOworCQljb3VudCsrOworCQlhdHRyLT5sZW4gPQorCQkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisJfQorCisJLyoKKwkgKiBNQVhfQ1RfUEFZTE9BRAorCSAqLworCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCWF0dHItPnR5cGUgPSBiZmFfb3NfaHRvbnMoRkRNSV9IQkFfQVRUUklCX01BWF9DVCk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19oYmFfYXR0ci0+bWF4X2N0X3B5bGQsIGF0dHItPmxlbik7CisJbGVuICs9IGF0dHItPmxlbjsKKwljb3VudCsrOworCWF0dHItPmxlbiA9CisJCWJmYV9vc19odG9ucyhhdHRyLT5sZW4gKyBzaXplb2YoYXR0ci0+dHlwZSkgKworCQkJICAgICBzaXplb2YoYXR0ci0+bGVuKSk7CisKKwkvKgorCSAqIFVwZGF0ZSBzaXplIG9mIHBheWxvYWQKKwkgKi8KKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisKKwlyaGJhLT5oYmFfYXR0cl9ibGsuYXR0cl9jb3VudCA9IGJmYV9vc19odG9ubChjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JoYmFfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQUlQgOiBSZWdpc3RlciBQb3J0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9zZW5kX3JwcnQodm9pZCAqZmRtaV9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IGZkbWlfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXUxNiAgICAgICAgbGVuLCBhdHRyX2xlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1OCAgICAgICAgKnB5bGQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZmZG1pLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X2ZkbWlfc2VuZF9ycHJ0LCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUFJUKTsKKworCWF0dHJfbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKGZkbWksCisJCQkodTggKikgKChzdHJ1Y3QgY3RfaGRyX3MgKikgcHlsZCArIDEpKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiArIGF0dHJfbGVuLCAmZmNocywKKwkJICAgICAgYmZhX2Zjc19wb3J0X2ZkbWlfcnBydF9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBSVF9TRU5UKTsKK30KKworLyoqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIFBvcnQgQXR0cmlidXRlIEJsb2NrIHRoYXQgdXNlZCBpbiBSUEEsIFJQUlQgY29tbWFuZHMuCisgKi8KK3N0YXRpYyAgICAgICAgICB1MTYKK2JmYV9mY3NfcG9ydF9mZG1pX2J1aWxkX3BvcnRhdHRyX2Jsb2NrKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgICAgICB1OCAqcHlsZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIGZjc19wb3J0X2F0dHI7CisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgKnBvcnRfYXR0cmliID0gKHN0cnVjdCBmZG1pX3BvcnRfYXR0cl9zICopIHB5bGQ7CisJc3RydWN0IGZkbWlfYXR0cl9zICAgICphdHRyOworCXU4ICAgICAgICAqY3Vycl9wdHI7CisJdTE2ICAgICAgICBsZW47CisJdTggICAgICAgICBjb3VudCA9IDA7CisKKwkvKgorCSAqIGdldCBwb3J0IGF0dHJpYnV0ZXMKKwkgKi8KKwliZmFfZmNzX2ZkbWlfZ2V0X3BvcnRhdHRyKGZkbWksICZmY3NfcG9ydF9hdHRyKTsKKworCWxlbiA9IHNpemVvZihwb3J0X2F0dHJpYi0+YXR0cl9jb3VudCk7CisKKwkvKgorCSAqIGZpbGwgb3V0IHRoZSBpbnZpZGlkdWFsIGVudHJpZXMKKwkgKi8KKwljdXJyX3B0ciA9ICh1OCAqKSAmcG9ydF9hdHRyaWItPnBvcnRfYXR0cjsKKworCS8qCisJICogRkM0IFR5cGVzCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX0ZDNF9UWVBFUyk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIuc3VwcF9mYzRfdHlwZXMpOworCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5zdXBwX2ZjNF90eXBlcywgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogU3VwcG9ydGVkIFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1NVUFBfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLnN1cHBfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuc3VwcF9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogY3VycmVudCBQb3J0IFNwZWVkCisJICovCisJYXR0ciA9IChzdHJ1Y3QgZmRtaV9hdHRyX3MgKikgY3Vycl9wdHI7CisJYXR0ci0+dHlwZSA9IGJmYV9vc19odG9ucyhGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQpOworCWF0dHItPmxlbiA9IHNpemVvZihmY3NfcG9ydF9hdHRyLmN1cnJfc3BlZWQpOworCW1lbWNweShhdHRyLT52YWx1ZSwgJmZjc19wb3J0X2F0dHIuY3Vycl9zcGVlZCwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogbWF4IGZyYW1lIHNpemUKKwkgKi8KKwlhdHRyID0gKHN0cnVjdCBmZG1pX2F0dHJfcyAqKSBjdXJyX3B0cjsKKwlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSk7CisJYXR0ci0+bGVuID0gc2l6ZW9mKGZjc19wb3J0X2F0dHIubWF4X2ZybV9zaXplKTsKKwltZW1jcHkoYXR0ci0+dmFsdWUsICZmY3NfcG9ydF9hdHRyLm1heF9mcm1fc2l6ZSwgYXR0ci0+bGVuKTsKKwljdXJyX3B0ciArPSBzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSArIGF0dHItPmxlbjsKKwlsZW4gKz0gYXR0ci0+bGVuOworCSsrY291bnQ7CisJYXR0ci0+bGVuID0KKwkJYmZhX29zX2h0b25zKGF0dHItPmxlbiArIHNpemVvZihhdHRyLT50eXBlKSArCisJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCS8qCisJICogT1MgRGV2aWNlIE5hbWUKKwkgKi8KKwlpZiAoZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfREVWX05BTUUpOworCQlhdHRyLT5sZW4gPSAodTE2KSBzdHJsZW4oZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSk7CisJCW1lbWNweShhdHRyLT52YWx1ZSwgZmNzX3BvcnRfYXR0ci5vc19kZXZpY2VfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKwkvKgorCSAqIEhvc3QgTmFtZQorCSAqLworCWlmIChmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZVswXSAhPSAnXDAnKSB7CisJCWF0dHIgPSAoc3RydWN0IGZkbWlfYXR0cl9zICopIGN1cnJfcHRyOworCQlhdHRyLT50eXBlID0gYmZhX29zX2h0b25zKEZETUlfUE9SVF9BVFRSSUJfSE9TVF9OQU1FKTsKKwkJYXR0ci0+bGVuID0gKHUxNikgc3RybGVuKGZjc19wb3J0X2F0dHIuaG9zdF9uYW1lKTsKKwkJbWVtY3B5KGF0dHItPnZhbHVlLCBmY3NfcG9ydF9hdHRyLmhvc3RfbmFtZSwgYXR0ci0+bGVuKTsKKwkJLyogdmFyaWFibGUgZmllbGRzIG5lZWQgdG8gYmUgNCBieXRlIGFsaWduZWQgKi8KKwkJYXR0ci0+bGVuID0gZmNfcm91bmR1cChhdHRyLT5sZW4sIHNpemVvZih1MzIpKTsKKwkJY3Vycl9wdHIgKz0gc2l6ZW9mKGF0dHItPnR5cGUpICsgc2l6ZW9mKGF0dHItPmxlbikgKyBhdHRyLT5sZW47CisJCWxlbiArPSBhdHRyLT5sZW47CisJCSsrY291bnQ7CisJCWF0dHItPmxlbiA9CisJCQliZmFfb3NfaHRvbnMoYXR0ci0+bGVuICsgc2l6ZW9mKGF0dHItPnR5cGUpICsKKwkJCQkgICAgIHNpemVvZihhdHRyLT5sZW4pKTsKKworCX0KKworCS8qCisJICogVXBkYXRlIHNpemUgb2YgcGF5bG9hZAorCSAqLworCXBvcnRfYXR0cmliLT5hdHRyX2NvdW50ID0gYmZhX29zX2h0b25sKGNvdW50KTsKKwlsZW4gKz0gKChzaXplb2YoYXR0ci0+dHlwZSkgKyBzaXplb2YoYXR0ci0+bGVuKSkgKiBjb3VudCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljICAgICAgICAgIHUxNgorYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcnBydF9weWxkKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pLAorCQkJCSAgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBydF9zICAgICpycHJ0ID0gKHN0cnVjdCBmZG1pX3JwcnRfcyAqKSBweWxkOworCXUxNiAgICAgICAgbGVuOworCisJcnBydC0+aGJhX2lkID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKTsKKwlycHJ0LT5wb3J0X25hbWUgPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisKKwlsZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9wb3J0YXR0cl9ibG9jayhmZG1pLAorCQkJKHU4ICopICZycHJ0LT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBydC0+aGJhX2lkKSArIHNpemVvZihycHJ0LT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwcnRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQl2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiAgIFJQQSA6IFJlZ2lzdGVyIFBvcnQgQXR0cmlidXRlcy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhKHZvaWQgKmZkbWlfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSBmZG1pX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwl1MTYgICAgICAgIGxlbiwgYXR0cl9sZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICpweWxkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmZmRtaS0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9mZG1pX3NlbmRfcnBhLCBmZG1pKTsKKwkJcmV0dXJuOworCX0KKwlmZG1pLT5mY3hwID0gZmN4cDsKKworCXB5bGQgPSBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApOworCWJmYV9vc19tZW1zZXQocHlsZCwgMCwgRkNfTUFYX1BEVVNaKTsKKworCWxlbiA9IGZjX2ZkbWlfcmVxaGRyX2J1aWxkKCZmY2hzLCBweWxkLCBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJICAgRkRNSV9SUEEpOworCisJYXR0cl9sZW4gPSBiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChmZG1pLAorCQkJKHU4ICopICgoc3RydWN0IGN0X2hkcl9zICopIHB5bGQgKyAxKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4gKyBhdHRyX2xlbiwgJmZjaHMsCisJCSAgICAgIGJmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSwgKHZvaWQgKilmZG1pLAorCQkgICAgICBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlBBX1NFTlQpOworfQorCitzdGF0aWMgICAgICAgICAgdTE2CitiZmFfZmNzX3BvcnRfZmRtaV9idWlsZF9ycGFfcHlsZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCQkgdTggKnB5bGQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gZmRtaS0+bXMtPnBvcnQ7CisJc3RydWN0IGZkbWlfcnBhX3MgICAgICpycGEgPSAoc3RydWN0IGZkbWlfcnBhX3MgKikgcHlsZDsKKwl1MTYgICAgICAgIGxlbjsKKworCXJwYS0+cG9ydF9uYW1lID0gYmZhX2Zjc19wb3J0X2dldF9wd3duKHBvcnQpOworCisJbGVuID0gYmZhX2Zjc19wb3J0X2ZkbWlfYnVpbGRfcG9ydGF0dHJfYmxvY2soZmRtaSwKKwkJCSh1OCAqKSAmcnBhLT5wb3J0X2F0dHJfYmxrKTsKKworCWxlbiArPSBzaXplb2YocnBhLT5wb3J0X25hbWUpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3JwYV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KGZkbWksIEZETUlTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1JTUF9PSyk7CisJCXJldHVybjsKKwl9CisKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICopYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1RJTUVPVVQpOworfQorCit2b2lkCitiZmFfZmNzX2ZkbWlfZ2V0X2hiYWF0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWksCisJCQkgc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zICpoYmFfYXR0cikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBmZG1pLT5tcy0+cG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19kcml2ZXJfaW5mb19zICpkcml2ZXJfaW5mbyA9ICZwb3J0LT5mY3MtPmRyaXZlcl9pbmZvOworCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgYWRhcHRlcl9hdHRyOworCisJYmZhX29zX21lbXNldChoYmFfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfZmNzX2ZkbWlfaGJhX2F0dHJfcykpOworCWJmYV9vc19tZW1zZXQoJmFkYXB0ZXJfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MpKTsKKworCWJmYV9pb2NfZ2V0X2FkYXB0ZXJfYXR0cigmcG9ydC0+ZmNzLT5iZmEtPmlvYywgJmFkYXB0ZXJfYXR0cik7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tYW51ZmFjdHVyZXIsIGFkYXB0ZXJfYXR0ci5tYW51ZmFjdHVyZXIsCisJCXNpemVvZihhZGFwdGVyX2F0dHIubWFudWZhY3R1cmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5zZXJpYWxfbnVtLCBhZGFwdGVyX2F0dHIuc2VyaWFsX251bSwKKwkJc2l6ZW9mKGFkYXB0ZXJfYXR0ci5zZXJpYWxfbnVtKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbCwgYWRhcHRlcl9hdHRyLm1vZGVsLCBzaXplb2YoaGJhX2F0dHItPm1vZGVsKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5tb2RlbF9kZXNjLCBhZGFwdGVyX2F0dHIubW9kZWxfZGVzY3IsCisJCXNpemVvZihoYmFfYXR0ci0+bW9kZWxfZGVzYykpOworCisJc3RybmNweShoYmFfYXR0ci0+aHdfdmVyc2lvbiwgYWRhcHRlcl9hdHRyLmh3X3ZlciwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5od192ZXJzaW9uKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbiwgKGNoYXIgKilkcml2ZXJfaW5mby0+dmVyc2lvbiwKKwkJc2l6ZW9mKGhiYV9hdHRyLT5kcml2ZXJfdmVyc2lvbikpOworCisJc3RybmNweShoYmFfYXR0ci0+b3B0aW9uX3JvbV92ZXIsIGFkYXB0ZXJfYXR0ci5vcHRyb21fdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPm9wdGlvbl9yb21fdmVyKSk7CisKKwlzdHJuY3B5KGhiYV9hdHRyLT5md192ZXJzaW9uLCBhZGFwdGVyX2F0dHIuZndfdmVyLAorCQlzaXplb2YoaGJhX2F0dHItPmZ3X3ZlcnNpb24pKTsKKworCXN0cm5jcHkoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX25hbWUsCisJCXNpemVvZihoYmFfYXR0ci0+b3NfbmFtZSkpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIHBhdGNoIGxldmVsLCBhcHBlbmQgaXQgdG8gdGhlIG9zIG5hbWUgYWxvbmcgd2l0aCBhCisJICogc2VwYXJhdG9yCisJICovCisJaWYgKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoWzBdICE9ICdcMCcpIHsKKwkJc3RybmNhdChoYmFfYXR0ci0+b3NfbmFtZSwgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiwKKwkJCXNpemVvZihCRkFfRkNTX1BPUlRfU1lNQk5BTUVfU0VQQVJBVE9SKSk7CisJCXN0cm5jYXQoaGJhX2F0dHItPm9zX25hbWUsIGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoLAorCQkJc2l6ZW9mKGRyaXZlcl9pbmZvLT5ob3N0X29zX3BhdGNoKSk7CisJfQorCisJaGJhX2F0dHItPm1heF9jdF9weWxkID0gYmZhX29zX2h0b25sKEZDX01BWF9QRFVTWik7CisKK30KKwordm9pZAorYmZhX2Zjc19mZG1pX2dldF9wb3J0YXR0cihzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSwKKwkJCSAgc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IGZkbWktPm1zLT5wb3J0OworCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvID0gJnBvcnQtPmZjcy0+ZHJpdmVyX2luZm87CisJc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgcHBvcnRfYXR0cjsKKworCWJmYV9vc19tZW1zZXQocG9ydF9hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9mY3NfZmRtaV9wb3J0X2F0dHJfcykpOworCisJLyoKKwkgKiBnZXQgcHBvcnQgYXR0cmlidXRlcyBmcm9tIGhhbAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCisJLyoKKwkgKiBnZXQgRkM0IHR5cGUgQml0bWFzaworCSAqLworCWZjX2dldF9mYzR0eXBlX2JpdG1hc2soRkNfVFlQRV9GQ1AsIHBvcnRfYXR0ci0+c3VwcF9mYzRfdHlwZXMpOworCisJLyoKKwkgKiBTdXBwb3J0ZWQgU3BlZWRzCisJICovCisJcG9ydF9hdHRyLT5zdXBwX3NwZWVkID0gYmZhX29zX2h0b25sKEJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMpOworCisJLyoKKwkgKiBDdXJyZW50IFNwZWVkCisJICovCisJcG9ydF9hdHRyLT5jdXJyX3NwZWVkID0gYmZhX29zX2h0b25sKHBwb3J0X2F0dHIuc3BlZWQpOworCisJLyoKKwkgKiBNYXggUERVIFNpemUuCisJICovCisJcG9ydF9hdHRyLT5tYXhfZnJtX3NpemUgPSBiZmFfb3NfaHRvbmwoRkNfTUFYX1BEVVNaKTsKKworCS8qCisJICogT1MgZGV2aWNlIE5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+b3NfZGV2aWNlX25hbWUsIChjaGFyICopZHJpdmVyX2luZm8tPm9zX2RldmljZV9uYW1lLAorCQlzaXplb2YocG9ydF9hdHRyLT5vc19kZXZpY2VfbmFtZSkpOworCisJLyoKKwkgKiBIb3N0IG5hbWUKKwkgKi8KKwlzdHJuY3B5KHBvcnRfYXR0ci0+aG9zdF9uYW1lLCAoY2hhciAqKWRyaXZlcl9pbmZvLT5ob3N0X21hY2hpbmVfbmFtZSwKKwkJc2l6ZW9mKHBvcnRfYXR0ci0+aG9zdF9uYW1lKSk7CisKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfZmRtaV9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgKmZkbWkgPSAmbXMtPmZkbWk7CisKKwlmZG1pLT5tcyA9IG1zOworCWJmYV9zbV9zZXRfc3RhdGUoZmRtaSwgYmZhX2Zjc19wb3J0X2ZkbWlfc21fb2ZmbGluZSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X2ZkbWlfcyAqZmRtaSA9ICZtcy0+ZmRtaTsKKworCWZkbWktPm1zID0gbXM7CisJYmZhX3NtX3NlbmRfZXZlbnQoZmRtaSwgRkRNSVNNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9mZG1pX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zICpmZG1pID0gJm1zLT5mZG1pOworCisJZmRtaS0+bXMgPSBtczsKKwliZmFfc21fc2VuZF9ldmVudChmZG1pLCBGRE1JU01fRVZFTlRfUE9SVF9PTkxJTkUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThjYWMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9BRU5fSF9fCisjZGVmaW5lIF9fQkZBX0FFTl9IX18KKworI2luY2x1ZGUgImRlZnMvYmZhX2RlZnNfYWVuLmgiCisKKyNkZWZpbmUgQkZBX0FFTl9NQVhfRU5UUlkgICA1MTIKKworZXh0ZXJuIHMzMiBiZmFfYWVuX21heF9jZmdfZW50cnk7CitzdHJ1Y3QgYmZhX2Flbl9zIHsKKwl2b2lkCQkqYmZhZDsKKwlzMzIJCW1heF9lbnRyeTsKKwlzMzIJCXdyaXRlX2luZGV4OworCXMzMgkJcmVhZF9pbmRleDsKKwl1MzIJYmZhZF9udW07CisJdTMyCXNlcV9udW07CisJdm9pZAkJKCphZW5fY2Jfbm90aWZ5KSh2b2lkICpiZmFkKTsKKwl2b2lkCQkoKmdldHRpbWVvZmRheSkoc3RydWN0IGJmYV90aW1ldmFsX3MgKnR2KTsKKwlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAJKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2Flbl9lbnRyeV9zCWxpc3RbQkZBX0FFTl9NQVhfRU5UUlldOyAvKiBNdXN0IGJlIHRoZSBsYXN0ICovCit9OworCisKKy8qKgorICogUHVibGljIEFQSXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitiZmFfYWVuX3NldF9tYXhfY2ZnX2VudHJ5KGludCBtYXhfZW50cnkpCit7CisJYmZhX2Flbl9tYXhfY2ZnX2VudHJ5ID0gbWF4X2VudHJ5OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfbWF4X2NmZ19lbnRyeSh2b2lkKQoreworCXJldHVybiBiZmFfYWVuX21heF9jZmdfZW50cnk7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2dldF9tZW1pbmZvKHZvaWQpCit7CisJcmV0dXJuIChzaXplb2Yoc3RydWN0IGJmYV9hZW5fZW50cnlfcykgKiBiZmFfYWVuX2dldF9tYXhfY2ZnX2VudHJ5KCkpOworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfd2koc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPndyaXRlX2luZGV4OworfQorCitzdGF0aWMgaW5saW5lIHMzMgorYmZhX2Flbl9nZXRfcmkoc3RydWN0IGJmYV9hZW5fcyAqYWVuKQoreworCXJldHVybiBhZW4tPnJlYWRfaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgczMyCitiZmFfYWVuX2ZldGNoX2NvdW50KHN0cnVjdCBiZmFfYWVuX3MgKmFlbiwgczMyIHJlYWRfaW5kZXgpCit7CisJcmV0dXJuICgoYWVuLT53cml0ZV9pbmRleCArIGFlbi0+bWF4X2VudHJ5KSAtIHJlYWRfaW5kZXgpCisJCSUgYWVuLT5tYXhfZW50cnk7Cit9CisKK3MzMiBiZmFfYWVuX2luaXQoc3RydWN0IGJmYV9hZW5fcyAqYWVuLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQl2b2lkICpiZmFkLCB1MzIgaW5zdF9pZCwgdm9pZCAoKmFlbl9jYl9ub3RpZnkpKHZvaWQgKiksCisJCXZvaWQgKCpnZXR0aW1lb2ZkYXkpKHN0cnVjdCBiZmFfdGltZXZhbF9zICopKTsKKworczMyIGJmYV9hZW5fcG9zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIGVudW0gYmZhX2Flbl9jYXRlZ29yeSBhZW5fY2F0ZWdvcnksCisJCSAgICAgaW50IGFlbl90eXBlLCB1bmlvbiBiZmFfYWVuX2RhdGFfdSAqYWVuX2RhdGEpOworCitzMzIgYmZhX2Flbl9mZXRjaChzdHJ1Y3QgYmZhX2Flbl9zICphZW4sIHN0cnVjdCBiZmFfYWVuX2VudHJ5X3MgKmFlbl9lbnRyeSwKKwkJICAgICAgczMyIGVudHJ5X3NwYWNlLCBzMzIgcmlpLCBzMzIgKnJpX2FyciwKKwkJICAgICAgczMyIHJpX2Fycl9jbnQpOworCitzMzIgYmZhX2Flbl9nZXRfaW5zdChzdHJ1Y3QgYmZhX2Flbl9zICphZW4pOworCisjZW5kaWYgLyogX19CRkFfQUVOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2FkYXB0ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwZDNlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hZGFwdGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0FEQVBURVIgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9hZGFwdGVyX2hfXworI2RlZmluZQlfX2JmYV9hZW5fYWRhcHRlcl9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX0FERCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX0FERCkKKyNkZWZpbmUgQkZBX0FFTl9BREFQVEVSX1JFTU9WRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQURBUFRFUiwgQkZBX0FEQVBURVJfQUVOX1JFTU9WRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2F1ZGl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjZDdhYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9hdWRpdC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9BVURJVCBNb2R1bGUgKi8KKyNpZm5kZWYJX19iZmFfYWVuX2F1ZGl0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fYXVkaXRfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fQVVESVRfQVVUSF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0FVRElULCBCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFKQorI2RlZmluZSBCRkFfQUVOX0FVRElUX0FVVEhfRElTQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfQVVESVQsIEJGQV9BVURJVF9BRU5fQVVUSF9ESVNBQkxFKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2V0aHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA3ZDBiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9ldGhwb3J0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0VUSFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9ldGhwb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fZXRocG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktVUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfRVRIUE9SVCwgQkZBX0VUSFBPUlRfQUVOX0xJTktVUCkKKyNkZWZpbmUgQkZBX0FFTl9FVEhQT1JUX0xJTktET1dOIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fTElOS0RPV04pCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0VUSFBPUlQsIEJGQV9FVEhQT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fRVRIUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9FVEhQT1JULCBCRkFfRVRIUE9SVF9BRU5fRElTQUJMRSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTM3OGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2lvYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyogbWVzc2FnZXMgZGVmaW5lIGZvciBCRkFfQUVOX0NBVF9JT0MgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9pb2NfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pb2NfaF9fCisKKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgIDxkZWZzL2JmYV9kZWZzX2Flbi5oPgorCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCR09PRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkdPT0QpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0hCRkFJTCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9IQkZBSUwpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0VOQUJMRSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fSU9DX0RJU0FCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lPQywgQkZBX0lPQ19BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9JT0NfRldNSVNNQVRDSCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfSU9DLCBCRkFfSU9DX0FFTl9GV01JU01BVENIKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5faXRuaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Q4ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX2l0bmltLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX0lUTklNIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5faXRuaW1faF9fCisjZGVmaW5lCV9fYmZhX2Flbl9pdG5pbV9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9JVE5JTV9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9JVE5JTSwgQkZBX0lUTklNX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX0lUTklNX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0lUTklNLCBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOGViYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fbHBvcnQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgQkZBX0FFTl9DQVRfTFBPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9scG9ydF9oX18KKyNkZWZpbmUJX19iZmFfYWVuX2xwb3J0X2hfXworCisjaW5jbHVkZSAgPGNzL2JmYV9sb2cuaD4KKyNpbmNsdWRlICA8ZGVmcy9iZmFfZGVmc19hZW4uaD4KKworI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FVyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fT05MSU5FKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX09GRkxJTkUpCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfRElTQ09OTkVDVCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fRElTQ09OTkVDVCkKKyNkZWZpbmUgQkZBX0FFTl9MUE9SVF9ORVdfUFJPUCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1BST1ApCisjZGVmaW5lIEJGQV9BRU5fTFBPUlRfREVMRVRFX1BST1AgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX0xQT1JULCBCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05FV19TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTkVXX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX0RFTEVURV9TVEFOREFSRCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fREVMRVRFX1NUQU5EQVJEKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfRkFCUklDX01BWCBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYKQorI2RlZmluZSBCRkFfQUVOX0xQT1JUX05QSVZfVU5LTk9XTiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfTFBPUlQsIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZDkwNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9hZW4vYmZhX2Flbl9wb3J0LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1BPUlQgTW9kdWxlICovCisjaWZuZGVmCV9fYmZhX2Flbl9wb3J0X2hfXworI2RlZmluZQlfX2JmYV9hZW5fcG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09OTElORSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX09GRkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUkxJUiBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1JMSVIpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfSU5TRVJUIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVCkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9SRU1PVkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfUkVNT1ZFKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfU0ZQX1BPTSBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1NGUF9QT00pCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9FTkFCTEUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9FTkFCTEUpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9ESVNBQkxFIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fRElTQUJMRSkKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0FVVEhfT04gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09OKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfQVVUSF9PRkYgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9BVVRIX09GRikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUKQorI2RlZmluZSBCRkFfQUVOX1BPUlRfUU9TX05FRyBcCisJQkZBX0xPR19DUkVBVEVfSUQoQkZBX0FFTl9DQVRfUE9SVCwgQkZBX1BPUlRfQUVOX1FPU19ORUcpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9GQUJSSUNfTkFNRV9DSEFOR0UgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9GQUJSSUNfTkFNRV9DSEFOR0UpCisjZGVmaW5lIEJGQV9BRU5fUE9SVF9TRlBfQUNDRVNTX0VSUk9SIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9QT1JULCBCRkFfUE9SVF9BRU5fU0ZQX0FDQ0VTU19FUlJPUikKKyNkZWZpbmUgQkZBX0FFTl9QT1JUX1NGUF9VTlNVUFBPUlQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1BPUlQsIEJGQV9QT1JUX0FFTl9TRlBfVU5TVVBQT1JUKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYWVuL2JmYV9hZW5fcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRiZTFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Flbi9iZmFfYWVuX3Jwb3J0LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEJGQV9BRU5fQ0FUX1JQT1JUIE1vZHVsZSAqLworI2lmbmRlZglfX2JmYV9hZW5fcnBvcnRfaF9fCisjZGVmaW5lCV9fYmZhX2Flbl9ycG9ydF9oX18KKworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjaW5jbHVkZSAgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9PTkxJTkUgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX09OTElORSkKKyNkZWZpbmUgQkZBX0FFTl9SUE9SVF9PRkZMSU5FIFwKKwlCRkFfTE9HX0NSRUFURV9JRChCRkFfQUVOX0NBVF9SUE9SVCwgQkZBX1JQT1JUX0FFTl9PRkZMSU5FKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX0RJU0NPTk5FQ1QgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QpCisjZGVmaW5lIEJGQV9BRU5fUlBPUlRfUU9TX1BSSU8gXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX1FPU19QUklPKQorI2RlZmluZSBCRkFfQUVOX1JQT1JUX1FPU19GTE9XSUQgXAorCUJGQV9MT0dfQ1JFQVRFX0lEKEJGQV9BRU5fQ0FUX1JQT1JULCBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRjMTQxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmEuaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9IX18KKyNkZWZpbmUgX19CRkFfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2RlYnVnLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorI2luY2x1ZGUgPGNzL2JmYV9wbG9nLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaW9jZmMuaD4KKyNpbmNsdWRlIDxhZW4vYmZhX2Flbi5oPgorI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworc3RydWN0IGJmYV9zOworI2luY2x1ZGUgPGJmYV9pbnRyX3ByaXYuaD4KKworc3RydWN0IGJmYV9wY2lkZXZfczsKKworLyoqCisgKiBQQ0kgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgQkZBCisgKi8KK3N0cnVjdCBiZmFfcGNpaWRfcyB7CisJdTE2ICAgICAgICBkZXZpY2VfaWQ7CisJdTE2ICAgICAgICB2ZW5kb3JfaWQ7Cit9OworCitleHRlcm4gY2hhciAgICAgYmZhX3ZlcnNpb25bXTsKKworLyoqCisgKiBCRkEgUG93ZXIgTWdtdCBDb21tYW5kcworICovCitlbnVtIGJmYV9wbV9jbWQgeworCUJGQV9QTV9DVExfRDAgPSAwLAorCUJGQV9QTV9DVExfRDEgPSAxLAorCUJGQV9QTV9DVExfRDIgPSAyLAorCUJGQV9QTV9DVExfRDMgPSAzLAorfTsKKworLyoqCisgKiBCRkEgbWVtb3J5IHJlc291cmNlcworICovCitlbnVtIGJmYV9tZW1fdHlwZSB7CisJQkZBX01FTV9UWVBFX0tWQSA9IDEsCS8qISBLZXJuZWwgVmlydHVhbCBNZW1vcnkgKihub24tZG1hLWFibGUpICovCisJQkZBX01FTV9UWVBFX0RNQSA9IDIsCS8qISBETUEtYWJsZSBtZW1vcnkgKi8KKwlCRkFfTUVNX1RZUEVfTUFYID0gQkZBX01FTV9UWVBFX0RNQSwKK307CisKK3N0cnVjdCBiZmFfbWVtX2VsZW1fcyB7CisJZW51bSBiZmFfbWVtX3R5cGUgbWVtX3R5cGU7CS8qICBzZWUgZW51bSBiZmFfbWVtX3R5cGUgCSovCisJdTMyICAgICAgICBtZW1fbGVuOwkvKiAgVG90YWwgTGVuZ3RoIGluIEJ5dGVzCSovCisJdTggICAgICAgCSprdmE7CQkvKiAga2VybmVsIHZpcnR1YWwgYWRkcmVzcwkqLworCXU2NCAgICAgICAgZG1hOwkJLyogIGRtYSBhZGRyZXNzIGlmIERNQSBtZW1vcnkJKi8KKwl1OCAgICAgICAJKmt2YV9jdXJwOwkvKiAga3ZhIGFsbG9jYXRpb24gY3Vyc29yCSovCisJdTY0ICAgICAgICBkbWFfY3VycDsJLyogIGRtYSBhbGxvY2F0aW9uIGN1cnNvcgkqLworfTsKKworc3RydWN0IGJmYV9tZW1pbmZvX3MgeworCXN0cnVjdCBiZmFfbWVtX2VsZW1fcyBtZW1pbmZvW0JGQV9NRU1fVFlQRV9NQVhdOworfTsKKyNkZWZpbmUgYmZhX21lbWluZm9fa3ZhKF9tKQlcCisJKF9tKS0+bWVtaW5mb1tCRkFfTUVNX1RZUEVfS1ZBIC0gMV0ua3ZhX2N1cnAKKyNkZWZpbmUgYmZhX21lbWluZm9fZG1hX3ZpcnQoX20pCVwKKwkoX20pLT5tZW1pbmZvW0JGQV9NRU1fVFlQRV9ETUEgLSAxXS5rdmFfY3VycAorI2RlZmluZSBiZmFfbWVtaW5mb19kbWFfcGh5cyhfbSkJXAorCShfbSktPm1lbWluZm9bQkZBX01FTV9UWVBFX0RNQSAtIDFdLmRtYV9jdXJwCisKKy8qKgorICogR2VuZXJpYyBTY2F0dGVyIEdhdGhlciBFbGVtZW50IHVzZWQgYnkgZHJpdmVyCisgKi8KK3N0cnVjdCBiZmFfc2dlX3MgeworCXUzMiAgICAgICAgc2dfbGVuOworCXZvaWQgICAgICAgICAgICpzZ19hZGRyOworfTsKKworI2RlZmluZSBiZmFfc2dlX3RvX2JlKF9fc2dlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMF0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVswXSk7ICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMV0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVsxXSk7ICAgICAgXAorCSgodTMyICopKF9fc2dlKSlbMl0gPSBiZmFfb3NfaHRvbmwoKCh1MzIgKikoX19zZ2UpKVsyXSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworCisvKgorICogYmZhIHN0YXRzIGludGVyZmFjZXMKKyAqLworI2RlZmluZSBiZmFfc3RhdHMoX21vZCwgX3N0YXRzKQkoX21vZCktPnN0YXRzLl9zdGF0cyArKworCisjZGVmaW5lIGJmYV9pb2NfZ2V0X3N0YXRzKF9fYmZhLCBfX2lvY19zdGF0cykJXAorCWJmYV9pb2NfZmV0Y2hfc3RhdHMoJihfX2JmYSktPmlvYywgX19pb2Nfc3RhdHMpCisjZGVmaW5lIGJmYV9pb2NfY2xlYXJfc3RhdHMoX19iZmEpCVwKKwliZmFfaW9jX2Nscl9zdGF0cygmKF9fYmZhKS0+aW9jKQorCisvKgorICogYmZhIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZ2V0X3BjaWlkcyhzdHJ1Y3QgYmZhX3BjaWlkX3MgKipwY2lpZHMsIGludCAqbnBjaWlkcyk7Cit2b2lkIGJmYV9jZmdfZ2V0X2RlZmF1bHQoc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnKTsKK3ZvaWQgYmZhX2NmZ19nZXRfbWluKHN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MgKmNmZyk7Cit2b2lkIGJmYV9jZmdfZ2V0X21lbWluZm8oc3RydWN0IGJmYV9pb2NmY19jZmdfcyAqY2ZnLAorCQkJc3RydWN0IGJmYV9tZW1pbmZvX3MgKm1lbWluZm8pOwordm9pZCBiZmFfYXR0YWNoKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhX2lvY2ZjX2NmZ19zICpjZmcsCisJCQlzdHJ1Y3QgYmZhX21lbWluZm9fcyAqbWVtaW5mbywKKwkJCXN0cnVjdCBiZmFfcGNpZGV2X3MgKnBjaWRldik7Cit2b2lkIGJmYV9pbml0X3RyYyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCk7Cit2b2lkIGJmYV9pbml0X2xvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkIGJmYV9pbml0X2FlbihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKK3ZvaWQgYmZhX2luaXRfcGxvZyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfZGV0YWNoKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2luaXQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfc3RhcnQoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfc3RvcChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9hdHRhY2hfZmNzKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2NiX2luaXQodm9pZCAqYmZhZCwgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl9zdG9wKHZvaWQgKmJmYWQsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2JfdXBkYXRlcSh2b2lkICpiZmFkLCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworYmZhX2Jvb2xlYW5fdCBiZmFfaW50eChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkIGJmYV9pc3JfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lzcl9kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX21zaXhfZ2V0dmVjcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyICptc2l4X3ZlY3NfYm1hcCwKKwkJCXUzMiAqbnVtX3ZlY3MsIHUzMiAqbWF4X3ZlY19iaXQpOworI2RlZmluZSBiZmFfbXNpeChfX2JmYSwgX192ZWMpIChfX2JmYSktPm1zaXguaGFuZGxlcltfX3ZlY10oX19iZmEsIF9fdmVjKQorCit2b2lkIGJmYV9jb21wX2RlcShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKK3ZvaWQgYmZhX2NvbXBfcHJvY2VzcyhzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKK3ZvaWQgYmZhX2NvbXBfZnJlZShzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGxpc3RfaGVhZCAqY29tcF9xKTsKKwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2lvY190KSAodm9pZCAqY2JhcmcsIGVudW0gYmZhX3N0YXR1cyBzdGF0dXMpOwordm9pZCBiZmFfaW9jZmNfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfaW9jZmNfYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfaW9jZmNfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9pb2NmY19zdGF0c19zICpzdGF0cywKKwkJCWJmYV9jYl9pb2NfdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX2lvY2ZjX2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJYmZhX2NiX2lvY190IGNiZm4sIHZvaWQgKmNiYXJnKTsKK3ZvaWQgYmZhX2dldF9hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgKmlvY19hdHRyKTsKKwordm9pZCBiZmFfYWRhcHRlcl9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXN0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgKmFkX2F0dHIpOwordTY0IGJmYV9hZGFwdGVyX2dldF9pZChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKK2JmYV9zdGF0dXNfdCBiZmFfaW9jZmNfaXNyYXR0cl9zZXQoc3RydWN0IGJmYV9zICpiZmEsCisJCQlzdHJ1Y3QgYmZhX2lvY2ZjX2ludHJfYXR0cl9zICphdHRyKTsKKwordm9pZCBiZmFfaW9jZmNfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2lvY2ZjX2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfaW9jX2F1dG9fcmVjb3ZlcihiZmFfYm9vbGVhbl90IGF1dG9fcmVjb3Zlcik7Cit2b2lkIGJmYV9jYl9pb2NfZGlzYWJsZSh2b2lkICpiZmFkKTsKK3ZvaWQgYmZhX3RpbWVyX3RpY2soc3RydWN0IGJmYV9zICpiZmEpOworI2RlZmluZSBiZmFfdGltZXJfc3RhcnQoX2JmYSwgX3RpbWVyLCBfdGltZXJjYiwgX2FyZywgX3RpbWVvdXQpCVwKKwliZmFfdGltZXJfYmVnaW4oJihfYmZhKS0+dGltZXJfbW9kLCBfdGltZXIsIF90aW1lcmNiLCBfYXJnLCBfdGltZW91dCkKKworLyoKKyAqIEJGQSBkZWJ1ZyBBUEkgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZGVidWdfZnd0cmMoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnRyY2RhdGEsIGludCAqdHJjbGVuKTsKK2JmYV9zdGF0dXNfdCBiZmFfZGVidWdfZndzYXZlKHN0cnVjdCBiZmFfcyAqYmZhLCB2b2lkICp0cmNkYXRhLCBpbnQgKnRyY2xlbik7CisKKyNpbmNsdWRlICJiZmFfcHJpdi5oIgorCisjZW5kaWYgLyogX19CRkFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3ODk3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwaW0uaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9GQ1BJTV9IX18KKworI2luY2x1ZGUgPGJmYS5oPgorI2luY2x1ZGUgPGJmYV9zdmMuaD4KKyNpbmNsdWRlIDxiZmkvYmZpX2ZjcGltLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19mY3BpbS5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV9pdG5pbV9zOworc3RydWN0IGJmYV9pb2ltX3M7CitzdHJ1Y3QgYmZhX3Rza2ltX3M7CitzdHJ1Y3QgYmZhZF9pb2ltX3M7CitzdHJ1Y3QgYmZhZF90c2tpbV9zOworCisvKgorICogYmZhIGZjcGltIG1vZHVsZSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQJCWJmYV9mY3BpbV9wYXRoX3Rvdl9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBwYXRoX3Rvdik7Cit1MTYJYmZhX2ZjcGltX3BhdGhfdG92X2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit2b2lkCQliZmFfZmNwaW1fcWRlcHRoX3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHFfZGVwdGgpOwordTE2CWJmYV9mY3BpbV9xZGVwdGhfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNwaW1fZ2V0X21vZHN0YXRzKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9mY3BpbV9zdGF0c19zICptb2RzdGF0cyk7CitiZmFfc3RhdHVzX3QgYmZhX2ZjcGltX2Nscl9tb2RzdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgaXRuaW0gQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2l0bmltX3MgKmJmYV9pdG5pbV9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQsIHZvaWQgKml0bmltKTsKK3ZvaWQJCWJmYV9pdG5pbV9kZWxldGUoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSk7Cit2b2lkCQliZmFfaXRuaW1fb25saW5lKHN0cnVjdCBiZmFfaXRuaW1fcyAqaXRuaW0sCisJCQkJIGJmYV9ib29sZWFuX3Qgc2VxX3JlYyk7Cit2b2lkCQliZmFfaXRuaW1fb2ZmbGluZShzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKK3ZvaWQJCWJmYV9pdG5pbV9nZXRfc3RhdHMoc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1faGFsX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQJCWJmYV9pdG5pbV9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltKTsKKworCisvKioKKyAqIAkJQkZBIGNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9pdG5pbV9vbmxpbmUoKS4KKyAqCisgKiBAcGFyYW1baW5dCQlpdG5pbQkJRkNTIG9yIGRyaXZlciBpdG5pbSBpbnN0YW5jZQorICoKKyAqIHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fb25saW5lKHZvaWQgKml0bmltKTsKKworLyoqCisgKiAJCUJGQSBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfaXRuaW1fb2ZmbGluZSgpLgorICoKKyAqIEBwYXJhbVtpbl0JCWl0bmltCQlGQ1Mgb3IgZHJpdmVyIGl0bmltIGluc3RhbmNlCisgKgorICogcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9jYl9pdG5pbV9vZmZsaW5lKHZvaWQgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fdG92X2JlZ2luKHZvaWQgKml0bmltKTsKK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaXRuaW1fdG92KHZvaWQgKml0bmltKTsKKworLyoqCisgKiAJCUJGQSBub3RpZmljYXRpb24gdG8gRkNTL2RyaXZlciBmb3Igc2Vjb25kIGxldmVsIGVycm9yIHJlY292ZXJ5LgorICoKKyAqIEF0bGVhc3Qgb25lIEkvTyByZXF1ZXN0IGhhcyB0aW1lZG91dCBhbmQgdGFyZ2V0IGlzIHVucmVzcG9uc2l2ZSB0bworICogcmVwZWF0ZWQgYWJvcnQgcmVxdWVzdHMuIFNlY29uZCBsZXZlbCBlcnJvciByZWNvdmVyeSBzaG91bGQgYmUgaW5pdGlhdGVkCisgKiBieSBzdGFydGluZyBpbXBsaWNpdCBsb2dvdXQgYW5kIHJlY292ZXJ5IHByb2NlZHVyZXMuCisgKgorICogQHBhcmFtW2luXQkJaXRuaW0JCUZDUyBvciBkcml2ZXIgaXRuaW0gaW5zdGFuY2UKKyAqCisgKiByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2l0bmltX3NsZXIodm9pZCAqaXRuaW0pOworCisvKgorICogYmZhIGlvaW0gQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2lvaW1fcwkqYmZhX2lvaW1fYWxsb2Moc3RydWN0IGJmYV9zICpiZmEsCisJCQkJCXN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvLAorCQkJCQlzdHJ1Y3QgYmZhX2l0bmltX3MgKml0bmltLAorCQkJCQl1MTYgbnNnbGVzKTsKKwordm9pZAkJYmZhX2lvaW1fZnJlZShzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkCQliZmFfaW9pbV9zdGFydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkCQliZmFfaW9pbV9hYm9ydChzdHJ1Y3QgYmZhX2lvaW1fcyAqaW9pbSk7Cit2b2lkIAkJYmZhX2lvaW1fZGVsYXllZF9jb21wKHN0cnVjdCBiZmFfaW9pbV9zICppb2ltLAorCQkJCSAgICAgIGJmYV9ib29sZWFuX3QgaW90b3YpOworCisKKy8qKgorICogCQlJL08gY29tcGxldGlvbiBub3RpZmljYXRpb24uCisgKgorICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHN0cnVjdHVyZQorICogQHBhcmFtW2luXQkJaW9fc3RhdHVzCQlJTyBjb21wbGV0aW9uIHN0YXR1cworICogQHBhcmFtW2luXQkJc2NzaV9zdGF0dXMJCVNDU0kgc3RhdHVzIHJldHVybmVkIGJ5IHRhcmdldAorICogQHBhcmFtW2luXQkJc25zX2xlbgkJCVNDU0kgc2Vuc2UgbGVuZ3RoLCAwIGlmIG5vbmUKKyAqIEBwYXJhbVtpbl0JCXNuc19pbmZvCQlTQ1NJIHNlbnNlIGRhdGEsIGlmIGFueQorICogQHBhcmFtW2luXQkJcmVzaWR1ZQkJCVJlc2lkdWFsIGxlbmd0aAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2lvaW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbywKKwkJCQkgIGVudW0gYmZpX2lvaW1fc3RhdHVzIGlvX3N0YXR1cywKKwkJCQkgIHU4IHNjc2lfc3RhdHVzLCBpbnQgc25zX2xlbiwKKwkJCQkgIHU4ICpzbnNfaW5mbywgczMyIHJlc2lkdWUpOworCisvKioKKyAqIAkJSS9PIGdvb2QgY29tcGxldGlvbiBub3RpZmljYXRpb24uCisgKgorICogQHBhcmFtW2luXQkJZGlvCQkJZHJpdmVyIElPIHN0cnVjdHVyZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2NiX2lvaW1fZ29vZF9jb21wKHZvaWQgKmJmYWQsIHN0cnVjdCBiZmFkX2lvaW1fcyAqZGlvKTsKKworLyoqCisgKiAJCUkvTyBhYm9ydCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbgorICoKKyAqIEBwYXJhbVtpbl0JCWRpbwkJCWRyaXZlciBJTyB0aGF0IHdhcyBhYm9ydGVkCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfY2JfaW9pbV9hYm9ydCh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF9pb2ltX3MgKmRpbyk7Cit2b2lkCQliZmFfY2JfaW9pbV9yZXNmcmVlKHZvaWQgKmhjYl9iZmFkKTsKKwordm9pZCAJCQliZmFfY2JfaW9pbV9yZXNmcmVlKHZvaWQgKmhjYl9iZmFkKTsKKworLyoKKyAqIGJmYSB0c2tpbSBBUEkgZnVuY3Rpb25zCisgKi8KK3N0cnVjdCBiZmFfdHNraW1fcwkqYmZhX3Rza2ltX2FsbG9jKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJCQlzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrKTsKK3ZvaWQJCWJmYV90c2tpbV9mcmVlKHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0pOwordm9pZAkJYmZhX3Rza2ltX3N0YXJ0KHN0cnVjdCBiZmFfdHNraW1fcyAqdHNraW0sCisJCQkJc3RydWN0IGJmYV9pdG5pbV9zICppdG5pbSwgbHVuX3QgbHVuLAorCQkJCWVudW0gZmNwX3RtX2NtbmQgdG0sIHU4IHRfc2Vjcyk7Cit2b2lkCQliZmFfY2JfdHNraW1fZG9uZSh2b2lkICpiZmFkLCBzdHJ1Y3QgYmZhZF90c2tpbV9zICpkdHNrLAorCQkJCSAgZW51bSBiZmlfdHNraW1fc3RhdHVzIHRza19zdGF0dXMpOworCisjZW5kaWYgLyogX19CRkFfRkNQSU1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwdG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfZmNwdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmZmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmYV9mY3B0bS5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1BUTV9IX18KKyNkZWZpbmUgX19CRkFfRkNQVE1fSF9fCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZpL2JmaV9mY3B0bS5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV90aW5fczsKK3N0cnVjdCBiZmFfaW90bV9zOworc3RydWN0IGJmYV90c2t0bV9zOworCisvKgorICogYmZhIGZjcHRtIG1vZHVsZSBBUEkgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2ZjcHRtX3BhdGhfdG92X3NldChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTE2IHBhdGhfdG92KTsKK3UxNiBiZmFfZmNwdG1fcGF0aF90b3ZfZ2V0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX2ZjcHRtX3FkZXB0aF9zZXQoc3RydWN0IGJmYV9zICpiZmEsIHUxNiBxX2RlcHRoKTsKK3UxNiBiZmFfZmNwdG1fcWRlcHRoX2dldChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgdGluIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfdGluX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3Rpbl9zICp0aW4sIHN0cnVjdCBiZmFfdGluX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQgYmZhX3Rpbl9jbGVhcl9zdGF0cyhzdHJ1Y3QgYmZhX3Rpbl9zICp0aW4pOworCisjZW5kaWYgLyogX19CRkFfRkNQVE1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfc3ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODBiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3N2Yy5oCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1NWQ19IX18KKyNkZWZpbmUgX19CRkFfU1ZDX0hfXworCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RydWN0IGJmYV9mY3hwX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19xb3MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfc20uaD4KKyNpbmNsdWRlIDxiZmEuaD4KKworLyoqCisgKiAJCUJGQSBycG9ydCBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgeworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHJjdiBwZHUgc2l6ZSAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwaWQgOiAyNCwJLyogIHJlbW90ZSBwb3J0IElEICAgICAgICAgICAgICAgICAqLworCQkJbHBfdGFnIDogODsKKwl1MzIgICAgICAgIGxvY2FsX3BpZCA6IDI0LAkvKiAgbG9jYWwgcG9ydCBJRAkJICAgICovCisJCQljaXNjIDogODsJLyogIENJUk8gc3VwcG9ydGVkCQkgICAgKi8KKwl1OCAgICAgICAgIGZjX2NsYXNzOwkvKiAgc3VwcG9ydGVkIEZDIGNsYXNzZXMuIGVudW0gZmNfY29zICovCisJdTggICAgICAgICB2Zl9lbjsJCS8qICB2aXJ0dWFsIGZhYnJpYyBlbmFibGUgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElEICAgICAgICAgICAgICAqLworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkOwkvKiAgUnBvcnQncyBjdXJyZW50IHNwZWVkCSAgICAqLworfTsKKworLyoqCisgKiBCRkEgcnBvcnQgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGJmYV9ycG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBxZTsJICAvKiAgcXVldWUgZWxlbWVudCAqLworCWJmYV9zbV90CSAgICAgIHNtOyAJICAvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfcyAgICAgICAgICAqYmZhOwkgIC8qICBiYWNrcG9pbnRlciB0byBCRkEgKi8KKwl2b2lkICAgICAgICAgICAgICAgICAgKnJwb3J0X2RydjsgLyogIGZjcy9kcml2ZXIgcnBvcnQgb2JqZWN0ICovCisJdTE2ICAgICAgICAgICAgICBmd19oYW5kbGU7IC8qICBmaXJtd2FyZSBycG9ydCBoYW5kbGUgKi8KKwl1MTYgICAgICAgICAgICAgIHJwb3J0X3RhZzsgLyogIEJGQSBycG9ydCB0YWcgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X2luZm9fcyBycG9ydF9pbmZvOyAvKiAgcnBvcnQgaW5mbyBmcm9tICpmY3MvZHJpdmVyICovCisJc3RydWN0IGJmYV9yZXFxX3dhaXRfcyByZXFxX3dhaXQ7IC8qICB0byB3YWl0IGZvciByb29tIGluIHJlcXEgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkgLyogIEJGQSBjYWxsYmFjayBxZWxlbSAqLworCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3Mgc3RhdHM7IC8qICBCRkEgcnBvcnQgc3RhdGlzdGljcyAgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgIHFvc19hdHRyOworCXVuaW9uIGEgeworCQliZmFfc3RhdHVzX3QgICAgc3RhdHVzOwkgLyogIGYvdyBzdGF0dXMgKi8KKwkJdm9pZCAgICAgICAgICAgICpmd19tc2c7IC8qICBRb1Mgc2NuIGV2ZW50ICovCisJfSBldmVudF9hcmc7Cit9OworI2RlZmluZSBCRkFfUlBPUlRfRkNfQ09TKF9ycG9ydCkJKChfcnBvcnQpLT5ycG9ydF9pbmZvLmZjX2NsYXNzKQorCisvKioKKyAqIFNlbmQgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2NiX2ZjeHBfc2VuZF90KSAodm9pZCAqYmZhZF9mY3hwLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCXZvaWQgKmNiYXJnLCBlbnVtIGJmYV9zdGF0dXMgcmVxX3N0YXR1cywKKwkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworCisvKioKKyAqIEJGQSBmY3hwIGFsbG9jYXRpb24gKGFzeW5jaHJvbm91cykKKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2ZjeHBfYWxsb2NfY2Jmbl90KSAodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKworc3RydWN0IGJmYV9mY3hwX3dxZV9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CisJYmZhX2ZjeHBfYWxsb2NfY2Jmbl90ICBhbGxvY19jYmZuOworCXZvaWQgICAgICAgICAgICphbGxvY19jYmFyZzsKK307CisKK3R5cGVkZWYgdTY0ICgqYmZhX2ZjeHBfZ2V0X3NnYWRkcl90KSAodm9pZCAqYmZhZF9mY3hwLCBpbnQgc2dlaWQpOwordHlwZWRlZiB1MzIgKCpiZmFfZmN4cF9nZXRfc2dsZW5fdCkgKHZvaWQgKmJmYWRfZmN4cCwgaW50IHNnZWlkKTsKKworI2RlZmluZSBCRkFfVUZfQlVGU1oJKDIgKiAxMDI0ICsgMjU2KQorCisvKioKKyAqIEB0b2RvIHByaXZhdGUKKyAqLworc3RydWN0IGJmYV91Zl9idWZfcyB7CisJdTggICAgICAgICBkW0JGQV9VRl9CVUZTWl07Cit9OworCisKK3N0cnVjdCBiZmFfdWZfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsJCS8qICBxdWV1ZSBlbGVtZW50CSAgKi8KKwlzdHJ1Y3QgYmZhX3MJKmJmYTsJCS8qICBiZmEgaW5zdGFuY2UJICAqLworCXUxNiAgICAgICAgdWZfdGFnOwkJLyogIGlkZW50aWZ5aW5nIHRhZyBmL3cgbWVzc2FnZXMgKi8KKwl1MTYgICAgICAgIHZmX2lkOworCXUxNiAgICAgICAgc3JjX3Jwb3J0X2hhbmRsZTsKKwl1MTYgICAgICAgIHJzdmQ7CisJdTggICAgICAgIAkqZGF0YV9wdHI7CisJdTE2ICAgICAgICBkYXRhX2xlbjsJLyogIGFjdHVhbCByZWNlaXZlIGxlbmd0aAkgICovCisJdTE2ICAgICAgICBwYl9sZW47CQkvKiAgcG9zdGVkIGJ1ZmZlciBsZW5ndGgJICAqLworCXZvaWQgICAgICAgICAgIAkqYnVmX2t2YTsJLyogIGJ1ZmZlciB2aXJ0dWFsIGFkZHJlc3MJICAqLworCXU2NCAgICAgICAgYnVmX3BhOwkJLyogIGJ1ZmZlciBwaHlzaWNhbCBhZGRyZXNzCSAgKi8KKwlzdHJ1Y3QgYmZhX2NiX3FlX3MgICAgaGNiX3FlOwkvKiAgY29tcDogQkZBIGNvbXAgcWVsZW0JICAqLworCXN0cnVjdCBiZmFfc2dlX3MgICAJc2dlc1tCRklfU0dFX0lOTElORV9NQVhdOworfTsKKwordHlwZWRlZiB2b2lkICgqYmZhX2NiX3Bwb3J0X3QpICh2b2lkICpjYmFyZywgZW51bSBiZmFfc3RhdHVzIHN0YXR1cyk7CisKKy8qKgorICogYmZhIGxwb3J0IGxvZ2luL2xvZ291dCBzZXJ2aWNlIGludGVyZmFjZQorICovCitzdHJ1Y3QgYmZhX2xwc19zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXFlOwkJLyogIHF1ZXVlIGVsZW1lbnQgKi8KKwlzdHJ1Y3QgYmZhX3MJKmJmYTsJCS8qICBwYXJlbnQgYmZhIGluc3RhbmNlCSovCisJYmZhX3NtX3QJc207CQkvKiAgZmluaXRlIHN0YXRlIG1hY2hpbmUJKi8KKwl1OAkJbHBfdGFnOwkJLyogIGxwb3J0IHRhZwkJCSovCisJdTgJCXJlcXE7CQkvKiAgbHBvcnQgcmVxdWVzdCBxdWV1ZQkqLworCXU4CQlhbHBhOwkJLyogIEFMUEEgZm9yIGxvb3AgdG9wb2xvZ2llcwkqLworCXUzMglscF9waWQ7CQkvKiAgbHBvcnQgcG9ydCBJRAkJKi8KKwliZmFfYm9vbGVhbl90CWZkaXNjOwkJLyogIHNlbmQgRkRJU0MgaW5zdGVhZCBvZiBGTE9HSSovCisJYmZhX2Jvb2xlYW5fdAlhdXRoX2VuOwkvKiAgZW5hYmxlIGF1dGhlbnRpY2F0aW9uCSovCisJYmZhX2Jvb2xlYW5fdAlhdXRoX3JlcTsJLyogIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkCSovCisJYmZhX2Jvb2xlYW5fdAlucGl2X2VuOwkvKiAgTlBJViBpcyBhbGxvd2VkIGJ5IHBlZXIJKi8KKwliZmFfYm9vbGVhbl90CWZwb3J0OwkJLyogIGF0dGFjaGVkIHBlZXIgaXMgRl9QT1JUCSovCisJYmZhX2Jvb2xlYW5fdAlicmNkX3N3aXRjaDsvKiAgYXR0YWNoZWQgcGVlciBpcyBicmNkIHN3aXRjaAkqLworCWJmYV9zdGF0dXNfdAlzdGF0dXM7CQkvKiAgbG9naW4gc3RhdHVzCQkqLworCXUxNglwZHVzejsJCS8qICBtYXggcmVjZWl2ZSBQRFUgc2l6ZSAJKi8KKwl1MTYJcHJfYmJjcmVkOwkvKiAgQkJfQ1JFRElUIGZyb20gcGVlciAJKi8KKwl1OAkJbHNyanRfcnNuOwkvKiAgTFNSSlQgcmVhc29uCQkqLworCXU4CQlsc3JqdF9leHBsOwkvKiAgTFNSSlQgZXhwbGFuYXRpb24JCSovCisJd3duX3QJCXB3d247CQkvKiAgcG9ydCB3d24gb2YgbHBvcnQJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSB3d24gb2YgbHBvcnQJCSovCisJd3duX3QJCXByX3B3d247CS8qICBwb3J0IHd3biBvZiBscG9ydCBwZWVyCSovCisJd3duX3QJCXByX253d247CS8qICBub2RlIHd3biBvZiBscG9ydCBwZWVyCSovCisJbWFjX3QJCWxwX21hYzsJCS8qICBmcG1hL3NwbWEgTUFDIGZvciBscG9ydAkqLworCW1hY190CQlmY2ZfbWFjOwkvKiAgRkNGIE1BQyBvZiBscG9ydAkJKi8KKwlzdHJ1Y3QgYmZhX3JlcXFfd2FpdF9zCXdxZTsJLyogIHJlcXVlc3Qgd2FpdCBxdWV1ZSBlbGVtZW50CSovCisJdm9pZAkJKnVhcmc7CQkvKiAgdXNlciBjYWxsYmFjayBhcmcJCSovCisJc3RydWN0IGJmYV9jYl9xZV9zIGhjYl9xZTsJLyogIGNvbXA6IGNhbGxiYWNrIHFlbGVtCSovCisJc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgKmxvZ2lucnNwOworCWJmYV9lcHJvdG9fc3RhdHVzX3QJZXh0X3N0YXR1czsKK307CisKKy8qCisgKiBiZmEgcHBvcnQgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2VuYWJsZShzdHJ1Y3QgYmZhX3MgKmJmYSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2Rpc2FibGUoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfc3BlZWQoc3RydWN0IGJmYV9zICpiZmEsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfcHBvcnRfZ2V0X3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgdG9wbyk7CitlbnVtIGJmYV9wcG9ydF90b3BvbG9neSBiZmFfcHBvcnRfZ2V0X3RvcG9sb2d5KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2ZnX2hhcmRhbHBhKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBhbHBhKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X2dldF9oYXJkYWxwYShzdHJ1Y3QgYmZhX3MgKmJmYSwgdTggKmFscGEpOwordTggYmZhX3Bwb3J0X2dldF9teWFscGEoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jbHJfaGFyZGFscGEoc3RydWN0IGJmYV9zICpiZmEpOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF9jZmdfbWF4ZnJzaXplKHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgbWF4c2l6ZSk7Cit1MTYgYmZhX3Bwb3J0X2dldF9tYXhmcnNpemUoc3RydWN0IGJmYV9zICpiZmEpOwordTMyIGJmYV9wcG9ydF9teXBpZChzdHJ1Y3QgYmZhX3MgKmJmYSk7Cit1OCBiZmFfcHBvcnRfZ2V0X3J4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfdHJ1bmtfZW5hYmxlKHN0cnVjdCBiZmFfcyAqYmZhLCB1OCBiaXRtYXApOworYmZhX3N0YXR1c190IGJmYV9wcG9ydF90cnVua19kaXNhYmxlKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X3RydW5rX3F1ZXJ5KHN0cnVjdCBiZmFfcyAqYmZhLCB1MzIgKmJpdG1hcCk7Cit2b2lkIGJmYV9wcG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9wcG9ydF9hdHRyX3MgKmF0dHIpOword3duX3QgYmZhX3Bwb3J0X2dldF93d24oc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgbm9kZSk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCWJmYV9jYl9wcG9ydF90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfcHBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsIGJmYV9jYl9wcG9ydF90IGNiZm4sCisJCQl2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV9wcG9ydF9ldmVudF9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCXZvaWQgKCpldmVudF9jYmZuKSAodm9pZCAqY2JhcmcsCisJCQliZmFfcHBvcnRfZXZlbnRfdCBldmVudCksIHZvaWQgKmV2ZW50X2NiYXJnKTsKK2JmYV9ib29sZWFuX3QgYmZhX3Bwb3J0X2lzX2Rpc2FibGVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKK3ZvaWQgYmZhX3Bwb3J0X2NmZ19xb3Moc3RydWN0IGJmYV9zICpiZmEsIGJmYV9ib29sZWFuX3Qgb25fb2ZmKTsKK3ZvaWQgYmZhX3Bwb3J0X2NmZ19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IG9uX29mZik7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NmZ19yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWQpOworZW51bSBiZmFfcHBvcnRfc3BlZWQgYmZhX3Bwb3J0X2dldF9yYXRlbGltX3NwZWVkKHN0cnVjdCBiZmFfcyAqYmZhKTsKKwordm9pZCBiZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KHN0cnVjdCBiZmFfcyAqYmZhLCB1MTYgdHhfYmJjcmVkaXQpOwordm9pZCBiZmFfcHBvcnRfYnVzeShzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2Jvb2xlYW5fdCBzdGF0dXMpOwordm9pZCBiZmFfcHBvcnRfYmVhY29uKHN0cnVjdCBiZmFfcyAqYmZhLCBiZmFfYm9vbGVhbl90IGJlYWNvbiwKKwkJCWJmYV9ib29sZWFuX3QgbGlua19lMmVfYmVhY29uKTsKK3ZvaWQgYmZhX2NiX3Bwb3J0X2V2ZW50KHZvaWQgKmNiYXJnLCBiZmFfcHBvcnRfZXZlbnRfdCBldmVudCk7Cit2b2lkIGJmYV9wcG9ydF9xb3NfZ2V0X2F0dHIoc3RydWN0IGJmYV9zICpiZmEsIHN0cnVjdCBiZmFfcW9zX2F0dHJfcyAqcW9zX2F0dHIpOwordm9pZCBiZmFfcHBvcnRfcW9zX2dldF92Y19hdHRyKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9xb3NfdmNfYXR0cl9zICpxb3NfdmNfYXR0cik7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2dldF9xb3Nfc3RhdHMoc3RydWN0IGJmYV9zICpiZmEsCisJCQl1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSAqc3RhdHMsCisJCQliZmFfY2JfcHBvcnRfdCBjYmZuLCB2b2lkICpjYmFyZyk7CitiZmFfc3RhdHVzX3QgYmZhX3Bwb3J0X2NsZWFyX3Fvc19zdGF0cyhzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3Bwb3J0X3QgY2JmbiwKKwkJCXZvaWQgKmNiYXJnKTsKK2JmYV9ib29sZWFuX3QgICAgIGJmYV9wcG9ydF9pc19yYXRlbGltKHN0cnVjdCBiZmFfcyAqYmZhKTsKK2JmYV9ib29sZWFuX3QJYmZhX3Bwb3J0X2lzX2xpbmt1cChzdHJ1Y3QgYmZhX3MgKmJmYSk7CisKKy8qCisgKiBiZmEgcnBvcnQgQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydF9jcmVhdGUoc3RydWN0IGJmYV9zICpiZmEsIHZvaWQgKnJwb3J0X2Rydik7Cit2b2lkIGJmYV9ycG9ydF9kZWxldGUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9ycG9ydF9vbmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfaW5mb19zICpycG9ydF9pbmZvKTsKK3ZvaWQgYmZhX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9ycG9ydF9zcGVlZChzdHJ1Y3QgYmZhX3Jwb3J0X3MgKnJwb3J0LCBlbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCk7Cit2b2lkIGJmYV9ycG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MgKnN0YXRzKTsKK3ZvaWQgYmZhX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcnBvcnRfcyAqcnBvcnQpOwordm9pZCBiZmFfY2JfcnBvcnRfb25saW5lKHZvaWQgKnJwb3J0KTsKK3ZvaWQgYmZhX2NiX3Jwb3J0X29mZmxpbmUodm9pZCAqcnBvcnQpOwordm9pZCBiZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQodm9pZCAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cik7Cit2b2lkIGJmYV9jYl9ycG9ydF9xb3Nfc2NuX3ByaW8odm9pZCAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG5ld19xb3NfYXR0cik7Cit2b2lkIGJmYV9ycG9ydF9nZXRfcW9zX2F0dHIoc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyAqcW9zX2F0dHIpOworCisvKgorICogYmZhIGZjeHAgQVBJIGZ1bmN0aW9ucworICovCitzdHJ1Y3QgYmZhX2ZjeHBfcyAqYmZhX2ZjeHBfYWxsb2Modm9pZCAqYmZhZF9mY3hwLCBzdHJ1Y3QgYmZhX3MgKmJmYSwKKwkJCWludCBucmVxX3NnbGVzLCBpbnQgbnJzcF9zZ2xlcywKKwkJCWJmYV9mY3hwX2dldF9zZ2FkZHJfdCBnZXRfcmVxX3NnYSwKKwkJCWJmYV9mY3hwX2dldF9zZ2xlbl90IGdldF9yZXFfc2dsZW4sCisJCQliZmFfZmN4cF9nZXRfc2dhZGRyX3QgZ2V0X3JzcF9zZ2EsCisJCQliZmFfZmN4cF9nZXRfc2dsZW5fdCBnZXRfcnNwX3NnbGVuKTsKK3ZvaWQgYmZhX2ZjeHBfYWxsb2Nfd2FpdChzdHJ1Y3QgYmZhX3MgKmJmYSwgc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUsCisJCQliZmFfZmN4cF9hbGxvY19jYmZuX3QgYWxsb2NfY2Jmbiwgdm9pZCAqY2JhcmcpOwordm9pZCBiZmFfZmN4cF93YWxsb2NfY2FuY2VsKHN0cnVjdCBiZmFfcyAqYmZhLAorCQkJc3RydWN0IGJmYV9mY3hwX3dxZV9zICp3cWUpOwordm9pZCBiZmFfZmN4cF9kaXNjYXJkKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCAqYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCk7Cit2b2lkICpiZmFfZmN4cF9nZXRfcnNwYnVmKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCBiZmFfZmN4cF9mcmVlKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKKwordm9pZCBiZmFfZmN4cF9zZW5kKHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJc3RydWN0IGJmYV9ycG9ydF9zICpycG9ydCwgdTE2IHZmX2lkLCB1OCBscF90YWcsCisJCQliZmFfYm9vbGVhbl90IGN0cywgZW51bSBmY19jb3MgY29zLAorCQkJdTMyIHJlcWxlbiwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCWJmYV9jYl9mY3hwX3NlbmRfdCBjYmZuLAorCQkJdm9pZCAqY2JhcmcsCisJCQl1MzIgcnNwX21heGxlbiwgdTggcnNwX3RpbWVvdXQpOworYmZhX3N0YXR1c190IGJmYV9mY3hwX2Fib3J0KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKK3UzMiAgICAgICAgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZnN6KHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwKTsKK3UzMgliZmFfZmN4cF9nZXRfbWF4cnNwKHN0cnVjdCBiZmFfcyAqYmZhKTsKKworc3RhdGljIGlubGluZSB2b2lkICoKK2JmYV91Zl9nZXRfZnJtYnVmKHN0cnVjdCBiZmFfdWZfcyAqdWYpCit7CisJcmV0dXJuIHVmLT5kYXRhX3B0cjsKK30KKworc3RhdGljIGlubGluZSAgIHUxNgorYmZhX3VmX2dldF9mcm1sZW4oc3RydWN0IGJmYV91Zl9zICp1ZikKK3sKKwlyZXR1cm4gdWYtPmRhdGFfbGVuOworfQorCisvKioKKyAqICAgICAgQ2FsbGJhY2sgcHJvdG90eXBlIGZvciB1bnNvbGljaXRlZCBmcmFtZSByZWNlaXZlIGhhbmRsZXIuCisgKgorICogQHBhcmFtW2luXSAgICAgICAgICAgY2JhcmcgICAgICAgICAgIGNhbGxiYWNrIGFyZyBmb3IgcmVjZWl2ZSBoYW5kbGVyCisgKiBAcGFyYW1baW5dICAgICAgICAgICB1ZiAgICAgICAgICAgICAgdW5zb2xpY2l0ZWQgZnJhbWUgZGVzY3JpcHRvcgorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfY2JfdWZfcmVjdl90KSAodm9pZCAqY2JhcmcsIHN0cnVjdCBiZmFfdWZfcyAqdWYpOworCisvKgorICogYmZhIHVmIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfdWZfcmVjdl9yZWdpc3RlcihzdHJ1Y3QgYmZhX3MgKmJmYSwgYmZhX2NiX3VmX3JlY3ZfdCB1ZnJlY3YsCisJCQl2b2lkICpjYmFyZyk7Cit2b2lkIGJmYV91Zl9mcmVlKHN0cnVjdCBiZmFfdWZfcyAqdWYpOworCisvKioKKyAqIGJmYSBscG9ydCBzZXJ2aWNlIGFwaQorICovCisKK3N0cnVjdCBiZmFfbHBzX3MgKmJmYV9scHNfYWxsb2Moc3RydWN0IGJmYV9zICpiZmEpOwordm9pZCBiZmFfbHBzX2RlbGV0ZShzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfbHBzX2Rpc2NhcmQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2xwc19mbG9naShzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHU4IGFscGEsIHUxNiBwZHVzeiwKKwkJICAgd3duX3QgcHd3biwgd3duX3Qgbnd3biwgYmZhX2Jvb2xlYW5fdCBhdXRoX2VuKTsKK3ZvaWQgYmZhX2xwc19mZGlzYyhzdHJ1Y3QgYmZhX2xwc19zICpscHMsIHZvaWQgKnVhcmcsIHUxNiBwZHVzeiwgd3duX3QgcHd3biwKKwkJICAgd3duX3Qgbnd3bik7Cit2b2lkIGJmYV9scHNfZmxvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3ZvaWQgYmZhX2xwc19mZGlzY2xvZ28oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X3RhZyhzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX25waXZfZW4oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK2JmYV9ib29sZWFuX3QgYmZhX2xwc19pc19mcG9ydChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Jvb2xlYW5fdCBiZmFfbHBzX2lzX2JyY2RfZmFicmljKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7CitiZmFfYm9vbGVhbl90IGJmYV9scHNfaXNfYXV0aHJlcShzdHJ1Y3QgYmZhX2xwc19zICpscHMpOworYmZhX2Vwcm90b19zdGF0dXNfdCBiZmFfbHBzX2dldF9leHRzdGF0dXMoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3UzMiBiZmFfbHBzX2dldF9waWQoc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X3RhZ19mcm9tX3BpZChzdHJ1Y3QgYmZhX3MgKmJmYSwgdTMyIHBpZCk7Cit1MTYgYmZhX2xwc19nZXRfcGVlcl9iYmNyZWRpdChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOword3duX3QgYmZhX2xwc19nZXRfcGVlcl9wd3duKHN0cnVjdCBiZmFfbHBzX3MgKmxwcyk7Cit3d25fdCBiZmFfbHBzX2dldF9wZWVyX253d24oc3RydWN0IGJmYV9scHNfcyAqbHBzKTsKK3U4IGJmYV9scHNfZ2V0X2xzcmp0X3JzbihzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordTggYmZhX2xwc19nZXRfbHNyanRfZXhwbChzdHJ1Y3QgYmZhX2xwc19zICpscHMpOwordm9pZCBiZmFfY2JfbHBzX2Zsb2dpX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cyk7Cit2b2lkIGJmYV9jYl9scHNfZmxvZ29fY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKTsKK3ZvaWQgYmZhX2NiX2xwc19mZGlzY19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordm9pZCBiZmFfY2JfbHBzX2ZkaXNjbG9nb19jb21wKHZvaWQgKmJmYWQsIHZvaWQgKnVhcmcpOworCisjZW5kaWYgLyogX19CRkFfU1ZDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3RpbWVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZhX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQwNzEwMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmFfdGltZXIuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1RJTUVSX0hfXworI2RlZmluZSBfX0JGQV9USU1FUl9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorCitzdHJ1Y3QgYmZhX3M7CisKK3R5cGVkZWYgdm9pZCAoKmJmYV90aW1lcl9jYmZuX3QpKHZvaWQgKik7CisKKy8qKgorICogQkZBIHRpbWVyIGRhdGEgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfdGltZXJfcyB7CisJc3RydWN0IGxpc3RfaGVhZAlxZTsKKwliZmFfdGltZXJfY2Jmbl90IHRpbWVyY2I7CisJdm9pZCAgICAgICAgICAgICphcmc7CisJaW50ICAgICAgICAgICAgIHRpbWVvdXQ7CS8qKjwgaW4gbWlsbGlzZWNzLiAqLworfTsKKworLyoqCisgKiBUaW1lciBtb2R1bGUgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFfdGltZXJfbW9kX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgdGltZXJfcTsKK307CisKKyNkZWZpbmUgQkZBX1RJTUVSX0ZSRVEgNTAwIC8qKjwgc3BlY2lmaWVkIGluIG1pbGxpc2VjcyAqLworCit2b2lkIGJmYV90aW1lcl9iZWF0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCk7Cit2b2lkIGJmYV90aW1lcl9pbml0KHN0cnVjdCBiZmFfdGltZXJfbW9kX3MgKm1vZCk7Cit2b2lkIGJmYV90aW1lcl9iZWdpbihzdHJ1Y3QgYmZhX3RpbWVyX21vZF9zICptb2QsIHN0cnVjdCBiZmFfdGltZXJfcyAqdGltZXIsCisJCQliZmFfdGltZXJfY2Jmbl90IHRpbWVyY2IsIHZvaWQgKmFyZywKKwkJCXVuc2lnbmVkIGludCB0aW1lb3V0KTsKK3ZvaWQgYmZhX3RpbWVyX3N0b3Aoc3RydWN0IGJmYV90aW1lcl9zICp0aW1lcik7CisKKyNlbmRpZiAvKiBfX0JGQV9USU1FUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYWRmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaS5oCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSF9fCisjZGVmaW5lIF9fQkZJX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisvKioKKyAqIE1zZyBoZWFkZXIgY29tbW9uIHRvIGFsbCBtc2dzCisgKi8KK3N0cnVjdCBiZmlfbWhkcl9zIHsKKwl1OCAgICAgICAgIG1zZ19jbGFzczsJLyogIEByZWYgYmZpX21jbGFzc190CSAgICAqLworCXU4ICAgICAgICAgbXNnX2lkOwkJLyogIG1zZyBvcGNvZGUgd2l0aCBpbiB0aGUgY2xhc3MgICAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4ICAgICAgICAgcnN2ZDsKKwkJCXU4ICAgICAgICAgbHB1X2lkOwkvKiAgbXNnIGRlc3RpbmF0aW9uCSAgICAqLworCQl9IGgyaTsKKwkJdTE2ICAgICAgICBpMmh0b2s7CS8qICB0b2tlbiBpbiBtc2dzIHRvIGhvc3QJICAgICovCisJfSBtdGFnOworfTsKKworI2RlZmluZSBiZmlfaDJpX3NldChfbWgsIF9tYywgX29wLCBfbHB1aWQpIGRvIHsJCVwKKwkoX21oKS5tc2dfY2xhc3MgCQk9IChfbWMpOyAgICAgIFwKKwkoX21oKS5tc2dfaWQJCQk9IChfb3ApOyAgICAgIFwKKwkoX21oKS5tdGFnLmgyaS5scHVfaWQJPSAoX2xwdWlkKTsgICAgICBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGJmaV9pMmhfc2V0KF9taCwgX21jLCBfb3AsIF9pMmh0b2spIGRvIHsJCVwKKwkoX21oKS5tc2dfY2xhc3MgCQk9IChfbWMpOyAgICAgIFwKKwkoX21oKS5tc2dfaWQJCQk9IChfb3ApOyAgICAgIFwKKwkoX21oKS5tdGFnLmkyaHRvawkJPSAoX2kyaHRvayk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIE1lc3NhZ2Ugb3Bjb2RlczogMC0xMjcgdG8gZmlybXdhcmUsIDEyOC0yNTUgdG8gaG9zdAorICovCisjZGVmaW5lIEJGSV9JMkhfT1BDT0RFX0JBU0UJMTI4CisjZGVmaW5lIEJGQV9JMkhNKF94KSAJCQkoKF94KSArIEJGSV9JMkhfT1BDT0RFX0JBU0UpCisKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTY2F0dGVyIEdhdGhlciBFbGVtZW50IGFuZCBQYWdlIGRlZmluaXRpb24KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUgQkZJX1NHRV9JTkxJTkUJMQorI2RlZmluZSBCRklfU0dFX0lOTElORV9NQVgJKEJGSV9TR0VfSU5MSU5FICsgMSkKKworLyoqCisgKiBTRyBGbGFncworICovCitlbnVtIHsKKwlCRklfU0dFX0RBVEEJPSAwLAkvKiAgZGF0YSBhZGRyZXNzLCBub3QgbGFzdAkgICAgICovCisJQkZJX1NHRV9EQVRBX0NQTAk9IDEsCS8qICBkYXRhIGFkZHIsIGxhc3QgaW4gY3VycmVudCBwYWdlICovCisJQkZJX1NHRV9EQVRBX0xBU1QJPSAzLAkvKiAgZGF0YSBhZGRyZXNzLCBsYXN0CQkgICAgICovCisJQkZJX1NHRV9MSU5LCT0gMiwJLyogIGxpbmsgYWRkcmVzcwkJICAgICAqLworCUJGSV9TR0VfUEdETEVOCT0gMiwJLyogIGN1bXVsYXRpdmUgZGF0YSBsZW5ndGggZm9yIHBhZ2UgKi8KK307CisKKy8qKgorICogRE1BIGFkZHJlc3NlcworICovCit1bmlvbiBiZmlfYWRkcl91IHsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgIGFkZHJfbG87CisJCXUzMiAgICAgICAgYWRkcl9oaTsKKwl9IGEzMjsKK307CisKKy8qKgorICogU2NhdHRlciBHYXRoZXIgRWxlbWVudAorICovCitzdHJ1Y3QgYmZpX3NnZV9zIHsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgZmxhZ3MJOiAyLAorCQkJcnN2ZAk6IDIsCisJCQlzZ19sZW4JOiAyODsKKyNlbHNlCisJdTMyICAgICAgICBzZ19sZW4JOiAyOCwKKwkJCXJzdmQJOiAyLAorCQkJZmxhZ3MJOiAyOworI2VuZGlmCisJdW5pb24gYmZpX2FkZHJfdSBzZ2E7Cit9OworCisvKioKKyAqIFNjYXR0ZXIgR2F0aGVyIFBhZ2UKKyAqLworI2RlZmluZSBCRklfU0dQR19EQVRBX1NHRVMJCTcKKyNkZWZpbmUgQkZJX1NHUEdfU0dFU19NQVgJCShCRklfU0dQR19EQVRBX1NHRVMgKyAxKQorI2RlZmluZSBCRklfU0dQR19SU1ZEX1dEX0xFTgk4CitzdHJ1Y3QgYmZpX3NncGdfcyB7CisJc3RydWN0IGJmaV9zZ2VfcyBzZ2VzW0JGSV9TR1BHX1NHRVNfTUFYXTsKKwl1MzIJcnN2ZFtCRklfU0dQR19SU1ZEX1dEX0xFTl07Cit9OworCisvKgorICogTGFyZ2UgTWVzc2FnZSBzdHJ1Y3R1cmUgLSAxMjggQnl0ZXMgc2l6ZSBNc2dzCisgKi8KKyNkZWZpbmUgQkZJX0xNU0dfU1oJCTEyOAorI2RlZmluZSBCRklfTE1TR19QTF9XU1oJXAorCQkJKChCRklfTE1TR19TWiAtIHNpemVvZihzdHJ1Y3QgYmZpX21oZHJfcykpIC8gNCkKKworc3RydWN0IGJmaV9tc2dfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWhkcjsKKwl1MzIJcGxbQkZJX0xNU0dfUExfV1NaXTsKK307CisKKy8qKgorICogTWFpbGJveCBtZXNzYWdlIHN0cnVjdHVyZQorICovCisjZGVmaW5lIEJGSV9NQk1TR19TWgkJNworc3RydWN0IGJmaV9tYm1zZ19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1MzIJCXBsW0JGSV9NQk1TR19TWl07Cit9OworCisvKioKKyAqIE1lc3NhZ2UgQ2xhc3NlcworICovCitlbnVtIGJmaV9tY2xhc3MgeworCUJGSV9NQ19JT0MJCT0gMSwJLyogIElPIENvbnRyb2xsZXIgKElPQykJICAgICovCisJQkZJX01DX0RJQUcJCT0gMiwJLyogIERpYWdub3N0aWMgTXNncwkJICAgICovCisJQkZJX01DX0ZMQVNICQk9IDMsCS8qICBGbGFzaCBtZXNzYWdlIGNsYXNzCSAgICAqLworCUJGSV9NQ19DRUUJCT0gNCwKKwlCRklfTUNfRkNfUE9SVAkJPSA1LAkvKiAgRkMgcG9ydAkJICAgCSAgICAqLworCUJGSV9NQ19JT0NGQwkJPSA2LAkvKiAgRkMgLSBJTyBDb250cm9sbGVyIChJT0MpCSAgICAqLworCUJGSV9NQ19MTAkJPSA3LAkvKiAgTGluayBMYXllcgkJIAkgICAgKi8KKwlCRklfTUNfVUYJCT0gOCwJLyogIFVuc29saWNpdGVkIGZyYW1lIHJlY2VpdmUJICAgICovCisJQkZJX01DX0ZDWFAJCT0gOSwJLyogIEZDIFRyYW5zcG9ydAkJICAgICovCisJQkZJX01DX0xQUwkJPSAxMCwJLyogIGxwb3J0IGZjIGxvZ2luIHNlcnZpY2VzCSAgICAqLworCUJGSV9NQ19SUE9SVAkJPSAxMSwJLyogIFJlbW90ZSBwb3J0CQkgICAgKi8KKwlCRklfTUNfSVROSU0JCT0gMTIsCS8qICBJLVQgbmV4dXMgKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9SRUFECT0gMTMsCS8qICByZWFkIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fV1JJVEUJPSAxNCwJLyogIHdyaXRlIElPIChJbml0aWF0b3IgbW9kZSkJICAgICovCisJQkZJX01DX0lPSU1fSU8JCT0gMTUsCS8qICBJTyAoSW5pdGlhdG9yIG1vZGUpCSAgICAqLworCUJGSV9NQ19JT0lNCQk9IDE2LAkvKiAgSU8gKEluaXRpYXRvciBtb2RlKQkgICAgKi8KKwlCRklfTUNfSU9JTV9JT0NPTQk9IDE3LAkvKiAgZ29vZCBJTyBjb21wbGV0aW9uCQkgICAgKi8KKwlCRklfTUNfVFNLSU0JCT0gMTgsCS8qICBJbml0aWF0b3IgVGFzayBtYW5hZ2VtZW50CSAgICAqLworCUJGSV9NQ19TQk9PVAkJPSAxOSwJLyogIFNBTiBib290IHNlcnZpY2VzCQkgICAgKi8KKwlCRklfTUNfSVBGQwkJPSAyMCwJLyogIElQIG92ZXIgRkMgTXNncwkJICAgICovCisJQkZJX01DX1BPUlQJCT0gMjEsCS8qICBQaHlzaWNhbCBwb3J0CQkgICAgKi8KKwlCRklfTUNfTUFYCQk9IDMyCit9OworCisjZGVmaW5lIEJGSV9JT0NfTUFYX0NRUwkJNAorI2RlZmluZSBCRklfSU9DX01BWF9DUVNfQVNJQwk4CisjZGVmaW5lIEJGSV9JT0NfTVNHTEVOX01BWAkzMgkvKiAzMiBieXRlcyAqLworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTU1YWZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfYm9vdC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKy8qCisgKiBiZmlfYm9vdC5oCisgKi8KKworI2lmbmRlZiBfX0JGSV9CT09UX0hfXworI2RlZmluZSBfX0JGSV9CT09UX0hfXworCisjZGVmaW5lIEJGSV9CT09UX1RZUEVfT0ZGCQk4CisjZGVmaW5lIEJGSV9CT09UX1BBUkFNX09GRgkJMTIKKworI2RlZmluZSBCRklfQk9PVF9UWVBFX05PUk1BTCAJCTAJLyogcGFyYW0gaXMgZGV2aWNlIGlkICovCisjZGVmaW5lCUJGSV9CT09UX1RZUEVfRkxBU0gJCTEKKyNkZWZpbmUJQkZJX0JPT1RfVFlQRV9NRU1URVNUCQkyCisKKyNkZWZpbmUgQkZJX0JPT1RfTUVNVEVTVF9SRVNfQUREUiAgIDB4OTAwCisjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX1NJRyAgICAweEEwQTFBMkEzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2JyZWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNiYjUyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NicmVnLmgKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIGJmaV9jYnJlZy5oIGNyb3NzYm93IGhvc3QgYmxvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAhISEgRG8gbm90IGVkaXQuIEF1dG8gZ2VuZXJhdGVkLiAhISEKKyAqLworCisjaWZuZGVmIF9fQkZJX0NCUkVHX0hfXworI2RlZmluZSBfX0JGSV9DQlJFR19IX18KKworCisjZGVmaW5lIEhPU1RGTjBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMTQwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1AgICAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgSE9TVEZOMF9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDAwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMCAgICAgICAgICAgICAgICAweDAwMDE0MDA4CisjZGVmaW5lIF9fSE9TVF9QQUdFX05VTV9GTiAgICAgICAgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDEwMAorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRfTFZMX01LICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9MVkxfU0ggICAgICAgIDIwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9MVkwoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9JTlRfU1RBVF9MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVF9QICAgICAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDEwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMSAgICAgICAgICAgICAgICAweDAwMDE0MTA4CisjZGVmaW5lIEFQUF9QTExfNDAwX0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDQKKyNkZWZpbmUgX19QXzQwMF9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1NSQU1fVVNFXzEwME1IWiAgICAweDAwMTAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUkVTRVRfVElNRVJfTUsgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUl9TSCAgICAgMTcKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUihfdikgICAgKChfdikgPDwgX19BUFBfUExMXzQwMF9SRVNFVF9USU1FUl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9MT0dJQ19TT0ZUX1JFU0VUICAgMHgwMDAxMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0NOVExNVDBfMV9NSyAgICAgICAweDAwMDBjMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xX1NIICAgICAgIDE0CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfQ05UTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX0pJVExNVDBfMV9NSyAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSklUTE1UMF8xX1NIICAgICAgIDEyCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSklUTE1UMF8xKF92KSAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfSklUTE1UMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDAwX0hSRUYgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIF9fQVBQX1BMTF80MDBfSERJViAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9QMF8xX01LICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1AwXzFfU0ggICAgICAgICAgICA4CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfUDBfMShfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfUDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9aMF8yX01LICAgICAgICAgICAgMHgwMDAwMDBlMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX1owXzJfU0ggICAgICAgICAgICA1CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfWjBfMihfdikgICAgICAgICAgICgoX3YpIDw8IF9fQVBQX1BMTF80MDBfWjBfMl9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9SU0VMMjAwNTAwICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBfX0FQUF9QTExfNDAwX0VOQVJTVCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIF9fQVBQX1BMTF80MDBfQllQQVNTICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgX19BUFBfUExMXzQwMF9MUkVTRVROICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX0FQUF9QTExfNDAwX0VOQUJMRSAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFQUF9QTExfMjEyX0NUTF9SRUcgICAgICAgICAgICAgIDB4MDAwMTQyMDgKKyNkZWZpbmUgX19QXzIxMl9QTExfTE9DSyAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1JFU0VUX1RJTUVSX01LICAgICAweDAwMGUwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVJfU0ggICAgIDE3CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVIoX3YpICAgICgoX3YpIDw8IF9fQVBQX1BMTF8yMTJfUkVTRVRfVElNRVJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfTE9HSUNfU09GVF9SRVNFVCAgIDB4MDAwMTAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9DTlRMTVQwXzFfTUsgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0NOVExNVDBfMV9TSCAgICAgICAxNAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0NOVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX0NOVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9KSVRMTVQwXzFfTUsgICAgICAgMHgwMDAwMzAwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0pJVExNVDBfMV9TSCAgICAgICAxMgorI2RlZmluZSBfX0FQUF9QTExfMjEyX0pJVExNVDBfMShfdikgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX0pJVExNVDBfMV9TSCkKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9IUkVGICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0hESVYgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUDBfMV9NSyAgICAgICAgICAgIDB4MDAwMDAzMDAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9QMF8xX1NIICAgICAgICAgICAgOAorI2RlZmluZSBfX0FQUF9QTExfMjEyX1AwXzEoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1AwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfWjBfMl9NSyAgICAgICAgICAgIDB4MDAwMDAwZTAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9aMF8yX1NIICAgICAgICAgICAgNQorI2RlZmluZSBfX0FQUF9QTExfMjEyX1owXzIoX3YpICAgICAgICAgICAoKF92KSA8PCBfX0FQUF9QTExfMjEyX1owXzJfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfUlNFTDIwMDUwMCAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9FTkFSU1QgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9QTExfMjEyX0JZUEFTUyAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX1BMTF8yMTJfTFJFU0VUTiAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfUExMXzIxMl9FTkFCTEUgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NUX1NFTTBfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjMwCisjZGVmaW5lIF9fSE9TVF9TRU1BUEhPUkUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0xX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzNAorI2RlZmluZSBIT1NUX1NFTTJfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjM4CisjZGVmaW5lIEhPU1RfU0VNM19SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyM2MKKyNkZWZpbmUgSE9TVF9TRU0wX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0MAorI2RlZmluZSBIT1NUX1NFTTFfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ0CisjZGVmaW5lIEhPU1RfU0VNMl9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDgKKyNkZWZpbmUgSE9TVF9TRU0zX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0YworI2RlZmluZSBIT1NURk4wX0xQVTBfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfTFBVMF9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4wX0NNRF9TVEFUICAgICAgICAgICAgMHgwMDAxOTAwOAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0lORk9fTUsgICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1hfSU5GT19TSCAgICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPKF92KSAgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjBfTUJPWF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YX0NNRF9TVEFUVVMgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjFfTFBVMV9DTURfU1RBVCAgICAgICAgICAgIDB4MDAwMTkwMTQKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9JTkZPX01LICAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YX0lORk9fU0ggICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GTyhfdikgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9MUFUxX01CT1hfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWF9DTURfU1RBVFVTICAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjFfQ01EX1NUQVQgICAgICAgICAgICAweDAwMDE5MDFjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfSU5GT19NSyAgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWF9JTkZPX1NIICAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk8oX3YpICAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMV9NQk9YX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1hfQ01EX1NUQVRVUyAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BFX1EwX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAxNAorI2RlZmluZSBDUEVfUTBfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDFjCisjZGVmaW5lIENQRV9RMF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMjAKKyNkZWZpbmUgQ1BFX1ExX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAzNAorI2RlZmluZSBDUEVfUTFfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDNjCisjZGVmaW5lIENQRV9RMV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNDAKKyNkZWZpbmUgQ1BFX1EyX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA1NAorI2RlZmluZSBDUEVfUTJfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDVjCisjZGVmaW5lIENQRV9RMl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwNjAKKyNkZWZpbmUgQ1BFX1EzX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA3NAorI2RlZmluZSBDUEVfUTNfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDdjCisjZGVmaW5lIENQRV9RM19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwODAKKyNkZWZpbmUgQ1BFX1E0X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDA5NAorI2RlZmluZSBDUEVfUTRfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDljCisjZGVmaW5lIENQRV9RNF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYTAKKyNkZWZpbmUgQ1BFX1E1X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBiNAorI2RlZmluZSBDUEVfUTVfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGJjCisjZGVmaW5lIENQRV9RNV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwYzAKKyNkZWZpbmUgQ1BFX1E2X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBkNAorI2RlZmluZSBDUEVfUTZfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGRjCisjZGVmaW5lIENQRV9RNl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwZTAKKyNkZWZpbmUgQ1BFX1E3X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDBmNAorI2RlZmluZSBDUEVfUTdfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMGZjCisjZGVmaW5lIENQRV9RN19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAxMDAKKyNkZWZpbmUgUk1FX1EwX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAxNAorI2RlZmluZSBSTUVfUTBfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDFjCisjZGVmaW5lIFJNRV9RMF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwMjAKKyNkZWZpbmUgUk1FX1ExX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTAzNAorI2RlZmluZSBSTUVfUTFfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDNjCisjZGVmaW5lIFJNRV9RMV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNDAKKyNkZWZpbmUgUk1FX1EyX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA1NAorI2RlZmluZSBSTUVfUTJfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDVjCisjZGVmaW5lIFJNRV9RMl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwNjAKKyNkZWZpbmUgUk1FX1EzX0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA3NAorI2RlZmluZSBSTUVfUTNfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDdjCisjZGVmaW5lIFJNRV9RM19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwODAKKyNkZWZpbmUgUk1FX1E0X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTA5NAorI2RlZmluZSBSTUVfUTRfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMDljCisjZGVmaW5lIFJNRV9RNF9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYTAKKyNkZWZpbmUgUk1FX1E1X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBiNAorI2RlZmluZSBSTUVfUTVfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGJjCisjZGVmaW5lIFJNRV9RNV9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwYzAKKyNkZWZpbmUgUk1FX1E2X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBkNAorI2RlZmluZSBSTUVfUTZfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGRjCisjZGVmaW5lIFJNRV9RNl9DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTEwZTAKKyNkZWZpbmUgUk1FX1E3X0RFUFRIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMTBmNAorI2RlZmluZSBSTUVfUTdfUEkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDExMGZjCisjZGVmaW5lIFJNRV9RN19DSSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTExMDAKKyNkZWZpbmUgUFNTX0NUTF9SRUcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxODgwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9NSyAgICAgICAgICAgICAweDAwMDMwMDAwCisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWX1NIICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fUFNTX0kyQ19DTEtfRElWKF92KSAgICAgICAgICAgICgoX3YpIDw8IF9fUFNTX0kyQ19DTEtfRElWX1NIKQorI2RlZmluZSBfX1BTU19MTUVNX0lOSVRfRE9ORSAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIF9fUFNTX0xNRU1fUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0VOICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBfX1BTU19MUFUxX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fUFNTX0xQVTBfUkVTRVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGVpdGhlciBpbiBlcnJvci9taXNzaW5nIGluIHNwZWMuIEl0cyBhdXRvLWdlbmVyYXRlZAorICogZnJvbSBoYXJkIGNvZGVkIHZhbHVlcyBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX01LX0ZJWCAgICAgICAgICAweDAwMDAwMDFjCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfU0hfRklYICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19FTVBIUFJFX0FUXzRHX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBfX1NGUF9UWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fU0ZQX1JYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAwODAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEhPU1RGTjBfTFBVX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyMDAKKyNkZWZpbmUgSE9TVEZOMV9MUFVfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTI2MAorI2RlZmluZSBMUFVfSE9TVEZOMF9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjgwCisjZGVmaW5lIExQVV9IT1NURk4xX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyZTAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgbWFwcGluZyBkZWZpbml0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSBtYXBwaW5nIHRhYmxlcworICogaW4gcmVncGFyc2UucGwuCisgKi8KKyNkZWZpbmUgQkZBX0lPQzBfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0wX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MwX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMV9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMV9IQkVBVF9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTJfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfU1RBVEVfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0zX0lORk9fUkVHCisjZGVmaW5lIEJGQV9GV19VU0VfQ09VTlQgICAgICAgICAgICAgICAgIEhPU1RfU0VNNF9JTkZPX1JFRworCisjZGVmaW5lIENQRV9RX0RFUFRIKF9fbikgXAorCShDUEVfUTBfREVQVEggKyAoX19uKSAqIChDUEVfUTFfREVQVEggLSBDUEVfUTBfREVQVEgpKQorI2RlZmluZSBDUEVfUV9QSShfX24pIFwKKwkoQ1BFX1EwX1BJICsgKF9fbikgKiAoQ1BFX1ExX1BJIC0gQ1BFX1EwX1BJKSkKKyNkZWZpbmUgQ1BFX1FfQ0koX19uKSBcCisJKENQRV9RMF9DSSArIChfX24pICogKENQRV9RMV9DSSAtIENQRV9RMF9DSSkpCisjZGVmaW5lIFJNRV9RX0RFUFRIKF9fbikgXAorCShSTUVfUTBfREVQVEggKyAoX19uKSAqIChSTUVfUTFfREVQVEggLSBSTUVfUTBfREVQVEgpKQorI2RlZmluZSBSTUVfUV9QSShfX24pIFwKKwkoUk1FX1EwX1BJICsgKF9fbikgKiAoUk1FX1ExX1BJIC0gUk1FX1EwX1BJKSkKKyNkZWZpbmUgUk1FX1FfQ0koX19uKSBcCisJKFJNRV9RMF9DSSArIChfX24pICogKFJNRV9RMV9DSSAtIFJNRV9RMF9DSSkpCisKKyNkZWZpbmUgQ1BFX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIFJNRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBDUEVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKyNkZWZpbmUgUk1FX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisKKworLyoKKyAqIFBDSSBNU0ktWCB2ZWN0b3IgZGVmaW5lcworICovCitlbnVtIHsKKyAgICBCRkFfTVNJWF9DUEVfUTAgPSAwLAorICAgIEJGQV9NU0lYX0NQRV9RMSA9IDEsCisgICAgQkZBX01TSVhfQ1BFX1EyID0gMiwKKyAgICBCRkFfTVNJWF9DUEVfUTMgPSAzLAorICAgIEJGQV9NU0lYX0NQRV9RNCA9IDQsCisgICAgQkZBX01TSVhfQ1BFX1E1ID0gNSwKKyAgICBCRkFfTVNJWF9DUEVfUTYgPSA2LAorICAgIEJGQV9NU0lYX0NQRV9RNyA9IDcsCisgICAgQkZBX01TSVhfUk1FX1EwID0gOCwKKyAgICBCRkFfTVNJWF9STUVfUTEgPSA5LAorICAgIEJGQV9NU0lYX1JNRV9RMiA9IDEwLAorICAgIEJGQV9NU0lYX1JNRV9RMyA9IDExLAorICAgIEJGQV9NU0lYX1JNRV9RNCA9IDEyLAorICAgIEJGQV9NU0lYX1JNRV9RNSA9IDEzLAorICAgIEJGQV9NU0lYX1JNRV9RNiA9IDE0LAorICAgIEJGQV9NU0lYX1JNRV9RNyA9IDE1LAorICAgIEJGQV9NU0lYX0VSUl9FTUMgPSAxNiwKKyAgICBCRkFfTVNJWF9FUlJfTFBVMCA9IDE3LAorICAgIEJGQV9NU0lYX0VSUl9MUFUxID0gMTgsCisgICAgQkZBX01TSVhfRVJSX1BTUyA9IDE5LAorICAgIEJGQV9NU0lYX01CT1hfTFBVMCA9IDIwLAorICAgIEJGQV9NU0lYX01CT1hfTFBVMSA9IDIxLAorICAgIEJGQV9NU0lYX0NCX01BWCA9IDIyLAorfTsKKworLyoKKyAqIEFuZCBjb3JyZXNwb25kaW5nIGhvc3QgaW50ZXJydXB0IHN0YXR1cyBiaXQgZmllbGQgZGVmaW5lcworICovCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EyICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E1ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTYgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNyAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9FTUMgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfTFBVMSAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9QU1MgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUwICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YX0xQVTEgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTAgICAgICAgICAgICAgICAweDAwNDAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWDFfTFBVMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDBmZlUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDBmZjAwVQorCisKKy8qCisgKiBjcm9zc2JvdyBtZW1vcnkgbWFwLgorICovCisjZGVmaW5lIFBTU19TTUVNX1BBR0VfU1RBUlQJMHg4MDAwCisjZGVmaW5lIFBTU19TTUVNX1BHTlVNKF9wZzAsIF9tYSkJKChfcGcwKSArICgoX21hKSA+PiAxNSkpCisjZGVmaW5lIFBTU19TTUVNX1BHT0ZGKF9tYSkJKChfbWEpICYgMHg3ZmZmKQorCisvKgorICogRW5kIG9mIGNyb3NzYm93IG1lbW9yeSBtYXAKKyAqLworCisKKyNlbmRpZiAvKiBfX0JGSV9DQlJFR19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9jZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTcwNTk2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2NlZS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisvKioKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBiZmlfZGNieC5oIEJGSSBJbnRlcmZhY2UgKE1haWxib3ggY29tbWFuZHMgYW5kIHJlbGF0ZWQgc3RydWN0dXJlcykKKyAqIGJldHdlZW4gaG9zdCBkcml2ZXIgYW5kIERDQlgvTExEUCBmaXJtd2FyZSBtb2R1bGUuCisgKgorKiovCisKKyNpZm5kZWYgX19CRklfQ0VFX0hfXworI2RlZmluZSBfX0JGSV9DRUVfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCisKK2VudW0gYmZpX2NlZV9oMmlfbXNnc19lIHsKKwlCRklfQ0VFX0gySV9HRVRfQ0ZHX1JFUSA9IDEsCisJQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMgPSAyLAorCUJGSV9DRUVfSDJJX0dFVF9TVEFUU19SRVEgPSAzLAorfTsKKworCitlbnVtIGJmaV9jZWVfaTJoX21zZ3NfZSB7CisJQkZJX0NFRV9JMkhfR0VUX0NGR19SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfQ0VFX0kySF9SRVNFVF9TVEFUU19SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfQ0VFX0kySF9HRVRfU1RBVFNfUlNQID0gQkZBX0kySE0oMyksCit9OworCisKKy8qIERhdGEgc3RydWN0dXJlcyAqLworCisvKgorICogQkZJX0NFRV9IMklfUkVTRVRfU1RBVFMKKyAqLworc3RydWN0IGJmaV9sbGRwX3Jlc2V0X3N0YXRzX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9SRVNFVF9TVEFUUworICovCitzdHJ1Y3QgYmZpX2NlZV9yZXNldF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7Cit9OworCisvKgorICogQkZJX0NFRV9IMklfR0VUX0NGR19SRVEKKyAqLworc3RydWN0IGJmaV9jZWVfZ2V0X3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworCisvKgorICogQkZJX0NFRV9JMkhfR0VUX0NGR19SU1AKKyAqLworc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdTggICAgICAgICAgICBjbWRfc3RhdHVzOworCXU4ICAgICAgICAgICAgcnN2ZFszXTsKK307CisKKy8qCisgKiBCRklfQ0VFX0gySV9HRVRfU1RBVFNfUkVRCisgKi8KK3N0cnVjdCBiZmlfY2VlX3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CisJdW5pb24gYmZpX2FkZHJfdSAgIGRtYV9hZGRyOworfTsKKworCisvKgorICogQkZJX0NFRV9JMkhfR0VUX1NUQVRTX1JTUAorICovCitzdHJ1Y3QgYmZpX2NlZV9zdGF0c19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOworCXU4IAkJICAgY21kX3N0YXR1czsKKwl1OCAJCSAgIHJzdmRbM107Cit9OworCisKKwordW5pb24gYmZpX2NlZV9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgICBtaDsKKwlzdHJ1Y3QgYmZpX2NlZV9nZXRfcmVxX3MgICBnZXRfcmVxOworCXN0cnVjdCBiZmlfY2VlX3N0YXRzX3JlcV9zIHN0YXRzX3JlcTsKK307CisKKwordW5pb24gYmZpX2NlZV9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgICAgbWg7CisJc3RydWN0IGJmaV9jZWVfZ2V0X3JzcF9zICBnZXRfcnNwOworCXN0cnVjdCBiZmlfY2VlX3N0YXRzX3JzcF9zIHN0YXRzX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKworI2VuZGlmIC8qIF9fQkZJX0NFRV9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfY3RyZWcuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2N0cmVnLmgKQEAgLTAsMCArMSw2MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIGJmaV9jdHJlZy5oIGNhdGFwdWx0IGhvc3QgYmxvY2sgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAhISEgRG8gbm90IGVkaXQuIEF1dG8gZ2VuZXJhdGVkLiAhISEKKyAqLworCisjaWZuZGVmIF9fQkZJX0NUUkVHX0hfXworI2RlZmluZSBfX0JGSV9DVFJFR19IX18KKworCisjZGVmaW5lIEhPU1RGTjBfTFBVX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTkyMDAKKyNkZWZpbmUgSE9TVEZOMV9MUFVfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTI2MAorI2RlZmluZSBMUFVfSE9TVEZOMF9NQk9YMF8wICAgICAgICAgICAgICAweDAwMDE5MjgwCisjZGVmaW5lIExQVV9IT1NURk4xX01CT1gwXzggICAgICAgICAgICAgIDB4MDAwMTkyZTAKKyNkZWZpbmUgSE9TVEZOMl9MUFVfTUJPWDBfMCAgICAgICAgICAgICAgMHgwMDAxOTQwMAorI2RlZmluZSBIT1NURk4zX0xQVV9NQk9YMF84ICAgICAgICAgICAgICAweDAwMDE5NDYwCisjZGVmaW5lIExQVV9IT1NURk4yX01CT1gwXzAgICAgICAgICAgICAgIDB4MDAwMTk0ODAKKyNkZWZpbmUgTFBVX0hPU1RGTjNfTUJPWDBfOCAgICAgICAgICAgICAgMHgwMDAxOTRlMAorI2RlZmluZSBIT1NURk4wX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MDAwCisjZGVmaW5lIF9fSE9TVEZOMF9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjBfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4wX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4wX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4wX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MDA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4wICAgICAgICAgICAgICAgIDB4MDAwMTQwMDgKKyNkZWZpbmUgX19IT1NUX1BBR0VfTlVNX0ZOICAgICAgICAgICAgICAgMHgwMDAwMDFmZgorI2RlZmluZSBIT1NUX01TSVhfRVJSX0lOREVYX0ZOMCAgICAgICAgICAweDAwMDE0MDBjCisjZGVmaW5lIF9fTVNJWF9FUlJfSU5ERVhfRk4gICAgICAgICAgICAgIDB4MDAwMDAxZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAxNDEwMAorI2RlZmluZSBfX0hPU1RGTjFfSEFMVF9PQ0NVUlJFRCAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0xWTF9NSyAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX1NIICAgICAgMjAKKyNkZWZpbmUgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMKF92KSAgICAgKChfdikgPDwgX19IT1NURk4xX0lOVF9TVEFUVVNfTFZMX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfSU5UX1NUQVRVU19QX01LICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfU0ggICAgICAgIDE2CisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX1AoX3YpICAgICAgICgoX3YpIDw8IF9fSE9TVEZOMV9JTlRfU1RBVFVTX1BfU0gpCisjZGVmaW5lIF9fSE9TVEZOMV9JTlRfU1RBVFVTX0YgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSE9TVEZOMV9JTlRfTVNLICAgICAgICAgICAgICAgICAgMHgwMDAxNDEwNAorI2RlZmluZSBIT1NUX1BBR0VfTlVNX0ZOMSAgICAgICAgICAgICAgICAweDAwMDE0MTA4CisjZGVmaW5lIEhPU1RfTVNJWF9FUlJfSU5ERVhfRk4xICAgICAgICAgIDB4MDAwMTQxMGMKKyNkZWZpbmUgQVBQX1BMTF80MjVfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwNAorI2RlZmluZSBfX1BfNDI1X1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfU1JBTV9VU0VfMTAwTUhaICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfNDI1X1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfNDI1X1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzQyNV9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfNDI1X1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzQyNV9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfNDI1X0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF80MjVfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVBQX1BMTF8zMTJfQ1RMX1JFRyAgICAgICAgICAgICAgMHgwMDAxNDIwOAorI2RlZmluZSBfX1BfMzEyX1BMTF9MT0NLICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ19BSEJfMSAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgX19FTkFCTEVfTUFDX0FIQl8wICAgICAgICAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBfX0VOQUJMRV9NQUNfMSAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIF9fRU5BQkxFX01BQ18wICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9SRVNFVF9USU1FUl9NSyAgICAgMHgwMDBlMDAwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX1NIICAgICAxNworI2RlZmluZSBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSKF92KSAgICAoKF92KSA8PCBfX0FQUF9QTExfMzEyX1JFU0VUX1RJTUVSX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX0xPR0lDX1NPRlRfUkVTRVQgICAweDAwMDEwMDAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfQ05UTE1UMF8xX01LICAgICAgIDB4MDAwMGMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfU0ggICAgICAgMTQKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9DTlRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9DTlRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSklUTE1UMF8xX01LICAgICAgIDB4MDAwMDMwMDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfU0ggICAgICAgMTIKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9KSVRMTVQwXzEoX3YpICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9KSVRMTVQwXzFfU0gpCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfSFJFRiAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9IRElWICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBfX0FQUF9QTExfMzEyX1AwXzFfTUsgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfUDBfMV9TSCAgICAgICAgICAgIDgKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9QMF8xKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9QMF8xX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1owXzJfTUsgICAgICAgICAgICAweDAwMDAwMGUwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfWjBfMl9TSCAgICAgICAgICAgIDUKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9aMF8yKF92KSAgICAgICAgICAgKChfdikgPDwgX19BUFBfUExMXzMxMl9aMF8yX1NIKQorI2RlZmluZSBfX0FQUF9QTExfMzEyX1JTRUwyMDA1MDAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfRU5BUlNUICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19BUFBfUExMXzMxMl9CWVBBU1MgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0FQUF9QTExfMzEyX0xSRVNFVE4gICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fQVBQX1BMTF8zMTJfRU5BQkxFICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUJJU1RfQ1RMX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIyMAorI2RlZmluZSBfX0VEUkFNX0JJU1RSX1NUQVJUICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fTUJJU1RfUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19NQklTVF9TVEFSVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNQklTVF9TVEFUX1JFRyAgICAgICAgICAgICAgICAgICAweDAwMDE0MjI0CisjZGVmaW5lIF9fRURSQU1fQklTVFJfU1RBVFVTICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgX19FRFJBTV9CSVNUUl9ET05FICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX01FTV9CSVRfU1RBVFVTICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fTUJJU1RfRE9ORSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU0wX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzMAorI2RlZmluZSBfX0hPU1RfU0VNQVBIT1JFICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RfU0VNMV9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQyMzQKKyNkZWZpbmUgSE9TVF9TRU0yX1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDIzOAorI2RlZmluZSBIT1NUX1NFTTNfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0MjNjCisjZGVmaW5lIEhPU1RfU0VNMF9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNDAKKyNkZWZpbmUgSE9TVF9TRU0xX0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDI0NAorI2RlZmluZSBIT1NUX1NFTTJfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0MjQ4CisjZGVmaW5lIEhPU1RfU0VNM19JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQyNGMKKyNkZWZpbmUgRVRIX01BQ19TRVJfUkVHICAgICAgICAgICAgICAgICAgMHgwMDAxNDI4OAorI2RlZmluZSBfX0FQUF9FTVNfQ0tCVUZBTVBJTiAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIF9fQVBQX0VNU19SRUZDTEtTRUwgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgX19BUFBfRU1TX0NNTENLU0VMICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0FQUF9FTVNfUkVGQ0tCVUZFTjIgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIF9fQVBQX0VNU19SRUZDS0JVRkVOMSAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19BUFBfRU1TX0NIQU5ORUxfU0VMICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4yX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0MzAwCisjZGVmaW5lIF9fSE9TVEZOMl9IQUxUX09DQ1VSUkVEICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjJfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4yX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4yX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4yX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0MzA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4yICAgICAgICAgICAgICAgIDB4MDAwMTQzMDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjIgICAgICAgICAgMHgwMDAxNDMwYworI2RlZmluZSBIT1NURk4zX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAweDAwMDE0NDAwCisjZGVmaW5lIF9fSEFMVF9PQ0NVUlJFRCAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfTFZMX01LICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfU0ggICAgICAyMAorI2RlZmluZSBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkwoX3YpICAgICAoKF92KSA8PCBfX0hPU1RGTjNfSU5UX1NUQVRVU19MVkxfU0gpCisjZGVmaW5lIF9fSE9TVEZOM19JTlRfU1RBVFVTX1BfTUsgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9TSCAgICAgICAgMTYKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfUChfdikgICAgICAgKChfdikgPDwgX19IT1NURk4zX0lOVF9TVEFUVVNfUF9TSCkKKyNkZWZpbmUgX19IT1NURk4zX0lOVF9TVEFUVVNfRiAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIT1NURk4zX0lOVF9NU0sgICAgICAgICAgICAgICAgICAweDAwMDE0NDA0CisjZGVmaW5lIEhPU1RfUEFHRV9OVU1fRk4zICAgICAgICAgICAgICAgIDB4MDAwMTQ0MDgKKyNkZWZpbmUgSE9TVF9NU0lYX0VSUl9JTkRFWF9GTjMgICAgICAgICAgMHgwMDAxNDQwYworI2RlZmluZSBGTkNfSURfUkVHICAgICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjAwCisjZGVmaW5lIF9fRlVOQ1RJT05fTlVNQkVSICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgRk5DX1BFUlNfUkVHICAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYwNAorI2RlZmluZSBfX0YzX0ZVTkNUSU9OX0FDVElWRSAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fRjNfRlVOQ1RJT05fTU9ERSAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19GM19QT1JUX01BUF9NSyAgICAgICAgICAgICAgICAgMHgzMDAwMDAwMAorI2RlZmluZSBfX0YzX1BPUlRfTUFQX1NIICAgICAgICAgICAgICAgICAyOAorI2RlZmluZSBfX0YzX1BPUlRfTUFQKF92KSAgICAgICAgICAgICAgICAoKF92KSA8PCBfX0YzX1BPUlRfTUFQX1NIKQorI2RlZmluZSBfX0YzX1ZNX01PREUgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIF9fRjNfSU5UWF9TVEFUVVNfTUsgICAgICAgICAgICAgIDB4MDcwMDAwMDAKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVU19TSCAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgX19GM19JTlRYX1NUQVRVUyhfdikgICAgICAgICAgICAgKChfdikgPDwgX19GM19JTlRYX1NUQVRVU19TSCkKKyNkZWZpbmUgX19GMl9GVU5DVElPTl9BQ1RJVkUgICAgICAgICAgICAgMHgwMDgwMDAwMAorI2RlZmluZSBfX0YyX0ZVTkNUSU9OX01PREUgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIF9fRjJfUE9SVF9NQVBfTUsgICAgICAgICAgICAgICAgIDB4MDAzMDAwMDAKKyNkZWZpbmUgX19GMl9QT1JUX01BUF9TSCAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgX19GMl9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMl9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMl9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBfX0YyX0lOVFhfU1RBVFVTX01LICAgICAgICAgICAgICAweDAwMDcwMDAwCisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVNfU0ggICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fRjJfSU5UWF9TVEFUVVMoX3YpICAgICAgICAgICAgICgoX3YpIDw8IF9fRjJfSU5UWF9TVEFUVVNfU0gpCisjZGVmaW5lIF9fRjFfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgX19GMV9GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBfX0YxX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDAwMDAzMDAwCisjZGVmaW5lIF9fRjFfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIF9fRjFfUE9SVF9NQVAoX3YpICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fRjFfUE9SVF9NQVBfU0gpCisjZGVmaW5lIF9fRjFfVk1fTU9ERSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgX19GMV9JTlRYX1NUQVRVU19NSyAgICAgICAgICAgICAgMHgwMDAwMDcwMAorI2RlZmluZSBfX0YxX0lOVFhfU1RBVFVTX1NIICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fRjFfSU5UWF9TVEFUVVMoX3YpICAgICAgICAgICAgICgoX3YpIDw8IF9fRjFfSU5UWF9TVEFUVVNfU0gpCisjZGVmaW5lIF9fRjBfRlVOQ1RJT05fQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgX19GMF9GVU5DVElPTl9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBfX0YwX1BPUlRfTUFQX01LICAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisjZGVmaW5lIF9fRjBfUE9SVF9NQVBfU0ggICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgX19GMF9QT1JUX01BUChfdikgICAgICAgICAgICAgICAgKChfdikgPDwgX19GMF9QT1JUX01BUF9TSCkKKyNkZWZpbmUgX19GMF9WTV9NT0RFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBfX0YwX0lOVFhfU1RBVFVTICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CitlbnVtIHsKKyAgICBfX0YwX0lOVFhfU1RBVFVTX01TSVggICAgICAgICAgICA9IDB4MCwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEEgICAgICAgICAgICA9IDB4MSwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEIgICAgICAgICAgICA9IDB4MiwKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEMgICAgICAgICAgICA9IDB4MywKKyAgICBfX0YwX0lOVFhfU1RBVFVTX0lOVEQgICAgICAgICAgICA9IDB4NCwKK307CisjZGVmaW5lIE9QX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MGMKKyNkZWZpbmUgX19BUFBfRVRIX0NMS19MT1dTUEVFRCAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBfX0dMT0JBTF9DT1JFQ0xLX0hBTEZTUEVFRCAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIF9fR0xPQkFMX0ZDT0VfTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVF9TRU00X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxMAorI2RlZmluZSBIT1NUX1NFTTVfUkVHICAgICAgICAgICAgICAgICAgICAweDAwMDE0NjE0CisjZGVmaW5lIEhPU1RfU0VNNl9SRUcgICAgICAgICAgICAgICAgICAgIDB4MDAwMTQ2MTgKKyNkZWZpbmUgSE9TVF9TRU03X1JFRyAgICAgICAgICAgICAgICAgICAgMHgwMDAxNDYxYworI2RlZmluZSBIT1NUX1NFTTRfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjIwCisjZGVmaW5lIEhPU1RfU0VNNV9JTkZPX1JFRyAgICAgICAgICAgICAgIDB4MDAwMTQ2MjQKKyNkZWZpbmUgSE9TVF9TRU02X0lORk9fUkVHICAgICAgICAgICAgICAgMHgwMDAxNDYyOAorI2RlZmluZSBIT1NUX1NFTTdfSU5GT19SRUcgICAgICAgICAgICAgICAweDAwMDE0NjJjCisjZGVmaW5lIEhPU1RGTjBfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMDAKKyNkZWZpbmUgX19IT1NURk4wX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjBfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMF9MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMF9MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAwNAorI2RlZmluZSBfX0hPU1RGTjBfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMF9MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4wX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4wX0xQVTFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDA4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4wX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMGMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4wX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4wX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOMV9MUFUwX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxMAorI2RlZmluZSBfX0hPU1RGTjFfTFBVMF9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOMV9MUFUwX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4xX0xQVTBfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4xX0xQVTBfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4xX0xQVTFfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MDE0CisjZGVmaW5lIF9fSE9TVEZOMV9MUFUxX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4xX0xQVTFfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjFfTFBVMV9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjFfTFBVMV9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTBfSE9TVEZOMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkwMTgKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTBfSE9TVEZOMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMF9IT1NURk4xX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMF9IT1NURk4xX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMV9IT1NURk4xX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTAxYworI2RlZmluZSBfX0xQVTFfSE9TVEZOMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMV9IT1NURk4xX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUxX0hPU1RGTjFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBIT1NURk4yX0xQVTBfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTUwCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUwX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19IT1NURk4yX0xQVTBfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0hPU1RGTjJfTFBVMF9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMF9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjJfTFBVMV9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNTQKKyNkZWZpbmUgX19IT1NURk4yX0xQVTFfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjJfTFBVMV9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOMl9MUFUxX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOMl9MUFUxX01CT1gwQk9YMF9DTURfU1RBVFVTIDB4MDAwMDAwMDEKKyNkZWZpbmUgTFBVMF9IT1NURk4yX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE1OAorI2RlZmluZSBfX0xQVTBfSE9TVEZOMl9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fTFBVMF9IT1NURk4yX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19MUFUwX0hPU1RGTjJfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUxX0hPU1RGTjJfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTVjCisjZGVmaW5lIF9fTFBVMV9IT1NURk4yX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjJfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTFfSE9TVEZOMl9NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTFfSE9TVEZOMl9NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIEhPU1RGTjNfTFBVMF9NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNjAKKyNkZWZpbmUgX19IT1NURk4zX0xQVTBfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0hPU1RGTjNfTFBVMF9NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fSE9TVEZOM19MUFUwX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fSE9TVEZOM19MUFUwX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSE9TVEZOM19MUFUxX01CT1gwX0NNRF9TVEFUICAgICAgMHgwMDAxOTE2NAorI2RlZmluZSBfX0hPU1RGTjNfTFBVMV9NQk9YMF9JTkZPX01LICAgICAweGZmZmZmZmZlCisjZGVmaW5lIF9fSE9TVEZOM19MUFUxX01CT1gwX0lORk9fU0ggICAgIDEKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GTyhfdikgICAgKChfdikgPDwgX19IT1NURk4zX0xQVTFfTUJPWDBfSU5GT19TSCkKKyNkZWZpbmUgX19IT1NURk4zX0xQVTFfTUJPWDBfQ01EX1NUQVRVUyAgMHgwMDAwMDAwMQorI2RlZmluZSBMUFUwX0hPU1RGTjNfTUJPWDBfQ01EX1NUQVQgICAgICAweDAwMDE5MTY4CisjZGVmaW5lIF9fTFBVMF9IT1NURk4zX01CT1gwX0lORk9fTUsgICAgIDB4ZmZmZmZmZmUKKyNkZWZpbmUgX19MUFUwX0hPU1RGTjNfTUJPWDBfSU5GT19TSCAgICAgMQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPKF92KSAgICAoKF92KSA8PCBfX0xQVTBfSE9TVEZOM19NQk9YMF9JTkZPX1NIKQorI2RlZmluZSBfX0xQVTBfSE9TVEZOM19NQk9YMF9DTURfU1RBVFVTICAweDAwMDAwMDAxCisjZGVmaW5lIExQVTFfSE9TVEZOM19NQk9YMF9DTURfU1RBVCAgICAgIDB4MDAwMTkxNmMKKyNkZWZpbmUgX19MUFUxX0hPU1RGTjNfTUJPWDBfSU5GT19NSyAgICAgMHhmZmZmZmZmZQorI2RlZmluZSBfX0xQVTFfSE9TVEZOM19NQk9YMF9JTkZPX1NIICAgICAxCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk8oX3YpICAgICgoX3YpIDw8IF9fTFBVMV9IT1NURk4zX01CT1gwX0lORk9fU0gpCisjZGVmaW5lIF9fTFBVMV9IT1NURk4zX01CT1gwX0NNRF9TVEFUVVMgIDB4MDAwMDAwMDEKKyNkZWZpbmUgRldfSU5JVF9IQUxUX1AwICAgICAgICAgICAgICAgICAgMHgwMDAxOTFhYworI2RlZmluZSBfX0ZXX0lOSVRfSEFMVF9QICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZXX0lOSVRfSEFMVF9QMSAgICAgICAgICAgICAgICAgIDB4MDAwMTkxYmMKKyNkZWZpbmUgQ1BFX1BJX1BUUl9RMCAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwMAorI2RlZmluZSBfX0NQRV9QSV9VTlVTRURfTUsgICAgICAgICAgICAgICAweGZmZmYwMDAwCisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRF9TSCAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX1BJX1VOVVNFRChfdikgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1BJX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19DUEVfUElfUFRSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBDUEVfUElfUFRSX1ExICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDQwCisjZGVmaW5lIENQRV9DSV9QVFJfUTAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMDQKKyNkZWZpbmUgX19DUEVfQ0lfVU5VU0VEX01LICAgICAgICAgICAgICAgMHhmZmZmMDAwMAorI2RlZmluZSBfX0NQRV9DSV9VTlVTRURfU0ggICAgICAgICAgICAgICAxNgorI2RlZmluZSBfX0NQRV9DSV9VTlVTRUQoX3YpICAgICAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DSV9VTlVTRURfU0gpCisjZGVmaW5lIF9fQ1BFX0NJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0NAorI2RlZmluZSBDUEVfREVQVEhfUTAgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDA4CisjZGVmaW5lIF9fQ1BFX0RFUFRIX1VOVVNFRF9NSyAgICAgICAgICAgIDB4ZjgwMDAwMDAKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEX1NIICAgICAgICAgICAgMjcKKyNkZWZpbmUgX19DUEVfREVQVEhfVU5VU0VEKF92KSAgICAgICAgICAgKChfdikgPDwgX19DUEVfREVQVEhfVU5VU0VEX1NIKQorI2RlZmluZSBfX0NQRV9NU0lYX1ZFQ19JTkRFWF9NSyAgICAgICAgICAweDA3ZmYwMDAwCisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYX1NIICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX01TSVhfVkVDX0lOREVYKF92KSAgICAgICAgICgoX3YpIDw8IF9fQ1BFX01TSVhfVkVDX0lOREVYX1NIKQorI2RlZmluZSBfX0NQRV9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIENQRV9ERVBUSF9RMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNDgKKyNkZWZpbmUgQ1BFX1FDVFJMX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAwYworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMwX01LICAgICAgICAgICAweGZjMDAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzBfU0ggICAgICAgICAgIDI2CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMzBfU0gpCisjZGVmaW5lIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfTUsgICAgICAgICAgIDB4MDMwMDAwMDAKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTF9TSCAgICAgICAgICAgMjQKKyNkZWZpbmUgX19DUEVfRlVOQ19JTlRfQ1RSTChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfRlVOQ19JTlRfQ1RSTF9TSCkKK2VudW0geworICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfRElTQUJMRSAgICAgID0gMHgwLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfRjJORiAgICAgICAgID0gMHgxLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfM1FVQVJUICAgICAgID0gMHgyLAorICAgIF9fQ1BFX0ZVTkNfSU5UX0NUUkxfSEFMRiAgICAgICAgID0gMHgzLAorfTsKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMF9NSyAgICAgICAgICAgMHgwMGYwMDAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwX1NIICAgICAgICAgICAyMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDIwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDIwX1NIKQorI2RlZmluZSBfX0NQRV9TQ0lfVEhfTUsgICAgICAgICAgICAgICAgICAweDAwMGYwMDAwCisjZGVmaW5lIF9fQ1BFX1NDSV9USF9TSCAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIF9fQ1BFX1NDSV9USChfdikgICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1NDSV9USF9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMF9NSyAgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwX1NIICAgICAgICAgICAxNAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDEwKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDEwX1NIKQorI2RlZmluZSBfX0NQRV9BQ0tfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDBfTUsgICAgICAgICAgIDB4MDAwMDFjMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MF9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQ0MChfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQ0MF9TSCkKKyNkZWZpbmUgX19DUEVfUENJRUlEX01LICAgICAgICAgICAgICAgICAgMHgwMDAwMDMwMAorI2RlZmluZSBfX0NQRV9QQ0lFSURfU0ggICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIF9fQ1BFX1BDSUVJRChfdikgICAgICAgICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX1BDSUVJRF9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMF9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAwX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDAoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMDBfU0gpCisjZGVmaW5lIF9fQ1BFX0VTSVpFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BFX1FDVFJMX1ExICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA0YworI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDMxX01LICAgICAgICAgICAweGZjMDAwMDAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzFfU0ggICAgICAgICAgIDI2CisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMzEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VEMzFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMjFfTUsgICAgICAgICAgIDB4MDBmMDAwMDAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMV9TSCAgICAgICAgICAgMjAKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQyMShfdikgICAgICAgICAgKChfdikgPDwgX19DUEVfQ1RSTF9VTlVTRUQyMV9TSCkKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQxMV9NSyAgICAgICAgICAgMHgwMDAwYzAwMAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExX1NIICAgICAgICAgICAxNAorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDExKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDExX1NIKQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDQxX01LICAgICAgICAgICAweDAwMDAxYzAwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDFfU0ggICAgICAgICAgIDEwCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VENDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fQ1BFX0NUUkxfVU5VU0VENDFfU0gpCisjZGVmaW5lIF9fQ1BFX0NUUkxfVU5VU0VEMDFfTUsgICAgICAgICAgIDB4MDAwMDAwZmUKKyNkZWZpbmUgX19DUEVfQ1RSTF9VTlVTRUQwMV9TSCAgICAgICAgICAgMQorI2RlZmluZSBfX0NQRV9DVFJMX1VOVVNFRDAxKF92KSAgICAgICAgICAoKF92KSA8PCBfX0NQRV9DVFJMX1VOVVNFRDAxX1NIKQorI2RlZmluZSBSTUVfUElfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDIwCisjZGVmaW5lIF9fTEFURU5DWV9USU1FX1NUQU1QX01LICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVBfU0ggICAgICAgICAgMTYKKyNkZWZpbmUgX19MQVRFTkNZX1RJTUVfU1RBTVAoX3YpICAgICAgICAgKChfdikgPDwgX19MQVRFTkNZX1RJTUVfU1RBTVBfU0gpCisjZGVmaW5lIF9fUk1FX1BJX1BUUiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgUk1FX1BJX1BUUl9RMSAgICAgICAgICAgICAgICAgICAgMHgwMDAzODA2MAorI2RlZmluZSBSTUVfQ0lfUFRSX1EwICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDI0CisjZGVmaW5lIF9fREVMQVlfVElNRV9TVEFNUF9NSyAgICAgICAgICAgIDB4ZmZmZjAwMDAKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QX1NIICAgICAgICAgICAgMTYKKyNkZWZpbmUgX19ERUxBWV9USU1FX1NUQU1QKF92KSAgICAgICAgICAgKChfdikgPDwgX19ERUxBWV9USU1FX1NUQU1QX1NIKQorI2RlZmluZSBfX1JNRV9DSV9QVFIgICAgICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIFJNRV9DSV9QVFJfUTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwNjQKKyNkZWZpbmUgUk1FX0RFUFRIX1EwICAgICAgICAgICAgICAgICAgICAgMHgwMDAzODAyOAorI2RlZmluZSBfX1JNRV9ERVBUSF9VTlVTRURfTUsgICAgICAgICAgICAweGY4MDAwMDAwCisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRF9TSCAgICAgICAgICAgIDI3CisjZGVmaW5lIF9fUk1FX0RFUFRIX1VOVVNFRChfdikgICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0RFUFRIX1VOVVNFRF9TSCkKKyNkZWZpbmUgX19STUVfTVNJWF9WRUNfSU5ERVhfTUsgICAgICAgICAgMHgwN2ZmMDAwMAorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9TSCAgICAgICAgICAxNgorI2RlZmluZSBfX1JNRV9NU0lYX1ZFQ19JTkRFWChfdikgICAgICAgICAoKF92KSA8PCBfX1JNRV9NU0lYX1ZFQ19JTkRFWF9TSCkKKyNkZWZpbmUgX19STUVfREVQVEggICAgICAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBSTUVfREVQVEhfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDY4CisjZGVmaW5lIFJNRV9RQ1RSTF9RMCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMzgwMmMKKyNkZWZpbmUgX19STUVfSU5UX0xBVEVOQ1lfVElNRVJfTUsgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9TSCAgICAgICAyNAorI2RlZmluZSBfX1JNRV9JTlRfTEFURU5DWV9USU1FUihfdikgICAgICAoKF92KSA8PCBfX1JNRV9JTlRfTEFURU5DWV9USU1FUl9TSCkKKyNkZWZpbmUgX19STUVfSU5UX0RFTEFZX1RJTUVSX01LICAgICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVJfU0ggICAgICAgICAxNgorI2RlZmluZSBfX1JNRV9JTlRfREVMQVlfVElNRVIoX3YpICAgICAgICAoKF92KSA8PCBfX1JNRV9JTlRfREVMQVlfVElNRVJfU0gpCisjZGVmaW5lIF9fUk1FX0lOVF9ERUxBWV9ESVNBQkxFICAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgX19STUVfRExZX0RFTEFZX0RJU0FCTEUgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBfX1JNRV9BQ0tfUEVORElORyAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIF9fUk1FX0ZVTExfSU5URVJSVVBUX0RJU0FCTEUgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMF9NSyAgICAgICAgICAgMHgwMDAwMGMwMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwX1NIICAgICAgICAgICAxMAorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDEwKF92KSAgICAgICAgICAoKF92KSA8PCBfX1JNRV9DVFJMX1VOVVNFRDEwX1NIKQorI2RlZmluZSBfX1JNRV9QQ0lFSURfTUsgICAgICAgICAgICAgICAgICAweDAwMDAwMzAwCisjZGVmaW5lIF9fUk1FX1BDSUVJRF9TSCAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgX19STUVfUENJRUlEKF92KSAgICAgICAgICAgICAgICAgKChfdikgPDwgX19STUVfUENJRUlEX1NIKQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAwX01LICAgICAgICAgICAweDAwMDAwMGZlCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDBfU0ggICAgICAgICAgIDEKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMChfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQwMF9TSCkKKyNkZWZpbmUgX19STUVfRVNJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTUVfUUNUUkxfUTEgICAgICAgICAgICAgICAgICAgICAweDAwMDM4MDZjCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMTFfTUsgICAgICAgICAgIDB4MDAwMDBjMDAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMV9TSCAgICAgICAgICAgMTAKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQxMShfdikgICAgICAgICAgKChfdikgPDwgX19STUVfQ1RSTF9VTlVTRUQxMV9TSCkKKyNkZWZpbmUgX19STUVfQ1RSTF9VTlVTRUQwMV9NSyAgICAgICAgICAgMHgwMDAwMDBmZQorI2RlZmluZSBfX1JNRV9DVFJMX1VOVVNFRDAxX1NIICAgICAgICAgICAxCisjZGVmaW5lIF9fUk1FX0NUUkxfVU5VU0VEMDEoX3YpICAgICAgICAgICgoX3YpIDw8IF9fUk1FX0NUUkxfVU5VU0VEMDFfU0gpCisjZGVmaW5lIFBTU19DVExfUkVHICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTg4MDAKKyNkZWZpbmUgX19QU1NfSTJDX0NMS19ESVZfTUsgICAgICAgICAgICAgMHgwMDdmMDAwMAorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVl9TSCAgICAgICAgICAgICAxNgorI2RlZmluZSBfX1BTU19JMkNfQ0xLX0RJVihfdikgICAgICAgICAgICAoKF92KSA8PCBfX1BTU19JMkNfQ0xLX0RJVl9TSCkKKyNkZWZpbmUgX19QU1NfTE1FTV9JTklUX0RPTkUgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBfX1BTU19MTUVNX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIF9fUFNTX0xNRU1fSU5JVF9FTiAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgX19QU1NfTFBVMV9SRVNFVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBfX1BTU19MUFUwX1JFU0VUICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEhRTV9RU0VUMF9SWFFfRFJCTF9QMCAgICAgICAgICAgIDB4MDAwMzgwMDAKKyNkZWZpbmUgX19SWFEwX0FERF9WRUNUT1JTX1AgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX1JYUTBfU1RPUF9QICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fUlhRMF9QUkRfUFRSX1AgICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX1JYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODA4MAorI2RlZmluZSBfX1JYUTFfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fUlhRMV9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19SWFExX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfUlhRX0RSQkxfUDEgICAgICAgICAgICAweDAwMDNjMDAwCisjZGVmaW5lIEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwODAKKyNkZWZpbmUgSFFNX1FTRVQwX1RYUV9EUkJMX1AwICAgICAgICAgICAgMHgwMDAzODAyMAorI2RlZmluZSBfX1RYUTBfQUREX1ZFQ1RPUlNfUCAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fVFhRMF9TVE9QX1AgICAgICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19UWFEwX1BSRF9QVFJfUCAgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDFfVFhRX0RSQkxfUDAgICAgICAgICAgICAweDAwMDM4MGEwCisjZGVmaW5lIF9fVFhRMV9BRERfVkVDVE9SU19QICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19UWFExX1NUT1BfUCAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX1RYUTFfUFJEX1BUUl9QICAgICAgICAgICAgICAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMF9UWFFfRFJCTF9QMSAgICAgICAgICAgIDB4MDAwM2MwMjAKKyNkZWZpbmUgSFFNX1FTRVQxX1RYUV9EUkJMX1AxICAgICAgICAgICAgMHgwMDAzYzBhMAorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8xX1AwICAgICAgICAgICAweDAwMDM4MDQwCisjZGVmaW5lIF9fSUIxXzBfQUNLX1AgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgX19JQjFfMF9ESVNBQkxFX1AgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBfX0lCMV8wX05VTV9PRl9BQ0tFRF9FVkVOVFNfUCAgICAweDAwMDBmZmZmCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzFfUDAgICAgICAgICAgIDB4MDAwMzgwYzAKKyNkZWZpbmUgX19JQjFfMV9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMV8xX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIxXzFfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSAgICAgICAgICAgMHgwMDAzYzA0MAorI2RlZmluZSBIUU1fUVNFVDFfSUJfRFJCTF8xX1AxICAgICAgICAgICAweDAwMDNjMGMwCisjZGVmaW5lIEhRTV9RU0VUMF9JQl9EUkJMXzJfUDAgICAgICAgICAgIDB4MDAwMzgwNjAKKyNkZWZpbmUgX19JQjJfMF9BQ0tfUCAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBfX0lCMl8wX0RJU0FCTEVfUCAgICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzBfTlVNX09GX0FDS0VEX0VWRU5UU19QICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgSFFNX1FTRVQxX0lCX0RSQkxfMl9QMCAgICAgICAgICAgMHgwMDAzODBlMAorI2RlZmluZSBfX0lCMl8xX0FDS19QICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIF9fSUIyXzFfRElTQUJMRV9QICAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgX19JQjJfMV9OVU1fT0ZfQUNLRURfRVZFTlRTX1AgICAgMHgwMDAwZmZmZgorI2RlZmluZSBIUU1fUVNFVDBfSUJfRFJCTF8yX1AxICAgICAgICAgICAweDAwMDNjMDYwCisjZGVmaW5lIEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgICAgICAgICAgIDB4MDAwM2MwZTAKKworCisvKgorICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIGVpdGhlciBpbiBlcnJvci9taXNzaW5nIGluIHNwZWMuIEl0cyBhdXRvLWdlbmVyYXRlZAorICogZnJvbSBoYXJkIGNvZGVkIHZhbHVlcyBpbiByZWdwYXJzZS5wbC4KKyAqLworI2RlZmluZSBfX0VNUEhQT1NUX0FUXzRHX01LX0ZJWCAgICAgICAgICAweDAwMDAwMDFjCisjZGVmaW5lIF9fRU1QSFBPU1RfQVRfNEdfU0hfRklYICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgX19FTVBIUFJFX0FUXzRHX0ZJWCAgICAgICAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBfX1NGUF9UWFJBVEVfRU5fRklYICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIF9fU0ZQX1JYUkFURV9FTl9GSVggICAgICAgICAgICAgIDB4MDAwMDAwODAKKworCisvKgorICogVGhlc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gaGFyZCBjb2RlZCB2YWx1ZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisKKworLyoKKyAqIFRoZXNlIHJlZ2lzdGVyIG1hcHBpbmcgZGVmaW5pdGlvbnMgYXJlIGF1dG8tZ2VuZXJhdGVkIGZyb20gbWFwcGluZyB0YWJsZXMKKyAqIGluIHJlZ3BhcnNlLnBsLgorICovCisjZGVmaW5lIEJGQV9JT0MwX0hCRUFUX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNMF9JTkZPX1JFRworI2RlZmluZSBCRkFfSU9DMF9TVEFURV9SRUcgICAgICAgICAgICAgICBIT1NUX1NFTTFfSU5GT19SRUcKKyNkZWZpbmUgQkZBX0lPQzFfSEJFQVRfUkVHICAgICAgICAgICAgICAgSE9TVF9TRU0yX0lORk9fUkVHCisjZGVmaW5lIEJGQV9JT0MxX1NUQVRFX1JFRyAgICAgICAgICAgICAgIEhPU1RfU0VNM19JTkZPX1JFRworI2RlZmluZSBCRkFfRldfVVNFX0NPVU5UICAgICAgICAgICAgICAgICBIT1NUX1NFTTRfSU5GT19SRUcKKworI2RlZmluZSBDUEVfREVQVEhfUShfX24pIFwKKwkoQ1BFX0RFUFRIX1EwICsgKF9fbikgKiAoQ1BFX0RFUFRIX1ExIC0gQ1BFX0RFUFRIX1EwKSkKKyNkZWZpbmUgQ1BFX1FDVFJMX1EoX19uKSBcCisJKENQRV9RQ1RSTF9RMCArIChfX24pICogKENQRV9RQ1RSTF9RMSAtIENQRV9RQ1RSTF9RMCkpCisjZGVmaW5lIENQRV9QSV9QVFJfUShfX24pIFwKKwkoQ1BFX1BJX1BUUl9RMCArIChfX24pICogKENQRV9QSV9QVFJfUTEgLSBDUEVfUElfUFRSX1EwKSkKKyNkZWZpbmUgQ1BFX0NJX1BUUl9RKF9fbikgXAorCShDUEVfQ0lfUFRSX1EwICsgKF9fbikgKiAoQ1BFX0NJX1BUUl9RMSAtIENQRV9DSV9QVFJfUTApKQorI2RlZmluZSBSTUVfREVQVEhfUShfX24pIFwKKwkoUk1FX0RFUFRIX1EwICsgKF9fbikgKiAoUk1FX0RFUFRIX1ExIC0gUk1FX0RFUFRIX1EwKSkKKyNkZWZpbmUgUk1FX1FDVFJMX1EoX19uKSBcCisJKFJNRV9RQ1RSTF9RMCArIChfX24pICogKFJNRV9RQ1RSTF9RMSAtIFJNRV9RQ1RSTF9RMCkpCisjZGVmaW5lIFJNRV9QSV9QVFJfUShfX24pIFwKKwkoUk1FX1BJX1BUUl9RMCArIChfX24pICogKFJNRV9QSV9QVFJfUTEgLSBSTUVfUElfUFRSX1EwKSkKKyNkZWZpbmUgUk1FX0NJX1BUUl9RKF9fbikgXAorCShSTUVfQ0lfUFRSX1EwICsgKF9fbikgKiAoUk1FX0NJX1BUUl9RMSAtIFJNRV9DSV9QVFJfUTApKQorI2RlZmluZSBIUU1fUVNFVF9SWFFfRFJCTF9QMChfX24pIFwKKwkoSFFNX1FTRVQwX1JYUV9EUkJMX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX1JYUV9EUkJMX1AwIC0gXAorCUhRTV9RU0VUMF9SWFFfRFJCTF9QMCkpCisjZGVmaW5lIEhRTV9RU0VUX1RYUV9EUkJMX1AwKF9fbikgXAorCShIUU1fUVNFVDBfVFhRX0RSQkxfUDAgKyAoX19uKSAqIChIUU1fUVNFVDFfVFhRX0RSQkxfUDAgLSBcCisJSFFNX1FTRVQwX1RYUV9EUkJMX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8xX1AwKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8xX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMV9QMCAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8xX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfSUJfRFJCTF8yX1AwKF9fbikgXAorCShIUU1fUVNFVDBfSUJfRFJCTF8yX1AwICsgKF9fbikgKiAoSFFNX1FTRVQxX0lCX0RSQkxfMl9QMCAtIFwKKwlIUU1fUVNFVDBfSUJfRFJCTF8yX1AwKSkKKyNkZWZpbmUgSFFNX1FTRVRfUlhRX0RSQkxfUDEoX19uKSBcCisJKEhRTV9RU0VUMF9SWFFfRFJCTF9QMSArIChfX24pICogKEhRTV9RU0VUMV9SWFFfRFJCTF9QMSAtIFwKKwlIUU1fUVNFVDBfUlhRX0RSQkxfUDEpKQorI2RlZmluZSBIUU1fUVNFVF9UWFFfRFJCTF9QMShfX24pIFwKKwkoSFFNX1FTRVQwX1RYUV9EUkJMX1AxICsgKF9fbikgKiAoSFFNX1FTRVQxX1RYUV9EUkJMX1AxIC0gXAorCUhRTV9RU0VUMF9UWFFfRFJCTF9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMV9QMShfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzFfUDEgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMV9QMSkpCisjZGVmaW5lIEhRTV9RU0VUX0lCX0RSQkxfMl9QMShfX24pIFwKKwkoSFFNX1FTRVQwX0lCX0RSQkxfMl9QMSArIChfX24pICogKEhRTV9RU0VUMV9JQl9EUkJMXzJfUDEgLSBcCisJSFFNX1FTRVQwX0lCX0RSQkxfMl9QMSkpCisKKyNkZWZpbmUgQ1BFX1FfTlVNKF9fZm4sIF9fcSkgICgoKF9fZm4pIDw8IDIpICsgKF9fcSkpCisjZGVmaW5lIFJNRV9RX05VTShfX2ZuLCBfX3EpICAoKChfX2ZuKSA8PCAyKSArIChfX3EpKQorI2RlZmluZSBDUEVfUV9NQVNLKF9fcSkgICgoX19xKSAmIDB4MykKKyNkZWZpbmUgUk1FX1FfTUFTSyhfX3EpICAoKF9fcSkgJiAweDMpCisKKworLyoKKyAqIFBDSSBNU0ktWCB2ZWN0b3IgZGVmaW5lcworICovCitlbnVtIHsKKyAgICBCRkFfTVNJWF9DUEVfUTAgPSAwLAorICAgIEJGQV9NU0lYX0NQRV9RMSA9IDEsCisgICAgQkZBX01TSVhfQ1BFX1EyID0gMiwKKyAgICBCRkFfTVNJWF9DUEVfUTMgPSAzLAorICAgIEJGQV9NU0lYX1JNRV9RMCA9IDQsCisgICAgQkZBX01TSVhfUk1FX1ExID0gNSwKKyAgICBCRkFfTVNJWF9STUVfUTIgPSA2LAorICAgIEJGQV9NU0lYX1JNRV9RMyA9IDcsCisgICAgQkZBX01TSVhfTFBVX0VSUiA9IDgsCisgICAgQkZBX01TSVhfQ1RfTUFYID0gOSwKK307CisKKy8qCisgKiBBbmQgY29ycmVzcG9uZGluZyBob3N0IGludGVycnVwdCBzdGF0dXMgYml0IGZpZWxkIGRlZmluZXMKKyAqLworI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EwICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTEgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RMiAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1EzICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFUKKyNkZWZpbmUgX19IRk5fSU5UX0NQRV9RNSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX1E2ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDBVCisjZGVmaW5lIF9fSEZOX0lOVF9DUEVfUTcgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMCAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1ExICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTIgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RMyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E0ICAgICAgICAgICAgICAgICAgIDB4MDAwMDEwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfUTUgICAgICAgICAgICAgICAgICAgMHgwMDAwMjAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX1JNRV9RNiAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVQorI2RlZmluZSBfX0hGTl9JTlRfUk1FX1E3ICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfRU1DICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX0VSUl9MUFUwICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfRVJSX0xQVTEgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9FUlJfUFNTICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1hfTFBVMCAgICAgICAgICAgICAgICAweDAwMTAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfTUJPWF9MUFUxICAgICAgICAgICAgICAgIDB4MDAyMDAwMDBVCisjZGVmaW5lIF9fSEZOX0lOVF9NQk9YMV9MUFUwICAgICAgICAgICAgICAgMHgwMDQwMDAwMFUKKyNkZWZpbmUgX19IRk5fSU5UX01CT1gxX0xQVTEgICAgICAgICAgICAgICAweDAwODAwMDAwVQorI2RlZmluZSBfX0hGTl9JTlRfQ1BFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwZmZVCisjZGVmaW5lIF9fSEZOX0lOVF9STUVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwZmYwMFUKKworCisvKgorICogY2F0YXB1bHQgbWVtb3J5IG1hcC4KKyAqLworI2RlZmluZSBMTF9QR05fSFFNMCAgICAgICAgICAgICAgICAgICAgICAweDAwOTYKKyNkZWZpbmUgTExfUEdOX0hRTTEgICAgICAgICAgICAgICAgICAgICAgMHgwMDk3CisjZGVmaW5lIFBTU19TTUVNX1BBR0VfU1RBUlQJMHg4MDAwCisjZGVmaW5lIFBTU19TTUVNX1BHTlVNKF9wZzAsIF9tYSkJKChfcGcwKSArICgoX21hKSA+PiAxNSkpCisjZGVmaW5lIFBTU19TTUVNX1BHT0ZGKF9tYSkJKChfbWEpICYgMHg3ZmZmKQorCisvKgorICogRW5kIG9mIGNhdGFwdWx0IG1lbW9yeSBtYXAKKyAqLworCisKKyNlbmRpZiAvKiBfX0JGSV9DVFJFR19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9mYWJyaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDY2OWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmFicmljLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0ZBQlJJQ19IX18KKyNkZWZpbmUgX19CRklfRkFCUklDX0hfXworCisjaW5jbHVkZSA8YmZpL2JmaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfZmFicmljX2gyaV9tc2dzIHsKKwlCRklfRkFCUklDX0gySV9DUkVBVEVfUkVRCT0gMSwKKwlCRklfRkFCUklDX0gySV9ERUxFVEVfUkVRCT0gMiwKKwlCRklfRkFCUklDX0gySV9TRVRBVVRICQk9IDMsCit9OworCitlbnVtIGJmaV9mYWJyaWNfaTJoX21zZ3MgeworCUJGSV9GQUJSSUNfSTJIX0NSRUFURV9SU1AJPSBCRkFfSTJITSgxKSwKKwlCRklfRkFCUklDX0kySF9ERUxFVEVfUlNQCT0gQkZBX0kySE0oMiksCisJQkZJX0ZBQlJJQ19JMkhfU0VUQVVUSF9SU1AJPSBCRkFfSTJITSgzKSwKKwlCRklfRkFCUklDX0kySF9PTkxJTkUJCT0gQkZBX0kySE0oNCksCisJQkZJX0ZBQlJJQ19JMkhfT0ZGTElORQkJPSBCRkFfSTJITSg1KSwKK307CisKK3N0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yZXFfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OCAgICAgICAgIHZmX2VuOwkJLyogIHZpcnR1YWwgZmFicmljIGVuYWJsZQkqLworCXU4ICAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIHZmX2lkOwkJLyogIHZpcnR1YWwgZmFicmljIElECQkqLworCXd3bl90CQlwd3duOwkJLyogIHBvcnQgbmFtZQkJCSovCisJd3duX3QJCW53d247CQkvKiAgbm9kZSBuYW1lCQkJKi8KK307CisKK3N0cnVjdCBiZmlfZmFicmljX2NyZWF0ZV9yc3BfcyB7CisJYmZpX21oZHJfdAltaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IGZhYnJpYyBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmFicmljIGNyZWF0ZSBzdGF0dXMJKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2ZhYnJpY19kZWxldGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBmd19oYW5kbGU7CS8qICBmaXJtd2FyZSBmYWJyaWMgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgZmFicmljIGhhbmRsZQkJKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmYWJyaWMgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKworI2RlZmluZSBCRklfRkFCUklDX0FVVEhTRUNSRVRfTEVOCTY0CitzdHJ1Y3QgYmZpX2ZhYnJpY19zZXRhdXRoX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGhhbmRsZSBvZiBmYWJyaWMJKi8KKwl1OAkJYWxnb3JpdGhtOworCXU4CQlncm91cDsKKwl1OAkJc2VjcmV0W0JGSV9GQUJSSUNfQVVUSFNFQ1JFVF9MRU5dOworfTsKKwordW5pb24gYmZpX2ZhYnJpY19oMmlfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcmVxX3MJKmNyZWF0ZV9yZXE7CisJc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworfTsKKwordW5pb24gYmZpX2ZhYnJpY19pMmhfbXNnX3UgeworCWJmaV9tc2dfdAkJKm1zZzsKKwlzdHJ1Y3QgYmZpX2ZhYnJpY19jcmVhdGVfcnNwX3MJKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9mYWJyaWNfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0ZBQlJJQ19IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjMDU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjcGltLmgKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9GQ1BJTV9IX18KKyNkZWZpbmUgX19CRklfRkNQSU1fSF9fCisKKyNpbmNsdWRlICJiZmkuaCIKKyNpbmNsdWRlIDxwcm90b2NvbC9mY3AuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBJbml0aWF0b3IgbW9kZSBJLVQgbmV4dXMgaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfaXRuaW1faDJpIHsKKwlCRklfSVROSU1fSDJJX0NSRUFURV9SRVEgPSAxLAkvKiAgaS10IG5leHVzIGNyZWF0aW9uICovCisJQkZJX0lUTklNX0gySV9ERUxFVEVfUkVRID0gMiwJLyogIGktdCBuZXh1cyBkZWxldGlvbiAqLworfTsKKworZW51bSBiZmlfaXRuaW1faTJoIHsKKwlCRklfSVROSU1fSTJIX0NSRUFURV9SU1AgPSBCRkFfSTJITSgxKSwKKwlCRklfSVROSU1fSTJIX0RFTEVURV9SU1AgPSBCRkFfSTJITSgyKSwKKwlCRklfSVROSU1fSTJIX1NMRVJfRVZFTlQgPSBCRkFfSTJITSgzKSwKK307CisKK3N0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZi93IGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTggICAgICAgICBjbGFzczsJCS8qICBGQyBjbGFzcyBmb3IgSU8JCSAqLworCXU4ICAgICAgICAgc2VxX3JlYzsJLyogIHNlcXVlbmNlIHJlY292ZXJ5IHN1cHBvcnQJICovCisJdTggICAgICAgICBtc2dfbm87CQkvKiAgc2VxIGlkIG9mIHRoZSBtc2cJCSAqLworfTsKKworc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgYmZhIGhhbmRsZSBmb3IgaXRuaW0JICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgZmNwIHJlcXVlc3Qgc3RhdHVzCQkgKi8KKwl1OCAgICAgICAgIHNlcV9pZDsJCS8qICBzZXEgaWQgb2YgdGhlIG1zZwkJICovCit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGYvdyBpdG5pbSBoYW5kbGUJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCitzdHJ1Y3QgYmZpX2l0bmltX2RlbGV0ZV9yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBiZmEgaGFuZGxlIGZvciBpdG5pbQkgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBmY3AgcmVxdWVzdCBzdGF0dXMJCSAqLworCXU4ICAgICAgICAgc2VxX2lkOwkJLyogIHNlcSBpZCBvZiB0aGUgbXNnCQkgKi8KK307CisKK3N0cnVjdCBiZmlfaXRuaW1fc2xlcl9ldmVudF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGJmYSBoYW5kbGUgZm9yIGl0bmltCSAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3VuaW9uIGJmaV9pdG5pbV9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfaXRuaW1fY3JlYXRlX3JlcV9zICpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfaXRuaW1fZGVsZXRlX3JlcV9zICpkZWxldGVfcmVxOworCXN0cnVjdCBiZmlfbXNnX3MgICAgICAqbXNnOworfTsKKwordW5pb24gYmZpX2l0bmltX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9pdG5pbV9jcmVhdGVfcnNwX3MgKmNyZWF0ZV9yc3A7CisJc3RydWN0IGJmaV9pdG5pbV9kZWxldGVfcnNwX3MgKmRlbGV0ZV9yc3A7CisJc3RydWN0IGJmaV9pdG5pbV9zbGVyX2V2ZW50X3MgKnNsZXJfZXZlbnQ7CisJc3RydWN0IGJmaV9tc2dfcyAgICAgICptc2c7Cit9OworCisvKgorICogSW5pdGlhdG9yIG1vZGUgSU8gaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfaW9pbV9oMmkgeworCUJGSV9JT0lNX0gySV9JT0FCT1JUX1JFUSA9IDEsCS8qICBJTyBhYm9ydCByZXF1ZXN0CSAqLworCUJGSV9JT0lNX0gySV9JT0NMRUFOVVBfUkVRID0gMiwJLyogIElPIGNsZWFudXAgcmVxdWVzdAkgKi8KK307CisKK2VudW0gYmZpX2lvaW1faTJoIHsKKwlCRklfSU9JTV9JMkhfSU9fUlNQID0gQkZBX0kySE0oMSksCS8qICBub24tZnAgSU8gcmVzcG9uc2UJICovCisJQkZJX0lPSU1fSTJIX0lPQUJPUlRfUlNQID0gQkZBX0kySE0oMiksLyogIEFCT1JUIHJzcAkgKi8KK307CisKKy8qKgorICogSU8gY29tbWFuZCBESUYgaW5mbworICovCitzdHJ1Y3QgYmZpX2lvaW1fZGlmX3MgeworCXUzMglkaWZfaW5mb1s0XTsKK307CisKKy8qKgorICogRkNQIElPIG1lc3NhZ2VzIG92ZXJ2aWV3CisgKgorICogQG5vdGUKKyAqIC0gTWF4IENEQiBsZW5ndGggc3VwcG9ydGVkIGlzIDY0IGJ5dGVzLgorICogLSBTQ1NJIExpbmtlZCBjb21tYW5kcyBhbmQgU0NTSSBiaS1kaXJlY3Rpb25hbCBDb21tYW5kcyBub3QKKyAqIAkgc3VwcG9ydGVkLgorICoKKyAqLworc3RydWN0IGJmaV9pb2ltX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAqLworCXUxNiAgICAgICAgaW9fdGFnOwkJLyogIEkvTyB0YWcJCQkgKi8KKwl1MTYgICAgICAgIHJwb3J0X2hkbDsJLyogIGl0bmltL3Jwb3J0IGZpcm13YXJlIGhhbmRsZSAqLworCXN0cnVjdCBmY3BfY21uZF9zIGNtbmQ7CQkvKiAgSU8gcmVxdWVzdCBpbmZvCQkgKi8KKworCS8qKgorCSAqIFNHIGVsZW1lbnRzIGFycmF5IHdpdGhpbiB0aGUgSU8gcmVxdWVzdCBtdXN0IGJlIGRvdWJsZSB3b3JkCisJICogYWxpZ25lZC4gVGhpcyBhbGlnbWVudCBpcyByZXF1aXJlZCB0byBvcHRpbWl6ZSBTR00gc2V0dXAgZm9yIHRoZSBJTy4KKwkgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgc2dlc1tCRklfU0dFX0lOTElORV9NQVhdOworCXU4ICAgICAgICAgaW9fdGltZW91dDsKKwl1OCAgICAgICAgIGRpZl9lbjsKKwl1OCAgICAgICAgIHJzdmRfYVsyXTsKKwlzdHJ1Y3QgYmZpX2lvaW1fZGlmX3MgIGRpZjsKK307CisKKy8qKgorICogCVRoaXMgdGFibGUgc2hvd3MgdmFyaW91cyBJTyBzdGF0dXMgY29kZXMgZnJvbSBmaXJtd2FyZSBhbmQgdGhlaXIKKyAqCW1lYW5pbmcuIEhvc3QgZHJpdmVyIGNhbiB1c2UgdGhlc2Ugc3RhdHVzIGNvZGVzIHRvIGZ1cnRoZXIgcHJvY2VzcworICoJSU8gY29tcGxldGlvbnMuCisgKgorICogCUJGSV9JT0lNX1NUU19PSwkJOiBJTyBjb21wbGV0ZWQgd2l0aCBlcnJvciBmcmVlIFNDU0kgJgorICoJCQkJCSAgIHRyYW5zcG9ydCBzdGF0dXMuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGQV9JT0lNX1NUU19TQ1NJX0VSUgkJOiBJTyBjb21wbGV0ZWQgd2l0aCBzY3NpIGVycm9yLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQJOiBJTyB3YXMgYWJvcnRlZCBzdWNjZXNzZnVsbHkgZHVlIHRvCisgKgkJCQkJICAgaG9zdCByZXF1ZXN0LgorICogCQkJCQkgICAtIGlvLXRhZyBjYW5ub3QgYmUgcmV1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0FCT1JURUQJCTogSU8gd2FzIGFib3J0ZWQgc3VjY2Vzc2Z1bGx5CisgKgkJCQkJICAgaW50ZXJuYWxseSBieSBmL3cuCisgKiAJCQkJCSAgIC0gaW8tdGFnIGNhbm5vdCBiZSByZXVzZWQgeWV0LgorICoKKyAqIAlCRklfSU9JTV9TVFNfVElNRURPVVQJOiBJTyB0aW1lZG91dCBhbmQgQUJUUy9SUlEgaXMgaGFwcGVuaW5nCisgKgkJCQkJICAgaW4gdGhlIGZpcm13YXJlIGFuZAorICogCQkJCQkgICAtIGlvLXRhZyBjYW5ub3QgYmUgcmV1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1NRRVJfTkVFREVECTogRmlybXdhcmUgY291bGQgbm90IHJlY292ZXIgdGhlIElPCisgKgkJCQkJICB3aXRoIHNlcXVlbmNlIGxldmVsIGVycm9yCisgKiAJCQkJCSAgbG9naWMgYW5kIGhlbmNlIGhvc3QgbmVlZHMgdG8gcmV0cnkKKyAqCQkJCQkgIHRoaXMgSU8gd2l0aCBhIGRpZmZlcmVudCBJTyB0YWcKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW5ub3QgYmUgdXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19ORVhVU19BQk9SVAk6IFNlY29uZCBMZXZlbCBFcnJvciBSZWNvdmVyeSBmcm9tIGhvc3QKKyAqCQkJCQkgIGlzIHJlcXVpcmVkIGJlY2F1c2UgMiBjb25zZWN1dGl2ZSBBQlRTCisgKgkJCQkJICB0aW1lZG91dCBhbmQgaG9zdCBuZWVkcyBsb2dvdXQgYW5kCisgKgkJCQkJICByZS1sb2dpbiB3aXRoIHRoZSB0YXJnZXQKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW5ub3QgYmUgdXNlZCB5ZXQuCisgKgorICogCUJGSV9JT0lNX1NUU19VTkRFUlJVTgk6IElPIGNvbXBsZXRlZCB3aXRoIFNDU0kgc3RhdHVzIGdvb2QsCisgKgkJCQkJICBidXQgdGhlIGRhdGEgdHJhbmZlcnJlZCBpcyBsZXNzIHRoYW4KKyAqCQkJCQkgIHRoZSBmY3AgZGF0YSBsZW5ndGggaW4gdGhlIGNvbW1hbmQuCisgKgkJCQkJICBleC4gU0NTSSBJTlFVSVJZIHdoZXJlIHRyYW5zZmVycmVkCisgKgkJCQkJICBkYXRhIGxlbmd0aCBhbmQgcmVzaWR1ZSBjb3VudCBpbiBGQ1AKKyAqCQkJCQkgIHJlc3BvbnNlIGFjY291bnRzIGZvciB0b3RhbCBmY3AtZGwKKyAqIAkJCQkJICAtIGlvLXRhZyBjYW4gYmUgcmV1c2VkLgorICoKKyAqIAlCRklfSU9JTV9TVFNfT1ZFUlJVTgk6IElPIGNvbXBsZXRlZCB3aXRoIFNDU0kgc3RhdHVzIGdvb2QsCisgKgkJCQkJICBidXQgdGhlIGRhdGEgdHJhbnNlcnJlZCBpcyBtb3JlIHRoYW4KKyAqCQkJCQkgIGZjcCBkYXRhIGxlbmd0aCBpbiB0aGUgY29tbWFuZC4gZXguCisgKgkJCQkJICBUQVBFIElPcyB3aGVyZSBibG9ja3MgY2FuIG9mIHVuZXF1YWwKKyAqCQkJCQkgIGxlbmd0aHMuCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1JFU19GUkVFCTogRmlybXdhcmUgaGFzIGNvbXBsZXRlZCB1c2luZyBpby10YWcKKyAqCQkJCQkgIGR1cmluZyBhYm9ydCBwcm9jZXNzCisgKiAJCQkJCSAgLSBpby10YWcgY2FuIGJlIHJldXNlZC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX1BST1RPX0VSUgk6IEZpcm13YXJlIGRldGVjdGVkIGEgcHJvdG9jb2wgZXJyb3IuCisgKgkJCQkJICBleCB0YXJnZXQgc2VudCBtb3JlIGRhdGEgdGhhbgorICoJCQkJCSAgcmVxdWVzdGVkLCBvciB0aGVyZSB3YXMgZGF0YSBmcmFtZQorICoJCQkJCSAgbG9zcyBhbmQgb3RoZXIgcmVhc29ucworICogCQkJCQkgIC0gaW8tdGFnIGNhbm5vdCBiZSB1c2VkIHlldC4KKyAqCisgKiAJQkZJX0lPSU1fU1RTX0RJRl9FUlIJOiBGaXJ3bWFyZSBkZXRlY3RlZCBESUYgZXJyb3IuIGV4OiBESUYKKyAqIAkJCQkJICBDUkMgZXJyIG9yIFJlZiBUYWcgZXJyIG9yIEFwcCB0YWcgZXJyLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGQV9JT0lNX1NUU19UU0tfTUdUX0FCT1JUCTogSU8gd2FzIGFib3J0ZWQgYmVjYXVzZSBvZiBUYXNrCisgKgkJCQkJICBNYW5hZ2VtZW50IGNvbW1hbmQgZnJvbSB0aGUgaG9zdAorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKgorICogCUJGSV9JT0lNX1NUU19VVEFHCQk6IEZpcm13YXJlIGRvZXMgbm90IGtub3cgYWJvdXQgdGhpcworICoJCQkJCSAgaW9fdGFnLgorICogCQkJCQkgIC0gaW8tdGFnIGNhbiBiZSByZXVzZWQuCisgKi8KK2VudW0gYmZpX2lvaW1fc3RhdHVzIHsKKwlCRklfSU9JTV9TVFNfT0sgPSAwLAorCUJGSV9JT0lNX1NUU19IT1NUX0FCT1JURUQgPSAxLAorCUJGSV9JT0lNX1NUU19BQk9SVEVEID0gMiwKKwlCRklfSU9JTV9TVFNfVElNRURPVVQgPSAzLAorCUJGSV9JT0lNX1NUU19SRVNfRlJFRSA9IDQsCisJQkZJX0lPSU1fU1RTX1NRRVJfTkVFREVEID0gNSwKKwlCRklfSU9JTV9TVFNfUFJPVE9fRVJSID0gNiwKKwlCRklfSU9JTV9TVFNfVVRBRyA9IDcsCisJQkZJX0lPSU1fU1RTX1BBVEhUT1YgPSA4LAorfTsKKworI2RlZmluZSBCRklfSU9JTV9TTlNMRU4JKDI1NikKKy8qKgorICogSS9PIHJlc3BvbnNlIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2ltX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJIAkgKi8KKwl1MTYgICAgICAgIGlvX3RhZzsJCS8qICBjb21wbGV0ZWQgSU8gdGFnCQkgKi8KKwl1MTYgICAgICAgIGJmYV9ycG9ydF9obmRsOwkvKiAgcmVsZWF0ZWQgcnBvcnQgaGFuZGxlCSAqLworCXU4ICAgICAgICAgaW9fc3RhdHVzOwkvKiAgSU8gY29tcGxldGlvbiBzdGF0dXMJICovCisJdTggICAgICAgICByZXVzZV9pb190YWc7CS8qICBJTyB0YWcgY2FuIGJlIHJldXNlZCAgICAgICAgKi8KKwl1MTYJYWJvcnRfdGFnOwkvKiAgaG9zdCBhYm9ydCByZXF1ZXN0IHRhZyAgICAgICovCisJdTgJCXNjc2lfc3RhdHVzOwkvKiAgc2NzaSBzdGF0dXMgZnJvbSB0YXJnZXQJICovCisJdTgJCXNuc19sZW47CS8qICBzY3NpIHNlbnNlIGxlbmd0aAkJICovCisJdTgJCXJlc2lkX2ZsYWdzOwkvKiAgSU8gcmVzaWR1ZSBmbGFncwkJICovCisJdTgJCXJzdmRfYTsKKwl1MzIJcmVzaWR1ZTsJLyogIElPIHJlc2lkdWFsIGxlbmd0aCBpbiBieXRlcyAqLworCXUzMglyc3ZkX2JbM107Cit9OworCitzdHJ1Y3QgYmZpX2lvaW1fYWJvcnRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsgICAgICAgICAgLyogIENvbW1vbiBtc2cgaGVhZGVyICAqLworCXUxNiAgICAgICAgaW9fdGFnOyAgICAgICAgIC8qICBJL08gdGFnICAgICAgICAgICAgKi8KKwl1MTYgICAgICAgIGFib3J0X3RhZzsgICAgICAvKiAgdW5pcXVlIHJlcXVlc3QgdGFnICovCit9OworCisvKgorICogSW5pdGlhdG9yIG1vZGUgdGFzayBtYW5hZ2VtZW50IGNvbW1hbmQgaW50ZXJmYWNlIGRlZmluZXMuCisgKi8KKworZW51bSBiZmlfdHNraW1faDJpIHsKKwlCRklfVFNLSU1fSDJJX1RNX1JFUSAgICA9IDEsIC8qICB0YXNrLW1nbXQgY29tbWFuZCAgICAgICAgICovCisJQkZJX1RTS0lNX0gySV9BQk9SVF9SRVEgPSAyLCAvKiAgdGFzay1tZ210IGNvbW1hbmQgICAgICAgICAqLworfTsKKworZW51bSBiZmlfdHNraW1faTJoIHsKKwlCRklfVFNLSU1fSTJIX1RNX1JTUCA9IEJGQV9JMkhNKDEpLAorfTsKKworc3RydWN0IGJmaV90c2tpbV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHRza190YWc7ICAgICAgICAvKiAgdGFzayBtYW5hZ2VtZW50IHRhZyAgICAgICAgKi8KKwl1MTYgICAgICAgIGl0bl9maGRsOyAgICAgICAvKiAgaXRuIGZpcm13YXJlIGhhbmRsZSAgICAgICAgKi8KKwlsdW5fdCAgICAgICAgICAgbHVuOyAgICAgICAgICAgIC8qICBMVSBudW1iZXIgICAgICAgICAgICAgICAgICAqLworCXU4ICAgICAgICAgdG1fZmxhZ3M7ICAgICAgIC8qICBzZWUgZmNwX3RtX2NtbmRfdCAgICAgICAgICAqLworCXU4ICAgICAgICAgdF9zZWNzOyAgICAgICAgIC8qICBUaW1lb3V0IHZhbHVlIGluIHNlY29uZHMgICAqLworCXU4ICAgICAgICAgcnN2ZFsyXTsKK307CisKK3N0cnVjdCBiZmlfdHNraW1fYWJvcnRyZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOyAgICAgICAgICAgICAvKiAgQ29tbW9uIG1zZyBoZWFkZXIgICAgICAgICAgKi8KKwl1MTYgICAgICAgIHRza190YWc7ICAgICAgICAvKiAgdGFzayBtYW5hZ2VtZW50IHRhZyAgICAgICAgKi8KKwl1MTYgICAgICAgIHJzdmQ7Cit9OworCitlbnVtIGJmaV90c2tpbV9zdGF0dXMgeworCS8qCisJICogRm9sbG93aW5nIGFyZSBGQ1AtNCBzcGVjIGRlZmluZWQgc3RhdHVzIGNvZGVzLAorCSAqICoqRE8gTk9UIENIQU5HRSBUSEVNICoqCisJICovCisJQkZJX1RTS0lNX1NUU19PSyAgICAgICA9IDAsCisJQkZJX1RTS0lNX1NUU19OT1RfU1VQUCA9IDQsCisJQkZJX1RTS0lNX1NUU19GQUlMRUQgICA9IDUsCisKKwkvKioKKwkgKiBEZWZpbmVkIGJ5IEJGQQorCSAqLworCUJGSV9UU0tJTV9TVFNfVElNRU9VVCAgPSAxMCwgICAgLyogIFRNIHJlcXVlc3QgdGltZWRvdXQgICAgICovCisJQkZJX1RTS0lNX1NUU19BQk9SVEVEICA9IDExLCAgICAvKiAgQWJvcnRlZCBvbiBob3N0IHJlcXVlc3QgKi8KK307CisKK3N0cnVjdCBiZmlfdHNraW1fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJICovCisJdTE2ICAgICAgICB0c2tfdGFnOwkvKiAgdGFzayBtZ210IGNtbmQgdGFnCQkgKi8KKwl1OCAgICAgICAgIHRza19zdGF0dXM7CS8qICBAcmVmIGJmaV90c2tpbV9zdGF0dXMgKi8KKwl1OCAgICAgICAgIHJzdmQ7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfRkNQSU1fSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjeHAuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2ZjeHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGU5OTVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfZmN4cC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9GQ1hQX0hfXworI2RlZmluZSBfX0JGSV9GQ1hQX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9mY3hwX2gyaSB7CisJQkZJX0ZDWFBfSDJJX1NFTkRfUkVRID0gMSwKK307CisKK2VudW0gYmZpX2ZjeHBfaTJoIHsKKwlCRklfRkNYUF9JMkhfU0VORF9SU1AgPSBCRkFfSTJITSgxKSwKK307CisKKyNkZWZpbmUgQkZBX0ZDWFBfTUFYX1NHRVMJMgorCisvKioKKyAqIEZDWFAgc2VuZCByZXF1ZXN0IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZpX2ZjeHBfc2VuZF9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1MTYgICAgICAgIGZjeHBfdGFnOwkvKiAgZHJpdmVyIHJlcXVlc3QgdGFnCQkgICAgKi8KKwl1MTYgICAgICAgIG1heF9mcm1zejsJLyogIG1heCBzZW5kIGZyYW1lIHNpemUJICAgICovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2c2FuIHRhZyBpZiBhcHBsaWNhYmxlCSAgICAqLworCXUxNiAgICAgICAgcnBvcnRfZndfaG5kbDsJLyogIEZXIEhhbmRsZSBmb3IgdGhlIHJlbW90ZSBwb3J0ICAqLworCXU4ICAgICAgICAgY2xhc3M7CQkvKiAgRkMgY2xhc3MgdXNlZCBmb3IgcmVxL3JzcAkgICAgKi8KKwl1OCAgICAgICAgIHJzcF90aW1lb3V0OwkvKiAgdGltZW91dCBpbiBzZWNzLCAwLW5vIHJlc3BvbnNlICovCisJdTggICAgICAgICBjdHM7CQkvKiAgY29udGludWUgc2VxdWVuY2UJCSAgICAqLworCXU4ICAgICAgICAgbHBfdGFnOwkJLyogIGxwb3J0IHRhZwkJCSAgICAqLworCXN0cnVjdCBmY2hzX3MgICBmY2hzOwkJLyogIHJlcXVlc3QgRkMgaGVhZGVyIHN0cnVjdHVyZSAgICAqLworCXUzMiAgICAgICAgcmVxX2xlbjsJLyogIHJlcXVlc3QgcGF5bG9hZCBsZW5ndGgJICAgICovCisJdTMyICAgICAgICByc3BfbWF4bGVuOwkvKiAgbWF4IHJlc3BvbnNlIGxlbmd0aCBleHBlY3RlZCAgICovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHJlcV9zZ2VbQkZBX0ZDWFBfTUFYX1NHRVNdOwkvKiAgcmVxdWVzdCBidWYgICAgKi8KKwlzdHJ1Y3QgYmZpX3NnZV9zICAgcnNwX3NnZVtCRkFfRkNYUF9NQVhfU0dFU107CS8qICByZXNwb25zZSBidWYgICAqLworfTsKKworLyoqCisgKiBGQ1hQIHNlbmQgcmVzcG9uc2Ugc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmlfZmN4cF9zZW5kX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgQ29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXUxNiAgICAgICAgZmN4cF90YWc7CS8qICBzZW5kIHJlcXVlc3QgdGFnCQkgICAgKi8KKwl1OCAgICAgICAgIHJlcV9zdGF0dXM7CS8qICByZXF1ZXN0IHN0YXR1cwkJICAgICovCisJdTggICAgICAgICByc3ZkOworCXUzMiAgICAgICAgcnNwX2xlbjsJLyogIGFjdHVhbCByZXNwb25zZSBsZW5ndGgJICAgICovCisJdTMyICAgICAgICByZXNpZHVlX2xlbjsJLyogIHJlc2lkdWFsIHJlc3BvbnNlIGxlbmd0aAkgICAgKi8KKwlzdHJ1Y3QgZmNoc19zICAgZmNoczsJCS8qICByZXNwb25zZSBGQyBoZWFkZXIgc3RydWN0dXJlICAgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9GQ1hQX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNmU5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2MuaApAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX0lPQ19IX18KKyNkZWZpbmUgX19CRklfSU9DX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX2lvY19oMmlfbXNncyB7CisJQkZJX0lPQ19IMklfRU5BQkxFX1JFUSAJCT0gMSwKKwlCRklfSU9DX0gySV9ESVNBQkxFX1JFUSAJPSAyLAorCUJGSV9JT0NfSDJJX0dFVEFUVFJfUkVRIAk9IDMsCisJQkZJX0lPQ19IMklfREJHX1NZTkMJIAk9IDQsCisJQkZJX0lPQ19IMklfREJHX0RVTVAJIAk9IDUsCit9OworCitlbnVtIGJmaV9pb2NfaTJoX21zZ3MgeworCUJGSV9JT0NfSTJIX0VOQUJMRV9SRVBMWQk9IEJGQV9JMkhNKDEpLAorCUJGSV9JT0NfSTJIX0RJU0FCTEVfUkVQTFkgCT0gQkZBX0kySE0oMiksCisJQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWSAJPSBCRkFfSTJITSgzKSwKKwlCRklfSU9DX0kySF9SRUFEWV9FVkVOVCAJPSBCRkFfSTJITSg0KSwKKwlCRklfSU9DX0kySF9IQkVBVAkJPSBCRkFfSTJITSg1KSwKK307CisKKy8qKgorICogQkZJX0lPQ19IMklfR0VUQVRUUl9SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY19nZXRhdHRyX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1bmlvbiBiZmlfYWRkcl91CWF0dHJfYWRkcjsKK307CisKK3N0cnVjdCBiZmlfaW9jX2F0dHJfcyB7CisJd3duX3QgICAgICAgICAgIG1mZ193d247CisJbWFjX3QJCW1mZ19tYWM7CisJdTE2CXJzdmRfYTsKKwljaGFyICAgICAgICAgICAgYnJjZF9zZXJpYWxudW1bU1RSU1ooQkZBX01GR19TRVJJQUxOVU1fU0laRSldOworCXU4ICAgICAgICAgcGNpZV9nZW47CisJdTggICAgICAgICBwY2llX2xhbmVzX29yaWc7CisJdTggICAgICAgICBwY2llX2xhbmVzOworCXU4ICAgICAgICAgcnhfYmJjcmVkaXQ7CS8qICByZWNlaXZlIGJ1ZmZlciBjcmVkaXRzICovCisJdTMyICAgICAgICBhZGFwdGVyX3Byb3A7CS8qICBhZGFwdGVyIHByb3BlcnRpZXMgICAgICovCisJdTE2ICAgICAgICBtYXhmcnNpemU7CS8qICBtYXggcmVjZWl2ZSBmcmFtZSBzaXplICovCisJY2hhciAgICAgICAgIAlhc2ljX3JldjsKKwl1OCAgICAgICAgIHJzdmRfYjsKKwljaGFyICAgICAgICAgICAgZndfdmVyc2lvbltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvcHRyb21fdmVyc2lvbltCRkFfVkVSU0lPTl9MRU5dOworCXN0cnVjdCBiZmFfbWZnX3ZwZF9zCXZwZDsKK307CisKKy8qKgorICogQkZJX0lPQ19JMkhfR0VUQVRUUl9SRVBMWSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jX2dldGF0dHJfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAgICAgICovCisJdTgJCXN0YXR1czsJLyogIGNmZyByZXBseSBzdGF0dXMgICAgICAgICAgICovCisJdTgJCXJzdmRbM107Cit9OworCisvKioKKyAqIEZpcm13YXJlIG1lbW9yeSBwYWdlIG9mZnNldHMKKyAqLworI2RlZmluZSBCRklfSU9DX1NNRU1fUEcwX0NCCSgweDQwKQorI2RlZmluZSBCRklfSU9DX1NNRU1fUEcwX0NUCSgweDE4MCkKKworLyoqCisgKiBGaXJtd2FyZSB0cmFjZSBvZmZzZXQKKyAqLworI2RlZmluZSBCRklfSU9DX1RSQ19PRkYJCSgweDRiMDApCisjZGVmaW5lIEJGSV9JT0NfVFJDX0VOVFMJMjU2CisKKyNkZWZpbmUgQkZJX0lPQ19GV19TSUdOQVRVUkUJKDB4YmZhZGJmYWQpCisjZGVmaW5lIEJGSV9JT0NfTUQ1U1VNX1NaCTQKK3N0cnVjdCBiZmlfaW9jX2ltYWdlX2hkcl9zIHsKKwl1MzIgICAgICAgIHNpZ25hdHVyZTsJLyogIGNvbnN0YW50IHNpZ25hdHVyZSAqLworCXUzMiAgICAgICAgcnN2ZF9hOworCXUzMiAgICAgICAgZXhlYzsJCS8qICBleGVjIHZlY3RvciAgICAgICAgKi8KKwl1MzIgICAgICAgIHBhcmFtOwkJLyogIHBhcmFtZXRlcnMgICAgICAgICAqLworCXUzMiAgICAgICAgcnN2ZF9iWzRdOworCXUzMiAgICAgICAgbWQ1c3VtW0JGSV9JT0NfTUQ1U1VNX1NaXTsKK307CisKKy8qKgorICogIEJGSV9JT0NfSTJIX1JFQURZX0VWRU5UIG1lc3NhZ2UKKyAqLworc3RydWN0IGJmaV9pb2NfcmR5X2V2ZW50X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgKi8KKwl1OCAgICAgICAgIGluaXRfc3RhdHVzOwkvKiAgaW5pdCBldmVudCBzdGF0dXMgKi8KKwl1OCAgICAgICAgIHJzdmRbM107Cit9OworCitzdHJ1Y3QgYmZpX2lvY19oYmVhdF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTMyCSAgIGhiX2NvdW50OwkvKiAgY3VycmVudCBoZWFydCBiZWF0IGNvdW50CSovCit9OworCisvKioKKyAqIElPQyBoYXJkd2FyZS9maXJtd2FyZSBzdGF0ZQorICovCitlbnVtIGJmaV9pb2Nfc3RhdGUgeworCUJGSV9JT0NfVU5JTklUIAkgPSAwLAkJLyogIG5vdCBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0lOSVRJTkcgCSA9IDEsCS8qICBoL3cgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgICAgICAgICovCisJQkZJX0lPQ19IV0lOSVQgCSA9IDIsCQkvKiAgaC93IGlzIGluaXRpYWxpemVkICAgICAgICAgICAgICAqLworCUJGSV9JT0NfQ0ZHIAkgPSAzLAkJLyogIElPQyBjb25maWd1cmF0aW9uIGluIHByb2dyZXNzICAgKi8KKwlCRklfSU9DX09QIAkJID0gNCwJLyogIElPQyBpcyBvcGVyYXRpb25hbCAgICAgICAgICAgICAgKi8KKwlCRklfSU9DX0RJU0FCTElORyAJID0gNSwJLyogIElPQyBpcyBiZWluZyBkaXNhYmxlZCAgICAgICAgICAgKi8KKwlCRklfSU9DX0RJU0FCTEVEIAkgPSA2LAkvKiAgSU9DIGlzIGRpc2FibGVkICAgICAgICAgICAgICAgICAqLworCUJGSV9JT0NfQ0ZHX0RJU0FCTEVEID0gNywJLyogIElPQyBpcyBiZWluZyBkaXNhYmxlZDt0cmFuc2llbnQgKi8KKwlCRklfSU9DX0hCRkFJTCAgICAgICA9IDgsCS8qICBJT0MgaGVhcnQtYmVhdCBmYWlsdXJlICAgICAgICAgICovCisJQkZJX0lPQ19NRU1URVNUICAgICAgPSA5LAkvKiAgSU9DIGlzIGRvaW5nIG1lbXRlc3QgICAgICAgICAgICAqLworfTsKKworI2RlZmluZSBCRklfSU9DX0VORElBTl9TSUcgIDB4MTIzNDU2NzgKKworZW51bSB7CisJQkZJX0FEQVBURVJfVFlQRV9GQyAgID0gMHgwMSwJCS8qICBGQyBhZGFwdGVycyAgICAgICAgICAgKi8KKwlCRklfQURBUFRFUl9UWVBFX01LICAgPSAweDBmMDAwMCwJLyogIGFkYXB0ZXIgdHlwZSBtYXNrICAgICAqLworCUJGSV9BREFQVEVSX1RZUEVfU0ggICA9IDE2LAkgICAgICAgIC8qICBhZGFwdGVyIHR5cGUgc2hpZnQgICAgKi8KKwlCRklfQURBUFRFUl9OUE9SVFNfTUsgPSAweGZmMDAsCQkvKiAgbnVtYmVyIG9mIHBvcnRzIG1hc2sgICovCisJQkZJX0FEQVBURVJfTlBPUlRTX1NIID0gOCwJICAgICAgICAvKiAgbnVtYmVyIG9mIHBvcnRzIHNoaWZ0ICovCisJQkZJX0FEQVBURVJfU1BFRURfTUsgID0gMHhmZiwJCS8qICBhZGFwdGVyIHNwZWVkIG1hc2sgICAgKi8KKwlCRklfQURBUFRFUl9TUEVFRF9TSCAgPSAwLAkgICAgICAgIC8qICBhZGFwdGVyIHNwZWVkIHNoaWZ0ICAgKi8KKwlCRklfQURBUFRFUl9QUk9UTyAgICAgPSAweDEwMDAwMCwJLyogIHByb3RvdHlwZSBhZGFwYXRlcnMgICAqLworCUJGSV9BREFQVEVSX1RUViAgICAgICA9IDB4MjAwMDAwLAkvKiAgVFRWIGRlYnVnIGNhcGFibGUgICAgICovCisJQkZJX0FEQVBURVJfVU5TVVBQICAgID0gMHg0MDAwMDAsCS8qICB1bmtub3duIGFkYXB0ZXIgdHlwZSAgKi8KK307CisKKyNkZWZpbmUgQkZJX0FEQVBURVJfR0VUUChfX3Byb3AsX19hZGFwX3Byb3ApICAgICAgICAgIAkJXAorICAgICgoKF9fYWRhcF9wcm9wKSAmIEJGSV9BREFQVEVSXyAjIyBfX3Byb3AgIyMgX01LKSA+PiAgICAgICAgIFwKKyAgICAgQkZJX0FEQVBURVJfICMjIF9fcHJvcCAjIyBfU0gpCisjZGVmaW5lIEJGSV9BREFQVEVSX1NFVFAoX19wcm9wLCBfX3ZhbCkgICAgICAgICAJCVwKKyAgICAoKF9fdmFsKSA8PCBCRklfQURBUFRFUl8gIyMgX19wcm9wICMjIF9TSCkKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfUFJPVE8oX19hZGFwX3R5cGUpICAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfUFJPVE8pCisjZGVmaW5lIEJGSV9BREFQVEVSX0lTX1RUVihfX2FkYXBfdHlwZSkgICAgIAkJCVwKKyAgICAoKF9fYWRhcF90eXBlKSAmIEJGSV9BREFQVEVSX1RUVikKKyNkZWZpbmUgQkZJX0FEQVBURVJfSVNfVU5TVVBQKF9fYWRhcF90eXBlKSAgCQkJXAorICAgICgoX19hZGFwX3R5cGUpICYgQkZJX0FEQVBURVJfVU5TVVBQKQorI2RlZmluZSBCRklfQURBUFRFUl9JU19TUEVDSUFMKF9fYWRhcF90eXBlKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fYWRhcF90eXBlKSAmIChCRklfQURBUFRFUl9UVFYgfCBCRklfQURBUFRFUl9QUk9UTyB8ICAgICBcCisJCQlCRklfQURBUFRFUl9VTlNVUFApKQorCisvKioKKyAqIEJGSV9JT0NfSDJJX0VOQUJMRV9SRVEgJiBCRklfSU9DX0gySV9ESVNBQkxFX1JFUSBtZXNzYWdlcworICovCitzdHJ1Y3QgYmZpX2lvY19jdHJsX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwltaDsKKwl1OAkJCWlvY19jbGFzczsKKwl1OCAgICAgICAgIAlyc3ZkWzNdOworfTsKKworLyoqCisgKiBCRklfSU9DX0kySF9FTkFCTEVfUkVQTFkgJiBCRklfSU9DX0kySF9ESVNBQkxFX1JFUExZIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jX2N0cmxfcmVwbHlfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIENvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKKyNkZWZpbmUgQkZJX0lPQ19NU0dTWiAgIDgKKy8qKgorICogSDJJIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAJbWg7CisJc3RydWN0IGJmaV9pb2NfY3RybF9yZXFfcyBlbmFibGVfcmVxOworCXN0cnVjdCBiZmlfaW9jX2N0cmxfcmVxX3MgZGlzYWJsZV9yZXE7CisJc3RydWN0IGJmaV9pb2NfZ2V0YXR0cl9yZXFfcyBnZXRhdHRyX3JlcTsKKwl1MzIgICAgICAgCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJMkggTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY19pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zICAgICAgCW1oOworCXN0cnVjdCBiZmlfaW9jX3JkeV9ldmVudF9zIAlyZHlfZXZlbnQ7CisJdTMyICAgICAgIAkJbWJveG1zZ1tCRklfSU9DX01TR1NaXTsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9JT0NfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2lvY2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzYwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9pb2NmYy5oCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfSU9DRkNfSF9fCisjZGVmaW5lIF9fQkZJX0lPQ0ZDX0hfXworCisjaW5jbHVkZSAiYmZpLmgiCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvY2ZjLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ib290Lmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9pb2NmY19oMmlfbXNncyB7CisJQkZJX0lPQ0ZDX0gySV9DRkdfUkVRIAkJPSAxLAorCUJGSV9JT0NGQ19IMklfR0VUX1NUQVRTX1JFUSAJPSAyLAorCUJGSV9JT0NGQ19IMklfQ0xFQVJfU1RBVFNfUkVRCT0gMywKKwlCRklfSU9DRkNfSDJJX1NFVF9JTlRSX1JFUSAJPSA0LAorCUJGSV9JT0NGQ19IMklfVVBEQVRFUV9SRVEgPSA1LAorfTsKKworZW51bSBiZmlfaW9jZmNfaTJoX21zZ3MgeworCUJGSV9JT0NGQ19JMkhfQ0ZHX1JFUExZCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUCAJPSBCRkFfSTJITSgyKSwKKwlCRklfSU9DRkNfSTJIX0NMRUFSX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1AgPSBCRkFfSTJITSg1KSwKK307CisKK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3MgeworCXU4ICAgICAgICAgbnVtX2NxczsgCS8qICBOdW1iZXIgb2YgQ1FzIHRvIGJlIHVzZWQgICAgICovCisJdTggICAgICAgICBzZW5zZV9idWZfbGVuOwkvKiAgU0NTSSBzZW5zZSBsZW5ndGggICAgICAgICAgICAqLworCXU4ICAgICAgICAgdHJ1bmtfZW5hYmxlZDsJLyogIHBvcnQgdHJ1bmtpbmcgZW5hYmxlZCAgICAgICAgKi8KKwl1OCAgICAgICAgIHRydW5rX3BvcnRzOwkvKiAgdHJ1bmsgcG9ydHMgYml0IG1hcCAgICAgICAgICAqLworCXUzMiAgICAgICAgZW5kaWFuX3NpZzsJLyogIGVuZGlhbiBzaWduYXR1cmUgb2YgaG9zdCAgICAgKi8KKworCS8qKgorCSAqIFJlcXVlc3QgYW5kIHJlc3BvbnNlIGNpcmN1bGFyIHF1ZXVlIGJhc2UgYWRkcmVzc2VzLCBzaXplIGFuZAorCSAqIHNoYWRvdyBpbmRleCBwb2ludGVycy4KKwkgKi8KKwl1bmlvbiBiZmlfYWRkcl91ICByZXFfY3FfYmFbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1bmlvbiBiZmlfYWRkcl91ICByZXFfc2hhZG93X2NpW0JGSV9JT0NfTUFYX0NRU107CisJdTE2ICAgIHJlcV9jcV9lbGVtc1tCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9jcV9iYVtCRklfSU9DX01BWF9DUVNdOworCXVuaW9uIGJmaV9hZGRyX3UgIHJzcF9zaGFkb3dfcGlbQkZJX0lPQ19NQVhfQ1FTXTsKKwl1MTYgICAgcnNwX2NxX2VsZW1zW0JGSV9JT0NfTUFYX0NRU107CisKKwl1bmlvbiBiZmlfYWRkcl91ICBzdGF0c19hZGRyOwkvKiAgRE1BLWFibGUgYWRkcmVzcyBmb3Igc3RhdHMJICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIGNmZ3JzcF9hZGRyOwkvKiAgY29uZmlnIHJlc3BvbnNlIGRtYSBhZGRyZXNzICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIGlvaW1fc25zYmFzZTsgIC8qICBJTyBzZW5zZSBidWZmZXIgYmFzZSBhZGRyZXNzICovCisJc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyBpbnRyX2F0dHI7IC8qICBJT0MgaW50ZXJydXB0IGF0dHJpYnV0ZXMgKi8KK307CisKKy8qKgorICogQm9vdCB0YXJnZXQgd3duIGluZm9ybWF0aW9uIGZvciB0aGlzIHBvcnQuIFRoaXMgY29udGFpbnMgZWl0aGVyIHRoZSBzdG9yZWQKKyAqIG9yIGRpc2NvdmVyZWQgYm9vdCB0YXJnZXQgcG9ydCB3d25zIGZvciB0aGUgcG9ydC4KKyAqLworc3RydWN0IGJmaV9pb2NmY19ib290d3ducyB7CisJd3duX3QJCXd3bltCRkFfQk9PVF9CT09UTFVOX01BWF07CisJdTgJCW53d25zOworCXU4CQlyc3ZkWzddOworfTsKKworc3RydWN0IGJmaV9pb2NmY19jZmdyc3BfcyB7CisJc3RydWN0IGJmYV9pb2NmY19md2NmZ19zCWZ3Y2ZnOworCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MJaW50cl9hdHRyOworCXN0cnVjdCBiZmlfaW9jZmNfYm9vdHd3bnMJYm9vdHd3bnM7Cit9OworCisvKioKKyAqIEJGSV9JT0NGQ19IMklfQ0ZHX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgIG1oOworCXVuaW9uIGJmaV9hZGRyX3UgICAgICBpb2NfY2ZnX2RtYV9hZGRyOworfTsKKworLyoqCisgKiBCRklfSU9DRkNfSTJIX0NGR19SRVBMWSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlciAgICAgICAgICAqLworCXU4ICAgICAgICAgY2ZnX3N1Y2Nlc3M7CS8qICBjZmcgcmVwbHkgc3RhdHVzICAgICAgICAgICAqLworCXU4ICAgICAgICAgbHB1X2JtOwkJLyogIExQVXMgYXNzaWduZWQgZm9yIHRoaXMgSU9DICovCisJdTggICAgICAgICByc3ZkWzJdOworfTsKKworLyoqCisgKiAgQkZJX0lPQ0ZDX0gySV9HRVRfU1RBVFNfUkVRICYgQkZJX0lPQ0ZDX0gySV9DTEVBUl9TVEFUU19SRVEgbWVzc2FnZXMKKyAqLworc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgbXNnIGhlYWRlciAgICAgICAgICAgICovCisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseSAgICAgICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfR0VUX1NUQVRTX1JTUCAmIEJGSV9JT0NGQ19JMkhfQ0xFQVJfU1RBVFNfUlNQIG1lc3NhZ2VzCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHJlcGx5IHN0YXR1cyAgICAgICAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5ICAgICAgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9TRVRfSU5UUl9SRVEgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3NldF9pbnRyX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlciAgICAgKi8KKwl1OAkJY29hbGVzY2U7CS8qICBlbmFibGUgaW50ciBjb2FsZXNjaW5nKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTE2CWRlbGF5OwkJLyogIGRlbGF5IHRpbWVyIDAuLjExMjV1cyAgKi8KKwl1MTYJbGF0ZW5jeTsJLyogIGxhdGVuY3kgdGltZXIgMC4uMjI1dXMgKi8KK307CisKKy8qKgorICogQkZJX0lPQ0ZDX0gySV9VUERBVEVRX1JFUSBtZXNzYWdlCisgKi8KK3N0cnVjdCBiZmlfaW9jZmNfdXBkYXRlcV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIgICAgICovCisJdTMyIHJlcXFfYmE7CQkJLyogIHJlcXEgYmFzZSBhZGRyICAgICAgICAqLworCXUzMiByc3BxX2JhOwkJCS8qICByc3BxIGJhc2UgYWRkciAgICAgICAgKi8KKwl1MzIgcmVxcV9zY2k7CQkJLyogIHJlcXEgc2hhZG93IGNpICAgICAgICAqLworCXUzMiByc3BxX3NwaTsJCQkvKiAgcnNwcSBzaGFkb3cgcGkgICAgICAgICovCit9OworCisvKioKKyAqIEJGSV9JT0NGQ19JMkhfVVBEQVRFUV9SU1AgbWVzc2FnZQorICovCitzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyICAgICAqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIHVwZGF0ZXEgIHN0YXR1cyAgICAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKKy8qKgorICogSDJJIE1lc3NhZ2VzCisgKi8KK3VuaW9uIGJmaV9pb2NmY19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zIAkJbWg7CisJc3RydWN0IGJmaV9pb2NmY19jZmdfcmVxX3MgCWNmZ19yZXE7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19nZXQ7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yZXFfcyBzdGF0c19jbHI7CisJc3RydWN0IGJmaV9pb2NmY191cGRhdGVxX3JlcV9zIHVwZGF0ZXFfcmVxOworCXUzMiAgICAgICAJCQltYm94bXNnW0JGSV9JT0NfTVNHU1pdOworfTsKKworLyoqCisgKiBJMkggTWVzc2FnZXMKKyAqLwordW5pb24gYmZpX2lvY2ZjX2kyaF9tc2dfdSB7CisJc3RydWN0IGJmaV9taGRyX3MgICAgICAJCW1oOworCXN0cnVjdCBiZmlfaW9jZmNfY2ZnX3JlcGx5X3MgCQljZmdfcmVwbHk7CisJc3RydWN0IGJmaV9pb2NmY19zdGF0c19yc3BfcyBzdGF0c19nZXRfcnNwOworCXN0cnVjdCBiZmlfaW9jZmNfc3RhdHNfcnNwX3Mgc3RhdHNfY2xyX3JzcDsKKwlzdHJ1Y3QgYmZpX2lvY2ZjX3VwZGF0ZXFfcnNwX3MgdXBkYXRlcV9yc3A7CisJdTMyICAgICAgIAkJCW1ib3htc2dbQkZJX0lPQ19NU0dTWl07Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfSU9DRkNfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MDEwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scG9ydC5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGSV9MUE9SVF9IX18KKyNkZWZpbmUgX19CRklfTFBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9scG9ydF9oMmlfbXNncyB7CisJQkZJX0xQT1JUX0gySV9DUkVBVEVfUkVRID0gMSwKKwlCRklfTFBPUlRfSDJJX0RFTEVURV9SRVEgPSAyLAorfTsKKworZW51bSBiZmlfbHBvcnRfaTJoX21zZ3MgeworCUJGSV9MUE9SVF9JMkhfQ1JFQVRFX1JTUCA9IEJGQV9JMkhNKDEpLAorCUJGSV9MUE9SVF9JMkhfREVMRVRFX1JTUCA9IEJGQV9JMkhNKDIpLAorCUJGSV9MUE9SVF9JMkhfT05MSU5FCSAgPSBCRkFfSTJITSgzKSwKKwlCRklfTFBPUlRfSTJIX09GRkxJTkUJICA9IEJGQV9JMkhNKDQpLAorfTsKKworI2RlZmluZSBCRklfTFBPUlRfTUFYX1NZTk5BTUUJNjQKKworZW51bSBiZmlfbHBvcnRfcm9sZV9lIHsKKwlCRklfTFBPUlRfUk9MRV9GQ1BJTQk9IDEsCisJQkZJX0xQT1JUX1JPTEVfRkNQVE0JPSAyLAorCUJGSV9MUE9SVF9ST0xFX0lQRkMJPSA0LAorfTsKKworc3RydWN0IGJmaV9scG9ydF9jcmVhdGVfcmVxX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2CWZhYnJpY19md2hkbDsJLyogIHBhcmVudCBmYWJyaWMgaW5zdGFuY2UJKi8KKwl1OAkJcm9sZXM7CQkvKiAgbHBvcnQgRkMtNCByb2xlcwkJKi8KKwl1OAkJcnN2ZDsKKwl3d25fdAkJcHd3bjsJCS8qICBwb3J0IG5hbWUJCQkqLworCXd3bl90CQlud3duOwkJLyogIG5vZGUgbmFtZQkJCSovCisJdTgJCXN5bW5hbWVbQkZJX0xQT1JUX01BWF9TWU5OQU1FXTsKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JzcF9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXU4ICAgICAgICAgc3RhdHVzOwkJLyogIGxwb3J0IGNyZWF0aW9uIHN0YXR1cwkqLworCXU4ICAgICAgICAgcnN2ZFszXTsKK307CisKK3N0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JlcV9zIHsKKwliZmlfbWhkcl90CW1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgbHBvcnQgaGFuZGxlCSovCisJdTE2ICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9scG9ydF9kZWxldGVfcnNwX3MgeworCWJmaV9taGRyX3QJbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBscG9ydCBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgbHBvcnQgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKwordW5pb24gYmZpX2xwb3J0X2gyaV9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JlcV9zCSpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworfTsKKwordW5pb24gYmZpX2xwb3J0X2kyaF9tc2dfdSB7CisJYmZpX21zZ190CQkqbXNnOworCXN0cnVjdCBiZmlfbHBvcnRfY3JlYXRlX3JzcF9zCSpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfbHBvcnRfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX0xQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scHMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX2xwcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNGIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9scHMuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRklfTFBTX0hfXworI2RlZmluZSBfX0JGSV9MUFNfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitlbnVtIGJmaV9scHNfaDJpX21zZ3MgeworCUJGSV9MUFNfSDJJX0xPR0lOX1JFUQk9IDEsCisJQkZJX0xQU19IMklfTE9HT1VUX1JFUQk9IDIsCit9OworCitlbnVtIGJmaV9scHNfaTJoX21zZ3MgeworCUJGSV9MUFNfSDJJX0xPR0lOX1JTUAk9IEJGQV9JMkhNKDEpLAorCUJGSV9MUFNfSDJJX0xPR09VVF9SU1AJPSBCRkFfSTJITSgyKSwKK307CisKK3N0cnVjdCBiZmlfbHBzX2xvZ2luX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJYWxwYTsKKwl1MTYJcGR1X3NpemU7CisJd3duX3QJCXB3d247CisJd3duX3QJCW53d247CisJdTgJCWZkaXNjOworCXU4CQlhdXRoX2VuOworCXU4CQlyc3ZkWzJdOworfTsKKworc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1OAkJbHBfdGFnOworCXU4CQlzdGF0dXM7CisJdTgJCWxzcmp0X3JzbjsKKwl1OAkJbHNyanRfZXhwbDsKKwl3d25fdAkJcG9ydF9uYW1lOworCXd3bl90CQlub2RlX25hbWU7CisJdTE2CWJiX2NyZWRpdDsKKwl1OAkJZl9wb3J0OworCXU4CQlucGl2X2VuOworCXUzMglscF9waWQgOiAyNDsKKwl1MzIJYXV0aF9yZXEgOiA4OworCW1hY190CQlscF9tYWM7CisJbWFjX3QJCWZjZl9tYWM7CisJdTgJCWV4dF9zdGF0dXM7CisJdTggIAlicmNkX3N3aXRjaDsvKiAgYXR0YWNoZWQgcGVlciBpcyBicmNkIHN3aXRjaAkqLworfTsKKworc3RydWN0IGJmaV9scHNfbG9nb3V0X3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJcnN2ZFszXTsKKwl3d25fdAkJcG9ydF9uYW1lOworfTsKKworc3RydWN0IGJmaV9scHNfbG9nb3V0X3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTgJCWxwX3RhZzsKKwl1OAkJc3RhdHVzOworCXU4CQlyc3ZkWzJdOworfTsKKwordW5pb24gYmZpX2xwc19oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQkqbXNnOworCXN0cnVjdCBiZmlfbHBzX2xvZ2luX3JlcV9zCSpsb2dpbl9yZXE7CisJc3RydWN0IGJmaV9scHNfbG9nb3V0X3JlcV9zCSpsb2dvdXRfcmVxOworfTsKKwordW5pb24gYmZpX2xwc19pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MJCSptc2c7CisJc3RydWN0IGJmaV9scHNfbG9naW5fcnNwX3MJKmxvZ2luX3JzcDsKKwlzdHJ1Y3QgYmZpX2xwc19sb2dvdXRfcnNwX3MJKmxvZ291dF9yc3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYgLyogX19CRklfTFBTX0hfXyAqLworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWMzYmVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcG9ydC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZJX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZJX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcG9ydF9oMmkgeworCUJGSV9QT1JUX0gySV9FTkFCTEVfUkVRCQk9ICgxKSwKKwlCRklfUE9SVF9IMklfRElTQUJMRV9SRVEJPSAoMiksCisJQkZJX1BPUlRfSDJJX0dFVF9TVEFUU19SRVEJPSAoMyksCisJQkZJX1BPUlRfSDJJX0NMRUFSX1NUQVRTX1JFUQk9ICg0KSwKK307CisKK2VudW0gYmZpX3BvcnRfaTJoIHsKKwlCRklfUE9SVF9JMkhfRU5BQkxFX1JTUAkJPSBCRkFfSTJITSgxKSwKKwlCRklfUE9SVF9JMkhfRElTQUJMRV9SU1AJPSBCRkFfSTJITSgyKSwKKwlCRklfUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAk9IEJGQV9JMkhNKDMpLAorCUJGSV9QT1JUX0kySF9DTEVBUl9TVEFUU19SU1AJPSBCRkFfSTJITSg0KSwKK307CisKKy8qKgorICogR2VuZXJpYyBSRVEgdHlwZQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KKwl1MzIJcnN2ZDsKK307CisKKy8qKgorICogR2VuZXJpYyBSU1AgdHlwZQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkgICAgKi8KKwl1OCAgICAgICAgIHN0YXR1czsJCS8qICBwb3J0IGVuYWJsZSBzdGF0dXMJCSAgICAqLworCXU4ICAgICAgICAgcnN2ZFszXTsKKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogQHRvZG8KKyAqIEJGSV9QT1JUX0gySV9FTkFCTEVfUkVRCisgKi8KKworLyoqCisgKiBAdG9kbworICogQkZJX1BPUlRfSTJIX0VOQUJMRV9SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9ESVNBQkxFX1JFUQorICovCisKKy8qKgorICogQkZJX1BPUlRfSTJIX0RJU0FCTEVfUlNQCisgKi8KKworLyoqCisgKiBCRklfUE9SVF9IMklfR0VUX1NUQVRTX1JFUQorICovCitzdHJ1Y3QgYmZpX3BvcnRfZ2V0X3N0YXRzX3JlcV9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSAgICAqLworCXVuaW9uIGJmaV9hZGRyX3UgICBkbWFfYWRkcjsKK307CisKKy8qKgorICogQkZJX1BPUlRfSTJIX0dFVF9TVEFUU19SU1AKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0gySV9DTEVBUl9TVEFUU19SRVEKKyAqLworCisvKioKKyAqIEJGSV9QT1JUX0kySF9DTEVBUl9TVEFUU19SU1AKKyAqLworCit1bmlvbiBiZmlfcG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbWhkcl9zCQltaDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yZXFfcwllbmFibGVfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWRpc2FibGVfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZXRfc3RhdHNfcmVxX3MJZ2V0c3RhdHNfcmVxOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JlcV9zCWNsZWFyc3RhdHNfcmVxOworfTsKKwordW5pb24gYmZpX3BvcnRfaTJoX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgICAgICAgIAltaDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwllbmFibGVfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWRpc2FibGVfcnNwOworCXN0cnVjdCBiZmlfcG9ydF9nZW5lcmljX3JzcF9zCWdldHN0YXRzX3JzcDsKKwlzdHJ1Y3QgYmZpX3BvcnRfZ2VuZXJpY19yc3BfcwljbGVhcnN0YXRzX3JzcDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9QT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9wcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZkMjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcHBvcnQuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGSV9QUE9SVF9IX18KKyNkZWZpbmUgX19CRklfUFBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmkvYmZpLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfcHBvcnRfaDJpIHsKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9SRVEJCT0gKDEpLAorCUJGSV9QUE9SVF9IMklfRElTQUJMRV9SRVEJCT0gKDIpLAorCUJGSV9QUE9SVF9IMklfR0VUX1NUQVRTX1JFUQkJPSAoMyksCisJQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEJPSAoNCksCisJQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEJPSAoNSksCisJQkZJX1BQT1JUX0gySV9FTkFCTEVfUlhfVkZfVEFHX1JFUQk9ICg2KSwKKwlCRklfUFBPUlRfSDJJX0VOQUJMRV9UWF9WRl9UQUdfUkVRCT0gKDcpLAorCUJGSV9QUE9SVF9IMklfR0VUX1FPU19TVEFUU19SRVEJCT0gKDgpLAorCUJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JFUQk9ICg5KSwKK307CisKK2VudW0gYmZpX3Bwb3J0X2kyaCB7CisJQkZJX1BQT1JUX0kySF9FTkFCTEVfUlNQCQk9IEJGQV9JMkhNKDEpLAorCUJGSV9QUE9SVF9JMkhfRElTQUJMRV9SU1AJCT0gQkZBX0kySE0oMiksCisJQkZJX1BQT1JUX0kySF9HRVRfU1RBVFNfUlNQCQk9IEJGQV9JMkhNKDMpLAorCUJGSV9QUE9SVF9JMkhfQ0xFQVJfU1RBVFNfUlNQCT0gQkZBX0kySE0oNCksCisJQkZJX1BQT1JUX0kySF9TRVRfU1ZDX1BBUkFNU19SU1AJPSBCRkFfSTJITSg1KSwKKwlCRklfUFBPUlRfSTJIX0VOQUJMRV9SWF9WRl9UQUdfUlNQCT0gQkZBX0kySE0oNiksCisJQkZJX1BQT1JUX0kySF9FTkFCTEVfVFhfVkZfVEFHX1JTUAk9IEJGQV9JMkhNKDcpLAorCUJGSV9QUE9SVF9JMkhfRVZFTlQJCQk9IEJGQV9JMkhNKDgpLAorCUJGSV9QUE9SVF9JMkhfR0VUX1FPU19TVEFUU19SU1AJCT0gQkZBX0kySE0oOSksCisJQkZJX1BQT1JUX0kySF9DTEVBUl9RT1NfU1RBVFNfUlNQCT0gQkZBX0kySE0oMTApLAorfTsKKworLyoqCisgKiBHZW5lcmljIFJFUSB0eXBlCisgKi8KK3N0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIG1zZ3RhZzsJCS8qICBtc2d0YWcgZm9yIHJlcGx5CQkgICAgKi8KK307CisKKy8qKgorICogR2VuZXJpYyBSU1AgdHlwZQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJICAgICovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcG9ydCBlbmFibGUgc3RhdHVzCQkgICAgKi8KKwl1OCAgICAgICAgIHJzdmRbM107CisJdTMyICAgICAgICBtc2d0YWc7CQkvKiAgbXNndGFnIGZvciByZXBseQkJICAgICovCit9OworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfRU5BQkxFX1JFUQorICovCitzdHJ1Y3QgYmZpX3Bwb3J0X2VuYWJsZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIJCQkgICAgKi8KKwl1MzIgICAgICAgIHJzdmQxOworCXd3bl90ICAgICAgICAgICBud3duOwkJLyogIG5vZGUgd3duIG9mIHBoeXNpY2FsIHBvcnQJICAgICovCisJd3duX3QgICAgICAgICAgIHB3d247CQkvKiAgcG9ydCB3d24gb2YgcGh5c2ljYWwgcG9ydAkgICAgKi8KKwlzdHJ1Y3QgYmZhX3Bwb3J0X2NmZ19zIHBvcnRfY2ZnOwkvKiAgcG9ydCBjb25maWd1cmF0aW9uCSAgICAqLworCXVuaW9uIGJmaV9hZGRyX3UgIHN0YXRzX2RtYV9hZGRyOwkvKiAgRE1BIGFkZHJlc3MgZm9yIHN0YXRzICAqLworCXUzMiAgICAgICAgbXNndGFnOwkJLyogIG1zZ3RhZyBmb3IgcmVwbHkJCSAgICAqLworCXUzMiAgICAgICAgcnN2ZDI7Cit9OworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRU5BQkxFX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9lbmFibGVfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9ESVNBQkxFX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9kaXNhYmxlX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRElTQUJMRV9SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZGlzYWJsZV9yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0dFVF9TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfR0VUX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9DTEVBUl9TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcmVxX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCisKKy8qKgorICogQkZJX1BQT1JUX0kySF9DTEVBUl9TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9HRVRfUU9TX1NUQVRTX1JFUQorICovCisjZGVmaW5lIGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfR0VUX1FPU19TVEFUU19SU1AKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfZ2V0X3Fvc19zdGF0c19yc3BfdCBzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcnNwX3MKKworLyoqCisgKiBCRklfUFBPUlRfSDJJX0NMRUFSX1FPU19TVEFUU19SRVEKKyAqLworI2RlZmluZSBiZmlfcHBvcnRfY2xlYXJfcW9zX3N0YXRzX3JlcV90IHN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yZXFfcworCisvKioKKyAqIEJGSV9QUE9SVF9IMklfQ0xFQVJfUU9TX1NUQVRTX1JTUAorICovCisjZGVmaW5lIGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcnNwX3Qgc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCisKKy8qKgorICogQkZJX1BQT1JUX0gySV9TRVRfU1ZDX1BBUkFNU19SRVEKKyAqLworc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIG1zZyBoZWFkZXIgKi8KKwl1MTYgICAgICAgIHR4X2JiY3JlZGl0OwkvKiAgVHggY3JlZGl0cyAqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogQkZJX1BQT1JUX0kySF9TRVRfU1ZDX1BBUkFNU19SU1AKKyAqLworCisvKioKKyAqIEJGSV9QUE9SVF9JMkhfRVZFTlQKKyAqLworc3RydWN0IGJmaV9wcG9ydF9ldmVudF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAJbWg7CS8qICBjb21tb24gbXNnIGhlYWRlciAqLworCXN0cnVjdCBiZmFfcHBvcnRfbGlua19zCWxpbmtfc3RhdGU7Cit9OworCit1bmlvbiBiZmlfcHBvcnRfaDJpX21zZ191IHsKKwlzdHJ1Y3QgYmZpX21oZHJfcwkJCSptaGRyOworCXN0cnVjdCBiZmlfcHBvcnRfZW5hYmxlX3JlcV9zCQkqcGVuYWJsZTsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwZGlzYWJsZTsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwZ2V0c3RhdHM7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JlcV9zCQkqcGNsZWFyc3RhdHM7CisJc3RydWN0IGJmaV9wcG9ydF9zZXRfc3ZjX3BhcmFtc19yZXFfcwkqcHNldHN2Y3BhcmFtczsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dldF9xb3Nfc3RhdHNfcmVxX3MJKnBnZXRxb3NzdGF0czsKKwlzdHJ1Y3QgYmZpX3Bwb3J0X2dlbmVyaWNfcmVxX3MJCSpwY2xlYXJxb3NzdGF0czsKK307CisKK3VuaW9uIGJmaV9wcG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MJCQkqbXNnOworCXN0cnVjdCBiZmlfcHBvcnRfZ2VuZXJpY19yc3BfcwkJKmVuYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9kaXNhYmxlX3JzcF9zCQkqZGlzYWJsZV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9nZW5lcmljX3JzcF9zCQkqZ2V0c3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfY2xlYXJfc3RhdHNfcnNwX3MJKmNsZWFyc3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfc2V0X3N2Y19wYXJhbXNfcnNwX3MJKnNldHN2Y3BhcmFzbV9yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9nZXRfcW9zX3N0YXRzX3JzcF9zCSpnZXRxb3NzdGF0c19yc3A7CisJc3RydWN0IGJmaV9wcG9ydF9jbGVhcl9xb3Nfc3RhdHNfcnNwX3MJKmNsZWFycW9zc3RhdHNfcnNwOworCXN0cnVjdCBiZmlfcHBvcnRfZXZlbnRfcwkJKmV2ZW50OworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1BQT1JUX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvYmZpL2JmaV9ycG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTIwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfcnBvcnQuaApAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX1JQT1JUX0hfXworI2RlZmluZSBfX0JGSV9SUE9SVF9IX18KKworI2luY2x1ZGUgPGJmaS9iZmkuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYmZpX3Jwb3J0X2gyaV9tc2dzIHsKKwlCRklfUlBPUlRfSDJJX0NSRUFURV9SRVEgPSAxLAorCUJGSV9SUE9SVF9IMklfREVMRVRFX1JFUSA9IDIsCisJQkZJX1JQT1JUX0gySV9TRVRfU1BFRURfUkVRICA9IDMsCit9OworCitlbnVtIGJmaV9ycG9ydF9pMmhfbXNncyB7CisJQkZJX1JQT1JUX0kySF9DUkVBVEVfUlNQID0gQkZBX0kySE0oMSksCisJQkZJX1JQT1JUX0kySF9ERUxFVEVfUlNQID0gQkZBX0kySE0oMiksCisJQkZJX1JQT1JUX0kySF9RT1NfU0NOICAgID0gQkZBX0kySE0oMyksCit9OworCitzdHJ1Y3QgYmZpX3Jwb3J0X2NyZWF0ZV9yZXFfcyB7CisJc3RydWN0IGJmaV9taGRyX3MgIG1oOwkJLyogIGNvbW1vbiBtc2cgaGVhZGVyCQkqLworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgbWF4X2ZybXN6OwkvKiAgbWF4IHJjdiBwZHUgc2l6ZQkJKi8KKwl1MzIgICAgICAgIHBpZCAgICAgICA6IDI0LAkvKiAgcmVtb3RlIHBvcnQgSUQJCSovCisJCQlscF90YWcgICAgOiA4OwkvKiAgbG9jYWwgcG9ydCB0YWcJCSovCisJdTMyICAgICAgICBsb2NhbF9waWQgOiAyNCwJLyogIGxvY2FsIHBvcnQgSUQJCSovCisJCQljaXNjICAgICAgOiA4OworCXU4ICAgICAgICAgZmNfY2xhc3M7CS8qICBzdXBwb3J0ZWQgRkMgY2xhc3NlcwkqLworCXU4ICAgICAgICAgdmZfZW47CQkvKiAgdmlydHVhbCBmYWJyaWMgZW5hYmxlCSovCisJdTE2ICAgICAgICB2Zl9pZDsJCS8qICB2aXJ0dWFsIGZhYnJpYyBJRAkJKi8KK307CisKK3N0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcnBvcnQgY3JlYXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkWzNdOworCXUxNiAgICAgICAgYmZhX2hhbmRsZTsJLyogIGhvc3QgcnBvcnQgaGFuZGxlCQkqLworCXUxNiAgICAgICAgZndfaGFuZGxlOwkvKiAgZmlybXdhcmUgcnBvcnQgaGFuZGxlCSovCisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOyAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KK307CisKK3N0cnVjdCBiZmFfcnBvcnRfc3BlZWRfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkqLworCXU4CQlzcGVlZDsJCS8qISBycG9ydCdzIHNwZWVkIHZpYSBSUFNDICAqLworCXU4CQlyc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9kZWxldGVfcmVxX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGZ3X2hhbmRsZTsJLyogIGZpcm13YXJlIHJwb3J0IGhhbmRsZQkqLworCXUxNiAgICAgICAgcnN2ZDsKK307CisKK3N0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JzcF9zIHsKKwlzdHJ1Y3QgYmZpX21oZHJfcyAgbWg7CQkvKiAgY29tbW9uIG1zZyBoZWFkZXIJCSovCisJdTE2ICAgICAgICBiZmFfaGFuZGxlOwkvKiAgaG9zdCBycG9ydCBoYW5kbGUJCSovCisJdTggICAgICAgICBzdGF0dXM7CQkvKiAgcnBvcnQgZGVsZXRpb24gc3RhdHVzCSovCisJdTggICAgICAgICByc3ZkOworfTsKKworc3RydWN0IGJmaV9ycG9ydF9xb3Nfc2NuX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBjb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJmYV9oYW5kbGU7CS8qICBob3N0IHJwb3J0IGhhbmRsZQkJKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0cjsgIC8qIE9sZCBRb1MgQXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcyBuZXdfcW9zX2F0dHI7ICAvKiBOZXcgUW9TIEF0dHJpYnV0ZXMgKi8KK307CisKK3VuaW9uIGJmaV9ycG9ydF9oMmlfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MgCQkqbXNnOworCXN0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JlcV9zCSpjcmVhdGVfcmVxOworCXN0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JlcV9zCSpkZWxldGVfcmVxOworCXN0cnVjdCBiZmlfcnBvcnRfc3BlZWRfcmVxX3MJKnNwZWVkX3JlcTsKK307CisKK3VuaW9uIGJmaV9ycG9ydF9pMmhfbXNnX3UgeworCXN0cnVjdCBiZmlfbXNnX3MgCQkqbXNnOworCXN0cnVjdCBiZmlfcnBvcnRfY3JlYXRlX3JzcF9zCSpjcmVhdGVfcnNwOworCXN0cnVjdCBiZmlfcnBvcnRfZGVsZXRlX3JzcF9zCSpkZWxldGVfcnNwOworCXN0cnVjdCBiZmlfcnBvcnRfcW9zX3Njbl9zCSpxb3Nfc2NuX2V2dDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0JGSV9SUE9SVF9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2JmaS9iZmlfdWYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3VmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyOGE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9iZmkvYmZpX3VmLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZJX1VGX0hfXworI2RlZmluZSBfX0JGSV9VRl9IX18KKworI2luY2x1ZGUgImJmaS5oIgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSBiZmlfdWZfaDJpIHsKKwlCRklfVUZfSDJJX0JVRl9QT1NUID0gMSwKK307CisKK2VudW0gYmZpX3VmX2kyaCB7CisJQkZJX1VGX0kySF9GUk1fUkNWRCA9IEJGQV9JMkhNKDEpLAorfTsKKworI2RlZmluZSBCRkFfVUZfTUFYX1NHRVMJMgorCitzdHJ1Y3QgYmZpX3VmX2J1Zl9wb3N0X3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJ1Zl90YWc7CS8qICBidWZmZXIgdGFnCQkJKi8KKwl1MTYgICAgICAgIGJ1Zl9sZW47CS8qICB0b3RhbCBidWZmZXIgbGVuZ3RoCSovCisJc3RydWN0IGJmaV9zZ2VfcyAgIHNnZVtCRkFfVUZfTUFYX1NHRVNdOyAvKiAgYnVmZmVyIERNQSBTR0VzCSovCit9OworCitzdHJ1Y3QgYmZpX3VmX2ZybV9yY3ZkX3MgeworCXN0cnVjdCBiZmlfbWhkcl9zICBtaDsJCS8qICBDb21tb24gbXNnIGhlYWRlcgkJKi8KKwl1MTYgICAgICAgIGJ1Zl90YWc7CS8qICBidWZmZXIgdGFnCQkJKi8KKwl1MTYgICAgICAgIHJzdmQ7CisJdTE2ICAgICAgICBmcm1fbGVuOwkvKiAgcmVjZWl2ZWQgZnJhbWUgbGVuZ3RoIAkqLworCXUxNiAgICAgICAgeGZyX2xlbjsJLyogIHRyYW5mZXJyZWQgbGVuZ3RoCQkqLworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fQkZJX1VGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9iZmFfY25hX3RyY21vZC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9iZmFfY25hX3RyY21vZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYmE3MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2JmYV9jbmFfdHJjbW9kLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfY25hX3RyY21vZC5oIENOQSB0cmFjZSBtb2R1bGVzCisgKi8KKworI2lmbmRlZiBfX0JGQV9DTkFfVFJDTU9EX0hfXworI2RlZmluZSBfX0JGQV9DTkFfVFJDTU9EX0hfXworCisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorCisvKgorICogISEhIE9ubHkgYXBwZW5kIHRvIHRoZSBlbnVtcyBkZWZpbmVkIGhlcmUgdG8gYXZvaWQgYW55IHZlcnNpb25pbmcKKyAqICEhISBuZWVkZWQgYmV0d2VlbiB0cmFjZSB1dGlsaXR5IGFuZCBkcml2ZXIgdmVyc2lvbgorICovCitlbnVtIHsKKwlCRkFfVFJDX0NOQV9DRUUJCT0gMSwKKwlCRkFfVFJDX0NOQV9QT1JUCT0gMiwKK307CisKKyNlbmRpZiAvKiBfX0JGQV9DTkFfVFJDTU9EX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9jZWUvYmZhX2NlZS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9jZWUvYmZhX2NlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjI5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL2NlZS9iZmFfY2VlLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0NFRV9IX18KKyNkZWZpbmUgX19CRkFfQ0VFX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19jZWUuaD4KKyNpbmNsdWRlIDxiZmFfaW9jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3RyYy5oPgorI2luY2x1ZGUgPGNzL2JmYV9sb2cuaD4KKwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKK3R5cGVkZWYgdm9pZCAoKmJmYV9jZWVfaGJmYWlsX2NiZm5fdCkgKHZvaWQgKmRldiwgYmZhX3N0YXR1c190IHN0YXR1cyk7CisKK3N0cnVjdCBiZmFfY2VlX2NiZm5fcyB7CisJYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QgICAgZ2V0X2F0dHJfY2JmbjsKKwl2b2lkICpnZXRfYXR0cl9jYmFyZzsKKwliZmFfY2VlX2dldF9zdGF0c19jYmZuX3QgICBnZXRfc3RhdHNfY2JmbjsKKwl2b2lkICpnZXRfc3RhdHNfY2Jhcmc7CisJYmZhX2NlZV9yZXNldF9zdGF0c19jYmZuX3QgcmVzZXRfc3RhdHNfY2JmbjsKKwl2b2lkICpyZXNldF9zdGF0c19jYmFyZzsKK307CisKK3N0cnVjdCBiZmFfY2VlX3MgeworCXZvaWQgKmRldjsKKwliZmFfYm9vbGVhbl90IGdldF9hdHRyX3BlbmRpbmc7CisJYmZhX2Jvb2xlYW5fdCBnZXRfc3RhdHNfcGVuZGluZzsKKwliZmFfYm9vbGVhbl90IHJlc2V0X3N0YXRzX3BlbmRpbmc7CisJYmZhX3N0YXR1c190IGdldF9hdHRyX3N0YXR1czsKKwliZmFfc3RhdHVzX3QgZ2V0X3N0YXRzX3N0YXR1czsKKwliZmFfc3RhdHVzX3QgcmVzZXRfc3RhdHNfc3RhdHVzOworCXN0cnVjdCBiZmFfY2VlX2NiZm5fcyBjYmZuOworCXN0cnVjdCBiZmFfaW9jX2hiZmFpbF9ub3RpZnlfcyBoYmZhaWw7CisJc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZDsKKwlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kOworCXN0cnVjdCBiZmFfY2VlX2F0dHJfcyAqYXR0cjsKKwlzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zICpzdGF0czsKKwlzdHJ1Y3QgYmZhX2RtYV9zIGF0dHJfZG1hOworCXN0cnVjdCBiZmFfZG1hX3Mgc3RhdHNfZG1hOworCXN0cnVjdCBiZmFfaW9jX3MgKmlvYzsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgZ2V0X2NmZ19tYjsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3MgZ2V0X3N0YXRzX21iOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyByZXNldF9zdGF0c19tYjsKK307CisKK3UzMiBiZmFfY2VlX21lbWluZm8odm9pZCk7Cit2b2lkIGJmYV9jZWVfbWVtX2NsYWltKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgdTggKmRtYV9rdmEsCisJCQkgdTY0IGRtYV9wYSk7Cit2b2lkIGJmYV9jZWVfYXR0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLCB2b2lkICpkZXYsCisJCQlzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLAorCQkJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZCk7Cit2b2lkIGJmYV9jZWVfZGV0YWNoKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSk7CitiZmFfc3RhdHVzX3QgYmZhX2NlZV9nZXRfYXR0cihzdHJ1Y3QgYmZhX2NlZV9zICpjZWUsCisJCQkgc3RydWN0IGJmYV9jZWVfYXR0cl9zICphdHRyLAorCQkJYmZhX2NlZV9nZXRfYXR0cl9jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190IGJmYV9jZWVfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCXN0cnVjdCBiZmFfY2VlX3N0YXRzX3MgKnN0YXRzLAorCQkJYmZhX2NlZV9nZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCBiZmFfY2VlX3Jlc2V0X3N0YXRzKHN0cnVjdCBiZmFfY2VlX3MgKmNlZSwKKwkJCWJmYV9jZWVfcmVzZXRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKKyNlbmRpZiAvKiBfX0JGQV9DRUVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jbmEvcG9ydC9iZmFfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmYxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BvcnQvYmZhX3BvcnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGJmYV9pb2MuaD4KKyNpbmNsdWRlIDxjcy9iZmFfdHJjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX2xvZy5oPgorCit0eXBlZGVmIHZvaWQgICAgKCpiZmFfcG9ydF9zdGF0c19jYmZuX3QpICh2b2lkICpkZXYsIGJmYV9zdGF0dXNfdCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICAgICgqYmZhX3BvcnRfZW5kaXNfY2Jmbl90KSAodm9pZCAqZGV2LCBiZmFfc3RhdHVzX3Qgc3RhdHVzKTsKKworc3RydWN0IGJmYV9wb3J0X3MgeworCXZvaWQgICAgICAgICAgICpkZXY7CisJc3RydWN0IGJmYV9pb2NfcyAqaW9jOworCXN0cnVjdCBiZmFfdHJjX21vZF9zICp0cmNtb2Q7CisJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ21vZDsKKwl1MzIgICAgICAgIG1zZ3RhZzsKKwliZmFfYm9vbGVhbl90ICAgc3RhdHNfYnVzeTsKKwlzdHJ1Y3QgYmZhX21ib3hfY21kX3Mgc3RhdHNfbWI7CisJYmZhX3BvcnRfc3RhdHNfY2Jmbl90IHN0YXRzX2NiZm47CisJdm9pZCAgICAgICAgICAgKnN0YXRzX2NiYXJnOworCWJmYV9zdGF0dXNfdCAgICBzdGF0c19zdGF0dXM7CisJdW5pb24gYmZhX3Bwb3J0X3N0YXRzX3UgKnN0YXRzOworCXN0cnVjdCBiZmFfZG1hX3Mgc3RhdHNfZG1hOworCWJmYV9ib29sZWFuX3QgICBlbmRpc19wZW5kaW5nOworCXN0cnVjdCBiZmFfbWJveF9jbWRfcyBlbmRpc19tYjsKKwliZmFfcG9ydF9lbmRpc19jYmZuX3QgZW5kaXNfY2JmbjsKKwl2b2lkICAgICAgICAgICAqZW5kaXNfY2Jhcmc7CisJYmZhX3N0YXR1c190ICAgIGVuZGlzX3N0YXR1czsKKwlzdHJ1Y3QgYmZhX2lvY19oYmZhaWxfbm90aWZ5X3MgaGJmYWlsOworfTsKKwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2F0dGFjaChzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgc3RydWN0IGJmYV9pb2NfcyAqaW9jLAorCQkJCXZvaWQgKmRldiwgc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY21vZCwKKwkJCQlzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nbW9kKTsKK3ZvaWQgICAgICAgICAgICBiZmFfcG9ydF9kZXRhY2goc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X2hiZmFpbCh2b2lkICphcmcpOworCitiZmFfc3RhdHVzX3QgICAgYmZhX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSAgIHVuaW9uIGJmYV9wcG9ydF9zdGF0c191ICpzdGF0cywKKwkJCQkgICBiZmFfcG9ydF9zdGF0c19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOworYmZhX3N0YXR1c190ICAgIGJmYV9wb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSAgICAgYmZhX3BvcnRfc3RhdHNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9lbmFibGUoc3RydWN0IGJmYV9wb3J0X3MgKnBvcnQsCisJCQkJYmZhX3BvcnRfZW5kaXNfY2Jmbl90IGNiZm4sIHZvaWQgKmNiYXJnKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfcG9ydF9kaXNhYmxlKHN0cnVjdCBiZmFfcG9ydF9zICpwb3J0LAorCQkJCSBiZmFfcG9ydF9lbmRpc19jYmZuX3QgY2Jmbiwgdm9pZCAqY2JhcmcpOwordTMyICAgICAgICBiZmFfcG9ydF9tZW1pbmZvKHZvaWQpOwordm9pZCAgICAgICAgICAgIGJmYV9wb3J0X21lbV9jbGFpbShzdHJ1Y3QgYmZhX3BvcnRfcyAqcG9ydCwgdTggKmRtYV9rdmEsCisJCQkJICAgdTY0IGRtYV9wYSk7CisKKyNlbmRpZiAvKiBfX0JGQV9QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTYzZWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvZXRocG9ydF9kZWZzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19FVEhQT1JUX0RFRlNfSF9fCisjZGVmaW5lIF9fRVRIUE9SVF9ERUZTX0hfXworCitzdHJ1Y3QgYm5hZF9kcnZfc3RhdHMgeworCXU2NCBuZXRpZl9xdWV1ZV9zdG9wOworCXU2NCBuZXRpZl9xdWV1ZV93YWtldXA7CisJdTY0IHRzbzQ7CisJdTY0IHRzbzY7CisJdTY0IHRzb19lcnI7CisJdTY0IHRjcGNzdW1fb2ZmbG9hZDsKKwl1NjQgdWRwY3N1bV9vZmZsb2FkOworCXU2NCBjc3VtX2hlbHA7CisJdTY0IGNzdW1faGVscF9lcnI7CisKKwl1NjQgaHdfc3RhdHNfdXBkYXRlczsKKwl1NjQgbmV0aWZfcnhfc2NoZWR1bGU7CisJdTY0IG5ldGlmX3J4X2NvbXBsZXRlOworCXU2NCBuZXRpZl9yeF9kcm9wcGVkOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY25hL3BzdGF0cy9waHlwb3J0X2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjc1NDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fUEhZUE9SVF9ERUZTX0hfXworI2RlZmluZSBfX1BIWVBPUlRfREVGU19IX18KKworI2RlZmluZSBCTkFfVFhGX0lEX01BWCAgCTY0CisjZGVmaW5lIEJOQV9SWEZfSURfTUFYICAJNjQKKworLyoKKyAqIFN0YXRpc3RpY3MKKyAqLworCisvKgorICogVHhGIEZyYW1lIFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0c190eGYgeworCXU2NCAgICAgICAgdWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdWNhc3Q7CisJdTY0ICAgICAgICB1Y2FzdF92bGFuOworCisJdTY0ICAgICAgICBtY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBtY2FzdDsKKwl1NjQgICAgICAgIG1jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIGJjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIGJjYXN0OworCXU2NCAgICAgICAgYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgZXJyb3JzOworCXU2NCAgICAgICAgZmlsdGVyX3ZsYW47CS8qIGZyYW1lcyBmaWx0ZXJlZCBkdWUgdG8gVkxBTiAqLworCXU2NCAgICAgICAgZmlsdGVyX21hY19zYTsJLyogZnJhbWVzIGZpbHRlcmVkIGR1ZSB0byBTQSBjaGVjayAqLworfTsKKworLyoKKyAqIFJ4RiBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfcnhmIHsKKwl1NjQgICAgICAgIHVjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHVjYXN0OworCXU2NCAgICAgICAgdWNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgbWNhc3Q7CisJdTY0ICAgICAgICBtY2FzdF92bGFuOworCisJdTY0ICAgICAgICBiY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICBiY2FzdDsKKwl1NjQgICAgICAgIGJjYXN0X3ZsYW47CisJdTY0ICAgICAgICBmcmFtZV9kcm9wczsKK307CisKKy8qCisgKiBGQyBUeCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfZmNfdHggeworCXU2NCAgICAgICAgdHhmX3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHR4Zl91Y2FzdDsKKwl1NjQgICAgICAgIHR4Zl91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICB0eGZfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgdHhmX21jYXN0OworCXU2NCAgICAgICAgdHhmX21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHR4Zl9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICB0eGZfYmNhc3Q7CisJdTY0ICAgICAgICB0eGZfYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgdHhmX3Bhcml0eV9lcnJvcnM7CisJdTY0ICAgICAgICB0eGZfdGltZW91dDsKKwl1NjQgICAgICAgIHR4Zl9maWRfcGFyaXR5X2Vycm9yczsKK307CisKKy8qCisgKiBGQyBSeCBGcmFtZSBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBibmFfc3RhdHNfZmNfcnggeworCXU2NCAgICAgICAgcnhmX3VjYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4Zl91Y2FzdDsKKwl1NjQgICAgICAgIHJ4Zl91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICByeGZfbWNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhmX21jYXN0OworCXU2NCAgICAgICAgcnhmX21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4Zl9iY2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeGZfYmNhc3Q7CisJdTY0ICAgICAgICByeGZfYmNhc3RfdmxhbjsKK307CisKKy8qCisgKiBSQUQgRnJhbWUgU3RhdGlzdGljcworICovCitzdHJ1Y3QgY25hX3N0YXRzX3JhZCB7CisJdTY0ICAgICAgICByeF9mcmFtZXM7CisJdTY0ICAgICAgICByeF9vY3RldHM7CisJdTY0ICAgICAgICByeF92bGFuX2ZyYW1lczsKKworCXU2NCAgICAgICAgcnhfdWNhc3Q7CisJdTY0ICAgICAgICByeF91Y2FzdF9vY3RldHM7CisJdTY0ICAgICAgICByeF91Y2FzdF92bGFuOworCisJdTY0ICAgICAgICByeF9tY2FzdDsKKwl1NjQgICAgICAgIHJ4X21jYXN0X29jdGV0czsKKwl1NjQgICAgICAgIHJ4X21jYXN0X3ZsYW47CisKKwl1NjQgICAgICAgIHJ4X2JjYXN0OworCXU2NCAgICAgICAgcnhfYmNhc3Rfb2N0ZXRzOworCXU2NCAgICAgICAgcnhfYmNhc3RfdmxhbjsKKworCXU2NCAgICAgICAgcnhfZHJvcHM7Cit9OworCisvKgorICogQlBDIFR4IFJlZ2lzdGVycworICovCitzdHJ1Y3QgY25hX3N0YXRzX2JwY190eCB7CisJdTY0ICAgICAgICB0eF9wYXVzZVs4XTsKKwl1NjQgICAgICAgIHR4X3plcm9fcGF1c2VbOF07CS8qICBQYXVzZSBjYW5jZWxsYXRpb24gKi8KKwl1NjQgICAgICAgIHR4X2ZpcnN0X3BhdXNlWzhdOwkvKiAgUGF1c2UgaW5pdGlhdGlvbiByYXRoZXIKKwkJCQkJCSAqdGhhbiByZXRlbnRpb24gKi8KK307CisKKy8qCisgKiBCUEMgUnggUmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfYnBjX3J4IHsKKwl1NjQgICAgICAgIHJ4X3BhdXNlWzhdOworCXU2NCAgICAgICAgcnhfemVyb19wYXVzZVs4XTsJLyogIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NCAgICAgICAgcnhfZmlyc3RfcGF1c2VbOF07CS8qICBQYXVzZSBpbml0aWF0aW9uIHJhdGhlcgorCQkJCQkJICp0aGFuIHJldGVudGlvbiAqLworfTsKKworLyoKKyAqIE1BQyBSeCBTdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBjbmFfc3RhdHNfbWFjX3J4IHsKKwl1NjQgICAgICAgIGZyYW1lXzY0OwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV82NV8xMjc7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzEyOF8yNTU7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzI1Nl81MTE7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzUxMl8xMDIzOwkvKiBib3RoIHJ4IGFuZCB0eCBjb3VudGVyICovCisJdTY0ICAgICAgICBmcmFtZV8xMDI0XzE1MTg7CS8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQgICAgICAgIGZyYW1lXzE1MThfMTUyMjsJLyogYm90aCByeCBhbmQgdHggY291bnRlciAqLworCXU2NCAgICAgICAgcnhfYnl0ZXM7CisJdTY0ICAgICAgICByeF9wYWNrZXRzOworCXU2NCAgICAgICAgcnhfZmNzX2Vycm9yOworCXU2NCAgICAgICAgcnhfbXVsdGljYXN0OworCXU2NCAgICAgICAgcnhfYnJvYWRjYXN0OworCXU2NCAgICAgICAgcnhfY29udHJvbF9mcmFtZXM7CisJdTY0ICAgICAgICByeF9wYXVzZTsKKwl1NjQgICAgICAgIHJ4X3Vua25vd25fb3Bjb2RlOworCXU2NCAgICAgICAgcnhfYWxpZ25tZW50X2Vycm9yOworCXU2NCAgICAgICAgcnhfZnJhbWVfbGVuZ3RoX2Vycm9yOworCXU2NCAgICAgICAgcnhfY29kZV9lcnJvcjsKKwl1NjQgICAgICAgIHJ4X2NhcnJpZXJfc2Vuc2VfZXJyb3I7CisJdTY0ICAgICAgICByeF91bmRlcnNpemU7CisJdTY0ICAgICAgICByeF9vdmVyc2l6ZTsKKwl1NjQgICAgICAgIHJ4X2ZyYWdtZW50czsKKwl1NjQgICAgICAgIHJ4X2phYmJlcjsKKwl1NjQgICAgICAgIHJ4X2Ryb3A7Cit9OworCisvKgorICogTUFDIFR4IFN0YXRpc3RpY3MKKyAqLworc3RydWN0IGNuYV9zdGF0c19tYWNfdHggeworCXU2NCAgICAgICAgdHhfYnl0ZXM7CisJdTY0ICAgICAgICB0eF9wYWNrZXRzOworCXU2NCAgICAgICAgdHhfbXVsdGljYXN0OworCXU2NCAgICAgICAgdHhfYnJvYWRjYXN0OworCXU2NCAgICAgICAgdHhfcGF1c2U7CisJdTY0ICAgICAgICB0eF9kZWZlcnJhbDsKKwl1NjQgICAgICAgIHR4X2V4Y2Vzc2l2ZV9kZWZlcnJhbDsKKwl1NjQgICAgICAgIHR4X3NpbmdsZV9jb2xsaXNpb247CisJdTY0ICAgICAgICB0eF9tdWxpcGxlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X2xhdGVfY29sbGlzaW9uOworCXU2NCAgICAgICAgdHhfZXhjZXNzaXZlX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X3RvdGFsX2NvbGxpc2lvbjsKKwl1NjQgICAgICAgIHR4X3BhdXNlX2hvbm9yZWQ7CisJdTY0ICAgICAgICB0eF9kcm9wOworCXU2NCAgICAgICAgdHhfamFiYmVyOworCXU2NCAgICAgICAgdHhfZmNzX2Vycm9yOworCXU2NCAgICAgICAgdHhfY29udHJvbF9mcmFtZTsKKwl1NjQgICAgICAgIHR4X292ZXJzaXplOworCXU2NCAgICAgICAgdHhfdW5kZXJzaXplOworCXU2NCAgICAgICAgdHhfZnJhZ21lbnRzOworfTsKKworLyoKKyAqIENvbXBsZXRlIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJuYV9zdGF0cyB7CisJc3RydWN0IGNuYV9zdGF0c19tYWNfcnggbWFjX3J4X3N0YXRzOworCXN0cnVjdCBjbmFfc3RhdHNfYnBjX3J4IGJwY19yeF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX3JhZCByYWRfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19mY19yeCBmY19yeF9zdGF0czsKKwlzdHJ1Y3QgY25hX3N0YXRzX21hY190eCBtYWNfdHhfc3RhdHM7CisJc3RydWN0IGNuYV9zdGF0c19icGNfdHggYnBjX3R4X3N0YXRzOworCXN0cnVjdCBibmFfc3RhdHNfZmNfdHggZmNfdHhfc3RhdHM7CisJc3RydWN0IGJuYV9zdGF0c19yeGYgcnhmX3N0YXRzW0JOQV9UWEZfSURfTUFYXTsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3R4ZiB0eGZfc3RhdHNbQk5BX1JYRl9JRF9NQVhdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2NoZWNrc3VtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2NoZWNrc3VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4YzFkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfY2hlY2tzdW0uaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9jaGVja3N1bS5oIEJGQSBjaGVja3N1bSB1dGlsaXRpZXMKKyAqLworCisjaWZuZGVmIF9fQkZBX0NIRUNLU1VNX0hfXworI2RlZmluZSBfX0JGQV9DSEVDS1NVTV9IX18KKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9jaGVja3N1bV91MzIodTMyICpidWYsIGludCBzeikKK3sKKwlpbnQJCWksIG0gPSBzeiA+PiAyOworCXUzMglzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKworc3RhdGljIGlubGluZSB1MTYKK2JmYV9jaGVja3N1bV91MTYodTE2ICpidWYsIGludCBzeikKK3sKKwlpbnQgICAgICAgICAgICAgaSwgbSA9IHN6ID4+IDE7CisJdTE2ICAgICAgICBzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKworc3RhdGljIGlubGluZSB1OAorYmZhX2NoZWNrc3VtX3U4KHU4ICpidWYsIGludCBzeikKK3sKKwlpbnQgICAgICAgICAgICAgaTsKKwl1OCAgICAgICAgIHN1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykKKwkJc3VtIF49IGJ1ZltpXTsKKworCXJldHVybiAoc3VtKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MWJlODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2RlYnVnLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZGVidWcuaCBCRkEgZGVidWcgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfREVCVUdfSF9fCisjZGVmaW5lIF9fQkZBX0RFQlVHX0hfXworCisjZGVmaW5lIGJmYV9hc3NlcnQoX19jb25kKQlkbyB7CQkJCQlcCisJaWYgKCEoX19jb25kKSkgCQkJCQkJCVwKKwkJYmZhX3BhbmljKF9fTElORV9fLCBfX0ZJTEVfXywgI19fY29uZCk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfc21fZmF1bHQoX19tb2QsIF9fZXZlbnQpCWRvIHsJCQkJXAorCWJmYV9zbV9wYW5pYygoX19tb2QpLT5sb2dtLCBfX0xJTkVfXywgX19GSUxFX18sIF9fZXZlbnQpOyAgICAgIFwKK30gd2hpbGUgKDApCisKKyNpZm5kZWYgQkZBX1BFUkZfQlVJTEQKKyNkZWZpbmUgYmZhX2Fzc2VydF9mcChfX2NvbmQpCWJmYV9hc3NlcnQoX19jb25kKQorI2Vsc2UKKyNkZWZpbmUgYmZhX2Fzc2VydF9mcChfX2NvbmQpCisjZW5kaWYKKworc3RydWN0IGJmYV9sb2dfbW9kX3M7Cit2b2lkIGJmYV9wYW5pYyhpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqcGFuaWNzdHIpOwordm9pZCBiZmFfc21fcGFuaWMoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ20sIGludCBsaW5lLCBjaGFyICpmaWxlLCBpbnQgZXZlbnQpOworCisjZW5kaWYgLyogX19CRkFfREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX2xvZy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9sb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFjYmUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9sb2cuaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfbG9nLmggQkZBIGxvZyBsaWJyYXJ5IGRhdGEgc3RydWN0dXJlIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9uCisgKi8KKworI2lmbmRlZiBfX0JGQV9MT0dfSF9fCisjZGVmaW5lIF9fQkZBX0xPR19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWVuLmg+CisKKy8qCisgKiBCRkEgbG9nIG1vZHVsZSBkZWZpbml0aW9uCisgKgorICogVG8gY3JlYXRlIGEgbmV3IG1vZHVsZSBpZDoKKyAqIEFkZCBhICNkZWZpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCBiZWxvdy4gU2VsZWN0IGEgdmFsdWUgZm9yIHlvdXIKKyAqIGRlZmluaXRpb24gc28gdGhhdCBpdCBpcyBvbmUgKDEpIGdyZWF0ZXIgdGhhbiB0aGUgcHJldmlvdXMKKyAqIGRlZmluaXRpb24uIE1vZGlmeSB0aGUgZGVmaW5pdGlvbiBvZiBCRkFfTE9HX01PRFVMRV9JRF9NQVggdG8gYmVjb21lCisgKiB5b3VyIG5ldyBkZWZpbml0aW9uLgorICogU2hvdWxkIGhhdmUgbm8gZ2FwcyBpbiBiZXR3ZWVuIHRoZSB2YWx1ZXMgYmVjYXVzZSB0aGlzIGlzIHVzZWQgaW4gYXJyYXlzLgorICogSU1QT1JUQU5UOiBBRU5fSURzIG11c3QgYmUgYXQgdGhlIGJlZ2luaW5nLCBvdGhlcndpc2UgdXBkYXRlIGJmYV9kZWZzX2Flbi5oCisgKi8KKworZW51bSBiZmFfbG9nX21vZHVsZV9pZCB7CisJQkZBX0xPR19VTlVTRURfSUQJPSAwLAorCisJLyogQUVOIGRlZnMgYmVnaW4gKi8KKwlCRkFfTE9HX0FFTl9NSU4JCT0gQkZBX0xPR19VTlVTRURfSUQsCisKKwlCRkFfTE9HX0FFTl9JRF9BREFQVEVSIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0FEQVBURVIsLyogMSAqLworCUJGQV9MT0dfQUVOX0lEX1BPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfUE9SVCwJLyogMiAqLworCUJGQV9MT0dfQUVOX0lEX0xQT1JUIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0xQT1JULAkvKiAzICovCisJQkZBX0xPR19BRU5fSURfUlBPUlQgCT0gQkZBX0xPR19BRU5fTUlOICsgQkZBX0FFTl9DQVRfUlBPUlQsCS8qIDQgKi8KKwlCRkFfTE9HX0FFTl9JRF9JVE5JTSAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9JVE5JTSwJLyogNSAqLworCUJGQV9MT0dfQUVOX0lEX1RJTiAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9USU4sCS8qIDYgKi8KKwlCRkFfTE9HX0FFTl9JRF9JUEZDIAk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lQRkMsCS8qIDcgKi8KKwlCRkFfTE9HX0FFTl9JRF9BVURJVCAJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9BVURJVCwJLyogOCAqLworCUJGQV9MT0dfQUVOX0lEX0lPQwk9IEJGQV9MT0dfQUVOX01JTiArIEJGQV9BRU5fQ0FUX0lPQywJLyogOSAqLworCUJGQV9MT0dfQUVOX0lEX0VUSFBPUlQJPSBCRkFfTE9HX0FFTl9NSU4gKyBCRkFfQUVOX0NBVF9FVEhQT1JULC8qIDEwICovCisKKwlCRkFfTE9HX0FFTl9NQVgJCT0gQkZBX0xPR19BRU5fSURfRVRIUE9SVCwKKwkvKiBBRU4gZGVmcyBlbmQgKi8KKworCUJGQV9MT0dfTU9EVUxFX0lEX01JTgk9IEJGQV9MT0dfQUVOX01BWCwKKworCUJGQV9MT0dfRldfSUQJCT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgMSwKKwlCRkFfTE9HX0hBTF9JRAkJPSBCRkFfTE9HX01PRFVMRV9JRF9NSU4gKyAyLAorCUJGQV9MT0dfRkNTX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDMsCisJQkZBX0xPR19XRFJWX0lECQk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDQsCisJQkZBX0xPR19MSU5VWF9JRAk9IEJGQV9MT0dfTU9EVUxFX0lEX01JTiArIDUsCisJQkZBX0xPR19TT0xBUklTX0lECT0gQkZBX0xPR19NT0RVTEVfSURfTUlOICsgNiwKKworCUJGQV9MT0dfTU9EVUxFX0lEX01BWCAJPSBCRkFfTE9HX1NPTEFSSVNfSUQsCisKKwkvKiBOb3QgcGFydCBvZiBhbnkgYXJyYXlzICovCisJQkZBX0xPR19NT0RVTEVfSURfQUxMIAk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDEsCisJQkZBX0xPR19BRU5fQUxMIAk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDIsCisJQkZBX0xPR19EUlZfQUxMCQk9IEJGQV9MT0dfTU9EVUxFX0lEX01BWCArIDMsCit9OworCisvKgorICogQkZBIGxvZyBjYXRhbG9nIG5hbWUKKyAqLworI2RlZmluZSBCRkFfTE9HX0NBVF9OQU1FCSJCRkEiCisKKy8qCisgKiBiZmEgbG9nIHNldmVyaXR5IHZhbHVlcworICovCitlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgeworCUJGQV9MT0dfSU5WQUxJRCA9IDAsCisJQkZBX0xPR19DUklUSUNBTCA9IDEsCisJQkZBX0xPR19FUlJPUiA9IDIsCisJQkZBX0xPR19XQVJOSU5HID0gMywKKwlCRkFfTE9HX0lORk8gPSA0LAorCUJGQV9MT0dfTk9ORSA9IDUsCisJQkZBX0xPR19MRVZFTF9NQVggPSBCRkFfTE9HX05PTkUKK307CisKKyNkZWZpbmUgQkZBX0xPR19NT0RJRF9PRkZTRVQJCTE2CisKKworc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgeworCXUzMgltc2dfaWQ7CQkvKiAgbWVzc2FnZSBpZCAqLworCWludAkJYXR0cmlidXRlczsJLyogIGF0dHJpYnV0ZXMgKi8KKwlpbnQJCXNldmVyaXR5OwkvKiAgc2V2ZXJpdHkgbGV2ZWwgKi8KKwljaGFyCQkqbXNnX3ZhbHVlOworCQkJCQkvKiAgbXNnIHN0cmluZyAqLworCWNoYXIJCSptZXNzYWdlOworCQkJCQkvKiAgbXNnIGZvcm1hdCBzdHJpbmcgKi8KKwlpbnQJCWFyZ190eXBlOwkvKiAgYXJndW1lbnQgdHlwZSAqLworCWludAkJYXJnX251bTsJLyogIG51bWJlciBvZiBhcmd1bWVudCAqLworfTsKKworLyoKKyAqIHN1cHBvcnRlZCBhcmd1bWVudCB0eXBlCisgKi8KK2VudW0gYmZhX2xvZ19hcmdfdHlwZSB7CisJQkZBX0xPR19TID0gMCwJCS8qICBzdHJpbmcgKi8KKwlCRkFfTE9HX0QsCQkvKiAgZGVjaW1hbCAqLworCUJGQV9MT0dfSSwJCS8qICBpbnRlZ2VyICovCisJQkZBX0xPR19PLAkJLyogIG9jdCBudW1iZXIgKi8KKwlCRkFfTE9HX1UsCQkvKiAgdW5zaWduZWQgaW50ZWdlciAqLworCUJGQV9MT0dfWCwJCS8qICBoZXggbnVtYmVyICovCisJQkZBX0xPR19GLAkJLyogIGZsb2F0aW5nICovCisJQkZBX0xPR19DLAkJLyogIGNoYXJhY3RlciAqLworCUJGQV9MT0dfTCwJCS8qICBkb3VibGUgKi8KKwlCRkFfTE9HX1AJCS8qICBwb2ludGVyICovCit9OworCisjZGVmaW5lIEJGQV9MT0dfQVJHX1RZUEUJMgorI2RlZmluZSBCRkFfTE9HX0FSRzAJCSgwICogQkZBX0xPR19BUkdfVFlQRSkKKyNkZWZpbmUgQkZBX0xPR19BUkcxCQkoMSAqIEJGQV9MT0dfQVJHX1RZUEUpCisjZGVmaW5lIEJGQV9MT0dfQVJHMgkJKDIgKiBCRkFfTE9HX0FSR19UWVBFKQorI2RlZmluZSBCRkFfTE9HX0FSRzMJCSgzICogQkZBX0xPR19BUkdfVFlQRSkKKworI2RlZmluZSBCRkFfTE9HX0dFVF9NT0RfSUQobXNnaWQpICgobXNnaWQgPj4gQkZBX0xPR19NT0RJRF9PRkZTRVQpICYgMHhmZikKKyNkZWZpbmUgQkZBX0xPR19HRVRfTVNHX0lEWChtc2dpZCkgKG1zZ2lkICYgMHhmZmZmKQorI2RlZmluZSBCRkFfTE9HX0dFVF9NU0dfSUQobXNnZGVmKSAoKG1zZ2RlZiktPm1zZ19pZCkKKyNkZWZpbmUgQkZBX0xPR19HRVRfTVNHX0ZNVF9TVFJJTkcobXNnZGVmKSAoKG1zZ2RlZiktPm1lc3NhZ2UpCisjZGVmaW5lIEJGQV9MT0dfR0VUX1NFVkVSSVRZKG1zZ2RlZikgKChtc2dkZWYpLT5zZXZlcml0eSkKKworLyoKKyAqIEV2ZW50IGF0dHJpYnV0ZXMKKyAqLworI2RlZmluZSBCRkFfTE9HX0FUVFJfTk9ORQkwCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9BVURJVAkxCisjZGVmaW5lIEJGQV9MT0dfQVRUUl9MT0cJMgorI2RlZmluZSBCRkFfTE9HX0FUVFJfRkZEQwk0CisKKyNkZWZpbmUgQkZBX0xPR19DUkVBVEVfSUQobXN3LCBsc3cpIFwKKwkoKCh1MzIpbXN3IDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IGxzdykKKworc3RydWN0IGJmYV9sb2dfbW9kX3M7CisKKy8qKgorICogY2FsbGJhY2sgZnVuY3Rpb24KKyAqLwordHlwZWRlZiB2b2lkICgqYmZhX2xvZ19jYl90KShzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwgdTMyIG1zZ19pZCwKKwkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworCitzdHJ1Y3QgYmZhX2xvZ19tb2RfcyB7CisJY2hhcgkJaW5zdGFuY2VfaW5mb1sxNl07CS8qICBpbnN0YW5jZSBpbmZvICovCisJaW50CQlsb2dfbGV2ZWxbQkZBX0xPR19NT0RVTEVfSURfTUFYICsgMV07CisJCQkJCQkvKiAgbG9nIGxldmVsIGZvciBtb2R1bGVzICovCisJYmZhX2xvZ19jYl90CWNiZm47IAkJCS8qICBjYWxsYmFjayBmdW5jdGlvbiAqLworfTsKKworZXh0ZXJuIGludCBiZmFfbG9nX2luaXQoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQljaGFyICppbnN0YW5jZV9uYW1lLCBiZmFfbG9nX2NiX3QgY2Jmbik7CitleHRlcm4gaW50IGJmYV9sb2coc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQsIC4uLik7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsKHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dfbW9kLAorCQkJaW50IG1vZF9pZCwgZW51bSBiZmFfbG9nX3NldmVyaXR5IGxvZ19sZXZlbCk7CitleHRlcm4gYmZhX3N0YXR1c190IGJmYV9sb2dfc2V0X2xldmVsX2FsbChzdHJ1Y3QgYmZhX2xvZ19tb2RfcyAqbG9nX21vZCwKKwkJCWVudW0gYmZhX2xvZ19zZXZlcml0eSBsb2dfbGV2ZWwpOworZXh0ZXJuIGJmYV9zdGF0dXNfdCBiZmFfbG9nX3NldF9sZXZlbF9hZW4oc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQllbnVtIGJmYV9sb2dfc2V2ZXJpdHkgbG9nX2xldmVsKTsKK2V4dGVybiBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgYmZhX2xvZ19nZXRfbGV2ZWwoc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsCisJCQlpbnQgbW9kX2lkKTsKK2V4dGVybiBlbnVtIGJmYV9sb2dfc2V2ZXJpdHkgYmZhX2xvZ19nZXRfbXNnX2xldmVsKAorCQkJc3RydWN0IGJmYV9sb2dfbW9kX3MgKmxvZ19tb2QsIHUzMiBtc2dfaWQpOworLyoKKyAqIGFycmF5IG9mIG1lc3NhZ2VzIGdlbmVyYXRlZCBmcm9tIHhtbCBmaWxlcworICovCitleHRlcm4gc3RydWN0IGJmYV9sb2dfbXNnZGVmX3MgYmZhX2xvZ19tc2dfYXJyYXlbXTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3BlcmYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGVyZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YWE1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3BlcmYuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBRF9QRVJGX0hfXworI2RlZmluZSBfX0JGQURfUEVSRl9IX18KKworI2lmZGVmIEJGQURfUEVSRl9CVUlMRAorCisjdW5kZWYgYmZhX3RyYworI3VuZGVmIGJmYV90cmMzMgorI3VuZGVmIGJmYV9hc3NlcnQKKyN1bmRlZiBCRkFfVFJDX0ZJTEUKKworI2RlZmluZSBiZmFfdHJjKF90cmNwLCBfZGF0YSkKKyNkZWZpbmUgYmZhX3RyYzMyKF90cmNwLCBfZGF0YSkKKyNkZWZpbmUgYmZhX2Fzc2VydChfX2NvbmQpCisjZGVmaW5lIEJGQV9UUkNfRklMRShfX21vZCwgX19zdWJtb2QpCisKKyNlbmRpZgorCisjZW5kaWYgLyogX19CRkFEX1BFUkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3Bsb2cuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfcGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGY4NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3Bsb2cuaApAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9QT1JUTE9HX0hfXworI2RlZmluZSBfX0JGQV9QT1JUTE9HX0hfXworCisjaW5jbHVkZSAicHJvdG9jb2wvZmMuaCIKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKyNkZWZpbmUgQkZBX1BMX05MT0dfRU5UUyAyNTYKKyNkZWZpbmUgQkZBX1BMX0xPR19SRUNfSU5DUihfeCkgKChfeCkrKywgKF94KSAlPSBCRkFfUExfTkxPR19FTlRTKQorCisjZGVmaW5lIEJGQV9QTF9TVFJJTkdfTE9HX1NaICAgMzIgICAvKiBudW1iZXIgb2YgY2hhcnMgaW4gc3RyaW5nIGxvZyAqLworI2RlZmluZSBCRkFfUExfSU5UX0xPR19TWiAgICAgIDggICAgLyogbnVtYmVyIG9mIGludGVnZXJzIGluIHRoZSBpbnRlZ2VyIGxvZyAqLworCitlbnVtIGJmYV9wbG9nX2xvZ190eXBlIHsKKwlCRkFfUExfTE9HX1RZUEVfSU5WQUxJRCA9IDAsCisJQkZBX1BMX0xPR19UWVBFX0lOVCAJPSAxLAorCUJGQV9QTF9MT0dfVFlQRV9TVFJJTkcgCT0gMiwKK307CisKKy8qCisgKiB0aGUgKGZpeGVkIHNpemUpIHJlY29yZCBmb3JtYXQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHBvcnRsb2cKKyAqLworc3RydWN0IGJmYV9wbG9nX3JlY19zIHsKKwl1MzIgICAgICAgIHR2OwkvKiBGaWxsZWQgYnkgdGhlIHBvcnRsb2cgZHJpdmVyIHdoZW4gdGhlICoKKwkJCQkgKiBlbnRyeSBpcyBhZGRlZCB0byB0aGUgY2lyY3VsYXIgbG9nLiAgICovCisJdTggICAgICAgICBwb3J0OwkvKiBTb3VyY2UgcG9ydCB0aGF0IGxvZ2dlZCB0aGlzIGVudHJ5LiBDTQorCQkJCSAqIGVudGl0aWVzIHdpbGwgdXNlIDB4RkYgKi8KKwl1OCAgICAgICAgIG1pZDsJLyogSW50ZWdlciB2YWx1ZSB0byBiZSB1c2VkIGJ5IGFsbCBlbnRpdGllcyAqCisJCQkJICogd2hpbGUgbG9nZ2luZy4gVGhlIG1vZHVsZSBpZCB0byBzdHJpbmcgICAqCisJCQkJICogY29udmVyc2lvbiB3aWxsIGJlIGRvbmUgYnkgQkZBTC4gU2VlCisJCQkJICogZW51bSBiZmFfcGxvZ19taWQgKi8KKwl1OCAgICAgICAgIGVpZDsJLyogaW5kaWNhdGVzIFJ4LCBUeCwgSU9DVEwsIGV0Yy4gU2VlCisJCQkJICogZW51bSBiZmFfcGxvZ19laWQgKi8KKwl1OCAgICAgICAgIGxvZ190eXBlOyAvKiBpbmRpY2F0ZXMgc3RyaW5nIGxvZyBvciBpbnRlZ2VyIGxvZy4KKwkJCQkgICAqIHNlZSBiZmFfcGxvZ19sb2dfdHlwZV90ICovCisJdTggICAgICAgICBsb2dfbnVtX2ludHM7CisJLyoKKwkgKiBpbnRlcnByZXRlZCBvbmx5IGlmIGxvZ190eXBlIGlzIElOVF9MT0cuIGluZGljYXRlcyBudW1iZXIgb2YKKwkgKiBpbnRlZ2VycyBpbiB0aGUgaW50X2xvZ1tdICgwLVBMX0lOVF9MT0dfU1opLgorCSAqLworCXU4ICAgICAgICAgcnN2ZDsKKwl1MTYgICAgICAgIG1pc2M7CS8qIGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIGZjIGZyYW1lIGxlbmd0aCwKKwkJCQkgKmV0Yy4uICovCisJdW5pb24geworCQljaGFyICAgICAgICAgICAgc3RyaW5nX2xvZ1tCRkFfUExfU1RSSU5HX0xPR19TWl07CisJCXUzMiAgICAgICAgaW50X2xvZ1tCRkFfUExfSU5UX0xPR19TWl07CisJfSBsb2dfZW50cnk7CisKK307CisKKy8qCisgKiB0aGUgZm9sbG93aW5nICNkZWZpbmVzIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9nZ2luZyBlbnRpdGllcyB0byBpbmRpY2F0ZQorICogdGhlaXIgbW9kdWxlIGlkLiBCRkFMIHdpbGwgY29udmVydCB0aGUgaW50ZWdlciB2YWx1ZSB0byBzdHJpbmcgZm9ybWF0CisgKgorKiBwcm9jZXNzIHRvIGJlIHVzZWQgd2hpbGUgY2hhbmdpbmcgdGhlIGZvbGxvd2luZyAjZGVmaW5lczoKKyAqICAtIEFsd2F5cyBhZGQgbmV3IGVudHJpZXMgYXQgdGhlIGVuZAorICogIC0gZGVmaW5lIGNvcnJlc3BvbmRpbmcgc3RyaW5nIGluIEJGQUwKKyAqICAtIERvIG5vdCByZW1vdmUgYW55IGVudHJ5IG9yIHJlYXJyYW5nZSB0aGUgb3JkZXIuCisgKi8KK2VudW0gYmZhX3Bsb2dfbWlkIHsKKwlCRkFfUExfTUlEX0lOVkFMSUQgCT0gMCwKKwlCRkFfUExfTUlEX0RFQlVHIAk9IDEsCisJQkZBX1BMX01JRF9EUlZSIAk9IDIsCisJQkZBX1BMX01JRF9IQUwgCQk9IDMsCisJQkZBX1BMX01JRF9IQUxfRkNYUCAJPSA0LAorCUJGQV9QTF9NSURfSEFMX1VGIAk9IDUsCisJQkZBX1BMX01JRF9GQ1MgCQk9IDYsCisJQkZBX1BMX01JRF9NQVggCQk9IDcKK307CisKKyNkZWZpbmUgQkZBX1BMX01JRF9TVFJMRU4gICAgOAorc3RydWN0IGJmYV9wbG9nX21pZF9zdHJpbmdzX3MgeworCWNoYXIgICAgICAgICAgICBtX3N0cltCRkFfUExfTUlEX1NUUkxFTl07Cit9OworCisvKgorICogdGhlIGZvbGxvd2luZyAjZGVmaW5lcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcgZW50aXRpZXMgdG8gaW5kaWNhdGUKKyAqIHRoZWlyIGV2ZW50IHR5cGUuIEJGQUwgd2lsbCBjb252ZXJ0IHRoZSBpbnRlZ2VyIHZhbHVlIHRvIHN0cmluZyBmb3JtYXQKKyAqCisqIHByb2Nlc3MgdG8gYmUgdXNlZCB3aGlsZSBjaGFuZ2luZyB0aGUgZm9sbG93aW5nICNkZWZpbmVzOgorICogIC0gQWx3YXlzIGFkZCBuZXcgZW50cmllcyBhdCB0aGUgZW5kCisgKiAgLSBkZWZpbmUgY29ycmVzcG9uZGluZyBzdHJpbmcgaW4gQkZBTAorICogIC0gRG8gbm90IHJlbW92ZSBhbnkgZW50cnkgb3IgcmVhcnJhbmdlIHRoZSBvcmRlci4KKyAqLworZW51bSBiZmFfcGxvZ19laWQgeworCUJGQV9QTF9FSURfSU5WQUxJRCAJCT0gMCwKKwlCRkFfUExfRUlEX0lPQ19ESVNBQkxFIAkJPSAxLAorCUJGQV9QTF9FSURfSU9DX0VOQUJMRSAJCT0gMiwKKwlCRkFfUExfRUlEX1BPUlRfRElTQUJMRSAJPSAzLAorCUJGQV9QTF9FSURfUE9SVF9FTkFCTEUgCQk9IDQsCisJQkZBX1BMX0VJRF9QT1JUX1NUX0NIQU5HRSAJPSA1LAorCUJGQV9QTF9FSURfVFggCQkJPSA2LAorCUJGQV9QTF9FSURfVFhfQUNLMSAJCT0gNywKKwlCRkFfUExfRUlEX1RYX1JKVCAJCT0gOCwKKwlCRkFfUExfRUlEX1RYX0JTWSAJCT0gOSwKKwlCRkFfUExfRUlEX1JYIAkJCT0gMTAsCisJQkZBX1BMX0VJRF9SWF9BQ0sxIAkJPSAxMSwKKwlCRkFfUExfRUlEX1JYX1JKVCAJCT0gMTIsCisJQkZBX1BMX0VJRF9SWF9CU1kgCQk9IDEzLAorCUJGQV9QTF9FSURfQ1RfSU4gCQk9IDE0LAorCUJGQV9QTF9FSURfQ1RfT1VUIAkJPSAxNSwKKwlCRkFfUExfRUlEX0RSSVZFUl9TVEFSVCAJPSAxNiwKKwlCRkFfUExfRUlEX1JTQ04gCQk9IDE3LAorCUJGQV9QTF9FSURfREVCVUcgCQk9IDE4LAorCUJGQV9QTF9FSURfTUlTQyAJCT0gMTksCisJQkZBX1BMX0VJRF9NQVggCQkJPSAyMAorfTsKKworI2RlZmluZSBCRkFfUExfRU5BTUVfU1RSTEVOICAgIAk4CitzdHJ1Y3QgYmZhX3Bsb2dfZWlkX3N0cmluZ3NfcyB7CisJY2hhciAgICAgICAgICAgIGVfc3RyW0JGQV9QTF9FTkFNRV9TVFJMRU5dOworfTsKKworI2RlZmluZSBCRkFfUExfU0lHX0xFTgk4CisjZGVmaW5lIEJGQV9QTF9TSUdfU1RSICAiMTJwbDEyMyIKKworLyoKKyAqIHBlciBwb3J0IGNpcmN1bGFyIGxvZyBidWZmZXIKKyAqLworc3RydWN0IGJmYV9wbG9nX3MgeworCWNoYXIgICAgICAgICAgICBwbG9nX3NpZ1tCRkFfUExfU0lHX0xFTl07CS8qIFN0YXJ0IHNpZ25hdHVyZSAqLworCXU4ICAgICAgICAgcGxvZ19lbmFibGVkOworCXU4ICAgICAgICAgcnN2ZFs3XTsKKwl1MzIgICAgICAgIHRpY2tzOworCXUxNiAgICAgICAgaGVhZDsKKwl1MTYgICAgICAgIHRhaWw7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBwbG9nX3JlY3NbQkZBX1BMX05MT0dfRU5UU107Cit9OworCit2b2lkIGJmYV9wbG9nX2luaXQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOwordm9pZCBiZmFfcGxvZ19zdHIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIGVudW0gYmZhX3Bsb2dfbWlkIG1pZCwKKwkJCWVudW0gYmZhX3Bsb2dfZWlkIGV2ZW50LCB1MTYgbWlzYywgY2hhciAqbG9nX3N0cik7Cit2b2lkIGJmYV9wbG9nX2ludGFycihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLAorCQkJdTMyICppbnRhcnIsIHUzMiBudW1faW50cyk7Cit2b2lkIGJmYV9wbG9nX2ZjaGRyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsCisJCQlzdHJ1Y3QgZmNoc19zICpmY2hkcik7Cit2b2lkIGJmYV9wbG9nX2ZjaGRyX2FuZF9wbChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkJZW51bSBiZmFfcGxvZ19laWQgZXZlbnQsIHUxNiBtaXNjLAorCQkJc3RydWN0IGZjaHNfcyAqZmNoZHIsIHUzMiBwbGRfdzApOwordm9pZCBiZmFfcGxvZ19jbGVhcihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX2VuYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7Cit2b2lkIGJmYV9wbG9nX2Rpc2FibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpOworYmZhX2Jvb2xlYW5fdAliZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZyk7CisKKyNlbmRpZiAvKiBfX0JGQV9QT1JUTE9HX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9xLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg5NWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9xLmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfcS5oIENpcmN1bGFyIHF1ZXVlIGRlZmluaXRpb25zLgorICovCisKKyNpZm5kZWYgX19CRkFfUV9IX18KKyNkZWZpbmUgX19CRkFfUV9IX18KKworI2RlZmluZSBiZmFfcV9maXJzdChfcSkgKCh2b2lkICopKCgoc3RydWN0IGxpc3RfaGVhZCAqKSAoX3EpKS0+bmV4dCkpCisjZGVmaW5lIGJmYV9xX25leHQoX3FlKQkoKChzdHJ1Y3QgbGlzdF9oZWFkICopIChfcWUpKS0+bmV4dCkKKyNkZWZpbmUgYmZhX3FfcHJldihfcWUpICgoKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xZSkpLT5wcmV2KQorCisvKgorICogYmZhX3FfcWVfaW5pdCAtIHRvIGluaXRpYWxpemUgYSBxdWV1ZSBlbGVtZW50CisgKi8KKyNkZWZpbmUgYmZhX3FfcWVfaW5pdChfcWUpIHsJCQkJCQlcCisJYmZhX3FfbmV4dChfcWUpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsJCQlcCisJYmZhX3FfcHJldihfcWUpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsJCQlcCit9CisKKy8qCisgKiBiZmFfcV9kZXEgLSBkZXF1ZXVlIGFuIGVsZW1lbnQgZnJvbSBoZWFkIG9mIHRoZSBxdWV1ZQorICovCisjZGVmaW5lIGJmYV9xX2RlcShfcSwgX3FlKSB7CQkJCQkJXAorCWlmICghbGlzdF9lbXB0eShfcSkpIHsJCQkJCVwKKwkJKCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIChfcWUpKSkgPSBiZmFfcV9uZXh0KF9xKTsJXAorCQliZmFfcV9wcmV2KGJmYV9xX25leHQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSkpID0JXAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xKTsgXAorCQliZmFfcV9uZXh0KF9xKSA9IGJmYV9xX25leHQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSk7IFwKKwkJQkZBX1FfREJHX0lOSVQoKigoc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKSk7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSAoc3RydWN0IGxpc3RfaGVhZCAqKSBOVUxMOyBcCisJfQkJCQkJCQkJXAorfQorCisvKgorICogYmZhX3FfZGVxX3RhaWwgLSBkZXF1ZXVlIGFuIGVsZW1lbnQgZnJvbSB0YWlsIG9mIHRoZSBxdWV1ZQorICovCisjZGVmaW5lIGJmYV9xX2RlcV90YWlsKF9xLCBfcWUpIHsJCQkJCSAgICBcCisJaWYgKCFsaXN0X2VtcHR5KF9xKSkgewkJCQkJICAgICAgICAgICAgXAorCQkqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSAoX3FlKSkgPSBiZmFfcV9wcmV2KF9xKTsJICAgIFwKKwkJYmZhX3FfbmV4dChiZmFfcV9wcmV2KCooKHN0cnVjdCBsaXN0X2hlYWQgKiopIF9xZSkpKSA9IAkgICAgXAorCQkJCQkJKHN0cnVjdCBsaXN0X2hlYWQgKikgKF9xKTsgIFwKKwkJYmZhX3FfcHJldihfcSkgPSBiZmFfcV9wcmV2KCooc3RydWN0IGxpc3RfaGVhZCAqKikgX3FlKTsgICAgXAorCQlCRkFfUV9EQkdfSU5JVCgqKChzdHJ1Y3QgbGlzdF9oZWFkICoqKSBfcWUpKTsJCSAgICBcCisJfSBlbHNlIHsJCQkJCQkJICAgIFwKKwkJKigoc3RydWN0IGxpc3RfaGVhZCAqKikgKF9xZSkpID0gKHN0cnVjdCBsaXN0X2hlYWQgKikgTlVMTDsgXAorCX0JCQkJCQkJCSAgICBcCit9CisKKy8qCisgKiAjaWZkZWYgQkZBX0RFQlVHIChVc2luZyBiZmFfYXNzZXJ0IHRvIGNoZWNrIGZvciBkZWJ1Z19idWlsZCBpcyBub3QKKyAqIGNvbnNpc3RlbnQgYWNyb3NzIG1vZHVsZXMpCisgKi8KKyNpZm5kZWYgQkZBX1BFUkZfQlVJTEQKKyNkZWZpbmUgQkZBX1FfREJHX0lOSVQoX3FlKQliZmFfcV9xZV9pbml0KF9xZSkKKyNlbHNlCisjZGVmaW5lIEJGQV9RX0RCR19JTklUKF9xZSkKKyNlbmRpZgorCisjZGVmaW5lIGJmYV9xX2lzX29uX3EoX3EsIF9xZSkJCVwKKwliZmFfcV9pc19vbl9xX2Z1bmMoX3EsIChzdHJ1Y3QgbGlzdF9oZWFkICopKF9xZSkpCitleHRlcm4gaW50IGJmYV9xX2lzX29uX3FfZnVuYyhzdHJ1Y3QgbGlzdF9oZWFkICpxLCBzdHJ1Y3QgbGlzdF9oZWFkICpxZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9zbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2NzL2JmYV9zbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NzcwNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3NtLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFzbS5oIFN0YXRlIG1hY2hpbmUgZGVmaW5lcworICovCisKKyNpZm5kZWYgX19CRkFfU01fSF9fCisjZGVmaW5lIF9fQkZBX1NNX0hfXworCit0eXBlZGVmIHZvaWQgKCpiZmFfc21fdCkodm9pZCAqc20sIGludCBldmVudCk7CisKKyNkZWZpbmUgYmZhX3NtX3NldF9zdGF0ZShfc20sIF9zdGF0ZSkJKF9zbSktPnNtID0gKGJmYV9zbV90KShfc3RhdGUpCisjZGVmaW5lIGJmYV9zbV9zZW5kX2V2ZW50KF9zbSwgX2V2ZW50KQkoX3NtKS0+c20oKF9zbSksIChfZXZlbnQpKQorI2RlZmluZSBiZmFfc21fZ2V0X3N0YXRlKF9zbSkJCSgoX3NtKS0+c20pCisjZGVmaW5lIGJmYV9zbV9jbXBfc3RhdGUoX3NtLCBfc3RhdGUpCSgoX3NtKS0+c20gPT0gKGJmYV9zbV90KShfc3RhdGUpKQorCisvKioKKyAqIEZvciBjb252ZXJ0aW5nIGZyb20gc3RhdGUgbWFjaGluZSBmdW5jdGlvbiB0byBzdGF0ZSBlbmNvZGluZy4KKyAqLworc3RydWN0IGJmYV9zbV90YWJsZV9zIHsKKwliZmFfc21fdAlzbTsJLyogIHN0YXRlIG1hY2hpbmUgZnVuY3Rpb24JKi8KKwlpbnQJCXN0YXRlOwkvKiAgc3RhdGUgbWFjaGluZSBlbmNvZGluZwkqLworCWNoYXIJCSpuYW1lOwkvKiAgc3RhdGUgbmFtZSBmb3IgZGlzcGxheQkqLworfTsKKyNkZWZpbmUgQkZBX1NNKF9zbSkJKChiZmFfc21fdCkoX3NtKSkKKworaW50IGJmYV9zbV90b19zdGF0ZShzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgKnNtdCwgYmZhX3NtX3Qgc20pOworCisvKioKKyAqIFN0YXRlIG1hY2hpbmUgd2l0aCBlbnRyeSBhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpiZmFfZnNtX3QpKHZvaWQgKmZzbSwgaW50IGV2ZW50KTsKKworLyoqCisgKiBvYyAtIG9iamVjdCBjbGFzcyBlZy4gYmZhX2lvYworICogc3QgLSBzdGF0ZSwgZWcuIHJlc2V0CisgKiBvdHlwZSAtIG9iamVjdCB0eXBlLCBlZy4gc3RydWN0IGJmYV9pb2NfcworICogZXR5cGUgLSBvYmplY3QgdHlwZSwgZWcuIGVudW0gaW9jX2V2ZW50CisgKi8KKyNkZWZpbmUgYmZhX2ZzbV9zdGF0ZV9kZWNsKG9jLCBzdCwgb3R5cGUsIGV0eXBlKQkJXAorCXN0YXRpYyB2b2lkIG9jICMjIF9zbV8gIyMgc3Qob3R5cGUgKiBmc20sIGV0eXBlIGV2ZW50KTsgICAgICBcCisJc3RhdGljIHZvaWQgb2MgIyMgX3NtXyAjIyBzdCAjIyBfZW50cnkob3R5cGUgKiBmc20pCisKKyNkZWZpbmUgYmZhX2ZzbV9zZXRfc3RhdGUoX2ZzbSwgX3N0YXRlKSBkbyB7CVwKKwkoX2ZzbSktPmZzbSA9IChiZmFfZnNtX3QpKF9zdGF0ZSk7ICAgICAgXAorCV9zdGF0ZSAjIyBfZW50cnkoX2ZzbSk7ICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBiZmFfZnNtX3NlbmRfZXZlbnQoX2ZzbSwgX2V2ZW50KQlcCisJKF9mc20pLT5mc20oKF9mc20pLCAoX2V2ZW50KSkKKyNkZWZpbmUgYmZhX2ZzbV9jbXBfc3RhdGUoX2ZzbSwgX3N0YXRlKQkJXAorCSgoX2ZzbSktPmZzbSA9PSAoYmZhX2ZzbV90KShfc3RhdGUpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfdHJjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3RyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzQzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3RyYy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX1RSQ19IX18KKyNkZWZpbmUgX19CRkFfVFJDX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisjaWZuZGVmIEJGQV9UUkNfTUFYCisjZGVmaW5lIEJGQV9UUkNfTUFYCSg0ICogMTAyNCkKKyNlbmRpZgorCisjaWZuZGVmIEJGQV9UUkNfVFMKKyNkZWZpbmUgQkZBX1RSQ19UUyhfdHJjbSkJKChfdHJjbSktPnRpY2tzICsrKQorI2VuZGlmCisKK3N0cnVjdCBiZmFfdHJjX3MgeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTE2CWZpbGVubzsKKwl1MTYJbGluZTsKKyNlbHNlCisJdTE2CWxpbmU7CisJdTE2CWZpbGVubzsKKyNlbmRpZgorCXUzMgl0aW1lc3RhbXA7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyCXJzdmQ7CisJCQl1MzIJdTMyOworCQl9IHUzMjsKKwkJdTY0CXU2NDsKKwl9IGRhdGE7Cit9OworCisKK3N0cnVjdCBiZmFfdHJjX21vZF9zIHsKKwl1MzIJaGVhZDsKKwl1MzIJdGFpbDsKKwl1MzIJbnRyYzsKKwl1MzIJc3RvcHBlZDsKKwl1MzIJdGlja3M7CisJdTMyCXJzdmRbM107CisJc3RydWN0IGJmYV90cmNfcyB0cmNbQkZBX1RSQ19NQVhdOworfTsKKworCitlbnVtIHsKKwlCRkFfVFJDX0ZXICAgPSAxLAkvKiAgZmlybXdhcmUgbW9kdWxlcyAqLworCUJGQV9UUkNfSEFMICA9IDIsCS8qICBCRkEgbW9kdWxlcyAqLworCUJGQV9UUkNfRkNTICA9IDMsCS8qICBCRkEgRkNTIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0xEUlYgPSA0LAkvKiAgTGludXggZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX1NEUlYgPSA1LAkvKiAgU29sYXJpcyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfVkRSViA9IDYsCS8qICB2bXdhcmUgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX1dEUlYgPSA3LAkvKiAgd2luZG93cyBkcml2ZXIgbW9kdWxlcyAqLworCUJGQV9UUkNfQUVOICA9IDgsCS8qICBBRU4gbW9kdWxlICovCisJQkZBX1RSQ19CSU9TID0gOSwJLyogIGJpb3MgZHJpdmVyIG1vZHVsZXMgKi8KKwlCRkFfVFJDX0VGSSAgPSAxMCwJLyogIEVGSSBkcml2ZXIgbW9kdWxlcyAqLworCUJOQV9UUkNfV0RSViA9IDExLAkvKiAgQk5BIHdpbmRvd3MgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX1ZEUlYgPSAxMiwJLyogIEJOQSB2bXdhcmUgZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX1NEUlYgPSAxMywJLyogIEJOQSBTb2xhcmlzIGRyaXZlciBtb2R1bGVzICovCisJQk5BX1RSQ19MRFJWID0gMTQsCS8qICBCTkEgTGludXggZHJpdmVyIG1vZHVsZXMgKi8KKwlCTkFfVFJDX0hBTCAgPSAxNSwJLyogIEJOQSBtb2R1bGVzICovCisJQkZBX1RSQ19DTkEgID0gMTYsCS8qICBDb21tb24gbW9kdWxlcyAqLworCUJOQV9UUkNfSU1EUlYgPSAxNwkvKiAgQk5BIHdpbmRvd3MgaW50ZXJtZWRpYXRlIGRyaXZlciBtb2R1bGVzICovCit9OworI2RlZmluZSBCRkFfVFJDX01PRF9TSAkxMAorI2RlZmluZSBCRkFfVFJDX01PRChfX21vZCkJKChCRkFfVFJDXyAjIyBfX21vZCkgPDwgQkZBX1RSQ19NT0RfU0gpCisKKy8qKgorICogRGVmaW5lIGEgbmV3IHRyYWNpbmcgZmlsZSAobW9kdWxlKS4gTW9kdWxlIHNob3VsZCBtYXRjaCBvbmUgZGVmaW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBCRkFfVFJDX0ZJTEUoX19tb2QsIF9fc3VibW9kKQkJCQkJXAorCXN0YXRpYyBpbnQgX190cmNfZmlsZW5vID0gKChCRkFfVFJDXyAjIyBfX21vZCAjIyBfICMjIF9fc3VibW9kKSB8IFwKKwkJCQkJCSBCRkFfVFJDX01PRChfX21vZCkpCisKKworI2RlZmluZSBiZmFfdHJjMzIoX3RyY3AsIF9kYXRhKQlcCisJX19iZmFfdHJjKChfdHJjcCktPnRyY21vZCwgX190cmNfZmlsZW5vLCBfX0xJTkVfXywgKHUzMilfZGF0YSkKKworCisjaWZuZGVmIEJGQV9CT09UX0JVSUxECisjZGVmaW5lIGJmYV90cmMoX3RyY3AsIF9kYXRhKQlcCisJX19iZmFfdHJjKChfdHJjcCktPnRyY21vZCwgX190cmNfZmlsZW5vLCBfX0xJTkVfXywgKHU2NClfZGF0YSkKKyNlbHNlCit2b2lkIGJmYV9ib290X3RyYyhzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kLCB1MTYgZmlsZW5vLAorCQkJdTE2IGxpbmUsIHUzMiBkYXRhKTsKKyNkZWZpbmUgYmZhX3RyYyhfdHJjcCwgX2RhdGEpCVwKKwliZmFfYm9vdF90cmMoKF90cmNwKS0+dHJjbW9kLCBfX3RyY19maWxlbm8sIF9fTElORV9fLCAodTMyKV9kYXRhKQorI2VuZGlmCisKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfdHJjX2luaXQoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20pCit7CisJdHJjbS0+aGVhZCA9IHRyY20tPnRhaWwgPSB0cmNtLT5zdG9wcGVkID0gMDsKKwl0cmNtLT5udHJjID0gQkZBX1RSQ19NQVg7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitiZmFfdHJjX3N0b3Aoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20pCit7CisJdHJjbS0+c3RvcHBlZCA9IDE7Cit9CisKKyNpZmRlZiBGV1RSQworZXh0ZXJuIHZvaWQgZGNfZmx1c2godm9pZCAqZGF0YSk7CisjZWxzZQorI2RlZmluZSBkY19mbHVzaChkYXRhKQorI2VuZGlmCisKKworc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV90cmMoc3RydWN0IGJmYV90cmNfbW9kX3MgKnRyY20sIGludCBmaWxlbm8sIGludCBsaW5lLCB1NjQgZGF0YSkKK3sKKwlpbnQJCXRhaWwgPSB0cmNtLT50YWlsOworCXN0cnVjdCBiZmFfdHJjX3MgCSp0cmMgPSAmdHJjbS0+dHJjW3RhaWxdOworCisJaWYgKHRyY20tPnN0b3BwZWQpCisJCXJldHVybjsKKworCXRyYy0+ZmlsZW5vID0gKHUxNikgZmlsZW5vOworCXRyYy0+bGluZSA9ICh1MTYpIGxpbmU7CisJdHJjLT5kYXRhLnU2NCA9IGRhdGE7CisJdHJjLT50aW1lc3RhbXAgPSBCRkFfVFJDX1RTKHRyY20pOworCWRjX2ZsdXNoKHRyYyk7CisKKwl0cmNtLT50YWlsID0gKHRyY20tPnRhaWwgKyAxKSAmIChCRkFfVFJDX01BWCAtIDEpOworCWlmICh0cmNtLT50YWlsID09IHRyY20tPmhlYWQpCisJCXRyY20tPmhlYWQgPSAodHJjbS0+aGVhZCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJZGNfZmx1c2godHJjbSk7Cit9CisKKworc3RhdGljIGlubGluZSB2b2lkCitfX2JmYV90cmMzMihzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbSwgaW50IGZpbGVubywgaW50IGxpbmUsIHUzMiBkYXRhKQoreworCWludAkJdGFpbCA9IHRyY20tPnRhaWw7CisJc3RydWN0IGJmYV90cmNfcyAqdHJjID0gJnRyY20tPnRyY1t0YWlsXTsKKworCWlmICh0cmNtLT5zdG9wcGVkKQorCQlyZXR1cm47CisKKwl0cmMtPmZpbGVubyA9ICh1MTYpIGZpbGVubzsKKwl0cmMtPmxpbmUgPSAodTE2KSBsaW5lOworCXRyYy0+ZGF0YS51MzIudTMyID0gZGF0YTsKKwl0cmMtPnRpbWVzdGFtcCA9IEJGQV9UUkNfVFModHJjbSk7CisJZGNfZmx1c2godHJjKTsKKworCXRyY20tPnRhaWwgPSAodHJjbS0+dGFpbCArIDEpICYgKEJGQV9UUkNfTUFYIC0gMSk7CisJaWYgKHRyY20tPnRhaWwgPT0gdHJjbS0+aGVhZCkKKwkJdHJjbS0+aGVhZCA9ICh0cmNtLT5oZWFkICsgMSkgJiAoQkZBX1RSQ19NQVggLSAxKTsKKwlkY19mbHVzaCh0cmNtKTsKK30KKworI2lmbmRlZiBCRkFfUEVSRl9CVUlMRAorI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkJYmZhX3RyYyhfdHJjcCwgX2RhdGEpCisjZWxzZQorI2RlZmluZSBiZmFfdHJjX2ZwKF90cmNwLCBfZGF0YSkKKyNlbmRpZgorCisjZW5kaWYgLyogX19CRkFfVFJDX0hfXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3djLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvY3MvYmZhX3djLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2MGJkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9jcy9iZmFfd2MuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV93Yy5oIEdlbmVyaWMgd2FpdCBjb3VudGVyLgorICovCisKKyNpZm5kZWYgX19CRkFfV0NfSF9fCisjZGVmaW5lIF9fQkZBX1dDX0hfXworCit0eXBlZGVmIHZvaWQgKCpiZmFfd2NfcmVzdW1lX3QpICh2b2lkICpjYmFyZyk7CisKK3N0cnVjdCBiZmFfd2NfcyB7CisJYmZhX3djX3Jlc3VtZV90IHdjX3Jlc3VtZTsKKwl2b2lkCQkqd2NfY2Jhcmc7CisJaW50CQl3Y19jb3VudDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX3VwKHN0cnVjdCBiZmFfd2NfcyAqd2MpCit7CisJd2MtPndjX2NvdW50Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorYmZhX3djX2Rvd24oc3RydWN0IGJmYV93Y19zICp3YykKK3sKKwl3Yy0+d2NfY291bnQtLTsKKwlpZiAod2MtPndjX2NvdW50ID09IDApCisJCXdjLT53Y19yZXN1bWUod2MtPndjX2NiYXJnKTsKK30KKworLyoqCisgKiBJbml0aWFsaXplIGEgd2FpdGluZyBjb3VudGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y19pbml0KHN0cnVjdCBiZmFfd2NfcyAqd2MsIGJmYV93Y19yZXN1bWVfdCB3Y19yZXN1bWUsIHZvaWQgKndjX2NiYXJnKQoreworCXdjLT53Y19yZXN1bWUgPSB3Y19yZXN1bWU7CisJd2MtPndjX2NiYXJnID0gd2NfY2Jhcmc7CisJd2MtPndjX2NvdW50ID0gMDsKKwliZmFfd2NfdXAod2MpOworfQorCisvKioKKyAqIFdhaXQgZm9yIGNvdW50ZXIgdG8gcmVhY2ggemVybworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JmYV93Y193YWl0KHN0cnVjdCBiZmFfd2NfcyAqd2MpCit7CisJYmZhX3djX2Rvd24od2MpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzIwOGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWRhcHRlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19BREFQVEVSX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FEQVBURVJfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfbWZnLmg+CisKKy8qKgorICogQkZBIGFkYXB0ZXIgbGV2ZWwgYXR0cmlidXRlcy4KKyAqLworZW51bSB7CisJQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU4gPSBTVFJTWihCRkFfTUZHX1NFUklBTE5VTV9TSVpFKSwKKwkJCQkJLyoKKwkJCQkJICohPCBhZGFwdGVyIHNlcmlhbCBudW0gbGVuZ3RoCisJCQkJCSAqLworCUJGQV9BREFQVEVSX01PREVMX05BTUVfTEVOICA9IDE2LCAgLyogIG1vZGVsIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfTU9ERUxfREVTQ1JfTEVOID0gMTI4LCAvKiAgbW9kZWwgZGVzY3JpcHRpb24gbGVuZ3RoICovCisJQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOICAgID0gOCwgICAvKiAgbWFudWZhY3R1cmVyIG5hbWUgbGVuZ3RoICovCisJQkZBX0FEQVBURVJfU1lNX05BTUVfTEVOICAgID0gNjQsICAvKiAgYWRhcHRlciBzeW1ib2xpYyBuYW1lIGxlbmd0aCAqLworCUJGQV9BREFQVEVSX09TX1RZUEVfTEVOCSAgICA9IDY0LCAgLyogIGFkYXB0ZXIgb3MgdHlwZSBsZW5ndGggKi8KK307CisKK3N0cnVjdCBiZmFfYWRhcHRlcl9hdHRyX3MgeworCWNoYXIgICAgICAgICAgICBtYW51ZmFjdHVyZXJbQkZBX0FEQVBURVJfTUZHX05BTUVfTEVOXTsKKwljaGFyICAgICAgICAgICAgc2VyaWFsX251bVtCRkFfQURBUFRFUl9TRVJJQUxfTlVNX0xFTl07CisJdTMyCXJzdmQxOworCWNoYXIgICAgICAgICAgICBtb2RlbFtCRkFfQURBUFRFUl9NT0RFTF9OQU1FX0xFTl07CisJY2hhciAgICAgICAgICAgIG1vZGVsX2Rlc2NyW0JGQV9BREFQVEVSX01PREVMX0RFU0NSX0xFTl07CisJd3duX3QgICAgICAgICAgIHB3d247CisJY2hhciAgICAgICAgICAgIG5vZGVfc3ltbmFtZVtGQ19TWU1OQU1FX01BWF07CisJY2hhciAgICAgICAgICAgIGh3X3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBmd192ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwljaGFyICAgICAgICAgICAgb3B0cm9tX3ZlcltCRkFfVkVSU0lPTl9MRU5dOworCWNoYXIgICAgICAgICAgICBvc190eXBlW0JGQV9BREFQVEVSX09TX1RZUEVfTEVOXTsKKwlzdHJ1Y3QgYmZhX21mZ192cGRfcwl2cGQ7CisJc3RydWN0IG1hY19zCW1hYzsKKworCXU4CQlucG9ydHM7CisJdTgJCW1heF9zcGVlZDsKKwl1OAkJcHJvdG90eXBlOworCWNoYXIJICAgICAgICBhc2ljX3JldjsKKworCXU4ICAgICAgICAgcGNpZV9nZW47CisJdTggICAgICAgICBwY2llX2xhbmVzX29yaWc7CisJdTggICAgICAgICBwY2llX2xhbmVzOworCXU4CSAgICAgICAgY25hX2NhcGFibGU7Cit9OworCisvKioKKyAqIEJGQSBhZGFwdGVyIGxldmVsIGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUE9SVF9BRU5fQUREOiAgICAgICAgW2luXTogTm9uZSAgICAgW291dF06IHNlcmlhbF9udW0sIHB3d24sIG5wb3J0cworICogQkZBX1BPUlRfQUVOX1JFTU9WRTogICAgIFtpbl06IHB3d24gICAgIFtvdXRdOiBzZXJpYWxfbnVtLCBwd3duLCBucG9ydHMKKyAqLworZW51bSBiZmFfYWRhcHRlcl9hZW5fZXZlbnQgeworCUJGQV9BREFQVEVSX0FFTl9BREQgCT0gMSwJLyogIE5ldyBBZGFwdGVyIGZvdW5kIGV2ZW50ICovCisJQkZBX0FEQVBURVJfQUVOX1JFTU9WRSAJPSAyLAkvKiAgQWRhcHRlciByZW1vdmVkIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX2FkYXB0ZXJfYWVuX2RhdGFfcyB7CisJY2hhciAgICAgICAgICAgIHNlcmlhbF9udW1bQkZBX0FEQVBURVJfU0VSSUFMX05VTV9MRU5dOworCXUzMiAgICAgICAgbnBvcnRzOwkvKiAgTnVtYmVyIG9mIE5Qb3J0cyAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgV1dOIG9mIG9uZSBvZiBpdHMgcGh5c2ljYWwgcG9ydCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQURBUFRFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Flbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYWVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4MWE2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Flbi5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0FFTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19BRU5fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19pb2MuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2FkYXB0ZXIuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19ycG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXRuaW0uaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Rpbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXBmYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYXVkaXQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2V0aHBvcnQuaD4KKworZW51bSBiZmFfYWVuX2NhdGVnb3J5IHsKKwlCRkFfQUVOX0NBVF9BREFQVEVSIAk9IDEsCisJQkZBX0FFTl9DQVRfUE9SVCAJPSAyLAorCUJGQV9BRU5fQ0FUX0xQT1JUIAk9IDMsCisJQkZBX0FFTl9DQVRfUlBPUlQgCT0gNCwKKwlCRkFfQUVOX0NBVF9JVE5JTSAJPSA1LAorCUJGQV9BRU5fQ0FUX1RJTiAJPSA2LAorCUJGQV9BRU5fQ0FUX0lQRkMgCT0gNywKKwlCRkFfQUVOX0NBVF9BVURJVCAJPSA4LAorCUJGQV9BRU5fQ0FUX0lPQyAJPSA5LAorCUJGQV9BRU5fQ0FUX0VUSFBPUlQJPSAxMCwKKwlCRkFfQUVOX01BWF9DQVQgCT0gMTAKK307CisKKyNwcmFnbWEgcGFjaygxKQordW5pb24gYmZhX2Flbl9kYXRhX3UgeworCXN0cnVjdCBiZmFfYWRhcHRlcl9hZW5fZGF0YV9zIAlhZGFwdGVyOworCXN0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zIAlwb3J0OworCXN0cnVjdCBiZmFfbHBvcnRfYWVuX2RhdGFfcyAJbHBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zIAlycG9ydDsKKwlzdHJ1Y3QgYmZhX2l0bmltX2Flbl9kYXRhX3MgCWl0bmltOworCXN0cnVjdCBiZmFfYXVkaXRfYWVuX2RhdGFfcyAJYXVkaXQ7CisJc3RydWN0IGJmYV9pb2NfYWVuX2RhdGFfcyAJaW9jOworCXN0cnVjdCBiZmFfZXRocG9ydF9hZW5fZGF0YV9zIAlldGhwb3J0OworfTsKKworc3RydWN0IGJmYV9hZW5fZW50cnlfcyB7CisJZW51bSBiZmFfYWVuX2NhdGVnb3J5IAlhZW5fY2F0ZWdvcnk7CisJaW50CQkJYWVuX3R5cGU7CisJdW5pb24gYmZhX2Flbl9kYXRhX3UgIAlhZW5fZGF0YTsKKwlzdHJ1Y3QgYmZhX3RpbWV2YWxfcyAgIAlhZW5fdHY7CisJczMyICAgICAgICAgCXNlcV9udW07CisJczMyICAgICAgICAgCWJmYWRfbnVtOworCXMzMiAgICAgICAgIAlyc3ZkWzFdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2RlZmluZSBiZmFfYWVuX2V2ZW50X3QgaW50CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0FFTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1ZGl0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlM2E5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdWRpdC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0FVRElUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0FVRElUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorCisvKioKKyAqIEJGQSBhdWRpdCBldmVudHMKKyAqLworZW51bSBiZmFfYXVkaXRfYWVuX2V2ZW50IHsKKwlCRkFfQVVESVRfQUVOX0FVVEhfRU5BQkxFIAk9IDEsCisJQkZBX0FVRElUX0FFTl9BVVRIX0RJU0FCTEUgCT0gMiwKK307CisKKy8qKgorICogYXVkaXQgZXZlbnQgZGF0YQorICovCitzdHJ1Y3QgYmZhX2F1ZGl0X2Flbl9kYXRhX3MgeworCXd3bl90ICAgICAgICAgICBwd3duOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQVVESVRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxOWM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2F1dGguaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0FVVEhfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQVVUSF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworI2RlZmluZSBQVUJMSUNfS0VZCQkJMTU0MDkKKyNkZWZpbmUgUFJJVkFURV9LRVkJCQkxOTAwOQorI2RlZmluZSBLRVlfTEVOCQkJCTMyMzk5CisjZGVmaW5lIEJGQV9BVVRIX1NFQ1JFVF9TVFJJTkdfTEVOCTI1NgorI2RlZmluZSBCRkFfQVVUSF9GQUlMX1RJTUVPVVQJCTB4RkYKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBzdGF0dXMKKyAqLworZW51bSBiZmFfYXV0aF9zdGF0dXMgeworCUJGQV9BVVRIX1NUQVRVU19OT05FIAk9IDAsCS8qICBubyBhdXRoZW50aWNhdGlvbiAqLworCUJGQV9BVVRIX1VOSU5JVCAJPSAxLAkvKiAgc3RhdGUgLSB1bmluaXQgKi8KKwlCRkFfQVVUSF9ORUdfU0VORCAJPSAyLAkvKiAgc3RhdGUgLSBuZWdvdGlhdGUgc2VuZCAqLworCUJGQV9BVVRIX0NIQUxfV0FJVCAJPSAzLAkvKiAgc3RhdGUgLSBjaGFsbGVuZ2Ugd2FpdCAqLworCUJGQV9BVVRIX05FR19SRVRSWSAJPSA0LAkvKiAgc3RhdGUgLSBuZWdvdGlhdGUgcmV0cnkgKi8KKwlCRkFfQVVUSF9SRVBMWV9TRU5EIAk9IDUsCS8qICBzdGF0ZSAtIHJlcGx5IHNlbmQgKi8KKwlCRkFfQVVUSF9TVEFUVVNfV0FJVCAJPSA2LAkvKiAgc3RhdGUgLSBzdGF0dXMgd2FpdCAqLworCUJGQV9BVVRIX1NVQ0NFU1MgCT0gNywJLyogIHN0YXRlIC0gc3VjY2VzcyAqLworCUJGQV9BVVRIX0ZBSUxFRCAJPSA4LAkvKiAgc3RhdGUgLSBmYWlsZWQgKi8KKwlCRkFfQVVUSF9TVEFUVVNfVU5LTk9XTiA9IDksCS8qICBhdXRoZW50aWNhdGlvbiBzdGF0dXMgdW5rbm93biAqLworfTsKKworc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyB7CisJdTMyICAgICAgICBhdXRoX3JqdHM7CisJdTMyICAgICAgICBhdXRoX25lZ3M7CisJdTMyICAgICAgICBhdXRoX2RvbmVzOworCisJdTMyICAgICAgICBkaGNoYXBfY2hhbGxlbmdlczsKKwl1MzIgICAgICAgIGRoY2hhcF9yZXBsaWVzOworCXUzMiAgICAgICAgZGhjaGFwX3N1Y2Nlc3NlczsKK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gcmVsYXRlZCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfYXV0aF9zdGF0c19zIHsKKwl1MzIgICAgICAgICAgIGF1dGhfZmFpbHVyZXM7CS8qICBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcyAqLworCXUzMiAgICAgICAgICAgYXV0aF9zdWNjZXNzZXM7CS8qICBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZXMqLworCXN0cnVjdCBhdXRoX3Byb3RvX3N0YXRzX3MgYXV0aF9yeF9zdGF0czsgLyogIFJ4IHByb3RvY29sIHN0YXRzICovCisJc3RydWN0IGF1dGhfcHJvdG9fc3RhdHNfcyBhdXRoX3R4X3N0YXRzOyAvKiAgVHggcHJvdG9jb2wgc3RhdHMgKi8KK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gaGFzaCBmdW5jdGlvbiBhbGdvcml0aG1zCisgKi8KK2VudW0gYmZhX2F1dGhfYWxnbyB7CisJQkZBX0FVVEhfQUxHT19NRDUgCT0gMSwJLyogIE1lc3NhZ2UtRGlnZXN0IGFsZ29yaXRobSA1ICovCisJQkZBX0FVVEhfQUxHT19TSEExIAk9IDIsCS8qICBTZWN1cmUgSGFzaCBBbGdvcml0aG0gMSAqLworCUJGQV9BVVRIX0FMR09fTVMgCT0gMywJLyogIE1ENSwgdGhlbiBTSEEtMSAqLworCUJGQV9BVVRIX0FMR09fU00gCT0gNCwJLyogIFNIQS0xLCB0aGVuIE1ENSAqLworfTsKKworLyoqCisgKiBESCBHcm91cHMKKyAqCisgKiBDdXJyZW50IHZhbHVlIGNvdWxkIGJlIGNvbWJpbmF0aW9uIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzCisgKi8KK2VudW0gYmZhX2F1dGhfZ3JvdXAgeworCUJGQV9BVVRIX0dST1VQX0RITlVMTCAJPSAwLAkvKiAgREggTlVMTCAodmFsdWUgPT0gMCkgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDc2OCAJPSAxLAkvKiAgREggZ3JvdXAgNzY4ICh2YWx1ZSA9PSAxKSAqLworCUJGQV9BVVRIX0dST1VQX0RIMTAyNCAJPSAyLAkvKiAgREggZ3JvdXAgMTAyNCAodmFsdWUgPT0gMikgKi8KKwlCRkFfQVVUSF9HUk9VUF9ESDEyODAgCT0gNCwJLyogIERIIGdyb3VwIDEyODAgKHZhbHVlID09IDMpICovCisJQkZBX0FVVEhfR1JPVVBfREgxNTM2IAk9IDgsCS8qICBESCBncm91cCAxNTM2ICh2YWx1ZSA9PSA0KSAqLworCisJQkZBX0FVVEhfR1JPVVBfQUxMIAk9IDI1NgkvKiAgVXNlIGRlZmF1bHQgREggZ3JvdXAgb3JkZXIKKwkJCQkJICogICAgMCwgMSwgMiwgMywgNCAqLworfTsKKworLyoqCisgKiBBdXRoZW50aWNhdGlvbiBzZWNyZXQgc291cmNlcworICovCitlbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSB7CisJQkZBX0FVVEhfU0VDU1JDX0xPQ0FMIAk9IDEsCS8qICBsb2NhbGx5IGNvbmZpZ3VyZWQgKi8KKwlCRkFfQVVUSF9TRUNTUkNfUkFESVVTIAk9IDIsCS8qICB1c2UgcmFkaXVzIHNlcnZlciAqLworCUJGQV9BVVRIX1NFQ1NSQ19UQUNBQ1MgCT0gMywJLyogIFRBQ0FDUyBzZXJ2ZXIgKi8KK307CisKKy8qKgorICogQXV0aGVudGljYXRpb24gYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX2F1dGhfYXR0cl9zIHsKKwllbnVtIGJmYV9hdXRoX3N0YXR1cyAJc3RhdHVzOworCWVudW0gYmZhX2F1dGhfYWxnbyAJYWxnbzsKKwllbnVtIGJmYV9hdXRoX2dyb3VwIAlkaF9ncnA7CisJdTE2CQlyanRfY29kZTsKKwl1MTYJCXJqdF9jb2RlX2V4cDsKKwl1OAkJCXNlY3JldF9zZXQ7CisJdTgJCQlyZXN2WzddOworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfQVVUSF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2Jvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjRhYTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfYm9vdC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0JPT1RfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQk9PVF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKworZW51bSB7CisJQkZBX0JPT1RfQk9PVExVTl9NQVggPSA0LAkvKiAgbWF4aW11bSBib290IGx1biBwZXIgSU9DICovCit9OworCisjZGVmaW5lIEJPT1RfQ0ZHX1JFVjEJMQorCisvKioKKyAqICAgICAgQm9vdCBvcHRpb25zIHNldHRpbmcuIEJvb3Qgb3B0aW9ucyBzZXR0aW5nIGRldGVybWluZXMgZnJvbSB3aGVyZQorICogICAgICB0byBnZXQgdGhlIGJvb3QgbHVuIGluZm9ybWF0aW9uCisgKi8KK2VudW0gYmZhX2Jvb3RfYm9vdG9wdCB7CisgICAgQkZBX0JPT1RfQVVUT19ESVNDT1ZFUiA9IDAsICAgIC8qICBCb290IGZyb20gYmx1biBwcm92aWRlZCBieSBmYWJyaWMgKi8KKyAgICBCRkFfQk9PVF9TVE9SRURfQkxVTiAgID0gMSwgICAgLyogIEJvb3QgZnJvbSBibHVucyBzdG9yZWQgaW4gZmxhc2ggICAqLworICAgIEJGQV9CT09UX0ZJUlNUX0xVTiAgICAgPSAyLCAgICAvKiAgQm9vdCBmcm9tIGZpcnN0IGRpc2NvdmVyZWQgYmx1biAgICovCit9OworCisvKioKKyAqIEJvb3QgbHVuIGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3QgYmZhX2Jvb3RfYm9vdGx1bl9zIHsKKwl3d25fdCAgICAgICAgICAgcHd3bjsJLyogIHBvcnQgd3duIG9mIHRhcmdldCAqLworCWx1bl90ICAgICAgICAgICBsdW47CS8qICA2NC1iaXQgbHVuICovCit9OworCisvKioKKyAqIEJPT1QgYm9vdCBjb25maWd1cmF0b24KKyAqLworc3RydWN0IGJmYV9ib290X2NmZ19zIHsKKwl1OCAgICAgICAgIHZlcnNpb247CisJdTggICAgICAgICByc3ZkMTsKKwl1MTYgICAgICAgIGNoa3N1bTsKKworCXU4ICAgICAgICAgZW5hYmxlOwkJLyogIGVuYWJsZS9kaXNhYmxlIFNBTiBib290ICovCisJdTggICAgICAgICBzcGVlZDsJCS8qICBib290IHNwZWVkIHNldHRpbmdzICovCisJdTggICAgICAgICB0b3BvbG9neTsJLyogIGJvb3QgdG9wb2xvZ3kgc2V0dGluZyAqLworCXU4ICAgICAgICAgYm9vdG9wdDsJLyogIGJmYV9ib290X2Jvb3RvcHRfdCAqLworCisJdTMyICAgICAgICBuYmx1bnM7CQkvKiAgbnVtYmVyIG9mIGJvb3QgbHVucyAqLworCisJdTMyICAgICAgICByc3ZkMjsKKworCXN0cnVjdCBiZmFfYm9vdF9ib290bHVuX3MgYmx1bltCRkFfQk9PVF9CT09UTFVOX01BWF07CisJc3RydWN0IGJmYV9ib290X2Jvb3RsdW5fcyBibHVuX2Rpc2NbQkZBX0JPT1RfQk9PVExVTl9NQVhdOworfTsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19CT09UX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfY2VlLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19jZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBhMjJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfY2VlLmgKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqICBiZmFfZGVmc19jZWUuaCBJbnRlcmZhY2UgZGVjbGFyYXRpb25zIGJldHdlZW4gaG9zdCBiYXNlZAorICoJQkZBTCBhbmQgRENCWC9MTERQIG1vZHVsZSBpbiBGaXJtd2FyZQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19DRUVfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfQ0VFX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjcHJhZ21hIHBhY2soMSkKKworI2RlZmluZSBCRkFfQ0VFX0xMRFBfTUFYX1NUUklOR19MRU4gKDEyOCkKKworCisvKiBGSVhNRTogdGhpcyBpcyBjb21pbmcgZnJvbSB0aGUgcHJvdG9jb2wgc3BlYy4gQ2FuIHRoZSBob3N0ICYgYXBwcyBzaGFyZSB0aGUKKyAgIHByb3RvY29sIC5oIGZpbGVzID8KKyAqLworI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9PVEhFUiAgICAgICAweDAwMDEKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfUkVQRUFURVIgICAgMHgwMDAyCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX01BQ19CUklER0UgIDB4MDAwNAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9XTEFOX0FQICAgICAweDAwMDgKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfUk9VVEVSICAgICAgMHgwMDEwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1RFTEVQSE9ORSAJIDB4MDAyMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9ET0NTSVNfQ0QgICAweDAwNDAKKyNkZWZpbmUgQkZBX0NFRV9MTERQX1NZU19DQVBfU1RBVElPTiAgICAgMHgwMDgwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX0NWTEFOCSAgICAgMHgwMTAwCisjZGVmaW5lIEJGQV9DRUVfTExEUF9TWVNfQ0FQX1NWTEFOIAkgICAgIDB4MDIwMAorI2RlZmluZSBCRkFfQ0VFX0xMRFBfU1lTX0NBUF9UUE1SCQkgMHgwNDAwCisKKworLyogTExEUCBzdHJpbmcgdHlwZSAqLworc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyB7CisJdTggc3ViX3R5cGU7CisJdTggbGVuOworCXU4IHJzdmRbMl07CisJdTggdmFsdWVbQkZBX0NFRV9MTERQX01BWF9TVFJJTkdfTEVOXTsKK307CisKKworLyogTExEUCBwYXJhbXRlcnMgKi8KK3N0cnVjdCBiZmFfY2VlX2xsZHBfY2ZnX3MgeworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgY2hhc3Npc19pZDsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHBvcnRfaWQ7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBwb3J0X2Rlc2M7CisJc3RydWN0IGJmYV9jZWVfbGxkcF9zdHJfcyBzeXNfbmFtZTsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0cl9zIHN5c19kZXNjOworCXN0cnVjdCBiZmFfY2VlX2xsZHBfc3RyX3MgbWdtdF9hZGRyOworCXUxNiAgICB0aW1lX3RvX2ludGVydmFsOworCXUxNiAgICBlbmFibGVkX3N5c3RlbV9jYXA7Cit9OworCitlbnVtIGJmYV9jZWVfZGNieF92ZXJzaW9uX2UgeworCURDQlhfUFJPVE9DT0xfUFJFQ0VFID0gMSwKKwlEQ0JYX1BST1RPQ09MX0NFRSAgICA9IDIsCit9OworCitlbnVtIGJmYV9jZWVfbGxzX2UgeworCUNFRV9MTFNfRE9XTl9OT19UTFYgPSAwLCAvKiBMTFMgaXMgZG93biBiZWNhdXNlIHRoZSBUTFYgbm90IHNlbnQgYnkKKwkJCQkgICogdGhlIHBlZXIgKi8KKwlDRUVfTExTX0RPV04gICAgICAgID0gMSwgLyogTExTIGlzIGRvd24gYXMgYWR2ZXJ0aXNlZCBieSB0aGUgcGVlciAqLworCUNFRV9MTFNfVVAgICAgICAgICAgPSAyLAorfTsKKworLyogQ0VFL0RDQlggcGFyYW1ldGVycyAqLworc3RydWN0IGJmYV9jZWVfZGNieF9jZmdfcyB7CisJdTggcGdpZFs4XTsKKwl1OCBwZ19wZXJjZW50YWdlWzhdOworCXU4IHBmY19lbmFibGVkOyAgICAgICAgICAvKiBiaXRtYXAgb2YgcHJpb3J0aWVzIHdpdGggUEZDIGVuYWJsZWQgKi8KKwl1OCBmY29lX3VzZXJfcHJpb3JpdHk7ICAgLyogYml0bWFwIG9mIHByaW9yaXRpZXMgdXNlZCBmb3IgRmNvRQorCQkJCSAgICAgICAqIHRyYWZmaWMgKi8KKwl1OCBkY2J4X3ZlcnNpb247CS8qIG9wZXJhdGluZyB2ZXJzaW9uOkNFRSBvciBwcmVDRUUgKi8KKwl1OCBsbHNfZmNvZTsJLyogRkNvRSBMb2dpY2FsIExpbmsgU3RhdHVzICovCisJdTggbGxzX2xhbjsJLyogTEFOIExvZ2ljYWwgTGluayBTdGF0dXMgKi8KKwl1OCByc3ZkWzNdOworfTsKKworLyogQ0VFIHN0YXR1cyAqLworLyogTWFraW5nIHRoaXMgdG8gdHJpLXN0YXRlIGZvciB0aGUgYmVuZWZpdCBvZiBwb3J0IGxpc3QgY29tbWFuZCAqLworZW51bSBiZmFfY2VlX3N0YXR1c19lIHsKKyAgICBDRUVfUEhZX0RPV04gPSAwLAorICAgIENFRV9QSFlfVVAgPSAxLAorICAgIENFRV9VUCA9IDIsCit9OworCisvKiBDRUUgUXVlcnkgKi8KK3N0cnVjdCBiZmFfY2VlX2F0dHJfcyB7CisJdTggICAgICAgICAgICAgICAgICAgY2VlX3N0YXR1czsKKwl1OCAgICAgICAgICAgICAgICAgICBlcnJvcl9yZWFzb247CisJc3RydWN0IGJmYV9jZWVfbGxkcF9jZmdfcyBsbGRwX3JlbW90ZTsKKwlzdHJ1Y3QgYmZhX2NlZV9kY2J4X2NmZ19zIGRjYnhfcmVtb3RlOworCW1hY190IHNyY19tYWM7CisJdTggbGlua19zcGVlZDsKKwl1OCBmaWxsZXJbM107Cit9OworCisKKworCisvKiBMTERQL0RDQlgvQ0VFIFN0YXRpc3RpY3MgKi8KKworc3RydWN0IGJmYV9jZWVfbGxkcF9zdGF0c19zIHsKKwl1MzIgZnJhbWVzX3RyYW5zbWl0dGVkOworCXUzMiBmcmFtZXNfYWdlZF9vdXQ7CisJdTMyIGZyYW1lc19kaXNjYXJkZWQ7CisJdTMyIGZyYW1lc19pbl9lcnJvcjsKKwl1MzIgZnJhbWVzX3JjdmQ7CisJdTMyIHRsdnNfZGlzY2FyZGVkOworCXUzMiB0bHZzX3VucmVjb2duaXplZDsKK307CisKK3N0cnVjdCBiZmFfY2VlX2RjYnhfc3RhdHNfcyB7CisJdTMyIHN1YnRsdnNfdW5yZWNvZ25pemVkOworCXUzMiBuZWdvdGlhdGlvbl9mYWlsZWQ7CisJdTMyIHJlbW90ZV9jZmdfY2hhbmdlZDsKKwl1MzIgdGx2c19yZWNlaXZlZDsKKwl1MzIgdGx2c19pbnZhbGlkOworCXUzMiBzZXFubzsKKwl1MzIgYWNrbm87CisJdTMyIHJlY3ZkX3NlcW5vOworCXUzMiByZWN2ZF9hY2tubzsKK307CisKK3N0cnVjdCBiZmFfY2VlX2NmZ19zdGF0c19zIHsKKwl1MzIgY2VlX3N0YXR1c19kb3duOworCXUzMiBjZWVfc3RhdHVzX3VwOworCXUzMiBjZWVfaHdfY2ZnX2NoYW5nZWQ7CisJdTMyIHJlY3ZkX2ludmFsaWRfY2ZnOworfTsKKworCitzdHJ1Y3QgYmZhX2NlZV9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2NlZV9sbGRwX3N0YXRzX3MgbGxkcF9zdGF0czsKKwlzdHJ1Y3QgYmZhX2NlZV9kY2J4X3N0YXRzX3MgZGNieF9zdGF0czsKKwlzdHJ1Y3QgYmZhX2NlZV9jZmdfc3RhdHNfcyAgY2ZnX3N0YXRzOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworCisjZW5kaWYJLyogX19CRkFfREVGU19DRUVfSF9fICovCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZHJpdmVyLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19kcml2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA0OTgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZHJpdmVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfRFJJVkVSX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0RSSVZFUl9IX18KKworLyoqCisgKiBEcml2ZXIgc3RhdGlzdGljcworICovCisJdTE2ICAgIHRtX2lvX2Fib3J0OworICAgIHUxNiAgICB0bV9pb19hYm9ydF9jb21wOworICAgIHUxNiAgICB0bV9sdW5fcmVzZXQ7CisgICAgdTE2ICAgIHRtX2x1bl9yZXNldF9jb21wOworICAgIHUxNiAgICB0bV90YXJnZXRfcmVzZXQ7CisgICAgdTE2ICAgIHRtX2J1c19yZXNldDsKKyAgICB1MTYgICAgaW9jX3Jlc3RhcnQ7ICAgICAgICAvKiAgSU9DIHJlc3RhcnQgY291bnQgKi8KKyAgICB1MTYgICAgaW9fcGVuZGluZzsgICAgICAgICAvKiAgb3V0c3RhbmRpbmcgaW8gY291bnQgcGVyLUlPQyAqLworICAgIHU2NCAgICBjb250cm9sX3JlcTsKKyAgICB1NjQgICAgaW5wdXRfcmVxOworICAgIHU2NCAgICBvdXRwdXRfcmVxOworICAgIHU2NCAgICBpbnB1dF93b3JkczsKKyAgICB1NjQgICAgb3V0cHV0X3dvcmRzOworfSBiZmFfZHJpdmVyX3N0YXRzX3Q7CisKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfRFJJVkVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZXRocG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZXRocG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjliM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19ldGhwb3J0LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfRVRIUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19FVEhQT1JUX0hfXworCisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19zdGF0dXMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGNuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmg+CisjaW5jbHVkZSA8Y25hL3BzdGF0cy9ldGhwb3J0X2RlZnMuaD4KKworc3RydWN0IGJuYV90eF9pbmZvX3MgeworCXUzMiAgICBtaW5pcG9ydF9zdGF0ZTsKKwl1MzIgICAgYWRhcHRlcl9zdGF0ZTsKKwl1NjQgICAgdHhfY291bnQ7CisJdTY0ICAgIHR4X3dpOworCXU2NCAgICB0eF9zZzsKKwl1NjQgICAgdHhfdGNwX2Noa3N1bTsKKwl1NjQgICAgdHhfdWRwX2Noa3N1bTsKKwl1NjQgICAgdHhfaXBfY2hrc3VtOworCXU2NCAgICB0eF9sc292MTsKKwl1NjQgICAgdHhfbHNvdjI7CisJdTY0ICAgIHR4X21heF9zZ19sZW4gOworfTsKKworc3RydWN0IGJuYV9yeF9xdWV1ZV9pbmZvX3MgeworCXUxNiAgICBxX2lkIDsKKwl1MTYgICAgYnVmX3NpemUgOworCXUxNiAgICBidWZfY291bnQgOworCXUxNiAgICByc3ZkIDsKKwl1NjQgICAgcnhfY291bnQgOworCXU2NCAgICByeF9kcm9wcGVkIDsKKwl1NjQgICAgcnhfdW5zdXBwb3J0ZWQgOworCXU2NCAgICByeF9pbnRlcm5hbF9lcnIgOworCXU2NCAgICByc3NfY291bnQgOworCXU2NCAgICB2bGFuX2NvdW50IDsKKwl1NjQgICAgcnhfdGNwX2Noa3N1bSA7CisJdTY0ICAgIHJ4X3VkcF9jaGtzdW0gOworCXU2NCAgICByeF9pcF9jaGtzdW0gOworCXU2NCAgICByeF9oZHMgOworfTsKKworc3RydWN0IGJuYV9yeF9xX3NldF9zIHsKKwl1MTYgICAgcV9zZXRfdHlwZTsKKwl1MzIgICAgbWluaXBvcnRfc3RhdGU7CisJdTMyICAgIGFkYXB0ZXJfc3RhdGU7CisJc3RydWN0IGJuYV9yeF9xdWV1ZV9pbmZvX3MgICAgcnhfcXVldWVbMl07Cit9OworCitzdHJ1Y3QgYm5hX3BvcnRfc3RhdHNfcyB7CisJc3RydWN0IGJuYV90eF9pbmZvX3MgICB0eF9zdGF0czsKKwl1MTYgICAgICAgIHFzZXRfY291bnQgOworCXN0cnVjdCBibmFfcnhfcV9zZXRfcyAgcnhfcXNldFs4XTsKK307CisKK3N0cnVjdCBiZmFfZXRocG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYm5hX3N0YXRzX3R4Zgl0eGZfc3RhdHNbMV07CisJc3RydWN0IGJuYV9zdGF0c19yeGYJcnhmX3N0YXRzWzFdOworCXN0cnVjdCBibmFkX2Rydl9zdGF0cyBkcnZfc3RhdHM7Cit9OworCisvKioKKyAqIEV0aGVybmV0IHBvcnQgZXZlbnRzCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9QT1JUX0FFTl9FVEhfTElOS1VQOiAgICBbaW5dOiBtYWMgW291dF06IG1hYworICogQkZBX1BPUlRfQUVOX0VUSF9MSU5LRE9XTjogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0VOQUJMRTogIFtpbl06IG1hYyBbb3V0XTogbWFjCisgKiBCRkFfUE9SVF9BRU5fRVRIX0RJU0FCTEU6ICBbaW5dOiBtYWMgW291dF06IG1hYworICoKKyAqLworZW51bSBiZmFfZXRocG9ydF9hZW5fZXZlbnQgeworCUJGQV9FVEhQT1JUX0FFTl9MSU5LVVAgPSAxLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgdXAgZXZlbnQgKi8KKwlCRkFfRVRIUE9SVF9BRU5fTElOS0RPV04gPSAyLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZG93biBldmVudCAqLworCUJGQV9FVEhQT1JUX0FFTl9FTkFCTEUgPSAzLCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZW5hYmxlIGV2ZW50ICovCisJQkZBX0VUSFBPUlRfQUVOX0RJU0FCTEUgPSA0LCAvKiAgQmFzZSBQb3J0IEV0aGVybmV0IGxpbmsgZGlzYWJsZQorCQkJCSAgICAgICogZXZlbnQgKi8KK307CisKK3N0cnVjdCBiZmFfZXRocG9ydF9hZW5fZGF0YV9zIHsKKwltYWNfdCBtYWM7CS8qICBNQUMgYWRkcmVzcyBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLworfTsKKworCisjZW5kaWYgLyogX19CRkFfREVGU19FVEhQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4ZjRmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ZjcGltLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0ZDUElNX0hfXworCitzdHJ1Y3QgYmZhX2ZjcGltX3N0YXRzX3MgeworCXUzMiAgICAgICAgdG90YWxfaW9zOwkvKiAgVG90YWwgSU8gY291bnQgKi8KKwl1MzIgICAgICAgIHFyZXN1bWVzOwkvKiAgSU8gd2FpdGluZyBmb3IgQ1Egc3BhY2UgKi8KKwl1MzIgICAgICAgIG5vX2lvdGFnczsJLyogIE5PIElPIGNvbnRleHRzICovCisJdTMyICAgICAgICBpb19hYm9ydHM7CS8qICBJTyBhYm9ydCByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgbm9fdHNraW1zOwkvKiAgTk8gdGFzayBtYW5hZ2VtZW50IGNvbnRleHRzICovCisJdTMyICAgICAgICBpb2NvbXBfb2s7CS8qICBJTyBjb21wbGV0aW9ucyB3aXRoIE9LIHN0YXR1cyAqLworCXUzMiAgICAgICAgaW9jb21wX3VuZGVycnVuOwkvKiAgSU8gdW5kZXJydW4gKGdvb2QpICovCisJdTMyICAgICAgICBpb2NvbXBfb3ZlcnJ1bjsJLyogIElPIG92ZXJydW4gKGdvb2QpICovCisJdTMyICAgICAgICBpb2NvbXBfYWJvcnRlZDsJLyogIEFib3J0ZWQgSU8gcmVxdWVzdHMgKi8KKwl1MzIgICAgICAgIGlvY29tcF90aW1lZG91dDsJLyogIElPIHRpbWVvdXRzICovCisJdTMyICAgICAgICBpb2NvbV9uZXh1c19hYm9ydDsJLyogIElPIHNlbGVjdGlvbiB0aW1lb3V0cyAqLworCXUzMiAgICAgICAgaW9jb21fcHJvdG9fZXJyOwkvKiAgSU8gcHJvdG9jb2wgZXJyb3JzICovCisJdTMyICAgICAgICBpb2NvbV9kaWZfZXJyOwkvKiAgSU8gU0JDLTMgcHJvdGVjdGlvbiBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGlvY29tX3RtX2Fib3J0OwkvKiAgSU8gYWJvcnRlZCBieSBUTSByZXF1ZXN0cyAqLworCXUzMiAgICAgICAgaW9jb21fc3Flcl9uZWVkZWQ7CS8qICBJTyByZXRyeSBmb3IgU1EgZXJyb3IKKwkJCQkJCSAqcmVjb3ZlcnkgKi8KKwl1MzIgICAgICAgIGlvY29tX3Jlc19mcmVlOwkvKiAgRGVsYXllZCBmcmVlaW5nIG9mIElPIHJlc291cmNlcyAqLworCXUzMiAgICAgICAgaW9jb21wX3Njc2llcnI7CS8qICBJTyB3aXRoIG5vbi1nb29kIFNDU0kgc3RhdHVzICovCisJdTMyICAgICAgICBpb2NvbV9ob3N0YWJydHM7CS8qICBIb3N0IElPIGFib3J0IHJlcXVlc3RzICovCisJdTMyICAgICAgICBpb2NvbV91dGFnczsJLyogIElPIGNvbXAgd2l0aCB1bmtub3duIHRhZ3MgKi8KKwl1MzIgICAgICAgIGlvX2NsZWFudXBzOwkvKiAgSU8gaW1wbGljaXRseSBhYm9ydGVkICovCisJdTMyICAgICAgICBpb190bWFib3J0czsJLyogIElPIGFib3J0ZWQgZHVlIHRvIFRNIGNvbW1hbmRzICovCisJdTMyICAgICAgICByc3ZkOworfTsKKyNlbmRpZiAvKl9fQkZBX0RFRlNfRkNQSU1fSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX2NvbW1vbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaW1fY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjZjUzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX2NvbW1vbi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX0lNX0NPTU1PTl9IX18KKyNkZWZpbmUgX19CRkFfREVGU19JTV9DT01NT05fSF9fCisKKyNkZWZpbmUJQkZBX0FEQVBURVJfTkFNRV9MRU4JMjU2CisjZGVmaW5lIEJGQV9BREFQVEVSX0dVSURfTEVOICAgIDI1NgorI2RlZmluZSBSRVNFUlZFRF9WTEFOX05BTUUgICAgICBMIlBPUlQgVkxBTiIKKyNkZWZpbmUgUEFTU1RIUlVfVkxBTl9OQU1FICAgICAgTCJQQVNTVEhSVSBWTEFOIgorCisJdTY0CXR4X3BrdF9jbnQ7CisJdTY0CXJ4X3BrdF9jbnQ7CisJdTMyCWR1cmF0aW9uOworCXU4CQlzdGF0dXM7Cit9IGJmYV9pbV9zdGF0c190LCAqcGJmYV9pbV9zdGF0c190OworCisjZW5kaWYgLyogX19CRkFfREVGU19JTV9DT01NT05fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV90ZWFtLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pbV90ZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4NmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2ltX3RlYW0uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JTV9URUFNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorCisjZGVmaW5lCUJGQV9URUFNX01BWF9QT1JUUwk4CisjZGVmaW5lCUJGQV9URUFNX05BTUVfTEVOCTI1NgorI2RlZmluZSBCRkFfTUFYX05VTV9URUFNUwkxNgorI2RlZmluZSBCRkFfVEVBTV9JTlZBTElEX0RFTEFZIC0xCisKKwlCRkFfTEFDUF9SQVRFX1NMT1cgPSAxLAorCUJGQV9MQUNQX1JBVEVfRkFTVAorfSBiZmFfaW1fbGFjcF9yYXRlX3Q7CisKKwlCRkFfVEVBTV9NT0RFX0ZBSUxfT1ZFUiA9IDEsCisJQkZBX1RFQU1fTU9ERV9GQUlMX0JBQ0ssCisJQkZBX1RFQU1fTU9ERV9MQUNQLAorCUJGQV9URUFNX01PREVfTk9ORQorfSBiZmFfaW1fdGVhbV9tb2RlX3Q7CisKKwlCRkFfWE1JVF9QT0xJQ1lfTDIgPSAxLAorCUJGQV9YTUlUX1BPTElDWV9MM19MNAorfSBiZmFfaW1feG1pdF9wb2xpY3lfdDsKKworCWJmYV9pbV90ZWFtX21vZGVfdCAgICAgdGVhbV9tb2RlOworCWJmYV9pbV9sYWNwX3JhdGVfdCAgICAgbGFjcF9yYXRlOworCWJmYV9pbV94bWl0X3BvbGljeV90ICAgeG1pdF9wb2xpY3k7CisJaW50ICAgCSAgICAgICAgICBkZWxheTsKKwl3Y2hhcl90ICAgIAkgIHByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCXdjaGFyX3QgICAgICAgIAkgIHByZWZlcnJlZF9wcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKKwltYWNfdAkgICAgICAgICAgbWFjOworCXUxNiAgICAgICAJICBudW1fcG9ydHM7CisJdTE2ICAgICAgICAgIG51bV92bGFuczsKKwl1MTYgdmxhbl9saXN0W0JGQV9NQVhfVkxBTlNfUEVSX1BPUlRdOworCXdjaGFyX3QJIHRlYW1fZ3VpZF9saXN0W0JGQV9URUFNX01BWF9QT1JUU11bQkZBX0FEQVBURVJfR1VJRF9MRU5dOworCXdjaGFyX3QJIGlvY19uYW1lX2xpc3RbQkZBX1RFQU1fTUFYX1BPUlRTXVtCRkFfQURBUFRFUl9OQU1FX0xFTl07Cit9IGJmYV9pbV90ZWFtX2F0dHJfdDsKKworCXdjaGFyX3QJCSAgICAgICAgICAgICB0ZWFtX25hbWVbQkZBX1RFQU1fTkFNRV9MRU5dOworCWJmYV9pbV94bWl0X3BvbGljeV90CSB4bWl0X3BvbGljeTsKKwlpbnQgICAgICAgICAgICAgICAgIAkgZGVsYXk7CisJd2NoYXJfdCAgICAgICAgICAgICAgICAJIHByaW1hcnlbQkZBX0FEQVBURVJfTkFNRV9MRU5dOworCXdjaGFyX3QgICAgICAgICAgICAgICAJIHByZWZlcnJlZF9wcmltYXJ5W0JGQV9BREFQVEVSX05BTUVfTEVOXTsKK30gYmZhX2ltX3RlYW1fZWRpdF90LCAqcGJmYV9pbV90ZWFtX2VkaXRfdDsKKworCXdjaGFyX3QJCQkJCXRlYW1fbmFtZVtCRkFfVEVBTV9OQU1FX0xFTl07CisJYmZhX2ltX3RlYW1fbW9kZV90ICAgICAgdGVhbV9tb2RlOworCW1hY190CSAgICAgICAgICAgICAgIAltYWM7Cit9IGJmYV9pbV90ZWFtX2luZm9fdDsKKworCWJmYV9pbV90ZWFtX2luZm9fdCAJCXRlYW1faW5mb1tCRkFfTUFYX05VTV9URUFNU107CisJdTE2IAkJCQludW1fdGVhbXM7Cit9IGJmYV9pbV90ZWFtX2xpc3RfdCwgKnBiZmFfaW1fdGVhbV9saXN0X3Q7CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lNX1RFQU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZDUzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2MuaApAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfSU9DX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lPQ19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG0uaD4KKworZW51bSB7CisJQkZBX0lPQ19EUklWRVJfTEVOCT0gMTYsCisJQkZBX0lPQ19DSElQX1JFVl9MRU4gCT0gOCwKK307CisKKy8qKgorICogRHJpdmVyIGFuZCBmaXJtd2FyZSB2ZXJzaW9ucy4KKyAqLworc3RydWN0IGJmYV9pb2NfZHJpdmVyX2F0dHJfcyB7CisJY2hhciAgICAgICAgICAgIGRyaXZlcltCRkFfSU9DX0RSSVZFUl9MRU5dOwkvKiAgZHJpdmVyIG5hbWUgKi8KKwljaGFyICAgICAgICAgICAgZHJpdmVyX3ZlcltCRkFfVkVSU0lPTl9MRU5dOwkvKiAgZHJpdmVyIHZlcnNpb24gKi8KKwljaGFyICAgICAgICAgICAgZndfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBmaXJtd2FyZSB2ZXJzaW9uKi8KKwljaGFyICAgICAgICAgICAgYmlvc192ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIGJpb3MgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBlZmlfdmVyW0JGQV9WRVJTSU9OX0xFTl07CS8qICBFRkkgdmVyc2lvbiAqLworCWNoYXIgICAgICAgICAgICBvYl92ZXJbQkZBX1ZFUlNJT05fTEVOXTsJLyogIG9wZW5ib290IHZlcnNpb24qLworfTsKKworLyoqCisgKiBJT0MgUENJIGRldmljZSBhdHRyaWJ1dGVzCisgKi8KK3N0cnVjdCBiZmFfaW9jX3BjaV9hdHRyX3MgeworCXUxNiAgICAgICAgdmVuZG9yX2lkOwkvKiAgUENJIHZlbmRvciBJRCAqLworCXUxNiAgICAgICAgZGV2aWNlX2lkOwkvKiAgUENJIGRldmljZSBJRCAqLworCXUxNiAgICAgICAgc3NpZDsJCS8qICBzdWJzeXN0ZW0gSUQgKi8KKwl1MTYgICAgICAgIHNzdmlkOwkJLyogIHN1YnN5c3RlbSB2ZW5kb3IgSUQgKi8KKwl1MzIgICAgICAgIHBjaWZuOwkJLyogIFBDSSBkZXZpY2UgZnVuY3Rpb24gKi8KKwl1MzIgICAgICAgIHJzdmQ7CQkvKiBwYWRkaW5nICovCisJdTggICAgICAgICBjaGlwX3JldltCRkFfSU9DX0NISVBfUkVWX0xFTl07CSAvKiAgY2hpcCByZXZpc2lvbiAqLworfTsKKworLyoqCisgKiBJT0Mgc3RhdGVzCisgKi8KK2VudW0gYmZhX2lvY19zdGF0ZSB7CisJQkZBX0lPQ19SRVNFVCAgICAgICA9IDEsICAvKiAgSU9DIGlzIGluIHJlc2V0IHN0YXRlICovCisJQkZBX0lPQ19TRU1XQUlUICAgICA9IDIsICAvKiAgV2FpdGluZyBmb3IgSU9DIGhhcmR3YXJlIHNlbWFwaG9yZSAqLworCUJGQV9JT0NfSFdJTklUIAkgICAgPSAzLCAgLyogIElPQyBoYXJkd2FyZSBpcyBiZWluZyBpbml0aWFsaXplZCAqLworCUJGQV9JT0NfR0VUQVRUUiAgICAgPSA0LCAgLyogIElPQyBpcyBiZWluZyBjb25maWd1cmVkICovCisJQkZBX0lPQ19PUEVSQVRJT05BTCA9IDUsICAvKiAgSU9DIGlzIG9wZXJhdGlvbmFsICovCisJQkZBX0lPQ19JTklURkFJTCAgICA9IDYsICAvKiAgSU9DIGhhcmR3YXJlIGZhaWx1cmUgKi8KKwlCRkFfSU9DX0hCRkFJTCAgICAgID0gNywgIC8qICBJT0MgaGVhcnQtYmVhdCBmYWlsdXJlICovCisJQkZBX0lPQ19ESVNBQkxJTkcgICA9IDgsICAvKiAgSU9DIGlzIGJlaW5nIGRpc2FibGVkICovCisJQkZBX0lPQ19ESVNBQkxFRCAgICA9IDksICAvKiAgSU9DIGlzIGRpc2FibGVkICovCisJQkZBX0lPQ19GV01JU01BVENIICA9IDEwLCAvKiAgSU9DIGZpcm13YXJlIGRpZmZlcmVudCBmcm9tIGRyaXZlcnMgKi8KK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfaW9jX3N0YXRzX3MgeworCXUzMiAgICAgICAgaGJfY291bnQ7CisJdTMyICAgICAgICBjZmdfcmVxczsKKwl1MzIgICAgICAgIGVuYWJsZV9yZXFzOworCXUzMiAgICAgICAgZGlzYWJsZV9yZXFzOworCXUzMiAgICAgICAgc3RhdHNfcmVxczsKKwl1MzIgICAgICAgIGNscnN0YXRzX3JlcXM7CisJdTMyICAgICAgICB1bmtub3duX3JlcXM7CisJdTMyICAgICAgICBpY19yZXFzOwkJLyogIGludGVycnVwdCBjb2FsZXNjZSByZXFzICovCit9OworCisvKioKKyAqIElPQyBkcml2ZXIgc3RhdHMKKyAqLworc3RydWN0IGJmYV9pb2NfZHJ2X3N0YXRzX3MgeworCXUzMglpb2NfaXNyczsKKwl1MzIJaW9jX2VuYWJsZXM7CisJdTMyCWlvY19kaXNhYmxlczsKKwl1MzIJaW9jX2hiZmFpbHM7CisJdTMyCWlvY19ib290czsKKwl1MzIJc3RhdHNfdG1vczsKKwl1MzIgICAgICAgIGhiX2NvdW50OworCXUzMiAgICAgICAgZGlzYWJsZV9yZXFzOworCXUzMiAgICAgICAgZW5hYmxlX3JlcXM7CisJdTMyICAgICAgICBkaXNhYmxlX3JlcGxpZXM7CisJdTMyICAgICAgICBlbmFibGVfcmVwbGllczsKK307CisKKy8qKgorICogSU9DIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pb2Nfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9pb2NfZHJ2X3N0YXRzX3MJZHJ2X3N0YXRzOyAvKiAgZHJpdmVyIElPQyBzdGF0cyAqLworCXN0cnVjdCBiZmFfZndfaW9jX3N0YXRzX3MgCWZ3X3N0YXRzOyAgLyogIGZpcm13YXJlIElPQyBzdGF0cyAqLworfTsKKworCitlbnVtIGJmYV9pb2NfdHlwZV9lIHsKKwlCRkFfSU9DX1RZUEVfRkMJICA9IDEsCisJQkZBX0lPQ19UWVBFX0ZDb0UgPSAyLAorCUJGQV9JT0NfVFlQRV9MTAkgID0gMywKK307CisKKy8qKgorICogSU9DIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gcXVlcmllcworICovCitzdHJ1Y3QgYmZhX2lvY19hdHRyX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UJCWlvY190eXBlOworCWVudW0gYmZhX2lvY19zdGF0ZSAJCXN0YXRlOwkJLyogIElPQyBzdGF0ZSAgICAgICovCisJc3RydWN0IGJmYV9hZGFwdGVyX2F0dHJfcwlhZGFwdGVyX2F0dHI7CS8qICBIQkEgYXR0cmlidXRlcyAqLworCXN0cnVjdCBiZmFfaW9jX2RyaXZlcl9hdHRyX3MgCWRyaXZlcl9hdHRyOwkvKiAgZHJpdmVyIGF0dHIgICAgKi8KKwlzdHJ1Y3QgYmZhX2lvY19wY2lfYXR0cl9zCXBjaV9hdHRyOworCXU4CQkJCXBvcnRfaWQ7CS8qICBwb3J0IG51bWJlciAgICAqLworfTsKKworLyoqCisgKiBCRkEgSU9DIGxldmVsIGV2ZW50cworICovCitlbnVtIGJmYV9pb2NfYWVuX2V2ZW50IHsKKwlCRkFfSU9DX0FFTl9IQkdPT0QJPSAxLAkvKiAgSGVhcnQgQmVhdCByZXN0b3JlIGV2ZW50CSovCisJQkZBX0lPQ19BRU5fSEJGQUlMCT0gMiwJLyogIEhlYXJ0IEJlYXQgZmFpbHVyZSBldmVudAkqLworCUJGQV9JT0NfQUVOX0VOQUJMRQk9IDMsCS8qICBJT0MgZW5hYmxlZCBldmVudAkJKi8KKwlCRkFfSU9DX0FFTl9ESVNBQkxFCT0gNCwJLyogIElPQyBkaXNhYmxlZCBldmVudAkJKi8KKwlCRkFfSU9DX0FFTl9GV01JU01BVENICT0gNSwJLyogIElPQyBmaXJtd2FyZSBtaXNtYXRjaAkqLworfTsKKworLyoqCisgKiBCRkEgSU9DIGxldmVsIGV2ZW50IGRhdGEsIG5vdyBqdXN0IGEgcGxhY2UgaG9sZGVyCisgKi8KK3N0cnVjdCBiZmFfaW9jX2Flbl9kYXRhX3MgeworCWVudW0gYmZhX2lvY190eXBlX2UgaW9jX3R5cGU7CisJd3duX3QJcHd3bjsKKwltYWNfdAltYWM7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19JT0NfSF9fICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX2lvY2ZjLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NmJjYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pb2NmYy5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19JT0NGQ19IX18KKyNkZWZpbmUgX19CRkFfREVGU19JT0NGQ19IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmVyc2lvbi5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYWRhcHRlci5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG0uaD4KKworI2RlZmluZSBCRkFfSU9DRkNfSU5UUl9ERUxBWQkxMTI1CisjZGVmaW5lIEJGQV9JT0NGQ19JTlRSX0xBVEVOQ1kJMjI1CisKKy8qKgorICogSW50ZXJydXB0IGNvYWxlc2NpbmcgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IGJmYV9pb2NmY19pbnRyX2F0dHJfcyB7CisJYmZhX2Jvb2xlYW5fdAljb2FsZXNjZTsJLyogIGVuYWJsZS9kaXNhYmxlIGNvYWxlc2NpbmcgKi8KKwl1MTYJbGF0ZW5jeTsJLyogIGxhdGVuY3kgaW4gbWljcm9zZWNvbmRzICAgKi8KKwl1MTYJZGVsYXk7CQkvKiAgZGVsYXkgaW4gbWljcm9zZWNvbmRzICAgICAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgY29uZmlndXJhdG9uCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfZndjZmdfcyB7CisJdTE2ICAgICAgICBudW1fZmFicmljczsJLyogIG51bWJlciBvZiBmYWJyaWNzCQkqLworCXUxNiAgICAgICAgbnVtX2xwb3J0czsJLyogIG51bWJlciBvZiBsb2NhbCBscG9ydHMJKi8KKwl1MTYgICAgICAgIG51bV9ycG9ydHM7CS8qICBudW1iZXIgb2YgcmVtb3RlIHBvcnRzCSovCisJdTE2ICAgICAgICBudW1faW9pbV9yZXFzOwkvKiAgbnVtYmVyIG9mIElPIHJlcXMJCSovCisJdTE2ICAgICAgICBudW1fdHNraW1fcmVxczsJLyogIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0cwkqLworCXUxNiAgICAgICAgbnVtX2lvdG1fcmVxczsJLyogIG51bWJlciBvZiBUTSBJTyByZXFzCSovCisJdTE2ICAgICAgICBudW1fdHNrdG1fcmVxczsJLyogIFRNIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0cyovCisJdTE2ICAgICAgICBudW1fZmN4cF9yZXFzOwkvKiAgdW5hc3Npc3RlZCBGQyBleGNoYW5nZXMJKi8KKwl1MTYgICAgICAgIG51bV91Zl9idWZzOwkvKiAgdW5zb2xpY2l0ZWQgcmVjdiBidWZmZXJzCSovCisJdTgJCW51bV9jcXM7CisJdTgJCXJzdmQ7Cit9OworCitzdHJ1Y3QgYmZhX2lvY2ZjX2RydmNmZ19zIHsKKwl1MTYgICAgICAgIG51bV9yZXFxX2VsZW1zOwkvKiAgbnVtYmVyIG9mIHJlcSBxdWV1ZSBlbGVtZW50cyAqLworCXUxNiAgICAgICAgbnVtX3JzcHFfZWxlbXM7CS8qICBudW1iZXIgb2YgcnNwIHF1ZXVlIGVsZW1lbnRzICovCisJdTE2ICAgICAgICBudW1fc2dwZ3M7CS8qICBudW1iZXIgb2YgdG90YWwgU0cgcGFnZXMJICAqLworCXUxNiAgICAgICAgbnVtX3Nib290X3RndHM7CS8qICBudW1iZXIgb2YgU0FOIGJvb3QgdGFyZ2V0cwkgICovCisJdTE2ICAgICAgICBudW1fc2Jvb3RfbHVuczsJLyogIG51bWJlciBvZiBTQU4gYm9vdCBsdW5zCSAgKi8KKwl1MTYJICAgIGlvY19yZWNvdmVyOwkvKiAgSU9DIHJlY292ZXJ5IG1vZGUJCSAgKi8KKwl1MTYJICAgIG1pbl9jZmc7CS8qICBtaW5pbXVtIGNvbmZpZ3VyYXRpb24JICAqLworCXUxNiAgICAgICAgcGF0aF90b3Y7CS8qICBkZXZpY2UgcGF0aCB0aW1lb3V0CSAgKi8KKwliZmFfYm9vbGVhbl90ICAgZGVsYXlfY29tcDsgLyogIGRlbGF5IGNvbXBsZXRpb24gb2YKKwkJCQkJCQlmYWlsZWQgaW5mbGlnaHQgSU9zICovCisJdTMyCQlyc3ZkOworfTsKKy8qKgorICogSU9DIGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGJmYV9pb2NmY19jZmdfcyB7CisJc3RydWN0IGJmYV9pb2NmY19md2NmZ19zCWZ3Y2ZnOwkvKiAgZmlybXdhcmUgc2lkZSBjb25maWcgKi8KKwlzdHJ1Y3QgYmZhX2lvY2ZjX2RydmNmZ19zCWRydmNmZzsJLyogIGRyaXZlciBzaWRlIGNvbmZpZwkgICovCit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBJTyBzdGF0cworICovCitzdHJ1Y3QgYmZhX2Z3X2lvX3N0YXRzX3MgeworCXUzMglob3N0X2Fib3J0OwkJLyogIElPIGFib3J0ZWQgYnkgaG9zdCBkcml2ZXIqLworCXUzMglob3N0X2NsZWFudXA7CQkvKiAgSU8gY2xlYW4gdXAgYnkgaG9zdCBkcml2ZXIgKi8KKworCXUzMglmd19pb190aW1lb3V0OwkJLyogIElPcyB0aW1lZG91dCAqLworCXUzMglmd19mcm1fcGFyc2U7CQkvKiAgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fZGF0YTsJCS8qICBmY3BfZGF0YSBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV9yc3A7CQkvKiAgZmNwX3JzcCBmcmFtZSBwYXJzZWQgYnkgZi93ICovCisJdTMyCWZ3X2ZybV94ZmVyX3JkeTsJLyogIHhmZXJfcmR5IGZyYW1lIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZnJtX2Jsc19hY2M7CQkvKiAgQkxTIEFDQyAgZnJhbWUgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fdGd0X2Fib3J0OwkvKiAgdGFyZ2V0IEFCVFMgcGFyc2VkIGJ5IGYvdyAqLworCXUzMglmd19mcm1fdW5rbm93bjsJCS8qICB1bmtub3duIHBhcnNlZCBieSBmL3cgKi8KKwl1MzIJZndfZGF0YV9kbWE7CQkvKiAgZi93IERNQSdlZCB0aGUgZGF0YSBmcmFtZSAqLworCXUzMglmd19mcm1fZHJvcDsJCS8qICBmL3cgZHJvcCB0aGUgZnJhbWUgKi8KKworCXUzMglyZWNfdGltZW91dDsJCS8qICBGVyByZWMgdGltZWQgb3V0ICovCisJdTMyCWVycm9yX3JlYzsJCQkvKiAgRlcgc2VuZGluZyByZWMgb24KKwkJCQkJCQkqIGFuIGVycm9yIGNvbmRpdGlvbiovCisJdTMyCXdhaXRfZm9yX3NpOwkJLyogIEZXIHdhaXQgZm9yIFNJICovCisJdTMyCXJlY19yc3BfaW52YWw7CQkvKiAgUkVDIHJzcCBpbnZhbGlkICovCisJdTMyCXNlcXJfaW9fYWJvcnQ7CQkvKiAgdGFyZ2V0IGRvZXMgbm90IGtub3cgY21kIHNvIGFib3J0ICovCisJdTMyCXNlcXJfaW9fcmV0cnk7CQkvKiAgU0VRUiBmYWlsZWQgc28gcmV0cnkgSU8gKi8KKworCXUzMglpdG5fY2lzY191cGRfcnNwOwkvKiAgSVROIGNpc2MgdXBkYXRlZCBvbiBmY3BfcnNwICovCisJdTMyCWl0bl9jaXNjX3VwZF9kYXRhOwkvKiAgSVROIGNpc2MgdXBkYXRlZCBvbiBmY3BfZGF0YSAqLworCXUzMglpdG5fY2lzY191cGRfeGZlcl9yZHk7CS8qICBJVE4gY2lzYyB1cGRhdGVkIG9uIGZjcF9kYXRhICovCisKKwl1MzIJZmNwX2RhdGFfbG9zdDsJCS8qICBmY3AgZGF0YSBsb3N0ICovCisKKwl1MzIJcm9fc2V0X2luX3hmZXJfcmR5OwkvKiAgVGFyZ2V0IHNldCBSTyBpbiBYZmVyX3JkeSBmcmFtZSAqLworCXUzMgl4ZmVyX3JkeV9vb29fZXJyOwkvKiAgT3V0IG9mIG9yZGVyIFhmZXJfcmR5IHJlY2VpdmVkICovCisJdTMyCXhmZXJfcmR5X3Vua25vd25fZXJyOwkvKiAgdW5rbm93biBlcnJvciBpbiB4ZmVyX3JkeSBmcmFtZSAqLworCisJdTMyCWlvX2Fib3J0X3RpbWVvdXQ7CS8qICBBQlRTIHRpbWVkb3V0ICAqLworCXUzMglzbGVyX2luaXRpYXRlZDsJCS8qICBTTEVSIGluaXRpYXRlZCAqLworCisJdTMyCXVuZXhwX2ZjcF9yc3A7CQkvKiAgZmNwIHJlc3BvbnNlIGluIHdyb25nIHN0YXRlICovCisKKwl1MzIJZmNwX3JzcF91bmRlcl9ydW47CS8qICBmY3AgcnNwIElPIHVuZGVycnVuICovCisJdTMyICAgICAgICBmY3BfcnNwX3VuZGVyX3J1bl93cjsgICAvKiAgZmNwIHJzcCBJTyB1bmRlcnJ1biBmb3Igd3JpdGUgKi8KKwl1MzIJZmNwX3JzcF91bmRlcl9ydW5fZXJyOwkvKiAgZmNwIHJzcCBJTyB1bmRlcnJ1biBlcnJvciAqLworCXUzMiAgICAgICAgZmNwX3JzcF9yZXNpZF9pbnZhbDsgICAgLyogIGludmFsaWQgcmVzaWR1ZSAqLworCXUzMglmY3BfcnNwX292ZXJfcnVuOwkvKiAgZmNwIHJzcCBJTyBvdmVycnVuICovCisJdTMyCWZjcF9yc3Bfb3Zlcl9ydW5fZXJyOwkvKiAgZmNwIHJzcCBJTyBvdmVycnVuIGVycm9yICovCisJdTMyCWZjcF9yc3BfcHJvdG9fZXJyOwkvKiAgcHJvdG9jb2wgZXJyb3IgaW4gZmNwIHJzcCAqLworCXUzMglmY3BfcnNwX3NlbnNlX2VycjsJLyogIGVycm9yIGluIHNlbnNlIGluZm8gaW4gZmNwIHJzcCAqLworCXUzMglmY3BfY29uZl9yZXE7CQkvKiAgRkNQIGNvbmYgcmVxdWVzdGVkICovCisKKwl1MzIJdGd0X2Fib3J0ZWRfaW87CQkvKiAgdGFyZ2V0IGluaXRpYXRlZCBhYm9ydCAqLworCisJdTMyCWlvaF9lZHRvdl90aW1lb3V0X2V2ZW50Oy8qICBJT0ggZWR0b3YgdGltZXIgcG9wcGVkICovCisJdTMyCWlvaF9mY3BfcnNwX2V4Y3BfZXZlbnQ7CS8qICBJT0ggRkNQX1JTUCBleGNlcHRpb24gKi8KKwl1MzIJaW9oX2ZjcF9jb25mX2V2ZW50OwkvKiAgSU9IIEZDUF9DT05GICovCisJdTMyCWlvaF9tdWx0X2ZybV9yc3BfZXZlbnQ7CS8qICBJT0ggbXVsdGlfZnJhbWUgRkNQX1JTUCAqLworCXUzMglpb2hfaGl0X2NsYXNzMl9ldmVudDsJLyogIElPSCBoaXQgY2xhc3MyICovCisJdTMyCWlvaF9taXNzX290aGVyX2V2ZW50OwkvKiAgSU9IIG1pc3Mgb3RoZXIgKi8KKwl1MzIJaW9oX3NlcV9jbnRfZXJyX2V2ZW50OwkvKiAgSU9IIHNlcSBjbnQgZXJyb3IgKi8KKwl1MzIJaW9oX2xlbl9lcnJfZXZlbnQ7CQkvKiAgSU9IIGxlbiBlcnJvciAtIGZjcF9kbCAhPQorCQkJCQkJCSogYnl0ZXMgeGZlcmVkICovCisJdTMyCWlvaF9zZXFfbGVuX2Vycl9ldmVudDsJLyogIElPSCBzZXEgbGVuIGVycm9yICovCisJdTMyCWlvaF9kYXRhX29vcl9ldmVudDsJLyogIERhdGEgb3V0IG9mIHJhbmdlICovCisJdTMyCWlvaF9yb19vb29fZXZlbnQ7CS8qICBSZWxhdGl2ZSBvZmZzZXQgb3V0IG9mIHJhbmdlICovCisJdTMyCWlvaF9jcHVfb3duZWRfZXZlbnQ7CS8qICBJT0ggaGl0IC1pb3N0IG93bmVkIGJ5IGYvdyAqLworCXUzMglpb2hfdW5leHBfZnJhbWVfZXZlbnQ7CS8qICB1bmV4cGVjdGVkIGZyYW1lIHJlY2lldmVkCisJCQkJCQkgKiAgIGNvdW50ICovCisJdTMyCWlvaF9lcnJfaW50OwkJLyogIElPSCBlcnJvciBpbnQgZHVyaW5nIGRhdGEtcGhhc2UKKwkJCQkJCSAqICAgZm9yIHNjc2kgd3JpdGUKKwkJCQkJCSAqLworfTsKKworLyoqCisgKiBJT0MgcG9ydCBmaXJtd2FyZSBzdGF0cworICovCisKK3N0cnVjdCBiZmFfZndfcG9ydF9mcGdfc3RhdHNfcyB7CisgICAgdTMyICAgIGludHJfZXZ0OworICAgIHUzMiAgICBpbnRyOworICAgIHUzMiAgICBpbnRyX2V4Y2VzczsKKyAgICB1MzIgICAgaW50cl9jYXVzZTA7CisgICAgdTMyICAgIGludHJfb3RoZXI7CisgICAgdTMyICAgIGludHJfb3RoZXJfaWduOworICAgIHUzMiAgICBzaWdfbG9zdDsKKyAgICB1MzIgICAgc2lnX3JlZ2FpbmVkOworICAgIHUzMiAgICBzeW5jX2xvc3Q7CisgICAgdTMyICAgIHN5bmNfdG87CisgICAgdTMyICAgIHN5bmNfcmVnYWluZWQ7CisgICAgdTMyICAgIGRpdjJfb3ZlcmZsb3c7CisgICAgdTMyICAgIGRpdjJfdW5kZXJmbG93OworICAgIHUzMiAgICBlZmlmb19vdmVyZmxvdzsKKyAgICB1MzIgICAgZWZpZm9fdW5kZXJmbG93OworICAgIHUzMiAgICBpZGxlX3J4OworICAgIHUzMiAgICBscnJfcng7CisgICAgdTMyICAgIGxyX3J4OworICAgIHUzMiAgICBvbHNfcng7CisgICAgdTMyICAgIG5vc19yeDsKKyAgICB1MzIgICAgbGlwX3J4OworICAgIHUzMiAgICBhcmJmMF9yeDsKKyAgICB1MzIgICAgbXJrX3J4OworICAgIHUzMiAgICBjb25zdF9tcmtfcng7CisgICAgdTMyICAgIHByaW1fdW5rbm93bjsKKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19wb3J0X2xrc21fc3RhdHNfcyB7CisgICAgdTMyICAgIGh3c21fc3VjY2VzczsgICAgICAgLyogIGh3c20gc3RhdGUgbWFjaGluZSBzdWNjZXNzICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fZmFpbHM7ICAgICAgICAgLyogIGh3c20gZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGh3c21fd2R0b3Y7ICAgICAgICAgLyogIGh3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fc3VjY2VzczsgICAgICAgLyogIHN3c20gc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fZmFpbHM7ICAgICAgICAgLyogIHN3c20gZmFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHN3c21fd2R0b3Y7ICAgICAgICAgLyogIHN3c20gdGltZWQgb3V0ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGJ1c3lidWZzOyAgICAgICAgICAgLyogIGxpbmsgaW5pdCBmYWlsZWQgZHVlIHRvIGJ1c3lidWYgICAgICovCisgICAgdTMyICAgIGJ1Zl93YWl0czsgICAgICAgICAgLyogIGJ1ZndhaXQgc3RhdGUgZW50cmllcyAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIGxpbmtfZmFpbHM7ICAgICAgICAgLyogIGxpbmsgZmFpbHVyZXMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHBzcF9lcnJvcnM7ICAgICAgICAgLyogIHByaW1pdGl2ZSBzZXF1ZW5jZSBwcm90b2NvbCBlcnJvcnMgICovCisgICAgdTMyICAgIGxyX3VuZXhwOyAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUiByeC1lZCB1bmV4cGVjdGVkbHkgICovCisgICAgdTMyICAgIGxycl91bmV4cDsgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUlIgcngtZWQgdW5leHBlY3RlZGx5ICovCisgICAgdTMyICAgIGxyX3R4OyAgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUiB0eCBzdGFydGVkICAgICAgICAgICovCisgICAgdTMyICAgIGxycl90eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBMUlIgdHggc3RhcnRlZCAgICAgICAgICovCisgICAgdTMyICAgIG9sc190eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBPTFMgdHggc3RhcnRlZCAgICAgICAgICovCisgICAgdTMyICAgIG5vc190eDsgICAgICAgICAgICAgLyogIE5vLiBvZiB0aW1lcyBOT1MgdHggc3RhcnRlZCAgICAgICAgICovCit9OworCisKK3N0cnVjdCBiZmFfZndfcG9ydF9zbnNtX3N0YXRzX3MgeworICAgIHUzMiAgICBod3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBTdWNjZXNzZnVsIGh3c20gdGVybWluYXRpb25zICAgICAgICAqLworICAgIHUzMiAgICBod3NtX2ZhaWxzOyAgICAgICAgIC8qICBod3NtIGZhaWwgY291bnQgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBod3NtX3dkdG92OyAgICAgICAgIC8qICBod3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3N1Y2Nlc3M7ICAgICAgIC8qICBzd3NtIHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzd3NtX3dkdG92OyAgICAgICAgIC8qICBzd3NtIHRpbWVkIG91dCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBlcnJvcl9yZXNldHM7ICAgICAgIC8qICBlcnJvciByZXNldHMgaW5pdGlhdGVkIGJ5IHVwc20gICAgICAqLworICAgIHUzMiAgICBzeW5jX2xvc3Q7ICAgICAgICAgIC8qICBTeW5jIGxvc3MgY291bnQgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBzaWdfbG9zdDsgICAgICAgICAgIC8qICBTaWduYWwgbG9zcyBjb3VudCAgICAgICAgICAgICAgICAgICAqLworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X3BvcnRfcGh5c21fc3RhdHNfcyB7CisgICAgdTMyICAgIG1vZHVsZV9pbnNlcnRzOyAgICAgLyogIE1vZHVsZSBpbnNlcnQgY291bnQgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV94dHJhY3RzOyAgICAgLyogIE1vZHVsZSBleHRyYWN0cyBjb3VudCAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV9pbnZhbGlkczsgICAgLyogIEludmFsaWQgbW9kdWxlIGluc2VydGVkIGNvdW50ICAgICAgICovCisgICAgdTMyICAgIG1vZHVsZV9yZWFkX2lnbjsgICAgLyogIE1vZHVsZSB2YWxpZGF0aW9uIHN0YXR1cyBpZ25vcmVkICAgICovCisgICAgdTMyICAgIGxhc2VyX2ZhdWx0czsgICAgICAgLyogIExhc2VyIGZhdWx0IGNvdW50ICAgICAgICAgICAgICAgICAgICovCisgICAgdTMyICAgIHJzdmQ7Cit9OworCisKK3N0cnVjdCBiZmFfZndfZmlwX3N0YXRzX3MgeworICAgIHUzMiAgICBkaXNjX3JlcTsgICAgICAgICAgIC8qICBEaXNjb3Zlcnkgc29saWNpdCByZXF1ZXN0cyAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3JzcDsgICAgICAgICAgIC8qICBEaXNjb3Zlcnkgc29saWNpdCByZXNwb25zZSAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX2VycjsgICAgICAgICAgIC8qICBEaXNjb3ZlcnkgYWR2dC4gcGFyc2UgZXJyb3JzICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3Vuc29sOyAgICAgICAgIC8qICBEaXNjb3ZlcnkgdW5zb2xpY2l0ZWQgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBkaXNjX3RpbWVvdXRzOyAgICAgIC8qICBEaXNjb3ZlcnkgdGltZW91dHMgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBsaW5rc3ZjX3Vuc3VwcDsgICAgIC8qICBVbnN1cHBvcnRlZCBsaW5rIHNlcnZpY2UgcmVxICAgICAgICAqLworICAgIHUzMiAgICBsaW5rc3ZjX2VycjsgICAgICAgIC8qICBQYXJzZSBlcnJvciBpbiBsaW5rIHNlcnZpY2UgcmVxICAgICAqLworICAgIHUzMiAgICBsb2dvX3JlcTsgICAgICAgICAgIC8qICBOdW1iZXIgb2YgRklQIGxvZ29zIHJlY2VpdmVkICAgICAgICAqLworICAgIHUzMiAgICBjbHJ2bGlua19yZXE7ICAgICAgIC8qICBDbGVhciB2aXJ0dWFsIGxpbmsgcmVxICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBvcF91bnN1cHA7ICAgICAgICAgIC8qICBVbnN1cHBvcnRlZCBGSVAgb3BlcmF0aW9uICAgICAgICAgICAqLworICAgIHUzMiAgICB1bnRhZ2dlZDsgICAgICAgICAgIC8qICBVbnRhZ2dlZCBmcmFtZXMgKGlnbm9yZWQpICAgICAgICAgICAqLworICAgIHUzMiAgICByc3ZkOworfTsKKworCitzdHJ1Y3QgYmZhX2Z3X2xwc19zdGF0c19zIHsKKyAgICB1MzIgICAgbWFjX2ludmFsaWRzOyAgICAgICAvKiAgSW52YWxpZCBtYWMgYXNzaWduZWQgICAgICAgICAgICAgICAgKi8KKyAgICB1MzIgICAgcnN2ZDsKK307CisKKworc3RydWN0IGJmYV9md19mY29lX3N0YXRzX3MgeworICAgIHUzMiAgICBjZWVfbGlua3VwczsgICAgICAgIC8qICBDRUUgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBjZWVfbGlua2RuczsgICAgICAgIC8qICBDRUUgbGluayBkb3duIGNvdW50ICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfbGlua3VwczsgICAgICAgIC8qICBGSVAgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfbGlua2RuczsgICAgICAgIC8qICBGSVAgbGluayB1cCBjb3VudCAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBmaXBfZmFpbHM7ICAgICAgICAgIC8qICBGSVAgZmFpbCBjb3VudCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHUzMiAgICBtYWNfaW52YWxpZHM7ICAgICAgIC8qICBJbnZhbGlkIG1hYyBhc3NpZ25lZCAgICAgICAgICAgICAgICAqLworfTsKKworLyoqCisgKiBJT0MgZmlybXdhcmUgRkNvRSBwb3J0IHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfZmNvZV9wb3J0X3N0YXRzX3MgeworICAgIHN0cnVjdCBiZmFfZndfZmNvZV9zdGF0c19zICBmY29lX3N0YXRzOworICAgIHN0cnVjdCBiZmFfZndfZmlwX3N0YXRzX3MgICBmaXBfc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQyBwb3J0IHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfZmNfcG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfZnBnX3N0YXRzX3MJCWZwZ19zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfcGh5c21fc3RhdHNfcwlwaHlzbV9zdGF0czsKKwlzdHJ1Y3QgYmZhX2Z3X3BvcnRfc25zbV9zdGF0c19zCQlzbnNtX3N0YXRzOworCXN0cnVjdCBiZmFfZndfcG9ydF9sa3NtX3N0YXRzX3MJCWxrc21fc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBmaXJtd2FyZSBGQyBwb3J0IHN0YXRzCisgKi8KK3VuaW9uIGJmYV9md19wb3J0X3N0YXRzX3MgeworCXN0cnVjdCBiZmFfZndfZmNfcG9ydF9zdGF0c19zCWZjX3N0YXRzOworCXN0cnVjdCBiZmFfZndfZmNvZV9wb3J0X3N0YXRzX3MJZmNvZV9zdGF0czsKK307CisKKy8qKgorICogSU9DIGZpcm13YXJlIHN0YXRzCisgKi8KK3N0cnVjdCBiZmFfZndfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19pb2Nfc3RhdHNfcwlpb2Nfc3RhdHM7CisJc3RydWN0IGJmYV9md19pb19zdGF0c19zCWlvX3N0YXRzOworCXVuaW9uICBiZmFfZndfcG9ydF9zdGF0c19zCXBvcnRfc3RhdHM7Cit9OworCisvKioKKyAqIElPQyBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfaW9jZmNfc3RhdHNfcyB7CisJc3RydWN0IGJmYV9md19zdGF0c19zIAlmd19zdGF0czsJLyogIGZpcm13YXJlIElPQyBzdGF0cyAgICAgICovCit9OworCisvKioKKyAqIElPQyBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pb2NmY19hdHRyX3MgeworCXN0cnVjdCBiZmFfaW9jZmNfY2ZnX3MJCWNvbmZpZzsJCS8qICBJT0NGQyBjb25maWcgICAqLworCXN0cnVjdCBiZmFfaW9jZmNfaW50cl9hdHRyX3MJaW50cl9hdHRyOwkvKiAgaW50ZXJydXB0IGF0dHIgKi8KK307CisKKyNkZWZpbmUgQkZBX0lPQ0ZDX1BBVEhUT1ZfTUFYCTYwCisjZGVmaW5lIEJGQV9JT0NGQ19RREVQVEhfTUFYCTIwMDAKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfSU9DX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXBmYy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXBmYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjYzZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pcGZjLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0lQRkNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfSVBGQ19IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKworLyoqCisgKiBGQ1MgaXAgcmVtb3RlIHBvcnQgc3RhdGVzCisgKi8KK2VudW0gYmZhX2lwcnBfc3RhdGUgeworCUJGQV9JUFJQX1VOSU5JVCAgPSAwLAkvKiAgUE9SVCBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX0lQUlBfT05MSU5FICA9IDEsCS8qICBwcm9jZXNzIGxvZ2luIGlzIGNvbXBsZXRlICovCisJQkZBX0lQUlBfT0ZGTElORSA9IDIsCS8qICBpcHJwIGlzIG9mZmxpbmUgKi8KK307CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9pcHJwX3N0YXRzX3MgeworCXUzMiAgICAgICAgb2ZmbGluZXM7CisJdTMyICAgICAgICBvbmxpbmVzOworCXUzMiAgICAgICAgcnNjbnM7CisJdTMyICAgICAgICBwbG9naXM7CisJdTMyICAgICAgICBsb2dvczsKKwl1MzIgICAgICAgIHBsb2dpX3RpbWVvdXRzOworCXUzMiAgICAgICAgcGxvZ2lfcmVqZWN0czsKK307CisKKy8qKgorICogRkNTIGlwcnAgYXR0cmlidXRlIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pcHJwX2F0dHJfcyB7CisJZW51bSBiZmFfaXBycF9zdGF0ZSBzdGF0ZTsKK307CisKK3N0cnVjdCBiZmFfaXBmY19zdGF0c19zIHsKKwl1MzIgYXJwX3NlbnQ7CisJdTMyIGFycF9yZWN2OworCXUzMiBhcnBfcmVwbHlfc2VudDsKKwl1MzIgYXJwX3JlcGx5X3JlY3Y7CisJdTMyIGZhcnBfc2VudDsKKwl1MzIgZmFycF9yZWN2OworCXUzMiBmYXJwX3JlcGx5X3NlbnQ7CisJdTMyIGZhcnBfcmVwbHlfcmVjdjsKKwl1MzIgZmFycF9yZWplY3Rfc2VudDsKKwl1MzIgZmFycF9yZWplY3RfcmVjdjsKK307CisKK3N0cnVjdCBiZmFfaXBmY19hdHRyX3MgeworCWJmYV9ib29sZWFuX3QgZW5hYmxlZDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lQRkNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19pdG5pbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWM3Njk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfaXRuaW0uaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX0lUTklNX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0lUTklNX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKy8qKgorICogRkNTIGl0bmltIHN0YXRlcworICovCitlbnVtIGJmYV9pdG5pbV9zdGF0ZSB7CisJQkZBX0lUTklNX09GRkxJTkUgCT0gMCwJLyogIG9mZmxpbmUgKi8KKwlCRkFfSVROSU1fUFJMSV9TRU5EIAk9IDEsCS8qICBwcmxpIHNlbmQgKi8KKwlCRkFfSVROSU1fUFJMSV9TRU5UIAk9IDIsCS8qICBwcmxpIHNlbnQgKi8KKwlCRkFfSVROSU1fUFJMSV9SRVRSWSAJPSAzLAkvKiAgcHJsaSByZXRyeSAqLworCUJGQV9JVE5JTV9IQ0JfT05MSU5FIAk9IDQsCS8qICBvbmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfSVROSU1fT05MSU5FIAk9IDUsCS8qICBvbmxpbmUgKi8KKwlCRkFfSVROSU1fSENCX09GRkxJTkUgCT0gNiwJLyogIG9mZmxpbmUgY2FsbGJhY2sgKi8KKwlCRkFfSVROSU1fSU5JVElBVElPUiAJPSA3LAkvKiAgaW5pdGlhdG9yICovCit9OworCitzdHJ1Y3QgYmZhX2l0bmltX2hhbF9zdGF0c19zIHsKKwl1MzIJb25saW5lczsJLyogIElUTiBuZXh1cyBvbmxpbmVzIChQUkxJIGRvbmUpICovCisJdTMyCW9mZmxpbmVzOwkvKiAgSVROIE5leHVzIG9mZmxpbmVzIAkqLworCXUzMgljcmVhdGVzOwkvKiAgSVROIGNyZWF0ZSByZXF1ZXN0cyAJKi8KKwl1MzIJZGVsZXRlczsJLyogIElUTiBkZWxldGUgcmVxdWVzdHMgCSovCisJdTMyCWNyZWF0ZV9jb21wczsJLyogIElUTiBjcmVhdGUgY29tcGxldGlvbnMgCSovCisJdTMyCWRlbGV0ZV9jb21wczsJLyogIElUTiBkZWxldGUgY29tcGxldGlvbnMgCSovCisJdTMyCXNsZXJfZXZlbnRzOwkvKiAgU0xFUiAoc2VxdWVuY2UgbGV2ZWwgZXJyb3IKKwkJCQkJICogcmVjb3ZlcnkpIGV2ZW50cyAqLworCXUzMglpb2NfZGlzYWJsZWQ7CS8qICBOdW0gSU9DIGRpc2FibGVzCQkqLworCXUzMgljbGVhbnVwX2NvbXBzOwkvKiAgSVROIGNsZWFudXAgY29tcGxldGlvbnMgKi8KKwl1MzIJdG1fY21uZHM7CS8qICB0YXNrIG1hbmFnZW1lbnQoVE0pIGNtbmRzIHNlbnQgKi8KKwl1MzIJdG1fZndfcnNwczsJLyogIFRNIGNtZHMgZmlybXdhcmUgcmVzcG9uc2VzICovCisJdTMyCXRtX3N1Y2Nlc3M7CS8qICBUTSBzdWNjZXNzZXMgKi8KKwl1MzIJdG1fZmFpbHVyZXM7CS8qICBUTSBmYWlsdXJlcyAqLworCXUzMgl0bV9pb19jb21wczsJLyogIFRNIElPIGNvbXBsZXRpb25zICovCisJdTMyCXRtX3FyZXN1bWVzOwkvKiAgVE0gcXVldWUgcmVzdW1lcyAoYWZ0ZXIgd2FpdGluZworCQkJCQkgKiBmb3IgcmVzb3VyY2VzKQorCQkJCQkgKi8KKwl1MzIJdG1faW9jZG93bnM7CS8qICBUTSBjbW5kcyBhZmZlY3RlZCBieSBJT0MgZG93biAqLworCXUzMgl0bV9jbGVhbnVwczsJLyogIFRNIGNsZWFudXBzICovCisJdTMyCXRtX2NsZWFudXBfY29tcHM7CisJCQkJCS8qICBUTSBjbGVhbnVwIGNvbXBsZXRpb25zICovCisJdTMyCWlvczsJCS8qICBJTyByZXF1ZXN0cyAqLworCXUzMglpb19jb21wczsJLyogIElPIGNvbXBsZXRpb25zICovCisJdTY0CWlucHV0X3JlcXM7CS8qICBJTlBVVCByZXF1ZXN0cyAqLworCXU2NAlvdXRwdXRfcmVxczsJLyogIE9VVFBVVCByZXF1ZXN0cyAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgc3RhdGlzdGljcworICovCitzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgeworCXUzMiAgICAgICAgb25saW5lczsJLyogIG51bSBycG9ydCBvbmxpbmUgKi8KKwl1MzIgICAgICAgIG9mZmxpbmVzOwkvKiAgbnVtIHJwb3J0IG9mZmxpbmUgKi8KKwl1MzIgICAgICAgIHBybGlfc2VudDsJLyogIG51bSBwcmxpIHNlbnQgb3V0ICovCisJdTMyICAgICAgICBmY3hwX2FsbG9jX3dhaXQ7LyogIG51bSBmY3hwIGFsbG9jIHdhaXRzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9lcnI7CS8qICBudW0gcHJsaSByc3AgZXJyb3JzICovCisJdTMyICAgICAgICBwcmxpX3JzcF9hY2M7CS8qICBudW0gcHJsaSByc3AgYWNjZXB0cyAqLworCXUzMiAgICAgICAgaW5pdGlhdG9yOwkvKiAgcnBvcnQgaXMgYW4gaW5pdGlhdG9yICovCisJdTMyICAgICAgICBwcmxpX3JzcF9wYXJzZV9lcnI7CS8qICBwcmxpIHJzcCBwYXJzaW5nIGVycm9ycyAqLworCXUzMiAgICAgICAgcHJsaV9yc3Bfcmp0OwkvKiAgbnVtIHBybGkgcnNwIHJlamVjdHMgKi8KKwl1MzIgICAgICAgIHRpbWVvdXQ7CS8qICBudW0gdGltZW91dHMgZGV0ZWN0ZWQgKi8KKwl1MzIgICAgICAgIHNsZXI7CQkvKiAgbnVtIHNsZXIgbm90aWZpY2F0aW9uIGZyb20gQkZBICovCisJdTMyCXJzdmQ7CisJc3RydWN0IGJmYV9pdG5pbV9oYWxfc3RhdHNfcwloYWxfc3RhdHM7Cit9OworCisvKioKKyAqIEZDUyBpdG5pbSBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgeworCWVudW0gYmZhX2l0bmltX3N0YXRlIHN0YXRlOyAvKiAgRkNTIGl0bmltIHN0YXRlICAgICAgICAqLworCXU4IHJldHJ5OwkJLyogIGRhdGEgcmV0cmFuc21pc2lvbiBzdXBwb3J0ICovCisJdTgJdGFza19yZXRyeV9pZDsgIC8qICB0YXNrIHJldHJ5IGlkZW50IHN1cHBvcnQgICAqLworCXU4IHJlY19zdXBwb3J0OyAgICAvKiAgUkVDIHN1cHBvcnRlZCAgICAgICAgICAgICAgKi8KKwl1OCBjb25mX2NvbXA7ICAgICAgLyogIGNvbmZpcm1lZCBjb21wbGV0aW9uIHN1cHAgICovCit9OworCisvKioKKyAqIEJGQSBJVE5JTSBldmVudHMuCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9JVE5JTV9BRU5fTkVXOiAgICAgICBbaW5dOiBOb25lICBbb3V0XTogdmZfaWQsIGxwd3duCisgKiBCRkFfSVROSU1fQUVOX0RFTEVURTogICAgW2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqIEJGQV9JVE5JTV9BRU5fT05MSU5FOiAgICBbaW5dOiB2Zl9pZCwgbHB3d24sIHJwd3duICgwID0gYWxsIGZjcDQgdGFyZ2V0cyksCisgKgkJCQkgIFtvdXRdOiB2Zl9pZCwgcHB3d24sIGxwd3duLCBycHd3bgorICogQkZBX0lUTklNX0FFTl9PRkZMSU5FOiAgIFtpbl06IHZmX2lkLCBscHd3biwgcnB3d24gKDAgPSBhbGwgZmNwNCB0YXJnZXRzKSwKKyAqCQkJCSAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJwd3duCisgKiBCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1Q6W2luXTogdmZfaWQsIGxwd3duLCBycHd3biAoMCA9IGFsbCBmY3A0IHRhcmdldHMpLAorICoJCQkJICBbb3V0XTogdmZfaWQsIHBwd3duLCBscHd3biwgcnB3d24KKyAqLworZW51bSBiZmFfaXRuaW1fYWVuX2V2ZW50IHsKKwlCRkFfSVROSU1fQUVOX09OTElORSAJPSAxLAkvKiAgVGFyZ2V0IG9ubGluZSAqLworCUJGQV9JVE5JTV9BRU5fT0ZGTElORSAJPSAyLAkvKiAgVGFyZ2V0IG9mZmxpbmUgKi8KKwlCRkFfSVROSU1fQUVOX0RJU0NPTk5FQ1QgPSAzLAkvKiAgVGFyZ2V0IGRpc2Nvbm5lY3RlZCAqLworfTsKKworLyoqCisgKiBCRkEgSVROSU0gZXZlbnQgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBiZmFfaXRuaW1fYWVuX2RhdGFfcyB7CisJdTE2ICAgICAgICB2Zl9pZDsJLyogIHZmX2lkIG9mIHRoZSBJVCBuZXh1cyAqLworCXUxNiAgICAgICAgcnN2ZFszXTsKKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgbG9naWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIHJwd3duOwkvKiAgV1dOIG9mIHJlbW90ZSh0YXJnZXQpIHBvcnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0lUTklNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbGVkLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19sZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjAzOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbGVkLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfTEVEX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX0xFRF9IX18KKworI2RlZmluZQlCRkFfTEVEX01BWF9OVU0JCTMKKworZW51bSBiZmFfbGVkX29wIHsKKwlCRkFfTEVEX09GRiAgID0gMCwKKwlCRkFfTEVEX09OICAgID0gMSwKKwlCRkFfTEVEX0ZMSUNLID0gMiwKKwlCRkFfTEVEX0JMSU5LID0gMywKK307CisKK2VudW0gYmZhX2xlZF9jb2xvciB7CisJQkZBX0xFRF9HUkVFTiA9IDAsCisJQkZBX0xFRF9BTUJFUiA9IDEsCit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19MRURfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19scG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzU5ZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbHBvcnQuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19MUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19MUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3BvcnQuaD4KKworLyoqCisgKiBCRkEgQUVOIGxvZ2ljYWwgcG9ydCBldmVudHMuCisgKiBBcmd1bWVudHMgYmVsb3cgYXJlIGluIEJGQUwgY29udGV4dCBmcm9tIE1nbXQKKyAqIEJGQV9MUE9SVF9BRU5fTkVXOiAgICAgICBbaW5dOiBOb25lICAgICAgICAgW291dF06IHZmX2lkLCBwcHd3biwgbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RFTEVURTogICAgW2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9PTkxJTkU6ICAgIFtpbl06IGxwd3duICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fT0ZGTElORTogICBbaW5dOiBscHd3biAgICAgICAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX0RJU0NPTk5FQ1Q6W2luXTogbHB3d24gICAgICAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ORVdfUFJPUDogIFtpbl06IE5vbmUgICAgICAgICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fREVMRVRFX1BST1A6ICAgICBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05FV19TVEFOREFSRDogICAgW2luXTogTm9uZSAgIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9ERUxFVEVfU1RBTkRBUkQ6IFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqIEJGQV9MUE9SVF9BRU5fTlBJVl9EVVBfV1dOOiAgICBbaW5dOiBscHd3biAgW291dF06IHZmX2lkLCBwcHd3bi4gbHB3d24sIHJvbGVzCisgKiBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWDogW2luXTogbHB3d24gIFtvdXRdOiB2Zl9pZCwgcHB3d24uIGxwd3duLCByb2xlcworICogQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV046ICAgIFtpbl06IGxwd3duICBbb3V0XTogdmZfaWQsIHBwd3duLiBscHd3biwgcm9sZXMKKyAqLworZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IHsKKwlCRkFfTFBPUlRfQUVOX05FVwk9IDEsCS8qICBMUG9ydCBjcmVhdGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ERUxFVEUJPSAyLAkvKiAgTFBvcnQgZGVsZXRlZCBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fT05MSU5FCT0gMywJLyogIExQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9MUE9SVF9BRU5fT0ZGTElORQk9IDQsCS8qICBMUG9ydCBvZmZsaW5lIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ESVNDT05ORUNUID0gNSwJLyogIExQb3J0IGRpc2Nvbm5lY3QgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05FV19QUk9QCT0gNiwJLyogIFZQb3J0IGNyZWF0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX0RFTEVURV9QUk9QID0gNywJLyogIFZQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05FV19TVEFOREFSRCA9IDgsCS8qICBWUG9ydCBjcmVhdGVkIGV2ZW50ICovCisJQkZBX0xQT1JUX0FFTl9ERUxFVEVfU1RBTkRBUkQgPSA5LCAgLyogIFZQb3J0IGRlbGV0ZWQgZXZlbnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfRFVQX1dXTiA9IDEwLCAgICAvKiAgVlBvcnQgY29uZmlndXJlZCB3aXRoCisJCQkJCSAgICAgKiAgIGR1cGxpY2F0ZSBXV04gZXZlbnQKKwkJCQkJCSAqLworCUJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYID0gMTEsIC8qICBNYXggTlBJViBpbiBmYWJyaWMvZnBvcnQgKi8KKwlCRkFfTFBPUlRfQUVOX05QSVZfVU5LTk9XTiA9IDEyLCAvKiAgVW5rbm93biBOUElWIEVycm9yIGNvZGUgZXZlbnQgKi8KK307CisKKy8qKgorICogQkZBIEFFTiBldmVudCBkYXRhIHN0cnVjdHVyZQorICovCitzdHJ1Y3QgYmZhX2xwb3J0X2Flbl9kYXRhX3MgeworCXUxNiAgICAgICAgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXUxNiAgICAgICAgcnN2ZDsKKwllbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXM7CS8qICBMb2dpY2FsIHBvcnQgbW9kZSxJTS9UTS9JUCBldGMgKi8KKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX0xQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbWZnLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19tZmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2ZkNGFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfbWZnLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX0JGQV9ERUZTX01GR19IX18KKyNkZWZpbmUgX19CRkFfREVGU19NRkdfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogTWFudWZhY3R1cmluZyBibG9jayB2ZXJzaW9uCisgKi8KKyNkZWZpbmUgQkZBX01GR19WRVJTSU9OCQkJCTEKKworLyoqCisgKiBNYW51ZmFjdHVyaW5nIGJsb2NrIGZvcm1hdAorICovCisjZGVmaW5lIEJGQV9NRkdfU0VSSUFMTlVNX1NJWkUJCQkxMQorI2RlZmluZSBCRkFfTUZHX1BBUlROVU1fU0laRQkJCTE0CisjZGVmaW5lIEJGQV9NRkdfU1VQUExJRVJfSURfU0laRQkJMTAKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9QQVJUTlVNX1NJWkUJMjAKKyNkZWZpbmUgQkZBX01GR19TVVBQTElFUl9TRVJJQUxOVU1fU0laRQkyMAorI2RlZmluZSBCRkFfTUZHX1NVUFBMSUVSX1JFVklTSU9OX1NJWkUJNAorI2RlZmluZSBTVFJTWihfbikJKCgoX24pICsgNCkgJiB+MykKKworLyoqCisgKiBWUEQgZGF0YSBsZW5ndGgKKyAqLworI2RlZmluZSBCRkFfTUZHX1ZQRF9MRU4gICAgIDI1NgorCisvKioKKyAqIEFsbCBudW1lcmljYWwgZmllbGRzIGFyZSBpbiBiaWctZW5kaWFuIGZvcm1hdC4KKyAqLworc3RydWN0IGJmYV9tZmdfdnBkX3MgeworICAgIHU4ICAgICB2ZXJzaW9uOyAgICAvKiAgdnBkIGRhdGEgdmVyc2lvbiAqLworICAgIHU4ICAgICB2cGRfc2lnWzNdOyAvKiAgY2hhcmFjdGVycyAnVicsICdQJywgJ0QnICovCisgICAgdTggICAgIGNoa3N1bTsgICAgIC8qICB1OCBjaGVja3N1bSAqLworICAgIHU4ICAgICB2ZW5kb3I7ICAgICAvKiAgdmVuZG9yICovCisgICAgdTggICAgIGxlbjsgICAgICAgIC8qICB2cGQgZGF0YSBsZW5ndGggZXhjbHVkaW5nIGhlYWRlciAqLworICAgIHU4ICAgICByc3Y7CisgICAgdTggICAgIGRhdGFbQkZBX01GR19WUERfTEVOXTsgIC8qICB2cGQgZGF0YSAqLworfTsKKworI3ByYWdtYSBwYWNrKDEpCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX01GR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliODMzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BjaS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BDSV9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QQ0lfSF9fCisKKy8qKgorICogUENJIGRldmljZSBhbmQgdmVuZG9yIElEIGluZm9ybWF0aW9uCisgKi8KK2VudW0geworCUJGQV9QQ0lfVkVORE9SX0lEX0JST0NBREUJPSAweDE2NTcsCisJQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcyUAk9IDB4MTMsCisJQkZBX1BDSV9ERVZJQ0VfSURfRkNfOEcxUAk9IDB4MTcsCisJQkZBX1BDSV9ERVZJQ0VfSURfQ1QJCT0gMHgxNCwKK307CisKKy8qKgorICogUENJIHN1Yi1zeXN0ZW0gZGV2aWNlIGFuZCB2ZW5kb3IgSUQgaW5mb3JtYXRpb24KKyAqLworZW51bSB7CisJQkZBX1BDSV9GQ09FX1NTREVWSUNFX0lECT0gMHgxNCwKK307CisKKyNkZWZpbmUgQkZBX1BDSV9BQ0NFU1NfUkFOR0VTIDEJLyogTWF4aW11bSBudW1iZXIgb2YgZGV2aWNlIGFkZHJlc3MgcmFuZ2VzCisJCQkJICogbWFwcGVkIHRocm91Z2ggZGlmZmVyZW50IEJBUihzKS4gKi8KKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BtLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfUE1fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE1fSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKy8qKgorICogQkZBIHBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIHN0YXRlcworICovCitlbnVtIGJmYV9wbV9kcyB7CisJQkZBX1BNX0RTX0QwID0gMCwJLyogIGZ1bGwgcG93ZXIgbW9kZSAqLworCUJGQV9QTV9EU19EMSA9IDEsCS8qICBwb3dlciBzYXZlIHN0YXRlIDEgKi8KKwlCRkFfUE1fRFNfRDIgPSAyLAkvKiAgcG93ZXIgc2F2ZSBzdGF0ZSAyICovCisJQkZBX1BNX0RTX0QzID0gMywJLyogIHBvd2VyIG9mZiBzdGF0ZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb20uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3BvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmEyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb20uaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfUE9NX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1BPTV9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3R5cGVzLmg+CisKKy8qKgorICogUE9NIGhlYWx0aCBzdGF0dXMgbGV2ZWxzIGZvciBlYWNoIGF0dHJpYnV0ZXMuCisgKi8KK2VudW0gYmZhX3BvbV9lbnRyeV9oZWFsdGggeworCUJGQV9QT01fSEVBTFRIX05PSU5GTyAgPSAxLAkvKiAgbm8gaW5mb3JtYXRpb24gKi8KKwlCRkFfUE9NX0hFQUxUSF9OT1JNQUwgID0gMiwJLyogIGhlYWx0aCBpcyBub3JtYWwgKi8KKwlCRkFfUE9NX0hFQUxUSF9XQVJOSU5HID0gMywJLyogIHdhcm5pbmcgbGV2ZWwgKi8KKwlCRkFfUE9NX0hFQUxUSF9BTEFSTSAgID0gNCwJLyogIGFsYXJtaW5nIGxldmVsICovCit9OworCisvKioKKyAqIFJlYWRpbmcgb2YgdGVtcGVyYXR1cmUvdm9sdGFnZS9jdXJyZW50L3Bvd2VyCisgKi8KK3N0cnVjdCBiZmFfcG9tX2VudHJ5X3MgeworCWVudW0gYmZhX3BvbV9lbnRyeV9oZWFsdGggaGVhbHRoOwkvKiAgUE9NIGVudHJ5IGhlYWx0aCAqLworCXUzMiAgICAgICAgY3Vycl92YWx1ZTsJLyogIGN1cnJlbnQgdmFsdWUgKi8KKwl1MzIgICAgICAgIHRocl93YXJuX2hpZ2g7CS8qICB0aHJlc2hvbGQgd2FybmluZyBoaWdoICovCisJdTMyICAgICAgICB0aHJfd2Fybl9sb3c7CS8qICB0aHJlc2hvbGQgd2FybmluZyBsb3cgKi8KKwl1MzIgICAgICAgIHRocl9hbGFybV9sb3c7CS8qICB0aHJlc2hvbGQgYWxhcmFtIGxvdyAqLworCXUzMiAgICAgICAgdGhyX2FsYXJtX2hpZ2g7CS8qICB0aHJlc2hvbGQgYWxhcm0gaGlnaCAqLworfTsKKworLyoqCisgKiBQT00gYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX3BvbV9hdHRyX3MgeworCXN0cnVjdCBiZmFfcG9tX2VudHJ5X3MgdGVtcGVyYXR1cmU7CS8qICBjZW50aWdyYWRlICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB2b2x0YWdlOwkvKiAgdm9sdHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIGN1cnI7CS8qICBtaWxsaSBhbXBzICovCisJc3RydWN0IGJmYV9wb21fZW50cnlfcyB0eHBvd2VyOwkvKiAgbWljcm8gd2F0dHMgKi8KKwlzdHJ1Y3QgYmZhX3BvbV9lbnRyeV9zIHJ4cG93ZXI7CS8qICBtaWNybyB3YXR0cyAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE9NX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDY5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wb3J0LmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX2lvYy5oPgorCisjZGVmaW5lIEJGQV9GQ1NfRkFCUklDX0lQQUREUl9TWiAgMTYKKworLyoqCisgKiBzeW1ib2xpYyBuYW1lcyBmb3IgYmFzZSBwb3J0L3ZpcnR1YWwgcG9ydAorICovCisjZGVmaW5lIEJGQV9TWU1OQU1FX01BWExFTgkxMjgJLyogdm13YXJlL3dpbmRvd3MgdXNlcyAxMjggYnl0ZXMgKi8KK3N0cnVjdCBiZmFfcG9ydF9zeW1uYW1lX3MgeworCWNoYXIgICAgICAgICAgICBzeW1uYW1lW0JGQV9TWU1OQU1FX01BWExFTl07Cit9OworCisvKioKKyogUm9sZXMgb2YgRkNTIHBvcnQ6CisgKiAgICAgLSBGQ1AgSU0gYW5kIEZDUCBUTSByb2xlcyBjYW5ub3QgYmUgZW5hYmxlZCB0b2dldGhlciBmb3IgYSBGQ1MgcG9ydAorICogICAgIC0gQ3JlYXRlIG11bHRpcGxlIHBvcnRzIGlmIGJvdGggSU0gYW5kIFRNIGZ1bmN0aW9ucyByZXF1aXJlZC4KKyAqICAgICAtIEF0bGVhc3Qgb25lIHJvbGUgbXVzdCBiZSBzcGVjaWZpZWQuCisgKi8KK2VudW0gYmZhX3BvcnRfcm9sZSB7CisJQkZBX1BPUlRfUk9MRV9GQ1BfSU0gCT0gMHgwMSwJLyogIEZDUCBpbml0aWF0b3Igcm9sZSAqLworCUJGQV9QT1JUX1JPTEVfRkNQX1RNIAk9IDB4MDIsCS8qICBGQ1AgdGFyZ2V0IHJvbGUgKi8KKwlCRkFfUE9SVF9ST0xFX0ZDUF9JUEZDIAk9IDB4MDQsCS8qICBJUCBvdmVyIEZDIHJvbGUgKi8KKwlCRkFfUE9SVF9ST0xFX0ZDUF9NQVggCT0gQkZBX1BPUlRfUk9MRV9GQ1BfSVBGQyB8IEJGQV9QT1JUX1JPTEVfRkNQX0lNCit9OworCisvKioKKyAqIEZDUyBwb3J0IGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9jZmdfcyB7CisgICAgd3duX3QgICAgICAgICAgICAgICBwd3duOyAgICAgICAvKiAgcG9ydCB3d24gKi8KKyAgICB3d25fdCAgICAgICAgICAgICAgIG53d247ICAgICAgIC8qICBub2RlIHd3biAqLworICAgIHN0cnVjdCBiZmFfcG9ydF9zeW1uYW1lX3MgIHN5bV9uYW1lOyAgIC8qICB2bSBwb3J0IHN5bWJvbGljIG5hbWUgKi8KKyAgICBlbnVtIGJmYV9wb3J0X3JvbGUgICAgIHJvbGVzOyAgICAgIC8qICBGQ1MgcG9ydCByb2xlcyAqLworCXUzMgkJCXJzdmQ7CisgICAgdTggICAgICAgICAgICAgdGFnWzE2XTsJLyogIG9wYXF1ZSB0YWcgZnJvbSBhcHBsaWNhdGlvbiAqLworfTsKKworLyoqCisgKiBGQ1MgcG9ydCBzdGF0ZXMKKyAqLworZW51bSBiZmFfcG9ydF9zdGF0ZSB7CisJQkZBX1BPUlRfVU5JTklUICA9IDAsCS8qICBQT1JUIGlzIG5vdCB5ZXQgaW5pdGlhbGl6ZWQgKi8KKwlCRkFfUE9SVF9GRElTQyAgID0gMSwJLyogIEZESVNDIGlzIGluIHByb2dyZXNzICovCisJQkZBX1BPUlRfT05MSU5FICA9IDIsCS8qICBsb2dpbiB0byBmYWJyaWMgaXMgY29tcGxldGUgKi8KKwlCRkFfUE9SVF9PRkZMSU5FID0gMywJLyogIE5vIGxvZ2luIHRvIGZhYnJpYyAqLworfTsKKworLyoqCisgKiBGQ1MgcG9ydCB0eXBlLiBSZXF1aXJlZCBmb3IgVm1XYXJlLgorICovCitlbnVtIGJmYV9wb3J0X3R5cGUgeworCUJGQV9QT1JUX1RZUEVfUEhZU0lDQUwgPSAwLAorCUJGQV9QT1JUX1RZUEVfVklSVFVBTCwKK307CisKKy8qKgorICogRkNTIHBvcnQgb2ZmbGluZSByZWFzb24uIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK2VudW0gYmZhX3BvcnRfb2ZmbGluZV9yZWFzb24geworCUJGQV9QT1JUX09GRkxJTkVfVU5LTk9XTiA9IDAsCisJQkZBX1BPUlRfT0ZGTElORV9MSU5LRE9XTiwKKwlCRkFfUE9SVF9PRkZMSU5FX0ZBQl9VTlNVUFBPUlRFRCwJLyogIE5QSVYgbm90IHN1cHBvcnRlZCBieSB0aGUKKwkJCQkJCSAqICAgIGZhYnJpYyAqLworCUJGQV9QT1JUX09GRkxJTkVfRkFCX05PUkVTT1VSQ0VTLAorCUJGQV9QT1JUX09GRkxJTkVfRkFCX0xPR09VVCwKK307CisKKy8qKgorICogRkNTIGxwb3J0IGluZm8uIFJlcXVpcmVkIGZvciBWbVdhcmUuCisgKi8KK3N0cnVjdCBiZmFfcG9ydF9pbmZvX3MgeworCXU4ICAgICAgICAgcG9ydF90eXBlOwkvKiBiZmFfcG9ydF90eXBlX3QgOiBwaHlzaWNhbCBvcgorCQkJCQkgKiB2aXJ0dWFsICovCisJdTggICAgICAgICBwb3J0X3N0YXRlOwkvKiBvbmUgb2YgYmZhX3BvcnRfc3RhdGUgdmFsdWVzICovCisJdTggICAgICAgICBvZmZsaW5lX3JlYXNvbjsJLyogb25lIG9mIGJmYV9wb3J0X29mZmxpbmVfcmVhc29uX3QKKwkJCQkJICogdmFsdWVzICovCisJd3duX3QgICAgICAgICAgIHBvcnRfd3duOworCXd3bl90ICAgICAgICAgICBub2RlX3d3bjsKKworCS8qCisJICogZm9sbG93aW5nIDQgZmVpbGRzIGFyZSB2YWxpZCBmb3IgUGh5c2ljYWwgUG9ydHMgb25seQorCSAqLworCXUzMiAgICAgICAgbWF4X3Zwb3J0c19zdXBwOwkvKiBNYXggc3VwcG9ydGVkIHZwb3J0cyAqLworCXUzMiAgICAgICAgbnVtX3Zwb3J0c19pbnVzZTsJLyogTnVtIG9mIGluIHVzZSB2cG9ydHMgKi8KKwl1MzIgICAgICAgIG1heF9ycG9ydHNfc3VwcDsJLyogTWF4IHN1cHBvcnRlZCBycG9ydHMgKi8KKwl1MzIgICAgICAgIG51bV9ycG9ydHNfaW51c2U7CS8qIE51bSBvZiBkb3Njb3ZlcmVkIHJwb3J0cyAqLworCit9OworCisvKioKKyAqIEZDUyBwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgeworCXUzMiAgICAgICAgbnNfcGxvZ2lfc2VudDsKKwl1MzIgICAgICAgIG5zX3Bsb2dpX3JzcF9lcnI7CisJdTMyICAgICAgICBuc19wbG9naV9hY2NfZXJyOworCXUzMiAgICAgICAgbnNfcGxvZ2lfYWNjZXB0czsKKwl1MzIgICAgICAgIG5zX3JlamVjdHM7CS8qIE5TIGNvbW1hbmQgcmVqZWN0cyAqLworCXUzMiAgICAgICAgbnNfcGxvZ2lfdW5rbm93bl9yc3A7CisJdTMyICAgICAgICBuc19wbG9naV9hbGxvY193YWl0OworCisJdTMyICAgICAgICBuc19yZXRyaWVzOwkvKiBOUyBjb21tYW5kIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIG5zX3RpbWVvdXRzOwkvKiBOUyBjb21tYW5kIHRpbWVvdXRzICovCisKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9zZW50OworCXUzMiAgICAgICAgbnNfcnNwbmlkX2FjY2VwdHM7CisJdTMyICAgICAgICBuc19yc3BuaWRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3JzcG5pZF9yZWplY3RzOworCXUzMiAgICAgICAgbnNfcnNwbmlkX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX3JmdGlkX3NlbnQ7CisJdTMyICAgICAgICBuc19yZnRpZF9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfcmZ0aWRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX3JmdGlkX3JlamVjdHM7CisJdTMyICAgICAgICBuc19yZnRpZF9hbGxvY193YWl0OworCisJdTMyCW5zX3JmZmlkX3NlbnQ7CisJdTMyCW5zX3JmZmlkX2FjY2VwdHM7CisJdTMyCW5zX3JmZmlkX3JzcF9lcnI7CisJdTMyCW5zX3JmZmlkX3JlamVjdHM7CisJdTMyCW5zX3JmZmlkX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3NlbnQ7CisJdTMyICAgICAgICBuc19naWRmdF9hY2NlcHRzOworCXUzMiAgICAgICAgbnNfZ2lkZnRfcnNwX2VycjsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X3JlamVjdHM7CisJdTMyICAgICAgICBuc19naWRmdF91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG5zX2dpZGZ0X2FsbG9jX3dhaXQ7CisKKwkvKgorCSAqIE1nbXQgU2VydmVyIHN0YXRzCisJICovCisJdTMyICAgICAgICBtc19yZXRyaWVzOwkvKiBNUyBjb21tYW5kIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIG1zX3RpbWVvdXRzOwkvKiBNUyBjb21tYW5kIHRpbWVvdXRzICovCisJdTMyICAgICAgICBtc19wbG9naV9zZW50OworCXUzMiAgICAgICAgbXNfcGxvZ2lfcnNwX2VycjsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FjY19lcnI7CisJdTMyICAgICAgICBtc19wbG9naV9hY2NlcHRzOworCXUzMiAgICAgICAgbXNfcmVqZWN0czsJLyogTlMgY29tbWFuZCByZWplY3RzICovCisJdTMyICAgICAgICBtc19wbG9naV91bmtub3duX3JzcDsKKwl1MzIgICAgICAgIG1zX3Bsb2dpX2FsbG9jX3dhaXQ7CisKKwl1MzIgICAgICAgIG51bV9yc2NuOwkvKiBOdW0gb2YgUlNDTiByZWNlaXZlZCAqLworCXUzMiAgICAgICAgbnVtX3BvcnRpZF9yc2NuOy8qIE51bSBwb3J0aWQgZm9ybWF0IFJTQ04KKwkJCQkJCQkJKiByZWNlaXZlZCAqLworCisJdTMyCXVmX3JlY3ZzOyAJLyogdW5zb2xpY2l0ZWQgcmVjdiBmcmFtZXMgICAgICAqLworCXUzMgl1Zl9yZWN2X2Ryb3BzOyAJLyogZHJvcHBlZCByZWNlaXZlZCBmcmFtZXMJKi8KKworCXUzMglyc3ZkOyAJCS8qIHBhZGRpbmcgZm9yIDY0IGJpdCBhbGlnbm1lbnQgKi8KK307CisKKy8qKgorICogQkZBIHBvcnQgYXR0cmlidXRlIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV9wb3J0X2F0dHJfcyB7CisJZW51bSBiZmFfcG9ydF9zdGF0ZSBzdGF0ZTsJCS8qICBwb3J0IHN0YXRlICovCisJdTMyICAgICAgICAgcGlkOwkJLyogIHBvcnQgSUQgKi8KKwlzdHJ1Y3QgYmZhX3BvcnRfY2ZnX3MgICBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbiAqLworCWVudW0gYmZhX3Bwb3J0X3R5cGUgcG9ydF90eXBlOwkvKiAgY3VycmVudCB0b3BvbG9neSAqLworCXUzMiAgICAgICAgIGxvb3BiYWNrOwkvKiAgY2FibGUgaXMgZXh0ZXJuYWxseSBsb29wZWQgYmFjayAqLworCXd3bl90CQlmYWJyaWNfbmFtZTsgLyogIGF0dGFjaGVkIHN3aXRjaCdzIG53d24gKi8KKwl1OAkJZmFicmljX2lwX2FkZHJbQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaXTsgLyogIGF0dGFjaGVkCisJCQkJCQkJKiBmYWJyaWMncyBpcCBhZGRyICovCit9OworCisvKioKKyAqIEJGQSBwaHlzaWNhbCBwb3J0IExldmVsIGV2ZW50cworICogQXJndW1lbnRzIGJlbG93IGFyZSBpbiBCRkFMIGNvbnRleHQgZnJvbSBNZ210CisgKiBCRkFfUE9SVF9BRU5fT05MSU5FOiAgICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX09GRkxJTkU6ICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9STElSOiAgICAgICBbaW5dOiBOb25lCVtvdXRdOiBwd3duLCBybGlyX2RhdGEsIHJsaXJfbGVuCisgKiBCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVDogW2luXTogcHd3bglbb3V0XTogcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX1NGUF9SRU1PVkU6IFtpbl06IHB3d24JW291dF06IHBvcnRfaWQsIHB3d24KKyAqIEJGQV9QT1JUX0FFTl9TRlBfUE9NOiAgICBbaW5dOiBwd3duCVtvdXRdOiBsZXZlbCwgcG9ydF9pZCwgcHd3bgorICogQkZBX1BPUlRfQUVOX0VOQUJMRTogICAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9ESVNBQkxFOiAgICBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fQVVUSF9PTjogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0FVVEhfT0ZGOiAgIFtpbl06IHB3d24JW291dF06IHB3d24KKyAqIEJGQV9QT1JUX0FFTl9ESVNDT05ORUNUOiBbaW5dOiBwd3duCVtvdXRdOiBwd3duCisgKiBCRkFfUE9SVF9BRU5fUU9TX05FRzogICAgW2luXTogcHd3bglbb3V0XTogcHd3bgorICogQkZBX1BPUlRfQUVOX0ZBQlJJQ19OQU1FX0NIQU5HRTogW2luXTogcHd3biwgW291dF06IHB3d24sIGZ3d24KKyAqCisgKi8KK2VudW0gYmZhX3BvcnRfYWVuX2V2ZW50IHsKKwlCRkFfUE9SVF9BRU5fT05MSU5FICAgICA9IDEsCS8qICBQaHlzaWNhbCBQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9PRkZMSU5FICAgID0gMiwJLyogIFBoeXNpY2FsIFBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9STElSICAgICAgID0gMywJLyogIFJMSVIgZXZlbnQsIG5vdCBzdXBwb3J0ZWQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX0lOU0VSVCA9IDQsCS8qICBTRlAgaW5zZXJ0ZWQgZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fU0ZQX1JFTU9WRSA9IDUsCS8qICBTRlAgcmVtb3ZlZCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NICAgID0gNiwJLyogIFNGUCBQT00gZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRU5BQkxFICAgICA9IDcsCS8qICBQaHlzaWNhbCBQb3J0IGVuYWJsZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9ESVNBQkxFICAgID0gOCwJLyogIFBoeXNpY2FsIFBvcnQgZGlzYWJsZSBldmVudCAqLworCUJGQV9QT1JUX0FFTl9BVVRIX09OICAgID0gOSwJLyogIFBoeXNpY2FsIFBvcnQgYXV0aCBzdWNjZXNzIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0FVVEhfT0ZGICAgPSAxMCwJLyogIFBoeXNpY2FsIFBvcnQgYXV0aCBmYWlsIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX0RJU0NPTk5FQ1QgPSAxMSwJLyogIFBoeXNpY2FsIFBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9QT1JUX0FFTl9RT1NfTkVHICAgID0gMTIsICAJLyogIEJhc2UgUG9ydCBRT1MgbmVnb3RpYXRpb24gZXZlbnQgKi8KKwlCRkFfUE9SVF9BRU5fRkFCUklDX05BTUVfQ0hBTkdFID0gMTMsIC8qICBGYWJyaWMgTmFtZS9XV04gY2hhbmdlCisJCQkJCSAgICAgICAqIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9BQ0NFU1NfRVJST1IgPSAxNCwgLyogIFNGUCByZWFkIGVycm9yIGV2ZW50ICovCisJQkZBX1BPUlRfQUVOX1NGUF9VTlNVUFBPUlQgPSAxNSwgLyogIFVuc3VwcG9ydGVkIFNGUCBldmVudCAqLworfTsKKworZW51bSBiZmFfcG9ydF9hZW5fc2ZwX3BvbSB7CisJQkZBX1BPUlRfQUVOX1NGUF9QT01fR1JFRU4gPSAxLAkvKiAgTm9ybWFsICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fQU1CRVIgPSAyLAkvKiAgV2FybmluZyAqLworCUJGQV9QT1JUX0FFTl9TRlBfUE9NX1JFRCAgID0gMywJLyogIENyaXRpY2FsICovCisJQkZBX1BPUlRfQUVOX1NGUF9QT01fTUFYICAgPSBCRkFfUE9SVF9BRU5fU0ZQX1BPTV9SRUQKK307CisKK3N0cnVjdCBiZmFfcG9ydF9hZW5fZGF0YV9zIHsKKwllbnVtIGJmYV9pb2NfdHlwZV9lIGlvY190eXBlOworCXd3bl90ICAgICAgICAgICBwd3duOwkgICAgICAvKiAgV1dOIG9mIHRoZSBwaHlzaWNhbCBwb3J0ICovCisJd3duX3QgICAgICAgICAgIGZ3d247CSAgICAgIC8qICBXV04gb2YgdGhlIGZhYnJpYyBwb3J0ICovCisJbWFjX3QgICAgICAgICAgIG1hYzsJICAgICAgLyogIE1BQyBhZGRyZXMgb2YgdGhlIGV0aGVybmV0IHBvcnQsCisJCQkJICAgICAgICogYXBwbGljYWJsZSB0byBDTkEgcG9ydCBvbmx5ICovCisJaW50ICAgICAgICAgICAgIHBoeV9wb3J0X251bTsgLyohIEZvciBTRlAgcmVsYXRlZCBldmVudHMgKi8KKwllbnVtIGJmYV9wb3J0X2Flbl9zZnBfcG9tIGxldmVsOyAvKiAgT25seSB0cmFuc2l0aW9ucyB3aWxsCisJCQkJCSAgKiBiZSBpbmZvcm1lZCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Bwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDBiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc19wcG9ydC5oCkBAIC0wLDAgKzEsMzgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19QUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfREVGU19QUE9SVF9IX18KKworI2luY2x1ZGUgPGJmYV9vc19pbmMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdHlwZXMuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Fvcy5oPgorI2luY2x1ZGUgPGNuYS9wc3RhdHMvcGh5cG9ydF9kZWZzLmg+CisKKy8qIE1vZGlmeSBjaGFyKiBwb3J0X3N0dFtdIGluIGJmYWxfcG9ydC5jIGlmIGEgbmV3IHN0YXRlIHdhcyBhZGRlZCAqLworZW51bSBiZmFfcHBvcnRfc3RhdGVzIHsKKwlCRkFfUFBPUlRfU1RfVU5JTklUIAkJPSAxLAorCUJGQV9QUE9SVF9TVF9FTkFCTElOR19RV0FJVCAJPSAyLAorCUJGQV9QUE9SVF9TVF9FTkFCTElORyAJCT0gMywKKwlCRkFfUFBPUlRfU1RfTElOS0RPV04gCQk9IDQsCisJQkZBX1BQT1JUX1NUX0xJTktVUCAJCT0gNSwKKwlCRkFfUFBPUlRfU1RfRElTQUJMSU5HX1FXQUlUIAk9IDYsCisJQkZBX1BQT1JUX1NUX0RJU0FCTElORwkJPSA3LAorCUJGQV9QUE9SVF9TVF9ESVNBQkxFRCAJCT0gOCwKKwlCRkFfUFBPUlRfU1RfU1RPUFBFRCAJCT0gOSwKKwlCRkFfUFBPUlRfU1RfSU9DRE9XTiAJCT0gMTAsCisJQkZBX1BQT1JUX1NUX0lPQ0RJUyAJCT0gMTEsCisJQkZBX1BQT1JUX1NUX0ZXTUlTTUFUQ0gJCT0gMTIsCisJQkZBX1BQT1JUX1NUX01BWF9TVEFURSwKK307CisKKy8qKgorICogCVBvcnQgc3BlZWQgc2V0dGluZ3MuIEVhY2ggc3BlY2lmaWMgc3BlZWQgaXMgYSBiaXQgZmllbGQuIFVzZSBtdWx0aXBsZQorICogICAgICBiaXRzIHRvIHNwZWNpZnkgc3BlZWRzIHRvIGJlIHNlbGVjdGVkIGZvciBhdXRvLW5lZ290aWF0aW9uLgorICovCitlbnVtIGJmYV9wcG9ydF9zcGVlZCB7CisJQkZBX1BQT1JUX1NQRUVEX1VOS05PV04gPSAwLAorCUJGQV9QUE9SVF9TUEVFRF8xR0JQUyAJPSAxLAorCUJGQV9QUE9SVF9TUEVFRF8yR0JQUyAJPSAyLAorCUJGQV9QUE9SVF9TUEVFRF80R0JQUyAJPSA0LAorCUJGQV9QUE9SVF9TUEVFRF84R0JQUyAJPSA4LAorCUJGQV9QUE9SVF9TUEVFRF8xMEdCUFMgCT0gMTAsCisJQkZBX1BQT1JUX1NQRUVEX0FVVE8gPQorCQkoQkZBX1BQT1JUX1NQRUVEXzFHQlBTIHwgQkZBX1BQT1JUX1NQRUVEXzJHQlBTIHwKKwkJIEJGQV9QUE9SVF9TUEVFRF80R0JQUyB8IEJGQV9QUE9SVF9TUEVFRF84R0JQUyksCit9OworCisvKioKKyAqIAkJUG9ydCBvcGVyYXRpb25hbCB0eXBlIChpbiBzeW5jIHdpdGggU05JQSBwb3J0IHR5cGUpLgorICovCitlbnVtIGJmYV9wcG9ydF90eXBlIHsKKwlCRkFfUFBPUlRfVFlQRV9VTktOT1dOID0gMSwJLyogIHBvcnQgdHlwZSBpcyB1bmtvd24gKi8KKwlCRkFfUFBPUlRfVFlQRV9UUlVOS0VEID0gMiwJLyogIFRydW5rZWQgbW9kZSAqLworCUJGQV9QUE9SVF9UWVBFX05QT1JUICAgPSA1LAkvKiAgUDJQIHdpdGggc3dpdGNoZWQgZmFicmljICovCisJQkZBX1BQT1JUX1RZUEVfTkxQT1JUICA9IDYsCS8qICBwdWJsaWMgbG9vcCAqLworCUJGQV9QUE9SVF9UWVBFX0xQT1JUICAgPSAyMCwJLyogIHByaXZhdGUgbG9vcCAqLworCUJGQV9QUE9SVF9UWVBFX1AyUCAgICAgPSAyMSwJLyogIFAyUCB3aXRoIG5vIHN3aXRjaGVkIGZhYnJpYyAqLworCUJGQV9QUE9SVF9UWVBFX1ZQT1JUICAgPSAyMiwJLyogIE5QSVYgLSB2aXJ0dWFsIHBvcnQgKi8KK307CisKKy8qKgorICogCQlQb3J0IHRvcG9sb2d5IHNldHRpbmcuIEEgcG9ydCdzIHRvcG9sb2d5IGFuZCBmYWJyaWMgbG9naW4gc3RhdHVzCisgKiAJCWRldGVybWluZSBpdHMgb3BlcmF0aW9uYWwgdHlwZS4KKyAqLworZW51bSBiZmFfcHBvcnRfdG9wb2xvZ3kgeworCUJGQV9QUE9SVF9UT1BPTE9HWV9OT05FID0gMCwJLyogIE5vIHZhbGlkIHRvcG9sb2d5ICovCisJQkZBX1BQT1JUX1RPUE9MT0dZX1AyUCAgPSAxLAkvKiAgUDJQIG9ubHkgKi8KKwlCRkFfUFBPUlRfVE9QT0xPR1lfTE9PUCA9IDIsCS8qICBMT09QIHRvcG9sb2d5ICovCisJQkZBX1BQT1JUX1RPUE9MT0dZX0FVVE8gPSAzLAkvKiAgYXV0byB0b3BvbG9neSBzZWxlY3Rpb24gKi8KK307CisKKy8qKgorICogCQlQaHlzaWNhbCBwb3J0IGxvb3BiYWNrIHR5cGVzLgorICovCitlbnVtIGJmYV9wcG9ydF9vcG1vZGUgeworCUJGQV9QUE9SVF9PUE1PREVfTk9STUFMICAgPSAweDAwLCAvKiAgbm9ybWFsIG5vbi1sb29wYmFjayBtb2RlICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9JTlQgICA9IDB4MDEsIC8qICBpbnRlcm5hbCBsb29wIGJhY2sgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX1NMVyAgID0gMHgwMiwgLyogIHNlcmlhbCBsaW5rIHdyYXBiYWNrIChzZXJkZXMpICovCisJQkZBX1BQT1JUX09QTU9ERV9MQl9FWFQgICA9IDB4MDQsIC8qICBleHRlcm5hbCBsb29wIGJhY2sgKHNlcmRlcykgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX0NCTCAgID0gMHgwOCwgLyogIGNhYmxlZCBsb29wIGJhY2sgKi8KKwlCRkFfUFBPUlRfT1BNT0RFX0xCX05MSU5UID0gMHgyMCwgLyogIE5MX1BvcnQgaW50ZXJuYWwgbG9vcGJhY2sgKi8KK307CisKKyNkZWZpbmUgQkZBX1BQT1JUX09QTU9ERV9MQl9IQVJEKF9tb2RlKQkJCVwKKwkoKF9tb2RlID09IEJGQV9QUE9SVF9PUE1PREVfTEJfSU5UKSB8fAkJXAorICAgICAoX21vZGUgPT0gQkZBX1BQT1JUX09QTU9ERV9MQl9TTFcpIHx8CQlcCisgICAgIChfbW9kZSA9PSBCRkFfUFBPUlRfT1BNT0RFX0xCX0VYVCkpCisKKy8qKgorCQlQb3J0IFN0YXRlIChpbiBzeW5jIHdpdGggU05JQSBwb3J0IHN0YXRlKS4KKyAqLworZW51bSBiZmFfcHBvcnRfc25pYV9zdGF0ZSB7CisJQkZBX1BQT1JUX1NUQVRFX1VOS05PV04gID0gMSwJLyogIHBvcnQgaXMgbm90IGluaXRpYWxpemVkICovCisJQkZBX1BQT1JUX1NUQVRFX09OTElORSAgID0gMiwJLyogIHBvcnQgaXMgT05MSU5FICovCisJQkZBX1BQT1JUX1NUQVRFX0RJU0FCTEVEID0gMywJLyogIHBvcnQgaXMgZGlzYWJsZWQgYnkgdXNlciAqLworCUJGQV9QUE9SVF9TVEFURV9CWVBBU1NFRCA9IDQsCS8qICBwb3J0IGlzIGJ5cGFzc2VkIChpbiBMT09QKSAqLworCUJGQV9QUE9SVF9TVEFURV9ESUFHICAgICA9IDUsCS8qICBwb3J0IGRpYWdub3N0aWNzIGlzIGFjdGl2ZSAqLworCUJGQV9QUE9SVF9TVEFURV9MSU5LRE9XTiA9IDYsCS8qICBsaW5rIGlzIGRvd24gKi8KKwlCRkFfUFBPUlRfU1RBVEVfTE9PUEJBQ0sgPSA4LAkvKiAgcG9ydCBpcyBsb29wZWQgYmFjayAqLworfTsKKworLyoqCisgKiAJCVBvcnQgbGluayBzdGF0ZQorICovCitlbnVtIGJmYV9wcG9ydF9saW5rc3RhdGUgeworCUJGQV9QUE9SVF9MSU5LVVAgCSA9IDEsCS8qICBQaHlzaWNhbCBwb3J0L1RydW5rIGxpbmsgdXAgKi8KKwlCRkFfUFBPUlRfTElOS0RPV04gCSA9IDIsCS8qICBQaHlzaWNhbCBwb3J0L1RydW5rIGxpbmsgZG93biAqLworCUJGQV9QUE9SVF9UUlVOS19MSU5LRE9XTiA9IDMsCS8qICBUcnVuayBsaW5rIGRvd24gKG5ldyB0bWFzdGVyKSAqLworfTsKKworLyoqCisgKiAJCVBvcnQgbGluayBzdGF0ZSBldmVudAorICovCisjZGVmaW5lIGJmYV9wcG9ydF9ldmVudF90IGVudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZQorCisvKioKKyAqIAkJUG9ydCBsaW5rIHN0YXRlIHJlYXNvbiBjb2RlCisgKi8KK2VudW0gYmZhX3Bwb3J0X2xpbmtzdGF0ZV9yc24geworCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX05PTkUJCT0gMCwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9ESVNBQkxFRCAJPSAxLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX05PUyAJCT0gMiwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9SWF9PTFMgCQk9IDMsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTElQIAkJPSA0LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1JYX0xJUEY3IAk9IDUsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fU0ZQX1JFTU9WRUQgCT0gNiwKKwlCRkFfUFBPUlRfTElOS1NUQVRFX1JTTl9QT1JUX0ZBVUxUIAk9IDcsCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUlhfTE9TIAkJPSA4LAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX0xPQ0FMX0ZBVUxUIAk9IDksCisJQkZBX1BQT1JUX0xJTktTVEFURV9SU05fUkVNT1RFX0ZBVUxUIAk9IDEwLAorCUJGQV9QUE9SVF9MSU5LU1RBVEVfUlNOX1RJTUVPVVQgCT0gMTEsCisKKworCisJLyogQ0VFIHJlbGF0ZWQgcmVhc29uIGNvZGVzL2Vycm9ycyAqLworCUNFRV9MTERQX0lORk9fQUdFRF9PVVQgICAgICAgPSAyMCwKKwlDRUVfTExEUF9TSFVURE9XTl9UTFZfUkNWRCAgID0gMjEsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9EQ0JYICA9IDIyLAorCUNFRV9QRUVSX05PVF9BRFZFUlRJU0VfUEcgICAgPSAyMywKKwlDRUVfUEVFUl9OT1RfQURWRVJUSVNFX1BGQyAgID0gMjQsCisJQ0VFX1BFRVJfTk9UX0FEVkVSVElTRV9GQ09FICA9IDI1LAorCUNFRV9QR19OT1RfQ09NUEFUSUJMRSAgICAgICAgPSAyNiwKKwlDRUVfUEZDX05PVF9DT01QQVRJQkxFICAgICAgID0gMjcsCisJQ0VFX0ZDT0VfTk9UX0NPTVBBVElCTEUgICAgICA9IDI4LAorCUNFRV9CQURfUEdfUkNWRCAgICAgICAgICAgICAgPSAyOSwKKwlDRUVfQkFEX0JXX1JDVkQgICAgICAgICAgICAgID0gMzAsCisJQ0VFX0JBRF9QRkNfUkNWRCAgICAgICAgICAgICA9IDMxLAorCUNFRV9CQURfRkNPRV9QUklfUkNWRCAgICAgICAgPSAzMiwKKwlDRUVfRkNPRV9QUklfUEZDX09GRiAgICAgICAgID0gMzMsCisJQ0VFX0RVUF9DT05UUk9MX1RMVl9SQ1ZEICAgICA9IDM0LAorCUNFRV9EVVBfRkVBVF9UTFZfUkNWRCAgICAgICAgPSAzNSwKKwlDRUVfQVBQTFlfTkVXX0NGRyAgICAgICAgICAgID0gMzYsCS8qIHJlYXNvbiwgbm90IGFuIGVycm9yICovCisJQ0VFX1BST1RPQ09MX0lOSVQgICAgICAgICAgICA9IDM3LCAgLyogcmVhc29uLCBub3QgYW4gZXJyb3IgKi8KKwlDRUVfUEhZX0xJTktfRE9XTiAgICAgICAgICAgID0gMzgsCisJQ0VFX0xMU19GQ09FX0FCU0VOVCAgICAgICAgICA9IDM5LAorCUNFRV9MTFNfRkNPRV9ET1dOICAgICAgICAgICAgPSA0MAorfTsKKworLyoqCisgKiAgICAgIERlZmF1bHQgVGFyZ2V0IFJhdGUgTGltaXRpbmcgU3BlZWQuCisgKi8KKyNkZWZpbmUgQkZBX1BQT1JUX0RFRl9UUkxfU1BFRUQgIEJGQV9QUE9SVF9TUEVFRF8xR0JQUworCisvKioKKyAqICAgICAgUGh5c2ljYWwgcG9ydCBjb25maWd1cmF0aW9uCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgeworCXU4ICAgICAgICAgdG9wb2xvZ3k7CS8qICBiZmFfcHBvcnRfdG9wb2xvZ3kJCSovCisJdTggICAgICAgICBzcGVlZDsJCS8qICBlbnVtIGJmYV9wcG9ydF9zcGVlZAkqLworCXU4ICAgICAgICAgdHJ1bmtlZDsJLyogIHRydW5rZWQgb3Igbm90CQkqLworCXU4ICAgICAgICAgcW9zX2VuYWJsZWQ7CS8qICBxb3MgZW5hYmxlZCBvciBub3QJCSovCisJdTggICAgICAgICB0cnVua19wb3J0czsJLyogIGJpdG1hcCBvZiB0cnVua2VkIHBvcnRzCSovCisJdTggICAgICAgICBjZmdfaGFyZGFscGE7CS8qICBpcyBoYXJkIGFscGEgY29uZmlndXJlZAkqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplCQkqLworCXU4ICAgICAgICAgaGFyZGFscGE7CS8qICBjb25maWd1cmVkIGhhcmQgYWxwYQkqLworCXU4ICAgICAgICAgcnhfYmJjcmVkaXQ7CS8qICByZWNlaXZlIGJ1ZmZlciBjcmVkaXRzCSovCisJdTggICAgICAgICB0eF9iYmNyZWRpdDsJLyogIHRyYW5zbWl0IGJ1ZmZlciBjcmVkaXRzCSovCisJdTggICAgICAgICByYXRlbGltaXQ7CS8qICByYXRlbGltaXQgZW5hYmxlZCBvciBub3QJKi8KKwl1OCAgICAgICAgIHRybF9kZWZfc3BlZWQ7CS8qICByYXRlbGltaXQgZGVmYXVsdCBzcGVlZAkqLworCXU4CQlyc3ZkWzNdOworCXUxNiAgIAlwYXRoX3RvdjsJLyogIGRldmljZSBwYXRoIHRpbWVvdXQJKi8KKwl1MTYgICAJcV9kZXB0aDsJLyogIFNDU0kgUXVldWUgZGVwdGgJCSovCit9OworCisvKioKKyAqIAkJUG9ydCBhdHRyaWJ1dGUgdmFsdWVzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyB7CisJLyoKKwkgKiBTdGF0aWMgZmllbGRzCisJICovCisJd3duX3QgICAgICAgICAgIG53d247CQkvKiAgbm9kZSB3d24gKi8KKwl3d25fdCAgICAgICAgICAgcHd3bjsJCS8qICBwb3J0IHd3biAqLworCWVudW0gZmNfY29zICAgICBjb3Nfc3VwcG9ydGVkOwkvKiAgc3VwcG9ydGVkIGNsYXNzIG9mIHNlcnZpY2VzICovCisJdTMyICAgICAgICByc3ZkOworCXN0cnVjdCBmY19zeW1uYW1lX3MgICAgcG9ydF9zeW1uYW1lOwkvKiAgcG9ydCBzeW1ib2xpYyBuYW1lICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgc3BlZWRfc3VwcG9ydGVkOyAvKiAgc3VwcG9ydGVkIHNwZWVkcyAqLworCWJmYV9ib29sZWFuX3QgICBwYmluZF9lbmFibGVkOwkvKiAgV2lsbCBiZSBzZXQgaWYgUGVyc2lzdGVudCBiaW5kaW5nCisJCQkJCSAqICAgZW5hYmxlZC4gUmVsZXZhbnQgb25seSBpbiBXaW5kb3dzCisJCQkJCSAqLworCisJLyoKKwkgKiBDb25maWd1cmVkIHZhbHVlcworCSAqLworCXN0cnVjdCBiZmFfcHBvcnRfY2ZnX3MgcHBvcnRfY2ZnOwkvKiAgcHBvcnQgY2ZnICovCisKKwkvKgorCSAqIER5bmFtaWMgZmllbGQgLSBpbmZvIGZyb20gQkZBCisJICovCisJZW51bSBiZmFfcHBvcnRfc3RhdGVzIAlwb3J0X3N0YXRlOwkvKiAgY3VycmVudCBwb3J0IHN0YXRlICovCisJZW51bSBiZmFfcHBvcnRfc3BlZWQgCXNwZWVkOwkJLyogIGN1cnJlbnQgc3BlZWQgKi8KKwllbnVtIGJmYV9wcG9ydF90b3BvbG9neSAJdG9wb2xvZ3k7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJYmZhX2Jvb2xlYW5fdAkJYmVhY29uOwkJLyogIGN1cnJlbnQgYmVhY29uIHN0YXR1cyAqLworCWJmYV9ib29sZWFuX3QJCWxpbmtfZTJlX2JlYWNvbjsvKiAgc2V0IGlmIGxpbmsgYmVhY29uIG9uICovCisJYmZhX2Jvb2xlYW5fdAkJcGxvZ19lbmFibGVkOwkvKiAgc2V0IGlmIHBvcnRsb2cgaXMgZW5hYmxlZCovCisKKwkvKgorCSAqIER5bmFtaWMgZmllbGQgLSBpbmZvIGZyb20gRkNTCisJICovCisJdTMyICAgICAgICAJcGlkOwkJLyogIHBvcnQgSUQgKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIAlwb3J0X3R5cGU7CS8qICBjdXJyZW50IHRvcG9sb2d5ICovCisJdTMyICAgICAgICAJbG9vcGJhY2s7CS8qICBleHRlcm5hbCBsb29wYmFjayAqLworCXUzMgkJcnN2ZDE7CisJdTMyCQlyc3ZkMjsJCS8qICBwYWRkaW5nIGZvciA2NCBiaXQgKi8KK307CisKKy8qKgorICogCQlGQyBQb3J0IHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCBiZmFfcHBvcnRfZmNfc3RhdHNfcyB7CisJdTY0ICAgICAgICBzZWNzX3Jlc2V0OwkvKiAgc2Vjb25kcyBzaW5jZSBzdGF0cyBpcyByZXNldCAqLworCXU2NCAgICAgICAgdHhfZnJhbWVzOwkvKiAgdHJhbnNtaXR0ZWQgZnJhbWVzICovCisJdTY0ICAgICAgICB0eF93b3JkczsJLyogIHRyYW5zbWl0dGVkIHdvcmRzICovCisJdTY0ICAgICAgICByeF9mcmFtZXM7CS8qICByZWNlaXZlZCBmcmFtZXMgKi8KKwl1NjQgICAgICAgIHJ4X3dvcmRzOwkvKiAgcmVjZWl2ZWQgd29yZHMgKi8KKwl1NjQgICAgICAgIGxpcF9jb3VudDsJLyogIExJUHMgc2VlbiAqLworCXU2NCAgICAgICAgbm9zX2NvdW50OwkvKiAgTk9TIGNvdW50ICovCisJdTY0ICAgICAgICBlcnJvcl9mcmFtZXM7CS8qICBlcnJvcmVkIGZyYW1lcyAoc2VudD8pICovCisJdTY0ICAgICAgICBkcm9wcGVkX2ZyYW1lczsJLyogIGRyb3BwZWQgZnJhbWVzICovCisJdTY0ICAgICAgICBsaW5rX2ZhaWx1cmVzOwkvKiAgbGluayBmYWlsdXJlIGNvdW50ICovCisJdTY0ICAgICAgICBsb3NzX29mX3N5bmNzOwkvKiAgbG9zcyBvZiBzeW5jIGNvdW50ICovCisJdTY0ICAgICAgICBsb3NzX29mX3NpZ25hbHM7LyogIGxvc3Mgb2Ygc2lnbmFsIGNvdW50ICovCisJdTY0ICAgICAgICBwcmltc2VxX2VycnM7CS8qICBwcmltaXRpdmUgc2VxdWVuY2UgcHJvdG9jb2wgKi8KKwl1NjQgICAgICAgIGJhZF9vc19jb3VudDsJLyogIGludmFsaWQgb3JkZXJlZCBzZXQgKi8KKwl1NjQgICAgICAgIGVycl9lbmNfb3V0OwkvKiAgRW5jb2RpbmcgZXJyb3Igb3V0c2lkZSBmcmFtZSAqLworCXU2NCAgICAgICAgaW52YWxpZF9jcmNzOwkvKiAgZnJhbWVzIHJlY2VpdmVkIHdpdGggaW52YWxpZCBDUkMqLworCXU2NAl1bmRlcnNpemVkX2ZybTsgLyogIHVuZGVyc2l6ZWQgZnJhbWVzICovCisJdTY0CW92ZXJzaXplZF9mcm07CS8qICBvdmVyc2l6ZWQgZnJhbWVzICovCisJdTY0CWJhZF9lb2ZfZnJtOwkvKiAgZnJhbWVzIHdpdGggYmFkIEVPRiAqLworCXN0cnVjdCBiZmFfcW9zX3N0YXRzX3MJcW9zX3N0YXRzOwkvKiAgUW9TIHN0YXRpc3RpY3MgKi8KK307CisKKy8qKgorICogCQlFdGggUG9ydCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2V0aF9zdGF0c19zIHsKKwl1NjQJc2Vjc19yZXNldDsJLyogIHNlY29uZHMgc2luY2Ugc3RhdHMgaXMgcmVzZXQgKi8KKwl1NjQJZnJhbWVfNjQ7ICAgICAgLyogIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfNjVfMTI3OyAgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTI4XzI1NTsgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMjU2XzUxMTsgICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfNTEyXzEwMjM7ICAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTAyNF8xNTE4OyAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKwl1NjQJZnJhbWVfMTUxOV8xNTIyOyAgIC8qIGJvdGggcnggYW5kIHR4IGNvdW50ZXIgKi8KKworCXU2NAl0eF9ieXRlczsKKwl1NjQJdHhfcGFja2V0czsKKwl1NjQJdHhfbWNhc3RfcGFja2V0czsKKwl1NjQJdHhfYmNhc3RfcGFja2V0czsKKwl1NjQJdHhfY29udHJvbF9mcmFtZTsKKwl1NjQJdHhfZHJvcDsKKwl1NjQJdHhfamFiYmVyOworCXU2NAl0eF9mY3NfZXJyb3I7CisJdTY0CXR4X2ZyYWdtZW50czsKKworCXU2NAlyeF9ieXRlczsKKwl1NjQJcnhfcGFja2V0czsKKwl1NjQJcnhfbWNhc3RfcGFja2V0czsKKwl1NjQJcnhfYmNhc3RfcGFja2V0czsKKwl1NjQJcnhfY29udHJvbF9mcmFtZXM7CisJdTY0CXJ4X3Vua25vd25fb3Bjb2RlOworCXU2NAlyeF9kcm9wOworCXU2NAlyeF9qYWJiZXI7CisJdTY0CXJ4X2Zjc19lcnJvcjsKKwl1NjQJcnhfYWxpZ25tZW50X2Vycm9yOworCXU2NAlyeF9mcmFtZV9sZW5ndGhfZXJyb3I7CisJdTY0CXJ4X2NvZGVfZXJyb3I7CisJdTY0CXJ4X2ZyYWdtZW50czsKKworCXU2NAlyeF9wYXVzZTsgLyogQlBDICovCisJdTY0CXJ4X3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCisJdTY0CXR4X3BhdXNlOyAgICAgIC8qIEJQQyAqLworCXU2NAl0eF96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NAlyeF9mY29lX3BhdXNlOyAvKiBCUEMgKi8KKwl1NjQJcnhfZmNvZV96ZXJvX3BhdXNlOyAvKiAgQlBDIFBhdXNlIGNhbmNlbGxhdGlvbiAqLworCXU2NAl0eF9mY29lX3BhdXNlOyAgICAgIC8qIEJQQyAqLworCXU2NAl0eF9mY29lX3plcm9fcGF1c2U7IC8qICBCUEMgUGF1c2UgY2FuY2VsbGF0aW9uICovCit9OworCisvKioKKyAqIAkJUG9ydCBzdGF0aXN0aWNzLgorICovCit1bmlvbiBiZmFfcHBvcnRfc3RhdHNfdSB7CisJc3RydWN0IGJmYV9wcG9ydF9mY19zdGF0c19zCWZjOworCXN0cnVjdCBiZmFfcHBvcnRfZXRoX3N0YXRzX3MgCWV0aDsKK307CisKKy8qKgorICogICAgICAgICAgICAgIFBvcnQgRkNQIG1hcHBpbmdzLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X2ZjcG1hcF9zIHsKKwljaGFyCQlvc2Rldm5hbWVbMjU2XTsKKwl1MzIJYnVzOworCXUzMiAgICAgICAgdGFyZ2V0OworCXUzMiAgICAgICAgb3NsdW47CisJdTMyICAgICAgICBmY2lkOworCXd3bl90ICAgICAgICAgICBud3duOworCXd3bl90ICAgICAgICAgICBwd3duOworCXU2NCAgICAgICAgZmNwbHVuOworCWNoYXIJCWx1aWRbMjU2XTsKK307CisKKy8qKgorICogICAgICAgICAgICAgIFBvcnQgUk5JRCBpbmZvLgorICovCitzdHJ1Y3QgYmZhX3Bwb3J0X3JuaWRfcyB7CisJd3duX3QgICAgICAgICAgICAgd3duOworCXUzMiAgICAgICAgICB1bml0dHlwZTsKKwl1MzIgICAgICAgICAgcG9ydGlkOworCXUzMiAgICAgICAgICBhdHRhY2hlZF9ub2Rlc19udW07CisJdTE2ICAgICAgICAgIGlwX3ZlcnNpb247CisJdTE2ICAgICAgICAgIHVkcF9wb3J0OworCXU4ICAgICAgICAgICBpcGFkZHJbMTZdOworCXUxNiAgICAgICAgICByc3ZkOworCXUxNiAgICAgICAgICB0b3BvbG9neWRpc2NvdmVyeWZsYWdzOworfTsKKworLyoqCisgKiAJCUxpbmsgc3RhdGUgaW5mb3JtYXRpb24KKyAqLworc3RydWN0IGJmYV9wcG9ydF9saW5rX3MgeworCXU4ICAgICAgICAgbGlua3N0YXRlOwkvKiAgTGluayBzdGF0ZSBiZmFfcHBvcnRfbGlua3N0YXRlICovCisJdTggICAgICAgICBsaW5rc3RhdGVfcnNuOwkvKiAgYmZhX3Bwb3J0X2xpbmtzdGF0ZV9yc25fdCAqLworCXU4ICAgICAgICAgdG9wb2xvZ3k7CS8qICBQMlAvTE9PUCBiZmFfcHBvcnRfdG9wb2xvZ3kgKi8KKwl1OCAgICAgICAgIHNwZWVkOwkJLyogIExpbmsgc3BlZWQgKDEvMi80LzggRykgKi8KKwl1MzIgICAgICAgIGxpbmtzdGF0ZV9vcHQ7CS8qICBMaW5rc3RhdGUgb3B0aW9uYWwgZGF0YSAoZGVidWcpICovCisJdTggICAgICAgICB0cnVua2VkOwkvKiAgVHJ1bmtlZCBvciBub3QgKDEgb3IgMCkgKi8KKwl1OCAgICAgICAgIHJlc3ZkWzNdOworCXN0cnVjdCBiZmFfcW9zX2F0dHJfcyAgcW9zX2F0dHI7ICAgLyogUW9TIEF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgYmZhX3Fvc192Y19hdHRyX3MgcW9zX3ZjX2F0dHI7ICAvKiAgVkMgaW5mbyBmcm9tIEVMUCAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU4ICAgICAgICAgdG1hc3RlcjsvKiAgVHJ1bmsgTWFzdGVyIG9yCisJCQkJCQkgKiAgICBub3QgKDEgb3IgMCkgKi8KKwkJCXU4ICAgICAgICAgdGxpbmtzOwkvKiAgVHJ1bmsgbGlua3MgYml0bWFwCisJCQkJCQkgKiAgICAobGlua3VwKSAqLworCQkJdTggICAgICAgICByZXN2MTsJLyogIFJlc2VydmVkICovCisJCX0gdHJ1bmtfaW5mbzsKKworCQlzdHJ1Y3QgeworCQkJdTggICAgICAgICBteWFscGE7CSAgIC8qICBhbHBhIGNsYWltZWQgKi8KKwkJCXU4ICAgICAgICAgbG9naW5fcmVxOyAvKiAgTG9naW4gcmVxdWlyZWQgb3IKKwkJCQkJCSAgICAqICAgIG5vdCAoMSBvciAwKSAqLworCQkJdTggICAgICAgICBhbHBhYm1fdmFsOy8qICBhbHBhIGJpdG1hcCB2YWxpZAorCQkJCQkJICAgICogICAgb3Igbm90ICgxIG9yIDApICovCisJCQlzdHJ1Y3QgZmNfYWxwYWJtX3MgICAgIGFscGFibTsJICAgLyogIGFscGEgYml0bWFwICovCisJCX0gbG9vcF9pbmZvOworCX0gdGw7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19QUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Fvcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkYmFjZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Fvcy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1FPU19IX18KKyNkZWZpbmUgX19CRkFfREVGU19RT1NfSF9fCisKKy8qKgorICogUW9TIHN0YXRlcworICovCitlbnVtIGJmYV9xb3Nfc3RhdGUgeworCUJGQV9RT1NfT05MSU5FID0gMSwJCS8qICBRb1MgaXMgb25saW5lICovCisJQkZBX1FPU19PRkZMSU5FID0gMiwJCS8qICBRb1MgaXMgb2ZmbGluZSAqLworfTsKKworCisvKioKKyAqIFFvUyAgUHJpb3JpdHkgbGV2ZWxzLgorICovCitlbnVtIGJmYV9xb3NfcHJpb3JpdHkgeworCUJGQV9RT1NfVU5LTk9XTiA9IDAsCisJQkZBX1FPU19ISUdIICA9IDEsCS8qICBRb1MgUHJpb3JpdHkgTGV2ZWwgSGlnaCAqLworCUJGQV9RT1NfTUVEICA9ICAyLAkvKiAgUW9TIFByaW9yaXR5IExldmVsIE1lZGl1bSAqLworCUJGQV9RT1NfTE9XICA9ICAzLAkvKiAgUW9TIFByaW9yaXR5IExldmVsIExvdyAqLworfTsKKworCisvKioKKyAqIFFvUyAgYmFuZHdpZHRoIGFsbG9jYXRpb24gZm9yIGVhY2ggcHJpb3JpdHkgbGV2ZWwKKyAqLworZW51bSBiZmFfcW9zX2J3X2FsbG9jIHsKKwlCRkFfUU9TX0JXX0hJR0ggID0gNjAsCS8qICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgSGlnaCAqLworCUJGQV9RT1NfQldfTUVEICA9ICAzMCwJLyogIGJhbmR3aWR0aCBhbGxvY2F0aW9uIGZvciBNZWRpdW0gKi8KKwlCRkFfUU9TX0JXX0xPVyAgPSAgMTAsCS8qICBiYW5kd2lkdGggYWxsb2NhdGlvbiBmb3IgTG93ICovCit9OworCisvKioKKyAqIFFvUyBhdHRyaWJ1dGUgcmV0dXJuZWQgaW4gUW9TIFF1ZXJ5CisgKi8KK3N0cnVjdCBiZmFfcW9zX2F0dHJfcyB7CisJZW51bSBiZmFfcW9zX3N0YXRlIHN0YXRlOwkJLyogIFFvUyBjdXJyZW50IHN0YXRlICovCisJdTMyICB0b3RhbF9iYl9jcjsgIAkgCS8qICBUb3RhbCBCQiBDcmVkaXRzICovCit9OworCisvKioKKyAqIFRoZXNlIGZpZWxkcyBzaG91bGQgYmUgZGlzcGxheWVkIG9ubHkgZnJvbSB0aGUgQ0xJLgorICogVGhlcmUgd2lsbCBiZSBhIHNlcGFyYXRlIEJGQUwgQVBJIChnZXRfcW9zX3ZjX2F0dHIgPykKKyAqIHRvIHJldHJpZXZlIHRoaXMuCisgKgorICovCisjZGVmaW5lICBCRkFfUU9TX01BWF9WQyAgMTYKKworc3RydWN0IGJmYV9xb3NfdmNfaW5mb19zIHsKKwl1OCB2Y19jcmVkaXQ7CisJdTggYm9ycm93X2NyZWRpdDsKKwl1OCBwcmlvcml0eTsKKwl1OCByZXN2ZDsKK307CisKK3N0cnVjdCBiZmFfcW9zX3ZjX2F0dHJfcyB7CisJdTE2ICB0b3RhbF92Y19jb3VudDsgICAgICAgICAgICAgICAgICAgIC8qICBUb3RhbCBWQyBDb3VudCAqLworCXUxNiAgc2hhcmVkX2NyZWRpdDsKKwl1MzIgIGVscF9vcG1vZGVfZmxhZ3M7CisJc3RydWN0IGJmYV9xb3NfdmNfaW5mb19zIHZjX2luZm9bQkZBX1FPU19NQVhfVkNdOyAgLyogICBhcyBtYW55IGFzCisJCQkJCQkJICAgICogdG90YWxfdmNfY291bnQgKi8KK307CisKKy8qKgorICogUW9TIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV9xb3Nfc3RhdHNfcyB7CisJdTMyCWZsb2dpX3NlbnQ7IAkJLyogIFFvUyBGbG9naSBzZW50ICovCisJdTMyCWZsb2dpX2FjY19yZWN2ZDsJLyogIFFvUyBGbG9naSBBY2MgcmVjZWl2ZWQgKi8KKwl1MzIJZmxvZ2lfcmp0X3JlY3ZkOyAvKiAgUW9TIEZsb2dpIHJlamVjdHMgcmVjZWl2ZWQgKi8KKwl1MzIJZmxvZ2lfcmV0cmllczsJCS8qICBRb1MgRmxvZ2kgcmV0cmllcyAqLworCisJdTMyCWVscF9yZWN2ZDsgCSAgIAkvKiAgUW9TIEVMUCByZWNlaXZlZCAqLworCXUzMgllbHBfYWNjZXB0ZWQ7ICAgICAgIC8qICBRb1MgRUxQIEFjY2VwdGVkICovCisJdTMyCWVscF9yZWplY3RlZDsgICAgICAgLyogIFFvUyBFTFAgcmVqZWN0ZWQgKi8KKwl1MzIJZWxwX2Ryb3BwZWQ7ICAgICAgICAvKiAgUW9TIEVMUCBkcm9wcGVkICAqLworCisJdTMyCXFvc19yc2NuX3JlY3ZkOyAgICAgLyogIFFvUyBSU0NOIHJlY2VpdmVkICovCisJdTMyCXJzdmQ7IAkJLyogcGFkZGluZyBmb3IgNjQgYml0IGFsaWdubWVudCAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0RFRlNfUU9TX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfcnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Jwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZjU5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Jwb3J0LmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1JQT1JUX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcW9zLmg+CisKKy8qKgorICogRkNTIHJlbW90ZSBwb3J0IHN0YXRlcworICovCitlbnVtIGJmYV9ycG9ydF9zdGF0ZSB7CisJQkZBX1JQT1JUX1VOSU5JVCAJPSAwLAkvKiAgUE9SVCBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX1JQT1JUX09GRkxJTkUgCT0gMSwJLyogIHJwb3J0IGlzIG9mZmxpbmUgKi8KKwlCRkFfUlBPUlRfUExPR0kgCT0gMiwJLyogIFBMT0dJIHRvIHJwb3J0IGlzIGluIHByb2dyZXNzICovCisJQkZBX1JQT1JUX09OTElORSAJPSAzLAkvKiAgbG9naW4gdG8gcnBvcnQgaXMgY29tcGxldGUgKi8KKwlCRkFfUlBPUlRfUExPR0lfUkVUUlkgCT0gNCwJLyogIHJldHJ5aW5nIGxvZ2luIHRvIHJwb3J0ICovCisJQkZBX1JQT1JUX05TUVVFUlkgCT0gNSwJLyogIG5hbWVzZXJ2ZXIgcXVlcnkgKi8KKwlCRkFfUlBPUlRfQURJU0MgCT0gNiwJLyogIEFESVNDIGF1dGhlbnRpY2F0aW9uICovCisJQkZBX1JQT1JUX0xPR08gCQk9IDcsCS8qICBsb2dnaW5nIG91dCB3aXRoIHJwb3J0ICovCisJQkZBX1JQT1JUX0xPR09SQ1YgCT0gOCwJLyogIGhhbmRsaW5nIExPR08gZnJvbSBycG9ydCAqLworCUJGQV9SUE9SVF9OU0RJU0MgCT0gOSwJLyogIHJlLWRpc2NvdmVyIHJwb3J0ICovCit9OworCisvKioKKyAqICBScG9ydCBTY3NpIEZ1bmN0aW9uIDogSW5pdGlhdG9yL1RhcmdldC4KKyAqLworZW51bSBiZmFfcnBvcnRfZnVuY3Rpb24geworCUJGQV9SUE9SVF9JTklUSUFUT1IgCT0gMHgwMSwJLyogIFNDU0kgSW5pdGlhdG9yCSovCisJQkZBX1JQT1JUX1RBUkdFVCAJPSAweDAyLAkvKiAgU0NTSSBUYXJnZXQJKi8KK307CisKKy8qKgorICogcG9ydC9ub2RlIHN5bWJvbGljIG5hbWVzIGZvciBycG9ydAorICovCisjZGVmaW5lIEJGQV9SUE9SVF9TWU1OQU1FX01BWExFTgkyNTUKK3N0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHsKKwljaGFyICAgICAgICAgICAgc3ltbmFtZVtCRkFfUlBPUlRfU1lNTkFNRV9NQVhMRU5dOworfTsKKworc3RydWN0IGJmYV9ycG9ydF9oYWxfc3RhdHNfcyB7CisJdTMyICAgICAgICBzbV91bl9jcjsJICAgIC8qICB1bmluaXQ6IGNyZWF0ZSBldmVudHMgICAgICAqLworCXUzMiAgICAgICAgc21fdW5fdW5leHA7CSAgICAvKiAgdW5pbml0OiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX29uOwkgICAgLyogIGNyZWF0ZWQ6IG9ubGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9jcl9kZWw7CSAgICAvKiAgY3JlYXRlZDogZGVsZXRlIGV2ZW50cyAgICAgKi8KKwl1MzIgICAgICAgIHNtX2NyX2h3ZjsJICAgIC8qICBjcmVhdGVkOiBJT0MgZG93biAgICAgICAgICAqLworCXUzMiAgICAgICAgc21fY3JfdW5leHA7CSAgICAvKiAgY3JlYXRlZDogZXhjZXB0aW9uIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19yc3A7CSAgICAvKiAgZncgY3JlYXRlOiBmL3cgcmVzcG9uc2VzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19kZWw7CSAgICAvKiAgZncgY3JlYXRlOiBkZWxldGUgZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19vZmY7CSAgICAvKiAgZncgY3JlYXRlOiBvZmZsaW5lIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y19od2Y7CSAgICAvKiAgZncgY3JlYXRlOiBJT0MgZG93biAgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3Y191bmV4cDsJICAgIC8qICBmdyBjcmVhdGU6IGV4Y2VwdGlvbiBldmVudHMqLworCXUzMiAgICAgICAgc21fb25fb2ZmOwkgICAgLyogIG9ubGluZTogb2ZmbGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vbl9kZWw7CSAgICAvKiAgb25saW5lOiBkZWxldGUgZXZlbnRzICAgICAgKi8KKwl1MzIgICAgICAgIHNtX29uX2h3ZjsJICAgIC8qICBvbmxpbmU6IElPQyBkb3duIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21fb25fdW5leHA7CSAgICAvKiAgb25saW5lOiBleGNlcHRpb24gZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9yc3A7CSAgICAvKiAgZncgZGVsZXRlOiBmdyByZXNwb25zZXMgICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9kZWw7CSAgICAvKiAgZncgZGVsZXRlOiBkZWxldGUgZXZlbnRzICAgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF9od2Y7CSAgICAvKiAgZncgZGVsZXRlOiBJT0MgZG93biBldmVudHMgKi8KKwl1MzIgICAgICAgIHNtX2Z3ZF91bmV4cDsJICAgIC8qICBmdyBkZWxldGU6IGV4Y2VwdGlvbiBldmVudHMqLworCXUzMiAgICAgICAgc21fb2ZmX2RlbDsJICAgIC8qICBvZmZsaW5lOiBkZWxldGUgZXZlbnRzICAgICAqLworCXUzMiAgICAgICAgc21fb2ZmX29uOwkgICAgLyogIG9mZmxpbmU6IG9ubGluZSBldmVudHMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZfaHdmOwkgICAgLyogIG9mZmxpbmU6IElPQyBkb3duIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9vZmZfdW5leHA7CSAgICAvKiAgb2ZmbGluZTogZXhjZXB0aW9uIGV2ZW50cyAgKi8KKwl1MzIgICAgICAgIHNtX2RlbF9md3JzcDsJICAgIC8qICBkZWxldGU6IGZ3IHJlc3BvbnNlcyAgICAgICAqLworCXUzMiAgICAgICAgc21fZGVsX2h3ZjsJICAgIC8qICBkZWxldGU6IElPQyBkb3duIGV2ZW50cyAgICAqLworCXUzMiAgICAgICAgc21fZGVsX3VuZXhwOwkgICAgLyogIGRlbGV0ZTogZXhjZXB0aW9uIGV2ZW50cyAgICovCisJdTMyICAgICAgICBzbV9kZWxwX2Z3cnNwOwkgICAgLyogIGRlbGV0ZSBwZW5kOiBmdyByZXNwb25zZXMgICovCisJdTMyICAgICAgICBzbV9kZWxwX2h3ZjsJICAgIC8qICBkZWxldGUgcGVuZDogSU9DIGRvd25zICAgICAqLworCXUzMiAgICAgICAgc21fZGVscF91bmV4cDsJICAgIC8qICBkZWxldGUgcGVuZDogZXhjZXB0aW9ucyAgICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9md3JzcDsJICAgIC8qICBvZmYtcGVuZGluZzogZncgcmVzcG9uc2VzICAqLworCXUzMiAgICAgICAgc21fb2ZmcF9kZWw7CSAgICAvKiAgb2ZmLXBlbmRpbmc6IGRlbGV0ZXMgICAgICAgKi8KKwl1MzIgICAgICAgIHNtX29mZnBfaHdmOwkgICAgLyogIG9mZi1wZW5kaW5nOiBJT0MgZG93bnMgICAgICovCisJdTMyICAgICAgICBzbV9vZmZwX3VuZXhwOwkgICAgLyogIG9mZi1wZW5kaW5nOiBleGNlcHRpb25zICAgICovCisJdTMyICAgICAgICBzbV9pb2NkX29mZjsJICAgIC8qICBJT0MgZG93bjogb2ZmbGluZSBldmVudHMgICAqLworCXUzMiAgICAgICAgc21faW9jZF9kZWw7CSAgICAvKiAgSU9DIGRvd246IGRlbGV0ZSBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2Rfb247CSAgICAvKiAgSU9DIGRvd246IG9ubGluZSBldmVudHMgICAgKi8KKwl1MzIgICAgICAgIHNtX2lvY2RfdW5leHA7CSAgICAvKiAgSU9DIGRvd246IGV4Y2VwdGlvbnMgICAgICAgKi8KKwl1MzIgICAgICAgIHJzdmQ7Cit9OworCisvKioKKyAqIEZDUyByZW1vdGUgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyB7CisJdTMyICAgICAgICBvZmZsaW5lczsgICAgICAgICAgIC8qICByZW1vdGUgcG9ydCBvZmZsaW5lIGNvdW50ICAqLworCXUzMiAgICAgICAgb25saW5lczsgICAgICAgICAgICAvKiAgcmVtb3RlIHBvcnQgb25saW5lIGNvdW50ICAgKi8KKwl1MzIgICAgICAgIHJzY25zOyAgICAgICAgICAgICAgLyogIFJTQ04gYWZmZWN0aW5nIHJwb3J0ICAgICAgICovCisJdTMyICAgICAgICBwbG9naXM7CQkgICAgLyogIHBsb2dpcyBzZW50ICAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9hY2NzOwkgICAgLyogIHBsb2dpIGFjY2VwdHMgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV90aW1lb3V0czsJICAgIC8qICBwbG9naSB0aW1lb3V0cyAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfcmVqZWN0czsJICAgIC8qICByY3ZkIHBsb2dpIHJlamVjdHMgICAgICAgICAqLworCXUzMiAgICAgICAgcGxvZ2lfZmFpbGVkOwkgICAgLyogIGxvY2FsIGZhaWx1cmUgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwbG9naV9yY3ZkOwkgICAgLyogIHBsb2dpcyByY3ZkICAgICAgICAgICAgICAgICovCisJdTMyICAgICAgICBwcmxpX3JjdmQ7ICAgICAgICAgIC8qICBpbmJvdW5kIFBSTElzICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfcmN2ZDsgICAgICAgICAvKiAgQURJU0NzIHJlY2VpdmVkICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX3JlamVjdHM7ICAgICAgLyogIHJlY3ZkICBBRElTQyByZWplY3RzICAgICAgICovCisJdTMyICAgICAgICBhZGlzY19zZW50OyAgICAgICAgIC8qICBBRElTQyByZXF1ZXN0cyBzZW50ICAgICAgICAqLworCXUzMiAgICAgICAgYWRpc2NfYWNjczsgICAgICAgICAvKiAgQURJU0MgYWNjZXB0ZWQgYnkgcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGFkaXNjX2ZhaWxlZDsgICAgICAgLyogIEFESVNDIGZhaWxlZCAobm8gcmVzcG9uc2UpICovCisJdTMyICAgICAgICBhZGlzY19yZWplY3RlZDsgICAgIC8qICBBRElTQyByZWplY3RlZCBieSB1cyAgICAqLworCXUzMiAgICAgICAgbG9nb3M7ICAgICAgICAgICAgICAvKiAgbG9nb3Mgc2VudCAgICAgICAgICAgICAgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fYWNjczsgICAgICAgICAgLyogIExPR08gYWNjZXB0cyBmcm9tIHJwb3J0ICAgICovCisJdTMyICAgICAgICBsb2dvX2ZhaWxlZDsgICAgICAgIC8qICBMT0dPIGZhaWx1cmVzICAgICAgICAgICAgICAqLworCXUzMiAgICAgICAgbG9nb19yZWplY3RlZDsgICAgICAvKiAgTE9HTyByZWplY3RzIGZyb20gcnBvcnQgICAgKi8KKwl1MzIgICAgICAgIGxvZ29fcmN2ZDsgICAgICAgICAgLyogIExPR08gZnJvbSByZW1vdGUgcG9ydCAgICAgICovCisKKwl1MzIgICAgICAgIHJwc2NfcmN2ZDsgICAgICAgICAvKiAgUlBTQyByZWNlaXZlZCAgICAgICAgICAgICovCisJdTMyICAgICAgICBycHNjX3JlamVjdHM7ICAgICAgLyogIHJlY3ZkICBSUFNDIHJlamVjdHMgICAgICAgKi8KKwl1MzIgICAgICAgIHJwc2Nfc2VudDsgICAgICAgICAvKiAgUlBTQyByZXF1ZXN0cyBzZW50ICAgICAgICAqLworCXUzMiAgICAgICAgcnBzY19hY2NzOyAgICAgICAgIC8qICBSUFNDIGFjY2VwdGVkIGJ5IHJwb3J0ICAgICovCisJdTMyICAgICAgICBycHNjX2ZhaWxlZDsgICAgICAgLyogIFJQU0MgZmFpbGVkIChubyByZXNwb25zZSkgKi8KKwl1MzIgICAgICAgIHJwc2NfcmVqZWN0ZWQ7ICAgICAvKiAgUlBTQyByZWplY3RlZCBieSB1cyAgICAqLworCisJdTMyICAgICAgICByc3ZkOworCXN0cnVjdCBiZmFfcnBvcnRfaGFsX3N0YXRzX3MJaGFsX3N0YXRzOyAgLyogIEJGQSBycG9ydCBzdGF0cyAgICAqLworfTsKKworLyoqCisgKiAgUnBvcnQncyBRb1MgYXR0cmlidXRlcworICovCitzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgeworCWVudW0gYmZhX3Fvc19wcmlvcml0eSBxb3NfcHJpb3JpdHk7ICAvKiAgcnBvcnQncyBRb1MgcHJpb3JpdHkgICAqLworCXUzMgkgICAgICAgcW9zX2Zsb3dfaWQ7CSAgLyogIFFvUyBmbG93IElkCSAqLworfTsKKworLyoqCisgKiBGQ1MgcmVtb3RlIHBvcnQgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfcnBvcnRfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgCW53d247CS8qICBub2RlIHd3biAqLworCXd3bl90ICAgICAgICAgICAJcHd3bjsJLyogIHBvcnQgd3duICovCisJZW51bSBmY19jb3MgY29zX3N1cHBvcnRlZDsJLyogIHN1cHBvcnRlZCBjbGFzcyBvZiBzZXJ2aWNlcyAqLworCXUzMiAgICAgICAgCXBpZDsJLyogIHBvcnQgSUQgKi8KKwl1MzIgICAgICAgIAlkZl9zejsJLyogIE1heCBwYXlsb2FkIHNpemUgKi8KKwllbnVtIGJmYV9ycG9ydF9zdGF0ZSAJc3RhdGU7CS8qICBScG9ydCBTdGF0ZSBtYWNoaW5lIHN0YXRlICovCisJZW51bSBmY19jb3MgICAgICAgIAlmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2VzICovCisJYmZhX2Jvb2xlYW5fdCAgIAljaXNjOwkvKiAgQ0lTQyBjYXBhYmxlIGRldmljZSAqLworCXN0cnVjdCBiZmFfcnBvcnRfc3ltbmFtZV9zIHN5bW5hbWU7IC8qICBTeW1ib2xpYyBOYW1lICovCisJZW51bSBiZmFfcnBvcnRfZnVuY3Rpb24Jc2NzaV9mdW5jdGlvbjsgLyogIEluaXRpYXRvci9UYXJnZXQgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgcW9zX2F0dHI7IC8qICBxb3MgYXR0cmlidXRlcyAgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCBjdXJyX3NwZWVkOyAgIC8qICBvcGVyYXRpbmcgc3BlZWQgZ290IGZyb20KKwkJCQkJICAgICogUlBTQyBFTFMuIFVOS05PV04sIGlmIFJQU0MKKwkJCQkJICAgICogaXMgbm90IHN1cHBvcnRlZCAqLworCWJmYV9ib29sZWFuX3QgCXRybF9lbmZvcmNlZDsJLyogIFRSTCBlbmZvcmNlZCA/IFRSVUUvRkFMU0UgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZAlhc3NpZ25lZF9zcGVlZDsJLyogU3BlZWQgYXNzaWduZWQgYnkgdGhlIHVzZXIuCisJCQkJCQkgKiB3aWxsIGJlIHVzZWQgaWYgUlBTQyBpcyBub3QKKwkJCQkJCSAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQgKi8KK307CisKKyNkZWZpbmUgYmZhX3Jwb3J0X2Flbl9xb3NfZGF0YV90IHN0cnVjdCBiZmFfcnBvcnRfcW9zX2F0dHJfcworCisvKioKKyAqIEJGQSByZW1vdGUgcG9ydCBldmVudHMKKyAqIEFyZ3VtZW50cyBiZWxvdyBhcmUgaW4gQkZBTCBjb250ZXh0IGZyb20gTWdtdAorICogQkZBX1JQT1JUX0FFTl9PTkxJTkU6ICAgIFtpbl06IGxwd3duCVtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duCisgKiBCRkFfUlBPUlRfQUVOX09GRkxJTkU6ICAgW2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24KKyAqIEJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVDpbaW5dOiBscHd3biBbb3V0XTogdmZfaWQsIGxwd3duLCBycHd3bgorICogQkZBX1JQT1JUX0FFTl9RT1NfUFJJTzogIFtpbl06IGxwd3duIFtvdXRdOiB2Zl9pZCwgbHB3d24sIHJwd3duLCBwcmlvCisgKiBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQ6W2luXTogbHB3d24gW291dF06IHZmX2lkLCBscHd3biwgcnB3d24sIGZsb3dfaWQKKyAqLworZW51bSBiZmFfcnBvcnRfYWVuX2V2ZW50IHsKKwlCRkFfUlBPUlRfQUVOX09OTElORSAgICAgID0gMSwJLyogIFJQb3J0IG9ubGluZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fT0ZGTElORSAgICAgPSAyLAkvKiAgUlBvcnQgb2ZmbGluZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fRElTQ09OTkVDVCAgPSAzLAkvKiAgUlBvcnQgZGlzY29ubmVjdCBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fUU9TX1BSSU8gICAgPSA0LAkvKiAgUU9TIHByaW9yaXR5IGNoYW5nZSBldmVudCAqLworCUJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRCAgPSA1LAkvKiAgUU9TIGZsb3cgSWQgY2hhbmdlIGV2ZW50ICovCit9OworCitzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgeworCXUxNiAgICAgICAgdmZfaWQ7CS8qICB2Zl9pZCBvZiB0aGlzIGxvZ2ljYWwgcG9ydCAqLworCXUxNiAgICAgICAgcnN2ZFszXTsKKwl3d25fdCAgICAgICAgICAgcHB3d247CS8qICBXV04gb2YgaXRzIHBoeXNpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbHB3d247CS8qICBXV04gb2YgdGhpcyBsb2dpY2FsIHBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgcnB3d247CS8qICBXV04gb2YgdGhpcyByZW1vdGUgcG9ydCAqLworCXVuaW9uIHsKKwkJYmZhX3Jwb3J0X2Flbl9xb3NfZGF0YV90IHFvczsKKwl9IHByaXY7Cit9OworCisjZW5kaWYgLyogX19CRkFfREVGU19SUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjZWFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3N0YXR1cy5oCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfU1RBVFVTX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1NUQVRVU19IX18KKworLyoqCisgKiBBUEkgc3RhdHVzIHJldHVybiB2YWx1ZXMKKyAqCisgKiBOT1RFOiBUaGUgZXJyb3IgbXNncyBhcmUgYXV0byBnZW5lcmF0ZWQgZnJvbSB0aGUgY29tbWVudHMuIE9ubHkgc2luZ2UgbGluZQorICogY29tbWVudHMgYXJlIHN1cHBvcnRlZAorICovCitlbnVtIGJmYV9zdGF0dXMgeworCUJGQV9TVEFUVVNfT0sgCQk9IDAsCS8qICBTdWNjZXNzICovCisJQkZBX1NUQVRVU19GQUlMRUQgCT0gMSwJLyogIE9wZXJhdGlvbiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTCAJPSAyLAkvKiAgSW52YWxpZCBwYXJhbXMgQ2hlY2sgaW5wdXQKKwkJCQkJICogcGFyYW1ldGVycyAqLworCUJGQV9TVEFUVVNfRU5PTUVNIAk9IDMsCS8qICBPdXQgb2YgcmVzb3VyY2VzICovCisJQkZBX1NUQVRVU19FTk9TWVMgCT0gNCwJLyogIEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCAqLworCUJGQV9TVEFUVVNfRVRJTUVSIAk9IDUsCS8qICBUaW1lciBleHBpcmVkIC0gUmV0cnksIGlmCisJCQkJCSAqIHBlcnNpc3RzLCBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0VQUk9UT0NPTCAJPSA2LAkvKiAgUHJvdG9jb2wgZXJyb3IgKi8KKwlCRkFfU1RBVFVTX0VOT0ZDUE9SVFMgCT0gNywJLyogIE5vIEZDIHBvcnRzIHJlc291cmNlcyAqLworCUJGQV9TVEFUVVNfTk9GTEFTSCAJPSA4LAkvKiAgRmxhc2ggbm90IHByZXNlbnQgKi8KKwlCRkFfU1RBVFVTX0JBREZMQVNIIAk9IDksCS8qICBGbGFzaCBpcyBjb3JydXB0ZWQgb3IgYmFkICovCisJQkZBX1NUQVRVU19TRlBfVU5TVVBQIAk9IDEwLAkvKiAgVW5zdXBwb3J0ZWQgU0ZQIC0gUmVwbGFjZSBTRlAgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fVkZJRCA9IDExLAkvKiAgVkZfSUQgbm90IGZvdW5kICovCisJQkZBX1NUQVRVU19EQVRBQ09SUlVQVEVEID0gMTIsCS8qICBEaWFnIHJldHVybmVkIGRhdGEgY29ycnVwdGVkCisJCQkJCSAqIGNvbnRhY3Qgc3VwcG9ydCAqLworCUJGQV9TVEFUVVNfREVWQlVTWSAJPSAxMywJLyogIERldmljZSBidXN5IC0gUmV0cnkgb3BlcmF0aW9uICovCisJQkZBX1NUQVRVU19BQk9SVEVEIAk9IDE0LAkvKiAgT3BlcmF0aW9uIGFib3J0ZWQgKi8KKwlCRkFfU1RBVFVTX05PREVWIAk9IDE1LAkvKiAgRGV2IGlzIG5vdCBwcmVzZW50ICovCisJQkZBX1NUQVRVU19IRE1BX0ZBSUxFRCAJPSAxNiwJLyogIEhvc3QgZG1hIGZhaWxlZCBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0ZMQVNIX0JBRF9MRU4gPSAxNywJLyogIEZsYXNoIGJhZCBsZW5ndGggKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fTFdXTiA9IDE4LAkvKiAgTFBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fUldXTiA9IDE5LAkvKiAgUlBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0ZDUFRfTFNfUkpUIAk9IDIwLAkvKiAgR290IExTX1JKVCBmb3IgRkMgUGFzcworCQkJCQkgKiB0aHJvdWdoIFJlcSAqLworCUJGQV9TVEFUVVNfVlBPUlRfRVhJU1RTID0gMjEsCS8qICBWUE9SVCBhbHJlYWR5IGV4aXN0cyAqLworCUJGQV9TVEFUVVNfVlBPUlRfTUFYIAk9IDIyLAkvKiAgUmVhY2hlZCBtYXggVlBPUlQgc3VwcG9ydGVkCisJCQkJCSAqIGxpbWl0ICovCisJQkZBX1NUQVRVU19VTlNVUFBfU1BFRUQgPSAyMywJLyogIEludmFsaWQgU3BlZWQgQ2hlY2sgc3BlZWQKKwkJCQkJICogc2V0dGluZyAqLworCUJGQV9TVEFUVVNfSU5WTERfREZTWiAJPSAyNCwJLyogIEludmFsaWQgTWF4IGRhdGEgZmllbGQgc2l6ZSAqLworCUJGQV9TVEFUVVNfQ05GR19GQUlMRUQgCT0gMjUsCS8qICBTZXR0aW5nIGNhbiBub3QgYmUgcGVyc2lzdGVkICovCisJQkZBX1NUQVRVU19DTURfTk9UU1VQUCAJPSAyNiwJLyogIENvbW1hbmQvQVBJIG5vdCBzdXBwb3J0ZWQgKi8KKwlCRkFfU1RBVFVTX05PX0FEQVBURVIgCT0gMjcsCS8qICBObyBCcm9jYWRlIEFkYXB0ZXIgRm91bmQgKi8KKwlCRkFfU1RBVFVTX0xJTktET1dOIAk9IDI4LAkvKiAgTGluayBpcyBkb3duIC0gQ2hlY2sgb3IgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX0ZBQlJJQ19SSlQgCT0gMjksCS8qICBSZWplY3QgZnJvbSBhdHRhY2hlZCBmYWJyaWMgKi8KKwlCRkFfU1RBVFVTX1VOS05PV05fVldXTiA9IDMwLAkvKiAgVlBPUlQgUFdXTiBub3QgZm91bmQgKi8KKwlCRkFfU1RBVFVTX05TTE9HSU5fRkFJTEVEID0gMzEsCS8qICBOYW1lc2VydmVyIGxvZ2luIGZhaWxlZCAqLworCUJGQV9TVEFUVVNfTk9fUlBPUlRTIAk9IDMyLAkvKiAgTm8gcmVtb3RlIHBvcnRzIGZvdW5kICovCisJQkZBX1NUQVRVU19OU1FVRVJZX0ZBSUxFRCA9IDMzLAkvKiAgTmFtZXNlcnZlciBxdWVyeSBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRfT0ZGTElORSA9IDM0LAkvKiAgUG9ydCBpcyBub3Qgb25saW5lICovCisJQkZBX1NUQVRVU19SUE9SVF9PRkZMSU5FID0gMzUsCS8qICBSUE9SVCBpcyBub3Qgb25saW5lICovCisJQkZBX1NUQVRVU19UR1RPUEVOX0ZBSUxFRCA9IDM2LAkvKiAgUmVtb3RlIFNDU0kgdGFyZ2V0IG9wZW4gZmFpbGVkICovCisJQkZBX1NUQVRVU19CQURfTFVOUyAJPSAzNywJLyogIE5vIHZhbGlkIExVTnMgZm91bmQgKi8KKwlCRkFfU1RBVFVTX0lPX0ZBSUxVUkUgCT0gMzgsCS8qICBTQ1NJIHRhcmdldCBJTyBmYWlsdXJlICovCisJQkZBX1NUQVRVU19OT19GQUJSSUMgCT0gMzksCS8qICBObyBzd2l0Y2hlZCBmYWJyaWMgcHJlc2VudCAqLworCUJGQV9TVEFUVVNfRUJBREYgCT0gNDAsCS8qICBCYWQgZmlsZSBkZXNjcmlwdG9yICovCisJQkZBX1NUQVRVU19FSU5UUiAJPSA0MSwJLyogIEEgc2lnbmFsIHdhcyBjYXVnaHQgZHVyaW5nIGlvY3RsICovCisJQkZBX1NUQVRVU19FSU8gCQk9IDQyLAkvKiAgSS9PIGVycm9yICovCisJQkZBX1NUQVRVU19FTk9UVFkgCT0gNDMsCS8qICBJbmFwcHJvcHJpYXRlIEkvTyBjb250cm9sCisJCQkJCSAqIG9wZXJhdGlvbiAqLworCUJGQV9TVEFUVVNfRU5YSU8gCT0gNDQsCS8qICBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzICovCisJQkZBX1NUQVRVU19FRk9QRU4gCT0gNDUsCS8qICBGYWlsZWQgdG8gb3BlbiBmaWxlICovCisJQkZBX1NUQVRVU19WUE9SVF9XV05fQlAgPSA0NiwJLyogIFdXTiBpcyBzYW1lIGFzIGJhc2UgcG9ydCdzIFdXTiAqLworCUJGQV9TVEFUVVNfUE9SVF9OT1RfRElTQUJMRUQgPSA0NywgLyogIFBvcnQgbm90IGRpc2FibGVkIGRpc2FibGUgcG9ydAorCQkJCQkgICAgKiBmaXJzdCAqLworCUJGQV9TVEFUVVNfQkFERlJNSERSIAk9IDQ4LAkvKiAgQmFkIGZyYW1lIGhlYWRlciAqLworCUJGQV9TVEFUVVNfQkFERlJNU1ogCT0gNDksCS8qICBCYWQgZnJhbWUgc2l6ZSBjaGVjayBhbmQgcmVwbGFjZQorCQkJCQkgKiBTRlAvY2FibGUgKi8KKwlCRkFfU1RBVFVTX01JU1NJTkdGUk0gCT0gNTAsCS8qICBNaXNzaW5nIGZyYW1lIGNoZWNrIGFuZCByZXBsYWNlCisJCQkJCSAqIFNGUC9jYWJsZSAqLworCUJGQV9TVEFUVVNfTElOS1RJTUVPVVQgCT0gNTEsCS8qICBMaW5rIHRpbWVvdXQgY2hlY2sgYW5kIHJlcGxhY2UKKwkJCQkJICogU0ZQL2NhYmxlICovCisJQkZBX1NUQVRVU19OT19GQ1BJTV9ORVhVUyA9IDUyLAkvKiAgTm8gRkNQIE5leHVzIGV4aXN0cyB3aXRoIHRoZQorCQkJCQkgKiBycG9ydCAqLworCUJGQV9TVEFUVVNfQ0hFQ0tTVU1fRkFJTCA9IDUzLAkvKiAgY2hlY2tzdW0gZmFpbHVyZSAqLworCUJGQV9TVEFUVVNfR1pNRV9GQUlMRUQgCT0gNTQsCS8qICBHZXQgem9uZSBtZW1iZXIgcXVlcnkgZmFpbGVkICovCisJQkZBX1NUQVRVU19TQ1NJU1RBUlRfUkVRRCA9IDU1LAkvKiAgU0NTSSBkaXNrIHJlcXVpcmUgU1RBUlQgY29tbWFuZCAqLworCUJGQV9TVEFUVVNfSU9DX0ZBSUxVUkUgCT0gNTYsCS8qICBJT0MgZmFpbHVyZSAtIFJldHJ5LCBpZiBwZXJzaXN0cworCQkJCQkgKiBjb250YWN0IHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfV1dOIAk9IDU3LAkvKiAgSW52YWxpZCBXV04gKi8KKwlCRkFfU1RBVFVTX01JU01BVENIIAk9IDU4LAkvKiAgVmVyc2lvbiBtaXNtYXRjaCAqLworCUJGQV9TVEFUVVNfSU9DX0VOQUJMRUQgCT0gNTksCS8qICBJT0MgaXMgYWxyZWFkeSBlbmFibGVkICovCisJQkZBX1NUQVRVU19BREFQVEVSX0VOQUJMRUQgPSA2MCwgLyogIEFkYXB0ZXIgaXMgbm90IGRpc2FibGVkIGRpc2FibGUKKwkJCQkJICAqIGFkYXB0ZXIgZmlyc3QgKi8KKwlCRkFfU1RBVFVTX0lPQ19OT05fT1AgCT0gNjEsCS8qICBJT0MgaXMgbm90IG9wZXJhdGlvbmFsLiBFbmFibGUgSU9DCisJCQkJCSAqIGFuZCBpZiBpdCBzdGlsbCBmYWlscywKKwkJCQkJICogY29udGFjdCBzdXBwb3J0ICovCisJQkZBX1NUQVRVU19BRERSX01BUF9GQUlMVVJFID0gNjIsIC8qICBQQ0kgYmFzZSBhZGRyZXNzIG5vdCBtYXBwZWQKKwkJCQkJICAgKiBpbiBPUyAqLworCUJGQV9TVEFUVVNfU0FNRV9OQU1FIAk9IDYzLAkvKiAgTmFtZSBleGlzdHMhIHVzZSBhIGRpZmZlcmVudAorCQkJCQkgKiBuYW1lICovCisJQkZBX1NUQVRVU19QRU5ESU5HICAgICAgPSA2NCwgICAvKiAgQVBJIGNvbXBsZXRlcyBhc3luY2hyb25vdXNseSAqLworCUJGQV9TVEFUVVNfOEdfU1BECT0gNjUsCS8qICBTcGVlZCBzZXR0aW5nIG5vdCB2YWxpZCBmb3IKKwkJCQkJICogOEcgSEJBICovCisJQkZBX1NUQVRVU180R19TUEQJPSA2NiwJLyogIFNwZWVkIHNldHRpbmcgbm90IHZhbGlkIGZvcgorCQkJCQkgKiA0RyBIQkEgKi8KKwlCRkFfU1RBVFVTX0FEX0lTX0VOQUJMRSA9IDY3LAkvKiAgQWRhcHRlciBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0VJTlZBTF9UT1YgCT0gNjgsCS8qICBJbnZhbGlkIHBhdGggZmFpbG92ZXIgVE9WICovCisJQkZBX1NUQVRVU19FSU5WQUxfUURFUFRIID0gNjksCS8qICBJbnZhbGlkIHF1ZXVlIGRlcHRoIHZhbHVlICovCisJQkZBX1NUQVRVU19WRVJTSU9OX0ZBSUwgPSA3MCwJLyogIEFwcGxpY2F0aW9uL0RyaXZlciB2ZXJzaW9uCisJCQkJCSAqIG1pc21hdGNoICovCisJQkZBX1NUQVRVU19ESUFHX0JVU1kgICAgPSA3MSwJLyogIGRpYWcgYnVzeSAqLworCUJGQV9TVEFUVVNfQkVBQ09OX09OCT0gNzIsCS8qICBQb3J0IEJlYWNvbiBhbHJlYWR5IG9uICovCisJQkZBX1NUQVRVU19CRUFDT05fT0ZGCT0gNzMsCS8qICBQb3J0IEJlYWNvbiBhbHJlYWR5IG9mZiAqLworCUJGQV9TVEFUVVNfTEJFQUNPTl9PTiAgID0gNzQsCS8qICBMaW5rIEVuZC10by1FbmQgQmVhY29uIGFscmVhZHkKKwkJCQkJICogb24gKi8KKwlCRkFfU1RBVFVTX0xCRUFDT05fT0ZGCT0gNzUsCS8qICBMaW5rIEVuZC10by1FbmQgQmVhY29uIGFscmVhZHkKKwkJCQkJICogb2ZmICovCisJQkZBX1NUQVRVU19QT1JUX05PVF9JTklURUQgPSA3NiwgLyogIFBvcnQgbm90IGluaXRpYWxpemVkICovCisJQkZBX1NUQVRVU19SUFNDX0VOQUJMRUQgPSA3NywgLyogIFRhcmdldCBoYXMgYSB2YWxpZCBzcGVlZCAqLworCUJGQV9TVEFUVVNfRU5PRlNBVkUgPSA3OCwJLyogIE5vIHNhdmVkIGZpcm13YXJlIHRyYWNlICovCisJQkZBX1NUQVRVU19CQURfRklMRSA9IDc5LAkvKiAgTm90IGEgdmFsaWQgQnJvY2FkZSBCb290IENvZGUKKwkJCQkJICogZmlsZSAqLworCUJGQV9TVEFUVVNfUkxJTV9FTiA9IDgwLAkvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMgYWxyZWFkeQorCQkJCQkgKiBlbmFibGVkICovCisJQkZBX1NUQVRVU19STElNX0RJUyA9IDgxLCAgLyogIFRhcmdldCByYXRlIGxpbWl0aW5nIGlzIGFscmVhZHkKKwkJCQkgICAgKiBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfSU9DX0RJU0FCTEVEID0gODIsICAgLyogIElPQyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19BREFQVEVSX0RJU0FCTEVEID0gODMsICAgLyogIEFkYXB0ZXIgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfQklPU19ESVNBQkxFRCA9IDg0LCAgIC8qICBCaW9zIGlzIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FVVEhfRU5BQkxFRCA9IDg1LCAgIC8qICBBdXRoZW50aWNhdGlvbiBpcyBhbHJlYWR5CisJCQkJCSAqIGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX0FVVEhfRElTQUJMRUQgPSA4NiwgICAvKiAgQXV0aGVudGljYXRpb24gaXMgYWxyZWFkeQorCQkJCQkgKiBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfRVJST1JfVFJMX0VOQUJMRUQgPSA4NywgICAvKiAgVGFyZ2V0IHJhdGUgbGltaXRpbmcgaXMKKwkJCQkJICAgICAgKiBlbmFibGVkICovCisJQkZBX1NUQVRVU19FUlJPUl9RT1NfRU5BQkxFRCA9IDg4LCAgIC8qICBRb1MgaXMgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfTk9fU0ZQX0RFViA9IDg5LCAvKiAgTm8gU0ZQIGRldmljZSBjaGVjayBvciByZXBsYWNlIFNGUCAqLworCUJGQV9TVEFUVVNfTUVNVEVTVF9GQUlMRUQgPSA5MCwJLyogIE1lbW9yeSB0ZXN0IGZhaWxlZCBjb250YWN0CisJCQkJCSAqIHN1cHBvcnQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfREVWSUQgPSA5MSwJLyogIEludmFsaWQgZGV2aWNlIGlkIHByb3ZpZGVkICovCisJQkZBX1NUQVRVU19RT1NfRU5BQkxFRCA9IDkyLCAvKiAgUU9TIGlzIGFscmVhZHkgZW5hYmxlZCAqLworCUJGQV9TVEFUVVNfUU9TX0RJU0FCTEVEID0gOTMsIC8qICBRT1MgaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCUJGQV9TVEFUVVNfSU5DT1JSRUNUX0RSVl9DT05GSUcgPSA5NCwgLyogIENoZWNrIGNvbmZpZ3VyYXRpb24KKwkJCQkJICAgICAgICoga2V5L3ZhbHVlIHBhaXIgKi8KKwlCRkFfU1RBVFVTX1JFR19GQUlMID0gOTUsIC8qICBDYW4ndCByZWFkIHdpbmRvd3MgcmVnaXN0cnkgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9DT0RFID0gOTYsIC8qICBJbnZhbGlkIElPQ1RMIGNvZGUgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9WTEFOID0gOTcsIC8qICBJbnZhbGlkIFZMQU4gSUQgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9BREFQVF9OQU1FID0gOTgsIC8qICBJbnZhbGlkIGFkYXB0ZXIgbmFtZSAqLworCUJGQV9TVEFUVVNfSU1fTE9XX1JFU09VUkNFUyA9IDk5LCAvKiAgTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbgorCQkJCQkgICAqIGRyaXZlciAqLworCUJGQV9TVEFUVVNfSU1fVkxBTklEX0lTX1BWSUQgPSAxMDAsIC8qICBHaXZlbiBWTEFOIGlkIHNhbWUgYXMgUFZJRCAqLworCUJGQV9TVEFUVVNfSU1fVkxBTklEX0VYSVNUUyA9IDEwMSwgLyogIEdpdmVuIFZMQU4gaWQgYWxyZWFkeSBleGlzdHMgKi8KKwlCRkFfU1RBVFVTX0lNX0ZXX1VQREFURV9GQUlMID0gMTAyLCAvKiAgVXBkYXRpbmcgZmlybXdhcmUgd2l0aCBuZXcKKwkJCQkJICAgICAqIFZMQU4gSUQgZmFpbGVkICovCisJQkZBX1NUQVRVU19QT1JUTE9HX0VOQUJMRUQgPSAxMDMsIC8qICBQb3J0IExvZyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKwlCRkFfU1RBVFVTX1BPUlRMT0dfRElTQUJMRUQgPSAxMDQsIC8qICBQb3J0IExvZyBpcyBhbHJlYWR5IGRpc2FibGVkICovCisJQkZBX1NUQVRVU19GSUxFX05PVF9GT1VORCA9IDEwNSwgLyogIFNwZWNpZmllZCBmaWxlIGNvdWxkIG5vdCBiZQorCQkJCQkgICogZm91bmQgKi8KKwlCRkFfU1RBVFVTX1FPU19GQ19PTkxZID0gMTA2LCAvKiAgUU9TIGNhbiBiZSBlbmFibGVkIGZvciBGQyBtb2RlCisJCQkJICAgICAgICogb25seSAqLworCUJGQV9TVEFUVVNfUkxJTV9GQ19PTkxZID0gMTA3LCAvKiAgUkFURUxJTSBjYW4gYmUgZW5hYmxlZCBmb3IgRkMgbW9kZQorCQkJCQkqIG9ubHkgKi8KKwlCRkFfU1RBVFVTX0NUX1NQRCA9IDEwOCwgLyogIEludmFsaWQgc3BlZWQgc2VsZWN0aW9uIGZvciBDYXRhcHVsdC4gKi8KKwlCRkFfU1RBVFVTX0xFRFRFU1RfT1AgPSAxMDksIC8qICBMRUQgdGVzdCBpcyBvcGVyYXRpbmcgKi8KKwlCRkFfU1RBVFVTX0NFRV9OT1RfRE4gPSAxMTAsIC8qICBldGggcG9ydCBpcyBub3QgYXQgZG93biBzdGF0ZSwgcGxlYXNlCisJCQkJICAgICAgKiBicmluZyBkb3duIGZpcnN0ICovCisJQkZBX1NUQVRVU18xMEdfU1BEID0gMTExLCAvKiAgU3BlZWQgc2V0dGluZyBub3QgdmFsaWQgZm9yIDEwRyBIQkEgKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9URUFNX05BTUUgPSAxMTIsIC8qICBJbnZhbGlkIHRlYW0gbmFtZSAqLworCUJGQV9TVEFUVVNfSU1fRFVQX1RFQU1fTkFNRSA9IDExMywgLyogIEdpdmVuIHRlYW0gbmFtZSBhbHJlYWR5CisJCQkJCSAgICAqIGV4aXN0cyAqLworCUJGQV9TVEFUVVNfSU1fQURBUFRfQUxSRUFEWV9JTl9URUFNID0gMTE0LCAvKiAgR2l2ZW4gYWRhcHRlciBpcyBwYXJ0CisJCQkJCQkgICAgKiBvZiBhbm90aGVyIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX0FEQVBUX0hBU19WTEFOUyA9IDExNSwgLyogIEFkYXB0ZXIgaGFzIFZMQU5zIGNvbmZpZ3VyZWQuCisJCQkJCSAgICAgICogRGVsZXRlIGFsbCBWTEFOcyBiZWZvcmUKKwkJCQkJICAgICAgKiBjcmVhdGluZyB0ZWFtICovCisJQkZBX1NUQVRVU19JTV9QVklEX01JU01BVENIID0gMTE2LCAvKiAgTWlzbWF0Y2hpbmcgUFZJRHMgY29uZmlndXJlZAorCQkJCQkgICAgKiBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX0xJTktfU1BFRURfTUlTTUFUQ0ggPSAxMTcsIC8qICBNaXNtYXRjaGluZyBsaW5rIHNwZWVkcworCQkJCQkJICAqIGNvbmZpZ3VyZWQgZm9yIGFkYXB0ZXJzICovCisJQkZBX1NUQVRVU19JTV9NVFVfTUlTTUFUQ0ggPSAxMTgsIC8qICBNaXNtYXRjaGluZyBNVFVzIGNvbmZpZ3VyZWQgZm9yCisJCQkJCSAgICogYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1JTU19NSVNNQVRDSCA9IDExOSwgLyogIE1pc21hdGNoaW5nIFJTUyBwYXJhbWV0ZXJzCisJCQkJCSAgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX0hEU19NSVNNQVRDSCA9IDEyMCwgLyogIE1pc21hdGNoaW5nIEhEUyBwYXJhbWV0ZXJzCisJCQkJCSAgICogY29uZmlndXJlZCBmb3IgYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX09GRkxPQURfTUlTTUFUQ0ggPSAxMjEsIC8qICBNaXNtYXRjaGluZyBvZmZsb2FkCisJCQkJCSAgICAgICAqIHBhcmFtZXRlcnMgY29uZmlndXJlZCBmb3IKKwkJCQkJICAgICAgICogYWRhcHRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1BPUlRfUEFSQU1TID0gMTIyLCAvKiAgRXJyb3Igc2V0dGluZyBwb3J0IHBhcmFtZXRlcnMgKi8KKwlCRkFfU1RBVFVTX0lNX1BPUlRfTk9UX0lOX1RFQU0gPSAxMjMsIC8qICBQb3J0IGlzIG5vdCBwYXJ0IG9mIHRlYW0gKi8KKwlCRkFfU1RBVFVTX0lNX0NBTk5PVF9SRU1fUFJJID0gMTI0LCAvKiAgUHJpbWFyeSBhZGFwdGVyIGNhbm5vdCBiZQorCQkJCQkgICAgICogcmVtb3ZlZC4gQ2hhbmdlIHByaW1hcnkgYmVmb3JlCisJCQkJCSAgICAgKiByZW1vdmluZyAqLworCUJGQV9TVEFUVVNfSU1fTUFYX1BPUlRTX1JFQUNIRUQgPSAxMjUsIC8qICBFeGNlZWRpbmcgbWF4aW11bSBwb3J0cworCQkJCQkJKiBwZXIgdGVhbSAqLworCUJGQV9TVEFUVVNfSU1fTEFTVF9QT1JUX0RFTEVURSA9IDEyNiwgLyogIExhc3QgcG9ydCBpbiB0ZWFtIGJlaW5nCisJCQkJCSAgICAgICAqIGRlbGV0ZWQgKi8KKwlCRkFfU1RBVFVTX0lNX05PX0RSSVZFUiA9IDEyNywgLyogIElNIGRyaXZlciBpcyBub3QgaW5zdGFsbGVkICovCisJQkZBX1NUQVRVU19JTV9NQVhfVkxBTlNfUkVBQ0hFRCA9IDEyOCwgLyogIEV4Y2VlZGluZyBtYXhpbXVtIFZMQU5zCisJCQkJCQkqIHBlciBwb3J0ICovCisJQkZBX1NUQVRVU19UT01DQVRfU1BEX05PVF9BTExPV0VEID0gMTI5LCAvKiBCaW9zIHNwZWVkIGNvbmZpZyBub3QKKwkJCQkJCSAgKiBhbGxvd2VkIGZvciBDTkEgKi8KKwlCRkFfU1RBVFVTX05PX01JTlBPUlRfRFJJVkVSID0gMTMwLCAvKiAgTWluaXBvcnQgZHJpdmVyIGlzIG5vdAorCQkJCQkgICAgICogbG9hZGVkICovCisJQkZBX1NUQVRVU19DQVJEX1RZUEVfTUlTTUFUQ0ggPSAxMzEsIC8qICBDYXJkIHR5cGUgbWlzbWF0Y2ggKi8KKwlCRkFfU1RBVFVTX0JBRF9BU0lDQkxLID0gMTMyLCAvKiAgQmFkIEFTSUMgYmxvY2sgKi8KKwlCRkFfU1RBVFVTX05PX0RSSVZFUiA9IDEzMywgLyogIFN0b3JhZ2UvRXRoZXJuZXQgZHJpdmVyIG5vdCBsb2FkZWQgKi8KKwlCRkFfU1RBVFVTX0lOVkFMSURfTUFDID0gMTM0LCAvKiAgSW52YWxpZCBtYWMgYWRkcmVzcyAqLworCUJGQV9TVEFUVVNfSU1fTk9fVkxBTiA9IDEzNSwgLyogIE5vIFZMQU5zIGNvbmZpZ3VyZWQgb24gdGhlIGFkYXB0ZXIgKi8KKwlCRkFfU1RBVFVTX0lNX0VUSF9MQl9GQUlMRUQgPSAxMzYsIC8qICBFdGhlcm5ldCBsb29wYmFjayB0ZXN0IGZhaWxlZCAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9SRU1PVkUgPSAxMzcsIC8qICBDYW5ub3QgcmVtb3ZlIHBvcnQgdmxhbiAoUFZJRCkgKi8KKwlCRkFfU1RBVFVTX0lNX1BWSURfRURJVCA9IDEzOCwgLyogIENhbm5vdCBlZGl0IHBvcnQgdmxhbiAoUFZJRCkgKi8KKwlCRkFfU1RBVFVTX0NOQV9OT19CT09UID0gMTM5LCAvKiAgQm9vdCB1cGxvYWQgbm90IGFsbG93ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfSU1fUFZJRF9OT05fWkVSTyA9IDE0MCwgLyogIFBvcnQgVkxBTiBJRCAoUFZJRCkgaXMgU2V0IHRvCisJCQkJCSAgICAqIE5vbi1aZXJvIFZhbHVlICovCisJQkZBX1NUQVRVU19JTV9JTkVUQ0ZHX0xPQ0tfRkFJTEVEID0gMTQxLCAvKiAgQWNxdWlyaW5nIE5ldHdvcmsKKwkJCQkJCSAgKiBTdWJzeXRlbSBMb2NrIEZhaWxlZC5QbGVhc2UKKwkJCQkJCSAgKiB0cnkgYWZ0ZXIgc29tZSB0aW1lICovCisJQkZBX1NUQVRVU19JTV9HRVRfSU5FVENGR19GQUlMRUQgPSAxNDIsIC8qICBBY3F1aXJpbmcgTmV0d29yayBTdWJzeXRlbQorCQkJCQkJICogaGFuZGxlIEZhaWxlZC4gUGxlYXNlIHRyeQorCQkJCQkJICogYWZ0ZXIgc29tZSB0aW1lICovCisJQkZBX1NUQVRVU19JTV9OT1RfQk9VTkQgPSAxNDMsIC8qICBCcm9jYWRlIDEwRyBFdGhlcm5ldCBTZXJ2aWNlIGlzIG5vdAorCQkJCQkqIEVuYWJsZWQgb24gdGhpcyBwb3J0ICovCisJQkZBX1NUQVRVU19JTlNVRkZJQ0lFTlRfUEVSTVMgPSAxNDQsIC8qICBVc2VyIGRvZXNuJ3QgaGF2ZSBzdWZmaWNpZW50CisJCQkJCSAgICAgICogcGVybWlzc2lvbnMgdG8gZXhlY3V0ZSB0aGUgQkNVCisJCQkJCSAgICAgICogYXBwbGljYXRpb24gKi8KKwlCRkFfU1RBVFVTX0lNX0lOVl9WTEFOX05BTUUgPSAxNDUsIC8qICBJbnZhbGlkL1Jlc2VydmVkIFZsYW4gbmFtZQorCQkJCQkgICAgKiBzdHJpbmcuIFRoZSBuYW1lIGlzIG5vdCBhbGxvd2VkCisJCQkJCSAgICAqIGZvciB0aGUgbm9ybWFsIFZsYW5zICovCisJQkZBX1NUQVRVU19DTURfTk9UU1VQUF9DTkEgPSAxNDYsIC8qICBDb21tYW5kIG5vdCBzdXBwb3J0ZWQgZm9yIENOQSAqLworCUJGQV9TVEFUVVNfSU1fUEFTU1RIUlVfRURJVCA9IDE0NywgLyogIENhbiBub3QgZWRpdCBwYXNzdGhydSB2bGFuIGlkICovCisJQkZBX1NUQVRVU19JTV9CSU5EX0ZBSUxFRCA9IDE0OCwgLyohIDwgSU0gRHJpdmVyIGJpbmQgb3BlcmF0aW9uCisJCQkJCSAgKiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX0lNX1VOQklORF9GQUlMRUQgPSAxNDksIC8qICEgPCBJTSBEcml2ZXIgdW5iaW5kIG9wZXJhdGlvbgorCQkJCQkgICAgKiBmYWlsZWQgKi8KKwlCRkFfU1RBVFVTX01BWF9WQUwJCS8qICBVbmtub3duIGVycm9yIGNvZGUgKi8KK307CisjZGVmaW5lIGJmYV9zdGF0dXNfdCBlbnVtIGJmYV9zdGF0dXMKKworZW51bSBiZmFfZXByb3RvX3N0YXR1cyB7CisJQkZBX0VQUk9UT19CQURfQUNDRVBUID0gMCwKKwlCRkFfRVBST1RPX1VOS05PV05fUlNQID0gMQorfTsKKyNkZWZpbmUgYmZhX2Vwcm90b19zdGF0dXNfdCBlbnVtIGJmYV9lcHJvdG9fc3RhdHVzCisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1NUQVRVU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Rpbi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1YTJkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Rpbi5oCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19USU5fSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVElOX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKyNpbmNsdWRlIDxwcm90b2NvbC9mYy5oPgorCisvKioKKyAqIEZDUyB0aW4gc3RhdGVzCisgKi8KK2VudW0gYmZhX3Rpbl9zdGF0ZV9lIHsKKwlCRkFfVElOX1NNX09GRkxJTkUgPSAwLAkJLyogIHRpbiBpcyBvZmZsaW5lICovCisJQkZBX1RJTl9TTV9XT1NfTE9HSU4gPSAxLAkvKiAgV2FpdGluZyBQUkxJIEFDQy9SSlQgZnJvbSBVTFAgKi8KKwlCRkFfVElOX1NNX1dGV19PTkxJTkUgPSAyLAkvKiAgV2FpdGluZyBBQ0sgdG8gUFJMSSBBQ0MgZnJvbSBGVyAqLworCUJGQV9USU5fU01fT05MSU5FID0gMywJCS8qICB0aW4gbG9naW4gaXMgY29tcGxldGUgKi8KKwlCRkFfVElOX1NNX1dJT19SRUxPR0lOID0gNCwJLyogIHRpbiByZWxvZ2luIGlzIGluIHByb2dyZXNzICovCisJQkZBX1RJTl9TTV9XSU9fTE9HT1VUID0gNSwJLyogIFByb2Nlc3Npbmcgb2YgUFJMTyByZXEgZnJvbQorCQkJCQkgKiAgIEluaXRpYXRvciBpcyBpbiBwcm9ncmVzcworCQkJCQkgKi8KKwlCRkFfVElOX1NNX1dPU19MT0dPVVQgPSA2LAkvKiAgUHJvY2Vzc2luZyBvZiBQUkxPIHJlcSBmcm9tCisJCQkJCSAqICAgSW5pdGlhdG9yIGlzIGluIHByb2dyZXNzCisJCQkJCSAqLworCUJGQV9USU5fU01fV0lPX0NMRUFOID0gNywJLyogIFdhaXRpbmcgZm9yIElPIGNsZWFudXAgYmVmb3JlIHRpbgorCQkJCQkgKiAgIGlzIG9mZmxpbmUuIFRoaXMgY2FuIGJlIHRyaWdnZXJlZAorCQkJCQkgKiAgIGJ5IFJQT1JUIExPR08gKHJjdmQvc2VudCkgb3IgYnkKKwkJCQkJICogICBQUkxPIChyY3ZkL3NlbnQpCisJCQkJCSAqLworfTsKKworc3RydWN0IGJmYV9wcmxpX3JlcV9zIHsKKwlzdHJ1Y3QgZmNoc19zIGZjaHM7CisJc3RydWN0IGZjX3BybGlfcyBwcmxpX3BheWxvYWQ7Cit9OworCitzdHJ1Y3QgYmZhX3BybG9fcmVxX3MgeworCXN0cnVjdCBmY2hzX3MgZmNoczsKKwlzdHJ1Y3QgZmNfcHJsb19zIHBybG9fcGF5bG9hZDsKK307CisKK3ZvaWQgYmZhX3Rpbl9zZW5kX2xvZ2luX3JzcCh2b2lkICpiZmFfdGluLCB1MzIgbG9naW5fcnNwLAorCQkJCXN0cnVjdCBmY19sc19yanRfcyByanRfcGF5bG9hZCk7Cit2b2lkIGJmYV90aW5fc2VuZF9sb2dvdXRfcnNwKHZvaWQgKmJmYV90aW4sIHUzMiBsb2dvdXRfcnNwLAorCQkJCXN0cnVjdCBmY19sc19yanRfcyByanRfcGF5bG9hZCk7CisvKioKKyAqIEZDUyB0YXJnZXQgcG9ydCBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCBiZmFfdGluX3N0YXRzX3MgeworCXUzMiBvbmxpbmVzOwkvKiAgSVROIG5leHVzIG9ubGluZXMgKFBSTEkgZG9uZSkgKi8KKwl1MzIgb2ZmbGluZXM7CS8qICBJVE4gTmV4dXMgb2ZmbGluZXMgCSovCisJdTMyIHBybGlfcmVxX3BhcnNlX2VycjsJLyogIHBybGkgcmVxIHBhcnNpbmcgZXJyb3JzICovCisJdTMyIHBybGlfcnNwX3JqdDsJLyogIG51bSBwcmxpIHJzcCByZWplY3RzIHNlbnQgKi8KKwl1MzIgcHJsaV9yc3BfYWNjOwkvKiAgbnVtIHBybGkgcnNwIGFjY2VwdHMgc2VudCAqLworCXUzMiBjbGVhbnVwX2NvbXBzOwkvKiAgSVROIGNsZWFudXAgY29tcGxldGlvbnMgKi8KK307CisKKy8qKgorICogRkNTIHRpbiBhdHRyaWJ1dGVzIHJldHVybmVkIGluIHF1ZXJpZXMKKyAqLworc3RydWN0IGJmYV90aW5fYXR0cl9zIHsKKwllbnVtIGJmYV90aW5fc3RhdGVfZSBzdGF0ZTsKKwl1OAlzZXFfcmV0cnk7ICAgIC8qICBTZXF1ZW5jZSByZXRyeSBzdXBwb3J0ZWQgICAgICAqLworCXU4CXJzdmRbM107Cit9OworCisvKioKKyAqIEJGQSBUSU4gYXN5bmMgZXZlbnQgZGF0YSBzdHJ1Y3R1cmUgZm9yIEJGQUwKKyAqLworZW51bSBiZmFfdGluX2Flbl9ldmVudCB7CisJQkZBX1RJTl9BRU5fT05MSU5FIAk9IDEsCS8qICBUYXJnZXQgb25saW5lICovCisJQkZBX1RJTl9BRU5fT0ZGTElORSAJPSAyLAkvKiAgVGFyZ2V0IG9mZmxpbmUgKi8KKwlCRkFfVElOX0FFTl9ESVNDT05ORUNUCT0gMywJLyogIFRhcmdldCBkaXNjb25uZWN0ZWQgKi8KK307CisKKy8qKgorICogQkZBIFRJTiBldmVudCBkYXRhIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGJmYV90aW5fYWVuX2RhdGFfcyB7CisJdTE2IHZmX2lkOwkvKiAgdmZfaWQgb2YgdGhlIElUIG5leHVzICovCisJdTE2IHJzdmRbM107CisJd3duX3QgbHB3d247CS8qICBXV04gb2YgbG9naWNhbCBwb3J0ICovCisJd3duX3QgcnB3d247CS8qICBXV04gb2YgcmVtb3RlKHRhcmdldCkgcG9ydCAqLworfTsKKworLyoqCisgKiBCZWxvdyBBUElzIGFyZSBuZWVkZWQgZnJvbSBCRkEgZHJpdmVyCisgKiBNb3ZlIHRoZXNlIHRvIEJGQSBkcml2ZXIgcHVibGljIGhlYWRlciBmaWxlPworICovCisvKiAgVElOIHJjdmQgbmV3IFBSTEkgJiBnZXRzIGJmYWRfdGluX3QgcHRyIGZyb20gZHJpdmVyIHRoaXMgY2FsbGJhY2sgKi8KK3ZvaWQgKmJmYWRfdGluX3JjdmRfbG9naW5fcmVxKHZvaWQgKmJmYWRfdG1fcG9ydCwgdm9pZCAqYmZhX3RpbiwKKwkJCQl3d25fdCBycF93d24sIHUzMiBycF9mY2lkLAorCQkJCXN0cnVjdCBiZmFfcHJsaV9yZXFfcyBwcmxpX3JlcSk7CisvKiAgVElOIHJjdmQgbmV3IFBSTE8gKi8KK3ZvaWQgYmZhZF90aW5fcmN2ZF9sb2dvdXRfcmVxKHZvaWQgKmJmYWRfdGluLCB3d25fdCBycF93d24sIHUzMiBycF9mY2lkLAorCQkJCXN0cnVjdCBiZmFfcHJsb19yZXFfcyBwcmxvX3JlcSk7CisvKiAgVElOIGlzIG9ubGluZSBhbmQgcmVhZHkgZm9yIElPICovCit2b2lkIGJmYWRfdGluX29ubGluZSh2b2lkICpiZmFkX3Rpbik7CisvKiAgVElOIGlzIG9mZmxpbmUgYW5kIEJGQSBkcml2ZXIgY2FuIHNodXRkb3duIGl0cyB1cHBlciBzdGFjayAqLwordm9pZCBiZmFkX3Rpbl9vZmZsaW5lKHZvaWQgKmJmYWRfdGluKTsKKy8qICBUSU4gZG9lcyBub3QgbmVlZCB0aGlzIEJGQSBkcml2ZXIgdGluIHRhZyBhbnltb3JlLCBzbyBjYW4gYmUgZnJlZWQgKi8KK3ZvaWQgYmZhZF90aW5fcmVzX2ZyZWUodm9pZCAqYmZhZF90aW4pOworCisjZW5kaWYgLyogX19CRkFfREVGU19USU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190c2Vuc29yLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190c2Vuc29yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ODFkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3RzZW5zb3IuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19CRkFfREVGU19UU0VOU09SX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc190eXBlcy5oPgorCisvKioKKyAqIFRlbXBlcmF0dXJlIHNlbnNvciBzdGF0dXMgdmFsdWVzCisgKi8KK2VudW0gYmZhX3RzZW5zb3Jfc3RhdHVzIHsKKwlCRkFfVFNFTlNPUl9TVEFUVVNfVU5LTk9XTiAgID0gMSwgICAvKiAgdW5rb3duIHN0YXR1cyAqLworCUJGQV9UU0VOU09SX1NUQVRVU19GQVVMVFkgICAgPSAyLCAgIC8qICBzZW5zb3IgaXMgZmF1bHR5ICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0JFTE9XX01JTiA9IDMsICAgLyogIHRlbXBlcmF0dXJlIGJlbG93IG1pbmludW0gKi8KKwlCRkFfVFNFTlNPUl9TVEFUVVNfTk9NSU5BTCAgID0gNCwgICAvKiAgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJQkZBX1RTRU5TT1JfU1RBVFVTX0FCT1ZFX01BWCA9IDUsICAgLyogIHRlbXBlcmF0dXJlIGFib3ZlIG1heGltdW0gKi8KK307CisKKy8qKgorICogVGVtcGVyYXR1cmUgc2Vuc29yIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgYmZhX3RzZW5zb3JfYXR0cl9zIHsKKwllbnVtIGJmYV90c2Vuc29yX3N0YXR1cyBzdGF0dXM7CS8qICB0ZW1wZXJhdHVyZSBzZW5zb3Igc3RhdHVzICovCisJdTMyICAgICAgICAJdmFsdWU7CS8qICBjdXJyZW50IHRlbXBlcmF0dXJlIGluIGNlbHNpdXMgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1RTRU5TT1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc190eXBlcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ4MzMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdHlwZXMuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9fQkZBX0RFRlNfVFlQRVNfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKK2VudW0gYmZhX2Jvb2xlYW4geworCUJGQV9GQUxTRSA9IDAsCisJQkZBX1RSVUUgID0gMQorfTsKKyNkZWZpbmUgYmZhX2Jvb2xlYW5fdCBlbnVtIGJmYV9ib29sZWFuCisKKyNkZWZpbmUgQkZBX1NUUklOR18zMgkzMgorCisjZW5kaWYgLyogX19CRkFfREVGU19UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODkwMmEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdmVyc2lvbi5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19CRkFfREVGU19WRVJTSU9OX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1ZFUlNJT05fSF9fCisKKyNkZWZpbmUgQkZBX1ZFUlNJT05fTEVOCQk2NAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3ZmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzViZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZGVmcy9iZmFfZGVmc192Zi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9ERUZTX1ZGX0hfXworI2RlZmluZSBfX0JGQV9ERUZTX1ZGX0hfXworCisjaW5jbHVkZSA8YmZhX29zX2luYy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKy8qKgorICogVkYgc3RhdGVzCisgKi8KK2VudW0gYmZhX3ZmX3N0YXRlIHsKKwlCRkFfVkZfVU5JTklUICAgID0gMCwJLyogIGZhYnJpYyBpcyBub3QgeWV0IGluaXRpYWxpemVkICovCisJQkZBX1ZGX0xJTktfRE9XTiA9IDEsCS8qICBsaW5rIGlzIGRvd24gKi8KKwlCRkFfVkZfRkxPR0kgICAgID0gMiwJLyogIGZsb2dpIGlzIGluIHByb2dyZXNzICovCisJQkZBX1ZGX0FVVEggICAgICA9IDMsCS8qICBhdXRoZW50aWNhdGlvbiBpbiBwcm9ncmVzcyAqLworCUJGQV9WRl9OT0ZBQlJJQyAgPSA0LAkvKiAgZmFicmljIGlzIG5vdCBwcmVzZW50ICovCisJQkZBX1ZGX09OTElORSAgICA9IDUsCS8qICBsb2dpbiB0byBmYWJyaWMgaXMgY29tcGxldGUgKi8KKwlCRkFfVkZfRVZGUCAgICAgID0gNiwJLyogIEVWRlAgaXMgaW4gcHJvZ3Jlc3MgKi8KKwlCRkFfVkZfSVNPTEFURUQgID0gNywJLyogIHBvcnQgaXNvbGF0ZWQgZHVlIHRvIHZmX2lkIG1pc21hdGNoICovCit9OworCisvKioKKyAqIFZGIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV92Zl9zdGF0c19zIHsKKwl1MzIgICAgICAgIGZsb2dpX3NlbnQ7CS8qICBOdW0gRkxPR0lzIHNlbnQgCQkqLworCXUzMiAgICAgICAgZmxvZ2lfcnNwX2VycjsJLyogIEZMT0dJIHJlc3BvbnNlIGVycm9ycyAJKi8KKwl1MzIgICAgICAgIGZsb2dpX2FjY19lcnI7CS8qICBGTE9HSSBhY2NlcHQgZXJyb3JzIAkqLworCXUzMiAgICAgICAgZmxvZ2lfYWNjZXB0czsJLyogIEZMT0dJIGFjY2VwdHMgcmVjZWl2ZWQgCSovCisJdTMyICAgICAgICBmbG9naV9yZWplY3RzOwkvKiAgRkxPR0kgcmVqZWN0cyByZWNlaXZlZCAJKi8KKwl1MzIgICAgICAgIGZsb2dpX3Vua25vd25fcnNwOyAvKiAgVW5rbm93biByZXNwb25zZXMgZm9yIEZMT0dJICovCisJdTMyICAgICAgICBmbG9naV9hbGxvY193YWl0OyAvKiAgQWxsb2NhdGlvbiB3YWl0cyBwcmlvciB0bworCQkJCQkgICAqIHNlbmRpbmcgRkxPR0kKKwkJCQkJICAgKi8KKwl1MzIgICAgICAgIGZsb2dpX3JjdmQ7CS8qICBGTE9HSXMgcmVjZWl2ZWQgKi8KKwl1MzIgICAgICAgIGZsb2dpX3JlamVjdGVkOwkvKiAgSW5jb21pbmcgRkxPR0lzIHJlamVjdGVkICovCisJdTMyICAgICAgICBmYWJyaWNfb25saW5lczsJLyogIEludGVybmFsIGZhYnJpYyBvbmxpbmUKKwkJCQkJICogbm90aWZpY2F0aW9uIHNlbnQgdG8gb3RoZXIKKwkJCQkJICogbW9kdWxlcworCQkJCQkgKi8KKwl1MzIgICAgICAgIGZhYnJpY19vZmZsaW5lczsgLyogIEludGVybmFsIGZhYnJpYyBvZmZsaW5lCisJCQkJCSAgKiBub3RpZmljYXRpb24gc2VudCB0byBvdGhlcgorCQkJCQkgICogbW9kdWxlcworCQkJCQkgICovCisJdTMyICAgICAgICByZXN2ZDsKK307CisKKy8qKgorICogVkYgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdmZfYXR0cl9zIHsKKwllbnVtIGJmYV92Zl9zdGF0ZSAgc3RhdGU7CQkvKiAgVkYgc3RhdGUgKi8KKwl1MzIgICAgICAgIHJzdmQ7CisJd3duX3QgICAgICAgICAgIGZhYnJpY19uYW1lOwkvKiAgZmFicmljIG5hbWUgKi8KK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1ZGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2RlZnMvYmZhX2RlZnNfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYwMjFmNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9kZWZzL2JmYV9kZWZzX3Zwb3J0LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0RFRlNfVlBPUlRfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworLyoqCisgKiBWUE9SVCBzdGF0ZXMKKyAqLworZW51bSBiZmFfdnBvcnRfc3RhdGUgeworCUJGQV9GQ1NfVlBPUlRfVU5JTklUIAkJPSAwLAorCUJGQV9GQ1NfVlBPUlRfQ1JFQVRFRCAJCT0gMSwKKwlCRkFfRkNTX1ZQT1JUX09GRkxJTkUgCQk9IDEsCisJQkZBX0ZDU19WUE9SVF9GRElTQ19TRU5EIAk9IDIsCisJQkZBX0ZDU19WUE9SVF9GRElTQyAJCT0gMywKKwlCRkFfRkNTX1ZQT1JUX0ZESVNDX1JFVFJZIAk9IDQsCisJQkZBX0ZDU19WUE9SVF9PTkxJTkUgCQk9IDUsCisJQkZBX0ZDU19WUE9SVF9ERUxFVElORyAJCT0gNiwKKwlCRkFfRkNTX1ZQT1JUX0NMRUFOVVAgCQk9IDYsCisJQkZBX0ZDU19WUE9SVF9MT0dPX1NFTkQgCT0gNywKKwlCRkFfRkNTX1ZQT1JUX0xPR08gCQkJPSA4LAorCUJGQV9GQ1NfVlBPUlRfRVJST1IJCQk9IDksCisJQkZBX0ZDU19WUE9SVF9NQVhfU1RBVEUsCit9OworCisvKioKKyAqIHZwb3J0IHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBwb3J0X3N0YXRzOwkvKiAgYmFzZSBjbGFzcyAocG9ydCkgc3RhdHMgKi8KKwkvKgorCSAqIFRPRE8gLSByZW1vdmUKKwkgKi8KKworCXUzMiAgICAgICAgZmRpc2Nfc2VudDsJLyogIG51bSBmZGlzYyBzZW50ICovCisJdTMyICAgICAgICBmZGlzY19hY2NlcHRzOwkvKiAgZmRpc2MgYWNjZXB0cyAqLworCXUzMiAgICAgICAgZmRpc2NfcmV0cmllczsJLyogIGZkaXNjIHJldHJpZXMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3RpbWVvdXRzOwkvKiAgZmRpc2MgdGltZW91dHMgKi8KKwl1MzIgICAgICAgIGZkaXNjX3JzcF9lcnI7CS8qICBmZGlzYyByZXNwb25zZSBlcnJvciAqLworCXUzMiAgICAgICAgZmRpc2NfYWNjX2JhZDsJLyogIGJhZCBmZGlzYyBhY2NlcHRzICovCisJdTMyICAgICAgICBmZGlzY19yZWplY3RzOwkvKiAgZmRpc2MgcmVqZWN0cyAqLworCXUzMiAgICAgICAgZmRpc2NfdW5rbm93bl9yc3A7CisJLyoKKwkgKiE8IGZkaXNjIHJzcCB1bmtub3duIGVycm9yCisJICovCisJdTMyICAgICAgICBmZGlzY19hbGxvY193YWl0Oy8qICBmZGlzYyByZXEgKGZjeHApYWxsb2Mgd2FpdCAqLworCisJdTMyICAgICAgICBsb2dvX2FsbG9jX3dhaXQ7LyogIGxvZ28gcmVxIChmY3hwKSBhbGxvYyB3YWl0ICovCisJdTMyICAgICAgICBsb2dvX3NlbnQ7CS8qICBsb2dvIHNlbnQgKi8KKwl1MzIgICAgICAgIGxvZ29fYWNjZXB0czsJLyogIGxvZ28gYWNjZXB0cyAqLworCXUzMiAgICAgICAgbG9nb19yZWplY3RzOwkvKiAgbG9nbyByZWplY3RzICovCisJdTMyICAgICAgICBsb2dvX3JzcF9lcnI7CS8qICBsb2dvIHJzcCBlcnJvcnMgKi8KKwl1MzIgICAgICAgIGxvZ29fdW5rbm93bl9yc3A7CisJCQkvKiAgbG9nbyByc3AgdW5rbm93biBlcnJvcnMgKi8KKworCXUzMiAgICAgICAgZmFiX25vX25waXY7CS8qICBmYWJyaWMgZG9lcyBub3Qgc3VwcG9ydCBucGl2ICovCisKKwl1MzIgICAgICAgIGZhYl9vZmZsaW5lOwkvKiAgb2ZmbGluZSBldmVudHMgZnJvbSBmYWIgU00gKi8KKwl1MzIgICAgICAgIGZhYl9vbmxpbmU7CS8qICBvbmxpbmUgZXZlbnRzIGZyb20gZmFiIFNNICovCisJdTMyICAgICAgICBmYWJfY2xlYW51cDsJLyogIGNsZWFudXAgcmVxdWVzdCBmcm9tIGZhYiBTTSAqLworCXUzMiAgICAgICAgcnN2ZDsKK307CisKKy8qKgorICogQkZBIHZwb3J0IGF0dHJpYnV0ZSByZXR1cm5lZCBpbiBxdWVyaWVzCisgKi8KK3N0cnVjdCBiZmFfdnBvcnRfYXR0cl9zIHsKKwlzdHJ1Y3QgYmZhX3BvcnRfYXR0cl9zICAgcG9ydF9hdHRyOyAvKiAgYmFzZSBjbGFzcyAocG9ydCkgYXR0cmlidXRlcyAqLworCWVudW0gYmZhX3Zwb3J0X3N0YXRlIHZwb3J0X3N0YXRlOyAvKiAgdnBvcnQgc3RhdGUgKi8KKwl1MzIgICAgICAgICAgcnN2ZDsKK307CisKKyNlbmRpZiAvKiBfX0JGQV9ERUZTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTYzYjBiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiLmggQkZBIEZDUyBjYWxsYmFjayBpbnRlcmZhY2VzCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ0JfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9IX18KKworLyoqCisgKiAgZmNiIE1haW4gZmNzIGNhbGxiYWNrcworICovCisKK3ZvaWQgYmZhX2ZjYl9leGl0KHN0cnVjdCBiZmFkX3MgKmJmYWQpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX2ZjcGltLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNzBhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl9mY3BpbS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisqIDogYmZhZF9mY3BpbS5oIC0gQkZBIEZDUyBpbml0aWF0b3IgbW9kZSByZW1vdGUgcG9ydCBjYWxsYmFja3MKKyAqLworCisjaWZuZGVmIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisjZGVmaW5lIF9fQkZBRF9GQ0JfRkNQSU1fSF9fCisKK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKKy8qCisgKiBSUElNIGNhbGxiYWNrcworICovCisKKy8qKgorICogCU1lbW9yeSBhbGxvY2F0aW9uIGZvciByZW1vdGUgcG9ydCBpbnN0YW5jZS4gQ2FsbGVkIGJlZm9yZSBQUkxJIGlzCisgKiAJaW5pdGlhdGVkIHRvIHRoZSByZW1vdGUgdGFyZ2V0IHBvcnQuCisgKgorICogQHBhcmFtW2luXSBiZmFkCQktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW291dF0gaXRuaW0JCS0gRkNTIHJlbW90ZSBwb3J0IChJTSkgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9pdG5pbV9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLCBzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICoqaXRuaW0sCisJCQkJICAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKippdG5pbV9kcnYpOworCisvKioKKyAqIAkJRnJlZSByZW1vdGUgcG9ydCAoSU0pIGluc3RhbmNlLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZAktIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBpdG5pbV9kcnYJLSBkcml2ZXIgcmVtb3RlIHBvcnQgaW5zdGFuY2UKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fZnJlZShzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJCSAgIHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiBvZiB3aGVuIGxvZ2luIHdpdGggYSByZW1vdGUgdGFyZ2V0IGRldmljZSBpcyBjb21wbGV0ZS4KKyAqCisgKiBAcGFyYW1baW5dIGl0bmltX2RydgktIGRyaXZlciByZW1vdGUgcG9ydCBpbnN0YW5jZQorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV9vbmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworLyoqCisgKiAJTm90aWZpY2F0aW9uIHdoZW4gbG9naW4gd2l0aCB0aGUgcmVtb3RlIGRldmljZSBpcyBzZXZlcmVkLgorICoKKyAqIEBwYXJhbVtpbl0gaXRuaW1fZHJ2CS0gZHJpdmVyIHJlbW90ZSBwb3J0IGluc3RhbmNlCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX2l0bmltX29mZmxpbmUoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY2JfaXRuaW1fdG92X2JlZ2luKHN0cnVjdCBiZmFkX2l0bmltX3MgKml0bmltX2Rydik7Cit2b2lkICAgICAgICAgICAgYmZhX2ZjYl9pdG5pbV90b3Yoc3RydWN0IGJmYWRfaXRuaW1fcyAqaXRuaW1fZHJ2KTsKKworI2VuZGlmIC8qIF9fQkZBRF9GQ0JfRkNQSU1fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcG9ydC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmQ3Zjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3BvcnQuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3BvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1BPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDQl9QT1JUX0hfXworCisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKy8qKgorICogIGZjc19wb3J0X2ZjYiBGQ1MgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9wb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNhbGwgZnJvbSBGQ1MgdG8gZHJpdmVyIG1vZHVsZSB3aGVuIGEgcG9ydCBpcyBpbnN0YW50aWF0ZWQuIFRoZSBwb3J0CisgKiAJY2FuIGJlIGEgYmFzZSBwb3J0IG9yIGEgdmlydHVhbCBwb3J0IHdpdGggaW4gdGhlIGJhc2UgZmFicmljIG9yCisgKiAJYSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAgT24gdGhpcyBjYWxsYmFjaywgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIGNyZWF0ZSBzY3NpX2hvc3QsIHNjc2lfdGd0IG9yCisgKiAgbmV0d29yayBpbnRlcmZhY2VzIGJhc2VzIG9uIHBvcnRzIHBlcnNvbmFsaXR5L3JvbGVzLgorICoKKyAqICAgICAgYmFzZSBwb3J0IG9mIGJhc2UgZmFicmljOgl2Zl9kcnYgPT0gTlVMTCAmJiB2cF9kcnYgPT0gTlVMTAorICogICAgICB2cG9ydCBvZiBiYXNlIGZhYnJpYzoJCXZmX2RydiA9PSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKiAgICAgIGJhc2UgcG9ydCBvZiBWRjoJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiA9PSBOVUxMCisgKiAgICAgIHZwb3J0IG9mIFZGOgkJCXZmX2RydiAhPSBOVUxMICYmIHZwX2RydiAhPSBOVUxMCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcG9ydCAgIC0gRkNTIHBvcnQgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3N0cnVjdCBiZmFkX3BvcnRfcyAqYmZhX2ZjYl9wb3J0X25ldyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLCBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsCisJCQlzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlDYWxsIGZyb20gRkNTIHRvIGRyaXZlciBtb2R1bGUgd2hlbiBhIHBvcnQgaXMgZGVsZXRlZC4gVGhlIHBvcnQKKyAqIAljYW4gYmUgYSBiYXNlIHBvcnQgb3IgYSB2aXJ0dWFsIHBvcnQgd2l0aCBpbiB0aGUgYmFzZSBmYWJyaWMgb3IKKyAqIAlhIHZpcnR1YWwgZmFicmljLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAgIC0gZHJpdmVyIGluc3RhbmNlCisgKiBAcGFyYW1baW5dIHJvbGVzICAtIHBvcnQgcm9sZXM6IElNLCBUTSwgSVAKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gVkYgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgZmFicmljIChubyBWRikKKyAqIEBwYXJhbVtpbl0gdnBfZHJ2IC0gdnBvcnQgZHJpdmVyIGluc3RhbmNlLCBOVUxMIGlmIGJhc2UgcG9ydAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCit2b2lkIGJmYV9mY2JfcG9ydF9kZWxldGUoc3RydWN0IGJmYWRfcyAqYmZhZCwgZW51bSBiZmFfcG9ydF9yb2xlIHJvbGVzLAorCQkJc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2LCBzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cF9kcnYpOworCisvKioKKyAqIAlOb3RpZmljYXRpb24gd2hlbiBwb3J0IHRyYW5zaXRpb25zIHRvIE9OTElORSBzdGF0ZS4KKyAqCisgKiBPbmxpbmUgbm90aWZpY2F0aW9uIGlzIGEgbG9naWNhbCBsaW5rIHVwIGZvciB0aGUgbG9jYWwgcG9ydC4gVGhpcworICogbm90aWZpY2F0aW9uIGlzIHNlbnQgYWZ0ZXIgYSBzdWNjZXNzZnVsbCBGTE9HSSwgb3IgYSBzdWNjZXNzZnVsCisgKiBsaW5rIGluaXRpYWxpemF0aW9uIGluIHByb3ZpYXRlLWxvb3Agb3IgTjJOIHRvcG9sb2dpZXMuCisgKgorICogQHBhcmFtW2luXSBiZmFkICAgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtpbl0gcm9sZXMgIC0gcG9ydCByb2xlczogSU0sIFRNLCBJUAorICogQHBhcmFtW2luXSB2Zl9kcnYgLSBWRiBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBmYWJyaWMgKG5vIFZGKQorICogQHBhcmFtW2luXSB2cF9kcnYgLSB2cG9ydCBkcml2ZXIgaW5zdGFuY2UsIE5VTEwgaWYgYmFzZSBwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9wb3J0X29ubGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKy8qKgorICogCU5vdGlmaWNhdGlvbiB3aGVuIHBvcnQgdHJhbnNpdGlvbnMgdG8gT0ZGTElORSBzdGF0ZS4KKyAqCisgKiBPZmZsaW5lIG5vdGlmaWNhdGlvbiBpcyBhIGxvZ2ljYWwgbGluayBkb3duIGZvciB0aGUgbG9jYWwgcG9ydC4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgICAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSByb2xlcyAgLSBwb3J0IHJvbGVzOiBJTSwgVE0sIElQCisgKiBAcGFyYW1baW5dIHZmX2RydiAtIFZGIGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIGZhYnJpYyAobm8gVkYpCisgKiBAcGFyYW1baW5dIHZwX2RydiAtIHZwb3J0IGRyaXZlciBpbnN0YW5jZSwgTlVMTCBpZiBiYXNlIHBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3BvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhZF9zICpiZmFkLCBlbnVtIGJmYV9wb3J0X3JvbGUgcm9sZXMsCisJCQlzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYsIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwX2Rydik7CisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI2MWJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3Jwb3J0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3Jwb3J0LmggQkZBIEZDUyBycG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1JQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfUlBPUlRfSF9fCisKKy8qKgorICogIGZjc19ycG9ydF9mY2IgUmVtb3RlIHBvcnQgZHJpdmVyIGludGVyZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3Jwb3J0X3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfcnBvcnRfYWRkKCkuCisgKgorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2FkZChzdHJ1Y3QgYmZhZF9ycG9ydF9zICpycG9ydF9kcnYpOworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Jwb3J0X3JlbW92ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgYmZhX2ZjYl9ycG9ydF9yZW1vdmUoc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKKworLyoqCisgKiAJCUNhbGwgdG8gYWxsb2NhdGUgYSBycG9ydCBpbnN0YW5jZS4KKyAqCisgKiBAcGFyYW1baW5dIGJmYWQgLSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbVtvdXRdIHJwb3J0IC0gQkZBIEZDUyBpbnN0YW5jZSBvZiBycG9ydAorICogQHBhcmFtW291dF0gcnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHJwb3J0CisgKgorICogQHJldHZhbCBCRkFfU1RBVFVTX09LIC0gc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZAorICogQHJldHZhbCBCRkFfU1RBVFVTX0VOT01FTSAtIGNhbm5vdCBhbGxvY2F0ZQorICovCitiZmFfc3RhdHVzX3QgYmZhX2ZjYl9ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKy8qKgorICogCUNhbGwgdG8gZnJlZSBycG9ydCBtZW1vcnkgcmVzb3VyY2VzLgorICoKKyAqIEBwYXJhbVtpbl0gYmZhZCAtIGRyaXZlciBpbnN0YW5jZQorICogQHBhcmFtW2luXSBycG9ydF9kcnYgLSBkcml2ZXIgaW5zdGFuY2Ugb2YgcnBvcnQKKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLwordm9pZCBiZmFfZmNiX3Jwb3J0X2ZyZWUoc3RydWN0IGJmYWRfcyAqYmZhZCwgc3RydWN0IGJmYWRfcnBvcnRfcyAqKnJwb3J0X2Rydik7CisKKworCisjZW5kaWYgLyogX19CRkFfRkNCX1JQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQzZmFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2ZjYi9iZmFfZmNiX3ZmLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNiX3ZmLmggQkZBIEZDUyB2aXJ0dWFsIGZhYnJpYyBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZGX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVkZfSF9fCisKKy8qKgorICogIGZjc192Zl9mY2IgVmlydHVhbCBmYWJyaWMgZHJpdmVyIGludHJlZmFjZXMKKyAqLworCisKK3N0cnVjdCBiZmFkX3ZmX3M7CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbnMgZnJvbSBCRkEgRkNTIHRvIGRyaXZlcgorICovCisKKy8qKgorICogCUNvbXBsZXRpb24gY2FsbGJhY2sgZm9yIGJmYV9mY3NfdmZfc3RvcCgpLgorICoKKyAqIEBwYXJhbVtpbl0gdmZfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZmCisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3ZmX3N0b3Aoc3RydWN0IGJmYWRfdmZfcyAqdmZfZHJ2KTsKKworCisKKyNlbmRpZiAvKiBfX0JGQV9GQ0JfVkZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY2IvYmZhX2ZjYl92cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOWY0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNiL2JmYV9mY2JfdnBvcnQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY2JfdnBvcnQuaCBCRkEgRkNTIHZpcnR1YWwgcG9ydCBkcml2ZXIgaW50ZXJmYWNlcworICovCisKKyNpZm5kZWYgX19CRkFfRkNCX1ZQT1JUX0hfXworI2RlZmluZSBfX0JGQV9GQ0JfVlBPUlRfSF9fCisKKy8qKgorICogIGZjc192cG9ydF9mY2IgVmlydHVhbCBwb3J0IGRyaXZlciBpbnRlcmZhY2VzCisgKi8KKworCitzdHJ1Y3QgYmZhZF92cG9ydF9zOworCisvKgorICogQ2FsbGJhY2sgZnVuY3Rpb25zIGZyb20gQkZBIEZDUyB0byBkcml2ZXIKKyAqLworCisvKioKKyAqIAlDb21wbGV0aW9uIGNhbGxiYWNrIGZvciBiZmFfZmNzX3Zwb3J0X2RlbGV0ZSgpLgorICoKKyAqIEBwYXJhbVtpbl0gdnBvcnRfZHJ2IC0gZHJpdmVyIGluc3RhbmNlIG9mIHZwb3J0CisgKgorICogQHJldHVybiBOb25lCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNiX3Zwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhZF92cG9ydF9zICp2cG9ydF9kcnYpOworCisKKworI2VuZGlmIC8qIF9fQkZBX0ZDQl9WUE9SVF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI3NjY5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjcy5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19IX18KKworI2luY2x1ZGUgPGNzL2JmYV9kZWJ1Zy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192ZXJzaW9uLmg+CisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfZmFicmljLmg+CisKKyNkZWZpbmUgQkZBX0ZDU19PU19TVFJfTEVOICAJCTY0CisKK3N0cnVjdCBiZmFfZmNzX3N0YXRzX3MgeworCXN0cnVjdCB7CisJCXUzMiAgICAgICAgdW50YWdnZWQ7IC8qICB1bnRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHRhZ2dlZDsJLyogIHRhZ2dlZCByZWNlaXZlIGZyYW1lcyAqLworCQl1MzIgICAgICAgIHZmaWRfdW5rbm93bjsJLyogIFZGIGlkIGlzIHVua25vd24gKi8KKwl9IHVmOworfTsKKworc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyB7CisJdTggIHZlcnNpb25bQkZBX1ZFUlNJT05fTEVOXTsJCS8qICBEcml2ZXIgVmVyc2lvbiAqLworCXU4ICBob3N0X21hY2hpbmVfbmFtZVtCRkFfRkNTX09TX1NUUl9MRU5dOworCXU4ICBob3N0X29zX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIE9TIG5hbWUgYW5kIHZlcnNpb24gKi8KKwl1OCAgaG9zdF9vc19wYXRjaFtCRkFfRkNTX09TX1NUUl9MRU5dOy8qICBwYXRjaCBvciBzZXJ2aWNlIHBhY2sgKi8KKwl1OCAgb3NfZGV2aWNlX25hbWVbQkZBX0ZDU19PU19TVFJfTEVOXTsgLyogIERyaXZlciBEZXZpY2UgTmFtZSAqLworfTsKKworc3RydWN0IGJmYV9mY3NfcyB7CisJc3RydWN0IGJmYV9zICAgICAgKmJmYTsJLyogIGNvcnJlc3BvbmRpbmcgQkZBIGJmYSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFkX3MgICAgICAgICAqYmZhZDsgLyogIGNvcnJlc3BvbmRpbmcgQkRBIGRyaXZlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfbG9nX21vZF9zICAqbG9nbTsJLyogIGRyaXZlciBsb2dnaW5nIG1vZHVsZSBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfdHJjX21vZF9zICAqdHJjbW9kOwkvKiAgdHJhY2luZyBtb2R1bGUgKi8KKwlzdHJ1Y3QgYmZhX2Flbl9zICAgICAgKmFlbjsJLyogIGFlbiBjb21wb25lbnQgKi8KKwliZmFfYm9vbGVhbl90ICAgdmZfZW5hYmxlZDsJLyogIFZGIG1vZGUgaXMgZW5hYmxlZCAqLworCWJmYV9ib29sZWFuX3QgbWluX2NmZzsJCS8qIG1pbiBjZmcgZW5hYmxlZC9kaXNhYmxlZCAqLworCXUxNiAgICAgICAgcG9ydF92ZmlkOwkvKiAgcG9ydCBkZWZhdWx0IFZGIElEICovCisJc3RydWN0IGJmYV9mY3NfZHJpdmVyX2luZm9fcyBkcml2ZXJfaW5mbzsKKwlzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcyBmYWJyaWM7IC8qICBiYXNlIGZhYnJpYyBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3Nfc3RhdHNfcwlzdGF0czsJLyogIEZDUyBzdGF0aXN0aWNzICovCisJc3RydWN0IGJmYV93Y19zICAgICAgIAl3YzsJLyogIHdhaXRpbmcgY291bnRlciAqLworfTsKKworLyoKKyAqIGJmYSBmY3MgQVBJIGZ1bmN0aW9ucworICovCit2b2lkIGJmYV9mY3NfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcyAqYmZhLCBzdHJ1Y3QgYmZhZF9zICpiZmFkLAorCQkJYmZhX2Jvb2xlYW5fdCBtaW5fY2ZnKTsKK3ZvaWQgYmZhX2Zjc19kcml2ZXJfaW5mb19pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfZmNzX2RyaXZlcl9pbmZvX3MgKmRyaXZlcl9pbmZvKTsKK3ZvaWQgYmZhX2Zjc19leGl0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7Cit2b2lkIGJmYV9mY3NfdHJjX2luaXQoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCBzdHJ1Y3QgYmZhX3RyY19tb2RfcyAqdHJjbW9kKTsKK3ZvaWQgYmZhX2Zjc19sb2dfaW5pdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QpOwordm9pZCBiZmFfZmNzX2Flbl9pbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgc3RydWN0IGJmYV9hZW5fcyAqYWVuKTsKK3ZvaWQgCSAgCWJmYV9mY3Nfc3RhcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19hdXRoLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzRjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfYXV0aC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfQVVUSF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX0FVVEhfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfYXV0aC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisKK3N0cnVjdCBiZmFfZmNzX2ZhYnJpY19zOworCisKKworc3RydWN0IGJmYV9mY3NfYXV0aF9zIHsKKwliZmFfc21fdAlzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwliZmFfYm9vbGVhbl90ICAgcG9saWN5OwkvKiAgYXV0aGVudGljYXRpb24gZW5hYmxlZC9kaXNhYmxlZCAqLworCWVudW0gYmZhX2F1dGhfc3RhdHVzIHN0YXR1czsJLyogIGF1dGhlbnRpY2F0aW9uIHN0YXR1cyAqLworCWVudW0gYXV0aF9yanRfY29kZXMgIHJqdF9jb2RlOwkvKiAgYXV0aCByZWplY3Qgc3RhdHVzICovCisJZW51bSBhdXRoX3JqdF9jb2RlX2V4cHMgIHJqdF9jb2RlX2V4cDsJLyogIGF1dGggcmVqZWN0IHJlYXNvbiAqLworCWVudW0gYmZhX2F1dGhfYWxnbyBhbGdvOwkvKiAgQXV0aGVudGljYXRpb24gYWxnb3JpdGhtICovCisJc3RydWN0IGJmYV9hdXRoX3N0YXRzX3Mgc3RhdHM7CS8qICBTdGF0aXN0aWNzICovCisJZW51bSBhdXRoX2RoX2dpZCAgIGdyb3VwOwkvKiAgREgoZGlmZmllLWhlbGxtYW4pIEdyb3VwICovCisJZW51bSBiZmFfYXV0aF9zZWNyZXRzb3VyY2Ugc291cmNlOwkvKiAgU2VjcmV0IHNvdXJjZSAqLworCWNoYXIgICAgICAgICAgICBzZWNyZXRbQkZBX0FVVEhfU0VDUkVUX1NUUklOR19MRU5dOworCQkJCS8qICBzZWNyZXQgc3RyaW5nICovCisJdTggICAgICAgICBzZWNyZXRfbGVuOworCQkJCS8qICBzZWNyZXQgc3RyaW5nIGxlbmd0aCAqLworCXU4ICAgICAgICAgbnJldHJpZXM7CisJCQkJLyogIG51bWJlciBvZiByZXRyaWVzICovCisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsvKiAgcG9pbnRlciB0byBmYWJyaWMgKi8KKwl1OCAgICAgICAgIHNlbnRjb2RlOwkvKiAgcG9pbnRlciB0byByZXNwb25zZSBkYXRhICovCisJdTggICAgICAgICpyZXNwb25zZTsJLyogIHBvaW50ZXIgdG8gcmVzcG9uc2UgZGF0YSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBkZWxheV90aW1lcjsgCS8qICBkZWxheSB0aW1lciAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkJLyogIHBvaW50ZXIgdG8gZmN4cCAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKy8qKgorICogYmZhIGZjcyBhdXRoZW50aWNhdGlvbiBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBzdHJ1Y3QgYmZhX2F1dGhfYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3BvbGljeShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQliZmFfYm9vbGVhbl90IHBvbGljeSk7CitlbnVtIGJmYV9hdXRoX3N0YXR1cyBiZmFfZmNzX2F1dGhfZ2V0X3N0YXR1cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X2FsZ28oc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9hdXRoX2FsZ28gYWxnbyk7CitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19hdXRoX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2F1dGhfc3RhdHNfcyAqc3RhdHMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfZGhfZ3JvdXAoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwgaW50IGdyb3VwKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHN0cmluZyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBjaGFyICpzZWNyZXQpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9zZXRfc2VjcmV0c3RyaW5nX2VuY3J5cHQoc3RydWN0IGJmYV9mY3NfcyAqcG9ydCwKKwkJCQkJICAgICAgdTMyIHNlY3JldFtdLCB1MzIgbGVuKTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfc2V0X3NlY3JldHNvdXJjZShzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0LAorCQkJCQkgICAgICBlbnVtIGJmYV9hdXRoX3NlY3JldHNvdXJjZSBzcmMpOworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfYXV0aF9yZXNldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19zICpwb3J0KTsKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX2F1dGhfcmVpbml0KHN0cnVjdCBiZmFfZmNzX3MgKnBvcnQpOworCisjZW5kaWYgLyogX19CRkFfRkNTX0FVVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmFicmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZmZDIyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mYWJyaWMuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19GQUJSSUNfSF9fCisKK3N0cnVjdCBiZmFfZmNzX3M7CisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfdmYuaD4KKyNpbmNsdWRlIDxjcy9iZmFfcS5oPgorI2luY2x1ZGUgPGNzL2JmYV9zbS5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjX3NwLmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfYXV0aC5oPgorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbgorICovCitzdHJ1Y3QgYmZhZF92Zl9zOworCitlbnVtIGJmYV9mY3NfZmFicmljX3R5cGUgeworCUJGQV9GQ1NfRkFCUklDX1VOS05PV04gPSAwLAorCUJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEID0gMSwKKwlCRkFfRkNTX0ZBQlJJQ19QTE9PUCA9IDIsCisJQkZBX0ZDU19GQUJSSUNfTjJOID0gMywKK307CisKKworc3RydWN0IGJmYV9mY3NfZmFicmljX3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICBxZTsJCS8qICBxdWV1ZSBlbGVtZW50ICovCisJYmZhX3NtX3QJIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CQkvKiAgRkNTIGluc3RhbmNlICovCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICBicG9ydDsJLyogIGJhc2UgbG9naWNhbCBwb3J0ICovCisJZW51bSBiZmFfZmNzX2ZhYnJpY190eXBlIGZhYl90eXBlOyAvKiAgZmFicmljIHR5cGUgKi8KKwllbnVtIGJmYV9wcG9ydF90eXBlIG9wZXJfdHlwZTsJLyogIGN1cnJlbnQgbGluayB0b3BvbG9neSAqLworCXU4ICAgICAgICAgaXNfdmY7CQkvKiAgaXMgdmlydHVhbCBmYWJyaWM/ICovCisJdTggICAgICAgICBpc19ucGl2OwkvKiAgaXMgTlBJViBzdXBwb3J0ZWQgPyAqLworCXU4ICAgICAgICAgaXNfYXV0aDsJLyogIGlzIFNlY3VyaXR5L0F1dGggc3VwcG9ydGVkID8gKi8KKwl1MTYgICAgICAgIGJiX2NyZWRpdDsJLyogIEJCIGNyZWRpdCBmcm9tIGZhYnJpYyAqLworCXUxNiAgICAgICAgdmZfaWQ7CQkvKiAgdmlydHVhbCBmYWJyaWMgSUQgKi8KKwl1MTYgICAgICAgIG51bV92cG9ydHM7CS8qICBudW0gdnBvcnRzICovCisJdTE2ICAgICAgICByc3ZkOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2cG9ydF9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBwb3J0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICB2Zl9xOwkvKiAgcXVldWUgb2YgdmlydHVhbCBmYWJyaWNzICovCisJc3RydWN0IGJmYWRfdmZfcyAgICAgICp2Zl9kcnY7CS8qICBkcml2ZXIgdmYgc3RydWN0dXJlICovCisJc3RydWN0IGJmYV90aW1lcl9zIGxpbmtfdGltZXI7CS8qICBMaW5rIEZhaWx1cmUgdGltZXIuIFZwb3J0ICovCisJd3duX3QgICAgICAgICAgIGZhYnJpY19uYW1lOwkvKiAgYXR0YWNoZWQgZmFicmljIG5hbWUgKi8KKwliZmFfYm9vbGVhbl90ICAgYXV0aF9yZXFkOwkvKiAgYXV0aGVudGljYXRpb24gcmVxdWlyZWQJKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgZGVsYXlfdGltZXI7CS8qICBkZWxheSB0aW1lcgkJKi8KKwl1bmlvbiB7CisJCXUxNiAgICAgICAgc3dwX3ZmaWQ7LyogIHN3aXRjaCBwb3J0IFZGIGlkCQkqLworCX0gZXZlbnRfYXJnOworCXN0cnVjdCBiZmFfZmNzX2F1dGhfcyAgYXV0aDsJLyogIGF1dGhlbnRpY2F0aW9uIGNvbmZpZwkqLworCXN0cnVjdCBiZmFfd2NfcyAgICAgICAgd2M7CS8qICB3YWl0IGNvdW50ZXIgZm9yIGRlbGV0ZQkqLworCXN0cnVjdCBiZmFfdmZfc3RhdHNfcyAgc3RhdHM7IAkvKiAgZmFicmljL3ZmIHN0YXRzCQkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJLyogIGxwb3J0IGxvZ2luIHNlcnZpY2VzCSovCisJdTgJZmFicmljX2lwX2FkZHJbQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaXTsgIC8qICBhdHRhY2hlZAorCQkJCQkJCSAgICAqIGZhYnJpYydzIGlwIGFkZHIKKwkJCQkJCQkgICAgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fZikgICAgKF9fZiktPmlzX25waXYKKyNkZWZpbmUgYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQoX19mKQkJCVwKKwkoKF9fZiktPmZhYl90eXBlID09IEJGQV9GQ1NfRkFCUklDX1NXSVRDSEVEKQorCisvKioKKyAqICAgVGhlIGRlc2lnbiBjYWxscyBmb3IgYSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgYmFzZSBmYWJyaWMgYW5kIHZmLgorICovCisjZGVmaW5lIGJmYV9mY3NfdmZfdCBzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfcworCitzdHJ1Y3QgYmZhX3ZmX2V2ZW50X3MgeworCXUzMiAgICAgICAgdW5kZWZpbmVkOworfTsKKworLyoqCisgKiBiZmEgZmNzIHZmIHB1YmxpYyBmdW5jdGlvbnMKKyAqLworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9lbmFibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfbW9kZV9kaXNhYmxlKHN0cnVjdCBiZmFfZmNzX3MgKmZjcyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192Zl9jcmVhdGUoYmZhX2Zjc192Zl90ICp2Ziwgc3RydWN0IGJmYV9mY3NfcyAqZmNzLAorCQkJICAgICAgIHUxNiB2Zl9pZCwgc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCSAgICAgICBzdHJ1Y3QgYmZhZF92Zl9zICp2Zl9kcnYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfZGVsZXRlKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX3N0YXJ0KGJmYV9mY3NfdmZfdCAqdmYpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdmZfc3RvcChiZmFfZmNzX3ZmX3QgKnZmKTsKK3ZvaWQgYmZhX2Zjc192Zl9saXN0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcyk7Cit2b2lkIGJmYV9mY3NfdmZfbGlzdF9hbGwoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKTsKK3ZvaWQgYmZhX2Zjc192Zl9nZXRfYXR0cihiZmFfZmNzX3ZmX3QgKnZmLCBzdHJ1Y3QgYmZhX3ZmX2F0dHJfcyAqdmZfYXR0cik7Cit2b2lkIGJmYV9mY3NfdmZfZ2V0X3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYsCisJCQkgIHN0cnVjdCBiZmFfdmZfc3RhdHNfcyAqdmZfc3RhdHMpOwordm9pZCBiZmFfZmNzX3ZmX2NsZWFyX3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYpOwordm9pZCBiZmFfZmNzX3ZmX2dldF9wb3J0cyhiZmFfZmNzX3ZmX3QgKnZmLCB3d25fdCB2cHd3bltdLCBpbnQgKm5wb3J0cyk7CitiZmFfZmNzX3ZmX3QgKmJmYV9mY3NfdmZfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKTsKK3N0cnVjdCBiZmFkX3ZmX3MgKmJmYV9mY3NfdmZfZ2V0X2Rydl92ZihiZmFfZmNzX3ZmX3QgKnZmKTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GQUJSSUNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mY3BpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTlmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfZmNwaW0uaApAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZjcGltLmggQkZBIEZDUyBGQ1AgSW5pdGlhdG9yIE1vZGUgaW50ZXJmYWNlcy9kZWZpbmVzLgorICovCisKKyNpZm5kZWYgX19CRkFfRkNTX0ZDUElNX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkNQSU1fSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfaXRuaW0uaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfbHBvcnQuaD4KKyNpbmNsdWRlIDxiZmFfZmNwaW0uaD4KKworLyoKKyAqIGZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0cnVjdCBiZmFkX2l0bmltX3M7CisKK3N0cnVjdCBiZmFfZmNzX2l0bmltX3MgeworCWJmYV9zbV90CQlzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAJKnJwb3J0OwkJLyogIHBhcmVudCByZW1vdGUgcnBvcnQgICovCisJc3RydWN0IGJmYWRfaXRuaW1fcyAgIAkqaXRuaW1fZHJ2OwkvKiAgZHJpdmVyIHBlZXIgaW5zdGFuY2UgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICAgICAgCSpmY3M7CQkvKiAgZmNzIGluc3RhbmNlICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgCXRpbWVyOwkJLyogIHRpbWVyIGZ1bmN0aW9ucyAgICAgICovCisJc3RydWN0IGJmYV9pdG5pbV9zIAkqYmZhX2l0bmltOwkvKiAgQkZBIGl0bmltIHN0cnVjdCAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJc2VxX3JlYzsJLyogIHNlcSByZWNvdmVyeSBzdXBwb3J0ICovCisJYmZhX2Jvb2xlYW5fdAkgCXJlY19zdXBwb3J0OwkvKiAgUkVDIHN1cHBvcnRlZCAgICAgICAgKi8KKwliZmFfYm9vbGVhbl90CSAJY29uZl9jb21wOwkvKiAgRkNQX0NPTkYgICAgIHN1cHBvcnQgKi8KKwliZmFfYm9vbGVhbl90CSAJdGFza19yZXRyeV9pZDsJLyogIHRhc2sgcmV0cnkgaWQgc3VwcCAgICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsJLyogIHdhaXQgcWVsZW0gZm9yIGZjeHAgICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CQkvKiAgRkNYUCBpbiB1c2UgICAgICAgICAgKi8KKwlzdHJ1Y3QgYmZhX2l0bmltX3N0YXRzX3MgCXN0YXRzOwkvKiAgaXRuIHN0YXRpc3RpY3MgICAgICAgKi8KK307CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfZHJ2cG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0LT5iZmFkX3BvcnQ7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfcG9ydChzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5wb3J0OworfQorCisKK3N0YXRpYyBpbmxpbmUgd3duX3QKK2JmYV9mY3NfaXRuaW1fZ2V0X253d24oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+bnd3bjsKK30KKworCitzdGF0aWMgaW5saW5lIHd3bl90CitiZmFfZmNzX2l0bmltX2dldF9wd3duKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+cnBvcnQtPnB3d247Cit9CisKKworc3RhdGljIGlubGluZSB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X2ZjaWQoc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+cGlkOworfQorCisKK3N0YXRpYyBpbmxpbmUgICB1MzIKK2JmYV9mY3NfaXRuaW1fZ2V0X21heGZyc2l6ZShzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSkKK3sKKwlyZXR1cm4gaXRuaW0tPnJwb3J0LT5tYXhmcnNpemU7Cit9CisKKworc3RhdGljIGlubGluZSAgIGVudW0gZmNfY29zCitiZmFfZmNzX2l0bmltX2dldF9jb3Moc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5ycG9ydC0+ZmNfY29zOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYWRfaXRuaW1fcyAqCitiZmFfZmNzX2l0bmltX2dldF9kcnZpdG4oc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW0pCit7CisJcmV0dXJuIGl0bmltLT5pdG5pbV9kcnY7Cit9CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhX2l0bmltX3MgKgorYmZhX2Zjc19pdG5pbV9nZXRfaGFsaXRuKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltKQoreworCXJldHVybiBpdG5pbS0+YmZhX2l0bmltOworfQorCisvKioKKyAqIGJmYSBmY3MgRkNQIEluaXRpYXRvciBtb2RlIEFQSSBmdW5jdGlvbnMKKyAqLwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX2l0bmltX3MgKml0bmltLAorCQkJc3RydWN0IGJmYV9pdG5pbV9hdHRyX3MgKmF0dHIpOwordm9pZCBiZmFfZmNzX2l0bmltX2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zICppdG5pbSwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fc3RhdHNfcyAqc3RhdHMpOworc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqYmZhX2Zjc19pdG5pbV9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworYmZhX3N0YXR1c190IGJmYV9mY3NfaXRuaW1fYXR0cl9nZXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3biwKKwkJCXN0cnVjdCBiZmFfaXRuaW1fYXR0cl9zICphdHRyKTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX2l0bmltX3N0YXRzX2dldChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsIHd3bl90IHJwd3duLAorCQkJc3RydWN0IGJmYV9pdG5pbV9zdGF0c19zICpzdGF0cyk7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc19pdG5pbV9zdGF0c19jbGVhcihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQl3d25fdCBycHd3bik7CisjZW5kaWYgLyogX19CRkFfRkNTX0ZDUElNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2ZkbWkuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MWZmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc19mZG1pLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBiZmFfZmNzX2ZkbWkuaCBCRkEgZmNzIGZkbWkgbW9kdWxlIHB1YmxpYyBpbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIF9fQkZBX0ZDU19GRE1JX0hfXworI2RlZmluZSBfX0JGQV9GQ1NfRkRNSV9IX18KKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvZmRtaS5oPgorCisjZGVmaW5lCUJGQV9GQ1NfRkRNSV9TVVBPUlRFRF9TUEVFRFMgIChGRE1JX1RSQU5TX1NQRUVEXzFHICB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF8yRyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF80RyB8IFwKKwkJCQkJRkRNSV9UUkFOU19TUEVFRF84RykKKworLyoKKyogSEJBIEF0dHJpYnV0ZSBCbG9jayA6IEJGQSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4gTm90ZSA6IFNvbWUgdmFyaWFibGUKKyogc2l6ZXMgaGF2ZSBiZWVuIHRyaW1tZWQgdG8gc3VpdCBCRkEgRm9yIEV4IDogTW9kZWwgd2lsbCBiZSAiQnJvY2FkZSIuIEJhc2VkCisgKiBvbiB0aGlzIHRoZSBzaXplIGhhcyBiZWVuIHJlZHVjZWQgdG8gMTYgYnl0ZXMgZnJvbSB0aGUgc3RhbmRhcmQncyA2NCBieXRlcy4KKyAqLworc3RydWN0IGJmYV9mY3NfZmRtaV9oYmFfYXR0cl9zIHsKKwl3d25fdCAgICAgICAgICAgbm9kZV9uYW1lOworCXU4ICAgICAgICAgbWFudWZhY3R1cmVyWzY0XTsKKwl1OCAgICAgICAgIHNlcmlhbF9udW1bNjRdOworCXU4ICAgICAgICAgbW9kZWxbMTZdOworCXU4ICAgICAgICAgbW9kZWxfZGVzY1syNTZdOworCXU4ICAgICAgICAgaHdfdmVyc2lvbls4XTsKKwl1OCAgICAgICAgIGRyaXZlcl92ZXJzaW9uWzhdOworCXU4ICAgICAgICAgb3B0aW9uX3JvbV92ZXJbQkZBX1ZFUlNJT05fTEVOXTsKKwl1OCAgICAgICAgIGZ3X3ZlcnNpb25bOF07CisJdTggICAgICAgICBvc19uYW1lWzI1Nl07CisJdTMyICAgICAgICBtYXhfY3RfcHlsZDsKK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgYmZhX2Zjc19mZG1pX3BvcnRfYXR0cl9zIHsKKwl1OCAgICAgICAgIHN1cHBfZmM0X3R5cGVzWzMyXTsJLyogc3VwcG9ydGVkIEZDNCB0eXBlcyAqLworCXUzMiAgICAgICAgc3VwcF9zcGVlZDsJLyogc3VwcG9ydGVkIHNwZWVkICovCisJdTMyICAgICAgICBjdXJyX3NwZWVkOwkvKiBjdXJyZW50IFNwZWVkICovCisJdTMyICAgICAgICBtYXhfZnJtX3NpemU7CS8qIG1heCBmcmFtZSBzaXplICovCisJdTggICAgICAgICBvc19kZXZpY2VfbmFtZVsyNTZdOwkvKiBPUyBkZXZpY2UgTmFtZSAqLworCXU4ICAgICAgICAgaG9zdF9uYW1lWzI1Nl07CS8qIGhvc3QgbmFtZSAqLworfTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19GRE1JX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfbHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODVjYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX2xwb3J0LmgKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgYmZhX2Zjc19wb3J0LmggQkZBIGZjcyBwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUE9SVF9IX18KKyNkZWZpbmUgX19CRkFfRkNTX1BPUlRfSF9fCisKKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3N0YXR1cy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcG9ydC5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcHBvcnQuaD4KKyNpbmNsdWRlIDxkZWZzL2JmYV9kZWZzX3Jwb3J0Lmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3djLmg+CisKK3N0cnVjdCBiZmFfZmNzX3M7CitzdHJ1Y3QgYmZhX2Zjc19mYWJyaWNfczsKKworLyoKKyogQHRvZG8gOiBuZWVkIHRvIG1vdmUgdG8gYSBnbG9iYWwgY29uZmlnIGZpbGUuCisgKiBNYXhpbXVtIFZwb3J0cyBzdXBwb3J0ZWQgcGVyIHBoeXNpY2FsIHBvcnQgb3IgdmYuCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ0IgIDI1NQorI2RlZmluZSBCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DVCAgMTkxCisKKy8qCisqIEB0b2RvIDogbmVlZCB0byBtb3ZlIHRvIGEgZ2xvYmFsIGNvbmZpZyBmaWxlLgorICogTWF4aW11bSBScG9ydHMgc3VwcG9ydGVkIHBlciBwb3J0IChwaHlzaWNhbC9sb2dpY2FsKS4KKyAqLworI2RlZmluZSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUCAgMjU2CS8qIEB0b2RvIDogdGVudGF0aXZlIHZhbHVlICovCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQ7CS8qICBwYXJlbnQgcG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfZmRtaV9zIHsKKwliZmFfc21fdCAgICAgICAgc207CQkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfdGltZXJfcyB0aW1lcjsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zOwkvKiAgcGFyZW50IG1zICovCisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIGZjeHBfd3FlOworCXU4ICAgICAgICAgcmV0cnlfY250OwkvKiAgcmV0cnkgY291bnQgKi8KKwl1OAkgCSAgIHJzdmRbM107Cit9OworCisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyB7CisJYmZhX3NtX3QgICAgICAgIHNtOwkJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX3RpbWVyX3MgdGltZXI7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OwkvKiAgcGFyZW50IHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlzdHJ1Y3QgYmZhX2ZjeHBfd3FlX3MgZmN4cF93cWU7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mZG1pX3MgZmRtaTsJLyogIEZETUkgY29tcG9uZW50IG9mIE1TICovCisJdTggICAgICAgICByZXRyeV9jbnQ7CS8qICByZXRyeSBjb3VudCAqLworCXU4CSAJICAgcnN2ZFszXTsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zIG5zOwkvKiAgTlMgY29tcG9uZW50IG9mIHBvcnQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zIHNjbjsJLyogIHNjbiBjb21wb25lbnQgb2YgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyBtczsJLyogIE1TIGNvbXBvbmVudCBvZiBwb3J0ICovCit9OworCisKKworI2RlZmluZSAJTUFYX0FMUEFfQ09VTlQgCQkxMjcKKworc3RydWN0IGJmYV9mY3NfcG9ydF9sb29wX3MgeworCXU4ICAgICAgICAgbnVtX2FscGE7CS8qICBOdW0gb2YgQUxQQSBlbnRyaWVzIGluIHRoZSBtYXAgKi8KKwl1OCAgICAgICAgIGFscGFfcG9zX21hcFtNQVhfQUxQQV9DT1VOVF07CS8qICBBTFBBIFBvc2l0aW9uYWwKKwkJCQkJCQkgKk1hcCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBwb3J0ICovCit9OworCisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyB7CisJdTMyICAgICAgICByc3ZkOworCXUxNiAgICAgICAgcmVwbHlfb3hpZDsJLyogIG94X2lkIGZyb20gdGhlIHJlcSBmbG9naSB0byBiZQorCQkJCQkgKnVzZWQgaW4gZmxvZ2kgYWNjICovCisJd3duX3QgICAgICAgICAgIHJlbV9wb3J0X3d3bjsJLyogIEF0dGFjaGVkIHBvcnQncyB3d24gKi8KK307CisKKwordW5pb24gYmZhX2Zjc19wb3J0X3RvcG9fdSB7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9mYWJfcyBwZmFiOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbG9vcF9zIHBsb29wOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbjJuX3MgcG4ybjsKK307CisKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgcWU7CS8qICB1c2VkIGJ5IHBvcnQvdnBvcnQgKi8KKwliZmFfc21fdCAgICAgICAgICAgICAgIHNtOwkvKiAgc3RhdGUgbWFjaGluZSAqLworCXN0cnVjdCBiZmFfZmNzX2ZhYnJpY19zICpmYWJyaWM7CS8qICBwYXJlbnQgZmFicmljICovCisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICBwb3J0X2NmZzsJLyogIHBvcnQgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBiZmFfdGltZXJfcyBsaW5rX3RpbWVyOwkvKiAgdGltZXIgZm9yIGxpbmsgb2ZmbGluZSAqLworCXUzMiAgICAgICAgcGlkIDogMjQ7CS8qICBGQyBhZGRyZXNzICovCisJdTggICAgICAgICBscF90YWc7CQkvKiAgbHBvcnQgdGFnICovCisJdTE2ICAgICAgICBudW1fcnBvcnRzOwkvKiAgTnVtIG9mIHItcG9ydHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJwb3J0X3E7CS8qICBxdWV1ZSBvZiBkaXNjb3ZlcmVkIHItcG9ydHMgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CS8qICBGQ1MgaW5zdGFuY2UgKi8KKwl1bmlvbiBiZmFfZmNzX3BvcnRfdG9wb191IHBvcnRfdG9wbzsJLyogIGZhYnJpYy9sb29wL24ybiBkZXRhaWxzICovCisJc3RydWN0IGJmYWRfcG9ydF9zICpiZmFkX3BvcnQ7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0OwkvKiAgTlVMTCBmb3IgYmFzZSBwb3J0cyAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyBmY3hwX3dxZTsKKwlzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcyBzdGF0czsKKwlzdHJ1Y3QgYmZhX3djX3MgICAgICAgIHdjOwkvKiAgd2FpdGluZyBjb3VudGVyIGZvciBldmVudHMgKi8KK307CisKKyNkZWZpbmUgYmZhX2Zjc19scG9ydF90IHN0cnVjdCBiZmFfZmNzX3BvcnRfcworCisvKioKKyAqIFN5bWJvbGljIE5hbWUgcmVsYXRlZCBkZWZpbmVzCisgKiAgVG90YWwgYnl0ZXMgMjU1LgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIDEyOCBieXRlcy4KKyAqICBGb3IgVnBvcnRzLCBWcG9ydCdzIHN5bWJvbGljIG5hbWUgaXMgYXBwZW5kZWQgdG8gdGhlIFBoeXNpY2FsIHBvcnQncworICogIFN5bWJvbGljIE5hbWUuCisgKgorICogIFBoeXNpY2FsIFBvcnQncyBzeW1ib2xpYyBuYW1lIEZvcm1hdCA6IChUb3RhbCAxMjggYnl0ZXMpCisgKiAgQWRhcHRlciBNb2RlbCBudW1iZXIvbmFtZSA6IDEyIGJ5dGVzCisgKiAgRHJpdmVyIFZlcnNpb24gICAgIDogMTAgYnl0ZXMKKyAqICBIb3N0IE1hY2hpbmUgTmFtZSAgOiAzMCBieXRlcworICogCUhvc3QgT1MgSW5mbwkgICA6IDQ4IGJ5dGVzCisgKiAJSG9zdCBPUyBQQVRDSCBJbmZvIDogMTYgYnl0ZXMKKyAqICAoIHJlbWFpbmluZyAxMiBieXRlcyByZXNlcnZlZCB0byBiZSB1c2VkIGZvciBzZXBhcmF0b3IpCisgKi8KKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1NFUEFSQVRPUiAJCSIgfCAiCisKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX01PREVMX1NaCQkJMTIKKyNkZWZpbmUgQkZBX0ZDU19QT1JUX1NZTUJOQU1FX1ZFUlNJT05fU1ogCQkxMAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfTUFDSElORU5BTUVfU1ogCTMwCisjZGVmaW5lIEJGQV9GQ1NfUE9SVF9TWU1CTkFNRV9PU0lORk9fU1oJCQk0OAorI2RlZmluZSBCRkFfRkNTX1BPUlRfU1lNQk5BTUVfT1NQQVRDSF9TWgkJMTYKKworLyoqCisgKiBHZXQgRkMgcG9ydCBJRCBmb3IgYSBsb2dpY2FsIHBvcnQuCisgKi8KKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mY2lkKF9scG9ydCkJKChfbHBvcnQpLT5waWQpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfcHd3bihfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcucHd3bikKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9ud3duKF9scG9ydCkJKChfbHBvcnQpLT5wb3J0X2NmZy5ud3duKQorI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X3BzeW1fbmFtZShfbHBvcnQpCSgoX2xwb3J0KS0+cG9ydF9jZmcuc3ltX25hbWUpCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfSU0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9pc190YXJnZXQoX2xwb3J0KQlcCisJCQkoKF9scG9ydCktPnBvcnRfY2ZnLnJvbGVzICYgQkZBX1BPUlRfUk9MRV9GQ1BfVE0pCisjZGVmaW5lIGJmYV9mY3NfcG9ydF9nZXRfbnJwb3J0cyhfbHBvcnQpCVwKKwkJCSgoX2xwb3J0KSA/IChfbHBvcnQpLT5udW1fcnBvcnRzIDogMCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmZhZF9wb3J0X3MgKgorYmZhX2Zjc19wb3J0X2dldF9kcnZwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlyZXR1cm4gcG9ydC0+YmZhZF9wb3J0OworfQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9vcGVydHlwZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPm9wZXJfdHlwZQorCisKKyNkZWZpbmUgYmZhX2Zjc19wb3J0X2dldF9mYWJyaWNfbmFtZShfbHBvcnQpCShfbHBvcnQpLT5mYWJyaWMtPmZhYnJpY19uYW1lCisKKworI2RlZmluZSBiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19pcGFkZHIoX2xwb3J0KQkoX2xwb3J0KS0+ZmFicmljLT5mYWJyaWNfaXBfYWRkcgorCisvKioKKyAqIGJmYSBmY3MgcG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK3ZvaWQgYmZhX2Zjc19jZmdfYmFzZV9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpOworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnBvcnRfd3duc1tdLCBpbnQgKm5ycG9ydHMpOworCit3d25fdCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgd3duLAorCQkJaW50IGluZGV4LCBpbnQgbnJwb3J0cywgYmZhX2Jvb2xlYW5fdCBid3duKTsKKworc3RydWN0IGJmYV9mY3NfcG9ydF9zICpiZmFfZmNzX2xvb2t1cF9wb3J0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgbHB3d24pOworCit2b2lkIGJmYV9mY3NfcG9ydF9nZXRfaW5mbyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3BvcnRfaW5mb19zICpwb3J0X2luZm8pOwordm9pZCBiZmFfZmNzX3BvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X2F0dHJfcyAqcG9ydF9hdHRyKTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0LAorCQkJc3RydWN0IGJmYV9wb3J0X3N0YXRzX3MgKnBvcnRfc3RhdHMpOwordm9pZCBiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCk7CitlbnVtIGJmYV9wcG9ydF9zcGVlZCBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZCgKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkIGJmYV9mY3NfcG9ydF9lbmFibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKK3ZvaWQgYmZhX2Zjc19wb3J0X2Rpc2FibGVfaXBmY19yb2xlcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKmZjc19wb3J0KTsKKworI2VuZGlmIC8qIF9fQkZBX0ZDU19QT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfcnBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJiOTViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2Zjcy9iZmFfZmNzX3Jwb3J0LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfUlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19SUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3EuaD4KKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfcnBvcnQuaD4KKworI2RlZmluZSBCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVCAJOTAgCS8qIGluIHNlY3MgKi8KKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdHJ1Y3QgYmZhZF9ycG9ydF9zOworCitzdHJ1Y3QgYmZhX2Zjc19pdG5pbV9zOworc3RydWN0IGJmYV9mY3NfdGluX3M7CitzdHJ1Y3QgYmZhX2Zjc19pcHJwX3M7CisKKy8qIFJwb3J0IEZlYXR1cmVzIChSUEYpICovCitzdHJ1Y3QgYmZhX2Zjc19ycGZfcyB7CisJYmZhX3NtX3QgICAgICAgICAgICAgICBzbTsJLyogIHN0YXRlIG1hY2hpbmUgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsJLyogIHBhcmVudCBycG9ydCAqLworCXN0cnVjdCBiZmFfdGltZXJfcyAJdGltZXI7CS8qICBnZW5lcmFsIHB1cnBvc2UgdGltZXIgKi8KKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAJKmZjeHA7CS8qICBGQ1hQIG5lZWRlZCBmb3IgZGlzY2FyZGluZyAqLworCXN0cnVjdCBiZmFfZmN4cF93cWVfcyAJZmN4cF93cWU7CS8qICBmY3hwIHdhaXQgcXVldWUgZWxlbWVudCAqLworCWludCAgICAgICAgICAgICAJcnBzY19yZXRyaWVzOwkvKiAgbWF4IFJQU0MgcmV0cnkgYXR0ZW1wdHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZCAJcnBzY19zcGVlZDsJLyogQ3VycmVudCBTcGVlZCBmcm9tIFJQU0MuCisJCQkJCQkgKiBPIGlmIFJQU0MgZmFpbHMgKi8KKwllbnVtIGJmYV9wcG9ydF9zcGVlZAlhc3NpZ25lZF9zcGVlZDsJLyogU3BlZWQgYXNzaWduZWQgYnkgdGhlIHVzZXIuCisJCQkJCQkgKiB3aWxsIGJlIHVzZWQgaWYgUlBTQyBpcyBub3QKKwkJCQkJCSAqIHN1cHBvcnRlZCBieSB0aGUgcnBvcnQgKi8KK307CisKK3N0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICBxZTsJLyogIHVzZWQgYnkgcG9ydC92cG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsJLyogIHBhcmVudCBGQ1MgcG9ydCAqLworCXN0cnVjdCBiZmFfZmNzX3MgICAgICAqZmNzOwkvKiAgZmNzIGluc3RhbmNlICovCisJc3RydWN0IGJmYWRfcnBvcnRfcyAgICpycF9kcnY7CS8qICBkcml2ZXIgcGVlciBpbnN0YW5jZSAqLworCXUzMiAgICAgICAgcGlkOwkvKiAgcG9ydCBJRCBvZiBycG9ydCAqLworCXUxNiAgICAgICAgbWF4ZnJzaXplOwkvKiAgbWF4aW11bSBmcmFtZSBzaXplICovCisJdTE2ICAgICAgICByZXBseV9veGlkOwkvKiAgT1hfSUQgb2YgaW5ib3VuZCByZXF1ZXN0cyAqLworCWVudW0gZmNfY29zICAgICAgICBmY19jb3M7CS8qICBGQyBjbGFzc2VzIG9mIHNlcnZpY2Ugc3VwcCAqLworCWJmYV9ib29sZWFuX3QgICBjaXNjOwkvKiAgQ0lTQyBjYXBhYmxlIGRldmljZSAqLworCXd3bl90ICAgICAgICAgICBwd3duOwkvKiAgcG9ydCB3d24gb2YgcnBvcnQgKi8KKwl3d25fdCAgICAgICAgICAgbnd3bjsJLyogIG5vZGUgd3duIG9mIHJwb3J0ICovCisJc3RydWN0IGJmYV9ycG9ydF9zeW1uYW1lX3MgcHN5bV9uYW1lOyAvKiAgcG9ydCBzeW1ib2xpYyBuYW1lICAqLworCWJmYV9zbV90ICAgICAgICBzbTsJCS8qICBzdGF0ZSBtYWNoaW5lICovCisJc3RydWN0IGJmYV90aW1lcl9zIHRpbWVyOwkvKiAgZ2VuZXJhbCBwdXJwb3NlIHRpbWVyICovCisJc3RydWN0IGJmYV9mY3NfaXRuaW1fcyAqaXRuaW07CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX3Rpbl9zICp0aW47CS8qICBJVE4gaW5pdGlhdG9yIG1vZGUgcm9sZSAqLworCXN0cnVjdCBiZmFfZmNzX2lwcnBfcyAqaXBycDsJLyogIElQL0ZDIHJvbGUgKi8KKwlzdHJ1Y3QgYmZhX3Jwb3J0X3MgKmJmYV9ycG9ydDsJLyogIEJGQSBScG9ydCAqLworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOwkvKiAgRkNYUCBuZWVkZWQgZm9yIGRpc2NhcmRpbmcgKi8KKwlpbnQgICAgICAgICAgICAgcGxvZ2lfcmV0cmllczsJLyogIG1heCBwbG9naSByZXRyeSBhdHRlbXB0cyAqLworCWludCAgICAgICAgICAgICBuc19yZXRyaWVzOwkvKiAgbWF4IE5TIHF1ZXJ5IHJldHJ5IGF0dGVtcHRzICovCisJc3RydWN0IGJmYV9mY3hwX3dxZV9zIAlmY3hwX3dxZTsgLyogIGZjeHAgd2FpdCBxdWV1ZSBlbGVtZW50ICovCisJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zIHN0YXRzOwkvKiAgcnBvcnQgc3RhdHMgKi8KKwllbnVtIGJmYV9ycG9ydF9mdW5jdGlvbglzY3NpX2Z1bmN0aW9uOyAgLyogIEluaXRpYXRvci9UYXJnZXQgKi8KKwlzdHJ1Y3QgYmZhX2Zjc19ycGZfcyBycGY7IAkvKiBScG9ydCBmZWF0dXJlcyBtb2R1bGUgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJmYV9ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfZ2V0X2hhbHJwb3J0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXJldHVybiBycG9ydC0+YmZhX3Jwb3J0OworfQorCisvKioKKyAqIGJmYSBmY3MgcnBvcnQgQVBJIGZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCAqcHd3biwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KTsKK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Jwb3J0X3JlbW92ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Jwb3J0X2F0dHJfcyAqYXR0cik7Cit2b2lkIGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9zdGF0c19zICpzdGF0cyk7Cit2b2lkIGJmYV9mY3NfcnBvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXAoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJd3duX3QgcnB3d24pOworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9sb29rdXBfYnlfbnd3bigKKwkJCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgcm53d24pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dCh1OCBycG9ydF90bW8pOwordm9pZCBiZmFfZmNzX3Jwb3J0X3NldF9zcGVlZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHNwZWVkKTsKKyNlbmRpZiAvKiBfX0JGQV9GQ1NfUlBPUlRfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9mY3MvYmZhX2Zjc192cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMzNmMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvZmNzL2JmYV9mY3NfdnBvcnQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdnBvcnQuaCBCRkEgZmNzIHZwb3J0IG1vZHVsZSBwdWJsaWMgaW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBfX0JGQV9GQ1NfVlBPUlRfSF9fCisjZGVmaW5lIF9fQkZBX0ZDU19WUE9SVF9IX18KKworI2luY2x1ZGUgPGRlZnMvYmZhX2RlZnNfc3RhdHVzLmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc19wb3J0Lmg+CisjaW5jbHVkZSA8ZGVmcy9iZmFfZGVmc192cG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzLmg+CisjaW5jbHVkZSA8ZmNiL2JmYV9mY2JfdnBvcnQuaD4KKworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyB7CisJc3RydWN0IGxpc3RfaGVhZAkJcWU7CQkvKiAgcXVldWUgZWxlbQkgKi8KKwliZmFfc21fdAkJc207CQkvKiAgc3RhdGUgbWFjaGluZQkqLworCWJmYV9mY3NfbHBvcnRfdAkJbHBvcnQ7CQkvKiAgbG9naWNhbCBwb3J0CSovCisJc3RydWN0IGJmYV90aW1lcl9zCXRpbWVyOwkJLyogIGdlbmVyYWwgcHVycG9zZSB0aW1lciAqLworCXN0cnVjdCBiZmFkX3Zwb3J0X3MJKnZwb3J0X2RydjsJLyogIERyaXZlciBwcml2YXRlCSovCisJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zIHZwb3J0X3N0YXRzOwkvKiAgdnBvcnQgc3RhdGlzdGljcwkqLworCXN0cnVjdCBiZmFfbHBzX3MJKmxwczsJCS8qICBMcG9ydCBsb2dpbiBzZXJ2aWNlICovCisJaW50CQkJZmRpc2NfcmV0cmllczsKK307CisKKyNkZWZpbmUgYmZhX2Zjc192cG9ydF9nZXRfcG9ydCh2cG9ydCkgXAorCQkJKChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgICopKCZ2cG9ydC0+cG9ydCkpCisKKy8qKgorICogYmZhIGZjcyB2cG9ydCBwdWJsaWMgZnVuY3Rpb25zCisgKi8KK2JmYV9zdGF0dXNfdCBiZmFfZmNzX3Zwb3J0X2NyZWF0ZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCXN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLAorCQkJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwb3J0X2NmZywKKwkJCXN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2Rydik7CitiZmFfc3RhdHVzX3QgYmZhX2Zjc192cG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RhcnQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworYmZhX3N0YXR1c190IGJmYV9mY3NfdnBvcnRfc3RvcChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X2F0dHIoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQlzdHJ1Y3QgYmZhX3Zwb3J0X2F0dHJfcyAqdnBvcnRfYXR0cik7Cit2b2lkIGJmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zICp2cG9ydF9zdGF0cyk7Cit2b2lkIGJmYV9mY3NfdnBvcnRfY2xyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKmJmYV9mY3NfdnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJCXUxNiB2Zl9pZCwgd3duX3QgdnB3d24pOworCisjZW5kaWYgLyogX19CRkFfRkNTX1ZQT1JUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2Zjcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjVkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfZmNzLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogbWVzc2FnZXMgZGVmaW5lIGZvciBGQ1MgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0ZDU19IX18KKyNkZWZpbmUJX19CRkFfTE9HX0ZDU19IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0ZDU19GQUJSSUNfTk9TV0lUQ0ggCVwKKwkoKCh1MzIpIEJGQV9MT0dfRkNTX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfRkNTX0ZBQlJJQ19JU09MQVRFRCAJXAorCSgoKHUzMikgQkZBX0xPR19GQ1NfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX2hhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTJhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfaGFsLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBtZXNzYWdlcyBkZWZpbmUgZm9yIEhBTCBNb2R1bGUgKi8KKyNpZm5kZWYJX19CRkFfTE9HX0hBTF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0hBTF9IX18KKyNpbmNsdWRlICA8Y3MvYmZhX2xvZy5oPgorI2RlZmluZSBCRkFfTE9HX0hBTF9BU1NFUlQgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19IQUxfSEVBUlRCRUFUX0ZBSUxVUkUgXAorCSgoKHUzMikgQkZBX0xPR19IQUxfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMikKKyNkZWZpbmUgQkZBX0xPR19IQUxfRkNQSU1fUEFSTV9JTlZBTElEIFwKKwkoKCh1MzIpIEJGQV9MT0dfSEFMX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfSEFMX1NNX0FTU0VSVCBcCisJKCgodTMyKSBCRkFfTE9HX0hBTF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9sb2cvYmZhX2xvZ19saW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxN2MwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfbGludXguaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qIG1lc3NhZ2VzIGRlZmluZSBmb3IgTElOVVggTW9kdWxlICovCisjaWZuZGVmCV9fQkZBX0xPR19MSU5VWF9IX18KKyNkZWZpbmUJX19CRkFfTE9HX0xJTlVYX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfTElOVVhfREVWSUNFX0NMQUlNRUQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMSkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9IQVNIX0lOSVRfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU1lTRlNfRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDMpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfTUVNX0FMTE9DX0ZBSUxFRCBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0RSSVZFUl9SRUdJU1RSQVRJT05fRkFJTEVEIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDUpCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfSVROSU1fRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA2KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09OTElORSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA3KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX0lUTklNX09GRkxJTkUgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgOCkKKyNkZWZpbmUgQkZBX0xPR19MSU5VWF9TQ1NJX0hPU1RfRlJFRSBcCisJCSgoKHUzMikgQkZBX0xPR19MSU5VWF9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA5KQorI2RlZmluZSBCRkFfTE9HX0xJTlVYX1NDU0lfQUJPUlQgXAorCQkoKCh1MzIpIEJGQV9MT0dfTElOVVhfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgMTApCisjZGVmaW5lIEJGQV9MT0dfTElOVVhfU0NTSV9BQk9SVF9DT01QIFwKKwkJKCgodTMyKSBCRkFfTE9HX0xJTlVYX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDExKQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvbG9nL2JmYV9sb2dfd2Rydi5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDlhOTVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL2xvZy9iZmFfbG9nX3dkcnYuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBtZXNzYWdlcyBkZWZpbmUgZm9yIFdEUlYgTW9kdWxlCisgKi8KKyNpZm5kZWYJX19CRkFfTE9HX1dEUlZfSF9fCisjZGVmaW5lCV9fQkZBX0xPR19XRFJWX0hfXworI2luY2x1ZGUgIDxjcy9iZmFfbG9nLmg+CisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5JVF9FUlJPUiAJXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDEpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfSU5URVJOQUxfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDIpCisjZGVmaW5lIEJGQV9MT0dfV0RSVl9JT0NfU1RBUlRfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCAzKQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU9DX1NUT1BfRVJST1IgCVwKKwkoKCh1MzIpIEJGQV9MT0dfV0RSVl9JRCA8PCBCRkFfTE9HX01PRElEX09GRlNFVCkgfCA0KQorI2RlZmluZSBCRkFfTE9HX1dEUlZfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyBcCisJKCgodTMyKSBCRkFfTE9HX1dEUlZfSUQgPDwgQkZBX0xPR19NT0RJRF9PRkZTRVQpIHwgNSkKKyNkZWZpbmUgQkZBX0xPR19XRFJWX0JBU0VfQUREUkVTU19NQVBfRVJST1IgXAorCSgoKHUzMikgQkZBX0xPR19XRFJWX0lEIDw8IEJGQV9MT0dfTU9ESURfT0ZGU0VUKSB8IDYpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU5ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9jdC5oCkBAIC0wLDAgKzEsNDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DVF9IX18KKyNkZWZpbmUgX19DVF9IX18KKworI2luY2x1ZGUgPHByb3RvY29sL3R5cGVzLmg+CisKKyNwcmFnbWEgcGFjaygxKQorCitzdHJ1Y3QgY3RfaGRyX3N7CisJdTMyCXJldl9pZDo4OwkvKiBSZXZpc2lvbiBvZiB0aGUgQ1QgKi8KKwl1MzIJaW5faWQ6MjQ7CS8qIEluaXRpYXRvciBJZCAqLworCXUzMglnc190eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBUeXBlICovCisJdTMyCWdzX3N1Yl90eXBlOjg7CS8qIEdlbmVyaWMgc2VydmljZSBzdWIgdHlwZSAqLworCXUzMglvcHRpb25zOjg7CS8qIG9wdGlvbnMgKi8KKwl1MzIJcnN2cmQ6ODsJLyogcmVzZXJ2ZWQgKi8KKwl1MzIJY21kX3JzcF9jb2RlOjE2Oy8qIGN0IGNvbW1hbmQvcmVzcG9uc2UgY29kZSAqLworCXUzMgltYXhfcmVzX3NpemU6MTY7LyogbWF4aW11bS9yZXNpZHVhbCBzaXplICovCisJdTMyCWZyYWdfaWQ6ODsJLyogZnJhZ21lbnQgSUQgKi8KKwl1MzIJcmVhc29uX2NvZGU6ODsJLyogcmVhc29uIGNvZGUgKi8KKwl1MzIJZXhwX2NvZGU6ODsJLyogZXhwbGFuYXRpb24gY29kZSAqLworCXUzMgl2ZW5kb3JfdW5xOjg7CS8qIHZlbmRvciB1bmlxdWUgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciB0aGUgUmV2aXNpb24KKyAqLworZW51bSB7CisJQ1RfR1MzX1JFVklTSU9OID0gMHgwMSwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc190eXBlCisgKi8KK2VudW0geworCUNUX0dTVFlQRV9LRVlTRVJWSUNFCT0gMHhGNywKKwlDVF9HU1RZUEVfQUxJQVNTRVJWSUNFCT0gMHhGOCwKKwlDVF9HU1RZUEVfTUdNVFNFUlZJQ0UJPSAweEZBLAorCUNUX0dTVFlQRV9USU1FU0VSVklDRQk9IDB4RkIsCisJQ1RfR1NUWVBFX0RJUlNFUlZJQ0UJPSAweEZDLAorfTsKKworLyoKKyAqIGRlZmluZXMgZm9yIGdzX3N1Yl90eXBlIGZvciBncyB0eXBlIGRpcmVjdG9yeSBzZXJ2aWNlCisgKi8KK2VudW0geworCUNUX0dTU1VCVFlQRV9OQU1FU0VSVkVSID0gMHgwMiwKK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBnc19zdWJfdHlwZSBmb3IgZ3MgdHlwZSBtYW5hZ2VtZW50IHNlcnZpY2UKKyAqLworZW51bSB7CisJQ1RfR1NTVUJUWVBFX0NGR1NFUlZFUgk9IDB4MDEsCisJQ1RfR1NTVUJUWVBFX1VOWk9ORURfTlMgPSAweDAyLAorCUNUX0dTU1VCVFlQRV9aT05FU0VSVkVSID0gMHgwMywKKwlDVF9HU1NVQlRZUEVfTE9DS1NFUlZFUiA9IDB4MDQsCisJQ1RfR1NTVUJUWVBFX0hCQV9NR01UU0VSVkVSID0gMHgxMCwJLyogZm9yIEZETUkgKi8KK307CisKKy8qCisgKiBkZWZpbmVzIGZvciBDVCByZXNwb25zZSBjb2RlIGZpZWxkCisgKi8KK2VudW0geworCUNUX1JTUF9SRUpFQ1QgPSAweDgwMDEsCisJQ1RfUlNQX0FDQ0VQVCA9IDB4ODAwMiwKK307CisKKy8qCisgKiBkZWZpbnRpb25zIGZvciBDVCByZWFzb24gY29kZQorICovCitlbnVtIHsKKwlDVF9SU05fSU5WX0NNRAkJPSAweDAxLAorCUNUX1JTTl9JTlZfVkVSCQk9IDB4MDIsCisJQ1RfUlNOX0xPR0lDX0VSUgk9IDB4MDMsCisJQ1RfUlNOX0lOVl9TSVpFCQk9IDB4MDQsCisJQ1RfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJQ1RfUlNOX1BST1RPX0VSUgk9IDB4MDcsCisJQ1RfUlNOX1VOQUJMRV9UT19QRVJGCT0gMHgwOSwKKwlDVF9SU05fTk9UX1NVUFAJCQk9IDB4MEIsCisJQ1RfUlNOX1NFUlZFUl9OT1RfQVZCTCAgPSAweDBELAorCUNUX1JTTl9TRVNTSU9OX0NPVUxEX05PVF9CRV9FU1RCRCA9IDB4MEUsCisJQ1RfUlNOX1ZFTkRPUl9TUEVDSUZJQyAgPSAweEZGLAorCit9OworCisvKgorICogZGVmaW5pdGlvbnMgZm9yIGV4cGxhbmF0aW9ucyBjb2RlIGZvciBOYW1lIHNlcnZlcgorICovCitlbnVtIHsKKwlDVF9OU19FWFBfTk9BRERJVElPTkFMCT0gMHgwMCwKKwlDVF9OU19FWFBfSURfTk9UX1JFRwk9IDB4MDEsCisJQ1RfTlNfRVhQX1BOX05PVF9SRUcJPSAweDAyLAorCUNUX05TX0VYUF9OTl9OT1RfUkVHCT0gMHgwMywKKwlDVF9OU19FWFBfQ1NfTk9UX1JFRwk9IDB4MDQsCisJQ1RfTlNfRVhQX0lQTl9OT1RfUkVHCT0gMHgwNSwKKwlDVF9OU19FWFBfSVBBX05PVF9SRUcJPSAweDA2LAorCUNUX05TX0VYUF9GVF9OT1RfUkVHCT0gMHgwNywKKwlDVF9OU19FWFBfU1BOX05PVF9SRUcJPSAweDA4LAorCUNUX05TX0VYUF9TTk5fTk9UX1JFRwk9IDB4MDksCisJQ1RfTlNfRVhQX1BUX05PVF9SRUcJPSAweDBBLAorCUNUX05TX0VYUF9JUFBfTk9UX1JFRwk9IDB4MEIsCisJQ1RfTlNfRVhQX0ZQTl9OT1RfUkVHCT0gMHgwQywKKwlDVF9OU19FWFBfSEFfTk9UX1JFRwk9IDB4MEQsCisJQ1RfTlNfRVhQX0ZEX05PVF9SRUcJPSAweDBFLAorCUNUX05TX0VYUF9GRl9OT1RfUkVHCT0gMHgwRiwKKwlDVF9OU19FWFBfQUNDRVNTREVOSUVECT0gMHgxMCwKKwlDVF9OU19FWFBfVU5BQ0NFUFRBQkxFX0lEID0gMHgxMSwKKwlDVF9OU19FWFBfREFUQUJBU0VFTVBUWQkJCT0gMHgxMiwKKwlDVF9OU19FWFBfTk9UX1JFR19JTl9TQ09QRSAJCT0gMHgxMywKKwlDVF9OU19FWFBfRE9NX0lEX05PVF9QUkVTRU5UIAk9IDB4MTQsCisJQ1RfTlNfRVhQX1BPUlRfTlVNX05PVF9QUkVTRU5UICA9IDB4MTUsCisJQ1RfTlNfRVhQX05PX0RFVklDRV9BVFRBQ0hFRCAJPSAweDE2Cit9OworCisvKgorICogZGVmaW50aW9ucyBmb3IgdGhlIGV4cGxhbmF0aW9uIGNvZGUgZm9yIGFsbCBzZXJ2ZXJzCisgKi8KK2VudW0geworCUNUX0VYUF9BVVRIX0VYQ0VQVElPTgkJCT0gMHhGMSwKKwlDVF9FWFBfREJfRlVMTAkJCQkJPSAweEYyLAorCUNUX0VYUF9EQl9FTVBUWQkJCQkJPSAweEYzLAorCUNUX0VYUF9QUk9DRVNTSU5HX1JFUQkJCT0gMHhGNCwKKwlDVF9FWFBfVU5BQkxFX1RPX1ZFUklGWV9DT05OCT0gMHhGNSwKKwlDVF9FWFBfREVWSUNFU19OT1RfSU5fQ01OX1pPTkUgID0gMHhGNgorfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIE5hbWUgc2VydmVyCisgKi8KK2VudW0geworCUdTX0dJRF9QTgk9IDB4MDEyMSwJLyogR2V0IElkIG9uIHBvcnQgbmFtZSAqLworCUdTX0dQTl9JRAk9IDB4MDExMiwJLyogR2V0IHBvcnQgbmFtZSBvbiBJRCAqLworCUdTX0dOTl9JRAk9IDB4MDExMywJLyogR2V0IG5vZGUgbmFtZSBvbiBJRCAqLworCUdTX0dJRF9GVAk9IDB4MDE3MSwJLyogR2V0IElkIG9uIEZDNCB0eXBlICovCisJR1NfR1NQTl9JRAk9IDB4MDExOCwJLyogR2V0IHN5bWJvbGljIFBOIG9uIElEICovCisJR1NfUkZUX0lECT0gMHgwMjE3LAkvKiBSZWdpc3RlciBmYzR0eXBlIG9uIElEICovCisJR1NfUlNQTl9JRAk9IDB4MDIxOCwJLyogUmVnaXN0ZXIgc3ltYm9saWMgUE4gb24gSUQgKi8KKwlHU19SUE5fSUQJPSAweDAyMTIsCS8qIFJlZ2lzdGVyIHBvcnQgbmFtZSAqLworCUdTX1JOTl9JRAk9IDB4MDIxMywJLyogUmVnaXN0ZXIgbm9kZSBuYW1lICovCisJR1NfUkNTX0lECT0gMHgwMjE0LAkvKiBSZWdpc3RlciBjbGFzcyBvZiBzZXJ2aWNlICovCisJR1NfUlBUX0lECT0gMHgwMjFBLAkvKiBSZWdpc3RlciBwb3J0IHR5cGUgKi8KKwlHU19HQV9OWFQJPSAweDAxMDAsCS8qIEdldCBhbGwgbmV4dCAqLworCUdTX1JGRl9JRAk9IDB4MDIxRiwJLyogUmVnaXN0ZXIgRkM0IEZlYXR1cmUJCSovCit9OworCitzdHJ1Y3QgZmNnc19pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKyNkZWZpbmUgZmNnc19ncG5pZF9yZXFfdCBzdHJ1Y3QgZmNnc19pZF9yZXFfcworI2RlZmluZSBmY2dzX2dubmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisjZGVmaW5lIGZjZ3NfZ3NwbmlkX3JlcV90IHN0cnVjdCBmY2dzX2lkX3JlcV9zCisKK3N0cnVjdCBmY2dzX2dpZHBuX3JlcV9zeworCXd3bl90CXBvcnRfbmFtZTsJLyogcG9ydCB3d24gKi8KK307CisKK3N0cnVjdCBmY2dzX2dpZHBuX3Jlc3Bfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CS8qIHBvcnQgaWRlbnRpZmllciAqLworfTsKKworLyoqCisgKiBSRlRfSUQKKyAqLworc3RydWN0IGZjZ3NfcmZ0aWRfcmVxX3MgeworCXUzMglyc3ZkOjg7CisJdTMyCWRhcDoyNDsJCS8qIHBvcnQgaWRlbnRpZmllciAqLworCXUzMglmYzRfdHlwZVs4XTsJLyogZmM0IHR5cGVzICovCit9OworCisvKioKKyAqIFJGRl9JRCA6IFJlZ2lzdGVyIEZDNCBmZWF0dXJlcy4KKyAqLworCisjZGVmaW5lIEZDX0dTX0ZDUF9GQzRfRkVBVFVSRV9JTklUSUFUT1IgIDB4MDIKKyNkZWZpbmUgRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVAkgMHgwMQorCitzdHJ1Y3QgZmNnc19yZmZpZF9yZXFfc3sKKyAgICB1MzIgICAgcnN2ZCAgICAgICAgICA6ODsKKyAgICB1MzIgICAgZGFwICAgICAgICAJICA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIJKi8KKyAgICB1MzIgICAgcnN2ZDEgICAgICAgICA6MTY7CisgICAgdTMyICAgIGZjNGZ0cl9iaXRzICAgOjg7CQkvKiBmYzQgZmVhdHVyZSBiaXRzCSovCisgICAgdTMyICAgIGZjNF90eXBlICAgICAgOjg7CQkvKiBjb3JyZXNwb25kaW5nIEZDNCBUeXBlICovCit9OworCisvKioKKyAqIEdJRF9GVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dpZGZ0X3JlcV9zeworCXU4CXJlc2VydmVkOworCXU4CWRvbWFpbl9pZDsJLyogZG9tYWluLCAwIC0gYWxsIGZhYnJpYyAqLworCXU4CWFyZWFfaWQ7CS8qIGFyZWEsIDAgLSB3aG9sZSBkb21haW4gKi8KKwl1OAlmYzRfdHlwZTsJLyogRkNfVFlQRV9GQ1AgZm9yIFNDU0kgZGV2aWNlcyAqLworfTsJCQkJLyogR0lEX0ZUIFJlcXVlc3QgKi8KKworLyoqCisgKiBHSURfRlQgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZ2lkZnRfcmVzcF9zIHsKKwl1OAkJbGFzdDoxOwkvKiBsYXN0IHBvcnQgaWRlbnRpZmllciBmbGFnICovCisJdTgJCXJlc2VydmVkOjc7CisJdTMyCXBpZDoyNDsJLyogcG9ydCBpZGVudGlmaWVyICovCit9OwkJCQkvKiBHSURfRlQgUmVzcG9uc2UgKi8KKworLyoqCisgKiBSU1BOX0lECisgKi8KK3N0cnVjdCBmY2dzX3JzcG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglkYXA6MjQ7CQkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl1OAkJc3BuX2xlbjsJLyogc3ltYm9saWMgcG9ydCBuYW1lIGxlbmd0aCAqLworCXU4CQlzcG5bMjU2XTsJLyogc3ltYm9saWMgcG9ydCBuYW1lICovCit9OworCisvKioKKyAqIFJQTl9JRAorICovCitzdHJ1Y3QgZmNnc19ycG5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlwb3J0X25hbWU7Cit9OworCisvKioKKyAqIFJOTl9JRAorICovCitzdHJ1Y3QgZmNnc19ybm5pZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXd3bl90CQlub2RlX25hbWU7Cit9OworCisvKioKKyAqIFJDU19JRAorICovCitzdHJ1Y3QgZmNnc19yY3NpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMgljb3M7Cit9OworCisvKioKKyAqIFJQVF9JRAorICovCitzdHJ1Y3QgZmNnc19ycHRpZF9yZXFfc3sKKwl1MzIJcnN2ZDo4OworCXUzMglwb3J0X2lkOjI0OworCXUzMglwb3J0X3R5cGU6ODsKKwl1MzIJcnN2ZDE6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXF1ZXN0CisgKi8KK3N0cnVjdCBmY2dzX2dhbnh0X3JlcV9zeworCXUzMglyc3ZkOjg7CisJdTMyCXBvcnRfaWQ6MjQ7Cit9OworCisvKioKKyAqIEdBX05YVCBSZXNwb25zZQorICovCitzdHJ1Y3QgZmNnc19nYW54dF9yc3Bfc3sKKwl1MzIJcG9ydF90eXBlOjg7CS8qIFBvcnQgVHlwZSAqLworCXUzMglwb3J0X2lkOjI0OwkvKiBQb3J0IElkZW50aWZpZXIgKi8KKwl3d25fdAkJcG9ydF9uYW1lOwkvKiBQb3J0IE5hbWUgKi8KKwl1OAkJc3BuX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIFBvcnQgTmFtZSAqLworCWNoYXIJCXNwblsyNTVdOwkvKiBTeW1ib2xpYyBQb3J0IE5hbWUgKi8KKwl3d25fdAkJbm9kZV9uYW1lOwkvKiBOb2RlIE5hbWUgKi8KKwl1OAkJc25uX2xlbjsJLyogTGVuZ3RoIG9mIFN5bWJvbGljIE5vZGUgTmFtZSAqLworCWNoYXIJCXNublsyNTVdOwkvKiBTeW1ib2xpYyBOb2RlIE5hbWUgKi8KKwl1OAkJaXBhWzhdOwkJLyogSW5pdGlhbCBQcm9jZXNzIEFzc29jaWF0b3IgKi8KKwl1OAkJaXBbMTZdOwkJLyogSVAgQWRkcmVzcyAqLworCXUzMgljb3M7CQkvKiBDbGFzcyBvZiBTZXJ2aWNlICovCisJdTMyCWZjNHR5cGVzWzhdOwkvKiBGQy00IFRZUEVzICovCisJd3duX3QJCWZhYnJpY19wb3J0X25hbWU7CisJCQkJCS8qIEZhYnJpYyBQb3J0IE5hbWUgKi8KKwl1MzIJcnN2ZDo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIJaGFyZF9hZGRyOjI0OwkvKiBIYXJkIEFkZHJlc3MgKi8KK307CisKKy8qCisgKiBGYWJyaWMgQ29uZmlnIFNlcnZlcgorICovCisKKy8qCisgKiBDb21tYW5kIGNvZGVzIGZvciBGYWJyaWMgQ29uZmlndXJhdGlvbiBTZXJ2ZXIKKyAqLworZW51bSB7CisJR1NfRkNfR0ZOX0NNRAk9IDB4MDExNCwJLyogR1MgRkMgR2V0IEZhYnJpYyBOYW1lICAqLworCUdTX0ZDX0dNQUxfQ01ECT0gMHgwMTE2LAkvKiBHUyBGQyBHTUFMICAqLworCUdTX0ZDX1RSQUNFX0NNRAk9IDB4MDQwMCwJLyogR1MgRkMgVHJhY2UgUm91dGUgKi8KKwlHU19GQ19QSU5HX0NNRAk9IDB4MDQwMSwJLyogR1MgRkMgUGluZyAqLworfTsKKworLyoKKyAqIFNvdXJjZSBvciBEZXN0aW5hdGlvbiBQb3J0IFRhZ3MuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9UQUdfTlBPUlRfSUQJCT0gMSwKKwlHU19GVFJBQ0VfVEFHX05QT1JUX05BTUUJPSAyLAorfTsKKworLyoKKyogUG9ydCBWYWx1ZSA6IENvdWxkIGJlIGEgUG9ydCBpZCBvciB3d24KKyAqLwordW5pb24gZmNnc19wb3J0X3ZhbF91eworCXUzMglucG9ydF9pZDsKKwl3d25fdAkJbnBvcnRfd3duOworfTsKKworI2RlZmluZSBHU19GVFJBQ0VfTUFYX0hPUF9DT1VOVAkyMAorI2RlZmluZSBHU19GVFJBQ0VfUkVWSVNJT04JMQorCisvKgorICogRnRyYWNlIFJlbGF0ZWQgU3RydWN0dXJlcy4KKyAqLworCisvKgorICogU1RSIChTd2l0Y2ggVHJhY2UpIFJlamVjdCBSZWFzb24gQ29kZXMuIEZyb20gRkMtU1cuCisgKi8KK2VudW0geworCUdTX0ZUUkFDRV9TVFJfQ01EX0NPTVBMRVRFRF9TVUNDCT0gMCwKKwlHU19GVFJBQ0VfU1RSX0NNRF9OT1RfU1VQUF9JTl9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX05PX1JFU1BfRlJPTV9ORVhUX1NXSVRDSCwKKwlHU19GVFJBQ0VfU1RSX01BWF9IT1BfQ05UX1JFQUNIRUQsCisJR1NfRlRSQUNFX1NUUl9TUkNfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9EU1RfUE9SVF9OT1RfRk9VTkQsCisJR1NfRlRSQUNFX1NUUl9ERVZJQ0VTX05PVF9JTl9DT01NT05fWk9ORSwKKwlHU19GVFJBQ0VfU1RSX05PX1JPVVRFX0JXX1BPUlRTLAorCUdTX0ZUUkFDRV9TVFJfTk9fQURETF9FWFBMTiwKKwlHU19GVFJBQ0VfU1RSX0ZBQlJJQ19CVVNZLAorCUdTX0ZUUkFDRV9TVFJfRkFCUklDX0JVSUxEX0lOX1BST0dSRVNTLAorCUdTX0ZUUkFDRV9TVFJfVkVORE9SX1NQRUNJRklDX0VSUl9TVEFSVCA9IDB4ZjAsCisJR1NfRlRSQUNFX1NUUl9WRU5ET1JfU1BFQ0lGSUNfRVJSX0VORCA9IDB4ZmYsCit9OworCisvKgorICogRnRyYWNlIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJc3JjX3BvcnRfdGFnOwkvKiBTb3VyY2UgUG9ydCB0YWcgKi8KKwl1MTYJc3JjX3BvcnRfbGVuOwkvKiBTb3VyY2UgUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3Ugc3JjX3BvcnRfdmFsOwkvKiBTb3VyY2UgUG9ydCB2YWx1ZSAqLworCXUxNglkc3RfcG9ydF90YWc7CS8qIERlc3RpbmF0aW9uIFBvcnQgdGFnICovCisJdTE2CWRzdF9wb3J0X2xlbjsJLyogRGVzdGluYXRpb24gUG9ydCBsZW4gKi8KKwl1bmlvbiBmY2dzX3BvcnRfdmFsX3UgZHN0X3BvcnRfdmFsOwkvKiBEZXN0aW5hdGlvbiBQb3J0IHZhbHVlICovCisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CS8qIFQxMCBWZW5kb3IgSWRlbnRpZmllciAqLworCXU4CQl2ZW5kb3JfaW5mb1s4XTsJLyogVmVuZG9yIHNwZWNpZmljIEluZm8gKi8KKwl1MzIJbWF4X2hvcF9jbnQ7CS8qIE1heCBIb3AgQ291bnQgKi8KK307CisKKy8qCisgKiBQYXRoIGluZm8gc3RydWN0dXJlCisgKi8KK3N0cnVjdCBmY2dzX2Z0cmFjZV9wYXRoX2luZm9fc3sKKwl3d25fdAkJc3dpdGNoX25hbWU7CQkvKiBTd2l0Y2ggV1dOICovCisJdTMyCWRvbWFpbl9pZDsKKwl3d25fdAkJaW5ncmVzc19wb3J0X25hbWU7CS8qIEluZ3Jlc3MgcG9ydHMgd3duICovCisJdTMyCWluZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworCXd3bl90CQllZ3Jlc3NfcG9ydF9uYW1lOwkvKiBJbmdyZXNzIHBvcnRzIHd3biAqLworCXUzMgllZ3Jlc3NfcGh5c19wb3J0X251bTsJLyogSW5ncmVzcyBwb3J0cyBwaHlzaWNhbCBwb3J0CisJCQkJCQkgKiBudW1iZXIKKwkJCQkJCSAqLworfTsKKworLyoKKyAqIEZ0cmFjZSBBY2MgUmVzcG9uc2UKKyAqLworc3RydWN0IGZjZ3NfZnRyYWNlX3Jlc3Bfc3sKKwl1MzIJcmV2aXNpb247CisJdTMyCXRva2VuOworCXU4CQl2ZW5kb3JfaWRbOF07CQkvKiBUMTAgVmVuZG9yIElkZW50aWZpZXIgKi8KKwl1OAkJdmVuZG9yX2luZm9bOF07CQkvKiBWZW5kb3Igc3BlY2lmaWMgSW5mbyAqLworCXUzMglzdHJfcmVqX3JlYXNvbl9jb2RlOwkvKiBTVFIgUmVqZWN0IFJlYXNvbiBDb2RlICovCisJdTMyCW51bV9wYXRoX2luZm9fZW50cmllczsJLyogTm8uIG9mIHBhdGggaW5mbyBlbnRyaWVzICovCisJLyoKKwkgKiBwYXRoIGluZm8gZW50cnkvZW50cmllcy4KKwkgKi8KKwlzdHJ1Y3QgZmNnc19mdHJhY2VfcGF0aF9pbmZvX3MgcGF0aF9pbmZvWzFdOworCit9OworCisvKgorKiBGYWJyaWMgQ29uZmlnIFNlcnZlciA6IEZDUGluZworICovCisKKy8qCisgKiBGQyBQaW5nIFJlcXVlc3QKKyAqLworc3RydWN0IGZjZ3NfZmNwaW5nX3JlcV9zeworCXUzMglyZXZpc2lvbjsKKwl1MTYJcG9ydF90YWc7CisJdTE2CXBvcnRfbGVuOwkvKiBQb3J0IGxlbiAqLworCXVuaW9uIGZjZ3NfcG9ydF92YWxfdSBwb3J0X3ZhbDsJLyogUG9ydCB2YWx1ZSAqLworCXUzMgl0b2tlbjsKK307CisKKy8qCisgKiBGQyBQaW5nIFJlc3BvbnNlCisgKi8KK3N0cnVjdCBmY2dzX2ZjcGluZ19yZXNwX3N7CisJdTMyCXRva2VuOworfTsKKworLyoKKyAqIENvbW1hbmQgY29kZXMgZm9yIHpvbmUgc2VydmVyIHF1ZXJ5LgorICovCitlbnVtIHsKKwlaU19HWk1FID0gMHgwMTI0LAkvKiBHZXQgem9uZSBtZW1iZXIgZXh0ZW5kZWQgKi8KK307CisKKy8qCisgKiBaUyBHWk1FIHJlcXVlc3QKKyAqLworI2RlZmluZSBaU19HWk1FX1pOQU1FTEVOCTMyCitzdHJ1Y3QgenNfZ3ptZV9yZXFfc3sKKwl1OAl6bmFtZWxlbjsKKwl1OAlyc3ZkWzNdOworCXU4CXpuYW1lW1pTX0daTUVfWk5BTUVMRU5dOworfTsKKworZW51bSB6c19tYnJfdHlwZXsKKwlaU19NQlJfVFlQRV9QV1dOCT0gMSwKKwlaU19NQlJfVFlQRV9ET01QT1JUCT0gMiwKKwlaU19NQlJfVFlQRV9QT1JUSUQJPSAzLAorCVpTX01CUl9UWVBFX05XV04JPSA0LAorfTsKKworc3RydWN0IHpzX21icl93d25fc3sKKwl1OAltYnJfdHlwZTsKKwl1OAlyc3ZkWzNdOworCXd3bl90CXd3bjsKK307CisKK3N0cnVjdCB6c19xdWVyeV9yZXNwX3N7CisJdTMyCW5tYnJzOwkvKiAgbnVtYmVyIG9mIHpvbmUgbWVtYmVycyAqLworCXN0cnVjdCB6c19tYnJfd3duX3MJbWJyWzFdOworfTsKKworLyoKKyAqIEdNQUwgQ29tbWFuZCAoIEdldCAoIGludGVyY29ubmVjdCBFbGVtZW50KSBNYW5hZ2VtZW50IEFkZHJlc3MgTGlzdCkKKyAqIFRvIHJldHJpZXZlIHRoZSBJUCBBZGRyZXNzIG9mIGEgU3dpdGNoLgorICovCisKKyNkZWZpbmUgQ1RfR01BTF9SRVNQX1BSRUZJWF9URUxORVQJICJ0ZWxuZXQ6Ly8iCisjZGVmaW5lIENUX0dNQUxfUkVTUF9QUkVGSVhfSFRUUAkgImh0dHA6Ly8iCisKKy8qICBHTUFML0dGTiByZXF1ZXN0ICovCitzdHJ1Y3QgZmNnc19yZXFfcyB7CisJd3duX3QgICAgd3duOyAJLyogUFdXTi9OV1dOICovCit9OworCisjZGVmaW5lIGZjZ3NfZ21hbF9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworI2RlZmluZSBmY2dzX2dmbl9yZXFfdCBzdHJ1Y3QgZmNnc19yZXFfcworCisvKiBBY2NlcHQgUmVzcG9uc2UgdG8gR01BTCAqLworc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgeworCXUzMiAJCW1zX2xlbjsgICAvKiBOdW0gb2YgZW50cmllcyAqLworCXU4ICAgICAJbXNfbWFbMjU2XTsKK307CisKK3N0cnVjdCBmY19nbWFsX2VudHJ5X3MgeworCXU4ICBsZW47CisJdTggIHByZWZpeFs3XTsgLyogbGlrZSAiaHR0cDovLyIgKi8KKwl1OCAgaXBfYWRkclsyNDhdOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaCBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzliYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmMuaApAQCAtMCwwICsxLDExMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX0hfXworI2RlZmluZSBfX0ZDX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGaWJyZSBDaGFubmVsIEhlYWRlciBTdHJ1Y3R1cmUgKEZDSFMpIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZjaHNfcyB7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJvdXRpbmc6NDsJLyogcm91dGluZyBiaXRzICovCisJdTMyICAgICAgICBjYXRfaW5mbzo0OwkvKiBjYXRlZ29yeSBpbmZvICovCisjZWxzZQorCXUzMiAgICAgICAgY2F0X2luZm86NDsJLyogY2F0ZWdvcnkgaW5mbyAqLworCXUzMiAgICAgICAgcm91dGluZzo0OwkvKiByb3V0aW5nIGJpdHMgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgZF9pZDoyNDsJLyogZGVzdGluYXRpb24gaWRlbnRpZmllciAqLworCisJdTMyICAgICAgICBjc19jdGw6ODsJLyogY2xhc3Mgc3BlY2lmaWMgY29udHJvbCAqLworCXUzMiAgICAgICAgc19pZDoyNDsJLyogc291cmNlIGlkZW50aWZpZXIgKi8KKworCXUzMiAgICAgICAgdHlwZTo4OwkJLyogZGF0YSBzdHJ1Y3R1cmUgdHlwZSAqLworCXUzMiAgICAgICAgZl9jdGw6MjQ7CS8qIGluaXRpYWwgZnJhbWUgY29udHJvbCAqLworCisJdTggICAgICAgICBzZXFfaWQ7CQkvKiBzZXF1ZW5jZSBpZGVudGlmaWVyICovCisJdTggICAgICAgICBkZl9jdGw7CQkvKiBkYXRhIGZpZWxkIGNvbnRyb2wgKi8KKwl1MTYgICAgICAgIHNlcV9jbnQ7CS8qIHNlcXVlbmNlIGNvdW50ICovCisKKwl1MTYgICAgICAgIG94X2lkOwkJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUxNiAgICAgICAgcnhfaWQ7CQkvKiByZXNwb25kZXIgZXhjaGFuZ2UgSUQgKi8KKworCXUzMiAgICAgICAgcm87CQkvKiByZWxhdGl2ZSBvZmZzZXQgKi8KK307CisvKgorICogRmlicmUgQ2hhbm5lbCBCQl9FIEhlYWRlciBTdHJ1Y3R1cmUKKyAqLworc3RydWN0IGZjYmJlaHNfcyB7CisJdTE2CXZlcl9yc3ZkOworCXUzMglyc3ZkWzJdOworCXUzMglyc3ZkX19zb2Y7Cit9OworCisjZGVmaW5lIEZDX1NFUV9JRF9NQVgJCTI1NgorCisvKgorICogcm91dGluZyBiaXQgZGVmaW5pdGlvbnMKKyAqLworZW51bSB7CisJRkNfUlRHX0ZDNF9ERVZfREFUQQk9IDB4MCwJLyogRkMtNCBEZXZpY2UgRGF0YSAqLworCUZDX1JUR19FWFRfTElOSwkJPSAweDIsCS8qIEV4dGVuZGVkIExpbmsgRGF0YSAqLworCUZDX1JUR19GQzRfTElOS19EQVRBCT0gMHgzLAkvKiBGQy00IExpbmsgRGF0YSAqLworCUZDX1JUR19WSURFT19EQVRBCT0gMHg0LAkvKiBWaWRlbyBEYXRhICovCisJRkNfUlRHX0VYVF9IRFIJCT0gMHg1LAkvKiBWRlQsIElGUiBvciBFbmNhcHN1bGVkICovCisJRkNfUlRHX0JBU0lDX0xJTksJPSAweDgsCS8qIEJhc2ljIExpbmsgZGF0YSAqLworCUZDX1JUR19MSU5LX0NUUkwJPSAweEMsCS8qIExpbmsgQ29udHJvbCAqLworfTsKKworLyoKKyAqIGluZm9ybWF0aW9uIGNhdGVnb3J5IGZvciBleHRlbmRlZCBsaW5rIGRhdGEgYW5kIEZDLTQgTGluayBEYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9MRF9SRVFVRVNUCT0gMHgyLAkvKiBSZXF1ZXN0ICovCisJRkNfQ0FUX0xEX1JFUExZCQk9IDB4MywJLyogUmVwbHkgKi8KKwlGQ19DQVRfTERfRElBRwkJPSAweEYsCS8qIGZvciBESUFHIHVzZSBvbmx5ICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIGV4dGVuZGVkIGhlYWRlcnMgKFZGVCwgSUZSIG9yIGVuY2Fwc3VsYXRpb24pCisgKi8KK2VudW0geworCUZDX0NBVF9WRlRfSERSID0gMHgwLAkvKiBWaXJ0dWFsIGZhYnJpYyB0YWdnaW5nIGhlYWRlciAqLworCUZDX0NBVF9JRlJfSERSID0gMHgxLAkvKiBJbnRlci1GYWJyaWMgcm91dGluZyBoZWFkZXIgKi8KKwlGQ19DQVRfRU5DX0hEUiA9IDB4MiwJLyogRW5jYXBzdWxhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBpbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgRkMtNCBkZXZpY2UgZGF0YQorICovCitlbnVtIHsKKwlGQ19DQVRfVU5DQVRFR19JTkZPCT0gMHgwLAkvKiBVbmNhdGVnb3JpemVkIGluZm9ybWF0aW9uICovCisJRkNfQ0FUX1NPTElDSVRfREFUQQk9IDB4MSwJLyogU29saWNpdGVkIERhdGEgKi8KKwlGQ19DQVRfVU5TT0xJQ0lUX0NUUkwJPSAweDIsCS8qIFVuc29saWNpdGVkIENvbnRyb2wgKi8KKwlGQ19DQVRfU09MSUNJVF9DVFJMCT0gMHgzLAkvKiBTb2xpY2l0ZWQgQ29udHJvbCAqLworCUZDX0NBVF9VTlNPTElDSVRfREFUQQk9IDB4NCwJLyogVW5zb2xpY2l0ZWQgRGF0YSAqLworCUZDX0NBVF9EQVRBX0RFU0MJPSAweDUsCS8qIERhdGEgRGVzY3JpcHRvciAqLworCUZDX0NBVF9VTlNPTElDSVRfQ01ECT0gMHg2LAkvKiBVbnNvbGljaXRlZCBDb21tYW5kICovCisJRkNfQ0FUX0NNRF9TVEFUVVMJPSAweDcsCS8qIENvbW1hbmQgU3RhdHVzICovCit9OworCisvKgorICogaW5mb3JtYXRpb24gY2F0ZWdvcnkgZm9yIExpbmsgQ29udHJvbAorICovCitlbnVtIHsKKwlGQ19DQVRfQUNLXzEJCT0gMHgwMCwKKwlGQ19DQVRfQUNLXzBfTgkJPSAweDAxLAorCUZDX0NBVF9QX1JKVAkJPSAweDAyLAorCUZDX0NBVF9GX1JKVAkJPSAweDAzLAorCUZDX0NBVF9QX0JTWQkJPSAweDA0LAorCUZDX0NBVF9GX0JTWV9EQVRBCT0gMHgwNSwKKwlGQ19DQVRfRl9CU1lfTElOS19DVEwJPSAweDA2LAorCUZDX0NBVF9GX0xDUgkJPSAweDA3LAorCUZDX0NBVF9OVFkJCT0gMHgwOCwKKwlGQ19DQVRfRU5ECQk9IDB4MDksCit9OworCisvKgorICogVHlwZSBGaWVsZCBEZWZpbml0aW9ucy4gRkMtUEggU2VjdGlvbiAxOC41IHBnLiAxNjUKKyAqLworZW51bSB7CisJRkNfVFlQRV9CTFMJCT0gMHgwLAkvKiBCYXNpYyBMaW5rIFNlcnZpY2UgKi8KKwlGQ19UWVBFX0VMUwkJPSAweDEsCS8qIEV4dGVuZGVkIExpbmsgU2VydmljZSAqLworCUZDX1RZUEVfSVAJCT0gMHg1LAkvKiBJUCAqLworCUZDX1RZUEVfRkNQCQk9IDB4OCwJLyogU0NTSS1GQ1AgKi8KKwlGQ19UWVBFX0dQUAkJPSAweDksCS8qIFNDU0lfR1BQICovCisJRkNfVFlQRV9TRVJWSUNFUwk9IDB4MjAsCS8qIEZpYnJlIENoYW5uZWwgU2VydmljZXMgKi8KKwlGQ19UWVBFX0ZDX0ZTUwkJPSAweDIyLAkvKiBGYWJyaWMgU3dpdGNoIFNlcnZpY2VzICovCisJRkNfVFlQRV9GQ19BTAkJPSAweDIzLAkvKiBGQy1BTCAqLworCUZDX1RZUEVfRkNfU05NUAkJPSAweDI0LAkvKiBGQy1TTk1QICovCisJRkNfVFlQRV9NQVgJCT0gMjU2LAkvKiAyNTYgRkMtNCB0eXBlcyAqLworfTsKKworc3RydWN0IGZjX2ZjNHR5cGVzX3N7CisJdTggICAgICAgICBiaXRzW0ZDX1RZUEVfTUFYIC8gOF07Cit9OworCisvKgorICogRnJhbWUgQ29udHJvbCBEZWZpbml0aW9ucy4gRkMtUEggVGFibGUtNDUuIHBnLiAxNjgKKyAqLworZW51bSB7CisJRkNUTF9FQ19PUklHID0gMHgwMDAwMDAsCS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwlGQ1RMX0VDX1JFU1AgPSAweDgwMDAwMCwJLyogZXhjaGFuZ2UgcmVzcG9uZGVyICovCisJRkNUTF9TRVFfSU5JID0gMHgwMDAwMDAsCS8qIHNlcXVlbmNlIGluaXRpYXRvciAqLworCUZDVExfU0VRX1JFQyA9IDB4NDAwMDAwLAkvKiBzZXF1ZW5jZSByZWNpcGllbnQgKi8KKwlGQ1RMX0ZTX0VYQ0ggPSAweDIwMDAwMCwJLyogZmlyc3Qgc2VxdWVuY2Ugb2YgeGNoZyAqLworCUZDVExfTFNfRVhDSCA9IDB4MTAwMDAwLAkvKiBsYXN0IHNlcXVlbmNlIG9mIHhjaGcgKi8KKwlGQ1RMX0VORF9TRVEgPSAweDA4MDAwMCwJLyogbGFzdCBmcmFtZSBvZiBzZXF1ZW5jZSAqLworCUZDVExfU0lfWEZFUiA9IDB4MDEwMDAwLAkvKiBzZXEgaW5pdGlhdGl2ZSB0cmFuc2ZlciAqLworCUZDVExfUk9fUFJFU0VOVCA9IDB4MDAwMDA4LAkvKiByZWxhdGl2ZSBvZmZzZXQgcHJlc2VudCAqLworCUZDVExfRklMTEJZVEVfTUFTSyA9IDB4MDAwMDAzCS8qICwgZmlsbCBieXRlIG1hc2sgKi8KK307CisKKy8qCisgKiBGYWJyaWMgV2VsbCBLbm93biBBZGRyZXNzZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1dFTExfS05PV05fQUREUgkJPSAweEZGRkZGMCwKKwlGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIAk9IDB4RkZGQzAwLAorCUZDX0FMSUFTX1NFUlZFUgkJCT0gMHhGRkZGRjgsCisJRkNfTUdNVF9TRVJWRVIJCQk9IDB4RkZGRkZBLAorCUZDX1RJTUVfU0VSVkVSCQkJPSAweEZGRkZGQiwKKwlGQ19OQU1FX1NFUlZFUgkJCT0gMHhGRkZGRkMsCisJRkNfRkFCUklDX0NPTlRST0xMRVIJCT0gMHhGRkZGRkQsCisJRkNfRkFCUklDX1BPUlQJCQk9IDB4RkZGRkZFLAorCUZDX0JST0FEQ0FTVF9TRVJWRVIJCT0gMHhGRkZGRkYKK307CisKKy8qCisgKiBkb21haW4vYXJlYS9wb3J0IGRlZmluZXMKKyAqLworI2RlZmluZSBGQ19ET01BSU5fTUFTSyAgMHhGRjAwMDAKKyNkZWZpbmUgRkNfRE9NQUlOX1NISUZUIDE2CisjZGVmaW5lIEZDX0FSRUFfTUFTSyAgICAweDAwRkYwMAorI2RlZmluZSBGQ19BUkVBX1NISUZUICAgOAorI2RlZmluZSBGQ19QT1JUX01BU0sgICAgMHgwMDAwRkYKKyNkZWZpbmUgRkNfUE9SVF9TSElGVCAgIDAKKworI2RlZmluZSBGQ19HRVRfRE9NQUlOKHApCSgoKHApICYgRkNfRE9NQUlOX01BU0spID4+IEZDX0RPTUFJTl9TSElGVCkKKyNkZWZpbmUgRkNfR0VUX0FSRUEocCkJCSgoKHApICYgRkNfQVJFQV9NQVNLKSA+PiBGQ19BUkVBX1NISUZUKQorI2RlZmluZSBGQ19HRVRfUE9SVChwKQkJKCgocCkgJiBGQ19QT1JUX01BU0spID4+IEZDX1BPUlRfU0hJRlQpCisKKyNkZWZpbmUgRkNfRE9NQUlOX0NUUkxSKHApCShGQ19ET01BSU5fQ09OVFJPTExFUl9NQVNLIHwgKEZDX0dFVF9ET01BSU4ocCkpKQorCitlbnVtIHsKKwlGQ19SWElEX0FOWSA9IDB4RkZGRlUsCit9OworCisvKgorICogZ2VuZXJpYyBFTFMgY29tbWFuZAorICovCitzdHJ1Y3QgZmNfZWxzX2NtZF9zeworCXUzMiAgICAgICAgZWxzX2NvZGU6ODsJLyogRUxTIENvbW1hbmQgQ29kZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6MjQ7Cit9OworCisvKgorICogRUxTIENvbW1hbmQgQ29kZXMuIEZDLVBIIFRhYmxlLTc1LiBwZy4gMjIzCisgKi8KK2VudW0geworCUZDX0VMU19MU19SSlQgPSAweDEsCS8qIExpbmsgU2VydmljZSBSZWplY3QuICovCisJRkNfRUxTX0FDQyA9IDB4MDIsCS8qIEFjY2VwdCAqLworCUZDX0VMU19QTE9HSSA9IDB4MDMsCS8qIE5fUG9ydCBMb2dpbi4gKi8KKwlGQ19FTFNfRkxPR0kgPSAweDA0LAkvKiBGX1BvcnQgTG9naW4uICovCisJRkNfRUxTX0xPR08gPSAweDA1LAkvKiBMb2dvdXQuICovCisJRkNfRUxTX0FCVFggPSAweDA2LAkvKiBBYm9ydCBFeGNoYW5nZSAqLworCUZDX0VMU19SRVMgPSAweDA4LAkvKiBSZWFkIEV4Y2hhbmdlIHN0YXR1cyAqLworCUZDX0VMU19SU1MgPSAweDA5LAkvKiBSZWFkIHNlcXVlbmNlIHN0YXR1cyBibG9jayAqLworCUZDX0VMU19SU0kgPSAweDBBLAkvKiBSZXF1ZXN0IFNlcXVlbmNlIEluaXRpYXRpdmUgKi8KKwlGQ19FTFNfRVNUQyA9IDB4MEMsCS8qIEVzdGltYXRlIENyZWRpdC4gKi8KKwlGQ19FTFNfUlRWID0gMHgwRSwJLyogUmVhZCBUaW1lb3V0IFZhbHVlLiAqLworCUZDX0VMU19STFMgPSAweDBGLAkvKiBSZWFkIExpbmsgU3RhdHVzLiAqLworCUZDX0VMU19FQ0hPID0gMHgxMCwJLyogRWNobyAqLworCUZDX0VMU19URVNUID0gMHgxMSwJLyogVGVzdCAqLworCUZDX0VMU19SUlEgPSAweDEyLAkvKiBSZWluc3RhdGUgUmVjb3ZlcnkgUXVhbGlmaWVyLiAqLworCUZDX0VMU19SRUMgPSAweDEzLAkvKiBBZGQgdGhpcyBmb3IgVEFQRSBzdXBwb3J0IGluIEZDUiAqLworCUZDX0VMU19QUkxJID0gMHgyMCwJLyogUHJvY2VzcyBMb2dpbiAqLworCUZDX0VMU19QUkxPID0gMHgyMSwJLyogUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1NDTiA9IDB4MjIsCS8qIFN0YXRlIENoYW5nZSBOb3RpZmljYXRpb24uICovCisJRkNfRUxTX1RQUkxPID0gMHgyNCwJLyogVGhpcmQgUGFydHkgUHJvY2VzcyBMb2dvdXQuICovCisJRkNfRUxTX1BESVNDID0gMHg1MCwJLyogRGlzY292ZXIgTl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0ZESVNDID0gMHg1MSwJLyogRGlzY292ZXIgRl9Qb3J0IFBhcmFtZXRlcnMuICovCisJRkNfRUxTX0FESVNDID0gMHg1MiwJLyogRGlzY292ZXIgQWRkcmVzcy4gKi8KKwlGQ19FTFNfRkFOID0gMHg2MCwJLyogRmFicmljIEFkZHJlc3MgTm90aWZpY2F0aW9uICovCisJRkNfRUxTX1JTQ04gPSAweDYxLAkvKiBSZWcgU3RhdGUgQ2hhbmdlIE5vdGlmaWNhdGlvbiAqLworCUZDX0VMU19TQ1IgPSAweDYyLAkvKiBTdGF0ZSBDaGFuZ2UgUmVnaXN0cmF0aW9uLiAqLworCUZDX0VMU19SVElOID0gMHg3NywJLyogTWFuZ2VtZW50IHNlcnZlciByZXF1ZXN0ICovCisJRkNfRUxTX1JOSUQgPSAweDc4LAkvKiBNYW5nZW1lbnQgc2VydmVyIHJlcXVlc3QgKi8KKwlGQ19FTFNfUkxJUiA9IDB4NzksCS8qIFJlZ2lzdGVyZWQgTGluayBJbmNpZGVudCBSZWNvcmQgKi8KKworCUZDX0VMU19SUFNDID0gMHg3RCwJLyogUmVwb3J0IFBvcnQgU3BlZWQgQ2FwYWJpbGl0aWVzICovCisJRkNfRUxTX1FTQSA9IDB4N0UsCS8qIFF1ZXJ5IFNlY3VyaXR5IEF0dHJpYnV0ZXMuIFJlZiBGQy1TUCAqLworCUZDX0VMU19FMkVfTEJFQUNPTiA9IDB4ODEsCisJCQkJLyogRW5kLXRvLUVuZCBMaW5rIEJlYWNvbiAqLworCUZDX0VMU19BVVRIID0gMHg5MCwJLyogQXV0aGVudGljYXRpb24uIFJlZiBGQy1TUCAqLworCUZDX0VMU19SRkNOID0gMHg5NywJLyogUmVxdWVzdCBGYWJyaWMgQ2hhbmdlIE5vdGlmaWNhdGlvbi4gUmVmCisJCQkJICpGQy1TUCAqLworCit9OworCisvKgorICogIFZlcnNpb24gbnVtYmVycyBmb3IgRkMtUEggc3RhbmRhcmRzLAorICogIHVzZWQgaW4gbG9naW4gdG8gaW5kaWNhdGUgd2hhdCBwb3J0CisgKiAgc3VwcG9ydHMuIFNlZSBGQy1QSC1YIHRhYmxlIDE1OC4KKyAqLworZW51bSB7CisJRkNfUEhfVkVSXzRfMyA9IDB4MDksCisJRkNfUEhfVkVSX1BIXzMgPSAweDIwLAorfTsKKworLyoKKyAqIFBEVSBzaXplIGRlZmluZXMKKyAqLworZW51bSB7CisJRkNfTUlOX1BEVVNaID0gNTEyLAorCUZDX01BWF9QRFVTWiA9IDIxMTIsCit9OworCisvKgorICogTl9Qb3J0IFBMT0dJIENvbW1vbiBTZXJ2aWNlIFBhcmFtZXRlcnMuCisgKiBGQy1QSC14LiBGaWd1cmUtNzYuIHBnLiAzMDguCisgKi8KK3N0cnVjdCBmY19wbG9naV9jc3Bfc3sKKwl1OCAgICAgICAgIHZlcmhpOwkvKiBGQy1QSCBoaWdoIHZlcnNpb24gKi8KKwl1OCAgICAgICAgIHZlcmxvOwkvKiBGQy1QSCBsb3cgdmVyc2lvbiAqLworCXUxNiAgICAgICAgYmJjcmVkOwkvKiBCQl9DcmVkaXQgKi8KKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBjaXJvOjEsCQkvKiBjb250aW51b3VzbHkgaW5jcmVhc2luZyBSTyAqLworCQkJcnJvOjEsCQkvKiByYW5kb20gcmVsYXRpdmUgb2Zmc2V0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlhbHRiYmNyZWQ6MSwJLyogYWx0ZXJuYXRlIEJCX0NyZWRpdCAqLworCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJdnZsX2luZm86MSwJLyogVlZMIEluZm8gaW5jbHVkZWQgKi8KKwkJCXJlc2VydmVkMToxOworCisJdTggICAgICAgICBoZ19zdXBwOjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlzeW5jX2NhcDoxLAorCQkJcl90X3RvdjoxLAorCQkJZGhfZHVwX3N1cHA6MSwKKwkJCWNpc2M6MSwJCS8qIGNvbnRpbnVvdXNseSBpbmNyZWFzaW5nIHNlcSBjb3VudCAqLworCQkJcGF5bG9hZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyLAorCQkJcmVzb2x1dGlvbjoxLAkvKiBtcy9ucyBFRF9UT1YgcmVzb2x1dGlvbiAqLworCQkJYWx0YmJjcmVkOjEsCS8qIGFsdGVybmF0ZSBCQl9DcmVkaXQgKi8KKwkJCXBvcnRfdHlwZToxLAkvKiBOX1BvcnQvRl9wb3J0ICovCisJCQlucGl2X3N1cHA6MSwJLyogTlBJViBzdXBwb3J0ZWQgKi8KKwkJCXJybzoxLAkJLyogcmFuZG9tIHJlbGF0aXZlIG9mZnNldCAqLworCQkJY2lybzoxOwkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgUk8gKi8KKworCXU4ICAgICAgICAgcGF5bG9hZDoxLAorCQkJY2lzYzoxLAkJLyogY29udGludW91c2x5IGluY3JlYXNpbmcgc2VxIGNvdW50ICovCisJCQlkaF9kdXBfc3VwcDoxLAorCQkJcl90X3RvdjoxLAorCQkJc3luY19jYXA6MSwKKwkJCXNlY3VyaXR5OjEsCisJCQlxdWVyeV9kYmM6MSwKKwkJCWhnX3N1cHA6MTsKKyNlbmRpZgorCisJdTE2ICAgICAgICByeHN6OwkJLyogcmVjaWV2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUxNiAgICAgICAgY29uc2VxOworCXUxNiAgICAgICAgcm9fYml0bWFwOworCisJdTMyICAgICAgICBlX2RfdG92OworfTsKKworLyoKKyAqIE5fUG9ydCBQTE9HSSBDbGFzcyBTcGVjaWZpYyBQYXJhbWV0ZXJzLgorICogRkMtUEgteC4gRmlndXJlIDc4LiBwZy4gMzE4LgorICovCitzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIGNsYXNzX3ZhbGlkOjE7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHNlcXVlbnRpYWw6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworI2Vsc2UKKwl1MzIgICAgICAgIHJlc2VydmVkMjozOworCXUzMiAgICAgICAgc2VxdWVudGlhbDoxOworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTMyICAgICAgICBpbnRlcm1peDoxOwkvKiBjbGFzcyBpbnRlcm1peCBzdXBwb3J0ZWQgaWYgc2V0ID0xLgorCQkJCQkgKiB2YWxpZCBvbmx5IGZvciBjbGFzczEuIFJlc2VydmVkIGZvcgorCQkJCQkgKiBjbGFzczIgJiBjbGFzczMKKwkJCQkJICovCisJdTMyICAgICAgICBjbGFzc192YWxpZDoxOworI2VuZGlmCisKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ0OjE2OworCXUzMiAgICAgICAgcnhzejoxNjsJLyogUmVjZWl2ZSBkYXRhX2ZpZWxkIHNpemUgKi8KKworCXUzMiAgICAgICAgcmVzZXJ2ZWQ1Ojg7CisJdTMyICAgICAgICBjb25zZXE6ODsKKwl1MzIgICAgICAgIGUyZV9jcmVkaXQ6MTY7CS8qIGVuZCB0byBlbmQgY3JlZGl0ICovCisKKwl1MzIgICAgICAgIHJlc2VydmVkNzo4OworCXUzMiAgICAgICAgb3NweDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ4OjE2OworfTsKKworI2RlZmluZSBGTE9HSV9WVkxfQlJDRCAgICAweDQyNTI0MzQ0IC8qIEFTQ0lJIHZhbHVlIGZvciBlYWNoIGNoYXJhY3RlciBpbgorCQkJCSAgICAgICogc3RyaW5nICJCUkNEIiAqLworCisvKgorICogUExPR0kgZWxzIGNvbW1hbmQgYW5kIHJlcGx5IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2xvZ2lfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY3NwX3MgIGNzcDsJCS8qIGNvbW1vbiBzZXJ2aWNlIHBhcmFtcyAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzMTsJCS8qIGNsYXNzIDEgc2VydmljZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGZjX3Bsb2dpX2NscF9zICBjbGFzczI7CQkvKiBjbGFzcyAyIHNlcnZpY2UgcGFyYW1ldGVycyAqLworCXN0cnVjdCBmY19wbG9naV9jbHBfcyAgY2xhc3MzOwkJLyogY2xhc3MgMyBzZXJ2aWNlIHBhcmFtZXRlcnMgKi8KKwlzdHJ1Y3QgZmNfcGxvZ2lfY2xwX3MgIGNsYXNzNDsJCS8qIGNsYXNzIDQgc2VydmljZSBwYXJhbWV0ZXJzICovCisJdTggICAgICAgICB2dmxbMTZdOwkvKiB2ZW5kb3IgdmVyc2lvbiBsZXZlbCAqLworfTsKKworLyoKKyAqIExPR08gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfbG9nb19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgbnBvcnRfaWQ6MjQ7CS8qIE5fUG9ydCBpZGVudGlmaWVyIG9mIHNvdXJjZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX3BvcnRfbmFtZTsJLyogUG9ydCBuYW1lIG9mIHRoZSBMT0dPIG9yaWdpbmF0b3IgKi8KK307CisKKy8qCisgKiBBRElTQyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19hZGlzY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG9yaWdfSEE6MjQ7CS8qIG9yaWdpbmF0b3IgaGFyZCBhZGRyZXNzICovCisJd3duX3QgICAgICAgICAgIG9yaWdfcG9ydF9uYW1lOwkvKiBvcmlnaW5hdG9yIHBvcnQgbmFtZSAqLworCXd3bl90ICAgICAgICAgICBvcmlnX25vZGVfbmFtZTsJLyogb3JpZ2luYXRvciBub2RlIG5hbWUgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KK307CisKKy8qCisgKiBFeGNoYW5nZSBzdGF0dXMgYmxvY2sKKyAqLworc3RydWN0IGZjX2V4Y2hfc3RhdHVzX2Jsa19zeworCXUzMiAgICAgICAgb3hpZDoxNjsKKwl1MzIgICAgICAgIHJ4aWQ6MTY7CisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBvcmlnX25wOjI0OwkvKiBvcmlnaW5hdG9yIE5Qb3J0SUQgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfbnA6MjQ7CS8qIHJlc3BvbmRlciBOUG9ydElEICovCisJdTMyICAgICAgICBlc19iaXRzOworCXUzMiAgICAgICAgcmVzMzsKKwkvKgorCSAqIHVuIG1vZGlmaWVkIHNlY3Rpb24gb2YgdGhlIGZpZWxkcworCSAqLworfTsKKworLyoKKyAqIFJFUyBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yZXNfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkvKiBFTFMgY29tbWFuZCBjb2RlICovCisJdTMyICAgICAgICByZXMxOjg7CisJdTMyICAgICAgICBucG9ydF9pZDoyNDsJLyogTl9Qb3J0IGlkZW50aWZpZXIgb2Ygc291cmNlICovCisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKKwl1OCAgICAgICAgIGFzc29jX2hkclszMl07Cit9OworCisvKgorICogUkVTIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVzX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgZWxzX2NtZDsJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXN0cnVjdCBmY19leGNoX3N0YXR1c19ibGtfcyBmY19leGNoX2JsazsgLyogRXhjaGFuZ2Ugc3RhdHVzIGJsb2NrICovCit9OworCisvKgorICogUkVDIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworc3RydWN0IGZjX3JlY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIG5wb3J0X2lkOjI0OwkvKiBOX1BvcnQgaWRlbnRpZmllciBvZiBzb3VyY2UgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworfTsKKworI2RlZmluZSBGQ19SRUNfRVNCX09XTl9SU1AJMHg4MDAwMDAwMAkvKiByZXNwb25kZXIgb3ducyAqLworI2RlZmluZSBGQ19SRUNfRVNCX1NJCQkweDQwMDAwMDAwCS8qIFNJIGlzIG93bmVkIAkqLworI2RlZmluZSBGQ19SRUNfRVNCX0NPTVAJCTB4MjAwMDAwMDAJLyogZXhjaGFuZ2UgaXMgY29tcGxldGUJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9FTkRDT05EX0FCTgkweDEwMDAwMDAwCS8qIGFibm9ybWFsIGVuZGluZyAJKi8KKyNkZWZpbmUgRkNfUkVDX0VTQl9SUUFDVAkweDA0MDAwMDAwCS8qIHJlY292ZXJ5IHF1YWwgYWN0aXZlCSovCisjZGVmaW5lIEZDX1JFQ19FU0JfRVJSUF9NU0sJMHgwMzAwMDAwMAorI2RlZmluZSBGQ19SRUNfRVNCX09YSURfSU5WCTB4MDA4MDAwMDAJLyogaW52YWxpZCBPWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1JYSURfSU5WCTB4MDA0MDAwMDAJLyogaW52YWxpZCBSWElECQkqLworI2RlZmluZSBGQ19SRUNfRVNCX1BSSU9fSU5VU0UJMHgwMDIwMDAwMAorCisvKgorICogUkVDIGVscyBhY2NlcHQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcmVjX2FjY19zIHsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIG94aWQ6MTY7CisJdTMyICAgICAgICByeGlkOjE2OworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19pZDoyNDsJLyogTl9Qb3J0IGlkIG9mIGV4Y2hhbmdlIG9yaWdpbmF0b3IgKi8KKwl1MzIgICAgICAgIHJlczI6ODsKKwl1MzIgICAgICAgIHJlc3BfaWQ6MjQ7CS8qIE5fUG9ydCBpZCBvZiBleGNoYW5nZSByZXNwb25kZXIgKi8KKwl1MzIgICAgICAgIGNvdW50OwkJLyogZGF0YSB0cmFuc2ZlciBjb3VudCAqLworCXUzMiAgICAgICAgZV9zdGF0OwkJLyogZXhjaGFuZ2Ugc3RhdHVzICovCit9OworCisvKgorICogUlNJIGVscyBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19yc2lfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgb3JpZ19zaWQ6MjQ7CisJdTMyICAgICAgICBveGlkOjE2OworCXUzMiAgICAgICAgcnhpZDoxNjsKK307CisKKy8qCisgKiBzdHJ1Y3R1cmUgZm9yIFBSTEkgcGFyYW1hdGVyIHBhZ2VzLCBib3RoIHJlcXVlc3QgJiByZXNwb25zZQorICogc2VlIEZDLVBILVggdGFibGUgMTEzICYgMTE1IGZvciBleHBsYW5hdGlvbiBhbHNvIEZDUCB0YWJsZSA4CisgKi8KK3N0cnVjdCBmY19wcmxpX3BhcmFtc19zeworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6IDE2OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICB0YXNrX3JldHJ5X2lkIDogMTsKKwl1MzIgICAgICAgIHJldHJ5IDogMTsKKworCXUzMiAgICAgICAgY29uZmlybSA6IDE7CisJdTMyICAgICAgICBkb3ZlcmxheToxOworCXUzMiAgICAgICAgaW5pdGlhdG9yOjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICBkcm1peDoxOworCXUzMiAgICAgICAgcnhyZGlzYWI6MTsKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisjZWxzZQorCXUzMiAgICAgICAgcmV0cnkgOiAxOworCXUzMiAgICAgICAgdGFza19yZXRyeV9pZCA6IDE7CisJdTMyICAgICAgICByZWNfc3VwcG9ydCA6IDE7CisJdTMyICAgICAgICByZXNlcnZlZDE6IDU7CisKKwl1MzIgICAgICAgIHd4cmRpc2FiOjE7CisJdTMyICAgICAgICByeHJkaXNhYjoxOworCXUzMiAgICAgICAgZHJtaXg6MTsKKwl1MzIgICAgICAgIGNkbWl4OjE7CisJdTMyICAgICAgICB0YXJnZXQ6MTsKKwl1MzIgICAgICAgIGluaXRpYXRvcjoxOworCXUzMiAgICAgICAgZG92ZXJsYXk6MTsKKwl1MzIgICAgICAgIGNvbmZpcm0gOiAxOworI2VuZGlmCit9OworCisvKgorICogdmFsaWQgdmFsdWVzIGZvciByc3Bjb2RlIGluIFBSTEkgQUNDIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfUFJMSV9BQ0NfWFFURCA9IDB4MSwJCS8qIHJlcXVlc3QgZXhlY3V0ZWQgKi8KKwlGQ19QUkxJX0FDQ19QUkVERUZfSU1HID0gMHg1LAkvKiBwcmVkZWZpbmVkIGltYWdlIC0gbm8gcHJsaSBuZWVkZWQgKi8KK307CisKK3N0cnVjdCBmY19wcmxpX3BhcmFtc19wYWdlX3N7CisJdTMyICAgICAgICB0eXBlOjg7CisJdTMyICAgICAgICBjb2RleHQ6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3JpZ3Byb2Nhc3Y6MTsKKwl1MzIgICAgICAgIHJzcHBhdjoxOworCXUzMiAgICAgICAgaW1hZ2VwYWlyOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHJzcGNvZGU6NDsKKyNlbHNlCisJdTMyICAgICAgICByc3Bjb2RlOjQ7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIGltYWdlcGFpcjoxOworCXUzMiAgICAgICAgcnNwcGF2OjE7CisJdTMyICAgICAgICBvcmlncHJvY2FzdjoxOworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDI6ODsKKworCXUzMiAgICAgICAgb3JpZ3Byb2NhczsKKwl1MzIgICAgICAgIHJzcHByb2NhczsKKwlzdHJ1Y3QgZmNfcHJsaV9wYXJhbXNfcyAgc2VydnBhcmFtczsKK307CisKKy8qCisgKiBQUkxJIHJlcXVlc3QgYW5kIGFjY2VwdCBwYXlsb2FkLCBGQy1QSC1YIHRhYmxlcyAxMTIgJiAxMTQKKyAqLworc3RydWN0IGZjX3BybGlfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBnbGVuOjg7CisJdTMyICAgICAgICBwYWdlYnl0ZXM6MTY7CisJc3RydWN0IGZjX3BybGlfcGFyYW1zX3BhZ2VfcyBwYXJhbXBhZ2U7Cit9OworCisvKgorICogUFJMTyBsb2dvdXQgcGFyYW1zIHBhZ2UKKyAqLworc3RydWN0IGZjX3BybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKwl1MzIgICAgICAgIHJwYV92YWxpZDoxOwkvKiByZXNwb25kZXIgcHJvY2VzcyBhc3NvY2lhdG9yIHZhbGlkICovCisJdTMyICAgICAgICByZXMxOjE0OworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTQ7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CS8qIG9yaWdpbmF0b3IgcHJvY2VzcyBhc3NvY2lhdG9yCisJCQkJCSAqIHZhbGlkCisJCQkJCSAqLworI2VuZGlmCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOworfTsKKworLyoKKyAqIFBSTE8gZWxzIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19zeworCXUzMiAgICAgICAgCWNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIAlwYWdlX2xlbjo4OworCXUzMiAgICAgICAgCXBheWxvYWRfbGVuOjE2OworCXN0cnVjdCBmY19wcmxvX3BhcmFtc19wYWdlX3MgCXBybG9fcGFyYW1zWzFdOworfTsKKworLyoKKyAqIFBSTE8gTG9nb3V0IHJlc3BvbnNlIHBhcmFtZXRlciBwYWdlCisgKi8KK3N0cnVjdCBmY19wcmxvX2FjY19wYXJhbXNfcGFnZV9zeworCXUzMiAgICAgICAgdHlwZTo4OworCXUzMiAgICAgICAgdHlwZV9leHQ6ODsKKworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsJLyogb3JpZ2luYXRvciBwcm9jZXNzIGFzc29jaWF0b3IKKwkJCQkJICogdmFsaWQKKwkJCQkJICovCisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsJLyogcmVzcG9uZGVyIHByb2Nlc3MgYXNzb2NpYXRvciB2YWxpZCAqLworCXUzMiAgICAgICAgcmVzMToxNDsKKyNlbHNlCisJdTMyICAgICAgICByZXMxOjE0OworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CS8qIHJlc3BvbmRlciBwcm9jZXNzIGFzc29jaWF0b3IgdmFsaWQgKi8KKwl1MzIgICAgICAgIG9wYV92YWxpZDoxOwkvKiBvcmlnaW5hdG9yIHByb2Nlc3MgYXNzb2NpYXRvcgorCQkJCQkgKiB2YWxpZAorCQkJCQkgKi8KKyNlbmRpZgorCXUzMiAgICAgICAgb3JpZ19wcm9jZXNzX2Fzc2M7CisJdTMyICAgICAgICByZXNwX3Byb2Nlc3NfYXNzYzsKKworCXUzMiAgICAgICAgZmM0dHlwZV9jc3A7Cit9OworCisvKgorICogUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfcHJsb19hY2Nfc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKwlzdHJ1Y3QgZmNfcHJsb19hY2NfcGFyYW1zX3BhZ2VfcyBwcmxvX2FjY19wYXJhbXNbMV07Cit9OworCisvKgorICogU0NSIGVscyBjb21tYW5kIHBheWxvYWQKKyAqLworZW51bSB7CisJRkNfU0NSX1JFR19GVU5DX0ZBQlJJQ19ERVRFQ1RFRCA9IDB4MDEsCisJRkNfU0NSX1JFR19GVU5DX05fUE9SVF9ERVRFQ1RFRCA9IDB4MDIsCisJRkNfU0NSX1JFR19GVU5DX0ZVTEwgPSAweDAzLAorCUZDX1NDUl9SRUdfRlVOQ19DTEVBUl9SRUcgPSAweEZGLAorfTsKKworLyogU0NSIFZVIHJlZ2lzdHJhdGlvbnMgKi8KK2VudW0geworCUZDX1ZVX1NDUl9SRUdfRlVOQ19GQUJSSUNfTkFNRV9DSEFOR0UgPSAweDAxCit9OworCitzdHJ1Y3QgZmNfc2NyX3N7CisJdTMyIGNvbW1hbmQ6ODsKKwl1MzIgcmVzOjI0OworCXUzMiB2dV9yZWdfZnVuYzo4OyAvKiBWZW5kb3IgVW5pcXVlIFJlZ2lzdHJhdGlvbnMgKi8KKwl1MzIgcmVzMToxNjsKKwl1MzIgcmVnX2Z1bmM6ODsKK307CisKKy8qCisgKiBJbmZvcm1hdGlvbiBjYXRlZ29yeSBmb3IgQmFzaWMgbGluayBkYXRhCisgKi8KK2VudW0geworCUZDX0NBVF9OT1AJPSAweDAsCisJRkNfQ0FUX0FCVFMJPSAweDEsCisJRkNfQ0FUX1JNQwk9IDB4MiwKKwlGQ19DQVRfQkFfQUNDCT0gMHg0LAorCUZDX0NBVF9CQV9SSlQJPSAweDUsCisJRkNfQ0FUX1BSTVQJPSAweDYsCit9OworCisvKgorICogTFNfUkpUIGVscyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19sc19yanRfcyB7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOwkJLyogRUxTIGNvbW1hbmQgY29kZSAqLworCXUzMiAgICAgICAgcmVzMTo4OworCXUzMiAgICAgICAgcmVhc29uX2NvZGU6ODsJCS8qIFJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlX2V4cGw6ODsJLyogUmVhc29uIGNvZGUgZXhwbGFuYXRpb24gKi8KKwl1MzIgICAgICAgIHZlbmRvcl91bmlxdWU6ODsJLyogVmVuZG9yIHNwZWNpZmljICovCit9OworCisvKgorICogTFNfUkpUIHJlYXNvbiBjb2RlcworICovCitlbnVtIHsKKwlGQ19MU19SSlRfUlNOX0lOVl9DTURfQ09ERQk9IDB4MDEsCisJRkNfTFNfUkpUX1JTTl9MT0dJQ0FMX0VSUk9SCT0gMHgwMywKKwlGQ19MU19SSlRfUlNOX0xPR0lDQUxfQlVTWQk9IDB4MDUsCisJRkNfTFNfUkpUX1JTTl9QUk9UT0NPTF9FUlJPUgk9IDB4MDcsCisJRkNfTFNfUkpUX1JTTl9VTkFCTEVfVE9fUEVSRl9DTUQgPSAweDA5LAorCUZDX0xTX1JKVF9SU05fQ01EX05PVF9TVVBQCT0gMHgwQiwKK307CisKKy8qCisgKiBMU19SSlQgcmVhc29uIGNvZGUgZXhwbGFuYXRpb24KKyAqLworZW51bSB7CisJRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8JCT0gMHgwMCwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfT1BUSU9OUwk9IDB4MDEsCisJRkNfTFNfUkpUX0VYUF9TUEFSTVNfRVJSX0lOSV9DVEwJPSAweDAzLAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9SRUNfQ1RMCT0gMHgwNSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfUlhTWgkJPSAweDA3LAorCUZDX0xTX1JKVF9FWFBfU1BBUk1TX0VSUl9DT05TRVEJCT0gMHgwOSwKKwlGQ19MU19SSlRfRVhQX1NQQVJNU19FUlJfQ1JFRElUCQk9IDB4MEIsCisJRkNfTFNfUkpUX0VYUF9JTlZfUE9SVF9OQU1FCQk9IDB4MEQsCisJRkNfTFNfUkpUX0VYUF9JTlZfTk9ERV9GQUJSSUNfTkFNRQk9IDB4MEUsCisJRkNfTFNfUkpUX0VYUF9JTlZfQ1NQCQkJPSAweDBGLAorCUZDX0xTX1JKVF9FWFBfSU5WX0FTU09DX0hEUgkJPSAweDExLAorCUZDX0xTX1JKVF9FWFBfQVNTT0NfSERSX1JFUUQJCT0gMHgxMywKKwlGQ19MU19SSlRfRVhQX0lOVl9PUklHX1NfSUQJCT0gMHgxNSwKKwlGQ19MU19SSlRfRVhQX0lOVl9PWElEX1JYSURfQ09NQgk9IDB4MTcsCisJRkNfTFNfUkpUX0VYUF9DTURfQUxSRUFEWV9JTl9QUk9HCT0gMHgxOSwKKwlGQ19MU19SSlRfRVhQX0xPR0lOX1JFUVVJUkVECQk9IDB4MUUsCisJRkNfTFNfUkpUX0VYUF9JTlZBTElEX05QT1JUX0lECQk9IDB4MUYsCisJRkNfTFNfUkpUX0VYUF9JTlNVRkZfUkVTCQk9IDB4MjksCisJRkNfTFNfUkpUX0VYUF9DTURfTk9UX1NVUFAJCT0gMHgyQywKKwlGQ19MU19SSlRfRVhQX0lOVl9QQVlMT0FEX0xFTgkJPSAweDJELAorfTsKKworLyoKKyAqIFJSUSBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ycnFfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7CS8qIEVMUyBjb21tYW5kIGNvZGUgKi8KKwl1MzIgICAgICAgIHJlczE6ODsKKwl1MzIgICAgICAgIHNfaWQ6MjQ7CS8qIGV4Y2hhbmdlIG9yaWdpbmF0b3IgU19JRCAqLworCisJdTMyICAgICAgICBveF9pZDoxNjsJLyogb3JpZ2luYXRvciBleGNoYW5nZSBJRCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJlc3BvbmRlciBleGNoYW5nZSBJRCAqLworCisJdTMyICAgICAgICByZXMyWzhdOwkvKiBvcHRpb25hbCBhc3NvY2lhdGlvbiBoZWFkZXIgKi8KK307CisKKy8qCisgKiBBQlRTIEJBX0FDQyByZXBseSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19iYV9hY2Nfc3sKKwl1MzIgICAgICAgIHNlcV9pZF92YWxpZDo4OwkvKiBzZXQgdG8gMHgwMCBmb3IgQWJvcnQgRXhjaGFuZ2UgKi8KKwl1MzIgICAgICAgIHNlcV9pZDo4OwkvKiBpbnZhbGlkIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgcmVzMjoxNjsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBPWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIHJ4X2lkOjE2OwkvKiBSWF9JRCBmcm9tIEFCVFMgZnJhbWUgKi8KKwl1MzIgICAgICAgIGxvd19zZXFfY250OjE2OwkvKiBzZXQgdG8gMHgwMDAwIGZvciBBYm9ydCBFeGNoYW5nZSAqLworCXUzMiAgICAgICAgaGlnaF9zZXFfY250OjE2Oy8qIHNldCB0byAweEZGRkYgZm9yIEFib3J0IEV4Y2hhbmdlICovCit9OworCisvKgorICogQUJUUyBCQV9SSlQgcmVqZWN0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX2JhX3JqdF9zeworCXUzMiAgICAgICAgcmVzMTo4OwkJLyogUmVzZXJ2ZWQgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9jb2RlOjg7CS8qIHJlYXNvbiBjb2RlIGZvciByZWplY3QgKi8KKwl1MzIgICAgICAgIHJlYXNvbl9leHBsOjg7CS8qIHJlYXNvbiBjb2RlIGV4cGxhbmF0aW9uICovCisJdTMyICAgICAgICB2ZW5kb3JfdW5pcXVlOjg7LyogdmVuZG9yIHVuaXF1ZSByZWFzb24gY29kZSxzZXQgdG8gMCAqLworfTsKKworLyoKKyAqIFRQUkxPIGxvZ291dCBwYXJhbWV0ZXIgcGFnZQorICovCitzdHJ1Y3QgZmNfdHBybG9fcGFyYW1zX3BhZ2Vfc3sKKwl1MzIgICAgICAgIHR5cGU6ODsKKwl1MzIgICAgICAgIHR5cGVfZXh0Ojg7CisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgb3BhX3ZhbGlkOjE7CisJdTMyICAgICAgICBycGFfdmFsaWQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgZ2xvYmFsX3Byb2Nlc3NfbG9nb3V0OjE7CisJdTMyICAgICAgICByZXMxOjEyOworI2Vsc2UKKwl1MzIgICAgICAgIHJlczE6MTI7CisJdTMyICAgICAgICBnbG9iYWxfcHJvY2Vzc19sb2dvdXQ6MTsKKwl1MzIgICAgICAgIHRwb19ucG9ydF92YWxpZDoxOworCXUzMiAgICAgICAgcnBhX3ZhbGlkOjE7CisJdTMyICAgICAgICBvcGFfdmFsaWQ6MTsKKyNlbmRpZgorCisJdTMyICAgICAgICBvcmlnX3Byb2Nlc3NfYXNzYzsKKwl1MzIgICAgICAgIHJlc3BfcHJvY2Vzc19hc3NjOworCisJdTMyICAgICAgICByZXMyOjg7CisJdTMyICAgICAgICB0cG9fbnBvcnRfaWQ7Cit9OworCisvKgorICogVFBSTE8gRUxTIGNvbW1hbmQgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fc3sKKwl1MzIgICAgICAgIGNvbW1hbmQ6ODsKKwl1MzIgICAgICAgIHBhZ2VfbGVuOjg7CisJdTMyICAgICAgICBwYXlsb2FkX2xlbjoxNjsKKworCXN0cnVjdCBmY190cHJsb19wYXJhbXNfcGFnZV9zIHRwcmxvX3BhcmFtc1sxXTsKK307CisKK2VudW0gZmNfdHBybG9fdHlwZXsKKwlGQ19HTE9CQUxfTE9HTyA9IDEsCisJRkNfVFBSX0xPR08KK307CisKKy8qCisgKiBUUFJMTyBlbHMgY29tbWFuZCBBQ0MgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfdHBybG9fYWNjX3N7CisJdTMyCWNvbW1hbmQ6ODsKKwl1MzIJcGFnZV9sZW46ODsKKwl1MzIJcGF5bG9hZF9sZW46MTY7CisJc3RydWN0IGZjX3BybG9fYWNjX3BhcmFtc19wYWdlX3MgdHBybG9fYWNjX3BhcmFtc1sxXTsKK307CisKKy8qCisgKiBSU0NOIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KKyNkZWZpbmUgRkNfUlNDTl9QR0xFTgkweDQKKworZW51bSBmY19yc2NuX2Zvcm1hdHsKKwlGQ19SU0NOX0ZPUk1BVF9QT1JUSUQJPSAweDAsCisJRkNfUlNDTl9GT1JNQVRfQVJFQQk9IDB4MSwKKwlGQ19SU0NOX0ZPUk1BVF9ET01BSU4JPSAweDIsCisJRkNfUlNDTl9GT1JNQVRfRkFCUklDCT0gMHgzLAorfTsKKworc3RydWN0IGZjX3JzY25fZXZlbnRfc3sKKwl1MzIgICAgICAgIGZvcm1hdDoyOworCXUzMiAgICAgICAgcXVhbGlmaWVyOjQ7CisJdTMyICAgICAgICByZXN2ZDoyOworCXUzMiAgICAgICAgcG9ydGlkOjI0OworfTsKKworc3RydWN0IGZjX3JzY25fcGxfc3sKKwl1OCAgICAgICAgIGNvbW1hbmQ7CisJdTggICAgICAgICBwYWdlbGVuOworCXUxNiAgICAgICAgcGF5bGRsZW47CisJc3RydWN0IGZjX3JzY25fZXZlbnRfcyBldmVudFsxXTsKK307CisKKy8qCisgKiBFQ0hPIGVscyBjb21tYW5kIHJlcSBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19lY2hvX3MgeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKK307CisKKy8qCisgKiBSTklEIGVscyBjb21tYW5kCisgKi8KKworI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9DT01NT04gICAgCQkgMHgwMAorI2RlZmluZSBSTklEX05PREVJRF9EQVRBX0ZPUk1BVF9GQ1AzICAgICAgICAJCSAweDA4CisjZGVmaW5lIFJOSURfTk9ERUlEX0RBVEFfRk9STUFUX0RJU0NPVkVSWSAgICAgCQkweERGCisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCisvKgorICogUk5JRCBlbHMgY29tbWFuZCBwYXlsb2FkCisgKi8KK3N0cnVjdCBmY19ybmlkX2NtZF9zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkOjI0OworfTsKKworLyoKKyAqIFJOSUQgZWxzIHJlc3BvbnNlIHBheWxvYWQKKyAqLworCitzdHJ1Y3QgZmNfcm5pZF9jb21tb25faWRfZGF0YV9zeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CisJd3duX3QgICAgICAgICAgIG5vZGVfbmFtZTsKK307CisKK3N0cnVjdCBmY19ybmlkX2dlbmVyYWxfdG9wb2xvZ3lfZGF0YV9zeworCXUzMiAgICAgICAgdmVuZG9yX3VuaXF1ZVs0XTsKKwl1MzIgICAgICAgIGFzc29fdHlwZTsKKwl1MzIgICAgICAgIHBoeV9wb3J0X251bTsKKwl1MzIgICAgICAgIG51bV9hdHRhY2hlZF9ub2RlczsKKwl1MzIgICAgICAgIG5vZGVfbWdtdDo4OworCXUzMiAgICAgICAgaXBfdmVyc2lvbjo4OworCXUzMiAgICAgICAgdWRwX3RjcF9wb3J0X251bToxNjsKKwl1MzIgICAgICAgIGlwX2FkZHJlc3NbNF07CisJdTMyICAgICAgICByZXNlcnZlZDoxNjsKKwl1MzIgICAgICAgIHZlbmRvcl9zcGVjaWZpYzoxNjsKK307CisKK3N0cnVjdCBmY19ybmlkX2FjY19zeworCXN0cnVjdCBmY19lbHNfY21kX3MgICAgZWxzX2NtZDsKKwl1MzIgICAgICAgIG5vZGVfaWRfZGF0YV9mb3JtYXQ6ODsKKwl1MzIgICAgICAgIGNvbW1vbl9pZF9kYXRhX2xlbmd0aDo4OworCXUzMiAgICAgICAgcmVzZXJ2ZWQ6ODsKKwl1MzIgICAgICAgIHNwZWNpZmljX2lkX2RhdGFfbGVuZ3RoOjg7CisJc3RydWN0IGZjX3JuaWRfY29tbW9uX2lkX2RhdGFfcyBjb21tb25faWRfZGF0YTsKKwlzdHJ1Y3QgZmNfcm5pZF9nZW5lcmFsX3RvcG9sb2d5X2RhdGFfcyBnZW5fdG9wb2xvZ3lfZGF0YTsKK307CisKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX0hVQiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfU1dJVENIICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9HQVRFV0FZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfREVWSUNFICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfSE9TVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9TVE9SQUdFX1NVQlNZU1RFTSAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1NUT1JBR0VfQUNDRVNTX0RFVklDRSAgICAgIDB4MDAwMDAwMEUKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTkFTX1NFUlZFUiAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSBSTklEX0FTU09DSUFURURfVFlQRV9CUklER0UgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFJOSURfQVNTT0NJQVRFRF9UWVBFX1ZJUlRVQUxJWkFUSU9OX0RFVklDRSAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUk5JRF9BU1NPQ0lBVEVEX1RZUEVfTVVMVElfRlVOQ1RJT05fREVWSUNFICAgICAgMHgwMDAwMDBGRgorCitlbnVtIGZjX3Jwc2Nfc3BlZWRfY2FweworCVJQU0NfU1BFRURfQ0FQXzFHID0gMHg4MDAwLAorCVJQU0NfU1BFRURfQ0FQXzJHID0gMHg0MDAwLAorCVJQU0NfU1BFRURfQ0FQXzRHID0gMHgyMDAwLAorCVJQU0NfU1BFRURfQ0FQXzEwRyA9IDB4MTAwMCwKKwlSUFNDX1NQRUVEX0NBUF84RyA9IDB4MDgwMCwKKwlSUFNDX1NQRUVEX0NBUF8xNkcgPSAweDA0MDAsCisKKwlSUFNDX1NQRUVEX0NBUF9VTktOT1dOID0gMHgwMDAxLAorfTsKKworZW51bSBmY19ycHNjX29wX3NwZWVkX3N7CisJUlBTQ19PUF9TUEVFRF8xRyA9IDB4ODAwMCwKKwlSUFNDX09QX1NQRUVEXzJHID0gMHg0MDAwLAorCVJQU0NfT1BfU1BFRURfNEcgPSAweDIwMDAsCisJUlBTQ19PUF9TUEVFRF8xMEcgPSAweDEwMDAsCisJUlBTQ19PUF9TUEVFRF84RyA9IDB4MDgwMCwKKwlSUFNDX09QX1NQRUVEXzE2RyA9IDB4MDQwMCwKKworCVJQU0NfT1BfU1BFRURfTk9UX0VTVCA9IDB4MDAwMSwJLyohIHNwZWVkIG5vdCBlc3RhYmxpc2hlZCAqLworfTsKKworc3RydWN0IGZjX3Jwc2Nfc3BlZWRfaW5mb19zeworCXUxNiAgICAgICAgcG9ydF9zcGVlZF9jYXA7CS8qISBzZWUgZmNfcnBzY19zcGVlZF9jYXBfdCAqLworCXUxNiAgICAgICAgcG9ydF9vcF9zcGVlZDsJLyohIHNlZSBmY19ycHNjX29wX3NwZWVkX3QgKi8KK307CisKK2VudW0gbGlua19lMmVfYmVhY29uX3N1YmNtZHsKKwlMSU5LX0UyRV9CRUFDT05fT04gPSAxLAorCUxJTktfRTJFX0JFQUNPTl9PRkYgPSAyCit9OworCitlbnVtIGJlYWNvbl90eXBleworCUJFQUNPTl9UWVBFX05PUk1BTAk9IDEsCS8qISBOb3JtYWwgQmVhY29uaW5nLiBHcmVlbiAqLworCUJFQUNPTl9UWVBFX1dBUk4JPSAyLAkvKiEgV2FybmluZyBCZWFjb25pbmcuIFllbGxvdy9BbWJlciAqLworCUJFQUNPTl9UWVBFX0NSSVRJQ0FMCT0gMwkvKiEgQ3JpdGljYWwgQmVhY29uaW5nLiBSZWQgKi8KK307CisKK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcGFyYW1fcyB7CisJdTggICAgICAgICBiZWFjb25fdHlwZTsJLyogQmVhY29uIFR5cGUuIFNlZSBiZWFjb25fdHlwZV90ICovCisJdTggICAgICAgICBiZWFjb25fZnJlcXVlbmN5OworCQkJCQkvKiBCZWFjb24gZnJlcXVlbmN5LiBOdW1iZXIgb2YgYmxpbmtzCisJCQkJCSAqIHBlciAxMCBzZWNvbmRzCisJCQkJCSAqLworCXUxNiAgICAgICAgYmVhY29uX2R1cmF0aW9uOy8qIEJlYWNvbiBkdXJhdGlvbiAoaW4gU2Vjb25kcykuIFRoZQorCQkJCQkgKiBjb21tYW5kIG9wZXJhdGlvbiBzaG91bGQgYmUKKwkJCQkJICogdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoaXMKKwkJCQkJICogdGltZW91dCB2YWx1ZS4KKwkJCQkJICoKKwkJCQkJICogSWdub3JlZCBpZiBkaWFnX3N1Yl9jbWQgaXMKKwkJCQkJICogTElOS19FMkVfQkVBQ09OX09GRi4KKwkJCQkJICoKKwkJCQkJICogSWYgMCwgYmVhY29uaW5nIHdpbGwgY29udGludWUgdGlsbCBhCisJCQkJCSAqIEJFQUNPTiBPRkYgcmVxdWVzdCBpcyByZWNlaXZlZAorCQkJCQkgKi8KK307CisKKy8qCisgKiBMaW5rIEUyRSBiZWFjb24gcmVxdWVzdC9nb29kIHJlc3BvbnNlIGZvcm1hdC4gRm9yIExTX1JKVHMgdXNlIGZjX2xzX3JqdF90CisgKi8KK3N0cnVjdCBsaW5rX2UyZV9iZWFjb25fcmVxX3N7CisJdTMyICAgICAgICBsc19jb2RlOwkvKiEgRkNfRUxTX0UyRV9MQkVBQ09OIGluIHJlcXVlc3RzICoKKwkJCQkJICpvciBGQ19FTFNfQUNDIGluIGdvb2QgcmVwbGllcyAqLworCXUzMiAgICAgICAgbHNfc3ViX2NtZDsJLyohIFNlZSBsaW5rX2UyZV9iZWFjb25fc3ViY21kX3QgKi8KKwlzdHJ1Y3QgbGlua19lMmVfYmVhY29uX3BhcmFtX3MgYmVhY29uX3Bhcm07Cit9OworCisvKioKKyAqIElmIFJQU0MgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBEb21haW4gQ29udHJvbGxlciwgdGhlIHJlcXVlc3QgaXMgZm9yCisgKiBhbGwgdGhlIHBvcnRzIHdpdGhpbiB0aGF0IGRvbWFpbiAoVE9ETyAtIEkgZG9uJ3QgdGhpbmsgRk9TIGltcGxlbWVudHMKKyAqIHRoaXMuLi4pLgorICovCitzdHJ1Y3QgZmNfcnBzY19jbWRfc3sKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgIGVsc19jbWQ7Cit9OworCisvKgorICogUlBTQyBBY2MKKyAqLworc3RydWN0IGZjX3Jwc2NfYWNjX3N7CisJdTMyICAgICAgICBjb21tYW5kOjg7CisJdTMyICAgICAgICByc3ZkOjg7CisJdTMyICAgICAgICBudW1fZW50cmllczoxNjsKKworCXN0cnVjdCBmY19ycHNjX3NwZWVkX2luZm9fcyBzcGVlZF9pbmZvWzFdOworfTsKKworLyoqCisgKiBJZiBSUFNDMiByZXF1ZXN0IGlzIHNlbnQgdG8gdGhlIERvbWFpbiBDb250cm9sbGVyLAorICovCisjZGVmaW5lIEZDX0JSQ0RfVE9LRU4gICAgMHg0MjUyNDM0NAorCitzdHJ1Y3QgZmNfcnBzYzJfY21kX3N7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICBlbHNfY21kOworCXUzMiAgICAgICAJdG9rZW47CisJdTE2ICAgICAJcmVzdmQ7CisJdTE2ICAgICAJbnVtX3BpZHM7ICAgICAgIC8qIE51bWJlciBvZiBwaWRzIGluIHRoZSByZXF1ZXN0ICovCisJc3RydWN0ICB7CisJCXUzMglyc3ZkMTo4OworCQl1MzIJcGlkOjI0OwkvKiBwb3J0IGlkZW50aWZpZXIgKi8KKwl9IHBpZF9saXN0WzFdOworfTsKKworZW51bSBmY19ycHNjMl9wb3J0X3R5cGV7CisJUlBTQzJfUE9SVF9UWVBFX1VOS05PV04gPSAwLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVCAgID0gMSwKKwlSUFNDMl9QT1JUX1RZUEVfTkxQT1JUICA9IDIsCisJUlBTQzJfUE9SVF9UWVBFX05QSVZfUE9SVCAgPSAweDVmLAorCVJQU0MyX1BPUlRfVFlQRV9OUE9SVF9UUlVOSyAgPSAweDZmLAorfTsKKworLyoKKyAqIFJQU0MyIHBvcnRJbmZvIGVudHJ5IHN0cnVjdHVyZQorICovCitzdHJ1Y3QgZmNfcnBzYzJfcG9ydF9pbmZvX3N7CisgICAgdTMyICAgIHBpZDsgICAgICAgIC8qIFBJRCAqLworICAgIHUxNiAgICByZXN2ZDE7CisgICAgdTE2ICAgIGluZGV4OyAgICAgIC8qIHBvcnQgbnVtYmVyIC8gaW5kZXggKi8KKyAgICB1OCAgICAgcmVzdmQyOworICAgIHU4ICAgIAl0eXBlOyAgICAgICAgLyogcG9ydCB0eXBlIE4vTkwvLi4uICovCisgICAgdTE2ICAgIHNwZWVkOyAgICAgIC8qIHBvcnQgT3BlcmF0aW5nIFNwZWVkICovCit9OworCisvKgorICogUlBTQzIgQWNjZXB0IHBheWxvYWQKKyAqLworc3RydWN0IGZjX3Jwc2MyX2FjY19zeworCXU4ICAgICAgICBlbHNfY21kOworCXU4ICAgICAgICByZXN2ZDsKKwl1MTYgICAgICAgbnVtX3BpZHM7ICAvKiBOdW1iZXIgb2YgcGlkcyBpbiB0aGUgcmVxdWVzdCAqLworCXN0cnVjdCBmY19ycHNjMl9wb3J0X2luZm9fcyAgcG9ydF9pbmZvWzFdOyAgICAvKiBwb3J0IGluZm9ybWF0aW9uICovCit9OworCisvKioKKyAqIGJpdCBmaWVsZHMgc28gdGhhdCBtdWx0aXBsZSBjbGFzc2VzIGNhbiBiZSBzcGVjaWZpZWQKKyAqLworZW51bSBmY19jb3N7CisJRkNfQ0xBU1NfMgk9IDB4MDQsCisJRkNfQ0xBU1NfMwk9IDB4MDgsCisJRkNfQ0xBU1NfMl8zCT0gMHgwQywKK307CisKKy8qCisgKiBzeW1ib2xpYyBuYW1lCisgKi8KK3N0cnVjdCBmY19zeW1uYW1lX3N7CisJdTggICAgICAgICBzeW1uYW1lW0ZDX1NZTU5BTUVfTUFYXTsKK307CisKK3N0cnVjdCBmY19hbHBhYm1fc3sKKwl1OCAgICAgICAgIGFscGFfYm1bRkNfQUxQQV9NQVggLyA4XTsKK307CisKKy8qCisgKiBwcm90b2NvbCBkZWZhdWx0IHRpbWVvdXQgdmFsdWVzCisgKi8KKyNkZWZpbmUgRkNfRURfVE9WCQkyCisjZGVmaW5lIEZDX1JFQ19UT1YJCShGQ19FRF9UT1YgKyAxKQorI2RlZmluZSBGQ19SQV9UT1YJCTEwCisjZGVmaW5lIEZDX0VMU19UT1YJCSgyICogRkNfUkFfVE9WKQorCisvKgorICogdmlydHVhbCBmYWJyaWMgcmVsYXRlZCBkZWZpbmVzCisgKi8KKyNkZWZpbmUgRkNfVkZfSURfTlVMTCAgICAwCS8qICBtdXN0IG5vdCBiZSB1c2VkIGFzIFZGX0lEICovCisjZGVmaW5lIEZDX1ZGX0lEX01JTiAgICAgMQorI2RlZmluZSBGQ19WRl9JRF9NQVggICAgIDB4RUZGCisjZGVmaW5lIEZDX1ZGX0lEX0NUTCAgICAgMHhGRUYJLyogIGNvbnRyb2wgVkZfSUQgKi8KKworLyoqCisgKiBWaXJ0dWFsIEZhYnJpYyBUYWdnaW5nIGhlYWRlciBmb3JtYXQKKyAqIEBjYXV0aW9uIFRoaXMgaXMgZGVmaW5lZCBvbmx5IGluIEJJRyBFTkRJQU4gZm9ybWF0LgorICovCitzdHJ1Y3QgZmNfdmZ0X3N7CisJdTMyICAgICAgICByX2N0bDo4OworCXUzMiAgICAgICAgdmVyOjI7CisJdTMyICAgICAgICB0eXBlOjQ7CisJdTMyICAgICAgICByZXNfYToyOworCXUzMiAgICAgICAgcHJpb3JpdHk6MzsKKwl1MzIgICAgICAgIHZmX2lkOjEyOworCXUzMiAgICAgICAgcmVzX2I6MTsKKwl1MzIgICAgICAgIGhvcGN0Ojg7CisJdTMyICAgICAgICByZXNfYzoyNDsKK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNfc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJiMGIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjX3NwLmgKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDX1NQX0hfXworI2RlZmluZSBfX0ZDX1NQX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKK2VudW0gYXV0aF9lbHNfZmxhZ3N7CisJRkNfQVVUSF9FTFNfTU9SRV9GUkFHU19GTEFHIAk9IDB4ODAsCS8qISBiaXQtNy4gTW9yZSBGcmFnbWVudHMKKwkJCQkJCSAqIEZvbGxvdworCQkJCQkJICovCisJRkNfQVVUSF9FTFNfQ09OQ0FUX0ZMQUcgCT0gMHg0MCwJLyohIGJpdC02LiBDb25jYXRlbmF0aW9uIEZsYWcgKi8KKwlGQ19BVVRIX0VMU19TRVFfTlVNX0ZMQUcgCT0gMHgwMSAJLyohIGJpdC0wLiBTZXF1ZW5jZSBOdW1iZXIgKi8KK307CisKK2VudW0gYXV0aF9tc2dfY29kZXN7CisJRkNfQVVUSF9NQ19BVVRIX1JKVAkJPSAweDBBLAkvKiEgQXV0aCBSZWplY3QgKi8KKwlGQ19BVVRIX01DX0FVVEhfTkVHIAkJPSAweDBCLCAvKiEgQXV0aCBOZWdvdGlhdGUgKi8KKwlGQ19BVVRIX01DX0FVVEhfRE9ORSAJCT0gMHgwQywgLyohIEF1dGggRG9uZSAqLworCisJRkNfQVVUSF9NQ19ESENIQVBfQ0hBTCAJCT0gMHgxMCwgLyohIERIQ0hBUCBDaGFsbGVuZ2UgKi8KKwlGQ19BVVRIX01DX0RIQ0hBUF9SRVBMWSAJPSAweDExLCAvKiEgREhDSEFQIFJlcGx5ICovCisJRkNfQVVUSF9NQ19ESENIQVBfU1VDQyAJCT0gMHgxMiwgLyohIERIQ0hBUCBTdWNjZXNzICovCisKKwlGQ19BVVRIX01DX0ZDQVBfUkVRIAkJPSAweDEzLCAvKiEgRkNBUCBSZXF1ZXN0ICovCisJRkNfQVVUSF9NQ19GQ0FQX0FDSyAJCT0gMHgxNCwgLyohIEZDQVAgQWNrbm93bGVkZ2UgKi8KKwlGQ19BVVRIX01DX0ZDQVBfQ09ORiAJCT0gMHgxNSwgLyohIEZDQVAgQ29uZmlybSAqLworCisJRkNfQVVUSF9NQ19GQ1BBUF9JTklUIAkJPSAweDE2LCAvKiEgRkNQQVAgSW5pdCAqLworCUZDX0FVVEhfTUNfRkNQQVBfQUNDIAkJPSAweDE3LCAvKiEgRkNQQVAgQWNjZXB0ICovCisJRkNfQVVUSF9NQ19GQ1BBUF9DT01QIAkJPSAweDE4LCAvKiEgRkNQQVAgQ29tcGxldGUgKi8KKworCUZDX0FVVEhfTUNfSUtFX1NBX0lOSVQgCQk9IDB4MjIsIC8qISBJS0UgU0EgSU5JVCAqLworCUZDX0FVVEhfTUNfSUtFX1NBX0FVVEggCQk9IDB4MjMsIC8qISBJS0UgU0EgQXV0aCAqLworCUZDX0FVVEhfTUNfSUtFX0NSRUFURV9DSElMRF9TQQk9IDB4MjQsIC8qISBJS0UgQ3JlYXRlIENoaWxkIFNBICovCisJRkNfQVVUSF9NQ19JS0VfSU5GTyAJCT0gMHgyNSwgLyohIElLRSBpbmZvcm1hdGlvbmFsICovCit9OworCitlbnVtIGF1dGhfcHJvdG9fdmVyc2lvbnsKKwlGQ19BVVRIX1BST1RPX1ZFUl8xIAk9IDEsCS8qISBQcm90b2NvbCBWZXJzaW9uIDEgKi8KK307CisKK2VudW0geworCUZDX0FVVEhfRUxTX0NPTU1BTkRfQ09ERSA9IDB4OTAsLyohIEF1dGhlbnRpY2F0aW9uIEVMUyBDb21tYW5kIGNvZGUgICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9MRU5fU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgTGVuIEZpZWxkICovCisJRkNfQVVUSF9QUk9UT19QQVJBTV9WQUxfU1ogPSA0LAkvKiEgU2l6ZSBvZiBQcm90byBQYXJhbWV0ZXIgVmFsIEZpZWxkICovCisJRkNfTUFYX0FVVEhfU0VDUkVUX0xFTiAgICAgPSAyNTYsCisJCQkJCS8qISBNYXhpbXVtIHNlY3JldCBzdHJpbmcgbGVuZ3RoICovCisJRkNfQVVUSF9OVU1fVVNBQkxFX1BST1RPX0xFTl9TWiA9IDQsCisJCQkJCS8qISBTaXplIG9mIHVzYWJsZSBwcm90b2NvbHMgZmllbGQgKi8KKwlGQ19BVVRIX1JFU1BfVkFMVUVfTEVOX1NaCT0gNCwKKwkJCQkJLyohIFNpemUgb2YgcmVzcG9uc2UgdmFsdWUgbGVuZ3RoICovCisJRkNfTUFYX0NIQVBfS0VZX0xFTgk9IDI1NiwJLyohIE1heGltdW0gbWQ1IGRpZ2VzdCBsZW5ndGggKi8KKwlGQ19NQVhfQVVUSF9SRVRSSUVTICAgICA9IDMsCS8qISBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzICovCisJRkNfTUQ1X0RJR0VTVF9MRU4gICAgICAgPSAxNiwJLyohIE1ENSBkaWdlc3QgbGVuZ3RoICovCisJRkNfU0hBMV9ESUdFU1RfTEVOICAgICAgPSAyMCwJLyohIFNIQTEgZGlnZXN0IGxlbmd0aCAqLworCUZDX01BWF9ESEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gREggR3JvdXBzIHN1cHBvcnRlZCAqLworCUZDX01BWF9BTEdfU1VQUE9SVEVEICAgID0gMSwJLyohIE1heGltdW0gYWxnb3JpdGhtcyBzdXBwb3J0ZWQgKi8KKwlGQ19NQVhfUFJPVE9fU1VQUE9SVEVEICA9IDEsCS8qISBNYXhpbXVtIHByb3RvY29scyBzdXBwb3J0ZWQgKi8KKwlGQ19TVEFSVF9UWE5fSUQgICAgICAgICA9IDIsCS8qISBTdGFydGluZyB0cmFuc2FjdGlvbiBJRCAqLworfTsKKworZW51bSBhdXRoX3Byb3RvX2lkeworCUZDX0FVVEhfUFJPVE9fREhDSEFQCQk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9QUk9UT19GQ0FQIAkJPSAweDAwMDAwMDAyLAorCUZDX0FVVEhfUFJPVE9fRkNQQVAgCQk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9QUk9UT19JS0V2MiAJCT0gMHgwMDAwMDAwNCwKKwlGQ19BVVRIX1BST1RPX0lLRXYyX0FVVEggCT0gMHgwMDAwMDAwNSwKK307CisKK3N0cnVjdCBhdXRoX25hbWVfc3sKKwl1MTYJbmFtZV90YWc7CS8qISBOYW1lIFRhZyA9IDEgZm9yIEF1dGhlbnRpY2F0aW9uICovCisJdTE2CW5hbWVfbGVuOwkvKiEgTmFtZSBMZW5ndGggPSA4IGZvciBBdXRoZW50aWNhdGlvbgorCQkJCQkgKi8KKwl3d25fdAkJbmFtZTsgIAkJLyohIE5hbWUuIFRPRE8gLSBpcyB0aGlzIFBXV04gKi8KK307CisKKworZW51bSBhdXRoX2hhc2hfZnVuY3sKKwlGQ19BVVRIX0hBU0hfRlVOQ19NRDUgCQk9IDB4MDAwMDAwMDUsCisJRkNfQVVUSF9IQVNIX0ZVTkNfU0hBXzEgCT0gMHgwMDAwMDAwNiwKK307CisKK2VudW0gYXV0aF9kaF9naWR7CisJRkNfQVVUSF9ESF9HSURfMF9ESEdfTlVMTAk9IDB4MDAwMDAwMDAsCisJRkNfQVVUSF9ESF9HSURfMV9ESEdfMTAyNAk9IDB4MDAwMDAwMDEsCisJRkNfQVVUSF9ESF9HSURfMl9ESEdfMTI4MAk9IDB4MDAwMDAwMDIsCisJRkNfQVVUSF9ESF9HSURfM19ESEdfMTUzNgk9IDB4MDAwMDAwMDMsCisJRkNfQVVUSF9ESF9HSURfNF9ESEdfMjA0OAk9IDB4MDAwMDAwMDQsCisJRkNfQVVUSF9ESF9HSURfNl9ESEdfMzA3Mgk9IDB4MDAwMDAwMDYsCisJRkNfQVVUSF9ESF9HSURfN19ESEdfNDA5Ngk9IDB4MDAwMDAwMDcsCisJRkNfQVVUSF9ESF9HSURfOF9ESEdfNjE0NAk9IDB4MDAwMDAwMDgsCisJRkNfQVVUSF9ESF9HSURfOV9ESEdfODE5Mgk9IDB4MDAwMDAwMDksCit9OworCitzdHJ1Y3QgYXV0aF9lbHNfbXNnX3MgeworCXU4CQlhdXRoX2Vsc19jb2RlOwkvKiAgQXV0aGVudGljYXRpb24gRUxTIENvZGUgKDB4OTApICovCisJdTggCWF1dGhfZWxzX2ZsYWc7IAkvKiAgQXV0aGVudGljYXRpb24gRUxTIEZsYWdzICovCisJdTggCWF1dGhfbXNnX2NvZGU7IAkvKiAgQXV0aGVudGljYXRpb24gTWVzc2FnZSBDb2RlICovCisJdTggCXByb3RvX3ZlcnNpb247IAkvKiAgUHJvdG9jb2wgVmVyc2lvbiAqLworCXUzMgltc2dfbGVuOyAJLyogIE1lc3NhZ2UgTGVuZ3RoICovCisJdTMyCXRyYW5zX2lkOyAJLyogIFRyYW5zYWN0aW9uIElkZW50aWZpZXIgKFRfSUQpICovCisKKwkvKiBNc2cgcGF5bG9hZCBmb2xsb3dzLi4uICovCit9OworCisKK2VudW0gYXV0aF9uZWdfcGFyYW1fdGFncyB7CisJRkNfQVVUSF9ORUdfREhDSEFQX0hBU0hMSVNUIAk9IDB4MDAwMSwKKwlGQ19BVVRIX05FR19ESENIQVBfREhHX0lEX0xJU1QgCT0gMHgwMDAyLAorfTsKKworCitzdHJ1Y3QgZGhjaGFwX3BhcmFtX2Zvcm1hdF9zIHsKKwl1MTYJdGFnOwkJLyohIFBhcmFtZXRlciBUYWcuIFNlZQorCQkJCQkgKiBhdXRoX25lZ19wYXJhbV90YWdzX3QKKwkJCQkJICovCisJdTE2CXdvcmRfY250OworCisJLyogZm9sbG93ZWQgYnkgdmFyaWFibGUgbGVuZ3RoIHBhcmFtZXRlciB2YWx1ZS4uLiAqLworfTsKKworc3RydWN0IGF1dGhfcHJvdG9fcGFyYW1zX3MgeworCXUzMglwcm90b19wYXJhbV9sZW47CisJdTMyCXByb3RvX2lkOworCisJLyoKKwkgKiBGb2xsb3dlZCBieSB2YXJpYWJsZSBsZW5ndGggUHJvdG9jb2wgc3BlY2lmaWMgcGFyYW1ldGVycy4gREgtQ0hBUAorCSAqIHVzZXMgZGhjaGFwX3BhcmFtX2Zvcm1hdF90CisJICovCit9OworCitzdHJ1Y3QgYXV0aF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX25hbWVfcwlhdXRoX2luaV9uYW1lOworCXUzMgkJdXNhYmxlX2F1dGhfcHJvdG9zOworCXN0cnVjdCBhdXRoX3Byb3RvX3BhcmFtc19zIHByb3RvX3BhcmFtc1sxXTsgLyohICgxLi51c2FibGVfYXV0aF9wcm90bykKKwkJCQkJCSAgICAgKiBwcm90b2NvbCBwYXJhbXMKKwkJCQkJCSAgICAgKi8KK307CisKK3N0cnVjdCBhdXRoX2RoX3ZhbF9zIHsKKwl1MzIgZGhfdmFsX2xlbjsKKwl1MzIgZGhfdmFsWzFdOworfTsKKworc3RydWN0IGF1dGhfZGhjaGFwX2NoYWxfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJc3RydWN0IGF1dGhfbmFtZV9zIGF1dGhfcmVzcG9uZGVyX25hbWU7CS8qIFRPRE8gVlJLIC0gaXMgYXV0aF9uYW1lX3QKKwkJCQkJCSAqIHR5cGUgT0s/CisJCQkJCQkgKi8KKwl1MzIgCWhhc2hfaWQ7CisJdTMyIAlkaF9ncnBfaWQ7CisJdTMyIAljaGFsX3ZhbF9sZW47CisJY2hhcgkJY2hhbF92YWxbMV07CisKKwkvKiAuLi5mb2xsb3dlZCBieSB2YXJpYWJsZSBDaGFsbGVuZ2UgbGVuZ3RoL3ZhbHVlIGFuZCBESCBsZW5ndGgvdmFsdWUgKi8KK307CisKKworZW51bSBhdXRoX3JqdF9jb2RlcyB7CisJRkNfQVVUSF9SSlRfQ09ERV9BVVRIX0ZBSUxVUkUgCT0gMHgwMSwKKwlGQ19BVVRIX1JKVF9DT0RFX0xPR0lDQUxfRVJSCT0gMHgwMiwKK307CisKK2VudW0gYXV0aF9yanRfY29kZV9leHBzIHsKKwlGQ19BVVRIX0NFWFBfQVVUSF9NRUNIX05PVF9VU0FCTEUJPSAweDAxLAorCUZDX0FVVEhfQ0VYUF9ESF9HUk9VUF9OT1RfVVNBQkxFIAk9IDB4MDIsCisJRkNfQVVUSF9DRVhQX0hBU0hfRlVOQ19OT1RfVVNBQkxFIAk9IDB4MDMsCisJRkNfQVVUSF9DRVhQX0FVVEhfWEFDVF9TVEFSVEVECQk9IDB4MDQsCisJRkNfQVVUSF9DRVhQX0FVVEhfRkFJTEVEIAkJPSAweDA1LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUExEIAkJPSAweDA2LAorCUZDX0FVVEhfQ0VYUF9JTkNPUlJFQ1RfUFJPVE9fTVNHIAk9IDB4MDcsCisJRkNfQVVUSF9DRVhQX1JFU1RBUlRfQVVUSF9QUk9UTyAJPSAweDA4LAorCUZDX0FVVEhfQ0VYUF9BVVRIX0NPTkNBVF9OT1RfU1VQUCAJPSAweDA5LAorCUZDX0FVVEhfQ0VYUF9QUk9UT19WRVJfTk9UX1NVUFAgCT0gMHgwQSwKK307CisKK2VudW0gYXV0aF9zdGF0dXMgeworCUZDX0FVVEhfU1RBVEVfSU5QUk9HUkVTUyA9IDAsIAkvKiEgYXV0aGVudGljYXRpb24gaW4gcHJvZ3Jlc3MgCSovCisJRkNfQVVUSF9TVEFURV9GQUlMRUQJPSAxLCAJLyohIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCAqLworCUZDX0FVVEhfU1RBVEVfU1VDQ0VTUwk9IDIgCS8qISBhdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVsCSovCit9OworCitzdHJ1Y3QgYXV0aF9yanRfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisJdTgJCXJlYXNvbl9jb2RlOworCXU4CQlyZWFzb25fY29kZV9leHA7CisJdTgJCXJzdmRbMl07Cit9OworCisKK3N0cnVjdCBhdXRoX2RoY2hhcF9uZWdfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcyBoZHI7CisJc3RydWN0IGF1dGhfbmVnX21zZ19zIG5lZ287Cit9OworCitzdHJ1Y3QgYXV0aF9kaGNoYXBfcmVwbHlfbXNnX3MgeworCXN0cnVjdCBhdXRoX2Vsc19tc2dfcwloZHI7CisKKwkvKgorCSAqIGZvbGxvd2VkIGJ5IHJlc3BvbnNlIHZhbHVlIGxlbmd0aCAmIFZhbHVlICsgREggVmFsdWUgTGVuZ3RoICYgVmFsdWUKKwkgKi8KK307CisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZiAvKiBfX0ZDX1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL2ZjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZGU2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmNwLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0ZDUFBST1RPX0hfXworI2RlZmluZSBfX0ZDUFBST1RPX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvc2NzaS5oPgorCisjcHJhZ21hIHBhY2soMSkKKworZW51bSB7CisJRkNQX1JKVAkJPSAweDAxMDAwMDAwLAkvKiBTUlIgcmVqZWN0ICovCisJRkNQX1NSUl9BQ0NFUFQJPSAweDAyMDAwMDAwLAkvKiBTUlIgYWNjZXB0ICovCisJRkNQX1NSUgkJPSAweDE0MDAwMDAwLAkvKiBTZXF1ZW5jZSBSZXRyYW5zbWlzc2lvbiBSZXF1ZXN0ICovCit9OworCisvKgorICogU1JSIEZDLTQgTFMgcGF5bG9hZAorICovCitzdHJ1Y3QgZmNfc3JyX3N7CisJdTMyCWxzX2NtZDsKKwl1MzIgICAgICAgIG94X2lkOjE2OwkvKiBveC1pZCAqLworCXUzMiAgICAgICAgcnhfaWQ6MTY7CS8qIHJ4LWlkICovCisJdTMyICAgICAgICBybzsJCS8qIHJlbGF0aXZlIG9mZnNldCAqLworCXUzMiAgICAgICAgcl9jdGw6ODsJCS8qIFJfQ1RMIGZvciBJLlUuICovCisJdTMyICAgICAgICByZXM6MjQ7Cit9OworCisKKy8qCisgKiBGQ1BfQ01ORCBkZWZpbml0aW9ucworICovCisjZGVmaW5lIEZDUF9DTU5EX0NEQl9MRU4gICAgMTYKKyNkZWZpbmUgRkNQX0NNTkRfTFVOX0xFTiAgICA4CisKK3N0cnVjdCBmY3BfY21uZF9zeworCWx1bl90ICAgICAgICAgICBsdW47CQkvKiA2NC1iaXQgTFUgbnVtYmVyICovCisJdTggICAgICAgICBjcm47CQkvKiBjb21tYW5kIHJlZmVyZW5jZSBudW1iZXIgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzdmQ6MSwKKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJdGFza2F0dHI6MzsJLyogc2NzaSB0YXNrIGF0dHJpYnV0ZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHRhc2thdHRyOjMsCS8qIHNjc2kgdGFzayBhdHRyaWJ1dGUgKi8KKwkJCXByaW9yaXR5OjQsCS8qIEZDUC0zOiBTQU0tMyBwcmlvcml0eSAqLworCQkJcmVzdmQ6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgdG1fZmxhZ3M7CS8qIHRhc2sgbWFuYWdlbWVudCBmbGFncyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBhZGRsX2NkYl9sZW46NiwJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoIHdvcmRzICovCisJCQlpb2RpcjoyOwkvKiByZWFkL3dyaXRlIEZDUF9EQVRBIElVcyAqLworI2Vsc2UKKwl1OCAgICAgICAgIGlvZGlyOjIsCS8qIHJlYWQvd3JpdGUgRkNQX0RBVEEgSVVzICovCisJCQlhZGRsX2NkYl9sZW46NjsJLyogYWRkaXRpb25hbCBDREIgbGVuZ3RoICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9jZGJfcyAgICAgIGNkYjsKKworCS8qCisJICogISEhIGFkZGl0aW9uYWwgY2RiIGJ5dGVzIGZvbGxvd3MgaGVyZSEhIQorCSAqLworCXUzMiAgICAgICAgZmNwX2RsOwkvKiBieXRlcyB0byBiZSB0cmFuc2ZlcnJlZCAqLworfTsKKworI2RlZmluZSBmY3BfY21uZF9jZGJfbGVuKF9jbW5kKSAoKF9jbW5kKS0+YWRkbF9jZGJfbGVuICogNCArIEZDUF9DTU5EX0NEQl9MRU4pCisjZGVmaW5lIGZjcF9jbW5kX2ZjcGRsKF9jbW5kKQkoKCYoX2NtbmQpLT5mY3BfZGwpWyhfY21uZCktPmFkZGxfY2RiX2xlbl0pCisKKy8qCisgKiBmY3BfY21uZF90LmlvZGlyIGZpZWxkIHZhbHVlcworICovCitlbnVtIGZjcF9pb2RpcnsKKwlGQ1BfSU9ESVJfTk9ORQk9IDAsCisJRkNQX0lPRElSX1dSSVRFID0gMSwKKwlGQ1BfSU9ESVJfUkVBRAk9IDIsCisJRkNQX0lPRElSX1JXCT0gMywKK307CisKKy8qCisgKiBUYXNrIGF0dHJpYnV0ZSBmaWVsZAorICovCitlbnVtIHsKKwlGQ1BfVEFTS19BVFRSX1NJTVBMRQk9IDAsCisJRkNQX1RBU0tfQVRUUl9IT1EJPSAxLAorCUZDUF9UQVNLX0FUVFJfT1JERVJFRAk9IDIsCisJRkNQX1RBU0tfQVRUUl9BQ0EJPSA0LAorCUZDUF9UQVNLX0FUVFJfVU5UQUdHRUQJPSA1LAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworfTsKKworLyoKKyAqIFRhc2sgbWFuYWdlbWVudCBmbGFncyBmaWVsZCAtIG9ubHkgb25lIGJpdCBzaGFsbCBiZSBzZXQKKyAqLworI2lmbmRlZiBCSVQKKyNkZWZpbmUgQklUKF94KQkoMSA8PCAoX3gpKQorI2VuZGlmCitlbnVtIGZjcF90bV9jbW5keworCUZDUF9UTV9BQk9SVF9UQVNLX1NFVAk9IEJJVCgxKSwKKwlGQ1BfVE1fQ0xFQVJfVEFTS19TRVQJPSBCSVQoMiksCisJRkNQX1RNX0xVTl9SRVNFVAk9IEJJVCg0KSwKKwlGQ1BfVE1fVEFSR0VUX1JFU0VUCT0gQklUKDUpLAkvKiBvYnNvbGV0ZSBpbiBGQ1AtMyAqLworCUZDUF9UTV9DTEVBUl9BQ0EJPSBCSVQoNiksCit9OworCisvKgorICogRkNQX1hGRVJfUkRZIElVIGRlZmluZXMKKyAqLworc3RydWN0IGZjcF94ZmVyX3JkeV9zeworCXUzMiAgICAgICAgZGF0YV9ybzsKKwl1MzIgICAgICAgIGJ1cnN0X2xlbjsKKwl1MzIgICAgICAgIHJlc2VydmVkOworfTsKKworLyoKKyAqIEZDUF9SU1AgcmVzaWR1ZSBmbGFncworICovCitlbnVtIGZjcF9yZXNpZHVleworCUZDUF9OT19SRVNJRFVFID0gMCwJLyogbm8gcmVzaWR1ZSAqLworCUZDUF9SRVNJRF9PVkVSID0gMSwJLyogbW9yZSBkYXRhIGxlZnQgdGhhdCB3YXMgbm90IHNlbnQgKi8KKwlGQ1BfUkVTSURfVU5ERVIgPSAyLAkvKiBsZXNzIGRhdGEgdGhhbiByZXF1ZXN0ZWQgKi8KK307CisKK2VudW0geworCUZDUF9SU1BJTkZPX0dPT0QgPSAwLAorCUZDUF9SU1BJTkZPX0RBVEFMRU5fTUlTTUFUQ0ggPSAxLAorCUZDUF9SU1BJTkZPX0NNTkRfSU5WQUxJRCA9IDIsCisJRkNQX1JTUElORk9fUk9MRU5fTUlTTUFUQ0ggPSAzLAorCUZDUF9SU1BJTkZPX1RNX05PVF9TVVBQID0gNCwKKwlGQ1BfUlNQSU5GT19UTV9GQUlMRUQgPSA1LAorfTsKKworc3RydWN0IGZjcF9yc3BpbmZvX3N7CisJdTMyICAgICAgICByZXMwOjI0OworCXUzMiAgICAgICAgcnNwX2NvZGU6ODsJLyogcmVzcG9uc2UgY29kZSAoYXMgYWJvdmUpICovCisJdTMyICAgICAgICByZXMxOworfTsKKworc3RydWN0IGZjcF9yZXNwX3N7CisJdTMyICAgICAgICByZXNlcnZlZFsyXTsJLyogMiB3b3JkcyByZXNlcnZlZCAqLworCXUxNiAgICAgICAgcmVzZXJ2ZWQyOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDM6MzsKKwl1OCAgICAgICAgIGZjcF9jb25mX3JlcToxOwkvKiBGQ1BfQ09ORiBpcyByZXF1ZXN0ZWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgc25zX2xlbl92YWxpZDoxOy8qIHNlbnNlIGxlbiBpcyB2YWxpZCAqLworCXU4ICAgICAgICAgcnNwX2xlbl92YWxpZDoxOy8qIHJlc3BvbnNlIGxlbiBpcyB2YWxpZCAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9sZW5fdmFsaWQ6MTsvKiByZXNwb25zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHNuc19sZW5fdmFsaWQ6MTsvKiBzZW5zZSBsZW4gaXMgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlc2lkX2ZsYWdzOjI7CS8qIHVuZGVyZmxvdy9vdmVyZmxvdyAqLworCXU4ICAgICAgICAgZmNwX2NvbmZfcmVxOjE7CS8qIEZDUF9DT05GIGlzIHJlcXVlc3RlZCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHNjc2lfc3RhdHVzOwkvKiBvbmUgYnl0ZSBTQ1NJIHN0YXR1cyAqLworCXUzMiAgICAgICAgcmVzaWR1ZTsJLyogcmVzaWR1YWwgZGF0YSBieXRlcyAqLworCXUzMiAgICAgICAgc25zX2xlbjsJLyogbGVuZ3RoIG9kIHNlbnNlIGluZm8gKi8KKwl1MzIgICAgICAgIHJzcF9sZW47CS8qIGxlbmd0aCBvZiByZXNwb25zZSBpbmZvICovCit9OworCisjZGVmaW5lIGZjcF9zbnNsZW4oX19mY3Byc3ApCSgoX19mY3Byc3ApLT5zbnNfbGVuX3ZhbGlkID8gCQlcCisJCQkJCShfX2ZjcHJzcCktPnNuc19sZW4gOiAwKQorI2RlZmluZSBmY3BfcnNwbGVuKF9fZmNwcnNwKQkoKF9fZmNwcnNwKS0+cnNwX2xlbl92YWxpZCA/IAkJXAorCQkJCQkoX19mY3Byc3ApLT5yc3BfbGVuIDogMCkKKyNkZWZpbmUgZmNwX3JzcGluZm8oX19mY3Byc3ApCSgoc3RydWN0IGZjcF9yc3BpbmZvX3MgKikoKF9fZmNwcnNwKSArIDEpKQorI2RlZmluZSBmY3Bfc25zaW5mbyhfX2ZjcHJzcCkJKCgodTggKilmY3BfcnNwaW5mbyhfX2ZjcHJzcCkpICsgCVwKKwkJCQkJCWZjcF9yc3BsZW4oX19mY3Byc3ApKQorCitzdHJ1Y3QgZmNwX2NtbmRfZnJfc3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGZjcF9jbW5kX3MgICAgICBmY3A7Cit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9mZG1pLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMDVjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvZmRtaS5oCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19GRE1JX0hfXworI2RlZmluZSBfX0ZETUlfSF9fCisKKyNpbmNsdWRlIDxwcm90b2NvbC90eXBlcy5oPgorI2luY2x1ZGUgPHByb3RvY29sL2ZjLmg+CisjaW5jbHVkZSA8cHJvdG9jb2wvY3QuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBGRE1JIENvbW1hbmQgQ29kZXMKKyAqLworI2RlZmluZQlGRE1JX0dSSEwJCTB4MDEwMAorI2RlZmluZQlGRE1JX0dIQVQJCTB4MDEwMQorI2RlZmluZQlGRE1JX0dSUEwJCTB4MDEwMgorI2RlZmluZQlGRE1JX0dQQVQJCTB4MDExMAorI2RlZmluZQlGRE1JX1JIQkEJCTB4MDIwMAorI2RlZmluZQlGRE1JX1JIQVQJCTB4MDIwMQorI2RlZmluZQlGRE1JX1JQUlQJCTB4MDIxMAorI2RlZmluZQlGRE1JX1JQQQkJMHgwMjExCisjZGVmaW5lCUZETUlfREhCQQkJMHgwMzAwCisjZGVmaW5lCUZETUlfRFBSVAkJMHgwMzEwCisKKy8qCisgKiBGRE1JIHJlYXNvbiBjb2RlcworICovCisjZGVmaW5lCUZETUlfTk9fQURESVRJT05BTF9FWFAJCTB4MDAKKyNkZWZpbmUJRkRNSV9IQkFfQUxSRUFEWV9SRUcJCTB4MTAKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9SRUcJCTB4MTEKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX01VTFRJUExFCTB4MTIKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX0xFTkdUSF9JTlZBTElECTB4MTMKKyNkZWZpbmUJRkRNSV9IQkFfQVRUUklCX05PVF9QUkVTRU5UCTB4MTQKKyNkZWZpbmUJRkRNSV9QT1JUX09SSUdfTk9UX0lOX0xJU1QJMHgxNQorI2RlZmluZQlGRE1JX1BPUlRfSEJBX05PVF9JTl9MSVNUCTB4MTYKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9OT1RfUkVHCTB4MjAKKyNkZWZpbmUJRkRNSV9QT1JUX05PVF9SRUcJCTB4MjEKKyNkZWZpbmUJRkRNSV9QT1JUX0FUVFJJQl9NVUxUSVBMRQkweDIyCisjZGVmaW5lCUZETUlfUE9SVF9BVFRSSUJfTEVOR1RIX0lOVkFMSUQJMHgyMworI2RlZmluZQlGRE1JX1BPUlRfQUxSRUFEWV9SRUdJU1RFUkVFRAkweDI0CisKKy8qCisgKiBGRE1JIFRyYW5zbWlzc2lvbiBTcGVlZCBNYXNrIHZhbHVlcworICovCisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfMUcJCTB4MDAwMDAwMDEKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8yRwkJMHgwMDAwMDAwMgorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzEwRwkJMHgwMDAwMDAwNAorI2RlZmluZQlGRE1JX1RSQU5TX1NQRUVEXzRHCQkweDAwMDAwMDA4CisjZGVmaW5lCUZETUlfVFJBTlNfU1BFRURfOEcJCTB4MDAwMDAwMTAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF8xNkcJCTB4MDAwMDAwMjAKKyNkZWZpbmUJRkRNSV9UUkFOU19TUEVFRF9VTktOT1dOCTB4MDAwMDgwMDAKKworLyoKKyAqIEZETUkgSEJBIGF0dHJpYnV0ZSB0eXBlcworICovCitlbnVtIGZkbWlfaGJhX2F0dHJpYnV0ZV90eXBlIHsKKwlGRE1JX0hCQV9BVFRSSUJfTk9ERU5BTUUgPSAxLAkvKiAweDAwMDEgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTUFOVUZBQ1RVUkVSLAkvKiAweDAwMDIgKi8KKwlGRE1JX0hCQV9BVFRSSUJfU0VSSUFMTlVNLAkvKiAweDAwMDMgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUwsCQkvKiAweDAwMDQgKi8KKwlGRE1JX0hCQV9BVFRSSUJfTU9ERUxfREVTQywJLyogMHgwMDA1ICovCisJRkRNSV9IQkFfQVRUUklCX0hXX1ZFUlNJT04sCS8qIDB4MDAwNiAqLworCUZETUlfSEJBX0FUVFJJQl9EUklWRVJfVkVSU0lPTiwJLyogMHgwMDA3ICovCisJRkRNSV9IQkFfQVRUUklCX1JPTV9WRVJTSU9OLAkvKiAweDAwMDggKi8KKwlGRE1JX0hCQV9BVFRSSUJfRldfVkVSU0lPTiwJLyogMHgwMDA5ICovCisJRkRNSV9IQkFfQVRUUklCX09TX05BTUUsCS8qIDB4MDAwQSAqLworCUZETUlfSEJBX0FUVFJJQl9NQVhfQ1QsCQkvKiAweDAwMEIgKi8KKworCUZETUlfSEJBX0FUVFJJQl9NQVhfVFlQRQorfTsKKworLyoKKyAqIEZETUkgUG9ydCBhdHRyaWJ1dGUgdHlwZXMKKyAqLworZW51bSBmZG1pX3BvcnRfYXR0cmlidXRlX3R5cGUgeworCUZETUlfUE9SVF9BVFRSSUJfRkM0X1RZUEVTID0gMSwJLyogMHgwMDAxICovCisJRkRNSV9QT1JUX0FUVFJJQl9TVVBQX1NQRUVELAkvKiAweDAwMDIgKi8KKwlGRE1JX1BPUlRfQVRUUklCX1BPUlRfU1BFRUQsCS8qIDB4MDAwMyAqLworCUZETUlfUE9SVF9BVFRSSUJfRlJBTUVfU0laRSwJLyogMHgwMDA0ICovCisJRkRNSV9QT1JUX0FUVFJJQl9ERVZfTkFNRSwJLyogMHgwMDA1ICovCisJRkRNSV9QT1JUX0FUVFJJQl9IT1NUX05BTUUsCS8qIDB4MDAwNiAqLworCisJRkRNSV9QT1JUX0FUVFJfTUFYX1RZUEUKK307CisKKy8qCisgKiBGRE1JIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgZmRtaV9hdHRyX3MgeworCXUxNiAgICAgICAgdHlwZTsKKwl1MTYgICAgICAgIGxlbjsKKwl1OCAgICAgICAgIHZhbHVlWzFdOworfTsKKworLyoKKyAqIEhCQSBBdHRyaWJ1dGUgQmxvY2sKKyAqLworc3RydWN0IGZkbWlfaGJhX2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIGhiYV9hdHRyOwkvKiBuIGF0dHJpYnV0ZXMgKi8KK307CisKKy8qCisgKiBSZWdpc3RlcmVkIFBvcnQgTGlzdAorICovCitzdHJ1Y3QgZmRtaV9wb3J0X2xpc3RfcyB7CisJdTMyICAgICAgICBudW1fcG9ydHM7CS8qIG51bWJlciBPZiBQb3J0IEVudHJpZXMgKi8KKwl3d25fdCAgICAgICAgICAgcG9ydF9lbnRyeTsJLyogb25lIG9yIG1vcmUgKi8KK307CisKKy8qCisgKiBQb3J0IEF0dHJpYnV0ZSBCbG9jaworICovCitzdHJ1Y3QgZmRtaV9wb3J0X2F0dHJfcyB7CisJdTMyICAgICAgICBhdHRyX2NvdW50OwkvKiAjIG9mIGF0dHJpYnV0ZXMgKi8KKwlzdHJ1Y3QgZmRtaV9hdHRyX3MgICAgIHBvcnRfYXR0cjsJLyogbiBhdHRyaWJ1dGVzICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBIQkEgQXR0cmlidXRlcworICovCitzdHJ1Y3QgZmRtaV9yaGJhX3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXN0cnVjdCBmZG1pX3BvcnRfbGlzdF9zIHBvcnRfbGlzdDsJLyogUmVnaXN0ZXJlZCBQb3J0IExpc3QgKi8KKwlzdHJ1Y3QgZmRtaV9oYmFfYXR0cl9zIGhiYV9hdHRyX2JsazsJLyogSEJBIGF0dHJpYnV0ZSBibG9jayAqLworfTsKKworLyoKKyAqIEZETUkgUmVnaXN0ZXIgUG9ydAorICovCitzdHJ1Y3QgZmRtaV9ycHJ0X3MgeworCXd3bl90ICAgICAgICAgICBoYmFfaWQ7CQkvKiBIQkEgSWRlbnRpZmllciAqLworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIFBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisvKgorICogRkRNSSBSZWdpc3RlciBQb3J0IEF0dHJpYnV0ZXMKKyAqLworc3RydWN0IGZkbWlfcnBhX3MgeworCXd3bl90ICAgICAgICAgICBwb3J0X25hbWU7CS8qIHBvcnQgd3duICovCisJc3RydWN0IGZkbWlfcG9ydF9hdHRyX3MgcG9ydF9hdHRyX2JsazsJLyogUG9ydCBBdHRyIEJsb2NrICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3BjaWZ3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9wY2lmdy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcGNpZncuaCBQQ0kgRlcgcmVsYXRlZCBoZWFkZXJzCisgKi8KKworI2lmbmRlZiBfX1BDSUZXX0hfXworI2RlZmluZSBfX1BDSUZXX0hfXworCisjcHJhZ21hIHBhY2soMSkKKworc3RydWN0IHBucF9oZHJfc3sKKyAgdTMyCXNpZ25hdHVyZTsJLyogIiRQblAiICovCisgIHU4CXJldjsJCS8qIFN0cnVjdCByZXZpc2lvbiAqLworICB1OCAJbGVuOwkJLyogSGVhZGVyIHN0cnVjdHVyZSBsZW4gaW4gbXVsdGlwbGVzCisJCQkJICogb2YgMTYgYnl0ZXMgKi8KKyAgdTE2ICBvZmY7CQkvKiBPZmZzZXQgdG8gbmV4dCBoZWFkZXIgMDAgaWYgbm9uZSAqLworICB1OAlyc3ZkOwkJLyogUmVzZXJ2ZWQgYnl0ZSAqLworICB1OAlja3N1bTsJCS8qIDgtYml0IGNoZWNrc3VtIGZvciB0aGlzIGhlYWRlciAqLworICB1MzIJcG5wX2Rldl9pZDsJLyogUG5QIERldmljZSBJZCAqLworICB1MTYgIG1mc3RyOwkJLyogUG9pbnRlciB0byBtYW51ZmFjdHVyZXIgc3RyaW5nICovCisgIHUxNglwcnN0cjsJCS8qIFBvaW50ZXIgdG8gcHJvZHVjdCBzdHJpbmcgKi8KKyAgdTgJZGV2dHlwZVszXTsJLyogRGV2aWNlIFR5cGUgQ29kZSAqLworICB1OAlkZXZpbmQ7CQkvKiBEZXZpY2UgSW5kaWNhdG9yICovCisgIHUxNgliY3ZlbnRyOwkvKiBCb290c3RyYXAgZW50cnkgdmVjdG9yICovCisgIHUxNglyc3ZkMjsJCS8qIFJlc2VydmVkICovCisgIHUxNiAgc3JpdjsJCS8qIFN0YXRpYyByZXNvdXJjZSBpbmZvcm1hdGlvbiB2ZWN0b3IgKi8KK307CisKK3N0cnVjdCBwY2lfM18wX2RzX3N7CisgdTMyCXNpZzsgICAJCS8qIFNpZ25hdHVyZSAiUENJUiIgKi8KKyB1MTYJdmVuZGlkOwkJLyogVmVuZG9yIElEICovCisgdTE2CWRldmlkOwkJLyogRGV2aWNlIElEICovCisgdTE2CWRldmxpc3RvZmY7CS8qIERldmljZSBMaXN0IE9mZnNldCAqLworIHUxNglsZW47CQkvKiBQQ0kgRGF0YSBTdHJ1Y3R1cmUgTGVuZ3RoICovCisgdTgJcmV2OwkJLyogUENJIERhdGEgU3RydWN0dXJlIFJldmlzaW9uICovCisgdTgJY2xjb2RlWzNdOwkvKiBDbGFzcyBDb2RlICovCisgdTE2CWltZ2xlbjsJCS8qIENvZGUgaW1hZ2UgbGVuZ3RoIGluIG11bHRpcGxlcyBvZgorCQkJCSAqIDUxMiBieXRlcyAqLworIHUxNgljb2RlcmV2OwkvKiBSZXZpc2lvbiBsZXZlbCBvZiBjb2RlL2RhdGEgKi8KKyB1OAljb2RldHlwZTsJLyogQ29kZSB0eXBlIDB4MDAgLSBCSU9TICovCisgdTgJaW5kcjsJCS8qIExhc3QgaW1hZ2UgaW5kaWNhdG9yICovCisgdTE2CW1ydGltZ2xlbjsJLyogTWF4IFJ1biBUaW1lIEltYWdlIExlbmd0aCAqLworIHUxNgljdW9mZjsJCS8qIENvbmZpZyBVdGlsaXR5IENvZGUgSGVhZGVyIE9mZnNldCAqLworIHUxNglkbXRmY2xwOwkvKiBETVRGIENMUCBlbnRyeSBwb2ludCBvZmZzZXQgKi8KK307CisKK3N0cnVjdCBwY2lfb3B0cm9tX2hkcl9zeworIHUxNglzaWc7CQkvKiBTaWduYXR1cmUgMHg1NUFBICovCisgdTgJbGVuOwkJLyogT3B0aW9uIFJPTSBsZW5ndGggaW4gdW5pdHMgb2YgNTEyIGJ5dGVzICovCisgdTgJaW5pdmVjWzNdOwkvKiBJbml0aWFsaXphdGlvbiB2ZWN0b3IgKi8KKyB1OAlyc3ZkWzE2XTsJLyogUmVzZXJ2ZWQgZmllbGQgKi8KKyB1MTYJdmVycHRyOwkJLyogUG9pbnRlciB0byB2ZXJzaW9uIHN0cmluZyAtIHByaXZhdGUgKi8KKyB1MTYJcGNpZHM7CQkvKiBQb2ludGVyIHRvIFBDSSBkYXRhIHN0cnVjdHVyZSAqLworIHUxNglwbnBoZHI7CQkvKiBQb2ludGVyIHRvIFBuUCBleHBhbnNpb24gaGVhZGVyICovCit9OworCisjcHJhZ21hIHBhY2soKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC9zY3NpLmggYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMjBlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2luY2x1ZGUvcHJvdG9jb2wvc2NzaS5oCkBAIC0wLDAgKzEsMTY0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fU0NTSV9IX18KKyNkZWZpbmUgX19TQ1NJX0hfXworCisjaW5jbHVkZSA8cHJvdG9jb2wvdHlwZXMuaD4KKworI3ByYWdtYSBwYWNrKDEpCisKKy8qCisgKiBnZW5lcmljIFNDU0kgY2RiIGRlZmluaXRpb24KKyAqLworI2RlZmluZSBTQ1NJX01BWF9DREJMRU4gICAgIDE2CitzdHJ1Y3Qgc2NzaV9jZGJfc3sKKwl1OCAgICAgICAgIHNjc2lfY2RiW1NDU0lfTUFYX0NEQkxFTl07Cit9OworCisvKgorICogc2NzaSBsdW4gc2VyaWFsIG51bWJlciBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgU0NTSV9MVU5fU05fTEVOICAgICAzMgorc3RydWN0IHNjc2lfbHVuX3NuX3N7CisJdTggICAgICAgICBsdW5fc25bU0NTSV9MVU5fU05fTEVOXTsKK307CisKKy8qCisgKiBTQ1NJIERpcmVjdCBBY2Nlc3MgQ29tbWFuZHMKKyAqLworZW51bSB7CisJU0NTSV9PUF9URVNUX1VOSVRfUkVBRFkJCT0gMHgwMCwKKwlTQ1NJX09QX1JFUVVFU1RfU0VOU0UJCT0gMHgwMywKKwlTQ1NJX09QX0ZPUk1BVF9VTklUCQk9IDB4MDQsCisJU0NTSV9PUF9SRUFENgkJCT0gMHgwOCwKKwlTQ1NJX09QX1dSSVRFNgkJCT0gMHgwQSwKKwlTQ1NJX09QX1dSSVRFX0ZJTEVNQVJLUwkJPSAweDEwLAorCVNDU0lfT1BfSU5RVUlSWQkJCT0gMHgxMiwKKwlTQ1NJX09QX01PREVfU0VMRUNUNgkJPSAweDE1LAorCVNDU0lfT1BfUkVTRVJWRTYJCT0gMHgxNiwKKwlTQ1NJX09QX1JFTEVBU0U2CQk9IDB4MTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFNgkJPSAweDFBLAorCVNDU0lfT1BfU1RBUlRfU1RPUF9VTklUCQk9IDB4MUIsCisJU0NTSV9PUF9TRU5EX0RJQUdOT1NUSUMJCT0gMHgxRCwKKwlTQ1NJX09QX1JFQURfQ0FQQUNJVFkJCT0gMHgyNSwKKwlTQ1NJX09QX1JFQUQxMAkJCT0gMHgyOCwKKwlTQ1NJX09QX1dSSVRFMTAJCQk9IDB4MkEsCisJU0NTSV9PUF9WRVJJRlkxMAkJPSAweDJGLAorCVNDU0lfT1BfUkVBRF9ERUZFQ1RfREFUQQk9IDB4MzcsCisJU0NTSV9PUF9MT0dfU0VMRUNUCQk9IDB4NEMsCisJU0NTSV9PUF9MT0dfU0VOU0UJCT0gMHg0RCwKKwlTQ1NJX09QX01PREVfU0VMRUNUMTAJCT0gMHg1NSwKKwlTQ1NJX09QX1JFU0VSVkUxMAkJPSAweDU2LAorCVNDU0lfT1BfUkVMRUFTRTEwCQk9IDB4NTcsCisJU0NTSV9PUF9NT0RFX1NFTlNFMTAJCT0gMHg1QSwKKwlTQ1NJX09QX1BFUl9SRVNFUlZFX0lOCQk9IDB4NUUsCisJU0NTSV9PUF9QRVJfUkVTRVJWRV9PVVIJCT0gMHg1RSwKKwlTQ1NJX09QX1JFQUQxNgkJCT0gMHg4OCwKKwlTQ1NJX09QX1dSSVRFMTYJCQk9IDB4OEEsCisJU0NTSV9PUF9WRVJJRlkxNgkJPSAweDhGLAorCVNDU0lfT1BfUkVBRF9DQVBBQ0lUWTE2CQk9IDB4OUUsCisJU0NTSV9PUF9SRVBPUlRfTFVOUwkJPSAweEEwLAorCVNDU0lfT1BfUkVBRDEyCQkJPSAweEE4LAorCVNDU0lfT1BfV1JJVEUxMgkJCT0gMHhBQSwKKwlTQ1NJX09QX1VOREVGCQkJPSAweEZGLAorfTsKKworLyoKKyAqIFNDU0kgU1RBUlRfU1RPUF9VTklUIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfc3RhcnRfc3RvcF91bml0X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjQ7CisJdTggICAgICAgICBpbW1lZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGltbWVkOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBvd2VyX2NvbmRpdGlvbnM6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkNDoyOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgc3RhcnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBzdGFydDoxOworCXU4ICAgICAgICAgbG9FajoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjI7CisJdTggICAgICAgICBwb3dlcl9jb25kaXRpb25zOjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBTRU5EX0RJQUdOT1NUSUMgY29tbWFuZAorICovCitzdHJ1Y3Qgc2NzaV9zZW5kX2RpYWdub3N0aWNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKwl1OCAgICAgICAgIHBmOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworI2Vsc2UKKwl1OCAgICAgICAgIHVuaXRfb2ZmbDoxOworCXU4ICAgICAgICAgZGV2X29mZmw6MTsKKwl1OCAgICAgICAgIHNlbGZfdGVzdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwZjoxOworCXU4ICAgICAgICAgc2VsZl90ZXN0X2NvZGU6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCisJdTggICAgICAgICBwYXJhbV9saXN0X2xlbmd0aFsyXTsJLyogTVNCIGZpcnN0ICovCisJdTggICAgICAgICBjb250cm9sOworCit9OworCisvKgorICogU0NTSSBSRUFEMTAvV1JJVEUxMCBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIGx1bjozOworCXU4ICAgICAgICAgZHBvOjE7CS8qIERpc2FibGUgUGFnZSBPdXQgKi8KKwl1OCAgICAgICAgIGZ1YToxOwkvKiBGb3JjZSBVbml0IEFjY2VzcyAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjI7CisJdTggICAgICAgICByZWxfYWRyOjE7CS8qIHJlbGF0aXZlIGFkZHJlc3MgKi8KKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MjsKKwl1OCAgICAgICAgIGZ1YToxOworCXU4ICAgICAgICAgZHBvOjE7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJLyogbG9naWNhbCBibG9jayBhZGRyZXNzIC0gTVNCICovCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CS8qIExTQiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOworCXU4ICAgICAgICAgeGZlcl9sZW5ndGgwOwkvKiB0cmFuc2ZlciBsZW5ndGggaW4gYmxvY2tzIC0gTVNCICovCisJdTggICAgICAgICB4ZmVyX2xlbmd0aDE7CS8qIExTQiAqLworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREIxMF9HRVRfTEJBKGNkYikgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgoY2RiKS0+bGJhMCA8PCAyNCkgfCAoKGNkYiktPmxiYTEgPDwgMTYpIHwgICAgXAorICAgICAoKGNkYiktPmxiYTIgPDwgOCkgfCAoY2RiKS0+bGJhMykKKworI2RlZmluZSBTQ1NJX0NEQjEwX1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMjQ7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiAxNikgJiAweEZGOyAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IChsYmEgPj4gOCkgJiAweEZGOyAgICBcCisgICAgKGNkYiktPmxiYTMgPSBsYmEgJiAweEZGOyAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX1RMKGNkYikgIFwKKyAgICAoKGNkYiktPnhmZXJfbGVuZ3RoMCA8PCA4IHwgKGNkYiktPnhmZXJfbGVuZ3RoMSkKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGgwID0gdGwgPj4gODsgICAgICAgXAorICAgIChjZGIpLT54ZmVyX2xlbmd0aDEgPSB0bCAmIDB4RkY7ICAgICBcCit9CisKKy8qCisgKiBTQ1NJIFJFQUQ2L1dSSVRFNiBjb21tYW5kcworICovCitzdHJ1Y3Qgc2NzaV9ydzZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBsYmEwOjU7CQkvKiBNU2IgKi8KKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsJCS8qIExTQiAqLworCXU4ICAgICAgICAgeGZlcl9sZW5ndGg7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworI2RlZmluZSBTQ1NJX1RBUEVfQ0RCNl9HRVRfVEwoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPnRsMCA8PCAxNikgfCAoKGNkYiktPnRsMSA8PCA4KSB8IChjZGIpLT50bDIpCisKKyNkZWZpbmUgU0NTSV9UQVBFX0NEQjZfU0VUX1RMKGNkYiwgdGwpIHsgICAgICBcCisgICAgKGNkYiktPnRsMCA9IHRsID4+IDE2OyAgICAgICAgICAgIFwKKyAgICAoY2RiKS0+dGwxID0gKHRsID4+IDgpICYgMHhGRjsgICAgXAorICAgIChjZGIpLT50bDIgPSB0bCAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlcXVlbnRpYWwgKFRBUEUpIHdydGllIGNvbW1hbmQKKyAqLworc3RydWN0IHNjc2lfdGFwZV93cl9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByc3ZkOjc7CisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKyNlbHNlCisJdTggICAgICAgICBmaXhlZDoxOwkvKiBNU2IgKi8KKwl1OCAgICAgICAgIHJzdmQ6NzsKKyNlbmRpZgorCXU4ICAgICAgICAgdGwwOwkJLyogTXNiICovCisJdTggICAgICAgICB0bDE7CisJdTggICAgICAgICB0bDI7CQkvKiBMc2IgKi8KKworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9MQkEoY2RiKSAgICAgICAgICAgICAgXAorICAgICgoKGNkYiktPmxiYTAgPDwgMTYpIHwgKChjZGIpLT5sYmExIDw8IDgpIHwgKGNkYiktPmxiYTIpCisKKyNkZWZpbmUgU0NTSV9DREI2X1NFVF9MQkEoY2RiLCBsYmEpIHsgICAgICBcCisgICAgKGNkYiktPmxiYTAgPSBsYmEgPj4gMTY7ICAgICAgICAgICAgXAorICAgIChjZGIpLT5sYmExID0gKGxiYSA+PiA4KSAmIDB4RkY7ICAgIFwKKyAgICAoY2RiKS0+bGJhMiA9IGxiYSAmIDB4RkY7ICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgU0NTSV9DREI2X0dFVF9UTChjZGIpICgoY2RiKS0+eGZlcl9sZW5ndGgpCisjZGVmaW5lIFNDU0lfQ0RCNl9TRVRfVEwoY2RiLCB0bCkgeyAgICAgIFwKKyAgICAoY2RiKS0+eGZlcl9sZW5ndGggPSB0bDsgICAgICAgICBcCit9CisKKy8qCisgKiBTQ1NJIHNlbnNlIGRhdGEgZm9ybWF0CisgKi8KK3N0cnVjdCBzY3NpX3NlbnNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHZhbGlkOjE7CisJdTggICAgICAgICByc3BfY29kZTo3OworI2Vsc2UKKwl1OCAgICAgICAgIHJzcF9jb2RlOjc7CisJdTggICAgICAgICB2YWxpZDoxOworI2VuZGlmCisJdTggICAgICAgICBzZWdfbnVtOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBmaWxlX21hcms6MTsKKwl1OCAgICAgICAgIGVvbToxOwkJLyogZW5kIG9mIG1lZGlhICovCisJdTggICAgICAgICBpbGk6MTsJCS8qIGluY29ycmVjdCBsZW5ndGggaW5kaWNhdG9yICovCisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisjZWxzZQorCXU4ICAgICAgICAgc2Vuc2Vfa2V5OjQ7CisJdTggICAgICAgICByZXNlcnZlZDoxOworCXU4ICAgICAgICAgaWxpOjE7CQkvKiBpbmNvcnJlY3QgbGVuZ3RoIGluZGljYXRvciAqLworCXU4ICAgICAgICAgZW9tOjE7CQkvKiBlbmQgb2YgbWVkaWEgKi8KKwl1OCAgICAgICAgIGZpbGVfbWFyazoxOworI2VuZGlmCisJdTggICAgICAgICBpbmZvcm1hdGlvbls0XTsJLyogZGV2aWNlLXR5cGUgb3IgY29tbWFuZCBzcGVjaWZpYyBpbmZvCisJCQkJCSAqLworCXU4ICAgICAgICAgYWRkX3NlbnNlX2xlbmd0aDsKKwkJCQkJLyogYWRkaXRpb25hbCBzZW5zZSBsZW5ndGggKi8KKwl1OCAgICAgICAgIGNvbW1hbmRfaW5mb1s0XTsvKiBjb21tYW5kIHNwZWNpZmljIGluZm9ybWF0aW9uCisJCQkJCQkgKi8KKwl1OCAgICAgICAgIGFzYzsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqLworCXU4ICAgICAgICAgYXNjcTsJCS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KKwl1OCAgICAgICAgIGZydV9jb2RlOwkvKiBmaWVsZCByZXBsYWNlYWJsZSB1bml0IGNvZGUgKi8KKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisJdTggICAgICAgICBjX2Q6MTsJCS8qIGNvbW1hbmQvZGF0YSBiaXQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIGJwb2ludGVyOjM7CS8qIGJpdCBwb2ludGVyICovCisjZWxzZQorCXU4ICAgICAgICAgYnBvaW50ZXI6MzsJLyogYml0IHBvaW50ZXIgKi8KKwl1OCAgICAgICAgIGJwdjoxOwkJLyogYml0IHBvaW50ZXIgdmFsaWQgKi8KKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGNfZDoxOwkJLyogY29tbWFuZC9kYXRhIGJpdCAqLworCXU4ICAgICAgICAgc2tzdjoxOwkJLyogc2Vuc2Uga2V5IHNwZWNpZmljIHZhbGlkICovCisjZW5kaWYKKwl1OCAgICAgICAgIGZwb2ludGVyWzJdOwkvKiBmaWVsZCBwb2ludGVyICovCit9OworCisjZGVmaW5lIFNDU0lfU0VOU0VfQ1VSX0VSUiAgICAgICAgICAweDcwCisjZGVmaW5lIFNDU0lfU0VOU0VfREVGX0VSUiAgICAgICAgICAweDcxCisKKy8qCisgKiBTQ1NJIHNlbnNlIGtleSB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX1NLX05PX1NFTlNFICAgICAgICAweDAKKyNkZWZpbmUgU0NTSV9TS19SRUNfRVJSICAgICAgICAgMHgxCS8qIHJlY292ZXJlZCBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX05PVF9SRUFEWSAgICAgICAweDIKKyNkZWZpbmUgU0NTSV9TS19NRURfRVJSICAgICAgICAgMHgzCS8qIG1lZGl1bSBlcnJvciAqLworI2RlZmluZSBTQ1NJX1NLX0hXX0VSUiAgICAgICAgICAweDQJLyogaGFyZHdhcmUgZXJyb3IgKi8KKyNkZWZpbmUgU0NTSV9TS19JTExFR0FMX1JFUSAgICAgMHg1CisjZGVmaW5lIFNDU0lfU0tfVU5JVF9BVFQgICAgICAgIDB4NgkvKiB1bml0IGF0dGVudGlvbiAqLworI2RlZmluZSBTQ1NJX1NLX0RBVEFfUFJPVEVDVCAgICAweDcKKyNkZWZpbmUgU0NTSV9TS19CTEFOS19DSEVDSyAgICAgMHg4CisjZGVmaW5lIFNDU0lfU0tfVkVORE9SX1NQRUMgICAgIDB4OQorI2RlZmluZSBTQ1NJX1NLX0NPUFlfQUJPUlRFRCAgICAweEEKKyNkZWZpbmUgU0NTSV9TS19BQk9SVEVEX0NNTkQgICAgMHhCCisjZGVmaW5lIFNDU0lfU0tfVk9MX09WRVJGTE9XICAgIDB4RAorI2RlZmluZSBTQ1NJX1NLX01JU0NPTVBBUkUgICAgICAweEUKKworLyoKKyAqIFNDU0kgYWRkaXRpb25hbCBzZW5zZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfQVNDX05PX0FERF9TRU5TRSAgICAgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1JFQURZICAgICAgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX0NPTU1VTklDQVRJT04gICAgICAweDA4CisjZGVmaW5lIFNDU0lfQVNDX1dSSVRFX0VSUk9SICAgICAgICAgICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ19JTlZBTElEX0NNTkRfQ09ERSAgICAgIDB4MjAKKyNkZWZpbmUgU0NTSV9BU0NfQkFEX0xCQSAgICAgICAgICAgICAgICAweDIxCisjZGVmaW5lIFNDU0lfQVNDX0lOVkFMSURfRklFTERfSU5fQ0RCICAgMHgyNAorI2RlZmluZSBTQ1NJX0FTQ19MVU5fTk9UX1NVUFBPUlRFRCAgICAgIDB4MjUKKyNkZWZpbmUgU0NTSV9BU0NfTFVOX1dSSVRFX1BST1RFQ1QgICAgICAweDI3CisjZGVmaW5lIFNDU0lfQVNDX1BPV0VST05fQkRSICAgICAgICAgICAgMHgyOQkvKiBwb3dlciBvbiByZXNldCwgYnVzIHJlc2V0LAorCQkJCQkJICogYnVzIGRldmljZSByZXNldAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUkFNU19DSEFOR0VEICAgICAgICAgMHgyQQorI2RlZmluZSBTQ1NJX0FTQ19DTU5EX0NMRUFSRURfQllfQV9JICAgIDB4MkYKKyNkZWZpbmUgU0NTSV9BU0NfU0FWSU5HX1BBUkFNX05PVFNVUFAgICAweDM5CisjZGVmaW5lIFNDU0lfQVNDX1RPQ0MgICAgICAgICAgICAgICAgICAgMHgzRgkvKiB0YXJnZXQgb3BlcmF0aW5nIGNvbmR0aW9ucworCQkJCQkJICogY2hhbmdlZAorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDX1BBUklUWV9FUlJPUiAgICAgICAgICAgMHg0NworI2RlZmluZSBTQ1NJX0FTQ19DTU5EX1BIQVNFX0VSUk9SICAgICAgIDB4NEEKKyNkZWZpbmUgU0NTSV9BU0NfREFUQV9QSEFTRV9FUlJPUiAgICAgICAweDRCCisjZGVmaW5lIFNDU0lfQVNDX1ZFTkRPUl9TUEVDICAgICAgICAgICAgMHg3RgorCisvKgorICogU0NTSSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVycworICovCisjZGVmaW5lIFNDU0lfQVNDUV9DQVVTRV9OT1RfUkVQT1JUICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfQkVDT01JTkdfUkVBRFkgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0lOSVRfQ01EX1JFUSAgICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9GT1JNQVRfSU5fUFJPR1JFU1MgICAgMHgwNAorI2RlZmluZSBTQ1NJX0FTQ1FfT1BFUkFUSU9OX0lOX1BST0dSRVNTIDB4MDcKKyNkZWZpbmUgU0NTSV9BU0NRX1NFTEZfVEVTVF9JTl9QUk9HUkVTUyAweDA5CisjZGVmaW5lIFNDU0lfQVNDUV9XUl9VTkVYUF9VTlNPTF9EQVRBICAgMHgwQworI2RlZmluZSBTQ1NJX0FTQ1FfV1JfTk9URU5HX1VOU09MX0RBVEEgIDB4MEQKKworI2RlZmluZSBTQ1NJX0FTQ1FfTEJBX09VVF9PRl9SQU5HRSAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9BU0NRX0lOVkFMSURfRUxFTUVOVF9BRERSICAweDAxCisKKyNkZWZpbmUgU0NTSV9BU0NRX0xVTl9XUklURV9QUk9URUNURUQgICAgICAgMHgwMAorI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX0hXX1dSSVRFX1BST1RFQ1RFRCAgICAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9MVU5fU1dfV1JJVEVfUFJPVEVDVEVEICAgIDB4MDIKKworI2RlZmluZSBTQ1NJX0FTQ1FfUE9SICAgMHgwMQkvKiBwb3dlciBvbiByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfU0JSICAgMHgwMgkvKiBzY3NpIGJ1cyByZXNldCAqLworI2RlZmluZSBTQ1NJX0FTQ1FfQkRSICAgMHgwMwkvKiBidXMgZGV2aWNlIHJlc2V0ICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESVIgICAweDA0CS8qIGRldmljZSBpbnRlcm5hbCByZXNldCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9NT0RFX1BBUkFNU19DSEFOR0VEICAgICAgIDB4MDEKKyNkZWZpbmUgU0NTSV9BU0NRX0xPR19QQVJBTVNfQ0hBTkdFRCAgICAgICAgMHgwMgorI2RlZmluZSBTQ1NJX0FTQ1FfUkVTRVJWQVRJT05TX1BSRUVNUFRFRCAgICAweDAzCisjZGVmaW5lIFNDU0lfQVNDUV9SRVNFUlZBVElPTlNfUkVMRUFTRUQgICAgIDB4MDQKKyNkZWZpbmUgU0NTSV9BU0NRX1JFR0lTVFJBVElPTlNfUFJFRU1QVEVEICAgMHgwNQorCisjZGVmaW5lIFNDU0lfQVNDUV9NSUNST0NPREVfQ0hBTkdFRCAweDAxCisjZGVmaW5lIFNDU0lfQVNDUV9DSEFOR0VEX09QRVJfQ09ORCAweDAyCisjZGVmaW5lIFNDU0lfQVNDUV9JTlFfQ0hBTkdFRCAgICAgICAweDAzCS8qIGlucXVpcnkgZGF0YSBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9ESV9DSEFOR0VEICAgICAgICAweDA1CS8qIGRldmljZSBpZCBjaGFuZ2VkICovCisjZGVmaW5lIFNDU0lfQVNDUV9STF9EQVRBX0NIQU5HRUQgICAweDBFCS8qIHJlcG9ydCBsdW5zIGRhdGEgY2hhbmdlZCAqLworCisjZGVmaW5lIFNDU0lfQVNDUV9EUF9DUkNfRVJSICAgICAgICAgICAgMHgwMQkvKiBkYXRhIHBoYXNlIGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfRFBfU0NTSV9QQVJJVFlfRVJSICAgIDB4MDIJLyogZGF0YSBwaGFzZSBzY3NpIHBhcml0eSBlcnJvcgorCQkJCQkJICovCisjZGVmaW5lIFNDU0lfQVNDUV9JVV9DUkNfRVJSICAgICAgICAgICAgMHgwMwkvKiBpbmZvcm1hdGlvbiB1bml0IGNyYyBlcnJvciAqLworI2RlZmluZSBTQ1NJX0FTQ1FfUFJPVE9fU0VSVl9DUkNfRVJSICAgIDB4MDUKKworI2RlZmluZSBTQ1NJX0FTQ1FfTFVOX1RJTUVfT1VUICAgICAgICAgIDB4MDEKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIElOUVVJUlkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBzY3NpX2lucXVpcnlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgZXZwZDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV2cGQ6MTsKKwl1OCAgICAgICAgIGNtZF9kdDoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBsdW46MzsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9jb2RlOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKK3N0cnVjdCBzY3NpX2lucXVpcnlfdmVuZG9yX3N7CisJdTggICAgICAgICB2ZW5kb3JfaWRbOF07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zeworCXU4ICAgICAgICAgcHJvZHVjdF9pZFsxNl07Cit9OworCitzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RyZXZfc3sKKwl1OCAgICAgICAgIHByb2R1Y3RfcmV2WzRdOworfTsKKworc3RydWN0IHNjc2lfaW5xdWlyeV9kYXRhX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOwkvKiBwZXJpcGhlcmFsIHF1YWxpZmllciAqLworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJCS8qIHBlcmlwaGVyYWwgZGV2aWNlIHR5cGUgKi8KKworCXU4ICAgICAgICAgcm1iOjE7CQkJLyogcmVtb3ZhYmxlIG1lZGl1bSBiaXQgKi8KKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OwkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICBhZW5jOjE7CQkvKiBhc3luYyBldmVudCBub3RpZmljYXRpb24gY2FwYWJpbGl0eQorCQkJCQkgKi8KKwl1OCAgICAgICAgIHRybV9pb3A6MTsJLyogdGVybWluYXRlIEkvTyBwcm9jZXNzICovCisJdTggICAgICAgICBub3JtX2FjYToxOwkvKiBub3JtYWwgQUNBIHN1cHBvcnRlZCAqLworCXU4ICAgICAgICAgaGlfc3VwcG9ydDoxOwkvKiBTQ1NJLTM6IHN1cHBvcnRzIFJFUE9SVCBMVU5TICovCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKworCXU4ICAgICAgICAgYWRkaXRpb25hbF9sZW47CisJdTggICAgICAgICBzY2NzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NzsKKworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisJdTggICAgICAgICBlbmNfc2VydjoxOwkvKiBlbmNsb3N1cmUgc2VydmljZSBjb21wb25lbnQgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOworCXU4ICAgICAgICAgbXVsdGlfcG9ydDoxOwkvKiBtdWx0aS1wb3J0IGRldmljZSAqLworCXU4ICAgICAgICAgbV9jaG5ncjoxOwkvKiBkZXZpY2UgaW4gbWVkaXVtIHRyYW5zcG9ydCBlbGVtZW50ICovCisJdTggICAgICAgICBhY2tfcmVxX3E6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFkZHIxNjoxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsJLyogcmVsYXRpdmUgYWRkcmVzcyAqLworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgc3luY2hyb25vdXM6MTsKKwl1OCAgICAgICAgIGxpbmtlZF9jb21tYW5kczoxOworCXU4ICAgICAgICAgdHJhbnNfZGlzOjE7CisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHNvZnRfcmVzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsJLyogcGVyaXBoZXJhbCBkZXZpY2UgdHlwZSAqLworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisJCQkJCS8qIHBlcmlwaGVyYWwgcXVhbGlmaWVyICovCisKKwl1OCAgICAgICAgIGRldmljZV90eXBlX21vZDo3OworCQkJCQkvKiBkZXZpY2UgdHlwZSBtb2RpZmllciAqLworCXU4ICAgICAgICAgcm1iOjE7CQkvKiByZW1vdmFibGUgbWVkaXVtIGJpdCAqLworCisJdTggICAgICAgICB2ZXJzaW9uOworCisJdTggICAgICAgICByc3BfZGF0YV9mb3JtYXQ6NDsKKwl1OCAgICAgICAgIGhpX3N1cHBvcnQ6MTsJLyogU0NTSS0zOiBzdXBwb3J0cyBSRVBPUlQgTFVOUyAqLworCXU4ICAgICAgICAgbm9ybV9hY2E6MTsJLyogbm9ybWFsIEFDQSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRlcm1pbmF0ZV9pb3A6MTsvKiB0ZXJtaW5hdGUgSS9PIHByb2Nlc3MgKi8KKwl1OCAgICAgICAgIGFlbmM6MTsJCS8qIGFzeW5jIGV2ZW50IG5vdGlmaWNhdGlvbiBjYXBhYmlsaXR5CisJCQkJCSAqLworCisJdTggICAgICAgICBhZGRpdGlvbmFsX2xlbjsKKwl1OCAgICAgICAgIHJlc2VydmVkMTo3OworCXU4ICAgICAgICAgc2NjczoxOworCisJdTggICAgICAgICBhZGRyMTY6MTsJLyogU0lQIHNwZWNpZmljIGJpdCAqLworCXU4ICAgICAgICAgYWRkcjMyOjE7CS8qIFNJUCBzcGVjaWZpYyBiaXQgKi8KKwl1OCAgICAgICAgIGFja19yZXFfcToxOwkvKiBTSVAgc3BlY2lmaWMgYml0ICovCisJdTggICAgICAgICBtX2NobmdyOjE7CS8qIGRldmljZSBpbiBtZWRpdW0gdHJhbnNwb3J0IGVsZW1lbnQgKi8KKwl1OCAgICAgICAgIG11bHRpX3BvcnQ6MTsJLyogbXVsdGktcG9ydCBkZXZpY2UgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMzoxOwkvKiBUQkQgLSBWZW5kb3IgU3BlY2lmaWMgKi8KKwl1OCAgICAgICAgIGVuY19zZXJ2OjE7CS8qIGVuY2xvc3VyZSBzZXJ2aWNlIGNvbXBvbmVudCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjE7CisKKwl1OCAgICAgICAgIHNvZnRfc2VzZXQ6MTsJLyogc29mdCByZXNldCBhbHRlcm5hdGl2ZSAoVlMpICovCisJdTggICAgICAgICBjbWRfcXVldWU6MTsJLyogY29tbWFuZCBxdWV1ZWluZyBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIHRyYW5zX2RpczoxOworCXU4ICAgICAgICAgbGlua2VkX2NvbW1hbmRzOjE7CisJdTggICAgICAgICBzeW5jaHJvbm91czoxOworCXU4ICAgICAgICAgd19idXMxNjoxOworCXU4ICAgICAgICAgd19idXMzMjoxOworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZW5kaWYKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3ZlbmRvcl9zIHZlbmRvcl9pZDsKKwlzdHJ1Y3Qgc2NzaV9pbnF1aXJ5X3Byb2RpZF9zIHByb2R1Y3RfaWQ7CisJc3RydWN0IHNjc2lfaW5xdWlyeV9wcm9kcmV2X3MgcHJvZHVjdF9yZXY7CisJdTggICAgICAgICB2ZW5kb3Jfc3BlY2lmaWNbMjBdOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0WzQwXTsKK307CisKKy8qCisgKiBpbnF1aXJ5LnBlcmlwaGVyYWxfcXVhbCBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVlFVQUxfREVGQVVMVCAgICAgICAgMAorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX0NPTk5FQ1RFRCAgMQorI2RlZmluZSBTQ1NJX0RFVlFVQUxfTk9UX1NVUFBPUlRFRCAgMworCisvKgorICogaW5xdWlyeS5kZXZpY2VfdHlwZSBmaWVsZCB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1NJX0RFVklDRV9ESVJFQ1RfQUNDRVNTICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9ERVZJQ0VfU0VRX0FDQ0VTUyAgICAgICAgICAweDAxCisjZGVmaW5lIFNDU0lfREVWSUNFX0FSUkFZX0NPTlRST0xMRVIgICAgMHgwQworI2RlZmluZSBTQ1NJX0RFVklDRV9VTktOT1dOICAgICAgICAgICAgIDB4MUYKKworLyoKKyAqIGlucXVpcnkudmVyc2lvbgorICovCisjZGVmaW5lIFNDU0lfVkVSU0lPTl9BTlNJX1gzMTMxICAgICAyCS8qIEFOU0kgWDMuMTMxIFNDU0ktMiAqLworI2RlZmluZSBTQ1NJX1ZFUlNJT05fU1BDICAgICAgICAgICAgMwkvKiBTUEMgKFNDU0ktMyksIEFOU0kgWDMuMzAxOjE5OTcgKi8KKyNkZWZpbmUgU0NTSV9WRVJTSU9OX1NQQ18yICAgICAgICAgIDQJLyogU1BDLTIgKi8KKworLyoKKyAqIHJlc3BvbnNlIGRhdGEgZm9ybWF0CisgKi8KKyNkZWZpbmUgU0NTSV9SU1BfREFUQV9GT1JNQVQgICAgICAgIDIJLyogU0NTSS0yICYgU1BDICovCisKKy8qCisgKiBTQ1NJIGlucXVpcnkgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfSU5RX1BBR0VfVlBEX1BBR0VTICAgICAweDAwCS8qIHN1cHBvcnRlZCB2cGQgcGFnZXMgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9VU05fUEFHRSAgICAgIDB4ODAJLyogdW5pdCBzZXJpYWwgbnVtYmVyIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRV9ERVZfSURFTlQgICAgIDB4ODMJLyogZGV2aWNlIGluZGVudGlmaWNhdGlvbiBwYWdlCisJCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9JTlFfUEFHRVNfTUFYICAgICAgICAgIDMKKworLyoKKyAqIHN1cHBvcnRlZCB2aXRhbCBwcm9kdWN0IGRhdGEgcGFnZXMKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfdnBkX3BhZ2VzX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkOworCXU4ICAgICAgICAgcGFnZV9sZW5ndGg7CisJdTggICAgICAgICBwYWdlc1tTQ1NJX0lOUV9QQUdFU19NQVhdOworfTsKKworLyoKKyAqIFVuaXQgc2VyaWFsIG51bWJlciBwYWdlCisgKi8KKyNkZWZpbmUgU0NTSV9JTlFfVVNOX0xFTiAzMgorCitzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3N7CisJY2hhciAgICAgICAgICAgIHVzbltTQ1NJX0lOUV9VU05fTEVOXTsKK307CisKK3N0cnVjdCBzY3NpX2lucV9wYWdlX3Vzbl9zeworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJpcGhlcmFsX3F1YWw6MzsKKwl1OCAgICAgICAgIGRldmljZV90eXBlOjU7CisjZWxzZQorCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2NvZGU7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBwYWdlX2xlbmd0aDsKKwlzdHJ1Y3Qgc2NzaV9pbnFfdXNuX3MgIHVzbjsKK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9DT0RFX0JJTkFSWSA9IDEsCS8qIGlkZW50aWZpZXIgaGFzIGJpbmFyeSB2YWx1ZSAqLworCVNDU0lfSU5RX0RJUF9DT0RFX0FTQ0lJID0gMiwJLyogaWRlbnRpZmllciBoYXMgYXNjaWkgdmFsdWUgKi8KK307CisKK2VudW0geworCVNDU0lfSU5RX0RJUF9BU1NPQ19MVU4gPSAwLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggZGV2aWNlICovCisJU0NTSV9JTlFfRElQX0FTU09DX1BPUlQgPSAxLAkvKiBpZCBpcyBhc3NvY2lhdGVkIHdpdGggcG9ydCB0aGF0CisJCQkJCSAqIHJlY2VpdmVkIHRoZSByZXF1ZXN0CisJCQkJCSAqLworfTsKKworZW51bSB7CisJU0NTSV9JTlFfSURfVFlQRV9WRU5ET1IgPSAxLAorCVNDU0lfSU5RX0lEX1RZUEVfSUVFRSA9IDIsCisJU0NTSV9JTlFfSURfVFlQRV9GQ19GUyA9IDMsCisJU0NTSV9JTlFfSURfVFlQRV9PVEhFUiA9IDQsCit9OworCitzdHJ1Y3Qgc2NzaV9pbnFfZGlwX2Rlc2Nfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzMDo0OworCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczE6MjsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICBpZF90eXBlOjQ7CisjZWxzZQorCXU4ICAgICAgICAgY29kZV9zZXQ6NDsKKwl1OCAgICAgICAgIHJlczA6NDsKKwl1OCAgICAgICAgIGlkX3R5cGU6NDsKKwl1OCAgICAgICAgIGFzc29jaWF0aW9uOjI7CisJdTggICAgICAgICByZXMxOjI7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlczI7CisJdTggICAgICAgICBpZF9sZW47CisJc3RydWN0IHNjc2lfbHVuX3NuX3MgICBpZDsKK307CisKKy8qCisgKiBEZXZpY2UgaW5kZW50aWZpY2F0aW9uIHBhZ2UKKyAqLworc3RydWN0IHNjc2lfaW5xX3BhZ2VfZGV2X2lkZW50X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBlcmlwaGVyYWxfcXVhbDozOworCXU4ICAgICAgICAgZGV2aWNlX3R5cGU6NTsKKyNlbHNlCisJdTggICAgICAgICBkZXZpY2VfdHlwZTo1OworCXU4ICAgICAgICAgcGVyaXBoZXJhbF9xdWFsOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfY29kZTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTsKKwl1OCAgICAgICAgIHBhZ2VfbGVuZ3RoOworCXN0cnVjdCBzY3NpX2lucV9kaXBfZGVzY19zIGRlc2M7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJFQUQgQ0FQQUNJVFkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHlfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgbHVuOjM7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIHJlbF9hZHI6MTsKKyNlbHNlCisJdTggICAgICAgICByZWxfYWRyOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6NDsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICBsYmEwOwkvKiBNU0IgKi8KKwl1OCAgICAgICAgIGxiYTE7CisJdTggICAgICAgICBsYmEyOworCXU4ICAgICAgICAgbGJhMzsJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDI7CisJdTggICAgICAgICByZXNlcnZlZDM7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworCXU4ICAgICAgICAgcG1pOjE7CS8qIHBhcnRpYWwgbWVkaXVtIGluZGljYXRvciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBtaToxOwkvKiBwYXJ0aWFsIG1lZGl1bSBpbmRpY2F0b3IgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDo3OworI2VuZGlmCisJdTggICAgICAgICBjb250cm9sOworfTsKKworc3RydWN0IHNjc2lfcmVhZF9jYXBhY2l0eV9kYXRhX3N7CisJdTMyICAgICAgICBtYXhfbGJhOwkvKiBtYXhpbXVtIExCQSBhdmFpbGFibGUgKi8KKwl1MzIgICAgICAgIGJsb2NrX2xlbmd0aDsJLyogaW4gYnl0ZXMgKi8KK307CisKK3N0cnVjdCBzY3NpX3JlYWRfY2FwYWNpdHkxNl9kYXRhX3N7CisJdTY0ICAgICAgICBsYmE7CS8qIG1heGltdW0gTEJBIGF2YWlsYWJsZSAqLworCXUzMiAgICAgICAgYmxvY2tfbGVuZ3RoOwkvKiBpbiBieXRlcyAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6NCwKKwkJCXBfdHlwZTozLAorCQkJcHJvdF9lbjoxOworCXU4CQlyZXNlcnZlZDI6NCwKKwkJCWxiX3BiZTo0OwkvKiBsb2dpY2FsIGJsb2NrcyBwZXIgcGh5c2ljYWwgYmxvY2sKKwkJCQkJICogZXhwb25lbnQgKi8KKwl1MTYJcmVzZXJ2ZWQzOjIsCisJCQlsYmFfYWxpZ246MTQ7CS8qIGxvd2VzdCBhbGlnbmVkIGxvZ2ljYWwgYmxvY2sKKwkJCQkJICogYWRkcmVzcyAqLworI2Vsc2UKKwl1MTYJbGJhX2FsaWduOjE0LAkvKiBsb3dlc3QgYWxpZ25lZCBsb2dpY2FsIGJsb2NrCisJCQkJCSAqIGFkZHJlc3MgKi8KKwkJCXJlc2VydmVkMzoyOworCXU4CQlsYl9wYmU6NCwJLyogbG9naWNhbCBibG9ja3MgcGVyIHBoeXNpY2FsIGJsb2NrCisJCQkJCSAqIGV4cG9uZW50ICovCisJCQlyZXNlcnZlZDI6NDsKKwl1OAkJcHJvdF9lbjoxLAorCQkJcF90eXBlOjMsCisJCQlyZXNlcnZlZDE6NDsKKyNlbmRpZgorCXU2NAlyZXNlcnZlZDQ7CisJdTY0CXJlc2VydmVkNTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUkVQT1JUIExVTlMgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworc3RydWN0IHNjc2lfcmVwb3J0X2x1bnNfc3sKKwl1OCAgICAgICAgIG9wY29kZTsJCS8qIEEwaCAtIFJFUE9SVCBMVU5TIG9wQ29kZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxWzVdOworCXU4ICAgICAgICAgYWxsb2NfbGVuZ3RoWzRdOy8qIGFsbG9jYXRpb24gbGVuZ3RoIE1TQiBmaXJzdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKyNkZWZpbmUgU0NTSV9SRVBPUlRfTFVOX0FMTE9DX0xFTkdUSChybCkgICAgICAgICAgICAgICAgCQlcCisgICAgKChybC0+YWxsb2NfbGVuZ3RoWzBdIDw8IDI0KSB8IChybC0+YWxsb2NfbGVuZ3RoWzFdIDw8IDE2KSB8IAlcCisgICAgIChybC0+YWxsb2NfbGVuZ3RoWzJdIDw8IDgpIHwgKHJsLT5hbGxvY19sZW5ndGhbM10pKQorCisjZGVmaW5lIFNDU0lfUkVQT1JUX0xVTlNfU0VUX0FMTE9DTEVOKHJsLCBhbGxvY19sZW4pIHsgICAgICBcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzBdID0gKGFsbG9jX2xlbikgPj4gMjQ7ICAgICAgCQkJXAorICAgIChybCktPmFsbG9jX2xlbmd0aFsxXSA9ICgoYWxsb2NfbGVuKSA+PiAxNikgJiAweEZGOyAJCVwKKyAgICAocmwpLT5hbGxvY19sZW5ndGhbMl0gPSAoKGFsbG9jX2xlbikgPj4gOCkgJiAweEZGOyAgCQlcCisgICAgKHJsKS0+YWxsb2NfbGVuZ3RoWzNdID0gKGFsbG9jX2xlbikgJiAweEZGOyAgICAgCQkJXAorfQorCitzdHJ1Y3Qgc2NzaV9yZXBvcnRfbHVuc19kYXRhX3N7CisJdTMyICAgICAgICBsdW5fbGlzdF9sZW5ndGg7CS8qIGxlbmd0aCBvZiBMVU4gbGlzdCBsZW5ndGggKi8KKwl1MzIgICAgICAgIHJlc2VydmVkOworCWx1bl90ICAgICAgICAgICBsdW5bMV07CQkJLyogZmlyc3QgTFVOIGluIGx1biBsaXN0ICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBTQ1NJIG1vZGUgIHBhcmFtZXRlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2VudW0geworCVNDU0lfREFfTUVESVVNX0RFRiA9IDAsCS8qIGRpcmVjdCBhY2Nlc3MgZGVmYXVsdCBtZWRpdW0gdHlwZSAqLworCVNDU0lfREFfTUVESVVNX1NTID0gMSwJLyogZGlyZWN0IGFjY2VzcyBzaW5nbGUgc2lkZWQgKi8KKwlTQ1NJX0RBX01FRElVTV9EUyA9IDIsCS8qIGRpcmVjdCBhY2Nlc3MgZG91YmxlIHNpZGVkICovCit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCg2KSBjZGIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9zZWxlY3Q2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgcGY6MTsJCS8qIHBhZ2UgZm9ybWF0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKwl1OCAgICAgICAgIHNwOjE7CQkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1syXTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogU0NTSSBNb2RlIFNlbGVjdCgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2VsZWN0MTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBzcDoxOwkvKiBzYXZlIHBhZ2VzIGlmIHNldCB0byAxICovCisjZWxzZQorCXU4ICAgICAgICAgc3A6MTsJLyogc2F2ZSBwYWdlcyBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBwZjoxOwkvKiBwYWdlIGZvcm1hdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIHJlc2VydmVkM1s1XTsKKwl1OCAgICAgICAgIGFsbG9jX2xlbl9tc2I7CisJdTggICAgICAgICBhbGxvY19sZW5fbHNiOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBTQ1NJIE1vZGUgU2Vuc2UoNikgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGlzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCisJdTggICAgICAgICBwYzoyOwkvKiBwYWdlIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMjozOworCXU4ICAgICAgICAgZGJkOjE7CS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvIDEgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMTo0OworCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHBjOjI7CS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIFNDU0kgTW9kZSBTZW5zZSgxMCkgY2RiCisgKi8KK3N0cnVjdCBzY3NpX21vZGVfc2Vuc2UxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKwl1OCAgICAgICAgIExMQkFBOjE7CS8qIGxvbmcgTEJBIGFjY2VwdGVkIGlmIHNldCB0byAxICovCisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0CisJCQkJCSAqIHRvIDEKKwkJCQkJICovCisJdTggICAgICAgICByZXNlcnZlZDI6MzsKKworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjM7CisJdTggICAgICAgICBkYmQ6MTsJCS8qIGRpc2FibGUgYmxvY2sgZGVzY3JpcHRvcnMgaWYgc2V0IHRvCisJCQkJCSAqIDEKKwkJCQkJICovCisJdTggICAgICAgICBMTEJBQToxOwkvKiBsb25nIExCQSBhY2NlcHRlZCBpZiBzZXQgdG8gMSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcGM6MjsJCS8qIHBhZ2UgY29udHJvbCAqLworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDNbNF07CisJdTggICAgICAgICBhbGxvY19sZW5fbXNiOworCXU4ICAgICAgICAgYWxsb2NfbGVuX2xzYjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisjZGVmaW5lIFNDU0lfQ0RCMTBfR0VUX0FMKGNkYikgIAkJCQkJXAorICAgICgoY2RiKS0+YWxsb2NfbGVuX21zYiA8PCA4IHwgKGNkYiktPmFsbG9jX2xlbl9sc2IpCisKKyNkZWZpbmUgU0NTSV9DREIxMF9TRVRfQUwoY2RiLCBhbCkgeyAgICAgIFwKKyAgICAoY2RiKS0+YWxsb2NfbGVuX21zYiA9IGFsID4+IDg7ICAgICAgIAkJCQlcCisgICAgKGNkYiktPmFsbG9jX2xlbl9sc2IgPSBhbCAmIDB4RkY7ICAgICAJCQkJXAorfQorCisjZGVmaW5lIFNDU0lfQ0RCNl9HRVRfQUwoY2RiKSAoKGNkYiktPmFsbG9jX2xlbikKKworI2RlZmluZSBTQ1NJX0NEQjZfU0VUX0FMKGNkYiwgYWwpIHsgICAgICBcCisgICAgKGNkYiktPmFsbG9jX2xlbiA9IGFsOyAgICAgICAgIAkJCQkJXAorfQorCisvKgorICogcGFnZSBjb250cm9sIGZpZWxkIHZhbHVlcworICovCisjZGVmaW5lIFNDU0lfUENfQ1VSUkVOVF9WQUxVRVMgICAgICAgMHgwCisjZGVmaW5lIFNDU0lfUENfQ0hBTkdFQUJMRV9WQUxVRVMgICAgMHgxCisjZGVmaW5lIFNDU0lfUENfREVGQVVMVF9WQUxVRVMgICAgICAgMHgyCisjZGVmaW5lIFNDU0lfUENfU0FWRURfVkFMVUVTICAgICAgICAgMHgzCisKKy8qCisgKiBTQ1NJIG1vZGUgcGFnZSBjb2RlcworICovCisjZGVmaW5lIFNDU0lfTVBfVkVORE9SX1NQRUMgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9NUF9ESVNDX1JFQ04gICAgICAgMHgwMgkvKiBkaXNjb25uZWN0LXJlY29ubmVjdCBwYWdlICovCisjZGVmaW5lIFNDU0lfTVBfRk9STUFUX0RFVklDRSAgIDB4MDMKKyNkZWZpbmUgU0NTSV9NUF9SREcgICAgICAgICAgICAgMHgwNAkvKiByaWdpZCBkaXNrIGdlb21ldHJ5IHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9GRFAgICAgICAgICAgICAgMHgwNQkvKiBmbGV4aWJsZSBkaXNrIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DQUNISU5HICAgICAgICAgMHgwOAkvKiBjYWNoaW5nIHBhZ2UgKi8KKyNkZWZpbmUgU0NTSV9NUF9DT05UUk9MICAgICAgICAgMHgwQQkvKiBjb250cm9sIG1vZGUgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX01FRF9UWVBFU19TVVAgICAweDBCCS8qIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgcGFnZSAqLworI2RlZmluZSBTQ1NJX01QX0lORk9fRVhDUF9DTlRMICAweDFDCS8qIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgU0NTSV9NUF9BTEwgICAgICAgICAgICAgMHgzRgkvKiByZXR1cm4gYWxsIHBhZ2VzIC0gbW9kZSBzZW5zZSBvbmx5ICovCisKKy8qCisgKiBtb2RlIHBhcmFtZXRlciBoZWFkZXIKKyAqLworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3N7CisJdTggICAgICAgICBtb2RlX2RhdGFsZW47CisJdTggICAgICAgICBtZWRpdW1fdHlwZTsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisJdTggICAgICAgICBibG9ja19kZXNjbGVuOworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXIxMF9zeworCXUzMiAgICAgICAgbW9kZV9kYXRhbGVuOjE2OworCXUzMiAgICAgICAgbWVkaXVtX3R5cGU6ODsKKworCS8qCisJICogZGV2aWNlIHNwZWNpZmljIHBhcmFtZXRlcnMgZXhwYW5kZWQgZm9yIGRpcmVjdCBhY2Nlc3MgZGV2aWNlcworCSAqLworI2lmZGVmIF9fQklHRU5ESUFOCisJdTMyICAgICAgICB3cDoxOwkJLyogd3JpdGUgcHJvdGVjdGVkICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKyNlbHNlCisJdTMyICAgICAgICByZXNlcnZlZDI6NDsKKwl1MzIgICAgICAgIGRwb2Z1YToxOwkvKiBkaXNhYmxlIHBhZ2Ugb3V0ICsgZm9yY2UgdW5pdCBhY2Nlc3MKKwkJCQkJICovCisJdTMyICAgICAgICByZXNlcnZlZDE6MjsKKwl1MzIgICAgICAgIHdwOjE7CQkvKiB3cml0ZSBwcm90ZWN0ZWQgKi8KKyNlbmRpZgorCisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworCXUzMiAgICAgICAgbG9uZ2xiYToxOworI2Vsc2UKKwl1MzIgICAgICAgIGxvbmdsYmE6MTsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo3OworI2VuZGlmCisJdTMyICAgICAgICByZXNlcnZlZDQ6ODsKKwl1MzIgICAgICAgIGJsb2NrX2Rlc2NsZW46MTY7Cit9OworCisvKgorICogbW9kZSBwYXJhbWV0ZXIgYmxvY2sgZGVzY3JpcHRvcgorICovCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2Nfc3sKKwl1MzIgICAgICAgIG5ibGtzOworCXUzMiAgICAgICAgZGVuc2l0eV9jb2RlOjg7CisJdTMyICAgICAgICBibG9ja19sZW5ndGg6MjQ7Cit9OworCisvKgorICogRGlzY29ubmVjdC1yZWNvbm5lY3QgbW9kZSBwYWdlIGZvcm1hdAorICovCitzdHJ1Y3Qgc2NzaV9tcF9kaXNjX3JlY25fc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCXU4ICAgICAgICAgYnVmX2Z1bGxfcmF0aW87CisJdTggICAgICAgICBidWZfZW1wdHlfcmF0aW87CisKKwl1OCAgICAgICAgIGJpbF9tc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1NU0IgKi8KKwl1OCAgICAgICAgIGJpbF9sc2I7CS8qIGJ1cyBpbmFjdGl2aXR5IGxpbWl0IC1MU0IgKi8KKworCXU4ICAgICAgICAgZHRsX21zYjsJLyogZGlzY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBkdGxfbHNiOwkvKiBkaXNjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgY3RsX21zYjsJLyogY29ubmVjdCB0aW1lIGxpbWl0IC0gTVNCICovCisJdTggICAgICAgICBjdGxfbHNiOwkvKiBjb25uZWN0IHRpbWUgbGltaXQgLSBMU0IgKi8KKworCXU4ICAgICAgICAgbWF4X2J1cnN0X2xlbl9tc2I7CisJdTggICAgICAgICBtYXhfYnVyc3RfbGVuX2xzYjsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZW1kcDoxOwkvKiBlbmFibGUgbW9kaWZ5IGRhdGEgcG9pbnRlcnMgKi8KKwl1OCAgICAgICAgIGZhOjM7CS8qIGZhaXIgYXJiaXRyYXRpb24gKi8KKwl1OCAgICAgICAgIGRpbW06MTsJLyogZGlzY29ubmVjdCBpbW1lZGlhdGUgKi8KKwl1OCAgICAgICAgIGR0ZGM6MzsJLyogZGF0YSB0cmFuc2ZlciBkaXNjb25uZWN0IGNvbnRyb2wgKi8KKyNlbHNlCisJdTggICAgICAgICBkdGRjOjM7CS8qIGRhdGEgdHJhbnNmZXIgZGlzY29ubmVjdCBjb250cm9sICovCisJdTggICAgICAgICBkaW1tOjE7CS8qIGRpc2Nvbm5lY3QgaW1tZWRpYXRlICovCisJdTggICAgICAgICBmYTozOwkvKiBmYWlyIGFyYml0cmF0aW9uICovCisJdTggICAgICAgICBlbWRwOjE7CS8qIGVuYWJsZSBtb2RpZnkgZGF0YSBwb2ludGVycyAqLworI2VuZGlmCisKKwl1OCAgICAgICAgIHJlc2VydmVkMzsKKworCXU4ICAgICAgICAgZmlyc3RfYnVyc3RfbGVuX21zYjsKKwl1OCAgICAgICAgIGZpcnN0X2J1cnN0X2xlbl9sc2I7Cit9OworCisvKgorICogU0NTSSBmb3JtYXQgZGV2aWNlIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mb3JtYXRfZGV2aWNlX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3NlY19wZXJfem9uZToxNjsKKwl1MzIgICAgICAgIGFfdHJhY2tzX3Blcl96b25lOjE2OworCisJdTMyICAgICAgICBhX3RyYWNrc19wZXJfbHVuOjE2OwkvKiBhbHRlcm5hdGUgdHJhY2tzL2x1bi1NU0IgKi8KKwl1MzIgICAgICAgIHNlY19wZXJfdHJhY2s6MTY7CS8qIHNlY3RvcnMvdHJhY2stTVNCICovCisKKwl1MzIgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3I6MTY7CisJdTMyICAgICAgICBpbnRlcmxlYXZlOjE2OworCisJdTMyICAgICAgICB0c2Y6MTY7CQkJLyogdHJhY2sgc2tldyBmYWN0b3ItTVNCICovCisJdTMyICAgICAgICBjc2Y6MTY7CQkJLyogY3lsaW5kZXIgc2tldyBmYWN0b3ItTVNCICovCisKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisJdTMyICAgICAgICBoc2VjOjE7CS8qIGhhcmQgc2VjdG9yIGZvcm1hdHRpbmcgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIHN1cmY6MTsJLyogc3VyZmFjZSAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisjZWxzZQorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjQ7CisJdTMyICAgICAgICBzdXJmOjE7CS8qIHN1cmZhY2UgKi8KKwl1MzIgICAgICAgIHJtYjoxOwkvKiByZW1vdmFibGUgbWVkaWEgKi8KKwl1MzIgICAgICAgIGhzZWM6MTsJLyogaGFyZCBzZWN0b3IgZm9ybWF0dGluZyAqLworCXUzMiAgICAgICAgc3NlYzoxOwkvKiBzb2Z0IHNlY3RvciBmb3JtYXR0aW5nICovCisjZW5kaWYKKwl1MzIgICAgICAgIHJlc2VydmVkMzoyNDsKK307CisKKy8qCisgKiBTQ1NJIHJpZ2lkIGRpc2sgZGV2aWNlIGdlb21ldHJ5IHBhZ2UKKyAqLworc3RydWN0IHNjc2lfbXBfcmlnaWRfZGV2aWNlX2dlb21ldHJ5X3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1MzIgICAgICAgIHBzOjE7CisJdTMyICAgICAgICByZXNlcnZlZDE6MTsKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1MzIgICAgICAgIHBhZ2VfY29kZTo2OworCXUzMiAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTMyICAgICAgICBwczoxOworI2VuZGlmCisJdTMyICAgICAgICBwYWdlX2xlbjo4OworCXUzMiAgICAgICAgbnVtX2N5bGluZGVyczA6ODsKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMxOjg7CisKKwl1MzIgICAgICAgIG51bV9jeWxpbmRlcnMyOjg7CisJdTMyICAgICAgICBudW1faGVhZHM6ODsKKwl1MzIgICAgICAgIHNjd3AwOjg7CisJdTMyICAgICAgICBzY3dwMTo4OworCisJdTMyICAgICAgICBzY3dwMjo4OworCXUzMiAgICAgICAgc2Nyd2MwOjg7CisJdTMyICAgICAgICBzY3J3YzE6ODsKKwl1MzIgICAgICAgIHNjcndjMjo4OworCisJdTMyICAgICAgICBkc3I6MTY7CisJdTMyICAgICAgICBsc2N5bDA6ODsKKwl1MzIgICAgICAgIGxzY3lsMTo4OworCisJdTMyICAgICAgICBsc2N5bDI6ODsKKyNpZmRlZiBfX0JJR0VORElBTgorCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisJdTMyICAgICAgICBycGw6MjsJLyogcm90YXRpb25hbCBwb3NpdGlvbiBsb2NraW5nICovCisjZWxzZQorCXUzMiAgICAgICAgcnBsOjI7CS8qIHJvdGF0aW9uYWwgcG9zaXRpb24gbG9ja2luZyAqLworCXUzMiAgICAgICAgcmVzZXJ2ZWQyOjY7CisjZW5kaWYKKwl1MzIgICAgICAgIHJvdF9vZmY6ODsKKwl1MzIgICAgICAgIHJlc2VydmVkMzo4OworCisJdTMyICAgICAgICBtZWRfcm90X3JhdGU6MTY7CisJdTMyICAgICAgICByZXNlcnZlZDQ6MTY7Cit9OworCisvKgorICogU0NTSSBjYWNoaW5nIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXMxOjE7CisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCisJdTggICAgICAgICBwYWdlX2NvZGU6NjsKKwl1OCAgICAgICAgIHJlczE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBpYzoxOwkvKiBpbml0aWF0b3IgY29udHJvbCAqLworCXU4ICAgICAgICAgYWJwZjoxOwkvKiBhYm9ydCBwcmUtZmV0Y2ggKi8KKwl1OCAgICAgICAgIGNhcDoxOwkvKiBjYWNoaW5nIGFuYWx5c2lzIHBlcm1pdHRlZCAqLworCXU4ICAgICAgICAgZGlzYzoxOwkvKiBkaXNjb250aW51aXR5ICovCisJdTggICAgICAgICBzaXplOjE7CS8qIHNpemUgZW5hYmxlICovCisJdTggICAgICAgICB3Y2U6MTsJLyogd3JpdGUgY2FjaGUgZW5hYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHJjZDoxOwkvKiByZWFkIGNhY2hlIGRpc2FibGUgKi8KKworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKwl1OCAgICAgICAgIHdycDo0OwkvKiB3cml0ZSByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbHNlCisJdTggICAgICAgICByY2Q6MTsJLyogcmVhZCBjYWNoZSBkaXNhYmxlICovCisJdTggICAgICAgICBtZjoxOwkvKiBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgKi8KKwl1OCAgICAgICAgIHdjZToxOwkvKiB3cml0ZSBjYWNoZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIHNpemU6MTsJLyogc2l6ZSBlbmFibGUgKi8KKwl1OCAgICAgICAgIGRpc2M6MTsJLyogZGlzY29udGludWl0eSAqLworCXU4ICAgICAgICAgY2FwOjE7CS8qIGNhY2hpbmcgYW5hbHlzaXMgcGVybWl0dGVkICovCisJdTggICAgICAgICBhYnBmOjE7CS8qIGFib3J0IHByZS1mZXRjaCAqLworCXU4ICAgICAgICAgaWM6MTsJLyogaW5pdGlhdG9yIGNvbnRyb2wgKi8KKworCXU4ICAgICAgICAgd3JwOjQ7CS8qIHdyaXRlIHJldGVudGlvbiBwcmlvcml0eSAqLworCXU4ICAgICAgICAgZHJycDo0OwkvKiBkZW1hbmQgcmVhZCByZXRlbnRpb24gcHJpb3JpdHkgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgZHB0bFsyXTsvKiBkaXNhYmxlIHByZS1mZXRjaCB0cmFuc2ZlciBsZW5ndGggKi8KKwl1OCAgICAgICAgIG1pbl9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaFsyXTsKKwl1OCAgICAgICAgIG1heF9wcmVmZXRjaF9saW1pdFsyXTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKwl1OCAgICAgICAgIGxiY3NzOjE7LyogbG9naWNhbCBibG9jayBjYWNoZSBzZWdtZW50IHNpemUgKi8KKwl1OCAgICAgICAgIGRyYToxOwkvKiBkaXNhYmxlIHJlYWQgYWhlYWQgKi8KKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgcmVzMjozOworI2Vsc2UKKwl1OCAgICAgICAgIHJlczI6MzsKKwl1OCAgICAgICAgIHZzOjI7CS8qIHZlbmRvciBzcGVjaWZpYyAqLworCXU4ICAgICAgICAgZHJhOjE7CS8qIGRpc2FibGUgcmVhZCBhaGVhZCAqLworCXU4ICAgICAgICAgbGJjc3M6MTsvKiBsb2dpY2FsIGJsb2NrIGNhY2hlIHNlZ21lbnQgc2l6ZSAqLworCXU4ICAgICAgICAgZnN3OjE7CS8qIGZvcmNlIHNlcXVlbnRpYWwgd3JpdGUgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbnVtX2NhY2hlX3NlZ3M7CisKKwl1OCAgICAgICAgIGNhY2hlX3NlZ19zaXplWzJdOworCXU4ICAgICAgICAgcmVzMzsKKwl1OCAgICAgICAgIG5vbl9jYWNoZV9zZWdfc2l6ZVszXTsKK307CisKKy8qCisgKiBTQ1NJIGNvbnRyb2wgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX2NvbnRyb2xfcGFnZV9zeworI2lmZGVmIF9fQklHRU5ESUFOCit1OCAgICAgICAgIHBzOjE7Cit1OCAgICAgICAgIHJlc2VydmVkMToxOwordTggICAgICAgICBwYWdlX2NvZGU6NjsKKyNlbHNlCit1OCAgICAgICAgIHBhZ2VfY29kZTo2OwordTggICAgICAgICByZXNlcnZlZDE6MTsKK3U4ICAgICAgICAgcHM6MTsKKyNlbmRpZgorCXU4ICAgICAgICAgcGFnZV9sZW47CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHRzdDozOwkJLyogdGFzayBzZXQgdHlwZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICBnbHRzZDoxOwkvKiBnbG9iYWwgbG9nZ2luZyB0YXJnZXQgc2F2ZSBkaXNhYmxlICovCisJdTggICAgICAgICBybGVjOjE7CQkvKiByZXBvcnQgbG9nIGV4Y2VwdGlvbiBjb25kaXRpb24gKi8KKworCXU4ICAgICAgICAgcWFsZ29fbW9kOjQ7CS8qIHF1ZXVlIGFsb2dvcml0aG0gbW9kaWZpZXIgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgcWVycjoyOwkJLyogcXVldWUgZXJyb3IgbWFuYWdlbWVudCAqLworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisKKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCXU4ICAgICAgICAgcmFjOjE7CQkvKiByZXBvcnQgYSBjaGVjayAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ2OjI7CisJdTggICAgICAgICBzd3A6MTsJCS8qIHNvZnR3YXJlIHdyaXRlIHByb3RlY3QgKi8KKwl1OCAgICAgICAgIHJhZXJwOjE7CS8qIHJlYWR5IEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICBlYWVycDoxOwkvKiBlcnJvciBBRVIgcGVybWlzc2lvbiAqLworCisJdTggICAgICAgICByZXNlcnZlZDc6NTsKKwl1OCAgICAgICAgIGF1dG9sb2FkX21vZDozOworI2Vsc2UKKwl1OCAgICAgICAgIHJsZWM6MTsJCS8qIHJlcG9ydCBsb2cgZXhjZXB0aW9uIGNvbmRpdGlvbiAqLworCXU4ICAgICAgICAgZ2x0c2Q6MTsJLyogZ2xvYmFsIGxvZ2dpbmcgdGFyZ2V0IHNhdmUgZGlzYWJsZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjM7CisJdTggICAgICAgICB0c3Q6MzsJCS8qIHRhc2sgc2V0IHR5cGUgKi8KKworCXU4ICAgICAgICAgZHF1ZToxOwkJLyogZGlzYWJsZSBxdWV1aW5nICovCisJdTggICAgICAgICBxZXJyOjI7CQkvKiBxdWV1ZSBlcnJvciBtYW5hZ2VtZW50ICovCisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHFhbGdvX21vZDo0OwkvKiBxdWV1ZSBhbG9nb3JpdGhtIG1vZGlmaWVyICovCisKKwl1OCAgICAgICAgIGVhZXJwOjE7CS8qIGVycm9yIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICB1YWFlcnA6MTsJLyogdW5pdCBhdHRlbnN0aW9uIEFFUiBwZXJtaXNzaW9uICovCisJdTggICAgICAgICByYWVycDoxOwkvKiByZWFkeSBBRVIgcGVybWlzc2lvbiAqLworCXU4ICAgICAgICAgc3dwOjE7CQkvKiBzb2Z0d2FyZSB3cml0ZSBwcm90ZWN0ICovCisJdTggICAgICAgICByZXNlcnZlZDY6MjsKKwl1OCAgICAgICAgIHJhYzoxOwkJLyogcmVwb3J0IGEgY2hlY2sgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNToxOworCisJdTggICAgICAgICBhdXRvbG9hZF9tb2Q6MzsKKwl1OCAgICAgICAgIHJlc2VydmVkNzo1OworI2VuZGlmCisJdTggICAgICAgICByYWhwX21zYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTVNCICovCisJdTggICAgICAgICByYWhwX2xzYjsJLyogcmVhZHkgQUVSIGhvbGRvZmYgcGVyaW9kIC0gTFNCICovCisKKwl1OCAgICAgICAgIGJ1c3lfdGltZW91dF9wZXJpb2RfbXNiOworCXU4ICAgICAgICAgYnVzeV90aW1lb3V0X3BlcmlvZF9sc2I7CisKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX21zYjsKKwl1OCAgICAgICAgIGV4dF9zZWxmdGVzdF9jb21wbF90aW1lX2xzYjsKK307CisKKy8qCisgKiBTQ1NJIG1lZGl1bSB0eXBlcyBzdXBwb3J0ZWQgbW9kZSBwYWdlCisgKi8KK3N0cnVjdCBzY3NpX21wX21lZGl1bV90eXBlc19zdXBfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworCisJdTggICAgICAgICByZXNlcnZlZDNbMl07CisJdTggICAgICAgICBtZWRfdHlwZTFfc3VwOwkvKiBtZWRpdW0gdHlwZSBvbmUgc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTJfc3VwOwkvKiBtZWRpdW0gdHlwZSB0d28gc3VwcG9ydGVkICovCisJdTggICAgICAgICBtZWRfdHlwZTNfc3VwOwkvKiBtZWRpdW0gdHlwZSB0aHJlZSBzdXBwb3J0ZWQgKi8KKwl1OCAgICAgICAgIG1lZF90eXBlNF9zdXA7CS8qIG1lZGl1bSB0eXBlIGZvdXIgc3VwcG9ydGVkICovCit9OworCisvKgorICogU0NTSSBpbmZvcm1hdGlvbmFsIGV4Y2VwdGlvbiBjb250cm9sIG1vZGUgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9pbmZvX2V4Y3B0X2NudGxfc3sKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcHM6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMToxOworCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisjZWxzZQorCXU4ICAgICAgICAgcGFnZV9jb2RlOjY7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBzOjE7CisjZW5kaWYKKwl1OCAgICAgICAgIHBhZ2VfbGVuOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBlYmY6MTsJCS8qIGVuYWJsZSBiYWNrZ3JvdW5kIGZ1Y250aW9uICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZGV4Y3B0OjE7CS8qIGRpc2FibGUgZXhjZXB0aW9uIGNvbnRyb2wgKi8KKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNDoxOworCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworCXU4ICAgICAgICAgbXJpZTo0OwkJLyogbWV0aG9kIG9mIHJlcG9ydGluZyBpbmZvCisJCQkJCSAqIGV4Y2VwdGlvbnMKKwkJCQkJICovCisjZWxzZQorCXU4ICAgICAgICAgbG9nX2Vycm9yOjE7CisJdTggICAgICAgICByZXNlcnZlZDQ6MTsKKwl1OCAgICAgICAgIHRlc3Q6MTsJCS8qIGVuYWJsZSB0ZXN0IGRldmljZSBmYWlsdXJlCisJCQkJCSAqIG5vdGlmaWNhdGlvbgorCQkJCQkgKi8KKwl1OCAgICAgICAgIGRleGNwdDoxOwkvKiBkaXNhYmxlIGV4Y2VwdGlvbiBjb250cm9sICovCisJdTggICAgICAgICBld2FzYzoxOwkvKiBlbmFibGUgd2FybmluZyAqLworCXU4ICAgICAgICAgZWJmOjE7CQkvKiBlbmFibGUgYmFja2dyb3VuZCBmdWNudGlvbiAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjE7CisJdTggICAgICAgICBwZXJmOjE7CQkvKiBwZXJmb3JtYW5jZSAqLworCisJdTggICAgICAgICBtcmllOjQ7CQkvKiBtZXRob2Qgb2YgcmVwb3J0aW5nIGluZm8KKwkJCQkJICogZXhjZXB0aW9ucworCQkJCQkgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkNTo0OworI2VuZGlmCisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9tc2I7CisJdTggICAgICAgICBpbnRlcnZhbF90aW1lcl9sc2I7CisKKwl1OCAgICAgICAgIHJlcG9ydF9jb3VudF9tc2I7CisJdTggICAgICAgICByZXBvcnRfY291bnRfbHNiOworfTsKKworLyoKKyAqIE1ldGhvZHMgb2YgcmVwb3J0aW5nIGluZm9ybWF0aW9uYWwgZXhjZXB0aW9ucworICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX05PX1JFUE9SVCAgICAgICAweDAJLyogbm8gcmVwb3J0aW5nIG9mIGV4Y2VwdGlvbnMgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfQUVSICAgICAgICAgICAgIDB4MQkvKiBhc3luYyBldmVudCByZXBvcnRpbmcgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5JVF9BVFROICAgICAgIDB4MgkvKiBnZW5lcmF0ZSB1bml0IGF0dGVuc3Rpb24gKi8KKyNkZWZpbmUgU0NTSV9NT19JRUNfQ09ORF9SRUNfRVJSICAgIDB4MwkvKiBjb25kaXRpb25hbGx5IGdlbmVyYXRlIHJlY292ZXJlZAorCQkJCQkgKiBlcnJvcgorCQkJCQkgKi8KKyNkZWZpbmUgU0NTSV9NUF9JRUNfVU5DT05EX1JFQ19FUlIgIDB4NAkvKiB1bmNvbmRpdGlvbmFsbHkgZ2VuZXJhdGUgcmVjb3ZlcmVkCisJCQkJCSAqIGVycm9yCisJCQkJCSAqLworI2RlZmluZSBTQ1NJX01QX0lFQ19OT19TRU5TRSAgICAgICAgMHg1CS8qIGdlbmVyYXRlIG5vIHNlbnNlICovCisjZGVmaW5lIFNDU0lfTVBfSUVDX09OX1JFUVVFU1QgICAgICAweDYJLyogb25seSByZXBvcnQgZXhjZXB0aW9ucyBvbiByZXF1ZXN0ICovCisKKy8qCisgKiBTQ1NJIGZsZXhpYmxlIGRpc2sgcGFnZQorICovCitzdHJ1Y3Qgc2NzaV9tcF9mbGV4aWJsZV9kaXNrX3N7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHBzOjE7CisJdTggICAgICAgICByZXNlcnZlZDE6MTsKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworI2Vsc2UKKwl1OCAgICAgICAgIHBhZ2VfY29kZTo2OworCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjE7CisJdTggICAgICAgICBwczoxOworI2VuZGlmCisJdTggICAgICAgICBwYWdlX2xlbjsKKworCXU4ICAgICAgICAgdHJhbnNmZXJfcmF0ZV9tc2I7CisJdTggICAgICAgICB0cmFuc2Zlcl9yYXRlX2xzYjsKKworCXU4ICAgICAgICAgbnVtX2hlYWRzOworCXU4ICAgICAgICAgbnVtX3NlY3RvcnM7CisKKwl1OCAgICAgICAgIGJ5dGVzX3Blcl9zZWN0b3JfbXNiOworCXU4ICAgICAgICAgYnl0ZXNfcGVyX3NlY3Rvcl9sc2I7CisKKwl1OCAgICAgICAgIG51bV9jeWxpbmRlcnNfbXNiOworCXU4ICAgICAgICAgbnVtX2N5bGluZGVyc19sc2I7CisKKwl1OCAgICAgICAgIHNjX3dwY19tc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXdyaXRlCisJCQkJCSAqIHByZWNvbXBlbnNhdGlvbiBtc2IKKwkJCQkJICovCisJdTggICAgICAgICBzY193cGNfbHNiOwkvKiBzdGFydGluZyBjeWxpbmRlci13cml0ZQorCQkJCQkgKiBwcmVjb21wZW5zYXRpb24gbHNiCisJCQkJCSAqLworCXU4ICAgICAgICAgc2NfcndjX21zYjsJLyogc3RhcnRpbmcgY3lsaW5kZXItcmVkdWNlZCB3cml0ZQorCQkJCQkgKiBjdXJyZW50IG1zYgorCQkJCQkgKi8KKwl1OCAgICAgICAgIHNjX3J3Y19sc2I7CS8qIHN0YXJ0aW5nIGN5bGluZGVyLXJlZHVjZWQgd3JpdGUKKwkJCQkJICogY3VycmVudCBsc2IKKwkJCQkJICovCisKKwl1OCAgICAgICAgIGRldl9zdGVwX3JhdGVfbXNiOworCXU4ICAgICAgICAgZGV2X3N0ZXBfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIGRldl9zdGVwX3B1bHNlX3dpZHRoOworCisJdTggICAgICAgICBoZWFkX3NkX21zYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbXNiICovCisJdTggICAgICAgICBoZWFkX3NkX2xzYjsJLyogaGVhZCBzZXR0bGUgZGVsYXkgbHNiICovCisKKwl1OCAgICAgICAgIG1vdG9yX29uX2RlbGF5OworCXU4ICAgICAgICAgbW90b3Jfb2ZmX2RlbGF5OworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICB0cmR5OjE7CQkvKiB0cnVlIHJlYWR5IGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQzOjU7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNDo0OworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworI2Vsc2UKKwl1OCAgICAgICAgIHJlc2VydmVkMzo1OworCXU4ICAgICAgICAgbW86MTsJCS8qIG1vdG9yIG9uIGJpdCAqLworCXU4ICAgICAgICAgc3NuOjE7CQkvKiBzdGFydCBzZWN0b3IgbnVtYmVyIGJpdCAqLworCXU4ICAgICAgICAgdHJkeToxOwkJLyogdHJ1ZSByZWFkeSBiaXQgKi8KKworCXU4ICAgICAgICAgc3BjOjQ7CQkvKiBzdGVwIHB1bHNlIHBlciBjeWxpbmRlciAqLworCXU4ICAgICAgICAgcmVzZXJ2ZWQ0OjQ7CisjZW5kaWYKKwl1OCAgICAgICAgIHdyaXRlX2NvbXA7CisJdTggICAgICAgICBoZWFkX2xvYWRfZGVsYXk7CisJdTggICAgICAgICBoZWFkX3VubG9hZF9kZWxheTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcGluMzQ6NDsJLyogcGluMzQgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKworCXU4ICAgICAgICAgcGluNDo0OwkJLyogcGluNCB1c2FnZSAqLworCXU4ICAgICAgICAgcGluMTo0OwkJLyogcGluMSB1c2FnZSAqLworI2Vsc2UKKwl1OCAgICAgICAgIHBpbjI6NDsJCS8qIHBpbjIgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjM0OjQ7CS8qIHBpbjM0IHVzYWdlICovCisKKwl1OCAgICAgICAgIHBpbjE6NDsJCS8qIHBpbjEgdXNhZ2UgKi8KKwl1OCAgICAgICAgIHBpbjQ6NDsJCS8qIHBpbjQgdXNhZ2UgKi8KKyNlbmRpZgorCXU4ICAgICAgICAgbWVkX3JvdF9yYXRlX21zYjsKKwl1OCAgICAgICAgIG1lZF9yb3RfcmF0ZV9sc2I7CisKKwl1OCAgICAgICAgIHJlc2VydmVkNVsyXTsKK307CisKK3N0cnVjdCBzY3NpX21vZGVfcGFnZV9mb3JtYXRfZGF0YTZfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjZfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfZm9ybWF0X2RhdGExMF9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyMTBfcyBtcGg7CS8qIG1vZGUgcGFnZSBoZWFkZXIgKi8KKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2Rlc2NfcyBkZXNjOwkvKiBibG9jayBkZXNjcmlwdG9yICovCisJc3RydWN0IHNjc2lfbXBfZm9ybWF0X2RldmljZV9zIGZvcm1hdDsJLyogZm9ybWF0IGRldmljZSBkYXRhICovCit9OworCitzdHJ1Y3Qgc2NzaV9tb2RlX3BhZ2VfcmRnX2RhdGE2X3N7CisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9oZWFkZXI2X3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX3JkZ19kYXRhMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX3JpZ2lkX2RldmljZV9nZW9tZXRyeV9zIHJkZzsKKwkJCQkJLyogcmlnaWQgZ2VvbWV0cnkgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlNl9zeworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1faGVhZGVyNl9zIG1waDsJLyogbW9kZSBwYWdlIGhlYWRlciAqLworCXN0cnVjdCBzY3NpX21vZGVfcGFyYW1fZGVzY19zIGRlc2M7CS8qIGJsb2NrIGRlc2NyaXB0b3IgKi8KKwlzdHJ1Y3Qgc2NzaV9tcF9jYWNoaW5nX3MgY2FjaGU7CS8qIGNhY2hlIHBhZ2UgZGF0YSAqLworfTsKKworc3RydWN0IHNjc2lfbW9kZV9wYWdlX2NhY2hlMTBfc3sKKwlzdHJ1Y3Qgc2NzaV9tb2RlX3BhcmFtX2hlYWRlcjEwX3MgbXBoOwkvKiBtb2RlIHBhZ2UgaGVhZGVyICovCisJc3RydWN0IHNjc2lfbW9kZV9wYXJhbV9kZXNjX3MgZGVzYzsJLyogYmxvY2sgZGVzY3JpcHRvciAqLworCXN0cnVjdCBzY3NpX21wX2NhY2hpbmdfcyBjYWNoZTsJLyogY2FjaGUgcGFnZSBkYXRhICovCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRm9ybWF0IFVuaXQgY29tbWFuZAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEZvcm1hdCBVbml0IENEQgorICovCitzdHJ1Y3Qgc2NzaV9mb3JtYXRfdW5pdF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICByZXMxOjM7CisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgY21wbHN0OjE7CS8qIGlmIHNldCwgZGVmZWN0IGxpc3QgaXMgY29tcGxldGUgKi8KKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0xCisJCQkJCSAqLworI2Vsc2UKKwl1OCAgICAgICAgIGRlZl9saXN0OjM7CS8qIGZvcm1hdCBvZiBkZWZlY3QgZGVzY3JpcHRvciBpcworCQkJCQkgKiBmbXRkYXRhID0gMQorCQkJCQkgKi8KKwl1OCAgICAgICAgIGNtcGxzdDoxOwkvKiBpZiBzZXQsIGRlZmVjdCBsaXN0IGlzIGNvbXBsZXRlICovCisJdTggICAgICAgICBmbXRkYXRhOjE7CS8qIGlmIHNldCwgZGF0YSBvdXQgcGhhc2UgaGFzIGZvcm1hdAorCQkJCQkgKiBkYXRhCisJCQkJCSAqLworCXU4ICAgICAgICAgcmVzMTozOworI2VuZGlmCisJdTggICAgICAgICBpbnRlcmxlYXZlX21zYjsKKwl1OCAgICAgICAgIGludGVybGVhdmVfbHNiOworCXU4ICAgICAgICAgdmVuZG9yX3NwZWM7CisJdTggICAgICAgICBjb250cm9sOworfTsKKworLyoKKyAqIGgKKyAqLworc3RydWN0IHNjc2lfcmVzZXJ2ZTZfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MzsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIG9ic29sZXRlOjQ7CisJdTggICAgICAgICByZXNlcnZlZDozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHBhcmFtX2xpc3RfbGVuOworCXU4ICAgICAgICAgY29udHJvbDsKK307CisKKy8qCisgKiBoCisgKi8KK3N0cnVjdCBzY3NpX3JlbGVhc2U2X3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIGV4dGVudDoxOworI2Vsc2UKKwl1OCAgICAgICAgIGV4dGVudDoxOworCXU4ICAgICAgICAgb2Jzb2xldGU6NDsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1MTYgICAgICAgIHJlc2VydmVkMjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCisvKgorICogaAorICovCitzdHJ1Y3Qgc2NzaV9yZXNlcnZlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV9yZWxlYXNlMTBfc3sKKwl1OCAgICAgICAgIG9wY29kZTsKKyNpZmRlZiBfX0JJR0VORElBTgorCXU4ICAgICAgICAgcmVzZXJ2ZWQxOjM7CisJdTggICAgICAgICB0aGlyZF9wYXJ0eToxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQyOjI7CisJdTggICAgICAgICBsb25nX2lkOjE7CisJdTggICAgICAgICBleHRlbnQ6MTsKKyNlbHNlCisJdTggICAgICAgICBleHRlbnQ6MTsKKwl1OCAgICAgICAgIGxvbmdfaWQ6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMjoyOworCXU4ICAgICAgICAgdGhpcmRfcGFydHk6MTsKKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZhdGlvbl9pZDsKKwl1OCAgICAgICAgIHRoaXJkX3B0eV9kZXZfaWQ7CisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICByZXNlcnZlZDQ7CisJdTggICAgICAgICByZXNlcnZlZDU7CisJdTE2ICAgICAgICBwYXJhbV9saXN0X2xlbjsKKwl1OCAgICAgICAgIGNvbnRyb2w7Cit9OworCitzdHJ1Y3Qgc2NzaV92ZXJpZnkxMF9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVsYWRkcjoxOworI2Vsc2UKKwl1OCAgICAgICAgIHJlbGFkZHI6MTsKKwl1OCAgICAgICAgIGJ5dGNoazoxOworCXU4ICAgICAgICAgcmVzZXJ2ZWQ6MjsKKwl1OCAgICAgICAgIGRwbzoxOworCXU4ICAgICAgICAgbHVuOjM7CisjZW5kaWYKKwl1OCAgICAgICAgIGxiYTA7CisJdTggICAgICAgICBsYmExOworCXU4ICAgICAgICAgbGJhMjsKKwl1OCAgICAgICAgIGxiYTM7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICB2ZXJpZmljYXRpb25fbGVuMDsKKwl1OCAgICAgICAgIHZlcmlmaWNhdGlvbl9sZW4xOworCXU4ICAgICAgICAgY29udHJvbF9ieXRlOworfTsKKworc3RydWN0IHNjc2lfcmVxdWVzdF9zZW5zZV9zeworCXU4ICAgICAgICAgb3Bjb2RlOworI2lmZGVmIF9fQklHRU5ESUFOCisJdTggICAgICAgICBsdW46MzsKKwl1OCAgICAgICAgIHJlc2VydmVkOjU7CisjZWxzZQorCXU4ICAgICAgICAgcmVzZXJ2ZWQ6NTsKKwl1OCAgICAgICAgIGx1bjozOworI2VuZGlmCisJdTggICAgICAgICByZXNlcnZlZDA7CisJdTggICAgICAgICByZXNlcnZlZDE7CisJdTggICAgICAgICBhbGxvY19sZW47CisJdTggICAgICAgICBjb250cm9sX2J5dGU7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFNDU0kgc3RhdHVzIGJ5dGUgdmFsdWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19HT09EICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ0hFQ0tfQ09ORElUSU9OICAgICAgICAweDAyCisjZGVmaW5lIFNDU0lfU1RBVFVTX0NPTkRJVElPTl9NRVQgICAgICAgICAgMHgwNAorI2RlZmluZSBTQ1NJX1NUQVRVU19CVVNZICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfSU5URVJNRURJQVRFICAgICAgICAgICAweDEwCisjZGVmaW5lIFNDU0lfU1RBVFVTX0lDTSAgICAgICAgICAgICAgICAgICAgMHgxNAkvKiBpbnRlcm1lZGlhdGUgY29uZGl0aW9uIG1ldCAqLworI2RlZmluZSBTQ1NJX1NUQVRVU19SRVNFUlZBVElPTl9DT05GTElDVCAgIDB4MTgKKyNkZWZpbmUgU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEICAgICAweDIyCisjZGVmaW5lIFNDU0lfU1RBVFVTX1FVRVVFX0ZVTEwgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBTQ1NJX1NUQVRVU19BQ0FfQUNUSVZFICAgICAgICAgICAgIDB4MzAKKworI2RlZmluZSBTQ1NJX01BWF9BTExPQ19MRU4JCTB4RkYJLyogbWF4aW11bSBhbGxvY2FyaW9uIGxlbmd0aAorCQkJCQkJICogaW4gQ0RCcworCQkJCQkJICovCisKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMCAgICAgIDB4MkUKKyNkZWZpbmUgU0NTSV9PUF9XUklURV9WRVJJRlkxMiAgICAgIDB4QUUKKyNkZWZpbmUgU0NTSV9PUF9VTkRFRiAgICAgICAgICAgICAgIDB4RkYKKworLyoKKyAqIFNDU0kgV1JJVEUtVkVSSUZZKDEwKSBjb21tYW5kCisgKi8KK3N0cnVjdCBzY3NpX3dyaXRlX3ZlcmlmeTEwX3N7CisJdTggICAgICAgICBvcGNvZGU7CisjaWZkZWYgX19CSUdFTkRJQU4KKwl1OCAgICAgICAgIHJlc2VydmVkMTozOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDI6MTsKKwl1OCAgICAgICAgIGVicDoxOwkJLyogZXJzZSBieS1wYXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisjZWxzZQorCXU4ICAgICAgICAgcmVsX2FkcjoxOwkvKiByZWxhdGl2ZSBhZGRyZXNzICovCisJdTggICAgICAgICBieXRjaGs6MTsJLyogYnl0ZSBjaGVjayAqLworCXU4ICAgICAgICAgZWJwOjE7CQkvKiBlcnNlIGJ5LXBhc3MgKi8KKwl1OCAgICAgICAgIHJlc2VydmVkMjoxOworCXU4ICAgICAgICAgZHBvOjE7CQkvKiBEaXNhYmxlIFBhZ2UgT3V0ICovCisJdTggICAgICAgICByZXNlcnZlZDE6MzsKKyNlbmRpZgorCXU4ICAgICAgICAgbGJhMDsJCS8qIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyAtIE1TQiAqLworCXU4ICAgICAgICAgbGJhMTsKKwl1OCAgICAgICAgIGxiYTI7CisJdTggICAgICAgICBsYmEzOwkJLyogTFNCICovCisJdTggICAgICAgICByZXNlcnZlZDM7CisJdTggICAgICAgICB4ZmVyX2xlbmd0aDA7CS8qIHRyYW5zZmVyIGxlbmd0aCBpbiBibG9ja3MgLSBNU0IgKi8KKwl1OCAgICAgICAgIHhmZXJfbGVuZ3RoMTsJLyogTFNCICovCisJdTggICAgICAgICBjb250cm9sOworfTsKKworI3ByYWdtYSBwYWNrKCkKKworI2VuZGlmIC8qIF9fU0NTSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oIGIvZHJpdmVycy9zY3NpL2JmYS9pbmNsdWRlL3Byb3RvY29sL3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg3NWE2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvaW5jbHVkZS9wcm90b2NvbC90eXBlcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgdHlwZXMuaCBQcm90b2NvbCBkZWZpbmVkIGJhc2UgdHlwZXMKKyAqLworCisjaWZuZGVmIF9fVFlQRVNfSF9fCisjZGVmaW5lIF9fVFlQRVNfSF9fCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisKKyNkZWZpbmUgd3duX3QgdTY0CisjZGVmaW5lIGx1bl90IHU2NAorCisjZGVmaW5lIFdXTl9OVUxMCSgwKQorI2RlZmluZSBGQ19TWU1OQU1FX01BWAkyNTYJLyogIG1heCBuYW1lIHNlcnZlciBzeW1ib2xpYyBuYW1lIHNpemUgKi8KKyNkZWZpbmUgRkNfQUxQQV9NQVgJMTI4CisKKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIE1BQ19BRERSTEVOCSg2KQorc3RydWN0IG1hY19zIHsgdTggbWFjW01BQ19BRERSTEVOXTsgfTsKKyNkZWZpbmUgbWFjX3Qgc3RydWN0IG1hY19zCisKKyNwcmFnbWEgcGFjaygpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMgYi9kcml2ZXJzL3Njc2kvYmZhL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE4ZGVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9sb29wLmMKQEAgLTAsMCArMSw0MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcG9ydF9sb29wLmMgdnBvcnQgcHJpdmF0ZSBsb29wIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIExPT1ApOworCisvKioKKyAqICAgQUxQQSB0byBMSVhBIGJpdG1hcCBtYXBwaW5nCisgKgorICogICBBTFBBIDB4MDAgKFdvcmQgMCwgQml0IDMwKSBpcyBpbnZhbGlkIGZvciBOX1BvcnRzLiBBbHNvIFdvcmQgMCBCaXQgMzEKKyAqIGlzIGZvciBMX2JpdCAobG9naW4gcmVxdWlyZWQpIGFuZCBpcyBmaWxsZWQgYXMgQUxQQSAweDAwIGhlcmUuCisgKi8KK3N0YXRpYyBjb25zdCB1OCAgIHBvcnRfbG9vcF9hbHBhX21hcFtdID0geworCTB4RUYsIDB4RTgsIDB4RTQsIDB4RTIsIDB4RTEsIDB4RTAsIDB4REMsIDB4REEsCS8qIFdvcmQgMyBCaXRzIDAuLjcgKi8KKwkweEQ5LCAweEQ2LCAweEQ1LCAweEQ0LCAweEQzLCAweEQyLCAweEQxLCAweENFLAkvKiBXb3JkIDMgQml0cyA4Li4xNSAqLworCTB4Q0QsIDB4Q0MsIDB4Q0IsIDB4Q0EsIDB4QzksIDB4QzcsIDB4QzYsIDB4QzUsCS8qIFdvcmQgMyBCaXRzIDE2Li4yMyAqLworCTB4QzMsIDB4QkMsIDB4QkEsIDB4QjksIDB4QjYsIDB4QjUsIDB4QjQsIDB4QjMsCS8qIFdvcmQgMyBCaXRzIDI0Li4zMSAqLworCisJMHhCMiwgMHhCMSwgMHhBRSwgMHhBRCwgMHhBQywgMHhBQiwgMHhBQSwgMHhBOSwJLyogV29yZCAyIEJpdHMgMC4uNyAqLworCTB4QTcsIDB4QTYsIDB4QTUsIDB4QTMsIDB4OUYsIDB4OUUsIDB4OUQsIDB4OUIsCS8qIFdvcmQgMiBCaXRzIDguLjE1ICovCisJMHg5OCwgMHg5NywgMHg5MCwgMHg4RiwgMHg4OCwgMHg4NCwgMHg4MiwgMHg4MSwJLyogV29yZCAyIEJpdHMgMTYuLjIzICovCisJMHg4MCwgMHg3QywgMHg3QSwgMHg3OSwgMHg3NiwgMHg3NSwgMHg3NCwgMHg3MywJLyogV29yZCAyIEJpdHMgMjQuLjMxICovCisKKwkweDcyLCAweDcxLCAweDZFLCAweDZELCAweDZDLCAweDZCLCAweDZBLCAweDY5LAkvKiBXb3JkIDEgQml0cyAwLi43ICovCisJMHg2NywgMHg2NiwgMHg2NSwgMHg2MywgMHg1QywgMHg1QSwgMHg1OSwgMHg1NiwJLyogV29yZCAxIEJpdHMgOC4uMTUgKi8KKwkweDU1LCAweDU0LCAweDUzLCAweDUyLCAweDUxLCAweDRFLCAweDRELCAweDRDLAkvKiBXb3JkIDEgQml0cyAxNi4uMjMgKi8KKwkweDRCLCAweDRBLCAweDQ5LCAweDQ3LCAweDQ2LCAweDQ1LCAweDQzLCAweDNDLAkvKiBXb3JkIDEgQml0cyAyNC4uMzEgKi8KKworCTB4M0EsIDB4MzksIDB4MzYsIDB4MzUsIDB4MzQsIDB4MzMsIDB4MzIsIDB4MzEsCS8qIFdvcmQgMCBCaXRzIDAuLjcgKi8KKwkweDJFLCAweDJELCAweDJDLCAweDJCLCAweDJBLCAweDI5LCAweDI3LCAweDI2LAkvKiBXb3JkIDAgQml0cyA4Li4xNSAqLworCTB4MjUsIDB4MjMsIDB4MUYsIDB4MUUsIDB4MUQsIDB4MUIsIDB4MTgsIDB4MTcsCS8qIFdvcmQgMCBCaXRzIDE2Li4yMyAqLworCTB4MTAsIDB4MEYsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4MDAsCS8qIFdvcmQgMCBCaXRzIDI0Li4zMSAqLworfTsKKworLyoKKyAqIExvY2FsIEZ1bmN0aW9ucworICovCitiZmFfc3RhdHVzX3QgICAgYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCQkgdm9pZCAqY2JhcmcsCisJCQkJCQkgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgdTMyIHJzcF9sZW4sCisJCQkJCQkgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKworYmZhX3N0YXR1c190ICAgIGJmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2lfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSB1OCBhbHBhKTsKKwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCQkgICAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCQkgICAgIHUzMiByc3BfbGVuLAorCQkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK2JmYV9zdGF0dXNfdCAgICBiZmFfZmNzX3BvcnRfbG9vcF9zZW5kX2FkaXNjX2FjYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgdTggYWxwYSk7CisKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9hZGlzY19hY2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJCSAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIGluaXRpYWxpemFyIGluIHByb3ZhdGUgTE9PUCB0b3BvbG9neS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgdHJhbnNpdGlvbiB0byBvbmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisKKwl1OCAgICAgICAgIG51bV9hbHBhID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLm51bV9hbHBhOworCXU4ICAgICAgICAqYWxwYV9wb3NfbWFwID0gcG9ydC0+cG9ydF90b3BvLnBsb29wLmFscGFfcG9zX21hcDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpyX3BvcnQ7CisJaW50ICAgICAgICAgICAgIGlpID0gMDsKKworCS8qCisJICogSWYgdGhlIHBvcnQgcm9sZSBpcyBJbml0aWF0b3IgTW9kZSwgY3JlYXRlIFJwb3J0cy4KKwkgKi8KKwlpZiAocG9ydC0+cG9ydF9jZmcucm9sZXMgPT0gQkZBX1BPUlRfUk9MRV9GQ1BfSU0pIHsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIEFMUEEgcG9zaXRpb25hbCBiaXRtYXAgaXMgYXZhaWxhYmxlLgorCQkgKiBpZiBub3QsIHdlIHNlbmQgUExPR0kgdG8gYWxsIHBvc3NpYmxlIEFMUEFzLgorCQkgKi8KKwkJaWYgKG51bV9hbHBhID4gMCkgeworCQkJZm9yIChpaSA9IDA7IGlpIDwgbnVtX2FscGE7IGlpKyspIHsKKwkJCQkvKgorCQkJCSAqIGlnbm9yZSBBTFBBIG9mIGJmYSBwb3J0CisJCQkJICovCisJCQkJaWYgKGFscGFfcG9zX21hcFtpaV0gIT0gcG9ydC0+cGlkKSB7CisJCQkJCXJfcG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsCisJCQkJCQlhbHBhX3Bvc19tYXBbaWldKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBNQVhfQUxQQV9DT1VOVDsgaWkrKykgeworCQkJCS8qCisJCQkJICogaWdub3JlIEFMUEEgb2YgYmZhIHBvcnQKKwkJCQkgKi8KKwkJCQlpZiAoKHBvcnRfbG9vcF9hbHBhX21hcFtpaV0gPiAwKQorCQkJCSAgICAmJiAocG9ydF9sb29wX2FscGFfbWFwW2lpXSAhPSBwb3J0LT5waWQpKQorCQkJCQliZmFfZmNzX3BvcnRfbG9vcF9zZW5kX3Bsb2dpKHBvcnQsCisJCQkJCQlwb3J0X2xvb3BfYWxwYV9tYXBbaWldKTsKKwkJCQkvKipUQkQgKi8KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFRCRCBUYXJnZXQgTW9kZSA/PworCQkgKi8KKwl9CisKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBwb3J0IHRvIG5vdGlmeSB0cmFuc2l0aW9uIHRvIG9mZmxpbmUgc3RhdGUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCit9CisKKy8qKgorICogICBDYWxsZWQgYnkgcG9ydCB0byBub3RpZnkgYSBMSVAgb24gdGhlIGxvb3AuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogTG9jYWwgRnVuY3Rpb25zLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19wbG9naV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIFBsb2dpIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGZjX2xvZ2lfcyAgICAgKnBsb2dpX3Jlc3A7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCS8qCisJCSAqIEB0b2RvCisJCSAqIFRoaXMgY291bGQgbWVhbiB0aGF0IHRoZSBkZXZpY2Ugd2l0aCB0aGlzIEFQTEEgZG9lcyBub3QKKwkJICogZXhpc3Qgb24gdGhlIGxvb3AuCisJCSAqLworCisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlwbG9naV9yZXNwID0gKHN0cnVjdCBmY19sb2dpX3MgKikgZWxzX2NtZDsKKworCWlmIChlbHNfY21kLT5lbHNfY29kZSA9PSBGQ19FTFNfQUNDKSB7CisJCWJmYV9mY3NfcnBvcnRfc3RhcnQocG9ydCwgcnNwX2ZjaHMsIHBsb2dpX3Jlc3ApOworCX0gZWxzZSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBwbG9naV9yZXNwLT5lbHNfY21kLmVsc19jb2RlKTsKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19wb3J0X2xvb3Bfc2VuZF9wbG9naV9hY2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX3Bsb2dpX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgYWxwYSwKKwkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJCSBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJCSBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCQkgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCQkgYmZhX2Zjc19wb3J0X2xvb3BfcGxvZ2lfYWNjX3Jlc3BvbnNlLAorCQkJCSAodm9pZCAqKXBvcnQsIEZDX01BWF9QRFVTWiwgMCk7IC8qIE5vIHJlc3BvbnNlCisJCQkJCQkJCSAgKiBleHBlY3RlZAorCQkJCQkJCQkgICovCisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoKKyAqICBQbG9naSBBY2MgUmVzcG9uc2UKKyAqIFdlIGRvbm90IGRvIGFueSBwcm9jZXNzaW5nIGhlcmUuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX3Bsb2dpX2FjY19yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCSAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlyZXR1cm47CisJfQorfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1OCBhbHBhKQoreworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIGFscGEpOworCisJZmN4cCA9IGJmYV9mY3hwX2FsbG9jKE5VTEwsIHBvcnQtPmZjcy0+YmZhLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJCSAgTlVMTCk7CisJYmZhX2Fzc2VydChmY3hwKTsKKworCWxlbiA9IGZjX2FkaXNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBhbHBhLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJCSAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywKKwkJCSAgYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfcmVzcG9uc2UsICh2b2lkICopcG9ydCwKKwkJCSAgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmN4cCB0byBub3RpZnkgdGhlIEFESVNDIHJlc3BvbnNlCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9sb29wX2FkaXNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGZjX2FkaXNjX3MgICAgICphZGlzY19yZXNwOworCXN0cnVjdCBmY19lbHNfY21kX3MgICAqZWxzX2NtZDsKKwl1MzIgICAgICAgIHBpZCA9IHJzcF9mY2hzLT5zX2lkOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQkvKgorCQkgKiBUQkQgOiB3ZSBtYXkgbmVlZCB0byByZXRyeSBjZXJ0YWluIHJlcXVlc3RzCisJCSAqLworCQliZmFfZmN4cF9mcmVlKGZjeHApOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJYWRpc2NfcmVzcCA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSBlbHNfY21kOworCisJaWYgKGVsc19jbWQtPmVsc19jb2RlID09IEZDX0VMU19BQ0MpIHsKKwl9IGVsc2UgeworCQliZmFfdHJjKHBvcnQtPmZjcywgYWRpc2NfcmVzcC0+ZWxzX2NtZC5lbHNfY29kZSk7CisKKwkJLyoKKwkJICogVEJEOiB3ZSBtYXkgbmVlZCB0byBjaGVjayBmb3IgcmVqZWN0IGNvZGVzIGFuZCByZXRyeQorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3BpZChwb3J0LCBwaWQpOworCQlpZiAocnBvcnQpIHsKKwkJCWxpc3RfZGVsKCZycG9ydC0+cWUpOworCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQl9CisKKwl9CisJcmV0dXJuOworfQorCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfcG9ydF9sb29wX3NlbmRfYWRpc2NfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTggYWxwYSkKK3sKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBhbHBhKTsKKworCWZjeHAgPSBiZmFfZmN4cF9hbGxvYyhOVUxMLCBwb3J0LT5mY3MtPmJmYSwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkgIE5VTEwpOworCWJmYV9hc3NlcnQoZmN4cCk7CisKKwlsZW4gPSBmY19hZGlzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIGFscGEsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwKKwkJCQkgcG9ydC0+cG9ydF9jZmcucHd3biwgcG9ydC0+cG9ydF9jZmcubnd3bik7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJCUZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsCisJCQkJYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlLAorCQkJCSh2b2lkICopcG9ydCwgRkNfTUFYX1BEVVNaLCAwKTsgLyogbm8gcmVwb25zZQorCQkJCQkJCQkgKiBleHBlY3RlZAorCQkJCQkJCQkgKi8KKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKgorICogIEFkaXNjIEFjYyBSZXNwb25zZQorICogV2UgZG9ub3QgZG8gYW55IHByb2Nlc3NpbmcgaGVyZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2xvb3BfYWRpc2NfYWNjX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqKSBjYmFyZzsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJldHVybjsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X2FwaS5jIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjUxYTgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9scG9ydF9hcGkuYwpAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBwb3J0X2FwaS5jIEJGQSBGQ1MgcG9ydAorICovCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjcy5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX2xwb3J0Lmg+CisjaW5jbHVkZSA8ZmNzL2JmYV9mY3NfcnBvcnQuaD4KKyNpbmNsdWRlICJmY3NfcnBvcnQuaCIKKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBQT1JUX0FQSSk7CisKKworCisvKioKKyAqICBmY3NfcG9ydF9hcGkgQkZBIEZDUyBwb3J0IEFQSQorICovCisKK3ZvaWQKK2JmYV9mY3NfY2ZnX2Jhc2VfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcpCit7Cit9CisKK3N0cnVjdCBiZmFfZmNzX3BvcnRfcyAqCitiZmFfZmNzX2dldF9iYXNlX3BvcnQoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXJldHVybiAoJmZjcy0+ZmFicmljLmJwb3J0KTsKK30KKword3duX3QKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCB3d24sIGludCBpbmRleCwKKwkJICAgICAgIGludCBucnBvcnRzLCBiZmFfYm9vbGVhbl90IGJ3d24pCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBucnBvcnRzID09IDApCisJCXJldHVybiAod3duX3QpIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisJYmZhX3RyYyhmY3MsICh1MzIpIG5ycG9ydHMpOworCisJaSA9IDA7CisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlICgocWUgIT0gcWgpICYmIChpIDwgbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGJ3d24pIHsKKwkJCWlmICghbWVtY21wKCZ3d24sICZycG9ydC0+cHd3biwgOCkpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSBpbmRleCkKKwkJCQlicmVhazsKKwkJfQorCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJaWYgKHJwb3J0KSB7CisJCXJldHVybiBycG9ydC0+cHd3bjsKKwl9IGVsc2UgeworCQlyZXR1cm4gKHd3bl90KSAwOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9ycG9ydHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycG9ydF93d25zW10sCisJCQlpbnQgKm5ycG9ydHMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcWgsICpxZTsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IE5VTEw7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAqZmNzOworCisJaWYgKHBvcnQgPT0gTlVMTCB8fCBycG9ydF93d25zID09IE5VTEwgfHwgKm5ycG9ydHMgPT0gMCkKKwkJcmV0dXJuOworCisJZmNzID0gcG9ydC0+ZmNzOworCWJmYV90cmMoZmNzLCAodTMyKSAqbnJwb3J0cyk7CisKKwlpID0gMDsKKwlxaCA9ICZwb3J0LT5ycG9ydF9xOworCXFlID0gYmZhX3FfZmlyc3QocWgpOworCisJd2hpbGUgKChxZSAhPSBxaCkgJiYgKGkgPCAqbnJwb3J0cykpIHsKKwkJcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQlpZiAoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKSB7CisJCQlxZSA9IGJmYV9xX25leHQocWUpOworCQkJYmZhX3RyYyhmY3MsICh1MzIpIHJwb3J0LT5wd3duKTsKKwkJCWJmYV90cmMoZmNzLCBycG9ydC0+cGlkKTsKKwkJCWJmYV90cmMoZmNzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcnBvcnRfd3duc1tpXSA9IHJwb3J0LT5wd3duOworCisJCWkrKzsKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgaSk7CisJKm5ycG9ydHMgPSBpOworCXJldHVybjsKK30KKworLyoKKyAqIEl0ZXJhdGUncyB0aHJvdWdoIGFsbCB0aGUgcnBvcnQncyBpbiB0aGUgZ2l2ZW4gcG9ydCB0bworICogZGV0ZXJtaW5lIHRoZSBtYXhpbXVtIG9wZXJhdGluZyBzcGVlZC4KKyAqLworZW51bSBiZmFfcHBvcnRfc3BlZWQKK2JmYV9mY3NfcG9ydF9nZXRfcnBvcnRfbWF4X3NwZWVkKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpxaCwgKnFlOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gTlVMTDsKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3M7CisJZW51bSBiZmFfcHBvcnRfc3BlZWQgbWF4X3NwZWVkID0gMDsKKwlzdHJ1Y3QgYmZhX3Bwb3J0X2F0dHJfcyBwcG9ydF9hdHRyOworCWVudW0gYmZhX3Bwb3J0X3NwZWVkIHBwb3J0X3NwZWVkOworCisJaWYgKHBvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlmY3MgPSBwb3J0LT5mY3M7CisKKwkvKgorCSAqIEdldCBQaHlzaWNhbCBwb3J0J3MgY3VycmVudCBzcGVlZAorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCXBwb3J0X3NwZWVkID0gcHBvcnRfYXR0ci5zcGVlZDsKKwliZmFfdHJjKGZjcywgcHBvcnRfc3BlZWQpOworCisJcWggPSAmcG9ydC0+cnBvcnRfcTsKKwlxZSA9IGJmYV9xX2ZpcnN0KHFoKTsKKworCXdoaWxlIChxZSAhPSBxaCkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICgoYmZhX29zX250b2gzYihycG9ydC0+cGlkKSA+IDB4RkZGMDAwKQorCQkgICAgfHwgKGJmYV9mY3NfcnBvcnRfZ2V0X3N0YXRlKHJwb3J0KSA9PSBCRkFfUlBPUlRfT0ZGTElORSkpIHsKKwkJCXFlID0gYmZhX3FfbmV4dChxZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF84R0JQUykKKwkJICAgIHx8IChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPiBwcG9ydF9zcGVlZCkpIHsKKwkJCW1heF9zcGVlZCA9IHJwb3J0LT5ycGYucnBzY19zcGVlZDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJwb3J0LT5ycGYucnBzY19zcGVlZCA+IG1heF9zcGVlZCkgeworCQkJbWF4X3NwZWVkID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCQl9CisKKwkJcWUgPSBiZmFfcV9uZXh0KHFlKTsKKwl9CisKKwliZmFfdHJjKGZjcywgbWF4X3NwZWVkKTsKKwlyZXR1cm4gbWF4X3NwZWVkOworfQorCitzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKgorYmZhX2Zjc19sb29rdXBfcG9ydChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwgd3duX3QgbHB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJYmZhX2Zjc192Zl90ICAgKnZmOworCisJYmZhX2Fzc2VydChmY3MgIT0gTlVMTCk7CisKKwl2ZiA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWlmICh2ZiA9PSBOVUxMKSB7CisJCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKCFscHd3biB8fCAodmYtPmJwb3J0LnBvcnRfY2ZnLnB3d24gPT0gbHB3d24pKQorCQlyZXR1cm4gKCZ2Zi0+YnBvcnQpOworCisJdnBvcnQgPSBiZmFfZmNzX2ZhYnJpY192cG9ydF9sb29rdXAodmYsIGxwd3duKTsKKwlpZiAodnBvcnQpCisJCXJldHVybiAoJnZwb3J0LT5scG9ydCk7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogIEFQSSBjb3JyZXNwb25kaW5nIHRvIFZtV2FyZSdzIE5QSVZfVlBPUlRfR0VUSU5GTy4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X2dldF9pbmZvKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJICAgICAgc3RydWN0IGJmYV9wb3J0X2luZm9fcyAqcG9ydF9pbmZvKQoreworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+ZmFicmljX25hbWUpOworCisJaWYgKHBvcnQtPnZwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBhIFBoeXNpY2FsIHBvcnQKKwkJICovCisJCXBvcnRfaW5mby0+cG9ydF90eXBlID0gQkZBX1BPUlRfVFlQRV9QSFlTSUNBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKworCQlwb3J0X2luZm8tPm1heF92cG9ydHNfc3VwcCA9IGJmYV9mY3NfdnBvcnRfZ2V0X21heChwb3J0LT5mY3MpOworCQlwb3J0X2luZm8tPm51bV92cG9ydHNfaW51c2UgPQorCQkJYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQocG9ydC0+ZmFicmljKTsKKwkJcG9ydF9pbmZvLT5tYXhfcnBvcnRzX3N1cHAgPSBCRkFfRkNTX01BWF9SUE9SVFNfU1VQUDsKKwkJcG9ydF9pbmZvLT5udW1fcnBvcnRzX2ludXNlID0gcG9ydC0+bnVtX3Jwb3J0czsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgdmlydHVhbCBwb3J0CisJCSAqLworCQlwb3J0X2luZm8tPnBvcnRfdHlwZSA9IEJGQV9QT1JUX1RZUEVfVklSVFVBTDsKKworCQkvKgorCQkgKiBAdG9kbyA6IG5lZWQgdG8gZml4IHRoZSBzdGF0ZSAmIHJlYXNvbgorCQkgKi8KKwkJcG9ydF9pbmZvLT5wb3J0X3N0YXRlID0gMDsKKwkJcG9ydF9pbmZvLT5vZmZsaW5lX3JlYXNvbiA9IDA7CisKKwkJcG9ydF9pbmZvLT5wb3J0X3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KTsKKwkJcG9ydF9pbmZvLT5ub2RlX3d3biA9IGJmYV9mY3NfcG9ydF9nZXRfbnd3bihwb3J0KTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9nZXRfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zICpwb3J0X3N0YXRzKQoreworCWJmYV9vc19tZW1jcHkocG9ydF9zdGF0cywgJmZjc19wb3J0LT5zdGF0cywKKwkJICAgICAgc2l6ZW9mKHN0cnVjdCBiZmFfcG9ydF9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfY2xlYXJfc3RhdHMoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpmY3NfcG9ydCkKK3sKKwliZmFfb3NfbWVtc2V0KCZmY3NfcG9ydC0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3BvcnRfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X2VuYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzIHw9IEJGQV9QT1JUX1JPTEVfRkNQX0lQRkM7CisJcmV0dXJuOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfZGlzYWJsZV9pcGZjX3JvbGVzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqZmNzX3BvcnQpCit7CisJZmNzX3BvcnQtPnBvcnRfY2ZnLnJvbGVzICY9IH5CRkFfUE9SVF9ST0xFX0ZDUF9JUEZDOworCXJldHVybjsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaCBiL2RyaXZlcnMvc2NzaS9iZmEvbHBvcnRfcHJpdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYWUzNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL2xwb3J0X3ByaXYuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19WUF9QUklWX0hfXworI2RlZmluZSBfX1ZQX1BSSVZfSF9fCisKKyNpbmNsdWRlIDxmY3MvYmZhX2Zjc19scG9ydC5oPgorI2luY2x1ZGUgPGZjcy9iZmFfZmNzX3Zwb3J0Lmg+CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdnBzCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3Zwb3J0X2luaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHZwcworICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc192cHNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfdnBzX2xpcChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHBvcnRfZmFiCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfZmFiX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICp2cG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2ZhYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9mYWJfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgIHU4ICpyeF9mcmFtZSwgdTMyIGxlbik7CisKKy8qCisgKiBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgVlAtTlMuCisgKi8KK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9uc19xdWVyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLVNDTgorICovCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X3Njbl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqdnBvcnQpOwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9zY25fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnZwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfc2NuX3Byb2Nlc3NfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJ4X2ZyYW1lLCB1MzIgbGVuKTsKKworLyoKKyAqIEZ1bmN0aW9ucyBleHBvcnRlZCBieSBWUC1OMk4KKyAqLworCit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X24ybl9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbjJuX3J4X2ZyYW1lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisvKgorICogRnVuY3Rpb25zIGV4cG9ydGVkIGJ5IFZQLUxPT1AKKyAqLwordm9pZCAgICAgICAgICAgIGJmYV9mY3NfcG9ydF9sb29wX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKK3ZvaWQgICAgICAgICAgICBiZmFfZmNzX3BvcnRfbG9vcF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfbGlwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCk7Cit2b2lkICAgICAgICAgICAgYmZhX2Zjc19wb3J0X2xvb3BfcnhfZnJhbWUoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LAorCQkJCQkgICB1OCAqcnhfZnJhbWUsIHUzMiBsZW4pOworCisjZW5kaWYgLyogX19WUF9QUklWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9tcy5jIGIvZHJpdmVycy9zY3NpL2JmYS9tcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmIzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL21zLmMKQEAgLTAsMCArMSw3NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImxwb3J0X3ByaXYuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgTVMpOworCisjZGVmaW5lIEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTICAyCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKHZvaWQgKm1zX2NiYXJnLAorCQkJCQkgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4odm9pZCAqbXNfY2JhcmcsCisJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICB1MzIgcnNwX2xlbiwKKwkJCQkJICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKKy8qKgorICogIGZjc19tc19zbSBGQ1MgTVMgc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogIE1TIFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gcG9ydF9tc19ldmVudCB7CisJTVNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU1TU01fRVZFTlRfUlNQX09LID0gMywKKwlNU1NNX0VWRU5UX1JTUF9FUlJPUiA9IDQsCisJTVNTTV9FVkVOVF9USU1FT1VUID0gNSwKKwlNU1NNX0VWRU5UX0ZDWFBfU0VOVCA9IDYsCisJTVNTTV9FVkVOVF9QT1JUX0ZBQlJJQ19SU0NOID0gNworfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJCSBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQkJZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCQllbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9tc19zbV9nZm4oc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgICAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgICAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkJCSAgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KTsKKy8qKgorICogCQlTdGFydCBpbiBvZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgTlMgdG8gc2VuZCBzdGFydC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX3Bsb2dpKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCQkgZW51bSBwb3J0X21zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgbXMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobXMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTVNTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX3Bsb2dpX3JldHJ5KTsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLCAmbXMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9tc190aW1lb3V0LCBtcywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIHNpbmNlIHBsb2dpIGlzIGRvbmUsIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb25saW5lKG1zKTsKKworCQkvKioKKwkJICogaWYgdGhpcyBpcyBhIFZwb3J0LCBnbyB0byBvbmxpbmUgc3RhdGUuCisJCSAqLworCQlpZiAobXMtPnBvcnQtPnZwb3J0KSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRm9yIGEgYmFzZSBwb3J0IHdlIG5lZWQgdG8gZ2V0IHRoZQorCQkgKiBzd2l0Y2gncyBJUCBhZGRyZXNzLgorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcywKKwkJCSAgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9wbG9naV9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfcGxvZ2kobXMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJm1zLT50aW1lcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCS8qCisJCSAqIG5vdyBpbnZva2UgTVMgcmVsYXRlZCBzdWItbW9kdWxlcworCQkgKi8KKwkJYmZhX2Zjc19wb3J0X2ZkbWlfb2ZmbGluZShtcyk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ046CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCW1zLT5yZXRyeV9jbnQgPSAwOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nZm4obXMsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dtYWxfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJCWVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ21hbCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobXMtPnBvcnQpLAorCQkJCSAgICAgICAmbXMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQlpZiAobXMtPnJldHJ5X2NudCsrIDwgQkZBX0ZDU19NU19DTURfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9tc19zZW5kX2dmbihtcywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBNU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKG1zLT5mY3hwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgICBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9nbWFsX3NlbmRpbmcpOworCQliZmFfZmNzX3BvcnRfbXNfc2VuZF9nbWFsKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwodm9pZCAqbXNfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IG1zX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG1zLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZtcy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9tc19zZW5kX2dtYWwsIG1zKTsKKwkJcmV0dXJuOworCX0KKwltcy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19nbWFsX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkJYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ21hbF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKiltcywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19nbWFsX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkgICAgICB2b2lkICpjYmFyZywgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJc3RydWN0IGZjZ3NfZ21hbF9yZXNwX3MgKmdtYWxfcmVzcDsKKwlzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICpnbWFsX2VudHJ5OworCXUzMiAgICAgICAgbnVtX2VudHJpZXM7CisJdTggICAgICAgICpyc3Bfc3RyOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ21hbF9yZXNwID0gKHN0cnVjdCBmY2dzX2dtYWxfcmVzcF9zICopKGN0aGRyICsgMSk7CisJCW51bV9lbnRyaWVzID0gYmZhX29zX250b2hsKGdtYWxfcmVzcC0+bXNfbGVuKTsKKwkJaWYgKG51bV9lbnRyaWVzID09IDApIHsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogVGhlIHJlc3BvbnNlIGNvdWxkIGNvbnRhaW4gbXVsdGlwbGUgRW50cmllcy4KKwkJICogRW50cmllcyBmb3IgU05NUCBpbnRlcmZhY2UsIGV0Yy4KKwkJICogV2UgbG9vayBmb3IgdGhlIGVudHJ5IHdpdGggYSB0ZWxuZXQgcHJlZml4LgorCQkgKiBGaXJzdCAiaHR0cDovLyIgZW50cnkgcmVmZXJzIHRvIElQIGFkZHIKKwkJICovCisKKwkJZ21hbF9lbnRyeSA9IChzdHJ1Y3QgZmNfZ21hbF9lbnRyeV9zICopZ21hbF9yZXNwLT5tc19tYTsKKwkJd2hpbGUgKG51bV9lbnRyaWVzID4gMCkgeworCQkJaWYgKHN0cm5jbXAKKwkJCSAgICAoZ21hbF9lbnRyeS0+cHJlZml4LCBDVF9HTUFMX1JFU1BfUFJFRklYX0hUVFAsCisJCQkgICAgIHNpemVvZihnbWFsX2VudHJ5LT5wcmVmaXgpKSA9PSAwKSB7CisKKwkJCQkvKgorCQkJCSAqIGlmIHRoZSBJUCBhZGRyZXNzIGlzIHRlcm1pbmF0aW5nIHdpdGggYSAnLycsCisJCQkJICogcmVtb3ZlIGl0LiAqQnl0ZSAwIGNvbnNpc3RzIG9mIHRoZSBsZW5ndGgKKwkJCQkgKiBvZiB0aGUgc3RyaW5nLgorCQkJCSAqLworCQkJCXJzcF9zdHIgPSAmKGdtYWxfZW50cnktPnByZWZpeFswXSk7CisJCQkJaWYgKHJzcF9zdHJbZ21hbF9lbnRyeS0+bGVuIC0gMV0gPT0gJy8nKQorCQkJCQlyc3Bfc3RyW2dtYWxfZW50cnktPmxlbiAtIDFdID0gMDsKKwkJCQkvKgorCQkJCSAqIGNvcHkgSVAgQWRkcmVzcyB0byBmYWJyaWMKKwkJCQkgKi8KKwkJCQlzdHJuY3B5KGJmYV9mY3NfcG9ydF9nZXRfZmFicmljX2lwYWRkcihwb3J0KSwKKwkJCQkJZ21hbF9lbnRyeS0+aXBfYWRkciwKKwkJCQkJQkZBX0ZDU19GQUJSSUNfSVBBRERSX1NaKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLS1udW1fZW50cmllczsKKwkJCQkrK2dtYWxfZW50cnk7CisJCQl9CisJCX0KKworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zbV9nZm5fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLAorCQkJICAgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChtcy0+cG9ydCksCisJCQkJICAgICAgICZtcy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX3NtX2dmbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zLCBlbnVtIHBvcnRfbXNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBtcy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhtcy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBNU1NNX0VWRU5UX1JTUF9FUlJPUjoKKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJaWYgKG1zLT5yZXRyeV9jbnQrKyA8IEJGQV9GQ1NfTVNfQ01EX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KTsKKwkJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG1zLT5wb3J0KSwKKwkJCQkJJm1zLT50aW1lciwgYmZhX2Zjc19wb3J0X21zX3RpbWVvdXQsIG1zLAorCQkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSk7CisJCQltcy0+cmV0cnlfY250ID0gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobXMsIGJmYV9mY3NfcG9ydF9tc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChtcy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc21fZ2ZuX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMsCisJCQkgICAgIGVudW0gcG9ydF9tc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIG1zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG1zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE1TU01fRVZFTlRfVElNRU9VVDoKKwkJLyoKKwkJICogUmV0cnkgVGltZXIgRXhwaXJlZC4gUmUtc2VuZAorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX2dmbl9zZW5kaW5nKTsKKwkJYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuKG1zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE1TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZtcy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqICBtc19wdnQgTVMgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19zZW5kX2dmbih2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm1zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X21zX3NlbmRfZ2ZuLCBtcyk7CisJCXJldHVybjsKKwl9CisJbXMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfZ2ZuX3JlcV9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksCisJCQkgICAgICAgYmZhX2xwc19nZXRfcGVlcl9ud3duKHBvcnQtPmZhYnJpYy0+bHBzKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbXNfZ2ZuX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9GQ1hQX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X21zX2dmbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLCB2b2lkICpjYmFyZywKKwkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqbXMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJd3duX3QgICAgICAgICAgKmdmbl9yZXNwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJZ2ZuX3Jlc3AgPSAod3duX3QgKikgKGN0aGRyICsgMSk7CisJCS8qCisJCSAqIGNoZWNrIGlmIGl0IGhhcyBhY3R1YWxseSBjaGFuZ2VkCisJCSAqLworCQlpZiAoKG1lbWNtcAorCQkgICAgICgodm9pZCAqKSZiZmFfZmNzX3BvcnRfZ2V0X2ZhYnJpY19uYW1lKHBvcnQpLCBnZm5fcmVzcCwKKwkJICAgICAgc2l6ZW9mKHd3bl90KSkgIT0gMCkpCisJCQliZmFfZmNzX2ZhYnJpY19zZXRfZmFicmljX25hbWUocG9ydC0+ZmFicmljLCAqZ2ZuX3Jlc3ApOworCQliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiAgbXNfcHZ0IE1TIGxvY2FsIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSh2b2lkICptc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gbXNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cGlkKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbXMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbXNfc2VuZF9wbG9naSwgbXMpOworCQlyZXR1cm47CisJfQorCW1zLT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfb3NfaHRvbjNiKEZDX01HTVRfU0VSVkVSKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5wd3duLCBwb3J0LT5wb3J0X2NmZy5ud3duLAorCQkJICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShwb3J0LT5mY3MtPmJmYSkpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X21zX3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW1zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5tc19wbG9naV9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9tc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbXNfcyAqKWNiYXJnOworCisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbXMtPnBvcnQ7CisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfcnNwX2VycisrOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm1zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5tc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5tc19yZWplY3RzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcG9ydC0+c3RhdHMubXNfcGxvZ2lfdW5rbm93bl9yc3ArKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGVsc19jbWQtPmVsc19jb2RlKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobXMsIE1TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbXNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKilhcmc7CisKKwltcy0+cG9ydC0+c3RhdHMubXNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfaW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKG1zLCBiZmFfZmNzX3BvcnRfbXNfc21fb2ZmbGluZSk7CisKKwkvKgorCSAqIEludm9rZSBpbml0IHJvdXRpbmVzIG9mIHN1YiBtb2R1bGVzLgorCSAqLworCWJmYV9mY3NfcG9ydF9mZG1pX2luaXQobXMpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9tc19zICptcyA9IEJGQV9GQ1NfR0VUX01TX0ZST01fUE9SVChwb3J0KTsKKworCW1zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChtcywgTVNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbXNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJbXMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X21zX3MgKm1zID0gQkZBX0ZDU19HRVRfTVNfRlJPTV9QT1JUKHBvcnQpOworCisJLyoKKwkgKiBAdG9kby4gIEhhbmRsZSB0aGlzIG9ubHkgd2hlbiBpbiBPbmxpbmUgc3RhdGUKKwkgKi8KKwlpZiAoYmZhX3NtX2NtcF9zdGF0ZShtcywgYmZhX2Zjc19wb3J0X21zX3NtX29ubGluZSkpCisJCWJmYV9zbV9zZW5kX2V2ZW50KG1zLCBNU1NNX0VWRU5UX1BPUlRfRkFCUklDX1JTQ04pOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9uMm4uYyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NDU2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvbjJuLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgbjJuLmMgbjJuIGltcGxlbWVudGF0aW9uLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJscG9ydF9wcml2LmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIE4yTik7CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gaW5pdGlhbGl6ZSBOMk4gdG9wb2xvZ3kuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcG9ydF9uMm5faW5pdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb25saW5lIHN0YXRlLgorICovCit2b2lkCitiZmFfZmNzX3BvcnRfbjJuX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uMm5fcyAqbjJuX3BvcnQgPSAmcG9ydC0+cG9ydF90b3BvLnBuMm47CisJc3RydWN0IGJmYV9wb3J0X2NmZ19zICpwY2ZnID0gJnBvcnQtPnBvcnRfY2ZnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBjZmctPnB3d24pOworCisJLyoKKwkgKiBJZiBvdXIgUFdXTiBpcyA+IHRoYW4gdGhhdCBvZiB0aGUgci1wb3J0LCB3ZSBoYXZlIHRvIGluaXRpYXRlIFBMT0dJCisJICogYW5kIGFzc2lnbiBhbiBBZGRyZXNzLiBpZiBub3QsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaXRzIFBMT0dJLgorCSAqCisJICogSWYgb3VyIFBXV04gaXMgPCB0aGFuIHRoYXQgb2YgdGhlIHJlbW90ZSBwb3J0LCBpdCB3aWxsIHNlbmQgYSBQTE9HSQorCSAqIHdpdGggdGhlIFBJRHMgYXNzaWduZWQuIFRoZSBycG9ydCBzdGF0ZSBtYWNoaW5lIHRha2UgY2FyZSBvZiB0aGlzCisJICogaW5jb21pbmcgUExPR0kuCisJICovCisJaWYgKG1lbWNtcAorCSAgICAoKHZvaWQgKikmcGNmZy0+cHd3biwgKHZvaWQgKikmbjJuX3BvcnQtPnJlbV9wb3J0X3d3biwKKwkgICAgIHNpemVvZih3d25fdCkpID4gMCkgeworCQlwb3J0LT5waWQgPSBOMk5fTE9DQUxfUElEOworCQkvKioKKwkJICogRmlyc3QsIGNoZWNrIGlmIHdlIGtub3cgdGhlIGRldmljZSBieSBwd3duLgorCQkgKi8KKwkJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocG9ydCwKKwkJCQkJCSAgICAgICBuMm5fcG9ydC0+cmVtX3BvcnRfd3duKTsKKwkJaWYgKHJwb3J0KSB7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJCQliZmFfdHJjKHBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCQkJcnBvcnQtPnBpZCA9IE4yTl9SRU1PVEVfUElEOworCQkJYmZhX2Zjc19ycG9ydF9vbmxpbmUocnBvcnQpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogSW4gbjJuIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBycG9ydC4gRGVsZXRlIHRoZSBvbGQgb25lIHdob3NlCisJCSAqIHBpZCBzaG91bGQgYmUgemVybywgYmVjYXVzZSBpdCBpcyBvZmZsaW5lLgorCQkgKi8KKwkJaWYgKHBvcnQtPm51bV9ycG9ydHMgPiAwKSB7CisJCQlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIDApOworCQkJYmZhX2Fzc2VydChycG9ydCAhPSBOVUxMKTsKKwkJCWlmIChycG9ydCkgeworCQkJCWJmYV90cmMocG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJCQkJYmZhX2Zjc19ycG9ydF9kZWxldGUocnBvcnQpOworCQkJfQorCQl9CisJCWJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIE4yTl9SRU1PVEVfUElEKTsKKwl9Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgZmNzL3BvcnQgdG8gbm90aWZ5IHRyYW5zaXRpb24gdG8gb2ZmbGluZSBzdGF0ZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X24ybl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X24ybl9zICpuMm5fcG9ydCA9ICZwb3J0LT5wb3J0X3RvcG8ucG4ybjsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCXBvcnQtPnBpZCA9IDA7CisJbjJuX3BvcnQtPnJlbV9wb3J0X3d3biA9IDA7CisJbjJuX3BvcnQtPnJlcGx5X294aWQgPSAwOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvbnMuYyBiL2RyaXZlcnMvc2NzaS9iZmEvbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ucy5jCkBAIC0wLDAgKzEsMTI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqIEBwYWdlIG5zX3NtX2luZm8gVlBPUlQgTlMgU3RhdGUgTWFjaGluZQorICoKKyAqIEBzZWN0aW9uIG5zX3NtX2ludGVyYWN0aW9ucyBWUE9SVCBOUyBTdGF0ZSBNYWNoaW5lIEludGVyYWN0aW9ucworICoKKyAqIEBzZWN0aW9uIG5zX3NtIFZQT1JUIE5TIFN0YXRlIE1hY2hpbmUKKyAqIAlpbWcgbnNfc20uanBnCisgKi8KKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSA8YmZhX2lvY2ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBOUyk7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcGxvZ2kodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQodm9pZCAqbnNfY2JhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLAorCQkJCQkgICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgICB2b2lkICpjYmFyZywKKwkJCQkJICAgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCQkgICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgICB1MzIgcmVzaWRfbGVuLAorCQkJCQkgICAgICAgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCSBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkJCSB2b2lkICpjYmFyZywKKwkJCQkJCSBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCSB1MzIgcnNwX2xlbiwKKwkJCQkJCSB1MzIgcmVzaWRfbGVuLAorCQkJCQkJIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcmZmX2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCQkJdm9pZCAqY2JhcmcsCisJCQkJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJCXUzMiByc3BfbGVuLAorCQkJCQkJdTMyIHJlc2lkX2xlbiwKKwkJCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfcHJvY2Vzc19naWRmdF9waWRzKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJCSAgIHUzMiAqcGlkX2J1ZiwKKwkJCQkJCSAgIHUzMiBuX3BpZHMpOworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KTsKKy8qKgorICogIGZjc19uc19zbSBGQ1MgbmFtZXNlcnZlciBpbnRlcmZhY2Ugc3RhdGUgbWFjaGluZQorICovCisKKy8qKgorICogVlBvcnQgTlMgU3RhdGUgTWFjaGluZSBldmVudHMKKyAqLworZW51bSB2cG9ydF9uc19ldmVudCB7CisJTlNTTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUgPSAyLAorCU5TU01fRVZFTlRfUExPR0lfU0VOVCA9IDMsCisJTlNTTV9FVkVOVF9SU1BfT0sgPSA0LAorCU5TU01fRVZFTlRfUlNQX0VSUk9SID0gNSwKKwlOU1NNX0VWRU5UX1RJTUVPVVQgPSA2LAorCU5TU01fRVZFTlRfTlNfUVVFUlkgPSA3LAorCU5TU01fRVZFTlRfUlNQTklEX1NFTlQgPSA4LAorCU5TU01fRVZFTlRfUkZUSURfU0VOVCA9IDksCisJTlNTTV9FVkVOVF9SRkZJRF9TRU5UID0gMTAsCisJTlNTTV9FVkVOVF9HSURGVF9TRU5UID0gMTEsCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgICAgICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JzcG5faWRfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fc2VuZGluZ19yZnRfaWQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQkgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fZ2lkX2Z0X3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCQllbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCk7CisvKioKKyAqIAkJU3RhcnQgaW4gb2ZmbGluZSBzdGF0ZSAtIGF3YWl0aW5nIGxpbmt1cAorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUExPR0lfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3Bsb2dpKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkpOworCQlucy0+cG9ydC0+c3RhdHMubnNfcmV0cmllcysrOworCQliZmFfdGltZXJfc3RhcnQoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksICZucy0+dGltZXIsCisJCQkJYmZhX2Zjc19wb3J0X25zX3RpbWVvdXQsIG5zLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQobnMsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgICAgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9USU1FT1VUOgorCQkvKgorCQkgKiBSZXRyeSBUaW1lciBFeHBpcmVkLiBSZS1zZW5kCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcGxvZ2lfc2VuZGluZyk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcnNwbl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1JTUE5JRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcnNwbl9pZCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkgICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfRVJST1I6CisJCS8qCisJCSAqIFN0YXJ0IHRpbWVyIGZvciBhIGRlbGF5ZWQgcmV0cnkKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JmdF9pZCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX3JmdF9pZChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9yc3BuX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJIGVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCS8qCisJCSAqIFJldHJ5IFRpbWVyIEV4cGlyZWQuIFJlLXNlbmQKKwkJICovCisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX3JzcG5faWQpOworCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9yc3BuX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRlRJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmdF9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisJCS8qCisJCSAqIE5vdyBtb3ZlIHRvIHJlZ2lzdGVyIEZDNCBGZWF0dXJlcworCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZ0X2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZ0X2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SRkZJRF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwoQkZBX0ZDU19HRVRfSEFMX0ZST01fUE9SVChucy0+cG9ydCksCisJCQkJICAgICAgICZucy0+ZmN4cF93cWUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX3JmZl9pZChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJICBlbnVtIHZwb3J0X25zX2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgbnMtPnBvcnQtPnBvcnRfY2ZnLnB3d24pOworCWJmYV90cmMobnMtPnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTlNTTV9FVkVOVF9SU1BfT0s6CisKKwkJLyoKKwkJICogSWYgbWluIGNmZyBtb2RlIGlzIGVuYWJsZWQsIHdlIGRvbm90IGluaXRpYXRlIHJwb3J0CisJCSAqIGRpc2NvdmVyeSB3aXRoIHRoZSBmYWJyaWMuIEluc3RlYWQsIHdlIHdpbGwgcmV0cmlldmUgdGhlCisJCSAqIGJvb3QgdGFyZ2V0cyBmcm9tIEhBTC9GVy4KKwkJICovCisJCWlmIChfX2Zjc19taW5fY2ZnKG5zLT5wb3J0LT5mY3MpKSB7CisJCQliZmFfZmNzX3BvcnRfbnNfYm9vdF90YXJnZXRfZGlzYyhucy0+cG9ydCk7CisJCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSBwb3J0IHJvbGUgaXMgSW5pdGlhdG9yIE1vZGUgaXNzdWUgTlMgcXVlcnkuCisJCSAqIElmIGl0IGlzIFRhcmdldCBNb2RlLCBza2lwIHRoaXMgYW5kIGdvIHRvIG9ubGluZS4KKwkJICovCisJCWlmIChCRkFfRkNTX1ZQT1JUX0lTX0lOSVRJQVRPUl9NT0RFKG5zLT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfZ2lkX2Z0KTsKKwkJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCX0gZWxzZSBpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUpOworCQl9CisJCS8qCisJCSAqIGtpY2sgb2ZmIG1nbXQgc3J2ciBzdGF0ZSBtYWNoaW5lCisJCSAqLworCQliZmFfZmNzX3BvcnRfbXNfb25saW5lKG5zLT5wb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBTdGFydCB0aW1lciBmb3IgYSBkZWxheWVkIHJldHJ5CisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KTsKKwkJbnMtPnBvcnQtPnN0YXRzLm5zX3JldHJpZXMrKzsKKwkJYmZhX3RpbWVyX3N0YXJ0KEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLCAmbnMtPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9uc190aW1lb3V0LCBucywKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9vZmZsaW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChucy0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfc21fcmZmX2lkX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMsCisJCQkJZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX3NlbmRpbmdfcmZmX2lkKTsKKwkJYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkKG5zLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZucy0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfR0lERlRfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKEJGQV9GQ1NfR0VUX0hBTF9GUk9NX1BPUlQobnMtPnBvcnQpLAorCQkJCSAgICAgICAmbnMtPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9naWRfZnQoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb25saW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUlNQX0VSUk9SOgorCQkvKgorCQkgKiBUQkQ6IGZvciBjZXJ0YWluIHJlamVjdCBjb2Rlcywgd2UgZG9uJ3QgbmVlZCB0byByZXRyeQorCQkgKi8KKwkJLyoKKwkJICogU3RhcnQgdGltZXIgZm9yIGEgZGVsYXllZCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeSk7CisJCW5zLT5wb3J0LT5zdGF0cy5uc19yZXRyaWVzKys7CisJCWJmYV90aW1lcl9zdGFydChCRkFfRkNTX0dFVF9IQUxfRlJPTV9QT1JUKG5zLT5wb3J0KSwgJm5zLT50aW1lciwKKwkJCQliZmFfZmNzX3BvcnRfbnNfdGltZW91dCwgbnMsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQobnMtPmZjeHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NtX2dpZF9mdF9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zLAorCQkJCWVudW0gdnBvcnRfbnNfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBucy0+cG9ydC0+cG9ydF9jZmcucHd3bik7CisJYmZhX3RyYyhucy0+cG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBOU1NNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCWJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdChucywgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworCQliZmFfdGltZXJfc3RvcCgmbnMtPnRpbWVyKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucywKKwkJCSAgZW51bSB2cG9ydF9uc19ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIG5zLT5wb3J0LT5wb3J0X2NmZy5wd3duKTsKKwliZmFfdHJjKG5zLT5wb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5TU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKG5zLCBiZmFfZmNzX3BvcnRfbnNfc21fb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBOU1NNX0VWRU5UX05TX1FVRVJZOgorCQkvKgorCQkgKiBJZiB0aGUgcG9ydCByb2xlIGlzIEluaXRpYXRvciBNb2RlIGlzc3VlIE5TIHF1ZXJ5LgorCQkgKiBJZiBpdCBpcyBUYXJnZXQgTW9kZSwgc2tpcCB0aGlzIGFuZCBnbyB0byBvbmxpbmUuCisJCSAqLworCQlpZiAoQkZBX0ZDU19WUE9SVF9JU19JTklUSUFUT1JfTU9ERShucy0+cG9ydCkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUobnMsIGJmYV9mY3NfcG9ydF9uc19zbV9zZW5kaW5nX2dpZF9mdCk7CisJCQliZmFfZmNzX3BvcnRfbnNfc2VuZF9naWRfZnQobnMsIE5VTEwpOworCQl9OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgbnNfcHZ0IE5hbWVzZXJ2ZXIgbG9jYWwgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3Bsb2dpLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcGxvZ2lfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkgICAgIGJmYV9vc19odG9uM2IoRkNfTkFNRV9TRVJWRVIpLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcGxvZ2lfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKwlwb3J0LT5zdGF0cy5uc19wbG9naV9zZW50Kys7CisKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QTE9HSV9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgIHZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCSAgICAgICB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCSAgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCS8qIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpX3Jlc3A7ICovCisJc3RydWN0IGZjX2Vsc19jbWRfcyAgICplbHNfY21kOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19wbG9naV9yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKworCXN3aXRjaCAoZWxzX2NtZC0+ZWxzX2NvZGUpIHsKKworCWNhc2UgRkNfRUxTX0FDQzoKKwkJaWYgKHJzcF9sZW4gPCBzaXplb2Yoc3RydWN0IGZjX2xvZ2lfcykpIHsKKwkJCWJmYV90cmMocG9ydC0+ZmNzLCByc3BfbGVuKTsKKwkJCXBvcnQtPnN0YXRzLm5zX3Bsb2dpX2FjY19lcnIrKzsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCQlicmVhazsKKwkJfQorCQlwb3J0LT5zdGF0cy5uc19wbG9naV9hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBGQ19FTFNfTFNfUkpUOgorCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGUpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlwb3J0LT5zdGF0cy5uc19yZWplY3RzKys7CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19wbG9naV91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBSZWdpc3RlciB0aGUgc3ltYm9saWMgcG9ydCBuYW1lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcnNwbl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBzeW1ibFsyNTZdOworCXU4ICAgICAgICAqcHN5bWJsID0gJnN5bWJsWzBdOworCisJYmZhX29zX21lbXNldChzeW1ibCwgMCwgc2l6ZW9mKHN5bWJsKSk7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX3JzcG5faWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwkvKgorCSAqIGZvciBWLVBvcnQsIGZvcm0gYSBQb3J0IFN5bWJvbGljIE5hbWUKKwkgKi8KKwlpZiAocG9ydC0+dnBvcnQpIHsKKwkJLyoqRm9yIFZwb3J0cywKKwkJICogIHdlIGFwcGVuZCB0aGUgdnBvcnQncyBwb3J0IHN5bWJvbGljIG5hbWUgdG8gdGhhdCBvZiB0aGUgYmFzZSBwb3J0LgorCQkgKi8KKworCQlzdHJuY3B5KChjaGFyICopcHN5bWJsLAorCQkJKGNoYXIgKikKKwkJCSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCSAgKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChwb3J0LT5mY3MpKSksCisJCQlzdHJsZW4oKGNoYXIgKikKKwkJCSAgICAgICAmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUoYmZhX2Zjc19nZXRfYmFzZV9wb3J0CisJCQkJCQkJICAgKHBvcnQtPmZjcykpKSk7CisKKwkJLyoKKwkJICogRW5zdXJlIHdlIGhhdmUgYSBudWxsIHRlcm1pbmF0aW5nIHN0cmluZy4KKwkJICovCisJCSgoY2hhciAqKQorCQkgcHN5bWJsKVtzdHJsZW4oKGNoYXIgKikKKwkJCQkmYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUKKwkJCQkoYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpKV0gPSAwOworCisJCXN0cm5jYXQoKGNoYXIgKilwc3ltYmwsCisJCQkoY2hhciAqKSYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpLAorCQkJc3RybGVuKChjaGFyICopJmJmYV9mY3NfcG9ydF9nZXRfcHN5bV9uYW1lKHBvcnQpKSk7CisJfSBlbHNlIHsKKwkJcHN5bWJsID0gKHU4ICopICYoYmZhX2Zjc19wb3J0X2dldF9wc3ltX25hbWUocG9ydCkpOworCX0KKworCWxlbiA9IGZjX3JzcG5pZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgMCwgcHN5bWJsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19yc3BuX2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yc3BuaWRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQTklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JzcG5faWRfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwKKwkJCQkgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCSB1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQkgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgY3RfaGRyX3MgICAgICAgKmN0aGRyID0gTlVMTDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCS8qCisJICogU2FuaXR5IENoZWNrcworCSAqLworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlwb3J0LT5zdGF0cy5uc19yc3BuaWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcnNwbmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JzcG5pZF9yZWplY3RzKys7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5leHBfY29kZSk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKK30KKworLyoqCisgKiBSZWdpc3RlciBGQzQtVHlwZXMKKyAqIFRCRCwgTmVlZCB0byByZXRyaWV2ZSB0aGlzIGZyb20gdGhlIE9TIGRyaXZlciwgaW4gY2FzZSBJUEZDIGlzIGVuYWJsZWQgPworICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZ0X2lkKHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5wb3J0X2NmZy5wd3duKTsKKworCWZjeHAgPSBmY3hwX2FsbG9jZWQgPyBmY3hwX2FsbG9jZWQgOiBiZmFfZmNzX2ZjeHBfYWxsb2MocG9ydC0+ZmNzKTsKKwlpZiAoIWZjeHApIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWxsb2Nfd2FpdCsrOworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmbnMtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3BvcnRfbnNfc2VuZF9yZnRfaWQsIG5zKTsKKwkJcmV0dXJuOworCX0KKwlucy0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19yZnRpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgICBwb3J0LT5wb3J0X2NmZy5yb2xlcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKW5zLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlwb3J0LT5zdGF0cy5uc19yZnRpZF9zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUkZUSURfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfcmZ0X2lkX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJY3RoZHIgPSAoc3RydWN0IGN0X2hkcl9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJY3RoZHItPmNtZF9yc3BfY29kZSA9IGJmYV9vc19udG9ocyhjdGhkci0+Y21kX3JzcF9jb2RlKTsKKworCWlmIChjdGhkci0+Y21kX3JzcF9jb2RlID09IENUX1JTUF9BQ0NFUFQpIHsKKwkJcG9ydC0+c3RhdHMubnNfcmZ0aWRfYWNjZXB0cysrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfT0spOworCQlyZXR1cm47CisJfQorCisJcG9ydC0+c3RhdHMubnNfcmZ0aWRfcmVqZWN0cysrOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+cmVhc29uX2NvZGUpOworCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7Cit9CisKKy8qKgorKiBSZWdpc3RlciBGQzQtRmVhdHVyZXMgOiBTaG91bGQgYmUgZG9uZSBhZnRlciBSRlRfSUQKKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9uc19zZW5kX3JmZl9pZCh2b2lkICpuc19jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gbnNfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCWludCAgICAgICAgICAgICBsZW47CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTggICAgICAgICBmYzRfZnRycyA9IDA7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FsbG9jX3dhaXQrKzsKKwkJYmZhX2ZjeHBfYWxsb2Nfd2FpdChwb3J0LT5mY3MtPmJmYSwgJm5zLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X25zX3NlbmRfcmZmX2lkLCBucyk7CisJCXJldHVybjsKKwl9CisJbnMtPmZjeHAgPSBmY3hwOworCisJaWYgKEJGQV9GQ1NfVlBPUlRfSVNfSU5JVElBVE9SX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX0lOSVRJQVRPUjsKKwl9IGVsc2UgaWYgKEJGQV9GQ1NfVlBPUlRfSVNfVEFSR0VUX01PREUobnMtPnBvcnQpKSB7CisJCWZjNF9mdHJzID0gRkNfR1NfRkNQX0ZDNF9GRUFUVVJFX1RBUkdFVDsKKwl9CisKKwlsZW4gPSBmY19yZmZpZF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwKKwkJCSAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLCBGQ19UWVBFX0ZDUCwKKwkJCSAgICAgZmM0X2Z0cnMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSwKKwkJICAgICAgKHZvaWQgKilucywgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfcmZmaWRfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JGRklEX1NFTlQpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3JmZl9pZF9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJCXZvaWQgKmNiYXJnLCBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQl1MzIgcnNwX2xlbiwgdTMyIHJlc2lkX2xlbiwKKwkJCQlzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gKHN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IG5zLT5wb3J0OworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAqY3RoZHIgPSBOVUxMOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJLyoKKwkgKiBTYW5pdHkgQ2hlY2tzCisJICovCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JzcF9lcnIrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlpZiAoY3RoZHItPmNtZF9yc3BfY29kZSA9PSBDVF9SU1BfQUNDRVBUKSB7CisJCXBvcnQtPnN0YXRzLm5zX3JmZmlkX2FjY2VwdHMrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwkJcmV0dXJuOworCX0KKworCXBvcnQtPnN0YXRzLm5zX3JmZmlkX3JlamVjdHMrKzsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPnJlYXNvbl9jb2RlKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmV4cF9jb2RlKTsKKworCWlmIChjdGhkci0+cmVhc29uX2NvZGUgPT0gQ1RfUlNOX05PVF9TVVBQKSB7CisJCS8qCisJCSAqIGlmIHRoaXMgY29tbWFuZCBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBkb24ndCByZXRyeQorCQkgKi8KKwkJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfUlNQX09LKTsKKwl9IGVsc2UgeworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiBRdWVyeSBGYWJyaWMgZm9yIEZDNC1UeXBlcyBEZXZpY2VzLgorICoKKyogIFRCRCA6IE5lZWQgdG8gdXNlIGEgbG9jYWwgKEZDUyBwcml2YXRlKSByZXNwb25zZSBidWZmZXIsIHNpbmNlIHRoZSByZXNwb25zZQorICogY2FuIGJlIGxhcmdlciB0aGFuIDJLLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3NlbmRfZ2lkX2Z0KHZvaWQgKm5zX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBuc19jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBucy0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5waWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hbGxvY193YWl0Kys7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZucy0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcG9ydF9uc19zZW5kX2dpZF9mdCwgbnMpOworCQlyZXR1cm47CisJfQorCW5zLT5mY3hwID0gZmN4cDsKKworCS8qCisJICogVGhpcyBxdWVyeSBpcyBvbmx5IGluaXRpYXRlZCBmb3IgRkNQIGluaXRpYXRvciBtb2RlLgorCSAqLworCWxlbiA9IGZjX2dpZF9mdF9idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgbnMtPnBvcnQtPnBpZCwKKwkJCSAgICAgIEZDX1RZUEVfRkNQKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9uc19naWRfZnRfcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopbnMsIGJmYV9mY3hwX2dldF9tYXhyc3AocG9ydC0+ZmNzLT5iZmEpLAorCQkgICAgICBGQ19SQV9UT1YpOworCisJcG9ydC0+c3RhdHMubnNfZ2lkZnRfc2VudCsrOworCisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfR0lERlRfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfZ2lkX2Z0X3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJCXUzMiByc3BfbGVuLCB1MzIgcmVzaWRfbGVuLAorCQkJCXN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICopY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gbnMtPnBvcnQ7CisJc3RydWN0IGN0X2hkcl9zICAgICAgICpjdGhkciA9IE5VTEw7CisJdTMyICAgICAgICBuX3BpZHM7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJcG9ydC0+c3RhdHMubnNfZ2lkZnRfcnNwX2VycisrOworCQliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJaWYgKHJlc2lkX2xlbiAhPSAwKSB7CisJCS8qCisJCSAqIFRCRCA6IHdlIHdpbGwgbmVlZCB0byBhbGxvY2F0ZSBhIGxhcmdlciBidWZmZXIgJiByZXRyeSB0aGUKKwkJICogY29tbWFuZAorCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzcF9sZW4pOworCQliZmFfdHJjKHBvcnQtPmZjcywgcmVzaWRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWN0aGRyID0gKHN0cnVjdCBjdF9oZHJfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCWN0aGRyLT5jbWRfcnNwX2NvZGUgPSBiZmFfb3NfbnRvaHMoY3RoZHItPmNtZF9yc3BfY29kZSk7CisKKwlzd2l0Y2ggKGN0aGRyLT5jbWRfcnNwX2NvZGUpIHsKKworCWNhc2UgQ1RfUlNQX0FDQ0VQVDoKKworCQlwb3J0LT5zdGF0cy5uc19naWRmdF9hY2NlcHRzKys7CisJCW5fcGlkcyA9IChmY19nZXRfY3RyZXNwX3B5bGRfbGVuKHJzcF9sZW4pIC8gc2l6ZW9mKHUzMikpOworCQliZmFfdHJjKHBvcnQtPmZjcywgbl9waWRzKTsKKwkJYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhwb3J0LAorCQkJCQkJICAgKHUzMiAqKSAoY3RoZHIgKyAxKSwKKwkJCQkJCSAgIG5fcGlkcyk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBDVF9SU1BfUkVKRUNUOgorCisJCS8qCisJCSAqIENoZWNrIHRoZSByZWFzb24gY29kZSAgJiBleHBsYW5hdGlvbi4KKwkJICogVGhlcmUgbWF5IG5vdCBoYXZlIGJlZW4gYW55IEZDNCBkZXZpY2VzIGluIHRoZSBmYWJyaWMKKwkJICovCisJCXBvcnQtPnN0YXRzLm5zX2dpZGZ0X3JlamVjdHMrKzsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGN0aGRyLT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBjdGhkci0+ZXhwX2NvZGUpOworCisJCWlmICgoY3RoZHItPnJlYXNvbl9jb2RlID09IENUX1JTTl9VTkFCTEVfVE9fUEVSRikKKwkJICAgICYmIChjdGhkci0+ZXhwX2NvZGUgPT0gQ1RfTlNfRVhQX0ZUX05PVF9SRUcpKSB7CisKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9PSyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogZm9yIGFsbCBvdGhlciBlcnJvcnMsIHJldHJ5CisJCQkgKi8KKwkJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy5uc19naWRmdF91bmtub3duX3JzcCsrOworCQliZmFfdHJjKHBvcnQtPmZjcywgY3RoZHItPmNtZF9yc3BfY29kZSk7CisJCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXBvcnQgCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfdC4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfbnNfdGltZW91dCh2b2lkICphcmcpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKilhcmc7CisKKwlucy0+cG9ydC0+c3RhdHMubnNfdGltZW91dHMrKzsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9USU1FT1VUKTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIFBJRCBsaXN0IGluIEdJRF9GVCByZXNwb25zZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX3Byb2Nlc3NfZ2lkZnRfcGlkcyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJICAgdTMyICpwaWRfYnVmLCB1MzIgbl9waWRzKQoreworCXN0cnVjdCBmY2dzX2dpZGZ0X3Jlc3BfcyAqZ2lkZnRfZW50cnk7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTMyICAgICAgICBpaTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG5fcGlkczsgaWkrKykgeworCQlnaWRmdF9lbnRyeSA9IChzdHJ1Y3QgZmNnc19naWRmdF9yZXNwX3MgKikgJnBpZF9idWZbaWldOworCisJCWlmIChnaWRmdF9lbnRyeS0+cGlkID09IHBvcnQtPnBpZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIENoZWNrIGlmIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJICovCisJCXJwb3J0ID0gYmZhX2Zjc19wb3J0X2dldF9ycG9ydF9ieV9waWQocG9ydCwgZ2lkZnRfZW50cnktPnBpZCk7CisJCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogdGhpcyBpcyBhIG5ldyBkZXZpY2UuIGNyZWF0ZSBycG9ydAorCQkJICovCisJCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIGdpZGZ0X2VudHJ5LT5waWQpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHRoaXMgcnBvcnQgYWxyZWFkeSBleGlzdHMKKwkJCSAqLworCQkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCQl9CisKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGdpZGZ0X2VudHJ5LT5waWQpOworCisJCS8qCisJCSAqIGlmIHRoZSBsYXN0IGVudHJ5IGJpdCBpcyBzZXQsIGJhaWwgb3V0LgorCQkgKi8KKwkJaWYgKGdpZGZ0X2VudHJ5LT5sYXN0KQorCQkJcmV0dXJuOworCX0KK30KKworLyoqCisgKiAgZmNzX25zX3B1YmxpYyBGQ1MgbmFtZXNlcnZlciBwdWJsaWMgaW50ZXJmYWNlcworICovCisKKy8qCisgKiBGdW5jdGlvbnMgY2FsbGVkIGJ5IHBvcnQvZmFiLgorICogVGhlc2Ugd2lsbCBzZW5kIHJlbGV2YW50IEV2ZW50cyB0byB0aGUgbnMgc3RhdGUgbWFjaGluZS4KKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X25zX2luaXQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfbnNfcyAqbnMgPSBCRkFfRkNTX0dFVF9OU19GUk9NX1BPUlQocG9ydCk7CisKKwlucy0+cG9ydCA9IHBvcnQ7CisJYmZhX3NtX3NldF9zdGF0ZShucywgYmZhX2Zjc19wb3J0X25zX3NtX29mZmxpbmUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9uc19zICpucyA9IEJGQV9GQ1NfR0VUX05TX0ZST01fUE9SVChwb3J0KTsKKworCW5zLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChucywgTlNTTV9FVkVOVF9QT1JUX09GRkxJTkUpOworfQorCit2b2lkCitiZmFfZmNzX3BvcnRfbnNfb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJbnMtPnBvcnQgPSBwb3J0OworCWJmYV9zbV9zZW5kX2V2ZW50KG5zLCBOU1NNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X25zX3F1ZXJ5KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X25zX3MgKm5zID0gQkZBX0ZDU19HRVRfTlNfRlJPTV9QT1JUKHBvcnQpOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQobnMsIE5TU01fRVZFTlRfTlNfUVVFUlkpOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X25zX2Jvb3RfdGFyZ2V0X2Rpc2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0KQoreworCisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJdTggICAgICAgICBud3duczsKKwl3d25fdCAgICAgICAgICAqd3duczsKKwlpbnQgICAgICAgICAgICAgaWk7CisKKwliZmFfaW9jZmNfZ2V0X2Jvb3R3d25zKHBvcnQtPmZjcy0+YmZhLCAmbnd3bnMsICZ3d25zKTsKKworCWZvciAoaWkgPSAwOyBpaSA8IG53d25zOyArK2lpKSB7CisJCXJwb3J0ID0gYmZhX2Zjc19ycG9ydF9jcmVhdGVfYnlfd3duKHBvcnQsIHd3bnNbaWldKTsKKwkJYmZhX2Fzc2VydChycG9ydCk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jIGIvZHJpdmVycy9zY3NpL2JmYS9wbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZhZjgxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvcGxvZy5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmFfb3NfaW5jLmg+CisjaW5jbHVkZSA8Y3MvYmZhX3Bsb2cuaD4KKyNpbmNsdWRlIDxjcy9iZmFfZGVidWcuaD4KKworc3RhdGljIGludAorcGxrZF92YWxpZGF0ZV9sb2dyZWMoc3RydWN0IGJmYV9wbG9nX3JlY19zICpwbF9yZWMpCit7CisJaWYgKChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9JTlQpCisJICAgICYmIChwbF9yZWMtPmxvZ190eXBlICE9IEJGQV9QTF9MT0dfVFlQRV9TVFJJTkcpKQorCQlyZXR1cm4gMTsKKworCWlmICgocGxfcmVjLT5sb2dfdHlwZSAhPSBCRkFfUExfTE9HX1RZUEVfSU5UKQorCSAgICAmJiAocGxfcmVjLT5sb2dfbnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfcGxvZ19hZGQoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2csIHN0cnVjdCBiZmFfcGxvZ19yZWNfcyAqcGxfcmVjKQoreworCXUxNiAgICAgICAgdGFpbDsKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgKnBsX3JlY3A7CisKKwlpZiAocGxvZy0+cGxvZ19lbmFibGVkID09IDApCisJCXJldHVybjsKKworCWlmIChwbGtkX3ZhbGlkYXRlX2xvZ3JlYyhwbF9yZWMpKSB7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwl0YWlsID0gcGxvZy0+dGFpbDsKKworCXBsX3JlY3AgPSAmKHBsb2ctPnBsb2dfcmVjc1t0YWlsXSk7CisKKwliZmFfb3NfbWVtY3B5KHBsX3JlY3AsIHBsX3JlYywgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJcGxfcmVjcC0+dHYgPSBCRkFfVFJDX1RTKHBsb2cpOworCUJGQV9QTF9MT0dfUkVDX0lOQ1IocGxvZy0+dGFpbCk7CisKKwlpZiAocGxvZy0+aGVhZCA9PSBwbG9nLT50YWlsKQorCQlCRkFfUExfTE9HX1JFQ19JTkNSKHBsb2ctPmhlYWQpOworfQorCit2b2lkCitiZmFfcGxvZ19pbml0KHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nKQoreworCWJmYV9vc19tZW1zZXQoKGNoYXIgKilwbG9nLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9wbG9nX3MpKTsKKworCWJmYV9vc19tZW1jcHkocGxvZy0+cGxvZ19zaWcsIEJGQV9QTF9TSUdfU1RSLCBCRkFfUExfU0lHX0xFTik7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworCXBsb2ctPnBsb2dfZW5hYmxlZCA9IDE7Cit9CisKK3ZvaWQKK2JmYV9wbG9nX3N0cihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIGNoYXIgKmxvZ19zdHIpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfU1RSSU5HOworCQlscC5taXNjID0gbWlzYzsKKwkJc3RybmNweShscC5sb2dfZW50cnkuc3RyaW5nX2xvZywgbG9nX3N0ciwKKwkJCUJGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMSk7CisJCWxwLmxvZ19lbnRyeS5zdHJpbmdfbG9nW0JGQV9QTF9TVFJJTkdfTE9HX1NaIC0gMV0gPSAnXDAnOworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ludGFycihzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJdTE2IG1pc2MsIHUzMiAqaW50YXJyLCB1MzIgbnVtX2ludHMpCit7CisJc3RydWN0IGJmYV9wbG9nX3JlY19zICBscDsKKwl1MzIgICAgICAgIGk7CisKKwlpZiAobnVtX2ludHMgPiBCRkFfUExfSU5UX0xPR19TWikKKwkJbnVtX2ludHMgPSBCRkFfUExfSU5UX0xPR19TWjsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKwkJbHAubWlkID0gbWlkOworCQlscC5laWQgPSBldmVudDsKKwkJbHAubG9nX3R5cGUgPSBCRkFfUExfTE9HX1RZUEVfSU5UOworCQlscC5taXNjID0gbWlzYzsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludHM7IGkrKykKKwkJCWJmYV9vc19hc3NpZ24obHAubG9nX2VudHJ5LmludF9sb2dbaV0sCisJCQkJCWludGFycltpXSk7CisKKwkJbHAubG9nX251bV9pbnRzID0gKHU4KSBudW1faW50czsKKworCQliZmFfcGxvZ19hZGQocGxvZywgJmxwKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyKHN0cnVjdCBiZmFfcGxvZ19zICpwbG9nLCBlbnVtIGJmYV9wbG9nX21pZCBtaWQsCisJCQllbnVtIGJmYV9wbG9nX2VpZCBldmVudCwKKwkJCXUxNiBtaXNjLCBzdHJ1Y3QgZmNoc19zICpmY2hkcikKK3sKKwlzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MgIGxwOworCXUzMiAgICAgICAqdG1wX2ludCA9ICh1MzIgKikgZmNoZHI7CisJdTMyICAgICAgICBpbnRzW0JGQV9QTF9JTlRfTE9HX1NaXTsKKworCWlmIChwbG9nLT5wbG9nX2VuYWJsZWQpIHsKKwkJYmZhX29zX21lbXNldCgmbHAsIDAsIHNpemVvZihzdHJ1Y3QgYmZhX3Bsb2dfcmVjX3MpKTsKKworCQlpbnRzWzBdID0gdG1wX2ludFswXTsKKwkJaW50c1sxXSA9IHRtcF9pbnRbMV07CisJCWludHNbMl0gPSB0bXBfaW50WzRdOworCisJCWJmYV9wbG9nX2ludGFycihwbG9nLCBtaWQsIGV2ZW50LCBtaXNjLCBpbnRzLCAzKTsKKwl9Cit9CisKK3ZvaWQKK2JmYV9wbG9nX2ZjaGRyX2FuZF9wbChzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZywgZW51bSBiZmFfcGxvZ19taWQgbWlkLAorCQkgICAgICBlbnVtIGJmYV9wbG9nX2VpZCBldmVudCwgdTE2IG1pc2MsIHN0cnVjdCBmY2hzX3MgKmZjaGRyLAorCQkgICAgICB1MzIgcGxkX3cwKQoreworCXN0cnVjdCBiZmFfcGxvZ19yZWNfcyAgbHA7CisJdTMyICAgICAgICp0bXBfaW50ID0gKHUzMiAqKSBmY2hkcjsKKwl1MzIgICAgICAgIGludHNbQkZBX1BMX0lOVF9MT0dfU1pdOworCisJaWYgKHBsb2ctPnBsb2dfZW5hYmxlZCkgeworCQliZmFfb3NfbWVtc2V0KCZscCwgMCwgc2l6ZW9mKHN0cnVjdCBiZmFfcGxvZ19yZWNfcykpOworCisJCWludHNbMF0gPSB0bXBfaW50WzBdOworCQlpbnRzWzFdID0gdG1wX2ludFsxXTsKKwkJaW50c1syXSA9IHRtcF9pbnRbNF07CisJCWludHNbM10gPSBwbGRfdzA7CisKKwkJYmZhX3Bsb2dfaW50YXJyKHBsb2csIG1pZCwgZXZlbnQsIG1pc2MsIGludHMsIDQpOworCX0KK30KKwordm9pZAorYmZhX3Bsb2dfY2xlYXIoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+aGVhZCA9IHBsb2ctPnRhaWwgPSAwOworfQorCit2b2lkCitiZmFfcGxvZ19lbmFibGUoc3RydWN0IGJmYV9wbG9nX3MgKnBsb2cpCit7CisJcGxvZy0+cGxvZ19lbmFibGVkID0gMTsKK30KKwordm9pZAorYmZhX3Bsb2dfZGlzYWJsZShzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlwbG9nLT5wbG9nX2VuYWJsZWQgPSAwOworfQorCitiZmFfYm9vbGVhbl90CitiZmFfcGxvZ19nZXRfc2V0dGluZyhzdHJ1Y3QgYmZhX3Bsb2dfcyAqcGxvZykKK3sKKwlyZXR1cm4oKGJmYV9ib29sZWFuX3QpcGxvZy0+cGxvZ19lbmFibGVkKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Y1OGJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydC5jCkBAIC0wLDAgKzEsMjYxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICBycG9ydC5jIFJlbW90ZSBwb3J0IGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19mY3BpbS5oIgorI2luY2x1ZGUgImZjc19mY3B0bS5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGZjYi9iZmFfZmNiX3Jwb3J0Lmg+CisjaW5jbHVkZSA8YWVuL2JmYV9hZW5fcnBvcnQuaD4KKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlQpOworCisjZGVmaW5lIEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMJCSg1KQorCisvKiBJbiBtaWxsaXNlY3MgKi8KK3N0YXRpYyB1MzIgYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCA9CisJCQlCRkFfRkNTX1JQT1JUX0RFRl9ERUxfVElNRU9VVCAqIDEwMDA7CisKKy8qCisgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucworICovCitzdGF0aWMgc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqYmZhX2Zjc19ycG9ydF9hbGxvYyhzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQkJCQkgICB3d25fdCBwd3duLCB1MzIgcnBpZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfb25saW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF91cGRhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICAgICBzdHJ1Y3QgZmNfbG9naV9zICpwbG9naSk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9mYzRfcGF1c2Uoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfZmM0X3Jlc3VtZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF90aW1lb3V0KHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wbG9naV9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHZvaWQgKnJwb3J0X2NiYXJnLAorCQkJCQkgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9naWRwbl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQkJCSAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgdm9pZCAqY2JhcmcsCisJCQkJCSAgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsCisJCQkJCSAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgdTMyIHJlc2lkX2xlbiwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ28odm9pZCAqcnBvcnRfY2JhcmcsCisJCQkJCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyh2b2lkICpycG9ydF9jYmFyZyk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3BybGkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGZjaHNfcyAqcnhfZmNocywgdTggcmVhc29uX2NvZGUsCisJCQl1OCByZWFzb25fY29kZV9leHBsKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKTsKKy8qKgorICogIGZjc19ycG9ydF9zbSBGQ1MgcnBvcnQgc3RhdGUgbWFjaGluZSBldmVudHMKKyAqLworCitlbnVtIHJwb3J0X2V2ZW50IHsKKwlSUFNNX0VWRU5UX1BMT0dJX1NFTkQgPSAxLAkvKiAgbmV3IHJwb3J0OyBzdGFydCB3aXRoIFBMT0dJICovCisJUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEID0gMiwJLyogIEluYm91bmQgUExPR0kgZnJvbSByZW1vdGUgcG9ydCAqLworCVJQU01fRVZFTlRfUExPR0lfQ09NUCA9IDMsCS8qICBQTE9HSSBjb21wbGV0ZWQgdG8gcnBvcnQgKi8KKwlSUFNNX0VWRU5UX0xPR09fUkNWRCA9IDQsCS8qICBMT0dPIGZyb20gcmVtb3RlIGRldmljZSAqLworCVJQU01fRVZFTlRfTE9HT19JTVAgPSA1LAkvKiAgaW1wbGljaXQgbG9nbyBmb3IgU0xFUiAqLworCVJQU01fRVZFTlRfRkNYUF9TRU5UID0gNiwJLyogIEZyYW1lIGZyb20gaGFzIGJlZW4gc2VudCAqLworCVJQU01fRVZFTlRfREVMRVRFID0gNywJLyogIFJQT1JUIGRlbGV0ZSByZXF1ZXN0ICovCisJUlBTTV9FVkVOVF9TQ04gPSA4LAkvKiAgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiAqLworCVJQU01fRVZFTlRfQUNDRVBURUQgPSA5LC8qICBHb29kIHJlc3BvbnNlIGZyb20gcmVtb3RlIGRldmljZSAqLworCVJQU01fRVZFTlRfRkFJTEVEID0gMTAsCS8qICBSZXF1ZXN0IHRvIHJwb3J0IGZhaWxlZC4gICovCisJUlBTTV9FVkVOVF9USU1FT1VUID0gMTEsCS8qICBScG9ydCBTTSB0aW1lb3V0IGV2ZW50ICovCisJUlBTTV9FVkVOVF9IQ0JfT05MSU5FID0gMTIsCS8qICBCRkEgcnBvcnQgb25saW5lIGNhbGxiYWNrICovCisJUlBTTV9FVkVOVF9IQ0JfT0ZGTElORSA9IDEzLAkvKiAgQkZBIHJwb3J0IG9mZmxpbmUgY2FsbGJhY2sgKi8KKwlSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FID0gMTQsCS8qICBGQy00IG9mZmxpbmUgY29tcGxldGUgKi8KKwlSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFID0gMTUsCS8qICBScG9ydCdzIFBJRCBoYXMgY2hhbmdlZCAqLworCVJQU01fRVZFTlRfQUREUkVTU19ESVNDID0gMTYJLyogIE5lZWQgdG8gRGlzY292ZXIgcnBvcnQncyBQSUQgKi8KK307CisKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkJICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2koc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnlfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvcmN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9sb2dvX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICAgZW51bSBycG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkJICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJCQkgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgc3RydWN0IGJmYV9zbV90YWJsZV9zIHJwb3J0X3NtX3RhYmxlW10gPSB7CisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCksIEJGQV9SUE9SVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKSwgQkZBX1JQT1JUX1BMT0dJfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyksIEJGQV9SUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeSksIEJGQV9SUE9SVF9QTE9HSV9SRVRSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpKSwgQkZBX1JQT1JUX1BMT0dJfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSksIEJGQV9SUE9SVF9PTkxJTkV9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9vbmxpbmUpLCBCRkFfUlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNxdWVyeV9zZW5kaW5nKSwgQkZBX1JQT1JUX05TUVVFUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5KSwgQkZBX1JQT1JUX05TUVVFUll9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKSwgQkZBX1JQT1JUX0FESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fYWRpc2MpLCBCRkFfUlBPUlRfQURJU0N9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdiksIEJGQV9SUE9SVF9MT0dPUkNWfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKSwgQkZBX1JQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSksIEJGQV9SUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21faGNiX29mZmxpbmUpLCBCRkFfUlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KSwgQkZBX1JQT1JUX0xPR09SQ1Z9LAorCXtCRkFfU00oYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpLCBCRkFfUlBPUlRfTE9HT30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyksIEJGQV9SUE9SVF9MT0dPfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSksIEJGQV9SUE9SVF9PRkZMSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpLCBCRkFfUlBPUlRfTlNESVNDfSwKKwl7QkZBX1NNKGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3JldHJ5KSwgQkZBX1JQT1JUX05TRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW50KSwgQkZBX1JQT1JUX05TRElTQ30sCit9OworCisvKioKKyAqIAkJQmVnaW5uaW5nIHN0YXRlLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfU0VORDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19ESVNDOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDWFBfU0VOVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naSk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUExPR0kgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCQkgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBJZ25vcmUsIFNDTiBpcyBwb3NzaWJseSBvbmxpbmUgbm90aWZpY2F0aW9uLgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCXJwb3J0LT5waWQgPSAwOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJCS8qKgorCQkgKiBJZ25vcmUgQkZBIGNhbGxiYWNrLCBvbiBhIFBMT0dJIHJlY2VpdmUgd2UgY2FsbCBiZmEgb2ZmbGluZS4KKwkJICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJLyoKKwkJICogISEgZmFsbCB0aHJvdWdoICEhCisJCSAqLworCisJY2FzZSBSUFNNX0VWRU5UX1RJTUVPVVQ6CisJCXJwb3J0LT5wbG9naV9yZXRyaWVzKys7CisJCWlmIChycG9ydC0+cGxvZ2lfcmV0cmllcyA8IEJGQV9GQ1NfUlBPUlRfTUFYX1JFVFJJRVMpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2kocnBvcnQsIE5VTEwpOworCQl9IGVsc2UgeworCQkJcnBvcnQtPnBpZCA9IDA7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUpOworCQkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCQlycG9ydC0+cGlkID0gMDsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJcnBvcnQtPnBsb2dpX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQkvKgorCQkgKiAhISBmYWxsIHRocm91Z2ggISEKKwkJICovCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9yZXRyeSk7CisJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJYmZhX2Zjc19ycG9ydF90aW1lb3V0LCBycG9ydCwKKwkJCQlCRkFfRkNTX1JFVFJZX1RJTUVPVVQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naWFjY19zZW5kaW5nKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIElnbm9yZSBTQ04gLSB3YWl0IGZvciBQTE9HSSByZXNwb25zZS4KKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9mcmVlKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlQTE9HSSBpcyBjb21wbGV0ZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9ubGluZSBjYWxsYmFjay4gRkMtNHMKKyAqIAkJYXJlIG9mZmxpbmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9vbmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvcmN2KTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBAdG9kbworCQkgKiBJZ25vcmUgU0NOIC0gUExPR0kganVzdCBjb21wbGV0ZWQsIEZDLTQgbG9naW4gc2hvdWxkIGRldGVjdAorCQkgKiBkZXZpY2UgZmFpbHVyZXMuCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJUnBvcnQgaXMgT05MSU5FLiBGQy00cyBhY3RpdmUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBQYXVzZSBGQy00IGFjdGl2aXR5IHRpbGwgcnBvcnQgaXMgYXV0aGVudGljYXRlZC4KKwkJICogSW4gc3dpdGNoZWQgZmFicmljcywgY2hlY2sgcHJlc2VuY2Ugb2YgZGV2aWNlIGluIG5hbWVzZXJ2ZXIKKwkJICogZmlyc3QuCisJCSAqLworCQliZmFfZmNzX3Jwb3J0X2ZjNF9wYXVzZShycG9ydCk7CisKKwkJaWYgKGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHJwb3J0LT5wb3J0LT5mYWJyaWMpKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fYWRpc2Nfc2VuZGluZyk7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfYWRpc2MocnBvcnQsIE5VTEwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAkJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gTlMgcXVlcnkgaXMgYmVpbmcgc2VudAorICogCQlwcmlvciB0byBBRElTQyBhdXRoZW50aWNhdGlvbiB3aXRoIHJwb3J0LiBGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zcXVlcnkpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQkvKioKKwkJICogaWdub3JlIFNDTiwgd2FpdCBmb3IgcmVzcG9uc2UgdG8gcXVlcnkgaXRzZWxmCisJCSAqLworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCUFuIFNDTiBldmVudCBpcyByZWNlaXZlZCBpbiBPTkxJTkUgc3RhdGUuIE5TIHF1ZXJ5IGlzIHNlbnQgdG8gcnBvcnQuCisgKiAJRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNxdWVyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9BQ0NFUFRFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2FkaXNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCQlycG9ydC0+bnNfcmV0cmllcysrOworCQlpZiAocnBvcnQtPm5zX3JldHJpZXMgPCBCRkFfRkNTX1JQT1JUX01BWF9SRVRSSUVTKSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc3F1ZXJ5X3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfU0NOOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29yY3YpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJQW4gU0NOIGV2ZW50IGlzIHJlY2VpdmVkIGluIE9OTElORSBzdGF0ZS4gQURJU0MgaXMgYmVpbmcgc2VudCBmb3IKKyAqIAlhdXRoZW50aWNhdGluZyB3aXRoIHJwb3J0LiBGQy00cyBhcmUgcGF1c2VkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9hZGlzY19zZW5kaW5nKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJICAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2FkaXNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fSU1QOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlBbiBTQ04gZXZlbnQgaXMgcmVjZWl2ZWQgaW4gT05MSU5FIHN0YXRlLiBBRElTQyBpcyB0byBycG9ydC4KKyAqIAkJRkMtNHMgYXJlIHBhdXNlZC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fYWRpc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb25saW5lKTsKKwkJYmZhX2Zjc19ycG9ydF9mYzRfcmVzdW1lKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfUkNWRDoKKwkJLyoqCisJCSAqIFRvbyBjb21wbGV4IHRvIGNsZWFudXAgRkMtNCAmIHJwb3J0IGFuZCB0aGVuIGFjYyB0byBQTE9HSS4KKwkJICogQXQgbGVhc3QgZ28gb2ZmbGluZSB3aGVuIGEgUExPR0kgaXMgcmVjZWl2ZWQuCisJCSAqLworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIFJQU01fRVZFTlRfRkFJTEVEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfb2ZmbGluZSk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X2xvZ29zZW5kKTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24ocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJCS8qKgorCQkgKiBhbHJlYWR5IHByb2Nlc3NpbmcgUlNDTgorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwb3J0LT5mY3hwKTsKKwkJYmZhX2Zjc19ycG9ydF9vZmZsaW5lX2FjdGlvbihycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3Jjdik7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X29mZmxpbmVfYWN0aW9uKHJwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGhhcyBzZW50IExPR08uIEF3YWl0aW5nIEZDLTQgb2ZmbGluZSBjb21wbGV0aW9uIGNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkM0X09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGNiX2xvZ29yY3YpOworCQliZmFfcnBvcnRfb2ZmbGluZShycG9ydC0+YmZhX3Jwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlMT0dPIG5lZWRzIHRvIGJlIHNlbnQgdG8gcnBvcnQuIEF3YWl0aW5nIEZDLTQgb2ZmbGluZSBjb21wbGV0aW9uCisgKiAJCWNhbGxiYWNrLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9mYzRfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9sb2dvc2VuZCk7CisJCWJmYV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5iZmFfcnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIAlScG9ydCBpcyBnb2luZyBvZmZsaW5lLiBBd2FpdGluZyBGQy00IG9mZmxpbmUgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fZmM0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0ZDNF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKTsKKwkJYmZhX3Jwb3J0X29mZmxpbmUocnBvcnQtPmJmYV9ycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCS8qKgorCQkgKiBycG9ydCBpcyBhbHJlYWR5IGdvaW5nIG9mZmxpbmUuCisJCSAqIFNDTiAtIGlnbm9yZSBhbmQgd2FpdCB0aWxsIHRyYW5zaXRpb25pbmcgdG8gb2ZmbGluZSBzdGF0ZQorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2ZjNF9sb2dvc2VuZCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQXdhaXRpbmcgQkZBIHJwb3J0IG9mZmxpbmUKKyAqIAkJY2FsbGJhY2suCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2hjYl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORToKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfb25saW5lKHJwb3J0LT5wb3J0KSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIElnbm9yZSwgYWxyZWFkeSBvZmZsaW5lLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIG9mZmxpbmUuIEZDLTRzIGFyZSBvZmZsaW5lLiBBd2FpdGluZyBCRkEgcnBvcnQgb2ZmbGluZQorICogCQljYWxsYmFjayB0byBzZW5kIExPR08gYWNjZXB0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3JjdihzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfSENCX09GRkxJTkU6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAocnBvcnQtPnBpZCkKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCS8qCisJCSAqIElmIHRoZSBscG9ydCBpcyBvbmxpbmUgYW5kIGlmIHRoZSBycG9ydCBpcyBub3QgYSB3ZWxsIGtub3duCisJCSAqIGFkZHJlc3MgcG9ydCwgd2UgdHJ5IHRvIHJlLWRpc2NvdmVyIHRoZSByLXBvcnQuCisJCSAqLworCQlpZiAoYmZhX2Zjc19wb3J0X2lzX29ubGluZShycG9ydC0+cG9ydCkKKwkJICAgICYmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBpZiBpdCBpcyBub3QgYSB3ZWxsIGtub3duIGFkZHJlc3MsIHJlc2V0IHRoZSBwaWQgdG8KKwkJCSAqCisJCQkgKi8KKwkJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oY2Jfb2ZmbGluZSk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIElnbm9yZSAtIGFscmVhZHkgcHJvY2Vzc2luZyBhIExPR08uCisJCSAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIFJwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZDLTRzIGFyZSBvZmZsaW5lLiBBd2FpdGluZyBCRkEgcnBvcnQgb2ZmbGluZQorICogY2FsbGJhY2sgdG8gc2VuZCBMT0dPLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9oY2JfbG9nb3NlbmQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkgICAgICBlbnVtIHJwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUFNNX0VWRU5UX0hDQl9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiAJCVJwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZDLTRzIGFyZSBvZmZsaW5lLiBMT0dPIGlzIGJlaW5nIHNlbnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX2xvZ29fc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfRkNYUF9TRU5UOgorCQkvKgorCQkgKiBPbmNlIExPR08gaXMgc2VudCwgd2UgZG9ub3Qgd2FpdCBmb3IgdGhlIHJlc3BvbnNlCisJCSAqLworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlScG9ydCBpcyBvZmZsaW5lLiBGQy00cyBhcmUgb2ZmbGluZS4gQkZBIHJwb3J0IGlzIG9mZmxpbmUuCisgKiAJCVRpbWVyIGFjdGl2ZSB0byBkZWxldGUgc3RhbGUgcnBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV91bmluaXQpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9TQ046CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19zZW5kaW5nKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCXJwb3J0LT5uc19yZXRyaWVzID0gMDsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX3Bsb2dpYWNjKHJwb3J0LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1NFTkQ6CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpX3NlbmRpbmcpOworCQlycG9ydC0+cGxvZ2lfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCVJwb3J0IGFkZHJlc3MgaGFzIGNoYW5nZWQuIE5hbWVzZXJ2ZXIgZGlzY292ZXJ5IHJlcXVlc3QgaXMgYmVpbmcgc2VudC4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQkJZW51bSBycG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfd2FsbG9jX2NhbmNlbChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUpOworCQliZmFfZmNzX3Jwb3J0X2ZyZWUocnBvcnQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3Bsb2dpYWNjX3NlbmRpbmcpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naWFjYyhycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfTE9HT19SQ1ZEOgorCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9TRU5EOgorCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRToKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOwkvKiByZXNldCB0aGUgcmV0cnkgY291bnQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfTE9HT19JTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlKTsKKwkJYmZhX3RpbWVyX3N0YXJ0KHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT50aW1lciwKKwkJCQliZmFfZmNzX3Jwb3J0X3RpbWVvdXQsIHJwb3J0LAorCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9QTE9HSV9DT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX2hhbF9vbmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHJwb3J0LT5mY3MtPmJmYSwgJnJwb3J0LT5mY3hwX3dxZSk7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogCQlOYW1lc2VydmVyIGRpc2NvdmVyeSBmYWlsZWQuIFdhaXRpbmcgZm9yIHRpbWVvdXQgdG8gcmV0cnkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NtX25zZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCSAgICAgIGVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfVElNRU9VVDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbihycG9ydCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwljYXNlIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0U6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQliZmFfdGltZXJfc3RvcCgmcnBvcnQtPnRpbWVyKTsKKwkJcnBvcnQtPm5zX3JldHJpZXMgPSAwOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZycG9ydC0+dGltZXIpOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHJwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIFJQU01fRVZFTlRfUExPR0lfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9oYWxfb25saW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnJwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcnBvcnRfaGFsX29ubGluZShycG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogUnBvcnQgYWRkcmVzcyBoYXMgY2hhbmdlZC4gTmFtZXNlcnZlciBkaXNjb3ZlcnkgcmVxdWVzdCBpcyBzZW50LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VudChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCWVudW0gcnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQU01fRVZFTlRfQUNDRVBURUQ6CisJY2FzZSBSUFNNX0VWRU5UX0FERFJFU1NfQ0hBTkdFOgorCQlpZiAocnBvcnQtPnBpZCkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9wbG9naV9zZW5kaW5nKTsKKwkJCWJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naShycG9ydCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQliZmFfc21fc2V0X3N0YXRlKHJwb3J0LAorCQkJCQkgYmZhX2Zjc19ycG9ydF9zbV9uc2Rpc2Nfc2VuZGluZyk7CisJCQlycG9ydC0+bnNfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4ocnBvcnQsIE5VTEwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0ZBSUxFRDoKKwkJcnBvcnQtPm5zX3JldHJpZXMrKzsKKwkJaWYgKHJwb3J0LT5uc19yZXRyaWVzIDwgQkZBX0ZDU19SUE9SVF9NQVhfUkVUUklFUykgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwKKwkJCQkJIGJmYV9mY3NfcnBvcnRfc21fbnNkaXNjX3NlbmRpbmcpOworCQkJYmZhX2Zjc19ycG9ydF9zZW5kX2dpZHBuKHJwb3J0LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXJwb3J0LT5waWQgPSAwOworCQkJYmZhX3NtX3NldF9zdGF0ZShycG9ydCwgYmZhX2Zjc19ycG9ydF9zbV9vZmZsaW5lKTsKKwkJCWJmYV90aW1lcl9zdGFydChycG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+dGltZXIsCisJCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJCWJmYV9mY3NfcnBvcnRfZGVsX3RpbWVvdXQpOworCQl9OworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJCWJmYV9mY3NfcnBvcnRfZnJlZShycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX1JDVkQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fcGxvZ2lhY2Nfc2VuZGluZyk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MocnBvcnQsIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgUlBTTV9FVkVOVF9MT0dPX0lNUDoKKwkJcnBvcnQtPnBpZCA9IDA7CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfcnBvcnRfdGltZW91dCwgcnBvcnQsCisJCQkJYmZhX2Zjc19ycG9ydF9kZWxfdGltZW91dCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1NDTjoKKwkJLyoqCisJCSAqIGlnbm9yZSwgd2FpdCBmb3IgTlMgcXVlcnkgcmVzcG9uc2UKKwkJICovCisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX0xPR09fUkNWRDoKKwkJLyoqCisJCSAqIE5vdCBsb2dnZWQtaW4geWV0LiBBY2NlcHQgTE9HTy4KKwkJICovCisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sb2dvX2FjYyhycG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBSUFNNX0VWRU5UX1BMT0dJX0NPTVA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBvcnQsIGJmYV9mY3NfcnBvcnRfc21faGFsX29ubGluZSk7CisJCWJmYV9mY3hwX2Rpc2NhcmQocnBvcnQtPmZjeHApOworCQliZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUocnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Jwb3J0X3ByaXZhdGUgRkNTIFJQT1JUIHByb3ZhdGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9wbG9naSwgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX3Bsb2dpX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkgICAgIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3Jwb3J0X3Bsb2dpX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXJwb3J0LCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisKKwlycG9ydC0+c3RhdHMucGxvZ2lzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2lfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXN0cnVjdCBmY19sb2dpX3MJKnBsb2dpX3JzcDsKKwlzdHJ1Y3QgZmNfbHNfcmp0X3MJKmxzX3JqdDsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICp0d2luOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcmVxX3N0YXR1cyk7CisJCXJwb3J0LT5zdGF0cy5wbG9naV9mYWlsZWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkFJTEVEKTsKKwkJcmV0dXJuOworCX0KKworCXBsb2dpX3JzcCA9IChzdHJ1Y3QgZmNfbG9naV9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwkvKioKKwkgKiBDaGVjayBmb3IgZmFpbHVyZSBmaXJzdC4KKwkgKi8KKwlpZiAocGxvZ2lfcnNwLT5lbHNfY21kLmVsc19jb2RlICE9IEZDX0VMU19BQ0MpIHsKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKworCQlycG9ydC0+c3RhdHMucGxvZ2lfcmVqZWN0cysrOworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlyZXR1cm47CisJfQorCisJLyoqCisJICogUExPR0kgaXMgY29tcGxldGUuIE1ha2Ugc3VyZSB0aGlzIGRldmljZSBpcyBub3Qgb25lIG9mIHRoZSBrbm93bgorCSAqIGRldmljZSB3aXRoIGEgbmV3IEZDIHBvcnQgYWRkcmVzcy4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoKHFlLCAmcnBvcnQtPnBvcnQtPnJwb3J0X3EpIHsKKwkJdHdpbiA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWlmICh0d2luID09IHJwb3J0KQorCQkJY29udGludWU7CisJCWlmICghcnBvcnQtPnB3d24gJiYgKHBsb2dpX3JzcC0+cG9ydF9uYW1lID09IHR3aW4tPnB3d24pKSB7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHR3aW4tPnBpZCk7CisJCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJCQkvKgorCQkJICogVXBkYXRlIHBsb2dpIHN0YXRzIGluIHR3aW4KKwkJCSAqLworCQkJdHdpbi0+c3RhdHMucGxvZ2lzICs9IHJwb3J0LT5zdGF0cy5wbG9naXM7CisJCQl0d2luLT5zdGF0cy5wbG9naV9yZWplY3RzICs9IHJwb3J0LT5zdGF0cy5wbG9naV9yZWplY3RzOworCQkJdHdpbi0+c3RhdHMucGxvZ2lfdGltZW91dHMgKz0KKwkJCQlycG9ydC0+c3RhdHMucGxvZ2lfdGltZW91dHM7CisJCQl0d2luLT5zdGF0cy5wbG9naV9mYWlsZWQgKz0gcnBvcnQtPnN0YXRzLnBsb2dpX2ZhaWxlZDsKKwkJCXR3aW4tPnN0YXRzLnBsb2dpX3JjdmQgKz0gcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQ7CisJCQl0d2luLT5zdGF0cy5wbG9naV9hY2NzKys7CisKKwkJCWJmYV9mY3NfcnBvcnRfZGVsZXRlKHJwb3J0KTsKKworCQkJYmZhX2Zjc19ycG9ydF91cGRhdGUodHdpbiwgcGxvZ2lfcnNwKTsKKwkJCXR3aW4tPnBpZCA9IHJzcF9mY2hzLT5zX2lkOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodHdpbiwgUlBTTV9FVkVOVF9QTE9HSV9DT01QKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qKgorCSAqIE5vcm1hbCBsb2dpbiBwYXRoIC0tIG5vIGV2aWwgdHdpbnMuCisJICovCisJcnBvcnQtPnN0YXRzLnBsb2dpX2FjY3MrKzsKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2lfcnNwKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9BQ0NFUFRFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2Modm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfcGxvZ2lhY2MsIHJwb3J0KTsKKwkJcmV0dXJuOworCX0KKwlycG9ydC0+ZmN4cCA9IGZjeHA7CisKKwlsZW4gPSBmY19wbG9naV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkJIGJmYV9mY3NfcG9ydF9nZXRfZmNpZChwb3J0KSwgcnBvcnQtPnJlcGx5X294aWQsCisJCQkJIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24sCisJCQkJIGJmYV9wcG9ydF9nZXRfbWF4ZnJzaXplKHBvcnQtPmZjcy0+YmZhKSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYyh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9hZGlzYywgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2FkaXNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCBycG9ydC0+cGlkLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsCisJCQkgICAgIHBvcnQtPnBvcnRfY2ZnLnB3d24sIHBvcnQtPnBvcnRfY2ZnLm53d24pOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgYmZhX2Zjc19ycG9ydF9hZGlzY19yZXNwb25zZSwKKwkJICAgICAgcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCXJwb3J0LT5zdGF0cy5hZGlzY19zZW50Kys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfYWRpc2NfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLCB1MzIgcnNwX2xlbiwKKwkJCSAgICAgdTMyIHJlc2lkX2xlbiwgc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKWNiYXJnOworCXZvaWQgICAgICAgICAgICpwbGQgPSBiZmFfZmN4cF9nZXRfcnNwYnVmKGZjeHApOworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCisJaWYgKHJlcV9zdGF0dXMgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHJlcV9zdGF0dXMpOworCQlycG9ydC0+c3RhdHMuYWRpc2NfZmFpbGVkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZmNfYWRpc2NfcnNwX3BhcnNlKChzdHJ1Y3QgZmNfYWRpc2NfcyAqKXBsZCwgcnNwX2xlbiwgcnBvcnQtPnB3d24sCisJCXJwb3J0LT5ud3duKSAgPT0gRkNfUEFSU0VfT0spIHsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX2FjY3MrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUNDRVBURUQpOworCQlyZXR1cm47CisJfQorCisJcnBvcnQtPnN0YXRzLmFkaXNjX3JlamVjdHMrKzsKKwlsc19yanQgPSBwbGQ7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPmVsc19jbWQuZWxzX2NvZGUpOworCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlX2V4cGwpOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfZ2lkcG4odm9pZCAqcnBvcnRfY2JhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycG9ydF9jYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlmY3hwID0gZmN4cF9hbGxvY2VkID8gZmN4cF9hbGxvY2VkIDogYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKSB7CisJCWJmYV9mY3hwX2FsbG9jX3dhaXQocG9ydC0+ZmNzLT5iZmEsICZycG9ydC0+ZmN4cF93cWUsCisJCQkJICAgIGJmYV9mY3NfcnBvcnRfc2VuZF9naWRwbiwgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2dpZHBuX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLAorCQkJICAgICBiZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIDAsIHJwb3J0LT5wd3duKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcnBvcnRfZ2lkcG5fcmVzcG9uc2UsCisJCSAgICAgICh2b2lkICopcnBvcnQsIEZDX01BWF9QRFVTWiwgRkNfUkFfVE9WKTsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZDWFBfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2dpZHBuX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsIHZvaWQgKmNiYXJnLAorCQkJICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQkgICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICp0d2luOworCXN0cnVjdCBsaXN0X2hlYWQgKnFlOworCXN0cnVjdCBjdF9oZHJfcyAgICAgICAJKmN0aGRyOworCXN0cnVjdCBmY2dzX2dpZHBuX3Jlc3BfcwkqZ2lkcG5fcnNwOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cHd3bik7CisKKwljdGhkciA9IChzdHJ1Y3QgY3RfaGRyX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwljdGhkci0+Y21kX3JzcF9jb2RlID0gYmZhX29zX250b2hzKGN0aGRyLT5jbWRfcnNwX2NvZGUpOworCisJaWYgKGN0aGRyLT5jbWRfcnNwX2NvZGUgPT0gQ1RfUlNQX0FDQ0VQVCkgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgcGlkIGlzIHRoZSBzYW1lIGFzIGJlZm9yZS4KKwkJICovCisJCWdpZHBuX3JzcCA9IChzdHJ1Y3QgZmNnc19naWRwbl9yZXNwX3MgKikgKGN0aGRyICsgMSk7CisKKwkJaWYgKGdpZHBuX3JzcC0+ZGFwID09IHJwb3J0LT5waWQpIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UgaXMgb25saW5lCisJCQkgKi8KKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FDQ0VQVEVEKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UncyBQSUQgaGFzIGNoYW5nZWQuIFdlIG5lZWQgdG8gY2xlYW51cCBhbmQKKwkJCSAqIHJlLWxvZ2luLiBJZiB0aGVyZSBpcyBhbm90aGVyIGRldmljZSB3aXRoIHRoZSB0aGUKKwkJCSAqIG5ld2x5IGRpc2NvdmVyZWQgcGlkLCBzZW5kIGFuIHNjbiBub3RpY2Ugc28gdGhhdCBpdHMKKwkJCSAqIG5ldyBwaWQgY2FuIGJlIGRpc2NvdmVyZWQuCisJCQkgKi8KKwkJCWxpc3RfZm9yX2VhY2gocWUsICZycG9ydC0+cG9ydC0+cnBvcnRfcSkgeworCQkJCXR3aW4gPSAoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqKXFlOworCQkJCWlmICh0d2luID09IHJwb3J0KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoZ2lkcG5fcnNwLT5kYXAgPT0gdHdpbi0+cGlkKSB7CisJCQkJCWJmYV90cmMocnBvcnQtPmZjcywgdHdpbi0+cGlkKTsKKwkJCQkJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKworCQkJCQl0d2luLT5waWQgPSAwOworCQkJCQliZmFfc21fc2VuZF9ldmVudCh0d2luLAorCQkJCQkJUlBTTV9FVkVOVF9BRERSRVNTX0NIQU5HRSk7CisJCQkJfQorCQkJfQorCQkJcnBvcnQtPnBpZCA9IGdpZHBuX3JzcC0+ZGFwOworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfQUREUkVTU19DSEFOR0UpOworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJlamVjdCBSZXNwb25zZQorCSAqLworCXN3aXRjaCAoY3RoZHItPnJlYXNvbl9jb2RlKSB7CisJY2FzZSBDVF9SU05fTE9HSUNBTF9CVVNZOgorCQkvKgorCQkgKiBOZWVkIHRvIHJldHJ5CisJCSAqLworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIENUX1JTTl9VTkFCTEVfVE9fUEVSRjoKKwkJLyoKKwkJICogZGV2aWNlIGRvZXNuJ3QgZXhpc3QgOiBTdGFydCB0aW1lciB0byBjbGVhbnVwIHRoaXMgbGF0ZXIuCisJCSAqLworCQliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9GQUlMRUQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0ZBSUxFRCk7CisJCWJyZWFrOworCX0KK30KKworLyoqCisgKiAgICBDYWxsZWQgdG8gc2VuZCBhIGxvZ291dCB0byB0aGUgcnBvcnQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbyh2b2lkICpycG9ydF9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwb3J0X2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJdTE2ICAgICAgICBsZW47CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJcG9ydCA9IHJwb3J0LT5wb3J0OworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBvcnQtPmZjeHBfd3FlLAorCQkJCSAgICBiZmFfZmNzX3Jwb3J0X3NlbmRfbG9nbywgcnBvcnQpOworCQlyZXR1cm47CisJfQorCXJwb3J0LT5mY3hwID0gZmN4cDsKKworCWxlbiA9IGZjX2xvZ29fYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAwLAorCQkJICAgIGJmYV9mY3NfcG9ydF9nZXRfcHd3bihwb3J0KSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBycG9ydCwgRkNfTUFYX1BEVVNaLAorCQkgICAgICBGQ19FRF9UT1YpOworCisJcnBvcnQtPnN0YXRzLmxvZ29zKys7CisJYmZhX2ZjeHBfZGlzY2FyZChycG9ydC0+ZmN4cCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkNYUF9TRU5UKTsKK30KKworLyoqCisgKiAgICBTZW5kIEFDQyBmb3IgYSBMT0dPIHJlY2VpdmVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9zZW5kX2xvZ29fYWNjKHZvaWQgKnJwb3J0X2NiYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBvcnRfY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKwl1MTYgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlycG9ydC0+c3RhdHMubG9nb19yY3ZkKys7CisJbGVuID0gZmNfbG9nb19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCBycG9ydC0+cmVwbHlfb3hpZCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgYmZhX3RpbWVyIG9uIHRpbWVyIHRpbWVvdXRzLgorICoKKyAqIAlwYXJhbVtpbl0gCXJwb3J0IAkJCS0gcG9pbnRlciB0byBiZmFfZmNzX3BvcnRfbnNfdC4KKyAqIAlwYXJhbVtvdXRdCXJwb3J0X3N0YXR1cyAJLSBwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0dXMgaW4KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisqICAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF90aW1lb3V0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopYXJnOworCisJcnBvcnQtPnN0YXRzLnBsb2dpX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3Byb2Nlc3NfcHJsaShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19wcmxpX3MgICAgICAqcHJsaTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5zX2lkKTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisKKwlycG9ydC0+c3RhdHMucHJsaV9yY3ZkKys7CisKKwlpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShwb3J0KSkgeworCQkvKgorCQkgKiBUYXJnZXQgTW9kZSA6IExldCB0aGUgZmNwdG0gaGFuZGxlIGl0CisJCSAqLworCQliZmFfZmNzX3Rpbl9yeF9wcmxpKHJwb3J0LT50aW4sIHJ4X2ZjaHMsIGxlbik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIGFyZSBlaXRoZXIgaW4gSW5pdGlhdG9yIG9yIGlwZmMgTW9kZQorCSAqLworCXBybGkgPSAoc3RydWN0IGZjX3BybGlfcyAqKSAocnhfZmNocyArIDEpOworCisJaWYgKHBybGktPnBhcmFtcGFnZS5zZXJ2cGFyYW1zLmluaXRpYXRvcikgeworCQliZmFfdHJjKHJwb3J0LT5mY3MsIHBybGktPnBhcmFtcGFnZS50eXBlKTsKKwkJcnBvcnQtPnNjc2lfZnVuY3Rpb24gPSBCRkFfUlBPUlRfSU5JVElBVE9SOworCQliZmFfZmNzX2l0bmltX2lzX2luaXRpYXRvcihycG9ydC0+aXRuaW0pOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEB0b2RvOiBQUkxJIGZyb20gYSB0YXJnZXQgPworCQkgKi8KKwkJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCQlycG9ydC0+c2NzaV9mdW5jdGlvbiA9IEJGQV9SUE9SVF9UQVJHRVQ7CisJfQorCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfcHJsaV9hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJ4X2ZjaHMtPnNfaWQsCisJCQkJYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCQlwb3J0LT5wb3J0X2NmZy5yb2xlcyk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkgICAgICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBOVUxMLCBOVUxMLCBGQ19NQVhfUERVU1osIDApOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQlzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLCB1MTYgbGVuKQoreworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfcnBzY19zcGVlZF9pbmZvX3Mgc3BlZWRzOworCXN0cnVjdCBiZmFfcHBvcnRfYXR0cl9zIHBwb3J0X2F0dHI7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPmRfaWQpOworCisJcnBvcnQtPnN0YXRzLnJwc2NfcmN2ZCsrOworCXNwZWVkcy5wb3J0X3NwZWVkX2NhcCA9CisJCVJQU0NfU1BFRURfQ0FQXzFHIHwgUlBTQ19TUEVFRF9DQVBfMkcgfCBSUFNDX1NQRUVEX0NBUF80RyB8CisJCVJQU0NfU1BFRURfQ0FQXzhHOworCisJLyoKKwkgKiBnZXQgY3VyZW50IHNwZWVkIGZyb20gcHBvcnQgYXR0cmlidXRlcyBmcm9tIEJGQQorCSAqLworCWJmYV9wcG9ydF9nZXRfYXR0cihwb3J0LT5mY3MtPmJmYSwgJnBwb3J0X2F0dHIpOworCisJc3BlZWRzLnBvcnRfb3Bfc3BlZWQgPSBmY19iZmFfc3BlZWRfdG9fcnBzY19vcGVyc3BlZWQocHBvcnRfYXR0ci5zcGVlZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJaWYgKCFmY3hwKQorCQlyZXR1cm47CisKKwlsZW4gPSBmY19ycHNjX2FjY19idWlsZCgmZmNocywgYmZhX2ZjeHBfZ2V0X3JlcWJ1ZihmY3hwKSwgcnhfZmNocy0+c19pZCwKKwkJCQliZmFfZmNzX3BvcnRfZ2V0X2ZjaWQocG9ydCksIHJ4X2ZjaHMtPm94X2lkLAorCQkJCSZzcGVlZHMpOworCisJYmZhX2ZjeHBfc2VuZChmY3hwLCBOVUxMLCBwb3J0LT5mYWJyaWMtPnZmX2lkLCBwb3J0LT5scF90YWcsIEJGQV9GQUxTRSwKKwkJICAgICAgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwgRkNfTUFYX1BEVVNaLCAwKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfcHJvY2Vzc19hZGlzYyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMsIHUxNiBsZW4pCit7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCXN0cnVjdCBmY19hZGlzY19zICAgICAgKmFkaXNjOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCWJmYV90cmMocG9ydC0+ZmNzLCByeF9mY2hzLT5kX2lkKTsKKworCXJwb3J0LT5zdGF0cy5hZGlzY19yY3ZkKys7CisKKwlpZiAoQkZBX0ZDU19WUE9SVF9JU19UQVJHRVRfTU9ERShwb3J0KSkgeworCQkvKgorCQkgKiBAdG9kbyA6IFRhcmdldCBNb2RlIGhhbmRsaW5nCisJCSAqLworCQliZmFfdHJjKHBvcnQtPmZjcywgcnhfZmNocy0+ZF9pZCk7CisJCWJmYV9hc3NlcnQoMCk7CisJCXJldHVybjsKKwl9CisKKwlhZGlzYyA9IChzdHJ1Y3QgZmNfYWRpc2NfcyAqKSAocnhfZmNocyArIDEpOworCisJLyoKKwkgKiBBY2NlcHQgaWYgdGhlIGl0bmltIGZvciB0aGlzIHJwb3J0IGlzIG9ubGluZS4gRWxzZSByZWplY3QgdGhlIEFESVNDCisJICovCisJaWYgKGJmYV9mY3NfaXRuaW1fZ2V0X29ubGluZV9zdGF0ZShycG9ydC0+aXRuaW0pID09IEJGQV9TVEFUVVNfT0spIHsKKworCQlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHBvcnQtPmZjcyk7CisJCWlmICghZmN4cCkKKwkJCXJldHVybjsKKworCQlsZW4gPSBmY19hZGlzY19hY2NfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJCSByeF9mY2hzLT5zX2lkLAorCQkJCQkgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLAorCQkJCQkgcnhfZmNocy0+b3hfaWQsIHBvcnQtPnBvcnRfY2ZnLnB3d24sCisJCQkJCSBwb3J0LT5wb3J0X2NmZy5ud3duKTsKKworCQliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywKKwkJCSAgICAgIEJGQV9GQUxTRSwgRkNfQ0xBU1NfMywgbGVuLCAmZmNocywgTlVMTCwgTlVMTCwKKwkJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7CisJfSBlbHNlIHsKKwkJcnBvcnQtPnN0YXRzLmFkaXNjX3JlamVjdGVkKys7CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQocnBvcnQsIHJ4X2ZjaHMsCisJCQkJCSAgRkNfTFNfUkpUX1JTTl9VTkFCTEVfVE9fUEVSRl9DTUQsCisJCQkJCSAgRkNfTFNfUkpUX0VYUF9MT0dJTl9SRVFVSVJFRCk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2hhbF9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisJc3RydWN0IGJmYV9ycG9ydF9pbmZvX3MgcnBvcnRfaW5mbzsKKworCXJwb3J0X2luZm8ucGlkID0gcnBvcnQtPnBpZDsKKwlycG9ydF9pbmZvLmxvY2FsX3BpZCA9IHBvcnQtPnBpZDsKKwlycG9ydF9pbmZvLmxwX3RhZyA9IHBvcnQtPmxwX3RhZzsKKwlycG9ydF9pbmZvLnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlycG9ydF9pbmZvLnZmX2VuID0gcG9ydC0+ZmFicmljLT5pc192ZjsKKwlycG9ydF9pbmZvLmZjX2NsYXNzID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9pbmZvLmNpc2MgPSBycG9ydC0+Y2lzYzsKKwlycG9ydF9pbmZvLm1heF9mcm1zeiA9IHJwb3J0LT5tYXhmcnNpemU7CisJYmZhX3Jwb3J0X29ubGluZShycG9ydC0+YmZhX3Jwb3J0LCAmcnBvcnRfaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2ZjNF9wYXVzZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX2luaXRpYXRvcihycG9ydC0+cG9ydCkpCisJCWJmYV9mY3NfaXRuaW1fcGF1c2UocnBvcnQtPml0bmltKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHJwb3J0LT5wb3J0KSkKKwkJYmZhX2Zjc190aW5fcGF1c2UocnBvcnQtPnRpbik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2ZjNF9yZXN1bWUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX2l0bmltX3Jlc3VtZShycG9ydC0+aXRuaW0pOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocnBvcnQtPnBvcnQpKQorCQliZmFfZmNzX3Rpbl9yZXN1bWUocnBvcnQtPnRpbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfYWxsb2Moc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBwd3duLCB1MzIgcnBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19zICpmY3MgPSBwb3J0LT5mY3M7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2OworCisJLyoqCisJICogYWxsb2NhdGUgcnBvcnQKKwkgKi8KKwlpZiAoYmZhX2ZjYl9ycG9ydF9hbGxvYyhmY3MtPmJmYWQsICZycG9ydCwgJnJwb3J0X2RydikKKwkgICAgIT0gQkZBX1NUQVRVU19PSykgeworCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogSW5pdGlhbGl6ZSByLXBvcnQKKwkgKi8KKwlycG9ydC0+cG9ydCA9IHBvcnQ7CisJcnBvcnQtPmZjcyA9IGZjczsKKwlycG9ydC0+cnBfZHJ2ID0gcnBvcnRfZHJ2OworCXJwb3J0LT5waWQgPSBycGlkOworCXJwb3J0LT5wd3duID0gcHd3bjsKKworCS8qKgorCSAqIGFsbG9jYXRlIEJGQSBycG9ydAorCSAqLworCXJwb3J0LT5iZmFfcnBvcnQgPSBiZmFfcnBvcnRfY3JlYXRlKHBvcnQtPmZjcy0+YmZhLCBycG9ydCk7CisJaWYgKCFycG9ydC0+YmZhX3Jwb3J0KSB7CisJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoqCisJICogYWxsb2NhdGUgRkMtNHMKKwkgKi8KKwliZmFfYXNzZXJ0KGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkgXgorCQkgICBiZmFfZmNzX3BvcnRfaXNfdGFyZ2V0KHBvcnQpKTsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCXJwb3J0LT5pdG5pbSA9IGJmYV9mY3NfaXRuaW1fY3JlYXRlKHJwb3J0KTsKKwkJaWYgKCFycG9ydC0+aXRuaW0pIHsKKwkJCWJmYV90cmMoZmNzLCBycGlkKTsKKwkJCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJCQlrZnJlZShycG9ydF9kcnYpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkgeworCQlycG9ydC0+dGluID0gYmZhX2Zjc190aW5fY3JlYXRlKHJwb3J0KTsKKwkJaWYgKCFycG9ydC0+dGluKSB7CisJCQliZmFfdHJjKGZjcywgcnBpZCk7CisJCQliZmFfcnBvcnRfZGVsZXRlKHJwb3J0LT5iZmFfcnBvcnQpOworCQkJa2ZyZWUocnBvcnRfZHJ2KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJYmZhX2Zjc19wb3J0X2FkZF9ycG9ydChwb3J0LCBycG9ydCk7CisKKwliZmFfc21fc2V0X3N0YXRlKHJwb3J0LCBiZmFfZmNzX3Jwb3J0X3NtX3VuaW5pdCk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIFJwb3J0IEZlYXR1cmVzKFJQRikgU3ViIE1vZHVsZQorCSAqLworCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQliZmFfZmNzX3JwZl9pbml0KHJwb3J0KTsKKworCXJldHVybiBycG9ydDsKK30KKworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9mcmVlKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJLyoqCisJICogLSBkZWxldGUgRkMtNHMKKwkgKiAtIGRlbGV0ZSBCRkEgcnBvcnQKKwkgKiAtIHJlbW92ZSBmcm9tIHF1ZXVlIG9mIHJwb3J0cworCSAqLworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKQorCQliZmFfZmNzX2l0bmltX2RlbGV0ZShycG9ydC0+aXRuaW0pOworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX2RlbGV0ZShycG9ydC0+dGluKTsKKworCWJmYV9ycG9ydF9kZWxldGUocnBvcnQtPmJmYV9ycG9ydCk7CisJYmZhX2Zjc19wb3J0X2RlbF9ycG9ydChwb3J0LCBycG9ydCk7CisJa2ZyZWUocnBvcnQtPnJwX2Rydik7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkgICAgICAgZW51bSBiZmFfcnBvcnRfYWVuX2V2ZW50IGV2ZW50LAorCQkgICAgICAgc3RydWN0IGJmYV9ycG9ydF9hZW5fZGF0YV9zICpkYXRhKQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBycG9ydC0+ZmNzLT5sb2dtOworCXd3bl90ICAgICAgICAgICBscHd3biA9IGJmYV9mY3NfcG9ydF9nZXRfcHd3bihycG9ydC0+cG9ydCk7CisJd3duX3QgICAgICAgICAgIHJwd3duID0gcnBvcnQtPnB3d247CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAgcnB3d25fcHRyW0JGQV9TVFJJTkdfMzJdOworCWNoYXIgICAgICAgICAgICpwcmlvX3N0cltdID0geyAidW5rbm93biIsICJoaWdoIiwgIm1lZGl1bSIsICJsb3ciIH07CisKKwl3d24yc3RyKGxwd3duX3B0ciwgbHB3d24pOworCXd3bjJzdHIocnB3d25fcHRyLCBycHd3bik7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfUlBPUlRfQUVOX09OTElORToKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfT05MSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9PRkZMSU5FOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9PRkZMSU5FLCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9ESVNDT05ORUNUOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9SUE9SVF9ESVNDT05ORUNULCBycHd3bl9wdHIsIGxwd3duX3B0cik7CisJCWJyZWFrOworCWNhc2UgQkZBX1JQT1JUX0FFTl9RT1NfUFJJTzoKKwkJYWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfUU9TX1BSSU8sCisJCQlwcmlvX3N0clthZW5fZGF0YS5ycG9ydC5wcml2LnFvcy5xb3NfcHJpb3JpdHldLAorCQkJcnB3d25fcHRyLCBscHd3bl9wdHIpOworCQlicmVhazsKKwljYXNlIEJGQV9SUE9SVF9BRU5fUU9TX0ZMT1dJRDoKKwkJYWVuX2RhdGEucnBvcnQucHJpdi5xb3MgPSBkYXRhLT5wcml2LnFvczsKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fUlBPUlRfUU9TX0ZMT1dJRCwKKwkJCWFlbl9kYXRhLnJwb3J0LnByaXYucW9zLnFvc19mbG93X2lkLCBycHd3bl9wdHIsCisJCQlscHd3bl9wdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZW5fZGF0YS5ycG9ydC52Zl9pZCA9IHJwb3J0LT5wb3J0LT5mYWJyaWMtPnZmX2lkOworCWFlbl9kYXRhLnJwb3J0LnBwd3duID0KKwkJYmZhX2Zjc19wb3J0X2dldF9wd3duKGJmYV9mY3NfZ2V0X2Jhc2VfcG9ydChycG9ydC0+ZmNzKSk7CisJYWVuX2RhdGEucnBvcnQubHB3d24gPSBscHd3bjsKKwlhZW5fZGF0YS5ycG9ydC5ycHd3biA9IHJwd3duOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9vbmxpbmVfYWN0aW9uKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJcnBvcnQtPnN0YXRzLm9ubGluZXMrKzsKKworCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKSB7CisJCWJmYV9mY3NfaXRuaW1fcnBvcnRfb25saW5lKHJwb3J0LT5pdG5pbSk7CisJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJYmZhX2Zjc19ycGZfcnBvcnRfb25saW5lKHJwb3J0KTsKKwl9OworCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX3Jwb3J0X29ubGluZShycG9ydC0+dGluKTsKKworCS8qCisJICogRG9uJ3QgcG9zdCBldmVudHMgZm9yIHdlbGwga25vd24gYWRkcmVzc2VzCisJICovCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpCisJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fT05MSU5FLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBvcnRfb2ZmbGluZV9hY3Rpb24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwlycG9ydC0+c3RhdHMub2ZmbGluZXMrKzsKKworCS8qCisJICogRG9uJ3QgcG9zdCBldmVudHMgZm9yIHdlbGwga25vd24gYWRkcmVzc2VzCisJICovCisJaWYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpIHsKKwkJaWYgKGJmYV9mY3NfcG9ydF9pc19vbmxpbmUocnBvcnQtPnBvcnQpID09IEJGQV9UUlVFKSB7CisJCQliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX0RJU0NPTk5FQ1QsCisJCQkJCSAgICAgICBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9mY3NfcnBvcnRfYWVuX3Bvc3QocnBvcnQsIEJGQV9SUE9SVF9BRU5fT0ZGTElORSwKKwkJCQkJICAgICAgIE5VTEwpOworCQl9CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc19pbml0aWF0b3IocG9ydCkpIHsKKwkJYmZhX2Zjc19pdG5pbV9ycG9ydF9vZmZsaW5lKHJwb3J0LT5pdG5pbSk7CisJCWlmICghQkZBX0ZDU19QSURfSVNfV0tBKHJwb3J0LT5waWQpKQorCQkJYmZhX2Zjc19ycGZfcnBvcnRfb2ZmbGluZShycG9ydCk7CisJfQorCisJaWYgKGJmYV9mY3NfcG9ydF9pc190YXJnZXQocG9ydCkpCisJCWJmYV9mY3NfdGluX3Jwb3J0X29mZmxpbmUocnBvcnQtPnRpbik7Cit9CisKKy8qKgorICogVXBkYXRlIHJwb3J0IHBhcmFtZXRlcnMgZnJvbSBQTE9HSSBvciBQTE9HSSBhY2NlcHQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3VwZGF0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjX2xvZ2lfcyAqcGxvZ2kpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gcnBvcnQtPnBvcnQ7CisKKwkvKioKKwkgKiAtIHBvcnQgbmFtZQorCSAqIC0gbm9kZSBuYW1lCisJICovCisJcnBvcnQtPnB3d24gPSBwbG9naS0+cG9ydF9uYW1lOworCXJwb3J0LT5ud3duID0gcGxvZ2ktPm5vZGVfbmFtZTsKKworCS8qKgorCSAqIC0gY2xhc3Mgb2Ygc2VydmljZQorCSAqLworCXJwb3J0LT5mY19jb3MgPSAwOworCWlmIChwbG9naS0+Y2xhc3MzLmNsYXNzX3ZhbGlkKQorCQlycG9ydC0+ZmNfY29zID0gRkNfQ0xBU1NfMzsKKworCWlmIChwbG9naS0+Y2xhc3MyLmNsYXNzX3ZhbGlkKQorCQlycG9ydC0+ZmNfY29zIHw9IEZDX0NMQVNTXzI7CisKKwkvKioKKwkgKiAtIENJU0MKKwkgKiAtIE1BWCByZWNlaXZlIGZyYW1lIHNpemUKKwkgKi8KKwlycG9ydC0+Y2lzYyA9IHBsb2dpLT5jc3AuY2lzYzsKKwlycG9ydC0+bWF4ZnJzaXplID0gYmZhX29zX250b2hzKHBsb2dpLT5jbGFzczMucnhzeik7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKSk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KTsKKwkvKioKKwkgKiBEaXJlY3QgQXR0YWNoIFAyUCBtb2RlIDoKKwkgKiBUaGlzIGlzIHRvIGhhbmRsZSBhIGJ1ZyAoMjMzNDc2KSBpbiBJQk0gdGFyZ2V0cyBpbiBEaXJlY3QgQXR0YWNoCisJICogTW9kZS4gQmFzaWNhbGx5LCBpbiBGTE9HSSBBY2NlcHQgdGhlIHRhcmdldCB3b3VsZCBoYXZlIGVycm9uZW91c2x5CisJICogc2V0IHRoZSBCQiBDcmVkaXQgdG8gdGhlIHZhbHVlIHVzZWQgaW4gdGhlIEZMT0dJIHNlbnQgYnkgdGhlIEhCQS4KKwkgKiBJdCB1c2VzIHRoZSBjb3JyZWN0IHZhbHVlIChpdHMgb3duIEJCIGNyZWRpdCkgaW4gUExPR0kuCisJICovCisJaWYgKCghYmZhX2Zjc19mYWJyaWNfaXNfc3dpdGNoZWQocG9ydC0+ZmFicmljKSkKKwkgICAgJiYgKGJmYV9vc19udG9ocyhwbG9naS0+Y3NwLmJiY3JlZCkgPCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCkpIHsKKworCQliZmFfdHJjKHBvcnQtPmZjcywgYmZhX29zX250b2hzKHBsb2dpLT5jc3AuYmJjcmVkKSk7CisJCWJmYV90cmMocG9ydC0+ZmNzLCBwb3J0LT5mYWJyaWMtPmJiX2NyZWRpdCk7CisKKwkJcG9ydC0+ZmFicmljLT5iYl9jcmVkaXQgPSBiZmFfb3NfbnRvaHMocGxvZ2ktPmNzcC5iYmNyZWQpOworCQliZmFfcHBvcnRfc2V0X3R4X2JiY3JlZGl0KHBvcnQtPmZjcy0+YmZhLAorCQkJCQkgIHBvcnQtPmZhYnJpYy0+YmJfY3JlZGl0KTsKKwl9CisKK30KKworLyoqCisgKiAgIENhbGxlZCB0byBoYW5kbGUgTE9HTyByZWNlaXZlZCBmcm9tIGFuIGV4aXN0aW5nIHJlbW90ZSBwb3J0LgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2xvZ28oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsIHN0cnVjdCBmY2hzX3MgKmZjaHMpCit7CisJcnBvcnQtPnJlcGx5X294aWQgPSBmY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCXJwb3J0LT5zdGF0cy5sb2dvX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9MT0dPX1JDVkQpOworfQorCisKKworLyoqCisgKiAgZmNzX3Jwb3J0X3B1YmxpYyBGQ1MgcnBvcnQgcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIAlDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gY3JlYXRlIGEgcmVtb3RlIHBvcnQgaW5zdGFuY2UgZm9yIGEgZGlzY292ZXJlZAorICogCXJlbW90ZSBkZXZpY2UuCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0IG9yIHZwb3J0CisgKiBAcGFyYW1baW5dIHJwaWQJLSByZW1vdGUgcG9ydCBJRAorICoKKyAqIEByZXR1cm4gTm9uZQorICovCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgdTMyIHJwaWQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcnBpZCk7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIFdXTl9OVUxMLCBycGlkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1NFTkQpOworCXJldHVybiBycG9ydDsKK30KKworLyoqCisgKiBDYWxsZWQgdG8gY3JlYXRlIGEgcnBvcnQgZm9yIHdoaWNoIG9ubHkgdGhlIHd3biBpcyBrbm93bi4KKyAqCisgKiBAcGFyYW1baW5dIHBvcnQJLSBiYXNlIHBvcnQKKyAqIEBwYXJhbVtpbl0gcnB3d24JLSByZW1vdGUgcG9ydCB3d24KKyAqCisgKiBAcmV0dXJuIE5vbmUKKyAqLworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2NyZWF0ZV9ieV93d24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCBycHd3bikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBycHd3bik7CisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIHJwd3duLCAwKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm4gTlVMTDsKKworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0FERFJFU1NfRElTQyk7CisJcmV0dXJuIHJwb3J0OworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydCBpbiBwcml2YXRlIGxvb3AgdG9wb2xvZ3kgdG8gaW5kaWNhdGUgdGhhdCBhCisgKiBycG9ydCBoYXMgYmVlbiBkaXNjb3ZlcmVkIGFuZCBwbG9naSBoYXMgYmVlbiBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtW2luXSBwb3J0CS0gYmFzZSBwb3J0IG9yIHZwb3J0CisgKiBAcGFyYW1baW5dIHJwaWQJLSByZW1vdGUgcG9ydCBJRAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3N0YXJ0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCXN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIFdXTl9OVUxMLCBmY2hzLT5zX2lkKTsKKwlpZiAoIXJwb3J0KQorCQlyZXR1cm47CisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfUExPR0lfQ09NUCk7Cit9CisKKy8qKgorICogICBDYWxsZWQgYnkgYnBvcnQvdnBvcnQgdG8gaGFuZGxlIFBMT0dJIHJlY2VpdmVkIGZyb20gYSBuZXcgcmVtb3RlIHBvcnQuCisgKiAgIElmIGFuIGV4aXN0aW5nIHJwb3J0IGRvZXMgYSBwbG9naSwgaXQgd2lsbCBiZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfcGxvZ2lfY3JlYXRlKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgc3RydWN0IGZjaHNfcyAqZmNocywKKwkJCSAgIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCisJcnBvcnQgPSBiZmFfZmNzX3Jwb3J0X2FsbG9jKHBvcnQsIHBsb2dpLT5wb3J0X25hbWUsIGZjaHMtPnNfaWQpOworCWlmICghcnBvcnQpCisJCXJldHVybjsKKworCWJmYV9mY3NfcnBvcnRfdXBkYXRlKHJwb3J0LCBwbG9naSk7CisKKwlycG9ydC0+cmVwbHlfb3hpZCA9IGZjaHMtPm94X2lkOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnJlcGx5X294aWQpOworCisJcnBvcnQtPnN0YXRzLnBsb2dpX3JjdmQrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9SQ1ZEKTsKK30KKworc3RhdGljIGludAord3duX2NvbXBhcmUod3duX3Qgd3duMSwgd3duX3Qgd3duMikKK3sKKwl1OCAgICAgICAgKmIxID0gKHU4ICopICZ3d24xOworCXU4ICAgICAgICAqYjIgPSAodTggKikgJnd3bjI7CisJaW50ICAgICAgICAgICAgIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHd3bl90KTsgaSsrKSB7CisJCWlmIChiMVtpXSA8IGIyW2ldKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYjFbaV0gPiBiMltpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBoYW5kbGUgUExPR0kgcmVjZWl2ZWQgZnJvbSBhbiBleGlzdGluZworICogCSByZW1vdGUgcG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9wbG9naShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwgc3RydWN0IGZjaHNfcyAqcnhfZmNocywKKwkJICAgIHN0cnVjdCBmY19sb2dpX3MgKnBsb2dpKQoreworCS8qKgorCSAqIEB0b2RvIEhhbmRsZSBQMlAgYW5kIGluaXRpYXRvci1pbml0aWF0b3IuCisJICovCisKKwliZmFfZmNzX3Jwb3J0X3VwZGF0ZShycG9ydCwgcGxvZ2kpOworCisJcnBvcnQtPnJlcGx5X294aWQgPSByeF9mY2hzLT5veF9pZDsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5yZXBseV9veGlkKTsKKworCS8qKgorCSAqIEluIFN3aXRjaGVkIGZhYnJpYyB0b3BvbG9neSwKKwkgKiBQTE9HSSB0byBlYWNoIG90aGVyLiBJZiBvdXIgcHd3biBpcyBzbWFsbGVyLCBpZ25vcmUgaXQsCisJICogaWYgaXQgaXMgbm90IGEgd2VsbCBrbm93biBhZGRyZXNzLgorCSAqIElmIHRoZSBsaW5rIHRvcG9sb2d5IGlzIE4yTiwKKwkgKiB0aGlzIFBsb2dpIHNob3VsZCBiZSBhY2NlcHRlZC4KKwkgKi8KKwlpZiAoKHd3bl9jb21wYXJlKHJwb3J0LT5wb3J0LT5wb3J0X2NmZy5wd3duLCBycG9ydC0+cHd3bikgPT0gLTEpCisJICAgICYmIChiZmFfZmNzX2ZhYnJpY19pc19zd2l0Y2hlZChycG9ydC0+cG9ydC0+ZmFicmljKSkKKwkgICAgJiYgKCFCRkFfRkNTX1BJRF9JU19XS0EocnBvcnQtPnBpZCkpKSB7CisJCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJCXJldHVybjsKKwl9CisKKwlycG9ydC0+c3RhdHMucGxvZ2lfcmN2ZCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX1BMT0dJX1JDVkQpOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBkZWxldGUgYSByZW1vdGUgcG9ydCBpbnN0YW5jZS4KKyAqCisqIFJwb3J0IGRlbGV0ZSBpcyBjYWxsZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCQktIHZwb3J0IGlzIGRlbGV0ZWQKKyAqIAkJLSB2ZiBpcyBkZWxldGVkCisgKiAJCS0gZXhwbGljaXQgcmVxdWVzdCBmcm9tIE9TIHRvIGRlbGV0ZSBycG9ydCAodm13YXJlKQorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2RlbGV0ZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9ERUxFVEUpOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydC92cG9ydCB0byAgd2hlbiBhIHRhcmdldCBnb2VzIG9mZmxpbmUuCisgKgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfTE9HT19JTVApOworfQorCisvKioKKyAqIENhbGxlZCBieSBicG9ydCBpbiBuMm4gd2hlbiBhIHRhcmdldCAoYXR0YWNoZWQgcG9ydCkgYmVjb21lcyBvbmxpbmUuCisgKgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9QTE9HSV9TRU5EKTsKK30KKworLyoqCisgKiAgIENhbGxlZCBieSBicG9ydC92cG9ydCB0byBub3RpZnkgU0NOIGZvciB0aGUgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zY24oc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisKKwlycG9ydC0+c3RhdHMucnNjbnMrKzsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9TQ04pOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5ICBmY3BpbSB0byBub3RpZnkgdGhhdCB0aGUgSVROIGNsZWFudXAgaXMgZG9uZS4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9pdG5pbV9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkM0X09GRkxJTkUpOworfQorCisvKioKKyAqICAgQ2FsbGVkIGJ5IGZjcHRtIHRvIG5vdGlmeSB0aGF0IHRoZSBJVE4gY2xlYW51cCBpcyBkb25lLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3Rpbl9hY2soc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBvcnQsIFJQU01fRVZFTlRfRkM0X09GRkxJTkUpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgQkZBIGNhbGxiYWNrIGZvciBiZmFfcnBvcnRfb25saW5lKCkgY2FsbC4KKyAqCisgKiAJcGFyYW1baW5dIAljYl9hcmcJLSAgcnBvcnQgc3RydWN0LgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogCVNwZWNpYWwgQ29uc2lkZXJhdGlvbnM6CisgKgorICogCW5vdGUKKyAqLwordm9pZAorYmZhX2NiX3Jwb3J0X29ubGluZSh2b2lkICpjYmFyZykKK3sKKworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0hDQl9PTkxJTkUpOworfQorCisvKioKKyAqICAgICBUaGlzIHJvdXRpbmUgQkZBIGNhbGxiYWNrIGZvciBiZmFfcnBvcnRfb2ZmbGluZSgpIGNhbGwuCisgKgorICogCXBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiAJcmV0dXJuCisgKiAJCXZvaWQKKyAqCisgKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfb2ZmbGluZSh2b2lkICpjYmFyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopY2Jhcmc7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfc21fc2VuZF9ldmVudChycG9ydCwgUlBTTV9FVkVOVF9IQ0JfT0ZGTElORSk7Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIGlzIGEgc3RhdGljIEJGQSBjYWxsYmFjayB3aGVuIHRoZXJlIGlzIGEgUW9TIGZsb3dfaWQKKyAqIGNoYW5nZSBub3RpZmljYXRpb24KKyAqCisgKiBAcGFyYW1baW5dIAlycG9ydCAJLQorICoKKyAqIEByZXR1cm4gIAl2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfcW9zX3Njbl9mbG93aWQodm9pZCAqY2JhcmcsCisJCQkgICAgc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIG9sZF9xb3NfYXR0ciwKKwkJCSAgICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgYWVuX2RhdGE7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwlhZW5fZGF0YS5wcml2LnFvcyA9IG5ld19xb3NfYXR0cjsKKwliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX1FPU19GTE9XSUQsICZhZW5fZGF0YSk7Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIGlzIGEgc3RhdGljIEJGQSBjYWxsYmFjayB3aGVuIHRoZXJlIGlzIGEgUW9TIHByaW9yaXR5CisgKiBjaGFuZ2Ugbm90aWZpY2F0aW9uCisgKgorICogQHBhcmFtW2luXSAJcnBvcnQgCS0KKyAqCisgKiBAcmV0dXJuIAl2b2lkCisgKgorICogU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiBAbm90ZQorICovCit2b2lkCitiZmFfY2JfcnBvcnRfcW9zX3Njbl9wcmlvKHZvaWQgKmNiYXJnLCBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3Mgb2xkX3Fvc19hdHRyLAorCQkJICBzdHJ1Y3QgYmZhX3Jwb3J0X3Fvc19hdHRyX3MgbmV3X3Fvc19hdHRyKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKiljYmFyZzsKKwlzdHJ1Y3QgYmZhX3Jwb3J0X2Flbl9kYXRhX3MgYWVuX2RhdGE7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwlhZW5fZGF0YS5wcml2LnFvcyA9IG5ld19xb3NfYXR0cjsKKwliZmFfZmNzX3Jwb3J0X2Flbl9wb3N0KHJwb3J0LCBCRkFfUlBPUlRfQUVOX1FPU19QUklPLCAmYWVuX2RhdGEpOworfQorCisvKioKKyAqIAkJQ2FsbGVkIHRvIHByb2Nlc3MgYW55IHVuc29saWN0ZWQgZnJhbWVzIGZyb20gdGhpcyByZW1vdGUgcG9ydAorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2xvZ29faW1wKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9zbV9zZW5kX2V2ZW50KHJwb3J0LCBSUFNNX0VWRU5UX0xPR09fSU1QKTsKK30KKworLyoqCisgKiAJCUNhbGxlZCB0byBwcm9jZXNzIGFueSB1bnNvbGljdGVkIGZyYW1lcyBmcm9tIHRoaXMgcmVtb3RlIHBvcnQKKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF91Zl9yZWN2KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJdTE2IGxlbikKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGZjaHMtPnNfaWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZmNocy0+ZF9pZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBmY2hzLT50eXBlKTsKKworCWlmIChmY2hzLT50eXBlICE9IEZDX1RZUEVfRUxTKQorCQlyZXR1cm47CisKKwllbHNfY21kID0gKHN0cnVjdCBmY19lbHNfY21kX3MgKikgKGZjaHMgKyAxKTsKKworCWJmYV90cmMocnBvcnQtPmZjcywgZWxzX2NtZC0+ZWxzX2NvZGUpOworCisJc3dpdGNoIChlbHNfY21kLT5lbHNfY29kZSkgeworCWNhc2UgRkNfRUxTX0xPR086CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19sb2dvKHJwb3J0LCBmY2hzKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19BRElTQzoKKwkJYmZhX2Zjc19ycG9ydF9wcm9jZXNzX2FkaXNjKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1BSTE86CisJCWlmIChiZmFfZmNzX3BvcnRfaXNfaW5pdGlhdG9yKHBvcnQpKQorCQkJYmZhX2Zjc19mY3BpbV91Zl9yZWN2KHJwb3J0LT5pdG5pbSwgZmNocywgbGVuKTsKKworCQlpZiAoYmZhX2Zjc19wb3J0X2lzX3RhcmdldChwb3J0KSkKKwkJCWJmYV9mY3NfZmNwdG1fdWZfcmVjdihycG9ydC0+dGluLCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1BSTEk6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19wcmxpKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWNhc2UgRkNfRUxTX1JQU0M6CisJCWJmYV9mY3NfcnBvcnRfcHJvY2Vzc19ycHNjKHJwb3J0LCBmY2hzLCBsZW4pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9mY3NfcnBvcnRfc2VuZF9sc19yanQocnBvcnQsIGZjaHMsCisJCQkJCSAgRkNfTFNfUkpUX1JTTl9DTURfTk9UX1NVUFAsCisJCQkJCSAgRkNfTFNfUkpUX0VYUF9OT19BRERMX0lORk8pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgcmVqZWN0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Jwb3J0X3NlbmRfbHNfcmp0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LCBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzLAorCQkJICB1OCByZWFzb25fY29kZSwgdTggcmVhc29uX2NvZGVfZXhwbCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJc3RydWN0IGJmYV9mY3hwX3MgKmZjeHA7CisJaW50ICAgICAgICAgICAgIGxlbjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnhfZmNocy0+c19pZCk7CisKKwlmY3hwID0gYmZhX2Zjc19mY3hwX2FsbG9jKHJwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfcmp0X2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCwKKwkJCSAgICAgIHJlYXNvbl9jb2RlLCByZWFzb25fY29kZV9leHBsKTsKKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfcnBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKworLyoqCisgKiBSZXR1cm4gc3RhdGUgb2YgcnBvcnQuCisgKi8KK2ludAorYmZhX2Zjc19ycG9ydF9nZXRfc3RhdGUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQpCit7CisJcmV0dXJuIGJmYV9zbV90b19zdGF0ZShycG9ydF9zbV90YWJsZSwgcnBvcnQtPnNtKTsKK30KKworLyoqCisgKiAJCSBDYWxsZWQgYnkgdGhlIERyaXZlciB0byBzZXQgcnBvcnQgZGVsZXRlL2FnZW91dCB0aW1lb3V0CisgKgorICogCXBhcmFtW2luXQkJcnBvcnQgdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzLgorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X3NldF9kZWxfdGltZW91dCh1OCBycG9ydF90bW8pCit7CisJLyoKKwkgKiBjb252ZXJ0IHRvIE1pbGxpc2VjcworCSAqLworCWlmIChycG9ydF90bW8gPiAwKQorCQliZmFfZmNzX3Jwb3J0X2RlbF90aW1lb3V0ID0gcnBvcnRfdG1vICogMTAwMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvcnBvcnRfYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYWUxNzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2FwaS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgImZjc192cG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKworQkZBX1RSQ19GSUxFKEZDUywgUlBPUlRfQVBJKTsKKworLyoqCisgKiAgcnBvcnRfYXBpLmMgUmVtb3RlIHBvcnQgaW1wbGVtZW50YXRpb24uCisgKi8KKworLyoqCisgKiAgZmNzX3Jwb3J0X2FwaSBGQ1MgcnBvcnQgQVBJLgorICovCisKKy8qKgorICogCURpcmVjdCBBUEkgdG8gYWRkIGEgdGFyZ2V0IGJ5IHBvcnQgd3duLiBUaGlzIGludGVyZmFjZSBpcyB1c2VkLCBmb3IKKyAqCWV4YW1wbGUsIGJ5IGJpb3Mgd2hlbiB0YXJnZXQgcHd3biBpcyBrbm93biBmcm9tIGJvb3QgbHVuIGNvbmZpZ3VyYXRpb24uCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19ycG9ydF9hZGQoc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB3d25fdCAqcHd3biwKKwkJCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYWRfcnBvcnRfcyAqcnBvcnRfZHJ2KQoreworCWJmYV90cmMocG9ydC0+ZmNzLCAqcHd3bik7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKglEaXJlY3QgQVBJIHRvIHJlbW92ZSBhIHRhcmdldCBhbmQgaXRzIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiBUaGlzCisgKglpbnRlcmZhY2UgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5IHZtd2FyZSBkcml2ZXIgdG8gcmVtb3ZlIHRhcmdldAorICoJcG9ydHMgZnJvbSB0aGUgdGFyZ2V0IGxpc3QgZm9yIGEgVk0uCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc19ycG9ydF9yZW1vdmUoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnRfaW4pCit7CisKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocnBvcnRfaW4tPmZjcywgcnBvcnRfaW4tPnB3d24pOworCisJcnBvcnQgPSBiZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X2J5X3B3d24ocnBvcnRfaW4tPnBvcnQsIHJwb3J0X2luLT5wd3duKTsKKwlpZiAocnBvcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUQkQgRXJyb3IgaGFuZGxpbmcKKwkJICovCisJCWJmYV90cmMocnBvcnRfaW4tPmZjcywgcnBvcnRfaW4tPnBpZCk7CisJCXJldHVybiBCRkFfU1RBVFVTX1VOS05PV05fUldXTjsKKwl9CisKKwkvKgorCSAqIFRCRCBpZiB0aGlzIHJlbW90ZSBwb3J0IGlzIG9ubGluZSwgc2VuZCBhIGxvZ28KKwkgKi8KKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKKworfQorCisvKioKKyAqCVJlbW90ZSBkZXZpY2Ugc3RhdHVzIGZvciBkaXNwbGF5L2RlYnVnLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2dldF9hdHRyKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0LAorCQkJc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MgKnJwb3J0X2F0dHIpCit7CisJc3RydWN0IGJmYV9ycG9ydF9xb3NfYXR0cl9zIHFvc19hdHRyOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHJwb3J0LT5wb3J0OworCisJYmZhX29zX21lbXNldChycG9ydF9hdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV9ycG9ydF9hdHRyX3MpKTsKKworCXJwb3J0X2F0dHItPnBpZCA9IHJwb3J0LT5waWQ7CisJcnBvcnRfYXR0ci0+cHd3biA9IHJwb3J0LT5wd3duOworCXJwb3J0X2F0dHItPm53d24gPSBycG9ydC0+bnd3bjsKKwlycG9ydF9hdHRyLT5jb3Nfc3VwcG9ydGVkID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9hdHRyLT5kZl9zeiA9IHJwb3J0LT5tYXhmcnNpemU7CisJcnBvcnRfYXR0ci0+c3RhdGUgPSBiZmFfZmNzX3Jwb3J0X2dldF9zdGF0ZShycG9ydCk7CisJcnBvcnRfYXR0ci0+ZmNfY29zID0gcnBvcnQtPmZjX2NvczsKKwlycG9ydF9hdHRyLT5jaXNjID0gcnBvcnQtPmNpc2M7CisJcnBvcnRfYXR0ci0+c2NzaV9mdW5jdGlvbiA9IHJwb3J0LT5zY3NpX2Z1bmN0aW9uOworCXJwb3J0X2F0dHItPmN1cnJfc3BlZWQgID0gcnBvcnQtPnJwZi5ycHNjX3NwZWVkOworCXJwb3J0X2F0dHItPmFzc2lnbmVkX3NwZWVkICA9IHJwb3J0LT5ycGYuYXNzaWduZWRfc3BlZWQ7CisKKwliZmFfcnBvcnRfZ2V0X3Fvc19hdHRyKHJwb3J0LT5iZmFfcnBvcnQsICZxb3NfYXR0cik7CisJcnBvcnRfYXR0ci0+cW9zX2F0dHIgPSBxb3NfYXR0cjsKKworCXJwb3J0X2F0dHItPnRybF9lbmZvcmNlZCA9IEJGQV9GQUxTRTsKKwlpZiAoYmZhX3Bwb3J0X2lzX3JhdGVsaW0ocG9ydC0+ZmNzLT5iZmEpKSB7CisJCWlmICgocnBvcnQtPnJwZi5ycHNjX3NwZWVkID09IEJGQV9QUE9SVF9TUEVFRF9VTktOT1dOKSB8fAorCQkJKHJwb3J0LT5ycGYucnBzY19zcGVlZCA8CisJCQliZmFfZmNzX3BvcnRfZ2V0X3Jwb3J0X21heF9zcGVlZChwb3J0KSkpCisJCQlycG9ydF9hdHRyLT50cmxfZW5mb3JjZWQgPSBCRkFfVFJVRTsKKwl9CisKKwkvKgorCSAqIFRPRE8KKwkgKiBycG9ydC0+c3ltbmFtZQorCSAqLworfQorCisvKioKKyAqIAlQZXIgcmVtb3RlIGRldmljZSBzdGF0aXN0aWNzLgorICovCit2b2lkCitiZmFfZmNzX3Jwb3J0X2dldF9zdGF0cyhzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCwKKwkJCXN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcyAqc3RhdHMpCit7CisJKnN0YXRzID0gcnBvcnQtPnN0YXRzOworfQorCit2b2lkCitiZmFfZmNzX3Jwb3J0X2NsZWFyX3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV9vc19tZW1zZXQoKGNoYXIgKikmcnBvcnQtPnN0YXRzLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBiZmFfcnBvcnRfc3RhdHNfcykpOworfQorCitzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICoKK2JmYV9mY3NfcnBvcnRfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3QgcnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcHd3bihwb3J0LCBycHd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCX0KKworCXJldHVybiBycG9ydDsKK30KKworc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqCitiZmFfZmNzX3Jwb3J0X2xvb2t1cF9ieV9ud3duKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwgd3duX3Qgcm53d24pCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQ7CisKKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfbnd3bihwb3J0LCBybnd3bik7CisJaWYgKHJwb3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogVEJEIEVycm9yIGhhbmRsaW5nCisJCSAqLworCX0KKworCXJldHVybiBycG9ydDsKK30KKworLyoKKyAqIFRoaXMgQVBJIGlzIHRvIHNldCB0aGUgUnBvcnQncyBzcGVlZC4gU2hvdWxkIGJlIHVzZWQgd2hlbiBSUFNDIGlzIG5vdAorICogc3VwcG9ydGVkIGJ5IHRoZSBycG9ydC4KKyAqLwordm9pZAorYmZhX2Zjc19ycG9ydF9zZXRfc3BlZWQoc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQsCisJCQllbnVtIGJmYV9wcG9ydF9zcGVlZCBzcGVlZCkKK3sKKwlycG9ydC0+cnBmLmFzc2lnbmVkX3NwZWVkICA9IHNwZWVkOworCisJLyogU2V0IHRoaXMgc3BlZWQgaW4gZi93IG9ubHkgaWYgdGhlIFJQU0Mgc3BlZWQgaXMgbm90IGF2YWlsYWJsZSAqLworCWlmIChycG9ydC0+cnBmLnJwc2Nfc3BlZWQgPT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pCisJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBzcGVlZCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Jwb3J0X2Z0cnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFmNTlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS9ycG9ydF9mdHJzLmMKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBCcm9jYWRlIENvbW11bmljYXRpb25zIFN5c3RlbXMsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIHd3dy5icm9jYWRlLmNvbQorICoKKyAqIExpbnV4IGRyaXZlciBmb3IgQnJvY2FkZSBGaWJyZSBDaGFubmVsIEhvc3QgQnVzIEFkYXB0ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoqCisgKiAgcnBvcnRfZnRycy5jIFJlbW90ZSBwb3J0IGZlYXR1cmVzIChSUEYpIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNidWlsZC5oIgorI2luY2x1ZGUgImZjc19ycG9ydC5oIgorI2luY2x1ZGUgImZjc19scG9ydC5oIgorI2luY2x1ZGUgImZjc190cmNtb2QuaCIKKyNpbmNsdWRlICJmY3NfZmN4cC5oIgorI2luY2x1ZGUgImZjcy5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBSUE9SVF9GVFJTKTsKKworI2RlZmluZSBCRkFfRkNTX1JQRl9SRVRSSUVTCSgzKQorI2RlZmluZSBCRkFfRkNTX1JQRl9SRVRSWV9USU1FT1VUICAoMTAwMCkgLyogMSBzZWMgKEluIG1pbGxpc2VjcykgKi8KKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NlbmRfcnBzYzIodm9pZCAqcnBvcnRfY2JhcmcsCisJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3JwZl9ycHNjMl9yZXNwb25zZSh2b2lkICpmY3NhcmcsCisJCQlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQliZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywgdTMyIHJzcF9sZW4sCisJCQl1MzIgcmVzaWRfbGVuLAorCQkJc3RydWN0IGZjaHNfcyAqcnNwX2ZjaHMpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3RpbWVvdXQodm9pZCAqYXJnKTsKKworLyoqCisgKiAgZmNzX3Jwb3J0X2Z0cnNfc20gRkNTIHJwb3J0IHN0YXRlIG1hY2hpbmUgZXZlbnRzCisgKi8KKworZW51bSBycGZfZXZlbnQgeworCVJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgID0gMSwgICAgIC8qICBScG9ydCBvZmZsaW5lICAgICAgICAgICAgKi8KKwlSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUgICA9IDIsICAgICAvKiAgUnBvcnQgb25saW5lICAgICAgICAgICAgKi8KKwlSUEZTTV9FVkVOVF9GQ1hQX1NFTlQgICAgICA9IDMsICAgIC8qICBGcmFtZSBmcm9tIGhhcyBiZWVuIHNlbnQgKi8KKwlSUEZTTV9FVkVOVF9USU1FT1VUICAJICAgPSA0LCAgICAvKiAgUnBvcnQgU00gdGltZW91dCBldmVudCAgICovCisJUlBGU01fRVZFTlRfUlBTQ19DT01QICAgICAgPSA1LAorCVJQRlNNX0VWRU5UX1JQU0NfRkFJTCAgICAgID0gNiwKKwlSUEZTTV9FVkVOVF9SUFNDX0VSUk9SICAgICA9IDcsCit9OworCitzdGF0aWMgdm9pZAliZmFfZmNzX3JwZl9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyhzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLAorCQkJCQkgICAgICAgZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJICAgICAgIGVudW0gcnBmX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkIAliZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwKKwkJCQkJCQllbnVtIHJwZl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19ycGZfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsCisJCQkJCQkJZW51bSBycGZfZXZlbnQgZXZlbnQpOworCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYsIGVudW0gcnBmX2V2ZW50IGV2ZW50KQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PTkxJTkUgOgorCQlpZiAoIUJGQV9GQ1NfUElEX0lTX1dLQShycG9ydC0+cGlkKSkgeworCQkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CisJCQlycGYtPnJwc2NfcmV0cmllcyA9IDA7CisJCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCQlicmVhazsKKwkJfTsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBSUEZTTV9FVkVOVF9GQ1hQX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCWJmYV9mY3hwX3dhbGxvY19jYW5jZWwocnBvcnQtPmZjcy0+YmZhLCAmcnBmLT5mY3hwX3dxZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3Jwc2Moc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1JQU0NfQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29ubGluZSk7CisJCS8qIFVwZGF0ZSBzcGVlZCBpbmZvIGluIGYvdyB2aWEgQkZBICovCisJCWlmIChycGYtPnJwc2Nfc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pIHsKKwkJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBycGYtPnJwc2Nfc3BlZWQpOworCQl9IGVsc2UgaWYgKHJwZi0+YXNzaWduZWRfc3BlZWQgIT0gQkZBX1BQT1JUX1NQRUVEX1VOS05PV04pIHsKKwkJCWJmYV9ycG9ydF9zcGVlZChycG9ydC0+YmZhX3Jwb3J0LCBycGYtPmFzc2lnbmVkX3NwZWVkKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUlBGU01fRVZFTlRfUlBTQ19GQUlMOgorCQkvKiBSUFNDIG5vdCBzdXBwb3J0ZWQgYnkgcnBvcnQgKi8KKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29ubGluZSk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SOgorCQkvKiBuZWVkIHRvIHJldHJ5Li4uZGVsYXllZCBhIGJpdC4gKi8KKwkJaWYgKHJwZi0+cnBzY19yZXRyaWVzKysgPCBCRkFfRkNTX1JQRl9SRVRSSUVTKSB7CisJCQliZmFfdGltZXJfc3RhcnQocnBvcnQtPmZjcy0+YmZhLCAmcnBmLT50aW1lciwKKwkJCQkgICAgYmZhX2Zjc19ycGZfdGltZW91dCwgcnBmLAorCQkJCSAgICBCRkFfRkNTX1JQRl9SRVRSWV9USU1FT1VUKTsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3JldHJ5KTsKKwkJfSBlbHNlIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vbmxpbmUpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHJwZi0+ZmN4cCk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX3Jwc2NfcmV0cnkoc3RydWN0IGJmYV9mY3NfcnBmX3MgKnJwZiwgZW51bSBycGZfZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCBycG9ydC0+cGlkKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFJQRlNNX0VWRU5UX1RJTUVPVVQgOgorCQkvKiByZS1zZW5kIHRoZSBSUFNDICovCisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9ycHNjX3NlbmRpbmcpOworCQliZmFfZmNzX3JwZl9zZW5kX3Jwc2MyKHJwZiwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FIDoKKwkJYmZhX3RpbWVyX3N0b3AoJnJwZi0+dGltZXIpOworCQliZmFfc21fc2V0X3N0YXRlKHJwZiwgYmZhX2Zjc19ycGZfc21fb2ZmbGluZSk7CisJCXJwZi0+cnBzY19yZXRyaWVzID0gMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT0ZGTElORSA6CisJCWJmYV9zbV9zZXRfc3RhdGUocnBmLCBiZmFfZmNzX3JwZl9zbV9vZmZsaW5lKTsKKwkJcnBmLT5ycHNjX3JldHJpZXMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycGZfcyAqcnBmLCBlbnVtIHJwZl9ldmVudCBldmVudCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCA9IHJwZi0+cnBvcnQ7CisKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5wd3duKTsKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCWJmYV90cmMocnBvcnQtPmZjcywgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FIDoKKwkJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3Jwc2Nfc2VuZGluZyk7CisJCWJmYV9mY3NfcnBmX3NlbmRfcnBzYzIocnBmLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFJQRlNNX0VWRU5UX1JQT1JUX09GRkxJTkUgOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorLyoqCisgKiBDYWxsZWQgd2hlbiBScG9ydCBpcyBjcmVhdGVkLgorICovCit2b2lkICBiZmFfZmNzX3JwZl9pbml0KHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAmcnBvcnQtPnJwZjsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJcnBmLT5ycG9ydCA9IHJwb3J0OworCisJYmZhX3NtX3NldF9zdGF0ZShycGYsIGJmYV9mY3NfcnBmX3NtX3VuaW5pdCk7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gUnBvcnQgYmVjb21lcyBvbmxpbmUKKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfcnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0KQoreworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisKKwlpZiAoX19mY3NfbWluX2NmZyhycG9ydC0+cG9ydC0+ZmNzKSkKKwkJcmV0dXJuOworCisJaWYgKGJmYV9mY3NfZmFicmljX2lzX3N3aXRjaGVkKHJwb3J0LT5wb3J0LT5mYWJyaWMpKQorCQliZmFfc21fc2VuZF9ldmVudCgmcnBvcnQtPnJwZiwgUlBGU01fRVZFTlRfUlBPUlRfT05MSU5FKTsKK30KKworLyoqCisgKiBDYWxsZWQgd2hlbiBScG9ydCBiZWNvbWVzIG9mZmxpbmUKKyAqLwordm9pZCAgYmZhX2Zjc19ycGZfcnBvcnRfb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydCkKK3sKKwliZmFfdHJjKHJwb3J0LT5mY3MsIHJwb3J0LT5waWQpOworCisJaWYgKF9fZmNzX21pbl9jZmcocnBvcnQtPnBvcnQtPmZjcykpCisJCXJldHVybjsKKworCWJmYV9zbV9zZW5kX2V2ZW50KCZycG9ydC0+cnBmLCBSUEZTTV9FVkVOVF9SUE9SVF9PRkZMSU5FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAoc3RydWN0IGJmYV9mY3NfcnBmX3MgKikgYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnBpZCk7CisJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9USU1FT1VUKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcnBmX3NlbmRfcnBzYzIodm9pZCAqcnBmX2NiYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cF9hbGxvY2VkKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgCT0gKHN0cnVjdCBiZmFfZmNzX3JwZl9zICopcnBmX2NiYXJnOworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0ID0gcnBmLT5ycG9ydDsKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQgPSBycG9ydC0+cG9ydDsKKwlzdHJ1Y3QgZmNoc19zICAgICAgICAgIGZjaHM7CisJaW50ICAgICAgICAgICAgIGxlbjsKKwlzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cDsKKworCWJmYV90cmMocnBvcnQtPmZjcywgcnBvcnQtPnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmcnBmLT5mY3hwX3dxZSwKKwkJCQkJYmZhX2Zjc19ycGZfc2VuZF9ycHNjMiwgcnBmKTsKKwkJcmV0dXJuOworCX0KKwlycGYtPmZjeHAgPSBmY3hwOworCisJbGVuID0gZmNfcnBzYzJfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIHJwb3J0LT5waWQsCisJCQkgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCAmcnBvcnQtPnBpZCwgMSk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIE5VTEwsIHBvcnQtPmZhYnJpYy0+dmZfaWQsIHBvcnQtPmxwX3RhZywgQkZBX0ZBTFNFLAorCQkJICBGQ19DTEFTU18zLCBsZW4sICZmY2hzLCBiZmFfZmNzX3JwZl9ycHNjMl9yZXNwb25zZSwKKwkJCSAgcnBmLCBGQ19NQVhfUERVU1osIEZDX1JBX1RPVik7CisJcnBvcnQtPnN0YXRzLnJwc2Nfc2VudCsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHJwZiwgUlBGU01fRVZFTlRfRkNYUF9TRU5UKTsKKworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19ycGZfcnBzYzJfcmVzcG9uc2Uodm9pZCAqZmNzYXJnLCBzdHJ1Y3QgYmZhX2ZjeHBfcyAqZmN4cCwgdm9pZCAqY2JhcmcsCisJCQkgICAgYmZhX3N0YXR1c190IHJlcV9zdGF0dXMsIHUzMiByc3BfbGVuLAorCQkJICAgIHUzMiByZXNpZF9sZW4sIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKQoreworCXN0cnVjdCBiZmFfZmNzX3JwZl9zICpycGYgPSAoc3RydWN0IGJmYV9mY3NfcnBmX3MgKikgY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcnBvcnRfcyAqcnBvcnQgPSBycGYtPnJwb3J0OworCXN0cnVjdCBmY19sc19yanRfcyAgICAqbHNfcmp0OworCXN0cnVjdCBmY19ycHNjMl9hY2NfcyAgKnJwc2MyX2FjYzsKKwl1MTYgICAgICAgIG51bV9lbnRzOworCisJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKworCWlmIChyZXFfc3RhdHVzICE9IEJGQV9TVEFUVVNfT0spIHsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJaWYgKHJlcV9zdGF0dXMgPT0gQkZBX1NUQVRVU19FVElNRVIpCisJCQlycG9ydC0+c3RhdHMucnBzY19mYWlsZWQrKzsKKwkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJcmV0dXJuOworCX0KKworCXJwc2MyX2FjYyA9IChzdHJ1Y3QgZmNfcnBzYzJfYWNjX3MgKikgQkZBX0ZDWFBfUlNQX1BMRChmY3hwKTsKKwlpZiAocnBzYzJfYWNjLT5lbHNfY21kID09IEZDX0VMU19BQ0MpIHsKKwkJcnBvcnQtPnN0YXRzLnJwc2NfYWNjcysrOworCQludW1fZW50cyA9IGJmYV9vc19udG9ocyhycHNjMl9hY2MtPm51bV9waWRzKTsKKwkJYmZhX3RyYyhycG9ydC0+ZmNzLCBudW1fZW50cyk7CisJCWlmIChudW1fZW50cyA+IDApIHsKKwkJCWJmYV9hc3NlcnQocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0ucGlkICE9IHJwb3J0LT5waWQpOworCQkJYmZhX3RyYyhycG9ydC0+ZmNzLAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5waWQpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uc3BlZWQpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQliZmFfb3NfbnRvaHMocnBzYzJfYWNjLT5wb3J0X2luZm9bMF0uaW5kZXgpKTsKKwkJCWJmYV90cmMocnBvcnQtPmZjcywKKwkJCQlycHNjMl9hY2MtPnBvcnRfaW5mb1swXS50eXBlKTsKKworCQkJaWYgKHJwc2MyX2FjYy0+cG9ydF9pbmZvWzBdLnNwZWVkID09IDApIHsKKwkJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfRVJST1IpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJcnBmLT5ycHNjX3NwZWVkID0gZmNfcnBzY19vcGVyc3BlZWRfdG9fYmZhX3NwZWVkKAorCQkJCWJmYV9vc19udG9ocyhycHNjMl9hY2MtPnBvcnRfaW5mb1swXS5zcGVlZCkpOworCisJCQliZmFfc21fc2VuZF9ldmVudChycGYsIFJQRlNNX0VWRU5UX1JQU0NfQ09NUCk7CisJCX0KKwl9IGVsc2UgeworCQlsc19yanQgPSAoc3RydWN0IGZjX2xzX3JqdF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZSk7CisJCWJmYV90cmMocnBvcnQtPmZjcywgbHNfcmp0LT5yZWFzb25fY29kZV9leHBsKTsKKwkJcnBvcnQtPnN0YXRzLnJwc2NfcmVqZWN0cysrOworCQlpZiAobHNfcmp0LT5yZWFzb25fY29kZSA9PSBGQ19MU19SSlRfUlNOX0NNRF9OT1RfU1VQUCkgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0ZBSUwpOworCQl9IGVsc2UgeworCQkJYmZhX3NtX3NlbmRfZXZlbnQocnBmLCBSUEZTTV9FVkVOVF9SUFNDX0VSUk9SKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvc2NuLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkNDc3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvYmZhL3Njbi5jCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxiZmEuaD4KKyNpbmNsdWRlIDxiZmFfc3ZjLmg+CisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Jwb3J0LmgiCisjaW5jbHVkZSAiZmNzX21zLmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjc19mY3hwLmgiCisjaW5jbHVkZSAiZmNzLmgiCisjaW5jbHVkZSAibHBvcnRfcHJpdi5oIgorCitCRkFfVFJDX0ZJTEUoRkNTLCBTQ04pOworCisjZGVmaW5lIEZDX1FPU19SU0NOX0VWRU5UCQkweDBjCisjZGVmaW5lIEZDX0ZBQlJJQ19OQU1FX1JTQ05fRVZFTlQJMHgwZAorCisvKgorICogZm9yd2FyZCBkZWNsYXJhdGlvbnMKKyAqLworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Iodm9pZCAqc2NuX2NiYXJnLAorCQkJCQkgIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwX2FsbG9jZWQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlKHZvaWQgKmZjc2FyZywKKwkJCQkJICAgICAgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHAsCisJCQkJCSAgICAgIHZvaWQgKmNiYXJnLAorCQkJCQkgICAgICBiZmFfc3RhdHVzX3QgcmVxX3N0YXR1cywKKwkJCQkJICAgICAgdTMyIHJzcF9sZW4sCisJCQkJCSAgICAgIHUzMiByZXNpZF9sZW4sCisJCQkJCSAgICAgIHN0cnVjdCBmY2hzX3MgKnJzcF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCQkJICAgICBzdHJ1Y3QgZmNoc19zICpyeF9mY2hzKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3RpbWVvdXQodm9pZCAqYXJnKTsKKworLyoqCisgKiAgZmNzX3NjbV9zbSBGQ1MgU0NOIHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqIFZQb3J0IFNDTiBTdGF0ZSBNYWNoaW5lIGV2ZW50cworICovCitlbnVtIHBvcnRfc2NuX2V2ZW50IHsKKwlTQ05TTV9FVkVOVF9QT1JUX09OTElORSA9IDEsCisJU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FID0gMiwKKwlTQ05TTV9FVkVOVF9SU1BfT0sgPSAzLAorCVNDTlNNX0VWRU5UX1JTUF9FUlJPUiA9IDQsCisJU0NOU01fRVZFTlRfVElNRU9VVCA9IDUsCisJU0NOU01fRVZFTlRfU0NSX1NFTlQgPSA2LAorfTsKKworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fb2ZmbGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfcG9ydF9zY25fc21fc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCQkJZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3JfcmV0cnkoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCQkgICAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3BvcnRfc2NuX3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkJCSAgIGVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpOworCisvKioKKyAqIAkJU3RhcnRpbmcgc3RhdGUgLSBhd2FpdGluZyBsaW5rIHVwLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCSAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT05MSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zZW5kaW5nX3Njcik7CisJCWJmYV9mY3NfcG9ydF9zY25fc2VuZF9zY3Ioc2NuLCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2VuZGluZ19zY3Ioc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfU0NSX1NFTlQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcik7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF93YWxsb2NfY2FuY2VsKHNjbi0+cG9ydC0+ZmNzLT5iZmEsICZzY24tPmZjeHBfd3FlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fc21fc2NyKHN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiwKKwkJCWVudW0gcG9ydF9zY25fZXZlbnQgZXZlbnQpCit7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU0NOU01fRVZFTlRfUlNQX09LOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vbmxpbmUpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUlNQX0VSUk9SOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9zY3JfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQocG9ydC0+ZmNzLT5iZmEsICZzY24tPnRpbWVyLAorCQkJCWJmYV9mY3NfcG9ydF9zY25fdGltZW91dCwgc2NuLAorCQkJCUJGQV9GQ1NfUkVUUllfVElNRU9VVCk7CisJCWJyZWFrOworCisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQliZmFfZmN4cF9kaXNjYXJkKHNjbi0+ZmN4cCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NtX3Njcl9yZXRyeShzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24sCisJCQkgICAgICBlbnVtIHBvcnRfc2NuX2V2ZW50IGV2ZW50KQoreworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNDTlNNX0VWRU5UX1RJTUVPVVQ6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX3NlbmRpbmdfc2NyKTsKKwkJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3NjcihzY24sIE5VTEwpOworCQlicmVhazsKKworCWNhc2UgU0NOU01fRVZFTlRfUE9SVF9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnNjbi0+dGltZXIpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9zbV9vbmxpbmUoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqc2NuLAorCQkJICAgZW51bSBwb3J0X3Njbl9ldmVudCBldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTQ05TTV9FVkVOVF9QT1JUX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUoc2NuLCBiZmFfZmNzX3BvcnRfc2NuX3NtX29mZmxpbmUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Njbl9wcml2YXRlIEZDUyBTQ04gcHJpdmF0ZSBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCB0byBzZW5kIGEgU0NSIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NlbmRfc2NyKHZvaWQgKnNjbl9jYmFyZywgc3RydWN0IGJmYV9mY3hwX3MgKmZjeHBfYWxsb2NlZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBzY25fY2Jhcmc7CisJc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0ID0gc2NuLT5wb3J0OworCXN0cnVjdCBmY2hzX3MgICAgICAgICAgZmNoczsKKwlpbnQgICAgICAgICAgICAgbGVuOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBpZCk7CisJYmZhX3RyYyhwb3J0LT5mY3MsIHBvcnQtPnBvcnRfY2ZnLnB3d24pOworCisJZmN4cCA9IGZjeHBfYWxsb2NlZCA/IGZjeHBfYWxsb2NlZCA6IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkgeworCQliZmFfZmN4cF9hbGxvY193YWl0KHBvcnQtPmZjcy0+YmZhLCAmc2NuLT5mY3hwX3dxZSwKKwkJCQkgICAgYmZhX2Zjc19wb3J0X3Njbl9zZW5kX3Njciwgc2NuKTsKKwkJcmV0dXJuOworCX0KKwlzY24tPmZjeHAgPSBmY3hwOworCisJLyoKKwkgKiBIYW5kbGUgVlUgcmVnaXN0cmF0aW9ucyBmb3IgQmFzZSBwb3J0IG9ubHkKKwkgKi8KKwlpZiAoKCFwb3J0LT52cG9ydCkgJiYgYmZhX2lvY19nZXRfZmNtb2RlKCZwb3J0LT5mY3MtPmJmYS0+aW9jKSkgeworCQlsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksCisJCQkJICAgYmZhX2xwc19pc19icmNkX2ZhYnJpYyhwb3J0LT5mYWJyaWMtPmxwcyksCisJCQkJICAgcG9ydC0+cGlkLCAwKTsKKwl9IGVsc2UgeworCQlsZW4gPSBmY19zY3JfYnVpbGQoJmZjaHMsIGJmYV9mY3hwX2dldF9yZXFidWYoZmN4cCksIEJGQV9GQUxTRSwKKwkJCQkgICBwb3J0LT5waWQsIDApOworCX0KKworCWJmYV9mY3hwX3NlbmQoZmN4cCwgTlVMTCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLCBCRkFfRkFMU0UsCisJCSAgICAgIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIGJmYV9mY3NfcG9ydF9zY25fc2NyX3Jlc3BvbnNlLAorCQkgICAgICAodm9pZCAqKXNjbiwgRkNfTUFYX1BEVVNaLCBGQ19SQV9UT1YpOworCisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9TQ1JfU0VOVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3Njcl9yZXNwb25zZSh2b2lkICpmY3NhcmcsIHN0cnVjdCBiZmFfZmN4cF9zICpmY3hwLAorCQkJICAgICAgdm9pZCAqY2JhcmcsIGJmYV9zdGF0dXNfdCByZXFfc3RhdHVzLAorCQkJICAgICAgdTMyIHJzcF9sZW4sIHUzMiByZXNpZF9sZW4sCisJCQkgICAgICBzdHJ1Y3QgZmNoc19zICpyc3BfZmNocykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSAoc3RydWN0IGJmYV9mY3NfcG9ydF9zY25fcyAqKWNiYXJnOworCXN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCA9IHNjbi0+cG9ydDsKKwlzdHJ1Y3QgZmNfZWxzX2NtZF9zICAgKmVsc19jbWQ7CisJc3RydWN0IGZjX2xzX3JqdF9zICAgICpsc19yanQ7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgcG9ydC0+cG9ydF9jZmcucHd3bik7CisKKwkvKgorCSAqIFNhbml0eSBDaGVja3MKKwkgKi8KKwlpZiAocmVxX3N0YXR1cyAhPSBCRkFfU1RBVFVTX09LKSB7CisJCWJmYV90cmMocG9ydC0+ZmNzLCByZXFfc3RhdHVzKTsKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCQlyZXR1cm47CisJfQorCisJZWxzX2NtZCA9IChzdHJ1Y3QgZmNfZWxzX2NtZF9zICopIEJGQV9GQ1hQX1JTUF9QTEQoZmN4cCk7CisKKwlzd2l0Y2ggKGVsc19jbWQtPmVsc19jb2RlKSB7CisKKwljYXNlIEZDX0VMU19BQ0M6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX09LKTsKKwkJYnJlYWs7CisKKwljYXNlIEZDX0VMU19MU19SSlQ6CisKKwkJbHNfcmp0ID0gKHN0cnVjdCBmY19sc19yanRfcyAqKSBCRkFfRkNYUF9SU1BfUExEKGZjeHApOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCBsc19yanQtPnJlYXNvbl9jb2RlKTsKKwkJYmZhX3RyYyhwb3J0LT5mY3MsIGxzX3JqdC0+cmVhc29uX2NvZGVfZXhwbCk7CisKKwkJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9SU1BfRVJST1IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9zbV9zZW5kX2V2ZW50KHNjbiwgU0NOU01fRVZFTlRfUlNQX0VSUk9SKTsKKwl9Cit9CisKKy8qCisgKiBTZW5kIGEgTFMgQWNjZXB0CisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3NlbmRfbHNfYWNjKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCwKKwkJCXN0cnVjdCBmY2hzX3MgKnJ4X2ZjaHMpCit7CisJc3RydWN0IGZjaHNfcyAgICAgICAgICBmY2hzOworCXN0cnVjdCBiZmFfZmN4cF9zICpmY3hwOworCXN0cnVjdCBiZmFfcnBvcnRfcyAqYmZhX3Jwb3J0ID0gTlVMTDsKKwlpbnQgICAgICAgICAgICAgbGVuOworCisJYmZhX3RyYyhwb3J0LT5mY3MsIHJ4X2ZjaHMtPnNfaWQpOworCisJZmN4cCA9IGJmYV9mY3NfZmN4cF9hbGxvYyhwb3J0LT5mY3MpOworCWlmICghZmN4cCkKKwkJcmV0dXJuOworCisJbGVuID0gZmNfbHNfYWNjX2J1aWxkKCZmY2hzLCBiZmFfZmN4cF9nZXRfcmVxYnVmKGZjeHApLCByeF9mY2hzLT5zX2lkLAorCQkJICAgICAgYmZhX2Zjc19wb3J0X2dldF9mY2lkKHBvcnQpLCByeF9mY2hzLT5veF9pZCk7CisKKwliZmFfZmN4cF9zZW5kKGZjeHAsIGJmYV9ycG9ydCwgcG9ydC0+ZmFicmljLT52Zl9pZCwgcG9ydC0+bHBfdGFnLAorCQkgICAgICBCRkFfRkFMU0UsIEZDX0NMQVNTXzMsIGxlbiwgJmZjaHMsIE5VTEwsIE5VTEwsCisJCSAgICAgIEZDX01BWF9QRFVTWiwgMCk7Cit9CisKKy8qKgorICogICAgIFRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBieSBiZmFfdGltZXIgb24gdGltZXIgdGltZW91dHMuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQkJLSBwb2ludGVyIHRvIGJmYV9mY3NfcG9ydF90LgorICogCXBhcmFtW291dF0JdnBvcnRfc3RhdHVzIAktIHBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IHN0YXR1cyBpbgorICoKKyAqIAlyZXR1cm4KKyAqIAkJdm9pZAorICoKKyogIAlTcGVjaWFsIENvbnNpZGVyYXRpb25zOgorICoKKyAqIAlub3RlCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3BvcnRfc2NuX3RpbWVvdXQodm9pZCAqYXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3BvcnRfc2NuX3MgKnNjbiA9IChzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICopYXJnOworCisJYmZhX3NtX3NlbmRfZXZlbnQoc2NuLCBTQ05TTV9FVkVOVF9USU1FT1VUKTsKK30KKworCisKKy8qKgorICogIGZjc19zY25fcHVibGljIEZDUyBzdGF0ZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHB1YmxpYyBpbnRlcmZhY2VzCisgKi8KKworLyoKKyAqIEZ1bmN0aW9ucyBjYWxsZWQgYnkgcG9ydC9mYWIKKyAqLwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9pbml0KHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2V0X3N0YXRlKHNjbiwgYmZhX2Zjc19wb3J0X3Njbl9zbV9vZmZsaW5lKTsKK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1BPUlRfT0ZGTElORSk7Cit9CisKK3ZvaWQKK2JmYV9mY3NfcG9ydF9zY25fb25saW5lKHN0cnVjdCBiZmFfZmNzX3BvcnRfcyAqcG9ydCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19wb3J0X3Njbl9zICpzY24gPSBCRkFfRkNTX0dFVF9TQ05fRlJPTV9QT1JUKHBvcnQpOworCisJc2NuLT5wb3J0ID0gcG9ydDsKKwliZmFfc21fc2VuZF9ldmVudChzY24sIFNDTlNNX0VWRU5UX1BPUlRfT05MSU5FKTsKK30KKworc3RhdGljIHZvaWQKK2JmYV9mY3NfcG9ydF9zY25fcG9ydGlkX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCB1MzIgcnBpZCkKK3sKKwlzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICpycG9ydDsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBycGlkKTsKKworCS8qKgorCSAqIElmIHRoaXMgaXMgYW4gdW5rbm93biBkZXZpY2UsIHRoZW4gaXQganVzdCBjYW1lIG9ubGluZS4KKwkgKiBPdGhlcndpc2UgbGV0IHJwb3J0IGhhbmRsZSB0aGUgUlNDTiBldmVudC4KKwkgKi8KKwlycG9ydCA9IGJmYV9mY3NfcG9ydF9nZXRfcnBvcnRfYnlfcGlkKHBvcnQsIHJwaWQpOworCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIG1pbiBjZmcgbW9kZSBpcyBlbmFibGVkLCB3ZSBkb25vdCBuZWVkIHRvCisJCSAqIGRpc2NvdmVyIGFueSBuZXcgcnBvcnRzLgorCQkgKi8KKwkJaWYgKCFfX2Zjc19taW5fY2ZnKHBvcnQtPmZjcykpCisJCQlycG9ydCA9IGJmYV9mY3NfcnBvcnRfY3JlYXRlKHBvcnQsIHJwaWQpOworCX0gZWxzZSB7CisJCWJmYV9mY3NfcnBvcnRfc2NuKHJwb3J0KTsKKwl9Cit9CisKKy8qKgorICogcnNjbiBmb3JtYXQgYmFzZWQgUElEIGNvbXBhcmlzb24KKyAqLworI2RlZmluZSBfX2ZjX3BpZF9tYXRjaChfX2MwLCBfX2MxLCBfX2ZtdCkJCVwKKwkoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfRkFCUklDKSB8fAkJXAorCSAoKChfX2ZtdCkgPT0gRkNfUlNDTl9GT1JNQVRfRE9NQUlOKSAmJgkJXAorCSAgKChfX2MwKVswXSA9PSAoX19jMSlbMF0pKSB8fAkJCVwKKwkgKCgoX19mbXQpID09IEZDX1JTQ05fRk9STUFUX0FSRUEpICYmCQlcCisJICAoKF9fYzApWzBdID09IChfX2MxKVswXSkgJiYJCQlcCisJICAoKF9fYzApWzFdID09IChfX2MxKVsxXSkpKQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc19wb3J0X3Njbl9tdWx0aXBvcnRfcnNjbihzdHJ1Y3QgYmZhX2Zjc19wb3J0X3MgKnBvcnQsCisJCQllbnVtIGZjX3JzY25fZm9ybWF0IGZvcm1hdCwgdTMyIHJzY25fcGlkKQoreworCXN0cnVjdCBiZmFfZmNzX3Jwb3J0X3MgKnJwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQgKnFlLCAqcWVfbmV4dDsKKwl1OCAgICAgICAgKmMwLCAqYzE7CisKKwliZmFfdHJjKHBvcnQtPmZjcywgZm9ybWF0KTsKKwliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCisJYzAgPSAodTggKikgJnJzY25fcGlkOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHFlLCBxZV9uZXh0LCAmcG9ydC0+cnBvcnRfcSkgeworCQlycG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc19ycG9ydF9zICopcWU7CisJCWMxID0gKHU4ICopICZycG9ydC0+cGlkOworCQlpZiAoX19mY19waWRfbWF0Y2goYzAsIGMxLCBmb3JtYXQpKQorCQkJYmZhX2Zjc19ycG9ydF9zY24ocnBvcnQpOworCX0KK30KKwordm9pZAorYmZhX2Zjc19wb3J0X3Njbl9wcm9jZXNzX3JzY24oc3RydWN0IGJmYV9mY3NfcG9ydF9zICpwb3J0LCBzdHJ1Y3QgZmNoc19zICpmY2hzLAorCQkJICAgICAgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgZmNfcnNjbl9wbF9zICAgKnJzY24gPSAoc3RydWN0IGZjX3JzY25fcGxfcyAqKSAoZmNocyArIDEpOworCWludCAgICAgICAgICAgICBudW1fZW50cmllczsKKwl1MzIgICAgICAgIHJzY25fcGlkOworCWJmYV9ib29sZWFuX3QgICBuc3F1ZXJ5ID0gQkZBX0ZBTFNFOworCWludCAgICAgICAgICAgICBpID0gMDsKKworCW51bV9lbnRyaWVzID0KKwkJKGJmYV9vc19udG9ocyhyc2NuLT5wYXlsZGxlbikgLQorCQkgc2l6ZW9mKHUzMikpIC8gc2l6ZW9mKHJzY24tPmV2ZW50WzBdKTsKKworCWJmYV90cmMocG9ydC0+ZmNzLCBudW1fZW50cmllcyk7CisKKwlwb3J0LT5zdGF0cy5udW1fcnNjbisrOworCisJYmZhX2Zjc19wb3J0X3Njbl9zZW5kX2xzX2FjYyhwb3J0LCBmY2hzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7CisJCXJzY25fcGlkID0gcnNjbi0+ZXZlbnRbaV0ucG9ydGlkOworCisJCWJmYV90cmMocG9ydC0+ZmNzLCByc2NuLT5ldmVudFtpXS5mb3JtYXQpOworCQliZmFfdHJjKHBvcnQtPmZjcywgcnNjbl9waWQpOworCisJCXN3aXRjaCAocnNjbi0+ZXZlbnRbaV0uZm9ybWF0KSB7CisJCWNhc2UgRkNfUlNDTl9GT1JNQVRfUE9SVElEOgorCQkJaWYgKHJzY24tPmV2ZW50W2ldLnF1YWxpZmllciA9PSBGQ19RT1NfUlNDTl9FVkVOVCkgeworCQkJCS8qCisJCQkJICogSWdub3JlIHRoaXMgZXZlbnQuIGYvdyB3b3VsZCBoYXZlIHByb2Nlc3NlZAorCQkJCSAqIGl0CisJCQkJICovCisJCQkJYmZhX3RyYyhwb3J0LT5mY3MsIHJzY25fcGlkKTsKKwkJCX0gZWxzZSB7CisJCQkJcG9ydC0+c3RhdHMubnVtX3BvcnRpZF9yc2NuKys7CisJCQkJYmZhX2Zjc19wb3J0X3Njbl9wb3J0aWRfcnNjbihwb3J0LCByc2NuX3BpZCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIEZDX1JTQ05fRk9STUFUX0ZBQlJJQzoKKwkJCWlmIChyc2NuLT5ldmVudFtpXS5xdWFsaWZpZXIgPT0KKwkJCSAgICBGQ19GQUJSSUNfTkFNRV9SU0NOX0VWRU5UKSB7CisJCQkJYmZhX2Zjc19wb3J0X21zX2ZhYnJpY19yc2NuKHBvcnQpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyoKKwkJCSAqICEhISEhISEhISBGYWxsIFRocm91Z2ggISEhISEhISEhISEhIQorCQkJICovCisKKwkJY2FzZSBGQ19SU0NOX0ZPUk1BVF9BUkVBOgorCQljYXNlIEZDX1JTQ05fRk9STUFUX0RPTUFJTjoKKwkJCW5zcXVlcnkgPSBCRkFfVFJVRTsKKwkJCWJmYV9mY3NfcG9ydF9zY25fbXVsdGlwb3J0X3JzY24ocG9ydCwKKwkJCQkJCQlyc2NuLT5ldmVudFtpXS5mb3JtYXQsCisJCQkJCQkJcnNjbl9waWQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJmYV9hc3NlcnQoMCk7CisJCQluc3F1ZXJ5ID0gQkZBX1RSVUU7CisJCX0KKwl9CisKKwkvKioKKwkgKiBJZiBhbnkgb2YgYXJlYSwgZG9tYWluIG9yIGZhYnJpYyBSU0NOIGlzIHJlY2VpdmVkLCBkbyBhIGZyZXNoIGRpc2NvdmVyeQorCSAqIHRvIGZpbmQgbmV3IGRldmljZXMuCisJICovCisJaWYgKG5zcXVlcnkpCisJCWJmYV9mY3NfcG9ydF9uc19xdWVyeShwb3J0KTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYmZhL3ZmYXBpLmMgYi9kcml2ZXJzL3Njc2kvYmZhL3ZmYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkODFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9iZmEvdmZhcGkuYwpAQCAtMCwwICsxLDI5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5IEJyb2NhZGUgQ29tbXVuaWNhdGlvbnMgU3lzdGVtcywgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZAorICogd3d3LmJyb2NhZGUuY29tCisgKgorICogTGludXggZHJpdmVyIGZvciBCcm9jYWRlIEZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlci4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKioKKyAqICB2ZmFwaS5jIEZhYnJpYyBtb2R1bGUgaW1wbGVtZW50YXRpb24uCisgKi8KKworI2luY2x1ZGUgImZjc19mYWJyaWMuaCIKKyNpbmNsdWRlICJmY3NfdHJjbW9kLmgiCisKK0JGQV9UUkNfRklMRShGQ1MsIFZGQVBJKTsKKworLyoqCisgKiAgZmNzX3ZmX2FwaSB2aXJ0dWFsIGZhYnJpY3MgQVBJCisgKi8KKworLyoqCisgKiAJCUVuYWJsZSBWRiBtb2RlLgorICoKKyAqIEBwYXJhbVtpbl0JCWZjcwkJZmNzIG1vZHVsZSBpbnN0YW5jZQorICogQHBhcmFtW2luXQkJdmZfaWQJCWRlZmF1bHQgdmZfaWQgb2YgcG9ydCwgRkNfVkZfSURfTlVMTAorICogCQkJCQl0byB1c2Ugc3RhbmRhcmQgZGVmYXVsdCB2Zl9pZCBvZiAxLgorICoKKyAqIEByZXR2YWwJQkZBX1NUQVRVU19PSwkJdmYgbW9kZSBpcyBlbmFibGVkCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfQlVTWQkJUG9ydCBpcyBhY3RpdmUuIFBvcnQgbXVzdCBiZSBkaXNhYmxlZAorICoJCQkJCWJlZm9yZSBWRiBtb2RlIGNhbiBiZSBlbmFibGVkLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfbW9kZV9lbmFibGUoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgdmZfaWQpCit7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogCQlEaXNhYmxlIFZGIG1vZGUuCisgKgorICogQHBhcmFtW2luXQkJZmNzCQlmY3MgbW9kdWxlIGluc3RhbmNlCisgKgorICogQHJldHZhbAlCRkFfU1RBVFVTX09LCQl2ZiBtb2RlIGlzIGRpc2FibGVkCisgKiBAcmV0dmFsCUJGQV9TVEFUVVNfQlVTWQkJVkZzIGFyZSBwcmVzZW50IGFuZCBiZWluZyB1c2VkLiBBbGwKKyAqIAkJCQkJVkZzIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgZGlzYWJsaW5nCisgKgkJCQkJVkYgbW9kZS4KKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3ZmX21vZGVfZGlzYWJsZShzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogCQlDcmVhdGUgYSBuZXcgVkYgaW5zdGFuY2UuCisgKgorICogIEEgbmV3IFZGIGlzIGNyZWF0ZWQgdXNpbmcgdGhlIGdpdmVuIFZGIGNvbmZpZ3VyYXRpb24uIEEgVkYgaXMgaWRlbnRpZmllZAorICogIGJ5IFZGIGlkLiBObyBkdXBsaWNhdGUgVkYgY3JlYXRpb24gaXMgYWxsb3dlZCB3aXRoIHRoZSBzYW1lIFZGIGlkLiBPbmNlCisgKiAgYSBWRiBpcyBjcmVhdGVkLCBWRiBpcyBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgYWZ0ZXIgbGluayBpbml0aWFsaXphdGlvbgorICogIGFuZCBFVkZQIGV4Y2hhbmdlIGlzIGNvbXBsZXRlZC4KKyAqCisgKiAJcGFyYW1baW5dIHZmCQktIAlGQ1MgdmYgZGF0YSBzdHJ1Y3R1cmUuIE1lbW9yeSBpcworICoJCQkJCWFsbG9jYXRlZCBieSBjYWxsZXIgKGRyaXZlcikKKyAqIAlwYXJhbVtpbl0gZmNzIAkJLSAJRkNTIG1vZHVsZQorICogCXBhcmFtW2luXSB2Zl9jZmcJLSAJVkYgY29uZmlndXJhdGlvbgorICogCXBhcmFtW2luXSB2Zl9kcnYgCS0gCU9wYXF1ZSBoYW5kbGUgYmFjayB0byB0aGUgZHJpdmVyJ3MKKyAqCQkJCQl2aXJ0dWFsIHZmIHN0cnVjdHVyZQorICoKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19PSyBWRiBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfRkFJTEVEIFZGIGNyZWF0aW9uIGZhaWxlZAorICogCXJldHZhbCBCRkFfU1RBVFVTX0VFWElTVCBBIFZGIGV4aXN0cyB3aXRoIHRoZSBnaXZlbiB2Zl9pZAorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfY3JlYXRlKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkLAorCQkgIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqcG9ydF9jZmcsIHN0cnVjdCBiZmFkX3ZmX3MgKnZmX2RydikKK3sKKwliZmFfdHJjKGZjcywgdmZfaWQpOworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZGVsZXRlIGEgQkZBIFZGIG9iamVjdC4gVkYgb2JqZWN0IHNob3VsZAorICogCQliZSBzdG9wcGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCisgKgorICogCXBhcmFtW2luXSB2ZiAtIHBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogCXJldHZhbCBCRkFfU1RBVFVTX09LCU9uIHZmIGRlbGV0aW9uIHN1Y2Nlc3MKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19CVVNZIFZGIGlzIG5vdCBpbiBhIHN0b3BwZWQgc3RhdGUKKyAqIAlyZXR2YWwgQkZBX1NUQVRVU19JTlBST0dSRVNTIFZGIGRlbGV0aW9uIGluIGluIHByb2dyZXNzCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192Zl9kZWxldGUoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7CisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlTdGFydCBwYXJ0aWNpcGF0aW9uIGluIFZGLiBUaGlzIHRyaWdnZXJzIGxvZ2luIHRvIHRoZSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9zdGFydChiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKK30KKworLyoqCisgKiAgCUxvZ291dCB3aXRoIHRoZSB2aXJ0dWFsIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dIHZmIC0gcG9pbnRlciB0byBiZmFfdmZfdC4KKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sgCU9uIHN1Y2Nlc3MuCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfSU5QUk9HUkVTUyBWRiBpcyBiZWluZyBzdG9wcGVkLgorICovCitiZmFfc3RhdHVzX3QKK2JmYV9mY3NfdmZfc3RvcChiZmFfZmNzX3ZmX3QgKnZmKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVJldHVybnMgYXR0cmlidXRlcyBvZiB0aGUgZ2l2ZW4gVkYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCQlwb2ludGVyIHRvIGJmYV92Zl90LgorICogCXBhcmFtW291dF0gdmZfYXR0ciAJdmYgYXR0cmlidXRlcyByZXR1cm5lZAorICoKKyAqIAlyZXR1cm4gTm9uZQorICovCit2b2lkCitiZmFfZmNzX3ZmX2dldF9hdHRyKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfdmZfYXR0cl9zICp2Zl9hdHRyKQoreworCWJmYV90cmModmYtPmZjcywgdmYtPnZmX2lkKTsKK30KKworLyoqCisgKiAJCVJldHVybiBzdGF0aXN0aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdmYuCisgKgorICogCXBhcmFtW2luXSAJdmYJCQlwb2ludGVyIHRvIGJmYV92Zl90LgorICogCXBhcmFtW291dF0gdmZfc3RhdHMgCXZmIHN0YXRpc3RpY3MgcmV0dXJuZWQKKyAqCisgKiAgQHJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYsIHN0cnVjdCBiZmFfdmZfc3RhdHNfcyAqdmZfc3RhdHMpCit7CisJYmZhX29zX21lbWNweSh2Zl9zdGF0cywgJnZmLT5zdGF0cywgc2l6ZW9mKHN0cnVjdCBiZmFfdmZfc3RhdHNfcykpOworCXJldHVybjsKK30KKwordm9pZAorLyoqCisgKiAJCWNsZWFyIHN0YXRpc3RpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJCXBvaW50ZXIgdG8gYmZhX3ZmX3QuCisgKgorICogIEByZXR1cm4gTm9uZQorICovCitiZmFfZmNzX3ZmX2NsZWFyX3N0YXRzKGJmYV9mY3NfdmZfdCAqdmYpCit7CisJYmZhX29zX21lbXNldCgmdmYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92Zl9zdGF0c19zKSk7CisJcmV0dXJuOworfQorCisvKioKKyAqICAJUmV0dXJucyBGQ1MgdmYgc3RydWN0dXJlIGZvciBhIGdpdmVuIHZmX2lkLgorICoKKyAqIAlwYXJhbVtpbl0gCXZmX2lkCQktIFZGX0lECisgKgorICogCXJldHVybgorICogCQlJZiBsb29rdXAgc3VjY2VlZHMsIHJldHVucyBmY3MgdmYgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyBOVUxMCisgKi8KK2JmYV9mY3NfdmZfdCAgICoKK2JmYV9mY3NfdmZfbG9va3VwKHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2IHZmX2lkKQoreworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJaWYgKHZmX2lkID09IEZDX1ZGX0lEX05VTEwpCisJCXJldHVybiAoJmZjcy0+ZmFicmljKTsKKworCS8qKgorCSAqIEB0b2RvIHZmIHN1cHBvcnQKKwkgKi8KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqICAJUmV0dXJucyBkcml2ZXIgVkYgc3RydWN0dXJlIGZvciBhIGdpdmVuIEZDUyB2Zi4KKyAqCisgKiAJcGFyYW1baW5dIAl2ZgkJLSBwb2ludGVyIHRvIGJmYV92Zl90CisgKgorICogCXJldHVybiBEcml2ZXIgVkYgc3RydWN0dXJlCisgKi8KK3N0cnVjdCBiZmFkX3ZmX3MgICAgICAqCitiZmFfZmNzX3ZmX2dldF9kcnZfdmYoYmZhX2Zjc192Zl90ICp2ZikKK3sKKwliZmFfYXNzZXJ0KHZmKTsKKwliZmFfdHJjKHZmLT5mY3MsIHZmLT52Zl9pZCk7CisJcmV0dXJuIHZmLT52Zl9kcnY7Cit9CisKKy8qKgorICogIAlSZXR1cm4gdGhlIGxpc3Qgb2YgVkZzIGNvbmZpZ3VyZWQuCisgKgorICogCXBhcmFtW2luXQlmY3MJZmNzIG1vZHVsZSBpbnN0YW5jZQorICogCXBhcmFtW291dF0gCXZmX2lkcwlyZXR1cm5lZCBsaXN0IG9mIHZmX2lkcworICogCXBhcmFtW2luLG91dF0gCW52ZnMJaW46c2l6ZSBvZiB2Zl9pZHMgYXJyYXksCisgKiAJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKiAJcmV0dXJuIERyaXZlciBWRiBzdHJ1Y3R1cmUKKyAqLwordm9pZAorYmZhX2Zjc192Zl9saXN0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcywgdTE2ICp2Zl9pZHMsIGludCAqbnZmcykKK3sKKwliZmFfdHJjKGZjcywgKm52ZnMpOworfQorCisvKioKKyAqICAJUmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBWRnMgdmlzaWJsZSBmcm9tIGZhYnJpYy4KKyAqCisgKiAJcGFyYW1baW5dCWZjcwlmY3MgbW9kdWxlIGluc3RhbmNlCisgKiAJcGFyYW1bb3V0XSAJdmZfaWRzCXJldHVybmVkIGxpc3Qgb2YgdmZfaWRzCisgKiAJcGFyYW1baW4sb3V0XSAJbnZmcwlpbjpzaXplIG9mIHZmX2lkcyBhcnJheSwKKyAqCQkJCW91dDp0b3RhbCBlbGVtZW50cyBwcmVzZW50LAorICogCQkJCWFjdHVhbCBlbGVtZW50cyByZXR1cm5lZCBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplCisgKgorICogCXJldHVybiBEcml2ZXIgVkYgc3RydWN0dXJlCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfbGlzdF9hbGwoc3RydWN0IGJmYV9mY3NfcyAqZmNzLCB1MTYgKnZmX2lkcywgaW50ICpudmZzKQoreworCWJmYV90cmMoZmNzLCAqbnZmcyk7Cit9CisKKy8qKgorICogCQlSZXR1cm4gdGhlIGxpc3Qgb2YgbG9jYWwgbG9naWNhbCBwb3J0cyBwcmVzZW50IGluIHRoZSBnaXZlbiBWRi4KKyAqCisgKiAJcGFyYW1baW5dCXZmCXZmIGZvciB3aGljaCBsb2dpY2FsIHBvcnRzIGFyZSByZXR1cm5lZAorICogCXBhcmFtW291dF0gCWxwd3duCXJldHVybmVkIGxvZ2ljYWwgcG9ydCB3d24gbGlzdAorICogCXBhcmFtW2luLG91dF0gCW5scG9ydHMJaW46c2l6ZSBvZiBscHd3biBsaXN0OworICoJCQkJb3V0OnRvdGFsIGVsZW1lbnRzIHByZXNlbnQsCisgKiAJCQkJYWN0dWFsIGVsZW1lbnRzIHJldHVybmVkIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUKKyAqCisgKi8KK3ZvaWQKK2JmYV9mY3NfdmZfZ2V0X3BvcnRzKGJmYV9mY3NfdmZfdCAqdmYsIHd3bl90IGxwd3duW10sIGludCAqbmxwb3J0cykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAqcWU7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJaW50ICAgICAgICAgICAgIGk7CisJc3RydWN0IGJmYV9mY3NfcyAgICAgICpmY3M7CisKKwlpZiAodmYgPT0gTlVMTCB8fCBscHd3biA9PSBOVUxMIHx8ICpubHBvcnRzID09IDApCisJCXJldHVybjsKKworCWZjcyA9IHZmLT5mY3M7CisKKwliZmFfdHJjKGZjcywgdmYtPnZmX2lkKTsKKwliZmFfdHJjKGZjcywgKHUzMikgKm5scG9ydHMpOworCisJaSA9IDA7CisJbHB3d25baSsrXSA9IHZmLT5icG9ydC5wb3J0X2NmZy5wd3duOworCisJbGlzdF9mb3JfZWFjaChxZSwgJnZmLT52cG9ydF9xKSB7CisJCWlmIChpID49ICpubHBvcnRzKQorCQkJYnJlYWs7CisKKwkJdnBvcnQgPSAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqKSBxZTsKKwkJbHB3d25baSsrXSA9IHZwb3J0LT5scG9ydC5wb3J0X2NmZy5wd3duOworCX0KKworCWJmYV90cmMoZmNzLCBpKTsKKwkqbmxwb3J0cyA9IGk7CisJcmV0dXJuOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYyBiL2RyaXZlcnMvc2NzaS9iZmEvdnBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTBhZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zY3NpL2JmYS92cG9ydC5jCkBAIC0wLDAgKzEsODkxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgQnJvY2FkZSBDb21tdW5pY2F0aW9ucyBTeXN0ZW1zLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiB3d3cuYnJvY2FkZS5jb20KKyAqCisgKiBMaW51eCBkcml2ZXIgZm9yIEJyb2NhZGUgRmlicmUgQ2hhbm5lbCBIb3N0IEJ1cyBBZGFwdGVyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qKgorICogIGJmYV9mY3NfdnBvcnQuYyBGQ1MgdmlydHVhbCBwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCisjaW5jbHVkZSA8YmZhLmg+CisjaW5jbHVkZSA8YmZhX3N2Yy5oPgorI2luY2x1ZGUgPGZjYnVpbGQuaD4KKyNpbmNsdWRlICJmY3NfZmFicmljLmgiCisjaW5jbHVkZSAiZmNzX2xwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3Zwb3J0LmgiCisjaW5jbHVkZSAiZmNzX3RyY21vZC5oIgorI2luY2x1ZGUgImZjcy5oIgorI2luY2x1ZGUgPGFlbi9iZmFfYWVuX2xwb3J0Lmg+CisKK0JGQV9UUkNfRklMRShGQ1MsIFZQT1JUKTsKKworI2RlZmluZSBfX3Zwb3J0X2ZjcyhfX3ZwKSAgICAgICAoX192cCktPmxwb3J0LmZjcworI2RlZmluZSBfX3Zwb3J0X3B3d24oX192cCkgICAgICAoX192cCktPmxwb3J0LnBvcnRfY2ZnLnB3d24KKyNkZWZpbmUgX192cG9ydF9ud3duKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5wb3J0X2NmZy5ud3duCisjZGVmaW5lIF9fdnBvcnRfYmZhKF9fdnApICAgICAgIChfX3ZwKS0+bHBvcnQuZmNzLT5iZmEKKyNkZWZpbmUgX192cG9ydF9mY2lkKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5waWQKKyNkZWZpbmUgX192cG9ydF9mYWJyaWMoX192cCkgICAgKF9fdnApLT5scG9ydC5mYWJyaWMKKyNkZWZpbmUgX192cG9ydF92ZmlkKF9fdnApICAgICAgKF9fdnApLT5scG9ydC5mYWJyaWMtPnZmX2lkCisKKyNkZWZpbmUgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUyAgNQorLyoKKyAqIEZvcndhcmQgZGVjbGFyYXRpb25zCisgKi8KK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X2RvX2ZkaXNjKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3RpbWVvdXQodm9pZCAqdnBvcnRfYXJnKTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X2RvX2xvZ28oc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfZnJlZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCk7CisKKy8qKgorICogIGZjc192cG9ydF9zbSBGQ1MgdmlydHVhbCBwb3J0IHN0YXRlIG1hY2hpbmUKKyAqLworCisvKioKKyAqIFZQb3J0IFN0YXRlIE1hY2hpbmUgZXZlbnRzCisgKi8KK2VudW0gYmZhX2Zjc192cG9ydF9ldmVudCB7CisJQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEUgPSAxLAkvKiAgdnBvcnQgY3JlYXRlIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEUgPSAyLAkvKiAgdnBvcnQgZGVsZXRlIGV2ZW50ICovCisJQkZBX0ZDU19WUE9SVF9TTV9TVEFSVCA9IDMsCS8qICB2cG9ydCBzdGFydCByZXF1ZXN0ICovCisJQkZBX0ZDU19WUE9SVF9TTV9TVE9QID0gNCwJLyogIHN0b3A6IHVuc3VwcG9ydGVkICovCisJQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkUgPSA1LAkvKiAgZmFicmljIG9ubGluZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORSA9IDYsCS8qICBmYWJyaWMgb2ZmbGluZSBldmVudCAqLworCUJGQV9GQ1NfVlBPUlRfU01fRlJNU0VOVCA9IDcsCS8qICBmZGlzYy9sb2dvIHNlbnQgZXZlbnRzICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0sgPSA4LAkvKiAgZ29vZCByZXNwb25zZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX0VSUk9SID0gOSwJLyogIGVycm9yL2JhZCByZXNwb25zZSAqLworCUJGQV9GQ1NfVlBPUlRfU01fVElNRU9VVCA9IDEwLAkvKiAgZGVsYXkgdGltZXIgZXZlbnQgKi8KKwlCRkFfRkNTX1ZQT1JUX1NNX0RFTENPTVAgPSAxMSwJLyogIGxwb3J0IGRlbGV0ZSBjb21wbGV0aW9uICovCisJQkZBX0ZDU19WUE9SVF9TTV9SU1BfRFVQX1dXTiA9IDEyLAkvKiAgRHVwIHdubiBlcnJvciAqLworCUJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRCA9IDEzLAkvKiAgbm9uLXJldHJ5YWJsZSBmYWlsdXJlICovCit9OworCitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV91bmluaXQoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CitzdGF0aWMgdm9pZCAgICAgYmZhX2Zjc192cG9ydF9zbV9mZGlzY19yZXRyeShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkJICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJCQllbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KTsKK3N0YXRpYyB2b2lkICAgICBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJCSBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fbG9nbyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCQkgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpOworc3RhdGljIHZvaWQgICAgIGJmYV9mY3NfdnBvcnRfc21fZXJyb3Ioc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkJICAgICAgIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYmZhX3NtX3RhYmxlX3MgdnBvcnRfc21fdGFibGVbXSA9IHsKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KSwgQkZBX0ZDU19WUE9SVF9VTklOSVR9LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKSwgQkZBX0ZDU19WUE9SVF9DUkVBVEVEfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSksIEJGQV9GQ1NfVlBPUlRfT0ZGTElORX0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKSwgQkZBX0ZDU19WUE9SVF9GRElTQ30sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KSwgQkZBX0ZDU19WUE9SVF9GRElTQ19SRVRSWX0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX29ubGluZSksIEJGQV9GQ1NfVlBPUlRfT05MSU5FfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fZGVsZXRpbmcpLCBCRkFfRkNTX1ZQT1JUX0RFTEVUSU5HfSwKKwl7QkZBX1NNKGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCksIEJGQV9GQ1NfVlBPUlRfQ0xFQU5VUH0sCisJe0JGQV9TTShiZmFfZmNzX3Zwb3J0X3NtX2xvZ28pLCBCRkFfRkNTX1ZQT1JUX0xPR099LAorCXtCRkFfU00oYmZhX2Zjc192cG9ydF9zbV9lcnJvciksIEJGQV9GQ1NfVlBPUlRfRVJST1J9Cit9OworCisvKioKKyAqIEJlZ2lubmluZyBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fdW5pbml0KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY3JlYXRlZCk7CisJCWJmYV9mY3NfZmFicmljX2FkZHZwb3J0KF9fdnBvcnRfZmFicmljKHZwb3J0KSwgdnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIENyZWF0ZWQgc3RhdGUgLSBhIHN0YXJ0IGV2ZW50IGlzIHJlcXVpcmVkIHRvIHN0YXJ0IHVwIHRoZSBzdGF0ZSBtYWNoaW5lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9jcmVhdGVkKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fU1RBUlQ6CisJCWlmIChiZmFfZmNzX2ZhYnJpY19pc19vbmxpbmUoX192cG9ydF9mYWJyaWModnBvcnQpKQorCQkgICAgJiYgYmZhX2Zjc19mYWJyaWNfbnBpdl9jYXBhYmxlKF9fdnBvcnRfZmFicmljKHZwb3J0KSkpIHsKKwkJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCX0gZWxzZSB7CisJCQkvKioKKwkJCSAqIEZhYnJpYyBpcyBvZmZsaW5lIG9yIG5vdCBOUElWIGNhcGFibGUsIHN0YXkgaW4KKwkJCSAqIG9mZmxpbmUgc3RhdGUuCisJCQkgKi8KKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfbm9fbnBpdisrOworCQkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fY2xlYW51cCk7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09OTElORToKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJLyoqCisJCSAqIElnbm9yZSBPTkxJTkUvT0ZGTElORSBldmVudHMgZnJvbSBmYWJyaWMgdGlsbCB2cG9ydCBpcyBzdGFydGVkLgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBPZmZsaW5lIHN0YXRlIC0gYXdhaXRpbmcgT05MSU5FIGV2ZW50IGZyb20gZmFicmljIFNNLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJIGVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXApOworCQliZmFfZmNzX3BvcnRfZGVsZXRlKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PTkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2MpOworCQl2cG9ydC0+ZmRpc2NfcmV0cmllcyA9IDA7CisJCWJmYV9mY3NfdnBvcnRfZG9fZmRpc2ModnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHZwb3J0IGNvdWxkbid0IGJlIGluaXRpYWx6aWVkIGR1ZQorCQkgKiB0aGUgZmFjdCB0aGF0IHRoZSBucGl2IHdhcyBub3QgZW5hYmxlZCBvbiB0aGUgc3dpdGNoLiBJbgorCQkgKiB0aGF0IGNhc2Ugd2Ugd2lsbCBwdXQgdGhlIHZwb3J0IGluIG9mZmxpbmUgc3RhdGUuIEhvd2V2ZXIsCisJCSAqIHRoZSBsaW5rIGNhbiBnbyBkb3duIGFuZCBjYXVzZSB0aGUgdGhpcyBldmVudCB0byBiZSBzZW50IHdoZW4KKwkJICogd2UgYXJlIGFscmVhZHkgb2ZmbGluZS4gSWdub3JlIGl0LgorCQkgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBGRElTQyBpcyBzZW50IGFuZCBhd2FpdGluZyByZXBseSBmcm9tIGZhYnJpYy4KKyAqLworc3RhdGljIHZvaWQKK2JmYV9mY3NfdnBvcnRfc21fZmRpc2Moc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCSAgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9sb2dvKTsKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQliZmFfZmNzX3Zwb3J0X2RvX2xvZ28odnBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9PRkZMSU5FOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX29mZmxpbmUpOworCQliZmFfbHBzX2Rpc2NhcmQodnBvcnQtPmxwcyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSzoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vbmxpbmUpOworCQliZmFfZmNzX3BvcnRfb25saW5lKCZ2cG9ydC0+bHBvcnQpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZmRpc2NfcmV0cnkpOworCQliZmFfdGltZXJfc3RhcnQoX192cG9ydF9iZmEodnBvcnQpLCAmdnBvcnQtPnRpbWVyLAorCQkJCWJmYV9mY3NfdnBvcnRfdGltZW91dCwgdnBvcnQsCisJCQkJQkZBX0ZDU19SRVRSWV9USU1FT1VUKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0ZBSUxFRDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV046CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fZXJyb3IpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisvKioKKyAqIEZESVNDIGF0dGVtcHQgZmFpbGVkIC0gYSB0aW1lciBpcyBhY3RpdmUgdG8gcmV0cnkgRkRJU0MuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjX3JldHJ5KHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYmZhX3RpbWVyX3N0b3AoJnZwb3J0LT50aW1lcik7CisJCWJmYV9mY3NfcG9ydF9kZWxldGUoJnZwb3J0LT5scG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fb2ZmbGluZSk7CisJCWJmYV90aW1lcl9zdG9wKCZ2cG9ydC0+dGltZXIpOworCQlicmVhazsKKworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9USU1FT1VUOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2ZkaXNjKTsKKwkJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3JldHJpZXMrKzsKKwkJdnBvcnQtPmZkaXNjX3JldHJpZXMrKzsKKwkJYmZhX2Zjc192cG9ydF9kb19mZGlzYyh2cG9ydCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYmZhX2Fzc2VydCgwKTsKKwl9Cit9CisKKy8qKgorICogVnBvcnQgaXMgb25saW5lIChGRElTQyBpcyBjb21wbGV0ZSkuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX29ubGluZShzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJCWVudW0gYmZhX2Zjc192cG9ydF9ldmVudCBldmVudCkKK3sKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKTsKKwkJYmZhX2Zjc19wb3J0X2RlbGV0ZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9vZmZsaW5lKTsKKwkJYmZhX2xwc19kaXNjYXJkKHZwb3J0LT5scHMpOworCQliZmFfZmNzX3BvcnRfb2ZmbGluZSgmdnBvcnQtPmxwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBWcG9ydCBpcyBiZWluZyBkZWxldGVkIC0gYXdhaXRpbmcgbHBvcnQgZGVsZXRlIGNvbXBsZXRpb24gdG8gc2VuZAorICogTE9HTyB0byBmYWJyaWMuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2RlbGV0aW5nKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUDoKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9sb2dvKTsKKwkJYmZhX2Zjc192cG9ydF9kb19sb2dvKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fT0ZGTElORToKKwkJYmZhX3NtX3NldF9zdGF0ZSh2cG9ydCwgYmZhX2Zjc192cG9ydF9zbV9jbGVhbnVwKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBFcnJvciBTdGF0ZS4KKyAqIFRoaXMgc3RhdGUgd2lsbCBiZSBzZXQgd2hlbiB0aGUgVnBvcnQgQ3JlYXRpb24gZmFpbHMgZHVlIHRvIGVycm9ycyBsaWtlCisgKiBEdXAgV1dOLiBJbiB0aGlzIHN0YXRlIG9ubHkgb3BlcmF0aW9uIGFsbG93ZWQgaXMgYSBWcG9ydCBEZWxldGUuCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2Vycm9yKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICAgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxFVEU6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCX0KK30KKworLyoqCisgKiBMcG9ydCBjbGVhbnVwIGlzIGluIHByb2dyZXNzIHNpbmNlIHZwb3J0IGlzIGJlaW5nIGRlbGV0ZWQuIEZhYnJpYyBpcworICogb2ZmbGluZSwgc28gbm8gTE9HTyBpcyBuZWVkZWQgdG8gY29tcGxldGUgdnBvcnQgZGVsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X3NtX2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsCisJCQkgZW51bSBiZmFfZmNzX3Zwb3J0X2V2ZW50IGV2ZW50KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9ERUxDT01QOgorCQliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisJCWJmYV9mY3NfdnBvcnRfZnJlZSh2cG9ydCk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX0RFTEVURToKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQliZmFfYXNzZXJ0KDApOworCX0KK30KKworLyoqCisgKiBMT0dPIGlzIHNlbnQgdG8gZmFicmljLiBWcG9ydCBkZWxldGUgaXMgaW4gcHJvZ3Jlc3MuIExwb3J0IGRlbGV0ZSBjbGVhbnVwCisgKiBpcyBkb25lLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9zbV9sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkgICAgICBlbnVtIGJmYV9mY3NfdnBvcnRfZXZlbnQgZXZlbnQpCit7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIF9fdnBvcnRfcHd3bih2cG9ydCkpOworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkU6CisJCWJmYV9scHNfZGlzY2FyZCh2cG9ydC0+bHBzKTsKKwkJLyoKKwkJICogISEhIGZhbGwgdGhyb3VnaCAhISEKKwkJICovCisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fUlNQX09LOgorCWNhc2UgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1I6CisJCWJmYV9zbV9zZXRfc3RhdGUodnBvcnQsIGJmYV9mY3NfdnBvcnRfc21fdW5pbml0KTsKKwkJYmZhX2Zjc192cG9ydF9mcmVlKHZwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJmYV9hc3NlcnQoMCk7CisJfQorfQorCisKKworLyoqCisgKiAgZmNzX3Zwb3J0X3ByaXZhdGUgRkNTIHZpcnR1YWwgcG9ydCBwcml2YXRlIGZ1bmN0aW9ucworICovCisKKy8qKgorICogU2VuZCBBRU4gbm90aWZpY2F0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2Flbl9wb3N0KGJmYV9mY3NfbHBvcnRfdCAqcG9ydCwgZW51bSBiZmFfbHBvcnRfYWVuX2V2ZW50IGV2ZW50KQoreworCXVuaW9uIGJmYV9hZW5fZGF0YV91IGFlbl9kYXRhOworCXN0cnVjdCBiZmFfbG9nX21vZF9zICpsb2dtb2QgPSBwb3J0LT5mY3MtPmxvZ207CisJZW51bSBiZmFfcG9ydF9yb2xlIHJvbGUgPSBwb3J0LT5wb3J0X2NmZy5yb2xlczsKKwl3d25fdCAgICAgICAgICAgbHB3d24gPSBiZmFfZmNzX3BvcnRfZ2V0X3B3d24ocG9ydCk7CisJY2hhciAgICAgICAgICAgIGxwd3duX3B0cltCRkFfU1RSSU5HXzMyXTsKKwljaGFyICAgICAgICAgICAqcm9sZV9zdHJbQkZBX1BPUlRfUk9MRV9GQ1BfTUFYIC8gMiArIDFdID0KKwkJeyAiSW5pdGlhdG9yIiwgIlRhcmdldCIsICJJUEZDIiB9OworCisJd3duMnN0cihscHd3bl9wdHIsIGxwd3duKTsKKworCWJmYV9hc3NlcnQocm9sZSA8PSBCRkFfUE9SVF9ST0xFX0ZDUF9NQVgpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV046CisJCWJmYV9sb2cobG9nbW9kLCBCRkFfQUVOX0xQT1JUX05QSVZfRFVQX1dXTiwgbHB3d25fcHRyLAorCQkJcm9sZV9zdHJbcm9sZSAvIDJdKTsKKwkJYnJlYWs7CisJY2FzZSBCRkFfTFBPUlRfQUVOX05QSVZfRkFCUklDX01BWDoKKwkJYmZhX2xvZyhsb2dtb2QsIEJGQV9BRU5fTFBPUlRfTlBJVl9GQUJSSUNfTUFYLCBscHd3bl9wdHIsCisJCQlyb2xlX3N0cltyb2xlIC8gMl0pOworCQlicmVhazsKKwljYXNlIEJGQV9MUE9SVF9BRU5fTlBJVl9VTktOT1dOOgorCQliZmFfbG9nKGxvZ21vZCwgQkZBX0FFTl9MUE9SVF9OUElWX1VOS05PV04sIGxwd3duX3B0ciwKKwkJCXJvbGVfc3RyW3JvbGUgLyAyXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFlbl9kYXRhLmxwb3J0LnZmX2lkID0gcG9ydC0+ZmFicmljLT52Zl9pZDsKKwlhZW5fZGF0YS5scG9ydC5yb2xlcyA9IHJvbGU7CisJYWVuX2RhdGEubHBvcnQucHB3d24gPQorCQliZmFfZmNzX3BvcnRfZ2V0X3B3d24oYmZhX2Zjc19nZXRfYmFzZV9wb3J0KHBvcnQtPmZjcykpOworCWFlbl9kYXRhLmxwb3J0Lmxwd3duID0gbHB3d247Cit9CisKKy8qKgorICogVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIHRvIHNlbmQgYSBGRElTQyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9kb19mZGlzYyhzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfbHBzX2ZkaXNjKHZwb3J0LT5scHMsIHZwb3J0LAorCQkgICAgICBiZmFfcHBvcnRfZ2V0X21heGZyc2l6ZShfX3Zwb3J0X2JmYSh2cG9ydCkpLAorCQkgICAgICBfX3Zwb3J0X3B3d24odnBvcnQpLCBfX3Zwb3J0X253d24odnBvcnQpKTsKKwl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2Nfc2VudCsrOworfQorCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9mZGlzY19yZWplY3RlZChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwl1OCAgICAgICAgIGxzcmp0X3JzbiA9IGJmYV9scHNfZ2V0X2xzcmp0X3Jzbih2cG9ydC0+bHBzKTsKKwl1OCAgICAgICAgIGxzcmp0X2V4cGwgPSBiZmFfbHBzX2dldF9sc3JqdF9leHBsKHZwb3J0LT5scHMpOworCisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGxzcmp0X3Jzbik7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIGxzcmp0X2V4cGwpOworCisJLyoKKwkgKiBGb3IgY2VydGFpbiByZWFzb24gY29kZXMsIHdlIGRvbid0IHdhbnQgdG8gcmV0cnkuCisJICovCisJc3dpdGNoIChiZmFfbHBzX2dldF9sc3JqdF9leHBsKHZwb3J0LT5scHMpKSB7CisJY2FzZSBGQ19MU19SSlRfRVhQX0lOVl9QT1JUX05BTUU6CS8qIGJ5IGJyb2NhZGUgKi8KKwljYXNlIEZDX0xTX1JKVF9FWFBfSU5WQUxJRF9OUE9SVF9JRDoJLyogYnkgQ2lzY28gKi8KKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzIDwgQkZBX0ZDU19WUE9SVF9NQVhfUkVUUklFUykKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWVsc2UgeworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX0RVUF9XV04pOworCQkJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fUlNQX0RVUF9XV04pOworCQl9CisJCWJyZWFrOworCisJY2FzZSBGQ19MU19SSlRfRVhQX0lOU1VGRl9SRVM6CisJCS8qCisJCSAqIFRoaXMgbWVhbnMgbWF4IGxvZ2lucyBwZXIgcG9ydC9zd2l0Y2ggc2V0dGluZyBvbiB0aGUKKwkJICogc3dpdGNoIHdhcyBleGNlZWRlZC4KKwkJICovCisJCWlmICh2cG9ydC0+ZmRpc2NfcmV0cmllcyA8IEJGQV9GQ1NfVlBPUlRfTUFYX1JFVFJJRVMpCisJCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCQllbHNlIHsKKwkJCWJmYV9mY3NfdnBvcnRfYWVuX3Bvc3QoJnZwb3J0LT5scG9ydCwKKwkJCQkJICAgICAgIEJGQV9MUE9SVF9BRU5fTlBJVl9GQUJSSUNfTUFYKTsKKwkJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9GQUlMRUQpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJaWYgKHZwb3J0LT5mZGlzY19yZXRyaWVzID09IDApCS8qIFByaW50IG9ubHkgb25jZSAqLworCQkJYmZhX2Zjc192cG9ydF9hZW5fcG9zdCgmdnBvcnQtPmxwb3J0LAorCQkJCQkgICAgICAgQkZBX0xQT1JUX0FFTl9OUElWX1VOS05PV04pOworCQliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfRVJST1IpOworCX0KK30KKworLyoqCisgKiAJQ2FsbGVkIHRvIHNlbmQgYSBsb2dvdXQgdG8gdGhlIGZhYnJpYy4gVXNlZCB3aGVuIGEgVi1Qb3J0IGlzCisgKiAJZGVsZXRlZC9zdG9wcGVkLgorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF9kb19sb2dvKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCWJmYV90cmMoX192cG9ydF9mY3ModnBvcnQpLCBfX3Zwb3J0X3B3d24odnBvcnQpKTsKKworCXZwb3J0LT52cG9ydF9zdGF0cy5sb2dvX3NlbnQrKzsKKwliZmFfbHBzX2ZkaXNjbG9nbyh2cG9ydC0+bHBzKTsKK30KKworLyoqCisgKiAgICAgVGhpcyByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IGJmYV90aW1lciBvbiB0aW1lciB0aW1lb3V0cy4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCS0gcG9pbnRlciB0byBiZmFfZmNzX3Zwb3J0X3QuCisgKiAJcGFyYW1bb3V0XQl2cG9ydF9zdGF0dXMgCS0gcG9pbnRlciB0byByZXR1cm4gdnBvcnQgc3RhdHVzIGluCisgKgorICogCXJldHVybgorICogCQl2b2lkCisgKgorKiAJU3BlY2lhbCBDb25zaWRlcmF0aW9uczoKKyAqCisgKiAJbm90ZQorICovCitzdGF0aWMgdm9pZAorYmZhX2Zjc192cG9ydF90aW1lb3V0KHZvaWQgKnZwb3J0X2FyZykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCA9IChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICopdnBvcnRfYXJnOworCisJdnBvcnQtPnZwb3J0X3N0YXRzLmZkaXNjX3RpbWVvdXRzKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fVElNRU9VVCk7Cit9CisKK3N0YXRpYyB2b2lkCitiZmFfZmNzX3Zwb3J0X2ZyZWUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX2Zjc19mYWJyaWNfZGVsdnBvcnQoX192cG9ydF9mYWJyaWModnBvcnQpLCB2cG9ydCk7CisJYmZhX2ZjYl92cG9ydF9kZWxldGUodnBvcnQtPnZwb3J0X2Rydik7CisJYmZhX2xwc19kZWxldGUodnBvcnQtPmxwcyk7Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfcHVibGljIEZDUyB2aXJ0dWFsIHBvcnQgcHVibGljIGludGVyZmFjZXMKKyAqLworCisvKioKKyAqIE9ubGluZSBub3RpZmljYXRpb24gZnJvbSBmYWJyaWMgU00uCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfb25saW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfb25saW5lKys7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fT05MSU5FKTsKK30KKworLyoqCisgKiBPZmZsaW5lIG5vdGlmaWNhdGlvbiBmcm9tIGZhYnJpYyBTTS4KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9vZmZsaW5lKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0KQoreworCXZwb3J0LT52cG9ydF9zdGF0cy5mYWJfb2ZmbGluZSsrOworCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX09GRkxJTkUpOworfQorCisvKioKKyAqIENsZWFudXAgbm90aWZpY2F0aW9uIGZyb20gZmFicmljIFNNIG9uIGxpbmsgdGltZXIgZXhwaXJ5LgorICovCit2b2lkCitiZmFfZmNzX3Zwb3J0X2NsZWFudXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJdnBvcnQtPnZwb3J0X3N0YXRzLmZhYl9jbGVhbnVwKys7Cit9CisKKy8qKgorICogRGVsZXRlIGNvbXBsZXRpb24gY2FsbGJhY2sgZnJvbSBhc3NvY2lhdGVkIGxwb3J0CisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZGVsZXRlX2NvbXAoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fREVMQ09NUCk7Cit9CisKKy8qKgorICogICBNb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9tb2Rpbml0KHN0cnVjdCBiZmFfZmNzX3MgKmZjcykKK3sKK30KKworLyoqCisgKiAgIE1vZHVsZSBjbGVhbnVwCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfbW9kZXhpdChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MpCit7CisJYmZhX2Zjc19tb2RleGl0X2NvbXAoZmNzKTsKK30KKwordTMyCitiZmFfZmNzX3Zwb3J0X2dldF9tYXgoc3RydWN0IGJmYV9mY3NfcyAqZmNzKQoreworCXN0cnVjdCBiZmFfaW9jX2F0dHJfcyBpb2NfYXR0cjsKKworCWJmYV9nZXRfYXR0cihmY3MtPmJmYSwgJmlvY19hdHRyKTsKKworCWlmIChpb2NfYXR0ci5wY2lfYXR0ci5kZXZpY2VfaWQgPT0gQkZBX1BDSV9ERVZJQ0VfSURfQ1QpCisJCXJldHVybiAoQkZBX0ZDU19NQVhfVlBPUlRTX1NVUFBfQ1QpOworCWVsc2UKKwkJcmV0dXJuIChCRkFfRkNTX01BWF9WUE9SVFNfU1VQUF9DQik7Cit9CisKKworCisvKioKKyAqICBmY3NfdnBvcnRfYXBpIFZpcnR1YWwgcG9ydCBBUEkKKyAqLworCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgYSBuZXcgRkNTIHZwb3J0IG9iamVjdC4gVGhpcworICogCWZ1bmN0aW9uIHdpbGwgbm90IHRyaWdnZXIgYW55IEhXIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgKHdoaWNoIHdpbGwgYmUKKyAqIAlkb25lIGluIHZwb3J0X3N0YXJ0KCkgY2FsbCkKKyAqCisgKiAJcGFyYW1baW5dIHZwb3J0CS0gCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LiBUaGlzIHNwYWNlCisgKiAJCQkJCW5lZWRzIHRvIGJlIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLgorICogCXBhcmFtW2luXSBmY3MgCQktIAlGQ1MgaW5zdGFuY2UKKyAqIAlwYXJhbVtpbl0gdnBvcnRfY2ZnCS0gCXZwb3J0IGNvbmZpZ3VyYXRpb24KKyAqIAlwYXJhbVtpbl0gdmZfaWQgICAgCS0gCVZGX0lEIGlmIHZwb3J0IGlzIGNyZWF0ZWQgd2l0aGluIGEgVkYuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgCQlGQ19WRl9JRF9OVUxMIHRvIHNwZWNpZnkgYmFzZSBmYWJyaWMuCisgKiAJcGFyYW1baW5dIHZwb3J0X2RydiAJLSAJT3BhcXVlIGhhbmRsZSBiYWNrIHRvIHRoZSBkcml2ZXIncyB2cG9ydAorICogCQkJCQlzdHJ1Y3R1cmUKKyAqCisgKiAJcmV0dmFsIEJGQV9TVEFUVVNfT0sgLSBvbiBzdWNjZXNzLgorICogCXJldHZhbCBCRkFfU1RBVFVTX0ZBSUxFRCAtIG9uIGZhaWx1cmUuCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9jcmVhdGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQsIHN0cnVjdCBiZmFfZmNzX3MgKmZjcywKKwkJICAgICB1MTYgdmZfaWQsIHN0cnVjdCBiZmFfcG9ydF9jZmdfcyAqdnBvcnRfY2ZnLAorCQkgICAgIHN0cnVjdCBiZmFkX3Zwb3J0X3MgKnZwb3J0X2RydikKK3sKKwlpZiAodnBvcnRfY2ZnLT5wd3duID09IDApCisJCXJldHVybiAoQkZBX1NUQVRVU19JTlZBTElEX1dXTik7CisKKwlpZiAoYmZhX2Zjc19wb3J0X2dldF9wd3duKCZmY3MtPmZhYnJpYy5icG9ydCkgPT0gdnBvcnRfY2ZnLT5wd3duKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9XV05fQlA7CisKKwlpZiAoYmZhX2Zjc192cG9ydF9sb29rdXAoZmNzLCB2Zl9pZCwgdnBvcnRfY2ZnLT5wd3duKSAhPSBOVUxMKQorCQlyZXR1cm4gQkZBX1NUQVRVU19WUE9SVF9FWElTVFM7CisKKwlpZiAoYmZhX2Zjc19mYWJyaWNfdnBvcnRfY291bnQoJmZjcy0+ZmFicmljKSA9PQorCSAgICBiZmFfZmNzX3Zwb3J0X2dldF9tYXgoZmNzKSkKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfTUFYOworCisJdnBvcnQtPmxwcyA9IGJmYV9scHNfYWxsb2MoZmNzLT5iZmEpOworCWlmICghdnBvcnQtPmxwcykKKwkJcmV0dXJuIEJGQV9TVEFUVVNfVlBPUlRfTUFYOworCisJdnBvcnQtPnZwb3J0X2RydiA9IHZwb3J0X2RydjsKKwliZmFfc21fc2V0X3N0YXRlKHZwb3J0LCBiZmFfZmNzX3Zwb3J0X3NtX3VuaW5pdCk7CisKKwliZmFfZmNzX2xwb3J0X2luaXQoJnZwb3J0LT5scG9ydCwgZmNzLCB2Zl9pZCwgdnBvcnRfY2ZnLCB2cG9ydCk7CisKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9DUkVBVEUpOworCisJcmV0dXJuIEJGQV9TVEFUVVNfT0s7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplIHRoZSB2cG9ydC4KKyAqCisgKiAgQHBhcmFtW2luXSB2cG9ydCAtIHBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICoKKyAqICBAcmV0dXJucyBOb25lCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9zdGFydChzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCkKK3sKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9TVEFSVCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHF1aWVzZSB0aGUgdnBvcnQgb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiAJaW1tZWRpYXRlbHksIHdoZW4gdGhlIHZwb3J0IGlzIGFjdHVhbGx5IHN0b3BwZWQsIHRoZQorICogCWJmYV9kcnZfdnBvcnRfc3RvcF9jYigpIHdpbGwgYmUgY2FsbGVkLgorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQgLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLworYmZhX3N0YXR1c190CitiZmFfZmNzX3Zwb3J0X3N0b3Aoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fU1RPUCk7CisKKwlyZXR1cm4gQkZBX1NUQVRVU19PSzsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGRlbGV0ZSBhIHZwb3J0IG9iamVjdC4gRmFicmljIG9iamVjdCBzaG91bGQKKyAqIAkJYmUgc3RvcHBlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBjYWxsLgorICoKKyAqIAlwYXJhbVtpbl0gdnBvcnQgLSBwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuICAgICBOb25lCisgKi8KK2JmYV9zdGF0dXNfdAorYmZhX2Zjc192cG9ydF9kZWxldGUoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX3NtX3NlbmRfZXZlbnQodnBvcnQsIEJGQV9GQ1NfVlBPUlRfU01fREVMRVRFKTsKKworCXJldHVybiBCRkFfU1RBVFVTX09LOworfQorCisvKioKKyAqICAJVXNlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IHZwb3J0J3MgY3VycmVudCBzdGF0dXMgaW5mby4KKyAqCisgKiAJcGFyYW1baW5dIAl2cG9ydCAJCXBvaW50ZXIgdG8gYmZhX2Zjc192cG9ydF90LgorICogCXBhcmFtW291dF0JYXR0ciAJCXBvaW50ZXIgdG8gcmV0dXJuIHZwb3J0IGF0dHJpYnV0ZXMKKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9nZXRfYXR0cihzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCwKKwkJICAgICAgIHN0cnVjdCBiZmFfdnBvcnRfYXR0cl9zICphdHRyKQoreworCWlmICh2cG9ydCA9PSBOVUxMIHx8IGF0dHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJYmZhX29zX21lbXNldChhdHRyLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92cG9ydF9hdHRyX3MpKTsKKworCWJmYV9mY3NfcG9ydF9nZXRfYXR0cigmdnBvcnQtPmxwb3J0LCAmYXR0ci0+cG9ydF9hdHRyKTsKKwlhdHRyLT52cG9ydF9zdGF0ZSA9IGJmYV9zbV90b19zdGF0ZSh2cG9ydF9zbV90YWJsZSwgdnBvcnQtPnNtKTsKK30KKworLyoqCisgKiAgCVVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB2cG9ydCdzIHN0YXRpc3RpY3MuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqIAlwYXJhbVtvdXRdCXN0YXRzCQlwb2ludGVyIHRvIHJldHVybiB2cG9ydCBzdGF0aXN0aWNzIGluCisgKgorICogCXJldHVybiBOb25lCisgKi8KK3ZvaWQKK2JmYV9mY3NfdnBvcnRfZ2V0X3N0YXRzKHN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0LAorCQkJc3RydWN0IGJmYV92cG9ydF9zdGF0c19zICpzdGF0cykKK3sKKwkqc3RhdHMgPSB2cG9ydC0+dnBvcnRfc3RhdHM7Cit9CisKKy8qKgorICogIAlVc2UgdGhpcyBmdW5jdGlvbiB0byBjbGVhciB2cG9ydCdzIHN0YXRpc3RpY3MuCisgKgorICogCXBhcmFtW2luXSAJdnBvcnQgCQlwb2ludGVyIHRvIGJmYV9mY3NfdnBvcnRfdC4KKyAqCisgKiAJcmV0dXJuIE5vbmUKKyAqLwordm9pZAorYmZhX2Zjc192cG9ydF9jbHJfc3RhdHMoc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQpCit7CisJYmZhX29zX21lbXNldCgmdnBvcnQtPnZwb3J0X3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJmYV92cG9ydF9zdGF0c19zKSk7Cit9CisKKy8qKgorICogICAgICBMb29rdXAgYSB2aXJ0dWFsIHBvcnQuIEV4Y2x1ZGVzIGJhc2UgcG9ydCBmcm9tIGxvb2t1cC4KKyAqLworc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqCitiZmFfZmNzX3Zwb3J0X2xvb2t1cChzdHJ1Y3QgYmZhX2Zjc19zICpmY3MsIHUxNiB2Zl9pZCwgd3duX3QgdnB3d24pCit7CisJc3RydWN0IGJmYV9mY3NfdnBvcnRfcyAqdnBvcnQ7CisJc3RydWN0IGJmYV9mY3NfZmFicmljX3MgKmZhYnJpYzsKKworCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJYmZhX3RyYyhmY3MsIHZwd3duKTsKKworCWZhYnJpYyA9IGJmYV9mY3NfdmZfbG9va3VwKGZjcywgdmZfaWQpOworCWlmICghZmFicmljKSB7CisJCWJmYV90cmMoZmNzLCB2Zl9pZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXZwb3J0ID0gYmZhX2Zjc19mYWJyaWNfdnBvcnRfbG9va3VwKGZhYnJpYywgdnB3d24pOworCXJldHVybiB2cG9ydDsKK30KKworLyoqCisgKiBGRElTQyBSZXNwb25zZQorICovCit2b2lkCitiZmFfY2JfbHBzX2ZkaXNjX2NvbXAodm9pZCAqYmZhZCwgdm9pZCAqdWFyZywgYmZhX3N0YXR1c190IHN0YXR1cykKK3sKKwlzdHJ1Y3QgYmZhX2Zjc192cG9ydF9zICp2cG9ydCA9IHVhcmc7CisKKwliZmFfdHJjKF9fdnBvcnRfZmNzKHZwb3J0KSwgX192cG9ydF9wd3duKHZwb3J0KSk7CisJYmZhX3RyYyhfX3Zwb3J0X2Zjcyh2cG9ydCksIHN0YXR1cyk7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgQkZBX1NUQVRVU19PSzoKKwkJLyoKKwkJICogSW5pdGlhbGlhemUgdGhlIFYtUG9ydCBmaWVsZHMKKwkJICovCisJCV9fdnBvcnRfZmNpZCh2cG9ydCkgPSBiZmFfbHBzX2dldF9waWQodnBvcnQtPmxwcyk7CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NlcHRzKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9PSyk7CisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0lOVkFMSURfTUFDOgorCQkvKgorCQkgKiBPbmx5IGZvciBDTkEKKwkJICovCisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NfYmFkKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisKKwkJYnJlYWs7CisKKwljYXNlIEJGQV9TVEFUVVNfRVBST1RPQ09MOgorCQlzd2l0Y2ggKGJmYV9scHNfZ2V0X2V4dHN0YXR1cyh2cG9ydC0+bHBzKSkgeworCQljYXNlIEJGQV9FUFJPVE9fQkFEX0FDQ0VQVDoKKwkJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19hY2NfYmFkKys7CisJCQlicmVhazsKKworCQljYXNlIEJGQV9FUFJPVE9fVU5LTk9XTl9SU1A6CisJCQl2cG9ydC0+dnBvcnRfc3RhdHMuZmRpc2NfdW5rbm93bl9yc3ArKzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJCWJyZWFrOworCisJY2FzZSBCRkFfU1RBVFVTX0ZBQlJJQ19SSlQ6CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19yZWplY3RzKys7CisJCWJmYV9mY3NfdnBvcnRfZmRpc2NfcmVqZWN0ZWQodnBvcnQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXZwb3J0LT52cG9ydF9zdGF0cy5mZGlzY19yc3BfZXJyKys7CisJCWJmYV9zbV9zZW5kX2V2ZW50KHZwb3J0LCBCRkFfRkNTX1ZQT1JUX1NNX1JTUF9FUlJPUik7CisJfQorfQorCisvKioKKyAqIExPR08gcmVzcG9uc2UKKyAqLwordm9pZAorYmZhX2NiX2xwc19mZGlzY2xvZ29fY29tcCh2b2lkICpiZmFkLCB2b2lkICp1YXJnKQoreworCXN0cnVjdCBiZmFfZmNzX3Zwb3J0X3MgKnZwb3J0ID0gdWFyZzsKKwliZmFfc21fc2VuZF9ldmVudCh2cG9ydCwgQkZBX0ZDU19WUE9SVF9TTV9SU1BfT0spOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaS5oIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKaW5kZXggZDc1NzZmMi4uNWVkZGUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpLmgKQEAgLTEwMCw2ICsxMDAsOCBAQAogI2RlZmluZSBDVFhfT0ZGU0VUIAkJCTB4MTAwMDAKICNkZWZpbmUgTUFYX0NJRF9DTlQJCQkweDQwMDAKIAorI2RlZmluZSBCTlgySV81NzBYX1BBR0VfU0laRV9ERUZBVUxUCTQwOTYKKwogLyogNTcwOSBjb250ZXh0IHJlZ2lzdGVycyAqLwogI2RlZmluZSBCTlgyX01RX0NPTkZJRzIJCQkweDAwMDAzZDAwCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHMl9DT05UX1NaCQkoMHg3TDw8NCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYyBiL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9od2kuYwppbmRleCA0MWUxYjBlLi41YzhkNzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYm54MmkvYm54MmlfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2h3aS5jCkBAIC0yMzg2LDcgKzIzODYsNyBAQAogCQljdHhfc3ogPSAoY29uZmlnMiAmIEJOWDJfTVFfQ09ORklHMl9DT05UX1NaKSA+PiAzOwogCQlpZiAoY3R4X3N6KQogCQkJcmVnX29mZiA9IENUWF9PRkZTRVQgKyBNQVhfQ0lEX0NOVCAqIE1CX0tFUk5FTF9DVFhfU0laRQotCQkJCSAgKyBQQUdFX1NJWkUgKgorCQkJCSAgKyBCTlgySV81NzBYX1BBR0VfU0laRV9ERUZBVUxUICoKIAkJCQkgICgoKGNpZF9udW0gLSBmaXJzdF9sNGw1KSAvIGN0eF9zeikgKyAyNTYpOwogCQllbHNlCiAJCQlyZWdfb2ZmID0gQ1RYX09GRlNFVCArIChNQl9LRVJORUxfQ1RYX1NJWkUgKiBjaWRfbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ibngyaS9ibngyaV9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKaW5kZXggOWE3YmE3MS4uY2FmYjg4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2JueDJpL2JueDJpX2lzY3NpLmMKQEAgLTEyNDMsNyArMTI0Myw3IEBACiAJCWNtZHNfbWF4ID0gQk5YMklfU1FfV1FFU19NSU47CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmJueDJpX2lzY3NpX3RyYW5zcG9ydCwgc2hvc3QsCi0JCQkJCSAgY21kc19tYXgsIHNpemVvZihzdHJ1Y3QgYm54MmlfY21kKSwKKwkJCQkJICBjbWRzX21heCwgMCwgc2l6ZW9mKHN0cnVjdCBibngyaV9jbWQpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIElTQ1NJX01BWF9UQVJHRVQpOwogCWlmICghY2xzX3Nlc3Npb24pCiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9jeGdiM2kvY3hnYjNpX2lzY3NpLmMKaW5kZXggYzM5OWY0OC4uMjYzMWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2N4Z2IzaS9jeGdiM2lfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3hnYjNpL2N4Z2IzaV9pc2NzaS5jCkBAIC00MjIsNyArNDIyLDcgQEAKIAlCVUdfT04oaGJhICE9IGlzY3NpX2hvc3RfcHJpdihzaG9zdCkpOwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9zZXNzaW9uX3NldHVwKCZjeGdiM2lfaXNjc2lfdHJhbnNwb3J0LCBzaG9zdCwKLQkJCQkJICBjbWRzX21heCwKKwkJCQkJICBjbWRzX21heCwgMCwKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3RjcF90YXNrKSArCiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBjeGdiM2lfdGFza19kYXRhKSwKIAkJCQkJICBpbml0aWFsX2NtZHNuLCBJU0NTSV9NQVhfVEFSR0VUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoX3JkYWMuYwppbmRleCAxMWM4OTMxLi4yNjgxODlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaF9yZGFjLmMKKysrIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGhfcmRhYy5jCkBAIC01MDAsOCArNTAwLDYgQEAKIAlpZiAoIXJldCkKIAkJZ290byBkb25lOwogCi0JZXJyID0gU0NTSV9ESF9PSzsKLQogCXN3aXRjaCAoc2Vuc2VfaGRyLnNlbnNlX2tleSkgewogCWNhc2UgTk9fU0VOU0U6CiAJY2FzZSBBQk9SVEVEX0NPTU1BTkQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jIGIvZHJpdmVycy9zY3NpL2RwdF9pMm8uYwppbmRleCBiNmFmNjNjLi40OTY3NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCisrKyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKQEAgLTE5MTgsNiArMTkxOCwxMCBAQAogCQl9CiAJCXNpemUgPSBzaXplPj4xNjsKIAkJc2l6ZSAqPSA0OworCQlpZiAoc2l6ZSA+IE1BWF9NRVNTQUdFX1NJWkUpIHsKKwkJCXJjb2RlID0gLUVJTlZBTDsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQogCQkvKiBDb3B5IGluIHRoZSB1c2VyJ3MgSTJPIGNvbW1hbmQgKi8KIAkJaWYgKGNvcHlfZnJvbV91c2VyIChtc2csIHVzZXJfbXNnLCBzaXplKSkgewogCQkJcmNvZGUgPSAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGguYyBiL2RyaXZlcnMvc2NzaS9nZHRoLmMKaW5kZXggMTg1ZTZiYy4uOWU4ZmNlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2dkdGguYworKysgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCkBAIC0yOTAwLDcgKzI5MDAsNyBAQAogICAgICAgICBlaW5kZXggPSBoYW5kbGU7CiAgICAgZXN0ci0+ZXZlbnRfc291cmNlID0gMDsKIAotICAgIGlmIChlaW5kZXggPj0gTUFYX0VWRU5UUykgeworICAgIGlmIChlaW5kZXggPCAwIHx8IGVpbmRleCA+PSBNQVhfRVZFTlRTKSB7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5zbXBfbG9jaywgZmxhZ3MpOwogICAgICAgICByZXR1cm4gZWluZGV4OwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYyBiL2RyaXZlcnMvc2NzaS9ocHRpb3AuYwppbmRleCBjNTk2YWI1Li5hMGU3ZTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKKysrIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIEhpZ2hQb2ludCBSUjN4eHgvNHh4eCBjb250cm9sbGVyIGRyaXZlciBmb3IgTGludXgKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IEhpZ2hQb2ludCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IEhpZ2hQb2ludCBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQxLDcgKzQxLDcgQEAKIAogc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9ICJocHRpb3AiOwogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVfbG9uZ1tdID0gIlJvY2tldFJBSUQgM3h4eC80eHh4IENvbnRyb2xsZXIgZHJpdmVyIjsKLXN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl92ZXJbXSA9ICJ2MS4zICgwNzEyMDMpIjsKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl92ZXJbXSA9ICJ2MS42ICgwOTA5MTApIjsKIAogc3RhdGljIGludCBpb3Bfc2VuZF9zeW5jX21zZyhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCB1MzIgbXNnLCB1MzIgbWlsbGlzZWMpOwogc3RhdGljIHZvaWQgaHB0aW9wX2ZpbmlzaF9zY3NpX3JlcShzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCB1MzIgdGFnLApAQCAtMTE1LDkgKzExNSwxMyBAQAogc3RhdGljIGludCBpb3BfaW50cl9pdGwoc3RydWN0IGhwdGlvcF9oYmEgKmhiYSkKIHsKIAlzdHJ1Y3QgaHB0X2lvcG11X2l0bCBfX2lvbWVtICppb3AgPSBoYmEtPnUuaXRsLmlvcDsKKwl2b2lkIF9faW9tZW0gKnBseCA9IGhiYS0+dS5pdGwucGx4OwogCXUzMiBzdGF0dXM7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAocGx4ICYmIHJlYWRsKHBseCArIDB4MTFDNUMpICYgMHhmKQorCQl3cml0ZWwoMSwgcGx4ICsgMHgxMUM2MCk7CisKIAlzdGF0dXMgPSByZWFkbCgmaW9wLT5vdXRib3VuZF9pbnRzdGF0dXMpOwogCiAJaWYgKHN0YXR1cyAmIElPUE1VX09VVEJPVU5EX0lOVF9NU0cwKSB7CkBAIC00NjAsMTUgKzQ2NCwyNSBAQAogCiBzdGF0aWMgaW50IGhwdGlvcF9tYXBfcGNpX2Jhcl9pdGwoc3RydWN0IGhwdGlvcF9oYmEgKmhiYSkKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2ID0gaGJhLT5wY2lkZXY7CiAJaGJhLT51Lml0bC5pb3AgPSBocHRpb3BfbWFwX3BjaV9iYXIoaGJhLCAwKTsKLQlpZiAoaGJhLT51Lml0bC5pb3ApCi0JCXJldHVybiAwOwotCWVsc2UKKwlpZiAoaGJhLT51Lml0bC5pb3AgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOworCWlmICgocGNpZGV2LT5kZXZpY2UgJiAweGZmMDApID09IDB4NDQwMCkgeworCQloYmEtPnUuaXRsLnBseCA9IGhiYS0+dS5pdGwuaW9wOworCQloYmEtPnUuaXRsLmlvcCA9IGhwdGlvcF9tYXBfcGNpX2JhcihoYmEsIDIpOworCQlpZiAoaGJhLT51Lml0bC5pb3AgPT0gTlVMTCkgeworCQkJaW91bm1hcChoYmEtPnUuaXRsLnBseCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGhwdGlvcF91bm1hcF9wY2lfYmFyX2l0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhKQogeworCWlmIChoYmEtPnUuaXRsLnBseCkKKwkJaW91bm1hcChoYmEtPnUuaXRsLnBseCk7CiAJaW91bm1hcChoYmEtPnUuaXRsLmlvcCk7CiB9CiAKQEAgLTEyMzksMjIgKzEyNTMsMjMgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBocHRpb3BfaWRfdGFibGVbXSA9IHsKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMjIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMzMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM0MTApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTExKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1MjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzUyMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM0MTApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCi0JeyBQQ0lfVkRFVklDRShUVEksIDB4MzU0MCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzNTMwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDM1NDApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzU2MCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKLQl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAotCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDIxMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MjExKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMTApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMxMSksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0MzIwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAorCXsgUENJX1ZERVZJQ0UoVFRJLCAweDQzMjEpLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9pdGxfb3BzIH0sCisJeyBQQ0lfVkRFVklDRShUVEksIDB4NDMyMiksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX2l0bF9vcHMgfSwKKwl7IFBDSV9WREVWSUNFKFRUSSwgMHg0NDAwKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfaXRsX29wcyB9LAogCXsgUENJX1ZERVZJQ0UoVFRJLCAweDMxMjApLCAoa2VybmVsX3Vsb25nX3QpJmhwdGlvcF9tdl9vcHMgfSwKIAl7IFBDSV9WREVWSUNFKFRUSSwgMHgzMTIyKSwgKGtlcm5lbF91bG9uZ190KSZocHRpb3BfbXZfb3BzIH0sCiAJeyBQQ0lfVkRFVklDRShUVEksIDB4MzAyMCksIChrZXJuZWxfdWxvbmdfdCkmaHB0aW9wX212X29wcyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5oIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5oCmluZGV4IGEwMjg5ZjIuLjBiODcxYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuaAorKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogSGlnaFBvaW50IFJSM3h4eC80eHh4IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBMaW51eAotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgSGlnaFBvaW50IFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjI4LDYgKzIyOCw3IEBACiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGhwdF9pb3BtdV9pdGwgX19pb21lbSAqaW9wOworCQkJdm9pZCBfX2lvbWVtICpwbHg7CiAJCX0gaXRsOwogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGhwdF9pb3Btdl9yZWdzICpyZWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5jIGIvZHJpdmVycy9zY3NpL2lwci5jCmluZGV4IDVmMDQ1NTAuLjc2ZDI5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuYworKysgYi9kcml2ZXJzL3Njc2kvaXByLmMKQEAgLTQxODksNiArNDE4OSwyNSBAQAogfQogCiAvKioKKyAqIGlwcl9pc3JfZWggLSBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGVycm9yIGhhbmRsZXIKKyAqIEBpb2FfY2ZnOglpb2EgY29uZmlnIHN0cnVjdAorICogQG1zZzoJbWVzc2FnZSB0byBsb2cKKyAqCisgKiBSZXR1cm4gdmFsdWU6CisgKiAJbm9uZQorICoqLworc3RhdGljIHZvaWQgaXByX2lzcl9laChzdHJ1Y3QgaXByX2lvYV9jZmcgKmlvYV9jZmcsIGNoYXIgKm1zZykKK3sKKwlpb2FfY2ZnLT5lcnJvcnNfbG9nZ2VkKys7CisJZGV2X2VycigmaW9hX2NmZy0+cGRldi0+ZGV2LCAiJXNcbiIsIG1zZyk7CisKKwlpZiAoV0FJVF9GT1JfRFVNUCA9PSBpb2FfY2ZnLT5zZHRfc3RhdGUpCisJCWlvYV9jZmctPnNkdF9zdGF0ZSA9IEdFVF9EVU1QOworCisJaXByX2luaXRpYXRlX2lvYV9yZXNldChpb2FfY2ZnLCBJUFJfU0hVVERPV05fTk9ORSk7Cit9CisKKy8qKgogICogaXByX2lzciAtIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUKICAqIEBpcnE6CWlycSBudW1iZXIKICAqIEBkZXZwOglwb2ludGVyIHRvIGlvYSBjb25maWcgc3RydWN0CkBAIC00MjAzLDYgKzQyMjIsNyBAQAogCXZvbGF0aWxlIHUzMiBpbnRfcmVnLCBpbnRfbWFza19yZWc7CiAJdTMyIGlvYXNjOwogCXUxNiBjbWRfaW5kZXg7CisJaW50IG51bV9ocnJxID0gMDsKIAlzdHJ1Y3QgaXByX2NtbmQgKmlwcl9jbWQ7CiAJaXJxcmV0dXJuX3QgcmMgPSBJUlFfTk9ORTsKIApAQCAtNDIzMywxMyArNDI1Myw3IEBACiAJCQkJICAgICBJUFJfSFJSUV9SRVFfUkVTUF9IQU5ETEVfTUFTSykgPj4gSVBSX0hSUlFfUkVRX1JFU1BfSEFORExFX1NISUZUOwogCiAJCQlpZiAodW5saWtlbHkoY21kX2luZGV4ID49IElQUl9OVU1fQ01EX0JMS1MpKSB7Ci0JCQkJaW9hX2NmZy0+ZXJyb3JzX2xvZ2dlZCsrOwotCQkJCWRldl9lcnIoJmlvYV9jZmctPnBkZXYtPmRldiwgIkludmFsaWQgcmVzcG9uc2UgaGFuZGxlIGZyb20gSU9BXG4iKTsKLQotCQkJCWlmIChXQUlUX0ZPUl9EVU1QID09IGlvYV9jZmctPnNkdF9zdGF0ZSkKLQkJCQkJaW9hX2NmZy0+c2R0X3N0YXRlID0gR0VUX0RVTVA7Ci0KLQkJCQlpcHJfaW5pdGlhdGVfaW9hX3Jlc2V0KGlvYV9jZmcsIElQUl9TSFVURE9XTl9OT05FKTsKKwkJCQlpcHJfaXNyX2VoKGlvYV9jZmcsICJJbnZhbGlkIHJlc3BvbnNlIGhhbmRsZSBmcm9tIElPQSIpOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaW9hX2NmZy0+aG9zdC0+aG9zdF9sb2NrLCBsb2NrX2ZsYWdzKTsKIAkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJCQl9CkBAIC00MjY2LDggKzQyODAsMTggQEAKIAogCQlpZiAoaXByX2NtZCAhPSBOVUxMKSB7CiAJCQkvKiBDbGVhciB0aGUgUENJIGludGVycnVwdCAqLwotCQkJd3JpdGVsKElQUl9QQ0lJX0hSUlFfVVBEQVRFRCwgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X3JlZyk7Ci0JCQlpbnRfcmVnID0gcmVhZGwoaW9hX2NmZy0+cmVncy5zZW5zZV9pbnRlcnJ1cHRfcmVnKSAmIH5pbnRfbWFza19yZWc7CisJCQlkbyB7CisJCQkJd3JpdGVsKElQUl9QQ0lJX0hSUlFfVVBEQVRFRCwgaW9hX2NmZy0+cmVncy5jbHJfaW50ZXJydXB0X3JlZyk7CisJCQkJaW50X3JlZyA9IHJlYWRsKGlvYV9jZmctPnJlZ3Muc2Vuc2VfaW50ZXJydXB0X3JlZykgJiB+aW50X21hc2tfcmVnOworCQkJfSB3aGlsZSAoaW50X3JlZyAmIElQUl9QQ0lJX0hSUlFfVVBEQVRFRCAmJgorCQkJCQludW1faHJycSsrIDwgSVBSX01BWF9IUlJRX1JFVFJJRVMpOworCisJCQlpZiAoaW50X3JlZyAmIElQUl9QQ0lJX0hSUlFfVVBEQVRFRCkgeworCQkJCWlwcl9pc3JfZWgoaW9hX2NmZywgIkVycm9yIGNsZWFyaW5nIEhSUlEiKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGlvYV9jZmctPmhvc3QtPmhvc3RfbG9jaywgbG9ja19mbGFncyk7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCiAJCX0gZWxzZQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lwci5oIGIvZHJpdmVycy9zY3NpL2lwci5oCmluZGV4IDE2MzI0NWEuLjE5YmJjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pcHIuaAorKysgYi9kcml2ZXJzL3Njc2kvaXByLmgKQEAgLTE0NCw2ICsxNDQsNyBAQAogI2RlZmluZSBJUFJfSU9BX01BWF9TRUNUT1JTCQkJCTMyNzY3CiAjZGVmaW5lIElQUl9WU0VUX01BWF9TRUNUT1JTCQkJCTUxMgogI2RlZmluZSBJUFJfTUFYX0NEQl9MRU4JCQkJCTE2CisjZGVmaW5lIElQUl9NQVhfSFJSUV9SRVRSSUVTCQkJCTMKIAogI2RlZmluZSBJUFJfREVGQVVMVF9CVVNfV0lEVEgJCQkJMTYKICNkZWZpbmUgSVBSXzgwTUJzX1NDU0lfUkFURQkJKCg4MCAqIDEwKSAvIChJUFJfREVGQVVMVF9CVVNfV0lEVEggLyA4KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwppbmRleCAyYjFiODM0Li5lZGM0OWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKKysrIGIvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCkBAIC04MTEsNyArODExLDcgQEAKIAkJZ290byBmcmVlX2hvc3Q7CiAKIAljbHNfc2Vzc2lvbiA9IGlzY3NpX3Nlc3Npb25fc2V0dXAoJmlzY3NpX3N3X3RjcF90cmFuc3BvcnQsIHNob3N0LAotCQkJCQkgIGNtZHNfbWF4LAorCQkJCQkgIGNtZHNfbWF4LCAwLAogCQkJCQkgIHNpemVvZihzdHJ1Y3QgaXNjc2lfdGNwX3Rhc2spICsKIAkJCQkJICBzaXplb2Yoc3RydWN0IGlzY3NpX3N3X3RjcF9oZHJidWYpLAogCQkJCQkgIGluaXRpYWxfY21kc24sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwppbmRleCA4ZGM3M2M0Li5mMWE0MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliaXNjc2kuYwpAQCAtMjQzNiw3ICsyNDM2LDcgQEAKICAqLwogc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKIGlzY3NpX3Nlc3Npb25fc2V0dXAoc3RydWN0IGlzY3NpX3RyYW5zcG9ydCAqaXNjc2l0LCBzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwKLQkJICAgIHVpbnQxNl90IGNtZHNfbWF4LCBpbnQgY21kX3Rhc2tfc2l6ZSwKKwkJICAgIHVpbnQxNl90IGNtZHNfbWF4LCBpbnQgZGRfc2l6ZSwgaW50IGNtZF90YXNrX3NpemUsCiAJCSAgICB1aW50MzJfdCBpbml0aWFsX2NtZHNuLCB1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IGlzY3NpX2hvc3QgKmlob3N0ID0gc2hvc3RfcHJpdihzaG9zdCk7CkBAIC0yNDg2LDcgKzI0ODYsOCBAQAogCXNjc2lfY21kcyA9IHRvdGFsX2NtZHMgLSBJU0NTSV9NR01UX0NNRFNfTUFYOwogCiAJY2xzX3Nlc3Npb24gPSBpc2NzaV9hbGxvY19zZXNzaW9uKHNob3N0LCBpc2NzaXQsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZXNzaW9uKSk7CisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9zZXNzaW9uKSArCisJCQkJCSAgZGRfc2l6ZSk7CiAJaWYgKCFjbHNfc2Vzc2lvbikKIAkJZ290byBkZWNfc2Vzc2lvbl9jb3VudDsKIAlzZXNzaW9uID0gY2xzX3Nlc3Npb24tPmRkX2RhdGE7CkBAIC0yNTAzLDYgKzI1MDQsNyBAQAogCXNlc3Npb24tPm1heF9jbWRzbiA9IGluaXRpYWxfY21kc24gKyAxOwogCXNlc3Npb24tPm1heF9yMnQgPSAxOwogCXNlc3Npb24tPnR0ID0gaXNjc2l0OworCXNlc3Npb24tPmRkX2RhdGEgPSBjbHNfc2Vzc2lvbi0+ZGRfZGF0YSArIHNpemVvZigqc2Vzc2lvbik7CiAJbXV0ZXhfaW5pdCgmc2Vzc2lvbi0+ZWhfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZzZXNzaW9uLT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2V4cGFuZGVyLmMKaW5kZXggYjMzODE5NS4uMzNjZjk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZXhwYW5kZXIuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19leHBhbmRlci5jCkBAIC05NjAsNyArOTYwLDYgQEAKIAogCQkJfQogCQl9Ci0JCXJlcyA9IDA7CiAJfQogCiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggNjFkMDg5Ny4uYzg4ZjU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTU2LDggKzU2LDYgQEAKIAkiU0NTSV9QUk9UX1dSSVRFX0lOU0VSVCIsCiAJIlNDU0lfUFJPVF9SRUFEX1BBU1MiLAogCSJTQ1NJX1BST1RfV1JJVEVfUEFTUyIsCi0JIlNDU0lfUFJPVF9SRUFEX0NPTlZFUlQiLAotCSJTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVCIKIH07CiBzdGF0aWMgdm9pZAogbHBmY19yZWxlYXNlX3Njc2lfYnVmX3M0KHN0cnVjdCBscGZjX2hiYSAqcGhiYSwgc3RydWN0IGxwZmNfc2NzaV9idWYgKnBzYik7CkBAIC0xMTMxLDEzICsxMTI5LDExIEBACiAJCQlyZXRfcHJvZiA9IExQRkNfUFJPRl9BMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfQ09OVkVSVDoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKKwkJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgorCQljYXNlIFNDU0lfUFJPVF9XUklURV9QQVNTOgogCQkJcmV0X3Byb2YgPSBMUEZDX1BST0ZfQVNUMTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NTSV9QUk9UX1JFQURfUEFTUzoKLQkJY2FzZSBTQ1NJX1BST1RfV1JJVEVfUEFTUzoKIAkJY2FzZSBTQ1NJX1BST1RfTk9STUFMOgogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJCYWQgb3AvZ3VhcmQ6JWQvJWQgY29tYmluYXRpb25cbiIsCkBAIC0xMTU3LDggKzExNTMsNiBAQAogCQkJcmV0X3Byb2YgPSBMUEZDX1BST0ZfQzE7CiAJCQlicmVhazsKIAotCQljYXNlIFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ6Ci0JCWNhc2UgU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ6CiAJCWNhc2UgU0NTSV9QUk9UX1JFQURfSU5TRVJUOgogCQljYXNlIFNDU0lfUFJPVF9XUklURV9TVFJJUDoKIAkJY2FzZSBTQ1NJX1BST1RfTk9STUFMOgpAQCAtMTIwOSw4ICsxMjAzLDcgQEAKIAlzdGF0aWMgaW50IGNudDsKIAogCWlmIChwcm90Y250ICYmIChvcCA9PSBTQ1NJX1BST1RfV1JJVEVfU1RSSVAgfHwKLQkJCQlvcCA9PSBTQ1NJX1BST1RfV1JJVEVfUEFTUyB8fAotCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9DT05WRVJUKSkgeworCQkJCW9wID09IFNDU0lfUFJPVF9XUklURV9QQVNTKSkgewogCiAJCWNudCsrOwogCQlzcHQgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzY3NpX3Byb3Rfc2dsaXN0KHNjKSkpICsKQEAgLTE1MDEsOCArMTQ5NCw2IEBACiAJY2FzZSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA6CiAJY2FzZSBTQ1NJX1BST1RfUkVBRF9QQVNTOgogCWNhc2UgU0NTSV9QUk9UX1dSSVRFX1BBU1M6Ci0JY2FzZSBTQ1NJX1BST1RfV1JJVEVfQ09OVkVSVDoKLQljYXNlIFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ6CiAJCXJldCA9IExQRkNfUEdfVFlQRV9ESUZfQlVGOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL0tjb25maWcKaW5kZXggNGE4Njg1NS4uNzBjNGMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9LY29uZmlnCkBAIC0yLDcgKzIsNyBAQAogIyBLZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgTVBUMlNBUwogIwogIyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvS2NvbmZpZwotIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICMgIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAppbmRleCA3YmIyZWNlLi5mOWY2YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4xMQorICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMTIKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC00NSw2ICs0NSwxMyBAQAogICogIDEwLTAyLTA4ICAwMi4wMC4xMCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KICAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIGZyb20gbXBpMl9pbml0LmguCiAgKiAgMDEtMTktMDkgIDAyLjAwLjExICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTA2LTA5ICAwMi4wMC4xMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluIGFsbCByZXF1ZXN0IGFuZCByZXBseSBkZXNjcmlwdG9ycywgcmVwbGFjZWQgVkZfSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIHdpdGggTVNJeEluZGV4IGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBEZXZIYW5kbGUgZmllbGQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiBhbmQgbWFkZSB0aG9zZQorICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MCw3ICs3Nyw3IEBACiAjZGVmaW5lIE1QSTJfVkVSU0lPTl8wMl8wMCAgICAgICAgICAgICAgICAgICgweDAyMDApCiAKIC8qIHZlcnNpb25pbmcgZm9yIHRoaXMgTVBJIGhlYWRlciBzZXQgKi8KLSNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MEIpCisjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVCAgICAgICAgICAgICgweDBDKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX0RFViAgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX01BU0sgICAgICAgKDB4RkYwMCkKICNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUX1NISUZUICAgICAgKDgpCkBAIC0yNTcsNyArMjY0LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIERlc2NyaXB0b3JUeXBlRGVwZW5kZW50OyAgICAvKiAweDA2ICovCkBAIC0yNzEsNiArMjc4LDcgQEAKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfU0NTSV9UQVJHRVQgICAgICAgICAgICAgKDB4MDIpCiAjZGVmaW5lIE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFkgICAgICAgICAgICgweDA2KQogI2RlZmluZSBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ERUZBVUxUX1RZUEUgICAgICAgICAgICAoMHgwOCkKKyNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfUkFJRF9BQ0NFTEVSQVRPUiAgICAgICAgKDB4MEEpCiAKICNkZWZpbmUgTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSU9DX0ZJRk9fTUFSS0VSICgweDAxKQogCkBAIC0yNzksNyArMjg3LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX0hJR0hfUFJJT1JJVFlfUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0yOTMsNyArMzAxLDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcXVlc3RGbGFnczsgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIExNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAgICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCkBAIC0zMDYsNyArMzE0LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfVEFSR0VUX1JFUVVFU1RfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFUxNiAgICAgICAgICAgICBJb0luZGV4OyAgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLwpAQCAtMzE1LDE0ICszMjMsMjkgQEAKICAgTXBpMlNDU0lUYXJnZXRSZXF1ZXN0RGVzY3JpcHRvcl90LAogICBNUEkyX1BPSU5URVIgcE1waTJTQ1NJVGFyZ2V0UmVxdWVzdERlc2NyaXB0b3JfdDsKIAorCisvKiBSQUlEIEFjY2VsZXJhdG9yIFJlcXVlc3QgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgeworICAgIFU4ICAgICAgICAgICAgICBSZXF1ZXN0RmxhZ3M7ICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUxNiAgICAgICAgICAgICBMTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworICAgIFUxNiAgICAgICAgICAgICBSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworfSBNUEkyX1JBSURfQUNDRUxfUkVRVUVTVF9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IsCisgIE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRvcl90LAorICBNUEkyX1BPSU5URVIgcE1waTJSQUlEQWNjZWxlcmF0b3JSZXF1ZXN0RGVzY3JpcHRvcl90OworCisKIC8qIHVuaW9uIG9mIFJlcXVlc3QgRGVzY3JpcHRvcnMgKi8KIHR5cGVkZWYgdW5pb24gX01QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OCiB7Ci0gICAgTVBJMl9ERUZBVUxUX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgIERlZmF1bHQ7Ci0gICAgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgIEhpZ2hQcmlvcml0eTsKLSAgICBNUEkyX1NDU0lfSU9fUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgU0NTSUlPOwotICAgIE1QSTJfU0NTSV9UQVJHRVRfUkVRVUVTVF9ERVNDUklQVE9SICAgICBTQ1NJVGFyZ2V0OwotICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkczsKKyAgICBNUEkyX0RFRkFVTFRfUkVRVUVTVF9ERVNDUklQVE9SICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9ISUdIX1BSSU9SSVRZX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICBIaWdoUHJpb3JpdHk7CisgICAgTVBJMl9TQ1NJX0lPX1JFUVVFU1RfREVTQ1JJUFRPUiAgICAgICAgICAgICBTQ1NJSU87CisgICAgTVBJMl9TQ1NJX1RBUkdFVF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICBTQ1NJVGFyZ2V0OworICAgIE1QSTJfUkFJRF9BQ0NFTF9SRVFVRVNUX0RFU0NSSVBUT1IgICAgICAgICAgUkFJREFjY2VsZXJhdG9yOworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CiB9IE1QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkVRVUVTVF9ERVNDUklQVE9SX1VOSU9OLAogICBNcGkyUmVxdWVzdERlc2NyaXB0b3JVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3Q7CiAKQEAgLTMzMywxOSArMzU2LDIwIEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IKIHsKICAgICBVOCAgICAgICAgICAgICAgUmVwbHlGbGFnczsgICAgICAgICAgICAgICAgIC8qIDB4MDAgKi8KLSAgICBVOCAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgTVNJeEluZGV4OyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KICAgICBVMTYgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxOyAgIC8qIDB4MDIgKi8KICAgICBVMzIgICAgICAgICAgICAgRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQyOyAgIC8qIDB4MDQgKi8KIH0gTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9ERUZBVUxUX1JFUExZX0RFU0NSSVBUT1IsCiAgIE1waTJEZWZhdWx0UmVwbHlEZXNjcmlwdG9yX3QsIE1QSTJfUE9JTlRFUiBwTXBpMkRlZmF1bHRSZXBseURlc2NyaXB0b3JfdDsKIAogLyogZGVmaW5lcyBmb3IgdGhlIFJlcGx5RmxhZ3MgZmllbGQgKi8KLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAgKDB4MEYpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU9fU1VDQ0VTUyAgICAgICAgICgweDAwKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19BRERSRVNTX1JFUExZICAgICAgICAgICAoMHgwMSkKLSNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUQVNTSVNUX1NVQ0NFU1MgICAgKDB4MDIpCi0jZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1RBUkdFVF9DT01NQU5EX0JVRkZFUiAgICgweDAzKQotI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19VTlVTRUQgICAgICAgICAgICAgICAgICAoMHgwRikKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgICgweDBGKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19TQ1NJX0lPX1NVQ0NFU1MgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVEFSR0VUQVNTSVNUX1NVQ0NFU1MgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRfQ09NTUFORF9CVUZGRVIgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTUyAgICAoMHgwNSkKKyNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfRkxBR1NfVU5VU0VEICAgICAgICAgICAgICAgICAgICAgICgweDBGKQogCiAvKiB2YWx1ZXMgZm9yIG1hcmtpbmcgYSByZXBseSBkZXNjcmlwdG9yIGFzIHVudXNlZCAqLwogI2RlZmluZSBNUEkyX1JQWV9ERVNDUklQVF9VTlVTRURfV09SRDBfTUFSSyAgICAgICAgICAgICAoMHhGRkZGRkZGRikKQEAgLTM1NSw3ICszNzksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTMyICAgICAgICAgICAgIFJlcGx5RnJhbWVBZGRyZXNzOyAgICAgICAgICAvKiAweDA0ICovCiB9IE1QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQUREUkVTU19SRVBMWV9ERVNDUklQVE9SLApAQCAtMzY4LDEwICszOTIsMTAgQEAKIHR5cGVkZWYgc3RydWN0IF9NUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SCiB7CiAgICAgVTggICAgICAgICAgICAgIFJlcGx5RmxhZ3M7ICAgICAgICAgICAgICAgICAvKiAweDAwICovCi0gICAgVTggICAgICAgICAgICAgIFZGX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgIE1TSXhJbmRleDsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCiAgICAgVTE2ICAgICAgICAgICAgIFNNSUQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAyICovCiAgICAgVTE2ICAgICAgICAgICAgIFRhc2tUYWc7ICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCi0gICAgVTE2ICAgICAgICAgICAgIERldkhhbmRsZTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCisgICAgVTE2ICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA2ICovCiB9IE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCiAgIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiwKICAgTXBpMlNDU0lJT1N1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdCwKQEAgLTM4Miw3ICs0MDYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX01QSTJfVEFSR0VUQVNTSVNUX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFU4ICAgICAgICAgICAgICBTZXF1ZW5jZU51bWJlcjsgICAgICAgICAgICAgLyogMHgwNCAqLwogICAgIFU4ICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwNSAqLwpAQCAtMzk3LDcgKzQyMSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfTVBJMl9UQVJHRVRfQ09NTUFORF9CVUZGRVJfUkVQTFlfREVTQ1JJUFRPUgogewogICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwotICAgIFU4ICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLwogICAgIFU4ICAgICAgICAgICAgICBWUF9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLwogICAgIFU4ICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLwogICAgIFUxNiAgICAgICAgICAgICBJbml0aWF0b3JEZXZIYW5kbGU7ICAgICAgICAgLyogMHgwNCAqLwpAQCAtNDExLDE1ICs0MzUsMjggQEAKICNkZWZpbmUgTVBJMl9SUFlfREVTQ1JJUFRfVENCX0ZMQUdTX1BIWU5VTV9NQVNLICAgICAoMHgzRikKIAogCisvKiBSQUlEIEFjY2VsZXJhdG9yIFN1Y2Nlc3MgUmVwbHkgRGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgeworICAgIFU4ICAgICAgICAgICAgICBSZXBseUZsYWdzOyAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICBNU0l4SW5kZXg7ICAgICAgICAgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgICAgICBTTUlEOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgICAgICBSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgLyogMHgwNCAqLworfSBNUEkyX1JBSURfQUNDRUxFUkFUT1JfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IsCisgIE1waTJSQUlEQWNjZWxlcmF0b3JTdWNjZXNzUmVwbHlEZXNjcmlwdG9yX3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlJBSURBY2NlbGVyYXRvclN1Y2Nlc3NSZXBseURlc2NyaXB0b3JfdDsKKworCiAvKiB1bmlvbiBvZiBSZXBseSBEZXNjcmlwdG9ycyAqLwogdHlwZWRlZiB1bmlvbiBfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTgogewotICAgIE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgRGVmYXVsdDsKLSAgICBNUEkyX0FERFJFU1NfUkVQTFlfREVTQ1JJUFRPUiAgICAgICAgICAgICAgIEFkZHJlc3NSZXBseTsKLSAgICBNUEkyX1NDU0lfSU9fU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgIFNDU0lJT1N1Y2Nlc3M7Ci0gICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICBUYXJnZXRBc3Npc3RTdWNjZXNzOwotICAgIE1QSTJfVEFSR0VUX0NPTU1BTkRfQlVGRkVSX1JFUExZX0RFU0NSSVBUT1IgVGFyZ2V0Q29tbWFuZEJ1ZmZlcjsKLSAgICBVNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdvcmRzOworICAgIE1QSTJfREVGQVVMVF9SRVBMWV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgIERlZmF1bHQ7CisgICAgTVBJMl9BRERSRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgQWRkcmVzc1JlcGx5OworICAgIE1QSTJfU0NTSV9JT19TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgICAgICAgICAgIFNDU0lJT1N1Y2Nlc3M7CisgICAgTVBJMl9UQVJHRVRBU1NJU1RfU1VDQ0VTU19SRVBMWV9ERVNDUklQVE9SICAgICAgVGFyZ2V0QXNzaXN0U3VjY2VzczsKKyAgICBNUEkyX1RBUkdFVF9DT01NQU5EX0JVRkZFUl9SRVBMWV9ERVNDUklQVE9SICAgICBUYXJnZXRDb21tYW5kQnVmZmVyOworICAgIE1QSTJfUkFJRF9BQ0NFTEVSQVRPUl9TVUNDRVNTX1JFUExZX0RFU0NSSVBUT1IgIFJBSURBY2NlbGVyYXRvclN1Y2Nlc3M7CisgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZHM7CiB9IE1QSTJfUkVQTFlfREVTQ1JJUFRPUlNfVU5JT04sIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9SRVBMWV9ERVNDUklQVE9SU19VTklPTiwKICAgTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90LCBNUEkyX1BPSU5URVIgcE1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdDsKIApAQCAtNDU4LDYgKzQ5NSw3IEBACiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fRElBR19SRUxFQVNFICAgICAgICAgICAgICAgICAgKDB4MUUpIC8qIERpYWdub3N0aWMgUmVsZWFzZSAqLwogI2RlZmluZSBNUEkyX0ZVTkNUSU9OX1RBUkdFVF9DTURfQlVGX0JBU0VfUE9TVCAgICAgICgweDI0KSAvKiBUYXJnZXQgQ29tbWFuZCBCdWZmZXIgUG9zdCBCYXNlICovCiAjZGVmaW5lIE1QSTJfRlVOQ1RJT05fVEFSR0VUX0NNRF9CVUZfTElTVF9QT1NUICAgICAgKDB4MjUpIC8qIFRhcmdldCBDb21tYW5kIEJ1ZmZlciBQb3N0IExpc3QgKi8KKyNkZWZpbmUgTVBJMl9GVU5DVElPTl9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICAgICAgICAoMHgyQykgLyogUkFJRCBBY2NlbGVyYXRvciovCiAKIAogCkBAIC01NTUsMTIgKzU5MywxNyBAQAogCiAjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0RJQUdOT1NUSUNfUkVMRUFTRUQgICAgICAgICAgKDB4MDBBMCkKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIFJBSUQgQWNjZWxlcmF0b3IgdmFsdWVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfSU9DU1RBVFVTX1JBSURfQUNDRUxfRVJST1IgICAgICAgICAgICAgKDB4MDBCMCkKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIElPQ1N0YXR1cyBmbGFnIHRvIGluZGljYXRlIHRoYXQgbG9nIGluZm8gaXMgYXZhaWxhYmxlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIE1QSTJfSU9DU1RBVFVTX0ZMQUdfTE9HX0lORk9fQVZBSUxBQkxFICAoMHg4MDAwKQorI2RlZmluZSBNUEkyX0lPQ1NUQVRVU19GTEFHX0xPR19JTkZPX0FWQUlMQUJMRSAgICAgICgweDgwMDApCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBJT0NMb2dJbmZvIFR5cGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKaW5kZXggMmYyN2NmNi4uYWI0N2M0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIENvbmZpZ3VyYXRpb24gbWVzc2FnZXMgYW5kIHBhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE5vdmVtYmVyIDEwLCAyMDA2CiAgKgotICogICAgbXBpMl9jbmZnLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMTEKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC05NSw2ICs5NSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX0RFVklDRV9CTE9DS0VEIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBvcnRHcm91cHMsIERtYUdyb3VwLCBhbmQgQ29udHJvbEdyb3VwIGZpZWxkcyB0bwogICogICAgICAgICAgICAgICAgICAgICAgU0FTIERldmljZSBQYWdlIDAuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBhbmQgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuaXQgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC03MjMsNiArNzI4LDY1IEBACiAjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTNfR1BJT19TRVRUSU5HX09OICAgICAgICAgICAgICAgICgweDAwMDEpCiAKIAorLyogSU8gVW5pdCBQYWdlIDUgKi8KKworLyoKKyAqIFVwcGVyIGxheWVyIGNvZGUgKGRyaXZlcnMsIHV0aWxpdGllcywgZXRjLikgc2hvdWxkIGxlYXZlIHRoaXMgZGVmaW5lIHNldCB0bworICogb25lIGFuZCBjaGVjayBIZWFkZXIuUGFnZUxlbmd0aCBvciBOdW1EbWFFbmdpbmVzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFUworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U1X0RNQUVOR0lORV9FTlRSSUVTICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF81IHsKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7CQkJCS8qIDB4MDAgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JCdWZmZXJCYXNlQWRkcmVzczsgIC8qIDB4MDQgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JCdWZmZXJTaXplOyAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVNjQgICAgICAgICAgICAgICAgICAgICBSYWlkQWNjZWxlcmF0b3JDb250cm9sQmFzZUFkZHJlc3M7IC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQUNvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBOdW1EbWFFbmdpbmVzOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MUQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQU1pbkNvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MUUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSQU1heENvbnRyb2xTaXplOyAgICAgICAgICAgICAgICAgIC8qIDB4MUYgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MjggKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBEbWFFbmdpbmVDYXBhYmlsaXRpZXMKKwkJCQlbTVBJMl9JT1VOSVRQQUdFNV9ETUFFTkdJTkVfRU5UUklFU107IC8qIDB4MkMgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9JT19VTklUXzUsCisgIE1waTJJT1VuaXRQYWdlNV90LCBNUEkyX1BPSU5URVIgcE1waTJJT1VuaXRQYWdlNV90OworCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICgweDAwKQorCisvKiBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBEbWFFbmdpbmVDYXBhYmlsaXRpZXMgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX01BU0tfTUFYX1JFUVVFU1RTICAgICAgKDB4RkYwMCkKKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNV9ETUFfQ0FQX1NISUZUX01BWF9SRVFVRVNUUyAgICAgKDE2KQorCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9FRURQICAgICAgICAgICAgICAgICAgICgweDAwMDgpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9QQVJJVFlfR0VORVJBVElPTiAgICAgICgweDAwMDQpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9IQVNISU5HICAgICAgICAgICAgICAgICgweDAwMDIpCisjZGVmaW5lIE1QSTJfSU9VTklUUEFHRTVfRE1BX0NBUF9FTkNSWVBUSU9OICAgICAgICAgICAgICgweDAwMDEpCisKKworLyogSU8gVW5pdCBQYWdlIDYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82IHsKKyAgICBNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIEZsYWdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUkFIb3N0Q29udHJvbFNpemU7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU2NCAgICAgICAgICAgICAgICAgICAgIFJhaWRBY2NlbGVyYXRvckhvc3RDb250cm9sQmFzZUFkZHJlc3M7ICAvKiAweDA4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgxNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDE4ICovCit9IE1QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82LCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfSU9fVU5JVF82LAorICBNcGkySU9Vbml0UGFnZTZfdCwgTVBJMl9QT0lOVEVSIHBNcGkySU9Vbml0UGFnZTZfdDsKKworI2RlZmluZSBNUEkyX0lPVU5JVFBBR0U2X1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAoMHgwMCkKKworLyogZGVmaW5lcyBmb3IgSU8gVW5pdCBQYWdlIDYgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9JT1VOSVRQQUdFNl9GTEFHU19FTkFCTEVfUkFJRF9BQ0NFTEVSQVRPUiAgKDB4MDAwMSkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgIElPQyBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNzA5LDEwICsxNzczLDE0IEBACiAgICAgVTY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlWm9uZU1hbmFnZXJTQVNBZGRyZXNzOy8qIDB4MkMgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBab25lTG9ja0luYWN0aXZpdHlMaW1pdDsgICAgLyogMHgzNCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDM2ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVRvUmVkdWNlZEZ1bmM7ICAgICAgICAgIC8qIDB4MzggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsVGltZVRvUmVkdWNlZEZ1bmM7ICAgLyogMHgzOSAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlZHVjZWRGdW5jVGltZTsgICAgICAgICAvKiAweDNBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4M0IgKi8KIH0gTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfRVhQQU5ERVJfMCwKICAgTXBpMkV4cGFuZGVyUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyRXhwYW5kZXJQYWdlMF90OwogCi0jZGVmaW5lIE1QSTJfU0FTRVhQQU5ERVIwX1BBR0VWRVJTSU9OICAgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU0VYUEFOREVSMF9QQUdFVkVSU0lPTiAgICAgICAoMHgwNikKIAogLyogdmFsdWVzIGZvciBTQVMgRXhwYW5kZXIgUGFnZSAwIERpc2NvdmVyeVN0YXR1cyBmaWVsZCAqLwogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTUFYX0VOQ0xPU1VSRVNfRVhDRUVEICAgICAgICAgKDB4ODAwMDAwMDApCkBAIC0xNzM3LDYgKzE4MDUsNyBAQAogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRFNfTE9PUF9ERVRFQ1RFRCAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDEpCiAKIC8qIHZhbHVlcyBmb3IgU0FTIEV4cGFuZGVyIFBhZ2UgMCBGbGFncyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgICAgKDB4MjAwMCkKICNkZWZpbmUgTVBJMl9TQVNfRVhQQU5ERVIwX0ZMQUdTX1pPTkVfTE9DS0VEICAgICAgICAgICAgICAgICgweDEwMDApCiAjZGVmaW5lIE1QSTJfU0FTX0VYUEFOREVSMF9GTEFHU19TVVBQT1JURURfUEhZU0lDQUxfUFJFUyAgICAoMHgwODAwKQogI2RlZmluZSBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQVNTRVJURURfUEhZU0lDQUxfUFJFUyAgICAgKDB4MDQwMCkKQEAgLTE5NDQsNiArMjAxMywxMzMgQEAKICNkZWZpbmUgTVBJMl9TQVNQSFkxX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDEpCiAKIAorLyogU0FTIFBIWSBQYWdlIDIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfU0FTUEhZMl9QSFlfRVZFTlQgeworICAgIFU4ICAgICAgICAgIFBoeUV2ZW50Q29kZTsgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgLyogMHgwMSAqLworICAgIFUxNiAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgLyogMHgwMiAqLworICAgIFUzMiAgICAgICAgIFBoeUV2ZW50SW5mbzsgICAgICAgLyogMHgwNCAqLworfSBNUEkyX1NBU1BIWTJfUEhZX0VWRU5ULCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTUEhZMl9QSFlfRVZFTlQsCisgIE1waTJTYXNQaHkyUGh5RXZlbnRfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzUGh5MlBoeUV2ZW50X3Q7CisKKy8qIHVzZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV8gZm9yIHRoZSBQaHlFdmVudENvZGUgZmllbGQgKi8KKworCisvKgorICogSG9zdCBjb2RlIChkcml2ZXJzLCBCSU9TLCB1dGlsaXRpZXMsIGV0Yy4pIHNob3VsZCBsZWF2ZSB0aGlzIGRlZmluZSBzZXQgdG8KKyAqIG9uZSBhbmQgY2hlY2sgSGVhZGVyLkV4dFBhZ2VMZW5ndGggb3IgTnVtUGh5RXZlbnRzIGF0IHJ1bnRpbWUuCisgKi8KKyNpZm5kZWYgTVBJMl9TQVNQSFkyX1BIWV9FVkVOVF9NQVgKKyNkZWZpbmUgTVBJMl9TQVNQSFkyX1BIWV9FVkVOVF9NQVggICAgICAoMSkKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIgeworICAgIE1QSTJfQ09ORklHX0VYVEVOREVEX1BBR0VfSEVBREVSICAgIEhlYWRlcjsgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1QaHlFdmVudHM7ICAgICAgICAgICAgICAgLyogMHgwQyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDBEICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBNUEkyX1NBU1BIWTJfUEhZX0VWRU5UICAgICAgICAgICAgICBQaHlFdmVudFtNUEkyX1NBU1BIWTJfUEhZX0VWRU5UX01BWF07CisJCQkJCQkJCS8qIDB4MTAgKi8KK30gTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfUEhZXzIsCisgIE1waTJTYXNQaHlQYWdlMl90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNQaHlQYWdlMl90OworCisjZGVmaW5lIE1QSTJfU0FTUEhZMl9QQUdFVkVSU0lPTiAgICAgICAgICAgICgweDAwKQorCisKKy8qIFNBUyBQSFkgUGFnZSAzICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX1NBU1BIWTNfUEhZX0VWRU5UX0NPTkZJRyB7CisgICAgVTggICAgICAgICAgUGh5RXZlbnRDb2RlOyAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAvKiAweDAxICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAvKiAweDAyICovCisgICAgVTggICAgICAgICAgQ291bnRlclR5cGU7ICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgVGhyZXNob2xkV2luZG93OyAgICAvKiAweDA1ICovCisgICAgVTggICAgICAgICAgVGltZVVuaXRzOyAgICAgICAgICAvKiAweDA2ICovCisgICAgVTggICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAvKiAweDA3ICovCisgICAgVTMyICAgICAgICAgRXZlbnRUaHJlc2hvbGQ7ICAgICAvKiAweDA4ICovCisgICAgVTE2ICAgICAgICAgVGhyZXNob2xkRmxhZ3M7ICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAvKiAweDBFICovCit9IE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHLCBNUEkyX1BPSU5URVIgUFRSX01QSTJfU0FTUEhZM19QSFlfRVZFTlRfQ09ORklHLAorICBNcGkyU2FzUGh5M1BoeUV2ZW50Q29uZmlnX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeTNQaHlFdmVudENvbmZpZ190OworCisvKiB2YWx1ZXMgZm9yIFBoeUV2ZW50Q29kZSBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9OT19FVkVOVCAgICAgICAgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0lOVkFMSURfRFdPUkQgICAgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlVOTklOR19ESVNQQVJJVFlfRVJST1IgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9MT1NTX0RXT1JEX1NZTkMgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BIWV9SRVNFVF9QUk9CTEVNICAgICAgICAgICAoMHgwNCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfRUxBU1RJQ0lUWV9CVUZfT1ZFUkZMT1cgICAgICgweDA1KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9FUlJPUiAgICAgICAgICAgICAgICAgICAgKDB4MDYpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FERFJfRlJBTUVfRVJST1IgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQUNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDIxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BQ19PUEVOX1JFSkVDVCAgICAgICAgICAgKDB4MjIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1JDX09QRU5fUkVKRUNUICAgICAgICAgICAoMHgyMykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfUkNfT1BFTl9SRUpFQ1QgICAgICAgICAgICgweDI0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BSVBfUEFSVElBTF9XQUlUSU5HX09OICAgKDB4MjUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX0FJUF9DT05ORUNUX1dBSVRJTkdfT04gICAoMHgyNikKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQlJFQUsgICAgICAgICAgICAgICAgICAgICgweDI3KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9CUkVBSyAgICAgICAgICAgICAgICAgICAgKDB4MjgpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0JSRUFLX1RJTUVPVVQgICAgICAgICAgICAgICAoMHgyOSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfQ09OTkVDVElPTiAgICAgICAgICAgICAgICAgICgweDJBKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLVFhfUEFUSFdBWV9CTE9DS0VEICAgICAgKDB4MkIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1BFQUtUWF9BUkJfV0FJVF9USU1FICAgICAgICAoMHgyQykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUEVBS19BUkJfV0FJVF9USU1FICAgICAgICAgICgweDJEKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9QRUFLX0NPTk5FQ1RfVElNRSAgICAgICAgICAgKDB4MkUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NTUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg0MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU1NQX0ZSQU1FUyAgICAgICAgICAgICAgICgweDQxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9UWF9TU1BfRVJST1JfRlJBTUVTICAgICAgICAgKDB4NDIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1JYX1NTUF9FUlJPUl9GUkFNRVMgICAgICAgICAoMHg0MykKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfVFhfQ1JFRElUX0JMT0NLRUQgICAgICAgICAgICgweDQ0KQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9DUkVESVRfQkxPQ0tFRCAgICAgICAgICAgKDB4NDUpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NBVEFfRlJBTUVTICAgICAgICAgICAgICAoMHg1MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU0FUQV9GUkFNRVMgICAgICAgICAgICAgICgweDUxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9TQVRBX09WRVJGTE9XICAgICAgICAgICAgICAgKDB4NTIpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX1RYX1NNUF9GUkFNRVMgICAgICAgICAgICAgICAoMHg2MCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfUlhfU01QX0ZSQU1FUyAgICAgICAgICAgICAgICgweDYxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9TTVBfRVJST1JfRlJBTUVTICAgICAgICAgKDB4NjMpCisjZGVmaW5lIE1QSTJfU0FTUEhZM19FVkVOVF9DT0RFX0hPVFBMVUdfVElNRU9VVCAgICAgICAgICAgICAoMHhEMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0VWRU5UX0NPREVfTUlTQUxJR05FRF9NVVhfUFJJTUlUSVZFICAgICgweEQxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV9SWF9BSVAgICAgICAgICAgICAgICAgICAgICAgKDB4RDIpCisKKy8qIHZhbHVlcyBmb3IgdGhlIENvdW50ZXJUeXBlIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19DT1VOVEVSX1RZUEVfV1JBUFBJTkcgICAgICAgICAgICAgICAgICAoMHgwMCkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV9TQVRVUkFUSU5HICAgICAgICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfQ09VTlRFUl9UWVBFX1BFQUtfVkFMVUUgICAgICAgICAgICAgICAgKDB4MDIpCisKKy8qIHZhbHVlcyBmb3IgdGhlIFRpbWVVbml0cyBmaWVsZCAqLworI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xMF9NSUNST1NFQ09ORFMgICAgICAgICAgICAgKDB4MDApCisjZGVmaW5lIE1QSTJfU0FTUEhZM19USU1FX1VOSVRTXzEwMF9NSUNST1NFQ09ORFMgICAgICAgICAgICAoMHgwMSkKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1RJTUVfVU5JVFNfMV9NSUxMSVNFQ09ORCAgICAgICAgICAgICAgICgweDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18xMF9NSUxMSVNFQ09ORFMgICAgICAgICAgICAgKDB4MDMpCisKKy8qIHZhbHVlcyBmb3IgdGhlIFRocmVzaG9sZEZsYWdzIGZpZWxkICovCisjZGVmaW5lIE1QSTJfU0FTUEhZM19URkxBR1NfUEhZX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDAyKQorI2RlZmluZSBNUEkyX1NBU1BIWTNfVEZMQUdTX0VWRU5UX05PVElGWSAgICAgICAgICAgICAgICAgICAgKDB4MDAwMSkKKworLyoKKyAqIEhvc3QgY29kZSAoZHJpdmVycywgQklPUywgdXRpbGl0aWVzLCBldGMuKSBzaG91bGQgbGVhdmUgdGhpcyBkZWZpbmUgc2V0IHRvCisgKiBvbmUgYW5kIGNoZWNrIEhlYWRlci5FeHRQYWdlTGVuZ3RoIG9yIE51bVBoeUV2ZW50cyBhdCBydW50aW1lLgorICovCisjaWZuZGVmIE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYCisjZGVmaW5lIE1QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYICAgICAgKDEpCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfQ09ORklHX1BBR0VfU0FTX1BIWV8zIHsKKyAgICBNUEkyX0NPTkZJR19FWFRFTkRFRF9QQUdFX0hFQURFUiAgICBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtUGh5RXZlbnRzOyAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgTVBJMl9TQVNQSFkzX1BIWV9FVkVOVF9DT05GSUcgICAgICAgUGh5RXZlbnRDb25maWcKKwkJCQkJW01QSTJfU0FTUEhZM19QSFlfRVZFTlRfTUFYXTsgLyogMHgxMCAqLworfSBNUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMywgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0NPTkZJR19QQUdFX1NBU19QSFlfMywKKyAgTXBpMlNhc1BoeVBhZ2UzX3QsIE1QSTJfUE9JTlRFUiBwTXBpMlNhc1BoeVBhZ2UzX3Q7CisKKyNkZWZpbmUgTVBJMl9TQVNQSFkzX1BBR0VWRVJTSU9OICAgICAgICAgICAgKDB4MDApCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICBTQVMgUG9ydCBDb25maWcgUGFnZXMKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2hpc3RvcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZmNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9oaXN0b3J5LnR4dApAQCAtMCwwICsxLDMzNCBAQAorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIEZ1c2lvbi1NUFQgTVBJIDIuMCBIZWFkZXIgRmlsZSBDaGFuZ2UgSGlzdG9yeQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGVhZGVyIFNldCBSZWxlYXNlIFZlcnNpb246ICAgIDAyLjAwLjEyCisgSGVhZGVyIFNldCBSZWxlYXNlIERhdGU6ICAgICAgIDA1LTA2LTA5CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBGaWxlbmFtZSAgICAgICAgICAgICAgIEN1cnJlbnQgdmVyc2lvbiAgICAgUHJpb3IgdmVyc2lvbgorIC0tLS0tLS0tLS0gICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tICAgICAtLS0tLS0tLS0tLS0tCisgbXBpMi5oICAgICAgICAgICAgICAgICAwMi4wMC4xMiAgICAgICAgICAgIDAyLjAwLjExCisgbXBpMl9jbmZnLmggICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCisgbXBpMl9pbml0LmggICAgICAgICAgICAwMi4wMC4wNyAgICAgICAgICAgIDAyLjAwLjA2CisgbXBpMl9pb2MuaCAgICAgICAgICAgICAwMi4wMC4xMSAgICAgICAgICAgIDAyLjAwLjEwCisgbXBpMl9yYWlkLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCisgbXBpMl9zYXMuaCAgICAgICAgICAgICAwMi4wMC4wMiAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90YXJnLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAzCisgbXBpMl90b29sLmggICAgICAgICAgICAwMi4wMC4wMyAgICAgICAgICAgIDAyLjAwLjAyCisgbXBpMl90eXBlLmggICAgICAgICAgICAwMi4wMC4wMCAgICAgICAgICAgIDAyLjAwLjAwCisgbXBpMl9yYS5oICAgICAgICAgICAgICAwMi4wMC4wMAorIG1waTJfaGlzdG9yeS50eHQgICAgICAgMDIuMDAuMTEgICAgICAgICAgICAwMi4wMC4xMgorCisKKyAqICBEYXRlICAgICAgVmVyc2lvbiAgIERlc2NyaXB0aW9uCisgKiAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMi5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA2LTA0LTA3ICAwMi4wMC4wMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgUmVwbHlQb3N0SG9zdEluZGV4IHJlZ2lzdGVyIHRvIG9mZnNldCAweDZDIG9mIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TWVNURU1fSU5URVJGQUNFX1JFR1MgYW5kIG1vZGlmaWVkIHRoZSBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1JFUExZX1BPU1RfSE9TVF9JTkRFWF9PRkZTRVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB1bmlvbiBvZiByZXF1ZXN0IGRlc2NyaXB0b3JzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdW5pb24gb2YgcmVwbHkgZGVzY3JpcHRvcnMuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX1ZFUlNJT05fMDJfMDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBGaXhlZCB0aGUgc2l6ZSBvZiB0aGUgRnVuY3Rpb25EZXBlbmRlbnQ1IGZpZWxkIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9ERUZBVUxUX1JFUExZIHN0cnVjdHVyZS4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDUgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIHRoZSBNUEktZGVmaW5lZCBGYXVsdCBDb2RlcyBhbmQgZXh0ZW5kZWQgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0IHNwZWNpZmljIGNvZGVzIHVwIHRvIDB4RUZGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGEgc2l4dGgga2V5IHZhbHVlIGZvciB0aGUgV3JpdGVTZXF1ZW5jZSByZWdpc3RlcgorICogICAgICAgICAgICAgICAgICAgICAgYW5kIGNoYW5nZWQgdGhlIGZsdXNoIHZhbHVlIHRvIDB4MC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1lc3NhZ2UgZnVuY3Rpb24gY29kZXMgZm9yIERpYWdub3N0aWMgQnVmZmVyIFBvc3QKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBEaWFnbnNvdGljIFJlbGVhc2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBOZXcgSU9DU3RhdHVzIGRlZmluZTogTVBJMl9JT0NTVEFUVVNfRElBR05PU1RJQ19SRUxFQVNFRAorICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTVBJMl9WRVJTSU9OX1VOSU9OIGZyb20gbXBpMl9pb2MuaC4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMDMtMDMtMDggIDAyLjAwLjA3ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTIxLTA4ICAwMi4wMC4wOCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkICNkZWZpbmVzIGZvciBtYXJraW5nIGEgcmVwbHkgZGVzY3JpcHRvciBhcyB1bnVzZWQuCisgKiAgMDYtMjctMDggIDAyLjAwLjA5ICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDEwLTAyLTA4ICAwMi4wMC4xMCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vdmVkIExVTiBmaWVsZCBkZWZpbmVzIGZyb20gbXBpMl9pbml0LmguCisgKiAgMDEtMTktMDkgIDAyLjAwLjExICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDA1LTA2LTA5ICAwMi4wMC4xMiAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEluIGFsbCByZXF1ZXN0IGFuZCByZXBseSBkZXNjcmlwdG9ycywgcmVwbGFjZWQgVkZfSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkIHdpdGggTVNJeEluZGV4IGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBEZXZIYW5kbGUgZmllbGQgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9TQ1NJX0lPX1NVQ0NFU1NfUkVQTFlfREVTQ1JJUFRPUiBhbmQgbWFkZSB0aG9zZQorICogICAgICAgICAgICAgICAgICAgICAgYnl0ZXMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBSQUlEIEFjY2VsZXJhdG9yIGZ1bmN0aW9uYWxpdHkuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9jbmZnLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBBZGRlZCBkZWZpbmVzIGZvciBTQVMgSU8gVW5pdCBQYWdlIDIgUGh5RmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNYW51ZmFjdHVyaW5nIFBhZ2UgMTEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19FWFBBTkRFUjBfRkxBR1NfQ09OTkVDVE9SX0VORF9ERVZJQ0UKKyAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDIgIEFkZGluZyBnZW5lcmljIHN0cnVjdHVyZSBmb3IgcHJvZHVjdC1zcGVjaWZpYworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBwYWdlczogTVBJMl9DT05GSUdfUEFHRV9NQU5VRkFDVFVSSU5HX1BTLgorICogICAgICAgICAgICAgICAgICAgICAgUmV3b3JrIG9mIEJJT1MgUGFnZSAyIGNvbmZpZ3VyYXRpb24gcGFnZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIE1QSTJfQklPU1BBR0UyX0JPT1RfREVWSUNFIHRvIGJlIGEgdW5pb24gb2YgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGNvbmZpZ3VyYXRpb24gcGFnZXMgSU9DIFBhZ2UgOCBhbmQgRHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICBQZXJzaXN0ZW50IE1hcHBpbmcgUGFnZSAwLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgTW9kaWZpZWQgY29uZmlndXJhdGlvbiBwYWdlcyBkZWFsaW5nIHdpdGggSW50ZWdyYXRlZAorICogICAgICAgICAgICAgICAgICAgICAgUkFJRCAoTWFudWZhY3R1cmluZyBQYWdlIDQsIFJBSUQgVm9sdW1lIFBhZ2VzIDAgYW5kIDEsCisgKiAgICAgICAgICAgICAgICAgICAgICBSQUlEIFBoeXNpY2FsIERpc2sgUGFnZXMgMCBhbmQgMSwgUkFJRCBDb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAgICAgICAgICBQYWdlIDApLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgbmV3IHZhbHVlIGZvciBBY2Nlc3NTdGF0dXMgZmllbGQgb2YgU0FTIERldmljZQorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIChfU0FUQV9ORUVEU19JTklUSUFMSVpBVElPTikuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjA0ICBBZGRlZCBtaXNzaW5nIFNFUERldkhhbmRsZSBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAuCisgKiAgMTItMTgtMDcgIDAyLjAwLjA1ICBNb2RpZmllZCBJTyBVbml0IFBhZ2UgMCB0byB1c2UgMzItYml0IHZlcnNpb24gZmllbGRzIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgTlZEQVRBLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgSU9DIFBhZ2UgNyB0byB1c2UgbWFza3MgYW5kIGFkZGVkIGZpZWxkIGZvcgorICogICAgICAgICAgICAgICAgICAgICAgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0NPTkZJR19QQUdFX0JJT1NfNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfQ09ORklHX1BBR0VfTE9HXzAuCisgKiAgMDItMjktMDggIDAyLjAwLjA2ICBNb2RpZmllZCB2YXJpb3VzIG5hbWVzIHRvIG1ha2UgdGhlbSAzMi1jaGFyYWN0ZXIgdW5pcXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIERldmljZSBJRHMuCisgKiAgICAgICAgICAgICAgICAgICAgICBVcGRhdGVkIEludGVncmF0ZWQgUkFJRCBjb25maWd1cmF0aW9uIHBhZ2VzIGluY2x1ZGluZworICogICAgICAgICAgICAgICAgICAgICAgTWFudWZhY3R1cmluZyBQYWdlIDQsIElPQyBQYWdlIDYsIGFuZCBSQUlEIENvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgMC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDcgIEFkZGVkIGRlZmluZSBNUEkyX01BTlBBR0U0X01JWF9TU0RfU0FTX1NBVEEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgTVBJMl9NQU5QQUdFNF9QSFlTRElTS18xMjhNQl9DT0VSQ0lPTi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEZpeGVkIGRlZmluZSBNUEkyX0lPQ1BBR0U4X0ZMQUdTX0VOQ0xPU1VSRV9TTE9UX01BUFBJTkcuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBtaXNzaW5nIE1heE51bVJvdXRlZFNhc0FkZHJlc3NlcyBmaWVsZCB0bworICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9DT05GSUdfUEFHRV9FWFBBTkRFUl8wLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTIFBvcnQgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgc3RydWN0dXJlIGxheW91dCBmb3IKKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfQ09ORklHX1BBR0VfRFJJVkVSX01BUFBJTkdfMC4KKyAqICAwNi0yNy0wOCAgMDIuMDAuMDggIENoYW5nZWQgTVBJMl9DT05GSUdfUEFHRV9SRF9QRElTS18xIHRvIHVzZQorICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9SQUlEX1BIWVNfRElTSzFfUEFUSF9NQVggdG8gc2l6ZSB0aGUgYXJyYXkuCisgKiAgMTAtMDItMDggIDAyLjAwLjA5ICBDaGFuZ2VkIE1QSTJfUkFJRF9QR0FEX0NPTkZJR05VTV9NQVNLIGZyb20gMHgwMDAwRkZGRgorICogICAgICAgICAgICAgICAgICAgICAgdG8gMHgwMDAwMDBGRi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHR3byBuZXcgdmFsdWVzIGZvciB0aGUgUGh5c2ljYWwgRGlzayBDb2VyY2lvbiBTaXplCisgKiAgICAgICAgICAgICAgICAgICAgICBiaXRzIGluIHRoZSBGbGFncyBmaWVsZCBvZiBNYW51ZmFjdHVyaW5nIFBhZ2UgNC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHByb2R1Y3Qtc3BlY2lmaWMgTWFudWZhY3R1cmluZyBwYWdlcyAxNiB0byAzMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIEZsYWdzIGJpdHMgZm9yIGNvbnRyb2xsaW5nIHdyaXRlIGNhY2hlIG9uIFNBVEEKKyAqICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcyBpbiBJTyBVbml0IFBhZ2UgMS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBiaXQgdG8gQWRkaXRpb25hbENvbnRyb2xGbGFncyBvZiBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAxIHRvIGNvbnRyb2wgSW52YWxpZCBUb3BvbG9neSBDb3JyZWN0aW9uLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU3VwcG9ydGVkUGh5c0Rpc2tzIGZpZWxkIHRvIFJBSUQgVm9sdW1lIFBhZ2UgMSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHJlbGF0ZWQgZGVmaW5lcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGFkZGl0aW9uYWwgZGVmaW5lcyBmb3IgUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBmaWVsZC4KKyAqICAgICAgICAgICAgICAgICAgICAgIE1vZGlmaWVkIG1lYW5pbmcgb2YgUkFJRCBWb2x1bWUgUGFnZSAwIFZvbHVtZVNldHRpbmdzCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUgZm9yIGF1dG8tY29uZmlndXJlIG9mIGhvdC1zd2FwIGRyaXZlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBoeXNEaXNrQXR0cmlidXRlcyBmaWVsZCAoYW5kIHJlbGF0ZWQgZGVmaW5lcykgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFJBSUQgUGh5c2ljYWwgRGlzayBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX1NBU19QSFlJTkZPX1BIWV9WQUNBTlQgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdGhyZWUgbmV3IERpc2NvdmVyeVN0YXR1cyBiaXRzIGZvciBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBtdWx0aXBsZXhpbmcgaW5mb3JtYXRpb24gZnJvbSBTQVMgSU8gVW5pdCBwYWdlcy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEJvb3REZXZpY2VXYWl0VGltZSBmaWVsZCB0byBTQVMgSU8gVW5pdCBQYWdlIDQuCisgKiAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVkIFpvbmUgQWRkcmVzcyBSZXNvbHZlZCBiaXQgZnJvbSBQaHlJbmZvIGFuZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAgRmxhZ3MgZmllbGQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IEFjY2Vzc1N0YXR1cyB2YWx1ZXMgdG8gU0FTIERldmljZSBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmRpY2F0aW5nIHJvdXRpbmcgcHJvYmxlbXMuIEFkZGVkIDMgcmVzZXJ2ZWQgd29yZHMKKyAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoaXMgcGFnZS4KKyAqICAwMS0xOS0wOSAgMDIuMDAuMTAgIEZpeGVkIGRlZmluZXMgZm9yIEdQSU9WYWwgZmllbGQgb2YgSU8gVW5pdCBQYWdlIDMuCisgKiAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRlZCBtaXNzaW5nIHJlc2VydmVkIGZpZWxkIGludG8gc3RydWN0dXJlIGZvciBJT0MKKyAqICAgICAgICAgICAgICAgICAgICAgIFBhZ2UgNi4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG1vcmUgcGVuZGluZyB0YXNrIGJpdHMgdG8gUkFJRCBWb2x1bWUgUGFnZSAwCisgKiAgICAgICAgICAgICAgICAgICAgICBWb2x1bWVTdGF0dXNGbGFncyBkZWZpbmVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9QSFlTRElTSzBfU1RBVFVTX0ZMQUdfTk9UX0NFUlRJRklFRCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBhIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0IGZvciBTQVMgSU8gVW5pdCBQYWdlIDAKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwIHRvIGZsYWcgYSBkb3duc3RyZWFtIGluaXRpYXRvcgorICogICAgICAgICAgICAgICAgICAgICAgd2hlbiBpbiBzaW1wbGlmaWVkIHJvdXRpbmcgbW9kZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgU0FUQSBJbml0IEZhaWx1cmUgZGVmaW5lcyBmb3IgRGlzY292ZXJ5U3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBmaWVsZHMgb2YgU0FTIElPIFVuaXQgUGFnZSAwIGFuZCBTQVMgRXhwYW5kZXIgUGFnZSAwLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX0RFVklDRV9CTE9DS0VEIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFBvcnRHcm91cHMsIERtYUdyb3VwLCBhbmQgQ29udHJvbEdyb3VwIGZpZWxkcyB0bworICogICAgICAgICAgICAgICAgICAgICAgU0FTIERldmljZSBQYWdlIDAuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzIGZvciBJTyBVbml0IFBhZ2UgNSBhbmQgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIFVuaXQgUGFnZSA2LgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZXhwYW5kZXIgcmVkdWNlZCBmdW5jdGlvbmFsaXR5IGRhdGEgdG8gU0FTCisgKiAgICAgICAgICAgICAgICAgICAgICBFeHBhbmRlciBQYWdlIDAuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBTQVMgUEhZIFBhZ2UgMiBhbmQgU0FTIFBIWSBQYWdlIDMuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9pbml0LmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMTAtMzEtMDcgIDAyLjAwLjAxICBGaXhlZCBuYW1lIGZvciBwTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdC4KKyAqICAxMi0xOC0wNyAgMDIuMDAuMDIgIE1vZGlmaWVkIFRhc2sgTWFuYWdlbWVudCBUYXJnZXQgUmVzZXQgTWV0aG9kIGRlZmluZXMuCisgKiAgMDItMjktMDggIDAyLjAwLjAzICBBZGRlZCBRdWVyeSBUYXNrIFNldCBhbmQgUXVlcnkgVW5pdCBBdHRlbnRpb24uCisgKiAgMDMtMDMtMDggIDAyLjAwLjA0ICBGaXhlZCBuYW1lIG9mIHN0cnVjdCBfTVBJMl9TQ1NJX1RBU0tfTUFOQUdFX1JFUExZLgorICogIDA1LTIxLTA4ICAwMi4wMC4wNSAgRml4ZWQgdHlwbyBpbiBuYW1lIG9mIE1waTJTZXBSZXF1ZXN0X3QuCisgKiAgMTAtMDItMDggIDAyLjAwLjA2ICBSZW1vdmVkIFVudGFnZ2VkIGFuZCBObyBEaXNjb25uZWN0IHZhbHVlcyBmcm9tIFNDU0kgSU8KKyAqICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgZmllbGQgVGFzayBBdHRyaWJ1dGUgZmxhZ3MuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBMVU4gZmllbGQgZGVmaW5lcyB0byBtcGkyLmggYmVjYXN1ZSB0aGV5IGFyZQorICogICAgICAgICAgICAgICAgICAgICAgY29tbW9uIHRvIG1hbnkgc3RydWN0dXJlcy4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDcgIENoYW5nZWQgdGFzayBtYW5hZ2VtZW50IHR5cGUgb2YgUXVlcnkgVW5pdCBBdHRlbnRpb24gdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IEFzeW5jaHJvbm91cyBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZWQgdHdvIG5ldyBiaXRzIGluIHRoZSBTbG90U3RhdHVzIGZpZWxkIG9mIHRoZSBTQ1NJCisgKiAgICAgICAgICAgICAgICAgICAgICBFbmNsb3N1cmUgUHJvY2Vzc29yIFJlcXVlc3QgYW5kIFJlcGx5LgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfaW9jLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDYtMDQtMDcgIDAyLjAwLjAxICBJbiBJT0NGYWN0cyBSZXBseSBzdHJ1Y3R1cmUsIHJlbmFtZWQgTWF4RGV2aWNlcyB0bworICogICAgICAgICAgICAgICAgICAgICAgTWF4VGFyZ2V0cy4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFRvdGFsSW1hZ2VTaXplIGZpZWxkIHRvIEZXRG93bmxvYWQgUmVxdWVzdC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHJlc2VydmVkIHdvcmRzIHRvIEZXVXBsb2FkIFJlcXVlc3QuCisgKiAgMDYtMjYtMDcgIDAyLjAwLjAyICBBZGRlZCBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50LgorICogIDA4LTMxLTA3ICAwMi4wMC4wMyAgUmVtb3ZlZCBTeXN0ZW1SZXBseVF1ZXVlRGVwdGggZmllbGQgZnJvbSB0aGUgSU9DSW5pdAorICogICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgcmVwbGFjZWQgaXQgd2l0aAorICogICAgICAgICAgICAgICAgICAgICAgUmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGggYW5kIFJlcGx5RnJlZVF1ZXVlRGVwdGguCisgKiAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlZCB0aGUgTWluUmVwbHlRdWV1ZURlcHRoIGZpZWxkIG9mIHRoZSBJT0NGYWN0cworICogICAgICAgICAgICAgICAgICAgICAgcmVwbHkgd2l0aCBNYXhSZXBseURlc2NyaXB0b3JQb3N0UXVldWVEZXB0aC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfUkRQUV9ERVBUSF9NSU4gZGVmaW5lIHRvIHNwZWNpZnkgdGhlIG1pbmltdW0KKyAqICAgICAgICAgICAgICAgICAgICAgIGRlcHRoIGZvciB0aGUgUmVwbHkgRGVzY3JpcHRvciBQb3N0IFF1ZXVlLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgU0FTQWRkcmVzcyBmaWVsZCB0byBJbml0aWF0b3IgRGV2aWNlIFRhYmxlCisgKiAgICAgICAgICAgICAgICAgICAgICBPdmVyZmxvdyBFdmVudCBkYXRhLgorICogIDEwLTMxLTA3ICAwMi4wMC4wNCAgQWRkZWQgUmVhc29uQ29kZSBNUEkyX0VWRU5UX1NBU19JTklUX1JDX05PVF9SRVNQT05ESU5HCisgKiAgICAgICAgICAgICAgICAgICAgICBmb3IgU0FTIEluaXRpYXRvciBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgTW9kaWZpZWQgUmVhc29uIENvZGUgZGVmaW5lcyBmb3IgU0FTIFRvcG9sb2d5IENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgTGlzdCBFdmVudCBkYXRhLCBpbmNsdWRpbmcgYWRkaW5nIGEgYml0IGZvciBQSFkgVmFjYW50CisgKiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGFuZCBhZGRpbmcgYSBtYXNrIGZvciB0aGUgUmVhc29uIENvZGUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBkZWZpbmUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX0VWRU5UX1NBU19UT1BPX0VTX0RFTEFZX05PVF9SRVNQT05ESU5HLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lIGZvciBNUEkyX0VYVF9JTUFHRV9UWVBFX01FR0FSQUlELgorICogIDEyLTE4LTA3ICAwMi4wMC4wNSAgQWRkZWQgQm9vdCBTdGF0dXMgZGVmaW5lcyBmb3IgdGhlIElPQ0V4Y2VwdGlvbnMgZmllbGQgb2YKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBJT0NGYWN0cyBSZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VYVEVOREVEX0JVRkZFUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBNb3ZlZCBNUEkyX1ZFUlNJT05fVU5JT04gdG8gbXBpMi5oLgorICogICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZCBNUEkyX0VWRU5UX05PVElGSUNBVElPTl9SRVFVRVNUIHRvIHVzZSBtYXNrcworICogICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBlbmFibGVzLCBhbmQgYWRkZWQgU0FTQnJvYWRjYXN0UHJpbWl0aXZlTWFza3MKKyAqICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTG9nIEVudHJ5IEFkZGVkIEV2ZW50IGFuZCByZWxhdGVkIHN0cnVjdHVyZS4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDYgIEFkZGVkIGRlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfSU5URUdSQVRFRF9SQUlELgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgTVBJMl9JT0NGQUNUU19QUk9UT0NPTF9TTVBfVEFSR0VULgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTWF4Vm9sdW1lcyBhbmQgTWF4UGVyc2lzdGVudEVudHJpZXMgZmllbGRzIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBJT0NGYWN0cyByZXBseS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIFByb3RvY2FsRmxhZ3MgYW5kIElPQ0NhcGFiaWxpdGllcyBmaWVsZHMgdG8KKyAqICAgICAgICAgICAgICAgICAgICAgIE1QSTJfRldfSU1BR0VfSEVBREVSLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX1BPUlRFTkFCTEVfRkxBR1NfRU5BQkxFX1NJTkdMRV9QT1JULgorICogIDAzLTAzLTA4ICAwMi4wMC4wNyAgRml4ZWQgTVBJMl9GV19JTUFHRV9IRUFERVIgYnkgY2hhbmdpbmcgUmVzZXJ2ZWQyNiB0bworICogICAgICAgICAgICAgICAgICAgICAgYSBVMTYgKGZyb20gYSBVMzIpLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBleHRyYSAncycgZnJvbSBFdmVudE1hc2tzIG5hbWUuCisgKiAgMDYtMjctMDggIDAyLjAwLjA4ICBGaXhlZCBhbiBvZmZzZXQgaW4gYSBjb21tZW50LgorICogIDEwLTAyLTA4ICAwMi4wMC4wOSAgUmVtb3ZlZCBTeXN0ZW1SZXBseUZyYW1lU2l6ZSBmcm9tIE1QSTJfSU9DX0lOSVRfUkVRVUVTVC4KKyAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgQ3VyUmVwbHlGcmFtZVNpemUgZnJvbSBNUEkyX0lPQ19GQUNUU19SRVBMWSBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgIHJlbmFtZWQgTWluUmVwbHlGcmFtZVNpemUgdG8gUmVwbHlGcmFtZVNpemUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0VYQ0VQVF9JUl9GT1JFSUdOX0NPTkZJR19NQVguCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IFJBSURPcGVyYXRpb24gdmFsdWVzIGZvciBJbnRlZ3JhdGVkIFJBSUQKKyAqICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnMgU3RhdHVzIEV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBmb3VyIG5ldyBJUiBDb25maWd1cmF0aW9uIENoYW5nZSBMaXN0IEV2ZW50IGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlYXNvbkNvZGUgdmFsdWVzLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyBSZWFzb25Db2RlIGRlZmluZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzCisgKiAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2UgRXZlbnQgZGF0YS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIHRocmVlIG5ldyBEaXNjb3ZlcnlTdGF0dXMgYml0cyBmb3IgdGhlIFNBUworICogICAgICAgICAgICAgICAgICAgICAgRGlzY292ZXJ5IGV2ZW50IGRhdGEuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNdWx0aXBsZXhpbmcgU3RhdHVzIENoYW5nZSBiaXQgdG8gdGhlIFBoeVN0YXR1cworICogICAgICAgICAgICAgICAgICAgICAgZmllbGQgb2YgdGhlIFNBUyBUb3BvbG9neSBDaGFuZ2UgTGlzdCBldmVudCBkYXRhLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBkZWZpbmUgZm9yIE1QSTJfSU5JVF9JTUFHRV9CT09URkxBR1NfWE1FTUNPUFkuCisgKiAgICAgICAgICAgICAgICAgICAgICBCb290RmxhZ3MgYXJlIG5vdyBwcm9kdWN0LXNwZWNpZmljLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgZGVmaW5lcyBmb3IgdGhlIGluZGl2ZHVhbCBzaWduYXR1cmUgYnl0ZXMKKyAqICAgICAgICAgICAgICAgICAgICAgIGZvciBNUEkyX0lOSVRfSU1BR0VfRk9PVEVSLgorICogIDAxLTE5LTA5ICAwMi4wMC4xMCAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0VWRU5UX1JFUExBWSBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX0RPV05TVFJFQU1fSU5JVElBVE9SCisgKiAgICAgICAgICAgICAgICAgICAgICBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TQVRBX0lOSVRfRkFJTFVSRQorICogICAgICAgICAgICAgICAgICAgICAgZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlZCBNUEkyX0VWRU5UX1NBU19ESVNDX0RTX1NBVEFfSU5JVF9GQUlMVVJFIGRlZmluZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMTEgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SIGRlZmluZS4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9NU0lfWF9JTkRFWCBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCB0d28gbmV3IHJlYXNvbiBjb2RlcyBmb3IgU0FTIERldmljZSBTdGF0dXMgQ2hhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgICBFdmVudC4KKyAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIG5ldyBldmVudDogU0FTIFBIWSBDb3VudGVyLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfcmFpZC5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDA4LTMxLTA3ICAwMi4wMC4wMSAgTW9kaWZpY2F0aW9ucyB0byBSQUlEIEFjdGlvbiByZXF1ZXN0IGFuZCByZXBseSwKKyAqICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgQWN0aW9ucyBhbmQgQWN0aW9uRGF0YS4KKyAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIEFkZGVkIE1QSTJfUkFJRF9BQ1RJT05fQURBVEFfRElTQUJMX0ZVTExfUkVCVUlMRC4KKyAqICAwNS0yMS0wOCAgMDIuMDAuMDMgIEFkZGVkIE1QSTJfUkFJRF9WT0xfQ1JFQVRJT05fTlVNX1BIWVNESVNLUyBzbyB0aGF0CisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgUGh5c0Rpc2sgYXJyYXkgaW4gTVBJMl9SQUlEX1ZPTFVNRV9DUkVBVElPTl9TVFJVQ1QKKyAqICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBzaXplZCBieSB0aGUgYnVpbGQgZW52aXJvbm1lbnQuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl9zYXMuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAwNi0yNi0wNyAgMDIuMDAuMDEgIEFkZGVkIENsZWFyIEFsbCBQZXJzaXN0ZW50IE9wZXJhdGlvbiB0byBTQVMgSU8gVW5pdAorICogICAgICAgICAgICAgICAgICAgICAgQ29udHJvbCBSZXF1ZXN0LgorICogIDEwLTAyLTA4ICAwMi4wMC4wMiAgQWRkZWQgU2V0IElPQyBQYXJhbWV0ZXIgT3BlcmF0aW9uIHRvIFNBUyBJTyBVbml0IENvbnRyb2wKKyAqICAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QuCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbXBpMl90YXJnLmgKKyAqICAwNC0zMC0wNyAgMDIuMDAuMDAgIENvcnJlc3BvbmRzIHRvIEZ1c2lvbi1NUFQgTVBJIFNwZWNpZmljYXRpb24gUmV2IEEuCisgKiAgMDgtMzEtMDcgIDAyLjAwLjAxICBBZGRlZCBDb21tYW5kIEJ1ZmZlciBEYXRhIExvY2F0aW9uIEFkZHJlc3MgU3BhY2UgYml0cyB0bworICogICAgICAgICAgICAgICAgICAgICAgQnVmZmVyUG9zdEZsYWdzIGZpZWxkIG9mIENvbW1hbmRCdWZmZXJQb3N0QmFzZSBSZXF1ZXN0LgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAxMC0wMi0wOCAgMDIuMDAuMDMgIFJlbW92ZWQgTmV4dENtZEJ1ZmZlck9mZnNldCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICBNUEkyX1RBUkdFVF9DTURfQlVGX1BPU1RfQkFTRV9SRVFVRVNULgorICogICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IFN0YXR1cyBTZW5kIFJlcXVlc3Qgb25seSB0YWtlcyBhIHNpbmdsZSBTR0UgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZSBkYXRhLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21waTJfdG9vbC5oCisgKiAgMDQtMzAtMDcgIDAyLjAwLjAwICBDb3JyZXNwb25kcyB0byBGdXNpb24tTVBUIE1QSSBTcGVjaWZpY2F0aW9uIFJldiBBLgorICogIDEyLTE4LTA3ICAwMi4wMC4wMSAgQWRkZWQgRGlhZ25vc3RpYyBCdWZmZXIgUG9zdCBhbmQgRGlhZ25vc3RpYyBSZWxlYXNlCisgKiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBkZWZpbmVzLgorICogIDAyLTI5LTA4ICAwMi4wMC4wMiAgTW9kaWZpZWQgdmFyaW91cyBuYW1lcyB0byBtYWtlIHRoZW0gMzItY2hhcmFjdGVyIHVuaXF1ZS4KKyAqICAwNS0wNi0wOSAgMDIuMDAuMDMgIEFkZGVkIElTVFdJIFJlYWQgV3JpdGUgVG9vbCBhbmQgRGlhZ25vc3RpYyBDTEkgVG9vbC4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3R5cGUuaAorICogIDA0LTMwLTA3ICAwMi4wMC4wMCAgQ29ycmVzcG9uZHMgdG8gRnVzaW9uLU1QVCBNUEkgU3BlY2lmaWNhdGlvbiBSZXYgQS4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX3JhLmgKKyAqICAwNS0wNi0wOSAgMDIuMDAuMDAgIEluaXRpYWwgdmVyc2lvbi4KKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittcGkyX2hpc3RvcnkudHh0ICAgICAgICAgUGFydHMgbGlzdCBoaXN0b3J5CisKK0ZpbGVuYW1lICAgICAwMi4wMC4xMgorLS0tLS0tLS0tLSAgIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTIKK21waTJfY25mZy5oICAwMi4wMC4xMQorbXBpMl9pbml0LmggIDAyLjAwLjA3CittcGkyX2lvYy5oICAgMDIuMDAuMTEKK21waTJfcmFpZC5oICAwMi4wMC4wMworbXBpMl9zYXMuaCAgIDAyLjAwLjAyCittcGkyX3RhcmcuaCAgMDIuMDAuMDMKK21waTJfdG9vbC5oICAwMi4wMC4wMworbXBpMl90eXBlLmggIDAyLjAwLjAwCittcGkyX3JhLmggICAgMDIuMDAuMDAKKworRmlsZW5hbWUgICAgIDAyLjAwLjExICAwMi4wMC4xMCAgMDIuMDAuMDkgIDAyLjAwLjA4ICAwMi4wMC4wNyAgMDIuMDAuMDYKKy0tLS0tLS0tLS0gICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tCittcGkyLmggICAgICAgMDIuMDAuMTEgIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNgorbXBpMl9jbmZnLmggIDAyLjAwLjEwICAwMi4wMC4wOSAgMDIuMDAuMDggIDAyLjAwLjA3ICAwMi4wMC4wNiAgMDIuMDAuMDYKK21waTJfaW5pdC5oICAwMi4wMC4wNiAgMDIuMDAuMDYgIDAyLjAwLjA1ICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzCittcGkyX2lvYy5oICAgMDIuMDAuMTAgIDAyLjAwLjA5ICAwMi4wMC4wOCAgMDIuMDAuMDcgIDAyLjAwLjA3ICAwMi4wMC4wNgorbXBpMl9yYWlkLmggIDAyLjAwLjAzICAwMi4wMC4wMyAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfc2FzLmggICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxCittcGkyX3RhcmcuaCAgMDIuMDAuMDMgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMgorbXBpMl90b29sLmggIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIgIDAyLjAwLjAyICAwMi4wMC4wMiAgMDIuMDAuMDIKK21waTJfdHlwZS5oICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCisKK0ZpbGVuYW1lICAgICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCistLS0tLS0tLS0tICAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLQorbXBpMi5oICAgICAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfY25mZy5oICAwMi4wMC4wNSAgMDIuMDAuMDQgIDAyLjAwLjAzICAwMi4wMC4wMiAgMDIuMDAuMDEgIDAyLjAwLjAwCittcGkyX2luaXQuaCAgMDIuMDAuMDIgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl9pb2MuaCAgIDAyLjAwLjA1ICAwMi4wMC4wNCAgMDIuMDAuMDMgIDAyLjAwLjAyICAwMi4wMC4wMSAgMDIuMDAuMDAKK21waTJfcmFpZC5oICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3Nhcy5oICAgMDIuMDAuMDEgIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMAorbXBpMl90YXJnLmggIDAyLjAwLjAxICAwMi4wMC4wMSAgMDIuMDAuMDEgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAKK21waTJfdG9vbC5oICAwMi4wMC4wMSAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwCittcGkyX3R5cGUuaCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMCAgMDIuMDAuMDAgIDAyLjAwLjAwICAwMi4wMC4wMAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pbml0LmgKaW5kZXggZjExMTVmMC4uNTYzZTU2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW5pdC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2luaXQuaApAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogICoKICAqCiAgKiAgICAgICAgICAgTmFtZTogIG1waTJfaW5pdC5oCiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBTQ1NJIGluaXRpYXRvciBtb2RlIG1lc3NhZ2VzIGFuZCBzdHJ1Y3R1cmVzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjMsIDIwMDYKICAqCi0gKiAgICBtcGkyX2luaXQuaCBWZXJzaW9uOiAgMDIuMDAuMDYKKyAqICAgIG1waTJfaW5pdC5oIFZlcnNpb246ICAwMi4wMC4wNwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTIzLDYgKzIzLDEwIEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIGZpZWxkIFRhc2sgQXR0cmlidXRlIGZsYWdzLgogICogICAgICAgICAgICAgICAgICAgICAgTW92ZWQgTFVOIGZpZWxkIGRlZmluZXMgdG8gbXBpMi5oIGJlY2FzdWUgdGhleSBhcmUKICAqICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbiB0byBtYW55IHN0cnVjdHVyZXMuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjA3ICBDaGFuZ2VkIHRhc2sgbWFuYWdlbWVudCB0eXBlIG9mIFF1ZXJ5IFVuaXQgQXR0ZW50aW9uIHRvCisgKiAgICAgICAgICAgICAgICAgICAgICBRdWVyeSBBc3luY2hyb25vdXMgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIHR3byBuZXcgYml0cyBpbiB0aGUgU2xvdFN0YXR1cyBmaWVsZCBvZiB0aGUgU0NTSQorICogICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlIFByb2Nlc3NvciBSZXF1ZXN0IGFuZCBSZXBseS4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI4OSw3ICsyOTMsMTEgQEAKICNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSyAgICAgICAgICAgKDB4MDcpCiAjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX0NMUl9BQ0EgICAgICAgICAgICAgICgweDA4KQogI2RlZmluZSBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9RUllfVEFTS19TRVQgICAgICAgICAoMHgwOSkKLSNkZWZpbmUgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVJZX1VOSVRfQVRURU5USU9OICAgKDB4MEEpCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9BU1lOQ19FVkVOVCAgICAgICgweDBBKQorCisvKiBvYnNvbGV0ZSBUYXNrVHlwZSBuYW1lICovCisjZGVmaW5lIE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9VTklUX0FUVEVOVElPTglcCisJKE1QSTJfU0NTSVRBU0tNR01UX1RBU0tUWVBFX1FSWV9BU1lOQ19FVkVOVCkKIAogLyogTXNnRmxhZ3MgYml0cyAqLwogCkBAIC0zNzUsNiArMzgzLDggQEAKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICAgKDB4MDAwMDAxMDApCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAgICgweDAwMDAwMDgwKQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgICAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfSU5fQ1JJVElDQUxfQVJSQVkgICAgICAgKDB4MDAwMDAwMTApCisjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX0lOX0ZBSUxFRF9BUlJBWSAgICAgICAgICgweDAwMDAwMDA4KQogI2RlZmluZSBNUEkyX1NFUF9SRVFfU0xPVFNUQVRVU19ERVZfUkVCVUlMRElORyAgICAgICAgICAoMHgwMDAwMDAwNCkKICNkZWZpbmUgTVBJMl9TRVBfUkVRX1NMT1RTVEFUVVNfREVWX0ZBVUxUWSAgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUV9TTE9UU1RBVFVTX05PX0VSUk9SICAgICAgICAgICAgICAgICgweDAwMDAwMDAxKQpAQCAtNDEwLDYgKzQyMCw4IEBACiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSE9UX1NQQVJFICAgICAgICAgICAgICgweDAwMDAwMTAwKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX1VOQ09ORklHVVJFRCAgICAgICAgICAoMHgwMDAwMDA4MCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19QUkVESUNURURfRkFVTFQgICAgICAgKDB4MDAwMDAwNDApCisjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfSU5fQ1JJVElDQUxfQVJSQVkgICAgICgweDAwMDAwMDEwKQorI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX0lOX0ZBSUxFRF9BUlJBWSAgICAgICAoMHgwMDAwMDAwOCkKICNkZWZpbmUgTVBJMl9TRVBfUkVQTFlfU0xPVFNUQVRVU19ERVZfUkVCVUlMRElORyAgICAgICAgKDB4MDAwMDAwMDQpCiAjZGVmaW5lIE1QSTJfU0VQX1JFUExZX1NMT1RTVEFUVVNfREVWX0ZBVUxUWSAgICAgICAgICAgICgweDAwMDAwMDAyKQogI2RlZmluZSBNUEkyX1NFUF9SRVBMWV9TTE9UU1RBVFVTX05PX0VSUk9SICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2lvYy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKaW5kZXggOGM1ZDgxOC4uYzI5NDEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmgKQEAgLTYsNyArNiw3IEBACiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBJT0MsIFBvcnQsIEV2ZW50LCBGVyBEb3dubG9hZCwgYW5kIEZXIFVwbG9hZCBtZXNzYWdlcwogICogIENyZWF0aW9uIERhdGU6ICBPY3RvYmVyIDExLCAyMDA2CiAgKgotICogIG1waTJfaW9jLmggVmVyc2lvbjogIDAyLjAwLjEwCisgKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMTEKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC03OSw2ICs3OSwxMSBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUKICAqICAgICAgICAgICAgICAgICAgICAgIGRlZmluZS4KICAqICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZWQgTVBJMl9FVkVOVF9TQVNfRElTQ19EU19TQVRBX0lOSVRfRkFJTFVSRSBkZWZpbmUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjExICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfUkFJRF9BQ0NFTEVSQVRPUiBkZWZpbmUuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfTVNJX1hfSU5ERVggZGVmaW5lLgorICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgdHdvIG5ldyByZWFzb24gY29kZXMgZm9yIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZQorICogICAgICAgICAgICAgICAgICAgICAgRXZlbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBBZGRlZCBuZXcgZXZlbnQ6IFNBUyBQSFkgQ291bnRlci4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTI2MSw2ICsyNjYsOCBAQAogLyogUHJvZHVjdElEIGZpZWxkIHVzZXMgTVBJMl9GV19IRUFERVJfUElEXyAqLwogCiAvKiBJT0NDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX01TSV9YX0lOREVYICAgICAgICAgICAgKDB4MDAwMDgwMDApCisjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9SQUlEX0FDQ0VMRVJBVE9SICAgICAgICgweDAwMDA0MDAwKQogI2RlZmluZSBNUEkyX0lPQ0ZBQ1RTX0NBUEFCSUxJVFlfRVZFTlRfUkVQTEFZICAgICAgICAgICAoMHgwMDAwMjAwMCkKICNkZWZpbmUgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX0lOVEVHUkFURURfUkFJRCAgICAgICAgKDB4MDAwMDEwMDApCiAjZGVmaW5lIE1QSTJfSU9DRkFDVFNfQ0FQQUJJTElUWV9UTFIgICAgICAgICAgICAgICAgICAgICgweDAwMDAwODAwKQpAQCAtNDQwLDYgKzQ0Nyw3IEBACiAjZGVmaW5lIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSyAgICAgICAgICAgICAgICAgKDB4MDAxRikKICNkZWZpbmUgTVBJMl9FVkVOVF9JUl9DT05GSUdVUkFUSU9OX0NIQU5HRV9MSVNUICAgICAoMHgwMDIwKQogI2RlZmluZSBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCAgICAgICAgICAgICAgICAgICgweDAwMjEpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX1BIWV9DT1VOVEVSICAgICAgICAgICAgICAgICAgKDB4MDAyMikKIAogCiAvKiBMb2cgRW50cnkgQWRkZWQgRXZlbnQgZGF0YSAqLwpAQCAtNTAyLDE3ICs1MTAsMTkgQEAKICAgTVBJMl9QT0lOVEVSIHBNcGkyRXZlbnREYXRhU2FzRGV2aWNlU3RhdHVzQ2hhbmdlX3Q7CiAKIC8qIFNBUyBEZXZpY2UgU3RhdHVzIENoYW5nZSBFdmVudCBkYXRhIFJlYXNvbkNvZGUgdmFsdWVzICovCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NNQVJUX0RBVEEgICAgICAgICAgICAgICAoMHgwNSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfVU5TVVBQT1JURUQgICAgICAgICAgICAgICgweDA3KQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgICAgKDB4MDgpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1RBU0tfQUJPUlRfSU5URVJOQUwgICAgICAoMHgwOSkKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQUJPUlRfVEFTS19TRVRfSU5URVJOQUwgICgweDBBKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTEVBUl9UQVNLX1NFVF9JTlRFUk5BTCAgKDB4MEIpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1FVRVJZX1RBU0tfSU5URVJOQUwgICAgICAoMHgwQykKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQVNZTkNfTk9USUZJQ0FUSU9OICAgICAgICgweDBEKQotI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfSU5URVJOQUxfREVWX1JFU0VUICAgKDB4MEUpCi0jZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0NNUF9UQVNLX0FCT1JUX0lOVEVSTkFMICAoMHgwRikKLSNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfU0FUQV9JTklUX0ZBSUxVUkUgICAgICAgICgweDEwKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19TTUFSVF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNykKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfSU5URVJOQUxfREVWSUNFX1JFU0VUICAgICAgICAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19UQVNLX0FCT1JUX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgKDB4MDkpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FCT1JUX1RBU0tfU0VUX0lOVEVSTkFMICAgICAgICAgICAgICAoMHgwQSkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ0xFQVJfVEFTS19TRVRfSU5URVJOQUwgICAgICAgICAgICAgICgweDBCKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19RVUVSWV9UQVNLX0lOVEVSTkFMICAgICAgICAgICAgICAgICAgKDB4MEMpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX0FTWU5DX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAoMHgwRCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfQ01QX0lOVEVSTkFMX0RFVl9SRVNFVCAgICAgICAgICAgICAgICgweDBFKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfVEFTS19BQk9SVF9JTlRFUk5BTCAgICAgICAgICAgICAgKDB4MEYpCisjZGVmaW5lIE1QSTJfRVZFTlRfU0FTX0RFVl9TVEFUX1JDX1NBVEFfSU5JVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAoMHgxMCkKKyNkZWZpbmUgTVBJMl9FVkVOVF9TQVNfREVWX1NUQVRfUkNfRVhQQU5ERVJfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgICAgICgweDExKQorI2RlZmluZSBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19DTVBfRVhQQU5ERVJfUkVEVUNFRF9GVU5DVElPTkFMSVRZICAgKDB4MTIpCiAKIAogLyogSW50ZWdyYXRlZCBSQUlEIE9wZXJhdGlvbiBTdGF0dXMgRXZlbnQgZGF0YSAqLwpAQCAtODIyLDYgKzgzMiwzNyBAQAogI2RlZmluZSBNUEkyX0VWRU5UX1NBU19FTkNMX1JDX05PVF9SRVNQT05ESU5HICAgICAgICgweDAyKQogCiAKKy8qIFNBUyBQSFkgQ291bnRlciBFdmVudCBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9NUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSIHsKKyAgICBVNjQgICAgICAgICBUaW1lU3RhbXA7ICAgICAgICAgIC8qIDB4MDAgKi8KKyAgICBVMzIgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICBQaHlFdmVudENvZGU7ICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICBQaHlOdW07ICAgICAgICAgICAgIC8qIDB4MEQgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICBQaHlFdmVudEluZm87ICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICBDb3VudGVyVHlwZTsgICAgICAgIC8qIDB4MTQgKi8KKyAgICBVOCAgICAgICAgICBUaHJlc2hvbGRXaW5kb3c7ICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICBUaW1lVW5pdHM7ICAgICAgICAgIC8qIDB4MTYgKi8KKyAgICBVOCAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgIC8qIDB4MTcgKi8KKyAgICBVMzIgICAgICAgICBFdmVudFRocmVzaG9sZDsgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICBUaHJlc2hvbGRGbGFnczsgICAgIC8qIDB4MUMgKi8KKyAgICBVMTYgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgIC8qIDB4MUUgKi8KK30gTVBJMl9FVkVOVF9EQVRBX1NBU19QSFlfQ09VTlRFUiwKKyAgTVBJMl9QT0lOVEVSIFBUUl9NUEkyX0VWRU5UX0RBVEFfU0FTX1BIWV9DT1VOVEVSLAorICBNcGkyRXZlbnREYXRhU2FzUGh5Q291bnRlcl90LCBNUEkyX1BPSU5URVIgcE1waTJFdmVudERhdGFTYXNQaHlDb3VudGVyX3Q7CisKKy8qIHVzZSBNUEkyX1NBU1BIWTNfRVZFTlRfQ09ERV8gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogUGh5RXZlbnRDb2RlIGZpZWxkCisgKiB1c2UgTVBJMl9TQVNQSFkzX0NPVU5URVJfVFlQRV8gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogQ291bnRlclR5cGUgZmllbGQKKyAqIHVzZSBNUEkyX1NBU1BIWTNfVElNRV9VTklUU18gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogVGltZVVuaXRzIGZpZWxkCisgKiB1c2UgTVBJMl9TQVNQSFkzX1RGTEFHU18gdmFsdWVzIGZyb20gbXBpMl9jbmZnLmggZm9yIHRoZQorICogVGhyZXNob2xkRmxhZ3MgZmllbGQKKyAqICovCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIEV2ZW50QWNrIG1lc3NhZ2UKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKaW5kZXggMmZmNGU5My4uMDA3ZTk1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaApAQCAtMSwxMiArMSwxMiBAQAogLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCBMU0kgQ29ycG9yYXRpb24uCisgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDkgTFNJIENvcnBvcmF0aW9uLgogICoKICAqCiAgKiAgICAgICAgICAgTmFtZTogIG1waTJfdG9vbC5oCiAgKiAgICAgICAgICBUaXRsZTogIE1QSSBkaWFnbm9zdGljIHRvb2wgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMKICAqICBDcmVhdGlvbiBEYXRlOiAgTWFyY2ggMjYsIDIwMDcKICAqCi0gKiAgICBtcGkyX3Rvb2wuaCBWZXJzaW9uOiAgMDIuMDAuMDIKKyAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4wMwogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE3LDYgKzE3LDcgQEAKICAqICAxMi0xOC0wNyAgMDIuMDAuMDEgIEFkZGVkIERpYWdub3N0aWMgQnVmZmVyIFBvc3QgYW5kIERpYWdub3N0aWMgUmVsZWFzZQogICogICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBhbmQgZGVmaW5lcy4KICAqICAwMi0yOS0wOCAgMDIuMDAuMDIgIE1vZGlmaWVkIHZhcmlvdXMgbmFtZXMgdG8gbWFrZSB0aGVtIDMyLWNoYXJhY3RlciB1bmlxdWUuCisgKiAgMDUtMDYtMDkgIDAyLjAwLjAzICBBZGRlZCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wgYW5kIERpYWdub3N0aWMgQ0xJIFRvb2wuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0zMiw3ICszMywxMCBAQAogLyogZGVmaW5lcyBmb3IgdGhlIFRvb2xzICovCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9DTEVBTl9UT09MICAgICAgICAgICAgICAgICAgICAgKDB4MDApCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9NRU1PUllfTU9WRV9UT09MICAgICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1RPT0wgICAgICAgICAgKDB4MDMpCiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9CRUFDT05fVE9PTCAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9UT09MICAgICAgICAgICAgKDB4MDYpCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIFRvb2xib3ggcmVwbHkKQEAgLTExMiw2ICsxMTYsNzcgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBJU1RXSSBSZWFkIFdyaXRlIFRvb2wKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRvb2xib3ggSVNUV0kgUmVhZCBXcml0ZSBUb29sIHJlcXVlc3QgbWVzc2FnZSAqLwordHlwZWRlZiBzdHJ1Y3QgX01QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDY7ICAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldkluZGV4OyAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBTR0xGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNzsgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVHhEYXRhTGVuZ3RoOyAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSeERhdGFMZW5ndGg7ICAgICAgICAgICAgICAgLyogMHgxQSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkODsgICAgICAgICAgICAgICAgICAvKiAweDFDICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ5OyAgICAgICAgICAgICAgICAgIC8qIDB4MjAgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDEwOyAgICAgICAgICAgICAgICAgLyogMHgyNCAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTE7ICAgICAgICAgICAgICAgICAvKiAweDI4ICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxMjsgICAgICAgICAgICAgICAgIC8qIDB4MkMgKi8KKyAgICBNUEkyX1NHRV9TSU1QTEVfVU5JT04gICBTR0w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgzMCAqLworfSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVBRF9XUklURV9SRVFVRVNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9JU1RXSV9SRUFEX1dSSVRFX1JFUVVFU1QsCisgIE1waTJUb29sYm94SXN0d2lSZWFkV3JpdGVSZXF1ZXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hJc3R3aVJlYWRXcml0ZVJlcXVlc3RfdDsKKworLyogdmFsdWVzIGZvciB0aGUgQWN0aW9uIGZpZWxkICovCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVBRF9EQVRBICAgICAgICAgICAgKDB4MDEpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fV1JJVEVfREFUQSAgICAgICAgICAgKDB4MDIpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fU0VRVUVOQ0UgICAgICAgICAgICAgKDB4MDMpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVTRVJWRV9CVVMgICAgICAgICAgKDB4MTApCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVMRUFTRV9CVVMgICAgICAgICAgKDB4MTEpCisjZGVmaW5lIE1QSTJfVE9PTF9JU1RXSV9BQ1RJT05fUkVTRVQgICAgICAgICAgICAgICAgKDB4MTIpCisKKy8qIHZhbHVlcyBmb3IgU0dMRmxhZ3MgZmllbGQgYXJlIGluIHRoZSBTR0wgc2VjdGlvbiBvZiBtcGkyLmggKi8KKworCisvKiBUb29sYm94IElTVFdJIFJlYWQgV3JpdGUgVG9vbCByZXBseSBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0lTVFdJX1JFUExZIHsKKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBUb29sOyAgICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgICAgICAvKiAweDAxICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgTXNnTGVuZ3RoOyAgICAgICAgICAgICAgICAgIC8qIDB4MDIgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjsgICAgICAgICAgICAgICAgICAgLyogMHgwMyAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMjsgICAgICAgICAgICAgICAgICAvKiAweDA0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQzOyAgICAgICAgICAgICAgICAgIC8qIDB4MDYgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dGbGFnczsgICAgICAgICAgICAgICAgICAgLyogMHgwNyAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFZQX0lEOyAgICAgICAgICAgICAgICAgICAgICAvKiAweDA4ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVkZfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDkgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDQ7ICAgICAgICAgICAgICAgICAgLyogMHgwQSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNTsgICAgICAgICAgICAgICAgICAvKiAweDBDICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgSU9DU3RhdHVzOyAgICAgICAgICAgICAgICAgIC8qIDB4MEUgKi8KKyAgICBVMzIgICAgICAgICAgICAgICAgICAgICBJT0NMb2dJbmZvOyAgICAgICAgICAgICAgICAgLyogMHgxMCAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIERldkluZGV4OyAgICAgICAgICAgICAgICAgICAvKiAweDE0ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIDB4MTUgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBJc3R3aVN0YXR1czsgICAgICAgICAgICAgICAgLyogMHgxNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDE3ICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgVHhEYXRhQ291bnQ7ICAgICAgICAgICAgICAgIC8qIDB4MTggKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBSeERhdGFDb3VudDsgICAgICAgICAgICAgICAgLyogMHgxQSAqLworfSBNUEkyX1RPT0xCT1hfSVNUV0lfUkVQTFksIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9UT09MQk9YX0lTVFdJX1JFUExZLAorICBNcGkyVG9vbGJveElzdHdpUmVwbHlfdCwgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveElzdHdpUmVwbHlfdDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgVG9vbGJveCBCZWFjb24gVG9vbCByZXF1ZXN0CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xMzksNiArMjE0LDYxIEBACiAjZGVmaW5lIE1QSTJfVE9PTEJPWF9GTEFHU19CRUFDT05NT0RFX09OICAgICAgICAoMHgwMSkKIAogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgVG9vbGJveCBEaWFnbm9zdGljIENMSSBUb29sCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE1QSTJfVE9PTEJPWF9ESUFHX0NMSV9DTURfTEVOR1RIICAgICgweDVDKQorCisvKiBUb29sYm94IERpYWdub3N0aWMgQ0xJIFRvb2wgcmVxdWVzdCBtZXNzYWdlICovCit0eXBlZGVmIHN0cnVjdCBfTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUVVFU1QgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBDaGFpbk9mZnNldDsgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgU0dMRmxhZ3M7ICAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDU7ICAgICAgICAgICAgICAgICAgLyogMHgwRCAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNjsgICAgICAgICAgICAgICAgICAvKiAweDBFICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgRGF0YUxlbmd0aDsgICAgICAgICAgICAgICAgIC8qIDB4MTAgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBEaWFnbm9zdGljQ2xpQ29tbWFuZAorCQlbTVBJMl9UT09MQk9YX0RJQUdfQ0xJX0NNRF9MRU5HVEhdOyAgICAgLyogMHgxNCAqLworICAgIE1QSTJfU0dFX1NJTVBMRV9VTklPTiAgIFNHTDsgICAgICAgICAgICAgICAgICAgICAgICAvKiAweDcwICovCit9IE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNULAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNULAorICBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXF1ZXN0X3QsCisgIE1QSTJfUE9JTlRFUiBwTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVxdWVzdF90OworCisvKiB2YWx1ZXMgZm9yIFNHTEZsYWdzIGZpZWxkIGFyZSBpbiB0aGUgU0dMIHNlY3Rpb24gb2YgbXBpMi5oICovCisKKworLyogVG9vbGJveCBEaWFnbm9zdGljIENMSSBUb29sIHJlcGx5IG1lc3NhZ2UgKi8KK3R5cGVkZWYgc3RydWN0IF9NUEkyX1RPT0xCT1hfRElBR05PU1RJQ19DTElfUkVQTFkgeworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIFRvb2w7ICAgICAgICAgICAgICAgICAgICAgICAvKiAweDAwICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAgIC8qIDB4MDEgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBNc2dMZW5ndGg7ICAgICAgICAgICAgICAgICAgLyogMHgwMiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOyAgICAgICAgICAgICAgICAgICAvKiAweDAzICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MDQgKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDM7ICAgICAgICAgICAgICAgICAgLyogMHgwNiAqLworICAgIFU4ICAgICAgICAgICAgICAgICAgICAgIE1zZ0ZsYWdzOyAgICAgICAgICAgICAgICAgICAvKiAweDA3ICovCisgICAgVTggICAgICAgICAgICAgICAgICAgICAgVlBfSUQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KKyAgICBVOCAgICAgICAgICAgICAgICAgICAgICBWRl9JRDsgICAgICAgICAgICAgICAgICAgICAgLyogMHgwOSAqLworICAgIFUxNiAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkNDsgICAgICAgICAgICAgICAgICAvKiAweDBBICovCisgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ1OyAgICAgICAgICAgICAgICAgIC8qIDB4MEMgKi8KKyAgICBVMTYgICAgICAgICAgICAgICAgICAgICBJT0NTdGF0dXM7ICAgICAgICAgICAgICAgICAgLyogMHgwRSAqLworICAgIFUzMiAgICAgICAgICAgICAgICAgICAgIElPQ0xvZ0luZm87ICAgICAgICAgICAgICAgICAvKiAweDEwICovCisgICAgVTMyICAgICAgICAgICAgICAgICAgICAgUmV0dXJuZWREYXRhTGVuZ3RoOyAgICAgICAgIC8qIDB4MTQgKi8KK30gTVBJMl9UT09MQk9YX0RJQUdOT1NUSUNfQ0xJX1JFUExZLAorICBNUEkyX1BPSU5URVIgUFRSX01QSTJfVE9PTEJPWF9ESUFHX0NMSV9SRVBMWSwKKyAgTXBpMlRvb2xib3hEaWFnbm9zdGljQ2xpUmVwbHlfdCwKKyAgTVBJMl9QT0lOVEVSIHBNcGkyVG9vbGJveERpYWdub3N0aWNDbGlSZXBseV90OworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgICAgICBEaWFnbm9zdGljIEJ1ZmZlciBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCBkOTVkMmYyLi42NzAyNDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtMyw3ICszLDcgQEAKICAqIGZvciBhY2Nlc3MgdG8gTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgZmlybXdhcmUuCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfYmFzZS5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTYzLDcgKzYzLDcgQEAKIHN0YXRpYyBNUFRfQ0FMTEJBQ0sJbXB0X2NhbGxiYWNrc1tNUFRfTUFYX0NBTExCQUNLU107CiAKICNkZWZpbmUgRkFVTFRfUE9MTElOR19JTlRFUlZBTCAxMDAwIC8qIGluIG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBNUFQyU0FTX01BWF9SRVFVRVNUX1FVRVVFIDUwMCAvKiBtYXhpbXVtIGNvbnRyb2xsZXIgcXVldWUgZGVwdGggKi8KKyNkZWZpbmUgTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA2MDAgLyogbWF4aW11bSBjb250cm9sbGVyIHF1ZXVlIGRlcHRoICovCiAKIHN0YXRpYyBpbnQgbWF4X3F1ZXVlX2RlcHRoID0gLTE7CiBtb2R1bGVfcGFyYW0obWF4X3F1ZXVlX2RlcHRoLCBpbnQsIDApOwpAQCAtNTQzLDEzICs1NDMsMTMgQEAKICAqIF9iYXNlX2Rpc3BsYXlfcmVwbHlfaW5mbyAtCiAgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCitfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKICAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CkBAIC01NzIsMjIgKzU3MiwyNCBAQAogICogbXB0MnNhc19iYXNlX2RvbmUgLSBiYXNlIGludGVybmFsIGNvbW1hbmQgY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSkKK3U4CittcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkgJiYgbXBpX3JlcGx5LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX0VWRU5UX0FDSykKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAogCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAlpb2MtPmJhc2VfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJaWYgKG1waV9yZXBseSkgewpAQCAtNTk2LDE4ICs1OTgsMjAgQEAKIAl9CiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCiAgKiBfYmFzZV9hc3luY19ldmVudCAtIG1haW4gY2FsbGJhY2sgaGFuZGxlciBmb3IgZmlybXdhcmUgYXN5biBldmVudHMKICAqIEBpb2M6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKICAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQogICoKLSAqIFJldHVybiBub3RoaW5nLgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCiAgKi8KLXN0YXRpYyB2b2lkCi1fYmFzZV9hc3luY19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19iYXNlX2FzeW5jX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQogewogCU1waTJFdmVudE5vdGlmaWNhdGlvblJlcGx5X3QgKm1waV9yZXBseTsKIAlNcGkyRXZlbnRBY2tSZXF1ZXN0X3QgKmFja19yZXF1ZXN0OwpAQCAtNjE1LDkgKzYxOSw5IEBACiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAoIW1waV9yZXBseSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAobXBpX3JlcGx5LT5GdW5jdGlvbiAhPSBNUEkyX0ZVTkNUSU9OX0VWRU5UX05PVElGSUNBVElPTikKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlfYmFzZV9kaXNwbGF5X2V2ZW50X2RhdGEoaW9jLCBtcGlfcmVwbHkpOwogI2VuZGlmCkBAIC02MzUsMTYgKzYzOSw0NyBAQAogCWFja19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfQUNLOwogCWFja19yZXF1ZXN0LT5FdmVudCA9IG1waV9yZXBseS0+RXZlbnQ7CiAJYWNrX3JlcXVlc3QtPkV2ZW50Q29udGV4dCA9IG1waV9yZXBseS0+RXZlbnRDb250ZXh0OwotCWFja19yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCWFja19yZXF1ZXN0LT5WRl9JRCA9IDA7ICAvKiBUT0RPICovCisJYWNrX3JlcXVlc3QtPlZQX0lEID0gMDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCiAgb3V0OgogCiAJLyogc2NzaWggY2FsbGJhY2sgaGFuZGxlciAqLwotCW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soaW9jLCBWRl9JRCwgcmVwbHkpOworCW1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2soaW9jLCBtc2l4X2luZGV4LCByZXBseSk7CiAKIAkvKiBjdGwgY2FsbGJhY2sgaGFuZGxlciAqLwotCW1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKGlvYywgVkZfSUQsIHJlcGx5KTsKKwltcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhpb2MsIG1zaXhfaW5kZXgsIHJlcGx5KTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIF9iYXNlX2dldF9jYl9pZHggLSBvYnRhaW4gdGhlIGNhbGxiYWNrIGluZGV4CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKgorICogUmV0dXJuIGNhbGxiYWNrIGluZGV4LgorICovCitzdGF0aWMgdTgKK19iYXNlX2dldF9jYl9pZHgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwlpbnQgaTsKKwl1OCBjYl9pZHggPSAweEZGOworCisJaWYgKHNtaWQgPj0gaW9jLT5oaV9wcmlvcml0eV9zbWlkKSB7CisJCWlmIChzbWlkIDwgaW9jLT5pbnRlcm5hbF9zbWlkKSB7CisJCQlpID0gc21pZCAtIGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwkJCWNiX2lkeCA9IGlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHg7CisJCX0gZWxzZSB7CisJCQlpID0gc21pZCAtIGlvYy0+aW50ZXJuYWxfc21pZDsKKwkJCWNiX2lkeCA9IGlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeDsKKwkJfQorCX0gZWxzZSB7CisJCWkgPSBzbWlkIC0gMTsKKwkJY2JfaWR4ID0gaW9jLT5zY3NpX2xvb2t1cFtpXS5jYl9pZHg7CisJfQorCXJldHVybiBjYl9pZHg7CiB9CiAKIC8qKgpAQCAtNjgwLDcgKzcxNSw2IEBACiB7CiAJdTMyIGhpbV9yZWdpc3RlcjsKIAotCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0U3RhdHVzKTsKIAloaW1fcmVnaXN0ZXIgPSByZWFkbCgmaW9jLT5jaGlwLT5Ib3N0SW50ZXJydXB0TWFzayk7CiAJaGltX3JlZ2lzdGVyICY9IH5NUEkyX0hJTV9SSU07CiAJd3JpdGVsKGhpbV9yZWdpc3RlciwgJmlvYy0+Y2hpcC0+SG9zdEludGVycnVwdE1hc2spOwpAQCAtNzEyLDkgKzc0NiwxMCBAQAogCXUxNiBzbWlkOwogCXU4IGNiX2lkeDsKIAl1MzIgcmVwbHk7Ci0JdTggVkZfSUQ7CisJdTggbXNpeF9pbmRleDsKIAlzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MgPSBidXNfaWQ7CiAJTXBpMlJlcGx5RGVzY3JpcHRvcnNVbmlvbl90ICpycGY7CisJdTggcmM7CiAKIAlpZiAoaW9jLT5tYXNrX2ludGVycnVwdHMpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTczMyw3ICs3NjgsNyBAQAogCQlyZXBseSA9IDA7CiAJCWNiX2lkeCA9IDB4RkY7CiAJCXNtaWQgPSBsZTE2X3RvX2NwdShycGYtPkRlZmF1bHQuRGVzY3JpcHRvclR5cGVEZXBlbmRlbnQxKTsKLQkJVkZfSUQgPSBycGYtPkRlZmF1bHQuVkZfSUQ7CisJCW1zaXhfaW5kZXggPSBycGYtPkRlZmF1bHQuTVNJeEluZGV4OwogCQlpZiAocmVxdWVzdF9kZXNyaXB0X3R5cGUgPT0KIAkJICAgIE1QSTJfUlBZX0RFU0NSSVBUX0ZMQUdTX0FERFJFU1NfUkVQTFkpIHsKIAkJCXJlcGx5ID0gbGUzMl90b19jcHUKQEAgLTc0NSwxNiArNzgwLDE4IEBACiAJCSAgICBNUEkyX1JQWV9ERVNDUklQVF9GTEFHU19UQVJHRVRBU1NJU1RfU1VDQ0VTUykKIAkJCWdvdG8gbmV4dDsKIAkJaWYgKHNtaWQpCi0JCQljYl9pZHggPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jYl9pZHg7CisJCQljYl9pZHggPSBfYmFzZV9nZXRfY2JfaWR4KGlvYywgc21pZCk7CiAJCWlmIChzbWlkICYmIGNiX2lkeCAhPSAweEZGKSB7Ci0JCQltcHRfY2FsbGJhY2tzW2NiX2lkeF0oaW9jLCBzbWlkLCBWRl9JRCwgcmVwbHkpOworCQkJcmMgPSBtcHRfY2FsbGJhY2tzW2NiX2lkeF0oaW9jLCBzbWlkLCBtc2l4X2luZGV4LAorCQkJICAgIHJlcGx5KTsKIAkJCWlmIChyZXBseSkKLQkJCQlfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oaW9jLCBzbWlkLCBWRl9JRCwKKwkJCQlfYmFzZV9kaXNwbGF5X3JlcGx5X2luZm8oaW9jLCBzbWlkLCBtc2l4X2luZGV4LAogCQkJCSAgICByZXBseSk7Ci0JCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCQlpZiAocmMpCisJCQkJbXB0MnNhc19iYXNlX2ZyZWVfc21pZChpb2MsIHNtaWQpOwogCQl9CiAJCWlmICghc21pZCkKLQkJCV9iYXNlX2FzeW5jX2V2ZW50KGlvYywgVkZfSUQsIHJlcGx5KTsKKwkJCV9iYXNlX2FzeW5jX2V2ZW50KGlvYywgbXNpeF9pbmRleCwgcmVwbHkpOwogCiAJCS8qIHJlcGx5IGZyZWUgcXVldWUgaGFuZGxpbmcgKi8KIAkJaWYgKHJlcGx5KSB7CkBAIC0xMTkxLDE5ICsxMjI4LDYgQEAKIH0KIAogLyoqCi0gKiBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEgLSBvYnRhaW4gcmVxdWVzdCBtZiBwb2ludGVyIHBoeXMgYWRkcgotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleChzbWlkIHplcm8gaXMgaW52YWxpZCkKLSAqCi0gKiBSZXR1cm5zIHBoeXMgcG9pbnRlciB0byBtZXNzYWdlIGZyYW1lLgotICovCi1kbWFfYWRkcl90Ci1tcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZV9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKLXsKLQlyZXR1cm4gaW9jLT5yZXF1ZXN0X2RtYSArIChzbWlkICogaW9jLT5yZXF1ZXN0X3N6KTsKLX0KLQotLyoqCiAgKiBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZSAtIG9idGFpbiByZXF1ZXN0IG1mIHBvaW50ZXIKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgoc21pZCB6ZXJvIGlzIGludmFsaWQpCkBAIC0xMjU4LDcgKzEyODIsNyBAQAogfQogCiAvKioKLSAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZCAtIG9idGFpbiBhIGZyZWUgc21pZAorICogbXB0MnNhc19iYXNlX2dldF9zbWlkIC0gb2J0YWluIGEgZnJlZSBzbWlkIGZyb20gaW50ZXJuYWwgcXVldWUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKICAqCkBAIC0xMjcyLDYgKzEyOTYsMzkgQEAKIAl1MTYgc21pZDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmaW9jLT5pbnRlcm5hbF9mcmVlX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogc21pZCBub3QgYXZhaWxhYmxlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+aW50ZXJuYWxfZnJlZV9saXN0Lm5leHQsCisJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CisJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OworCXNtaWQgPSByZXF1ZXN0LT5zbWlkOworCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8gLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBzY3NpaW8gcXVldWUKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGNiX2lkeDogY2FsbGJhY2sgaW5kZXgKKyAqIEBzY21kOiBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBvYmplY3QKKyAqCisgKiBSZXR1cm5zIHNtaWQgKHplcm8gaXMgaW52YWxpZCkKKyAqLwordTE2CittcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4LAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpyZXF1ZXN0OworCXUxNiBzbWlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWlmIChsaXN0X2VtcHR5KCZpb2MtPmZyZWVfbGlzdCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBzbWlkIG5vdCBhdmFpbGFibGVcbiIsCkBAIC0xMjgxLDYgKzEzMzgsMzYgQEAKIAogCXJlcXVlc3QgPSBsaXN0X2VudHJ5KGlvYy0+ZnJlZV9saXN0Lm5leHQsCiAJICAgIHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIsIHRyYWNrZXJfbGlzdCk7CisJcmVxdWVzdC0+c2NtZCA9IHNjbWQ7CisJcmVxdWVzdC0+Y2JfaWR4ID0gY2JfaWR4OworCXNtaWQgPSByZXF1ZXN0LT5zbWlkOworCWxpc3RfZGVsKCZyZXF1ZXN0LT50cmFja2VyX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBzbWlkOworfQorCisvKioKKyAqIG1wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIgLSBvYnRhaW4gYSBmcmVlIHNtaWQgZnJvbSBoaS1wcmlvcml0eSBxdWV1ZQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAY2JfaWR4OiBjYWxsYmFjayBpbmRleAorICoKKyAqIFJldHVybnMgc21pZCAoemVybyBpcyBpbnZhbGlkKQorICovCit1MTYKK21wdDJzYXNfYmFzZV9nZXRfc21pZF9ocHIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBjYl9pZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpyZXF1ZXN0OworCXUxNiBzbWlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZpb2MtPmhwcl9mcmVlX2xpc3QpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXF1ZXN0ID0gbGlzdF9lbnRyeShpb2MtPmhwcl9mcmVlX2xpc3QubmV4dCwKKwkgICAgc3RydWN0IHJlcXVlc3RfdHJhY2tlciwgdHJhY2tlcl9saXN0KTsKIAlyZXF1ZXN0LT5jYl9pZHggPSBjYl9pZHg7CiAJc21pZCA9IHJlcXVlc3QtPnNtaWQ7CiAJbGlzdF9kZWwoJnJlcXVlc3QtPnRyYWNrZXJfbGlzdCk7CkBAIC0xMzAwLDEwICsxMzg3LDMyIEBACiBtcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5jYl9pZHggPSAweEZGOwotCWxpc3RfYWRkX3RhaWwoJmlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnRyYWNrZXJfbGlzdCwKKwlpZiAoc21pZCA+PSBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpIHsKKwkJaWYgKHNtaWQgPCBpb2MtPmludGVybmFsX3NtaWQpIHsKKwkJCS8qIGhpLXByaW9yaXR5ICovCisJCQlpID0gc21pZCAtIGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwkJCWlvYy0+aHByX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQkJbGlzdF9hZGRfdGFpbCgmaW9jLT5ocHJfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJCSAgICAmaW9jLT5ocHJfZnJlZV9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCS8qIGludGVybmFsIHF1ZXVlICovCisJCQlpID0gc21pZCAtIGlvYy0+aW50ZXJuYWxfc21pZDsKKwkJCWlvYy0+aW50ZXJuYWxfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCQlsaXN0X2FkZF90YWlsKCZpb2MtPmludGVybmFsX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCisJCQkgICAgJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHNjc2lpbyBxdWV1ZSAqLworCWkgPSBzbWlkIC0gMTsKKwlpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID0gTlVMTDsKKwlsaXN0X2FkZF90YWlsKCZpb2MtPnNjc2lfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKIAkgICAgJmlvYy0+ZnJlZV9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIApAQCAtMTM1MiwyMSArMTQ2MSwxOSBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8gLSBzZW5kIFNDU0lfSU8gcmVxdWVzdCB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAaGFuZGxlOiBkZXZpY2UgaGFuZGxlCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKLW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IHZmX2lkLAotICAgIHUxNiBoYW5kbGUpCittcHQyc2FzX2Jhc2VfcHV0X3NtaWRfc2NzaV9pbyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1MTYgaGFuZGxlKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAogCWRlc2NyaXB0b3IuU0NTSUlPLlJlcXVlc3RGbGFncyA9IE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU87Ci0JZGVzY3JpcHRvci5TQ1NJSU8uVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLlNDU0lJTy5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5TQ1NJSU8uU01JRCA9IGNwdV90b19sZTE2KHNtaWQpOwogCWRlc2NyaXB0b3IuU0NTSUlPLkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CiAJZGVzY3JpcHRvci5TQ1NJSU8uTE1JRCA9IDA7CkBAIC0xMzc5LDIwICsxNDg2LDE4IEBACiAgKiBtcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkgLSBzZW5kIFRhc2sgTWFuYWdtZW50IHJlcXVlc3QgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEB2Zl9pZDogdmlydHVhbCBmdW5jdGlvbiBpZAogICoKICAqIFJldHVybiBub3RoaW5nLgogICovCiB2b2lkCi1tcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCkKK21wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5SZXF1ZXN0RmxhZ3MgPQogCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19ISUdIX1BSSU9SSVRZOwotCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlZGX0lEID0gdmZfaWQ7CisJZGVzY3JpcHRvci5IaWdoUHJpb3JpdHkuTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuSGlnaFByaW9yaXR5LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5MTUlEID0gMDsKIAlkZXNjcmlwdG9yLkhpZ2hQcmlvcml0eS5SZXNlcnZlZDEgPSAwOwpAQCAtMTQwNCwxOCArMTUwOSwxNyBAQAogICogbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQgLSBEZWZhdWx0LCBwcmltYXJpbHkgdXNlZCBmb3IgY29uZmlnIHBhZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAdmZfaWQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogdm9pZAotbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpCittcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQogewogCU1waTJSZXF1ZXN0RGVzY3JpcHRvclVuaW9uX3QgZGVzY3JpcHRvcjsKIAl1NjQgKnJlcXVlc3QgPSAodTY0ICopJmRlc2NyaXB0b3I7CiAKIAlkZXNjcmlwdG9yLkRlZmF1bHQuUmVxdWVzdEZsYWdzID0gTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfREVGQVVMVF9UWVBFOwotCWRlc2NyaXB0b3IuRGVmYXVsdC5WRl9JRCA9IHZmX2lkOworCWRlc2NyaXB0b3IuRGVmYXVsdC5NU0l4SW5kZXggPSAwOyAvKiBUT0RPICovCiAJZGVzY3JpcHRvci5EZWZhdWx0LlNNSUQgPSBjcHVfdG9fbGUxNihzbWlkKTsKIAlkZXNjcmlwdG9yLkRlZmF1bHQuTE1JRCA9IDA7CiAJZGVzY3JpcHRvci5EZWZhdWx0LkRlc2NyaXB0b3JUeXBlRGVwZW5kZW50ID0gMDsKQEAgLTE0MjcsMjEgKzE1MzEsMjAgQEAKICAqIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0IC0gc2VuZCBUYXJnZXQgQXNzaXN0L1N0YXR1cyB0byBmaXJtd2FyZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHZmX2lkOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAaW9faW5kZXg6IHZhbHVlIHVzZWQgdG8gdHJhY2sgdGhlIElPCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHZvaWQKIG1wdDJzYXNfYmFzZV9wdXRfc21pZF90YXJnZXRfYXNzaXN0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgdTggdmZfaWQsIHUxNiBpb19pbmRleCkKKyAgICB1MTYgaW9faW5kZXgpCiB7CiAJTXBpMlJlcXVlc3REZXNjcmlwdG9yVW5pb25fdCBkZXNjcmlwdG9yOwogCXU2NCAqcmVxdWVzdCA9ICh1NjQgKikmZGVzY3JpcHRvcjsKIAogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5SZXF1ZXN0RmxhZ3MgPQogCSAgICBNUEkyX1JFUV9ERVNDUklQVF9GTEFHU19TQ1NJX1RBUkdFVDsKLQlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuVkZfSUQgPSB2Zl9pZDsKKwlkZXNjcmlwdG9yLlNDU0lUYXJnZXQuTVNJeEluZGV4ID0gMDsgLyogVE9ETyAqLwogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5TTUlEID0gY3B1X3RvX2xlMTYoc21pZCk7CiAJZGVzY3JpcHRvci5TQ1NJVGFyZ2V0LkxNSUQgPSAwOwogCWRlc2NyaXB0b3IuU0NTSVRhcmdldC5Jb0luZGV4ID0gY3B1X3RvX2xlMTYoaW9faW5kZXgpOwpAQCAtMTcxNyw2ICsxODIwLDggQEAKIAl9CiAKIAlrZnJlZShpb2MtPnNjc2lfbG9va3VwKTsKKwlrZnJlZShpb2MtPmhwcl9sb29rdXApOworCWtmcmVlKGlvYy0+aW50ZXJuYWxfbG9va3VwKTsKIH0KIAogCkBAIC0xNzM2LDcgKzE4NDEsNiBAQAogCXUxNiBudW1fb2ZfcmVwbHlfZnJhbWVzOwogCXUxNiBjaGFpbnNfbmVlZGVkX3Blcl9pbzsKIAl1MzIgc3osIHRvdGFsX3N6OwotCXUxNiBpOwogCXUzMiByZXRyeV9zejsKIAl1MTYgbWF4X3JlcXVlc3RfY3JlZGl0OwogCkBAIC0xNzY0LDcgKzE4NjgsMTAgQEAKIAkJICAgIE1QVDJTQVNfTUFYX1JFUVVFU1RfUVVFVUUpID8gTVBUMlNBU19NQVhfUkVRVUVTVF9RVUVVRSA6CiAJCSAgICBmYWN0cy0+UmVxdWVzdENyZWRpdDsKIAl9Ci0JaW9jLT5yZXF1ZXN0X2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0OworCisJaW9jLT5oYmFfcXVldWVfZGVwdGggPSBtYXhfcmVxdWVzdF9jcmVkaXQ7CisJaW9jLT5oaV9wcmlvcml0eV9kZXB0aCA9IGZhY3RzLT5IaWdoUHJpb3JpdHlDcmVkaXQ7CisJaW9jLT5pbnRlcm5hbF9kZXB0aCA9IGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKyA1OwogCiAJLyogcmVxdWVzdCBmcmFtZSBzaXplICovCiAJaW9jLT5yZXF1ZXN0X3N6ID0gZmFjdHMtPklPQ1JlcXVlc3RGcmFtZVNpemUgKiA0OwpAQCAtMTgwMiw3ICsxOTA5LDcgQEAKIAlpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvID0gY2hhaW5zX25lZWRlZF9wZXJfaW87CiAKIAkvKiByZXBseSBmcmVlIHF1ZXVlIHNpemluZyAtIHRha2luZyBpbnRvIGFjY291bnQgZm9yIGV2ZW50cyAqLwotCW51bV9vZl9yZXBseV9mcmFtZXMgPSBpb2MtPnJlcXVlc3RfZGVwdGggKyAzMjsKKwludW1fb2ZfcmVwbHlfZnJhbWVzID0gaW9jLT5oYmFfcXVldWVfZGVwdGggKyAzMjsKIAogCS8qIG51bWJlciBvZiByZXBsaWVzIGZyYW1lcyBjYW4ndCBiZSBhIG11bHRpcGxlIG9mIDE2ICovCiAJLyogZGVjcmVhc2UgbnVtYmVyIG9mIHJlcGx5IGZyYW1lcyBieSAxICovCkBAIC0xODIzLDcgKzE5MzAsNyBAQAogCSAqIGZyYW1lcwogCSAqLwogCi0JcXVldWVfc2l6ZSA9IGlvYy0+cmVxdWVzdF9kZXB0aCArIG51bV9vZl9yZXBseV9mcmFtZXMgKyAxOworCXF1ZXVlX3NpemUgPSBpb2MtPmhiYV9xdWV1ZV9kZXB0aCArIG51bV9vZl9yZXBseV9mcmFtZXMgKyAxOwogCS8qIHJvdW5kIHVwIHRvIDE2IGJ5dGUgYm91bmRhcnkgKi8KIAlpZiAocXVldWVfc2l6ZSAlIDE2KQogCQlxdWV1ZV9zaXplICs9IDE2IC0gKHF1ZXVlX3NpemUgJSAxNik7CkBAIC0xODM3LDYwICsxOTQ0LDg1IEBACiAJCWlmIChxdWV1ZV9kaWZmICUgMTYpCiAJCQlxdWV1ZV9kaWZmICs9IDE2IC0gKHF1ZXVlX2RpZmYgJSAxNik7CiAKLQkJLyogYWRqdXN0IHJlcXVlc3RfZGVwdGgsIHJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsCisJCS8qIGFkanVzdCBoYmFfcXVldWVfZGVwdGgsIHJlcGx5X2ZyZWVfcXVldWVfZGVwdGgsCiAJCSAqIGFuZCBxdWV1ZV9zaXplCiAJCSAqLwotCQlpb2MtPnJlcXVlc3RfZGVwdGggLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKIAkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7CiAJCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKIAl9CiAJaW9jLT5yZXBseV9wb3N0X3F1ZXVlX2RlcHRoID0gcXVldWVfc2l6ZTsKIAotCS8qIG1heCBzY3NpIGhvc3QgcXVldWUgZGVwdGggKi8KLQlpb2MtPnNob3N0LT5jYW5fcXVldWUgPSBpb2MtPnJlcXVlc3RfZGVwdGggLSBJTlRFUk5BTF9DTURTX0NPVU5UOwotCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2kgaG9zdCBxdWV1ZTogZGVwdGgiCi0JICAgICIoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+c2hvc3QtPmNhbl9xdWV1ZSkpOwotCiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2NhdHRlciBnYXRoZXI6ICIKIAkgICAgInNnZV9pbl9tYWluX21zZyglZCksIHNnZV9wZXJfY2hhaW4oJWQpLCBzZ2VfcGVyX2lvKCVkKSwgIgogCSAgICAiY2hhaW5zX3Blcl9pbyglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5tYXhfc2dlc19pbl9tYWluX21lc3NhZ2UsCiAJICAgIGlvYy0+bWF4X3NnZXNfaW5fY2hhaW5fbWVzc2FnZSwgaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplLAogCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvKSk7CiAKKwlpb2MtPnNjc2lpb19kZXB0aCA9IGlvYy0+aGJhX3F1ZXVlX2RlcHRoIC0KKwkgICAgaW9jLT5oaV9wcmlvcml0eV9kZXB0aCAtIGlvYy0+aW50ZXJuYWxfZGVwdGg7CisKKwkvKiBzZXQgdGhlIHNjc2kgaG9zdCBjYW5fcXVldWUgZGVwdGgKKwkgKiB3aXRoIHNvbWUgaW50ZXJuYWwgY29tbWFuZHMgdGhhdCBjb3VsZCBiZSBvdXRzdGFuZGluZworCSAqLworCWlvYy0+c2hvc3QtPmNhbl9xdWV1ZSA9IGlvYy0+c2NzaWlvX2RlcHRoIC0gKDIpOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2kgaG9zdDogIgorCSAgICAiY2FuX3F1ZXVlIGRlcHRoICglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5zaG9zdC0+Y2FuX3F1ZXVlKSk7CisKIAkvKiBjb250aWd1b3VzIHBvb2wgZm9yIHJlcXVlc3QgYW5kIGNoYWlucywgMTYgYnl0ZSBhbGlnbiwgb25lIGV4dHJhICIKIAkgKiAiZnJhbWUgZm9yIHNtaWQ9MAogCSAqLwotCWlvYy0+Y2hhaW5fZGVwdGggPSBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvICogaW9jLT5yZXF1ZXN0X2RlcHRoOwotCXN6ID0gKChpb2MtPnJlcXVlc3RfZGVwdGggKyAxICsgaW9jLT5jaGFpbl9kZXB0aCkgKiBpb2MtPnJlcXVlc3Rfc3opOworCWlvYy0+Y2hhaW5fZGVwdGggPSBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvICogaW9jLT5zY3NpaW9fZGVwdGg7CisJc3ogPSAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSArIGlvYy0+Y2hhaW5fZGVwdGgpICogaW9jLT5yZXF1ZXN0X3N6KTsKKworCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJc3ogKz0gKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKiBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlzeiArPSAoaW9jLT5pbnRlcm5hbF9kZXB0aCAqIGlvYy0+cmVxdWVzdF9zeik7CiAKIAlpb2MtPnJlcXVlc3RfZG1hX3N6ID0gc3o7CiAJaW9jLT5yZXF1ZXN0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaW9jLT5wZGV2LCBzeiwgJmlvYy0+cmVxdWVzdF9kbWEpOwogCWlmICghaW9jLT5yZXF1ZXN0KSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcXVlc3QgcG9vbDogcGNpX2FsbG9jX2NvbnNpc3RlbnQgIgotCQkgICAgImZhaWxlZDogcmVxX2RlcHRoKCVkKSwgY2hhaW5zX3Blcl9pbyglZCksIGZyYW1lX3N6KCVkKSwgIgotCQkgICAgInRvdGFsKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnJlcXVlc3RfZGVwdGgsCisJCSAgICAiZmFpbGVkOiBoYmFfZGVwdGgoJWQpLCBjaGFpbnNfcGVyX2lvKCVkKSwgZnJhbWVfc3ooJWQpLCAiCisJCSAgICAidG90YWwoJWQga0IpXG4iLCBpb2MtPm5hbWUsIGlvYy0+aGJhX3F1ZXVlX2RlcHRoLAogCQkgICAgaW9jLT5jaGFpbnNfbmVlZGVkX3Blcl9pbywgaW9jLT5yZXF1ZXN0X3N6LCBzei8xMDI0KTsKLQkJaWYgKGlvYy0+cmVxdWVzdF9kZXB0aCA8IE1QVDJTQVNfU0FTX1FVRVVFX0RFUFRIKQorCQlpZiAoaW9jLT5zY3NpaW9fZGVwdGggPCBNUFQyU0FTX1NBU19RVUVVRV9ERVBUSCkKIAkJCWdvdG8gb3V0OwogCQlyZXRyeV9zeiArPSA2NDsKLQkJaW9jLT5yZXF1ZXN0X2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0IC0gcmV0cnlfc3o7CisJCWlvYy0+aGJhX3F1ZXVlX2RlcHRoID0gbWF4X3JlcXVlc3RfY3JlZGl0IC0gcmV0cnlfc3o7CiAJCWdvdG8gcmV0cnlfYWxsb2NhdGlvbjsKIAl9CiAKIAlpZiAocmV0cnlfc3opCiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgInJlcXVlc3QgcG9vbDogcGNpX2FsbG9jX2NvbnNpc3RlbnQgIgotCQkgICAgInN1Y2NlZWQ6IHJlcV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKLQkJICAgICJ0b3RhbCglZCBrYilcbiIsIGlvYy0+bmFtZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCQkgICAgInN1Y2NlZWQ6IGhiYV9kZXB0aCglZCksIGNoYWluc19wZXJfaW8oJWQpLCBmcmFtZV9zeiglZCksICIKKwkJICAgICJ0b3RhbCglZCBrYilcbiIsIGlvYy0+bmFtZSwgaW9jLT5oYmFfcXVldWVfZGVwdGgsCiAJCSAgICBpb2MtPmNoYWluc19uZWVkZWRfcGVyX2lvLCBpb2MtPnJlcXVlc3Rfc3osIHN6LzEwMjQpOwogCi0JaW9jLT5jaGFpbiA9IGlvYy0+cmVxdWVzdCArICgoaW9jLT5yZXF1ZXN0X2RlcHRoICsgMSkgKgorCisJLyogaGktcHJpb3JpdHkgcXVldWUgKi8KKwlpb2MtPmhpX3ByaW9yaXR5ID0gaW9jLT5yZXF1ZXN0ICsgKChpb2MtPnNjc2lpb19kZXB0aCArIDEpICoKIAkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKLQlpb2MtPmNoYWluX2RtYSA9IGlvYy0+cmVxdWVzdF9kbWEgKyAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICoKKwlpb2MtPmhpX3ByaW9yaXR5X2RtYSA9IGlvYy0+cmVxdWVzdF9kbWEgKyAoKGlvYy0+c2NzaWlvX2RlcHRoICsgMSkgKgogCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCisJLyogaW50ZXJuYWwgcXVldWUgKi8KKwlpb2MtPmludGVybmFsID0gaW9jLT5oaV9wcmlvcml0eSArIChpb2MtPmhpX3ByaW9yaXR5X2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwlpb2MtPmludGVybmFsX2RtYSA9IGlvYy0+aGlfcHJpb3JpdHlfZG1hICsgKGlvYy0+aGlfcHJpb3JpdHlfZGVwdGggKgorCSAgICBpb2MtPnJlcXVlc3Rfc3opOworCisJaW9jLT5jaGFpbiA9IGlvYy0+aW50ZXJuYWwgKyAoaW9jLT5pbnRlcm5hbF9kZXB0aCAqCisJICAgIGlvYy0+cmVxdWVzdF9zeik7CisJaW9jLT5jaGFpbl9kbWEgPSBpb2MtPmludGVybmFsX2RtYSArIChpb2MtPmludGVybmFsX2RlcHRoICoKKwkgICAgaW9jLT5yZXF1ZXN0X3N6KTsKKwogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInJlcXVlc3QgcG9vbCgweCVwKTogIgogCSAgICAiZGVwdGgoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLAotCSAgICBpb2MtPnJlcXVlc3QsIGlvYy0+cmVxdWVzdF9kZXB0aCwgaW9jLT5yZXF1ZXN0X3N6LAotCSAgICAoKGlvYy0+cmVxdWVzdF9kZXB0aCArIDEpICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7CisJICAgIGlvYy0+cmVxdWVzdCwgaW9jLT5oYmFfcXVldWVfZGVwdGgsIGlvYy0+cmVxdWVzdF9zeiwKKwkgICAgKGlvYy0+aGJhX3F1ZXVlX2RlcHRoICogaW9jLT5yZXF1ZXN0X3N6KS8xMDI0KSk7CiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiY2hhaW4gcG9vbCgweCVwKTogZGVwdGgiCiAJICAgICIoJWQpLCBmcmFtZV9zaXplKCVkKSwgcG9vbF9zaXplKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmNoYWluLAogCSAgICBpb2MtPmNoYWluX2RlcHRoLCBpb2MtPnJlcXVlc3Rfc3osICgoaW9jLT5jaGFpbl9kZXB0aCAqCkBAIC0xODk5LDcgKzIwMzEsNyBAQAogCSAgICBpb2MtPm5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvYy0+cmVxdWVzdF9kbWEpKTsKIAl0b3RhbF9zeiArPSBzejsKIAotCWlvYy0+c2NzaV9sb29rdXAgPSBrY2FsbG9jKGlvYy0+cmVxdWVzdF9kZXB0aCwKKwlpb2MtPnNjc2lfbG9va3VwID0ga2NhbGxvYyhpb2MtPnNjc2lpb19kZXB0aCwKIAkgICAgc2l6ZW9mKHN0cnVjdCByZXF1ZXN0X3RyYWNrZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlvYy0+c2NzaV9sb29rdXApIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAic2NzaV9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLApAQCAtMTkwNywxMiArMjAzOSwzOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkgLyogaW5pdGlhbGl6ZSBzb21lIGJpdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCi0JCWlvYy0+c2NzaV9sb29rdXBbaV0uc21pZCA9IGkgKyAxOworCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNjc2lpbygweCVwKTogIgorCSAgICAiZGVwdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGlvYy0+cmVxdWVzdCwKKwkgICAgaW9jLT5zY3NpaW9fZGVwdGgpKTsKKworCS8qIGluaXRpYWxpemUgaGktcHJpb3JpdHkgcXVldWUgc21pZCdzICovCisJaW9jLT5ocHJfbG9va3VwID0ga2NhbGxvYyhpb2MtPmhpX3ByaW9yaXR5X2RlcHRoLAorCSAgICBzaXplb2Yoc3RydWN0IHJlcXVlc3RfdHJhY2tlciksIEdGUF9LRVJORUwpOworCWlmICghaW9jLT5ocHJfbG9va3VwKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgImhwcl9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+aGlfcHJpb3JpdHlfc21pZCA9IGlvYy0+c2NzaWlvX2RlcHRoICsgMTsKKwlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJoaV9wcmlvcml0eSgweCVwKTogIgorCSAgICAiZGVwdGgoJWQpLCBzdGFydCBzbWlkKCVkKVxuIiwgaW9jLT5uYW1lLCBpb2MtPmhpX3ByaW9yaXR5LAorCSAgICBpb2MtPmhpX3ByaW9yaXR5X2RlcHRoLCBpb2MtPmhpX3ByaW9yaXR5X3NtaWQpKTsKKworCS8qIGluaXRpYWxpemUgaW50ZXJuYWwgcXVldWUgc21pZCdzICovCisJaW9jLT5pbnRlcm5hbF9sb29rdXAgPSBrY2FsbG9jKGlvYy0+aW50ZXJuYWxfZGVwdGgsCisJICAgIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF90cmFja2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MtPmludGVybmFsX2xvb2t1cCkgeworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJpbnRlcm5hbF9sb29rdXA6IGtjYWxsb2MgZmFpbGVkXG4iLAorCQkgICAgaW9jLT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCWlvYy0+aW50ZXJuYWxfc21pZCA9IGlvYy0+aGlfcHJpb3JpdHlfc21pZCArIGlvYy0+aGlfcHJpb3JpdHlfZGVwdGg7CisJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiaW50ZXJuYWwoMHglcCk6ICIKKwkgICAgImRlcHRoKCVkKSwgc3RhcnQgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaW9jLT5pbnRlcm5hbCwKKwkgICAgIGlvYy0+aW50ZXJuYWxfZGVwdGgsIGlvYy0+aW50ZXJuYWxfc21pZCkpOwogCiAJLyogc2Vuc2UgYnVmZmVycywgNCBieXRlIGFsaWduICovCi0Jc3ogPSBpb2MtPnJlcXVlc3RfZGVwdGggKiBTQ1NJX1NFTlNFX0JVRkZFUlNJWkU7CisJc3ogPSBpb2MtPnNjc2lpb19kZXB0aCAqIFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKIAlpb2MtPnNlbnNlX2RtYV9wb29sID0gcGNpX3Bvb2xfY3JlYXRlKCJzZW5zZSBwb29sIiwgaW9jLT5wZGV2LCBzeiwgNCwKIAkgICAgMCk7CiAJaWYgKCFpb2MtPnNlbnNlX2RtYV9wb29sKSB7CkBAIC0xOTI5LDcgKzIwODcsNyBAQAogCX0KIAlkaW5pdHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UCiAJICAgICJzZW5zZSBwb29sKDB4JXApOiBkZXB0aCglZCksIGVsZW1lbnRfc2l6ZSglZCksIHBvb2xfc2l6ZSIKLQkgICAgIiglZCBrQilcbiIsIGlvYy0+bmFtZSwgaW9jLT5zZW5zZSwgaW9jLT5yZXF1ZXN0X2RlcHRoLAorCSAgICAiKCVkIGtCKVxuIiwgaW9jLT5uYW1lLCBpb2MtPnNlbnNlLCBpb2MtPnNjc2lpb19kZXB0aCwKIAkgICAgU0NTSV9TRU5TRV9CVUZGRVJTSVpFLCBzei8xMDI0KSk7CiAJZGluaXRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAic2Vuc2VfZG1hKDB4JWxseClcbiIsCiAJICAgIGlvYy0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb2MtPnNlbnNlX2RtYSkpOwpAQCAtMjMwNCw3ICsyNDYyLDcgQEAKIAkgICAgKChyZXF1ZXN0X2J5dGVzLzQpPDxNUEkyX0RPT1JCRUxMX0FERF9EV09SRFNfU0hJRlQpKSwKIAkgICAgJmlvYy0+Y2hpcC0+RG9vcmJlbGwpOwogCi0JaWYgKChfYmFzZV93YWl0X2Zvcl9kb29yYmVsbF9pbnQoaW9jLCA1LCBzbGVlcF9mbGFnKSkpIHsKKwlpZiAoKF9iYXNlX3dhaXRfZm9yX2Rvb3JiZWxsX2ludChpb2MsIDUsIE5PX1NMRUVQKSkpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiZG9vcmJlbGwgaGFuZHNoYWtlICIKIAkJICAgImludCBmYWlsZWQgKGxpbmU9JWQpXG4iLCBpb2MtPm5hbWUsIF9fTElORV9fKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yNDU0LDcgKzI2MTIsOCBAQAogCWlmIChtcGlfcmVxdWVzdC0+T3BlcmF0aW9uID09IE1QSTJfU0FTX09QX1BIWV9IQVJEX1JFU0VUIHx8CiAJICAgIG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0xJTktfUkVTRVQpCiAJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5iYXNlX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+YmFzZV9jbWRzLmRvbmUsCiAJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMDApKTsKIAlpZiAoKG1waV9yZXF1ZXN0LT5PcGVyYXRpb24gPT0gTVBJMl9TQVNfT1BfUEhZX0hBUkRfUkVTRVQgfHwKQEAgLTI1NTUsNyArMjcxNCw4IEBACiAJcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAJaW9jLT5iYXNlX2NtZHMuc21pZCA9IHNtaWQ7CiAJbWVtY3B5KHJlcXVlc3QsIG1waV9yZXF1ZXN0LCBzaXplb2YoTXBpMlNlcFJlcGx5X3QpKTsKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLAogCSAgICBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7CiAJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yNzAxLDEzICsyODYxLDEyIEBACiAvKioKICAqIF9iYXNlX3NlbmRfaW9jX2luaXQgLSBzZW5kIGlvY19pbml0IHRvIGZpcm13YXJlCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAogICogQHNsZWVwX2ZsYWc6IENBTl9TTEVFUCBvciBOT19TTEVFUAogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQKLV9iYXNlX3NlbmRfaW9jX2luaXQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgaW50IHNsZWVwX2ZsYWcpCitfYmFzZV9zZW5kX2lvY19pbml0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJTXBpMklPQ0luaXRSZXF1ZXN0X3QgbXBpX3JlcXVlc3Q7CiAJTXBpMklPQ0luaXRSZXBseV90IG1waV9yZXBseTsKQEAgLTI3MTksNyArMjg3OCw4IEBACiAJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJJT0NJbml0UmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QuRnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX0lPQ19JTklUOwogCW1waV9yZXF1ZXN0Lldob0luaXQgPSBNUEkyX1dIT0lOSVRfSE9TVF9EUklWRVI7Ci0JbXBpX3JlcXVlc3QuVkZfSUQgPSBWRl9JRDsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC5WUF9JRCA9IDA7CiAJbXBpX3JlcXVlc3QuTXNnVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfVkVSU0lPTik7CiAJbXBpX3JlcXVlc3QuSGVhZGVyVmVyc2lvbiA9IGNwdV90b19sZTE2KE1QSTJfSEVBREVSX1ZFUlNJT04pOwogCkBAIC0yNzk1LDEzICsyOTU1LDEyIEBACiAvKioKICAqIF9iYXNlX3NlbmRfcG9ydF9lbmFibGUgLSBzZW5kIHBvcnRfZW5hYmxlKGRpc2NvdmVyeSBzdHVmZikgdG8gZmlybXdhcmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2Vfc2VuZF9wb3J0X2VuYWJsZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCBpbnQgc2xlZXBfZmxhZykKK19iYXNlX3NlbmRfcG9ydF9lbmFibGUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlNcGkyUG9ydEVuYWJsZVJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CiAJdTMyIGlvY19zdGF0ZTsKQEAgLTI4MjksOSArMjk4OCwxMSBAQAogCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOwogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJQb3J0RW5hYmxlUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9QT1JUX0VOQUJMRTsKLQltcGlfcmVxdWVzdC0+VkZfSUQgPSBWRl9JRDsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCk7CisJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5iYXNlX2NtZHMuZG9uZSwKIAkgICAgMzAwKkhaKTsKIAlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9DT01QTEVURSkpIHsKQEAgLTI4OTIsMTMgKzMwNTMsMTIgQEAKIC8qKgogICogX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uIC0gc2VuZCBldmVudCBub3RpZmljYXRpb24KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOiB2aXJ0dWFsIGZ1bmN0aW9uIGlkCiAgKiBAc2xlZXBfZmxhZzogQ0FOX1NMRUVQIG9yIE5PX1NMRUVQCiAgKgogICogUmV0dXJucyAwIGZvciBzdWNjZXNzLCBub24temVybyBmb3IgZmFpbHVyZS4KICAqLwogc3RhdGljIGludAotX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIGludCBzbGVlcF9mbGFnKQorX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgaW50IHNsZWVwX2ZsYWcpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OwpAQCAtMjkyNiwxMSArMzA4NiwxMyBAQAogCWlvYy0+YmFzZV9jbWRzLnNtaWQgPSBzbWlkOwogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJFdmVudE5vdGlmaWNhdGlvblJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fRVZFTlRfTk9USUZJQ0FUSU9OOwotCW1waV9yZXF1ZXN0LT5WRl9JRCA9IFZGX0lEOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBNUEkyX0VWRU5UX05PVElGWV9FVkVOVE1BU0tfV09SRFM7IGkrKykKIAkJbXBpX3JlcXVlc3QtPkV2ZW50TWFza3NbaV0gPQogCQkgICAgbGUzMl90b19jcHUoaW9jLT5ldmVudF9tYXNrc1tpXSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCBWRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+YmFzZV9jbWRzLmRvbmUpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmJhc2VfY21kcy5kb25lLCAzMCpIWik7CiAJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiB0aW1lb3V0XG4iLApAQCAtMjk4MSw3ICszMTQzLDcgQEAKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmaW9jLT5iYXNlX2NtZHMubXV0ZXgpOwotCV9iYXNlX2V2ZW50X25vdGlmaWNhdGlvbihpb2MsIDAsIENBTl9TTEVFUCk7CisJX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgQ0FOX1NMRUVQKTsKIAltdXRleF91bmxvY2soJmlvYy0+YmFzZV9jbWRzLm11dGV4KTsKIH0KIApAQCAtMzAwNiw3ICszMTY4LDYgQEAKIAogCWRyc3ByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0RFQlVHX0ZNVCAiY2xlYXIgaW50ZXJydXB0c1xuIiwKIAkgICAgaW9jLT5uYW1lKSk7Ci0Jd3JpdGVsKDAsICZpb2MtPmNoaXAtPkhvc3RJbnRlcnJ1cHRTdGF0dXMpOwogCiAJY291bnQgPSAwOwogCWRvIHsKQEAgLTMxNjAsMzAgKzMzMjEsNjAgQEAKIC8qKgogICogX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwgLSBwdXQgY29udHJvbGxlciBpbiBPUEVSQVRJT05BTCBzdGF0ZQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKICAqIEBzbGVlcF9mbGFnOiBDQU5fU0xFRVAgb3IgTk9fU0xFRVAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MsIG5vbi16ZXJvIGZvciBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50Ci1fYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIGludCBzbGVlcF9mbGFnKQorX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgc2xlZXBfZmxhZykKIHsKIAlpbnQgciwgaTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCXUzMiByZXBseV9hZGRyZXNzOworCXUxNiBzbWlkOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90ciwgKmRlbGF5ZWRfdHJfbmV4dDsKIAogCWRpbml0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIlc1xuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCisJLyogY2xlYW4gdGhlIGRlbGF5ZWQgdGFyZ2V0IHJlc2V0IGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVsYXllZF90ciwgZGVsYXllZF90cl9uZXh0LAorCSAgICAmaW9jLT5kZWxheWVkX3RyX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlrZnJlZShkZWxheWVkX3RyKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIHRoZSBzY3NpIGxvb2t1cCBmcmVlIGxpc3QgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZnJlZV9saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlzbWlkID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5zY3NpaW9fZGVwdGg7IGkrKywgc21pZCsrKSB7CiAJCWlvYy0+c2NzaV9sb29rdXBbaV0uY2JfaWR4ID0gMHhGRjsKKwkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kID0gTlVMTDsKIAkJbGlzdF9hZGRfdGFpbCgmaW9jLT5zY3NpX2xvb2t1cFtpXS50cmFja2VyX2xpc3QsCiAJCSAgICAmaW9jLT5mcmVlX2xpc3QpOwogCX0KKworCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aHByX2ZyZWVfbGlzdCk7CisJc21pZCA9IGlvYy0+aGlfcHJpb3JpdHlfc21pZDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jLT5oaV9wcmlvcml0eV9kZXB0aDsgaSsrLCBzbWlkKyspIHsKKwkJaW9jLT5ocHJfbG9va3VwW2ldLmNiX2lkeCA9IDB4RkY7CisJCWlvYy0+aHByX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJbGlzdF9hZGRfdGFpbCgmaW9jLT5ocHJfbG9va3VwW2ldLnRyYWNrZXJfbGlzdCwKKwkJICAgICZpb2MtPmhwcl9mcmVlX2xpc3QpOworCX0KKworCS8qIGludGVybmFsIHF1ZXVlICovCisJSU5JVF9MSVNUX0hFQUQoJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwlzbWlkID0gaW9jLT5pbnRlcm5hbF9zbWlkOworCWZvciAoaSA9IDA7IGkgPCBpb2MtPmludGVybmFsX2RlcHRoOyBpKyssIHNtaWQrKykgeworCQlpb2MtPmludGVybmFsX2xvb2t1cFtpXS5jYl9pZHggPSAweEZGOworCQlpb2MtPmludGVybmFsX2xvb2t1cFtpXS5zbWlkID0gc21pZDsKKwkJbGlzdF9hZGRfdGFpbCgmaW9jLT5pbnRlcm5hbF9sb29rdXBbaV0udHJhY2tlcl9saXN0LAorCQkgICAgJmlvYy0+aW50ZXJuYWxfZnJlZV9saXN0KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAKIAkvKiBpbml0aWFsaXplIFJlcGx5IEZyZWUgUXVldWUgKi8KQEAgLTMxOTYsNyArMzM4Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IGlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aDsgaSsrKQogCQlpb2MtPnJlcGx5X3Bvc3RfZnJlZVtpXS5Xb3JkcyA9IFVMTE9OR19NQVg7CiAKLQlyID0gX2Jhc2Vfc2VuZF9pb2NfaW5pdChpb2MsIFZGX0lELCBzbGVlcF9mbGFnKTsKKwlyID0gX2Jhc2Vfc2VuZF9pb2NfaW5pdChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMzIwNywxNCArMzM5OCwxNCBAQAogCXdyaXRlbCgwLCAmaW9jLT5jaGlwLT5SZXBseVBvc3RIb3N0SW5kZXgpOwogCiAJX2Jhc2VfdW5tYXNrX2ludGVycnVwdHMoaW9jKTsKLQlyID0gX2Jhc2VfZXZlbnRfbm90aWZpY2F0aW9uKGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9ldmVudF9ub3RpZmljYXRpb24oaW9jLCBzbGVlcF9mbGFnKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKIAlpZiAoc2xlZXBfZmxhZyA9PSBDQU5fU0xFRVApCiAJCV9iYXNlX3N0YXRpY19jb25maWdfcGFnZXMoaW9jKTsKIAotCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgVkZfSUQsIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9zZW5kX3BvcnRfZW5hYmxlKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0zMjc4LDYgKzM0NjksMTcgQEAKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKKwlpb2MtPnBmYWN0cyA9IGtjYWxsb2MoaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAorCSAgICBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYy0+cGZhY3RzKQorCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKworCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspIHsKKwkJciA9IF9iYXNlX2dldF9wb3J0X2ZhY3RzKGlvYywgaSwgQ0FOX1NMRUVQKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKKwl9CisKIAlyID0gX2Jhc2VfYWxsb2NhdGVfbWVtb3J5X3Bvb2xzKGlvYywgQ0FOX1NMRUVQKTsKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CkBAIC0zMjg2LDcgKzM0ODgsNiBAQAogCiAJLyogYmFzZSBpbnRlcm5hbCBjb21tYW5kIGJpdHMgKi8KIAltdXRleF9pbml0KCZpb2MtPmJhc2VfY21kcy5tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZpb2MtPmJhc2VfY21kcy5kb25lKTsKIAlpb2MtPmJhc2VfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5iYXNlX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CiAKQEAgLTMyOTQsNyArMzQ5NSw2IEBACiAJaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPnRyYW5zcG9ydF9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+dHJhbnNwb3J0X2NtZHMuZG9uZSk7CiAKIAkvKiB0YXNrIG1hbmFnZW1lbnQgaW50ZXJuYWwgY29tbWFuZCBiaXRzICovCiAJaW9jLT50bV9jbWRzLnJlcGx5ID0ga3phbGxvYyhpb2MtPnJlcGx5X3N6LCBHRlBfS0VSTkVMKTsKQEAgLTMzMTAsNyArMzUxMCw2IEBACiAJaW9jLT5jdGxfY21kcy5yZXBseSA9IGt6YWxsb2MoaW9jLT5yZXBseV9zeiwgR0ZQX0tFUk5FTCk7CiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgPSBNUFQyX0NNRF9OT1RfVVNFRDsKIAltdXRleF9pbml0KCZpb2MtPmN0bF9jbWRzLm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTVBJMl9FVkVOVF9OT1RJRllfRVZFTlRNQVNLX1dPUkRTOyBpKyspCiAJCWlvYy0+ZXZlbnRfbWFza3NbaV0gPSAtMTsKQEAgLTMzMjcsMTggKzM1MjYsNyBAQAogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVMpOwogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1RBU0tfU0VUX0ZVTEwpOwogCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX0xPR19FTlRSWV9BRERFRCk7Ci0KLQlpb2MtPnBmYWN0cyA9IGtjYWxsb2MoaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzLAotCSAgICBzaXplb2YoTXBpMlBvcnRGYWN0c1JlcGx5X3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWlvYy0+cGZhY3RzKQotCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKLQotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5mYWN0cy5OdW1iZXJPZlBvcnRzOyBpKyspIHsKLQkJciA9IF9iYXNlX2dldF9wb3J0X2ZhY3RzKGlvYywgaSwgQ0FOX1NMRUVQKTsKLQkJaWYgKHIpCi0JCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKLQl9Ci0JciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgMCwgQ0FOX1NMRUVQKTsKKwlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBDQU5fU0xFRVApOwogCWlmIChyKQogCQlnb3RvIG91dF9mcmVlX3Jlc291cmNlczsKIApAQCAtMzQ2Niw3ICszNjU0LDcgQEAKIAogCS8qIHBlbmRpbmcgY29tbWFuZCBjb3VudCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspCiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLmNiX2lkeCAhPSAweEZGKQogCQkJaW9jLT5wZW5kaW5nX2lvX2NvdW50Kys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CkBAIC0zNDkwLDcgKzM2NzgsNyBAQAogbXB0MnNhc19iYXNlX2hhcmRfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBzbGVlcF9mbGFnLAogICAgIGVudW0gcmVzZXRfdHlwZSB0eXBlKQogewotCWludCByLCBpOworCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLApAQCAtMzUxMyw5ICszNzAxLDcgQEAKIAlpZiAocikKIAkJZ290byBvdXQ7CiAJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0FGVEVSX1JFU0VUKTsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaSsrKQotCQlyID0gX2Jhc2VfbWFrZV9pb2Nfb3BlcmF0aW9uYWwoaW9jLCBpb2MtPnBmYWN0c1tpXS5WRl9JRCwKLQkJICAgIHNsZWVwX2ZsYWcpOworCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIHNsZWVwX2ZsYWcpOwogCWlmICghcikKIAkJX2Jhc2VfcmVzZXRfaGFuZGxlcihpb2MsIE1QVDJfSU9DX0RPTkVfUkVTRVQpOwogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKaW5kZXggMmZhYWIxZS4uMGNmNmJjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmgKQEAgLTMsNyArMyw3IEBACiAgKiBmb3IgYWNjZXNzIHRvIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGZpcm13YXJlLgogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuaAotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgTVBUMlNBU19EUklWRVJfTkFNRQkJIm1wdDJzYXMiCiAjZGVmaW5lIE1QVDJTQVNfQVVUSE9SCSJMU0kgQ29ycG9yYXRpb24gPERMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20+IgogI2RlZmluZSBNUFQyU0FTX0RFU0NSSVBUSU9OCSJMU0kgTVBUIEZ1c2lvbiBTQVMgMi4wIERldmljZSBEcml2ZXIiCi0jZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIwMS4xMDAuMDYuMDAiCi0jZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMDEKKyNkZWZpbmUgTVBUMlNBU19EUklWRVJfVkVSU0lPTgkJIjAyLjEwMC4wMy4wMCIKKyNkZWZpbmUgTVBUMlNBU19NQUpPUl9WRVJTSU9OCQkwMgogI2RlZmluZSBNUFQyU0FTX01JTk9SX1ZFUlNJT04JCTEwMAotI2RlZmluZSBNUFQyU0FTX0JVSUxEX1ZFUlNJT04JCTA2CisjZGVmaW5lIE1QVDJTQVNfQlVJTERfVkVSU0lPTgkJMDMKICNkZWZpbmUgTVBUMlNBU19SRUxFQVNFX1ZFUlNJT04JCTAwCiAKIC8qCkBAIC0yNjQsNiArMjY0LDEzIEBACiAgKiBTQVMgVG9wb2xvZ3kgU3RydWN0dXJlcwogICovCiAKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX1RSX1NFTkQJCTB4MDAwMQorI2RlZmluZSBNUFRTQVNfU1RBVEVfVFJfQ09NUExFVEUJMHgwMDAyCisjZGVmaW5lIE1QVFNBU19TVEFURV9DTlRSTF9TRU5ECQkweDAwMDQKKyNkZWZpbmUgTVBUU0FTX1NUQVRFX0NOVFJMX0NPTVBMRVRFCTB4MDAwOAorCisjZGVmaW5lIE1QVDJTQVNfUkVRX1NBU19DTlRSTAkJMHgwMDEwCisKIC8qKgogICogc3RydWN0IF9zYXNfZGV2aWNlIC0gYXR0YWNoZWQgZGV2aWNlIGluZm9ybWF0aW9uCiAgKiBAbGlzdDogc2FzIGRldmljZSBsaXN0CkBAIC0zMDAsNiArMzA3LDcgQEAKIAl1MTYJc2xvdDsKIAl1OAloaWRkZW5fcmFpZF9jb21wb25lbnQ7CiAJdTgJcmVzcG9uZGluZzsKKwl1MTYJc3RhdGU7CiB9OwogCiAvKioKQEAgLTQzNiw2ICs0NDQsMTcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYWNrZXJfbGlzdDsKIH07CiAKKy8qKgorICogc3RydWN0IF90cl9saXN0IC0gdGFyZ2V0IHJlc2V0IGxpc3QKKyAqIEBoYW5kbGU6IGRldmljZSBoYW5kbGUKKyAqIEBzdGF0ZTogc3RhdGUgbWFjaGluZQorICovCitzdHJ1Y3QgX3RyX2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1MTYJaGFuZGxlOworCXUxNglzdGF0ZTsKK307CisKIHR5cGVkZWYgdm9pZCAoKk1QVF9BRERfU0dFKSh2b2lkICpwYWRkciwgdTMyIGZsYWdzX2xlbmd0aCwgZG1hX2FkZHJfdCBkbWFfYWRkcik7CiAKIC8qKgpAQCAtNTEwLDggKzUyOSw5IEBACiAgKiBAY29uZmlnX3BhZ2Vfc3o6IGNvbmZpZyBwYWdlIHNpemUKICAqIEBjb25maWdfcGFnZTogcmVzZXJ2ZSBtZW1vcnkgZm9yIGNvbmZpZyBwYWdlIHBheWxvYWQKICAqIEBjb25maWdfcGFnZV9kbWE6CisgKiBAaGJhX3F1ZXVlX2RlcHRoOiBoYmEgcmVxdWVzdCBxdWV1ZSBkZXB0aAogICogQHNnZV9zaXplOiBzZyBlbGVtZW50IHNpemUgZm9yIGVpdGhlciAzMi82NCBiaXQKLSAqIEByZXF1ZXN0X2RlcHRoOiBoYmEgcmVxdWVzdCBxdWV1ZSBkZXB0aAorICogQHNjc2lpb19kZXB0aDogU0NTSV9JTyBxdWV1ZSBkZXB0aAogICogQHJlcXVlc3Rfc3o6IHBlciByZXF1ZXN0IGZyYW1lIHNpemUKICAqIEByZXF1ZXN0OiBwb29sIG9mIHJlcXVlc3QgZnJhbWVzCiAgKiBAcmVxdWVzdF9kbWE6CkBAIC01MjgsNiArNTQ4LDE4IEBACiAgKiBAY2hhaW5zX25lZWRlZF9wZXJfaW86IG1heCBjaGFpbnMgcGVyIGlvCiAgKiBAY2hhaW5fb2Zmc2V0X3ZhbHVlX2Zvcl9tYWluX21lc3NhZ2U6IGxvY2F0aW9uIDFzdCBzZyBpbiBtYWluCiAgKiBAY2hhaW5fZGVwdGg6IHRvdGFsIGNoYWlucyBhbGxvY2F0ZWQKKyAqIEBoaV9wcmlvcml0eV9zbWlkOgorICogQGhpX3ByaW9yaXR5OgorICogQGhpX3ByaW9yaXR5X2RtYToKKyAqIEBoaV9wcmlvcml0eV9kZXB0aDoKKyAqIEBocHJfbG9va3VwOgorICogQGhwcl9mcmVlX2xpc3Q6CisgKiBAaW50ZXJuYWxfc21pZDoKKyAqIEBpbnRlcm5hbDoKKyAqIEBpbnRlcm5hbF9kbWE6CisgKiBAaW50ZXJuYWxfZGVwdGg6CisgKiBAaW50ZXJuYWxfbG9va3VwOgorICogQGludGVybmFsX2ZyZWVfbGlzdDoKICAqIEBzZW5zZTogcG9vbCBvZiBzZW5zZQogICogQHNlbnNlX2RtYToKICAqIEBzZW5zZV9kbWFfcG9vbDoKQEAgLTU5Nyw2ICs2MjksOCBAQAogCXU4CQljdGxfY2JfaWR4OwogCXU4CQliYXNlX2NiX2lkeDsKIAl1OAkJY29uZmlnX2NiX2lkeDsKKwl1OAkJdG1fdHJfY2JfaWR4OworCXU4CQl0bV9zYXNfY29udHJvbF9jYl9pZHg7CiAJc3RydWN0IF9pbnRlcm5hbF9jbWQgYmFzZV9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRyYW5zcG9ydF9jbWRzOwogCXN0cnVjdCBfaW50ZXJuYWxfY21kIHRtX2NtZHM7CkBAIC02NDMsOSArNjc3LDEwIEBACiAJdm9pZCAJCSpjb25maWdfcGFnZTsKIAlkbWFfYWRkcl90CWNvbmZpZ19wYWdlX2RtYTsKIAotCS8qIHJlcXVlc3QgKi8KKwkvKiBzY3NpaW8gcmVxdWVzdCAqLworCXUxNgkJaGJhX3F1ZXVlX2RlcHRoOwogCXUxNgkJc2dlX3NpemU7Ci0JdTE2IAkJcmVxdWVzdF9kZXB0aDsKKwl1MTYgCQlzY3NpaW9fZGVwdGg7CiAJdTE2CQlyZXF1ZXN0X3N6OwogCXU4CQkqcmVxdWVzdDsKIAlkbWFfYWRkcl90CXJlcXVlc3RfZG1hOwpAQCAtNjY1LDYgKzcwMCwyMiBAQAogCXUxNgkJY2hhaW5fb2Zmc2V0X3ZhbHVlX2Zvcl9tYWluX21lc3NhZ2U7CiAJdTE2CQljaGFpbl9kZXB0aDsKIAorCS8qIGhpLXByaW9yaXR5IHF1ZXVlICovCisJdTE2CQloaV9wcmlvcml0eV9zbWlkOworCXU4CQkqaGlfcHJpb3JpdHk7CisJZG1hX2FkZHJfdAloaV9wcmlvcml0eV9kbWE7CisJdTE2CQloaV9wcmlvcml0eV9kZXB0aDsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICpocHJfbG9va3VwOworCXN0cnVjdCBsaXN0X2hlYWQgaHByX2ZyZWVfbGlzdDsKKworCS8qIGludGVybmFsIHF1ZXVlICovCisJdTE2CQlpbnRlcm5hbF9zbWlkOworCXU4CQkqaW50ZXJuYWw7CisJZG1hX2FkZHJfdAlpbnRlcm5hbF9kbWE7CisJdTE2CQlpbnRlcm5hbF9kZXB0aDsKKwlzdHJ1Y3QgcmVxdWVzdF90cmFja2VyICppbnRlcm5hbF9sb29rdXA7CisJc3RydWN0IGxpc3RfaGVhZCBpbnRlcm5hbF9mcmVlX2xpc3Q7CisKIAkvKiBzZW5zZSAqLwogCXU4CQkqc2Vuc2U7CiAJZG1hX2FkZHJfdAlzZW5zZV9kbWE7CkBAIC02OTAsNiArNzQxLDggQEAKIAlzdHJ1Y3QgZG1hX3Bvb2wgKnJlcGx5X3Bvc3RfZnJlZV9kbWFfcG9vbDsKIAl1MzIJCXJlcGx5X3Bvc3RfaG9zdF9pbmRleDsKIAorCXN0cnVjdCBsaXN0X2hlYWQgZGVsYXllZF90cl9saXN0OworCiAJLyogZGlhZyBidWZmZXIgc3VwcG9ydCAqLwogCXU4CQkqZGlhZ19idWZmZXJbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIAl1MzIJCWRpYWdfYnVmZmVyX3N6W01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CkBAIC03MDEsNyArNzU0LDcgQEAKIAl1MzIJCWRpYWdub3N0aWNfZmxhZ3NbTVBJMl9ESUFHX0JVRl9UWVBFX0NPVU5UXTsKIH07CiAKLXR5cGVkZWYgdm9pZCAoKk1QVF9DQUxMQkFDSykoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsCit0eXBlZGVmIHU4ICgqTVBUX0NBTExCQUNLKShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAogICAgIHUzMiByZXBseSk7CiAKIApAQCAtNzIwLDIyICs3NzMsMjggQEAKIHZvaWQgKm1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCAqbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCk7CiB2b2lkIG1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2Uoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB2b2lkICpwYWRkcik7Ci1kbWFfYWRkcl90IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lX2RtYShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKLWRtYV9hZGRyX3QgbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXJfZG1hKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOworZG1hX2FkZHJfdCBtcHQyc2FzX2Jhc2VfZ2V0X3NlbnNlX2J1ZmZlcl9kbWEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHUxNiBzbWlkKTsKKworLyogaGktcHJpb3JpdHkgcXVldWUgKi8KK3UxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KTsKK3UxNiBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfc2NzaWlvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4LAorICAgIHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpOwogCiB1MTYgbXB0MnNhc19iYXNlX2dldF9zbWlkKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggY2JfaWR4KTsKIHZvaWQgbXB0MnNhc19iYXNlX2ZyZWVfc21pZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQsCit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCiAgICAgdTE2IGhhbmRsZSk7Ci12b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCB2Zl9pZCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKTsKIHZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX3RhcmdldF9hc3Npc3Qoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwKLSAgICB1OCB2Zl9pZCwgdTE2IGlvX2luZGV4KTsKLXZvaWQgbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggdmZfaWQpOworICAgIHUxNiBpb19pbmRleCk7Cit2b2lkIG1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpOwogdm9pZCBtcHQyc2FzX2Jhc2VfaW5pdGlhbGl6ZV9jYWxsYmFja19oYW5kbGVyKHZvaWQpOwogdTggbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIoTVBUX0NBTExCQUNLIGNiX2Z1bmMpOwogdm9pZCBtcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKHU4IGNiX2lkeCk7CiAKLXZvaWQgbXB0MnNhc19iYXNlX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2Jhc2VfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiB2b2lkICptcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUzMiBwaHlzX2FkZHIpOwogCiB1MzIgbXB0MnNhc19iYXNlX2dldF9pb2NzdGF0ZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCBjb29rZWQpOwpAQCAtNzQ5LDYgKzgwOCw4IEBACiB2b2lkIG1wdDJzYXNfYmFzZV92YWxpZGF0ZV9ldmVudF90eXBlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTMyICpldmVudF90eXBlKTsKIAogLyogc2NzaWggc2hhcmVkIEFQSSAqLwordTggbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19zY3NpaF9pc3N1ZV90bShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUsIHVpbnQgbHVuLAogICAgIHU4IHR5cGUsIHUxNiBzbWlkX3Rhc2ssIHVsb25nIHRpbWVvdXQpOwogdm9pZCBtcHQyc2FzX3Njc2loX3NldF90bV9mbGFnKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IGhhbmRsZSk7CkBAIC03NjAsMTEgKzgyMSwxMSBAQAogc3RydWN0IF9zYXNfZGV2aWNlICptcHQyc2FzX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9zYXNfYWRkcmVzcygKICAgICBzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU2NCBzYXNfYWRkcmVzcyk7CiAKLXZvaWQgbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwogdm9pZCBtcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBpbnQgcmVzZXRfcGhhc2UpOwogCiAvKiBjb25maWcgc2hhcmVkIEFQSSAqLwotdm9pZCBtcHQyc2FzX2NvbmZpZ19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpOwordTggbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBtc2l4X2luZGV4LAorICAgIHUzMiByZXBseSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X251bWJlcl9oYmFfcGh5cyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4ICpudW1fcGh5cyk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X21hbnVmYWN0dXJpbmdfcGcwKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKICAgICBNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyTWFudWZhY3R1cmluZ1BhZ2UwX3QgKmNvbmZpZ19wYWdlKTsKQEAgLTgxNywxNCArODc4LDE3IEBACiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1wdDJzYXNfZGV2X2F0dHJzW107CiB2b2lkIG1wdDJzYXNfY3RsX2luaXQodm9pZCk7CiB2b2lkIG1wdDJzYXNfY3RsX2V4aXQodm9pZCk7Ci12b2lkIG1wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2N0bF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSk7Ci12b2lkIG1wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsIHUzMiByZXBseSk7Cit1OCBtcHQyc2FzX2N0bF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KTsKIHZvaWQgbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5KTsKIAogLyogdHJhbnNwb3J0IHNoYXJlZCBBUEkgKi8KLXZvaWQgbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KTsKK3U4IG1wdDJzYXNfdHJhbnNwb3J0X2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpOwogc3RydWN0IF9zYXNfcG9ydCAqbXB0MnNhc190cmFuc3BvcnRfcG9ydF9hZGQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogICAgIHUxNiBoYW5kbGUsIHUxNiBwYXJlbnRfaGFuZGxlKTsKIHZvaWQgbXB0MnNhc190cmFuc3BvcnRfcG9ydF9yZW1vdmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1NjQgc2FzX2FkZHJlc3MsCkBAIC04MzgsNiArOTAyLDggQEAKIGV4dGVybiBzdHJ1Y3Qgc2FzX2Z1bmN0aW9uX3RlbXBsYXRlIG1wdDJzYXNfdHJhbnNwb3J0X2Z1bmN0aW9uczsKIGV4dGVybiBzdHJ1Y3Qgc2NzaV90cmFuc3BvcnRfdGVtcGxhdGUgKm1wdDJzYXNfdHJhbnNwb3J0X3RlbXBsYXRlOwogZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV9ibG9jayhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpOworZXh0ZXJuIHU4IG1wdDJzYXNfc3RtX3plcm9fc21pZF9oYW5kbGVyKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICB1OCBtc2l4X2luZGV4LCB1MzIgcmVwbHkpOwogZXh0ZXJuIGludCBzY3NpX2ludGVybmFsX2RldmljZV91bmJsb2NrKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldik7CiAKICNlbmRpZiAvKiBNUFQyU0FTX0JBU0VfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggYWI4YzU2MC4uNTk0YTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0yLDcgKzIsNyBAQAogICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29tbW9uIEFQSSBmb3IgYWNjZXNzaW5nIGZpcm13YXJlIGNvbmZpZ3VyYXRpb24gcGFnZXMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjI3LDIzICsyMjcsMjUgQEAKICAqIG1wdDJzYXNfY29uZmlnX2RvbmUgLSBjb25maWcgcGFnZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBfY29uZmlnX3JlcXVlc3QuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jb25maWdfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY29uZmlnX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKyAgICB1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jb25maWdfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y29uZmlnX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9ICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKIAlpZiAobXBpX3JlcGx5KSB7CkBAIC0yNTcsNiArMjU5LDcgQEAKICNlbmRpZgogCWlvYy0+Y29uZmlnX2NtZHMuc21pZCA9IFVTSE9SVF9NQVg7CiAJY29tcGxldGUoJmlvYy0+Y29uZmlnX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzAzLDYgKzMwNiw5IEBACiAJcmV0cnlfY291bnQgPSAwOwogCW1lbXNldCgmbWVtLCAwLCBzaXplb2Yoc3RydWN0IGNvbmZpZ19yZXF1ZXN0KSk7CiAKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKKwogCWlmIChjb25maWdfcGFnZSkgewogCQltcGlfcmVxdWVzdC0+SGVhZGVyLlBhZ2VWZXJzaW9uID0gbXBpX3JlcGx5LT5IZWFkZXIuUGFnZVZlcnNpb247CiAJCW1waV9yZXF1ZXN0LT5IZWFkZXIuUGFnZU51bWJlciA9IG1waV9yZXBseS0+SGVhZGVyLlBhZ2VOdW1iZXI7CkBAIC0zODAsNyArMzg2LDcgQEAKIAlfY29uZmlnX2Rpc3BsYXlfc29tZV9kZWJ1Zyhpb2MsIHNtaWQsICJjb25maWdfcmVxdWVzdCIsIE5VTEwpOwogI2VuZGlmCiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUpOwotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgY29uZmlnX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPmNvbmZpZ19jbWRzLmRvbmUsCiAJICAgIHRpbWVvdXQqSFopOwogCWlmICghKGlvYy0+Y29uZmlnX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCBjMmE1MTAxLi41N2Q3MjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTMsNyArMyw3IEBACiAgKiBjb250cm9sbGVycwogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2N0bC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxOSwyMyArMjE5LDI1IEBACiAgKiBtcHQyc2FzX2N0bF9kb25lIC0gY3RsIG1vZHVsZSBjb21wbGV0aW9uIHJvdXRpbmUKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IG5vbmUuCiAgKgogICogVGhlIGNhbGxiYWNrIGhhbmRsZXIgd2hlbiB1c2luZyBpb2MtPmN0bF9jYl9pZHguCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2RvbmUoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCwgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTVBJMkRlZmF1bHRSZXBseV90ICptcGlfcmVwbHk7CiAKIAlpZiAoaW9jLT5jdGxfY21kcy5zdGF0dXMgPT0gTVBUMl9DTURfTk9UX1VTRUQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaWYgKGlvYy0+Y3RsX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+Y3RsX2NtZHMuc3RhdHVzIHw9IE1QVDJfQ01EX0NPTVBMRVRFOwogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTI0Nyw2ICsyNDksNyBAQAogI2VuZGlmCiAJaW9jLT5jdGxfY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtMzI4LDIyICszMzEsMjUgQEAKIC8qKgogICogbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19jdGxfZXZlbnRfY2FsbGJhY2soc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwgdTMyIHJlcGx5KQordTgKK21wdDJzYXNfY3RsX2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggbXNpeF9pbmRleCwKKwl1MzIgcmVwbHkpCiB7CiAJTXBpMkV2ZW50Tm90aWZpY2F0aW9uUmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJbXB0MnNhc19jdGxfYWRkX3RvX2V2ZW50X2xvZyhpb2MsIG1waV9yZXBseSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qKgpAQCAtNTA3LDcgKzUxMyw3IEBACiAKIAloYW5kbGUgPSBsZTE2X3RvX2NwdSh0bV9yZXF1ZXN0LT5EZXZIYW5kbGUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSBpb2MtPnJlcXVlc3RfZGVwdGg7IGkgJiYgIWZvdW5kOyBpLS0pIHsKKwlmb3IgKGkgPSBpb2MtPnNjc2lpb19kZXB0aDsgaSAmJiAhZm91bmQ7IGktLSkgewogCQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtpIC0gMV0uc2NtZDsKIAkJaWYgKHNjbWQgPT0gTlVMTCB8fCBzY21kLT5kZXZpY2UgPT0gTlVMTCB8fAogCQkgICAgc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YSA9PSBOVUxMKQpAQCAtNjE0LDcgKzYyMCw3IEBACiAJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogaW9jIGlzIG9wZXJhdGlvbmFsXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5jdGxfY2JfaWR4KTsKKwlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkX3Njc2lpbyhpb2MsIGlvYy0+Y3RsX2NiX2lkeCwgTlVMTCk7CiAJaWYgKCFzbWlkKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgb2J0YWluaW5nIGEgc21pZFxuIiwKIAkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOwpAQCAtNzM3LDcgKzc0Myw3IEBACiAJCSAgICAodTMyKW1wdDJzYXNfYmFzZV9nZXRfc2Vuc2VfYnVmZmVyX2RtYShpb2MsIHNtaWQpOwogCQlwcml2X3NlbnNlID0gbXB0MnNhc19iYXNlX2dldF9zZW5zZV9idWZmZXIoaW9jLCBzbWlkKTsKIAkJbWVtc2V0KHByaXZfc2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwgMCwKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLAogCQkgICAgbGUxNl90b19jcHUobXBpX3JlcXVlc3QtPkZ1bmN0aW9uRGVwZW5kZW50MSkpOwogCQlicmVhazsKIAl9CkBAIC03NTksOCArNzY1LDcgQEAKIAkJbXV0ZXhfbG9jaygmaW9jLT50bV9jbWRzLm11dGV4KTsKIAkJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGxlMTZfdG9fY3B1KAogCQkgICAgdG1fcmVxdWVzdC0+RGV2SGFuZGxlKSk7Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQsCi0JCSAgICBtcGlfcmVxdWVzdC0+VkZfSUQpOworCQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g6CkBAIC03ODEsNyArNzg2LDcgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWNhc2UgTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOgpAQCAtNzk1LDExICs4MDAsMTEgQEAKIAkJCWlvYy0+aW9jX2xpbmtfcmVzZXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQkJaW9jLT5pZ25vcmVfbG9naW5mb3MgPSAxOwogCQl9Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6Ci0JCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwkJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKIAkJYnJlYWs7CiAJfQogCkBAIC04MDcsNiArODEyLDcgQEAKIAkJdGltZW91dCA9IE1QVDJfSU9DVExfREVGQVVMVF9USU1FT1VUOwogCWVsc2UKIAkJdGltZW91dCA9IGthcmcudGltZW91dDsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgdGltZW91dCpIWik7CiAJaWYgKG1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9PSBNUEkyX0ZVTkNUSU9OX1NDU0lfVEFTS19NR01UKSB7CkBAIC0xMzcxLDYgKzEzNzcsOCBAQAogCW1waV9yZXF1ZXN0LT5GbGFncyA9IGNwdV90b19sZTMyKGthcmcuZGlhZ25vc3RpY19mbGFncyk7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlckFkZHJlc3MgPSBjcHVfdG9fbGU2NChyZXF1ZXN0X2RhdGFfZG1hKTsKIAltcGlfcmVxdWVzdC0+QnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIocmVxdWVzdF9kYXRhX3N6KTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAogCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBkaWFnX2J1ZmZlcigweCVwKSwgIgogCSAgICAiZG1hKDB4JWxseCksIHN6KCVkKVxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXywgcmVxdWVzdF9kYXRhLApAQCAtMTM4MCw3ICsxMzg4LDggQEAKIAkJbXBpX3JlcXVlc3QtPlByb2R1Y3RTcGVjaWZpY1tpXSA9CiAJCQljcHVfdG9fbGUzMihpb2MtPnByb2R1Y3Rfc3BlY2lmaWNbYnVmZmVyX3R5cGVdW2ldKTsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE2NDMsOCArMTY1MiwxMSBAQAogCiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9ESUFHX1JFTEVBU0U7CiAJbXBpX3JlcXVlc3QtPkJ1ZmZlclR5cGUgPSBidWZmZXJfdHlwZTsKKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAotCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZCwgbXBpX3JlcXVlc3QtPlZGX0lEKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT5jdGxfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT5jdGxfY21kcy5kb25lLAogCSAgICBNUFQyX0lPQ1RMX0RFRkFVTFRfVElNRU9VVCpIWik7CiAKQEAgLTE5MDIsOCArMTkxNCwxMSBAQAogCWZvciAoaSA9IDA7IGkgPCBNUFQyX1BST0RVQ1RfU1BFQ0lGSUNfRFdPUkRTOyBpKyspCiAJCW1waV9yZXF1ZXN0LT5Qcm9kdWN0U3BlY2lmaWNbaV0gPQogCQkJY3B1X3RvX2xlMzIoaW9jLT5wcm9kdWN0X3NwZWNpZmljW2J1ZmZlcl90eXBlXVtpXSk7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAKLQltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQsIG1waV9yZXF1ZXN0LT5WRl9JRCk7CisJbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkKTsKKwlpbml0X2NvbXBsZXRpb24oJmlvYy0+Y3RsX2NtZHMuZG9uZSk7CiAJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlvYy0+Y3RsX2NtZHMuZG9uZSwKIAkgICAgTVBUMl9JT0NUTF9ERUZBVUxUX1RJTUVPVVQqSFopOwogCkBAIC0yMDY5LDYgKzIwODQsNyBAQAogX2N0bF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJbG9uZyByZXQ7CisKIAlsb2NrX2tlcm5lbCgpOwogCXJldCA9IF9jdGxfaW9jdGxfbWFpbihmaWxlLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMjE0Myw2ICsyMTU5LDcgQEAKIF9jdGxfaW9jdGxfY29tcGF0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCWxvbmcgcmV0OworCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoY21kID09IE1QVDJDT01NQU5EMzIpCiAJCXJldCA9IF9jdGxfY29tcGF0X21wdF9jb21tYW5kKGZpbGUsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCmluZGV4IDRkYTExNDMuLjIxMWYyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaApAQCAtMyw3ICszLDcgQEAKICAqIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmgKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4ICBMU0kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBMU0kgQ29ycG9yYXRpb24KICAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCmluZGV4IGFkMzI1MDkuLjUzMDhhMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKQEAgLTIsNyArMiw3IEBACiAgKiBMb2dnaW5nIFN1cHBvcnQgZm9yIE1QVCAoTWVzc2FnZSBQYXNzaW5nIFRlY2hub2xvZ3kpIGJhc2VkIGNvbnRyb2xsZXJzCiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfZGVidWcuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggNzc0YjM0NS4uODZhYjMyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtMiw3ICsyLDcgQEAKICAqIFNjc2kgSG9zdCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9zY3NpaC5jCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCAgTFNJIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgTFNJIENvcnBvcmF0aW9uCiAgKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTc5LDYgKzc5LDkgQEAKIHN0YXRpYyB1OCBjb25maWdfY2JfaWR4ID0gLTE7CiBzdGF0aWMgaW50IG1wdF9pZHM7CiAKK3N0YXRpYyB1OCB0bV90cl9jYl9pZHggPSAtMSA7CitzdGF0aWMgdTggdG1fc2FzX2NvbnRyb2xfY2JfaWR4ID0gLTE7CisKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCiBzdGF0aWMgdTMyIGxvZ2dpbmdfbGV2ZWw7CiBNT0RVTEVfUEFSTV9ERVNDKGxvZ2dpbmdfbGV2ZWwsICIgYml0cyBmb3IgZW5hYmxpbmcgYWRkaXRpb25hbCBsb2dnaW5nIGluZm8gIgpAQCAtMTA5LDYgKzExMiw3IEBACiAgKiBAd29yazogd29yayBvYmplY3QgKGlvYy0+ZmF1bHRfcmVzZXRfd29ya19xKQogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCiAgKiBAaG9zdF9yZXNldF9oYW5kbGluZzogaGFuZGxpbmcgZXZlbnRzIGR1cmluZyBob3N0IHJlc2V0CiAgKiBAaWdub3JlOiBmbGFnIG1lYW5pbmcgdGhpcyBldmVudCBoYXMgYmVlbiBtYXJrZWQgdG8gaWdub3JlCiAgKiBAZXZlbnQ6IGZpcm13YXJlIGV2ZW50IE1QSTJfRVZFTlRfWFhYIGRlZmluZWQgaW4gbXB0Ml9pb2MuaApAQCAtMTIxLDYgKzEyNSw3IEBACiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CiAJc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jOwogCXU4CQkJVkZfSUQ7CisJdTgJCQlWUF9JRDsKIAl1OAkJCWhvc3RfcmVzZXRfaGFuZGxpbmc7CiAJdTgJCQlpZ25vcmU7CiAJdTE2CQkJZXZlbnQ7CkBAIC0xMzgsOCArMTQzLDEwIEBACiAgKiBAbHVuOiBsdW4gbnVtYmVyCiAgKiBAY2RiX2xlbmd0aDogY2RiIGxlbmd0aAogICogQGNkYjogY2RiIGNvbnRlbnRzCi0gKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAdGltZW91dDogdGltZW91dCBmb3IgdGhpcyBjb21tYW5kCisgKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBWUF9JRDogdmlydHVhbCBwb3J0IGlkCisgKiBAdmFsaWRfcmVwbHk6IGZsYWcgc2V0IGZvciByZXBseSBtZXNzYWdlCiAgKiBAc2Vuc2VfbGVuZ3RoOiBzZW5zZSBsZW5ndGgKICAqIEBpb2Nfc3RhdHVzOiBpb2Mgc3RhdHVzCiAgKiBAc2NzaV9zdGF0ZTogc2NzaSBzdGF0ZQpAQCAtMTYxLDYgKzE2OCw4IEBACiAJdTgJY2RiX2xlbmd0aDsKIAl1OAljZGJbMzJdOwogCXU4CXRpbWVvdXQ7CisJdTgJVkZfSUQ7CisJdTgJVlBfSUQ7CiAJdTgJdmFsaWRfcmVwbHk7CiAgIC8qIHRoZSBmb2xsb3dpbmcgYml0cyBhcmUgb25seSB2YWxpZCB3aGVuICd2YWxpZF9yZXBseSA9IDEnICovCiAJdTMyCXNlbnNlX2xlbmd0aDsKQEAgLTc1Niw2NiArNzY1LDE2IEBACiB9CiAKIC8qKgotICogX3Njc2loX3Njc2lfbG9va3VwX2dldCAtIHJldHVybnMgc2NtZCBlbnRyeQorICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCiAgKgogICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLgogICovCiBzdGF0aWMgc3RydWN0IHNjc2lfY21uZCAqCiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQpCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXNjbWQgPSBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCXJldHVybiBzY21kOwotfQotCi0vKioKLSAqIG1wdHNjc2loX2dldGNsZWFyX3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5Ci0gKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBDb250ZXh0OiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWNxdWlyZSBpb2MtPnNjc2lfbG9va3VwX2xvY2suCi0gKgotICogUmV0dXJucyB0aGUgc21pZCBzdG9yZWQgc2NtZCBwb2ludGVyLCBhcyB3ZWxsIGFzIGNsZWFyaW5nIHRoZSBzY21kIHBvaW50ZXIuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9jbW5kICoKLV9zY3NpaF9zY3NpX2xvb2t1cF9nZXRjbGVhcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkKQotewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0Jc3RydWN0IHNjc2lfY21uZCAqc2NtZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlzY21kID0gaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZDsKLQlpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gc2NtZDsKLX0KLQotLyoqCi0gKiBfc2NzaWhfc2NzaV9sb29rdXBfc2V0IC0gdXBkYXRlcyBzY21kIGVudHJ5IGluIGxvb2t1cAotICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAotICogQHNjbWQ6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAotICogQ29udGV4dDogVGhpcyBmdW5jdGlvbiB3aWxsIGFjcXVpcmUgaW9jLT5zY3NpX2xvb2t1cF9sb2NrLgotICoKLSAqIFRoaXMgd2lsbCBzYXZlIHNjbWQgcG9pbnRlciBpbiB0aGUgc2NzaV9sb29rdXAgYXJyYXkuCi0gKgotICogUmV0dXJuIG5vdGhpbmcuCi0gKi8KLXN0YXRpYyB2b2lkCi1fc2NzaWhfc2NzaV9sb29rdXBfc2V0KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCi0gICAgc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKLXsKLQl1bnNpZ25lZCBsb25nCWZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwotCWlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQgPSBzY21kOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOworCXJldHVybiBpb2MtPnNjc2lfbG9va3VwW3NtaWQgLSAxXS5zY21kOwogfQogCiAvKioKQEAgLTgzOCw5ICs3OTcsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCXNtaWQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBpb2MtPnJlcXVlc3RfZGVwdGg7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgPT0gc2NtZCkgewotCQkJc21pZCA9IGkgKyAxOworCQkJc21pZCA9IGlvYy0+c2NzaV9sb29rdXBbaV0uc21pZDsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtODY5LDcgKzgyOCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJZm91bmQgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgaW9jLT5yZXF1ZXN0X2RlcHRoOyBpKyspIHsKKwlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+c2NzaWlvX2RlcHRoOyBpKyspIHsKIAkJaWYgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZCAmJgogCQkgICAgKGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5pZCA9PSBpZCAmJgogCQkgICAgaW9jLT5zY3NpX2xvb2t1cFtpXS5zY21kLT5kZXZpY2UtPmNoYW5uZWwgPT0gY2hhbm5lbCkpIHsKQEAgLTkwMyw3ICs4NjIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCWZvdW5kID0gMDsKLQlmb3IgKGkgPSAwIDsgaSA8IGlvYy0+cmVxdWVzdF9kZXB0aDsgaSsrKSB7CisJZm9yIChpID0gMCA7IGkgPCBpb2MtPnNjc2lpb19kZXB0aDsgaSsrKSB7CiAJCWlmIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQgJiYKIAkJICAgIChpb2MtPnNjc2lfbG9va3VwW2ldLnNjbWQtPmRldmljZS0+aWQgPT0gaWQgJiYKIAkJICAgIGlvYy0+c2NzaV9sb29rdXBbaV0uc2NtZC0+ZGV2aWNlLT5jaGFubmVsID09IGNoYW5uZWwgJiYKQEAgLTExMTMsNyArMTA3Miw3IEBACiB9CiAKIC8qKgotICogX3Njc2loX2NoYW5nZV9xdWV1ZV9kZXB0aCAtIGNoYW5naW5nIGRldmljZSBxdWV1ZSB0YWcgdHlwZQorICogX3Njc2loX2NoYW5nZV9xdWV1ZV90eXBlIC0gY2hhbmdpbmcgZGV2aWNlIHF1ZXVlIHRhZyB0eXBlCiAgKiBAc2Rldjogc2NzaSBkZXZpY2Ugc3RydWN0CiAgKiBAdGFnX3R5cGU6IHJlcXVlc3RlZCB0YWcgdHlwZQogICoKQEAgLTE2NzksMjMgKzE2MzgsMjQgQEAKICAqIF9zY3NpaF90bV9kb25lIC0gdG0gY29tcGxldGlvbiByb3V0aW5lCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKiBDb250ZXh0OiBub25lLgogICoKICAqIFRoZSBjYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgc2NzaWhfaXNzdWVfdG0uCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF90bV9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNUEkyRGVmYXVsdFJlcGx5X3QgKm1waV9yZXBseTsKIAogCWlmIChpb2MtPnRtX2NtZHMuc3RhdHVzID09IE1QVDJfQ01EX05PVF9VU0VEKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlmIChpb2MtPnRtX2NtZHMuc21pZCAhPSBzbWlkKQotCQlyZXR1cm47CisJCXJldHVybiAxOwogCWlvYy0+dG1fY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChtcGlfcmVwbHkpIHsKQEAgLTE3MDQsNiArMTY2NCw3IEBACiAJfQogCWlvYy0+dG1fY21kcy5zdGF0dXMgJj0gfk1QVDJfQ01EX1BFTkRJTkc7CiAJY29tcGxldGUoJmlvYy0+dG1fY21kcy5kb25lKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0xNzkwLDcgKzE3NTEsNiBAQAogCXUxNiBzbWlkID0gMDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7Ci0JdTggVkZfSUQgPSAwOwogCiAJaWYgKGlvYy0+dG1fY21kcy5zdGF0dXMgIT0gTVBUMl9DTURfTk9UX1VTRUQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiB0bV9jbWQgYnVzeSEhIVxuIiwKQEAgLTE4MTcsNyArMTc3Nyw3IEBACiAJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKIAl9CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT50bV9jYl9pZHgpOworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV9jYl9pZHgpOwogCWlmICghc21pZCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIG9idGFpbmluZyBhIHNtaWRcbiIsCiAJCSAgICBpb2MtPm5hbWUsIF9fZnVuY19fKTsKQEAgLTE4MjUsNyArMTc4NSw4IEBACiAJfQogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgInNlbmRpbmcgdG06IGhhbmRsZSgweCUwNHgpLCIKLQkgICAgIiB0YXNrX3R5cGUoMHglMDJ4KSwgc21pZCglZClcbiIsIGlvYy0+bmFtZSwgaGFuZGxlLCB0eXBlLCBzbWlkKSk7CisJICAgICIgdGFza190eXBlKDB4JTAyeCksIHNtaWQoJWQpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSwgdHlwZSwKKwkgICAgc21pZF90YXNrKSk7CiAJaW9jLT50bV9jbWRzLnN0YXR1cyA9IE1QVDJfQ01EX1BFTkRJTkc7CiAJbXBpX3JlcXVlc3QgPSBtcHQyc2FzX2Jhc2VfZ2V0X21zZ19mcmFtZShpb2MsIHNtaWQpOwogCWlvYy0+dG1fY21kcy5zbWlkID0gc21pZDsKQEAgLTE4MzQsMTAgKzE3OTUsMTIgQEAKIAltcGlfcmVxdWVzdC0+RGV2SGFuZGxlID0gY3B1X3RvX2xlMTYoaGFuZGxlKTsKIAltcGlfcmVxdWVzdC0+VGFza1R5cGUgPSB0eXBlOwogCW1waV9yZXF1ZXN0LT5UYXNrTUlEID0gY3B1X3RvX2xlMTYoc21pZF90YXNrKTsKKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOyAgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7CiAJaW50X3RvX3Njc2lsdW4obHVuLCAoc3RydWN0IHNjc2lfbHVuICopbXBpX3JlcXVlc3QtPkxVTik7CiAJbXB0MnNhc19zY3NpaF9zZXRfdG1fZmxhZyhpb2MsIGhhbmRsZSk7CiAJaW5pdF9jb21wbGV0aW9uKCZpb2MtPnRtX2NtZHMuZG9uZSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2hpX3ByaW9yaXR5KGlvYywgc21pZCwgVkZfSUQpOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9oaV9wcmlvcml0eShpb2MsIHNtaWQpOwogCXRpbWVsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZpb2MtPnRtX2NtZHMuZG9uZSwgdGltZW91dCpIWik7CiAJbXB0MnNhc19zY3NpaF9jbGVhcl90bV9mbGFnKGlvYywgaGFuZGxlKTsKIAlpZiAoIShpb2MtPnRtX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfQ09NUExFVEUpKSB7CkBAIC0yMDc1LDcgKzIwMzgsNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9hYm9ydCAtIGVoIHRocmVhZHMgbWFpbiBob3N0IHJlc2V0IHJvdXRpbmUKKyAqIF9zY3NpaF9ob3N0X3Jlc2V0IC0gZWggdGhyZWFkcyBtYWluIGhvc3QgcmVzZXQgcm91dGluZQogICogQHNkZXY6IHNjc2kgZGV2aWNlIHN0cnVjdAogICoKICAqIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKQEAgLTIzNTQsNiArMjMxNywyMzEgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfdG1fdHJfc2VuZCAtIHNlbmQgdGFzayBtYW5hZ2VtZW50IHJlcXVlc3QKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGhhbmRsZTogZGV2aWNlIGhhbmRsZQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBjb2RlIGlzIHRvIGluaXRpYXRlIHRoZSBkZXZpY2UgcmVtb3ZhbCBoYW5kc2hha2UgcHJvdG9jYWwKKyAqIHdpdGggY29udHJvbGxlciBmaXJtd2FyZS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBpc3N1ZSB0YXJnZXQgcmVzZXQKKyAqIHVzaW5nIGhpZ2ggcHJpb3JpdHkgcmVxdWVzdCBxdWV1ZS4gIEl0IHdpbGwgc2VuZCBhIHNhcyBpb3VuaXQKKyAqIGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpIGZyb20gdGhpcyBjb21wbGV0aW9uLgorICoKKyAqIFRoaXMgaXMgZGVzaWduZWQgdG8gc2VuZCBtdWxpcGxlIHRhc2sgbWFuYWdlbWVudCByZXF1ZXN0IGF0IHRoZSBzYW1lCisgKiB0aW1lIHRvIHRoZSBmaWZvLiBJZiB0aGUgZmlmbyBpcyBmdWxsLCB3ZSB3aWxsIGFwcGVuZCB0aGUgcmVxdWVzdCwKKyAqIGFuZCBwcm9jZXNzIGl0IGluIGEgZnV0dXJlIGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdG1fdHJfc2VuZChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBoYW5kbGUpCit7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCAqbXBpX3JlcXVlc3Q7CisJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwl1MTYgc21pZDsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgX3RyX2xpc3QgKmRlbGF5ZWRfdHI7CisKKwlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkgeworCQlwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGhvc3QgcmVzZXQgaW4gcHJvZ3Jlc3MhXG4iLAorCQkgICAgX19mdW5jX18sIGlvYy0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwkvKiBza2lwIGlzIGhpZGRlbiByYWlkIGNvbXBvbmVudCAqLworCWlmIChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpCisJCXJldHVybjsKKworCXNtaWQgPSBtcHQyc2FzX2Jhc2VfZ2V0X3NtaWRfaHByKGlvYywgaW9jLT50bV90cl9jYl9pZHgpOworCWlmICghc21pZCkgeworCQlkZWxheWVkX3RyID0ga3phbGxvYyhzaXplb2YoKmRlbGF5ZWRfdHIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkZWxheWVkX3RyKQorCQkJcmV0dXJuOworCQlJTklUX0xJU1RfSEVBRCgmZGVsYXllZF90ci0+bGlzdCk7CisJCWRlbGF5ZWRfdHItPmhhbmRsZSA9IGhhbmRsZTsKKwkJZGVsYXllZF90ci0+c3RhdGUgPSBNUFQyU0FTX1JFUV9TQVNfQ05UUkw7CisJCWxpc3RfYWRkX3RhaWwoJmRlbGF5ZWRfdHItPmxpc3QsCisJCSAgICAmaW9jLT5kZWxheWVkX3RyX2xpc3QpOworCQlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJCWRld3RwcmludGsoaW9jLCBzdGFyZ2V0X3ByaW50ayhLRVJOX0lORk8sCisJCQkgICAgc2FzX2RldmljZS0+c3RhcmdldCwgIkRFTEFZRUQ6dHI6aGFuZGxlKDB4JTA0eCksICIKKwkJCSAgICAiKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQtPmhvc3RkYXRhKSB7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGE7CisJCXNhc190YXJnZXRfcHJpdl9kYXRhLT50bV9idXN5ID0gMTsKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cjpoYW5kbGUoMHglMDR4KSwgKG9wZW4pXG4iLCBzYXNfZGV2aWNlLT5oYW5kbGUpKTsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcXVlc3RfdCkpOworCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9UQVNLX01HTVQ7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IGNwdV90b19sZTE2KGhhbmRsZSk7CisJbXBpX3JlcXVlc3QtPlRhc2tUeXBlID0gTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfVEFSR0VUX1JFU0VUOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9UUl9TRU5EOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVDJTQVNfUkVRX1NBU19DTlRSTDsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfaGlfcHJpb3JpdHkoaW9jLCBzbWlkKTsKK30KKworCisKKy8qKgorICogX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlIC0gY29tcGxldGlvbiByb3V0aW5lCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CisgKiBAbXNpeF9pbmRleDogTVNJWCB0YWJsZSBpbmRleCBzdXBwbGllZCBieSB0aGUgT1MKKyAqIEByZXBseTogcmVwbHkgbWVzc2FnZSBmcmFtZShsb3dlciAzMmJpdCBhZGRyKQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogVGhpcyBpcyB0aGUgc2FzIGlvdW5pdCBjb250cm9sbCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsCisgICAgdTggbXNpeF9pbmRleCwgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNhc0lvVW5pdENvbnRyb2xSZXBseV90ICptcGlfcmVwbHkgPQorCSAgICBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCXNhc19kZXZpY2UgPSBfc2NzaWhfc2FzX2RldmljZV9maW5kX2J5X2hhbmRsZShpb2MsIGhhbmRsZSk7CisJaWYgKCFzYXNfZGV2aWNlKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBmYWlsZWQgZmluZGluZyBzYXNfZGV2aWNlXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAxOworCX0KKwlzYXNfZGV2aWNlLT5zdGF0ZSB8PSBNUFRTQVNfU1RBVEVfQ05UUkxfQ09NUExFVEU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzYXNfZGV2aWNlLT5zdGFyZ2V0KQorCQlkZXd0cHJpbnRrKGlvYywgc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAorCQkgICAgInNjX2NvbXBsZXRlOmhhbmRsZSgweCUwNHgpLCAiCisJCSAgICAiaW9jX3N0YXR1cygweCUwNHgpLCBsb2dpbmZvKDB4JTA4eClcbiIsCisJCSAgICBoYW5kbGUsIGxlMTZfdG9fY3B1KG1waV9yZXBseS0+SU9DU3RhdHVzKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1waV9yZXBseS0+SU9DTG9nSW5mbykpKTsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBfc2NzaWhfdG1fdHJfY29tcGxldGUgLQorICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CisgKiBAc21pZDogc3lzdGVtIHJlcXVlc3QgbWVzc2FnZSBpbmRleAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCisgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKKyAqIENvbnRleHQ6IGludGVycnVwdCB0aW1lLgorICoKKyAqIFRoaXMgaXMgdGhlIHRhcmdldCByZXNldCBjb21wbGV0aW9uIHJvdXRpbmUuCisgKiBUaGlzIGNvZGUgaXMgcGFydCBvZiB0aGUgY29kZSB0byBpbml0aWF0ZSB0aGUgZGV2aWNlIHJlbW92YWwKKyAqIGhhbmRzaGFrZSBwcm90b2NhbCB3aXRoIGNvbnRyb2xsZXIgZmlybXdhcmUuCisgKiBJdCB3aWxsIHNlbmQgYSBzYXMgaW91bml0IGNvbnRyb2xsIHJlcXVlc3QgKE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0UpCisgKgorICogUmV0dXJuIDEgbWVhbmluZyBtZiBzaG91bGQgYmUgZnJlZWQgZnJvbSBfYmFzZV9pbnRlcnJ1cHQKKyAqICAgICAgICAwIG1lYW5zIHRoZSBtZiBpcyBmcmVlZCBmcm9tIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB1OAorX3Njc2loX3RtX3RyX2NvbXBsZXRlKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCisgICAgdTMyIHJlcGx5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IGhhbmRsZTsKKwlzdHJ1Y3QgX3Nhc19kZXZpY2UgKnNhc19kZXZpY2U7CisJTXBpMlNDU0lUYXNrTWFuYWdlbWVudFJlcGx5X3QgKm1waV9yZXBseSA9CisJICAgIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOworCU1waTJTYXNJb1VuaXRDb250cm9sUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKKwl1MTYgc21pZF9zYXNfY3RybDsKKwlzdHJ1Y3QgTVBUMlNBU19UQVJHRVQgKnNhc190YXJnZXRfcHJpdl9kYXRhOworCXN0cnVjdCBfdHJfbGlzdCAqZGVsYXllZF90cjsKKwl1OCByYzsKKworCWhhbmRsZSA9IGxlMTZfdG9fY3B1KG1waV9yZXBseS0+RGV2SGFuZGxlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfZGV2aWNlX2xvY2ssIGZsYWdzKTsKKwlzYXNfZGV2aWNlID0gX3Njc2loX3Nhc19kZXZpY2VfZmluZF9ieV9oYW5kbGUoaW9jLCBoYW5kbGUpOworCWlmICghc2FzX2RldmljZSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNhc19kZXZpY2VfbG9jaywgZmxhZ3MpOworCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZmFpbGVkIGZpbmRpbmcgc2FzX2RldmljZVxuIiwKKwkJICAgIGlvYy0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gMTsKKwl9CisJc2FzX2RldmljZS0+c3RhdGUgfD0gTVBUU0FTX1NUQVRFX1RSX0NPTVBMRVRFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX2RldmljZV9sb2NrLCBmbGFncyk7CisKKwlpZiAoc2FzX2RldmljZS0+c3RhcmdldCkKKwkJZGV3dHByaW50ayhpb2MsIHN0YXJnZXRfcHJpbnRrKEtFUk5fSU5GTywgc2FzX2RldmljZS0+c3RhcmdldCwKKwkJICAgICJ0cl9jb21wbGV0ZTpoYW5kbGUoMHglMDR4KSwgKCVzKSBpb2Nfc3RhdHVzKDB4JTA0eCksICIKKwkJICAgICJsb2dpbmZvKDB4JTA4eCksIGNvbXBsZXRlZCglZClcbiIsCisJCSAgICBzYXNfZGV2aWNlLT5oYW5kbGUsIChzYXNfZGV2aWNlLT5zdGF0ZSAmCisJCSAgICBNUFQyU0FTX1JFUV9TQVNfQ05UUkwpID8gIm9wZW4iIDogImFjdGl2ZSIsCisJCSAgICBsZTE2X3RvX2NwdShtcGlfcmVwbHktPklPQ1N0YXR1cyksCisJCSAgICBsZTMyX3RvX2NwdShtcGlfcmVwbHktPklPQ0xvZ0luZm8pLAorCQkgICAgbGUzMl90b19jcHUobXBpX3JlcGx5LT5UZXJtaW5hdGlvbkNvdW50KSkpOworCisJaWYgKHNhc19kZXZpY2UtPnN0YXJnZXQgJiYgc2FzX2RldmljZS0+c3RhcmdldC0+aG9zdGRhdGEpIHsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEgPSBzYXNfZGV2aWNlLT5zdGFyZ2V0LT5ob3N0ZGF0YTsKKwkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOworCX0KKworCWlmICghbGlzdF9lbXB0eSgmaW9jLT5kZWxheWVkX3RyX2xpc3QpKSB7CisJCWRlbGF5ZWRfdHIgPSBsaXN0X2VudHJ5KGlvYy0+ZGVsYXllZF90cl9saXN0Lm5leHQsCisJCSAgICBzdHJ1Y3QgX3RyX2xpc3QsIGxpc3QpOworCQltcHQyc2FzX2Jhc2VfZnJlZV9zbWlkKGlvYywgc21pZCk7CisJCWlmIChkZWxheWVkX3RyLT5zdGF0ZSAmIE1QVDJTQVNfUkVRX1NBU19DTlRSTCkKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgZGVsYXllZF90ci0+aGFuZGxlKTsKKwkJbGlzdF9kZWwoJmRlbGF5ZWRfdHItPmxpc3QpOworCQlrZnJlZShkZWxheWVkX3RyKTsKKwkJcmMgPSAwOyAvKiB0ZWxscyBiYXNlX2ludGVycnVwdCBub3QgdG8gZnJlZSBtZiAqLworCX0gZWxzZQorCQlyYyA9IDE7CisKKworCWlmICghKHNhc19kZXZpY2UtPnN0YXRlICYgTVBUMlNBU19SRVFfU0FTX0NOVFJMKSkKKwkJcmV0dXJuIHJjOworCisJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpIHsKKwkJcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBob3N0IHJlc2V0IGluIHByb2dyZXNzIVxuIiwKKwkJICAgIF9fZnVuY19fLCBpb2MtPm5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc21pZF9zYXNfY3RybCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZChpb2MsIGlvYy0+dG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwlpZiAoIXNtaWRfc2FzX2N0cmwpIHsKKwkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAorCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiByYzsKKwl9CisKKwltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZF9zYXNfY3RybCk7CisJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC0+RnVuY3Rpb24gPSBNUEkyX0ZVTkNUSU9OX1NBU19JT19VTklUX0NPTlRST0w7CisJbXBpX3JlcXVlc3QtPk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CisJbXBpX3JlcXVlc3QtPkRldkhhbmRsZSA9IG1waV9yZXBseS0+RGV2SGFuZGxlOworCXNhc19kZXZpY2UtPnN0YXRlIHw9IE1QVFNBU19TVEFURV9DTlRSTF9TRU5EOworCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9kZWZhdWx0KGlvYywgc21pZF9zYXNfY3RybCk7CisJcmV0dXJuIHJjOworfQorCisvKioKICAqIF9zY3NpaF9jaGVja190b3BvX2RlbGV0ZV9ldmVudHMgLSBzYW5pdHkgY2hlY2sgb24gdG9wbyBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQGV2ZW50X2RhdGE6IHRoZSBldmVudCBkYXRhIHBheWxvYWQKQEAgLTIzNzUsNiArMjU2MywyMSBAQAogCXUxNiBleHBhbmRlcl9oYW5kbGU7CiAJc3RydWN0IF9zYXNfbm9kZSAqc2FzX2V4cGFuZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIHJlYXNvbl9jb2RlOworCXUxNiBoYW5kbGU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IGV2ZW50X2RhdGEtPk51bUVudHJpZXM7IGkrKykgeworCQlpZiAoZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1BIWVNUQVRVU19WQUNBTlQpCisJCQljb250aW51ZTsKKwkJaGFuZGxlID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+UEhZW2ldLkF0dGFjaGVkRGV2SGFuZGxlKTsKKwkJaWYgKCFoYW5kbGUpCisJCQljb250aW51ZTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKHJlYXNvbl9jb2RlID09IE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfVEFSR19OT1RfUkVTUE9ORElORykKKwkJCV9zY3NpaF90bV90cl9zZW5kKGlvYywgaGFuZGxlKTsKKwl9CiAKIAlleHBhbmRlcl9oYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5FeHBhbmRlckRldkhhbmRsZSk7CiAJaWYgKGV4cGFuZGVyX2hhbmRsZSA8IGlvYy0+c2FzX2hiYS5udW1fcGh5cykgewpAQCAtMjQzMyw4ICsyNjM2LDggQEAKIAl1MTYgc21pZDsKIAl1MTYgY291bnQgPSAwOwogCi0JZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnJlcXVlc3RfZGVwdGg7IHNtaWQrKykgewotCQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldGNsZWFyKGlvYywgc21pZCk7CisJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMjYxNiw3ICsyODE5LDcgQEAKIAlpZiAoKHNhc19kZXZpY2VfcHJpdl9kYXRhLT5mbGFncyAmIE1QVF9ERVZJQ0VfVExSX09OKSkKIAkJbXBpX2NvbnRyb2wgfD0gTVBJMl9TQ1NJSU9fQ09OVFJPTF9UTFJfT047CiAKLQlzbWlkID0gbXB0MnNhc19iYXNlX2dldF9zbWlkKGlvYywgaW9jLT5zY3NpX2lvX2NiX2lkeCk7CisJc21pZCA9IG1wdDJzYXNfYmFzZV9nZXRfc21pZF9zY3NpaW8oaW9jLCBpb2MtPnNjc2lfaW9fY2JfaWR4LCBzY21kKTsKIAlpZiAoIXNtaWQpIHsKIAkJcHJpbnRrKE1QVDJTQVNfRVJSX0ZNVCAiJXM6IGZhaWxlZCBvYnRhaW5pbmcgYSBzbWlkXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX2Z1bmNfXyk7CkBAIC0yNjQzLDcgKzI4NDYsOCBAQAogCW1waV9yZXF1ZXN0LT5TR0xPZmZzZXQwID0gb2Zmc2V0b2YoTXBpMlNDU0lJT1JlcXVlc3RfdCwgU0dMKSAvIDQ7CiAJbXBpX3JlcXVlc3QtPlNHTEZsYWdzID0gY3B1X3RvX2xlMTYoTVBJMl9TQ1NJSU9fU0dMRkxBR1NfVFlQRV9NUEkgKwogCSAgICBNUEkyX1NDU0lJT19TR0xGTEFHU19TWVNURU1fQUREUik7Ci0KKwltcGlfcmVxdWVzdC0+VkZfSUQgPSAwOyAvKiBUT0RPICovCisJbXBpX3JlcXVlc3QtPlZQX0lEID0gMDsKIAlpbnRfdG9fc2NzaWx1bihzYXNfZGV2aWNlX3ByaXZfZGF0YS0+bHVuLCAoc3RydWN0IHNjc2lfbHVuICopCiAJICAgIG1waV9yZXF1ZXN0LT5MVU4pOwogCW1lbWNweShtcGlfcmVxdWVzdC0+Q0RCLkNEQjMyLCBzY21kLT5jbW5kLCBzY21kLT5jbWRfbGVuKTsKQEAgLTI2NTcsOCArMjg2MSw3IEBACiAJCX0KIAl9CiAKLQlfc2NzaWhfc2NzaV9sb29rdXBfc2V0KGlvYywgc21pZCwgc2NtZCk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX3Njc2lfaW8oaW9jLCBzbWlkLCAwLAorCW1wdDJzYXNfYmFzZV9wdXRfc21pZF9zY3NpX2lvKGlvYywgc21pZCwKIAkgICAgc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQtPmhhbmRsZSk7CiAJcmV0dXJuIDA7CiAKQEAgLTI5NTQsMTUgKzMxNTcsMTYgQEAKICAqIF9zY3NpaF9pb19kb25lIC0gc2NzaSByZXF1ZXN0IGNhbGxiYWNrCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4Ci0gKiBAVkZfSUQ6IHZpcnR1YWwgZnVuY3Rpb24gaWQKKyAqIEBtc2l4X2luZGV4OiBNU0lYIHRhYmxlIGluZGV4IHN1cHBsaWVkIGJ5IHRoZSBPUwogICogQHJlcGx5OiByZXBseSBtZXNzYWdlIGZyYW1lKGxvd2VyIDMyYml0IGFkZHIpCiAgKgotICogQ2FsbGJhY2sgaGFuZGxlciB3aGVuIHVzaW5nIHNjc2loX3FjbWQuCisgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gdXNpbmcgX3Njc2loX3FjbWQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIHZvaWQKLV9zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IFZGX0lELCB1MzIgcmVwbHkpCitzdGF0aWMgdTgKK19zY3NpaF9pb19kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsIHUzMiByZXBseSkKIHsKIAlNcGkyU0NTSUlPUmVxdWVzdF90ICptcGlfcmVxdWVzdDsKIAlNcGkyU0NTSUlPUmVwbHlfdCAqbXBpX3JlcGx5OwpAQCAtMjk3Niw5ICszMTgwLDkgQEAKIAl1MzIgcmVzcG9uc2VfY29kZTsKIAogCW1waV9yZXBseSA9IG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwotCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0Y2xlYXIoaW9jLCBzbWlkKTsKKwlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOwogCWlmIChzY21kID09IE5VTEwpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAKIAltcGlfcmVxdWVzdCA9IG1wdDJzYXNfYmFzZV9nZXRfbXNnX2ZyYW1lKGlvYywgc21pZCk7CiAKQEAgLTMxMzQsNiArMzMzOCw3IEBACiAgb3V0OgogCXNjc2lfZG1hX3VubWFwKHNjbWQpOwogCXNjbWQtPnNjc2lfZG9uZShzY21kKTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqCkBAIC0zMzk4LDkgKzM2MDMsOCBAQAogCQl9CiAJfQogCi0Jc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zYXNfbm9kZV9sb2NrLCBmbGFncyk7CisJc2FzX2FkZHJlc3MgPSBsZTY0X3RvX2NwdShleHBhbmRlcl9wZzAuU0FTQWRkcmVzcyk7CiAJc2FzX2V4cGFuZGVyID0gbXB0MnNhc19zY3NpaF9leHBhbmRlcl9maW5kX2J5X3Nhc19hZGRyZXNzKGlvYywKIAkgICAgc2FzX2FkZHJlc3MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2FzX25vZGVfbG9jaywgZmxhZ3MpOwpAQCAtMzY2Niw2ICszODcwLDEyIEBACiAJaWYgKGlvYy0+cmVtb3ZlX2hvc3QpCiAJCWdvdG8gb3V0OwogCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9UUl9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAidGFyZ2V0X3Jlc2V0IGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIHNraXBfdHI7CisJfQorCiAJLyogVGFyZ2V0IFJlc2V0IHRvIGZsdXNoIG91dCBhbGwgdGhlIG91dHN0YW5kaW5nIElPICovCiAJZGV2aWNlX2hhbmRsZSA9IChzYXNfZGV2aWNlLT5oaWRkZW5fcmFpZF9jb21wb25lbnQpID8KIAkgICAgc2FzX2RldmljZS0+dm9sdW1lX2hhbmRsZSA6IGhhbmRsZTsKQEAgLTM2ODIsNiArMzg5MiwxMyBAQAogCQlpZiAoaW9jLT5zaG9zdF9yZWNvdmVyeSkKIAkJCWdvdG8gb3V0OwogCX0KKyBza2lwX3RyOgorCisJaWYgKChzYXNfZGV2aWNlLT5zdGF0ZSAmIE1QVFNBU19TVEFURV9DTlRSTF9DT01QTEVURSkpIHsKKwkJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJcdHNraXAgIgorCQkgICAic2FzX2NudHJsIGhhbmRsZSgweCUwNHgpXG4iLCBpb2MtPm5hbWUsIGhhbmRsZSkpOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBTQVNfSU9fVU5JVF9DTlRSIC0gc2VuZCBSRU1PVkVfREVWSUNFICovCiAJZGV3dHByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICJzYXNfaW91bml0OiBoYW5kbGUiCkBAIC0zNjkwLDcgKzM5MDcsOCBAQAogCW1waV9yZXF1ZXN0LkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TQVNfSU9fVU5JVF9DT05UUk9MOwogCW1waV9yZXF1ZXN0Lk9wZXJhdGlvbiA9IE1QSTJfU0FTX09QX1JFTU9WRV9ERVZJQ0U7CiAJbXBpX3JlcXVlc3QuRGV2SGFuZGxlID0gaGFuZGxlOwotCW1waV9yZXF1ZXN0LlZGX0lEID0gMDsKKwltcGlfcmVxdWVzdC5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC5WUF9JRCA9IDA7CiAJaWYgKChtcHQyc2FzX2Jhc2Vfc2FzX2lvdW5pdF9jb250cm9sKGlvYywgJm1waV9yZXBseSwKIAkgICAgJm1waV9yZXF1ZXN0KSkgIT0gMCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLApAQCAtMzgwMCwxNSArNDAxOCwxMiBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudCAtIGhhbmRsZSB0b3BvbG9neSBjaGFuZ2VzCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDoKLSAqIEBldmVudF9kYXRhOiBldmVudCBkYXRhIHBheWxvYWQKLSAqIGZ3X2V2ZW50OgorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICovCiBzdGF0aWMgdm9pZAotX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzVG9wb2xvZ3lDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEsCitfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCiAgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCWludCBpOwpAQCAtMzgxOCw2ICs0MDMzLDcgQEAKIAlzdHJ1Y3QgX3Nhc19ub2RlICpzYXNfZXhwYW5kZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBsaW5rX3JhdGVfOworCU1waTJFdmVudERhdGFTYXNUb3BvbG9neUNoYW5nZUxpc3RfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCkBAIC0zODUxLDE1ICs0MDY3LDE2IEBACiAJCX0KIAkJaWYgKGlvYy0+c2hvc3RfcmVjb3ZlcnkpCiAJCQlyZXR1cm47Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKKwkJcGh5X251bWJlciA9IGV2ZW50X2RhdGEtPlN0YXJ0UGh5TnVtICsgaTsKKwkJcmVhc29uX2NvZGUgPSBldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfTUFTSzsKKwkJaWYgKChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKKwkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkgJiYgKHJlYXNvbl9jb2RlICE9CisJCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX1RBUkdfTk9UX1JFU1BPTkRJTkcpKQogCQkJY29udGludWU7CiAJCWhhbmRsZSA9IGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlBIWVtpXS5BdHRhY2hlZERldkhhbmRsZSk7CiAJCWlmICghaGFuZGxlKQogCQkJY29udGludWU7Ci0JCXBoeV9udW1iZXIgPSBldmVudF9kYXRhLT5TdGFydFBoeU51bSArIGk7Ci0JCXJlYXNvbl9jb2RlID0gZXZlbnRfZGF0YS0+UEhZW2ldLlBoeVN0YXR1cyAmCi0JCSAgICBNUEkyX0VWRU5UX1NBU19UT1BPX1JDX01BU0s7CiAJCWxpbmtfcmF0ZV8gPSBldmVudF9kYXRhLT5QSFlbaV0uTGlua1JhdGUgPj4gNDsKIAkJc3dpdGNoIChyZWFzb25fY29kZSkgewogCQljYXNlIE1QSTJfRVZFTlRfU0FTX1RPUE9fUkNfUEhZX0NIQU5HRUQ6CkBAIC0zOTcxLDE5ICs0MTg4LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnQgLSBoYW5kbGUgZGV2aWNlIHN0YXR1cyBjaGFuZ2UKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YVNhc0RldmljZVN0YXR1c0NoYW5nZV90ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQotCQlfc2NzaWhfc2FzX2RldmljZV9zdGF0dXNfY2hhbmdlX2V2ZW50X2RlYnVnKGlvYywgZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfZGV2aWNlX3N0YXR1c19jaGFuZ2VfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCkBAIC00MDI2LDM0ICs0MjQzLDMzIEBACiAvKioKICAqIF9zY3NpaF9zYXNfZW5jbG9zdXJlX2Rldl9zdGF0dXNfY2hhbmdlX2V2ZW50IC0gaGFuZGxlIGVuY2xvc3VyZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCiBfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCi0gICAgdTggVkZfSUQsIE1waTJFdmVudERhdGFTYXNFbmNsRGV2U3RhdHVzQ2hhbmdlX3QgKmV2ZW50X2RhdGEpCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudF9kZWJ1Zyhpb2MsCi0JCSAgICAgZXZlbnRfZGF0YSk7CisJCSAgICAgZndfZXZlbnQtPmV2ZW50X2RhdGEpOwogI2VuZGlmCiB9CiAKIC8qKgogICogX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50IC0gaGFuZGxlIGJyb2FkY2FzdCBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2Jyb2FkY2FzdF9wcmltYXRpdmVfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwogCXUxNiBzbWlkLCBoYW5kbGU7CkBAIC00MDYyLDExICs0Mjc4LDEyIEBACiAJdTMyIHRlcm1pbmF0aW9uX2NvdW50OwogCXUzMiBxdWVyeV9jb3VudDsKIAlNcGkyU0NTSVRhc2tNYW5hZ2VtZW50UmVwbHlfdCAqbXBpX3JlcGx5OwotCisjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCisJTXBpMkV2ZW50RGF0YVNhc0Jyb2FkY2FzdFByaW1pdGl2ZV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisjZW5kaWYKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICJicm9hZGNhc3QgcHJpbWF0aXZlOiAiCiAJICAgICJwaHkgbnVtYmVyKCVkKSwgd2lkdGgoJWQpXG4iLCBpb2MtPm5hbWUsIGV2ZW50X2RhdGEtPlBoeU51bSwKIAkgICAgZXZlbnRfZGF0YS0+UG9ydFdpZHRoKSk7Ci0KIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwogCkBAIC00MDc0LDcgKzQyOTEsNyBAQAogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwotCWZvciAoc21pZCA9IDE7IHNtaWQgPD0gaW9jLT5yZXF1ZXN0X2RlcHRoOyBzbWlkKyspIHsKKwlmb3IgKHNtaWQgPSAxOyBzbWlkIDw9IGlvYy0+c2NzaWlvX2RlcHRoOyBzbWlkKyspIHsKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7CkBAIC00MTIxLDIzICs0MzM4LDI1IEBACiAvKioKICAqIF9zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50IC0gaGFuZGxlIGRpc2NvdmVyeSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFTYXNEaXNjb3ZlcnlfdCAqZXZlbnRfZGF0YSkKK19zY3NpaF9zYXNfZGlzY292ZXJ5X2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CisJTXBpMkV2ZW50RGF0YVNhc0Rpc2NvdmVyeV90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CisKICNpZmRlZiBDT05GSUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcKIAlpZiAoaW9jLT5sb2dnaW5nX2xldmVsICYgTVBUX0RFQlVHX0VWRU5UX1dPUktfVEFTSykgewogCQlwcmludGsoTVBUMlNBU19ERUJVR19GTVQgImRpc2NvdmVyeSBldmVudDogKCVzKSIsIGlvYy0+bmFtZSwKIAkJICAgIChldmVudF9kYXRhLT5SZWFzb25Db2RlID09IE1QSTJfRVZFTlRfU0FTX0RJU0NfUkNfU1RBUlRFRCkgPwogCQkgICAgInN0YXJ0IiA6ICJzdG9wIik7CiAJaWYgKGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykKLQkJcHJpbnRrKE1QVDJTQVNfREVCVUdfRk1UICIsIGRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCi0JCSAgICBpb2MtPm5hbWUsIGxlMzJfdG9fY3B1KGV2ZW50X2RhdGEtPkRpc2NvdmVyeVN0YXR1cykpOworCQlwcmludGsoImRpc2NvdmVyeV9zdGF0dXMoMHglMDh4KSIsCisJCSAgICBsZTMyX3RvX2NwdShldmVudF9kYXRhLT5EaXNjb3ZlcnlTdGF0dXMpKTsKIAlwcmludGsoIlxuIik7CiAJfQogI2VuZGlmCkBAIC00NDg4LDE5ICs0NzA3LDE5IEBACiAvKioKICAqIF9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudCAtIGhhbmRsZSBpciBjb25maWd1cmF0aW9uIGNoYW5nZSBldmVudHMKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQFZGX0lEOgotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogUmV0dXJuIG5vdGhpbmcuCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1OCBWRl9JRCwKLSAgICBNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX2NvbmZpZ19jaGFuZ2VfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlNcGkyRXZlbnRJckNvbmZpZ0VsZW1lbnRfdCAqZWxlbWVudDsKIAlpbnQgaTsKIAl1OCBmb3JlaWduX2NvbmZpZzsKKwlNcGkyRXZlbnREYXRhSXJDb25maWdDaGFuZ2VMaXN0X3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKIAogI2lmZGVmIENPTkZJR19TQ1NJX01QVDJTQVNfTE9HR0lORwogCWlmIChpb2MtPmxvZ2dpbmdfbGV2ZWwgJiBNUFRfREVCVUdfRVZFTlRfV09SS19UQVNLKQpAQCAtNDU0MywxNCArNDc2MiwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudCAtIElSIHZvbHVtZSBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfdm9sdW1lX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTggVkZfSUQsCi0gICAgTXBpMkV2ZW50RGF0YUlyVm9sdW1lX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsCisgICAgc3RydWN0IGZ3X2V2ZW50X3dvcmsgKmZ3X2V2ZW50KQogewogCXU2NCB3d2lkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NTU5LDYgKzQ3NzgsNyBAQAogCXUzMiBzdGF0ZTsKIAlpbnQgcmM7CiAJc3RydWN0IE1QVDJTQVNfVEFSR0VUICpzYXNfdGFyZ2V0X3ByaXZfZGF0YTsKKwlNcGkyRXZlbnREYXRhSXJWb2x1bWVfdCAqZXZlbnRfZGF0YSA9IGZ3X2V2ZW50LT5ldmVudF9kYXRhOwogCiAJaWYgKGV2ZW50X2RhdGEtPlJlYXNvbkNvZGUgIT0gTVBJMl9FVkVOVF9JUl9WT0xVTUVfUkNfU1RBVEVfQ0hBTkdFRCkKIAkJcmV0dXJuOwpAQCAtNDYyOCwxNCArNDg0OCwxNCBAQAogLyoqCiAgKiBfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQgLSBQRCBldmVudAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgTXBpMkV2ZW50RGF0YUlyUGh5c2ljYWxEaXNrX3QgKmV2ZW50X2RhdGEpCitfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAl1MTYgaGFuZGxlOwogCXUzMiBzdGF0ZTsKQEAgLTQ2NDQsNiArNDg2NCw3IEBACiAJTXBpMkNvbmZpZ1JlcGx5X3QgbXBpX3JlcGx5OwogCU1waTJTYXNEZXZpY2VQYWdlMF90IHNhc19kZXZpY2VfcGcwOwogCXUzMiBpb2Nfc3RhdHVzOworCU1waTJFdmVudERhdGFJclBoeXNpY2FsRGlza190ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPSBNUEkyX0VWRU5UX0lSX1BIWVNESVNLX1JDX1NUQVRFX0NIQU5HRUQpCiAJCXJldHVybjsKQEAgLTQ3NDMsMzMgKzQ5NjQsMzMgQEAKIC8qKgogICogX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50IC0gaGFuZGxlIFJBSUQgb3BlcmF0aW9uIGV2ZW50cwogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0Ci0gKiBAVkZfSUQ6Ci0gKiBAZXZlbnRfZGF0YTogZXZlbnQgZGF0YSBwYXlsb2FkCisgKiBAZndfZXZlbnQ6IFRoZSBmd19ldmVudF93b3JrIG9iamVjdAogICogQ29udGV4dDogdXNlci4KICAqCiAgKiBSZXR1cm4gbm90aGluZy4KICAqLwogc3RhdGljIHZvaWQKLV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFJck9wZXJhdGlvblN0YXR1c190ICpldmVudF9kYXRhKQorX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKyAgICBzdHJ1Y3QgZndfZXZlbnRfd29yayAqZndfZXZlbnQpCiB7CiAjaWZkZWYgQ09ORklHX1NDU0lfTVBUMlNBU19MT0dHSU5HCiAJaWYgKGlvYy0+bG9nZ2luZ19sZXZlbCAmIE1QVF9ERUJVR19FVkVOVF9XT1JLX1RBU0spCi0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudF9kZWJ1Zyhpb2MsIGV2ZW50X2RhdGEpOworCQlfc2NzaWhfc2FzX2lyX29wZXJhdGlvbl9zdGF0dXNfZXZlbnRfZGVidWcoaW9jLAorCQkgICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKICNlbmRpZgogfQogCiAvKioKICAqIF9zY3NpaF90YXNrX3NldF9mdWxsIC0gaGFuZGxlIHRhc2sgc2V0IGZ1bGwKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAotICogQGV2ZW50X2RhdGE6IGV2ZW50IGRhdGEgcGF5bG9hZAorICogQGZ3X2V2ZW50OiBUaGUgZndfZXZlbnRfd29yayBvYmplY3QKICAqIENvbnRleHQ6IHVzZXIuCiAgKgogICogVGhyb3R0bGUgYmFjayBxZGVwdGguCiAgKi8KIHN0YXRpYyB2b2lkCi1fc2NzaWhfdGFza19zZXRfZnVsbChzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELAotICAgIE1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhKQorX3Njc2loX3Rhc2tfc2V0X2Z1bGwoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBzdHJ1Y3QgZndfZXZlbnRfd29yaworCSpmd19ldmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBfc2FzX2RldmljZSAqc2FzX2RldmljZTsKQEAgLTQ3ODAsNiArNTAwMSw3IEBACiAJdTE2IGhhbmRsZTsKIAlpbnQgaWQsIGNoYW5uZWw7CiAJdTY0IHNhc19hZGRyZXNzOworCU1waTJFdmVudERhdGFUYXNrU2V0RnVsbF90ICpldmVudF9kYXRhID0gZndfZXZlbnQtPmV2ZW50X2RhdGE7CiAKIAljdXJyZW50X2RlcHRoID0gbGUxNl90b19jcHUoZXZlbnRfZGF0YS0+Q3VycmVudERlcHRoKTsKIAloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5EZXZIYW5kbGUpOwpAQCAtNDg2OCw2ICs1MDkwLDEwIEBACiAJCWlmIChzYXNfZGV2aWNlLT5zYXNfYWRkcmVzcyA9PSBzYXNfYWRkcmVzcyAmJgogCQkgICAgc2FzX2RldmljZS0+c2xvdCA9PSBzbG90ICYmIHNhc19kZXZpY2UtPnN0YXJnZXQpIHsKIAkJCXNhc19kZXZpY2UtPnJlc3BvbmRpbmcgPSAxOworCQkJc2FzX2RldmljZS0+c3RhdGUgPSAwOworCQkJc3RhcmdldCA9IHNhc19kZXZpY2UtPnN0YXJnZXQ7CisJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YSA9IHN0YXJnZXQtPmhvc3RkYXRhOworCQkJc2FzX3RhcmdldF9wcml2X2RhdGEtPnRtX2J1c3kgPSAwOwogCQkJc3RhcmdldF9wcmludGsoS0VSTl9JTkZPLCBzYXNfZGV2aWNlLT5zdGFyZ2V0LAogCQkJICAgICJoYW5kbGUoMHglMDR4KSwgc2FzX2FkZHIoMHglMDE2bGx4KSwgZW5jbG9zdXJlICIKIAkJCSAgICAibG9naWNhbCBpZCgweCUwMTZsbHgpLCBzbG90KCVkKVxuIiwgaGFuZGxlLApAQCAtNDg4MCw4ICs1MTA2LDYgQEAKIAkJCXByaW50ayhLRVJOX0lORk8gIlx0aGFuZGxlIGNoYW5nZWQgZnJvbSgweCUwNHgpISEhXG4iLAogCQkJICAgIHNhc19kZXZpY2UtPmhhbmRsZSk7CiAJCQlzYXNfZGV2aWNlLT5oYW5kbGUgPSBoYW5kbGU7Ci0JCQlzdGFyZ2V0ID0gc2FzX2RldmljZS0+c3RhcmdldDsKLQkJCXNhc190YXJnZXRfcHJpdl9kYXRhID0gc3RhcmdldC0+aG9zdGRhdGE7CiAJCQlzYXNfdGFyZ2V0X3ByaXZfZGF0YS0+aGFuZGxlID0gaGFuZGxlOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTUyMjcsNDQgKzU0NTEsMzggQEAKIAogCXN3aXRjaCAoZndfZXZlbnQtPmV2ZW50KSB7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19UT1BPTE9HWV9DSEFOR0VfTElTVDoKLQkJX3Njc2loX3Nhc190b3BvbG9neV9jaGFuZ2VfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSwgZndfZXZlbnQpOworCQlfc2NzaWhfc2FzX3RvcG9sb2d5X2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19ERVZJQ0VfU1RBVFVTX0NIQU5HRToKLQkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kZXZpY2Vfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCisJCSAgICBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9TQVNfRElTQ09WRVJZOgotCQlfc2NzaWhfc2FzX2Rpc2NvdmVyeV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19kaXNjb3ZlcnlfZXZlbnQoaW9jLAorCQkgICAgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfU0FTX0JST0FEQ0FTVF9QUklNSVRJVkU6Ci0JCV9zY3NpaF9zYXNfYnJvYWRjYXN0X3ByaW1hdGl2ZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19icm9hZGNhc3RfcHJpbWF0aXZlX2V2ZW50KGlvYywKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX1NBU19FTkNMX0RFVklDRV9TVEFUVVNfQ0hBTkdFOgogCQlfc2NzaWhfc2FzX2VuY2xvc3VyZV9kZXZfc3RhdHVzX2NoYW5nZV9ldmVudChpb2MsCi0JCSAgICBmd19ldmVudC0+VkZfSUQsIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJICAgIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX0NPTkZJR1VSQVRJT05fQ0hBTkdFX0xJU1Q6Ci0JCV9zY3NpaF9zYXNfaXJfY29uZmlnX2NoYW5nZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9jb25maWdfY2hhbmdlX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfSVJfVk9MVU1FOgotCQlfc2NzaWhfc2FzX2lyX3ZvbHVtZV9ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl92b2x1bWVfZXZlbnQoaW9jLCBmd19ldmVudCk7CiAJCWJyZWFrOwogCWNhc2UgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLOgotCQlfc2NzaWhfc2FzX2lyX3BoeXNpY2FsX2Rpc2tfZXZlbnQoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF9zYXNfaXJfcGh5c2ljYWxfZGlza19ldmVudChpb2MsIGZ3X2V2ZW50KTsKIAkJYnJlYWs7CiAJY2FzZSBNUEkyX0VWRU5UX0lSX09QRVJBVElPTl9TVEFUVVM6Ci0JCV9zY3NpaF9zYXNfaXJfb3BlcmF0aW9uX3N0YXR1c19ldmVudChpb2MsIGZ3X2V2ZW50LT5WRl9JRCwKLQkJICAgIGZ3X2V2ZW50LT5ldmVudF9kYXRhKTsKKwkJX3Njc2loX3Nhc19pcl9vcGVyYXRpb25fc3RhdHVzX2V2ZW50KGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAljYXNlIE1QSTJfRVZFTlRfVEFTS19TRVRfRlVMTDoKLQkJX3Njc2loX3Rhc2tfc2V0X2Z1bGwoaW9jLCBmd19ldmVudC0+VkZfSUQsCi0JCSAgICBmd19ldmVudC0+ZXZlbnRfZGF0YSk7CisJCV9zY3NpaF90YXNrX3NldF9mdWxsKGlvYywgZndfZXZlbnQpOwogCQlicmVhazsKIAl9CiAJX3Njc2loX2Z3X2V2ZW50X2ZyZWUoaW9jLCBmd19ldmVudCk7CkBAIC01MjczLDE3ICs1NDkxLDE5IEBACiAvKioKICAqIG1wdDJzYXNfc2NzaWhfZXZlbnRfY2FsbGJhY2sgLSBmaXJtd2FyZSBldmVudCBoYW5kbGVyIChjYWxsZWQgYXQgSVNSIHRpbWUpCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqIENvbnRleHQ6IGludGVycnVwdC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG1lcmVseSBhZGRzIGEgbmV3IHdvcmsgdGFzayBpbnRvIGlvYy0+ZmlybXdhcmVfZXZlbnRfdGhyZWFkLgogICogVGhlIHRhc2tzIGFyZSB3b3JrZWQgZnJvbSBfZmlybXdhcmVfZXZlbnRfd29yayBpbiB1c2VyIGNvbnRleHQuCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IFZGX0lELCB1MzIgcmVwbHkpCit1OAorbXB0MnNhc19zY3NpaF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHU4IG1zaXhfaW5kZXgsCisJdTMyIHJlcGx5KQogewogCXN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudDsKIAlNcGkyRXZlbnROb3RpZmljYXRpb25SZXBseV90ICptcGlfcmVwbHk7CkBAIC01Mjk0LDExICs1NTE0LDExIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZndfZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChpb2MtPmZ3X2V2ZW50c19vZmYgfHwgaW9jLT5yZW1vdmVfaG9zdCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPmZ3X2V2ZW50X2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5md19ldmVudF9sb2NrLCBmbGFncyk7CiAKLQltcGlfcmVwbHkgPSAgbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CisJbXBpX3JlcGx5ID0gbXB0MnNhc19iYXNlX2dldF9yZXBseV92aXJ0X2FkZHIoaW9jLCByZXBseSk7CiAJZXZlbnQgPSBsZTE2X3RvX2NwdShtcGlfcmVwbHktPkV2ZW50KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTUzMTIsNyArNTUzMiw3IEBACiAJCWlmIChiYWVuX2RhdGEtPlByaW1pdGl2ZSAhPQogCQkgICAgTVBJMl9FVkVOVF9QUklNSVRJVkVfQVNZTkNIUk9OT1VTX0VWRU5UIHx8CiAJCSAgICBpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSkKLQkJCXJldHVybjsKKwkJCXJldHVybiAxOwogCQlpb2MtPmJyb2FkY2FzdF9hZW5fYnVzeSA9IDE7CiAJCWJyZWFrOwogCX0KQEAgLTUzMzQsMTQgKzU1NTQsMTQgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OiAvKiBpZ25vcmUgdGhlIHJlc3QgKi8KLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAKIAlmd19ldmVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmd19ldmVudF93b3JrKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmd19ldmVudCkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAl9CiAJZndfZXZlbnQtPmV2ZW50X2RhdGEgPQogCSAgICBremFsbG9jKG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQsIEdGUF9BVE9NSUMpOwpAQCAtNTM0OSwxNSArNTU2OSwxNyBAQAogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICJmYWlsdXJlIGF0ICVzOiVkLyVzKCkhXG4iLAogCQkgICAgaW9jLT5uYW1lLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKIAkJa2ZyZWUoZndfZXZlbnQpOwotCQlyZXR1cm47CisJCXJldHVybiAxOwogCX0KIAogCW1lbWNweShmd19ldmVudC0+ZXZlbnRfZGF0YSwgbXBpX3JlcGx5LT5FdmVudERhdGEsCiAJICAgIG1waV9yZXBseS0+RXZlbnREYXRhTGVuZ3RoKjQpOwogCWZ3X2V2ZW50LT5pb2MgPSBpb2M7Ci0JZndfZXZlbnQtPlZGX0lEID0gVkZfSUQ7CisJZndfZXZlbnQtPlZGX0lEID0gbXBpX3JlcGx5LT5WRl9JRDsKKwlmd19ldmVudC0+VlBfSUQgPSBtcGlfcmVwbHktPlZQX0lEOwogCWZ3X2V2ZW50LT5ldmVudCA9IGV2ZW50OwogCV9zY3NpaF9md19ldmVudF9hZGQoaW9jLCBmd19ldmVudCk7CisJcmV0dXJuIDE7CiB9CiAKIC8qIHNob3N0IHRlbXBsYXRlICovCkBAIC01NjE3LDcgKzU4MzksNyBAQAogfQogCiAvKioKLSAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgcmFpZCB2b2x1bWVzIHRvIHNhcyB0cmFuc3BvcnQKKyAqIF9zY3NpaF9wcm9iZV9zYXMgLSByZXBvcnRpbmcgc2FzIGRldmljZXMgdG8gc2FzIHRyYW5zcG9ydAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKgogICogQ2FsbGVkIGR1cmluZyBpbml0aWFsIGxvYWRpbmcgb2YgdGhlIGRyaXZlci4KQEAgLTU3MTQsNiArNTkzNiw4IEBACiAJaW9jLT5iYXNlX2NiX2lkeCA9IGJhc2VfY2JfaWR4OwogCWlvYy0+dHJhbnNwb3J0X2NiX2lkeCA9IHRyYW5zcG9ydF9jYl9pZHg7CiAJaW9jLT5jb25maWdfY2JfaWR4ID0gY29uZmlnX2NiX2lkeDsKKwlpb2MtPnRtX3RyX2NiX2lkeCA9IHRtX3RyX2NiX2lkeDsKKwlpb2MtPnRtX3Nhc19jb250cm9sX2NiX2lkeCA9IHRtX3Nhc19jb250cm9sX2NiX2lkeDsKIAlpb2MtPmxvZ2dpbmdfbGV2ZWwgPSBsb2dnaW5nX2xldmVsOwogCS8qIG1pc2Mgc2VtYXBob3JlcyBhbmQgc3BpbiBsb2NrcyAqLwogCXNwaW5fbG9ja19pbml0KCZpb2MtPmlvY19yZXNldF9pbl9wcm9ncmVzc19sb2NrKTsKQEAgLTU3MjksNiArNTk1Myw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+ZndfZXZlbnRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+cmFpZF9kZXZpY2VfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlvYy0+c2FzX2hiYS5zYXNfcG9ydF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW9jLT5kZWxheWVkX3RyX2xpc3QpOwogCiAJLyogaW5pdCBzaG9zdCBwYXJhbWV0ZXJzICovCiAJc2hvc3QtPm1heF9jbWRfbGVuID0gMTY7CkBAIC01NzQ1LDYgKzU5NzAsNyBAQAogCiAJc2NzaV9ob3N0X3NldF9wcm90KHNob3N0LCBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTgogCSAgICB8IFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OKTsKKwlzY3NpX2hvc3Rfc2V0X2d1YXJkKHNob3N0LCBTSE9TVF9ESVhfR1VBUkRfQ1JDKTsKIAogCS8qIGV2ZW50IHRocmVhZCAqLwogCXNucHJpbnRmKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSwgc2l6ZW9mKGlvYy0+ZmlybXdhcmVfZXZlbnRfbmFtZSksCkBAIC01ODk0LDYgKzYxMjAsMTEgQEAKIAkvKiBjdGwgbW9kdWxlIGNhbGxiYWNrIGhhbmRsZXIgKi8KIAljdGxfY2JfaWR4ID0gbXB0MnNhc19iYXNlX3JlZ2lzdGVyX2NhbGxiYWNrX2hhbmRsZXIobXB0MnNhc19jdGxfZG9uZSk7CiAKKwl0bV90cl9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3RtX3RyX2NvbXBsZXRlKTsKKwl0bV9zYXNfY29udHJvbF9jYl9pZHggPSBtcHQyc2FzX2Jhc2VfcmVnaXN0ZXJfY2FsbGJhY2tfaGFuZGxlcigKKwkgICAgX3Njc2loX3Nhc19jb250cm9sX2NvbXBsZXRlKTsKKwogCW1wdDJzYXNfY3RsX2luaXQoKTsKIAogCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NzaWhfZHJpdmVyKTsKQEAgLTU5MjQsNiArNjE1NSw5IEBACiAJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcihjb25maWdfY2JfaWR4KTsKIAltcHQyc2FzX2Jhc2VfcmVsZWFzZV9jYWxsYmFja19oYW5kbGVyKGN0bF9jYl9pZHgpOwogCisJbXB0MnNhc19iYXNlX3JlbGVhc2VfY2FsbGJhY2tfaGFuZGxlcih0bV90cl9jYl9pZHgpOworCW1wdDJzYXNfYmFzZV9yZWxlYXNlX2NhbGxiYWNrX2hhbmRsZXIodG1fc2FzX2NvbnRyb2xfY2JfaWR4KTsKKwogCW1wdDJzYXNfY3RsX2V4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggNzQyMzI0YS4uZWI5ODE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0yLDcgKzIsNyBAQAogICogU0FTIFRyYW5zcG9ydCBMYXllciBmb3IgTVBUIChNZXNzYWdlIFBhc3NpbmcgVGVjaG5vbG9neSkgYmFzZWQgY29udHJvbGxlcnMKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml90cmFuc3BvcnQuYwotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggIExTSSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIExTSSBDb3Jwb3JhdGlvbgogICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMTIsMjUgKzIxMiwyNiBAQAogICogbXB0MnNhc190cmFuc3BvcnRfZG9uZSAtICBpbnRlcm5hbCB0cmFuc3BvcnQgbGF5ZXIgY2FsbGJhY2sgaGFuZGxlci4KICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKLSAqIEBWRl9JRDogdmlydHVhbCBmdW5jdGlvbiBpZAorICogQG1zaXhfaW5kZXg6IE1TSVggdGFibGUgaW5kZXggc3VwcGxpZWQgYnkgdGhlIE9TCiAgKiBAcmVwbHk6IHJlcGx5IG1lc3NhZ2UgZnJhbWUobG93ZXIgMzJiaXQgYWRkcikKICAqCiAgKiBDYWxsYmFjayBoYW5kbGVyIHdoZW4gc2VuZGluZyBpbnRlcm5hbCBnZW5lcmF0ZWQgdHJhbnNwb3J0IGNtZHMuCiAgKiBUaGUgY2FsbGJhY2sgaW5kZXggcGFzc2VkIGlzIGBpb2MtPnRyYW5zcG9ydF9jYl9pZHhgCiAgKgotICogUmV0dXJuIG5vdGhpbmcuCisgKiBSZXR1cm4gMSBtZWFuaW5nIG1mIHNob3VsZCBiZSBmcmVlZCBmcm9tIF9iYXNlX2ludGVycnVwdAorICogICAgICAgIDAgbWVhbnMgdGhlIG1mIGlzIGZyZWVkIGZyb20gdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZAotbXB0MnNhc190cmFuc3BvcnRfZG9uZShzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIHUxNiBzbWlkLCB1OCBWRl9JRCwKK3U4CittcHQyc2FzX3RyYW5zcG9ydF9kb25lKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywgdTE2IHNtaWQsIHU4IG1zaXhfaW5kZXgsCiAgICAgdTMyIHJlcGx5KQogewogCU1QSTJEZWZhdWx0UmVwbHlfdCAqbXBpX3JlcGx5OwogCiAJbXBpX3JlcGx5ID0gIG1wdDJzYXNfYmFzZV9nZXRfcmVwbHlfdmlydF9hZGRyKGlvYywgcmVwbHkpOwogCWlmIChpb2MtPnRyYW5zcG9ydF9jbWRzLnN0YXR1cyA9PSBNUFQyX0NNRF9OT1RfVVNFRCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMTsKIAlpZiAoaW9jLT50cmFuc3BvcnRfY21kcy5zbWlkICE9IHNtaWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDE7CiAJaW9jLT50cmFuc3BvcnRfY21kcy5zdGF0dXMgfD0gTVBUMl9DTURfQ09NUExFVEU7CiAJaWYgKG1waV9yZXBseSkgewogCQltZW1jcHkoaW9jLT50cmFuc3BvcnRfY21kcy5yZXBseSwgbXBpX3JlcGx5LApAQCAtMjM5LDYgKzI0MCw3IEBACiAJfQogCWlvYy0+dHJhbnNwb3J0X2NtZHMuc3RhdHVzICY9IH5NUFQyX0NNRF9QRU5ESU5HOwogCWNvbXBsZXRlKCZpb2MtPnRyYW5zcG9ydF9jbWRzLmRvbmUpOworCXJldHVybiAxOwogfQogCiAvKiByZXBvcnQgbWFudWZhY3R1cmUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KQEAgLTM2OSw2ICszNzEsOCBAQAogCW1lbXNldChtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJTbXBQYXNzdGhyb3VnaFJlcXVlc3RfdCkpOwogCW1waV9yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU01QX1BBU1NUSFJPVUdIOwogCW1waV9yZXF1ZXN0LT5QaHlzaWNhbFBvcnQgPSAweEZGOworCW1waV9yZXF1ZXN0LT5WRl9JRCA9IDA7IC8qIFRPRE8gKi8KKwltcGlfcmVxdWVzdC0+VlBfSUQgPSAwOwogCXNhc19hZGRyZXNzX2xlID0gKHU2NCAqKSZtcGlfcmVxdWVzdC0+U0FTQWRkcmVzczsKIAkqc2FzX2FkZHJlc3NfbGUgPSBjcHVfdG9fbGU2NChzYXNfYWRkcmVzcyk7CiAJbXBpX3JlcXVlc3QtPlJlcXVlc3REYXRhTGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZXBfbWFudV9yZXF1ZXN0KTsKQEAgLTM5Niw3ICs0MDAsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgInJlcG9ydF9tYW51ZmFjdHVyZSAtICIKIAkgICAgInNlbmQgdG8gc2FzX2FkZHIoMHglMDE2bGx4KVxuIiwgaW9jLT5uYW1lLAogCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXNhc19hZGRyZXNzKSk7Ci0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKQEAgLTExMDYsNiArMTExMSw4IEBACiAJbWVtc2V0KG1waV9yZXF1ZXN0LCAwLCBzaXplb2YoTXBpMlNtcFBhc3N0aHJvdWdoUmVxdWVzdF90KSk7CiAJbXBpX3JlcXVlc3QtPkZ1bmN0aW9uID0gTVBJMl9GVU5DVElPTl9TTVBfUEFTU1RIUk9VR0g7CiAJbXBpX3JlcXVlc3QtPlBoeXNpY2FsUG9ydCA9IDB4RkY7CisJbXBpX3JlcXVlc3QtPlZGX0lEID0gMDsgLyogVE9ETyAqLworCW1waV9yZXF1ZXN0LT5WUF9JRCA9IDA7CiAJKigodTY0ICopJm1waV9yZXF1ZXN0LT5TQVNBZGRyZXNzKSA9IChycGh5KSA/CiAJICAgIGNwdV90b19sZTY0KHJwaHktPmlkZW50aWZ5LnNhc19hZGRyZXNzKSA6CiAJICAgIGNwdV90b19sZTY0KGlvYy0+c2FzX2hiYS5zYXNfYWRkcmVzcyk7CkBAIC0xMTQ3LDcgKzExNTQsOCBAQAogCWR0cmFuc3BvcnRwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19ERUJVR19GTVQgIiVzIC0gIgogCSAgICAic2VuZGluZyBzbXAgcmVxdWVzdFxuIiwgaW9jLT5uYW1lLCBfX2Z1bmNfXykpOwogCi0JbXB0MnNhc19iYXNlX3B1dF9zbWlkX2RlZmF1bHQoaW9jLCBzbWlkLCAwIC8qIFZGX0lEICovKTsKKwltcHQyc2FzX2Jhc2VfcHV0X3NtaWRfZGVmYXVsdChpb2MsIHNtaWQpOworCWluaXRfY29tcGxldGlvbigmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lKTsKIAl0aW1lbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaW9jLT50cmFuc3BvcnRfY21kcy5kb25lLAogCSAgICAxMCpIWik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmggYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfZGVmcy5oCmluZGV4IGY4Y2I5ZGUuLjE4NDlkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9kZWZzLmgKKysrIGIvZHJpdmVycy9zY3NpL212c2FzL212X2RlZnMuaApAQCAtMjUsNiArMjUsOCBAQAogI2lmbmRlZiBfTVZfREVGU19IXwogI2RlZmluZSBfTVZfREVGU19IXwogCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMAkweDEzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUkVDQV8xMzIwCTB4MTMyMAogCiBlbnVtIGNoaXBfZmxhdm9ycyB7CiAJY2hpcF82MzIwLApAQCAtMzIsNiArMzQsOCBAQAogCWNoaXBfNjQ4NSwKIAljaGlwXzk0ODAsCiAJY2hpcF85MTgwLAorCWNoaXBfMTMwMCwKKwljaGlwXzEzMjAKIH07CiAKIC8qIGRyaXZlciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9tdnNhcy9tdl9pbml0LmMKaW5kZXggODY0NmExOS4uYzc5MGQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212c2FzL212X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvbXZzYXMvbXZfaW5pdC5jCkBAIC0zMiw2ICszMiw4IEBACiAJW2NoaXBfNjQ4NV0gPQl7IDEsIDgsIDB4ODAwLCAzMywgMzIsIDEwLCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTE4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiAJW2NoaXBfOTQ4MF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMwMF0gPQl7IDEsIDQsIDB4NDAwLCAxNywgMTYsICA5LCAmbXZzXzY0eHhfZGlzcGF0Y2gsIH0sCisJW2NoaXBfMTMyMF0gPQl7IDIsIDQsIDB4ODAwLCAxNywgNjQsICA5LCAmbXZzXzk0eHhfZGlzcGF0Y2gsIH0sCiB9OwogCiAjZGVmaW5lIFNPQ19TQVNfTlVNIDIKQEAgLTY1Myw2ICs2NTUsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2NDg1KSwgY2hpcF82NDg1IH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDk0ODApLCBjaGlwXzk0ODAgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4OTE4MCksIGNoaXBfOTE4MCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMwMCksIGNoaXBfMTMwMCB9LAorCXsgUENJX1ZERVZJQ0UoQVJFQ0EsIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTMyMCksIGNoaXBfMTMyMCB9LAogCiAJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggNDMwMmYwNi4uMGE5N2JjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfdGNxLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTY4NCw3ICs2ODUsNyBAQAogCXN0cnVjdCBwbWNyYWlkX2luc3RhbmNlICpwaW5zdGFuY2UgPSBjbWQtPmRydl9pbnN0OwogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKIAotCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJIkFkYXB0ZXIgYmVpbmcgcmVzZXQgZHVlIHRvIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCiAJLyogQ29tbWFuZCB0aW1lb3V0cyByZXN1bHQgaW4gaGFyZCByZXNldCBzZXF1ZW5jZS4gVGhlIGNvbW1hbmQgdGhhdCBnb3QKQEAgLTgxNSw4ICs4MTYsOSBAQAogCiAJaWYgKFBNQ1JBSURfSU9BU0NfU0VOU0VfS0VZKGlvYXNjKSA+IDApIHsKIAkJc2NzaV9jbWQtPnJlc3VsdCB8PSAoRElEX0VSUk9SIDw8IDE2KTsKLQkJcG1jcmFpZF9lcnIoImNvbW1hbmQgQ0RCWzBdID0gJXggZmFpbGVkIHdpdGggSU9BU0M6IDB4JTA4WFxuIiwKLQkJCSAgICAgY21kLT5pb2FfY2ItPmlvYXJjYi5jZGJbMF0sIGlvYXNjKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJCSAgICAiY29tbWFuZCBDREJbMF0gPSAleCBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLAorCQkJICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLCBpb2FzYyk7CiAJfQogCiAJLyogaWYgd2UgaGFkIGFsbG9jYXRlZCBzZW5zZSBidWZmZXJzIGZvciByZXF1ZXN0IHNlbnNlLCBjb3B5IHRoZSBzZW5zZQpAQCAtMTA2OSw3ICsxMDcxLDcgQEAKIAogCWlvYXJjYi0+ZGF0YV90cmFuc2Zlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihyY2Jfc2l6ZSk7CiAKLQlpb2FkbFswXS5mbGFncyB8PSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19SRUFEX0xBU1QpOworCWlvYWRsWzBdLmZsYWdzIHw9IElPQURMX0ZMQUdTX1JFQURfTEFTVDsKIAlpb2FkbFswXS5kYXRhX2xlbiA9IGNwdV90b19sZTMyKHJjYl9zaXplKTsKIAlpb2FkbFswXS5hZGRyZXNzID0gY3B1X3RvX2xlMzIoZG1hKTsKIApAQCAtMTU0MSwxMyArMTU0MywxMyBAQAogCiAJaWYgKHBpbnN0YW5jZS0+bGRuLmhjYW0tPm5vdGlmaWNhdGlvbl9sb3N0ID09CiAJICAgIEhPU1RSQ0JfTk9USUZJQ0FUSU9OU19MT1NUKQotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIkVycm9yIG5vdGlmaWNhdGlvbnMgbG9zdFxuIik7CiAKIAlpb2FzYyA9IGxlMzJfdG9fY3B1KGhjYW1fbGRuLT5lcnJvcl9sb2cuZmRfaW9hc2MpOwogCiAJaWYgKGlvYXNjID09IFBNQ1JBSURfSU9BU0NfVUFfQlVTX1dBU19SRVNFVCB8fAogCQlpb2FzYyA9PSBQTUNSQUlEX0lPQVNDX1VBX0JVU19XQVNfUkVTRVRfQllfT1RIRVIpIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCisJCWRldl9pbmZvKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCSJVbml0QXR0ZW50aW9uIGR1ZSB0byBJT0EgQnVzIFJlc2V0XG4iKTsKIAkJc2NzaV9yZXBvcnRfYnVzX3Jlc2V0KAogCQkJcGluc3RhbmNlLT5ob3N0LApAQCAtMTU4NCw3ICsxNTg2LDcgQEAKIAkgICAgYXRvbWljX3JlYWQoJnBpbnN0YW5jZS0+Y2NuLmlnbm9yZSkgPT0gMSkgewogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChpb2FzYykgewotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKKwkJZGV2X2luZm8oJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAogCQkJIkhvc3QgUkNCIChDQ04pIGZhaWxlZCB3aXRoIElPQVNDOiAweCUwOFhcbiIsIGlvYXNjKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUocGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGxvY2tfZmxhZ3MpOwogCQlwbWNyYWlkX3NlbmRfaGNhbShwaW5zdGFuY2UsIFBNQ1JBSURfSENBTV9DT0RFX0NPTkZJR19DSEFOR0UpOwpAQCAtMTYzNCw3ICsxNjM2LDcgQEAKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlkZXZfaW5mbygmcGluc3RhbmNlLT5wZGV2LT5kZXYsCiAJCQkiSG9zdCBSQ0IoTEROKSBmYWlsZWQgd2l0aCBJT0FTQzogMHglMDhYXG4iLCBpb2FzYyk7CiAJfQogCS8qIHNlbmQgbmV0bGluayBtZXNzYWdlIGZvciBIQ0FNIG5vdGlmaWNhdGlvbiBpZiBlbmFibGVkICovCkBAIC0xODIyLDcgKzE4MjQsNiBAQAogCQkJc2NzaV9kbWFfdW5tYXAoc2NzaV9jbWQpOwogCQkJcG1jcmFpZF9yZXR1cm5fY21kKGNtZCk7CiAKLQogCQkJcG1jcmFpZF9pbmZvKCJmYWlsaW5nKCVkKSBDREJbMF0gPSAleCByZXN1bHQ6ICV4XG4iLAogCQkJCSAgICAgbGUzMl90b19jcHUocmVzcCkgPj4gMiwKIAkJCQkgICAgIGNtZC0+aW9hX2NiLT5pb2FyY2IuY2RiWzBdLApAQCAtMjI1MCw3ICsyMjUxLDcgQEAKIAogCWlvYWRsLT5hZGRyZXNzID0gY3B1X3RvX2xlNjQoY21kLT5zZW5zZV9idWZmZXJfZG1hKTsKIAlpb2FkbC0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotCWlvYWRsLT5mbGFncyA9IGNwdV90b19sZTMyKElPQURMX0ZMQUdTX0xBU1RfREVTQyk7CisJaW9hZGwtPmZsYWdzID0gSU9BRExfRkxBR1NfTEFTVF9ERVNDOwogCiAJLyogcmVxdWVzdCBzZW5zZSBtaWdodCBiZSBjYWxsZWQgYXMgcGFydCBvZiBlcnJvciByZXNwb25zZSBwcm9jZXNzaW5nCiAJICogd2hpY2ggcnVucyBpbiB0YXNrbGV0cyBjb250ZXh0LiBJdCBpcyBwb3NzaWJsZSB0aGF0IG1pZC1sYXllciBtaWdodApAQCAtMjUxNCw3ICsyNTE1LDggQEAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCWlmICghcmVzKSB7Ci0JCXBtY3JhaWRfZXJyKCJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CisJCXNkZXZfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZC0+ZGV2aWNlLAorCQkJICAgICJyZXNldF9kZXZpY2U6IE5VTEwgcmVzb3VyY2UgcG9pbnRlclxuIik7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCkBAIC0yNzUyLDggKzI3NTQsOCBAQAogCXBpbnN0YW5jZSA9CiAJCShzdHJ1Y3QgcG1jcmFpZF9pbnN0YW5jZSAqKXNjc2lfY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwogCi0JZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsCi0JCSJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY3NpX2NtZCwKKwkJICAgICJJL08gY29tbWFuZCB0aW1lZCBvdXQsIGFib3J0aW5nIGl0LlxuIik7CiAKIAlyZXMgPSBzY3NpX2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIApAQCAtMjgyNCw3ICsyODI2LDggQEAKICAqLwogc3RhdGljIGludCBwbWNyYWlkX2VoX2RldmljZV9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCiB7Ci0JcG1jcmFpZF9lcnIoIkRvaW5nIGRldmljZSByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOworCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKKwkJICAgICJyZXNldHRpbmcgZGV2aWNlIGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX0xVTik7CkBAIC0yODMyLDcgKzI4MzUsOCBAQAogCiBzdGF0aWMgaW50IHBtY3JhaWRfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NtZCkKIHsKLQlwbWNyYWlkX2VycigiRG9pbmcgYnVzIHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CisJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAorCQkgICAgIkRvaW5nIGJ1cyByZXNldCBkdWUgdG8gYW4gSS9PIGNvbW1hbmQgdGltZW91dC5cbiIpOwogCXJldHVybiBwbWNyYWlkX3Jlc2V0X2RldmljZShzY21kLAogCQkJCSAgICBQTUNSQUlEX1JFU0VUX0JVU19USU1FT1VULAogCQkJCSAgICBSRVNFVF9ERVZJQ0VfQlVTKTsKQEAgLTI4NDAsNyArMjg0NCw4IEBACiAKIHN0YXRpYyBpbnQgcG1jcmFpZF9laF90YXJnZXRfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kKQogewotCXBtY3JhaWRfZXJyKCJEb2luZyB0YXJnZXQgcmVzZXQgZHVlIHRvIGFuIEkvTyBjb21tYW5kIHRpbWVvdXQuXG4iKTsKKwlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCisJCSAgICAiRG9pbmcgdGFyZ2V0IHJlc2V0IGR1ZSB0byBhbiBJL08gY29tbWFuZCB0aW1lb3V0LlxuIik7CiAJcmV0dXJuIHBtY3JhaWRfcmVzZXRfZGV2aWNlKHNjbWQsCiAJCQkJICAgIFBNQ1JBSURfSU5URVJOQUxfVElNRU9VVCwKIAkJCQkgICAgUkVTRVRfREVWSUNFX1RBUkdFVCk7CkBAIC0yOTg4LDExICsyOTkzLDExIEBACiAJbnNlZyA9IHNjc2lfZG1hX21hcChzY3NpX2NtZCk7CiAKIAlpZiAobnNlZyA8IDApIHsKLQkJZGV2X2VycigmcGluc3RhbmNlLT5wZGV2LT5kZXYsICJzY3NpX21hcF9kbWEgZmFpbGVkIVxuIik7CisJCXNjbWRfcHJpbnRrKEtFUk5fRVJSLCBzY3NpX2NtZCwgInNjc2lfbWFwX2RtYSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0gZWxzZSBpZiAobnNlZyA+IFBNQ1JBSURfTUFYX0lPQURMUykgewogCQlzY3NpX2RtYV91bm1hcChzY3NpX2NtZCk7Ci0JCWRldl9lcnIoJnBpbnN0YW5jZS0+cGRldi0+ZGV2LAorCQlzY21kX3ByaW50ayhLRVJOX0VSUiwgc2NzaV9jbWQsCiAJCQkic2cgY291bnQgaXMgKCVkKSBtb3JlIHRoYW4gYWxsb3dlZCFcbiIsIG5zZWcpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzAxMiw3ICszMDE3LDcgQEAKIAkJaW9hZGxbaV0uZmxhZ3MgPSAwOwogCX0KIAkvKiBzZXR1cCBsYXN0IGRlc2NyaXB0b3IgKi8KLQlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBjcHVfdG9fbGUzMihJT0FETF9GTEFHU19MQVNUX0RFU0MpOworCWlvYWRsW2kgLSAxXS5mbGFncyA9IElPQURMX0ZMQUdTX0xBU1RfREVTQzsKIAogCXJldHVybiAwOwogfQpAQCAtMzM4Miw3ICszMzg3LDcgQEAKIAl9CiAKIAkvKiBzZXR1cCB0aGUgbGFzdCBkZXNjcmlwdG9yICovCi0JaW9hZGxbaSAtIDFdLmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbFtpIC0gMV0uZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwNDAsNyArNTA0NSw3IEBACiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAogCWlmIChyYykgewotCQlwbWNyYWlkX2VycigicG1jcmFpZDogRW5hYmxlIGRldmljZSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXN1bWU6IEVuYWJsZSBkZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtNTA1NCw3ICs1MDU5LDcgQEAKIAkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAKIAlpZiAocmMgIT0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IFBDSSBETUEgbWFza1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlc3VtZTogRmFpbGVkIHRvIHNldCBQQ0kgRE1BIG1hc2tcbiIpOwogCQlnb3RvIGRpc2FibGVfZGV2aWNlOwogCX0KIApAQCAtNTA2Myw3ICs1MDY4LDggQEAKIAlyYyA9IHBtY3JhaWRfcmVnaXN0ZXJfaW50ZXJydXB0X2hhbmRsZXIocGluc3RhbmNlKTsKIAogCWlmIChyYykgewotCQlwbWNyYWlkX2VycigicmVzdW1lOiBjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkicmVzdW1lOiBjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZV9ob3N0OwogCX0KQEAgLTUwODAsNyArNTA4Niw3IEBACiAJICogc3RhdGUuCiAJICovCiAJaWYgKHBtY3JhaWRfcmVzZXRfYnJpbmd1cChwaW5zdGFuY2UpKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBpbml0aWFsaXplIElPQSBcbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gcmVsZWFzZV90YXNrbGV0czsKIAl9CkBAIC01MTg3LDcgKzUxOTMsNyBAQAogCUxJU1RfSEVBRChvbGRfcmVzKTsKIAogCWlmIChwaW5zdGFuY2UtPmNmZ190YWJsZS0+ZmxhZ3MgJiBNSUNST0NPREVfVVBEQVRFX1JFUVVJUkVEKQotCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwgIlJlcXVpcmUgbWljcm9jb2RlIGRvd25sb2FkXG4iKTsKKwkJcG1jcmFpZF9lcnIoIklPQSByZXF1aXJlcyBtaWNyb2NvZGUgZG93bmxvYWRcbiIpOwogCiAJLyogcmVzb3VyY2UgbGlzdCBpcyBwcm90ZWN0ZWQgYnkgcGluc3RhbmNlLT5yZXNvdXJjZV9sb2NrLgogCSAqIGluaXRfcmVzX3RhYmxlIGNhbiBiZSBjYWxsZWQgZnJvbSBwcm9iZSAodXNlci10aHJlYWQpIG9yIHJ1bnRpbWUKQEAgLTUyMjQsOCArNTIzMCw3IEBACiAJCWlmICghZm91bmQpIHsKIAogCQkJaWYgKGxpc3RfZW1wdHkoJnBpbnN0YW5jZS0+ZnJlZV9yZXNfcSkpIHsKLQkJCQlkZXZfZXJyKCZwaW5zdGFuY2UtPnBkZXYtPmRldiwKLQkJCQkJIlRvbyBtYW55IGRldmljZXMgYXR0YWNoZWRcbiIpOworCQkJCXBtY3JhaWRfZXJyKCJUb28gbWFueSBkZXZpY2VzIGF0dGFjaGVkXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtNTMwOSw3ICs1MzE0LDcgQEAKIAkJY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOwogCiAJaW9hZGwgPSAmKGlvYXJjYi0+YWRkX2RhdGEudS5pb2FkbFswXSk7Ci0JaW9hZGwtPmZsYWdzID0gY3B1X3RvX2xlMzIoSU9BRExfRkxBR1NfTEFTVF9ERVNDKTsKKwlpb2FkbC0+ZmxhZ3MgPSBJT0FETF9GTEFHU19MQVNUX0RFU0M7CiAJaW9hZGwtPmFkZHJlc3MgPSBjcHVfdG9fbGU2NChwaW5zdGFuY2UtPmNmZ190YWJsZV9idXNfYWRkcik7CiAJaW9hZGwtPmRhdGFfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBwbWNyYWlkX2NvbmZpZ190YWJsZSkpOwogCkBAIC01NDQyLDcgKzU0NDcsNyBAQAogCXJjID0gcG1jcmFpZF9yZWdpc3Rlcl9pbnRlcnJ1cHRfaGFuZGxlcihwaW5zdGFuY2UpOwogCiAJaWYgKHJjKSB7Ci0JCXBtY3JhaWRfZXJyKCJjb3VsZG4ndCByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsKIAkJZ290byBvdXRfc2NzaV9ob3N0X3B1dDsKIAl9CiAKQEAgLTU0NjYsNyArNTQ3MSw3IEBACiAJICovCiAJcG1jcmFpZF9pbmZvKCJzdGFydGluZyBJT0EgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2VcbiIpOwogCWlmIChwbWNyYWlkX3Jlc2V0X2JyaW5ndXAocGluc3RhbmNlKSkgewotCQlwbWNyYWlkX2VycigiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgaW5pdGlhbGl6ZSBJT0EgXG4iKTsKIAkJcmMgPSAxOwogCQlnb3RvIG91dF9yZWxlYXNlX2J1ZnM7CiAJfQpAQCAtNTUzNCw3ICs1NTM5LDYgQEAKIAkuc2h1dGRvd24gPSBwbWNyYWlkX3NodXRkb3duCiB9OwogCi0KIC8qKgogICogcG1jcmFpZF9pbml0IC0gbW9kdWxlIGxvYWQgZW50cnkgcG9pbnQKICAqLwpAQCAtNTU2Niw3ICs1NTcwLDYgQEAKIAkJZ290byBvdXRfdW5yZWdfY2hyZGV2OwogCX0KIAotCiAJZXJyb3IgPSBwbWNyYWlkX25ldGxpbmtfaW5pdCgpOwogCiAJaWYgKGVycm9yKQpAQCAtNTU4NCw2ICs1NTg3LDcgQEAKIAogb3V0X3VucmVnX2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocG1jcmFpZF9tYWpvciwgMCksIFBNQ1JBSURfTUFYX0FEQVBURVJTKTsKKwogb3V0X2luaXQ6CiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKaW5kZXggNjE0YjNhNy4uMzQ0MWIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9taWQuYwppbmRleCA0MmI3OTlhLi5lMDdiMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfbWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX21pZC5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAlpZiAocmVxID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSIKIAkJCSJmb3IgcmVxdWVzdCBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJlcS0+bGVuZ3RoID0gUkVRVUVTVF9FTlRSWV9DTlRfMjRYWDsKQEAgLTYzMiw2ICs2MzIsNyBAQAogCiBxdWVfZmFpbGVkOgogCXFsYTI1eHhfZnJlZV9yZXFfcXVlKGJhc2VfdmhhLCByZXEpOworZmFpbGVkOgogCXJldHVybiAwOwogfQogCkBAIC02NTksNyArNjYwLDcgQEAKIAlpZiAocnNwID09IE5VTEwpIHsKIAkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IiCiAJCQkJIiByZXNwb25zZSBxdWVcbiIpOwotCQlnb3RvIHF1ZV9mYWlsZWQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJzcC0+bGVuZ3RoID0gUkVTUE9OU0VfRU5UUllfQ05UX01ROwpAQCAtNzI4LDYgKzcyOSw3IEBACiAKIHF1ZV9mYWlsZWQ6CiAJcWxhMjV4eF9mcmVlX3JzcF9xdWUoYmFzZV92aGEsIHJzcCk7CitmYWlsZWQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGI2ZTAzMDcuLmRkMDk4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtMjQxLDEwICsyNDEsNyBAQAogICovCiBzdHJ1Y3Qgc2NzaV9jbW5kICpfX3Njc2lfZ2V0X2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQljbWQgPSBzY3NpX2hvc3RfYWxsb2NfY29tbWFuZChzaG9zdCwgZ2ZwX21hc2spOworCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IHNjc2lfaG9zdF9hbGxvY19jb21tYW5kKHNob3N0LCBnZnBfbWFzayk7CiAKIAlpZiAodW5saWtlbHkoIWNtZCkpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1OCw5ICsyNTUsMTUgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hvc3QtPmZyZWVfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKGNtZCkgeworCQkJdm9pZCAqYnVmLCAqcHJvdDsKKwogCQkJYnVmID0gY21kLT5zZW5zZV9idWZmZXI7CisJCQlwcm90ID0gY21kLT5wcm90X3NkYjsKKwogCQkJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwogCQkJY21kLT5zZW5zZV9idWZmZXIgPSBidWY7CisJCQljbWQtPnByb3Rfc2RiID0gcHJvdDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKaW5kZXggZmI5YWYyMC4uYzQxMDNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2ljYW0uaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKICNpbmNsdWRlICJzZC5oIgogI2luY2x1ZGUgInNjc2lfbG9nZ2luZy5oIgpAQCAtNjQsNiArNjUsNyBAQAogI2RlZmluZSBQQVJBTUVURVJfTElTVF9MRU5HVEhfRVJSIDB4MWEKICNkZWZpbmUgSU5WQUxJRF9PUENPREUgMHgyMAogI2RlZmluZSBBRERSX09VVF9PRl9SQU5HRSAweDIxCisjZGVmaW5lIElOVkFMSURfQ09NTUFORF9PUENPREUgMHgyMAogI2RlZmluZSBJTlZBTElEX0ZJRUxEX0lOX0NEQiAweDI0CiAjZGVmaW5lIElOVkFMSURfRklFTERfSU5fUEFSQU1fTElTVCAweDI2CiAjZGVmaW5lIFBPV0VST05fUkVTRVQgMHgyOQpAQCAtMTgwLDcgKzE4Miw3IEBACiAjZGVmaW5lIFNERUJVR19TRU5TRV9MRU4gMzIKIAogI2RlZmluZSBTQ1NJX0RFQlVHX0NBTlFVRVVFICAyNTUKLSNkZWZpbmUgU0NTSV9ERUJVR19NQVhfQ01EX0xFTiAxNgorI2RlZmluZSBTQ1NJX0RFQlVHX01BWF9DTURfTEVOIDMyCiAKIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgZGV2X2xpc3Q7CkBAIC0yOTYsOSArMjk4LDI1IEBACiB9CiAKIHN0YXRpYyB2b2lkIGdldF9kYXRhX3RyYW5zZmVyX2luZm8odW5zaWduZWQgY2hhciAqY21kLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGJhLCB1bnNpZ25lZCBpbnQgKm51bSkKKwkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgKmxiYSwgdW5zaWduZWQgaW50ICpudW0sCisJCQkJICAgdTMyICplaV9sYmEpCiB7CisJKmVpX2xiYSA9IDA7CisKIAlzd2l0Y2ggKCpjbWQpIHsKKwljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CisJCSpsYmEgPSAodTY0KWNtZFsxOV0gfCAodTY0KWNtZFsxOF0gPDwgOCB8CisJCQkodTY0KWNtZFsxN10gPDwgMTYgfCAodTY0KWNtZFsxNl0gPDwgMjQgfAorCQkJKHU2NCljbWRbMTVdIDw8IDMyIHwgKHU2NCljbWRbMTRdIDw8IDQwIHwKKwkJCSh1NjQpY21kWzEzXSA8PCA0OCB8ICh1NjQpY21kWzEyXSA8PCA1NjsKKworCQkqZWlfbGJhID0gKHUzMiljbWRbMjNdIHwgKHUzMiljbWRbMjJdIDw8IDggfAorCQkJKHUzMiljbWRbMjFdIDw8IDE2IHwgKHUzMiljbWRbMjBdIDw8IDI0OworCisJCSpudW0gPSAodTMyKWNtZFszMV0gfCAodTMyKWNtZFszMF0gPDwgOCB8ICh1MzIpY21kWzI5XSA8PCAxNiB8CisJCQkodTMyKWNtZFsyOF0gPDwgMjQ7CisJCWJyZWFrOworCiAJY2FzZSBXUklURV8xNjoKIAljYXNlIFJFQURfMTY6CiAJCSpsYmEgPSAodTY0KWNtZFs5XSB8ICh1NjQpY21kWzhdIDw8IDggfApAQCAtMTU4OSw3ICsxNjA3LDcgQEAKIH0KIAogc3RhdGljIGludCBwcm90X3ZlcmlmeV9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMpCisJCQkgICAgdW5zaWduZWQgaW50IHNlY3RvcnMsIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgaW50IGksIHJlc2lkOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqcHNnbDsKQEAgLTE2MzYsMTMgKzE2NTQsMjMgQEAKIAkJCXJldHVybiAweDAxOwogCQl9CiAKLQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCWlmIChzY3NpX2RlYnVnX2RpZiA9PSBTRF9ESUZfVFlQRTFfUFJPVEVDVElPTiAmJgogCQkgICAgYmUzMl90b19jcHUoc2R0W2ldLnJlZl90YWcpICE9IChzZWN0b3IgJiAweGZmZmZmZmZmKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUkVGIGNoZWNrIGZhaWxlZCBvbiBzZWN0b3IgJWx1XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOwogCQkJZGlmX2Vycm9ycysrOwogCQkJcmV0dXJuIDB4MDM7CiAJCX0KKworCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04gJiYKKwkJICAgIGJlMzJfdG9fY3B1KHNkdFtpXS5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJFRiBjaGVjayBmYWlsZWQgb24gc2VjdG9yICVsdVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcpc2VjdG9yKTsKKwkJCWRpZl9lcnJvcnMrKzsKKwkJCXJldHVybiAweDAzOworCQl9CisKKwkJZWlfbGJhKys7CiAJfQogCiAJcmVzaWQgPSBzZWN0b3JzICogODsgLyogQnl0ZXMgb2YgcHJvdGVjdGlvbiBkYXRhIHRvIGNvcHkgaW50byBzZ2wgKi8KQEAgLTE2NzAsNyArMTY5OCw4IEBACiB9CiAKIHN0YXRpYyBpbnQgcmVzcF9yZWFkKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLAotCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwLAorCQkgICAgIHUzMiBlaV9sYmEpCiB7CiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJaW50IHJldDsKQEAgLTE2OTksNyArMTcyOCw3IEBACiAKIAkvKiBESVggKyBUMTAgRElGICovCiAJaWYgKHNjc2lfZGVidWdfZGl4ICYmIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpIHsKLQkJaW50IHByb3RfcmV0ID0gcHJvdF92ZXJpZnlfcmVhZChTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV9yZWFkKFNDcG50LCBsYmEsIG51bSwgZWlfbGJhKTsKIAogCQlpZiAocHJvdF9yZXQpIHsKIAkJCW1rX3NlbnNlX2J1ZmZlcihkZXZpcCwgQUJPUlRFRF9DT01NQU5ELCAweDEwLCBwcm90X3JldCk7CkBAIC0xNzM1LDcgKzE3NjQsNyBAQAogfQogCiBzdGF0aWMgaW50IHByb3RfdmVyaWZ5X3dyaXRlKHN0cnVjdCBzY3NpX2NtbmQgKlNDcG50LCBzZWN0b3JfdCBzdGFydF9zZWMsCi0JCQkgICAgIHVuc2lnbmVkIGludCBzZWN0b3JzKQorCQkJICAgICB1bnNpZ25lZCBpbnQgc2VjdG9ycywgdTMyIGVpX2xiYSkKIHsKIAlpbnQgaSwgaiwgcmV0OwogCXN0cnVjdCBzZF9kaWZfdHVwbGUgKnNkdDsKQEAgLTE3NDksMTEgKzE3NzgsNiBAQAogCiAJc2VjdG9yID0gZG9fZGl2KHRtcF9zZWMsIHNkZWJ1Z19zdG9yZV9zZWN0b3JzKTsKIAotCWlmICgoKFNDcG50LT5jbW5kWzFdID4+IDUpICYgNykgIT0gMSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJzY3NpX2RlYnVnOiBXUlBST1RFQ1QgIT0gMVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQogCUJVR19PTihzY3NpX3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIAlCVUdfT04oc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSA9PSAwKTsKIApAQCAtMTgwOCw3ICsxODMyLDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAotCQkJaWYgKHNjc2lfZGVidWdfZGlmICE9IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OICYmCisJCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUxX1BST1RFQ1RJT04gJiYKIAkJCSAgICBiZTMyX3RvX2NwdShzZHQtPnJlZl90YWcpCiAJCQkgICAgIT0gKHN0YXJ0X3NlYyAmIDB4ZmZmZmZmZmYpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xODE5LDYgKzE4NDMsMTYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAorCQkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCQkgICAgYmUzMl90b19jcHUoc2R0LT5yZWZfdGFnKSAhPSBlaV9sYmEpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBSRUYgY2hlY2sgZmFpbGVkIG9uIHNlY3RvciAlbHVcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZylzZWN0b3IpOworCQkJCXJldCA9IDB4MDM7CisJCQkJZHVtcF9zZWN0b3IoZGFkZHIsIHNjc2lfZGVidWdfc2VjdG9yX3NpemUpOworCQkJCWdvdG8gb3V0OworCQkJfQorCiAJCQkvKiBXb3VsZCBiZSBncmVhdCB0byBjb3B5IHRoaXMgaW4gYmlnZ2VyCiAJCQkgKiBjaHVua3MuICBIb3dldmVyLCBmb3IgdGhlIHNha2Ugb2YKIAkJCSAqIGNvcnJlY3RuZXNzIHdlIG5lZWQgdG8gdmVyaWZ5IGVhY2ggc2VjdG9yCkBAIC0xODMyLDYgKzE4NjYsNyBAQAogCQkJCXNlY3RvciA9IDA7CS8qIEZvcmNlIHdyYXAgKi8KIAogCQkJc3RhcnRfc2VjKys7CisJCQllaV9sYmErKzsKIAkJCWRhZGRyICs9IHNjc2lfZGVidWdfc2VjdG9yX3NpemU7CiAJCQlwcGFnZV9vZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzZF9kaWZfdHVwbGUpOwogCQl9CkBAIC0xODUzLDcgKzE4ODgsOCBAQAogfQogCiBzdGF0aWMgaW50IHJlc3Bfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyBsYmEsCi0JCSAgICAgIHVuc2lnbmVkIGludCBudW0sIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQorCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCwKKwkJICAgICAgdTMyIGVpX2xiYSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmbGFnczsKIAlpbnQgcmV0OwpAQCAtMTg2NCw3ICsxOTAwLDcgQEAKIAogCS8qIERJWCArIFQxMCBESUYgKi8KIAlpZiAoc2NzaV9kZWJ1Z19kaXggJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkgewotCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0pOworCQlpbnQgcHJvdF9yZXQgPSBwcm90X3ZlcmlmeV93cml0ZShTQ3BudCwgbGJhLCBudW0sIGVpX2xiYSk7CiAKIAkJaWYgKHByb3RfcmV0KSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwgMHgxMCwgcHJvdF9yZXQpOwpAQCAtMjg3MiwxMSArMjkwOCwxMiBAQAogCiAJY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKIAljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgorCWNhc2UgU0RfRElGX1RZUEUyX1BST1RFQ1RJT046CiAJY2FzZSBTRF9ESUZfVFlQRTNfUFJPVEVDVElPTjoKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgInNjc2lfZGVidWdfaW5pdDogZGlmIG11c3QgYmUgMCwgMSBvciAzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpX2RlYnVnX2luaXQ6IGRpZiBtdXN0IGJlIDAsIDEsIDIgb3IgM1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzEyMSw2ICszMTU4LDcgQEAKIAlpbnQgbGVuLCBrOwogCXVuc2lnbmVkIGludCBudW07CiAJdW5zaWduZWQgbG9uZyBsb25nIGxiYTsKKwl1MzIgZWlfbGJhOwogCWludCBlcnJzdHMgPSAwOwogCWludCB0YXJnZXQgPSBTQ3BudC0+ZGV2aWNlLT5pZDsKIAlzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCA9IE5VTEw7CkBAIC0zMjU0LDE0ICszMjkyLDMwIEBACiAJY2FzZSBSRUFEXzE2OgogCWNhc2UgUkVBRF8xMjoKIAljYXNlIFJFQURfMTA6CisJCS8qIFJFQUR7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBSRUFEXzY6CityZWFkOgogCQllcnJzdHMgPSBjaGVja19yZWFkaW5lc3MoU0NwbnQsIDAsIGRldmlwKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwogCQlpZiAoc2NzaV9kZWJ1Z19mYWtlX3J3KQogCQkJYnJlYWs7Ci0JCWdldF9kYXRhX3RyYW5zZmVyX2luZm8oY21kLCAmbGJhLCAmbnVtKTsKLQkJZXJyc3RzID0gcmVzcF9yZWFkKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwLCBlaV9sYmEpOwogCQlpZiAoaW5qX3JlY292ZXJlZCAmJiAoMCA9PSBlcnJzdHMpKSB7CiAJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIFJFQ09WRVJFRF9FUlJPUiwKIAkJCQkJVEhSRVNIT0xEX0VYQ0VFREVELCAwKTsKQEAgLTMyODgsMTQgKzMzNDIsMzAgQEAKIAljYXNlIFdSSVRFXzE2OgogCWNhc2UgV1JJVEVfMTI6CiAJY2FzZSBXUklURV8xMDoKKwkJLyogV1JJVEV7MTAsMTIsMTZ9IGFuZCBESUYgVHlwZSAyIGFyZSBuYXR1cmFsIGVuZW1pZXMgKi8KKwkJaWYgKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmCisJCSAgICBjbWRbMV0gJiAweGUwKSB7CisJCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQkJSU5WQUxJRF9DT01NQU5EX09QQ09ERSwgMCk7CisJCQllcnJzdHMgPSBjaGVja19jb25kaXRpb25fcmVzdWx0OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNjc2lfZGVidWdfZGlmID09IFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OIHx8CisJCSAgICAgc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUzX1BST1RFQ1RJT04pICYmCisJCSAgICAoY21kWzFdICYgMHhlMCkgPT0gMCkKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5wcm90ZWN0ZWQgUkQvV1IgdG8gRElGIGRldmljZVxuIik7CisKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBXUklURV82Ogord3JpdGU6CiAJCWVycnN0cyA9IGNoZWNrX3JlYWRpbmVzcyhTQ3BudCwgMCwgZGV2aXApOwogCQlpZiAoZXJyc3RzKQogCQkJYnJlYWs7CiAJCWlmIChzY3NpX2RlYnVnX2Zha2VfcncpCiAJCQlicmVhazsKLQkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0pOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSwgJmVpX2xiYSk7CisJCWVycnN0cyA9IHJlc3Bfd3JpdGUoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGlual9yZWNvdmVyZWQgJiYgKDAgPT0gZXJyc3RzKSkgewogCQkJbWtfc2Vuc2VfYnVmZmVyKGRldmlwLCBSRUNPVkVSRURfRVJST1IsCiAJCQkJCVRIUkVTSE9MRF9FWENFRURFRCwgMCk7CkBAIC0zMzQxLDE1ICszNDExLDM4IEBACiAJCQlicmVhazsKIAkJaWYgKHNjc2lfZGVidWdfZmFrZV9ydykKIAkJCWJyZWFrOwotCQlnZXRfZGF0YV90cmFuc2Zlcl9pbmZvKGNtZCwgJmxiYSwgJm51bSk7Ci0JCWVycnN0cyA9IHJlc3BfcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKKwkJZ2V0X2RhdGFfdHJhbnNmZXJfaW5mbyhjbWQsICZsYmEsICZudW0sICZlaV9sYmEpOworCQllcnJzdHMgPSByZXNwX3JlYWQoU0NwbnQsIGxiYSwgbnVtLCBkZXZpcCwgZWlfbGJhKTsKIAkJaWYgKGVycnN0cykKIAkJCWJyZWFrOwotCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXApOworCQllcnJzdHMgPSByZXNwX3dyaXRlKFNDcG50LCBsYmEsIG51bSwgZGV2aXAsIGVpX2xiYSk7CiAJCWlmIChlcnJzdHMpCiAJCQlicmVhazsKIAkJZXJyc3RzID0gcmVzcF94ZHdyaXRlcmVhZChTQ3BudCwgbGJhLCBudW0sIGRldmlwKTsKIAkJYnJlYWs7CisJY2FzZSBWQVJJQUJMRV9MRU5HVEhfQ01EOgorCQlpZiAoc2NzaV9kZWJ1Z19kaWYgPT0gU0RfRElGX1RZUEUyX1BST1RFQ1RJT04pIHsKKworCQkJaWYgKChjbWRbMTBdICYgMHhlMCkgPT0gMCkKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIlVucHJvdGVjdGVkIFJEL1dSIHRvIERJRiBkZXZpY2VcbiIpOworCisJCQlpZiAoY21kWzldID09IFJFQURfMzIpIHsKKwkJCQlCVUdfT04oU0NwbnQtPmNtZF9sZW4gPCAzMik7CisJCQkJZ290byByZWFkOworCQkJfQorCisJCQlpZiAoY21kWzldID09IFdSSVRFXzMyKSB7CisJCQkJQlVHX09OKFNDcG50LT5jbWRfbGVuIDwgMzIpOworCQkJCWdvdG8gd3JpdGU7CisJCQl9CisJCX0KKworCQlta19zZW5zZV9idWZmZXIoZGV2aXAsIElMTEVHQUxfUkVRVUVTVCwKKwkJCQlJTlZBTElEX0ZJRUxEX0lOX0NEQiwgMCk7CisJCWVycnN0cyA9IGNoZWNrX2NvbmRpdGlvbl9yZXN1bHQ7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJaWYgKFNDU0lfREVCVUdfT1BUX05PSVNFICYgc2NzaV9kZWJ1Z19vcHRzKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAic2NzaV9kZWJ1ZzogT3Bjb2RlOiAweCV4IG5vdCAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwppbmRleCA4NzcyMDRkLi4xYjAwNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKQEAgLTcyNSw2ICs3MjUsOSBAQAogCQljYXNlIE5FRURTX1JFVFJZOgogCQljYXNlIEZBSUxFRDoKIAkJCWJyZWFrOworCQljYXNlIEFERF9UT19NTFFVRVVFOgorCQkJcnRuID0gTkVFRFNfUkVUUlk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJ0biA9IEZBSUxFRDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IGM0NDc4MzguLjA1NDdhN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTMxNyw2ICszMTcsNyBAQAogb3V0X2RldmljZV9kZXN0cm95OgogCXNjc2lfZGV2aWNlX3NldF9zdGF0ZShzZGV2LCBTREVWX0RFTCk7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIG91dDoKIAlpZiAoZGlzcGxheV9mYWlsdXJlX21zZykKQEAgLTk1Nyw2ICs5NTgsNyBAQAogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+c2xhdmVfZGVzdHJveSkKIAkJc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3koc2Rldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKaW5kZXggZmRlNTQ1My4uNWM3ZWI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCkBAIC04NjQsMTAgKzg2NCw2IEBACiAJCWdvdG8gY2xlYW5fZGV2aWNlOwogCX0KIAotCS8qIHRha2UgYSByZWZlcmVuY2UgZm9yIHRoZSBzZGV2X2RldjsgdGhpcyBpcwotCSAqIHJlbGVhc2VkIGJ5IHRoZSBzZGV2X2NsYXNzIC5yZWxlYXNlICovCi0JZ2V0X2RldmljZSgmc2Rldi0+c2Rldl9nZW5kZXYpOwotCiAJLyogY3JlYXRlIHF1ZXVlIGZpbGVzLCB3aGljaCBtYXkgYmUgd3JpdGFibGUsIGRlcGVuZGluZyBvbiB0aGUgaG9zdCAqLwogCWlmIChzZGV2LT5ob3N0LT5ob3N0dC0+Y2hhbmdlX3F1ZXVlX2RlcHRoKQogCQllcnJvciA9IGRldmljZV9jcmVhdGVfZmlsZSgmc2Rldi0+c2Rldl9nZW5kZXYsICZzZGV2X2F0dHJfcXVldWVfZGVwdGhfcncpOwpAQCAtOTE3LDYgKzkxMyw3IEBACiAKIAlkZXZpY2VfZGVsKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJdHJhbnNwb3J0X2Rlc3Ryb3lfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcHV0X2RldmljZSgmc2Rldi0+c2Rldl9kZXYpOwogCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKIAogCXJldHVybiBlcnJvcjsKQEAgLTEwNjUsNyArMTA2Miw3IEBACiAJCSAgICAgc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmc2Rldi0+c2Rldl9kZXYpOwotCXNkZXYtPnNkZXZfZGV2LnBhcmVudCA9ICZzZGV2LT5zZGV2X2dlbmRldjsKKwlzZGV2LT5zZGV2X2Rldi5wYXJlbnQgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiAJc2Rldi0+c2Rldl9kZXYuY2xhc3MgPSAmc2Rldl9jbGFzczsKIAlkZXZfc2V0X25hbWUoJnNkZXYtPnNkZXZfZGV2LCAiJWQ6JWQ6JWQ6JWQiLAogCQkgICAgIHNkZXYtPmhvc3QtPmhvc3Rfbm8sIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLCBzZGV2LT5sdW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwppbmRleCBiOTg4ODVkLi5jNmY3MGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYwpAQCAtMzU4Niw2ICszNTg2LDcgQEAKIAogLyoqCiAgKiBmY19ic2dfaG9zdF9kaXNwYXRjaCAtIHByb2Nlc3MgZmMgaG9zdCBic2cgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIHRvIExMREQKKyAqIEBxOgkJZmMgaG9zdCByZXF1ZXN0IHF1ZXVlCiAgKiBAc2hvc3Q6CXNjc2kgaG9zdCBycG9ydCBhdHRhY2hlZCB0bwogICogQGpvYjoJYnNnIGpvYiB0byBiZSBwcm9jZXNzZWQKICAqLwpAQCAtMzY1NSw2ICszNjU2LDcgQEAKIGZhaWxfaG9zdF9tc2c6CiAJLyogcmV0dXJuIHRoZSBlcnJubyBmYWlsdXJlIGNvZGUgYXMgdGhlIG9ubHkgc3RhdHVzICovCiAJQlVHX09OKGpvYi0+cmVwbHlfbGVuIDwgc2l6ZW9mKHVpbnQzMl90KSk7CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAlqb2ItPnJlcGx5LT5yZXN1bHQgPSByZXQ7CiAJam9iLT5yZXBseV9sZW4gPSBzaXplb2YodWludDMyX3QpOwogCWZjX2JzZ19qb2Jkb25lKGpvYik7CkBAIC0zNjkzLDYgKzM2OTUsNyBAQAogCiAvKioKICAqIGZjX2JzZ19ycG9ydF9kaXNwYXRjaCAtIHByb2Nlc3MgcnBvcnQgYnNnIHJlcXVlc3RzIGFuZCBkaXNwYXRjaCB0byBMTERECisgKiBAcToJCXJwb3J0IHJlcXVlc3QgcXVldWUKICAqIEBzaG9zdDoJc2NzaSBob3N0IHJwb3J0IGF0dGFjaGVkIHRvCiAgKiBAcnBvcnQ6CXJwb3J0IHJlcXVlc3QgZGVzdGluZWQgdG8KICAqIEBqb2I6CWJzZyBqb2IgdG8gYmUgcHJvY2Vzc2VkCkBAIC0zNzM5LDYgKzM3NDIsNyBAQAogZmFpbF9ycG9ydF9tc2c6CiAJLyogcmV0dXJuIHRoZSBlcnJubyBmYWlsdXJlIGNvZGUgYXMgdGhlIG9ubHkgc3RhdHVzICovCiAJQlVHX09OKGpvYi0+cmVwbHlfbGVuIDwgc2l6ZW9mKHVpbnQzMl90KSk7CisJam9iLT5yZXBseS0+cmVwbHlfcGF5bG9hZF9yY3ZfbGVuID0gMDsKIAlqb2ItPnJlcGx5LT5yZXN1bHQgPSByZXQ7CiAJam9iLT5yZXBseV9sZW4gPSBzaXplb2YodWludDMyX3QpOwogCWZjX2JzZ19qb2Jkb25lKGpvYik7CkBAIC0zNzk1LDYgKzM3OTksNyBAQAogCQkvKiBjaGVjayBpZiB3ZSBoYXZlIHRoZSBtc2djb2RlIHZhbHVlIGF0IGxlYXN0ICovCiAJCWlmIChqb2ItPnJlcXVlc3RfbGVuIDwgc2l6ZW9mKHVpbnQzMl90KSkgewogCQkJQlVHX09OKGpvYi0+cmVwbHlfbGVuIDwgc2l6ZW9mKHVpbnQzMl90KSk7CisJCQlqb2ItPnJlcGx5LT5yZXBseV9wYXlsb2FkX3Jjdl9sZW4gPSAwOwogCQkJam9iLT5yZXBseS0+cmVzdWx0ID0gLUVOT01TRzsKIAkJCWpvYi0+cmVwbHlfbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKIAkJCWZjX2JzZ19qb2Jkb25lKGpvYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2QuYyBiL2RyaXZlcnMvc2NzaS9zZC5jCmluZGV4IDhkZDk2ZGMuLjkwOTNjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5jCkBAIC0xMTYsNiArMTE2LDkgQEAKICAqIG9iamVjdCBhZnRlciBsYXN0IHB1dCkgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoc2RfcmVmX211dGV4KTsKIAorc3RydWN0IGttZW1fY2FjaGUgKnNkX2NkYl9jYWNoZTsKK21lbXBvb2xfdCAqc2RfY2RiX3Bvb2w7CisKIHN0YXRpYyBjb25zdCBjaGFyICpzZF9jYWNoZV90eXBlc1tdID0gewogCSJ3cml0ZSB0aHJvdWdoIiwgIm5vbmUiLCAid3JpdGUgYmFjayIsCiAJIndyaXRlIGJhY2ssIG5vIHJlYWQgKGRhZnQpIgpAQCAtMzcwLDYgKzM3MywzMSBAQAogCW11dGV4X3VubG9jaygmc2RfcmVmX211dGV4KTsKIH0KIAorc3RhdGljIHZvaWQgc2RfcHJvdF9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmKQoreworCXVuc2lnbmVkIGludCBwcm90X29wID0gU0NTSV9QUk9UX05PUk1BTDsKKwl1bnNpZ25lZCBpbnQgZGl4ID0gc2NzaV9wcm90X3NnX2NvdW50KHNjbWQpOworCisJaWYgKHNjbWQtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgeworCQlpZiAoZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9QQVNTOworCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9TVFJJUDsKKwkJZWxzZSBpZiAoIWRpZiAmJiBkaXgpCisJCQlwcm90X29wID0gU0NTSV9QUk9UX1JFQURfSU5TRVJUOworCX0gZWxzZSB7CisJCWlmIChkaWYgJiYgZGl4KQorCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9QQVNTOworCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfSU5TRVJUOworCQllbHNlIGlmICghZGlmICYmIGRpeCkKKwkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA7CisJfQorCisJc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKKwlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgZGlmKTsKK30KKwogLyoqCiAgKglzZF9pbml0X2NvbW1hbmQgLSBidWlsZCBhIHNjc2kgKHJlYWQgb3Igd3JpdGUpIGNvbW1hbmQgZnJvbQogICoJaW5mb3JtYXRpb24gaW4gdGhlIHJlcXVlc3Qgc3RydWN0dXJlLgpAQCAtMzg4LDYgKzQxNiw3IEBACiAJc2VjdG9yX3QgdGhyZXNob2xkOwogCXVuc2lnbmVkIGludCB0aGlzX2NvdW50ID0gYmxrX3JxX3NlY3RvcnMocnEpOwogCWludCByZXQsIGhvc3RfZGlmOworCXVuc2lnbmVkIGNoYXIgcHJvdGVjdDsKIAogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpIHsKIAkJcmV0ID0gc2NzaV9zZXR1cF9ibGtfcGNfY21uZChzZHAsIHJxKTsKQEAgLTUyMCwxMyArNTQ5LDQ5IEBACiAJLyogU2V0IFJEUFJPVEVDVC9XUlBST1RFQ1QgaWYgZGlzayBpcyBmb3JtYXR0ZWQgd2l0aCBESUYgKi8KIAlob3N0X2RpZiA9IHNjc2lfaG9zdF9kaWZfY2FwYWJsZShzZHAtPmhvc3QsIHNka3AtPnByb3RlY3Rpb25fdHlwZSk7CiAJaWYgKGhvc3RfZGlmKQotCQlTQ3BudC0+Y21uZFsxXSA9IDEgPDwgNTsKKwkJcHJvdGVjdCA9IDEgPDwgNTsKIAllbHNlCi0JCVNDcG50LT5jbW5kWzFdID0gMDsKKwkJcHJvdGVjdCA9IDA7CiAKLQlpZiAoYmxvY2sgPiAweGZmZmZmZmZmKSB7CisJaWYgKGhvc3RfZGlmID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OKSB7CisJCVNDcG50LT5jbW5kID0gbWVtcG9vbF9hbGxvYyhzZF9jZGJfcG9vbCwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHVubGlrZWx5KFNDcG50LT5jbW5kID09IE5VTEwpKSB7CisJCQlyZXQgPSBCTEtQUkVQX0RFRkVSOworCQkJZ290byBvdXQ7CisJCX0KKworCQlTQ3BudC0+Y21kX2xlbiA9IFNEX0VYVF9DREJfU0laRTsKKwkJbWVtc2V0KFNDcG50LT5jbW5kLCAwLCBTQ3BudC0+Y21kX2xlbik7CisJCVNDcG50LT5jbW5kWzBdID0gVkFSSUFCTEVfTEVOR1RIX0NNRDsKKwkJU0NwbnQtPmNtbmRbN10gPSAweDE4OworCQlTQ3BudC0+Y21uZFs5XSA9IChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkgPyBSRUFEXzMyIDogV1JJVEVfMzI7CisJCVNDcG50LT5jbW5kWzEwXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKKworCQkvKiBMQkEgKi8KKwkJU0NwbnQtPmNtbmRbMTJdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDU2KSAmIDB4ZmYgOiAwOworCQlTQ3BudC0+Y21uZFsxM10gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNDgpICYgMHhmZiA6IDA7CisJCVNDcG50LT5jbW5kWzE0XSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0MCkgJiAweGZmIDogMDsKKwkJU0NwbnQtPmNtbmRbMTVdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDMyKSAmIDB4ZmYgOiAwOworCQlTQ3BudC0+Y21uZFsxNl0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDI0KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzE3XSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMTYpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMThdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA4KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzE5XSA9ICh1bnNpZ25lZCBjaGFyKSBibG9jayAmIDB4ZmY7CisKKwkJLyogRXhwZWN0ZWQgSW5kaXJlY3QgTEJBICovCisJCVNDcG50LT5jbW5kWzIwXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMjQpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMjFdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiAxNikgJiAweGZmOworCQlTQ3BudC0+Y21uZFsyMl0gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDgpICYgMHhmZjsKKwkJU0NwbnQtPmNtbmRbMjNdID0gKHVuc2lnbmVkIGNoYXIpIGJsb2NrICYgMHhmZjsKKworCQkvKiBUcmFuc2ZlciBsZW5ndGggKi8KKwkJU0NwbnQtPmNtbmRbMjhdID0gKHVuc2lnbmVkIGNoYXIpICh0aGlzX2NvdW50ID4+IDI0KSAmIDB4ZmY7CisJCVNDcG50LT5jbW5kWzI5XSA9ICh1bnNpZ25lZCBjaGFyKSAodGhpc19jb3VudCA+PiAxNikgJiAweGZmOworCQlTQ3BudC0+Y21uZFszMF0gPSAodW5zaWduZWQgY2hhcikgKHRoaXNfY291bnQgPj4gOCkgJiAweGZmOworCQlTQ3BudC0+Y21uZFszMV0gPSAodW5zaWduZWQgY2hhcikgdGhpc19jb3VudCAmIDB4ZmY7CisJfSBlbHNlIGlmIChibG9jayA+IDB4ZmZmZmZmZmYpIHsKIAkJU0NwbnQtPmNtbmRbMF0gKz0gUkVBRF8xNiAtIFJFQURfNjsKLQkJU0NwbnQtPmNtbmRbMV0gfD0gYmxrX2Z1YV9ycShycSkgPyAweDggOiAwOworCQlTQ3BudC0+Y21uZFsxXSA9IHByb3RlY3QgfCAoYmxrX2Z1YV9ycShycSkgPyAweDggOiAwKTsKIAkJU0NwbnQtPmNtbmRbMl0gPSBzaXplb2YoYmxvY2spID4gNCA/ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gNTYpICYgMHhmZiA6IDA7CiAJCVNDcG50LT5jbW5kWzNdID0gc2l6ZW9mKGJsb2NrKSA+IDQgPyAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDQ4KSAmIDB4ZmYgOiAwOwogCQlTQ3BudC0+Y21uZFs0XSA9IHNpemVvZihibG9jaykgPiA0ID8gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA0MCkgJiAweGZmIDogMDsKQEAgLTU0Nyw3ICs2MTIsNyBAQAogCQkJdGhpc19jb3VudCA9IDB4ZmZmZjsKIAogCQlTQ3BudC0+Y21uZFswXSArPSBSRUFEXzEwIC0gUkVBRF82OwotCQlTQ3BudC0+Y21uZFsxXSB8PSBibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDA7CisJCVNDcG50LT5jbW5kWzFdID0gcHJvdGVjdCB8IChibGtfZnVhX3JxKHJxKSA/IDB4OCA6IDApOwogCQlTQ3BudC0+Y21uZFsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoYmxvY2sgPj4gMjQpICYgMHhmZjsKIAkJU0NwbnQtPmNtbmRbM10gPSAodW5zaWduZWQgY2hhcikgKGJsb2NrID4+IDE2KSAmIDB4ZmY7CiAJCVNDcG50LT5jbW5kWzRdID0gKHVuc2lnbmVkIGNoYXIpIChibG9jayA+PiA4KSAmIDB4ZmY7CkBAIC01NzgsOCArNjQzLDcgQEAKIAogCS8qIElmIERJRiBvciBESVggaXMgZW5hYmxlZCwgdGVsbCBIQkEgaG93IHRvIGhhbmRsZSByZXF1ZXN0ICovCiAJaWYgKGhvc3RfZGlmIHx8IHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCkpCi0JCXNkX2RpZl9vcChTQ3BudCwgaG9zdF9kaWYsIHNjc2lfcHJvdF9zZ19jb3VudChTQ3BudCksCi0JCQkgIHNka3AtPnByb3RlY3Rpb25fdHlwZSk7CisJCXNkX3Byb3Rfb3AoU0NwbnQsIGhvc3RfZGlmKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkbid0IGRpc2Nvbm5lY3QgaW4gdGhlIG1pZGRsZSBvZiBhIHNlY3Rvciwgc28gd2l0aCBhIGR1bWIKQEAgLTEwMjMsNiArMTA4Nyw3IEBACiAJaW50IHJlc3VsdCA9IFNDcG50LT5yZXN1bHQ7CiAJdW5zaWduZWQgaW50IGdvb2RfYnl0ZXMgPSByZXN1bHQgPyAwIDogc2NzaV9idWZmbGVuKFNDcG50KTsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CisJc3RydWN0IHNjc2lfZGlzayAqc2RrcCA9IHNjc2lfZGlzayhTQ3BudC0+cmVxdWVzdC0+cnFfZGlzayk7CiAJaW50IHNlbnNlX3ZhbGlkID0gMDsKIAlpbnQgc2Vuc2VfZGVmZXJyZWQgPSAwOwogCkBAIC0xMDg0LDYgKzExNDksMTAgQEAKIAlpZiAocnFfZGF0YV9kaXIoU0NwbnQtPnJlcXVlc3QpID09IFJFQUQgJiYgc2NzaV9wcm90X3NnX2NvdW50KFNDcG50KSkKIAkJc2RfZGlmX2NvbXBsZXRlKFNDcG50LCBnb29kX2J5dGVzKTsKIAorCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RrcC0+ZGV2aWNlLT5ob3N0LCBzZGtwLT5wcm90ZWN0aW9uX3R5cGUpCisJICAgID09IFNEX0RJRl9UWVBFMl9QUk9URUNUSU9OICYmIFNDcG50LT5jbW5kICE9IFNDcG50LT5yZXF1ZXN0LT5jbWQpCisJCW1lbXBvb2xfZnJlZShTQ3BudC0+Y21uZCwgc2RfY2RiX3Bvb2wpOworCiAJcmV0dXJuIGdvb2RfYnl0ZXM7CiB9CiAKQEAgLTEyMzgsMzQgKzEzMDcsMjggQEAKIAl1OCB0eXBlOwogCiAJaWYgKHNjc2lfZGV2aWNlX3Byb3RlY3Rpb24oc2RwKSA9PSAwIHx8IChidWZmZXJbMTJdICYgMSkgPT0gMCkKLQkJdHlwZSA9IDA7Ci0JZWxzZQotCQl0eXBlID0gKChidWZmZXJbMTJdID4+IDEpICYgNykgKyAxOyAvKiBQX1RZUEUgMCA9IFR5cGUgMSAqLworCQlyZXR1cm47CisKKwl0eXBlID0gKChidWZmZXJbMTJdID4+IDEpICYgNykgKyAxOyAvKiBQX1RZUEUgMCA9IFR5cGUgMSAqLworCisJaWYgKHR5cGUgPT0gc2RrcC0+cHJvdGVjdGlvbl90eXBlIHx8ICFzZGtwLT5maXJzdF9zY2FuKQorCQlyZXR1cm47CiAKIAlzZGtwLT5wcm90ZWN0aW9uX3R5cGUgPSB0eXBlOwogCi0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTRF9ESUZfVFlQRTBfUFJPVEVDVElPTjoKLQljYXNlIFNEX0RJRl9UWVBFMV9QUk9URUNUSU9OOgotCWNhc2UgU0RfRElGX1RZUEUzX1BST1RFQ1RJT046Ci0JCWJyZWFrOwotCi0JY2FzZSBTRF9ESUZfVFlQRTJfUFJPVEVDVElPTjoKLQkJc2RfcHJpbnRrKEtFUk5fRVJSLCBzZGtwLCAiZm9ybWF0dGVkIHdpdGggRElGIFR5cGUgMiAiCVwKLQkJCSAgInByb3RlY3Rpb24gd2hpY2ggaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLiAiCVwKLQkJCSAgIkRpc2FibGluZyBkaXNrIVxuIik7Ci0JCWdvdG8gZGlzYWJsZTsKLQotCWRlZmF1bHQ6Ci0JCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgImZvcm1hdHRlZCB3aXRoIHVua25vd24gIglcCi0JCQkgICJwcm90ZWN0aW9uIHR5cGUgJWQuIERpc2FibGluZyBkaXNrIVxuIiwgdHlwZSk7Ci0JCWdvdG8gZGlzYWJsZTsKKwlpZiAodHlwZSA+IFNEX0RJRl9UWVBFM19QUk9URUNUSU9OKSB7CisJCXNkX3ByaW50ayhLRVJOX0VSUiwgc2RrcCwgImZvcm1hdHRlZCB3aXRoIHVuc3VwcG9ydGVkICIJXAorCQkJICAicHJvdGVjdGlvbiB0eXBlICV1LiBEaXNhYmxpbmcgZGlzayFcbiIsIHR5cGUpOworCQlzZGtwLT5jYXBhY2l0eSA9IDA7CisJCXJldHVybjsKIAl9CiAKLQlyZXR1cm47Ci0KLWRpc2FibGU6Ci0Jc2RrcC0+Y2FwYWNpdHkgPSAwOworCWlmIChzY3NpX2hvc3RfZGlmX2NhcGFibGUoc2RwLT5ob3N0LCB0eXBlKSkKKwkJc2RfcHJpbnRrKEtFUk5fTk9USUNFLCBzZGtwLAorCQkJICAiRW5hYmxpbmcgRElGIFR5cGUgJXUgcHJvdGVjdGlvblxuIiwgdHlwZSk7CisJZWxzZQorCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCisJCQkgICJEaXNhYmxpbmcgRElGIFR5cGUgJXUgcHJvdGVjdGlvblxuIiwgdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfY2FwYWNpdHlfZXJyb3Ioc3RydWN0IHNjc2lfZGlzayAqc2RrcCwgc3RydWN0IHNjc2lfZGV2aWNlICpzZHAsCkBAIC0yMzAwLDggKzIzNjMsMjQgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfY2xhc3M7CiAKKwlzZF9jZGJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgic2RfZXh0X2NkYiIsIFNEX0VYVF9DREJfU0laRSwKKwkJCQkJIDAsIDAsIE5VTEwpOworCWlmICghc2RfY2RiX2NhY2hlKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2Q6IGNhbid0IGluaXQgZXh0ZW5kZWQgY2RiIGNhY2hlXG4iKTsKKwkJZ290byBlcnJfb3V0X2NsYXNzOworCX0KKworCXNkX2NkYl9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKFNEX01FTVBPT0xfU0laRSwgc2RfY2RiX2NhY2hlKTsKKwlpZiAoIXNkX2NkYl9wb29sKSB7CisJCXByaW50ayhLRVJOX0VSUiAic2Q6IGNhbid0IGluaXQgZXh0ZW5kZWQgY2RiIHBvb2xcbiIpOworCQlnb3RvIGVycl9vdXRfY2FjaGU7CisJfQorCiAJcmV0dXJuIDA7CiAKK2Vycl9vdXRfY2FjaGU6CisJa21lbV9jYWNoZV9kZXN0cm95KHNkX2NkYl9jYWNoZSk7CisKIGVycl9vdXRfY2xhc3M6CiAJY2xhc3NfdW5yZWdpc3Rlcigmc2RfZGlza19jbGFzcyk7CiBlcnJfb3V0OgpAQCAtMjMyMSw2ICsyNDAwLDkgQEAKIAogCVNDU0lfTE9HX0hMUVVFVUUoMywgcHJpbnRrKCJleGl0X3NkOiBleGl0aW5nIHNkIGRyaXZlclxuIikpOwogCisJbWVtcG9vbF9kZXN0cm95KHNkX2NkYl9wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc2RfY2RiX2NhY2hlKTsKKwogCXNjc2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNkX3RlbXBsYXRlLmdlbmRydik7CiAJY2xhc3NfdW5yZWdpc3Rlcigmc2RfZGlza19jbGFzcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5oIGIvZHJpdmVycy9zY3NpL3NkLmgKaW5kZXggODQ3NGI1YmEuLmUzNzQ4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9zZC5oCkBAIC0zNyw2ICszNywxMSBAQAogICovCiAjZGVmaW5lIFNEX0xBU1RfQlVHR1lfU0VDVE9SUwk4CiAKK2VudW0geworCVNEX0VYVF9DREJfU0laRSA9IDMyLAkvKiBFeHRlbmRlZCBDREIgc2l6ZSAqLworCVNEX01FTVBPT0xfU0laRSA9IDIsCS8qIENEQiBwb29sIHNpemUgKi8KK307CisKIHN0cnVjdCBzY3NpX2Rpc2sgewogCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJpdmVyOwkvKiBhbHdheXMgJnNkX3RlbXBsYXRlICovCiAJc3RydWN0IHNjc2lfZGV2aWNlICpkZXZpY2U7CkBAIC0xMDEsMTYgKzEwNiwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZCiAKLWV4dGVybiB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKik7CiBleHRlcm4gaW50IHNkX2RpZl9wcmVwYXJlKHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBzZF9kaWZfY29tcGxldGUoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQsIHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgaW50IGMpCi17Ci19CiBzdGF0aWMgaW5saW5lIHZvaWQgc2RfZGlmX2NvbmZpZ19ob3N0KHN0cnVjdCBzY3NpX2Rpc2sgKmRpc2spCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2RfZGlmLmMgYi9kcml2ZXJzL3Njc2kvc2RfZGlmLmMKaW5kZXggODJmMTRhOS4uODhkYTk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkX2RpZi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZF9kaWYuYwpAQCAtMzIwLDE1ICszMjAsNiBAQAogCQlkaWYgPSAwOyBkaXggPSAxOwogCX0KIAotCWlmICh0eXBlKSB7Ci0JCWlmIChkaWYpCi0JCQlzZF9wcmludGsoS0VSTl9OT1RJQ0UsIHNka3AsCi0JCQkJICAiRW5hYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7Ci0JCWVsc2UKLQkJCXNkX3ByaW50ayhLRVJOX05PVElDRSwgc2RrcCwKLQkJCQkgICJEaXNhYmxpbmcgRElGIFR5cGUgJWQgcHJvdGVjdGlvblxuIiwgdHlwZSk7Ci0JfQotCiAJaWYgKCFkaXgpCiAJCXJldHVybjsKIApAQCAtMzYwLDYyICszNTEsNiBAQAogfQogCiAvKgotICogRElGIERNQSBvcGVyYXRpb24gbWFnaWMgZGVjb2RlciByaW5nLgotICovCi12b2lkIHNkX2RpZl9vcChzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLCB1bnNpZ25lZCBpbnQgZGlmLCB1bnNpZ25lZCBpbnQgZGl4LCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlpbnQgY3N1bV9jb252ZXJ0LCBwcm90X29wOwotCi0JcHJvdF9vcCA9IDA7Ci0KLQkvKiBDb252ZXJ0IGNoZWNrc3VtPyAqLwotCWlmIChzY3NpX2hvc3RfZ2V0X2d1YXJkKHNjbWQtPmRldmljZS0+aG9zdCkgIT0gU0hPU1RfRElYX0dVQVJEX0NSQykKLQkJY3N1bV9jb252ZXJ0ID0gMTsKLQllbHNlCi0JCWNzdW1fY29udmVydCA9IDA7Ci0KLQlCVUdfT04oZGlmICYmIChzY21kLT5jbW5kWzBdID09IFJFQURfNiB8fCBzY21kLT5jbW5kWzBdID09IFdSSVRFXzYpKTsKLQotCXN3aXRjaCAoc2NtZC0+Y21uZFswXSkgewotCWNhc2UgUkVBRF82OgotCWNhc2UgUkVBRF8xMDoKLQljYXNlIFJFQURfMTI6Ci0JY2FzZSBSRUFEXzE2OgotCQlpZiAoZGlmICYmIGRpeCkKLQkJCWlmIChjc3VtX2NvbnZlcnQpCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX0NPTlZFUlQ7Ci0JCQllbHNlCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1BBU1M7Ci0JCWVsc2UgaWYgKGRpZiAmJiAhZGl4KQotCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9SRUFEX1NUUklQOwotCQllbHNlIGlmICghZGlmICYmIGRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfUkVBRF9JTlNFUlQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFdSSVRFXzY6Ci0JY2FzZSBXUklURV8xMDoKLQljYXNlIFdSSVRFXzEyOgotCWNhc2UgV1JJVEVfMTY6Ci0JCWlmIChkaWYgJiYgZGl4KQotCQkJaWYgKGNzdW1fY29udmVydCkKLQkJCQlwcm90X29wID0gU0NTSV9QUk9UX1dSSVRFX0NPTlZFUlQ7Ci0JCQllbHNlCi0JCQkJcHJvdF9vcCA9IFNDU0lfUFJPVF9XUklURV9QQVNTOwotCQllbHNlIGlmIChkaWYgJiYgIWRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfSU5TRVJUOwotCQllbHNlIGlmICghZGlmICYmIGRpeCkKLQkJCXByb3Rfb3AgPSBTQ1NJX1BST1RfV1JJVEVfU1RSSVA7Ci0KLQkJYnJlYWs7Ci0JfQotCi0Jc2NzaV9zZXRfcHJvdF9vcChzY21kLCBwcm90X29wKTsKLQlpZiAoZGlmKQotCQlzY3NpX3NldF9wcm90X3R5cGUoc2NtZCwgdHlwZSk7Ci19Ci0KLS8qCiAgKiBUaGUgdmlydHVhbCBzdGFydCBzZWN0b3IgaXMgdGhlIG9uZSB0aGF0IHdhcyBvcmlnaW5hbGx5IHN1Ym1pdHRlZAogICogYnkgdGhlIGJsb2NrIGxheWVyLglEdWUgdG8gcGFydGl0aW9uaW5nLCBNRC9ETSBjbG9uaW5nLCBldGMuIHRoZQogICogYWN0dWFsIHBoeXNpY2FsIHN0YXJ0IHNlY3RvciBpcyBsaWtlbHkgdG8gYmUgZGlmZmVyZW50LiAgUmVtYXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggODQ4YjU5NC4uMDQwZjc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTExODUsNyArMTE4NSw3IEBACiAJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzZ19tbWFwX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2dfbW1hcF92bV9vcHMgPSB7CiAJLmZhdWx0ID0gc2dfdm1hX2ZhdWx0LAogfTsKIApAQCAtMTMxNyw3ICsxMzE3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5yZWFkID0gc2dfcmVhZCwKIAkud3JpdGUgPSBzZ193cml0ZSwKQEAgLTE3MDgsMTEgKzE3MDgsNiBAQAogCVNnX3NjYXR0ZXJfaG9sZCAqcmVxX3NjaHAgPSAmc3JwLT5kYXRhOwogCiAJU0NTSV9MT0dfVElNRU9VVCg0LCBwcmludGsoInNnX2ZpbmlzaF9yZW1fcmVxOiByZXNfdXNlZD0lZFxuIiwgKGludCkgc3JwLT5yZXNfdXNlZCkpOwotCWlmIChzcnAtPnJlc191c2VkKQotCQlzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7Ci0JZWxzZQotCQlzZ19yZW1vdmVfc2NhdChyZXFfc2NocCk7Ci0KIAlpZiAoc3JwLT5ycSkgewogCQlpZiAoc3JwLT5iaW8pCiAJCQlyZXQgPSBibGtfcnFfdW5tYXBfdXNlcihzcnAtPmJpbyk7CkBAIC0xNzIwLDYgKzE3MTUsMTEgQEAKIAkJYmxrX3B1dF9yZXF1ZXN0KHNycC0+cnEpOwogCX0KIAorCWlmIChzcnAtPnJlc191c2VkKQorCQlzZ191bmxpbmtfcmVzZXJ2ZShzZnAsIHNycCk7CisJZWxzZQorCQlzZ19yZW1vdmVfc2NhdChyZXFfc2NocCk7CisKIAlzZ19yZW1vdmVfcmVxdWVzdChzZnAsIHNycCk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjE5NCw5ICsyMTk0LDExIEBACiBzdGF0aWMgaW50IHNnX3Byb2Nfc2luZ2xlX29wZW5fYWRpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgc3NpemVfdCBzZ19wcm9jX3dyaXRlX2FkaW8oc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhZGlvX2ZvcHMgPSB7Ci0JLyogLm93bmVyLCAucmVhZCBhbmQgLmxsc2VlayBhZGRlZCBpbiBzZ19wcm9jX2luaXQoKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRpb19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9hZGlvLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkud3JpdGUgPSBzZ19wcm9jX3dyaXRlX2FkaW8sCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CkBAIC0yMjA0LDIzICsyMjA2LDMyIEBACiBzdGF0aWMgaW50IHNnX3Byb2Nfc2luZ2xlX29wZW5fZHJlc3N6KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyBzc2l6ZV90IHNnX3Byb2Nfd3JpdGVfZHJlc3N6KHN0cnVjdCBmaWxlICpmaWxwLCAKIAkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcmVzc3pfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRyZXNzel9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9kcmVzc3osCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS53cml0ZSA9IHNnX3Byb2Nfd3JpdGVfZHJlc3N6LAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IHNnX3Byb2Nfc2VxX3Nob3dfdmVyc2lvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX3ZlcnNpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdmVyc2lvbl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl92ZXJzaW9uLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBzZ19wcm9jX3NlcV9zaG93X2RldmhkcihzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX3NpbmdsZV9vcGVuX2RldmhkcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZoZHJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmhkcl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19zaW5nbGVfb3Blbl9kZXZoZHIsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCkBAIC0yMjI5LDggKzIyNDAsMTEgQEAKIHN0YXRpYyB2b2lkICogZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKTsKIHN0YXRpYyB2b2lkICogZGV2X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpOwogc3RhdGljIHZvaWQgZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdik7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gc2dfcHJvY19vcGVuX2RldiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldl9zZXFfb3BzID0gewpAQCAtMjI0Miw4ICsyMjU2LDExIEBACiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZXZzdHJzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdik7CiBzdGF0aWMgaW50IHNnX3Byb2Nfb3Blbl9kZXZzdHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldnN0cnNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldnN0cnNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHNnX3Byb2Nfb3Blbl9kZXZzdHJzLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGV2c3Ryc19zZXFfb3BzID0gewpAQCAtMjI1NSw4ICsyMjcyLDExIEBACiAKIHN0YXRpYyBpbnQgc2dfcHJvY19zZXFfc2hvd19kZWJ1ZyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpOwogc3RhdGljIGludCBzZ19wcm9jX29wZW5fZGVidWcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBzZ19wcm9jX29wZW5fZGVidWcsCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZWJ1Z19zZXFfb3BzID0gewpAQCAtMjI2OSw3ICsyMjg5LDcgQEAKIAogc3RydWN0IHNnX3Byb2NfbGVhZiB7CiAJY29uc3QgY2hhciAqIG5hbWU7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHM7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIGZvcHM7CiB9OwogCiBzdGF0aWMgc3RydWN0IHNnX3Byb2NfbGVhZiBzZ19wcm9jX2xlYWZfYXJyW10gPSB7CkBAIC0yMjk1LDkgKzIzMTUsNiBAQAogCWZvciAoayA9IDA7IGsgPCBudW1fbGVhdmVzOyArK2spIHsKIAkJbGVhZiA9ICZzZ19wcm9jX2xlYWZfYXJyW2tdOwogCQltYXNrID0gbGVhZi0+Zm9wcy0+d3JpdGUgPyBTX0lSVUdPIHwgU19JV1VTUiA6IFNfSVJVR087Ci0JCWxlYWYtPmZvcHMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCWxlYWYtPmZvcHMtPnJlYWQgPSBzZXFfcmVhZDsKLQkJbGVhZi0+Zm9wcy0+bGxzZWVrID0gc2VxX2xzZWVrOwogCQlwcm9jX2NyZWF0ZShsZWFmLT5uYW1lLCBtYXNrLCBzZ19wcm9jX3NncCwgbGVhZi0+Zm9wcyk7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NyLmMgYi9kcml2ZXJzL3Njc2kvc3IuYwppbmRleCBlYjYxZjdhLi5kNmYzNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3IuYworKysgYi9kcml2ZXJzL3Njc2kvc3IuYwpAQCAtNjg0LDE0ICs2ODQsMjAgQEAKIAkJY2QtPmNhcGFjaXR5ID0gMHgxZmZmZmY7CiAJCXNlY3Rvcl9zaXplID0gMjA0ODsJLyogQSBndWVzcywganVzdCBpbiBjYXNlICovCiAJfSBlbHNlIHsKLSNpZiAwCi0JCWlmIChjZHJvbV9nZXRfbGFzdF93cml0dGVuKCZjZC0+Y2RpLAotCQkJCQkgICAmY2QtPmNhcGFjaXR5KSkKLSNlbmRpZgotCQkJY2QtPmNhcGFjaXR5ID0gMSArICgoYnVmZmVyWzBdIDw8IDI0KSB8Ci0JCQkJCQkgICAgKGJ1ZmZlclsxXSA8PCAxNikgfAotCQkJCQkJICAgIChidWZmZXJbMl0gPDwgOCkgfAotCQkJCQkJICAgIGJ1ZmZlclszXSk7CisJCWxvbmcgbGFzdF93cml0dGVuOworCisJCWNkLT5jYXBhY2l0eSA9IDEgKyAoKGJ1ZmZlclswXSA8PCAyNCkgfCAoYnVmZmVyWzFdIDw8IDE2KSB8CisJCQkJICAgIChidWZmZXJbMl0gPDwgOCkgfCBidWZmZXJbM10pOworCQkvKgorCQkgKiBSRUFEX0NBUEFDSVRZIGRvZXNuJ3QgcmV0dXJuIHRoZSBjb3JyZWN0IHNpemUgb24KKwkJICogY2VydGFpbiBVREYgbWVkaWEuICBJZiBsYXN0X3dyaXR0ZW4gaXMgbGFyZ2VyLCB1c2UKKwkJICogaXQgaW5zdGVhZC4KKwkJICoKKwkJICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjgKKwkJICovCisJCWlmICghY2Ryb21fZ2V0X2xhc3Rfd3JpdHRlbigmY2QtPmNkaSwgJmxhc3Rfd3JpdHRlbikpCisJCQljZC0+Y2FwYWNpdHkgPSBtYXhfdChsb25nLCBjZC0+Y2FwYWNpdHksIGxhc3Rfd3JpdHRlbik7CisKIAkJc2VjdG9yX3NpemUgPSAoYnVmZmVyWzRdIDw8IDI0KSB8CiAJCSAgICAoYnVmZmVyWzVdIDw8IDE2KSB8IChidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107CiAJCXN3aXRjaCAoc2VjdG9yX3NpemUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdC5jIGIvZHJpdmVycy9zY3NpL3N0LmMKaW5kZXggYjMzZDA0Mi4uMTJkNThhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0LmMKQEAgLTI4NTksMTEgKzI4NTksOCBAQAogCQkJaW9jdGxfcmVzdWx0ID0gc3RfaW50X2lvY3RsKFNUcCwgTVRCU0YsIDEpOwogCiAJCWlmIChjbWRfaW4gPT0gTVRTRVRCTEsgfHwgY21kX2luID09IFNFVF9ERU5TX0FORF9CTEspIHsKLQkJCWludCBvbGRfYmxvY2tfc2l6ZSA9IFNUcC0+YmxvY2tfc2l6ZTsKIAkJCVNUcC0+YmxvY2tfc2l6ZSA9IGFyZyAmIE1UX1NUX0JMS1NJWkVfTUFTSzsKIAkJCWlmIChTVHAtPmJsb2NrX3NpemUgIT0gMCkgewotCQkJCWlmIChvbGRfYmxvY2tfc2l6ZSA9PSAwKQotCQkJCQlub3JtYWxpemVfYnVmZmVyKFNUcC0+YnVmZmVyKTsKIAkJCQkoU1RwLT5idWZmZXIpLT5idWZmZXJfYmxvY2tzID0KIAkJCQkgICAgKFNUcC0+YnVmZmVyKS0+YnVmZmVyX3NpemUgLyBTVHAtPmJsb2NrX3NpemU7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggMjIwOTYyMC4uNzM3YjRjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtNjQsNiArNjQsOCBAQAogCXJldHVybiAoc2VyaWFsODI1MF9yZWcubWlub3IgLSA2NCkgKyBwb3J0LT5saW5lOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IHNraXBfdHhlbl90ZXN0OyAvKiBmb3JjZSBza2lwIG9mIHR4ZW4gdGVzdCBhdCBpbml0IHRpbWUgKi8KKwogLyoKICAqIERlYnVnZ2luZy4KICAqLwpAQCAtMTA4Nyw3ICsxMDg5LDcgQEAKIAlpZiAoIXVwLT5wb3J0LmlvYmFzZSAmJiAhdXAtPnBvcnQubWFwYmFzZSAmJiAhdXAtPnBvcnQubWVtYmFzZSkKIAkJcmV0dXJuOwogCi0JREVCVUdfQVVUT0NPTkYoInR0eVMlZDogYXV0b2NvbmYgKDB4JTA0eCwgMHglcCk6ICIsCisJREVCVUdfQVVUT0NPTkYoInR0eVMlZDogYXV0b2NvbmYgKDB4JTA0bHgsIDB4JXApOiAiLAogCQkgICAgICAgc2VyaWFsX2luZGV4KCZ1cC0+cG9ydCksIHVwLT5wb3J0LmlvYmFzZSwgdXAtPnBvcnQubWVtYmFzZSk7CiAKIAkvKgpAQCAtMjEwOCw3ICsyMTEwLDcgQEAKIAkgICBpcyB2YXJpYWJsZS4gU28sIGxldCdzIGp1c3QgZG9uJ3QgdGVzdCBpZiB3ZSByZWNlaXZlCiAJICAgVFggaXJxLiBUaGlzIHdheSwgd2UnbGwgbmV2ZXIgZW5hYmxlIFVBUlRfQlVHX1RYRU4uCiAJICovCi0JaWYgKHVwLT5wb3J0LmZsYWdzICYgVVBGX05PX1RYRU5fVEVTVCkKKwlpZiAoc2tpcF90eGVuX3Rlc3QgfHwgdXAtPnBvcnQuZmxhZ3MgJiBVUEZfTk9fVFhFTl9URVNUKQogCQlnb3RvIGRvbnRfdGVzdF90eF9lbjsKIAogCS8qCkBAIC0zMjQ4LDYgKzMyNTAsOSBAQAogbW9kdWxlX3BhcmFtKG5yX3VhcnRzLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobnJfdWFydHMsICJNYXhpbXVtIG51bWJlciBvZiBVQVJUcyBzdXBwb3J0ZWQuICgxLSIgX19NT0RVTEVfU1RSSU5HKENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUykgIikiKTsKIAorbW9kdWxlX3BhcmFtKHNraXBfdHhlbl90ZXN0LCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2tpcF90eGVuX3Rlc3QsICJTa2lwIGNoZWNraW5nIGZvciB0aGUgVFhFTiBidWcgYXQgaW5pdCB0aW1lIik7CisKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBCiBtb2R1bGVfcGFyYW1fYXJyYXkocHJvYmVfcnNhLCB1bG9uZywgJnByb2JlX3JzYV9jb3VudCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByb2JlX3JzYSwgIlByb2JlIEkvTyBwb3J0cyBmb3IgUlNBIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYwppbmRleCBlNzEwOGU3Li5iMjhhZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKQEAgLTE1NjEsMTEgKzE1NjEsMTYgQEAKIAlwYm5fZXhhcl9YUjE3QzE1MiwKIAlwYm5fZXhhcl9YUjE3QzE1NCwKIAlwYm5fZXhhcl9YUjE3QzE1OCwKKwlwYm5fZXhhcl9pYm1fc2F0dXJuLAogCXBibl9wYXNlbWlfMTY4Mk0sCiAJcGJuX25pODQzMF8yLAogCXBibl9uaTg0MzBfNCwKIAlwYm5fbmk4NDMwXzgsCiAJcGJuX25pODQzMF8xNiwKKwlwYm5fQURESURBVEFfUENJZV8xXzM5MDYyNTAsCisJcGJuX0FERElEQVRBX1BDSWVfMl8zOTA2MjUwLAorCXBibl9BRERJREFUQV9QQ0llXzRfMzkwNjI1MCwKKwlwYm5fQURESURBVEFfUENJZV84XzM5MDYyNTAsCiB9OwogCiAvKgpAQCAtMjE0Niw2ICsyMTUxLDEzIEBACiAJCS5iYXNlX2JhdWQJPSA5MjE2MDAsCiAJCS51YXJ0X29mZnNldAk9IDB4MjAwLAogCX0sCisJW3Bibl9leGFyX2libV9zYXR1cm5dID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSAxLAorCQkuYmFzZV9iYXVkCT0gOTIxNjAwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwl9LAorCiAJLyoKIAkgKiBQQSBTZW1pIFBXUmZpY2llbnQgUEE2VC0xNjgyTSBvbi1jaGlwIFVBUlQKIAkgKi8KQEAgLTIxODUsNiArMjE5NywzNyBAQAogCQkudWFydF9vZmZzZXQJPSAweDEwLAogCQkuZmlyc3Rfb2Zmc2V0CT0gMHg4MDAsCiAJfSwKKwkvKgorCSAqIEFEREktREFUQSBHbWJIIFBDSS1FeHByZXNzIGNvbW11bmljYXRpb24gY2FyZHMgPGluZm9AYWRkaS1kYXRhLmNvbT4KKwkgKi8KKwlbcGJuX0FERElEQVRBX1BDSWVfMV8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCisJW3Bibl9BRERJREFUQV9QQ0llXzJfMzkwNjI1MF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMCwKKwkJLm51bV9wb3J0cwk9IDIsCisJCS5iYXNlX2JhdWQJPSAzOTA2MjUwLAorCQkudWFydF9vZmZzZXQJPSAweDIwMCwKKwkJLmZpcnN0X29mZnNldAk9IDB4MTAwMCwKKwl9LAorCVtwYm5fQURESURBVEFfUENJZV80XzM5MDYyNTBdID0geworCQkuZmxhZ3MJCT0gRkxfQkFTRTAsCisJCS5udW1fcG9ydHMJPSA0LAorCQkuYmFzZV9iYXVkCT0gMzkwNjI1MCwKKwkJLnVhcnRfb2Zmc2V0CT0gMHgyMDAsCisJCS5maXJzdF9vZmZzZXQJPSAweDEwMDAsCisJfSwKKwlbcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwLAorCQkubnVtX3BvcnRzCT0gOCwKKwkJLmJhc2VfYmF1ZAk9IDM5MDYyNTAsCisJCS51YXJ0X29mZnNldAk9IDB4MjAwLAorCQkuZmlyc3Rfb2Zmc2V0CT0gMHgxMDAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc29mdG1vZGVtX2JsYWNrbGlzdFtdID0gewpAQCAtMjM0MCw3ICsyMzgzLDcgQEAKIAkJCWJyZWFrOwogCiAjaWZkZWYgU0VSSUFMX0RFQlVHX1BDSQotCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dXAgUENJIHBvcnQ6IHBvcnQgJXgsIGlycSAlZCwgdHlwZSAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlNldHVwIFBDSSBwb3J0OiBwb3J0ICVseCwgaXJxICVkLCB0eXBlICVkXG4iLAogCQkgICAgICAgc2VyaWFsX3BvcnQuaW9iYXNlLCBzZXJpYWxfcG9ydC5pcnEsIHNlcmlhbF9wb3J0LmlvdHlwZSk7CiAjZW5kaWYKIApAQCAtMjY0OSw2ICsyNjkyLDkgQEAKIAkJUENJX1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0gsCiAJCVBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzhfNDg1LCAwLCAwLAogCQlwYm5fYjBfOF8xODQzMjAwXzIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9FWEFSLCBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTIsCisJCVBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JULAorCQkwLCAwLCBwYm5fZXhhcl9pYm1fc2F0dXJuIH0sCiAKIAl7CVBDSV9WRU5ET1JfSURfU0VBTEVWRUwsIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVTUzMCwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKQEAgLTMwOTMsNiArMzEzOSwxMiBAQAogCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0IsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJCXBibl9iMF9idF8yXzExNTIwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9MQVZBLCBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19BLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAorCQlwYm5fYjBfYnRfMl8xMTUyMDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfTEFWQSwgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJcGJuX2IwX2J0XzJfMTE1MjAwIH0sCiAJewlQQ0lfVkVORE9SX0lEX0xBVkEsIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJCXBibl9iMF9idF80XzQ2MDgwMCB9LApAQCAtMzU1Niw2ICszNjA4LDM4IEBACiAJCTAsCiAJCXBibl9iMF84XzExNTIwMCB9LAogCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzUwMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfNF8zOTA2MjUwIH0sCisKKwl7CVBDSV9WRU5ET1JfSURfQURESURBVEEsCisJCVBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3NDIwLAorCQlQQ0lfQU5ZX0lELAorCQlQQ0lfQU5ZX0lELAorCQkwLAorCQkwLAorCQlwYm5fQURESURBVEFfUENJZV8yXzM5MDYyNTAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9BRERJREFUQSwKKwkJUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTczMDAsCisJCVBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsCisJCTAsCisJCTAsCisJCXBibl9BRERJREFUQV9QQ0llXzFfMzkwNjI1MCB9LAorCisJewlQQ0lfVkVORE9SX0lEX0FERElEQVRBLAorCQlQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzgwMCwKKwkJUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwKKwkJMCwKKwkJMCwKKwkJcGJuX0FERElEQVRBX1BDSWVfOF8zOTA2MjUwIH0sCisKIAl7CVBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1LAogCQlQQ0lfVkVORE9SX0lEX0lCTSwgMHgwMjk5LAogCQkwLCAwLCBwYm5fYjBfYnRfMl8xMTUyMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDAzNDIyY2UuLmU1MjI1NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtODYyLDcgKzg2Miw3IEBACiAKIGNvbmZpZyBTRVJJQUxfVUFSVExJVEUKIAl0cmlzdGF0ZSAiWGlsaW54IHVhcnRsaXRlIHNlcmlhbCBwb3J0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUEMzMiB8fCBNSUNST0JMQVpFCisJZGVwZW5kcyBvbiBQUEMzMiB8fCBNSUNST0JMQVpFIHx8IE1GRF9USU1CRVJEQUxFCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFhpbGlueCB1YXJ0bGl0ZSBzZXJpYWwgY29udHJvbGxlci4KQEAgLTE0NTgsNCArMTQ1OCwyMyBAQAogCS0tLWhlbHAtLS0KIAlBZGQgc3VwcG9ydCBmb3IgVUFSVCBjb250cm9sbGVyIG9uIHRpbWJlcmRhbGUuCiAKK2NvbmZpZyBTRVJJQUxfQkNNNjNYWAorCXRyaXN0YXRlICJiY202M3h4IHNlcmlhbCBwb3J0IHN1cHBvcnQiCisJc2VsZWN0IFNFUklBTF9DT1JFCisJZGVwZW5kcyBvbiBCQ002M1hYCisJaGVscAorCSAgSWYgeW91IGhhdmUgYSBiY202M3h4IENQVSwgeW91IGNhbiBlbmFibGUgaXRzIG9uYm9hcmQKKwkgIHNlcmlhbCBwb3J0IGJ5IGVuYWJsaW5nIHRoaXMgb3B0aW9ucy4KKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBiY205NjN4eF91YXJ0LgorCitjb25maWcgU0VSSUFMX0JDTTYzWFhfQ09OU09MRQorCWJvb2wgIkNvbnNvbGUgb24gYmNtNjN4eCBzZXJpYWwgcG9ydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9CQ002M1hYPXkKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGVuYWJsZWQgdGhlIHNlcmlhbCBwb3J0IG9uIHRoZSBiY202M3h4IENQVQorCSAgeW91IGNhbiBtYWtlIGl0IHRoZSBjb25zb2xlIGJ5IGFuc3dlcmluZyBZIHRvIHRoaXMgb3B0aW9uLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDk3ZjZmY2MuLmQyMWQ1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC0zNCw2ICszNCw3IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1BYQSkgKz0gcHhhLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUE5YOFhYWCkgKz0gcG54OHh4eF91YXJ0Lm8KIG9iai0kKENPTkZJR19TRVJJQUxfU0ExMTAwKSArPSBzYTExMDAubworb2JqLSQoQ09ORklHX1NFUklBTF9CQ002M1hYKSArPSBiY202M3h4X3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9CRklOKSArPSBiZmluXzV4eC5vCiBvYmotJChDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQpICs9IGJmaW5fc3BvcnRfdWFydC5vCiBvYmotJChDT05GSUdfU0VSSUFMX1NBTVNVTkcpICs9IHNhbXN1bmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwppbmRleCAzNTUxYzVjLi45ZDk0OGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hdG1lbF9zZXJpYWwuYwpAQCAtMTUzMSw3ICsxNTMxLDcgQEAKIAl2b2lkICpkYXRhOwogCWludCByZXQ7CiAKLQlCVUlMRF9CVUdfT04oIWlzX3Bvd2VyX29mXzIoQVRNRUxfU0VSSUFMX1JJTkdTSVpFKSk7CisJQlVJTERfQlVHX09OKEFUTUVMX1NFUklBTF9SSU5HU0laRSAmIChBVE1FTF9TRVJJQUxfUklOR1NJWkUgLSAxKSk7CiAKIAlwb3J0ID0gJmF0bWVsX3BvcnRzW3BkZXYtPmlkXTsKIAlwb3J0LT5iYWNrdXBfaW1yID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvYmNtNjN4eF91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkZGFhNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL2JjbTYzeHhfdWFydC5jCkBAIC0wLDAgKzEsODkwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRGVyaXZlZCBmcm9tIG1hbnkgZHJpdmVycyB1c2luZyBnZW5lcmljX3NlcmlhbCBpbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1heGltZSBCaXpvbiA8bWJpem9uQGZyZWVib3guZnI+CisgKgorICogIFNlcmlhbCBkcml2ZXIgZm9yIEJDTTYzeHggaW50ZWdyYXRlZCBVQVJULgorICoKKyAqIEhhcmR3YXJlIGZsb3cgY29udHJvbCB3YXMgX25vdF8gdGVzdGVkIHNpbmNlIEkgb25seSBoYXZlIFJYL1RYIG9uCisgKiBteSBib2FyZC4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JDTTYzWFhfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTUFHSUNfU1lTUlEpCisjZGVmaW5lIFNVUFBPUlRfU1lTUlEKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisjaW5jbHVkZSA8YmNtNjN4eF9jbGsuaD4KKyNpbmNsdWRlIDxiY202M3h4X2lycS5oPgorI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgorI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KKworI2RlZmluZSBCQ002M1hYX05SX1VBUlRTCTEKKworc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgcG9ydHNbQkNNNjNYWF9OUl9VQVJUU107CisKKy8qCisgKiByeCBpbnRlcnJ1cHQgbWFzayAvIHN0YXQKKyAqCisgKiBtYXNrOgorICogIC0gcnggZmlmbyBmdWxsCisgKiAgLSByeCBmaWZvIGFib3ZlIHRocmVzaG9sZAorICogIC0gcnggZmlmbyBub3QgZW1wdHkgZm9yIHRvbyBsb25nCisgKi8KKyNkZWZpbmUgVUFSVF9SWF9JTlRfTUFTSwkoVUFSVF9JUl9NQVNLKFVBUlRfSVJfUlhPVkVSKSB8CQlcCisJCQkJVUFSVF9JUl9NQVNLKFVBUlRfSVJfUlhUSFJFU0gpIHwJXAorCQkJCVVBUlRfSVJfTUFTSyhVQVJUX0lSX1JYVElNRU9VVCkpCisKKyNkZWZpbmUgVUFSVF9SWF9JTlRfU1RBVAkoVUFSVF9JUl9TVEFUKFVBUlRfSVJfUlhPVkVSKSB8CQlcCisJCQkJVUFSVF9JUl9TVEFUKFVBUlRfSVJfUlhUSFJFU0gpIHwJXAorCQkJCVVBUlRfSVJfU1RBVChVQVJUX0lSX1JYVElNRU9VVCkpCisKKy8qCisgKiB0eCBpbnRlcnJ1cHQgbWFzayAvIHN0YXQKKyAqCisgKiBtYXNrOgorICogLSB0eCBmaWZvIGVtcHR5CisgKiAtIHR4IGZpZm8gYmVsb3cgdGhyZXNob2xkCisgKi8KKyNkZWZpbmUgVUFSVF9UWF9JTlRfTUFTSwkoVUFSVF9JUl9NQVNLKFVBUlRfSVJfVFhFTVBUWSkgfAlcCisJCQkJVUFSVF9JUl9NQVNLKFVBUlRfSVJfVFhUUkVTSCkpCisKKyNkZWZpbmUgVUFSVF9UWF9JTlRfU1RBVAkoVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhFTVBUWSkgfAlcCisJCQkJVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhUUkVTSCkpCisKKy8qCisgKiBleHRlcm5hbCBpbnB1dCBpbnRlcnJ1cHQKKyAqCisgKiBtYXNrOiBhbnkgZWRnZSBvbiBDVFMsIERDRAorICovCisjZGVmaW5lIFVBUlRfRVhUSU5QX0lOVF9NQVNLCShVQVJUX0VYVElOUF9JUk1BU0soVUFSVF9FWFRJTlBfSVJfQ1RTKSB8IFwKKwkJCQkgVUFSVF9FWFRJTlBfSVJNQVNLKFVBUlRfRVhUSU5QX0lSX0RDRCkpCisKKy8qCisgKiBoYW5keSB1YXJ0IHJlZ2lzdGVyIGFjY2Vzc29yCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJjbV91YXJ0X3JlYWRsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCQkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXJldHVybiBiY21fcmVhZGwocG9ydC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21fdWFydF93cml0ZWwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwliY21fd3JpdGVsKHZhbHVlLCBwb3J0LT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gY2hlY2sgaWYgdWFydCB0eCBmaWZvIGlzIGVtcHR5CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYmNtX3VhcnRfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXJldHVybiAodmFsICYgVUFSVF9JUl9TVEFUKFVBUlRfSVJfVFhFTVBUWSkpID8gMSA6IDA7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHNldCBSVFMgYW5kIERUUiBwaW4gc3RhdGUgYW5kIGxvb3BiYWNrIG1vZGUKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBtY3RybCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9NQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9NQ1RMX0RUUl9NQVNLIHwgVUFSVF9NQ1RMX1JUU19NQVNLKTsKKwkvKiBpbnZlcnQgb2Ygd3JpdHRlbiB2YWx1ZSBpcyByZWZsZWN0ZWQgb24gdGhlIHBpbiAqLworCWlmICghKG1jdHJsICYgVElPQ01fRFRSKSkKKwkJdmFsIHw9IFVBUlRfTUNUTF9EVFJfTUFTSzsKKwlpZiAoIShtY3RybCAmIFRJT0NNX1JUUykpCisJCXZhbCB8PSBVQVJUX01DVExfUlRTX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9NQ1RMX1JFRyk7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCWlmIChtY3RybCAmIFRJT0NNX0xPT1ApCisJCXZhbCB8PSBVQVJUX0NUTF9MT09QQkFDS19NQVNLOworCWVsc2UKKwkJdmFsICY9IH5VQVJUX0NUTF9MT09QQkFDS19NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHJldHVybiBSSSwgQ1RTLCBEQ0QgYW5kIERTUiBwaW4gc3RhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBiY21fdWFydF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsLCBtY3RybDsKKworCW1jdHJsID0gMDsKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0VYVElOUF9SRUcpOworCWlmICh2YWwgJiBVQVJUX0VYVElOUF9SSV9NQVNLKQorCQltY3RybCB8PSBUSU9DTV9SSTsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfQ1RTX01BU0spCisJCW1jdHJsIHw9IFRJT0NNX0NUUzsKKwlpZiAodmFsICYgVUFSVF9FWFRJTlBfRENEX01BU0spCisJCW1jdHJsIHw9IFRJT0NNX0NEOworCWlmICh2YWwgJiBVQVJUX0VYVElOUF9EU1JfTUFTSykKKwkJbWN0cmwgfD0gVElPQ01fRFNSOworCXJldHVybiBtY3RybDsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gZGlzYWJsZSB0eCBBU0FQICh1c2VkIGZvciBmbG93IGNvbnRyb2wpCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3N0b3BfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgJj0gfihVQVJUX0NUTF9UWEVOX01BU0spOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsICY9IH5VQVJUX1RYX0lOVF9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gKHJlKWVuYWJsZSB0eAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJdmFsIHw9IFVBUlRfVFhfSU5UX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9JUl9SRUcpOworCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwl2YWwgfD0gVUFSVF9DVExfVFhFTl9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIHN0b3AgcngsIGNhbGxlZCBiZWZvcmUgcG9ydCBzaHV0ZG93bgorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwl2YWwgJj0gflVBUlRfUlhfSU5UX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9JUl9SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBlbmFibGUgbW9kZW0gc3RhdHVzIGludGVycnVwdCByZXBvcnRpbmcKKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZW5hYmxlX21zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwl2YWwgfD0gVUFSVF9JUl9NQVNLKFVBUlRfSVJfRVhUSVApOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfSVJfUkVHKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gc3RhcnQvc3RvcCBlbWl0dGluZyBicmVhayBjaGFyCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2JyZWFrX2N0bChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY3RsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCWlmIChjdGwpCisJCXZhbCB8PSBVQVJUX0NUTF9YTUlUQlJLX01BU0s7CisJZWxzZQorCQl2YWwgJj0gflVBUlRfQ1RMX1hNSVRCUktfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0NUTF9SRUcpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQorCisvKgorICogcmV0dXJuIHBvcnQgdHlwZSBpbiBzdHJpbmcgZm9ybWF0CisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpiY21fdWFydF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIChwb3J0LT50eXBlID09IFBPUlRfQkNNNjNYWCkgPyAiYmNtNjN4eF91YXJ0IiA6IE5VTEw7Cit9CisKKy8qCisgKiByZWFkIGFsbCBjaGFycyBpbiByeCBmaWZvIGFuZCBzZW5kIHRoZW0gdG8gY29yZQorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9kb19yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgaW50IG1heF9jb3VudDsKKworCS8qIGxpbWl0IG51bWJlciBvZiBjaGFyIHJlYWQgaW4gaW50ZXJydXB0LCBzaG91bGQgbm90IGJlCisJICogaGlnaGVyIHRoYW4gZmlmbyBzaXplIGFueXdheSBzaW5jZSB3ZSdyZSBtdWNoIGZhc3RlciB0aGFuCisJICogc2VyaWFsIHBvcnQgKi8KKwltYXhfY291bnQgPSAzMjsKKwl0dHkgPSBwb3J0LT5pbmZvLT5wb3J0LnR0eTsKKwlkbyB7CisJCXVuc2lnbmVkIGludCBpZXN0YXQsIGMsIGNzdGF0OworCQljaGFyIGZsYWc7CisKKwkJLyogZ2V0IG92ZXJydW4vZmlmbyBlbXB0eSBpbmZvcm1hdGlvbiBmcm9tIGllcgorCQkgKiByZWdpc3RlciAqLworCQlpZXN0YXQgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJCWlmICghKGllc3RhdCAmIFVBUlRfSVJfU1RBVChVQVJUX0lSX1JYTk9URU1QVFkpKSkKKwkJCWJyZWFrOworCisJCWNzdGF0ID0gYyA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRklGT19SRUcpOworCQlwb3J0LT5pY291bnQucngrKzsKKwkJZmxhZyA9IFRUWV9OT1JNQUw7CisJCWMgJj0gMHhmZjsKKworCQlpZiAodW5saWtlbHkoKGNzdGF0ICYgVUFSVF9GSUZPX0FOWUVSUl9NQVNLKSkpIHsKKwkJCS8qIGRvIHN0YXRzIGZpcnN0ICovCisJCQlpZiAoY3N0YXQgJiBVQVJUX0ZJRk9fQlJLREVUX01BU0spIHsKKwkJCQlwb3J0LT5pY291bnQuYnJrKys7CisJCQkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKHBvcnQpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGNzdGF0ICYgVUFSVF9GSUZPX1BBUkVSUl9NQVNLKQorCQkJCXBvcnQtPmljb3VudC5wYXJpdHkrKzsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19GUkFNRUVSUl9NQVNLKQorCQkJCXBvcnQtPmljb3VudC5mcmFtZSsrOworCisJCQkvKiB1cGRhdGUgZmxhZyB3cnQgcmVhZF9zdGF0dXNfbWFzayAqLworCQkJY3N0YXQgJj0gcG9ydC0+cmVhZF9zdGF0dXNfbWFzazsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19CUktERVRfTUFTSykKKwkJCQlmbGFnID0gVFRZX0JSRUFLOworCQkJaWYgKGNzdGF0ICYgVUFSVF9GSUZPX0ZSQU1FRVJSX01BU0spCisJCQkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJCWlmIChjc3RhdCAmIFVBUlRfRklGT19QQVJFUlJfTUFTSykKKwkJCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJfQorCisJCWlmICh1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGMpKQorCQkJY29udGludWU7CisKKwkJaWYgKHVubGlrZWx5KGllc3RhdCAmIFVBUlRfSVJfU1RBVChVQVJUX0lSX1JYT1ZFUikpKSB7CisJCQlwb3J0LT5pY291bnQub3ZlcnJ1bisrOworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7CisJCX0KKworCQlpZiAoKGNzdGF0ICYgcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrKSA9PSAwKQorCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjLCBmbGFnKTsKKworCX0gd2hpbGUgKC0tbWF4X2NvdW50KTsKKworCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Cit9CisKKy8qCisgKiBmaWxsIHR4IGZpZm8gd2l0aCBjaGFycyB0byBzZW5kLCBzdG9wIHdoZW4gZmlmbyBpcyBhYm91dCB0byBiZSBmdWxsCisgKiBvciB3aGVuIGFsbCBjaGFycyBoYXZlIGJlZW4gc2VudC4KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfZG9fdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQ7CisJdW5zaWduZWQgaW50IHZhbCwgbWF4X2NvdW50OworCisJaWYgKHBvcnQtPnhfY2hhcikgeworCQliY21fdWFydF93cml0ZWwocG9ydCwgcG9ydC0+eF9jaGFyLCBVQVJUX0ZJRk9fUkVHKTsKKwkJcG9ydC0+aWNvdW50LnR4Kys7CisJCXBvcnQtPnhfY2hhciA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAodWFydF90eF9zdG9wcGVkKHBvcnQpKSB7CisJCWJjbV91YXJ0X3N0b3BfdHgocG9ydCk7CisJCXJldHVybjsKKwl9CisKKwl4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CisJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJZ290byB0eHFfZW1wdHk7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX01DVExfUkVHKTsKKwl2YWwgPSAodmFsICYgVUFSVF9NQ1RMX1RYRklGT0ZJTExfTUFTSykgPj4gVUFSVF9NQ1RMX1RYRklGT0ZJTExfU0hJRlQ7CisJbWF4X2NvdW50ID0gcG9ydC0+Zmlmb3NpemUgLSB2YWw7CisKKwl3aGlsZSAobWF4X2NvdW50LS0pIHsKKwkJdW5zaWduZWQgaW50IGM7CisKKwkJYyA9IHhtaXQtPmJ1Zlt4bWl0LT50YWlsXTsKKwkJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIGMsIFVBUlRfRklGT19SRUcpOworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwkJaWYgKHVhcnRfY2lyY19lbXB0eSh4bWl0KSkKKwkJCWJyZWFrOworCX0KKworCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKKwkJdWFydF93cml0ZV93YWtldXAocG9ydCk7CisKKwlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQorCQlnb3RvIHR4cV9lbXB0eTsKKwlyZXR1cm47CisKK3R4cV9lbXB0eToKKwkvKiBub3RoaW5nIHRvIHNlbmQsIGRpc2FibGUgdHJhbnNtaXQgaW50ZXJydXB0ICovCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9JUl9SRUcpOworCXZhbCAmPSB+VUFSVF9UWF9JTlRfTUFTSzsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX0lSX1JFRyk7CisJcmV0dXJuOworfQorCisvKgorICogcHJvY2VzcyB1YXJ0IGludGVycnVwdAorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYmNtX3VhcnRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBpcnFzdGF0OworCisJcG9ydCA9IGRldl9pZDsKKwlzcGluX2xvY2soJnBvcnQtPmxvY2spOworCisJaXJxc3RhdCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKwlpZiAoaXJxc3RhdCAmIFVBUlRfUlhfSU5UX1NUQVQpCisJCWJjbV91YXJ0X2RvX3J4KHBvcnQpOworCisJaWYgKGlycXN0YXQgJiBVQVJUX1RYX0lOVF9TVEFUKQorCQliY21fdWFydF9kb190eChwb3J0KTsKKworCWlmIChpcnFzdGF0ICYgVUFSVF9JUl9NQVNLKFVBUlRfSVJfRVhUSVApKSB7CisJCXVuc2lnbmVkIGludCBlc3RhdDsKKworCQllc3RhdCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRVhUSU5QX1JFRyk7CisJCWlmIChlc3RhdCAmIFVBUlRfRVhUSU5QX0lSU1RBVChVQVJUX0VYVElOUF9JUl9DVFMpKQorCQkJdWFydF9oYW5kbGVfY3RzX2NoYW5nZShwb3J0LAorCQkJCQkgICAgICAgZXN0YXQgJiBVQVJUX0VYVElOUF9DVFNfTUFTSyk7CisJCWlmIChlc3RhdCAmIFVBUlRfRVhUSU5QX0lSU1RBVChVQVJUX0VYVElOUF9JUl9EQ0QpKQorCQkJdWFydF9oYW5kbGVfZGNkX2NoYW5nZShwb3J0LAorCQkJCQkgICAgICAgZXN0YXQgJiBVQVJUX0VYVElOUF9EQ0RfTUFTSyk7CisJfQorCisJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIGVuYWJsZSByeCAmIHR4IG9wZXJhdGlvbiBvbiB1YXJ0CisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X2VuYWJsZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCB8PSAoVUFSVF9DVExfQlJHRU5fTUFTSyB8IFVBUlRfQ1RMX1RYRU5fTUFTSyB8IFVBUlRfQ1RMX1JYRU5fTUFTSyk7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKK30KKworLyoKKyAqIGRpc2FibGUgcnggJiB0eCBvcGVyYXRpb24gb24gdWFydAorICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9kaXNhYmxlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9DVExfQlJHRU5fTUFTSyB8IFVBUlRfQ1RMX1RYRU5fTUFTSyB8CisJCSBVQVJUX0NUTF9SWEVOX01BU0spOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfQ1RMX1JFRyk7Cit9CisKKy8qCisgKiBjbGVhciBhbGwgdW5yZWFkIGRhdGEgaW4gcnggZmlmbyBhbmQgdW5zZW50IGRhdGEgaW4gdHggZmlmbworICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9mbHVzaChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisKKwkvKiBlbXB0eSByeCBhbmQgdHggZmlmbyAqLworCXZhbCA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfQ1RMX1JFRyk7CisJdmFsIHw9IFVBUlRfQ1RMX1JTVFJYRklGT19NQVNLIHwgVUFSVF9DVExfUlNUVFhGSUZPX01BU0s7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKKworCS8qIHJlYWQgYW55IHBlbmRpbmcgY2hhciB0byBtYWtlIHN1cmUgYWxsIGlycSBzdGF0dXMgYXJlCisJICogY2xlYXJlZCAqLworCSh2b2lkKWJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfRklGT19SRUcpOworfQorCisvKgorICogc2VyaWFsIGNvcmUgcmVxdWVzdCB0byBpbml0aWFsaXplIHVhcnQgYW5kIHN0YXJ0IHJ4IG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IGJjbV91YXJ0X3N0YXJ0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQ7CisKKwkvKiBtYXNrIGFsbCBpcnEgYW5kIGZsdXNoIHBvcnQgKi8KKwliY21fdWFydF9kaXNhYmxlKHBvcnQpOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCAwLCBVQVJUX0lSX1JFRyk7CisJYmNtX3VhcnRfZmx1c2gocG9ydCk7CisKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBleHRlcm5hbCBpbnB1dCBpbnRlcnJ1cHQgKi8KKwkodm9pZCliY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0VYVElOUF9SRUcpOworCisJLyogc2V0IHJ4L3R4IGZpZm8gdGhyZXNoIHRvIGZpZm8gaGFsZiBzaXplICovCisJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9NQ1RMX1JFRyk7CisJdmFsICY9IH4oVUFSVF9NQ1RMX1JYRklGT1RIUkVTSF9NQVNLIHwgVUFSVF9NQ1RMX1RYRklGT1RIUkVTSF9NQVNLKTsKKwl2YWwgfD0gKHBvcnQtPmZpZm9zaXplIC8gMikgPDwgVUFSVF9NQ1RMX1JYRklGT1RIUkVTSF9TSElGVDsKKwl2YWwgfD0gKHBvcnQtPmZpZm9zaXplIC8gMikgPDwgVUFSVF9NQ1RMX1RYRklGT1RIUkVTSF9TSElGVDsKKwliY21fdWFydF93cml0ZWwocG9ydCwgdmFsLCBVQVJUX01DVExfUkVHKTsKKworCS8qIHNldCByeCBmaWZvIHRpbWVvdXQgdG8gMSBjaGFyIHRpbWUgKi8KKwl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0NUTF9SRUcpOworCXZhbCAmPSB+VUFSVF9DVExfUlhUTU9VVENOVF9NQVNLOworCXZhbCB8PSAxIDw8IFVBUlRfQ1RMX1JYVE1PVVRDTlRfU0hJRlQ7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHZhbCwgVUFSVF9DVExfUkVHKTsKKworCS8qIHJlcG9ydCBhbnkgZWRnZSBvbiBkY2QgYW5kIGN0cyAqLworCXZhbCA9IFVBUlRfRVhUSU5QX0lOVF9NQVNLOworCXZhbCB8PSBVQVJUX0VYVElOUF9EQ0RfTk9TRU5TRV9NQVNLOworCXZhbCB8PSBVQVJUX0VYVElOUF9DVFNfTk9TRU5TRV9NQVNLOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCB2YWwsIFVBUlRfRVhUSU5QX1JFRyk7CisKKwkvKiByZWdpc3RlciBpcnEgYW5kIGVuYWJsZSByeCBpbnRlcnJ1cHRzICovCisJcmV0ID0gcmVxdWVzdF9pcnEocG9ydC0+aXJxLCBiY21fdWFydF9pbnRlcnJ1cHQsIDAsCisJCQkgIGJjbV91YXJ0X3R5cGUocG9ydCksIHBvcnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIFVBUlRfUlhfSU5UX01BU0ssIFVBUlRfSVJfUkVHKTsKKwliY21fdWFydF9lbmFibGUocG9ydCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGZsdXNoICYgZGlzYWJsZSB1YXJ0CisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3NodXRkb3duKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIDAsIFVBUlRfSVJfUkVHKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwliY21fdWFydF9kaXNhYmxlKHBvcnQpOworCWJjbV91YXJ0X2ZsdXNoKHBvcnQpOworCWZyZWVfaXJxKHBvcnQtPmlycSwgcG9ydCk7Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNoYW5nZSBjdXJyZW50IHVhcnQgc2V0dGluZworICovCitzdGF0aWMgdm9pZCBiY21fdWFydF9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qga3Rlcm1pb3MgKm5ldywKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJdW5zaWduZWQgaW50IGN0bCwgYmF1ZCwgcXVvdCwgaWVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJLyogZGlzYWJsZSB1YXJ0IHdoaWxlIGNoYW5naW5nIHNwZWVkICovCisJYmNtX3VhcnRfZGlzYWJsZShwb3J0KTsKKwliY21fdWFydF9mbHVzaChwb3J0KTsKKworCS8qIHVwZGF0ZSBDb250cm9sIHJlZ2lzdGVyICovCisJY3RsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9DVExfUkVHKTsKKwljdGwgJj0gflVBUlRfQ1RMX0JJVFNQRVJTWU1fTUFTSzsKKworCXN3aXRjaCAobmV3LT5jX2NmbGFnICYgQ1NJWkUpIHsKKwljYXNlIENTNToKKwkJY3RsIHw9ICgwIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwljYXNlIENTNjoKKwkJY3RsIHw9ICgxIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwljYXNlIENTNzoKKwkJY3RsIHw9ICgyIDw8IFVBUlRfQ1RMX0JJVFNQRVJTWU1fU0hJRlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljdGwgfD0gKDMgPDwgVUFSVF9DVExfQklUU1BFUlNZTV9TSElGVCk7CisJCWJyZWFrOworCX0KKworCWN0bCAmPSB+VUFSVF9DVExfU1RPUEJJVFNfTUFTSzsKKwlpZiAobmV3LT5jX2NmbGFnICYgQ1NUT1BCKQorCQljdGwgfD0gVUFSVF9DVExfU1RPUEJJVFNfMjsKKwllbHNlCisJCWN0bCB8PSBVQVJUX0NUTF9TVE9QQklUU18xOworCisJY3RsICY9IH4oVUFSVF9DVExfUlhQQVJFTl9NQVNLIHwgVUFSVF9DVExfVFhQQVJFTl9NQVNLKTsKKwlpZiAobmV3LT5jX2NmbGFnICYgUEFSRU5CKQorCQljdGwgfD0gKFVBUlRfQ1RMX1JYUEFSRU5fTUFTSyB8IFVBUlRfQ1RMX1RYUEFSRU5fTUFTSyk7CisJY3RsICY9IH4oVUFSVF9DVExfUlhQQVJFVkVOX01BU0sgfCBVQVJUX0NUTF9UWFBBUkVWRU5fTUFTSyk7CisJaWYgKG5ldy0+Y19jZmxhZyAmIFBBUk9ERCkKKwkJY3RsIHw9IChVQVJUX0NUTF9SWFBBUkVWRU5fTUFTSyB8IFVBUlRfQ1RMX1RYUEFSRVZFTl9NQVNLKTsKKwliY21fdWFydF93cml0ZWwocG9ydCwgY3RsLCBVQVJUX0NUTF9SRUcpOworCisJLyogdXBkYXRlIEJhdWR3b3JkIHJlZ2lzdGVyICovCisJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCBuZXcsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKKwlxdW90ID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKSAtIDE7CisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIHF1b3QsIFVBUlRfQkFVRF9SRUcpOworCisJLyogdXBkYXRlIEludGVycnVwdCByZWdpc3RlciAqLworCWllciA9IGJjbV91YXJ0X3JlYWRsKHBvcnQsIFVBUlRfSVJfUkVHKTsKKworCWllciAmPSB+VUFSVF9JUl9NQVNLKFVBUlRfSVJfRVhUSVApOworCWlmIChVQVJUX0VOQUJMRV9NUyhwb3J0LCBuZXctPmNfY2ZsYWcpKQorCQlpZXIgfD0gVUFSVF9JUl9NQVNLKFVBUlRfSVJfRVhUSVApOworCisJYmNtX3VhcnRfd3JpdGVsKHBvcnQsIGllciwgVUFSVF9JUl9SRUcpOworCisJLyogdXBkYXRlIHJlYWQvaWdub3JlIG1hc2sgKi8KKwlwb3J0LT5yZWFkX3N0YXR1c19tYXNrID0gVUFSVF9GSUZPX1ZBTElEX01BU0s7CisJaWYgKG5ldy0+Y19pZmxhZyAmIElOUENLKSB7CisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX0ZSQU1FRVJSX01BU0s7CisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX1BBUkVSUl9NQVNLOworCX0KKwlpZiAobmV3LT5jX2lmbGFnICYgKEJSS0lOVCkpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX0JSS0RFVF9NQVNLOworCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAobmV3LT5jX2lmbGFnICYgSUdOUEFSKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX1BBUkVSUl9NQVNLOworCWlmIChuZXctPmNfaWZsYWcgJiBJR05CUkspCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX0ZJRk9fQlJLREVUX01BU0s7CisJaWYgKCEobmV3LT5jX2NmbGFnICYgQ1JFQUQpKQorCQlwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2sgfD0gVUFSVF9GSUZPX1ZBTElEX01BU0s7CisKKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIG5ldy0+Y19jZmxhZywgYmF1ZCk7CisJYmNtX3VhcnRfZW5hYmxlKHBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gY2xhaW0gdWFydCBpb21lbQorICovCitzdGF0aWMgaW50IGJjbV91YXJ0X3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCBzaXplOworCisJc2l6ZSA9IFJTRVRfVUFSVF9TSVpFOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUsICJiY202M3h4IikpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJNZW1vcnkgcmVnaW9uIGJ1c3lcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXBvcnQtPm1lbWJhc2UgPSBpb3JlbWFwKHBvcnQtPm1hcGJhc2UsIHNpemUpOworCWlmICghcG9ydC0+bWVtYmFzZSkgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgIlVuYWJsZSB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIHNpemUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gcmVsZWFzZSB1YXJ0IGlvbWVtCisgKi8KK3N0YXRpYyB2b2lkIGJjbV91YXJ0X3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJlbGVhc2VfbWVtX3JlZ2lvbihwb3J0LT5tYXBiYXNlLCBSU0VUX1VBUlRfU0laRSk7CisJaW91bm1hcChwb3J0LT5tZW1iYXNlKTsKK30KKworLyoKKyAqIHNlcmlhbCBjb3JlIHJlcXVlc3QgdG8gZG8gYW55IHBvcnQgcmVxdWlyZWQgYXV0b2NvbmZpZ3VyYXRpb24KKyAqLworc3RhdGljIHZvaWQgYmNtX3VhcnRfY29uZmlnX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGZsYWdzKQoreworCWlmIChmbGFncyAmIFVBUlRfQ09ORklHX1RZUEUpIHsKKwkJaWYgKGJjbV91YXJ0X3JlcXVlc3RfcG9ydChwb3J0KSkKKwkJCXJldHVybjsKKwkJcG9ydC0+dHlwZSA9IFBPUlRfQkNNNjNYWDsKKwl9Cit9CisKKy8qCisgKiBzZXJpYWwgY29yZSByZXF1ZXN0IHRvIGNoZWNrIHRoYXQgcG9ydCBpbmZvcm1hdGlvbiBpbiBzZXJpbmZvIGFyZQorICogc3VpdGFibGUKKyAqLworc3RhdGljIGludCBiY21fdWFydF92ZXJpZnlfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXJpbmZvKQoreworCWlmIChwb3J0LT50eXBlICE9IFBPUlRfQkNNNjNYWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBvcnQtPmlycSAhPSBzZXJpbmZvLT5pcnEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwb3J0LT5pb3R5cGUgIT0gc2VyaW5mby0+aW9fdHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBvcnQtPm1hcGJhc2UgIT0gKHVuc2lnbmVkIGxvbmcpc2VyaW5mby0+aW9tZW1fYmFzZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKKy8qIHNlcmlhbCBjb3JlIGNhbGxiYWNrcyAqLworc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBiY21fdWFydF9vcHMgPSB7CisJLnR4X2VtcHR5CT0gYmNtX3VhcnRfdHhfZW1wdHksCisJLmdldF9tY3RybAk9IGJjbV91YXJ0X2dldF9tY3RybCwKKwkuc2V0X21jdHJsCT0gYmNtX3VhcnRfc2V0X21jdHJsLAorCS5zdGFydF90eAk9IGJjbV91YXJ0X3N0YXJ0X3R4LAorCS5zdG9wX3R4CT0gYmNtX3VhcnRfc3RvcF90eCwKKwkuc3RvcF9yeAk9IGJjbV91YXJ0X3N0b3BfcngsCisJLmVuYWJsZV9tcwk9IGJjbV91YXJ0X2VuYWJsZV9tcywKKwkuYnJlYWtfY3RsCT0gYmNtX3VhcnRfYnJlYWtfY3RsLAorCS5zdGFydHVwCT0gYmNtX3VhcnRfc3RhcnR1cCwKKwkuc2h1dGRvd24JPSBiY21fdWFydF9zaHV0ZG93biwKKwkuc2V0X3Rlcm1pb3MJPSBiY21fdWFydF9zZXRfdGVybWlvcywKKwkudHlwZQkJPSBiY21fdWFydF90eXBlLAorCS5yZWxlYXNlX3BvcnQJPSBiY21fdWFydF9yZWxlYXNlX3BvcnQsCisJLnJlcXVlc3RfcG9ydAk9IGJjbV91YXJ0X3JlcXVlc3RfcG9ydCwKKwkuY29uZmlnX3BvcnQJPSBiY21fdWFydF9jb25maWdfcG9ydCwKKwkudmVyaWZ5X3BvcnQJPSBiY21fdWFydF92ZXJpZnlfcG9ydCwKK307CisKKworCisjaWZkZWYgQ09ORklHX1NFUklBTF9CQ002M1hYX0NPTlNPTEUKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X2Zvcl94bWl0cihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXVuc2lnbmVkIGludCB0bW91dDsKKworCS8qIFdhaXQgdXAgdG8gMTBtcyBmb3IgdGhlIGNoYXJhY3RlcihzKSB0byBiZSBzZW50LiAqLworCXRtb3V0ID0gMTAwMDA7CisJd2hpbGUgKC0tdG1vdXQpIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKworCQl2YWwgPSBiY21fdWFydF9yZWFkbChwb3J0LCBVQVJUX0lSX1JFRyk7CisJCWlmICh2YWwgJiBVQVJUX0lSX1NUQVQoVUFSVF9JUl9UWEVNUFRZKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCisJLyogV2FpdCB1cCB0byAxcyBmb3IgZmxvdyBjb250cm9sIGlmIG5lY2Vzc2FyeSAqLworCWlmIChwb3J0LT5mbGFncyAmIFVQRl9DT05TX0ZMT1cpIHsKKwkJdG1vdXQgPSAxMDAwMDAwOworCQl3aGlsZSAoLS10bW91dCkgeworCQkJdW5zaWduZWQgaW50IHZhbDsKKworCQkJdmFsID0gYmNtX3VhcnRfcmVhZGwocG9ydCwgVUFSVF9FWFRJTlBfUkVHKTsKKwkJCWlmICh2YWwgJiBVQVJUX0VYVElOUF9DVFNfTUFTSykKKwkJCQlicmVhazsKKwkJCXVkZWxheSgxKTsKKwkJfQorCX0KK30KKworLyoKKyAqIG91dHB1dCBnaXZlbiBjaGFyCisgKi8KK3N0YXRpYyB2b2lkIGJjbV9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGNoKQoreworCXdhaXRfZm9yX3htaXRyKHBvcnQpOworCWJjbV91YXJ0X3dyaXRlbChwb3J0LCBjaCwgVUFSVF9GSUZPX1JFRyk7Cit9CisKKy8qCisgKiBjb25zb2xlIGNvcmUgcmVxdWVzdCB0byBvdXRwdXQgZ2l2ZW4gc3RyaW5nCisgKi8KK3N0YXRpYyB2b2lkIGJjbV9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxvY2tlZDsKKworCXBvcnQgPSAmcG9ydHNbY28tPmluZGV4XTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAocG9ydC0+c3lzcnEpIHsKKwkJLyogYmNtX3VhcnRfaW50ZXJydXB0KCkgYWxyZWFkeSB0b29rIHRoZSBsb2NrICovCisJCWxvY2tlZCA9IDA7CisJfSBlbHNlIGlmIChvb3BzX2luX3Byb2dyZXNzKSB7CisJCWxvY2tlZCA9IHNwaW5fdHJ5bG9jaygmcG9ydC0+bG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwkJbG9ja2VkID0gMTsKKwl9CisKKwkvKiBjYWxsIGhlbHBlciB0byBkZWFsIHdpdGggXHJcbiAqLworCXVhcnRfY29uc29sZV93cml0ZShwb3J0LCBzLCBjb3VudCwgYmNtX2NvbnNvbGVfcHV0Y2hhcik7CisKKwkvKiBhbmQgd2FpdCBmb3IgY2hhciB0byBiZSB0cmFuc21pdHRlZCAqLworCXdhaXRfZm9yX3htaXRyKHBvcnQpOworCisJaWYgKGxvY2tlZCkKKwkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworLyoKKyAqIGNvbnNvbGUgY29yZSByZXF1ZXN0IHRvIHNldHVwIGdpdmVuIGNvbnNvbGUsIGZpbmQgbWF0Y2hpbmcgdWFydAorICogcG9ydCBhbmQgc2V0dXAgaXQuCisgKi8KK3N0YXRpYyBpbnQgYmNtX2NvbnNvbGVfc2V0dXAoc3RydWN0IGNvbnNvbGUgKmNvLCBjaGFyICpvcHRpb25zKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJaW50IGJhdWQgPSA5NjAwOworCWludCBiaXRzID0gODsKKwlpbnQgcGFyaXR5ID0gJ24nOworCWludCBmbG93ID0gJ24nOworCisJaWYgKGNvLT5pbmRleCA8IDAgfHwgY28tPmluZGV4ID49IEJDTTYzWFhfTlJfVUFSVFMpCisJCXJldHVybiAtRUlOVkFMOworCXBvcnQgPSAmcG9ydHNbY28tPmluZGV4XTsKKwlpZiAoIXBvcnQtPm1lbWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCWlmIChvcHRpb25zKQorCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CisKKwlyZXR1cm4gdWFydF9zZXRfb3B0aW9ucyhwb3J0LCBjbywgYmF1ZCwgcGFyaXR5LCBiaXRzLCBmbG93KTsKK30KKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBiY21fdWFydF9kcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBiY202M3h4X2NvbnNvbGUgPSB7CisJLm5hbWUJCT0gInR0eVMiLAorCS53cml0ZQkJPSBiY21fY29uc29sZV93cml0ZSwKKwkuZGV2aWNlCQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCisJLnNldHVwCQk9IGJjbV9jb25zb2xlX3NldHVwLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsCisJLmluZGV4CQk9IC0xLAorCS5kYXRhCQk9ICZiY21fdWFydF9kcml2ZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiY202M3h4X2NvbnNvbGVfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX2NvbnNvbGUoJmJjbTYzeHhfY29uc29sZSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnNvbGVfaW5pdGNhbGwoYmNtNjN4eF9jb25zb2xlX2luaXQpOworCisjZGVmaW5lIEJDTTYzWFhfQ09OU09MRQkoJmJjbTYzeHhfY29uc29sZSkKKyNlbHNlCisjZGVmaW5lIEJDTTYzWFhfQ09OU09MRQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9CQ002M1hYX0NPTlNPTEUgKi8KKworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBiY21fdWFydF9kcml2ZXIgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZQk9ICJiY202M3h4X3VhcnQiLAorCS5kZXZfbmFtZQk9ICJ0dHlTIiwKKwkubWFqb3IJCT0gVFRZX01BSk9SLAorCS5taW5vcgkJPSA2NCwKKwkubnIJCT0gMSwKKwkuY29ucwkJPSBCQ002M1hYX0NPTlNPTEUsCit9OworCisvKgorICogcGxhdGZvcm0gZHJpdmVyIHByb2JlL3JlbW92ZSBjYWxsYmFjaworICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBiY21fdWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbSwgKnJlc19pcnE7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKworCWlmIChwZGV2LT5pZCA8IDAgfHwgcGRldi0+aWQgPj0gQkNNNjNYWF9OUl9VQVJUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocG9ydHNbcGRldi0+aWRdLm1lbWJhc2UpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXNfbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlc19tZW0pCisJCXJldHVybiAtRU5PREVWOworCisJcmVzX2lycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXNfaXJxKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInBlcmlwaCIpOworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb3J0ID0gJnBvcnRzW3BkZXYtPmlkXTsKKwltZW1zZXQocG9ydCwgMCwgc2l6ZW9mKCpwb3J0KSk7CisJcG9ydC0+aW90eXBlID0gVVBJT19NRU07CisJcG9ydC0+bWFwYmFzZSA9IHJlc19tZW0tPnN0YXJ0OworCXBvcnQtPmlycSA9IHJlc19pcnEtPnN0YXJ0OworCXBvcnQtPm9wcyA9ICZiY21fdWFydF9vcHM7CisJcG9ydC0+ZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORjsKKwlwb3J0LT5kZXYgPSAmcGRldi0+ZGV2OworCXBvcnQtPmZpZm9zaXplID0gMTY7CisJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspIC8gMjsKKwljbGtfcHV0KGNsayk7CisKKwlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmYmNtX3VhcnRfZHJpdmVyLCBwb3J0KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHBvcnQpOworCQlyZXR1cm4gcmV0OworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwb3J0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYmNtX3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKworCXBvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmYmNtX3VhcnRfZHJpdmVyLCBwb3J0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwkvKiBtYXJrIHBvcnQgYXMgZnJlZSAqLworCXBvcnRzW3BkZXYtPmlkXS5tZW1iYXNlID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlciBzdHVmZgorICovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBiY21fdWFydF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gYmNtX3VhcnRfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJjbV91YXJ0X3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lICA9ICJiY202M3h4X3VhcnQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiY21fdWFydF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZiY21fdWFydF9kcml2ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJjbV91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKHJldCkKKwkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmYmNtX3VhcnRfZHJpdmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBiY21fdWFydF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJjbV91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CisJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmYmNtX3VhcnRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYmNtX3VhcnRfaW5pdCk7Cittb2R1bGVfZXhpdChiY21fdWFydF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWF4aW1lIEJpem9uIDxtYml6b25AZnJlZWJveC5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gNjM8eHggaW50ZWdyYXRlZCB1YXJ0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCmluZGV4IDhkMzQ5YjIzLi4zMDBjZWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC02NDksNyArNjQ5LDcgQEAKIAl1OCAqcDsKIAlpbnQgY291bnQ7CiAJc3RydWN0IHVhcnRfY3BtX3BvcnQgKnBpbmZvID0gKHN0cnVjdCB1YXJ0X2NwbV9wb3J0ICopcG9ydDsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+aW5mby0+eG1pdDsKKwlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+c3RhdGUtPnhtaXQ7CiAKIAkvKiBIYW5kbGUgeG9uL3hvZmYgKi8KIAlpZiAocG9ydC0+eF9jaGFyKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKaW5kZXggN2JlNTJmZS4uMzFmMTcyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2ljb20uYyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwppbmRleCAyZDdmZWVjLi4wMDI4YjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaWNvbS5jCkBAIC0zMDcsNyArMzA3LDcgQEAKIAlpZiAocG9ydCA8IDQpIHsKIAkJdGVtcCA9IHJlYWRsKHN0b3BfcHJvY1twb3J0XS5nbG9iYWxfY29udHJvbF9yZWcpOwogCQl0ZW1wID0KLQkgICAgCQkodGVtcCAmIH5zdGFydF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZCkgfCBzdG9wX3Byb2NbcG9ydF0ucHJvY2Vzc29yX2lkOworCQkJKHRlbXAgJiB+c3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RvcF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZDsKIAkJd3JpdGVsKHRlbXAsIHN0b3BfcHJvY1twb3J0XS5nbG9iYWxfY29udHJvbF9yZWcpOwogCiAJCS8qIHdyaXRlIGZsdXNoICovCkBAIC0zMzYsNyArMzM2LDcgQEAKIAlpZiAocG9ydCA8IDQpIHsKIAkJdGVtcCA9IHJlYWRsKHN0YXJ0X3Byb2NbcG9ydF0uZ2xvYmFsX2NvbnRyb2xfcmVnKTsKIAkJdGVtcCA9Ci0JICAgIAkJKHRlbXAgJiB+c3RvcF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZCkgfCBzdGFydF9wcm9jW3BvcnRdLnByb2Nlc3Nvcl9pZDsKKwkJCSh0ZW1wICYgfnN0b3BfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQpIHwgc3RhcnRfcHJvY1twb3J0XS5wcm9jZXNzb3JfaWQ7CiAJCXdyaXRlbCh0ZW1wLCBzdGFydF9wcm9jW3BvcnRdLmdsb2JhbF9jb250cm9sX3JlZyk7CiAKIAkJLyogd3JpdGUgZmx1c2ggKi8KQEAgLTUwOSw4ICs1MDksOCBAQAogCQlkZXZfZXJyKCZpY29tX3BvcnQtPmFkYXB0ZXItPnBjaV9kZXYtPmRldiwiUG9ydCBub3Qgb3BlcnRpb25hbFxuIik7CiAJfQogCi0gICAgICBpZiAobmV3X3BhZ2UgIT0gTlVMTCkKLQkgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgNDA5NiwgbmV3X3BhZ2UsIHRlbXBfcGNpKTsKKwlpZiAobmV3X3BhZ2UgIT0gTlVMTCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIDQwOTYsIG5ld19wYWdlLCB0ZW1wX3BjaSk7CiB9CiAKIHN0YXRpYyBpbnQgc3RhcnR1cChzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQpCkBAIC0xNDkzLDE1ICsxNDkzLDE1IEBACiAJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlpbnQgaW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX3JlZzsKLSAgICAgICAgaW50IHJldHZhbDsKLSAgICAgICAgc3RydWN0IGljb21fYWRhcHRlciAqaWNvbV9hZGFwdGVyOwotICAgICAgICBzdHJ1Y3QgaWNvbV9wb3J0ICppY29tX3BvcnQ7CisJdW5zaWduZWQgaW50IGNvbW1hbmRfcmVnOworCWludCByZXR2YWw7CisJc3RydWN0IGljb21fYWRhcHRlciAqaWNvbV9hZGFwdGVyOworCXN0cnVjdCBpY29tX3BvcnQgKmljb21fcG9ydDsKIAotICAgICAgICByZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwotICAgICAgICBpZiAocmV0dmFsKSB7CisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiRGV2aWNlIGVuYWJsZSBGQUlMRURcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisJCXJldHVybiByZXR2YWw7CiAJfQogCiAJaWYgKCAocmV0dmFsID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsICJpY29tIikpKSB7CkBAIC0xNTEwLDIzICsxNTEwLDIzIEBACiAJCSByZXR1cm4gcmV0dmFsOwogCSB9CiAKLSAgICAgICAgcGNpX3NldF9tYXN0ZXIoZGV2KTsKKwlwY2lfc2V0X21hc3RlcihkZXYpOwogCi0gICAgICAgIGlmICggKHJldHZhbCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZF9yZWcpKSkgeworCWlmICggKHJldHZhbCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZF9yZWcpKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIlBDSSBDb25maWcgcmVhZCBGQUlMRURcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgICAgIH0KKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0NPTU1BTkQsCiAJCWNvbW1hbmRfcmVnIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSCiAgCQl8IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIpOwogCi0gICAgICAgIGlmIChlbnQtPmRyaXZlcl9kYXRhID09IEFEQVBURVJfVjEpIHsKKwlpZiAoZW50LT5kcml2ZXJfZGF0YSA9PSBBREFQVEVSX1YxKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCAweDgzMDA4MzBBKTsKLQkgfSBlbHNlIHsKKwl9IGVsc2UgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0NCwgMHg0MjAwNDIwMCk7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCAweDQyMDA0MjAwKTsKLSAgICAgICAgIH0KKwl9CiAKIAogCXJldHZhbCA9IGljb21fYWxsb2NfYWRhcHRlcigmaWNvbV9hZGFwdGVyKTsKQEAgLTE1MzYsMTAgKzE1MzYsMTAgQEAKIAkJIGdvdG8gcHJvYmVfZXhpdDA7CiAJfQogCi0JIGljb21fYWRhcHRlci0+YmFzZV9hZGRyX3BjaSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApOwotCSBpY29tX2FkYXB0ZXItPnBjaV9kZXYgPSBkZXY7Ci0JIGljb21fYWRhcHRlci0+dmVyc2lvbiA9IGVudC0+ZHJpdmVyX2RhdGE7Ci0JIGljb21fYWRhcHRlci0+c3Vic3lzdGVtX2lkID0gZW50LT5zdWJkZXZpY2U7CisJaWNvbV9hZGFwdGVyLT5iYXNlX2FkZHJfcGNpID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJaWNvbV9hZGFwdGVyLT5wY2lfZGV2ID0gZGV2OworCWljb21fYWRhcHRlci0+dmVyc2lvbiA9IGVudC0+ZHJpdmVyX2RhdGE7CisJaWNvbV9hZGFwdGVyLT5zdWJzeXN0ZW1faWQgPSBlbnQtPnN1YmRldmljZTsKIAogCiAJcmV0dmFsID0gaWNvbV9pbml0X3BvcnRzKGljb21fYWRhcHRlcik7CkBAIC0xNTQ4LDcgKzE1NDgsNyBAQAogCQlnb3RvIHByb2JlX2V4aXQxOwogCX0KIAotCSBpY29tX2FkYXB0ZXItPmJhc2VfYWRkciA9IHBjaV9pb3JlbWFwX2JhcihkZXYsIDApOworCWljb21fYWRhcHRlci0+YmFzZV9hZGRyID0gcGNpX2lvcmVtYXBfYmFyKGRldiwgMCk7CiAKIAlpZiAoIWljb21fYWRhcHRlci0+YmFzZV9hZGRyKQogCQlnb3RvIHByb2JlX2V4aXQxOwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAogCXJldHZhbCA9IGljb21fbG9hZF9wb3J0cyhpY29tX2FkYXB0ZXIpOwogCi0gICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGljb21fYWRhcHRlci0+bnVtYl9wb3J0czsgaW5kZXgrKykgeworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGljb21fYWRhcHRlci0+bnVtYl9wb3J0czsgaW5kZXgrKykgewogCQlpY29tX3BvcnQgPSAmaWNvbV9hZGFwdGVyLT5wb3J0X2luZm9baW5kZXhdOwogCiAJCWlmIChpY29tX3BvcnQtPnN0YXR1cyA9PSBJQ09NX1BPUlRfQUNUSVZFKSB7CkBAIC0xNTc5LDcgKzE1NzksNyBAQAogCQkJCWljb21fcG9ydC0+c3RhdHVzID0gSUNPTV9QT1JUX09GRjsKIAkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkRldmljZSBhZGQgZmFpbGVkXG4iKTsKIAkJCSB9IGVsc2UKLQkJCSAgICAgICAgZGV2X2luZm8oJmRldi0+ZGV2LCAiRGV2aWNlIGFkZGVkXG4iKTsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJEZXZpY2UgYWRkZWRcbiIpOwogCQl9CiAJfQogCkBAIC0xNTk1LDkgKzE1OTUsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAotICAgICAgICByZXR1cm4gcmV0dmFsOwotCi0KKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaWNvbV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggZDdiY2QwNy4uN2NlOWU5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTcwNSw3ICs3MDUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgoc2VyLT5pcnEgIT0gcG9ydC0+aXJxKSB8fAotCSAgICAoc2VyLT5pb190eXBlICE9IFNFUklBTF9JT19NRU0pIHx8CisJICAgIChzZXItPmlvX3R5cGUgIT0gVVBJT19NRU0pIHx8CiAJICAgIChzZXItPmJhdWRfYmFzZSAhPSBwb3J0LT51YXJ0Y2xrKSAgfHwKIAkgICAgKHNlci0+aW9tZW1fYmFzZSAhPSAodm9pZCAqKXBvcnQtPm1hcGJhc2UpIHx8CiAJICAgIChzZXItPmh1YjYgIT0gMCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IDY0NDNiN2YuLmI4NjI5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC03MjYsOSArNzI2LDEwIEBACiAJLmNvbnMJCT0gUFhBX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKyAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfc3VzcGVuZF9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTczNiw5ICs3MzcsOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKyAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfcmVzdW1lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtNzQ2LDYgKzc0NywxMiBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNlcmlhbF9weGFfcG1fb3BzID0geworCS5zdXNwZW5kCT0gc2VyaWFsX3B4YV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2VyaWFsX3B4YV9yZXN1bWUsCit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgc2VyaWFsX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0OwpAQCAtODI1LDExICs4MzIsMTIgQEAKICAgICAgICAgLnByb2JlICAgICAgICAgID0gc2VyaWFsX3B4YV9wcm9iZSwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gc2VyaWFsX3B4YV9yZW1vdmUsCiAKLQkuc3VzcGVuZAk9IHNlcmlhbF9weGFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNlcmlhbF9weGFfcmVzdW1lLAogCS5kcml2ZXIJCT0gewogCSAgICAgICAgLm5hbWUJPSAicHhhMnh4LXVhcnQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnNlcmlhbF9weGFfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKaW5kZXggN2Y1ZTI2OC4uMjE5OWQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogCVBQU1IgfD0gUFBDX1RYRDEgfCBQUENfVFhEMzsKIH0KIAotdm9pZCBfX2luaXQgc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKHN0cnVjdCBzYTExMDBfcG9ydF9mbnMgKmZucykKK3ZvaWQgX19kZXZpbml0IHNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucyhzdHJ1Y3Qgc2ExMTAwX3BvcnRfZm5zICpmbnMpCiB7CiAJaWYgKGZucy0+Z2V0X21jdHJsKQogCQlzYTExMDBfcG9wcy5nZXRfbWN0cmwgPSBmbnMtPmdldF9tY3RybDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDE2ODliZGEuLmRjYzcyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTI3MCw2ICsxMjcwLDkgQEAKIAogCUJVR19PTigha2VybmVsX2xvY2tlZCgpKTsKIAorCWlmICghc3RhdGUpCisJCXJldHVybjsKKwogCXVwb3J0ID0gc3RhdGUtPnVhcnRfcG9ydDsKIAlwb3J0ID0gJnN0YXRlLT5wb3J0OwogCkBAIC0xMzE2LDkgKzEzMTksOSBAQAogCSAqLwogCWlmIChwb3J0LT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1cG9ydC0+bG9jaywgZmxhZ3MpOwogCQl1cG9ydC0+b3BzLT5zdG9wX3J4KHVwb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cG9ydC0+bG9jaywgZmxhZ3MpOwogCQkvKgogCQkgKiBCZWZvcmUgd2UgZHJvcCBEVFIsIG1ha2Ugc3VyZSB0aGUgVUFSVCB0cmFuc21pdHRlcgogCQkgKiBoYXMgY29tcGxldGVseSBkcmFpbmVkOyB0aGlzIGlzIGVzcGVjaWFsbHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfdHh4OS5jCmluZGV4IDBmN2NmNGMuLmM1MGU5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF90eHg5LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX3R4eDkuYwpAQCAtMjIxLDIxICsyMjEsMjYgQEAKIAkJc2lvX291dCh1cCwgVFhYOV9TSUJHUiwgMHhmZiB8IFRYWDlfU0lCR1JfQkNMS19UNik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnRvX3VhcnRfdHh4OV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgdWFydF90eHg5X3BvcnQsIHBvcnQpOworfQorCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlzaW9fbWFzayh1cCwgVFhYOV9TSURJQ1IsIFRYWDlfU0lESUNSX1RJRSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAlzaW9fc2V0KHVwLCBUWFg5X1NJRElDUiwgVFhYOV9TSURJQ1JfVElFKTsKIH0KIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdXAtPnBvcnQucmVhZF9zdGF0dXNfbWFzayAmPSB+VFhYOV9TSURJU1JfUkRJUzsKIH0KIApAQCAtMjQ2LDcgKzI1MSw3IEBACiAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X2luaXRpYWxpemUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGludCB0bW91dCA9IDEwMDAwOwogCiAJc2lvX291dCh1cCwgVFhYOV9TSUZDUiwgVFhYOV9TSUZDUl9TV1JTVCk7CkBAIC00MTQsNyArNDE5LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWxfdHh4OV90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCkBAIC00MjcsNyArNDMyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBzZXJpYWxfdHh4OV9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGludCByZXQ7CiAKIAkvKiBubyBtb2RlbSBjb250cm9sIGxpbmVzICovCkBAIC00NDAsNyArNDQ1LDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBtY3RybCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCiAJaWYgKG1jdHJsICYgVElPQ01fUlRTKQogCQlzaW9fbWFzayh1cCwgVFhYOV9TSUZMQ1IsIFRYWDlfU0lGTENSX1JUU1NDKTsKQEAgLTQ1MCw3ICs0NTUsNyBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9icmVha19jdGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CkBAIC00OTQsNyArNDk5LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaWVyOwogCXVuc2lnbmVkIGNoYXIgYzsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCiAJLyoKIAkgKglGaXJzdCBzYXZlIHRoZSBJRVIgdGhlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCkBAIC01MjAsNyArNTI1LDcgQEAKIHN0YXRpYyB2b2lkIHNlcmlhbF90eHg5X3B1dF9wb2xsX2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBjKQogewogCXVuc2lnbmVkIGludCBpZXI7Ci0Jc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IChzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKilwb3J0OworCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSB0b191YXJ0X3R4eDlfcG9ydChwb3J0KTsKIAogCS8qCiAJICoJRmlyc3Qgc2F2ZSB0aGUgSUVSIHRoZW4gZGlzYWJsZSB0aGUgaW50ZXJydXB0cwpAQCAtNTUxLDcgKzU1Niw3IEBACiAKIHN0YXRpYyBpbnQgc2VyaWFsX3R4eDlfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsOwogCkBAIC01OTYsNyArNjAxLDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfc2h1dGRvd24oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgpAQCAtNjM2LDcgKzY0MSw3IEBACiBzZXJpYWxfdHh4OV9zZXRfdGVybWlvcyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCiAJCSAgICAgICBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXVuc2lnbmVkIGludCBjdmFsLCBmY3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CkBAIC04MTQsMTkgKzgxOSwxOSBAQAogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCXNlcmlhbF90eHg5X3JlbGVhc2VfcmVzb3VyY2UodXApOwogfQogCiBzdGF0aWMgaW50IHNlcmlhbF90eHg5X3JlcXVlc3RfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJcmV0dXJuIHNlcmlhbF90eHg5X3JlcXVlc3RfcmVzb3VyY2UodXApOwogfQogCiBzdGF0aWMgdm9pZCBzZXJpYWxfdHh4OV9jb25maWdfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgdWZsYWdzKQogewotCXN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqdXAgPSAoc3RydWN0IHVhcnRfdHh4OV9wb3J0ICopcG9ydDsKKwlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gdG9fdWFydF90eHg5X3BvcnQocG9ydCk7CiAJaW50IHJldDsKIAogCS8qCkBAIC04OTcsNyArOTAyLDcgQEAKIAogc3RhdGljIHZvaWQgc2VyaWFsX3R4eDlfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKIHsKLQlzdHJ1Y3QgdWFydF90eHg5X3BvcnQgKnVwID0gKHN0cnVjdCB1YXJ0X3R4eDlfcG9ydCAqKXBvcnQ7CisJc3RydWN0IHVhcnRfdHh4OV9wb3J0ICp1cCA9IHRvX3VhcnRfdHh4OV9wb3J0KHBvcnQpOwogCiAJd2FpdF9mb3JfeG1pdHIodXApOwogCXNpb19vdXQodXAsIFRYWDlfU0lURklGTywgY2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA4NTExOWZiLi42NDk4YmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtMTE0Myw3ICsxMTQzLDcgQEAKIAl3aGlsZSAoKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBiaXRzKSAhPSBiaXRzKQogCQljcHVfcmVsYXgoKTsKIAotCWlmIChzY2lfcG9ydC0+ZGlzYWJsZSk7CisJaWYgKHNjaV9wb3J0LT5kaXNhYmxlKQogCQlzY2lfcG9ydC0+ZGlzYWJsZShwb3J0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYyBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKaW5kZXggZDNiNDk2OC4uYjIwNGEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYworKysgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCkBAIC05MCw3ICs5MCwxMSBAQAogICovCiBzdGF0aWMgdTMyIHNmaV91c2VfaW9yZW1hcCBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzZmlfbWFwX21lbW9yeSh1NjQgcGh5cywgdTMyIHNpemUpCisvKgorICogc2ZpX3VuL21hcF9tZW1vcnkgY2FsbHMgZWFybHlfaW9yZW1hcC9pb3VubWFwIHdoaWNoIGlzIGEgX19pbml0IGZ1bmN0aW9uCisgKiBhbmQgaW50cm9kdWNlcyBzZWN0aW9uIG1pc21hdGNoLiBTbyB1c2UgX19yZWYgdG8gbWFrZSBpdCBjYWxtLgorICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICogX19yZWYgc2ZpX21hcF9tZW1vcnkodTY0IHBoeXMsIHUzMiBzaXplKQogewogCWlmICghcGh5cyB8fCAhc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDEsNyArMTA1LDcgQEAKIAkJcmV0dXJuIGVhcmx5X2lvcmVtYXAocGh5cywgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNmaV91bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICp2aXJ0LCB1MzIgc2l6ZSkKK3N0YXRpYyB2b2lkIF9fcmVmIHNmaV91bm1hcF9tZW1vcnkodm9pZCBfX2lvbWVtICp2aXJ0LCB1MzIgc2l6ZSkKIHsKIAlpZiAoIXZpcnQgfHwgIXNpemUpCiAJCXJldHVybjsKQEAgLTEyNSw3ICsxMjksNyBAQAogICogc2ZpX3ZlcmlmeV90YWJsZSgpCiAgKiBTYW5pdHkgY2hlY2sgdGFibGUgbGVuZ2gsIGNhbGN1bGF0ZSBjaGVja3N1bQogICovCi1zdGF0aWMgX19pbml0IGludCBzZmlfdmVyaWZ5X3RhYmxlKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3N0YXRpYyBpbnQgc2ZpX3ZlcmlmeV90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpCiB7CiAKIAl1OCBjaGVja3N1bSA9IDA7CkBAIC0yMTMsMTIgKzIxNywxNyBAQAogICogICAgdGhlIG1hcHBlZCB2aXJ0IGFkZHJlc3Mgd2lsbCBiZSByZXR1cm5lZCwgYW5kIHRoZSB2aXJ0IHNwYWNlCiAgKiAgICB3aWxsIGJlIHJlbGVhc2VkIGJ5IGNhbGwgc2ZpX3B1dF90YWJsZSgpIGxhdGVyCiAgKgorICogVGhpcyB0d28gY2FzZXMgYXJlIGZyb20gdHdvIGRpZmZlcmVudCBmdW5jdGlvbnMgd2l0aCB0d28gZGlmZmVyZW50CisgKiBzZWN0aW9ucyBhbmQgY2F1c2VzIHNlY3Rpb24gbWlzbWF0Y2ggd2FybmluZy4gU28gdXNlIF9fcmVmIHRvIHRlbGwKKyAqIG1vZHBvc3Qgbm90IHRvIG1ha2UgYW55IG5vaXNlLgorICoKICAqIFJldHVybiB2YWx1ZToKICAqCU5VTEw6CQkJd2hlbiBjYW4ndCBmaW5kIGEgdGFibGUgbWF0Y2hpbmcgdGhlIGtleQogICoJRVJSX1BUUihlcnJvcik6CQllcnJvciB2YWx1ZQogICoJdmlydCB0YWJsZSBhZGRyZXNzOgl3aGVuIGEgbWF0Y2hlZCB0YWJsZSBpcyBmb3VuZAogICovCi1zdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqc2ZpX2NoZWNrX3RhYmxlKHU2NCBwYSwgc3RydWN0IHNmaV90YWJsZV9rZXkgKmtleSkKK3N0cnVjdCBzZmlfdGFibGVfaGVhZGVyICoKKyBfX3JlZiBzZmlfY2hlY2tfdGFibGUodTY0IHBhLCBzdHJ1Y3Qgc2ZpX3RhYmxlX2tleSAqa2V5KQogewogCXN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0aDsKIAl2b2lkICpyZXQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQppbmRleCA2ZDdhM2Y4Li4yMWExMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQpAQCAtMTcsNyArMTcsNyBAQAogb2JqLSQoQ09ORklHX1NQSV9BVTE1NTApCQkrPSBhdTE1NTBfc3BpLm8KIG9iai0kKENPTkZJR19TUElfQlVUVEVSRkxZKQkJKz0gc3BpX2J1dHRlcmZseS5vCiBvYmotJChDT05GSUdfU1BJX0dQSU8pCQkJKz0gc3BpX2dwaW8ubwotb2JqLSQoQ09ORklHX1NQSV9JTVgpCQkJKz0gbXhjX3NwaS5vCitvYmotJChDT05GSUdfU1BJX0lNWCkJCQkrPSBzcGlfaW14Lm8KIG9iai0kKENPTkZJR19TUElfTE03MF9MTFApCQkrPSBzcGlfbG03MGxscC5vCiBvYmotJChDT05GSUdfU1BJX1BYQTJYWCkJCSs9IHB4YTJ4eF9zcGkubwogb2JqLSQoQ09ORklHX1NQSV9PTUFQX1VXSVJFKQkJKz0gb21hcF91d2lyZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKaW5kZXggYzBmOTUwYS4uZmY1YmJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJR0VOX01BU0tfQklUUyhTU1BfREFUQV9CSVRTXzEyLCBTU1BfQ1IwX01BU0tfRFNTLCAwKQl8IFwKIAlHRU5fTUFTS19CSVRTKFNTUF9NSUNST1dJUkVfQ0hBTk5FTF9GVUxMX0RVUExFWCwgU1NQX0NSMF9NQVNLX0hBTEZEVVAsIDUpIHwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19QT0xfSURMRV9MT1csIFNTUF9DUjBfTUFTS19TUE8sIDYpIHwgXAotCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19GQUxMSU5HX0VER0UsIFNTUF9DUjBfTUFTS19TUEgsIDcpIHwgXAorCUdFTl9NQVNLX0JJVFMoU1NQX0NMS19TRUNPTkRfRURHRSwgU1NQX0NSMF9NQVNLX1NQSCwgNykgfCBcCiAJR0VOX01BU0tfQklUUyhOTURLX1NTUF9ERUZBVUxUX0NMS1JBVEUsIFNTUF9DUjBfTUFTS19TQ1IsIDgpIHwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0JJVFNfOCwgU1NQX0NSMF9NQVNLX0NTUywgMTYpCXwgXAogCUdFTl9NQVNLX0JJVFMoU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEksIFNTUF9DUjBfTUFTS19GUkYsIDIxKSBcCkBAIC0xMjQ3LDggKzEyNDcsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNoaXBfaW5mby0+aWZhY2UgPT0gU1NQX0lOVEVSRkFDRV9NT1RPUk9MQV9TUEkpIHsKLQkJaWYgKChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX1JJU0lOR19FREdFKQotCQkgICAgJiYgKGNoaXBfaW5mby0+Y2xrX3BoYXNlICE9IFNTUF9DTEtfRkFMTElOR19FREdFKSkgeworCQlpZiAoKGNoaXBfaW5mby0+Y2xrX3BoYXNlICE9IFNTUF9DTEtfRklSU1RfRURHRSkKKwkJICAgICYmIChjaGlwX2luZm8tPmNsa19waGFzZSAhPSBTU1BfQ0xLX1NFQ09ORF9FREdFKSkgewogCQkJZGV2X2VycihjaGlwX2luZm8tPmRldiwKIAkJCQkiQ2xvY2sgUGhhc2UgaXMgY29uZmlndXJlZCBpbmNvcnJlY3RseVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE0ODUsNyArMTQ4NSw3IEBACiAJCWNoaXBfaW5mby0+ZGF0YV9zaXplID0gU1NQX0RBVEFfQklUU18xMjsKIAkJY2hpcF9pbmZvLT5yeF9sZXZfdHJpZyA9IFNTUF9SWF8xX09SX01PUkVfRUxFTTsKIAkJY2hpcF9pbmZvLT50eF9sZXZfdHJpZyA9IFNTUF9UWF8xX09SX01PUkVfRU1QVFlfTE9DOwotCQljaGlwX2luZm8tPmNsa19waGFzZSA9IFNTUF9DTEtfRkFMTElOR19FREdFOworCQljaGlwX2luZm8tPmNsa19waGFzZSA9IFNTUF9DTEtfU0VDT05EX0VER0U7CiAJCWNoaXBfaW5mby0+Y2xrX3BvbCA9IFNTUF9DTEtfUE9MX0lETEVfTE9XOwogCQljaGlwX2luZm8tPmN0cmxfbGVuID0gU1NQX0JJVFNfODsKIAkJY2hpcF9pbmZvLT53YWl0X3N0YXRlID0gU1NQX01XSVJFX1dBSVRfWkVSTzsKQEAgLTE4MjYsNyArMTgyNiw3IEBACiAJCSAqIFNUIE1pY3JvIGRlcml2YXRpdmUsIHRoaXMgaGFzIDMyYml0IHdpZGUKIAkJICogYW5kIDMyIGxvY2F0aW9ucyBkZWVwIFRYL1JYIEZJRk8KIAkJICovCi0JCS5pZAk9IDB4MDAxMDgwMjIsCisJCS5pZAk9IDB4MDEwODAwMjIsCiAJCS5tYXNrCT0gMHhmZmZmZmZmZiwKIAkJLmRhdGEJPSAmdmVuZG9yX3N0LAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9teGNfc3BpLmMgYi9kcml2ZXJzL3NwaS9teGNfc3BpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNDQ3MjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zcGkvbXhjX3NwaS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yCi0gKiBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaV9iaXRiYW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgPG1hY2gvc3BpLmg+Ci0KLSNkZWZpbmUgRFJJVkVSX05BTUUgInNwaV9pbXgiCi0KLSNkZWZpbmUgTVhDX0NTUElSWERBVEEJCTB4MDAKLSNkZWZpbmUgTVhDX0NTUElUWERBVEEJCTB4MDQKLSNkZWZpbmUgTVhDX0NTUElDVFJMCQkweDA4Ci0jZGVmaW5lIE1YQ19DU1BJSU5UCQkweDBjCi0jZGVmaW5lIE1YQ19SRVNFVAkJMHgxYwotCi0vKiBnZW5lcmljIGRlZmluZXMgdG8gYWJzdHJhY3QgZnJvbSB0aGUgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dHMgKi8KLSNkZWZpbmUgTVhDX0lOVF9SUgkoMSA8PCAwKSAvKiBSZWNlaXZlIGRhdGEgcmVhZHkgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1YQ19JTlRfVEUJKDEgPDwgMSkgLyogVHJhbnNtaXQgRklGTyBlbXB0eSBpbnRlcnJ1cHQgKi8KLQotc3RydWN0IG14Y19zcGlfY29uZmlnIHsKLQl1bnNpZ25lZCBpbnQgc3BlZWRfaHo7Ci0JdW5zaWduZWQgaW50IGJwdzsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQlpbnQgY3M7Ci19OwotCi1zdHJ1Y3QgbXhjX3NwaV9kYXRhIHsKLQlzdHJ1Y3Qgc3BpX2JpdGJhbmcgYml0YmFuZzsKLQotCXN0cnVjdCBjb21wbGV0aW9uIHhmZXJfZG9uZTsKLQl2b2lkICpiYXNlOwotCWludCBpcnE7Ci0Jc3RydWN0IGNsayAqY2xrOwotCXVuc2lnbmVkIGxvbmcgc3BpX2NsazsKLQlpbnQgKmNoaXBzZWxlY3Q7Ci0KLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0Jdm9pZCAoKnR4KShzdHJ1Y3QgbXhjX3NwaV9kYXRhICopOwotCXZvaWQgKCpyeCkoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQl2b2lkICpyeF9idWY7Ci0JY29uc3Qgdm9pZCAqdHhfYnVmOwotCXVuc2lnbmVkIGludCB0eGZpZm87IC8qIG51bWJlciBvZiB3b3JkcyBwdXNoZWQgaW4gdHggRklGTyAqLwotCi0JLyogU29DIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwotCXZvaWQgKCppbnRjdHJsKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIGludCk7Ci0JaW50ICgqY29uZmlnKShzdHJ1Y3QgbXhjX3NwaV9kYXRhICosIHN0cnVjdCBteGNfc3BpX2NvbmZpZyAqKTsKLQl2b2lkICgqdHJpZ2dlcikoc3RydWN0IG14Y19zcGlfZGF0YSAqKTsKLQlpbnQgKCpyeF9hdmFpbGFibGUpKHN0cnVjdCBteGNfc3BpX2RhdGEgKik7Ci19OwotCi0jZGVmaW5lIE1YQ19TUElfQlVGX1JYKHR5cGUpCQkJCQkJXAotc3RhdGljIHZvaWQgbXhjX3NwaV9idWZfcnhfIyN0eXBlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCQlcCi17CQkJCQkJCQkJXAotCXVuc2lnbmVkIGludCB2YWwgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElSWERBVEEpOwlcCi0JCQkJCQkJCQlcCi0JaWYgKG14Y19zcGktPnJ4X2J1ZikgewkJCQkJCVwKLQkJKih0eXBlICopbXhjX3NwaS0+cnhfYnVmID0gdmFsOwkJCQlcCi0JCW14Y19zcGktPnJ4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAotCX0JCQkJCQkJCVwKLX0KLQotI2RlZmluZSBNWENfU1BJX0JVRl9UWCh0eXBlKQkJCQkJCVwKLXN0YXRpYyB2b2lkIG14Y19zcGlfYnVmX3R4XyMjdHlwZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQkJXAotewkJCQkJCQkJCVwKLQl0eXBlIHZhbCA9IDA7CQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlpZiAobXhjX3NwaS0+dHhfYnVmKSB7CQkJCQkJXAotCQl2YWwgPSAqKHR5cGUgKilteGNfc3BpLT50eF9idWY7CQkJCVwKLQkJbXhjX3NwaS0+dHhfYnVmICs9IHNpemVvZih0eXBlKTsJCQlcCi0JfQkJCQkJCQkJXAotCQkJCQkJCQkJXAotCW14Y19zcGktPmNvdW50IC09IHNpemVvZih0eXBlKTsJCQkJCVwKLQkJCQkJCQkJCVwKLQl3cml0ZWwodmFsLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElUWERBVEEpOwkJCVwKLX0KLQotTVhDX1NQSV9CVUZfUlgodTgpCi1NWENfU1BJX0JVRl9UWCh1OCkKLU1YQ19TUElfQlVGX1JYKHUxNikKLU1YQ19TUElfQlVGX1RYKHUxNikKLU1YQ19TUElfQlVGX1JYKHUzMikKLU1YQ19TUElfQlVGX1RYKHUzMikKLQotLyogRmlyc3QgZW50cnkgaXMgcmVzZXJ2ZWQsIHNlY29uZCBlbnRyeSBpcyB2YWxpZCBvbmx5IGlmIFNESENfU1BJRU4gaXMgc2V0Ci0gKiAod2hpY2ggaXMgY3VycmVudGx5IG5vdCB0aGUgY2FzZSBpbiB0aGlzIGRyaXZlcikKLSAqLwotc3RhdGljIGludCBteGNfY2xrZGl2c1tdID0gezAsIDMsIDQsIDYsIDgsIDEyLCAxNiwgMjQsIDMyLCA0OCwgNjQsIDk2LCAxMjgsIDE5MiwKLQkyNTYsIDM4NCwgNTEyLCA3NjgsIDEwMjR9OwotCi0vKiBNWDIxLCBNWDI3ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzEodW5zaWduZWQgaW50IGZpbiwKLQkJdW5zaWduZWQgaW50IGZzcGkpCi17Ci0JaW50IGksIG1heDsKLQotCWlmIChjcHVfaXNfbXgyMSgpKQotCQltYXggPSAxODsKLQllbHNlCi0JCW1heCA9IDE2OwotCi0JZm9yIChpID0gMjsgaSA8IG1heDsgaSsrKQotCQlpZiAoZnNwaSAqIG14Y19jbGtkaXZzW2ldID49IGZpbikKLQkJCXJldHVybiBpOwotCi0JcmV0dXJuIG1heDsKLX0KLQotLyogTVgxLCBNWDMxLCBNWDM1ICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG14Y19zcGlfY2xrZGl2XzIodW5zaWduZWQgaW50IGZpbiwKLQkJdW5zaWduZWQgaW50IGZzcGkpCi17Ci0JaW50IGksIGRpdiA9IDQ7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCWlmIChmc3BpICogZGl2ID49IGZpbikKLQkJCXJldHVybiBpOwotCQlkaXYgPDw9IDE7Ci0JfQotCi0JcmV0dXJuIDc7Ci19Ci0KLSNkZWZpbmUgTVgzMV9JTlRSRUdfVEVFTgkoMSA8PCAwKQotI2RlZmluZSBNWDMxX0lOVFJFR19SUkVOCSgxIDw8IDMpCi0KLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgMCkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMSkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgMikKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9QSEEJKDEgPDwgNSkKLSNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU0NUTAkoMSA8PCA2KQotI2RlZmluZSBNWDMxX0NTUElDVFJMX1NTUE9MCSgxIDw8IDcpCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQkNfU0hJRlQJOAotI2RlZmluZSBNWDM1X0NTUElDVFJMX0JMX1NISUZUCTIwCi0jZGVmaW5lIE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQJMjQKLSNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9DU19TSElGVAkxMgotI2RlZmluZSBNWDMxX0NTUElDVFJMX0RSX1NISUZUCTE2Ci0KLSNkZWZpbmUgTVgzMV9DU1BJU1RBVFVTCQkweDE0Ci0jZGVmaW5lIE1YMzFfU1RBVFVTX1JSCQkoMSA8PCAzKQotCi0vKiBUaGVzZSBmdW5jdGlvbnMgYWxzbyB3b3JrIGZvciB0aGUgaS5NWDM1LCBidXQgYmUgYXdhcmUgdGhhdAotICogdGhlIGkuTVgzNSBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXIgbGF5b3V0IGZvciBiaXRzCi0gKiB3ZSBkbyBub3QgdXNlIGhlcmUuCi0gKi8KLXN0YXRpYyB2b2lkIG14MzFfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCB2YWwgPSAwOwotCi0JaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCi0JCXZhbCB8PSBNWDMxX0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgzMV9JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MzFfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgzMV9jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMzFfQ1NQSUNUUkxfRU5BQkxFIHwgTVgzMV9DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDMxX0NTUElDVFJMX0RSX1NISUZUOwotCi0JaWYgKGNwdV9pc19teDMxKCkpCi0JCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDMxX0NTUElDVFJMX0JDX1NISUZUOwotCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpIHsKLQkJcmVnIHw9IChjb25maWctPmJwdyAtIDEpIDw8IE1YMzVfQ1NQSUNUUkxfQkxfU0hJRlQ7Ci0JCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTQ1RMOwotCX0KLQotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUEhBOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfUE9MOwotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1NfSElHSCkKLQkJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfU1NQT0w7Ci0JaWYgKGNvbmZpZy0+Y3MgPCAwKSB7Ci0JCWlmIChjcHVfaXNfbXgzMSgpKQotCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzFfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0JCWVsc2UgaWYgKGNwdV9pc19teDM1KCkpCi0JCQlyZWcgfD0gKGNvbmZpZy0+Y3MgKyAzMikgPDwgTVgzNV9DU1BJQ1RSTF9DU19TSElGVDsKLQl9Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MzFfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWDMxX0NTUElTVEFUVVMpICYgTVgzMV9TVEFUVVNfUlI7Ci19Ci0KLSNkZWZpbmUgTVgyN19JTlRSRUdfUlIJCSgxIDw8IDQpCi0jZGVmaW5lIE1YMjdfSU5UUkVHX1RFRU4JKDEgPDwgOSkKLSNkZWZpbmUgTVgyN19JTlRSRUdfUlJFTgkoMSA8PCAxMykKLQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1BPTAkoMSA8PCA1KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1BIQQkoMSA8PCA2KQotI2RlZmluZSBNWDI3X0NTUElDVFJMX1NTUE9MCSgxIDw8IDgpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfWENICSgxIDw8IDkpCi0jZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDEwKQotI2RlZmluZSBNWDI3X0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMSkKLSNkZWZpbmUgTVgyN19DU1BJQ1RSTF9EUl9TSElGVAkxNAotI2RlZmluZSBNWDI3X0NTUElDVFJMX0NTX1NISUZUCTE5Ci0KLXN0YXRpYyB2b2lkIG14MjdfaW50Y3RybChzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGludCB2YWwgPSAwOwotCi0JaWYgKGVuYWJsZSAmIE1YQ19JTlRfVEUpCi0JCXZhbCB8PSBNWDI3X0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgyN19JTlRSRUdfUlJFTjsKLQotCXdyaXRlbCh2YWwsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG14MjdfdHJpZ2dlcihzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXVuc2lnbmVkIGludCByZWc7Ci0KLQlyZWcgPSByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgyN19jb25maWcoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwKLQkJc3RydWN0IG14Y19zcGlfY29uZmlnICpjb25maWcpCi17Ci0JdW5zaWduZWQgaW50IHJlZyA9IE1YMjdfQ1NQSUNUUkxfRU5BQkxFIHwgTVgyN19DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMShteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDI3X0NTUElDVFJMX0RSX1NISUZUOwotCXJlZyB8PSBjb25maWctPmJwdyAtIDE7Ci0KLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BIQTsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1BPTDsKLQlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCXJlZyB8PSBNWDI3X0NTUElDVFJMX1NTUE9MOwotCWlmIChjb25maWctPmNzIDwgMCkKLQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMjdfQ1NQSUNUUkxfQ1NfU0hJRlQ7Ci0KLQl3cml0ZWwocmVnLCBteGNfc3BpLT5iYXNlICsgTVhDX0NTUElDVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14MjdfcnhfYXZhaWxhYmxlKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0JcmV0dXJuIHJlYWRsKG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUlOVCkgJiBNWDI3X0lOVFJFR19SUjsKLX0KLQotI2RlZmluZSBNWDFfSU5UUkVHX1JSCQkoMSA8PCAzKQotI2RlZmluZSBNWDFfSU5UUkVHX1RFRU4JCSgxIDw8IDgpCi0jZGVmaW5lIE1YMV9JTlRSRUdfUlJFTgkJKDEgPDwgMTEpCi0KLSNkZWZpbmUgTVgxX0NTUElDVFJMX1BPTAkoMSA8PCA0KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCi0jZGVmaW5lIE1YMV9DU1BJQ1RSTF9YQ0gJKDEgPDwgOCkKLSNkZWZpbmUgTVgxX0NTUElDVFJMX0VOQUJMRQkoMSA8PCA5KQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEwKQotI2RlZmluZSBNWDFfQ1NQSUNUUkxfRFJfU0hJRlQJMTMKLQotc3RhdGljIHZvaWQgbXgxX2ludGN0cmwoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gMDsKLQotCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQotCQl2YWwgfD0gTVgxX0lOVFJFR19URUVOOwotCWlmIChlbmFibGUgJiBNWENfSU5UX1JSKQotCQl2YWwgfD0gTVgxX0lOVFJFR19SUkVOOwotCi0Jd3JpdGVsKHZhbCwgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJSU5UKTsKLX0KLQotc3RhdGljIHZvaWQgbXgxX3RyaWdnZXIoc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSkKLXsKLQl1bnNpZ25lZCBpbnQgcmVnOwotCi0JcmVnID0gcmVhZGwobXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci0JcmVnIHw9IE1YMV9DU1BJQ1RSTF9YQ0g7Ci0Jd3JpdGVsKHJlZywgbXhjX3NwaS0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX2NvbmZpZyhzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpLAotCQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgKmNvbmZpZykKLXsKLQl1bnNpZ25lZCBpbnQgcmVnID0gTVgxX0NTUElDVFJMX0VOQUJMRSB8IE1YMV9DU1BJQ1RSTF9NQVNURVI7Ci0KLQlyZWcgfD0gbXhjX3NwaV9jbGtkaXZfMihteGNfc3BpLT5zcGlfY2xrLCBjb25maWctPnNwZWVkX2h6KSA8PAotCQlNWDFfQ1NQSUNUUkxfRFJfU0hJRlQ7Ci0JcmVnIHw9IGNvbmZpZy0+YnB3IC0gMTsKLQotCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BIQSkKLQkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QSEE7Ci0JaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQotCQlyZWcgfD0gTVgxX0NTUElDVFJMX1BPTDsKLQotCXdyaXRlbChyZWcsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXgxX3J4X2F2YWlsYWJsZShzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpKQotewotCXJldHVybiByZWFkbChteGNfc3BpLT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgxX0lOVFJFR19SUjsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCBpc19hY3RpdmUpCi17Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXVuc2lnbmVkIGludCBjcyA9IDA7Ci0JaW50IGdwaW8gPSBteGNfc3BpLT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOwotCXN0cnVjdCBteGNfc3BpX2NvbmZpZyBjb25maWc7Ci0KLQlpZiAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpCi0JCWNzID0gMTsKLQotCWlmIChpc19hY3RpdmUgPT0gQklUQkFOR19DU19JTkFDVElWRSkgewotCQlpZiAoZ3BpbyA+PSAwKQotCQkJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWNzKTsKLQkJcmV0dXJuOwotCX0KLQotCWNvbmZpZy5icHcgPSBzcGktPmJpdHNfcGVyX3dvcmQ7Ci0JY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7Ci0JY29uZmlnLm1vZGUgPSBzcGktPm1vZGU7Ci0JY29uZmlnLmNzID0gbXhjX3NwaS0+Y2hpcHNlbGVjdFtzcGktPmNoaXBfc2VsZWN0XTsKLQotCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgKi8KLQlpZiAoY29uZmlnLmJwdyA8PSA4KSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTg7Ci0JCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTg7Ci0JfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDE2KSB7Ci0JCW14Y19zcGktPnJ4ID0gbXhjX3NwaV9idWZfcnhfdTE2OwotCQlteGNfc3BpLT50eCA9IG14Y19zcGlfYnVmX3R4X3UxNjsKLQl9IGVsc2UgaWYgKGNvbmZpZy5icHcgPD0gMzIpIHsKLQkJbXhjX3NwaS0+cnggPSBteGNfc3BpX2J1Zl9yeF91MzI7Ci0JCW14Y19zcGktPnR4ID0gbXhjX3NwaV9idWZfdHhfdTMyOwotCX0gZWxzZQotCQlCVUcoKTsKLQotCWlmIChncGlvID49IDApCi0JCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGNzKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9wdXNoKHN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkpCi17Ci0Jd2hpbGUgKG14Y19zcGktPnR4ZmlmbyA8IDgpIHsKLQkJaWYgKCFteGNfc3BpLT5jb3VudCkKLQkJCWJyZWFrOwotCQlteGNfc3BpLT50eChteGNfc3BpKTsKLQkJbXhjX3NwaS0+dHhmaWZvKys7Ci0JfQotCi0JbXhjX3NwaS0+dHJpZ2dlcihteGNfc3BpKTsKLX0KLQotc3RhdGljIGlycXJldHVybl90IG14Y19zcGlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gZGV2X2lkOwotCi0Jd2hpbGUgKG14Y19zcGktPnJ4X2F2YWlsYWJsZShteGNfc3BpKSkgewotCQlteGNfc3BpLT5yeChteGNfc3BpKTsKLQkJbXhjX3NwaS0+dHhmaWZvLS07Ci0JfQotCi0JaWYgKG14Y19zcGktPmNvdW50KSB7Ci0JCW14Y19zcGlfcHVzaChteGNfc3BpKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWlmIChteGNfc3BpLT50eGZpZm8pIHsKLQkJLyogTm8gZGF0YSBsZWZ0IHRvIHB1c2gsIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciByeCBkYXRhLAotCQkgKiBlbmFibGUgcmVjZWl2ZSBkYXRhIGF2YWlsYWJsZSBpbnRlcnJ1cHQuCi0JCSAqLwotCQlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfUlIpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JfQotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKLQljb21wbGV0ZSgmbXhjX3NwaS0+eGZlcl9kb25lKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBteGNfc3BpX3NldHVweGZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAotCQkJCSBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQotewotCXN0cnVjdCBteGNfc3BpX2RhdGEgKm14Y19zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKLQlzdHJ1Y3QgbXhjX3NwaV9jb25maWcgY29uZmlnOwotCi0JY29uZmlnLmJwdyA9IHQgPyB0LT5iaXRzX3Blcl93b3JkIDogc3BpLT5iaXRzX3Blcl93b3JkOwotCWNvbmZpZy5zcGVlZF9oeiAgPSB0ID8gdC0+c3BlZWRfaHogOiBzcGktPm1heF9zcGVlZF9oejsKLQljb25maWcubW9kZSA9IHNwaS0+bW9kZTsKLQotCW14Y19zcGktPmNvbmZpZyhteGNfc3BpLCAmY29uZmlnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG14Y19zcGlfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKLQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikKLXsKLQlzdHJ1Y3QgbXhjX3NwaV9kYXRhICpteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0KLQlteGNfc3BpLT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOwotCW14Y19zcGktPnJ4X2J1ZiA9IHRyYW5zZmVyLT5yeF9idWY7Ci0JbXhjX3NwaS0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOwotCW14Y19zcGktPnR4ZmlmbyA9IDA7Ci0KLQlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlteGNfc3BpX3B1c2gobXhjX3NwaSk7Ci0KLQlteGNfc3BpLT5pbnRjdHJsKG14Y19zcGksIE1YQ19JTlRfVEUpOwotCi0Jd2FpdF9mb3JfY29tcGxldGlvbigmbXhjX3NwaS0+eGZlcl9kb25lKTsKLQotCXJldHVybiB0cmFuc2Zlci0+bGVuOwotfQotCi1zdGF0aWMgaW50IG14Y19zcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlpZiAoIXNwaS0+Yml0c19wZXJfd29yZCkKLQkJc3BpLT5iaXRzX3Blcl93b3JkID0gODsKLQotCXByX2RlYnVnKCIlczogbW9kZSAlZCwgJXUgYnB3LCAlZCBoelxuIiwgX19mdW5jX18sCi0JCSBzcGktPm1vZGUsIHNwaS0+Yml0c19wZXJfd29yZCwgc3BpLT5tYXhfc3BlZWRfaHopOwotCi0JbXhjX3NwaV9jaGlwc2VsZWN0KHNwaSwgQklUQkFOR19DU19JTkFDVElWRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXhjX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG14Y19zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKm14Y19wbGF0Zm9ybV9pbmZvOwotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgaSwgcmV0OwotCi0JbXhjX3BsYXRmb3JtX2luZm8gPSAoc3RydWN0IHNwaV9pbXhfbWFzdGVyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFteGNfcGxhdGZvcm1faW5mbykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgdGhlIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXhjX3NwaV9kYXRhKSk7Ci0JaWYgKCFtYXN0ZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKLQotCW1hc3Rlci0+YnVzX251bSA9IHBkZXYtPmlkOwotCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+bnVtX2NoaXBzZWxlY3Q7Ci0KLQlteGNfc3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyID0gc3BpX21hc3Rlcl9nZXQobWFzdGVyKTsKLQlteGNfc3BpLT5jaGlwc2VsZWN0ID0gbXhjX3BsYXRmb3JtX2luZm8tPmNoaXBzZWxlY3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKSB7Ci0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldIDwgMCkKLQkJCWNvbnRpbnVlOwotCQlyZXQgPSBncGlvX3JlcXVlc3QobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSwgRFJJVkVSX05BTUUpOwotCQlpZiAocmV0KSB7Ci0JCQlpLS07Ci0JCQl3aGlsZSAoaSA+IDApCi0JCQkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKLQkJCQkJZ3Bpb19mcmVlKG14Y19zcGktPmNoaXBzZWxlY3RbaS0tXSk7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgY3MgZ3Bpb3MiKTsKLQkJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7Ci0JCX0KLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KG14Y19zcGktPmNoaXBzZWxlY3RbaV0sIDEpOwotCX0KLQotCW14Y19zcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IG14Y19zcGlfY2hpcHNlbGVjdDsKLQlteGNfc3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gbXhjX3NwaV9zZXR1cHhmZXI7Ci0JbXhjX3NwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBteGNfc3BpX3RyYW5zZmVyOwotCW14Y19zcGktPmJpdGJhbmcubWFzdGVyLT5zZXR1cCA9IG14Y19zcGlfc2V0dXA7Ci0JbXhjX3NwaS0+Yml0YmFuZy5tYXN0ZXItPmNsZWFudXAgPSBteGNfc3BpX2NsZWFudXA7Ci0KLQlpbml0X2NvbXBsZXRpb24oJm14Y19zcGktPnhmZXJfZG9uZSk7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBwbGF0Zm9ybSByZXNvdXJjZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2dwaW9fZnJlZTsKLQl9Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2dwaW9fZnJlZTsKLQl9Ci0KLQlteGNfc3BpLT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCWlmICghbXhjX3NwaS0+YmFzZSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9yZWxlYXNlX21lbTsKLQl9Ci0KLQlteGNfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmICghbXhjX3NwaS0+aXJxKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2lvdW5tYXA7Ci0JfQotCi0JcmV0ID0gcmVxdWVzdF9pcnEobXhjX3NwaS0+aXJxLCBteGNfc3BpX2lzciwgMCwgRFJJVkVSX05BTUUsIG14Y19zcGkpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGlycSVkOiAlZFxuIiwgbXhjX3NwaS0+aXJxLCByZXQpOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQotCWlmIChjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MzFfaW50Y3RybDsKLQkJbXhjX3NwaS0+Y29uZmlnID0gbXgzMV9jb25maWc7Ci0JCW14Y19zcGktPnRyaWdnZXIgPSBteDMxX3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MzFfcnhfYXZhaWxhYmxlOwotCX0gZWxzZSAgaWYgKGNwdV9pc19teDI3KCkgfHwgY3B1X2lzX214MjEoKSkgewotCQlteGNfc3BpLT5pbnRjdHJsID0gbXgyN19pbnRjdHJsOwotCQlteGNfc3BpLT5jb25maWcgPSBteDI3X2NvbmZpZzsKLQkJbXhjX3NwaS0+dHJpZ2dlciA9IG14MjdfdHJpZ2dlcjsKLQkJbXhjX3NwaS0+cnhfYXZhaWxhYmxlID0gbXgyN19yeF9hdmFpbGFibGU7Ci0JfSBlbHNlIGlmIChjcHVfaXNfbXgxKCkpIHsKLQkJbXhjX3NwaS0+aW50Y3RybCA9IG14MV9pbnRjdHJsOwotCQlteGNfc3BpLT5jb25maWcgPSBteDFfY29uZmlnOwotCQlteGNfc3BpLT50cmlnZ2VyID0gbXgxX3RyaWdnZXI7Ci0JCW14Y19zcGktPnJ4X2F2YWlsYWJsZSA9IG14MV9yeF9hdmFpbGFibGU7Ci0JfSBlbHNlCi0JCUJVRygpOwotCi0JbXhjX3NwaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKLQlpZiAoSVNfRVJSKG14Y19zcGktPmNsaykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9ja1xuIik7Ci0JCXJldCA9IFBUUl9FUlIobXhjX3NwaS0+Y2xrKTsKLQkJZ290byBvdXRfZnJlZV9pcnE7Ci0JfQotCi0JY2xrX2VuYWJsZShteGNfc3BpLT5jbGspOwotCW14Y19zcGktPnNwaV9jbGsgPSBjbGtfZ2V0X3JhdGUobXhjX3NwaS0+Y2xrKTsKLQotCWlmICghY3B1X2lzX214MzEoKSB8fCAhY3B1X2lzX214MzUoKSkKLQkJd3JpdGVsKDEsIG14Y19zcGktPmJhc2UgKyBNWENfUkVTRVQpOwotCi0JbXhjX3NwaS0+aW50Y3RybChteGNfc3BpLCAwKTsKLQotCXJldCA9IHNwaV9iaXRiYW5nX3N0YXJ0KCZteGNfc3BpLT5iaXRiYW5nKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImJpdGJhbmcgc3RhcnQgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0X2Nsa19wdXQ7Ci0JfQotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgInByb2JlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwotCi1vdXRfY2xrX3B1dDoKLQljbGtfZGlzYWJsZShteGNfc3BpLT5jbGspOwotCWNsa19wdXQobXhjX3NwaS0+Y2xrKTsKLW91dF9mcmVlX2lycToKLQlmcmVlX2lycShteGNfc3BpLT5pcnEsIG14Y19zcGkpOwotb3V0X2lvdW5tYXA6Ci0JaW91bm1hcChteGNfc3BpLT5iYXNlKTsKLW91dF9yZWxlYXNlX21lbToKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLW91dF9ncGlvX2ZyZWU6Ci0JZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKLQkJaWYgKG14Y19zcGktPmNoaXBzZWxlY3RbaV0gPj0gMCkKLQkJCWdwaW9fZnJlZShteGNfc3BpLT5jaGlwc2VsZWN0W2ldKTsKLW91dF9tYXN0ZXJfcHV0OgotCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7Ci0Ja2ZyZWUobWFzdGVyKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IF9fZXhpdCBteGNfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0Jc3RydWN0IG14Y19zcGlfZGF0YSAqbXhjX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlpbnQgaTsKLQotCXNwaV9iaXRiYW5nX3N0b3AoJm14Y19zcGktPmJpdGJhbmcpOwotCi0Jd3JpdGVsKDAsIG14Y19zcGktPmJhc2UgKyBNWENfQ1NQSUNUUkwpOwotCWNsa19kaXNhYmxlKG14Y19zcGktPmNsayk7Ci0JY2xrX3B1dChteGNfc3BpLT5jbGspOwotCWZyZWVfaXJxKG14Y19zcGktPmlycSwgbXhjX3NwaSk7Ci0JaW91bm1hcChteGNfc3BpLT5iYXNlKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspCi0JCWlmIChteGNfc3BpLT5jaGlwc2VsZWN0W2ldID49IDApCi0JCQlncGlvX2ZyZWUobXhjX3NwaS0+Y2hpcHNlbGVjdFtpXSk7Ci0KLQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCi0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfc3BpX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkgICAubmFtZSA9IERSSVZFUl9OQU1FLAotCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKLQkJICAgfSwKLQkucHJvYmUgPSBteGNfc3BpX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChteGNfc3BpX3JlbW92ZSksCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBteGNfc3BpX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZteGNfc3BpX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBteGNfc3BpX2V4aXQodm9pZCkKLXsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXhjX3NwaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChteGNfc3BpX2luaXQpOwotbW9kdWxlX2V4aXQobXhjX3NwaV9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJTUEkgTWFzdGVyIENvbnRyb2xsZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggMzFkZDU2Zi4uYzhjMmI2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMTY2OCwxMCArMTY2OCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBweGEyeHhfc3BpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfc3BpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTE2ODQsOSArMTY4Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X3NwaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgcHhhMnh4X3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IGRydl9kYXRhLT5zc3A7CiAJaW50IHN0YXR1cyA9IDA7CiAKQEAgLTE3MDMsMjYgKzE3MDIsMjkgQEAKIAkvKiBTdGFydCB0aGUgcXVldWUgcnVubmluZyAqLwogCXN0YXR1cyA9IHN0YXJ0X3F1ZXVlKGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmxlbSBzdGFydGluZyBxdWV1ZSAoJWQpXG4iLCBzdGF0dXMpOworCQlkZXZfZXJyKGRldiwgInByb2JsZW0gc3RhcnRpbmcgcXVldWUgKCVkKVxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHB4YTJ4eF9zcGlfc3VzcGVuZCBOVUxMCi0jZGVmaW5lIHB4YTJ4eF9zcGlfcmVzdW1lIE5VTEwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9zcGlfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcHhhMnh4X3NwaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhMnh4X3NwaV9yZXN1bWUsCit9OworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJweGEyeHgtc3BpIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInB4YTJ4eC1zcGkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJnB4YTJ4eF9zcGlfcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucmVtb3ZlID0gcHhhMnh4X3NwaV9yZW1vdmUsCiAJLnNodXRkb3duID0gcHhhMnh4X3NwaV9zaHV0ZG93biwKLQkuc3VzcGVuZCA9IHB4YTJ4eF9zcGlfc3VzcGVuZCwKLQkucmVzdW1lID0gcHhhMnh4X3NwaV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfc3BpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWMyMmVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vcgorICogQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJzcGlfaW14IgorCisjZGVmaW5lIE1YQ19DU1BJUlhEQVRBCQkweDAwCisjZGVmaW5lIE1YQ19DU1BJVFhEQVRBCQkweDA0CisjZGVmaW5lIE1YQ19DU1BJQ1RSTAkJMHgwOAorI2RlZmluZSBNWENfQ1NQSUlOVAkJMHgwYworI2RlZmluZSBNWENfUkVTRVQJCTB4MWMKKworLyogZ2VuZXJpYyBkZWZpbmVzIHRvIGFic3RyYWN0IGZyb20gdGhlIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXRzICovCisjZGVmaW5lIE1YQ19JTlRfUlIJKDEgPDwgMCkgLyogUmVjZWl2ZSBkYXRhIHJlYWR5IGludGVycnVwdCAqLworI2RlZmluZSBNWENfSU5UX1RFCSgxIDw8IDEpIC8qIFRyYW5zbWl0IEZJRk8gZW1wdHkgaW50ZXJydXB0ICovCisKK3N0cnVjdCBzcGlfaW14X2NvbmZpZyB7CisJdW5zaWduZWQgaW50IHNwZWVkX2h6OworCXVuc2lnbmVkIGludCBicHc7CisJdW5zaWduZWQgaW50IG1vZGU7CisJaW50IGNzOworfTsKKworc3RydWN0IHNwaV9pbXhfZGF0YSB7CisJc3RydWN0IHNwaV9iaXRiYW5nIGJpdGJhbmc7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiB4ZmVyX2RvbmU7CisJdm9pZCAqYmFzZTsKKwlpbnQgaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwl1bnNpZ25lZCBsb25nIHNwaV9jbGs7CisJaW50ICpjaGlwc2VsZWN0OworCisJdW5zaWduZWQgaW50IGNvdW50OworCXZvaWQgKCp0eCkoc3RydWN0IHNwaV9pbXhfZGF0YSAqKTsKKwl2b2lkICgqcngpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJdm9pZCAqcnhfYnVmOworCWNvbnN0IHZvaWQgKnR4X2J1ZjsKKwl1bnNpZ25lZCBpbnQgdHhmaWZvOyAvKiBudW1iZXIgb2Ygd29yZHMgcHVzaGVkIGluIHR4IEZJRk8gKi8KKworCS8qIFNvQyBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KKwl2b2lkICgqaW50Y3RybCkoc3RydWN0IHNwaV9pbXhfZGF0YSAqLCBpbnQpOworCWludCAoKmNvbmZpZykoc3RydWN0IHNwaV9pbXhfZGF0YSAqLCBzdHJ1Y3Qgc3BpX2lteF9jb25maWcgKik7CisJdm9pZCAoKnRyaWdnZXIpKHN0cnVjdCBzcGlfaW14X2RhdGEgKik7CisJaW50ICgqcnhfYXZhaWxhYmxlKShzdHJ1Y3Qgc3BpX2lteF9kYXRhICopOworfTsKKworI2RlZmluZSBNWENfU1BJX0JVRl9SWCh0eXBlKQkJCQkJCVwKK3N0YXRpYyB2b2lkIHNwaV9pbXhfYnVmX3J4XyMjdHlwZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJUlhEQVRBKTsJXAorCQkJCQkJCQkJXAorCWlmIChzcGlfaW14LT5yeF9idWYpIHsJCQkJCQlcCisJCSoodHlwZSAqKXNwaV9pbXgtPnJ4X2J1ZiA9IHZhbDsJCQkJXAorCQlzcGlfaW14LT5yeF9idWYgKz0gc2l6ZW9mKHR5cGUpOwkJCVwKKwl9CQkJCQkJCQlcCit9CisKKyNkZWZpbmUgTVhDX1NQSV9CVUZfVFgodHlwZSkJCQkJCQlcCitzdGF0aWMgdm9pZCBzcGlfaW14X2J1Zl90eF8jI3R5cGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkJCVwKK3sJCQkJCQkJCQlcCisJdHlwZSB2YWwgPSAwOwkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKHNwaV9pbXgtPnR4X2J1ZikgewkJCQkJCVwKKwkJdmFsID0gKih0eXBlICopc3BpX2lteC0+dHhfYnVmOwkJCQlcCisJCXNwaV9pbXgtPnR4X2J1ZiArPSBzaXplb2YodHlwZSk7CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlzcGlfaW14LT5jb3VudCAtPSBzaXplb2YodHlwZSk7CQkJCQlcCisJCQkJCQkJCQlcCisJd3JpdGVsKHZhbCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJVFhEQVRBKTsJCQlcCit9CisKK01YQ19TUElfQlVGX1JYKHU4KQorTVhDX1NQSV9CVUZfVFgodTgpCitNWENfU1BJX0JVRl9SWCh1MTYpCitNWENfU1BJX0JVRl9UWCh1MTYpCitNWENfU1BJX0JVRl9SWCh1MzIpCitNWENfU1BJX0JVRl9UWCh1MzIpCisKKy8qIEZpcnN0IGVudHJ5IGlzIHJlc2VydmVkLCBzZWNvbmQgZW50cnkgaXMgdmFsaWQgb25seSBpZiBTREhDX1NQSUVOIGlzIHNldAorICogKHdoaWNoIGlzIGN1cnJlbnRseSBub3QgdGhlIGNhc2UgaW4gdGhpcyBkcml2ZXIpCisgKi8KK3N0YXRpYyBpbnQgbXhjX2Nsa2RpdnNbXSA9IHswLCAzLCA0LCA2LCA4LCAxMiwgMTYsIDI0LCAzMiwgNDgsIDY0LCA5NiwgMTI4LCAxOTIsCisJMjU2LCAzODQsIDUxMiwgNzY4LCAxMDI0fTsKKworLyogTVgyMSwgTVgyNyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzcGlfaW14X2Nsa2Rpdl8xKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBtYXg7CisKKwlpZiAoY3B1X2lzX214MjEoKSkKKwkJbWF4ID0gMTg7CisJZWxzZQorCQltYXggPSAxNjsKKworCWZvciAoaSA9IDI7IGkgPCBtYXg7IGkrKykKKwkJaWYgKGZzcGkgKiBteGNfY2xrZGl2c1tpXSA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKworCXJldHVybiBtYXg7Cit9CisKKy8qIE1YMSwgTVgzMSwgTVgzNSAqLworc3RhdGljIHVuc2lnbmVkIGludCBzcGlfaW14X2Nsa2Rpdl8yKHVuc2lnbmVkIGludCBmaW4sCisJCXVuc2lnbmVkIGludCBmc3BpKQoreworCWludCBpLCBkaXYgPSA0OworCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpZiAoZnNwaSAqIGRpdiA+PSBmaW4pCisJCQlyZXR1cm4gaTsKKwkJZGl2IDw8PSAxOworCX0KKworCXJldHVybiA3OworfQorCisjZGVmaW5lIE1YMzFfSU5UUkVHX1RFRU4JKDEgPDwgMCkKKyNkZWZpbmUgTVgzMV9JTlRSRUdfUlJFTgkoMSA8PCAzKQorCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfRU5BQkxFCSgxIDw8IDApCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfTUFTVEVSCSgxIDw8IDEpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfWENICSgxIDw8IDIpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUE9MCSgxIDw8IDQpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfUEhBCSgxIDw8IDUpCisjZGVmaW5lIE1YMzFfQ1NQSUNUUkxfU1NDVEwJKDEgPDwgNikKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9TU1BPTAkoMSA8PCA3KQorI2RlZmluZSBNWDMxX0NTUElDVFJMX0JDX1NISUZUCTgKKyNkZWZpbmUgTVgzNV9DU1BJQ1RSTF9CTF9TSElGVAkyMAorI2RlZmluZSBNWDMxX0NTUElDVFJMX0NTX1NISUZUCTI0CisjZGVmaW5lIE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQJMTIKKyNkZWZpbmUgTVgzMV9DU1BJQ1RSTF9EUl9TSElGVAkxNgorCisjZGVmaW5lIE1YMzFfQ1NQSVNUQVRVUwkJMHgxNAorI2RlZmluZSBNWDMxX1NUQVRVU19SUgkJKDEgPDwgMykKKworLyogVGhlc2UgZnVuY3Rpb25zIGFsc28gd29yayBmb3IgdGhlIGkuTVgzNSwgYnV0IGJlIGF3YXJlIHRoYXQKKyAqIHRoZSBpLk1YMzUgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlZ2lzdGVyIGxheW91dCBmb3IgYml0cworICogd2UgZG8gbm90IHVzZSBoZXJlLgorICovCitzdGF0aWMgdm9pZCBteDMxX2ludGN0cmwoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgzMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMzFfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDMxX3RyaWdnZXIoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMzFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MzFfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDMxX0NTUElDVFJMX0VOQUJMRSB8IE1YMzFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzIoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgzMV9DU1BJQ1RSTF9EUl9TSElGVDsKKworCWlmIChjcHVfaXNfbXgzMSgpKQorCQlyZWcgfD0gKGNvbmZpZy0+YnB3IC0gMSkgPDwgTVgzMV9DU1BJQ1RSTF9CQ19TSElGVDsKKwllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7CisJCXJlZyB8PSAoY29uZmlnLT5icHcgLSAxKSA8PCBNWDM1X0NTUElDVFJMX0JMX1NISUZUOworCQlyZWcgfD0gTVgzMV9DU1BJQ1RSTF9TU0NUTDsKKwl9CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BIQTsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQT0wpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1BPTDsKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NTX0hJR0gpCisJCXJlZyB8PSBNWDMxX0NTUElDVFJMX1NTUE9MOworCWlmIChjb25maWctPmNzIDwgMCkgeworCQlpZiAoY3B1X2lzX214MzEoKSkKKwkJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDMxX0NTUElDVFJMX0NTX1NISUZUOworCQllbHNlIGlmIChjcHVfaXNfbXgzNSgpKQorCQkJcmVnIHw9IChjb25maWctPmNzICsgMzIpIDw8IE1YMzVfQ1NQSUNUUkxfQ1NfU0hJRlQ7CisJfQorCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDMxX3J4X2F2YWlsYWJsZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXJldHVybiByZWFkbChzcGlfaW14LT5iYXNlICsgTVgzMV9DU1BJU1RBVFVTKSAmIE1YMzFfU1RBVFVTX1JSOworfQorCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSCQkoMSA8PCA0KQorI2RlZmluZSBNWDI3X0lOVFJFR19URUVOCSgxIDw8IDkpCisjZGVmaW5lIE1YMjdfSU5UUkVHX1JSRU4JKDEgPDwgMTMpCisKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QT0wJKDEgPDwgNSkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9QSEEJKDEgPDwgNikKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9TU1BPTAkoMSA8PCA4KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX1hDSAkoMSA8PCA5KQorI2RlZmluZSBNWDI3X0NTUElDVFJMX0VOQUJMRQkoMSA8PCAxMCkKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9NQVNURVIJKDEgPDwgMTEpCisjZGVmaW5lIE1YMjdfQ1NQSUNUUkxfRFJfU0hJRlQJMTQKKyNkZWZpbmUgTVgyN19DU1BJQ1RSTF9DU19TSElGVAkxOQorCitzdGF0aWMgdm9pZCBteDI3X2ludGN0cmwoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsID0gMDsKKworCWlmIChlbmFibGUgJiBNWENfSU5UX1RFKQorCQl2YWwgfD0gTVgyN19JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMjdfSU5UUkVHX1JSRU47CisKKwl3cml0ZWwodmFsLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpOworfQorCitzdGF0aWMgdm9pZCBteDI3X3RyaWdnZXIoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJcmVnIHw9IE1YMjdfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MjdfY29uZmlnKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsCisJCXN0cnVjdCBzcGlfaW14X2NvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCByZWcgPSBNWDI3X0NTUElDVFJMX0VOQUJMRSB8IE1YMjdfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzEoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgyN19DU1BJQ1RSTF9EUl9TSElGVDsKKwlyZWcgfD0gY29uZmlnLT5icHcgLSAxOworCisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUEhBKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QSEE7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DUE9MKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9QT0w7CisJaWYgKGNvbmZpZy0+bW9kZSAmIFNQSV9DU19ISUdIKQorCQlyZWcgfD0gTVgyN19DU1BJQ1RSTF9TU1BPTDsKKwlpZiAoY29uZmlnLT5jcyA8IDApCisJCXJlZyB8PSAoY29uZmlnLT5jcyArIDMyKSA8PCBNWDI3X0NTUElDVFJMX0NTX1NISUZUOworCisJd3JpdGVsKHJlZywgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDI3X3J4X2F2YWlsYWJsZShzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14KQoreworCXJldHVybiByZWFkbChzcGlfaW14LT5iYXNlICsgTVhDX0NTUElJTlQpICYgTVgyN19JTlRSRUdfUlI7Cit9CisKKyNkZWZpbmUgTVgxX0lOVFJFR19SUgkJKDEgPDwgMykKKyNkZWZpbmUgTVgxX0lOVFJFR19URUVOCQkoMSA8PCA4KQorI2RlZmluZSBNWDFfSU5UUkVHX1JSRU4JCSgxIDw8IDExKQorCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9QT0wJKDEgPDwgNCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX1BIQQkoMSA8PCA1KQorI2RlZmluZSBNWDFfQ1NQSUNUUkxfWENICSgxIDw8IDgpCisjZGVmaW5lIE1YMV9DU1BJQ1RSTF9FTkFCTEUJKDEgPDwgOSkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX01BU1RFUgkoMSA8PCAxMCkKKyNkZWZpbmUgTVgxX0NTUElDVFJMX0RSX1NISUZUCTEzCisKK3N0YXRpYyB2b2lkIG14MV9pbnRjdHJsKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHZhbCA9IDA7CisKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9URSkKKwkJdmFsIHw9IE1YMV9JTlRSRUdfVEVFTjsKKwlpZiAoZW5hYmxlICYgTVhDX0lOVF9SUikKKwkJdmFsIHw9IE1YMV9JTlRSRUdfUlJFTjsKKworCXdyaXRlbCh2YWwsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUlOVCk7Cit9CisKK3N0YXRpYyB2b2lkIG14MV90cmlnZ2VyKHN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXgpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IHJlYWRsKHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworCXJlZyB8PSBNWDFfQ1NQSUNUUkxfWENIOworCXdyaXRlbChyZWcsIHNwaV9pbXgtPmJhc2UgKyBNWENfQ1NQSUNUUkwpOworfQorCitzdGF0aWMgaW50IG14MV9jb25maWcoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCwKKwkJc3RydWN0IHNwaV9pbXhfY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgaW50IHJlZyA9IE1YMV9DU1BJQ1RSTF9FTkFCTEUgfCBNWDFfQ1NQSUNUUkxfTUFTVEVSOworCisJcmVnIHw9IHNwaV9pbXhfY2xrZGl2XzIoc3BpX2lteC0+c3BpX2NsaywgY29uZmlnLT5zcGVlZF9oeikgPDwKKwkJTVgxX0NTUElDVFJMX0RSX1NISUZUOworCXJlZyB8PSBjb25maWctPmJwdyAtIDE7CisKKwlpZiAoY29uZmlnLT5tb2RlICYgU1BJX0NQSEEpCisJCXJlZyB8PSBNWDFfQ1NQSUNUUkxfUEhBOworCWlmIChjb25maWctPm1vZGUgJiBTUElfQ1BPTCkKKwkJcmVnIHw9IE1YMV9DU1BJQ1RSTF9QT0w7CisKKwl3cml0ZWwocmVnLCBzcGlfaW14LT5iYXNlICsgTVhDX0NTUElDVFJMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG14MV9yeF9hdmFpbGFibGUoc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwlyZXR1cm4gcmVhZGwoc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJSU5UKSAmIE1YMV9JTlRSRUdfUlI7Cit9CisKK3N0YXRpYyB2b2lkIHNwaV9pbXhfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgaXNfYWN0aXZlKQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlpbnQgZ3BpbyA9IHNwaV9pbXgtPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07CisJaW50IGFjdGl2ZSA9IGlzX2FjdGl2ZSAhPSBCSVRCQU5HX0NTX0lOQUNUSVZFOworCWludCBkZXZfaXNfbG93YWN0aXZlID0gIShzcGktPm1vZGUgJiBTUElfQ1NfSElHSCk7CisKKwlpZiAoZ3BpbyA8IDApCisJCXJldHVybjsKKworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIGRldl9pc19sb3dhY3RpdmUgXiBhY3RpdmUpOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X3B1c2goc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCkKK3sKKwl3aGlsZSAoc3BpX2lteC0+dHhmaWZvIDwgOCkgeworCQlpZiAoIXNwaV9pbXgtPmNvdW50KQorCQkJYnJlYWs7CisJCXNwaV9pbXgtPnR4KHNwaV9pbXgpOworCQlzcGlfaW14LT50eGZpZm8rKzsKKwl9CisKKwlzcGlfaW14LT50cmlnZ2VyKHNwaV9pbXgpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3BpX2lteF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzcGlfaW14X2RhdGEgKnNwaV9pbXggPSBkZXZfaWQ7CisKKwl3aGlsZSAoc3BpX2lteC0+cnhfYXZhaWxhYmxlKHNwaV9pbXgpKSB7CisJCXNwaV9pbXgtPnJ4KHNwaV9pbXgpOworCQlzcGlfaW14LT50eGZpZm8tLTsKKwl9CisKKwlpZiAoc3BpX2lteC0+Y291bnQpIHsKKwkJc3BpX2lteF9wdXNoKHNwaV9pbXgpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJaWYgKHNwaV9pbXgtPnR4ZmlmbykgeworCQkvKiBObyBkYXRhIGxlZnQgdG8gcHVzaCwgYnV0IHN0aWxsIHdhaXRpbmcgZm9yIHJ4IGRhdGEsCisJCSAqIGVuYWJsZSByZWNlaXZlIGRhdGEgYXZhaWxhYmxlIGludGVycnVwdC4KKwkJICovCisJCXNwaV9pbXgtPmludGN0cmwoc3BpX2lteCwgTVhDX0lOVF9SUik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIDApOworCWNvbXBsZXRlKCZzcGlfaW14LT54ZmVyX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfc2V0dXB4ZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJc3RydWN0IHNwaV9pbXhfZGF0YSAqc3BpX2lteCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXN0cnVjdCBzcGlfaW14X2NvbmZpZyBjb25maWc7CisKKwljb25maWcuYnB3ID0gdCA/IHQtPmJpdHNfcGVyX3dvcmQgOiBzcGktPmJpdHNfcGVyX3dvcmQ7CisJY29uZmlnLnNwZWVkX2h6ICA9IHQgPyB0LT5zcGVlZF9oeiA6IHNwaS0+bWF4X3NwZWVkX2h6OworCWNvbmZpZy5tb2RlID0gc3BpLT5tb2RlOworCWNvbmZpZy5jcyA9IHNwaV9pbXgtPmNoaXBzZWxlY3Rbc3BpLT5jaGlwX3NlbGVjdF07CisKKwlpZiAoIWNvbmZpZy5zcGVlZF9oeikKKwkJY29uZmlnLnNwZWVkX2h6ID0gc3BpLT5tYXhfc3BlZWRfaHo7CisJaWYgKCFjb25maWcuYnB3KQorCQljb25maWcuYnB3ID0gc3BpLT5iaXRzX3Blcl93b3JkOworCWlmICghY29uZmlnLnNwZWVkX2h6KQorCQljb25maWcuc3BlZWRfaHogPSBzcGktPm1heF9zcGVlZF9oejsKKworCS8qIEluaXRpYWxpemUgdGhlIGZ1bmN0aW9ucyBmb3IgdHJhbnNmZXIgKi8KKwlpZiAoY29uZmlnLmJwdyA8PSA4KSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTg7CisJCXNwaV9pbXgtPnR4ID0gc3BpX2lteF9idWZfdHhfdTg7CisJfSBlbHNlIGlmIChjb25maWcuYnB3IDw9IDE2KSB7CisJCXNwaV9pbXgtPnJ4ID0gc3BpX2lteF9idWZfcnhfdTE2OworCQlzcGlfaW14LT50eCA9IHNwaV9pbXhfYnVmX3R4X3UxNjsKKwl9IGVsc2UgaWYgKGNvbmZpZy5icHcgPD0gMzIpIHsKKwkJc3BpX2lteC0+cnggPSBzcGlfaW14X2J1Zl9yeF91MzI7CisJCXNwaV9pbXgtPnR4ID0gc3BpX2lteF9idWZfdHhfdTMyOworCX0gZWxzZQorCQlCVUcoKTsKKworCXNwaV9pbXgtPmNvbmZpZyhzcGlfaW14LCAmY29uZmlnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcikKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwlzcGlfaW14LT50eF9idWYgPSB0cmFuc2Zlci0+dHhfYnVmOworCXNwaV9pbXgtPnJ4X2J1ZiA9IHRyYW5zZmVyLT5yeF9idWY7CisJc3BpX2lteC0+Y291bnQgPSB0cmFuc2Zlci0+bGVuOworCXNwaV9pbXgtPnR4ZmlmbyA9IDA7CisKKwlpbml0X2NvbXBsZXRpb24oJnNwaV9pbXgtPnhmZXJfZG9uZSk7CisKKwlzcGlfaW14X3B1c2goc3BpX2lteCk7CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIE1YQ19JTlRfVEUpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJldHVybiB0cmFuc2Zlci0+bGVuOworfQorCitzdGF0aWMgaW50IHNwaV9pbXhfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJaW50IGdwaW8gPSBzcGlfaW14LT5jaGlwc2VsZWN0W3NwaS0+Y2hpcF9zZWxlY3RdOworCisJcHJfZGVidWcoIiVzOiBtb2RlICVkLCAldSBicHcsICVkIGh6XG4iLCBfX2Z1bmNfXywKKwkJIHNwaS0+bW9kZSwgc3BpLT5iaXRzX3Blcl93b3JkLCBzcGktPm1heF9zcGVlZF9oeik7CisKKwlpZiAoZ3BpbyA+PSAwKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpbywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0ggPyAwIDogMSk7CisKKwlzcGlfaW14X2NoaXBzZWxlY3Qoc3BpLCBCSVRCQU5HX0NTX0lOQUNUSVZFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzcGlfaW14X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKK30KKworc3RhdGljIGludCBfX2luaXQgc3BpX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzcGlfaW14X21hc3RlciAqbXhjX3BsYXRmb3JtX2luZm87CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpLCByZXQ7CisKKwlteGNfcGxhdGZvcm1faW5mbyA9IChzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIW14Y19wbGF0Zm9ybV9pbmZvKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCB0aGUgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBzcGlfaW14X2RhdGEpKTsKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJbWFzdGVyLT5idXNfbnVtID0gcGRldi0+aWQ7CisJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IG14Y19wbGF0Zm9ybV9pbmZvLT5udW1fY2hpcHNlbGVjdDsKKworCXNwaV9pbXggPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXIgPSBzcGlfbWFzdGVyX2dldChtYXN0ZXIpOworCXNwaV9pbXgtPmNoaXBzZWxlY3QgPSBteGNfcGxhdGZvcm1faW5mby0+Y2hpcHNlbGVjdDsKKworCWZvciAoaSA9IDA7IGkgPCBtYXN0ZXItPm51bV9jaGlwc2VsZWN0OyBpKyspIHsKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPCAwKQorCQkJY29udGludWU7CisJCXJldCA9IGdwaW9fcmVxdWVzdChzcGlfaW14LT5jaGlwc2VsZWN0W2ldLCBEUklWRVJfTkFNRSk7CisJCWlmIChyZXQpIHsKKwkJCWktLTsKKwkJCXdoaWxlIChpID4gMCkKKwkJCQlpZiAoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSA+PSAwKQorCQkJCQlncGlvX2ZyZWUoc3BpX2lteC0+Y2hpcHNlbGVjdFtpLS1dKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBjcyBncGlvcyIpOworCQkJZ290byBvdXRfbWFzdGVyX3B1dDsKKwkJfQorCX0KKworCXNwaV9pbXgtPmJpdGJhbmcuY2hpcHNlbGVjdCA9IHNwaV9pbXhfY2hpcHNlbGVjdDsKKwlzcGlfaW14LT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0gc3BpX2lteF9zZXR1cHhmZXI7CisJc3BpX2lteC0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBzcGlfaW14X3RyYW5zZmVyOworCXNwaV9pbXgtPmJpdGJhbmcubWFzdGVyLT5zZXR1cCA9IHNwaV9pbXhfc2V0dXA7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXItPmNsZWFudXAgPSBzcGlfaW14X2NsZWFudXA7CisJc3BpX2lteC0+Yml0YmFuZy5tYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEEgfCBTUElfQ1NfSElHSDsKKworCWluaXRfY29tcGxldGlvbigmc3BpX2lteC0+eGZlcl9kb25lKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IHBsYXRmb3JtIHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZ3Bpb19mcmVlOworCX0KKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfZ3Bpb19mcmVlOworCX0KKworCXNwaV9pbXgtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFzcGlfaW14LT5iYXNlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlbGVhc2VfbWVtOworCX0KKworCXNwaV9pbXgtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFzcGlfaW14LT5pcnEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X2lycShzcGlfaW14LT5pcnEsIHNwaV9pbXhfaXNyLCAwLCBEUklWRVJfTkFNRSwgc3BpX2lteCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaXJxJWQ6ICVkXG4iLCBzcGlfaW14LT5pcnEsIHJldCk7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJaWYgKGNwdV9pc19teDMxKCkgfHwgY3B1X2lzX214MzUoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgzMV9pbnRjdHJsOworCQlzcGlfaW14LT5jb25maWcgPSBteDMxX2NvbmZpZzsKKwkJc3BpX2lteC0+dHJpZ2dlciA9IG14MzFfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgzMV9yeF9hdmFpbGFibGU7CisJfSBlbHNlICBpZiAoY3B1X2lzX214MjcoKSB8fCBjcHVfaXNfbXgyMSgpKSB7CisJCXNwaV9pbXgtPmludGN0cmwgPSBteDI3X2ludGN0cmw7CisJCXNwaV9pbXgtPmNvbmZpZyA9IG14MjdfY29uZmlnOworCQlzcGlfaW14LT50cmlnZ2VyID0gbXgyN190cmlnZ2VyOworCQlzcGlfaW14LT5yeF9hdmFpbGFibGUgPSBteDI3X3J4X2F2YWlsYWJsZTsKKwl9IGVsc2UgaWYgKGNwdV9pc19teDEoKSkgeworCQlzcGlfaW14LT5pbnRjdHJsID0gbXgxX2ludGN0cmw7CisJCXNwaV9pbXgtPmNvbmZpZyA9IG14MV9jb25maWc7CisJCXNwaV9pbXgtPnRyaWdnZXIgPSBteDFfdHJpZ2dlcjsKKwkJc3BpX2lteC0+cnhfYXZhaWxhYmxlID0gbXgxX3J4X2F2YWlsYWJsZTsKKwl9IGVsc2UKKwkJQlVHKCk7CisKKwlzcGlfaW14LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoc3BpX2lteC0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZ2V0IGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihzcGlfaW14LT5jbGspOworCQlnb3RvIG91dF9mcmVlX2lycTsKKwl9CisKKwljbGtfZW5hYmxlKHNwaV9pbXgtPmNsayk7CisJc3BpX2lteC0+c3BpX2NsayA9IGNsa19nZXRfcmF0ZShzcGlfaW14LT5jbGspOworCisJaWYgKCFjcHVfaXNfbXgzMSgpIHx8ICFjcHVfaXNfbXgzNSgpKQorCQl3cml0ZWwoMSwgc3BpX2lteC0+YmFzZSArIE1YQ19SRVNFVCk7CisKKwlzcGlfaW14LT5pbnRjdHJsKHNwaV9pbXgsIDApOworCisJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJnNwaV9pbXgtPmJpdGJhbmcpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYml0YmFuZyBzdGFydCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfY2xrX3B1dDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicHJvYmVkXG4iKTsKKworCXJldHVybiByZXQ7CisKK291dF9jbGtfcHV0OgorCWNsa19kaXNhYmxlKHNwaV9pbXgtPmNsayk7CisJY2xrX3B1dChzcGlfaW14LT5jbGspOworb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKHNwaV9pbXgtPmlycSwgc3BpX2lteCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHNwaV9pbXgtPmJhc2UpOworb3V0X3JlbGVhc2VfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworb3V0X2dwaW9fZnJlZToKKwlmb3IgKGkgPSAwOyBpIDwgbWFzdGVyLT5udW1fY2hpcHNlbGVjdDsgaSsrKQorCQlpZiAoc3BpX2lteC0+Y2hpcHNlbGVjdFtpXSA+PSAwKQorCQkJZ3Bpb19mcmVlKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0pOworb3V0X21hc3Rlcl9wdXQ6CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwlrZnJlZShtYXN0ZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IHNwaV9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCBpOworCisJc3BpX2JpdGJhbmdfc3RvcCgmc3BpX2lteC0+Yml0YmFuZyk7CisKKwl3cml0ZWwoMCwgc3BpX2lteC0+YmFzZSArIE1YQ19DU1BJQ1RSTCk7CisJY2xrX2Rpc2FibGUoc3BpX2lteC0+Y2xrKTsKKwljbGtfcHV0KHNwaV9pbXgtPmNsayk7CisJZnJlZV9pcnEoc3BpX2lteC0+aXJxLCBzcGlfaW14KTsKKwlpb3VubWFwKHNwaV9pbXgtPmJhc2UpOworCisJZm9yIChpID0gMDsgaSA8IG1hc3Rlci0+bnVtX2NoaXBzZWxlY3Q7IGkrKykKKwkJaWYgKHNwaV9pbXgtPmNoaXBzZWxlY3RbaV0gPj0gMCkKKwkJCWdwaW9fZnJlZShzcGlfaW14LT5jaGlwc2VsZWN0W2ldKTsKKworCXNwaV9tYXN0ZXJfcHV0KG1hc3Rlcik7CisKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaV9pbXhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gRFJJVkVSX05BTUUsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9LAorCS5wcm9iZSA9IHNwaV9pbXhfcHJvYmUsCisJLnJlbW92ZSA9IF9fZXhpdF9wKHNwaV9pbXhfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwaV9pbXhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaV9pbXhfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNwaV9pbXhfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcGlfaW14X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNwaV9pbXhfaW5pdCk7Cittb2R1bGVfZXhpdChzcGlfaW14X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNQSSBNYXN0ZXIgQ29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXgiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMgYi9kcml2ZXJzL3NwaS9zcGlfc3RtcC5jCmluZGV4IGQ4NzFkYzIuLjI1NTJiYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zdG1wLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3N0bXAuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJd2FpdF9mb3JfY29tcGxldGlvbigmc3MtPmRvbmUpOwogCiAJaWYgKCFidXN5X3dhaXQocmVhZGwoc3MtPnJlZ3MgKyBIV19TU1BfQ1RSTDApICYgQk1fU1NQX0NUUkwwX1JVTikpCi0JCXN0YXR1cyA9IEVUSU1FRE9VVDsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAogCWlmICghZG1hX2J1ZikKIAkJZG1hX3VubWFwX3NpbmdsZShzcy0+bWFzdGVyX2Rldiwgc3BpX2J1Zl9kbWEsIGxlbiwgZGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaWRldi5jIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKaW5kZXggZjkyMWJkMS4uNWQyMzk4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpZGV2LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpZGV2LmMKQEAgLTUzNyw3ICs1MzcsNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwaWRldl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3BpZGV2X2ZvcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLyogUkVWSVNJVCBzd2l0Y2ggdG8gYWlvIHByaW1pdGl2ZXMsIHNvIHRoYXQgdXNlcnNwYWNlCiAJICogZ2V0cyBtb3JlIGNvbXBsZXRlIEFQSSBjb3ZlcmFnZS4gIEl0J2xsIHNpbXBsaWZ5IHRoaW5ncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCA5YTRkZDU5Li5kMjFiMzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNTksOCArNTksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2NoL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZyIKQEAgLTk1LDggKzkzLDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWciCkBAIC0xMjksNyArMTI1LDUgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZyIKLQogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCAxMDRmMmY4Li44Y2JmMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw2IEBACiBvYmotJChDT05GSUdfUFJJU00yX1VTQikJKz0gd2xhbi1uZy8KIG9iai0kKENPTkZJR19FQ0hPKQkJKz0gZWNoby8KIG9iai0kKENPTkZJR19QT0NIKQkJKz0gcG9jaC8KLW9iai0kKENPTkZJR19BR05YKQkJKz0gYWdueC8KIG9iai0kKENPTkZJR19PVFVTKQkJKz0gb3R1cy8KIG9iai0kKENPTkZJR19SVDI4NjApCQkrPSBydDI4NjAvCiBvYmotJChDT05GSUdfUlQyODcwKQkJKz0gcnQyODcwLwpAQCAtMzAsNyArMjksNiBAQAogb2JqLSQoQ09ORklHX0FORFJPSUQpCQkrPSBkcmVhbS8KIG9iai0kKENPTkZJR19EU1QpCQkrPSBkc3QvCiBvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KLW9iai0kKENPTkZJR19TVExDNDVYWCkJCSs9IHN0bGM0NXh4Lwogb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwogb2JqLSQoQ09ORklHX1BMQU45QVVUSCkJCSs9IHA5YXV0aC8KQEAgLTQ2LDQgKzQ0LDMgQEAKIG9iai0kKENPTkZJR19SQVJfUkVHSVNURVIpCSs9IHJhci8KIG9iai0kKENPTkZJR19EWF9TRVApCQkrPSBzZXAvCiBvYmotJChDT05GSUdfSUlPKQkJKz0gaWlvLwotb2JqLSQoQ09ORklHX0NPV0xPT1ApCQkrPSBjb3dsb29wLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDM1NDkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotY29uZmlnIEFHTlgKLQl0cmlzdGF0ZSAiV2lyZWxlc3MgQWlyZ28gQUdOWCBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBNQUM4MDIxMQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgQWlyZ28gQUdOWDAwIHdpcmVsZXNzIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjE2NTY0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1vYmotJChDT05GSUdfQUdOWCkJKz0gYWdueC5vCi0KLWFnbngtb2JqcyA6PQlyZi5vCVwKLQkJcGNpLm8JXAotCQl4bWl0Lm8JXAotCQl0YWJsZS5vCVwKLQkJc3RhLm8JXAotCQlwaHkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmVjNzQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTIwMDggNy8xOAotCi1UaGUgUlggaGFzIGNhbid0IHJlY2VpdmUgT0ZETSBwYWNrZXQgY29ycmVjdGx5LAotR3Vlc3MgaXQgbmVlZCBiZSBkbyBSWCBjYWxpYnJhdGUuCi0KLQotYmVmb3JlIDIwMDggMy8xCi0KLTE6IFRoZSBSWCBnZXQgdG9vIG11Y2ggIkNSQyBmYWlsZWQiIHBha2V0cywgaXQgbWFrZSB0aGUgY2FyZCB3b3JrIHZlcnkgdW5zdGFibGUsCi0yOiBBZnRlciBydW5uaW5nIGEgd2hpbGUsIHRoZSBjYXJkIHdpbGwgZ2V0IGluZmluaXR5ICJSWCBGcmFtZSIgYW5kICJFcnJvciIKLWludGVycnVwdCwgbm90IGtub3cgdGhlIHJvb3QgcmVhc29uIHNvIGZhciwgdHJ5IHRvIGZpeCBpdAotMzogVXNpbmcgdHdvIHR4IHF1ZXVlIHR4ZCBhbmQgdHhtIGJ1dCBub3Qgb25seSB0eG0uCi00OiBTZXQgdGhlIGhkciBjb3JyZWN0bHkuCi01OiBUcnkgdG8gZG8gcmVjYWxpYnJhdGUgY29ycmV2dGx5Ci02OiBUbyBzdXBwb3J0IEcgbW9kZSBpbiBmdXR1cmUKLTc6IEZpeCB0aGUgbWFjIGFkZHJlc3MgY2FuJ3QgYmUgcmVhZGVkIGFuZCBzZXQgY29ycmVjdGx5IGluIEJFIG1hY2hpbmUuCi04OiBGaXggaW5jbHVkZSBhbmQgZXhjbHVkZSBGQ1MgaW4gcHJvbWlzb3VzIG1vZGUgYW5kIG1hbmFnZSBtb2RlCi05OiBVc2luZyBzdGFfbm90aWZ5IHRvIG5vdGljZSBzdGEgY2hhbmdlCi0xMDogVHVybiBvbiBmcmFtZSByZWNlcHRpb24gYXQgdGhlIGVuZCBvZiBzdGFydAotMTE6IEd1ZXNzIHRoZSBjYXJkIHN1cHBvcnQgSFdfTVVMVElDQVNUX0ZJTFRFUgotMTI6IFRoZSB0eCBwcm9jZXNzIHNob3VsZCBiZSBpbXBsbWVudCBhdG9taWM/Ci0xMzogVXNpbmcgbWFjODAyMTEgZnVuY3Rpb24gdG8gY29udHJvbCB0aGUgVFgmUlggTEVELgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTYzZDI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0jaWZuZGVmIEFHTlhfSF8KLSNkZWZpbmUgQUdOWF9IXwotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgInhtaXQuaCIKLQotI2RlZmluZSBQRlgJCQkJS0JVSUxEX01PRE5BTUUgIjogIgotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3JlYWQzMih2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBvZmZzZXQpCi17Ci0JcmV0dXJuIGlvcmVhZDMyKG1lbV9yZWdpb24gKyBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF93cml0ZTMyKHZvaWQgX19pb21lbSAqbWVtX3JlZ2lvbiwgdTMyIG9mZnNldCwgdTMyIHZhbCkKLXsKLQlpb3dyaXRlMzIodmFsLCBtZW1fcmVnaW9uICsgb2Zmc2V0KTsKLX0KLQotLyogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhZ254X3JhdGVzXzgwMjExYltdID0geyAqLwotLyogCXsgLnJhdGUgPSAxMCwgKi8KLS8qIAkgIC52YWwgPSAweGEsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0sgfSwgKi8KLS8qIAl7IC5yYXRlID0gMjAsICovCi0vKiAJICAudmFsID0gMHgxNCwgKi8KLS8qIAkgIC5od192YWx1ZSA9IC0weDE0LCAqLwotLyogCSAgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfQ0NLXzIgfSwgKi8KLS8qIAl7IC5yYXRlID0gNTUsICovCi0vKiAJICAudmFsID0gMHgzNywgKi8KLS8qIAkgIC52YWwyID0gLTB4MzcsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9LCAqLwotLyogCXsgLnJhdGUgPSAxMTAsICovCi0vKiAJICAudmFsID0gMHg2ZSwgKi8KLS8qIAkgIC52YWwyID0gLTB4NmUsICovCi0vKiAJICAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9DQ0tfMiB9ICovCi0vKiB9OyAqLwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgYWdueF9yYXRlc184MDIxMWdbXSA9IHsKLS8qIAl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCi0vKiAJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotLyogCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgLmZsYWdzID0gSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUgfSwgKi8KLS8qIAl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwotCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMSwgfSwKLQl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDIsIH0sCi0JeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDQsfSwKLQotCXsgLmJpdHJhdGUgPSA2MCwgLmh3X3ZhbHVlID0gMHhCLCB9LAotCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMHhGLCB9LAotCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDB4QSB9LAotCXsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDB4RSwgfSwKLS8qCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDB4ZCwgfSwgKi8KLQl7IC5iaXRyYXRlID0gMzYwLCAuaHdfdmFsdWUgPSAweEQsIH0sCi0JeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMHg4LCB9LAotCXsgLmJpdHJhdGUgPSA1NDAsIC5od192YWx1ZSA9IDB4QywgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYWdueF9jaGFubmVsc1tdID0gewotCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0gNCwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0gNywgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0gMTAsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyLCAuaHdfdmFsdWUgPSAxMSwgfSwKLQl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyLCB9LAotCXsgLmNlbnRlcl9mcmVxID0gMjQ3MiwgLmh3X3ZhbHVlID0gMTMsIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0LCAuaHdfdmFsdWUgPSAxNCwgfSwKLX07Ci0KLSNkZWZpbmUgTlVNX0RSSVZFX01PREVTCTIKLS8qIEFnbnggb3BlcmF0ZSBtb2RlICovCi1lbnVtIHsKLQlBR05YX01PREVfODAyMTFBLAotCUFHTlhfTU9ERV84MDIxMUFfT09CLAotCUFHTlhfTU9ERV84MDIxMUFfTUlNTywKLQlBR05YX01PREVfODAyMTFCX1NIT1JULAotCUFHTlhfTU9ERV84MDIxMUJfTE9ORywKLQlBR05YX01PREVfODAyMTFHLAotCUFHTlhfTU9ERV84MDIxMUdfT09CLAotCUFHTlhfTU9ERV84MDIxMUdfTUlNTywKLX07Ci0KLWVudW0gewotCUFHTlhfVU5JTklULAotCUFHTlhfU1RBUlQsCi0JQUdOWF9TVE9QLAotfTsKLQotc3RydWN0IGFnbnhfcHJpdiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0KLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCXVuc2lnbmVkIGludCBpbml0X3N0YXR1czsKLQotCXZvaWQgX19pb21lbSAqY3RsOwkvKiBwb2ludGVyIHRvIGJhc2UgcmFtIGFkZHJlc3MgKi8KLQl2b2lkIF9faW9tZW0gKmRhdGE7CS8qIHBvaW50ZXIgdG8gbWVtIHJlZ2lvbiAjMiAqLwotCi0Jc3RydWN0IGFnbnhfcmluZyByeDsKLQlzdHJ1Y3QgYWdueF9yaW5nIHR4bTsKLQlzdHJ1Y3QgYWdueF9yaW5nIHR4ZDsKLQotCS8qIE5lZWQgdm9sYXRpbGU/ICovCi0JdTMyIGlycV9zdGF0dXM7Ci0KLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7IC8qIFBlcmlvZGljIHRhc2tzIGxpa2UgcmVjYWxpYnJhdGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBzdGF0czsKLQotCS8qIHVuc2lnbmVkIGludCBwaHltb2RlOyAqLwotCWludCBtb2RlOwotCWludCBjaGFubmVsOwotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQl1OCByZXZpZDsKLQotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKLX07Ci0KLQotI2RlZmluZSBBR05YX0NIQUlOU19NQVgJNgotI2RlZmluZSBBR05YX1BFUklPRElDX0RFTEFZIDYwMDAwIC8qIHVuaXQ6IG1zICovCi0jZGVmaW5lIExPQ0FMX1NUQUlECTAJLyogdGhlIHN0YXRpb24gZW50cnkgZm9yIHRoZSBjYXJkIGl0c2VsZiAqLwotI2RlZmluZSBCU1NJRF9TVEFJRAkxCS8qIHRoZSBzdGF0aW9uIGVudHJ5IGZvciB0aGUgYnNzc2lkIEFQICovCi0jZGVmaW5lCXNwaV9kZWxheSgpCXVkZWxheSg0MCkKLSNkZWZpbmUgZWVwcm9tX2RlbGF5KCkJdWRlbGF5KDQwKQotI2RlZmluZQlyb3V0aW5nX3RhYmxlX2RlbGF5KCkJdWRlbGF5KDUwKQotCi0vKiBQRFUgcG9vbCBNRU0gcmVnaW9uICMyICovCi0jZGVmaW5lIEFHTlhfUERVUE9PTAkJMHg0MDAwMAkvKiBQRFUgcG9vbCAqLwotI2RlZmluZSBBR05YX1BEVVBPT0xfU0laRQkweDgwMDAJLyogUERVIHBvb2wgc2l6ZSovCi0jZGVmaW5lIEFHTlhfUERVX1RYX1dRCQkweDQxMDAwCS8qIFBEVSBsaXN0IFRYIHdvcmtxdWV1ZSAqLwotI2RlZmluZSBBR05YX1BEVV9GUkVFCQkweDQxODAwCS8qIEZyZWUgUG9vbCAqLwotI2RlZmluZSBQRFVfU0laRQkJMHg4MAkvKiBGcmVlIFBvb2wgbm9kZSBzaXplICovCi0jZGVmaW5lIFBEVV9GUkVFX0NOVAkJMHhkMCAvKiBGcmVlIHBvb2wgbm9kZSBjb3VudCAqLwotCi0KLS8qIFJGIHN0dWZmcyAqLwotZXh0ZXJuIHZvaWQgcmZfY2hpcHNfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIHNwaV9yY193cml0ZSh2b2lkIF9faW9tZW0gKm1lbV9yZWdpb24sIHUzMiBjaGlwX2lkcywgdTMyIHN3KTsKLWV4dGVybiB2b2lkIGNhbGlicmF0ZV9vc2NpbGxhdG9yKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgZG9fY2FsaWJyYXRpb24oc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBhbnRlbm5hX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIF9fYW50ZW5uYV9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBwcmludF9vZmZzZXRzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBhZ254X3NldF9jaGFubmVsKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKTsKLQotCi0jZW5kaWYgLyogQUdOWF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDdmMzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxNiArMCwwIEBACi0jaWZuZGVmIEFHTlhfREVCVUdfSF8KLSNkZWZpbmUgQUdOWF9ERUJVR19IXwotCi0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgInBoeS5oIgotI2luY2x1ZGUgInN0YS5oIgotI2luY2x1ZGUgInhtaXQuaCIKLQotI2RlZmluZSBBR05YX1RSQUNFICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgUEZYICJmdW5jdGlvbjolcyBsaW5lOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pCi0KLSNkZWZpbmUgUFJJTlRLX0xFMTYocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS40eFxuIiwgbGUxNl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX0xFMzIocHJlZml4LCB2YXIpCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS44eFxuIiwgbGUzMl90b19jcHUodmFyKSkKLSNkZWZpbmUgUFJJTlRLX1U4KHByZWZpeCwgdmFyKSAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAjcHJlZml4ICI6ICIgI3ZhciAiIDB4JS4yeFxuIiwgdmFyKQotI2RlZmluZSBQUklOVEtfQkUxNihwcmVmaXgsIHZhcikJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjdmFyICIgMHglLjR4XG4iLCBiZTE2X3RvX2NwdSh2YXIpKQotI2RlZmluZSBQUklOVEtfQkUzMihwcmVmaXgsIHZhcikJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjdmFyICIgMHglLjh4XG4iLCBiZTMyX3RvX2NwdSh2YXIpKQotI2RlZmluZSBQUklOVEtfQklUUyhwcmVmaXgsIGZpZWxkKSAgICAJcHJpbnRrKEtFUk5fREVCVUcgUEZYICNwcmVmaXggIjogIiAjZmllbGQgIjogMHgleFxuIiwgKHJlZyAmIGZpZWxkKSA+PiBmaWVsZCMjX1NISUZUKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9idWcoY2hhciAqcmVhc29uKQotewotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzXG4iLCByZWFzb24pOwotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9kZXNjKHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MpCi17Ci0JdTMyIHJlZyA9IGJlMzJfdG9fY3B1KGRlc2MtPmZyYWcpOwotCi0JUFJJTlRLX0JJVFMoREVTQywgUEFDS0VUX0xFTik7Ci0KLQlpZiAocmVnICYgRklSU1RfRlJBRykgewotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9QQUNLRVRfTUFTSyk7Ci0JCVBSSU5US19CSVRTKERFU0MsIEZJUlNUX1JFU0VSVjIpOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9US0lQX0VSUk9SKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfVEtJUF9QQUNLRVQpOwotCQlQUklOVEtfQklUUyhERVNDLCBGSVJTVF9SRVNFUlYxKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgRklSU1RfRlJBR19MRU4pOwotCX0gZWxzZSB7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9SRVNFUlYyKTsKLQkJUFJJTlRLX0JJVFMoREVTQywgU1VCX1RLSVBfRVJST1IpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfVEtJUF9QQUNLRVQpOwotCQlQUklOVEtfQklUUyhERVNDLCBTVUJfUkVTRVJWMSk7Ci0JCVBSSU5US19CSVRTKERFU0MsIFNVQl9GUkFHX0xFTik7Ci0JfQotCi0JUFJJTlRLX0JJVFMoREVTQywgRklSU1RfRlJBRyk7Ci0JUFJJTlRLX0JJVFMoREVTQywgTEFTVF9GUkFHKTsKLQlQUklOVEtfQklUUyhERVNDLCBPV05FUik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfaWVlZTgwMjExYl9waHlfaGRyKF9fYmUzMiBfMTFiMCwgX19iZTMyIF8xMWIxKQotewotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQl1MzIgcmVnOwotCWludCBpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcwKTsKLQlQUklOVEtfQklUUyhIRFIsIFJUUyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBNVUxUSUNBU1QpOwotCVBSSU5US19CSVRTKEhEUiwgQUNLKTsKLQlQUklOVEtfQklUUyhIRFIsIFRNKTsKLQlQUklOVEtfQklUUyhIRFIsIFJFTEFZKTsKLQlQUklOVEtfQklUUyhIRFIsIFJFVklTRURfRkNTKTsKLQlQUklOVEtfQklUUyhIRFIsIE5FWFRfQlVGRkVSX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWcxKTsKLQlQUklOVEtfQklUUyhIRFIsIE1BQ19IRFJfTEVOKTsKLQlQUklOVEtfQklUUyhIRFIsIERVUkFUSU9OX09WRVJJREUpOwotCVBSSU5US19CSVRTKEhEUiwgUEhZX0hEUl9PVkVSSURFKTsKLQlQUklOVEtfQklUUyhIRFIsIENSQ19GQUlMKTsKLQlQUklOVEtfQklUUyhIRFIsIFNFUVVFTkNFX05VTUJFUik7Ci0JUFJJTlRLX0JJVFMoSERSLCBCVUZGX0hFQURfQUREUik7Ci0KLQlyZWcgPSBiZTMyX3RvX2NwdShoZHItPnJlZzIpOwotCVBSSU5US19CSVRTKEhEUiwgUERVX0NPVU5UKTsKLQlQUklOVEtfQklUUyhIRFIsIFdFUF9LRVkpOwotCVBSSU5US19CSVRTKEhEUiwgVVNFU19XRVBfS0VZKTsKLQlQUklOVEtfQklUUyhIRFIsIEtFRVBfQUxJVkUpOwotCVBSSU5US19CSVRTKEhEUiwgQlVGRl9UQUlMX0FERFIpOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWczKTsKLQlQUklOVEtfQklUUyhIRFIsIENUU18xMUcpOwotCVBSSU5US19CSVRTKEhEUiwgUlRTXzExRyk7Ci0JUFJJTlRLX0JJVFMoSERSLCBGUkFHX1NJWkUpOwotCVBSSU5US19CSVRTKEhEUiwgUEFZTE9BRF9MRU4pOwotCVBSSU5US19CSVRTKEhEUiwgRlJBR19OVU0pOwotCi0JcmVnID0gYmUzMl90b19jcHUoaGRyLT5yZWc0KTsKLQlQUklOVEtfQklUUyhIRFIsIFJFTEFZX1NUQUlEKTsKLQlQUklOVEtfQklUUyhIRFIsIFNUQVRJT05fSUQpOwotCVBSSU5US19CSVRTKEhEUiwgV09SS1FVRVVFX0lEKTsKLQotCXJlZyA9IGJlMzJfdG9fY3B1KGhkci0+cmVnNSk7Ci0JLyogcHJpbnRmIHRoZSByb3V0ZSBmbGFnICovCi0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9IT1NUKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX0NBUkRfQ1BVKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX0VOQ1JZUFRJT04pOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfVFgpOwotCVBSSU5US19CSVRTKEhEUiwgUk9VVEVfUlgxKTsKLQlQUklOVEtfQklUUyhIRFIsIFJPVVRFX1JYMik7Ci0JUFJJTlRLX0JJVFMoSERSLCBST1VURV9DT01QUkVTU0lPTik7Ci0KLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExZzApOwotCVBSSU5US19CRTMyKEhEUiwgaGRyLT5fMTFnMSk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPl8xMWIwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+XzExYjEpOwotCi0JZHVtcF9pZWVlODAyMTFiX3BoeV9oZHIoaGRyLT5fMTFiMCwgaGRyLT5fMTFiMSk7Ci0KLQkvKiBGaXhtZSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhkci0+bWFjX2hkcik7IGkrKykgewotCQlpZiAoaSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJJRUVFODAyMTEgSERSOiAiKTsKLQkJcHJpbnRrKCIlLjJ4ICIsIGhkci0+bWFjX2hkcltpXSk7Ci0JCWlmIChpICsgMSA9PSBBUlJBWV9TSVpFKGhkci0+bWFjX2hkcikpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ0c19kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPmxhc3RfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5zZWNfbGFzdF9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPm90aGVyX2R1cmF0aW9uKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+dHhfb3RoZXJfZHVyYXRpb24pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5sYXN0XzExZ19sZW4pOwotCVBSSU5US19CRTE2KEhEUiwgaGRyLT5vdGhlcl8xMWdfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+bGFzdF8xMWJfbGVuKTsKLQlQUklOVEtfQkUxNihIRFIsIGhkci0+b3RoZXJfMTFiX2xlbik7Ci0KLQkvKiBGSVhNRSAqLwotCXJlZyA9IGJlMTZfdG9fY3B1KGhkci0+cmVnNik7Ci0JUFJJTlRLX0JJVFMoSERSLCBNQkYpOwotCVBSSU5US19CSVRTKEhEUiwgUlNWRDQpOwotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4X2ZyYWdfc3RhdCk7Ci0KLQlQUklOVEtfQkUzMihIRFIsIGhkci0+dGltZV9zdGFtcCk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnBoeV9zdGF0c19oaSk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPnBoeV9zdGF0c19sbyk7Ci0JUFJJTlRLX0JFMzIoSERSLCBoZHItPm1pY19rZXkwKTsKLQlQUklOVEtfQkUzMihIRFIsIGhkci0+bWljX2tleTEpOwotfSAvKiBhZ254X3ByaW50X2hkciAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZ254X3ByaW50X3J4X2hkcihzdHJ1Y3QgYWdueF9oZHIgKmhkcikKLXsKLQlhZ254X3ByaW50X2hkcihoZHIpOwotCi0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4LnJ4X3BhY2tldF9kdXJhdGlvbik7Ci0JUFJJTlRLX0JFMTYoSERSLCBoZHItPnJ4LnJlcGxheV9jbnQpOwotCi0JUFJJTlRLX1U4KEhEUiwgaGRyLT5yeF9jaGFubmVsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfdHhfaGRyKHN0cnVjdCBhZ254X2hkciAqaGRyKQotewotCWFnbnhfcHJpbnRfaGRyKGhkcik7Ci0KLQlQUklOVEtfVTgoSERSLCBoZHItPnR4LmxvbmdfcmV0cnlfbGltaXQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHguc2hvcnRfcmV0cnlfbGltaXQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHgubG9uZ19yZXRyeV9jbnQpOwotCVBSSU5US19VOChIRFIsIGhkci0+dHguc2hvcnRfcmV0cnlfY250KTsKLQotCVBSSU5US19VOChIRFIsIGhkci0+cnhfY2hhbm5lbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWdueF9wcmludF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0KLQlnZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgc3RhX2lkeCk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdShwb3dlci5yZWcpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgU0lHTkFMKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIFJBVEUpOwotCVBSSU5US19CSVRTKFNUQV9QT1dFUiwgVElGUyk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBFRENGKTsKLQlQUklOVEtfQklUUyhTVEFfUE9XRVIsIENIQU5ORUxfQk9ORCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBQSFlfTU9ERSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBQT1dFUl9MRVZFTCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1BPV0VSLCBOVU1fVFJBTlNNSVRURVJTKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1hZ254X3ByaW50X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCkKLXsKLQlzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgdHhfd3E7Ci0JdTMyIHJlZzsKLQotCWdldF9zdGFfdHhfd3EocHJpdiwgJnR4X3dxLCBzdGFfaWR4LCB3cV9pZHgpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBUQUlMX1BPSU5URVIpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9QT0lOVEVSX0xPVyk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0eF93cS5yZWczKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfUE9JTlRFUl9ISUdIKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEFDS19QT0lOVEVSX0xPVyk7Ci0KLQlyZWcgPSBsZTMyX3RvX2NwdSh0eF93cS5yZWcxKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEFDS19QT0lOVEVSX0hJR0gpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgSEVBRF9USU1PVVRfVEFJTF9QQUNLX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBBQ0tfVElNT1VUX1RBSUxfUEFDS19DTlQpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHhfd3EucmVnMik7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UKTsKLQlQUklOVEtfQklUUyhTVEFfVFhfV1EsIEhFQURfVElNT1VUX1dJTl9MSU1fRlJBR19DTlQpOwotCVBSSU5US19CSVRTKFNUQV9UWF9XUSwgV09SS19RVUVVRV9BQ0tfVFlQRSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RYX1dRLCBXT1JLX1FVRVVFX1ZBTElEKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfc3RhX3RyYWZmaWMoc3RydWN0IGFnbnhfc3RhX3RyYWZmaWMgKnRyYWZmaWMpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGxlMzJfdG9fY3B1KHRyYWZmaWMtPnJlZzApOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBBQ0tfVElNT1VUX0NOVCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFRSQUZGSUNfQUNLX1RZUEUpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBORVdfUEFDS0VUKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgVFJBRkZJQ19WQUxJRCk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFJYX0hEUl9ERVNDX1BPSU5URVIpOwotCi0JcmVnID0gbGUzMl90b19jcHUodHJhZmZpYy0+cmVnMSk7Ci0JUFJJTlRLX0JJVFMoU1RBX1RSQUZGSUMsIFJYX1BBQ0tFVF9USU1FU1RBTVApOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBUUkFGRklDX1JFU0VSVkVEKTsKLQlQUklOVEtfQklUUyhTVEFfVFJBRkZJQywgU1YpOwotCVBSSU5US19CSVRTKFNUQV9UUkFGRklDLCBSWF9TRVFVRU5DRV9OVU0pOwotCi0JUFJJTlRLX0xFMzIoU1RBX1RSQUZGSUMsIHRyYWZmaWMtPnR4X3JlcGxheV9jbnRfbG93KTsKLQotCVBSSU5US19MRTE2KFNUQV9UUkFGRklDLCB0cmFmZmljLT50eF9yZXBsYXlfY250X2hpZ2gpOwotCVBSSU5US19MRTE2KFNUQV9UUkFGRklDLCB0cmFmZmljLT5yeF9yZXBsYXlfY250X2hpZ2gpOwotCi0JUFJJTlRLX0xFMzIoU1RBX1RSQUZGSUMsIHRyYWZmaWMtPnJ4X3JlcGxheV9jbnRfbG93KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfcHJpbnRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXN0cnVjdCBhZ254X3N0YSBzdGF0aW9uOwotCXN0cnVjdCBhZ254X3N0YSAqc3RhID0gJnN0YXRpb247Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWdldF9zdGEocHJpdiwgc3RhLCBzdGFfaWR4KTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCVBSSU5US19MRTMyKFNUQSwgc3RhLT50eF9zZXNzaW9uX2tleXNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCVBSSU5US19MRTMyKFNUQSwgc3RhLT5yeF9zZXNzaW9uX2tleXNbaV0pOwotCi0JcmVnID0gbGUzMl90b19jcHUoc3RhLT5yZWcpOwotCVBSSU5US19CSVRTKFNUQSwgSURfMSk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBJRF8wKTsKLQlQUklOVEtfQklUUyhTVEEsIEVOQUJMRV9DT05DQVRFTkFUSU9OKTsKLQlQUklOVEtfQklUUyhTVEEsIEVOQUJMRV9ERUNPTVBSRVNTSU9OKTsKLQlQUklOVEtfQklUUyhTVEEsIFNUQV9SRVNFUlZFRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFQVApOwotCVBSSU5US19CSVRTKFNUQSwgRURfTlVMTCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBFTkNSWVBUSU9OX1BPTElDWSk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBERUZJTkVEX0tFWV9JRCk7Ci0JUFJJTlRLX0JJVFMoU1RBLCBGSVhFRF9LRVkpOwotCVBSSU5US19CSVRTKFNUQSwgS0VZX1ZBTElEKTsKLQlQUklOVEtfQklUUyhTVEEsIFNUQVRJT05fVkFMSUQpOwotCi0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnR4X2Flc19ibGtzX3VuaWNhc3QpOwotCVBSSU5US19MRTMyKFNUQSwgc3RhLT5yeF9hZXNfYmxrc191bmljYXN0KTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfZm9ybWF0X2Vycl91bmljYXN0X2NudCk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmFlc19yZXBsYXlfdW5pY2FzdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWVzX2RlY3J5cHRfZXJyX3VuaWNhc3QpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hZXNfZGVjcnlwdF9lcnJfZGVmYXVsdCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+c2luZ2xlX3JldHJ5X3BhY2tldHMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5mYWlsZWRfdHhfcGFja2V0cyk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+bXV0aV9yZXRyeV9wYWNrZXRzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+YWNrX3RpbWVvdXRzKTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5mcmFnX3R4X2NudCk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnJ0c19icnFfc2VudCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHhfcGFja2V0cyk7Ci0JUFJJTlRLX0xFMTYoU1RBLCBzdGEtPmN0c19iYWNrX3RpbWVvdXQpOwotCi0JUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19oaWdoKTsKLQlQUklOVEtfTEUzMihTVEEsIHN0YS0+cGh5X3N0YXRzX2xvdyk7Ci0KLQkvKiBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSAqLwotCWFnbnhfcHJpbnRfc3RhX3RyYWZmaWMoc3RhLT50cmFmZmljICsgMCk7Ci0KLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczBfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczFfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczJfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczNfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczRfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczVfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczZfZnJhZ19zdWNjZXNzKTsKLQlQUklOVEtfTEUxNihTVEEsIHN0YS0+dHJhZmZpY19jbGFzczdfZnJhZ19zdWNjZXNzKTsKLQotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5udW1fZnJhZ19ub25fcHJpbWVfcmF0ZXMpOwotCVBSSU5US19MRTE2KFNUQSwgc3RhLT5hY2tfdGltZW91dF9ub25fcHJpbWVfcmF0ZXMpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2llZWU4MDIxMV9oZHIoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgY2hhciAqdGFnKQotewotCXUxNiBmY3RsOwotCWludCBoZHJsZW47Ci0KLQlmY3RsID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKLQlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCXByaW50ayhQRlggIiVzIERBVEEgIiwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlwcmludGsoUEZYICIlcyBDVEwgIiwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKLQkJcHJpbnRrKFBGWCAiJXMgTUdNVCAiLCB0YWcpOwotCQlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE6Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFTU09DX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBU1NPQ19SRVNQICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVROgotCQkJcHJpbnRrKCJTdWJUeXBlOiBSRUFTU09DX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFJFQVNTT0NfUkVTUCAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6Ci0JCQlwcmludGsoIlN1YlR5cGU6IFBST0JFX1JFUSAiKTsKLQkJCWJyZWFrOwotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBQUk9CRV9SRVNQICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKLQkJCXByaW50aygiU3ViVHlwZTogQkVBQ09OICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FUSU06Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFUSU0gIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCQlwcmludGsoIlN1YlR5cGU6IERJU0FTU09DICIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JCQlwcmludGsoIlN1YlR5cGU6IEFVVEggIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBERUFVVEggIik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNUSU9OOgotCQkJcHJpbnRrKCJTdWJUeXBlOiBBQ1RJT04gIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiU3ViVHlwZTogVW5rbm93XG4iKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoUEZYICIlcyBQYWNrZXQgdHlwZTogVW5rbm93XG4iLCB0YWcpOwotCX0KLQotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7Ci0KLQlpZiAoaGRybGVuID49IDQpCi0JCXByaW50aygiRkM9MHglMDR4IERVUj0weCUwNHgiLAotCQkgICAgICAgZmN0bCwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCkpOwotCWlmIChoZHJsZW4gPj0gMTApCi0JCXByaW50aygiIEExPSVwTSIsIGhkci0+YWRkcjEpOwotCWlmIChoZHJsZW4gPj0gMTYpCi0JCXByaW50aygiIEEyPSVwTSIsIGhkci0+YWRkcjIpOwotCWlmIChoZHJsZW4gPj0gMjQpCi0JCXByaW50aygiIEEzPSVwTSIsIGhkci0+YWRkcjMpOwotCWlmIChoZHJsZW4gPj0gMzApCi0JCXByaW50aygiIEE0PSVwTSIsIGhkci0+YWRkcjQpOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfdHhtX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxZTg7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJUWE06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIGkpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3J4bV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4MTA4OyBpICs9IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiUlhNOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyAweDIwMDAgKyBpKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9ibV9yZWdpc3RlcnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4OTA7IGkgKz0gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJCTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyYzAwICsgaSkpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGR1bXBfY2lyX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0gMHhiODsgaSArPSA0KQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIkNJUjogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgzMDAwICsgaSkpOwotfQotCi0jZW5kaWYgLyogQUdOWF9ERUJVR19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJiNTQ4OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDYzNSArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAieG1pdC5oIgotI2luY2x1ZGUgInBoeS5oIgotCi1NT0RVTEVfQVVUSE9SKCJMaSBZYW5CbyA8ZHJlYW1mbHkyODFAZ21haWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBaXJnbyBNSU1PIFBDSSB3aXJlbGVzcyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFnbnhfcGNpX2lkX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTdjYiwgMHgwMDAxKSB9LAkvKiBCZWtsaW4gRjVkODAxMCwgTmV0Z2VhciBXR001MTEgZXRjICovCi0JeyBQQ0lfREVWSUNFKDB4MTdjYiwgMHgwMDAyKSB9LAkvKiBOZXRnZWFyIFdwbnQ1MTEgKi8KLQl7IDAgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFnbnhfcGNpX2lkX3RibCk7Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGFnbnhfaW50ZXJydXB0X2FjayhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgKnJlYXNvbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfUlgpIHsKLQkJLyogTWFyayBjb21wbGV0ZSBSWCAqLwotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci0JCXJlZyB8PSAweDQ7Ci0JCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLQkJLyogZGlzYWJsZSBSeCBpbnRlcnJ1cHQgKi8KLQl9Ci0JaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfVFgpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKLQkJaWYgKHJlZyAmIDB4NCkgewotCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKLQkJCSpyZWFzb24gfD0gQUdOWF9TVEFUX1RYRDsKLQkJfQotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCQlpZiAocmVnICYgMHg0KSB7Ci0JCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCQkJKnJlYXNvbiB8PSBBR05YX1NUQVRfVFhNOwotCQl9Ci0JfQotI2lmIDAKLQlpZiAoKnJlYXNvbiAmIEFHTlhfU1RBVF9YKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJLyogRklYTUUgcmVpbml0IGludGVycnVwdCBtYXNrICovCi0JCXJlZyA9IDB4YzM5MGJmOSAmIH5JUlFfVFhfQkVBQ09OOwotCQlyZWcgJj0gfklSUV9UWF9ESVNBQkxFOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKDB4ODAwLCBjdGwgKyBBR05YX0NJUl9CTEtDVEwpOwotCX0KLSNlbmRpZgotfSAvKiBhZ254X2ludGVycnVwdF9hY2sgKi8KLQotc3RhdGljIGlycXJldHVybl90IGFnbnhfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCXUzMiBpcnFfcmVhc29uOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotLyoJcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0IGEgaW50ZXJydXB0ICVzXG4iLCBfX2Z1bmNfXyk7ICovCi0KLQlpZiAocHJpdi0+aW5pdF9zdGF0dXMgIT0gQUdOWF9TVEFSVCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBGaVhNRSAgSGVyZSBoYXMgbm8gbG9jaywgSXMgdGhpcyB3aWxsIGxlYWQgdG8gcmFjZT8gKi8KLQlpcnFfcmVhc29uID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfQkxLQ1RMKTsKLQlpZiAoIShpcnFfcmVhc29uICYgMHg3KSkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBJUlFfSEFORExFRDsKLQlwcml2LT5pcnFfc3RhdHVzID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfU1RBVCk7Ci0KLS8qCXByaW50ayhQRlggIkludGVycnVwdCByZWFzb24gaXMgMHgleFxuIiwgaXJxX3JlYXNvbik7ICovCi0JLyogTWFrZSBzdXJlIHRoZSB0eG0gYW5kIHR4ZCBmbGFncyBkb24ndCBjb25mbGljdCB3aXRoIG90aGVyIHVua25vd24KLQkgICBpbnRlcnJ1cHQgZmxhZywgbWF5YmUgaXMgbm90IG5lY2Vzc2FyeSAqLwotCWlycV9yZWFzb24gJj0gMHhGOwotCi0JZGlzYWJsZV9yeF9pbnRlcnJ1cHQocHJpdik7Ci0JLyogVE9ETyBNYWtlIHN1cmUgdGhlIGNhcmQgZmluaXNoZWQgaW5pdGlhbGl6ZWQgKi8KLQlhZ254X2ludGVycnVwdF9hY2socHJpdiwgJmlycV9yZWFzb24pOwotCi0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfUlgpCi0JCWhhbmRsZV9yeF9pcnEocHJpdik7Ci0JaWYgKGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhEKQotCQloYW5kbGVfdHhkX2lycShwcml2KTsKLQlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWE0pCi0JCWhhbmRsZV90eG1faXJxKHByaXYpOwotCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1gpCi0JCWhhbmRsZV9vdGhlcl9pcnEocHJpdik7Ci0KLQllbmFibGVfcnhfaW50ZXJydXB0KHByaXYpOwotb3V0OgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfSAvKiBhZ254X2ludGVycnVwdF9oYW5kbGVyICovCi0KLQotLyogRklYTUUgKi8KLXN0YXRpYyBpbnQgYWdueF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JQUdOWF9UUkFDRTsKLQlyZXR1cm4gX2FnbnhfdHgoZGV2LT5wcml2LCBza2IpOwotfSAvKiBhZ254X3R4ICovCi0KLQotc3RhdGljIGludCBhZ254X2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEF0dGVudGlvbiEgZGlyZWN0bHkgcmVhZCB0aGUgTUFDIG9yIG90aGVyIGRhdGUgZnJvbSBFRVBST00gd2lsbAotCSBsZWFkIHRvIGNhcmRidXMoV0dNNTExKSBsb2NrIHVwIHdoZW4gd3JpdGUgdG8gUE0gUExMIHJlZ2lzdGVyICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NDQpOwotCXVkZWxheSg0MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NGMpOwotCXVkZWxheSg1MCk7Ci0JLyogR2V0IHRoZSBtYWMgYWRkcmVzcyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHgzNTQ0KTsKLQl1ZGVsYXkoNDApOwotCi0JLyogSEFDSyAqLwotCXJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0JcHJpdi0+bWFjX2FkZHJbMF0gPSAoKHU4ICopJnJlZylbMl07Ci0JcHJpdi0+bWFjX2FkZHJbMV0gPSAoKHU4ICopJnJlZylbM107Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDM1NDgpOwotCXVkZWxheSg1MCk7Ci0JKigodTMyICopKHByaXYtPm1hY19hZGRyICsgMikpID0gY3B1X3RvX2xlMzIocmVnKTsKLQotCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5tYWNfYWRkcikpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInJlYWQgbWFjICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiSW52YWxpZCBod2FkZHIhIFVzaW5nIHJhbmRvbSBod2FkZHJcbiIpOwotCQlyYW5kb21fZXRoZXJfYWRkcihwcml2LT5tYWNfYWRkcik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19IC8qIGFnbnhfZ2V0X21hY19hZGRyZXNzICovCi0KLXN0YXRpYyBpbnQgYWdueF9hbGxvY19yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXVuc2lnbmVkIGludCBsZW47Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEFsbG9jYXRlIFJYL1RYTS9UWEQgcmluZ3MgaW5mbyAqLwotCXByaXYtPnJ4LnNpemUgPSBBR05YX1JYX1JJTkdfU0laRTsKLQlwcml2LT50eG0uc2l6ZSA9IEFHTlhfVFhNX1JJTkdfU0laRTsKLQlwcml2LT50eGQuc2l6ZSA9IEFHTlhfVFhEX1JJTkdfU0laRTsKLQotCWxlbiA9IHByaXYtPnJ4LnNpemUgKyBwcml2LT50eG0uc2l6ZSArIHByaXYtPnR4ZC5zaXplOwotCi0vKglwcml2LT5yeC5pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykgKiBsZW4sIEdGUF9LRVJORUwpOyAqLwotCXByaXYtPnJ4LmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSAqIGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFwcml2LT5yeC5pbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQlwcml2LT50eG0uaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBwcml2LT5yeC5zaXplOwotCXByaXYtPnR4ZC5pbmZvID0gcHJpdi0+dHhtLmluZm8gKyBwcml2LT50eG0uc2l6ZTsKLQotCS8qIEFsbG9jYXRlIFJYL1RYTS9UWEQgZGVzY3JpcHRvcnMgKi8KLQlwcml2LT5yeC5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogbGVuLAotCQkJCQkgICAgICZwcml2LT5yeC5kbWEpOwotCWlmICghcHJpdi0+cnguZGVzYykgewotCQlrZnJlZShwcml2LT5yeC5pbmZvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdi0+dHhtLmRlc2MgPSBwcml2LT5yeC5kZXNjICsgcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eG0uZG1hID0gcHJpdi0+cnguZG1hICsgc2l6ZW9mKHN0cnVjdCBhZ254X2Rlc2MpICogcHJpdi0+cnguc2l6ZTsKLQlwcml2LT50eGQuZGVzYyA9IHByaXYtPnR4bS5kZXNjICsgcHJpdi0+dHhtLnNpemU7Ci0JcHJpdi0+dHhkLmRtYSA9IHByaXYtPnR4bS5kbWEgKyBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykgKiBwcml2LT50eG0uc2l6ZTsKLQotCXJldHVybiAwOwotfSAvKiBhZ254X2FsbG9jX3JpbmdzICovCi0KLXN0YXRpYyB2b2lkIHJpbmdzX2ZyZWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl1bnNpZ25lZCBpbnQgbGVuID0gcHJpdi0+cnguc2l6ZSArIHByaXYtPnR4bS5zaXplICsgcHJpdi0+dHhkLnNpemU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlBR05YX1RSQUNFOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlrZnJlZShwcml2LT5yeC5pbmZvKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemVvZihzdHJ1Y3QgYWdueF9kZXNjKSAqIGxlbiwKLQkJCSAgICBwcml2LT5yeC5kZXNjLCBwcml2LT5yeC5kbWEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkIGFnbnhfcGVyaW9kaWNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZ254X3ByaXYsIHBlcmlvZGljX3dvcmsud29yayk7Ci0vKgl1bnNpZ25lZCBsb25nIGZsYWdzOyAqLwotCXVuc2lnbmVkIGxvbmcgZGVsYXk7Ci0KLQkvKiBmaXhtZTogdXNpbmcgbXV0ZXg/PyAqLwotLyoJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KLQotCS8qIFRPRE8gUmVjYWxpYnJhdGUqLwotLyoJY2FsaWJyYXRlX29zY2lsbGF0b3IocHJpdik7ICovCi0vKglhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsgKi8KLS8qCWFnbnhfc2VuZF9wYWNrZXQocHJpdiwgOTk3KTsgKi8KLQkvKiBGSVhNRSAqLwotLyogCWlmIChkZWJ1ZyA9PSAzKSAqLwotLyogICAgICAgICAgICAgICAgIGRlbGF5ID0gbXNlY3NfdG9famlmZmllcyhBR05YX1BFUklPRElDX0RFTEFZKTsgKi8KLS8qIAllbHNlICovCi0JZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOwotLyoJZGVsYXkgPSByb3VuZF9qaWZmaWVzKEhaICogMTUpOyAqLwotCi0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7Ci0KLS8qCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGFnbnhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JLyogdW5zaWduZWQgbG9uZyBkZWxheTsgKi8KLQlpbnQgZXJyID0gMDsKLQlBR05YX1RSQUNFOwotCi0JZXJyID0gYWdueF9hbGxvY19yaW5ncyhwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGFsbG9jIFJYL1RYTS9UWEQgcmluZ3NcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCAmYWdueF9pbnRlcnJ1cHRfaGFuZGxlciwKLQkJCSAgSVJRRl9TSEFSRUQsICJhZ254X3BjaSIsIGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOwotCQlyaW5nc19mcmVlKHByaXYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLS8qCW1kZWxheSg1MDApOyAqLwotCi0JbWlnaHRfc2xlZXAoKTsKLQlhZ254X2h3X2luaXQocHJpdik7Ci0KLS8qCW1kZWxheSg1MDApOyAqLwotCW1pZ2h0X3NsZWVwKCk7Ci0KLQlwcml2LT5pbml0X3N0YXR1cyA9IEFHTlhfU1RBUlQ7Ci0vKiAgICAgICAgIElOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5wZXJpb2RpY193b3JrLCBhZ254X3BlcmlvZGljX3dvcmtfaGFuZGxlcik7ICovCi0vKiAJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOyAqLwotLyogICAgICAgICBxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aHctPndvcmtxdWV1ZSwgJnByaXYtPnBlcmlvZGljX3dvcmssIGRlbGF5KTsgKi8KLW91dDoKLQlyZXR1cm4gZXJyOwotfSAvKiBhZ254X3N0YXJ0ICovCi0KLXN0YXRpYyB2b2lkIGFnbnhfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0JcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1NUT1A7Ci0JLyogbWFrZSBzdXJlIGhhcmR3YXJlIHdpbGwgbm90IGdlbmVyYXRlIGlycSAqLwotCWFnbnhfaHdfcmVzZXQocHJpdik7Ci0JZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBkZXYpOwotLyoJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOyAqLwotLyoJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wZXJpb2RpY193b3JrKTsgKi8KLQl1bmZpbGxfcmluZ3MocHJpdik7Ci0JcmluZ3NfZnJlZShwcml2KTsKLX0KLQotc3RhdGljIGludCBhZ254X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmRldi0+Y29uZjsKLQlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjb25mLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JLyogRklYTUUgbmVlZCBwcml2IGxvY2s/ICovCi0JaWYgKGNoYW5uZWwgIT0gcHJpdi0+Y2hhbm5lbCkgewotCQlwcml2LT5jaGFubmVsID0gY2hhbm5lbDsKLQkJYWdueF9zZXRfY2hhbm5lbChwcml2LCBwcml2LT5jaGFubmVsKTsKLQl9Ci0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFnbnhfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKLQkJCQkgIHUzMiBjaGFuZ2VkKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCWlmICghKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0KLQlpZiAobWVtY21wKGNvbmYtPmJzc2lkLCBwcml2LT5ic3NpZCwgRVRIX0FMRU4pKSB7Ci0JCWFnbnhfc2V0X2Jzc2lkKHByaXYsIGNvbmYtPmJzc2lkKTsKLQkJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwotCQloYXNoX3dyaXRlKHByaXYsIGNvbmYtPmJzc2lkLCBCU1NJRF9TVEFJRCk7Ci0JCXN0YV9pbml0KHByaXYsIEJTU0lEX1NUQUlEKTsKLQkJLyogRklYTUUgbmVlZGVkPyAqLwotCQlzdGFfcG93ZXJfaW5pdChwcml2LCBCU1NJRF9TVEFJRCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fTVRTTSwgMHhmZiAmIH4weDEpOwotCX0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci19IC8qIGFnbnhfYnNzX2luZm9fY2hhbmdlZCAqLwotCi0KLXN0YXRpYyB2b2lkIGFnbnhfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCi0JCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQotewotCXVuc2lnbmVkIGludCBuZXdfZmxhZ3MgPSAwOwotCi0JKnRvdGFsX2ZsYWdzID0gbmV3X2ZsYWdzOwotCS8qIFRPRE8gKi8KLX0KLQotc3RhdGljIGludCBhZ254X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKLQlBR05YX1RSQUNFOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkvKiBGSVhNRSAqLwotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQotCXN3aXRjaCAoY29uZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWdueF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQotewotCXN0cnVjdCBhZ254X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIFRPRE8gKi8KLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLX0KLQotc3RhdGljIGludCBhZ254X2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQkvKiBUT0RPICEhICovCi0JbWVtY3B5KHN0YXRzLCAmcHJpdi0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHU2NCBhZ254X2dldF90c2Z0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9ICgoc3RydWN0IGFnbnhfcHJpdiAqKWRldi0+cHJpdiktPmN0bDsKLQl1MzIgdHNmdGw7Ci0JdTY0IHRzZnQ7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZJWE1FICovCi0JdHNmdGwgPSBpb3JlYWQzMihjdGwgKyBBR05YX1RYTV9USU1FU1RBTVBMTyk7Ci0JdHNmdCA9IGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX1RJTUVTVEFNUEhJKTsKLQl0c2Z0IDw8PSAzMjsKLQl0c2Z0IHw9IHRzZnRsOwotCi0JcmV0dXJuIHRzZnQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWdueF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBGSVhNRSBub3cgd2UganVzdCB1c2luZyB0eGQgcXVldWUsIGJ1dCBzaG91bGQgdXNpbmcgdHhtIHF1ZXVlIHRvbyAqLwotCXN0YXRzWzBdLmxlbiA9IChwcml2LT50eGQuaWR4IC0gcHJpdi0+dHhkLmlkeF9zZW50KSAvIDI7Ci0Jc3RhdHNbMF0ubGltaXQgPSBwcml2LT50eGQuc2l6ZSAtIDI7Ci0Jc3RhdHNbMF0uY291bnQgPSBwcml2LT50eGQuaWR4IC8gMjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYWdueF9vcHMgPSB7Ci0JLnR4CQkJPSBhZ254X3R4LAotCS5zdGFydAkJCT0gYWdueF9zdGFydCwKLQkuc3RvcAkJCT0gYWdueF9zdG9wLAotCS5hZGRfaW50ZXJmYWNlCQk9IGFnbnhfYWRkX2ludGVyZmFjZSwKLQkucmVtb3ZlX2ludGVyZmFjZQk9IGFnbnhfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnCQkJPSBhZ254X2NvbmZpZywKLQkuYnNzX2luZm9fY2hhbmdlZAk9IGFnbnhfYnNzX2luZm9fY2hhbmdlZCwKLQkuY29uZmlndXJlX2ZpbHRlcgk9IGFnbnhfY29uZmlndXJlX2ZpbHRlciwKLQkuZ2V0X3N0YXRzCQk9IGFnbnhfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYWdueF9nZXRfdHhfc3RhdHMsCi0JLmdldF90c2YJCT0gYWdueF9nZXRfdHNmdAotfTsKLQotc3RhdGljIHZvaWQgX19kZXZleGl0IGFnbnhfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdjsKLQlBR05YX1RSQUNFOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybjsKLQlwcml2ID0gZGV2LT5wcml2OwotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGRldik7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+Y3RsKTsKLQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5kYXRhKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGFnbnhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwotCXN0cnVjdCBhZ254X3ByaXYgKnByaXY7Ci0JaW50IGVycjsKLQotCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIHBjaSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImFnbngtcGNpIik7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZXNlcnZlIFBDSSByZXNvdXJjZXNcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpIHx8Ci0JICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBlcnJfZnJlZV9yZWc7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQlkZXYgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCpwcml2KSwgJmFnbnhfb3BzKTsKLQlpZiAoIWRldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9yZWc7Ci0JfQotCXByaXYgPSBkZXYtPnByaXY7Ci0JbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwotCXByaXYtPnBkZXYgPSBwZGV2OwotCXByaXYtPmh3ID0gZGV2OwotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlwcml2LT5pbml0X3N0YXR1cyA9IEFHTlhfVU5JTklUOwotCi0JcHJpdi0+Y3RsID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwotLyoJZGV2X2RiZygmcGRldi0+ZGV2LCAiTUVNMSBtYXBwZWQgYWRkcmVzcyBpcyAweCVwXG4iLCBwcml2LT5jdGwpOyAqLwotCWlmICghcHJpdi0+Y3RsKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfZnJlZV9kZXY7Ci0JfQotCXByaXYtPmRhdGEgPSBwY2lfaW9tYXAocGRldiwgMSwgMCk7Ci0JaWYgKCFwcml2LT5kYXRhKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfaW91bm1hcDI7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmcHJpdi0+cmV2aWQpOwotCi0JcHJpdi0+YmFuZC5jaGFubmVscyAgID0gKHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqKWFnbnhfY2hhbm5lbHM7Ci0JcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShhZ254X2NoYW5uZWxzKTsKLQlwcml2LT5iYW5kLmJpdHJhdGVzICAgPSAoc3RydWN0IGllZWU4MDIxMV9yYXRlICopYWdueF9yYXRlc184MDIxMWc7Ci0JcHJpdi0+YmFuZC5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhZ254X3JhdGVzXzgwMjExZyk7Ci0KLQkvKiBJbml0IGllZWU4MDIuMTEgZGV2ICAqLwotCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJnBkZXYtPmRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JZGV2LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgYWdueF9oZHIpOwotCi0JLyogRklYTUUgSXQgb25seSBpbmNsdWRlIEZDUyBpbiBwcm9taW91cyBtb2RlIGJ1dCBub3QgbWFuYWdlIG1vZGUgKi8KLS8qICAgICAgZGV2LT5mbGFncyA9ICBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTOyAqLwotCWRldi0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDUwMDA7Ci0JZGV2LT5tYXhfc2lnbmFsID0gMTAwOwotCS8qIEZJWE1FICovCi0JZGV2LT5xdWV1ZXMgPSAxOwotCi0JYWdueF9nZXRfbWFjX2FkZHJlc3MocHJpdik7Ci0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIHByaXYtPm1hY19hZGRyKTsKLQotLyogCS9cKiBGSVhNRSAqXC8gKi8KLS8qIAlmb3IgKGkgPSAxOyBpIDwgTlVNX0RSSVZFX01PREVTOyBpKyspIHsgKi8KLS8qIAkJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3bW9kZShkZXYsICZwcml2LT5tb2Rlc1tpXSk7ICovCi0vKiAJCWlmIChlcnIpIHsgKi8KLS8qIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IHJlZ2lzdGVyIGh3bW9kZVxuIik7ICovCi0vKiAJCQlnb3RvICBlcnJfaW91bm1hcDsgKi8KLS8qIAkJfSAqLwotLyogCX0gKi8KLQotCXByaXYtPmNoYW5uZWwgPSAxOwotCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7Ci0KLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IHJlZ2lzdGVyIGhhcmR3YXJlXG4iKTsKLQkJZ290byBlcnJfaW91bm1hcDsKLQl9Ci0KLQlhZ254X2h3X3Jlc2V0KHByaXYpOwotCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzOiBod2FkZHIgJXBNLCBSZXYgMHglMDJ4XG4iLAotCQl3aXBoeV9uYW1lKGRldi0+d2lwaHkpLAotCQlkZXYtPndpcGh5LT5wZXJtX2FkZHIsIHByaXYtPnJldmlkKTsKLQlyZXR1cm4gMDsKLQotIGVycl9pb3VubWFwOgotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmRhdGEpOwotCi0gZXJyX2lvdW5tYXAyOgotCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmN0bCk7Ci0KLSBlcnJfZnJlZV9kZXY6Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCWllZWU4MDIxMV9mcmVlX2h3KGRldik7Ci0KLSBlcnJfZnJlZV9yZWc6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlyZXR1cm4gZXJyOwotfSAvKiBhZ254X3BjaV9wcm9iZSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIGludCBhZ254X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUFHTlhfVFJBQ0U7Ci0KLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoZGV2KTsKLQlhZ254X3N0b3AoZGV2KTsKLQotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFnbnhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JQUdOWF9UUkFDRTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQotCWFnbnhfc3RhcnQoZGV2KTsKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGFnbnhfcGNpX3N1c3BlbmQgTlVMTAotI2RlZmluZSBhZ254X3BjaV9yZXN1bWUgTlVMTAotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFnbnhfcGNpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYWdueC1wY2kiLAotCS5pZF90YWJsZQk9IGFnbnhfcGNpX2lkX3RibCwKLQkucHJvYmUJCT0gYWdueF9wY2lfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZ254X3BjaV9yZW1vdmUpLAotCS5zdXNwZW5kCT0gYWdueF9wY2lfc3VzcGVuZCwKLQkucmVzdW1lCQk9IGFnbnhfcGNpX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFnbnhfcGNpX2luaXQodm9pZCkKLXsKLQlBR05YX1RSQUNFOwotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhZ254X3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWdueF9wY2lfZXhpdCh2b2lkKQotewotCUFHTlhfVFJBQ0U7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ254X3BjaV9kcml2ZXIpOwotfQotCi0KLW1vZHVsZV9pbml0KGFnbnhfcGNpX2luaXQpOwotbW9kdWxlX2V4aXQoYWdueF9wY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFjYTg2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYwICswLDAgQEAKLS8qKgotICogQWlyZ28gTUlNTyB3aXJlbGVzcyBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgTGkgWWFuQm8gPGRyZWFtZmx5MjgxQGdtYWlsLmNvbT4KLQotICogVGhhbmtzIGZvciBKZWZmIFdpbGxpYW1zIDxhbmdlbGJhbmVAZ21haWwuY29tPiBkbyByZXZlcnNlIGVuZ2luZWVyCi0gKiB3b3JrcyBhbmQgcHVibGlzaGVkIHRoZSBTUEVDUyBhdCBodHRwOi8vYWlyZ28ud2R3Y29uc3VsdGluZy5uZXQvbXltb2luCi0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAidGFibGUuaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJ4bWl0LmgiCi0KLXU4IHJlYWRfZnJvbV9lZXByb20oc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTE2IGFkZHJlc3MpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jc3RydWN0IGFnbnhfZWVwcm9tIGNtZDsKLQl1MzIgcmVnOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQuY21kID0gRUVQUk9NX0NNRF9SRUFEIDw8IEFHTlhfRUVQUk9NX0NPTU1BTkRfU0hJRlQ7Ci0JY21kLmFkZHJlc3MgPSBhZGRyZXNzOwotCS8qIFZlcmlmeSB0aGF0IHRoZSBTdGF0dXMgYml0IGlzIGNsZWFyICovCi0JLyogUmVhZCBDb21tYW5kIGFuZCBBZGRyZXNzIGFyZSB3cml0dGVuIHRvIHRoZSBTZXJpYWwgSW50ZXJmYWNlICovCi0JaW93cml0ZTMyKCooX19sZTMyICopJmNtZCwgY3RsICsgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkvKiBXYWl0IGZvciB0aGUgU3RhdHVzIGJpdCB0byBjbGVhciBhZ2FpbiAqLwotCWVlcHJvbV9kZWxheSgpOwotCS8qIFJlYWQgZnJvbSBEYXRhICovCi0JcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQotCWNtZCA9ICooc3RydWN0IGFnbnhfZWVwcm9tICopJnJlZzsKLQotCXJldHVybiBjbWQuZGF0YTsKLX0KLQotc3RhdGljIGludCBjYXJkX2Z1bGxfcmVzZXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMLCAweDgwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWlubGluZSB2b2lkIGVuYWJsZV9wb3dlcl9zYXZpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gfjB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotfQotCi1pbmxpbmUgdm9pZCBkaXNhYmxlX3Bvd2VyX3NhdmluZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLX0KLQotCi12b2lkIGRpc2FibGVfcmVjZWl2ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlBR05YX1RSQUNFOwotCi0JLyogRklYTUUgRGlzYWJsZSB0aGUgcmVjZWl2ZXIgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4MCk7Ci0JLyogU2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JLyogUmVzZXQgZ2FpbiBjb250cm9sIHJlc2V0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLX0KLQotCi0vKiBGaXhtZSB0aGlzIHNob3VsZSBiZSBkaXNhYmxlIFJYLCBhYm92ZSBpcyBlbmFibGUgUlggKi8KLXZvaWQgZW5hYmxlX3JlY2VpdmVyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIFNldCBhZGFwdGl2ZSBnYWluIGNvbnRyb2wgZGlzY292ZXJ5IG1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0JLyogU2V0IGdhaW4gY29udHJvbCByZXNldCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JLyogQ2xlYXIgZ2FpbiBjb250cm9sIHJlc2V0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjX2FkZHJlc3Nfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTggKm1hY19hZGRyID0gcHJpdi0+bWFjX2FkZHI7Ci0JdTMyIHJlZzsKLQotCS8qIEZJWE1FICovCi0JcmVnID0gKG1hY19hZGRyWzBdIDw8IDI0KSB8IChtYWNfYWRkclsxXSA8PCAxNikgfCBtYWNfYWRkclsyXSA8PCA4IHwgbWFjX2FkZHJbM107Ci0JaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fTUFDSEkpOwotCXJlZyA9IChtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0xPKTsKLX0KLQotc3RhdGljIHZvaWQgcmVjZWl2ZXJfYnNzaWRfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLQkvKiBGSVhNRSAqLwotCXJlZyA9IGJzc2lkWzBdIDw8IDI0IHwgKGJzc2lkWzFdIDw8IDE2KSB8IChic3NpZFsyXSA8PCA4KSB8IGJzc2lkWzNdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lESEkpOwotCXJlZyA9IChic3NpZFs0XSA8PCA4KSB8IGJzc2lkWzVdOwotCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lETE8pOwotCi0JLyogRW5hYmxlIHRoZSByZWNlaXZlciAqLwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCS8qIENsZWFyIHRoZSBUU0YgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UU0ZMTywgMHgwKTsgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UU0ZISSwgMHgwKTsgKi8KLQkvKiBDbGVhciB0aGUgVEJUVCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RCVFRMTywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UQlRUSEksIDB4MCk7Ci0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLX0gLyogcmVjZWl2ZXJfYnNzaWRfc2V0ICovCi0KLXN0YXRpYyB2b2lkIGJhbmRfbWFuYWdlbWVudF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQl1MzIgcmVnOwotCWludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYV0FERFIsIEFHTlhfUERVX1RYX1dRKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9BRERSV0lOLCAweDApOwotCW1lbXNldF9pbyhkYXRhICsgQUdOWF9QRFVQT09MLCAweDAsIEFHTlhfUERVUE9PTF9TSVpFKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCAweDIwMCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NJUERVV0NOVCwgMHg0MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9TUFBEVVdDTlQsIDB4Mik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9SRlBQRFVXQ05ULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkhQUERVV0NOVCwgMHgyMik7Ci0KLQkvKiBGSVhNRSBJbml0aWFsaXplIHRoZSBGcmVlIFBvb2wgTGlua2VkIExpc3QgKi8KLQkvKiAgICAxLiBXcml0ZSB0aGUgQWRkcmVzcyBvZiB0aGUgTmV4dCBOb2RlICgoMHg0MTgwMCArIG5vZGUqc2l6ZSkvc2l6ZSkKLQkgICAgICB0byB0aGUgZmlyc3Qgd29yZCBvZiBlYWNoIG5vZGUuICAqLwotCWZvciAoaSA9IDA7IGkgPCBQRFVfRlJFRV9DTlQ7IGkrKykgewotCQlpb3dyaXRlMzIoKEFHTlhfUERVX0ZSRUUgKyAoaSsxKSpQRFVfU0laRSkvUERVX1NJWkUsCi0JCQkgIGRhdGEgKyBBR05YX1BEVV9GUkVFICsgKFBEVV9TSVpFICogaSkpOwotCQkvKiBUaGUgbGFzdCBub2RlIHNob3VsZCBiZSBzZXQgdG8gMHgwICovCi0JCWlmICgoaSArIDEpID09IFBEVV9GUkVFX0NOVCkKLQkJCW1lbXNldF9pbyhkYXRhICsgQUdOWF9QRFVfRlJFRSArIChQRFVfU0laRSAqIGkpLAotCQkJCSAgMHgwLCBQRFVfU0laRSk7Ci0JfQotCi0JLyogSGVhZCBpcyBGaXJzdCBQb29sIGFkZHJlc3MgKDB4NDE4MDApIC8gc2l6ZSAoMHg4MCkgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0ZQTEhQLCBBR05YX1BEVV9GUkVFL1BEVV9TSVpFKTsKLQkvKiBUYWlsIGlzIExhc3QgUG9vbCBBZGRyZXNzICgweDQ3ZjgwKSAvIHNpemUgKDB4ODApICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9GUExUUCwgMHg0N2Y4MC9QRFVfU0laRSk7Ci0JLyogQ291bnQgaXMgTnVtYmVyIG9mIE5vZGVzIGluIHRoZSBQb29sICgweGQwKSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fRlBDTlQsIFBEVV9GUkVFX0NOVCk7Ci0KLQkvKiBTdGFydCBhbGwgd29ya3F1ZXVlICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DSVdRQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVUxXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVUhXQ1RMLCAweDgwMDAwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0NQVVRYV0NUTCwgMHg4MDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9DUFVSWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BSWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fU1BUWFdDVEwsIDB4ODAwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fUkZQV0NUTCwgMHg4MDAwMCk7Ci0KLQkvKiBFbmFibGUgdGhlIEJhbmQgTWFuYWdlbWVudCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9CTV9CTUNUTCk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX0JNQ1RMLCByZWcpOwotfSAvKiBiYW5kX21hbmFnbWVudF9pbml0ICovCi0KLQotc3RhdGljIHZvaWQgc3lzdGVtX2l0Zl9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fVEVTVFBIWSwgMHgxMWUxNDNhKTsKLQotCWlmIChwcml2LT5yZXZpZCA9PSAwKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSk7Ci0JCXJlZyB8PSAweDExOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCByZWcpOwotCX0KLQkvKiA/Pz8gV2hhdCBpcyB0aGF0IG1lYW5zPyBpdCBzaG91bGQgZGlmZmVyZW5jZSBmb3IgZGlmZmVyaWNlIHR5cGUKLQkgb2YgY2FyZHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYsIDB4ZmZmODEwMDYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT0lOLCAweDFmMDAwMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCAweDUpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT0lOKTsKLX0KLQotc3RhdGljIHZvaWQgZW5jcnlwdGlvbl9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JQUdOWF9UUkFDRTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMCwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX1dFUEtFWTEsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9FTkNSWV9XRVBLRVkyLCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfRU5DUllfV0VQS0VZMywgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0VOQ1JZX0NDTVJFQ1RMLCAweDgpOwotfQotCi1zdGF0aWMgdm9pZCB0eF9tYW5hZ2VtZW50X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCS8qIEZpbGwgb3V0IHRoZSBDb21wdXRhdGlvbmFsRW5naW5lTG9va3VwVGFibGUKLQkgKiBzdGFydGluZyBhdCBtZW1vcnkgIzIgb2Zmc2V0IDB4ODAwCi0JICovCi0JdHhfZW5naW5lX2xvb2t1cF90YmxfaW5pdChwcml2KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4MTAwMCwgMCwgMHhmZTApOwotCS8qIEVuYWJsZSBUcmFuc21pc3Npb24gTWFuYWdlbWVudCBGdW5jdGlvbnMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9FVE1GLCAweDNmZik7Ci0JLyogV3JpdGUgMHgzZiB0byBUcmFuc21pc3Npb24gVGVtcGxhdGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9UWFRFTVAsIDB4M2YpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDIpCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NJRlNQSUZTLCAweDFlMTQwYTBiKTsKLQllbHNlCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NJRlNQSUZTLCAweDFlMTkwYTBiKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMpOwotCXJlZyAmPSAweGZmMDA7Ci0JcmVnIHw9IDB4YjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUywgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTKTsKLQlyZWcgJj0gMHhmZmZmMDBmZjsKLQlyZWcgfD0gMHhhMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JLyogRW5hYmxlIFRJRlMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIDB4NDAwMDApOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4NTEwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1RJRlNFSUZTLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fUFJPQkRFTEFZKTsKLQlyZWcgJj0gMHhmZjAwZmZmZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVksIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9USUZTRUlGUyk7Ci0JcmVnICY9IDB4MDBmZmZmZmY7Ci0JcmVnIHw9IDB4MWMwMDAwMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fVElGU0VJRlMsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9QUk9CREVMQVkpOwotCXJlZyAmPSAweDAwZmZmZmZmOwotCXJlZyB8PSAweDAxMDAwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSwgcmVnKTsKLQotCS8qICMgU2V0IERJRiAwLTEsMi0zLDQtNSw2LTcgdG8gZGVmYXVsdHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUYwMSwgMHgzMjFkMzIxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fRElGMjMsIDB4MzIxZDMyMWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0RJRjQ1LCAweDMyMWQzMjFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9ESUY2NywgMHgzMjFkMzIxZCk7Ci0KLQkvKiBNYXggQWNrIHRpbWVvdXQgbGltaXQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9NQVhBQ0tUSU0sIDB4MWUxOSk7Ci0JLyogTWF4IFJYIERhdGEgVGltZW91dCBjb3VudCwgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWFJYVElNRSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4ZmY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTUFYUlhUSU1FLCByZWcpOwotCi0JLyogQ0YgcG9sbCBSWCBUaW1lb3V0IGNvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjsKLQlyZWcgfD0gMHhmZjAwMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0KLQkvKiBNYXggVGltZW91dCBFeGNlZWRlZCBjb3VudCwgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX01BWFRJTU9VVCk7Ci0JcmVnICY9IDB4ZmYwMGZmZmY7Ci0JcmVnIHw9IDB4MTkwMDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWFRJTU9VVCwgcmVnKTsKLQotCS8qIENGIGFjayB0aW1lb3V0IGxpbWl0IGZvciAxMWIgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NGQUNLVDExQik7Ci0JcmVnICY9IDB4ZmYwMDsKLQlyZWcgfD0gMHgxZTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DRkFDS1QxMUIsIHJlZyk7Ci0KLQkvKiBNYXggQ0YgUG9sbCBUaW1lb3V0IENvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4MTk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0JLyogQ0YgUG9sbCBSWCBUaW1lb3V0IENvdW50ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DRlBPTExSWFRJTSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4MWU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0sIHJlZyk7Ci0KLQkvKiAjIHdyaXRlIGRlZmF1bHQgdG8gKi8KLQkvKiAgICAxLiBTY2hlZHVsZSBFbXB0eSBDb3VudCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1NDSEVNUENOVCwgMHg1KTsKLQkvKiAgICAyLiBDRlAgUGVyaW9kIENvdW50ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ0ZQRVJDTlQsIDB4MSk7Ci0JLyogICAgMy4gQ0ZQIE1EViAgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DRlBNRFYsIDB4MTAwMDApOwotCi0JLyogUHJvYmUgRGVsYXkgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSk7Ci0JcmVnICY9IDB4ZmZmZjAwMDA7Ci0JcmVnIHw9IDB4NDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX1BST0JERUxBWSwgcmVnKTsKLQotCS8qIE1heCBDQ0EgY291bnQgU2xvdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fTUFYQ0NBQ05UU0xPVCk7Ci0JcmVnICY9IDB4ZmZmZjAwZmY7Ci0JcmVnIHw9IDB4OTAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX01BWENDQUNOVFNMT1QsIHJlZyk7Ci0KLQkvKiBTbG90IGxpbWl0LzEgbXNlYyBMaW1pdCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fU0xPVExJTUlUKTsKLQlyZWcgJj0gMHhmZjAwZmZmZjsKLQlyZWcgfD0gMHgxNDAwNzc7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fU0xPVExJTUlULCByZWcpOwotCi0JLyogIyBTZXQgQ1cgIygwLTcpIHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzAsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzEsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzIsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzMsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzQsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzUsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzYsIDB4ZmYwMDA3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVzcsIDB4ZmYwMDA3KTsKLQotCS8qICMgU2V0IFNob3J0L0xvbmcgbGltaXQgIygwLTcpIHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTAsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTEsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTIsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTMsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTQsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTUsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTYsICAweGEwMDBhKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9TTEJFQUxJTTcsICAweGEwMDBhKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQlyZWcgfD0gMHgxNDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgcmVnKTsKLQkvKiBXYWl0IGZvciBiaXQgMCBpbiBDb250cm9sIFJlZyB0byBjbGVhciAgKi8KLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9UWE1fQ1RMKTsKLQkvKiBPciAweDE4MDAwIHRvIENvbnRyb2wgcmVnICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyB8PSAweDE4MDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgcmVnKTsKLQkvKiBXYWl0IGZvciBiaXQgMCBpbiBDb250cm9sIFJlZyB0byBjbGVhciAqLwotCXVkZWxheSg4MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCi0JLyogU2V0IExpc3RlbiBJbnRlcnZhbCBDb3VudCB0byBkZWZhdWx0ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fTElTSU5URVJDTlQsIDB4MSk7Ci0JLyogU2V0IERUSU0gcGVyaW9kIGNvdW50IHRvIGRlZmF1bHQgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9EVElNUEVSSUNOVCwgMHgyMDAwKTsKLX0gLyogdHhfbWFuYWdlbWVudF9pbml0ICovCi0KLXN0YXRpYyB2b2lkIHJ4X21hbmFnZW1lbnRfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBSb3V0aW5nIFRhYmxlICovCi0Jcm91dGluZ190YWJsZV9pbml0KHByaXYpOwotCi0JaWYgKHByaXYtPnJldmlkID49IDMpIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc0LCAweDFmMTcxNzEwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDc4LCAweDEwMTAwZDBkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgyMDdjLCAweDExMTExMDEwKTsKLQl9IGVsc2UgewotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9ERUxBWTExLCAweDApOwotCX0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDgxOTVlMDApOwotfQotCi0KLXN0YXRpYyB2b2lkIGFnbnhfdGltZXJfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCUFHTlhfVFJBQ0U7Ci0KLS8qIAkvXCogV3JpdGUgMHgyNDlmMDAgKHRpY2sgZHVyYXRpb24/KSB0byBUaW1lciAxICpcLyAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTUVSMSwgMHgyNDlmMDApOyAqLwotLyogCS9cKiBXcml0ZSAweGUyIHRvIFRpbWVyIDEgQ29udHJvbCAqXC8gKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RJTUNUTF9USU0xQ1RMLCAweGUyKTsgKi8KLQotCS8qIFdyaXRlIDB4MjQ5ZjAwICh0aWNrIGR1cmF0aW9uPykgdG8gVGltZXIgMSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTUVSMSwgMHgwKTsKLQkvKiBXcml0ZSAweGUyIHRvIFRpbWVyIDEgQ29udHJvbCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVElNQ1RMX1RJTTFDVEwsIDB4MCk7Ci0KLQlpb3dyaXRlMzIoMHhGRkZGRkZGRiwgcHJpdi0+Y3RsICsgQUdOWF9UWE1fQkVBQ09OX0NUTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBvd2VyX21hbmFnZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9NQUNNU1csIDB4MWYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUkZDVEwsIDB4MWYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gMHhmMDBmOwotCXJlZyB8PSAweGEwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUE1DVEwsIHJlZyk7Ci0KLQlpZiAocHJpdi0+cmV2aWQgPj0gMykgewotCQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fU09GVFJTVCk7Ci0JCXJlZyB8PSAweDE4OwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIHJlZyk7Ci0JfQotfSAvKiBwb3dlcl9tYW5hZ2VfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIGdhaW5fY3RsY250X2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9UUkFDTlQ1LCAweDExOSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNiwgMHgxMTgpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RSQUNOVDcsIDB4MTE3KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gfjB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgwKTsKLQotCS8qIEZJWE1FIFdyaXRlIHRoZSBpbml0aWFsIFN0YXRpb24gRGVzY3JpcHRvciBmb3IgdGhlIGNhcmQgKi8KLQlzdGFfaW5pdChwcml2LCBMT0NBTF9TVEFJRCk7Ci0Jc3RhX2luaXQocHJpdiwgQlNTSURfU1RBSUQpOwotCi0JLyogRW5hYmxlIHN0YWlvbiAwIGFuZCAxIGNhbiBkbyBUWCAqLwotCS8qIEl0IHNlZW1lZCBpZiB3ZSBzZXQgb3RoZXIgYml0IHRvIDEgdGhlIGJpdCAwIHdpbGwKLQkgICBiZSBhdXRvIGNoYW5nZSB0byAwICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFRPUEVFUiwgMHgyIHwgMHgxKTsKLS8qCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MSk7ICovCi19IC8qIGdhaW5fY3RsY250X2luaXQgKi8KLQotCi1zdGF0aWMgdm9pZCBwaHlfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JLyogTG9hZCBJbml0aWFsR2FpblRhYmxlICovCi0JZ2Fpbl90YWJsZV9pbml0KHByaXYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgyMDAwMDAwKTsKLQotCS8qIENsZWFyIHRoZSBmb2xsb3dpbmcgb2Zmc2V0cyBpbiBNZW1vcnkgUmFuZ2UgIzI6ICovCi0JbWVtc2V0X2lvKGRhdGEgKyAweDUwNDAsIDAsIDB4YSAqIDQpOwotCW1lbXNldF9pbyhkYXRhICsgMHg1MDgwLCAwLCAweGEgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NTBjMCwgMCwgMHhhICogNCk7Ci0JbWVtc2V0X2lvKGRhdGEgKyAweDU0MDAsIDAsIDB4ODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NjAwMCwgMCwgMHgyODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4NzAwMCwgMCwgMHgyODAgKiA0KTsKLQltZW1zZXRfaW8oZGF0YSArIDB4ODAwMCwgMCwgMHgyODAgKiA0KTsKLQotCS8qIEluaXRpYWxpemUgdGhlIEZvbGxvd2luZyBSZWdpc3RlcnMgQWNjb3JkaW5nIHRvIFBDSSBSZXZpc2lvbiBJRCAqLwotCWlmIChwcml2LT5yZXZpZCA9PSAwKSB7Ci0JCS8qIGZpeG1lIHRoZSBwYXJ0IGhhc24ndCBiZWVuIHVwZGF0ZSBidXQgYmVsb3cgaGFzIGJlZW4gdXBkYXRlCi0JCSAgIGJhc2VkIG9uIFdHTTUxMSAqLwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4Zik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMSwgMHgxZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMiwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBME9WRSwgMHgxMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0FJQ0NIQTFPVkUsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBLCAweDY0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEFMLCAweDRiKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDB4NGIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9EVU5TQVQsIDB4MTQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9EU0FULCAweDI0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREZJUkNBTCwgMHg4KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUEsIDB4MWEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ER0NUTDExQiwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTklOSVQsIDB4ZCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RITk9TSUcsIDB4MSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPQVJTVEVQLCAweDcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQSwgMHgyOCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJRlNUMTFCLCAweDI4KTsKLQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9DV0RFVEVDKTsKLQkJcmVnIHw9IDB4MTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ1dERVRFQywgcmVnKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgzOCwgMHgxZSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTElTVEFOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05NRUFTQU5ULCAweDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQ0FQVEFOVCwgMHgzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUEsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQMTFCLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFBLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFCLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USExFVkRSTywgMHgxMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX01BWFJYVElNRTExQSwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFCLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSVElNRSwgMHgxOTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDB4NzgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDB4MWMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT1JSRFJPUCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDRCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUE9XRElGRiwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEVTVEJVUywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCAweDFmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhKVU1QLCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dFUiwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhQT1dDTElQLCAweDMwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIUlgxMUJQT1dNSU4sIDB4MTkpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE0YywgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgxNTAsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwMCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5NDBjLCAweDZmZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQyOCwgMHhhMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzA0LCAweDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzBjLCAweDdmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzM0LCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGMwMDAsIDB4MzhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxOCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNjAwMCwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzU0LCAweGEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjMWMsIDB4NSk7Ci0JfSBlbHNlIGlmIChwcml2LT5yZXZpZCA+IDApIHsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MjEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9BSUNDSEEwT1ZFLCAweDExKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfQUlDQ0hBMU9WRSwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFVOU0FULCAweDE0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRFNBVCwgMHgyNCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RGSVJDQUwsIDB4OCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RHQ1RMMTFBLCAweDFhKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfREdDVEwxMUIsIDB4Myk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5JTklULCAweGQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USE5PU0lHLCAweDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DT0FSU1RFUCwgMHg3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lGU1QxMUEsIDB4MjgpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUZTVDExQiwgMHgyOCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NXREVURUMsIDB4MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMzgsIDB4MWUpOwotLyoJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsqLwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUEsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUDExQiwgMHgzMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0FQUlgxMUEsIDB4MzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENBUFJYMTFCLCAweDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhMRVZEUk8sIDB4MTApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhSWFRJTUUxMUEsIDB4MWFkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTUFYUlhUSU1FMTFCLCAweGExMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPUlJUSU1FLCAweDE5MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0NPUlJEUk9QLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENELCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USENTLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9NQVhQT1dESUZGLCAweDQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9URVNUQlVTLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEpVTVAsIDB4MWUpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFBPV0VSLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USFBPV0NMSVAsIDB4MmEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCAweDNjKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhSWDExQlBPV01JTiwgMHgxOSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSXzBYMTRjLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl8wWDE1MCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9XQVRDSERPRywgMHgzNyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQwMCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5NDBjLCAweDZmZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQyOCwgMHhhMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4OTQzNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzA0LCAweDE1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzBjLCAweDdmKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHg5YzM0LCAweDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGMwMDAsIDB4MzhkKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxNCwgMHgxMDAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNDAxOCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxNjAwMCwgMHgxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwNCwgMHgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzU0LCAweGEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCAweGVjMWMsIDB4NTApOwotCX0gZWxzZSBpZiAocHJpdi0+cmV2aWQgPiAxKSB7Ci0JCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHhlYzE4KTsKLQkJcmVnIHw9IDB4ODsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzE4LCByZWcpOwotCX0KLQotCS8qIFdyaXRlIHRoZSBUWCBGaXIgQ29lZmZpY2llbnQgVGFibGUgKi8KLQl0eF9maXJfdGFibGVfaW5pdChwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnICY9IH4weDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUExMQ1RMKTsKLQlyZWcgfD0gMHgxOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCByZWcpOwotCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweDFhMDMwKTsgKi8KLS8qIAlyZWcgJj0gfjB4NDsgKi8KLS8qIAlhZ254X3dyaXRlMzIoY3RsLCAweDFhMDMwLCByZWcpOyAqLwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVFJBQ05UNCwgMHgxMTMpOwotfSAvKiBwaHlfaW5pdCAqLwotCi1zdGF0aWMgdm9pZCBjaGlwX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQliYW5kX21hbmFnZW1lbnRfaW5pdChwcml2KTsKLQotCXJmX2NoaXBzX2luaXQocHJpdik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUE1DVEwpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTUNUTCwgcmVnKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIFBIWSAqLwotCXBoeV9pbml0KHByaXYpOwotCi0JZW5jcnlwdGlvbl9pbml0KHByaXYpOwotCi0JdHhfbWFuYWdlbWVudF9pbml0KHByaXYpOwotCi0JcnhfbWFuYWdlbWVudF9pbml0KHByaXYpOwotCi0JcG93ZXJfbWFuYWdlX2luaXQocHJpdik7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBUaW1lcnMgKi8KLQlhZ254X3RpbWVyX2luaXQocHJpdik7Ci0KLQkvKiBXcml0ZSAweGMzOTBiZjkgdG8gSW50ZXJydXB0IE1hc2sgKERpc2FibGUgVFgpICovCi0JcmVnID0gMHhjMzkwYmY5ICYgfklSUV9UWF9CRUFDT047Ci0JcmVnICY9IH5JUlFfVFhfRElTQUJMRTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0lOVF9NQVNLLCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwpOwotCXJlZyB8PSAweDgwMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9CTEtDVEwsIHJlZyk7Ci0KLQkvKiBzZXQgaXQgd2hlbiBuZWVkIGdldCBtdWx0aWNhc3QgZW5hYmxlPyAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fTVRTTSwgMHhmZik7Ci19IC8qIGNoaXBfaW5pdCAqLwotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJvbWlzX2FuZF9tYW5hZ2VkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgxMCB8IDB4Mik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgxMCB8IDB4Mik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2xlYXJuX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDgpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9zY2FuX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCS8qIGFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MjEwKTsqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIDB4MTApOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9tYW5hZ2VkX21vZGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9TWVNNT0RFLCAweDIpOwotfQotc3RhdGljIGlubGluZSB2b2lkIHNldF9hZGhvY19tb2RlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSwgMHgwKTsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkIHVua25vd19yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDAsIDB4M2UpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0LCAweGIyKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4OCwgMHgxNDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHhjLCAweDFDMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDEwLCAweDFGRik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDE0LCAweDFERCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDE4LCAweDE1Rik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDFjLCAweEExKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjAsIDB4M0U3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjQsIDB4MzZCKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MjgsIDB4MzQ4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MmMsIDB4MzdEKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzAsIDB4M0RFKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4MzQsIDB4MzYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHgzOCwgMHg2NCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9VTktOT1dOX0JBU0UgKyAweDNjLCAweDU3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NDAsIDB4MjMpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0NCwgMHgzRUQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0OCwgMHgzQzkpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg0YywgMHgzQ0EpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1MCwgMHgzRTcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1NCwgMHg4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1VOS05PV05fQkFTRSArIDB4NTgsIDB4MUYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVU5LTk9XTl9CQVNFICsgMHg1YywgMHgxYSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgY2FyZF9pbnRlcmZhY2VfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXU4IGJzc2lkW0VUSF9BTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQl1MzIgcmVnOwotCXVuc2lnbmVkIGludCBpOwotCUFHTlhfVFJBQ0U7Ci0KLQltaWdodF9zbGVlcCgpOwotCS8qIENsZWFyIFJYIENvbnRyb2wgYW5kIEVuYWJsZSBSWCBxdWV1ZXMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgMHg4KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogRG8gYSBmdWxsIHJlc2V0IG9mIHRoZSBjYXJkICovCi0JY2FyZF9mdWxsX3Jlc2V0KHByaXYpOwotCW1pZ2h0X3NsZWVwKCk7Ci0KLQkvKiBDaGVjayBhbmQgc2V0IENhcmQgRW5kaWFubmVzcyAqLwotCXJlZyA9IGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX0VORElBTik7Ci0JLyogVE9ETyBJZiBub3QgMHhCM0IyQjFCMCBzZXQgdG8gMHhCM0IyQjFCMCAqLwotCXByaW50ayhLRVJOX0lORk8gUEZYICJDSVJfRU5ESUFOIGlzICV4XG4iLCByZWcpOwotCi0KLQkvKiBDb25maWcgdGhlIGVlcHJvbSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURiwgMHg3MDAwMDg2KTsKLQl1ZGVsYXkoMTApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDgwMDAwMDMzKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCi0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9JTik7Ci0JdWRlbGF5KDEwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURik7Ci0KLQkvKiBEdW1wIHRoZSBlZXByb20gKi8KLQlkbyB7Ci0JCWNoYXIgZWVwcm9tWzB4MTAwMDAwLzB4MTAwXTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMHgxMDAwMDA7IGkgKz0gMHgxMDApIHsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1NFUklBTElURiwgMHgzMDAwMDAwICsgaSk7Ci0JCQl1ZGVsYXkoMTMpOwotCQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0NJUl9TRVJJQUxJVEYpOwotCQkJdWRlbGF5KDcwKTsKLQkJCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfU0VSSUFMSVRGKTsKLQkJCWVlcHJvbVtpLzB4MTAwXSA9IHJlZyAmIDB4RkY7Ci0JCQl1ZGVsYXkoMTApOwotCQl9Ci0JCXByaW50X2hleF9kdW1wX2J5dGVzKFBGWCAiRUVQUk9NOiAiLCBEVU1QX1BSRUZJWF9OT05FLCBlZXByb20sCi0JCQkJICAgICBBUlJBWV9TSVpFKGVlcHJvbSkpOwotCX0gd2hpbGUgKDApOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gaW50ZXJmYWNlICovCi0Jc3lzdGVtX2l0Zl9pbml0KHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBDaGlwIEluaXRpYWxpemF0aW9uIChQb2xhcmlzKSAqLwotCWNoaXBfaW5pdChwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogQ2FsaWJyYXRlIHRoZSBhbnRlbm5hZSAqLwotCWFudGVubmFfY2FsaWJyYXRlKHByaXYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCAweGVjNTApOwotCXJlZyAmPSB+MHg0MDsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIHJlZyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNULCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUE1fUExMQ1RMLCAweDEpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0JNX0JNQ1RMKTsKLQlyZWcgfD0gMHg4MDAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fQk1DVEwsIHJlZyk7Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TWVNJVEZfU1lTTU9ERSk7Ci0JcmVnIHw9IDB4MjAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1lTSVRGX1NZU01PREUsIHJlZyk7Ci0JZW5hYmxlX3JlY2VpdmVyKHByaXYpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBJbml0aWFsaXplIEdhaW4gQ29udHJvbCBDb3VudHMgKi8KLQlnYWluX2N0bGNudF9pbml0KHByaXYpOwotCi0JLyogV3JpdGUgSW5pdGlhbCBTdGF0aW9uIFBvd2VyIFRlbXBsYXRlIGZvciB0aGlzIHN0YXRpb24oIzApICovCi0Jc3RhX3Bvd2VyX2luaXQocHJpdiwgTE9DQUxfU1RBSUQpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQkvKiBJbml0aWFsaXplIHRoZSByeCx0ZCx0bSByaW5ncywgZm9yIGVhY2ggbm9kZSBpbiB0aGUgcmluZyAqLwotCWZpbGxfcmluZ3MocHJpdik7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIDB4ODAwMDAwMzMpOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHhjKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIDB4MCk7Ci0KLQkvKiBGSVhNRSBJbml0aWFsaXplIHRoZSB0cmFuc21pdCBjb250cm9sIHJlZ2lzdGVyICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9UWE1fQ1RMLCAweDE5NGMxKTsKLQotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCW1pZ2h0X3NsZWVwKCk7Ci0JLyogRklYTUUgU2V0IHRoZSBSZWNlaXZlIENvbnRyb2wgTWFjIEFkZHJlc3MgdG8gY2FyZCBhZGRyZXNzICovCi0JbWFjX2FkZHJlc3Nfc2V0KHByaXYpOwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLQltaWdodF9zbGVlcCgpOwotCi0JLyogU2V0IHRoZSByZWNpZXZlIHJlcXVlc3QgcmF0ZSAqLwotCS8qIEZJWE1FIEVuYWJsZSB0aGUgcmVxdWVzdCAqLwotCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KLQkvKiBTZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKglhZ254X3dyaXRlMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFLCAweDg4MTk1ZTAwKTsgKi8KLS8qCWVuYWJsZV9yZWNlaXZlcihwcml2KTsgKi8KLQotCS8qIFNldCB0aGUgUmVjZWl2ZXIgQlNTSUQgKi8KLQlyZWNlaXZlcl9ic3NpZF9zZXQocHJpdiwgYnNzaWQpOwotCi0JLyogRklYTUUgU2V0IHRvIG1hbmFnZWQgbW9kZSAqLwotCXNldF9tYW5hZ2VkX21vZGUocHJpdik7Ci0vKglzZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2KTsgKi8KLS8qCXNldF9zY2FuX21vZGUocHJpdik7ICovCi0vKglzZXRfbGVhcm5fbW9kZShwcml2KTsgKi8KLS8qCXNldF9wcm9taXNfYW5kX21hbmFnZWQocHJpdik7ICovCi0vKglzZXRfYWRob2NfbW9kZShwcml2KTsgKi8KLQotCS8qIFNldCB0aGUgcmVjaWV2ZSByZXF1ZXN0IHJhdGUgKi8KLQkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHgwODAwMDAwMCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1JYTV9SRVFSQVRFKTsKLQkvKiBTZXQgbWF4aW11bSBwYWNrZXQgbGVuZ3RoICovCi0JcmVnIHw9IDB4MDAxOTVlMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgcmVnKTsKLQotCS8qIENvbmZpZ3VyZSB0aGUgUlggYW5kIFRYIGludGVycnVwdCAqLwotCXJlZyA9IEVOQUJMRV9SWF9JTlRFUlJVUFQgfCBSWF9DQUNIRV9MSU5FIHwgRlJBR19MRU5fMjA0OCB8IEZSQUdfQkU7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDRkcsIHJlZyk7Ci0JLyogRklYTUUgKi8KLQlyZWcgPSBFTkFCTEVfVFhfSU5URVJSVVBUIHwgVFhfQ0FDSEVfTElORSB8IEZSQUdfTEVOXzIwNDggfCBGUkFHX0JFOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYQ0ZHLCByZWcpOwotCi0JLyogRW5hYmxlIFJYIFRYIEludGVycnVwdHMgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9SWENUTCwgMHg4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhNQ1RMLCAweDgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWERDVEwsIDB4ODApOwotCi0JLyogRklYTUUgU2V0IHRoZSBtYXN0ZXIgY29udHJvbCBpbnRlcnJ1cHQgaW4gYmxvY2sgY29udHJvbCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCwgMHg4MDApOwotCi0JLyogRW5hYmxlIFJYIGFuZCBUWCBxdWV1ZXMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1JYQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ1RMLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfVFhNQ1RMKTsKLQlyZWcgfD0gMHg4OwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTUNUTCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfQ0lSX1RYRENUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWERDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQsIDB4NSk7Ci0JLyogRklYTUUgKi8KLQkvKiAgdW5rbm93X3JlZ2lzdGVyX3dyaXRlKHByaXYpOyAqLwotCS8qIFVwZGF0ZSBsb2NhbCBjYXJkIGhhc2ggZW50cnkgKi8KLQloYXNoX3dyaXRlKHByaXYsIHByaXYtPm1hY19hZGRyLCBMT0NBTF9TVEFJRCk7Ci0KLQltaWdodF9zbGVlcCgpOwotCi0JLyogRklYTUUgKi8KLQlhZ254X3NldF9jaGFubmVsKHByaXYsIDEpOwotCW1pZ2h0X3NsZWVwKCk7Ci19IC8qIGFnbnhfY2FyZF9pbnRlcmZhY2VfaW5pdCAqLwotCi0KLXZvaWQgYWdueF9od19pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JQUdOWF9UUkFDRTsKLQltaWdodF9zbGVlcCgpOwotCWNhcmRfaW50ZXJmYWNlX2luaXQocHJpdik7Ci19Ci0KLWludCBhZ254X2h3X3Jlc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIGNhcmRfZnVsbF9yZXNldChwcml2KTsKLX0KLQotaW50IGFnbnhfc2V0X3NzaWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQlBR05YX1RSQUNFOwotCXJldHVybiAwOwotfQotCi12b2lkIGFnbnhfc2V0X2Jzc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCkKLXsKLQlyZWNlaXZlcl9ic3NpZF9zZXQocHJpdiwgYnNzaWQpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk1NWYwNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0jaWZuZGVmIEFHTlhfUEhZX0hfCi0jZGVmaW5lIEFHTlhfUEhZX0hfCi0KLSNpbmNsdWRlICJhZ254LmgiCi0KLS8qIFRyYW5zbWlzc2lvbiBNYW5hZ21lbnQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfVFhNX0JBU0UJCTB4MDAwMAotI2RlZmluZSBBR05YX1RYTV9DVEwJCTB4MDAwMAkvKiBjb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFHTlhfVFhNX0VUTUYJCTB4MDAwNCAvKiBlbmFibGUgdHJhbnNtaXNzaW9uIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCi0jZGVmaW5lIEFHTlhfVFhNX1RYVEVNUAkJMHgwMDA4IC8qIHRyYW5zbWlzc2lvbiB0ZW1wbGF0ZSAqLwotI2RlZmluZSBBR05YX1RYTV9SRVRSWVNUQUlECTB4MDAwYyAvKiBSZXRyeSBTdGF0aW9uIElEICovCi0jZGVmaW5lIEFHTlhfVFhNX1RJTUVTVEFNUExPCQkweDAwMTAJLyogVGltZXN0YW1wIExvICovCi0jZGVmaW5lIEFHTlhfVFhNX1RJTUVTVEFNUEhJCQkweDAwMTQJLyogVGltZXN0YW1wIEhpICovCi0jZGVmaW5lIEFHTlhfVFhNX1RYREVMQVkJMHgwMDE4ICAvKiB0eCBkZWxheSAqLwotI2RlZmluZSBBR05YX1RYTV9UQlRUTE8JCTB4MDAyMAkvKiB0YnR0IExvICovCi0jZGVmaW5lIEFHTlhfVFhNX1RCVFRISQkJMHgwMDI0CS8qIHRidHQgSGkgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQkVBSU5URVIJMHgwMDI4IC8qIEJlYWNvbiBJbnRlcnZhbCAqLwotI2RlZmluZSBBR05YX1RYTV9OQVYJCTB4MDAzMCAvKiBOQVYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZQTURWCQkweDAwMzQgLyogQ0ZQIE1EViAqLwotI2RlZmluZSBBR05YX1RYTV9DRlBFUkNOVAkweDAwMzggLyogQ0ZQIHBlcmlvZCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9QUk9CREVMQVkJMHgwMDNjIC8qIHByb2JlIGRlbGF5ICovCi0jZGVmaW5lIEFHTlhfVFhNX0xJU0lOVEVSQ05UCTB4MDA0MCAvKiBsaXN0ZW4gaW50ZXJ2YWwgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fRFRJTVBFUklDTlQJMHgwMDRjIC8qIERUSU0gcGVyaW9kIGNvdW50ICovCi0KLSNkZWZpbmUgQUdOWF9UWE1fQkVBQ09OX0NUTAkweDAwNWMgLyogYmVhY29uIGNvbnRyb2wgKi8KLQotI2RlZmluZSBBR05YX1RYTV9TQ0hFTVBDTlQJMHgwMDdjIC8qIHNjaGVkdWxlIGVtcHR5IGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWFRJTU9VVAkweDAwODQgLyogbWF4IHRpbWVvdXQgZXhjZWVkIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWENGUFRJTQkweDAwODggLyogbWF4IENGIHBvbGwgdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9NQVhSWFRJTUUJMHgwMDhjIC8qIG1heCBSWCB0aW1lb3V0IGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX01BWEFDS1RJTQkweDAwOTAJLyogbWF4IEFDSyB0aW1lb3V0IGNvdW50ICovCi0jZGVmaW5lIEFHTlhfVFhNX0RJRjAxCQkweDAwYTAgLyogRElGIDAtMSAqLwotI2RlZmluZSBBR05YX1RYTV9ESUYyMwkJMHgwMGE0IC8qIERJRiAyLTMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fRElGNDUJCTB4MDBhOCAvKiBESUYgNC01ICovCi0jZGVmaW5lIEFHTlhfVFhNX0RJRjY3CQkweDAwYWMgLyogRElGIDYtNyAqLwotI2RlZmluZSBBR05YX1RYTV9TSUZTUElGUwkweDAwYjAgLyogU0lGUy9QSUZTICovCi0jZGVmaW5lIEFHTlhfVFhNX1RJRlNFSUZTCTB4MDBiNCAvKiBUSUZTL0VJRlMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fTUFYQ0NBQ05UU0xPVAkweDAwYjggLyogbWF4IENDQSBjb3VudCBzbG90ICovCi0jZGVmaW5lIEFHTlhfVFhNX1NMT1RMSU1JVAkweDAwYmMgLyogc2xvdCBsaW1pdC8xIG1zZWMgbGltaXQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ0ZQT0xMUlhUSU0JMHgwMGYwIC8qIENGIHBvbGwgUlggdGltZW91dCBjb3VudCAqLwotI2RlZmluZSBBR05YX1RYTV9DRkFDS1QxMUIJMHgwMGY0IC8qIENGIGFjayB0aW1lb3V0IGxpbWl0IGZvciAxMWIgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1cwCQkweDAxMDAgLyogQ1cgMCAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTAJMHgwMTA4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDAgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1cxCQkweDAxMjAgLyogQ1cgMSAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTEJMHgwMTI4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDEgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1cyCQkweDAxNDAgLyogQ1cgMiAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTIJMHgwMTQ4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDIgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1czCQkweDAxNjAgLyogQ1cgMyAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTMJMHgwMTY4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDMgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1c0CQkweDAxODAgLyogQ1cgNCAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTQJMHgwMTg4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDQgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1c1CQkweDAxYTAgLyogQ1cgNSAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTUJMHgwMWE4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDUgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1c2CQkweDAxYzAgLyogQ1cgNiAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTYJMHgwMWM4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDYgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQ1c3CQkweDAxZTAgLyogQ1cgNyAqLwotI2RlZmluZSBBR05YX1RYTV9TTEJFQUxJTTcJMHgwMWU4IC8qIHNob3J0L2xvbmcgYmVhY29uIGxpbWl0IDcgKi8KLSNkZWZpbmUgQUdOWF9UWE1fQkVBQ09OVEVNUCAgICAgMHgxMDAwCS8qIGJlYWNvbiB0ZW1wbGF0ZSAqLwotI2RlZmluZSBBR05YX1RYTV9TVEFQT1dURU1QCTB4MWEwMCAvKiAgU3RhdGlvbiBQb3dlciBUZW1wbGF0ZSAqLwotCi0vKiBSZWNlaXZlIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQUdOWF9SWE1fQkFTRQkJMHgyMDAwCi0jZGVmaW5lIEFHTlhfUlhNX1JFUVJBVEUJMHgyMDAwCS8qIHJlcXVlc3RlZCByYXRlICovCi0jZGVmaW5lIEFHTlhfUlhNX01BQ0hJCQkweDIwMDQJLyogZmlyc3QgNCBieXRlcyBvZiBtYWMgYWRkcmVzcyAqLwotI2RlZmluZSBBR05YX1JYTV9NQUNMTwkJMHgyMDA4CS8qIGxhc3QgMiBieXRlcyBvZiBtYWMgYWRkcmVzcyAqLwotI2RlZmluZSBBR05YX1JYTV9CU1NJREhJCTB4MjAwYwkvKiBic3NpZCBoaSAqLwotI2RlZmluZSBBR05YX1JYTV9CU1NJRExPCTB4MjAxMAkvKiBic3NpZCBsbyAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0NNRF9GTEFHCTB4MjAxNAkvKiBGbGFncyBmb3IgdGhlIFJYIEhhc2ggQ29tbWFuZCBEZWZhdWx0OjAgKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9DTURfSElHSAkweDIwMTgJLyogVGhlIEhpZ2ggaGFsZiBvZiB0aGUgSGFzaCBDb21tYW5kICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfQ01EX0xPVwkweDIwMWMJLyogVGhlIExvdyBoYWxmIG9mIHRoZSBIYXNoIENvbW1hbmQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fUk9VVEFCCQkweDIwMjAJLyogcm91dGluZyB0YWJsZSAqLwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfU0hJRlQJMjQKLSNkZWZpbmUJCVJPVVRBQl9UWVBFX1NISUZUCTI4Ci0jZGVmaW5lCQlST1VUQUJfU1RBVFVTX1NISUZUCTMwCi0jZGVmaW5lCQlST1VUQUJfUldfU0hJRlQJCTMxCi0jZGVmaW5lCQlST1VUQUJfUk9VVEVfRFJPUAkweGYwMDAwMCAvKiBEcm9wICovCi0jZGVmaW5lCQlST1VUQUJfUk9VVEVfQ1BVCTB4NDAwMDAwIC8qIENQVSAqLwotI2RlZmluZQkJUk9VVEFCX1JPVVRFX0VOQ1JZCTB4NTAwODAwIC8qIEVuY3J5cHRpb24gKi8KLSNkZWZpbmUJCVJPVVRBQl9ST1VURV9SRlAJMHg4MDAwMDAgLyogUkZQICovCi0KLSNkZWZpbmUJCVJPVVRBQl9UWVBFX01BTkFHCTB4MCAvKiBNYW5hZ2VtZW50ICovCi0jZGVmaW5lCQlST1VUQUJfVFlQRV9DVEwJCTB4MSAvKiBDb250cm9sICovCi0jZGVmaW5lCQlST1VUQUJfVFlQRV9EQVRBCTB4MiAvKiBEYXRhICovCi0KLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX0RBVEEJCTB4MAotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfREFUQUFDSwkJMHgxCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9EQVRBUE9MTAkJMHgyCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9EQVRBUE9MTEFDSwkweDMKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX05VTEwJCTB4NCAvKiBOVUxMICovCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9OVUxMQUNLCQkweDUKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX05VTExQT0xMCQkweDYKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX05VTExQT0xMQUNLCTB4NwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQQkJMHg4IC8qIFFPUyBEQVRBICovCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NEQVRBQUNLCTB4OQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TREFUQVBPTEwJMHhhCi0jZGVmaW5lCQlST1VUQUJfU1VCVFlQRV9RT1NEQVRBQUNLUE9MTAkweGIKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTEwJCTB4YwotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TTlVMTEFDSwkweGQKLSNkZWZpbmUJCVJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMCTB4ZQotI2RlZmluZQkJUk9VVEFCX1NVQlRZUEVfUU9TTlVMTFBPTExBQ0sJMHhmCi0jZGVmaW5lIEFHTlhfUlhNX0RFTEFZMTEJICAgMHgyMDI0CS8qIGRlbGF5IDExKEFCKSAqLwotI2RlZmluZSBBR05YX1JYTV9TT0ZfQ05UCSAgIDB4MjAyOAkvKiBTT0YgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fRlJBR19DTlQJICAgMHgyMDJjCS8qIEZyYWdtZW50IENvdW50Ki8KLSNkZWZpbmUgQUdOWF9SWE1fRkNTX0NOVAkgICAweDIwMzAJLyogRkNTIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX0JTU0lEX01JU1NfQ05UCSAgIDB4MjAzNAkvKiBCU1NJRCBNaXNzIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX1BEVV9FUlJfQ05UCSAgIDB4MjAzOAkvKiBQRFUgRXJyb3IgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fREVTVF9NSVNTX0NOVAkgICAweDIwM0MJLyogRGVzdGluYXRpb24gTWlzcyBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9EUk9QX0NOVAkgICAweDIwNDAJLyogRHJvcCBDb3VudCAqLwotI2RlZmluZSBBR05YX1JYTV9BQk9SVF9DTlQJICAgMHgyMDQ0CS8qIEFib3J0IENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX1JFTEFZX0NOVAkgICAweDIwNDgJLyogUmVsYXkgQ291bnQgKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9NSVNTX0NOVAkgICAweDIwNGMJLyogSGFzaCBNaXNzIENvdW50ICovCi0jZGVmaW5lIEFHTlhfUlhNX1NBX0hJCQkgICAweDIwNTAJLyogQWRkcmVzcyBvZiByZWNlaXZlZCBwYWNrZXQgSGkgKi8KLSNkZWZpbmUgQUdOWF9SWE1fU0FfTE8JCSAgIDB4MjA1NAkvKiBBZGRyZXNzIG9mIHJlY2VpdmVkIHBhY2tldCBMbyAqLwotI2RlZmluZSBBR05YX1JYTV9IQVNIX0RVTVBfTFNUCSAgIDB4MjEwMAkvKiBDb250YWlucyBIYXNoIERhdGEgKi8KLSNkZWZpbmUgQUdOWF9SWE1fSEFTSF9EVU1QX01TVAkgICAweDIxMDQJLyogQ29udGFpbnMgSGFzaCBEYXRhICovCi0jZGVmaW5lIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBICAgIDB4MjEwOAkvKiBUaGUgU3RhdGlvbiBJRCB0byBkdW1wICovCi0KLQotLyogRW5jcnlwdGlvbiBNYW5hZ21lbnQgKi8KLSNkZWZpbmUgQUdOWF9FTkNSWV9CQVNFCQkweDI0MDAKLSNkZWZpbmUgQUdOWF9FTkNSWV9XRVBLRVkwCTB4MjQ0MCAvKiB3ZXAga2V5ICMwICovCi0jZGVmaW5lIEFHTlhfRU5DUllfV0VQS0VZMQkweDI0NDQgLyogd2VwIGtleSAjMSAqLwotI2RlZmluZSBBR05YX0VOQ1JZX1dFUEtFWTIJMHgyNDQ4IC8qIHdlcCBrZXkgIzIgKi8KLSNkZWZpbmUgQUdOWF9FTkNSWV9XRVBLRVkzCTB4MjQ0YyAvKiB3ZXAga2V5ICMzICovCi0jZGVmaW5lIEFHTlhfRU5DUllfQ0NNUkVDVEwJMHgyNDYwIC8qIGNjbSByZXBsYXkgY29udHJvbCAqLwotCi0KLS8qIEJhbmQgTWFuYWdlbWVudCBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgQUdOWF9CTV9CQVNFCQkweDJjMDAKLSNkZWZpbmUgQUdOWF9CTV9CTUNUTAkJMHgyYzAwICAvKiBiYW5kIG1hbmFnZW1lbnQgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX1RYV0FERFIJCTB4MmMxOCAgLyogdHggd29ya3F1ZXVlIGFkZHJlc3Mgc3RhcnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9UWFRPUEVFUgkweDJjMjQJLyogdHJhbnNtaXQgdG8gcGVlcnMgKi8KLSNkZWZpbmUgQUdOWF9CTV9GUExIUAkJMHgyYzJjICAvKiBmcmVlIHBvb2wgbGlzdCBoZWFkIHBvaW50ZXIgKi8KLSNkZWZpbmUgQUdOWF9CTV9GUExUUAkJMHgyYzMwICAvKiBmcmVlIHBvb2wgbGlzdCB0YWlsIHBvaW50ZXIgKi8KLSNkZWZpbmUgQUdOWF9CTV9GUENOVAkJMHgyYzM0ICAvKiBmcmVlIHBvb2wgY291bnQgKi8KLSNkZWZpbmUgQUdOWF9CTV9DSVBEVVdDTlQJMHgyYzM4ICAvKiBjYXJkIGludGVyZmFjZSBwZHUgd29ya3F1ZXVlIGNvdW50ICovCi0jZGVmaW5lIEFHTlhfQk1fU1BQRFVXQ05UCTB4MmMzYyAgLyogc3AgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX1JGUFBEVVdDTlQJMHgyYzQwICAvKiByZnAgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX1JIUFBEVVdDTlQJMHgyYzQ0ICAvKiByaHAgcGR1IHdvcmtxdWV1ZSBjb3VudCAqLwotI2RlZmluZSBBR05YX0JNX0NJV1FDVEwJCTB4MmM0OCAvKiBDYXJkIEludGVyZmFjZSBXb3JrUXVldWUgQ29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVVRYV0NUTAkweDJjNTAgIC8qIGNwdSB0eCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVVJYV0NUTAkweDJjNTggIC8qIGNwdSByeCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX0NQVUxXQ1RMCTB4MmM2MCAvKiBjcHUgbG93IHdvcmtxdWV1ZSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQk1fQ1BVSFdDVEwJMHgyYzY4IC8qIGNwdSBoaWdoIHdvcmtxdWV1ZSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQk1fU1BUWFdDVEwJMHgyYzcwIC8qIHNwIHR4IHdvcmtxdWV1ZSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQk1fU1BSWFdDVEwJMHgyYzc4IC8qIHNwIHJ4IHdvcmtxdWV1ZSBjb250cm9sICovCi0jZGVmaW5lIEFHTlhfQk1fUkZQV0NUTAkJMHgyYzgwIC8qIFJGUCB3b3JrcXVldWUgY29udHJvbCAqLwotI2RlZmluZSBBR05YX0JNX01UU00JCTB4MmM5MCAvKiBNdWx0aWNhc3QgVHJhbnNtaXQgU3RhdGlvbiBNYXNrICovCi0KLS8qIENhcmQgSW50ZXJmYWNlIFJlZ2lzdGVycyAoMzJiaXRzKSAqLwotI2RlZmluZSBBR05YX0NJUl9CQVNFCQkweDMwMDAKLSNkZWZpbmUgQUdOWF9DSVJfQkxLQ1RMCQkweDMwMDAJLyogYmxvY2sgY29udHJvbCovCi0jZGVmaW5lCQlBR05YX1NUQVRfVFgJMHgxCi0jZGVmaW5lCQlBR05YX1NUQVRfUlgJMHgyCi0jZGVmaW5lCQlBR05YX1NUQVRfWAkweDQKLS8qIEJlbG93IHR3byBpbnRlcnJ1cHQgZmxhZ3Mgd2lsbCBiZSBzZXQgYnkgb3VyIGJ1dCBub3QgQ1BVIG9yIHRoZSBjYXJkICovCi0jZGVmaW5lCQlBR05YX1NUQVRfVFhECTB4MTAKLSNkZWZpbmUJCUFHTlhfU1RBVF9UWE0JMHgyMAotCi0jZGVmaW5lIEFHTlhfQ0lSX0FERFJXSU4JMHgzMDA0CS8qIEFkZHJlc3NhYmxlIFdpbmRvd3MqLwotI2RlZmluZSBBR05YX0NJUl9FTkRJQU4JCTB4MzAwOCAgLyogY2FyZCBlbmRpYW5uZXNzICovCi0jZGVmaW5lIEFHTlhfQ0lSX1NFUklBTElURgkweDMwMjAJLyogc2VyaWFsIGludGVyZmFjZSAqLwotI2RlZmluZSBBR05YX0NJUl9SWENGRwkJMHgzMDQwCS8qIHJlY2VpdmUgY29uZmlnICovCi0jZGVmaW5lCQlFTkFCTEVfUlhfSU5URVJSVVBUIDB4MjAKLSNkZWZpbmUJCVJYX0NBQ0hFX0xJTkUJICAgIDB4OAotLyogdGhlIFJYIGZyYWdtZW50IGxlbmd0aCAqLwotI2RlZmluZQkJRlJBR19MRU5fMjU2CTB4MCAvKiAyNTZCICovCi0jZGVmaW5lCQlGUkFHX0xFTl81MTIJMHgxCi0jZGVmaW5lCQlGUkFHX0xFTl8xMDI0CTB4MgotI2RlZmluZQkJRlJBR19MRU5fMjA0OAkweDMKLSNkZWZpbmUJCUZSQUdfQkUJCTB4MTAKLSNkZWZpbmUgQUdOWF9DSVJfUlhDVEwJCTB4MzA1MAkvKiByZWNlaXZlIGNvbnRyb2wgKi8KLS8qIG1lbW9yeSBhZGRyZXNzLCBjaGlwc2lkZSAqLwotI2RlZmluZSBBR05YX0NJUl9SWENNU1RBUlQJMHgzMDU0CS8qIHJlY2VpdmUgY2xpZW50IG1lbW9yeSBzdGFydCAqLwotI2RlZmluZSBBR05YX0NJUl9SWENNRU5ECTB4MzA1OAkvKiByZWNlaXZlIGNsaWVudCBtZW1vcnkgZW5kICovCi0vKiBtZW1vcnkgYWRkcmVzcywgcGNpICovCi0jZGVmaW5lIEFHTlhfQ0lSX1JYSE9TVEFERFIJMHgzMDYwCS8qIHJlY2VpdmUgaG9zdHNpZGUgYWRkcmVzcyAqLwotLyogbWVtb3J5IGFkZHJlc3MsIGNoaXBzaWRlICovCi0jZGVmaW5lIEFHTlhfQ0lSX1JYQ0xJQUREUgkweDMwNjQJLyogcmVjZWl2ZSBjbGllbnRzaWRlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUdOWF9DSVJfUlhETUFDVEwJMHgzMDY4CS8qIHJlY2VpdmUgZG1hIGNvbnRyb2wgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhDRkcJCTB4MzA4MAkvKiB0cmFuc21pdCBjb25maWcgKi8KLSNkZWZpbmUgQUdOWF9DSVJfVFhNQ1RMCQkweDMwOTAgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBDb250cm9sICovCi0jZGVmaW5lCQlFTkFCTEVfVFhfSU5URVJSVVBUIDB4MjAKLSNkZWZpbmUJCVRYX0NBQ0hFX0xJTkUJICAgIDB4OAotI2RlZmluZSBBR05YX0NJUl9UWE1TVEFSVAkweDMwOTQgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBTdGFydCAqLwotI2RlZmluZSBBR05YX0NJUl9UWE1FTkQJCTB4MzA5OCAvKiBUcmFuc21pdCBNYW5hZ2VtZW50IEVuZCAqLwotI2RlZmluZSBBR05YX0NJUl9UWERDVEwJCTB4MzBhMAkvKiB0cmFuc21pdCBkYXRhIGNvbnRyb2wgKi8KLS8qIG1lbWVvcnkgYWRkcmVzcywgY2hpcHNldCAqLwotI2RlZmluZSBBR05YX0NJUl9UWERTVEFSVAkweDMwYTQJLyogdHJhbnNtaXQgZGF0YSBzdGFydCAqLwotI2RlZmluZSBBR05YX0NJUl9UWERFTkQJCTB4MzBhOAkvKiB0cmFuc21pdCBkYXRhIGVuZCAqLwotI2RlZmluZSBBR05YX0NJUl9UWE1IQUREUgkweDMwYjAgLyogVHJhbnNtaXQgTWFuYWdlbWVudCBIb3N0c2lkZSBBZGRyZXNzICovCi0jZGVmaW5lIEFHTlhfQ0lSX1RYTUNBRERSCTB4MzBiNCAvKiBUcmFuc21pdCBNYW5hZ2VtZW50IENsaWVudHNpZGUgQWRkcmVzcyAqLwotI2RlZmluZSBBR05YX0NJUl9UWERNQUNUTAkweDMwYjgJLyogdHJhbnNtaXQgZG1hIGNvbnRyb2wgKi8KLQotCi0vKiBQb3dlciBNYW5hZ21lbnQgVW5pdCAqLwotI2RlZmluZSBBR05YX1BNX0JBU0UJCTB4M2MwMAotI2RlZmluZSBBR05YX1BNX1BNQ1RMCQkweDNjMDAJLyogUE0gQ29udHJvbCovCi0jZGVmaW5lIEFHTlhfUE1fTUFDTVNXCQkweDNjMDggLyogTUFDIE1hbnVhbCBTbG93IFdvcmsgRW5hYmxlICovCi0jZGVmaW5lIEFHTlhfUE1fUkZDVEwJCTB4M2MwYyAvKiBSRiBDb250cm9sICovCi0jZGVmaW5lIEFHTlhfUE1fUEhZTVcJCTB4M2MxNAkvKiBQaHkgTWFubmFsIFdvcmsgKi8KLSNkZWZpbmUgQUdOWF9QTV9TT0ZUUlNUCQkweDNjMTgJLyogUE1VIFNvZnQgUmVzZXQgKi8KLSNkZWZpbmUgQUdOWF9QTV9QTExDVEwJCTB4M2MxYwkvKiBQTVUgUExMIGNvbnRyb2wqLwotI2RlZmluZSBBR05YX1BNX1RFU1RQSFkJCTB4M2MyNCAvKiBQTVUgVGVzdCBQaHkgKi8KLQotCi0vKiBJbnRlcnJ1cHQgQ29udHJvbCBpbnRlcmZhY2UgKi8KLSNkZWZpbmUgQUdOWF9JTlRfQkFTRQkJMHg0MDAwCi0jZGVmaW5lIEFHTlhfSU5UX1NUQVQJCTB4NDAwMAkvKiBpbnRlcnJ1cHQgc3RhdHVzICovCi0jZGVmaW5lIEFHTlhfSU5UX01BU0sJCTB4NDAwYwkvKiBpbnRlcnJ1cHQgbWFzayAqLwotLyogRklYTUUgKi8KLSNkZWZpbmUJCUlSUV9UWF9CRUFDT04JMHgxCS8qIFRYIEJlYWNvbiAqLwotI2RlZmluZQkJSVJRX1RYX1JFVFJZCTB4OAkvKiBUWCBSZXRyeSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9UWF9BQ1RJVklUWQkweDEwCS8qIFRYIEFjdGl2aXR5ICovCi0jZGVmaW5lCQlJUlFfUlhfQUNUSVZJVFkJMHgyMAkvKiBSWCBBY3Rpdml0eSAqLwotLyogRklYTUUgSSBndWVzcyB0aGF0IGluc3RlYWQgUlggYSBub25lIGV4aXN0IHN0YWlvbidzIHBhY2tldCBvcgotICAgdGhlIHN0YXRpb24gaGFzbid0IGJlZW4gaW5pdCAqLwotI2RlZmluZQkJSVJRX1JYX1gJMHg0MAotI2RlZmluZQkJSVJRX1JYX1kJMHg4MAkvKiBSWCA/ICovCi0jZGVmaW5lCQlJUlFfUlhfSEFTSEhJVAkweDEwMAkvKiBSWCBIYXNoIEhpdCAqLwotI2RlZmluZQkJSVJRX1JYX0ZSQU1FCTB4MjAwCS8qIFJYIEZyYW1lICovCi0jZGVmaW5lCQlJUlFfRVJSX0lOVAkweDQwMAkvKiBFcnJvciBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9UWF9RVUVfRlVMTAkweDgwMAkvKiBUWCBXb3JrcXVldWUgRnVsbCAqLwotI2RlZmluZQkJSVJRX0JBTkRNQU5fRVJSCTB4MTAwMDAJLyogQmFuZHdpZHRoIE1hbmFnZW1lbnQgRXJyb3IgKi8KLSNkZWZpbmUJCUlSUV9UWF9ESVNBQkxFCTB4MjAwMDAJLyogVFggRGlzYWJsZSAqLwotI2RlZmluZQkJSVJRX1JYX0lWQVNFU0tFWSAweDgwMDAwIC8qIFJYIEludmFsaWQgU2Vzc2lvbiBLZXkgKi8KLSNkZWZpbmUJCUlSUV9SWF9LRVlJRE1JUwkweDEwMDAwMCAvKiBSWCBrZXkgSUQgTWlzbWF0Y2ggKi8KLSNkZWZpbmUJCUlSUV9SRVBfVEhISVQJMHgyMDAwMDAgLyogUmVwbGF5IFRocmVzaG9sZCBIaXQgKi8KLSNkZWZpbmUJCUlSUV9USU1FUjEJMHg0MDAwMDAwIC8qIFRpbWVyMSAqLwotI2RlZmluZQkJSVJRX1RJTUVSX0NOVAkweDEwMDAwMDAwIC8qIFRpbWVyIENvdW50ICovCi0jZGVmaW5lCQlJUlFfUEhZX0ZBU1RJTlQgMHgyMDAwMDAwMCAvKiBQaHkgRmFzdCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUJCUlSUV9QSFlfU0xPV0lOVAkweDQwMDAwMDAwIC8qIFBoeSBTbG93IEludGVycnVwdCAqLwotI2RlZmluZQkJSVJRX09USEVSCTB4ODAwMDAwMDAgLyogVW5rbm93IGludGVycnVwdCAqLwotI2RlZmluZQkJQUdOWF9JUlFfQUxMICAgCTB4ZmZmZmZmZmYKLQotLyogU3lzdGVtIEludGVyZmFjZSAqLwotI2RlZmluZSBBR05YX1NZU0lURl9CQVNFCTB4NDQwMAotI2RlZmluZSBBR05YX1NZU0lURl9TWVNNT0RFCTB4NDQwMAkvKiBzeXN0ZW0gbW9kZSAqLwotI2RlZmluZSBBR05YX1NZU0lURl9HUElPSU4JMHg0NDEwIC8qIEdQSU8gSW4gKi8KLS8qIFBJTiBsaW5lcyBmb3IgbGVkcz8gKi8KLSNkZWZpbmUgQUdOWF9TWVNJVEZfR1BJT1VUCTB4NDQxNAkvKiBHUElPIE91dCAqLwotCi0vKiBUaW1lciBDb250cm9sICovCi0jZGVmaW5lIEFHTlhfVElNQ1RMX1RJTUVSMQkweDQ4MDAgLyogVGltZXIgMSAqLwotI2RlZmluZSBBR05YX1RJTUNUTF9USU0xQ1RMCTB4NDgwOCAvKiBUaW1lciAxIENvbnRyb2wgKi8KLQotCi0vKiBBbnRlbm5hIENhbGlicmF0aW9uIEludGVyZmFjZSAqLwotI2RlZmluZSBBR05YX0FDSV9CQVNFCQkweDUwMDAKLSNkZWZpbmUgQUdOWF9BQ0lfTU9ERQkJMHg1MDAwIC8qIE1vZGUgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfTUVBU1VSRQkweDUwMDQgLyogTWVhc3VyZSAqLwotI2RlZmluZSBBR05YX0FDSV9TRUxDSEFJTgkweDUwMDggLyogU2VsZWN0IENoYWluICovCi0jZGVmaW5lIEFHTlhfQUNJX0xFTgkJMHg1MDBjIC8qIExlbmd0aCAqLwotI2RlZmluZSBBR05YX0FDSV9USU1FUjEJCTB4NTAxOCAvKiBUaW1lciAxICovCi0jZGVmaW5lIEFHTlhfQUNJX1RJTUVSMgkJMHg1MDFjIC8qIFRpbWVyIDIgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfT0ZGU0VUCQkweDUwMjAgLyogT2Zmc2V0ICovCi0jZGVmaW5lIEFHTlhfQUNJX1NUQVRVUwkJMHg1MDMwIC8qIFN0YXR1cyAqLwotI2RlZmluZQkJQ0FMSV9JRExFCTB4MAotI2RlZmluZQkJQ0FMSV9ET05FCTB4MQotI2RlZmluZQkJQ0FMSV9CVVNZCTB4MgotI2RlZmluZQkJQ0FMSV9FUlIJMHgzCi0jZGVmaW5lIEFHTlhfQUNJX0FJQ0NIQTBPVkUJMHg1MDM0IC8qIEFJQyBDaGFubmVsIDAgT3ZlcnJpZGUgKi8KLSNkZWZpbmUgQUdOWF9BQ0lfQUlDQ0hBMU9WRQkweDUwMzggLyogQUlDIENoYW5uZWwgMSBPdmVycmlkZSAqLwotCi0vKiBHYWluIENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIEFHTlhfR0NSX0JBU0UJCTB4OTAwMAotLyogdGhyZXNob2xkIG9mIHByaW1hcnkgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USEQwQQkJMHg5MDAwCS8qIHRocmVzaG9sZD8gRDAgQSAqLwotLyogbG93IHRocmVzaG9sZCBvZiBwcmltYXJ5IGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhEMEFMCQkweDkwMDQJLyogdGhyZXNob2xkPyBEMCBBIGxvdyAqLwotLyogdGhyZXNob2xkIG9mIHNlY29uZGFyeSBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIRDBCCQkweDkwMDgJLyogdGhyZXNob2xkPyBEMF9CICovCi0jZGVmaW5lIEFHTlhfR0NSX0RVTlNBVAkJMHg5MDBjIC8qIGQgdW5zYXR1cmF0ZWQgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfRFNBVAkJMHg5MDEwIC8qIGQgc2F0dXJhdGVkICovCi0jZGVmaW5lIEFHTlhfR0NSX0RGSVJDQUwJMHg5MDE0IC8qIEQgRmlyL0NhbCAqLwotI2RlZmluZSBBR05YX0dDUl9ER0NUTDExQQkweDkwMTggLyogZCBnYWluIGNvbnRyb2wgMTFhICovCi0jZGVmaW5lIEFHTlhfR0NSX0RHQ1RMMTFCCTB4OTAxYyAvKiBkIGdhaW4gY29udHJvbCAxMWIgKi8KLS8qIHN0cmVuZ3RoIG9mIGdhaW4gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTklOSVQJMHg5MDIwCS8qIGdhaW4gaW5pdGlhbGl6YXRpb24gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhOT1NJRwkweDkwMjQgLyogdGhyZWhvbGQgbm8gc2lnbmFsICovCi0jZGVmaW5lIEFHTlhfR0NSX0NPQVJTVEVQCTB4OTAyOCAvKiBjb2Fyc2Ugc3RlcHBpbmcgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lGU1QxMUEJMHg5MDJjIC8qIHNpZnggdGltZSAxMWEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lGU1QxMUIJMHg5MDMwIC8qIHNpZnggdGltZSAxMWIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfQ1dERVRFQwkweDkwMzQgLyogY3cgZGV0ZWN0aW9uICovCi0jZGVmaW5lIEFHTlhfR0NSXzBYMzgJCTB4OTAzOCAvKiA/Pz8/ICovCi0jZGVmaW5lIEFHTlhfR0NSX0JPQUNUCQkweDkwM2MJLyogQk8gQWN0aXZlICovCi0jZGVmaW5lIEFHTlhfR0NSX0JPSU5BQ1QJMHg5MDQwCS8qIEJPIEluYWN0aXZlICovCi0jZGVmaW5lIEFHTlhfR0NSX0JPRFlOQQkJMHg5MDQ0CS8qIEJPIGR5bmFtaWMgKi8KLS8qIDgwMi4xMSBtb2RlKGEsYixnKSAqLwotI2RlZmluZSBBR05YX0dDUl9ESVNDT1ZNT0QJMHg5MDQ4CS8qIGRpc2NvdmVyeSBtb2RlICovCi0jZGVmaW5lIEFHTlhfR0NSX05MSVNUQU5UCTB4OTA0YwkvKiBudW1iZXIgb2YgbGlzdGVuaW5nIGFudGVubmEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTkFDVElBTlQJMHg5MDUwCS8qIG51bWJlciBvZiBhY3RpdmUgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9OTUVBU0FOVAkweDkwNTQJLyogbnVtYmVyIG9mIG1lYXN1cmluZyBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX05DQVBUQU5UCTB4OTA1OAkvKiBudW1iZXIgb2YgY2FwdHVyZSBhbnRlbm5hICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIQ0FQMTFBCTB4OTA1YyAvKiB0aHJlc2hvbGQgY2FwdHVyZSAxMWEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDQVAxMUIJMHg5MDYwIC8qIHRocmVzaG9sZCBjYXB0dXJlIDExYiAqLwotI2RlZmluZSBBR05YX0dDUl9USENBUFJYMTFBCTB4OTA2NCAvKiB0aHJlc2hvbGQgY2FwdHVyZSByeCAxMWEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhDQVBSWDExQgkweDkwNjggLyogdGhyZXNob2xkIGNhcHR1cmUgcnggMTFiICovCi0jZGVmaW5lIEFHTlhfR0NSX1RITEVWRFJPCTB4OTA2YyAvKiB0aHJlc2hvbGQgbGV2ZWwgZHJvcCAqLwotI2RlZmluZSBBR05YX0dDUl9HQUlOU0VUMAkweDkwNzAgLyogR2FpbnNldCAwICovCi0jZGVmaW5lIEFHTlhfR0NSX0dBSU5TRVQxCTB4OTA3NCAvKiBHYWluc2V0IDEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTlNFVDIJMHg5MDc4IC8qIEdhaW5zZXQgMiAqLwotI2RlZmluZSBBR05YX0dDUl9NQVhSWFRJTUUxMUEJMHg5MDdjIC8qIG1heGltdW0gcnggdGltZSAxMWEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTUFYUlhUSU1FMTFCCTB4OTA4MCAvKiBtYXhpbXVtIHJ4IHRpbWUgMTFiICovCi0jZGVmaW5lIEFHTlhfR0NSX0NPUlJUSU1FCTB4OTA4NCAvKiBjb3JyZWN0aW9uIHRpbWUgKi8KLS8qIHJlc2V0IHRoZSBzdWJzeXN0ZW0sIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlICovCi0jZGVmaW5lIEFHTlhfR0NSX1JTVEdDVEwJMHg5MDg4CS8qIHJlc2V0IGdhaW4gY29udHJvbCAqLwotLyogY2hhbm5lbCByZWNlaXZpbmcgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfUlhDSEFORUwJMHg5MDhjCS8qIHJlY2VpdmUgY2hhbm5lbCAqLwotI2RlZmluZSBBR05YX0dDUl9OT0lTRTAJCTB4OTA5MCAvKiBOb2lzZSAwICovCi0jZGVmaW5lIEFHTlhfR0NSX05PSVNFMQkJMHg5MDk0IC8qIE5vaXNlIDEgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfTk9JU0UyCQkweDkwOTggLyogTm9pc2UgMiAqLwotI2RlZmluZSBBR05YX0dDUl9TSUdIVEgJCTB4OTA5YwkvKiBTaWduYWwgSGlnaCBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfU0lHTFRICQkweDkwYTAJLyogU2lnbmFsIExvdyBUaHJlc2hvbGQgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfQ09SUkRST1AJMHg5MGE0IC8qIGNvcnJlY3Rpb24gZHJvcCAqLwotLyogdGhyZXNob2xkIG9mIHRlcnRpYXkgYW50ZW5uYSAqLwotI2RlZmluZSBBR05YX0dDUl9USENECQkweDkwYTgJLyogdGhyZXNob2xkPyBDRCAqLwotI2RlZmluZSBBR05YX0dDUl9USENTCQkweDkwYWMJLyogdGhyZXNob2xkPyBDUyAqLwotI2RlZmluZSBBR05YX0dDUl9NQVhQT1dESUZGCTB4OTBiOCAvKiBtYXhpbXVtIHBvd2VyIGRpZmZlcmVuY2UgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVFJBQ05UNAkweDkwZWMgLyogVHJhbnNpdGlvbiBDb3VudCA0ICovCi0jZGVmaW5lIEFHTlhfR0NSX1RSQUNOVDUgICAgICAJMHg5MGYwCS8qIHRyYW5zaXRpb24gY291bnQgNSAqLwotI2RlZmluZSBBR05YX0dDUl9UUkFDTlQ2ICAgICAgIAkweDkwZjQJLyogdHJhbnNpdGlvbiBjb3VudCA2ICovCi0jZGVmaW5lIEFHTlhfR0NSX1RSQUNOVDcgICAgICAgCTB4OTBmOAkvKiB0cmFuc2l0aW9uIGNvdXRuIDcgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEVTVEJVUwkweDkxMWMgLyogdGVzdCBidXMgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfQ0hBSU5OVU0JMHg5MTIwIC8qIE51bWJlciBvZiBDaGFpbnMgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfQU5UQ0ZHCQkweDkxMjQJLyogQW50ZW5uYSBDb25maWcgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhKVU1QCQkweDkxMmMgLyogdGhyZWhvbGQganVtcCAqLwotI2RlZmluZSBBR05YX0dDUl9USFBPV0VSCTB4OTEzMCAvKiB0aHJlc2hvbGQgcG93ZXIgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfVEhQT1dDTElQCTB4OTEzNCAvKiB0aHJlc2hvbGQgcG93ZXIgY2xpcCovCi0jZGVmaW5lIEFHTlhfR0NSX0ZPUkNFQ1RMQ0xLCTB4OTEzOCAvKiBGb3JjZSBHYWluIENvbnRyb2wgQ2xvY2sgKi8KLSNkZWZpbmUgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFCTB4OTEzYyAvKiBHYWluc2V0IFdyaXRlICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIRDBCVEZFU1QJMHg5MTQwCS8qIHRocmVzaG9sZCBkMCBiIHRmIGVzdGltYXRlICovCi0jZGVmaW5lIEFHTlhfR0NSX1RIUlgxMUJQT1dNSU4JMHg5MTQ0CS8qIHRocmVzaG9sZCByeCAxMWIgcG93ZXIgbWluaW11bSAqLwotI2RlZmluZSBBR05YX0dDUl8wWDE0YwkJMHg5MTRjIC8qID8/ICovCi0jZGVmaW5lIEFHTlhfR0NSXzBYMTUwCQkweDkxNTAgLyogPz8gKi8KLSNkZWZpbmUgQUdOWF9HQ1JfUlhPVkVSSURFCTB4OTE5NAkvKiByZWNpZXZlIG92ZXJyaWRlICovCi0jZGVmaW5lIEFHTlhfR0NSX1dBVENIRE9HCTB4OTFiMAkvKiB3YXRjaGRvZyB0aW1lb3V0ICovCi0KLQotLyogU3BpIEludGVyZmFjZSAqLwotI2RlZmluZSBBR05YX1NQSV9CQVNFCQkweGRjMDAKLSNkZWZpbmUgQUdOWF9TUElfQ0ZHCQkweGRjMDAgLyogc3BpIGNvbmZpZ3VyYXRpb24gKi8KLS8qIE9ubHkgYWNjZXB0IDE2IGJpdHMgKi8KLSNkZWZpbmUgQUdOWF9TUElfV01TVwkJMHhkYzA0CS8qIHdyaXRlIG1vc3Qgc2lnbmlmaWNhbnQgd29yZCAqLwotLyogT25seSBhY2NlcHQgMTYgYml0cyAqLwotI2RlZmluZSBBR05YX1NQSV9XTFNXCQkweGRjMDgJLyogd3JpdGUgbGVhc3Qgc2lnbmlmaWNhbnQgd29yZCAqLwotI2RlZmluZSBBR05YX1NQSV9DVEwJCTB4ZGMwYwkvKiBzcGkgY29udHJvbCAqLwotI2RlZmluZSBBR05YX1NQSV9STVNXCQkweGRjMTAgLyogcmVhZCBtb3N0IHNpZ25pZmljYW50IHdvcmQgKi8KLSNkZWZpbmUgQUdOWF9TUElfUkxTVwkJMHhkYzE0IC8qIHJlYWQgbGVhc3Qgc2lnbmlmaWNhbnQgd29yZCAqLwotLyogU1BJIENvbnRyb2wgTWFzayAqLwotI2RlZmluZQkJU1BJX1JFQURfQ1RMCQkweDQwMDAgLyogcmVhZCBjb250cm9sICovCi0jZGVmaW5lCQlTUElfQlVTWV9DVEwJCTB4ODAwMCAvKiBidXN5IGNvbnRyb2wgKi8KLS8qIFJGIGFuZCBzeW50aCBjaGlwcyBpbiBzcGkgKi8KLSNkZWZpbmUJCVJGX0NISVAwCTB4NDAwCi0jZGVmaW5lCQlSRl9DSElQMQkweDgwMAotI2RlZmluZQkJUkZfQ0hJUDIJMHgxMDAwCi0jZGVmaW5lCQlTWU5USF9DSElQCTB4MjAwMAotCi0vKiBVbmtub3duIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFHTlhfVU5LTk9XTl9CQVNFCTB4NzgwMAotCi0vKiBGSVhNRSBNb25pdG9yR2FpbiAqLwotI2RlZmluZSBBR05YX01PTkdDUl9CQVNFCTB4MTIwMDAKLQotLyogR2FpbiBUYWJsZSAqLwotI2RlZmluZSBBR05YX0dBSU5fVEFCTEUJCTB4MTI0MDAKLQotLyogVGhlIGluaXRpYWwgRklSIGNvZWZmaWNpZW50IHRhYmxlICovCi0jZGVmaW5lIEFHTlhfRklSX0JBU0UJCTB4MTk4MDQKLQotI2RlZmluZSBBR05YX0VOR0lORV9MT09LVVBfVEJMCTB4ODAwCi0KLS8qIGVlcHJvbSBjb21tYW5kcyAqLwotI2RlZmluZSBFRVBST01fQ01EX05VTEwJCTB4MCAvKiBOVUxMICovCi0jZGVmaW5lIEVFUFJPTV9DTURfV1JJVEUJMHgyIC8qIHdyaXRlICovCi0jZGVmaW5lIEVFUFJPTV9DTURfUkVBRAkJMHgzIC8qIHJlYWQgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9TVEFUVVNSRUFECTB4NSAvKiBzdGF0dXMgcmVnaXN0ZXIgcmVhZCAqLwotI2RlZmluZSBFRVBST01fQ01EX1dSSVRFRU5BQkxFCTB4NiAvKiB3cml0ZSBlbmFibGUgKi8KLSNkZWZpbmUgRUVQUk9NX0NNRF9DT05GSUdVUkUJMHg3IC8qIGNvbmZpZ3VyZSAqLwotCi0jZGVmaW5lIEVFUFJPTV9EQVRBRk9SQ09GSUdVUkUJMHg2IC8qID8/PyAqLwotCi0vKiBlZXByb20gYWRkcmVzcyAqLwotI2RlZmluZSBFRVBST01fQUREUl9TVUJWSUQJMHgwIC8qIFN1YiBWZW5kb3IgSUQgKi8KLSNkZWZpbmUgRUVQUk9NX0FERFJfU1VCU0lECTB4MiAvKiBTdWIgU3lzdGVtIElEICovCi0jZGVmaW5lIEVFUFJPTV9BRERSX01BQ0FERFIJMHgxNDYgLyogTUFDIEFkZHJlc3MgKi8KLSNkZWZpbmUgRUVQUk9NX0FERFJfTE9UWVBFCTB4MTRmIC8qIExPIHR5cGUgKi8KLQotc3RydWN0IGFnbnhfZWVwcm9tIHsKLQl1OCBkYXRhOwkvKiBkYXRlICovCi0JdTE2IGFkZHJlc3M7CS8qIGFkZHJlc3MgaW4gRUVQUk9NICovCi0JdTggY21kOwkJLyogY29tbWFuZCwgdW5rbm93biwgc3RhdHVzICovCi19ICBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLSNkZWZpbmUgQUdOWF9FRVBST01fQ09NTUFORF9TSElGVAk1Ci0jZGVmaW5lIEFHTlhfRUVQUk9NX0NPTU1BTkRfU1RBVAkweDAxCi0KLXZvaWQgZGlzYWJsZV9yZWNlaXZlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgZW5hYmxlX3JlY2VpdmVyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdTggcmVhZF9mcm9tX2VlcHJvbShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MTYgYWRkcmVzcyk7Ci12b2lkIGFnbnhfaHdfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLWludCBhZ254X2h3X3Jlc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IGFnbnhfc2V0X3NzaWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7Ci12b2lkIGFnbnhfc2V0X2Jzc2lkKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCk7Ci12b2lkIGVuYWJsZV9wb3dlcl9zYXZpbmcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGRpc2FibGVfcG93ZXJfc2F2aW5nKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBjYWxpYnJhdGVfYW50ZW5uYV9wZXJpb2QodW5zaWduZWQgbG9uZyBkYXRhKTsKLQotI2VuZGlmIC8qIEFHTlhfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJlNDU3YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jCisrKyAvZGV2L251bGwKQEAgLTEsODkzICswLDAgQEAKLS8qKgotICogQWlyZ28gTUlNTyB3aXJlbGVzcyBkcml2ZXIKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgTGkgWWFuQm8gPGRyZWFtZmx5MjgxQGdtYWlsLmNvbT4KLQotICogVGhhbmtzIGZvciBKZWZmIFdpbGxpYW1zIDxhbmdlbGJhbmVAZ21haWwuY29tPiBkbyByZXZlcnNlIGVuZ2luZWVyCi0gKiB3b3JrcyBhbmQgcHVibGlzaGVkIHRoZSBTUEVDUyBhdCBodHRwOi8vYWlyZ28ud2R3Y29uc3VsdGluZy5uZXQvbXltb2luCi0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSAiYWdueC5oIgotI2luY2x1ZGUgImRlYnVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0jaW5jbHVkZSAidGFibGUuaCIKLQotLyogRklYTUUhICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc3BpX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnaW9uLCB1MzIgY2hpcF9pZHMsIHUzMiBzdywKLQkJICAgICAgdTE2IHNpemUsIHUzMiBjb250cm9sKQotewotCXUzMiByZWc7Ci0JdTMyIGxzdyA9IHN3ICYgMHhmZmZmOwkJLyogbG93ZXIgMTYgYml0cyBvZiBzdyovCi0JdTMyIG1zdyA9IHN3ID4+IDE2OwkJLyogaGlnaCAxNiBiaXRzIG9mIHN3ICovCi0KLQkvKiBGSVhNRSBXcml0ZSBNb3N0IFNpZ25pZmljYW50IFdvcmQgb2YgdGhlIDMyYml0IGRhdGEgdG8gTVNXICovCi0JLyogRklYTUUgQW5kIExlYXN0IFNpZ25pZmljYW50IFdvcmQgdG8gTFNXICovCi0JaW93cml0ZTMyKChsc3cpLCByZWdpb24gKyBBR05YX1NQSV9XTFNXKTsKLQlpb3dyaXRlMzIoKG1zdyksIHJlZ2lvbiArIEFHTlhfU1BJX1dNU1cpOwotCXJlZyA9IGNoaXBfaWRzIHwgc2l6ZSB8IGNvbnRyb2w7Ci0JLyogV3JpdGUgY2hpcCBpZChzKSwgd3JpdGUgc2l6ZSBhbmQgYnVzeSBjb250cm9sIHRvIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlpb3dyaXRlMzIoKHJlZyksIHJlZ2lvbiArIEFHTlhfU1BJX0NUTCk7Ci0JLyogV2FpdCBmb3IgQnVzeSBjb250cm9sIHRvIGNsZWFyICovCi0Jc3BpX2RlbGF5KCk7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0byBTUEkgU3ludGggcmVnaXN0ZXIKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwaV9zeV93cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3cpCi17Ci0JLyogRklYTUUgdGhlIHNpemUgMHgxNSBpcyBhIG1hZ2ljIHZhbHVlKi8KLQlzcGlfd3JpdGUocmVnaW9uLCBjaGlwX2lkcywgc3csIDB4MTUsIFNQSV9CVVNZX0NUTCk7Ci19Ci0KLS8qCi0gKiBXcml0ZSB0byBTUEkgUkYgcmVnaXN0ZXIKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHNwaV9yZl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3cpCi17Ci0JLyogRklYTUUgdGhlIHNpemUgMHhkIGlzIGEgbWFnaWMgdmFsdWUqLwotCXNwaV93cml0ZShyZWdpb24sIGNoaXBfaWRzLCBzdywgMHhkLCBTUElfQlVTWV9DVEwpOwotfSAvKiBzcGlfcmZfd3JpdGUgKi8KLQotLyoKLSAqIFdyaXRlIHRvIFNQSSB3aXRoIFJlYWQgQ29udHJvbCBiaXQgc2V0Ci0gKi8KLWlubGluZSB2b2lkIHNwaV9yY193cml0ZSh2b2lkIF9faW9tZW0gKnJlZ2lvbiwgdTMyIGNoaXBfaWRzLCB1MzIgc3cpCi17Ci0JLyogRklYTUUgdGhlIHNpemUgMHhlNSBpcyBhIG1hZ2ljIHZhbHVlICovCi0Jc3BpX3dyaXRlKHJlZ2lvbiwgY2hpcF9pZHMsIHN3LCAweGU1LCBTUElfQlVTWV9DVEx8U1BJX1JFQURfQ1RMKTsKLX0KLQotLyogR2V0IHRoZSBhY3RpdmUgY2hhaW5zJ3MgY291bnQgKi8KLXN0YXRpYyBpbnQgZ2V0X2FjdGl2ZV9jaGFpbnMoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgbnVtID0gMDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyMSk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQlpZiAocmVnID09IDEpCi0JCW51bSsrOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIDB4MjEpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKHJlZyA9PSAxKQotCQludW0rKzsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAyLCAweDIxKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCWlmIChyZWcgPT0gMSkKLQkJbnVtKys7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyNik7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQlpZiAoMHgzMyAhPSByZWcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbm1hdGNoZWQgcmYgY2hpcHMgcmVzdWx0XG4iKTsKLQotCXJldHVybiBudW07Ci19IC8qIGdldF9hY3RpdmVfY2hhaW5zICovCi0KLXZvaWQgcmZfY2hpcHNfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JaW50IG51bTsKLQlBR05YX1RSQUNFOwotCi0JaWYgKHByaXYtPnJldmlkID09IDEpIHsKLQkJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQpOwotCQlyZWcgfD0gMHg4OwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQsIHJlZyk7Ci0JfQotCi0JLyogU2V0IFNQSSBjbG9jayBzcGVlZCB0byAyMDBOUyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlyZWcgfD0gMHgzOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKLQotCS8qIFNldCBTUEkgY2xvY2sgc3BlZWQgdG8gNTBOUyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlyZWcgfD0gMHgxOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDExMDEpOwotCi0JbnVtID0gZ2V0X2FjdGl2ZV9jaGFpbnMocHJpdik7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFjdGl2ZSBjaGFpbnMgYXJlICVkXG4iLCBudW0pOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwotCXJlZyAmPSB+MHhGOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE5MDgpOwotfSAvKiByZl9jaGlwc19pbml0ICovCi0KLQotc3RhdGljIHUzMiBjaGFubmVsX3RibFsxNV1bOV0gPSB7Ci0JezAsICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKLQl7MSwgIDB4MDAsIDB4MDAsIDB4NjI0LCAweDAwLCAweDFhNCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezIsICAweDAwLCAweDAwLCAweDYxNSwgMHgwMCwgMHgxYWUsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXszLCAgMHgwMCwgMHgwMCwgMHg2MWEsIDB4MDAsIDB4MWFlLCAweDI4LCAweDAwLCAweDFlfSwKLQl7NCwgIDB4MDAsIDB4MDAsIDB4NjFmLCAweDAwLCAweDFhZSwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezUsICAweDAwLCAweDAwLCAweDYyNCwgMHgwMCwgMHgxYWUsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs2LCAgMHgwMCwgMHgwMCwgMHg2MWYsIDB4MDAsIDB4MWIzLCAweDI4LCAweDAwLCAweDFlfSwKLQl7NywgIDB4MDAsIDB4MDAsIDB4NjI0LCAweDAwLCAweDFiMywgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezgsICAweDAwLCAweDAwLCAweDYyOSwgMHgwMCwgMHgxYjMsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXs5LCAgMHgwMCwgMHgwMCwgMHg2MjQsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLQl7MTAsIDB4MDAsIDB4MDAsIDB4NjI5LCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezExLCAweDAwLCAweDAwLCAweDYyZSwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotCXsxMiwgMHgwMCwgMHgwMCwgMHg2MzMsIDB4MDAsIDB4MWI4LCAweDI4LCAweDAwLCAweDFlfSwKLQl7MTMsIDB4MDAsIDB4MDAsIDB4NjI4LCAweDAwLCAweDFiOCwgMHgyOCwgMHgwMCwgMHgxZX0sCi0JezE0LCAweDAwLCAweDAwLCAweDY0NCwgMHgwMCwgMHgxYjgsIDB4MjgsIDB4MDAsIDB4MWV9LAotfTsKLQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWNoYW5uZWxfdGJsX3dyaXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgcmVnX251bSkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JcmVnID0gY2hhbm5lbF90YmxbY2hhbm5lbF1bcmVnX251bV07Ci0JcmVnIDw8PSA0OwotCXJlZyB8PSByZWdfbnVtOwotCXNwaV9zeV93cml0ZShjdGwsIFNZTlRIX0NISVAsIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bnRoX2ZyZXFfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCi0JLyogU2V0IHRoZSBDbG9jayBiaXRzIHRvIDUwTlMgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7Ci0JcmVnICY9IH4weEY7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci0KLQkvKiBXcml0ZSAweDAwYzAgdG8gTFNXIGFuZCAweDMgdG8gTVNXIG9mIFN5bnRoIENoaXAgKi8KLQlzcGlfc3lfd3JpdGUoY3RsLCBTWU5USF9DSElQLCAweDMwMGMwKTsKLQotCXNwaV9zeV93cml0ZShjdGwsIFNZTlRIX0NISVAsIDB4MzIpOwotCi0JLyogIyBXcml0ZSB0byBSZWdpc3RlciAxIG9uIHRoZSBTeW50aCBDaGlwICovCi0JY2hhbm5lbF90Ymxfd3JpdGUocHJpdiwgY2hhbm5lbCwgMSk7Ci0JLyogIyBXcml0ZSB0byBSZWdpc3RlciAzIG9uIHRoZSBTeW50aCBDaGlwICovCi0JY2hhbm5lbF90Ymxfd3JpdGUocHJpdiwgY2hhbm5lbCwgMyk7Ci0JLyogIyBXcml0ZSB0byBSZWdpc3RlciA2IG9uIHRoZSBTeW50aCBDaGlwICovCi0JY2hhbm5lbF90Ymxfd3JpdGUocHJpdiwgY2hhbm5lbCwgNik7Ci0JLyogIyBXcml0ZSB0byBSZWdpc3RlciA1IG9uIHRoZSBTeW50aCBDaGlwICovCi0JY2hhbm5lbF90Ymxfd3JpdGUocHJpdiwgY2hhbm5lbCwgNSk7Ci0JLyogIyBXcml0ZSB0byByZWdpc3RlciA4IG9uIHRoZSBTeW50aCBDaGlwICovCi0JY2hhbm5lbF90Ymxfd3JpdGUocHJpdiwgY2hhbm5lbCwgOCk7Ci0KLQkvKiBGSVhNRSBDbGVhciB0aGUgY2xvY2sgYml0cyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7Ci19IC8qIHN5bnRoX2NoaXBfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIGFudGVubmFfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBpbnQgbnVtX2FudGVubmEpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0KLQlzd2l0Y2ggKG51bV9hbnRlbm5hKSB7Ci0JY2FzZSAxOgotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTElTVEFOVCwgMSk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05NRUFTQU5ULCAxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDEpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQ0FQVEFOVCwgMSk7Ci0KLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQU5UQ0ZHLCA3KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDM0KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9JTkFDVCwgMzQpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDMwKTsKLQotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQSwgMTI1KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEFMLCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQiwgOTApOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDgwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHSFRILCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdMVEgsIDE2KTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTElTVEFOVCwgMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05NRUFTQU5ULCAyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkFDVElBTlQsIDIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQ0FQVEFOVCwgMik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgMTUpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0FDVCwgMzYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0lOQUNULCAzNik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPRFlOQSwgMzIpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQSwgMTIwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEFMLCAxMDApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQiwgODApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9USEQwQlRGRVNULCA3MCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAzMik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkxJU1RBTlQsIDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMyk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX05BQ1RJQU5ULCAzKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfTkNBUFRBTlQsIDMpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9BTlRDRkcsIDMxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDM2KTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9JTkFDVCwgMzYpOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9CT0RZTkEsIDMyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMTAwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDcwKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgNzApOwotCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDEwMCk7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgNDgpOwotLyoJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMTYpOyAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93IGFudGVubmEgbnVtYmVyXG4iKTsKLQl9Ci19IC8qIGFudGVubmFfaW5pdCAqLwotCi1zdGF0aWMgdm9pZCBjaGFpbl91cGRhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyIGNoYWluKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDIwKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCi0JaWYgKHJlZyA9PSAweDQpCi0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCByZWd8MHgxMDAwKTsKLQllbHNlIGlmIChyZWcgIT0gMHgwKQotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7Ci0JZWxzZSB7Ci0JCWlmIChjaGFpbiA9PSAzIHx8IGNoYWluID09IDYpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCByZWd8MHgxMDAwKTsKLQkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSAyIHx8IGNoYWluID09IDQpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCByZWd8MHgxMDAwKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEwMDUpOwotCQkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweDgyNCk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPT0gMSkgewotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIHJlZ3wweDEwMDApOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwNCk7Ci0JCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4YzM2KTsKLQkJfQotCX0KLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDIyKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOwotCi0Jc3dpdGNoIChyZWcpIHsKLQljYXNlIDA6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDUpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWlmIChjaGFpbiA9PSA2IHx8IGNoYWluID09IDQpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDIpOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTAwNSk7Ci0JCX0gZWxzZSBpZiAoY2hhaW4gPCAzKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAyKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDUpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmIChjaGFpbiA9PSAzKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCAweDEyMDEpOwotCQl9IGVsc2UgaWYgKGNoYWluID09IDIpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwLCAweDEyMDMpOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTIwMCk7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMSwgMHgxMjAxKTsKLQkJfSBlbHNlIGlmIChjaGFpbiA9PSAxKSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEyMDApOwotCQl9IGVsc2UgaWYgKGNoYWluID09IDQpIHsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDMpOwotCQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDIsIDB4MTIwMSk7Ci0JCX0gZWxzZSB7Ci0JCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgxMjAzKTsKLQkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAxfFJGX0NISVAyLCAweDEyMDEpOwotCQl9Ci0JfQotfSAvKiBjaGFpbl91cGRhdGUgKi8KLQotc3RhdGljIHZvaWQgYW50ZW5uYV9jb25maWcoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQkvKiBXcml0ZSAweDAgdG8gdGhlIFRYIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlciBFbmFibGUgYml0ICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1RYTV9DVEwpOwotCXJlZyAmPSB+MHgxOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfVFhNX0NUTCwgcmVnKTsKLQotCS8qIEZJWE1FICovCi0JLyogU2V0IGluaXRpYWwgdmFsdWUgYmFzZWQgb24gbnVtYmVyIG9mIEFudGVubmFlICovCi0JYW50ZW5uYV9pbml0KHByaXYsIDMpOwotCi0JLyogRklYTUUgVXBkYXRlIFBvd2VyIFRlbXBsYXRlcyBmb3IgY3VycmVudCB2YWxpZCBTdGF0aW9ucyAqLwotCS8qIHN0YV9wb3dlcl9pbml0KHByaXYsIDApOyovCi0KLQkvKiBGSVhNRSB0aGUgbnVtYmVyIG9mIGNoYWlucyBzaG91bGQgZ2V0IGZyb20gZWVwcm9tKi8KLQljaGFpbl91cGRhdGUocHJpdiwgQUdOWF9DSEFJTlNfTUFYKTsKLX0gLyogYW50ZW5uYV9jb25maWcgKi8KLQotdm9pZCBjYWxpYnJhdGVfb3NjaWxsYXRvcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiByZWc7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDEpOwotCXJlZyB8PSAweDEwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCByZWcpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAxKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHgzZmYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCS8qIChSZXNpZHVhbCBEQyBDYWxpYnJhdGlvbikgdG8gQ2FsaWJyYXRpb24gTW9kZSAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01PREUsIDB4Mik7Ci0KLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMDA0KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4M2ZmKTsKLQkvKiAoVFggTE8gQ2FsaWJyYXRpb24pIHRvIENhbGlicmF0aW9uIE1vZGUgKi8KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDQpOwotCi0JZG8gewotCQl1MzIgIHJlZzEsIHJlZzIsIHJlZzM7Ci0JCS8qIEVuYWJsZSBQb3dlciBTYXZpbmcgQ29udHJvbCAqLwotCQllbmFibGVfcG93ZXJfc2F2aW5nKHByaXYpOwotCQkvKiBTYXZlIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIHRvIHJlc3RvcmUgKi8KLQkJcmVnMSA9IGlvcmVhZDMyKGN0bCArIDB4MTEwMDApOwotCQlyZWcyID0gaW9yZWFkMzIoY3RsICsgMHhlYzUwKTsKLQkJcmVnMyA9IGlvcmVhZDMyKGN0bCArIDB4ZWM1NCk7Ci0JCXdtYigpOwotCi0JCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDAsIDB4Y2ZkZik7Ci0JCWFnbnhfd3JpdGUzMihjdGwsIDB4ZWM1MCwgMHg3MCk7Ci0JCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyAqLwotCQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDAwLCByZWcxKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcyKTsKLQkJYWdueF93cml0ZTMyKGN0bCwgMHhlYzU0LCByZWczKTsKLQkJLyogRGlzYWJsZSBQb3dlciBTYXZpbmcgQ29udHJvbCAqLwotCQlkaXNhYmxlX3Bvd2VyX3NhdmluZyhwcml2KTsKLQl9IHdoaWxlICgwKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDApOwotfSAvKiBjYWxpYnJhdGVfb3NjaWxsYXRvciAqLwotCi0KLXN0YXRpYyB2b2lkIHJhZGlvX2NoYW5uZWxfc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXVuc2lnbmVkIGludCBmcmVxID0gcHJpdi0+YmFuZC5jaGFubmVsc1tjaGFubmVsIC0gMV0uY2VudGVyX2ZyZXE7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMSk7Ci0JLyogU2V0IFNQSSBDbG9jayB0byA1MCBOcyAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLQlyZWcgJj0gfjB4RjsKLQlyZWcgfD0gMHgxOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKLQotCS8qIENsZWFyIHRoZSBEaXNhYmxlIFR4IGludGVycnVwdCBiaXQgaW4gSW50ZXJydXB0IE1hc2sgKi8KLS8qIAlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfSU5UX01BU0spOyAqLwotLyogCXJlZyAmPSB+SVJRX1RYX0RJU0FCTEU7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9JTlRfTUFTSywgcmVnKTsgKi8KLQotCS8qIEJhbmQgU2VsZWN0aW9uICovCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQpOwotCXJlZyB8PSAweDg7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9TWVNJVEZfR1BJT1VULCByZWcpOwotCi0JLyogRklYTUUgU2V0IHRoZSBTaUxhYnMgQ2hpcCBGcmVxdWVuY3kgKi8KLQlzeW50aF9mcmVxX3NldChwcml2LCBjaGFubmVsKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNUKTsKLQlyZWcgfD0gMHg4MDEwMDAzMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnIHw9IDB4MjAwMDk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9QTV9QTExDVEwsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQsIDB4NSk7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMTAwKTsKLQotCS8qIExvYWQgdGhlIE1vbml0b3JHYWluIFRhYmxlICovCi0JbW9uaXRvcl9nYWluX3RhYmxlX2luaXQocHJpdik7Ci0KLQkvKiBMb2FkIHRoZSBUWCBGaXIgdGFibGUgKi8KLQl0eF9maXJfdGFibGVfaW5pdChwcml2KTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9QTUNUTCk7Ci0JcmVnIHw9IDB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCi0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MjIpOwotCXVkZWxheSg4MCk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9STFNXKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlhPVkVSSURFLCAweGZmKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIDB4ZWM1MCk7Ci0JcmVnIHw9IDB4NGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCByZWcpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDEsIDB4MTIwMSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHgxMTAwOCwgMHgxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDBjLCAweDApOwotCWFnbnhfd3JpdGUzMihjdGwsIDB4MTEwMDgsIDB4MCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHhlYzUwLCAweGMpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAweDMpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDEwLCAweDZlKTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDE0LCAweDZjKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxLCAweDEyMDEpOwotCi0JLyogQ2FsaWJyYXRlIHRoZSBBbnRlbm5hICovCi0JLyogYW50ZW5uYV9jYWxpYnJhdGUocHJpdik7ICovCi0JLyogQ2FsaWJyYXRlIHRoZSBUeExvY2FsT3NjaWxsYXRvciAqLwotCWNhbGlicmF0ZV9vc2NpbGxhdG9yKHByaXYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BNQ1RMKTsKLQlyZWcgJj0gfjB4ODsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BNQ1RMLCByZWcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5JTklULCAweGEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIQ0QsIDB4MCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCAweDExMDE4LCAweGIpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0RJU0NPVk1PRCwgMHgwKTsKLQotCS8qIFdyaXRlIEZyZXF1ZW5jeSB0byBHYWluIENvbnRyb2wgQ2hhbm5lbCAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYQ0hBTkVMLCBmcmVxKTsKLQkvKiBXcml0ZSAweDE0MDAwMC9GcmVxIHRvIDB4OWMwOCAqLwotCXJlZyA9IDB4MTQwMDAwL2ZyZXE7Ci0JYWdueF93cml0ZTMyKGN0bCwgMHg5YzA4LCByZWcpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QpOwotCXJlZyAmPSB+MHg4MDEwMDAzMDsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIHJlZyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfUE1fUExMQ1RMKTsKLQlyZWcgJj0gfjB4MjAwMDk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgcmVnKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01PREUsIDB4MCk7Ci0KLS8qIEZJWE1FIEFjY29yZGluZyB0byBOdW1iZXIgb2YgQ2hhaW5zOiAqLwotCi0vKiAJCQkgICAxLiAxOiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAwIHRvIFJGIENoaXBzIDEgKzIgICovCi0vKiAJCQkgICAyLiAyOiAqLwotLyogICAgICAgICAgMS4gV3JpdGUgMHgxMjAzIHRvIFJGIENoaXAgMCAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAwIHRvIFJGIENoaXAgMiAqLwotLyogICAgICAgICAgMy4gV3JpdGUgMHgxMjAxIHRvIFJGIENoaXAgMSAgKi8KLS8qIAkJCSAgIDMuIDM6ICovCi0vKiAgICAgICAgICAxLiBXcml0ZSAweDEyMDMgdG8gUkYgQ2hpcCAwICovCi0vKiAgICAgICAgICAyLiBXcml0ZSAweDEyMDEgdG8gUkYgQ2hpcCAxICsgMiAgKi8KLS8qIAkJCSAgIDQuIDQ6ICovCi0vKiAgICAgICAgICAxLiBXcml0ZSAweDEyMDMgdG8gUkYgQ2hpcCAwICsgMSAqLwotLyogICAgICAgICAgMi4gV3JpdGUgMHgxMjAwIHRvIFJGIENoaXAgMiAgKi8KLQotLyogCQkJICAgNS4gNjogKi8KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgMHgxMjAzKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMiwgMHgxMjAxKTsKLQotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDEwMDApOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQotCS8qIEZJWE1FIFNldCB0aGUgRGlzYWJsZSBUeCBpbnRlcnJ1cHQgYml0IGluIEludGVycnVwdCBNYXNrCi0JICAgKE9yIDB4MjAwMDAgdG8gSW50ZXJydXB0IE1hc2spICovCi0vKiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0lOVF9NQVNLKTsgKi8KLS8qIAlyZWcgfD0gSVJRX1RYX0RJU0FCTEU7ICovCi0vKiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9JTlRfTUFTSywgcmVnKTsgKi8KLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLQotCS8qIENvbmZpZ3VyZSB0aGUgQW50ZW5uYSAqLwotCWFudGVubmFfY29uZmlnKHByaXYpOwotCi0JLyogV3JpdGUgMHgwIHRvIERpc2NvdmVyeSBNb2RlIEVuYWJsZSBkZXRlY3QgRywgQiwgQSBwYWNrZXQ/ICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfRElTQ09WTU9ELCAwKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSk7Ci0JcmVnIHw9IDB4ODAwMDAwMDA7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgcmVnKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SU1RHQ1RMLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MCk7Ci0KLQkvKiBlbmFibGUgcmFkaW8gb24gYW5kIHRoZSBwb3dlciBMRUQgKi8KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1lTSVRGX0dQSU9VVCk7Ci0JcmVnICY9IH4weDE7Ci0JcmVnIHw9IDB4MjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NZU0lURl9HUElPVVQsIHJlZyk7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfVFhNX0NUTCk7Ci0JcmVnIHw9IDB4MTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1RYTV9DVEwsIHJlZyk7Ci19IC8qIHJhZGlvX2NoYW5uZWxfc2V0ICovCi0KLXN0YXRpYyB2b2lkIGJhc2VfYmFuZF9maWx0ZXJfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxNzAwKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAxKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9GT1JDRUNUTENMSywgMHgwKTsKLQlzcGlfcmNfd3JpdGUoY3RsLCBSRl9DSElQMCwgMHgyNyk7Ci0Jc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDEsIDB4MjcpOwotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAyLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9GT1JDRUNUTENMSywgMHgxKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfb2Zmc2V0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiBjaGFpbikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgb2Zmc2V0OwotCi0JaW93cml0ZTMyKChjaGFpbiksIGN0bCArIEFHTlhfQUNJX1NFTENIQUlOKTsKLQl1ZGVsYXkoMTApOwotCW9mZnNldCA9IChpb3JlYWQzMihjdGwgKyBBR05YX0FDSV9PRkZTRVQpKTsKLQlwcmludGsoUEZYICJDaGFpbiBpcyAweCV4LCBPZmZzZXQgaXMgMHgleFxuIiwgY2hhaW4sIG9mZnNldCk7Ci19Ci0KLXZvaWQgcHJpbnRfb2Zmc2V0cyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXByaW50X29mZnNldChwcml2LCAwKTsKLQlwcmludF9vZmZzZXQocHJpdiwgNCk7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDEpOwotCXByaW50X29mZnNldChwcml2LCA1KTsKLQlwcmludF9vZmZzZXQocHJpdiwgMik7Ci0JcHJpbnRfb2Zmc2V0KHByaXYsIDYpOwotfQotCi0KLXN0cnVjdCBjaGFpbnMgewotCXUzMiBjYWxpOwkJLyogY2FsaWJyYXRlICB2YWx1ZSovCi0KLSNkZWZpbmUgIE5FRURfQ0FMSUJSQVRFCQkwCi0jZGVmaW5lICBTVUNDRVNTX0NBTElCUkFURQkxCi0JaW50IHN0YXR1czsKLX07Ci0KLXN0YXRpYyB2b2lkIGNoYWluX2NhbGlicmF0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgY2hhaW5zICpjaGFpbnMsCi0JCQkgICAgdW5zaWduZWQgaW50IG51bSkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgY2FsaWJyYSA9IGNoYWluc1tudW1dLmNhbGk7Ci0KLQlpZiAobnVtIDwgMykKLQkJY2FsaWJyYSB8PSAweDE0MDA7Ci0JZWxzZQotCQljYWxpYnJhIHw9IDB4MTUwMDsKLQotCXN3aXRjaCAobnVtKSB7Ci0JY2FzZSAwOgotCWNhc2UgNDoKLQkJc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIGNhbGlicmEpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JY2FzZSA1OgotCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMSwgY2FsaWJyYSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQljYXNlIDY6Ci0JCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAyLCBjYWxpYnJhKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotfSAvKiBjaGFpbl9jYWxpYnJhdGUgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9jYWxpYnJldGVfdmFsdWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXUzMiBvZmZzZXQ7Ci0KLQlpb3dyaXRlMzIoKG51bSksIGN0bCArIEFHTlhfQUNJX1NFTENIQUlOKTsKLQkvKiBGSVhNRSAqLwotCXVkZWxheSgxMCk7Ci0Jb2Zmc2V0ID0gKGlvcmVhZDMyKGN0bCArIEFHTlhfQUNJX09GRlNFVCkpOwotCi0JaWYgKG9mZnNldCA8IDB4ZikgewotCQljaGFpbnNbbnVtXS5zdGF0dXMgPSBTVUNDRVNTX0NBTElCUkFURTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChudW0gPT0gMCB8fCBudW0gPT0gMSB8fCBudW0gPT0gMikgewotCQlpZiAoMCA9PSBjaGFpbnNbbnVtXS5jYWxpKQotCQkJY2hhaW5zW251bV0uY2FsaSA9IDB4ZmY7Ci0JCWVsc2UKLQkJCWNoYWluc1tudW1dLmNhbGktLTsKLQl9IGVsc2UKLQkJY2hhaW5zW251bV0uY2FsaSsrOwotCi0JY2hhaW5zW251bV0uc3RhdHVzID0gTkVFRF9DQUxJQlJBVEU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWxpYnJhX2RlbGF5KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQl1bnNpZ25lZCBpbnQgaSA9IDEwMDsKLQotCXdtYigpOwotCXdoaWxlICgtLWkpIHsKLQkJcmVnID0gKGlvcmVhZDMyKGN0bCArIEFHTlhfQUNJX1NUQVRVUykpOwotCQlpZiAocmVnID09IDB4NDAwMCkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAoIWkpCi0JCXByaW50ayhQRlggImNhbGlicmF0aW9uIGZhaWxlZFxuIik7Ci19Ci0KLXZvaWQgZG9fY2FsaWJyYXRpb24oc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlzdHJ1Y3QgY2hhaW5zIGNoYWluc1s3XTsKLQl1bnNpZ25lZCBpbnQgaSwgajsKLQlBR05YX1RSQUNFOwotCi0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoaSA9PSAzKQotCQkJY29udGludWU7Ci0KLQkJY2hhaW5zW2ldLmNhbGkgPSAweDdmOwotCQljaGFpbnNbaV0uc3RhdHVzID0gTkVFRF9DQUxJQlJBVEU7Ci0JfQotCi0JLyogRklYTUUgMHgzMDAgaXMgYSBtYWdpYyBudW1iZXIgKi8KLQlmb3IgKGogPSAwOyBqIDwgMHgzMDA7IGorKykgewotCQlpZiAoY2hhaW5zWzBdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSAmJgotCQkgICAgY2hhaW5zWzFdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSAmJgotCQkgICAgY2hhaW5zWzJdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSAmJgotCQkgICAgY2hhaW5zWzRdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSAmJgotCQkgICAgY2hhaW5zWzVdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSAmJgotCQkgICAgY2hhaW5zWzZdLnN0YXR1cyA9PSBTVUNDRVNTX0NBTElCUkFURSkKLQkJCWJyZWFrOwotCi0JCS8qIEF0dGVudGlvbiwgdGhlcmUgaXMgbm8gY2hhaW4gMyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCQlpZiAoaSA9PSAzKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGNoYWluc1tpXS5zdGF0dXMgPT0gTkVFRF9DQUxJQlJBVEUpCi0JCQkJY2hhaW5fY2FsaWJyYXRlKHByaXYsIGNoYWlucywgaSk7Ci0JCX0KLQkJLyogV3JpdGUgMHgxIHRvIENhbGlicmF0aW9uIE1lYXN1cmUgKi8KLQkJaW93cml0ZTMyKCgweDEpLCBjdGwgKyBBR05YX0FDSV9NRUFTVVJFKTsKLQkJY2FsaWJyYV9kZWxheShwcml2KTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCQlpZiAoaSA9PSAzKQotCQkJCWNvbnRpbnVlOwotCi0JCQlnZXRfY2FsaWJyZXRlX3ZhbHVlKHByaXYsIGNoYWlucywgaSk7Ci0JCX0KLQl9Ci0JcHJpbnRrKFBGWCAiQ2xpYnJhdGUgdGltZXMgaXMgJWRcbiIsIGopOwotCXByaW50X29mZnNldHMocHJpdik7Ci19IC8qIGRvX2NhbGlicmF0aW9uICovCi0KLXZvaWQgYW50ZW5uYV9jYWxpYnJhdGUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTElTVEFOVCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OTUVBU0FOVCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQUNUSUFOVCwgMHgzKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9OQ0FQVEFOVCwgMHgzKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0FOVENGRywgMHgxZik7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDB4MjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPSU5BQ1QsIDB4MjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPRFlOQSwgMHgyMCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEEsIDB4NjQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBBTCwgMHg2NCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEIsIDB4NDYpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1RIRDBCVEZFU1QsIDB4M2MpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0hUSCwgMHg2NCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfU0lHTFRILCAweDMwKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDIwKTsKLQkvKiBGaXhtZSAqLwotCXVkZWxheSg4MCk7Ci0JLyogICAgMS4gU2hvdWxkIHJlYWQgMHgwICAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKDB4MCAhPSByZWcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbm1hdGNoZWQgcmYgY2hpcHMgcmVzdWx0XG4iKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAwKTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQotCXNwaV9yY193cml0ZShjdGwsIFJGX0NISVAwLCAweDIyKTsKLQl1ZGVsYXkoODApOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7Ci0JaWYgKDB4MCAhPSByZWcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbm1hdGNoZWQgcmYgY2hpcHMgcmVzdWx0XG4iKTsKLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDA1KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JTVEdDVEwsIDB4MSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfUlNUR0NUTCwgMHgwKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9QTV9TT0ZUUlNUKTsKLQlyZWcgfD0gMHgxYzAwMDAzMjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1NPRlRSU1QsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1BNX1BMTENUTCk7Ci0JcmVnIHw9IDB4MDAwM2YwNzsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1BNX1BMTENUTCwgcmVnKTsKLQotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgMHhlYzUwKTsKLQlyZWcgfD0gMHg0MDsKLQlhZ254X3dyaXRlMzIoY3RsLCAweGVjNTAsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4ZmY4KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9DSEFJTk5VTSwgMHg2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCAweDE5ODc0LCAweDApOwotCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCAweDE3MDApOwotCi0JLyogQ2FsaWJyYXRlIHRoZSBCYXNlQmFuZEZpbHRlciAqLwotCWJhc2VfYmFuZF9maWx0ZXJfY2FsaWJyYXRlKHByaXYpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTAwMik7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCwgMHgxZCk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDEsIDB4MWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQyLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUV1JJVEUsIDB4MSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHgzZmYpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfVElNRVIxLCAweDI3KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjIsIDB4MjcpOwotCi0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTQwMCk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTUwMCk7Ci0KLQkvKiBNZWFzdXJlIENhbGlicmF0aW9uICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTUVBU1VSRSwgMHgxKTsKLQljYWxpYnJhX2RlbGF5KHByaXYpOwotCi0JLyogZG8gY2FsaWJyYXRpb24gKi8KLQlkb19jYWxpYnJhdGlvbihwcml2KTsKLQotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MjEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMiwgMHgyNyk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9BQ0lfTEVOLCAweGYpOwotCi0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCk7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMCwgcmVnKTsKLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIpOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDIsIHJlZyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUV1JJVEUsIDB4MCk7Ci0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLX0gLyogYW50ZW5uYV9jYWxpYnJhdGUgKi8KLQotdm9pZCBfX2FudGVubmFfY2FsaWJyYXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCS8qIENhbGlicmF0ZSB0aGUgQmFzZUJhbmRGaWx0ZXIgKi8KLQkvKiBiYXNlX2JhbmRfZmlsdGVyX2NhbGlicmF0ZShwcml2KTsgKi8KLQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgMHgxMDAyKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDAsIDB4MWQpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQxLCAweDFkKTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMiwgMHgxZCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUV1JJVEUsIDB4MSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9NT0RFLCAweDEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX0xFTiwgMHgzZmYpOwotCi0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MjcpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMiwgMHgyNyk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTQwMCk7Ci0Jc3BpX3JmX3dyaXRlKGN0bCwgUkZfQ0hJUDB8UkZfQ0hJUDF8UkZfQ0hJUDIsIDB4MTUwMCk7Ci0JLyogTWVhc3VyZSBDYWxpYnJhdGlvbiAqLwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX01FQVNVUkUsIDB4MSk7Ci0JY2FsaWJyYV9kZWxheShwcml2KTsKLQlkb19jYWxpYnJhdGlvbihwcml2KTsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9SWE9WRVJJREUsIDB4MCk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9USU1FUjEsIDB4MjEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQUNJX1RJTUVSMiwgMHgyNyk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0FDSV9MRU4sIDB4Zik7Ci0KLQlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQwKTsKLQlyZWcgJj0gMHhmOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0dBSU5TRVQwLCByZWcpOwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDEpOwotCXJlZyAmPSAweGY7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVDEsIHJlZyk7Ci0JcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMik7Ci0JcmVnICY9IDB4ZjsKLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9HQUlOU0VUMiwgcmVnKTsKLQotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfR0FJTlNFVFdSSVRFLCAweDApOwotCi0JLyogV3JpdGUgMHgzIEdhaW4gQ29udHJvbCBEaXNjb3ZlcnkgTW9kZSAqLwotCWVuYWJsZV9yZWNlaXZlcihwcml2KTsKLX0KLQotaW50IGFnbnhfc2V0X2NoYW5uZWwoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCi17Ci0JQUdOWF9UUkFDRTsKLQotCXByaW50ayhLRVJOX0VSUiBQRlggIkNoYW5uZWwgaXMgJWQgJXNcbiIsIGNoYW5uZWwsIF9fZnVuY19fKTsKLQlyYWRpb19jaGFubmVsX3NldChwcml2LCBjaGFubmVsKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5jIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlN2RiNWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlICJwaHkuaCIKLSNpbmNsdWRlICJzdGEuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotCi12b2lkIGhhc2hfcmVhZChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1MzIgcmVnaGksIHUzMiByZWdsbywgdTggc3RhX2lkKQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCi0JcmVnbG8gJj0gMHhGRkZGOwotCXJlZ2xvIHw9IDB4MzAwMDAwMDA7Ci0JcmVnbG8gfD0gMHg0MDAwMDAwMDsJLyogU2V0IHN0YXR1cyBidXN5ICovCi0JcmVnbG8gfD0gc3RhX2lkIDw8IDE2OwotCi0JaW93cml0ZTMyKDAsIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCi0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7Ci19Ci0KLXZvaWQgaGFzaF93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IHN0YV9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnaGksIHJlZ2xvOwotCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG1hY19hZGRyKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVwZGF0ZSBoYXNoIHRhYmxlOiBJbnZhbGlkIGh3YWRkciFcbiIpOwotCi0JcmVnaGkgPSBtYWNfYWRkclswXSA8PCAyNCB8IG1hY19hZGRyWzFdIDw8IDE2IHwgbWFjX2FkZHJbMl0gPDwgOCB8IG1hY19hZGRyWzNdOwotCXJlZ2xvID0gbWFjX2FkZHJbNF0gPDwgOCB8IG1hY19hZGRyWzVdOwotCXJlZ2xvIHw9IDB4MTAwMDAwMDA7CS8qIFNldCBoYXNoIGNvbW1tYW5kICovCi0JcmVnbG8gfD0gMHg0MDAwMDAwMDsJLyogU2V0IHN0YXR1cyBidXN5ICovCi0JcmVnbG8gfD0gc3RhX2lkIDw8IDE2OwotCi0JaW93cml0ZTMyKDAsIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCWlvd3JpdGUzMihyZWdoaSwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCi0JcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCWlmICghKHJlZ2xvICYgMHg4MDAwMDAwMCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVcGRhdGUgaGFzaCB0YWJsZSBmYWlsZWRcbiIpOwotfQotCi12b2lkIGhhc2hfZGVsZXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiByZWdoaSwgdTMyIHJlZ2xvLCB1OCBzdGFfaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0KLQlyZWdsbyAmPSAweEZGRkY7Ci0JcmVnbG8gfD0gMHgyMDAwMDAwMDsKLQlyZWdsbyB8PSAweDQwMDAwMDAwOwkvKiBTZXQgc3RhdHVzIGJ1c3kgKi8KLQlyZWdsbyB8PSBzdGFfaWQgPDwgMTY7Ci0KLQlpb3dyaXRlMzIoMCwgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfRkxBRyk7Ci0JaW93cml0ZTMyKHJlZ2hpLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQlpb3dyaXRlMzIocmVnbG8sIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7Ci0JcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9ISUdIKTsKLQotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlwcmludGsoUEZYICJSWCBoYXNoIGNtZCBhcmUgOiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKLQotfQotCi12b2lkIGhhc2hfZHVtcChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1OCBzdGFfaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZ2hpLCByZWdsbzsKLQotCXJlZ2xvID0gMHg0MDAwMDAwMDsgIAkvKiBzdGF0dXMgYml0ICovCi0JaW93cml0ZTMyKHJlZ2xvLCBjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwotCWlvd3JpdGUzMihzdGFfaWQgPDwgMTYsIGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9EQVRBKTsKLQotCXVkZWxheSg4MCk7Ci0KLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKLQlwcmludGsoUEZYICJoYXNoIGNtZCBhcmUgOiAlLjh4JS44eFxuIiwgcmVnaGksIHJlZ2xvKTsKLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0ZMQUcpOwotCXByaW50ayhQRlggImhhc2ggZmxhZyBpcyA6ICUuOHhcbiIsIHJlZ2hpKTsKLQlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfRFVNUF9NU1QpOwotCXJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9EVU1QX0xTVCk7Ci0JcHJpbnRrKFBGWCAiaGFzaCBkdW1wIG1zdCBsc3Q6ICUuOHglLjh4XG4iLCByZWdoaSwgcmVnbG8pOwotCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9EVU1QX0RBVEEpOwotCXByaW50ayhQRlggImhhc2ggZHVtcCBkYXRhOiAlLjh4XG4iLCByZWdoaSk7Ci19Ci0KLXZvaWQgZ2V0X3N0YV9wb3dlcihzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgKnBvd2VyLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQltZW1jcHlfZnJvbWlvKHBvd2VyLCBjdGwgKyBBR05YX1RYTV9TVEFQT1dURU1QICsgc2l6ZW9mKCpwb3dlcikgKiBzdGFfaWR4LAotCQkgICAgICBzaXplb2YoKnBvd2VyKSk7Ci19Ci0KLWlubGluZSB2b2lkCi1zZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCS8qIEZJWE1FICAgMi4gV3JpdGUgVGVtcGxhdGUgdG8gb2Zmc2V0ICsgc3RhdGlvbiBudW1iZXIgICovCi0JbWVtY3B5X3RvaW8oY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKLQkJICAgIHBvd2VyLCBzaXplb2YoKnBvd2VyKSk7Ci19Ci0KLQotdm9pZCBnZXRfc3RhX3R4X3dxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV90eF93cSAqdHhfd3EsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4LCB1bnNpZ25lZCBpbnQgd3FfaWR4KQotewotCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7Ci0JbWVtY3B5X2Zyb21pbyh0eF93cSwgZGF0YSArIEFHTlhfUERVX1RYX1dRICsgc2l6ZW9mKCp0eF93cSkgKiBTVEFfVFhfV1FfTlVNICogc3RhX2lkeCArCi0JCSAgICAgIHNpemVvZigqdHhfd3EpICogd3FfaWR4LCAgc2l6ZW9mKCp0eF93cSkpOwotCi19Ci0KLWlubGluZSB2b2lkIHNldF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3R4X3dxICp0eF93cSwKLQkJICAgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQltZW1jcHlfdG9pbyhkYXRhICsgQUdOWF9QRFVfVFhfV1EgKyBzaXplb2YoKnR4X3dxKSAqIFNUQV9UWF9XUV9OVU0gKiBzdGFfaWR4ICsKLQkJICAgIHNpemVvZigqdHhfd3EpICogd3FfaWR4LCB0eF93cSwgc2l6ZW9mKCp0eF93cSkpOwotfQotCi0KLXZvaWQgZ2V0X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGEgKnN0YSwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQotCW1lbWNweV9mcm9taW8oc3RhLCBkYXRhICsgQUdOWF9QRFVQT09MICsgc2l6ZW9mKCpzdGEpICogc3RhX2lkeCwKLQkJICAgICAgc2l6ZW9mKCpzdGEpKTsKLX0KLQotaW5saW5lIHZvaWQgc2V0X3N0YShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGEgKnN0YSwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jdm9pZCBfX2lvbWVtICpkYXRhID0gcHJpdi0+ZGF0YTsKLQotCW1lbWNweV90b2lvKGRhdGEgKyBBR05YX1BEVVBPT0wgKyBzaXplb2YoKnN0YSkgKiBzdGFfaWR4LAotCQkgICAgc3RhLCBzaXplb2YoKnN0YSkpOwotfQotCi0vKiBGSVhNRSAqLwotdm9pZCBzdGFfcG93ZXJfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgc3RhX2lkeCkKLXsKLQlzdHJ1Y3QgYWdueF9zdGFfcG93ZXIgcG93ZXI7Ci0JdTMyIHJlZzsKLQlBR05YX1RSQUNFOwotCi0JbWVtc2V0KCZwb3dlciwgMCwgc2l6ZW9mKHBvd2VyKSk7Ci0JcmVnID0gYWdueF9zZXRfYml0cyhFRENGLCBFRENGX1NISUZULCAweDEpOwotCXBvd2VyLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7Ci0Jc2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIHN0YV9pZHgpOwotCXVkZWxheSg0MCk7Ci19IC8qIGFkZF9wb3dlcl90ZW1wbGF0ZSAqLwotCi0KLS8qIEBudW06IFRoZSAjbnVtYmVyIG9mIHN0YXRpb24gdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBjYXJkICovCi1zdGF0aWMgdm9pZCBzdGFfdHhfd29ya3F1ZXVlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHN0YV9pZHgpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3R4X3dxIHR4X3dxOwotCXUzMiByZWc7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQltZW1zZXQoJnR4X3dxLCAwLCBzaXplb2YodHhfd3EpKTsKLQotCXJlZyA9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9WQUxJRCwgV09SS19RVUVVRV9WQUxJRF9TSElGVCwgMSk7Ci0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMSk7Ci0vKglyZWcgfD0gYWdueF9zZXRfYml0cyhXT1JLX1FVRVVFX0FDS19UWVBFLCBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZULCAwKTsgKi8KLQl0eF93cS5yZWcyIHw9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQkvKiBTdXBwb3NlIGFsbCA4IHRyYWZmaWMgY2xhc3MgYXJlIHVzZWQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgU1RBX1RYX1dRX05VTTsgaSsrKQotCQlzZXRfc3RhX3R4X3dxKHByaXYsICZ0eF93cSwgc3RhX2lkeCwgaSk7Ci19IC8qIHN0YV90eF93b3JrcXVldWVfaW5pdCAqLwotCi0KLXN0YXRpYyB2b2lkIHN0YV90cmFmZmljX2luaXQoc3RydWN0IGFnbnhfc3RhX3RyYWZmaWMgKnRyYWZmaWMpCi17Ci0JdTMyIHJlZzsKLQltZW1zZXQodHJhZmZpYywgMCwgc2l6ZW9mKCp0cmFmZmljKSk7Ci0KLQlyZWcgPSBhZ254X3NldF9iaXRzKE5FV19QQUNLRVQsIE5FV19QQUNLRVRfU0hJRlQsIDEpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfVkFMSUQsIFRSQUZGSUNfVkFMSURfU0hJRlQsIDEpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVFJBRkZJQ19BQ0tfVFlQRSwgVFJBRkZJQ19BQ0tfVFlQRV9TSElGVCwgMSk7ICovCi0JdHJhZmZpYy0+cmVnMCA9IGNwdV90b19sZTMyKHJlZyk7Ci0KLQkvKiAJMy4gc2V0dGluZyBSWCBTZXF1ZW5jZSBOdW1iZXIgdG8gNDA5NSAqLwotCXJlZyA9IGFnbnhfc2V0X2JpdHMoUlhfU0VRVUVOQ0VfTlVNLCBSWF9TRVFVRU5DRV9OVU1fU0hJRlQsIDQwOTUpOwotCXRyYWZmaWMtPnJlZzEgPSBjcHVfdG9fbGUzMihyZWcpOwotfQotCi0KLS8qIEBudW06IFRoZSAjbnVtYmVyIG9mIHN0YXRpb24gdGhhdCBpcyB2aXNpYmxlIHRvIHRoZSBjYXJkICovCi12b2lkIHN0YV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBzdGFfaWR4KQotewotCS8qIEZJWE1FIHRoZSBsZW5ndGggb2Ygc3RhIGlzIDI1NiBieXRlcyBJcyB0aGF0Ci0JICogZGFuZ2Vyb3VzIHRvIHN0YWNrIG92ZXJmbG93PyAqLwotCXN0cnVjdCBhZ254X3N0YSBzdGE7Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQotCW1lbXNldCgmc3RhLCAwLCBzaXplb2Yoc3RhKSk7Ci0JLyogU2V0IHZhbGlkIHRvIDEgKi8KLQlyZWcgPSBhZ254X3NldF9iaXRzKFNUQVRJT05fVkFMSUQsIFNUQVRJT05fVkFMSURfU0hJRlQsIDEpOwotCS8qIFNldCBFbmFibGUgQ29uY2F0ZW5hdGlvbiB0byAwICg/KSAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKEVOQUJMRV9DT05DQVRFTkFUSU9OLCBFTkFCTEVfQ09OQ0FURU5BVElPTl9TSElGVCwgMCk7Ci0JLyogU2V0IEVuYWJsZSBEZWNvbXByZXNzaW9uIHRvIDAgKD8pICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoRU5BQkxFX0RFQ09NUFJFU1NJT04sIEVOQUJMRV9ERUNPTVBSRVNTSU9OX1NISUZULCAwKTsKLQlzdGEucmVnID0gY3B1X3RvX2xlMzIocmVnKTsKLQotCS8qIEluaXRpYWxpemUgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzcyBTdHJ1Y3R1cmVzIGJ5OiAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCXN0YV90cmFmZmljX2luaXQoc3RhLnRyYWZmaWMgKyBpKTsKLQotCXNldF9zdGEocHJpdiwgJnN0YSwgc3RhX2lkeCk7Ci0Jc3RhX3R4X3dvcmtxdWV1ZV9pbml0KHByaXYsIHN0YV9pZHgpOwotfSAvKiBzdGFfZGVzY3JpcHRvcl9pbml0ICovCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1MDRlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0jaWZuZGVmIEFHTlhfU1RBX0hfCi0jZGVmaW5lIEFHTlhfU1RBX0hfCi0KLSNkZWZpbmUgU1RBX1RYX1dRX05VTQk4CS8qIFRoZSBudW1iZXIgb2YgVFggd29ya3F1ZXVlIG9uZSBTVEEgaGFzICovCi0KLXN0cnVjdCBhZ254X2hhc2hfY21kIHsKLQlfX2JlMzIgY21kaGk7Ci0jZGVmaW5lIE1BQ0xPCQkweEZGRkYwMDAwCi0jZGVmaW5lIE1BQ0xPX1NISUZUCTE2Ci0jZGVmaW5lIFNUQV9JRAkJMHgwMDAwRkZGMAotI2RlZmluZSBTVEFfSURfU0hJRlQJNAotI2RlZmluZSBDTUQJCTB4MDAwMDAwMEMKLSNkZWZpbmUgQ01EX1NISUZUCTIKLSNkZWZpbmUgU1RBVFVTCQkweDAwMDAwMDAyCi0jZGVmaW5lIFNUQVRVU19TSElGVAkxCi0jZGVmaW5lIFBBU1MJCTB4MDAwMDAwMDEKLSNkZWZpbmUgUEFTU19TSElGVAkxCi0JX19iZTMyIGNtZGxvOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyoKLSAqIFN0YXRpb24gUG93ZXIgVGVtcGxhdGUKLSAqIEZJWE1FIEp1c3QgZm9yIGFnbjEwMCB5ZXQKLSAqLwotc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHsKLQlfX2xlMzIgcmVnOwotI2RlZmluZSBTSUdOQUwJCQkweDAwMDAwMEZGIC8qIHNpZ25hbCAqLwotI2RlZmluZSBTSUdOQUxfU0hJRlQJCTAKLSNkZWZpbmUgUkFURQkJCTB4MDAwMDBGMDAKLSNkZWZpbmUgUkFURV9TSElGVAkJOAotI2RlZmluZSBUSUZTCQkJMHgwMDAwMTAwMAotI2RlZmluZSBUSUZTX1NISUZUCQkxMgotI2RlZmluZSBFRENGCQkJMHgwMDAwMjAwMAotI2RlZmluZSBFRENGX1NISUZUCQkxMwotI2RlZmluZSBDSEFOTkVMX0JPTkQJCTB4MDAwMDQwMDAKLSNkZWZpbmUgQ0hBTk5FTF9CT05EX1NISUZUCTE0Ci0jZGVmaW5lIFBIWV9NT0RFCQkweDAwMDM4MDAwCi0jZGVmaW5lIFBIWV9NT0RFX1NISUZUCQkxNQotI2RlZmluZSBQT1dFUl9MRVZFTAkJMHgwMDdDMDAwMAotI2RlZmluZSBQT1dFUl9MRVZFTF9TSElGVAkxOAotI2RlZmluZSBOVU1fVFJBTlNNSVRURVJTCTB4MDA4MDAwMDAKLSNkZWZpbmUgTlVNX1RSQU5TTUlUVEVSU19TSElGVAkyMwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qCi0gKiBUWCBXb3JrcXVldWUgRGVzY3JpcHRvcgotICovCi1zdHJ1Y3QgYWdueF9zdGFfdHhfd3EgewotCV9fbGUzMiByZWcwOwotI2RlZmluZSBIRUFEX1BPSU5URVJfTE9XCTB4RkYwMDAwMDAgLyogSGVhZCBwb2ludGVyIGxvdyAqLwotI2RlZmluZSBIRUFEX1BPSU5URVJfTE9XX1NISUZUCTI0Ci0jZGVmaW5lIFRBSUxfUE9JTlRFUgkJMHgwMEZGRkZGRiAvKiBUYWlsIHBvaW50ZXIgKi8KLSNkZWZpbmUgVEFJTF9QT0lOVEVSX1NISUZUCTAKLQotCV9fbGUzMiByZWczOwotI2RlZmluZSBBQ0tfUE9JTlRFUl9MT1cJICAgICAgICAweEZGRkYwMDAwCS8qIEFDSyBwb2ludGVyIGxvdyAqLwotI2RlZmluZSBBQ0tfUE9JTlRFUl9MT1dfU0hJRlQJMTYKLSNkZWZpbmUgSEVBRF9QT0lOVEVSX0hJR0gJMHgwMDAwRkZGRgkvKiBIZWFkIHBvaW50ZXIgaGlnaCAqLwotI2RlZmluZSBIRUFEX1BPSU5URVJfSElHSF9TSElGVAkwCi0KLQlfX2xlMzIgcmVnMTsKLS8qIEFDSyB0aW1lb3V0IHRhaWwgcGFja2V0IGNvdW50ICovCi0jZGVmaW5lIEFDS19USU1PVVRfVEFJTF9QQUNLX0NOVAkweEZGRjAwMDAwCi0jZGVmaW5lIEFDS19USU1PVVRfVEFJTF9QQUNLX0NOVF9TSElGVAkyMAotLyogSGVhZCB0aW1lb3V0IHRhaWwgcGFja2V0IGNvdW50ICovCi0jZGVmaW5lIEhFQURfVElNT1VUX1RBSUxfUEFDS19DTlQJMHgwMDBGRkYwMAotI2RlZmluZSBIRUFEX1RJTU9VVF9UQUlMX1BBQ0tfQ05UX1NISUZUCTgKLSNkZWZpbmUgQUNLX1BPSU5URVJfSElHSAkgICAgICAgIDB4MDAwMDAwRkYgLyogQUNLIHBvaW50ZXIgaGlnaCAqLwotI2RlZmluZSBBQ0tfUE9JTlRFUl9ISUdIX1NISUZUCQkwCi0KLQlfX2xlMzIgcmVnMjsKLSNkZWZpbmUgV09SS19RVUVVRV9WQUxJRAkJMHg4MDAwMDAwMCAvKiB2YWxpZCAqLwotI2RlZmluZSBXT1JLX1FVRVVFX1ZBTElEX1NISUZUCQkzMQotI2RlZmluZSBXT1JLX1FVRVVFX0FDS19UWVBFCQkweDQwMDAwMDAwIC8qIEFDSyB0eXBlICovCi0jZGVmaW5lIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQJMzAKLS8qIEhlYWQgdGltZW91dCB3aW5kb3cgbGltaXQgZnJhZ21lbnRhdGlvbiBjb3VudCAqLwotI2RlZmluZSBIRUFEX1RJTU9VVF9XSU5fTElNX0ZSQUdfQ05UCTB4M0ZGRjAwMDAKLSNkZWZpbmUgSEVBRF9USU1PVVRfV0lOX0xJTV9GUkFHX0NOVF9TSElGVAkxNgotLyogSGVhZCB0aW1lb3V0IHdpbmRvdyBsaW1pdCBieXRlIGNvdW50ICovCi0jZGVmaW5lIEhFQURfVElNT1VUX1dJTl9MSU1fQllURV9DTlQJMHgwMDAwRkZGRgotI2RlZmluZSBIRUFEX1RJTU9VVF9XSU5fTElNX0JZVEVfQ05UX1NISUZUCSAwCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi0vKgotICogVHJhZmZpYyBDbGFzcyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IGFnbnhfc3RhX3RyYWZmaWMgewotCV9fbGUzMiByZWcwOwotI2RlZmluZSBBQ0tfVElNT1VUX0NOVAkJMHhGRjgwMDAwMCAvKiBBQ0sgVGltZW91dCBDb3VudHMgKi8KLSNkZWZpbmUgQUNLX1RJTU9VVF9DTlRfU0hJRlQJMjMKLSNkZWZpbmUgVFJBRkZJQ19BQ0tfVFlQRQkweDAwNjAwMDAwIC8qIEFDSyBUeXBlICovCi0jZGVmaW5lIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQJMjEKLSNkZWZpbmUgTkVXX1BBQ0tFVAkJMHgwMDEwMDAwMCAvKiBOZXcgUGFja2V0ICAqLwotI2RlZmluZSBORVdfUEFDS0VUX1NISUZUCTIwCi0jZGVmaW5lIFRSQUZGSUNfVkFMSUQJCTB4MDAwODAwMDAgLyogVmFsaWQgKi8KLSNkZWZpbmUgVFJBRkZJQ19WQUxJRF9TSElGVAkxOQotI2RlZmluZSBSWF9IRFJfREVTQ19QT0lOVEVSCTB4MDAwN0ZGRkYgLyogUlggSGVhZGVyIERlc2NyaXB0ZXIgcG9pbnRlciAqLwotI2RlZmluZSBSWF9IRFJfREVTQ19QT0lOVEVSX1NISUZUCSAwCi0KLQlfX2xlMzIgcmVnMTsKLSNkZWZpbmUgUlhfUEFDS0VUX1RJTUVTVEFNUAkweEZGRkYwMDAwIC8qIFJYIFBhY2tldCBUaW1lc3RhbXAgKi8KLSNkZWZpbmUgUlhfUEFDS0VUX1RJTUVTVEFNUF9TSElGVAkxNgotI2RlZmluZSBUUkFGRklDX1JFU0VSVkVECTB4MDAwMEUwMDAgLyogUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgVFJBRkZJQ19SRVNFUlZFRF9TSElGVCAgMTMKLSNkZWZpbmUgU1YJCQkweDAwMDAxMDAwIC8qIHN2ICovCi0jZGVmaW5lIFNWX1NISUZUCQkxMgotI2RlZmluZSBSWF9TRVFVRU5DRV9OVU0JCTB4MDAwMDBGRkYgLyogUlggU2VxdWVuY2UgTnVtYmVyICovCi0jZGVmaW5lIFJYX1NFUVVFTkNFX05VTV9TSElGVAkwCi0KLQlfX2xlMzIgdHhfcmVwbGF5X2NudF9sb3c7IC8qIFRYIFJlcGxheSBDb3VudGVyIExvdyAqLwotCi0JX19sZTE2IHR4X3JlcGxheV9jbnRfaGlnaDsgLyogVFggUmVwbGF5IENvdW50ZXIgSGlnaCAqLwotCV9fbGUxNiByeF9yZXBsYXlfY250X2hpZ2g7IC8qIFJYIFJlcGxheSBDb3VudGVyIEhpZ2ggKi8KLQotCV9fYmUzMiByeF9yZXBsYXlfY250X2xvdzsgLyogUlggUmVwbGF5IENvdW50ZXIgTG93ICovCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotLyoKLSAqIFN0YXRpb24gRGVzY3JpcHRvcnMKLSAqLwotc3RydWN0IGFnbnhfc3RhIHsKLQlfX2xlMzIgdHhfc2Vzc2lvbl9rZXlzWzRdOyAvKiBUcmFuc21pdCBTZXNzaW9uIEtleSAoMC0zKSAqLwotCV9fbGUzMiByeF9zZXNzaW9uX2tleXNbNF07IC8qIFJlY2VpdmUgU2Vzc2lvbiBLZXkgKDAtMykgKi8KLQotCV9fbGUzMiByZWc7Ci0jZGVmaW5lIElEXzEJCQkweEMwMDAwMDAwIC8qIGlkIDEgKi8KLSNkZWZpbmUgSURfMV9TSElGVAkJMzAKLSNkZWZpbmUgSURfMAkJCTB4MzAwMDAwMDAgLyogaWQgMCAqLwotI2RlZmluZSBJRF8wX1NISUZUCQkyOAotI2RlZmluZSBFTkFCTEVfQ09OQ0FURU5BVElPTgkweDBGRjAwMDAwIC8qIEVuYWJsZSBjb25jYXRlbmF0aW9uICovCi0jZGVmaW5lIEVOQUJMRV9DT05DQVRFTkFUSU9OX1NISUZUCTIwCi0jZGVmaW5lIEVOQUJMRV9ERUNPTVBSRVNTSU9OCTB4MDAwRkYwMDAgLyogRW5hYmxlIGRlY29tcHJlc3Npb24gKi8KLSNkZWZpbmUgRU5BQkxFX0RFQ09NUFJFU1NJT05fU0hJRlQJMTIKLSNkZWZpbmUgU1RBX1JFU0VSVkVECQkweDAwMDAwQzAwIC8qIFJlc2VydmVkICovCi0jZGVmaW5lIFNUQV9SRVNFUlZFRF9TSElGVAkxMAotI2RlZmluZSBFQVAJCQkweDAwMDAwMjAwIC8qIEVBUCAqLwotI2RlZmluZSBFQVBfU0hJRlQJCTkKLSNkZWZpbmUgRURfTlVMTAkJCTB4MDAwMDAxMDAgLyogRUQgTlVMTCAqLwotI2RlZmluZSBFRF9OVUxMX1NISUZUCQk4Ci0jZGVmaW5lIEVOQ1JZUFRJT05fUE9MSUNZCTB4MDAwMDAwRTAgLyogRW5jcnlwdGlvbiBQb2xpY3kgKi8KLSNkZWZpbmUgRU5DUllQVElPTl9QT0xJQ1lfU0hJRlQgNQotI2RlZmluZSBERUZJTkVEX0tFWV9JRAkJMHgwMDAwMDAxOCAvKiBEZWZpbmVkIEtleSBJRCAqLwotI2RlZmluZSBERUZJTkVEX0tFWV9JRF9TSElGVAkzCi0jZGVmaW5lIEZJWEVEX0tFWQkJMHgwMDAwMDAwNCAvKiBGaXhlZCBLZXkgKi8KLSNkZWZpbmUgRklYRURfS0VZX1NISUZUCQkyCi0jZGVmaW5lIEtFWV9WQUxJRAkJMHgwMDAwMDAwMiAvKiBLZXkgVmFsaWQgKi8KLSNkZWZpbmUgS0VZX1ZBTElEX1NISUZUCQkxCi0jZGVmaW5lIFNUQVRJT05fVkFMSUQJCTB4MDAwMDAwMDEgLyogU3RhdGlvbiBWYWxpZCAqLwotI2RlZmluZSBTVEFUSU9OX1ZBTElEX1NISUZUCTAKLQotCV9fbGUzMiB0eF9hZXNfYmxrc191bmljYXN0OyAvKiBUWCBBRVMgQmxrcyBVbmljYXN0ICovCi0JX19sZTMyIHJ4X2Flc19ibGtzX3VuaWNhc3Q7IC8qIFJYIEFFUyBCbGtzIFVuaWNhc3QgKi8KLQotCV9fbGUxNiBhZXNfZm9ybWF0X2Vycl91bmljYXN0X2NudDsgLyogQUVTIEZvcm1hdCBFcnJvciBVbmljYXN0IENvdW50cyAqLwotCV9fbGUxNiBhZXNfcmVwbGF5X3VuaWNhc3Q7IC8qIEFFUyBSZXBsYXkgVW5pY2FzdCAqLwotCi0JX19sZTE2IGFlc19kZWNyeXB0X2Vycl91bmljYXN0OwkvKiBBRVMgRGVjcnlwdCBFcnJvciBVbmljYXN0ICovCi0JX19sZTE2IGFlc19kZWNyeXB0X2Vycl9kZWZhdWx0OwkvKiBBRVMgRGVjcnlwdCBFcnJvciBkZWZhdWx0ICovCi0KLQlfX2xlMTYgc2luZ2xlX3JldHJ5X3BhY2tldHM7IC8qIFNpbmdsZSBSZXRyeSBQYWNrZXRzICovCi0JX19sZTE2IGZhaWxlZF90eF9wYWNrZXRzOyAvKiBGYWlsZWQgVHggUGFja2V0cyAqLwotCi0JX19sZTE2IG11dGlfcmV0cnlfcGFja2V0czsgLyogTXVsdGlwbGUgUmV0cnkgUGFja2V0cyAqLwotCV9fbGUxNiBhY2tfdGltZW91dHM7CS8qIEFDSyBUaW1lb3V0cyAqLwotCi0JX19sZTE2IGZyYWdfdHhfY250OwkvKiBGcmFnbWVudCBUWCBDb3VudHMgKi8KLQlfX2xlMTYgcnRzX2JycV9zZW50OwkvKiBSVFMgQnJxIFNlbnQgKi8KLQotCV9fbGUxNiB0eF9wYWNrZXRzOwkvKiBUWCBQYWNrZXRzICovCi0JX19sZTE2IGN0c19iYWNrX3RpbWVvdXQ7IC8qIENUUyBCYWNrIFRpbWVvdXQgKi8KLQotCV9fbGUzMiBwaHlfc3RhdHNfaGlnaDsJLyogUEhZIFN0YXRzIEhpZ2ggKi8KLQlfX2xlMzIgcGh5X3N0YXRzX2xvdzsJLyogUEhZIFN0YXRzIExvdyAqLwotCi0Jc3RydWN0IGFnbnhfc3RhX3RyYWZmaWMgdHJhZmZpY1s4XTsJLyogVHJhZmZpYyBDbGFzcyBTdHJ1Y3R1cmUgKDgpICovCi0KLQlfX2xlMTYgdHJhZmZpY19jbGFzczBfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDAgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzMV9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgMSBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3MyX2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyAyIEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczNfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDMgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzNF9mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgNCBGcmFnbWVudCBTdWNjZXNzICovCi0JX19sZTE2IHRyYWZmaWNfY2xhc3M1X2ZyYWdfc3VjY2VzczsgLyogVHJhZmZpYyBDbGFzcyA1IEZyYWdtZW50IFN1Y2Nlc3MgKi8KLQlfX2xlMTYgdHJhZmZpY19jbGFzczZfZnJhZ19zdWNjZXNzOyAvKiBUcmFmZmljIENsYXNzIDYgRnJhZ21lbnQgU3VjY2VzcyAqLwotCV9fbGUxNiB0cmFmZmljX2NsYXNzN19mcmFnX3N1Y2Nlc3M7IC8qIFRyYWZmaWMgQ2xhc3MgNyBGcmFnbWVudCBTdWNjZXNzICovCi0KLQlfX2xlMTYgbnVtX2ZyYWdfbm9uX3ByaW1lX3JhdGVzOyAvKiBudW1iZXIgb2YgRnJhZ21lbnRzIGZvciBub24tcHJpbWUgcmF0ZXMgKi8KLQlfX2xlMTYgYWNrX3RpbWVvdXRfbm9uX3ByaW1lX3JhdGVzOyAvKiBBQ0sgVGltZW91dCBmb3Igbm9uLXByaW1lIHJhdGVzICovCi0KLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLXN0cnVjdCBhZ254X2JlYWNvbl9oZHIgewotCXN0cnVjdCBhZ254X3N0YV9wb3dlciBwb3dlcjsgLyogVHggU3RhdGlvbiBQb3dlciBUZW1wbGF0ZSAgKi8KLQl1OCBwaHlfaGRyWzZdOwkJLyogUEhZIEhkciAqLwotCXU4IGZyYW1lX2xlbl9sbzsJLyogRnJhbWUgTGVuZ3RoIExvICovCi0JdTggZnJhbWVfbGVuX2hpOwkvKiBGcmFtZSBMZW5ndGggSGkgKi8KLQl1OCBtYWNfaGRyWzI0XTsJCS8qIE1BQyBIZWFkZXIgKi8KLQkvKiBGSVhNRSAqLwotCS8qIDgwMi4xMShhYmcpIGJlYWNvbiAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLXZvaWQgaGFzaF93cml0ZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IHN0YV9pZCk7Ci12b2lkIGhhc2hfZHVtcChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1OCBzdGFfaWQpOwotdm9pZCBoYXNoX3JlYWQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdTMyIHJlZ2hpLCB1MzIgcmVnbG8sIHU4IHN0YV9pZCk7Ci12b2lkIGhhc2hfZGVsZXRlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHUzMiByZWdoaSwgdTMyIHJlZ2xvLCB1OCBzdGFfaWQpOwotCi12b2lkIGdldF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3Bvd2VyICpwb3dlciwgdW5zaWduZWQgaW50IHN0YV9pZHgpOwotdm9pZCBzZXRfc3RhX3Bvd2VyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YV9wb3dlciAqcG93ZXIsCi0JCSAgIHVuc2lnbmVkIGludCBzdGFfaWR4KTsKLXZvaWQgZ2V0X3N0YV90eF93cShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9zdGFfdHhfd3EgKnR4X3dxLAotCQkgICB1bnNpZ25lZCBpbnQgc3RhX2lkeCwgdW5zaWduZWQgaW50IHdxX2lkeCk7Ci12b2lkIHNldF9zdGFfdHhfd3Eoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3R4X3dxICp0eF93cSwKLQkJICAgdW5zaWduZWQgaW50IHN0YV9pZHgsIHVuc2lnbmVkIGludCB3cV9pZHgpOwotdm9pZCBnZXRfc3RhKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3N0YSAqc3RhLCB1bnNpZ25lZCBpbnQgc3RhX2lkeCk7Ci12b2lkIHNldF9zdGEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhICpzdGEsIHVuc2lnbmVkIGludCBzdGFfaWR4KTsKLQotdm9pZCBzdGFfcG93ZXJfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgbnVtKTsKLXZvaWQgc3RhX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IG51bSk7Ci0KLSNlbmRpZiAvKiBBR05YX1NUQV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MmZlZjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlICJhZ254LmgiCi0jaW5jbHVkZSAiZGVidWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKLQotc3RhdGljIGNvbnN0IHUzMgotdHhfZmlyX3RhYmxlW10gPSB7IDB4MTksIDB4NWQsIDB4Y2UsIDB4MTUxLCAweDFjMywgMHgxZmYsIDB4MWVhLCAweDE3YywgMHhjZiwKLQkJICAgMHgxOSwgMHgzOGUsIDB4MzUwLCAweDM2MiwgMHgzYWQsIDB4NSwgMHg0NCwgMHg1OSwgMHg0OSwKLQkJICAgMHgyMSwgMHgzZjcsIDB4M2UwLCAweDNlMywgMHgzZjMsIDB4MCB9OwotCi12b2lkIHR4X2Zpcl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eF9maXJfdGFibGUpOyBpKyspCi0JCWlvd3JpdGUzMih0eF9maXJfdGFibGVbaV0sIGN0bCArIEFHTlhfRklSX0JBU0UgKyBpKjQpOwotfSAvKiBmaXJfdGFibGVfc2V0dXAgKi8KLQotCi1zdGF0aWMgY29uc3QgdTMyCi1nYWluX3RhYmxlW10gPSB7IDB4OCwgMHg4LCAweGYsIDB4MTMsIDB4MTcsIDB4MWIsIDB4MWYsIDB4MjMsIDB4MjcsIDB4MmIsCi0JCSAweDJmLCAweDMzLCAweDM3LCAweDNiLCAweDNmLCAweDQzLCAweDQ3LCAweDRiLCAweDRmLAotCQkgMHg1MywgMHg1NywgMHg1YiwgMHg1ZiwgMHg1ZiwgMHg1ZiwgMHg1ZiwgMHg1ZiwgMHg1ZiwKLQkJIDB4NWYsIDB4NWYsIDB4NWYsIDB4NWYgfTsKLQotdm9pZCBnYWluX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdhaW5fdGFibGUpOyBpKyspIHsKLQkJaW93cml0ZTMyKGdhaW5fdGFibGVbaV0sIGN0bCArIEFHTlhfR0FJTl9UQUJMRSArIGkqNCk7Ci0JCWlvd3JpdGUzMihnYWluX3RhYmxlW2ldLCBjdGwgKyBBR05YX0dBSU5fVEFCTEUgKyBpKjQgKyAweDgwKTsKLQl9Ci19IC8qIGdhaW5fdGFibGVfaW5pdCAqLwotCi12b2lkIG1vbml0b3JfZ2Fpbl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMHg0NDsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDYxLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDYxLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHg0NDsgaSA8IDB4NjQ7IGkgKz0gNCkgewotCQlpb3dyaXRlMzIoMHg2ZSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIGkpOwotCQlpb3dyaXRlMzIoMHg2ZSwgY3RsICsgQUdOWF9NT05HQ1JfQkFTRSArIDB4MjAwICsgaSk7Ci0JfQotCWZvciAoaSA9IDB4NjQ7IGkgPCAweDk0OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4N2EsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4N2EsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDk0OyBpIDwgMHhkYzsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweDg3LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweDg3LCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci0JZm9yIChpID0gMHhkYzsgaSA8IDB4MTQ4OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4OTUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4OTUsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDE0ODsgaSA8IDB4MWU4OyBpICs9IDQpIHsKLQkJaW93cml0ZTMyKDB4YTIsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyBpKTsKLQkJaW93cml0ZTMyKDB4YTIsIGN0bCArIEFHTlhfTU9OR0NSX0JBU0UgKyAweDIwMCArIGkpOwotCX0KLQlmb3IgKGkgPSAweDFlODsgaSA8PSAweDFmYzsgaSArPSA0KSB7Ci0JCWlvd3JpdGUzMigweGIwLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgaSk7Ci0JCWlvd3JpdGUzMigweGIwLCBjdGwgKyBBR05YX01PTkdDUl9CQVNFICsgMHgyMDAgKyBpKTsKLQl9Ci19IC8qIG1vbml0b3JfZ2Fpbl90YWJsZV9pbml0ICovCi0KLQotdm9pZCByb3V0aW5nX3RhYmxlX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1bnNpZ25lZCBpbnQgdHlwZSwgc3VidHlwZTsKLQl1MzIgcmVnOwotCi0JZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKLQotCWZvciAodHlwZSA9IDA7IHR5cGUgPCAweDM7IHR5cGUrKykgewotCQlmb3IgKHN1YnR5cGUgPSAwOyBzdWJ0eXBlIDwgMHgxMDsgc3VidHlwZSsrKSB7Ci0JCQkvKiAxLiBTZXQgUm91dGluZyB0YWJsZSB0byBSL1cgYW5kIHRvIFJldHVybiBzdGF0dXMgb24gUmVhZCAqLwotCQkJcmVnID0gKHR5cGUgPDwgUk9VVEFCX1RZUEVfU0hJRlQpIHwKLQkJCQkoc3VidHlwZSA8PCBST1VUQUJfU1VCVFlQRV9TSElGVCk7Ci0JCQlyZWcgfD0gKDEgPDwgUk9VVEFCX1JXX1NISUZUKSB8ICgxIDw8IFJPVVRBQl9TVEFUVVNfU0hJRlQpOwotCQkJaWYgKHR5cGUgPT0gUk9VVEFCX1RZUEVfREFUQSkgewotCQkJCS8qIE5VTEwgZ29lcyB0byBSRlAgKi8KLQkJCQlpZiAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMKQotLyoJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfUkZQOyAqLwotCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKLQkJCQkvKiBRT1MgTlVMTCBnb2VzIHRvIENQVSAqLwotCQkJCWVsc2UgaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTCkKLQkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7Ci0JCQkJLyogQWxsIERhdGEgYW5kIFFPUyBkYXRhIHN1YnR5cGVzIGdvIHRvIEVuY3J5cHRpb24gKi8KLQkJCQllbHNlIGlmICgoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9EQVRBKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfREFUQUFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX0RBVEFQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfREFUQVBPTExBQ0spIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU0RBVEFQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQUFDS1BPTEwpKQotCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0VOQ1JZOwotLyoJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOyAqLwotCQkJCS8qRHJvcCBOVUxMIGFuZCBRT1MgTlVMTCBhY2ssIHBvbGwgYW5kIHBvbGwgYWNrKi8KLQkJCQllbHNlIGlmICgoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMQUNLKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTEFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX05VTExQT0xMKSB8fAotCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTFBPTEwpIHx8Ci0JCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMUE9MTEFDSykgfHwKLQkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMQUNLKSkKLS8qCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0RST1A7ICovCi0JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfQ1BVOwotCQkJfSBlbHNlIHsKLQkJCQlyZWcgfD0gKFJPVVRBQl9ST1VURV9DUFUpOwotCQkJfQotCQkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fUk9VVEFCKTsKLQkJCS8qIENoZWNrIHRvIHZlcmlmeSB0aGF0IHRoZSBzdGF0dXMgYml0IGNsZWFyZWQgKi8KLQkJCXJvdXRpbmdfdGFibGVfZGVsYXkoKTsKLQkJfQotCX0KLQllbmFibGVfcmVjZWl2ZXIocHJpdik7Ci19IC8qIHJvdXRpbmdfdGFibGVfaW5pdCAqLwotCi12b2lkIHR4X2VuZ2luZV9sb29rdXBfdGJsX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmRhdGEgPSBwcml2LT5kYXRhOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8PSAyODsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHhiMDBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCWZvciAoaSA9IDMyOyBpIDw9IDEyMDsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDFlNTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweGIwMGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLQotCWZvciAoaSA9IDEyODsgaSA8PSAxNTY7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4OTgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSAxNjA7IGkgPD0gMjQ4OyBpICs9IDgpIHsKLQkJaW93cml0ZTMyKDB4MTg1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQkJaW93cml0ZTMyKDB4OTgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpICsgNCk7Ci0JfQotCi0JZm9yIChpID0gMjU2OyBpIDw9IDI4NDsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHg5ODBjLCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCWZvciAoaSA9IDI4ODsgaSA8PSAzNzY7IGkgKz0gOCkgewotCQlpb3dyaXRlMzIoMHgxYTU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkpOwotCQlpb3dyaXRlMzIoMHgxODU4LCBkYXRhICsgQUdOWF9FTkdJTkVfTE9PS1VQX1RCTCArIGkgKyA0KTsKLQl9Ci0KLQlmb3IgKGkgPSA1MTI7IGkgPD0gNTQwOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGMwMGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JZm9yIChpID0gNTQ0OyBpIDw9IDYzMjsgaSArPSA4KSB7Ci0JCWlvd3JpdGUzMigweDIwNTgsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSk7Ci0JCWlvd3JpdGUzMigweGMwMGMsIGRhdGEgKyBBR05YX0VOR0lORV9MT09LVVBfVEJMICsgaSArIDQpOwotCX0KLQotCWZvciAoaSA9IDY0MDsgaSA8PSA2Njg7IGkgKz0gNCkKLQkJaW93cml0ZTMyKDB4YzgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQlmb3IgKGkgPSA2NzI7IGkgPD0gNzY0OyBpICs9IDgpIHsKLQkJaW93cml0ZTMyKDB4MjI1OCwgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpKTsKLQkJaW93cml0ZTMyKDB4YzgwYywgZGF0YSArIEFHTlhfRU5HSU5FX0xPT0tVUF9UQkwgKyBpICsgNCk7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5oIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MjZiNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBBR05YX1RBQkxFX0hfCi0jZGVmaW5lIEFHTlhfVEFCTEVfSF8KLQotdm9pZCB0eF9maXJfdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgZ2Fpbl90YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBtb25pdG9yX2dhaW5fdGFibGVfaW5pdChzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgcm91dGluZ190YWJsZV9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCB0eF9lbmdpbmVfbG9va3VwX3RibF9pbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotCi0jZW5kaWYgLyogQUdOWF9UQUJMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmRiNDEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDgzNiArMCwwIEBACi0vKioKLSAqIEFpcmdvIE1JTU8gd2lyZWxlc3MgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA3IExpIFlhbkJvIDxkcmVhbWZseTI4MUBnbWFpbC5jb20+Ci0KLSAqIFRoYW5rcyBmb3IgSmVmZiBXaWxsaWFtcyA8YW5nZWxiYW5lQGdtYWlsLmNvbT4gZG8gcmV2ZXJzZSBlbmdpbmVlcgotICogd29ya3MgYW5kIHB1Ymxpc2hlZCB0aGUgU1BFQ1MgYXQgaHR0cDovL2FpcmdvLndkd2NvbnN1bHRpbmcubmV0L215bW9pbgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgImFnbnguaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgInBoeS5oIgotCi11bnNpZ25lZCBpbnQgcnhfZnJhbWVfY250OwotLyogdW5zaWduZWQgaW50IGxvY2FsX3R4X3NlbnRfY250ID0gMDsgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfcnhfZW5naW5lKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JaW93cml0ZTMyKDB4MTAwLCBjdGwgKyBBR05YX0NJUl9SWENUTCk7Ci0JLyogV2FpdCBmb3IgUlggQ29udHJvbCB0byBoYXZlIHRoZSBEaXNhYmxlIFJ4IEludGVycnVwdCAoMHgxMDApIHNldCAqLwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9yeF9lbmdpbmUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQlpb3dyaXRlMzIoMHg4MCwgY3RsICsgQUdOWF9DSVJfUlhDVEwpOwotCWlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKLX0KLQotaW5saW5lIHZvaWQgZGlzYWJsZV9yeF9pbnRlcnJ1cHQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JZGlzYWJsZV9yeF9lbmdpbmUocHJpdik7Ci0JcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCXJlZyAmPSB+MHgyMDsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9SWENGRyk7Ci0JaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotfQotCi1pbmxpbmUgdm9pZCBlbmFibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0Jdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1JYQ0ZHKTsKLQlyZWcgfD0gMHgyMDsKLQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0NJUl9SWENGRyk7Ci0JaW9yZWFkMzIoY3RsICsgQUdOWF9DSVJfUlhDRkcpOwotCWVuYWJsZV9yeF9lbmdpbmUocHJpdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kZXNjX2luaXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjID0gcHJpdi0+cnguZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+cnguaW5mbyArIGlkeDsKLQotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQotCWluZm8tPmRtYV9sZW4gPSBJRUVFODAyMTFfTUFYX1JUU19USFJFU0hPTEQgKyBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKTsKLQlpbmZvLT5za2IgPSBkZXZfYWxsb2Nfc2tiKGluZm8tPmRtYV9sZW4pOwotCWlmIChpbmZvLT5za2IgPT0gTlVMTCkKLQkJYWdueF9idWcoInJlZmlsbCBlcnIiKTsKLQotCWluZm8tPm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2JfdGFpbF9wb2ludGVyKGluZm8tPnNrYiksCi0JCQkJICAgICAgIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoaW5mby0+bWFwcGluZyk7Ci0JLyogU2V0IHRoZSBvd25lciB0byB0aGUgY2FyZCAqLwotCWRlc2MtPmZyYWcgPSBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdShkZXNjLT5mcmFnKSB8IE9XTkVSKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ4X2Rlc2NfcmVpbml0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZHgpCi17Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpZHg7Ci0KLQkvKiBDYXVzZSBpZWVlODAyMTEgd2lsbCBmcmVlIHRoZSBza2IgYnVmZmVyLCBzbyB3ZSBuZWVkbid0IHRvIGZyZWUgaXQgYWdhaW4/ISAqLwotCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgaW5mby0+bWFwcGluZywgaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlyeF9kZXNjX2luaXQocHJpdiwgaWR4KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJ4X2Rlc2NfcmV1c2luZyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT5yeC5kZXNjICsgaWR4OwotCXN0cnVjdCBhZ254X2luZm8gKmluZm8gPSBwcml2LT5yeC5pbmZvICsgaWR4OwotCi0JbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykpOwotCWRlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoaW5mby0+bWFwcGluZyk7Ci0JLyogU2V0IHRoZSBvd25lciB0byB0aGUgY2FyZCAqLwotCWRlc2MtPmZyYWcgPSBjcHVfdG9fYmUzMihiZTMyX3RvX2NwdShkZXNjLT5mcmFnKSB8IE9XTkVSKTsKLX0KLQotc3RhdGljIHZvaWQgcnhfZGVzY19mcmVlKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBpZHgpCi17Ci0Jc3RydWN0IGFnbnhfZGVzYyAqZGVzYyA9IHByaXYtPnJ4LmRlc2MgKyBpZHg7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpZHg7Ci0KLQlCVUdfT04oIWRlc2MgfHwgIWluZm8pOwotCWlmIChpbmZvLT5tYXBwaW5nKQotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKGluZm8tPnNrYikKLQkJZGV2X2tmcmVlX3NrYihpbmZvLT5za2IpOwotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3R4X2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGFnbnhfZGVzYyAqZGVzYywgc3RydWN0IGFnbnhfaW5mbyAqaW5mbykKLXsKLQlCVUdfT04oIWRlc2MgfHwgIWluZm8pOwotCS8qIFRPRE8gbWFrZSBzdXJlIG1hcHBpbmcsIHNrYiBhbmQgbGVuIGFyZSBjb25zaXN0ZW5jeSAqLwotCWlmIChpbmZvLT5tYXBwaW5nKQotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGluZm8tPm1hcHBpbmcsCi0JCQkJIGluZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkKLQkJZGV2X2tmcmVlX3NrYihpbmZvLT5za2IpOwotCi0JbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLX0KLQotc3RhdGljIHZvaWQgdHhtX2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT50eG0uZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+dHhtLmluZm8gKyBpZHg7Ci0KLQlfX3R4X2Rlc2NfZnJlZShwcml2LCBkZXNjLCBpbmZvKTsKLX0KLQotc3RhdGljIHZvaWQgdHhkX2Rlc2NfZnJlZShzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgaWR4KQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2MgPSBwcml2LT50eGQuZGVzYyArIGlkeDsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvID0gcHJpdi0+dHhkLmluZm8gKyBpZHg7Ci0KLQlfX3R4X2Rlc2NfZnJlZShwcml2LCBkZXNjLCBpbmZvKTsKLX0KLQotaW50IGZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgcmVnOwotCUFHTlhfVFJBQ0U7Ci0KLQlwcml2LT50eGQuaWR4X3NlbnQgPSBwcml2LT50eG0uaWR4X3NlbnQgPSAwOwotCXByaXYtPnJ4LmlkeCA9IHByaXYtPnR4bS5pZHggPSBwcml2LT50eGQuaWR4ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBwcml2LT5yeC5zaXplOyBpKyspCi0JCXJ4X2Rlc2NfaW5pdChwcml2LCBpKTsKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dHhtLnNpemU7IGkrKykgewotCQltZW1zZXQocHJpdi0+dHhtLmRlc2MgKyBpLCAwLCBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykpOwotCQltZW1zZXQocHJpdi0+dHhtLmluZm8gKyBpLCAwLCBzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dHhkLnNpemU7IGkrKykgewotCQltZW1zZXQocHJpdi0+dHhkLmRlc2MgKyBpLCAwLCBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykpOwotCQltZW1zZXQocHJpdi0+dHhkLmluZm8gKyBpLCAwLCBzaXplb2Yoc3RydWN0IGFnbnhfaW5mbykpOwotCX0KLQotCS8qIEZJWE1FIFNldCB0aGUgY2FyZCBSWCBUWE0gYW5kIFRYRCBhZGRyZXNzICovCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfUlhDTVNUQVJULCBwcml2LT5yeC5kbWEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1JYQ01FTkQsIHByaXYtPnR4bS5kbWEpOwotCi0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhNU1RBUlQsIHByaXYtPnR4bS5kbWEpOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX1RYTUVORCwgcHJpdi0+dHhkLmRtYSk7Ci0KLQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0NJUl9UWERTVEFSVCwgcHJpdi0+dHhkLmRtYSk7Ci0JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfVFhERU5ELCBwcml2LT50eGQuZG1hICsKLQkJICAgICBzaXplb2Yoc3RydWN0IGFnbnhfZGVzYykgKiBwcml2LT50eGQuc2l6ZSk7Ci0KLQkvKiBGSVhNRSBSZWxpbnF1aXNoIGNvbnRyb2wgb2YgcmluZ3MgdG8gY2FyZCAqLwotCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9DSVJfQkxLQ1RMKTsKLQlyZWcgJj0gfjB4ODAwOwotCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0JMS0NUTCwgcmVnKTsKLQlyZXR1cm4gMDsKLX0gLyogZmlsbF9yaW5ncyAqLwotCi12b2lkIHVuZmlsbF9yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGk7Ci0JQUdOWF9UUkFDRTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnguc2l6ZTsgaSsrKQotCQlyeF9kZXNjX2ZyZWUocHJpdiwgaSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4bS5zaXplOyBpKyspCi0JCXR4bV9kZXNjX2ZyZWUocHJpdiwgaSk7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPnR4ZC5zaXplOyBpKyspCi0JCXR4ZF9kZXNjX2ZyZWUocHJpdiwgaSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIEV4dHJhY3QgdGhlIGJpdHJhdGUgb3V0IG9mIGEgQ0NLIFBMQ1AgaGVhZGVyLgotICAgY29weSBmcm9tIGJjbTQzeHggZHJpdmVyICovCi1zdGF0aWMgaW5saW5lIHU4IGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9jY2soX19iZTMyICpwaHloZHJfMTFiKQotewotCS8qIEZJWE1FICovCi0Jc3dpdGNoICgqKHU4ICopcGh5aGRyXzExYikgewotCWNhc2UgMHgwQToKLQkJcmV0dXJuIDA7Ci0JY2FzZSAweDE0OgotCQlyZXR1cm4gMTsKLQljYXNlIDB4Mzc6Ci0JCXJldHVybiAyOwotCWNhc2UgMHg2RToKLQkJcmV0dXJuIDM7Ci0JfQotCWFnbnhfYnVnKCJXcm9uZyBwbGNwIHJhdGUiKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUUgKi8KLXN0YXRpYyBpbmxpbmUgdTggYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oX19iZTMyICpwaHloZHJfMTFnKQotewotCXU4IHJhdGUgPSAqKHU4ICopcGh5aGRyXzExZyAmIDB4RjsKLQotCXByaW50ayhQRlggIkcgbW9kZSByYXRlIGlzIDB4JXhcbiIsIHJhdGUpOwotCXJldHVybiByYXRlOwotfQotCi0vKiBGSVhNRSAqLwotc3RhdGljIHZvaWQgZ2V0X3J4X3N0YXRzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X2hkciAqaGRyLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0KQotewotCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwotCXU4ICpyc3NpOwotCXUzMiBub2lzZTsKLQkvKiBGSVhNRSBqdXN0IGZvciB0ZXN0ICovCi0JaW50IHNuciA9IDQwOwkJLyogc2lnbmFsLXRvLW5vaXNlIHJhdGlvICovCi0KLQltZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7Ci0JLyogUlNTSSAqLwotCXJzc2kgPSAodTggKikmaGRyLT5waHlfc3RhdHNfbG87Ci0vKglzdGF0LT5zc2kgPSAocnNzaVswXSArIHJzc2lbMV0gKyByc3NpWzJdKSAvIDM7ICovCi0JLyogTm9pc2UgKi8KLQlub2lzZSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMCk7Ci0Jbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UxKTsKLQlub2lzZSArPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTIpOwotCXN0YXQtPm5vaXNlID0gbm9pc2UgLyAzOwotCS8qIFNpZ25hbCBxdWFsaXR5ICovCi0vKglzbnIgPSBzdGF0LT5zc2kgLSBzdGF0LT5ub2lzZTsgKi8KLQlpZiAoc25yID49IDAgJiYgc25yIDwgNDApCi0JCXN0YXQtPnNpZ25hbCA9IDUgKiBzbnIgLyAyOwotCWVsc2UgaWYgKHNuciA+PSA0MCkKLQkJc3RhdC0+c2lnbmFsID0gMTAwOwotCWVsc2UKLQkJc3RhdC0+c2lnbmFsID0gMDsKLQotCi0JaWYgKGhkci0+XzExYjAgJiYgIWhkci0+XzExZzApIHsKLQkJc3RhdC0+cmF0ZV9pZHggPSBhZ254X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKCZoZHItPl8xMWIwKTsKLQl9IGVsc2UgaWYgKCFoZHItPl8xMWIwICYmIGhkci0+XzExZzApIHsKLQkJcHJpbnRrKFBGWCAiUlg6IEZvdW5kIEcgbW9kZSBwYWNrZXRcbiIpOwotCQlzdGF0LT5yYXRlX2lkeCA9IGFnbnhfcGxjcF9nZXRfYml0cmF0ZV9vZmRtKCZoZHItPl8xMWcwKTsKLQl9IGVsc2UKLQkJYWdueF9idWcoIlVua25vd24gcGFja2V0cyB0eXBlIik7Ci0KLQotCXN0YXQtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCXN0YXQtPmZyZXEgPSBhZ254X2NoYW5uZWxzW3ByaXYtPmNoYW5uZWwgLSAxXS5jZW50ZXJfZnJlcTsKLS8qCXN0YXQtPmFudGVubmEgPSAzOwotCXN0YXQtPm1hY3RpbWUgPSBiZTMyX3RvX2NwdShoZHItPnRpbWVfc3RhbXApOwotCXN0YXQtPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOyAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29tYmluZV9oZHJfZnJhZyhzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaWVlZWhkciwKLQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQl1MTYgZmN0bDsKLQl1bnNpZ25lZCBpbnQgaGRybGVuOwotCi0JZmN0bCA9IGxlMTZfdG9fY3B1KGllZWVoZHItPmZyYW1lX2NvbnRyb2wpOwotCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7Ci0JLyogRklYTUUgKi8KLQlpZiAoaGRybGVuIDwgKDIrMis2KS8qbWluaW11bSBoZHIqLyB8fAotCSAgICBoZHJsZW4gPiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZ210KSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJoZHIgbGVuIGlzICVkXG4iLCBoZHJsZW4pOwotCQlhZ254X2J1ZygiV3JvbmcgaWVlZTgwMjExIGhkciBkZXRlY3RlZCIpOwotCX0KLQlza2JfcHVzaChza2IsIGhkcmxlbik7Ci0JbWVtY3B5KHNrYi0+ZGF0YSwgaWVlZWhkciwgaGRybGVuKTsKLX0gLyogY29tYmluZV9oZHJfZnJhZyAqLwotCi1zdGF0aWMgaW5saW5lIGludCBhZ254X3BhY2tldF9jaGVjayhzdHJ1Y3QgYWdueF9wcml2ICpwcml2LCBzdHJ1Y3QgYWdueF9oZHIgKmFnbnhoZHIsCi0JCQkJICAgIHVuc2lnbmVkIHBhY2tldF9sZW4pCi17Ci0JaWYgKGFnbnhfZ2V0X2JpdHMoQ1JDX0ZBSUwsIENSQ19GQUlMX1NISUZULCBiZTMyX3RvX2NwdShhZ254aGRyLT5yZWcxKSkgPT0gMSkgewotCQlwcmludGsoUEZYICJSWDogQ1JDIGNoZWNrIGZhaWxcbiIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCWlmIChwYWNrZXRfbGVuID4gMjA0OCkgewotCQlwcmludGsoUEZYICJSWDogVG9vIGxvbmcgcGFja2V0IGRldGVjdGVkXG4iKTsKLQkJZ290byBkcm9wOwotCX0KLQotCS8qIEZJWE1FIEp1c3QgdXNhYmxlIGZvciBQcm9taW91cyBNb2RlLCBmb3IgTWFuYWdlIG1vZGUgZXhjbHVkZSBGQ1MgKi8KLS8qIAlpZiAocGFja2V0X2xlbiAtIHNpemVvZigqYWdueGhkcikgPCBGQ1NfTEVOKSB7ICovCi0vKiAJCXByaW50ayhQRlggIlJYOiBUb28gc2hvcnQgcGFja2V0IGRldGVjdGVkXG4iKTsgKi8KLS8qIAkJZ290byBkcm9wOyAqLwotLyogCX0gKi8KLQlyZXR1cm4gMDsKLWRyb3A6Ci0JcHJpdi0+c3RhdHMuZG90MTFGQ1NFcnJvckNvdW50Kys7Ci0JcmV0dXJuIC0xOwotfQotCi12b2lkIGhhbmRsZV9yeF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IGxlbjsKLS8qCUFHTlhfVFJBQ0U7ICovCi0KLQlkbyB7Ci0JCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0JCXUzMiBmcmFnOwotCQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvOwotCQlzdHJ1Y3QgYWdueF9oZHIgKmhkcjsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJdW5zaWduZWQgaW50IGkgPSBwcml2LT5yeC5pZHggJSBwcml2LT5yeC5zaXplOwotCi0JCWRlc2MgPSBwcml2LT5yeC5kZXNjICsgaTsKLQkJZnJhZyA9IGJlMzJfdG9fY3B1KGRlc2MtPmZyYWcpOwotCQlpZiAoZnJhZyAmIE9XTkVSKQotCQkJYnJlYWs7Ci0KLQkJaW5mbyA9IHByaXYtPnJ4LmluZm8gKyBpOwotCQlza2IgPSBpbmZvLT5za2I7Ci0JCWhkciA9IChzdHJ1Y3QgYWdueF9oZHIgKikoc2tiLT5kYXRhKTsKLQotCQlsZW4gPSAoZnJhZyAmIFBBQ0tFVF9MRU4pID4+IFBBQ0tFVF9MRU5fU0hJRlQ7Ci0JCWlmIChhZ254X3BhY2tldF9jaGVjayhwcml2LCBoZHIsIGxlbikgPT0gLTEpIHsKLQkJCXJ4X2Rlc2NfcmV1c2luZyhwcml2LCBpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNrYl9wdXQoc2tiLCBsZW4pOwotCi0JCWRvIHsKLQkJCQl1MTYgZmN0bDsKLQkJCWZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKS0+ZnJhbWVfY29udHJvbCk7Ci0JCQlpZiAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgIT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikvKiAmJiAhKGZjdGwgJiBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkgKi8KLQkJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyLCAiUlgiKTsKLQkJfSB3aGlsZSAoMCk7Ci0KLQkJaWYgKGhkci0+XzExYjAgJiYgIWhkci0+XzExZzApIHsKLS8qCQkJaW50IGo7Ci0JCQl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIpCi0JCQkJCSAgICAgICAtPmZyYW1lX2NvbnRyb2wpOwotCQkJaWYgKCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSAgSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKLQkJCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOwotCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsKLQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7Ci0JCQl9ICovCi0KLQkJCWdldF9yeF9zdGF0cyhwcml2LCBoZHIsICZzdGF0dXMpOwotCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOwotCQkJY29tYmluZV9oZHJfZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIsIHNrYik7Ci0JCX0gZWxzZSBpZiAoIWhkci0+XzExYjAgJiYgaGRyLT5fMTFnMCkgewotLyoJCQlpbnQgajsgKi8KLQkJCWFnbnhfcHJpbnRfcnhfaGRyKGhkcik7Ci0JCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7Ci0vKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0JCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7Ci0KLQkJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBSWF9QQUNLRVQ6ICIsIERVTVBfUFJFRklYX05PTkUsCi0JCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiArIDgpOwotCi0vKgkJCWlmIChhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCkgPT0gMCkgKi8KLQkJCWdldF9yeF9zdGF0cyhwcml2LCBoZHIsICZzdGF0dXMpOwotCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOwotCQkJY29tYmluZV9oZHJfZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKLQkJCQkJICgodm9pZCAqKSZoZHItPm1hY19oZHIpLCBza2IpOwotLyoJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhLCAiUlggRyIpOyAqLwotCQl9IGVsc2UKLQkJCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwotCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHNrYiksICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsKLQkJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHNrYik7Ci0JCXJ4X2Rlc2NfcmVpbml0KHByaXYsIGkpOwotCi0JfSB3aGlsZSAocHJpdi0+cnguaWR4KyspOwotfSAvKiBoYW5kbGVfcnhfaXJxICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfdHhfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X3JpbmcgKnJpbmcpCi17Ci0Jc3RydWN0IGFnbnhfZGVzYyAqZGVzYzsKLQlzdHJ1Y3QgYWdueF9pbmZvICppbmZvOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IHJpbmctPmlkeF9zZW50OyBpZHggPCByaW5nLT5pZHg7IGlkeCsrKSB7Ci0JCXVuc2lnbmVkIGludCBpID0gaWR4ICUgcmluZy0+c2l6ZTsKLQkJdTMyICBmcmFnOwotCi0JCWRlc2MgPSByaW5nLT5kZXNjICsgaTsKLQkJaW5mbyA9IHJpbmctPmluZm8gKyBpOwotCi0JCWZyYWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKLQkJaWYgKGZyYWcgJiBPV05FUikgewotCQkJaWYgKGluZm8tPnR5cGUgPT0gSEVBREVSKQotCQkJCWJyZWFrOwotCQkJZWxzZQotCQkJCWFnbnhfYnVnKCJUWCBlcnJvciIpOwotCQl9Ci0KLQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBpbmZvLT5tYXBwaW5nLCBpbmZvLT5kbWFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCQlkbyB7Ci0vKgkJCWludCBqOyAqLwotCQkJc2l6ZV90IGxlbjsKLQkJCWxlbiA9IGluZm8tPnNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikgKyBpbmZvLT5oZHJfbGVuOwotLyoJCQlpZiAobGVuID09IDYxNCkgeyAqLwotLyoJCQkJYWdueF9wcmludF9kZXNjKGRlc2MpOyAqLwotCQkJCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLyoJCQkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilpbmZvLT5za2ItPmRhdGEpOyAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBMT0NBTF9TVEFJRCwgMCk7ICovCi0vKgkJCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qCQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCAwKTsgKi8KLQkJCQl9Ci0vKgkJCX0gKi8KLQkJfSB3aGlsZSAoMCk7Ci0KLQkJaWYgKGluZm8tPnR5cGUgPT0gUEFDS0VUKSB7Ci0vKgkJCWR1bXBfdHhtX3JlZ2lzdGVycyhwcml2KTsKLQkJCWR1bXBfcnhtX3JlZ2lzdGVycyhwcml2KTsKLQkJCWR1bXBfYm1fcmVnaXN0ZXJzKHByaXYpOwotCQkJZHVtcF9jaXJfcmVnaXN0ZXJzKHByaXYpOyAqLwotCQl9Ci0KLQkJaWYgKGluZm8tPnR5cGUgPT0gUEFDS0VUKSB7Ci0vKgkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7ICovCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aSA9IElFRUU4MDIxMV9TS0JfQ0IoaW5mby0+c2tiKTsKLQotCQkJc2tiX3B1bGwoaW5mby0+c2tiLCBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKSk7Ci0JCQltZW1jcHkoc2tiX3B1c2goaW5mby0+c2tiLCBpbmZvLT5oZHJfbGVuKSwgJmluZm8tPmhkciwgaW5mby0+aGRyX2xlbik7Ci0KLS8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWluZm8tPnNrYi0+ZGF0YSwgIlRYX0hBTkRMRSIpOyAqLwotLyogCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX0hBTkRMRTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KLS8qIAkJCQkJICAgICBpbmZvLT5za2ItPmRhdGEsIGluZm8tPnNrYi0+bGVuKTsgKi8KLQotCQkJaWYgKCEodHhpLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSkKLQkJCQl0eGktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKLQotCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCBpbmZvLT5za2IpOwotCi0KLS8qIAkJCQlpbmZvLT50eF9zdGF0dXMucXVldWVfbnVtYmVyID0gKHJpbmctPnNpemUgLSBpKSAvIDI7ICovCi0vKiAJCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCBpbmZvLT5za2IsICYoaW5mby0+dHhfc3RhdHVzKSk7ICovCi0vKiAJCQl9IGVsc2UgKi8KLS8qIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbmZvLT5za2IpOyAqLwotCQl9Ci0JCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKLQkJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwotCX0KLQotCXJpbmctPmlkeF9zZW50ID0gaWR4OwotCS8qIFRPRE8gZmlsbCB0aGUgcHJpdi0+bG93X2xldmVsX3N0YXRzICovCi0KLQkvKiBpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgMCk7ICovCi19Ci0KLXZvaWQgaGFuZGxlX3R4bV9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKLXsKLQloYW5kbGVfdHhfaXJxKHByaXYsICZwcml2LT50eG0pOwotfQotCi12b2lkIGhhbmRsZV90eGRfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0JaGFuZGxlX3R4X2lycShwcml2LCAmcHJpdi0+dHhkKTsKLX0KLQotdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCi17Ci0vKgl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsgKi8KLQl1MzIgc3RhdHVzID0gcHJpdi0+aXJxX3N0YXR1czsKLQl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKLQl1MzIgcmVnOwotCi0JaWYgKHN0YXR1cyAmIElSUV9UWF9CRUFDT04pIHsKLQkJaW93cml0ZTMyKElSUV9UWF9CRUFDT04sIGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCQlwcmludGsoUEZYICJJUlE6IFRYIEJlYWNvbiBjb250cm9sIGlzIDBYJS44WFxuIiwgaW9yZWFkMzIoY3RsICsgQUdOWF9UWE1fQkVBQ09OX0NUTCkpOwotCQlwcmludGsoUEZYICJJUlE6IFRYIEJlYWNvbiByeCBmcmFtZSBudW06ICVkXG4iLCByeF9mcmFtZV9jbnQpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1RYX1JFVFJZKSB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfVFhNX1JFVFJZU1RBSUQpOwotCQlwcmludGsoUEZYICJJUlE6IFRYIFJldHJ5LCBSRVRSWSBTVEEgSUQgaXMgJXhcbiIsIHJlZyk7Ci0JfQotCWlmIChzdGF0dXMgJiBJUlFfVFhfQUNUSVZJVFkpCi0JCXByaW50ayhQRlggIklSUTogVFggQWN0aXZpdHlcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUlhfQUNUSVZJVFkpCi0JCXByaW50ayhQRlggIklSUTogUlggQWN0aXZpdHlcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUlhfWCkKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBYXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX1kpIHsKLQkJcmVnID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfTUFTSyk7Ci0JCXJlZyAmPSB+SVJRX1JYX1k7Ci0JCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlpb3dyaXRlMzIoSVJRX1JYX1ksIGN0bCArIEFHTlhfSU5UX1NUQVQpOwotCQlwcmludGsoUEZYICJJUlE6IFJYIFlcbiIpOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX1JYX0hBU0hISVQpICB7Ci0JCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlyZWcgJj0gfklSUV9SWF9IQVNISElUOwotCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJaW93cml0ZTMyKElSUV9SWF9IQVNISElULCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBIYXNoIEhpdFxuIik7Ci0KLQl9Ci0JaWYgKHN0YXR1cyAmIElSUV9SWF9GUkFNRSkgewotCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9NQVNLKTsKLQkJcmVnICY9IH5JUlFfUlhfRlJBTUU7Ci0JCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX01BU0spOwotCQlpb3dyaXRlMzIoSVJRX1JYX0ZSQU1FLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBGcmFtZVxuIik7Ci0JCXJ4X2ZyYW1lX2NudCsrOwotCX0KLQlpZiAoc3RhdHVzICYgSVJRX0VSUl9JTlQpIHsKLQkJaW93cml0ZTMyKElSUV9FUlJfSU5ULCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKLS8qCQlhZ254X2h3X3Jlc2V0KHByaXYpOyAqLwotCQlwcmludGsoUEZYICJJUlE6IEVycm9yIEludGVycnVwdFxuIik7Ci0JfQotCWlmIChzdGF0dXMgJiBJUlFfVFhfUVVFX0ZVTEwpCi0JCXByaW50ayhQRlggIklSUTogVFggV29ya3F1ZXVlIEZ1bGxcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfQkFORE1BTl9FUlIpCi0JCXByaW50ayhQRlggIklSUTogQmFuZHdpZHRoIE1hbmFnZW1lbnQgRXJyb3JcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfVFhfRElTQUJMRSkKLQkJcHJpbnRrKFBGWCAiSVJROiBUWCBEaXNhYmxlXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JYX0lWQVNFU0tFWSkKLQkJcHJpbnRrKFBGWCAiSVJROiBSWCBJbnZhbGlkIFNlc3Npb24gS2V5XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1JFUF9USEhJVCkKLQkJcHJpbnRrKFBGWCAiSVJROiBSZXBsYXkgVGhyZXNob2xkIEhpdFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9USU1FUjEpCi0JCXByaW50ayhQRlggIklSUTogVGltZXIxXG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX1RJTUVSX0NOVCkKLQkJcHJpbnRrKFBGWCAiSVJROiBUaW1lciBDb3VudFxuIik7Ci0JaWYgKHN0YXR1cyAmIElSUV9QSFlfRkFTVElOVCkKLQkJcHJpbnRrKFBGWCAiSVJROiBQaHkgRmFzdCBJbnRlcnJ1cHRcbiIpOwotCWlmIChzdGF0dXMgJiBJUlFfUEhZX1NMT1dJTlQpCi0JCXByaW50ayhQRlggIklSUTogUGh5IFNsb3cgSW50ZXJydXB0XG4iKTsKLQlpZiAoc3RhdHVzICYgSVJRX09USEVSKQotCQlwcmludGsoUEZYICJJUlE6IDB4ODAwMDAwMDBcbiIpOwotfSAvKiBoYW5kbGVfb3RoZXJfaXJxICovCi0KLQotc3RhdGljIGlubGluZSB2b2lkIHJvdXRlX2ZsYWdfc2V0KHN0cnVjdCBhZ254X2hkciAqdHhoZHIpCi17Ci0vKgl1MzIgcmVnID0gMDsgKi8KLQotCS8qIEZJWE1FICovCi0vKglyZWcgPSAoMHg3IDw8IFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUKSAmIFJPVVRFX0NPTVBSRVNTSU9OOyAqLwotLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMihyZWcpOyAqLwotCXR4aGRyLT5yZWc1ID0gKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KTsKLS8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIoKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KSk7ICovCi0vKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKDB4NyA8PCAweDApOyAqLwotfQotCi0vKiBSZXR1cm4gMCBpZiBubyBtYXRjaCAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3Bvd2VyX2xldmVsKHVuc2lnbmVkIGludCByYXRlLCB1bnNpZ25lZCBpbnQgYW50ZW5uYXNfbnVtKQotewotCXVuc2lnbmVkIGludCBwb3dlcl9sZXZlbDsKLQotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgMTA6Ci0JY2FzZSAyMDoKLQljYXNlIDU1OgotCWNhc2UgNjA6Ci0JY2FzZSA5MDoKLQljYXNlIDEyMDoKLQkJcG93ZXJfbGV2ZWwgPSAyMjsKLQkJYnJlYWs7Ci0KLQljYXNlIDE4MDoKLQkJcG93ZXJfbGV2ZWwgPSAxOTsKLQkJYnJlYWs7Ci0KLQljYXNlIDI0MDoKLQkJcG93ZXJfbGV2ZWwgPSAxODsKLQkJYnJlYWs7Ci0KLQljYXNlIDM2MDoKLQkJcG93ZXJfbGV2ZWwgPSAxNjsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ4MDoKLQkJcG93ZXJfbGV2ZWwgPSAxNTsKLQkJYnJlYWs7Ci0KLQljYXNlIDU0MDoKLQkJcG93ZXJfbGV2ZWwgPSAxNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYWdueF9idWcoIkVycm9yIHJhdGUgc2V0dGluZ1xuIik7Ci0JfQotCi0JaWYgKHBvd2VyX2xldmVsICYmIChhbnRlbm5hc19udW0gPT0gMikpCi0JCXBvd2VyX2xldmVsIC09IDM7Ci0KLQlyZXR1cm4gcG93ZXJfbGV2ZWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2FnbnhfaGRyKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X2luZm8gKnR4X2luZm8pCi17Ci0Jc3RydWN0IGFnbnhfaGRyICp0eGhkciA9IChzdHJ1Y3QgYWdueF9oZHIgKil0eF9pbmZvLT5za2ItPmRhdGE7Ci0Jc2l6ZV90IGxlbjsKLQl1MTYgZmMgPSBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSZ0eF9pbmZvLT5oZHIpOwotCXUzMiByZWc7Ci0KLQltZW1zZXQodHhoZHIsIDAsIHNpemVvZigqdHhoZHIpKTsKLQotLyoJcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX0lELCBTVEFUSU9OX0lEX1NISUZULCBMT0NBTF9TVEFJRCk7ICovCi0JcmVnID0gYWdueF9zZXRfYml0cyhTVEFUSU9OX0lELCBTVEFUSU9OX0lEX1NISUZULCBCU1NJRF9TVEFJRCk7Ci0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS1FVRVVFX0lELCBXT1JLUVVFVUVfSURfU0hJRlQsIDApOwotCXR4aGRyLT5yZWc0ID0gY3B1X3RvX2JlMzIocmVnKTsKLQotCS8qIFNldCB0aGUgSGFyZHdhcmUgU2VxdWVuY2UgTnVtYmVyIHRvIDE/ICovCi0JcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMCk7Ci0vKglyZWcgPSBhZ254X3NldF9iaXRzKFNFUVVFTkNFX05VTUJFUiwgU0VRVUVOQ0VfTlVNQkVSX1NISUZULCAxKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhNQUNfSERSX0xFTiwgTUFDX0hEUl9MRU5fU0hJRlQsIHR4X2luZm8tPmhkcl9sZW4pOwotCXR4aGRyLT5yZWcxID0gY3B1X3RvX2JlMzIocmVnKTsKLQkvKiBTZXQgdGhlIGFnbnhfaGRyJ3MgTUFDIGhlYWRlciAqLwotCW1lbWNweSh0eGhkci0+bWFjX2hkciwgJnR4X2luZm8tPmhkciwgdHhfaW5mby0+aGRyX2xlbik7Ci0KLQlyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAxKTsKLS8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoQUNLLCBBQ0tfU0hJRlQsIDApOyAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKE1VTFRJQ0FTVCwgTVVMVElDQVNUX1NISUZULCAwKTsKLS8qCXJlZyB8PSBhZ254X3NldF9iaXRzKE1VTFRJQ0FTVCwgTVVMVElDQVNUX1NISUZULCAxKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhSRUxBWSwgUkVMQVlfU0hJRlQsIDApOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFRNLCBUTV9TSElGVCwgMCk7Ci0JdHhoZHItPnJlZzAgPSBjcHVfdG9fYmUzMihyZWcpOwotCi0JLyogU2V0IHRoZSBsb25nIGFuZCBzaG9ydCByZXRyeSBsaW1pdHMgKi8KLQl0eGhkci0+dHguc2hvcnRfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7Ci0JdHhoZHItPnR4LmxvbmdfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7Ci0KLQkvKiBGSVhNRSAqLwotCWxlbiA9IHR4X2luZm8tPnNrYi0+bGVuIC0gc2l6ZW9mKCp0eGhkcikgKyB0eF9pbmZvLT5oZHJfbGVuICsgRkNTX0xFTjsKLQlpZiAoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpCi0JCWxlbiArPSA4OwotCWxlbiA9IDIzOTg7Ci0JcmVnID0gYWdueF9zZXRfYml0cyhGUkFHX1NJWkUsIEZSQUdfU0laRV9TSElGVCwgbGVuKTsKLQlsZW4gPSB0eF9pbmZvLT5za2ItPmxlbiAtIHNpemVvZigqdHhoZHIpOwotCXJlZyB8PSBhZ254X3NldF9iaXRzKFBBWUxPQURfTEVOLCBQQVlMT0FEX0xFTl9TSElGVCwgbGVuKTsKLQl0eGhkci0+cmVnMyA9IGNwdV90b19iZTMyKHJlZyk7Ci0KLQlyb3V0ZV9mbGFnX3NldCh0eGhkcik7Ci19IC8qIGZpbGxfaGRyICovCi0KLXN0YXRpYyB2b2lkIHR4bV9wb3dlcl9zZXQoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGkpCi17Ci0Jc3RydWN0IGFnbnhfc3RhX3Bvd2VyIHBvd2VyOwotCXUzMiByZWc7Ci0KLQkvKiBGSVhNRSAqLwotCWlmICh0eGktPmNvbnRyb2wucmF0ZXNbMF0uaWR4IDwgMCkgewotCQkvKiBGb3IgQiBtb2RlIFNob3J0IFByZWFtYmxlICovCi0JCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFCX1NIT1JUKTsKLS8qCQljb250cm9sLT50eF9yYXRlID0gLWNvbnRyb2wtPnR4X3JhdGU7ICovCi0JfSBlbHNlCi0JCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFHKTsKLS8qCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9MT05HKTsgKi8KLQlyZWcgfD0gYWdueF9zZXRfYml0cyhTSUdOQUwsIFNJR05BTF9TSElGVCwgMHhCKTsKLQlyZWcgfD0gYWdueF9zZXRfYml0cyhSQVRFLCBSQVRFX1NISUZULCAweEIpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoUE9XRVJfTEVWRUwsIFBPV0VSX0xFVkVMX1NISUZULCAxNSk7ICovCi0JcmVnIHw9IGFnbnhfc2V0X2JpdHMoUE9XRVJfTEVWRUwsIFBPV0VSX0xFVkVMX1NISUZULCAyMCk7Ci0JLyogaWYgcmF0ZSA8IDExTSBzZXQgaXQgdG8gMCAqLwotCXJlZyB8PSBhZ254X3NldF9iaXRzKE5VTV9UUkFOU01JVFRFUlMsIE5VTV9UUkFOU01JVFRFUlNfU0hJRlQsIDEpOwotLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoRURDRiwgRURDRl9TSElGVCwgMSk7ICovCi0vKglyZWcgfD0gYWdueF9zZXRfYml0cyhUSUZTLCBUSUZTX1NISUZULCAxKTsgKi8KLQotCXBvd2VyLnJlZyA9IHJlZzsKLS8qCXBvd2VyLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7ICovCi0KLS8qCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBMT0NBTF9TVEFJRCk7ICovCi0Jc2V0X3N0YV9wb3dlcihwcml2LCAmcG93ZXIsIEJTU0lEX1NUQUlEKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdHhfcGFja2V0X2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdW5zaWduZWQgaW50IGllZWVfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQlpZiAoc2tiLT5sZW4gPiAyMDQ4KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImxlbmd0aCBpcyAlZFxuIiwgc2tiLT5sZW4pOwotCQlhZ254X2J1ZygiVG9vIGxvbmcgVFggc2tiIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JLyogRklYTUUgKi8KLQlpZiAoc2tiLT5sZW4gPT0gaWVlZV9sZW4pIHsKLQkJcHJpbnRrKFBGWCAiQSBzdHJhbmdlIFRYIHBhY2tldFxuIik7Ci0JCXJldHVybiAtMTsKLQkJLyogdHhfZmFpbGVfaXJxc2FmZSgpOyAqLwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2FnbnhfdHgoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBzdHJ1Y3QgYWdueF9yaW5nICpyaW5nKQotewotCXN0cnVjdCBhZ254X2Rlc2MgKmhkcl9kZXNjLCAqZnJhZ19kZXNjOwotCXN0cnVjdCBhZ254X2luZm8gKmhkcl9pbmZvLCAqZnJhZ19pbmZvOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogVGhlIFJYIGludGVycnVwdCBuZWVkIGJlIERpc2FibGUgdW50aWwgdGhpcyBUWCBwYWNrZXQKLQkgICBpcyBoYW5kbGVkIGluIHRoZSBuZXh0IHR4IGludGVycnVwdCAqLwotCWRpc2FibGVfcnhfaW50ZXJydXB0KHByaXYpOwotCi0JaSA9IHJpbmctPmlkeDsKLQlyaW5nLT5pZHggKz0gMjsKLS8qICAgCWlmIChwcml2LT50eG1faWR4IC0gcHJpdi0+dHhtX2lkeF9zZW50ID09IEFHTlhfVFhNX1JJTkdfU0laRSAtIDIpICovCi0vKiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmh3LCAwKTsgKi8KLQotCS8qIFNldCBhZ254IGhlYWRlcidzIGluZm8gYW5kIGRlc2MgKi8KLQlpICU9IHJpbmctPnNpemU7Ci0JaGRyX2Rlc2MgPSByaW5nLT5kZXNjICsgaTsKLQloZHJfaW5mbyA9IHJpbmctPmluZm8gKyBpOwotCWhkcl9pbmZvLT5oZHJfbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKTsKLQltZW1jcHkoJmhkcl9pbmZvLT5oZHIsIHNrYi0+ZGF0YSwgaGRyX2luZm8tPmhkcl9sZW4pOwotCi0JLyogQWRkIHRoZSBhZ254IGhlYWRlciB0byB0aGUgZnJvbnQgb2YgdGhlIFNLQiAqLwotCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikgLSBoZHJfaW5mby0+aGRyX2xlbik7Ci0KLQloZHJfaW5mby0+dHhpID0gdHhpOwotCWhkcl9pbmZvLT5kbWFfbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ254X2hkcik7Ci0JaGRyX2luZm8tPnNrYiA9IHNrYjsKLQloZHJfaW5mby0+dHlwZSA9IEhFQURFUjsKLQlmaWxsX2FnbnhfaGRyKHByaXYsIGhkcl9pbmZvKTsKLQloZHJfaW5mby0+bWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgaGRyX2luZm8tPmRtYV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWRvIHsKLQkJdTMyIGZyYWcgPSAwOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoRklSU1RfRlJBRywgRklSU1RfRlJBR19TSElGVCwgMSk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhMQVNUX0ZSQUcsIExBU1RfRlJBR19TSElGVCwgMCk7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhQQUNLRVRfTEVOLCBQQUNLRVRfTEVOX1NISUZULCBza2ItPmxlbik7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhGSVJTVF9GUkFHX0xFTiwgRklSU1RfRlJBR19MRU5fU0hJRlQsIDEpOwotCQlmcmFnIHw9IGFnbnhfc2V0X2JpdHMoT1dORVIsIE9XTkVSX1NISUZULCAxKTsKLQkJaGRyX2Rlc2MtPmZyYWcgPSBjcHVfdG9fYmUzMihmcmFnKTsKLQl9IHdoaWxlICgwKTsKLQloZHJfZGVzYy0+ZG1hX2FkZHIgPSBjcHVfdG9fYmUzMihoZHJfaW5mby0+bWFwcGluZyk7Ci0KLQotCS8qIFNldCBGcmFnJ3MgaW5mbyBhbmQgZGVzYyAqLwotCWkgPSAoaSArIDEpICUgcmluZy0+c2l6ZTsKLQlmcmFnX2Rlc2MgPSByaW5nLT5kZXNjICsgaTsKLQlmcmFnX2luZm8gPSByaW5nLT5pbmZvICsgaTsKLQltZW1jcHkoZnJhZ19pbmZvLCBoZHJfaW5mbywgc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pKTsKLQlmcmFnX2luZm8tPnR5cGUgPSBQQUNLRVQ7Ci0JZnJhZ19pbmZvLT5kbWFfbGVuID0gc2tiLT5sZW4gLSBoZHJfaW5mby0+ZG1hX2xlbjsKLQlmcmFnX2luZm8tPm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEgKyBoZHJfaW5mby0+ZG1hX2xlbiwKLQkJCQkJICAgIGZyYWdfaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JZG8gewotCQl1MzIgZnJhZyA9IDA7Ci0JCWZyYWcgfD0gYWdueF9zZXRfYml0cyhGSVJTVF9GUkFHLCBGSVJTVF9GUkFHX1NISUZULCAwKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKExBU1RfRlJBRywgTEFTVF9GUkFHX1NISUZULCAxKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKFBBQ0tFVF9MRU4sIFBBQ0tFVF9MRU5fU0hJRlQsIHNrYi0+bGVuKTsKLQkJZnJhZyB8PSBhZ254X3NldF9iaXRzKFNVQl9GUkFHX0xFTiwgU1VCX0ZSQUdfTEVOX1NISUZULCBmcmFnX2luZm8tPmRtYV9sZW4pOwotCQlmcmFnX2Rlc2MtPmZyYWcgPSBjcHVfdG9fYmUzMihmcmFnKTsKLQl9IHdoaWxlICgwKTsKLQlmcmFnX2Rlc2MtPmRtYV9hZGRyID0gY3B1X3RvX2JlMzIoZnJhZ19pbmZvLT5tYXBwaW5nKTsKLQotCXR4bV9wb3dlcl9zZXQocHJpdiwgdHhpKTsKLQotLyoJZG8geyAqLwotLyoJCWludCBqOyAqLwotLyoJCXNpemVfdCBsZW47ICovCi0vKgkJbGVuID0gc2tiLT5sZW4gLSBoZHJfaW5mby0+ZG1hX2xlbiArIGhkcl9pbmZvLT5oZHJfbGVuOyAgKi8KLS8qCQlpZiAobGVuID09IDYxNCkgeyAqLwotLyoJCQlhZ254X3ByaW50X2Rlc2MoaGRyX2Rlc2MpOyAqLwotLyoJCQlhZ254X3ByaW50X2Rlc2MoZnJhZ19kZXNjKTsgKi8KLS8qCQkJYWdueF9wcmludF90eF9oZHIoKHN0cnVjdCBhZ254X2hkciAqKXNrYi0+ZGF0YSk7ICovCi0vKgkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLwotLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyoJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIGopOyAqLwotLyoJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBCU1NJRF9TVEFJRCk7ICovCi0vKgkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KLS8qCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCBqKTsgKi8KLS8qCQkJfSAqLwotLyoJfSB3aGlsZSAoMCk7ICovCi0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBGSVhNRSB1Z2x5IGNvZGUgKi8KLQkvKiBUcmlnZ2VyIFRYTSAqLwotCWRvIHsKLQkJdTMyIHJlZzsKLQkJcmVnID0gKGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYTUNUTCkpOwotCQlyZWcgfD0gMHg4OwotCQlpb3dyaXRlMzIoKHJlZyksIHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYTUNUTCk7Ci0JfSB3aGlsZSAoMCk7Ci0KLQkvKiBUcmlnZ2VyIFRYRCAqLwotCWRvIHsKLQkJdTMyIHJlZzsKLQkJcmVnID0gKGlvcmVhZDMyKHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYRENUTCkpOwotCQlyZWcgfD0gMHg4OwotCQlpb3dyaXRlMzIoKHJlZyksIHByaXYtPmN0bCArIEFHTlhfQ0lSX1RYRENUTCk7Ci0JfSB3aGlsZSAoMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdTE2IGZjdGw7Ci0KLQlpZiAodHhfcGFja2V0X2NoZWNrKHNrYikpCi0JCXJldHVybiAwOwotCi0vKglwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogVFhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAqLwotLyoJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOyAqLwotCi0JZmN0bCA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKXNrYi0+ZGF0YSkpOwotCi0JaWYgKChmY3RsICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKQotCQlyZXR1cm4gX19hZ254X3R4KHByaXYsIHNrYiwgJnByaXYtPnR4ZCk7Ci0JZWxzZQotCQlyZXR1cm4gX19hZ254X3R4KHByaXYsIHNrYiwgJnByaXYtPnR4bSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYWM0MTU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0jaWZuZGVmIEFHTlhfWE1JVF9IXwotI2RlZmluZSBBR05YX1hNSVRfSF8KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi1zdHJ1Y3QgYWdueF9wcml2OwotCi1zdGF0aWMgaW5saW5lIHUzMiBhZ254X3NldF9iaXRzKHUzMiBtYXNrLCB1OCBzaGlmdCwgdTMyIHZhbHVlKQotewotCXJldHVybiAodmFsdWUgPDwgc2hpZnQpICYgbWFzazsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgYWdueF9nZXRfYml0cyh1MzIgbWFzaywgdTggc2hpZnQsIHUzMiB2YWx1ZSkKLXsKLQlyZXR1cm4gKHZhbHVlICYgbWFzaykgPj4gc2hpZnQ7Ci19Ci0KLQotc3RydWN0IGFnbnhfcnggewotCV9fYmUxNiByeF9wYWNrZXRfZHVyYXRpb247IC8qICBSWCBQYWNrZXQgRHVyYXRpb24gKi8KLQlfX2JlMTYgcmVwbGF5X2NudDsJLyogUmVwbGF5IENvdW50ICovCi19IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKLQotCi1zdHJ1Y3QgYWdueF90eCB7Ci0JdTggbG9uZ19yZXRyeV9saW1pdDsgLyogTG9uZyBSZXRyeSBMaW1pdCAqLwotCXU4IHNob3J0X3JldHJ5X2xpbWl0OyAvKiBTaG9ydCBSZXRyeSBMaW1pdCAqLwotCXU4IGxvbmdfcmV0cnlfY250OwkvKiBMb25nIFJldHJ5IENvdW50ICovCi0JdTggc2hvcnRfcmV0cnlfY250OyAvKiBTaG9ydCBSZXRyeSBDb3VudCAqLwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLQotLyogQ29weSBmcm9tIGJjbTQzeHggKi8KLSNkZWZpbmUgUDREX0JZVDNTKG1hZ2ljLCBucl9ieXRlcykgICAgICB1OCBfX3A0ZGRpbmcjI21hZ2ljW25yX2J5dGVzXQotI2RlZmluZSBQNERfQllURVMobGluZSwgbnJfYnl0ZXMpICAgICAgIFA0RF9CWVQzUyhsaW5lLCBucl9ieXRlcykKLSNkZWZpbmUgUEFEX0JZVEVTKG5yX2J5dGVzKSAgICAgICAgICAgICBQNERfQllURVMoX19MSU5FX18sIG5yX2J5dGVzKQotCi0jZGVmaW5lIFA0RF9CSVQzUyhtYWdpYywgbnJfYml0cykgICAgICAgX19iZTMyIF9fcGFkZGluZyMjbWFnaWM6bnJfYml0cwotI2RlZmluZSBQNERfQklUUyhsaW5lLCBucl9iaXRzKSAgICAgICAgIFA0RF9CSVQzUyhsaW5lLCBucl9iaXRzKQotI2RlZmluZSBQQURfQklUUyhucl9iaXRzKQkgICAgICAgIFA0RF9CSVRTKF9fTElORV9fLCBucl9iaXRzKQotCi0KLXN0cnVjdCBhZ254X2hkciB7Ci0JX19iZTMyIHJlZzA7Ci0jZGVmaW5lIFJUUwkJICAgICAgICAweDgwMDAwMDAwIC8qIFJUUyAqLwotI2RlZmluZSBSVFNfU0hJRlQJCTMxCi0jZGVmaW5lIE1VTFRJQ0FTVAkgICAgICAgIDB4NDAwMDAwMDAgLyogbXVsdGljYXN0ICovCi0jZGVmaW5lIE1VTFRJQ0FTVF9TSElGVAkJMzAKLSNkZWZpbmUgQUNLCQkJMHgzMDAwMDAwMCAvKiBBQ0sgKi8KLSNkZWZpbmUgQUNLX1NISUZUCQkyOAotI2RlZmluZSBUTQkJCTB4MDgwMDAwMDAgLyogVE0gKi8KLSNkZWZpbmUgVE1fU0hJRlQJCTI3Ci0jZGVmaW5lIFJFTEFZCQkJMHgwNDAwMDAwMCAvKiBSZWxheSAqLwotI2RlZmluZSBSRUxBWV9TSElGVAkJMjYKLS8qIAlQQURfQklUUyg0KTsgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1MJCTB4MDAzODAwMDAgLyogcmV2aXNlZCBGQ1MgKi8KLSNkZWZpbmUgUkVWSVNFRF9GQ1NfU0hJRlQJMTkKLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUgkweDAwMDdGRkZGIC8qIE5leHQgQnVmZmVyIEFkZHJlc3MgKi8KLSNkZWZpbmUgTkVYVF9CVUZGRVJfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMTsKLSNkZWZpbmUgTUFDX0hEUl9MRU4JCTB4RkMwMDAwMDAgLyogTUFDIEhlYWRlciBMZW5ndGggICovCi0jZGVmaW5lIE1BQ19IRFJfTEVOX1NISUZUCTI2Ci0jZGVmaW5lIERVUkFUSU9OX09WRVJJREUJMHgwMjAwMDAwMCAvKiBEdXJhdGlvbiBPdmVycmlkZSAqLwotI2RlZmluZSBEVVJBVElPTl9PVkVSSURFX1NISUZUCTI1Ci0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERQkJMHgwMTAwMDAwMCAvKiBQSFkgSGVhZGVyIE92ZXJyaWRlICovCi0jZGVmaW5lIFBIWV9IRFJfT1ZFUklERV9TSElGVAkyNAotI2RlZmluZSBDUkNfRkFJTAkJMHgwMDgwMDAwMCAvKiBDUkMgZmFpbCAqLwotI2RlZmluZSBDUkNfRkFJTF9TSElGVAkJMjMKLS8qCVBBRF9CSVRTKDEpOyAqLwotI2RlZmluZSBTRVFVRU5DRV9OVU1CRVIJCTB4MDAyMDAwMDAgLyogU2VxdWVuY2UgTnVtYmVyICovCi0jZGVmaW5lIFNFUVVFTkNFX05VTUJFUl9TSElGVAkyMQotLyoJUEFEX0JJVFMoMik7ICovCi0jZGVmaW5lIEJVRkZfSEVBRF9BRERSCQkweDAwMDdGRkZGIC8qIEJ1ZmZlciBIZWFkIEFkZHJlc3MgKi8KLSNkZWZpbmUgQlVGRl9IRUFEX0FERFJfU0hJRlQJMAotCi0JX19iZTMyIHJlZzI7Ci0jZGVmaW5lIFBEVV9DT1VOVAkJMHhGQzAwMDAwMCAvKiBQRFUgQ291bnQgKi8KLSNkZWZpbmUgUERVX0NPVU5UX1NISUZUCQkyNgotLyogCVBBRF9CSVRTKDMpOyAqLwotI2RlZmluZSBXRVBfS0VZCQkJMHgwMDYwMDAwMCAvKiBXRVAgS2V5ICMgKi8KLSNkZWZpbmUgV0VQX0tFWV9TSElGVAkJMjEKLSNkZWZpbmUgVVNFU19XRVBfS0VZCQkweDAwMTAwMDAwIC8qIFVzZXMgV0VQIEtleSAqLwotI2RlZmluZSBVU0VTX1dFUF9LRVlfU0hJRlQJMjAKLSNkZWZpbmUgS0VFUF9BTElWRQkJMHgwMDA4MDAwMCAvKiBLZWVwIGFsaXZlICovCi0jZGVmaW5lIEtFRVBfQUxJVkVfU0hJRlQJMTkKLSNkZWZpbmUgQlVGRl9UQUlMX0FERFIJCTB4MDAwN0ZGRkYgLyogQnVmZmVyIFRhaWwgQWRkcmVzcyAqLwotI2RlZmluZSBCVUZGX1RBSUxfQUREUl9TSElGVAkwCi0KLQlfX2JlMzIgcmVnMzsKLSNkZWZpbmUgQ1RTXzExRwkJCTB4ODAwMDAwMDAJLyogQ1RTIGluIDExZyAqLwotI2RlZmluZSBDVFNfMTFHX1NISUZUCQkzMQotI2RlZmluZSBSVFNfMTFHCQkJMHg0MDAwMDAwMAkvKiBSVFMgaW4gMTFnICovCi0jZGVmaW5lIFJUU18xMUdfU0hJRlQJCTMwCi0vKiBQQURfQklUUygyKTsgKi8KLSNkZWZpbmUgRlJBR19TSVpFCQkweDBGRkYwMDAwCS8qIGZyYWdtZW50IHNpemUgKi8KLSNkZWZpbmUgRlJBR19TSVpFX1NISUZUCQkxNgotI2RlZmluZSBQQVlMT0FEX0xFTgkJMHgwMDAwRkZGMAkvKiBwYXlsb2FkIGxlbmd0aCAqLwotI2RlZmluZSBQQVlMT0FEX0xFTl9TSElGVAk0Ci0jZGVmaW5lIEZSQUdfTlVNCQkweDAwMDAwMDBGCS8qIG51bWJlciBvZiBmcmFncyAqLwotI2RlZmluZSBGUkFHX05VTV9TSElGVAkJMAotCi0JX19iZTMyIHJlZzQ7Ci0vKiAJUEFEX0JJVFMoNCk7ICovCi0jZGVmaW5lIFJFTEFZX1NUQUlECQkweDBGRkYwMDAwIC8qIHJlbGF5U3RhbGQgKi8KLSNkZWZpbmUgUkVMQVlfU1RBSURfU0hJRlQJMTYKLSNkZWZpbmUgU1RBVElPTl9JRAkJMHgwMDAwRkZGMCAvKiBTdGF0aW9uIElEICovCi0jZGVmaW5lIFNUQVRJT05fSURfU0hJRlQJNAotI2RlZmluZSBXT1JLUVVFVUVfSUQJCTB4MDAwMDAwMEYgLyogV29ya3F1ZXVlIElEICovCi0jZGVmaW5lIFdPUktRVUVVRV9JRF9TSElGVAkwCi0KLQkvKiBGSVhNRSB0aGlzIHJlZ2lzdGVyIG1heWJlIGlzIExFPyAqLwotCV9fYmUzMiByZWc1OwotLyogCVBBRF9CSVRTKDQpOyAqLwotI2RlZmluZSBST1VURV9IT1NUCQkweDBGMDAwMDAwCi0jZGVmaW5lIFJPVVRFX0hPU1RfU0hJRlQJMjQKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFUJCTB4MDBGMDAwMDAKLSNkZWZpbmUgUk9VVEVfQ0FSRF9DUFVfU0hJRlQJMjAKLSNkZWZpbmUgUk9VVEVfRU5DUllQVElPTgkweDAwMEYwMDAwCi0jZGVmaW5lIFJPVVRFX0VOQ1JZUFRJT05fU0hJRlQJMTYKLSNkZWZpbmUgUk9VVEVfVFgJCTB4MDAwMEYwMDAKLSNkZWZpbmUgUk9VVEVfVFhfU0hJRlQJCTEyCi0jZGVmaW5lIFJPVVRFX1JYMQkJMHgwMDAwMEYwMAotI2RlZmluZSBST1VURV9SWDFfU0hJRlQJCTgKLSNkZWZpbmUgUk9VVEVfUlgyCQkweDAwMDAwMEYwCi0jZGVmaW5lIFJPVVRFX1JYMl9TSElGVAkJNAotI2RlZmluZSBST1VURV9DT01QUkVTU0lPTgkweDAwMDAwMDBGCi0jZGVmaW5lIFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUIDAKLQotCV9fYmUzMiBfMTFnMDsJCQkvKiAxMWcgKi8KLQlfX2JlMzIgXzExZzE7CQkJLyogMTFnICovCi0JX19iZTMyIF8xMWIwOwkJCS8qIDExYiAqLwotCV9fYmUzMiBfMTFiMTsJCQkvKiAxMWIgKi8KLQl1OCBtYWNfaGRyWzMyXTsJCQkvKiBNQUMgaGVhZGVyICovCi0KLQlfX2JlMTYgcnRzX2R1cmF0aW9uOwkJLyogUlRTIGR1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfZHVyYXRpb247CQkvKiBMYXN0IGR1cmF0aW9uICovCi0JX19iZTE2IHNlY19sYXN0X2R1cmF0aW9uOwkvKiBTZWNvbmQgdG8gTGFzdCBkdXJhdGlvbiAqLwotCV9fYmUxNiBvdGhlcl9kdXJhdGlvbjsJCS8qIE90aGVyIGR1cmF0aW9uICovCi0JX19iZTE2IHR4X2xhc3RfZHVyYXRpb247CS8qIFRYIExhc3QgZHVyYXRpb24gKi8KLQlfX2JlMTYgdHhfb3RoZXJfZHVyYXRpb247CS8qIFRYIE90aGVyIER1cmF0aW9uICovCi0JX19iZTE2IGxhc3RfMTFnX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExZyAqLwotCV9fYmUxNiBvdGhlcl8xMWdfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExZyAqLwotCi0JX19iZTE2IGxhc3RfMTFiX2xlbjsJCS8qIExlbmd0aCBvZiBsYXN0IDExYiAqLwotCV9fYmUxNiBvdGhlcl8xMWJfbGVuOwkJLyogTGVuZ2h0IG9mIG90aGVyIDExYiAqLwotCi0KLQlfX2JlMTYgcmVnNjsKLSNkZWZpbmUgTUJGCQkJMHhGMDAwIC8qIG1iZiAqLwotI2RlZmluZSBNQkZfU0hJRlQJCTEyCi0jZGVmaW5lIFJTVkQ0CQkJMHgwRkZGIC8qIHJzdmQ0ICovCi0jZGVmaW5lIFJTVkQ0X1NISUZUCQkwCi0KLQlfX2JlMTYgcnhfZnJhZ19zdGF0OwkvKiBSWCBmcmFnbWVudGF0aW9uIHN0YXR1cyAqLwotCi0JX19iZTMyIHRpbWVfc3RhbXA7CS8qIFRpbWVTdGFtcCAqLwotCV9fYmUzMiBwaHlfc3RhdHNfaGk7CS8qIFBIWSBzdGF0cyBoaSAqLwotCV9fYmUzMiBwaHlfc3RhdHNfbG87CS8qIFBIWSBzdGF0cyBsbyAqLwotCV9fYmUzMiBtaWNfa2V5MDsJLyogTUlDIGtleSAwICovCi0JX19iZTMyIG1pY19rZXkxOwkvKiBNSUMga2V5IDEgKi8KLQotCXVuaW9uIHsJCQkvKiBSWC9UWCBVbmlvbiAqLwotCQlzdHJ1Y3QgYWdueF9yeCByeDsKLQkJc3RydWN0IGFnbnhfdHggdHg7Ci0JfTsKLQotCXU4IHJ4X2NoYW5uZWw7CQkvKiBSZWNpZXZlIENoYW5uZWwgKi8KLQlQQURfQllURVMoMyk7Ci0KLQl1OCByZXNlcnZlZFs0XTsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi0KLXN0cnVjdCBhZ254X2Rlc2MgewotI2RlZmluZSBQQUNLRVRfTEVOCQkweEZGRjAwMDAwCi0jZGVmaW5lIFBBQ0tFVF9MRU5fU0hJRlQJMjAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9QQUNLRVRfTUFTSwkweDAwMDgwMDAwCi0jZGVmaW5lIEZJUlNUX1BBQ0tFVF9NQVNLX1NISUZUCTE5Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjIJCTB4MDAwNDAwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMl9TSElGVAkxOAotI2RlZmluZSBGSVJTVF9US0lQX0VSUk9SCTB4MDAwMjAwMDAKLSNkZWZpbmUgRklSU1RfVEtJUF9FUlJPUl9TSElGVAkxNwotI2RlZmluZSBGSVJTVF9US0lQX1BBQ0tFVAkweDAwMDEwMDAwCi0jZGVmaW5lIEZJUlNUX1RLSVBfUEFDS0VUX1NISUZUCTE2Ci0jZGVmaW5lIEZJUlNUX1JFU0VSVjEJCTB4MDAwMEYwMDAKLSNkZWZpbmUgRklSU1RfUkVTRVJWMV9TSElGVAkxMgotI2RlZmluZSBGSVJTVF9GUkFHX0xFTgkJMHgwMDAwMEZGOAotI2RlZmluZSBGSVJTVF9GUkFHX0xFTl9TSElGVAkzCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgU1VCX1JFU0VSVjIJCTB4MDAwYzAwMDAKLSNkZWZpbmUgU1VCX1JFU0VSVjJfU0hJRlQJMTgKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1IJCTB4MDAwMjAwMDAKLSNkZWZpbmUgU1VCX1RLSVBfRVJST1JfU0hJRlQJMTcKLSNkZWZpbmUgU1VCX1RLSVBfUEFDS0VUCQkweDAwMDEwMDAwCi0jZGVmaW5lIFNVQl9US0lQX1BBQ0tFVF9TSElGVAkxNgotI2RlZmluZSBTVUJfUkVTRVJWMQkJMHgwMDAwODAwMAotI2RlZmluZSBTVUJfUkVTRVJWMV9TSElGVAkxNQotI2RlZmluZSBTVUJfRlJBR19MRU4JCTB4MDAwMDdGRjgKLSNkZWZpbmUgU1VCX0ZSQUdfTEVOX1NISUZUCTMKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotI2RlZmluZSBGSVJTVF9GUkFHCQkweDAwMDAwMDA0Ci0jZGVmaW5lIEZJUlNUX0ZSQUdfU0hJRlQJMgotI2RlZmluZSBMQVNUX0ZSQUcJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTEFTVF9GUkFHX1NISUZUCQkxCi0jZGVmaW5lIE9XTkVSCQkJMHgwMDAwMDAwMQotI2RlZmluZSBPV05FUl9TSElGVAkJMAotCV9fYmUzMiBmcmFnOwotCV9fYmUzMiBkbWFfYWRkcjsKLX0gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOwotCi1lbnVtIHtIRUFERVIsIFBBQ0tFVH07Ci0KLXN0cnVjdCBhZ254X2luZm8gewotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7Ci0JdTMyIGRtYV9sZW47CQkvKiBkbWEgYnVmZmVyIGxlbiAgKi8KLQkvKiBCZWxvdyBmaWVsZHMgb25seSB1c2Z1bCBmb3IgdHggKi8KLQl1MzIgaGRyX2xlbjsJCS8qIGllZWU4MDIxMSBoZWFkZXIgbGVuZ3RoICovCi0JdW5zaWduZWQgaW50IHR5cGU7Ci0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpOwotICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7Ci19OwotCi0KLXN0cnVjdCBhZ254X3JpbmcgewotCXN0cnVjdCBhZ254X2Rlc2MgKmRlc2M7Ci0JZG1hX2FkZHJfdCBkbWE7Ci0Jc3RydWN0IGFnbnhfaW5mbyAqaW5mbzsKLQkvKiBXaWxsIGxlYWQgdG8gb3ZlcmZsb3cgd2hlbiBzZW50IHBhY2tldCBudW1iZXIgZW5vdWdoPyAqLwotCXVuc2lnbmVkIGludCBpZHg7Ci0JdW5zaWduZWQgaW50IGlkeF9zZW50OwkJLyogb25seSB1c2Z1bCBmb3IgdHhkIGFuZCB0eG0gKi8KLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLX07Ci0KLSNkZWZpbmUgQUdOWF9SWF9SSU5HX1NJWkUJMTI4Ci0jZGVmaW5lIEFHTlhfVFhEX1JJTkdfU0laRQkyNTYKLSNkZWZpbmUgQUdOWF9UWE1fUklOR19TSVpFCTEyOAotCi12b2lkIGRpc2FibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBlbmFibGVfcnhfaW50ZXJydXB0KHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IGZpbGxfcmluZ3Moc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIHVuZmlsbF9yaW5ncyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3J4X2lycShzdHJ1Y3QgYWdueF9wcml2ICpwcml2KTsKLXZvaWQgaGFuZGxlX3R4ZF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdik7Ci12b2lkIGhhbmRsZV90eG1faXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotdm9pZCBoYW5kbGVfb3RoZXJfaXJxKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpOwotaW50IF9hZ254X3R4KHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpOwotI2VuZGlmIC8qIEFHTlhfWE1JVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcKaW5kZXggMjQ3MTk0OS4uZWI2NzU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQU5EUk9JRAogCWJvb2wgIkFuZHJvaWQgRHJpdmVycyIKKwlkZXBlbmRzIG9uIEJST0tFTgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB2YXJpb3VzIGRyaXZlcnMgbmVlZGVkIG9uIHRoZSBBbmRyb2lkIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmluZGV4IDk0YzVkMjcuLmNkYTI2YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX25idWYgPSAyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKaW5kZXggYWY3MjNjYi4uZDYzYzg4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBDT01FREkKIAl0cmlzdGF0ZSAiRGF0YSBhY3F1aXNpdGlvbiBzdXBwb3J0IChjb21lZGkpIgogCWRlZmF1bHQgTgotCWRlcGVuZHMgb24gbQorCWRlcGVuZHMgb24gbSAmJiAoUENJIHx8IFBDTUNJQSB8fCBQQ0NBUkQgfHwgVVNCKQogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBkYXRhIGFjcXVpc2l0aW9uIGRldmljZXMKIAkgIGZvciBMaW51eC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwppbmRleCBmNTRiYjliLi5hYWFkNzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCkBAIC0yMzM3LDcgKzIzMzcsNyBAQAogCX0KIAogCURQUklOVEsoImNvbWVkaSVpIHN1YmQgJWQgYnVmZmVyIHJlc2l6ZWQgdG8gJWkgYnl0ZXNcbiIsCi0JCWRldi0+bWlub3IsIHMgLSBkZXYtPnN1YmRldmljZXMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJCWRldi0+bWlub3IsIChpbnQpKHMgLSBkZXYtPnN1YmRldmljZXMpLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCmluZGV4IDEyZDEyYjQuLjgwYzBkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCkBAIC03NDQsNyArNzQ0LDcgQEAKIAogCS8qIEluaXRpYWxpemUgdGhlIHBjbWNpYV9kZXZpY2Ugc3RydWN0dXJlICovCiAJLyogSW50ZXJydXB0IHNldHVwICovCi0JbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkc7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCmluZGV4IDRkMTBiYzMuLjA5ZTZlM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTUzLDcgKzUzLDggQEAKICAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgogICovCiBzdHJ1Y3QgcGNpZGlvX2JvYXJkIHsKLQljb25zdCBjaGFyICpuYW1lOwkvKiAgYW5tZSBvZiB0aGUgYm9hcmQgKi8KKwljb25zdCBjaGFyICpuYW1lOwkvKiAgbmFtZSBvZiB0aGUgYm9hcmQgKi8KKwlpbnQgZGV2X2lkOwogCWludCBuXzgyNTU7CQkvKiAgbnVtYmVyIG9mIDgyNTUgY2hpcHMgb24gYm9hcmQgKi8KIAogCS8qICBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zICovCkBAIC02NCwxOCArNjUsMjEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpZGlvX2JvYXJkIHBjaWRpb19ib2FyZHNbXSA9IHsKIAl7CiAJIC5uYW1lID0gInBjaS1kaW8yNCIsCisJIC5kZXZfaWQgPSAweDAwMjgsCiAJIC5uXzgyNTUgPSAxLAogCSAucGNpY29udHJvbGVyX2JhZHJpbmRleCA9IDEsCiAJIC5kaW9yZWdzX2JhZHJpbmRleCA9IDIsCiAJIH0sCiAJewogCSAubmFtZSA9ICJwY2ktZGlvMjRoIiwKKwkgLmRldl9pZCA9IDB4MDAxNCwKIAkgLm5fODI1NSA9IDEsCiAJIC5wY2ljb250cm9sZXJfYmFkcmluZGV4ID0gMSwKIAkgLmRpb3JlZ3NfYmFkcmluZGV4ID0gMiwKIAkgfSwKIAl7CiAJIC5uYW1lID0gInBjaS1kaW80OGgiLAorCSAuZGV2X2lkID0gMHgwMDBiLAogCSAubl84MjU1ID0gMiwKIAkgLnBjaWNvbnRyb2xlcl9iYWRyaW5kZXggPSAwLAogCSAuZGlvcmVnc19iYWRyaW5kZXggPSAxLApAQCAtMjA2LDcgKzIxMCw3IEBACiAJCQljb250aW51ZTsKIAkJLyogIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgKi8KIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgQVJSQVlfU0laRShwY2lkaW9fYm9hcmRzKTsgaW5kZXgrKykgewotCQkJaWYgKHBjaWRpb19wY2lfdGFibGVbaW5kZXhdLmRldmljZSAhPSBwY2lkZXYtPmRldmljZSkKKwkJCWlmIChwY2lkaW9fYm9hcmRzW2luZGV4XS5kZXZfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCiAJCQkJY29udGludWU7CiAKIAkJCS8qICB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IDE0YmYyOWIuLjBkMmMyZWIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC01MTUsNiArNTE1LDcgQEAKIHsKIAlzdHJ1Y3QgcG9sbF9kZWxheV90IHJlc3VsdCA9IHBvbGxfZGVsYXlfbWluX21heCgxMDAwLCAyMDAwKTsKIAlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcCA9IHMtPnByaXZhdGU7CisJaW50IGk7CiAKIAlpZiAocCkgewogCQl2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwgPSBwLT5jaGFubmVsOwpAQCAtNTcwLDE4ICs1NzEsMTEgQEAKIAkJCQkJICAgICAgIHAtPnNlcmlhbF9ubyk7CiAKIAkJCQkJLyogIFRyYW5zZm9ybWF0aW9uIGFsbCB6ZXJvcyAqLwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1swXS5saW5rX2Ftb3VudCA9IDA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfdHlwZSA9Ci0JCQkJCSAgICAoZW51bSBsaW5rX3R5cGVzKTA7Ci0JCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfYW1vdW50ID0gMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua190eXBlID0KLQkJCQkJICAgIChlbnVtIGxpbmtfdHlwZXMpMDsKLQkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua19hbW91bnQgPSAwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX3R5cGUgPQotCQkJCQkgICAgKGVudW0gbGlua190eXBlcykwOwotCQkJCQl0cmFuc2YubGlua1szXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYW5zZi5saW5rKTsgaSsrKSB7CisJCQkJCQl0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPQorCQkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJCXRyYW5zZi5saW5rW2ldLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJfQogCiAJCQkJCXNldF90cmFuc2Zvcm1zKGNoYW5uZWwsIHRyYW5zZiwgMCk7CiAJCQkJCXVzZV90cmFuc2Zvcm0oY2hhbm5lbCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggMmNkYTdhZC4uODBlMTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lX2RhcS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYwpAQCAtNTEsNiArNTEsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKICNpbmNsdWRlICJjb21lZGlfcGNpLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwppbmRleCA2YjExOGMxLi5iYmY3NWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKQEAgLTQxOCwxNSArNDE4LDE1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWZvciAoaiA9IDA7IGogPCBtYXhfcG9ydHNfcGVyX2JpdGZpZWxkOyArK2opIHsKKwkJY29uc3QgdW5zaWduZWQgcG9ydF9vZmZzZXQgPSBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKIAkJY29uc3QgdW5zaWduZWQgcG9ydCA9Ci0JCSAgICBzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ICsKLQkJICAgIG5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGJhc2VfYml0ZmllbGRfY2hhbm5lbCkgKyBqOworCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIHBvcnRfb2Zmc2V0OwogCQl1bnNpZ25lZCBiYXNlX3BvcnRfY2hhbm5lbDsKIAkJdW5zaWduZWQgcG9ydF9tYXNrLCBwb3J0X2RhdGEsIHBvcnRfcmVhZF9iaXRzOwogCQlpbnQgYml0c2hpZnQ7CiAJCWlmIChwb3J0ID49IG5pXzY1eHhfdG90YWxfbnVtX3BvcnRzKGJvYXJkKGRldikpKQogCQkJYnJlYWs7Ci0JCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydCAqIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7CisJCWJhc2VfcG9ydF9jaGFubmVsID0gcG9ydF9vZmZzZXQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OwogCQlwb3J0X21hc2sgPSBkYXRhWzBdOwogCQlwb3J0X2RhdGEgPSBkYXRhWzFdOwogCQliaXRzaGlmdCA9IGJhc2VfcG9ydF9jaGFubmVsIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsOwpAQCAtNDU3LDYgKzQ1NywxMiBAQAogCQlwb3J0X3JlYWRfYml0cyA9CiAJCSAgICByZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9EYXRhKHBvcnQpKTsKIC8qIHByaW50aygicmVhZCAweCV4IGZyb20gcG9ydCAlaVxuIiwgcG9ydF9yZWFkX2JpdHMsIHBvcnQpOyAqLworCQlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9ETyAmJiBib2FyZChkZXYpLT5pbnZlcnRfb3V0cHV0cykgeworCQkJLyogT3V0cHV0cyBpbnZlcnRlZCwgc28gaW52ZXJ0IHZhbHVlIHJlYWQgYmFjayBmcm9tCisJCQkgKiBETyBzdWJkZXZpY2UuICAoRG9lcyBub3QgYXBwbHkgdG8gYm9hcmRzIHdpdGggRElPCisJCQkgKiBzdWJkZXZpY2UuKSAqLworCQkJcG9ydF9yZWFkX2JpdHMgXj0gMHhGRjsKKwkJfQogCQlpZiAoYml0c2hpZnQgPiAwKSB7CiAJCQlwb3J0X3JlYWRfYml0cyA8PD0gYml0c2hpZnQ7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCA2YTc3OTc2Li5lYzMxYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWxpbmstPnByaXYgPSBsb2NhbDsKIAogCS8qIEludGVycnVwdCBzZXR1cCAqLwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwppbmRleCBiMDZlODFjLi4wNzAwYThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV9kaW8yNC5jCkBAIC0yNzEsNyArMjcxLDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCmluZGV4IDU3YWVjZmEuLmEzMDUzYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwY19jcy5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9GT1JDRURfUFVMU0U7CisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfRk9SQ0VEX1BVTFNFOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9JTkZPMl9WQUxJRCB8IElSUV9QVUxTRV9JRDsKIAlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCmluZGV4IGUzZmZiMDYuLjc1M2VlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtNjIsNiArNjIsNyBAQAogLyogI2RlZmluZSBERUJVR19TVEFUVVNfQiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICI4MjU1LmgiCiAjaW5jbHVkZSAibWl0ZS5oIgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCmluZGV4IGI3MzIyOTYuLjlhZWY4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NzLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogewogCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OwogCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OwotCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRFlOQU1JQ19TSEFSSU5HOwogCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKIAlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CiAJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggNTJiMmVjYS4uZDU0NDY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtNzAsNiArNzAsNyBAQAogLyogI2RlZmluZSBERUJVR19GTEFHUyAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAogI2luY2x1ZGUgIm1pdGUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwppbmRleCAxOWQ4NzU1Li4yNGM4YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCkBAIC0yOSw3ICsyOSw3IEBACiAgIFBDSS1NSU8tMTZYRS0xMCwgUFhJLTYwMzBFLCBQQ0ktTUlPLTE2RS0xLCBQQ0ktTUlPLTE2RS00LCBQQ0ktNjAxNCwgUENJLTYwNDBFLAogICBQWEktNjA0MEUsIFBDSS02MDMwRSwgUENJLTYwMzFFLCBQQ0ktNjAzMkUsIFBDSS02MDMzRSwgUENJLTYwNzFFLCBQQ0ktNjAyM0UsCiAgIFBDSS02MDI0RSwgUENJLTYwMjVFLCBQWEktNjAyNUUsIFBDSS02MDM0RSwgUENJLTYwMzVFLCBQQ0ktNjA1MkUsCi0gIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LAorICBQQ0ktNjExMCwgUENJLTYxMTEsIFBDSS02MjIwLCBQQ0ktNjIyMSwgUENJLTYyMjQsIFBYSS02MjI0LCBQQ0ktNjIyNSwgUFhJLTYyMjUsCiAgIFBDSS02MjI5LCBQQ0ktNjI1MCwgUENJLTYyNTEsIFBDSWUtNjI1MSwgUENJLTYyNTQsIFBDSS02MjU5LCBQQ0llLTYyNTksCiAgIFBDSS02MjgwLCBQQ0ktNjI4MSwgUFhJLTYyODEsIFBDSS02Mjg0LCBQQ0ktNjI4OSwKICAgUENJLTY3MTEsIFBYSS02NzExLCBQQ0ktNjcxMywgUFhJLTY3MTMsCkBAIC0xNzksNiArMTc5LDcgQEAKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBmMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEwZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKKwlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE2ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzFiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE3ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKQEAgLTk1Myw2ICs5NTQsMjUgQEAKIAkgLmhhc184MjU1ID0gMCwKIAkgfSwKIAl7CisJIC5kZXZpY2VfaWQgPSAweDcxNmQsCisJIC5uYW1lID0gInB4aS02MjI1IiwKKwkgLm5fYWRjaGFuID0gODAsCisJIC5hZGJpdHMgPSAxNiwKKwkgLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCSAuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJIC5haV9zcGVlZCA9IDQwMDAsCisJIC5uX2FvY2hhbiA9IDIsCisJIC5hb2JpdHMgPSAxNiwKKwkgLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCSAuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCSAucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkgLmFvX3VuaXBvbGFyID0gMCwKKwkgLmFvX3NwZWVkID0gMTIwMCwKKwkgLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkgLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJIC5oYXNfODI1NSA9IDAsCisJfSwKKwl7CiAJIC5kZXZpY2VfaWQgPSAweDcwYWEsCiAJIC5uYW1lID0gInBjaS02MjI5IiwKIAkgLm5fYWRjaGFuID0gMzIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKaW5kZXggZjYzYmRjMy4uMzQ0YjgyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3F1YXRlY2hfZGFxcF9jcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAlsaW5rLT5wcml2ID0gbG9jYWw7CiAKIAkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KLQlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRSB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKIAlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CiAJbGluay0+aXJxLkhhbmRsZXIgPSBkYXFwX2ludGVycnVwdDsKIAlsaW5rLT5pcnEuSW5zdGFuY2UgPSBsb2NhbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCmluZGV4IGI4OWUxZWMuLjA3YzIxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M1MjYuYwpAQCAtNDMsNiArNDMsNyBAQAogCiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIFM1MjZfU0laRSA2NAogCkBAIC0xMTMsNiArMTE0LDcgQEAKIH07CiAKIHN0cnVjdCBjb3VudGVyX21vZGVfcmVnaXN0ZXJfdCB7CisjaWYgZGVmaW5lZCAoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKIAl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKIAl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOwpAQCAtMTI0LDEyICsxMjYsMjcgQEAKIAl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKIAl1bnNpZ25lZCBzaG9ydCBwcmVsb2FkUmVnU2VsOjE7CiAJdW5zaWduZWQgc2hvcnQgcmVzZXJ2ZWQ6MTsKKyAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDoxOworCXVuc2lnbmVkIHNob3J0IHByZWxvYWRSZWdTZWw6MTsKKwl1bnNpZ25lZCBzaG9ydCBvdXRwdXRSZWdMYXRjaEN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpckN0cmw6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3VudERpcjoxOworCXVuc2lnbmVkIHNob3J0IGNsb2NrU291cmNlOjI7CisJdW5zaWduZWQgc2hvcnQgY3RFbmFibGVDdHJsOjI7CisJdW5zaWduZWQgc2hvcnQgaHdDdEVuYWJsZVNvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGF1dG9Mb2FkUmVzZXRSY2FwOjM7CisJdW5zaWduZWQgc2hvcnQgY291dFBvbGFyaXR5OjE7CisJdW5zaWduZWQgc2hvcnQgY291dFNvdXJjZToxOworI2Vsc2UKKyNlcnJvciBVbmtub3duIGJpdCBmaWVsZCBvcmRlcgorI2VuZGlmCiB9OwogCi11bmlvbiB7Cit1bmlvbiBjbVJlZyB7CiAJc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHJlZzsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLX0gY21SZWc7Cit9OwogCiAjZGVmaW5lIE1BWF9HUENUX0NPTkZJR19EQVRBIDYKIApAQCAtMjg1LDYgKzMwMiw3IEBACiAJaW50IGksIG47CiAvKiBzaG9ydCB2YWx1ZTsgKi8KIC8qIGludCBzdWJkZXZfY2hhbm5lbCA9IDA7ICovCisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoImNvbWVkaSVkOiBzNTI2OiAiLCBkZXYtPm1pbm9yKTsKIApAQCAtMzc1LDcgKzM5Myw3IEBACiAJaWYgKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHsKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKIAkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOwotCQlzLT5uX2NoYW4gPSAyOworCQlzLT5uX2NoYW4gPSA4OwogCQlzLT5tYXhkYXRhID0gMTsKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAkJcy0+aW5zbl9iaXRzID0gczUyNl9kaW9faW5zbl9iaXRzOwpAQCAtNDM1LDExICs0NTMsMTEgQEAKIAl1ZGVsYXkoMTAwMCk7CiAJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOwogCi0JLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KIC8qIHZhbHVlID0gKHNob3J0KSAoMHg1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIG4pKTsgKi8KIAotCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciBsb3cgd29yZCAqLwogLyogdmFsdWUgPSAoc2hvcnQpKDB4YWE1NSk7ICovCiAvKiBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIG4pKTsgKi8KIApAQCAtNTE2LDYgKzUzNCw3IEBACiAJaW50IHN1YmRldl9jaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qICBVbnBhY2sgY2hhbnNwZWMgKi8KIAlpbnQgaTsKIAlzaG9ydCB2YWx1ZTsKKwl1bmlvbiBjbVJlZyBjbVJlZzsKIAogLyogcHJpbnRrKCJzNTI2OiBHUENUX0lOU05fQ09ORklHOiBDb25maWd1cmluZyBDaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7ICovCiAKQEAgLTU2OCwxOSArNTg3LDggQEAKIAogI2lmIDEKIAkJLyogIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgKi8KLQkJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvKiAgb3V0IFJDQVAgKi8KLQkJY21SZWcucmVnLmNvdXRQb2xhcml0eSA9IDA7CS8qICBQb2xhcml0eSBpbnZlcnRlZCAqLwotCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvKiAgQXV0byBsb2FkIGRpc2FibGVkICovCi0JCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLyogIE5PVCBSQ0FQICovCi0JCWNtUmVnLnJlZy5jdEVuYWJsZUN0cmwgPSAxOwkvKiAgMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlICovCi0JCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8qICB4NCAqLwotCQljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvKiAgdXAgKi8KLQkJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDA7CS8qICBxdWFkcmF0dXJlICovCi0JCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvKiAgbGF0Y2ggb24gcmVhZCAqLwotCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8qICBQUjAgKi8KLQkJY21SZWcucmVnLnJlc2VydmVkID0gMDsKKwkJY21SZWcudmFsdWUgPSBpbnNuLT5kYXRhWzFdICYgMHhGRkZGOwogCi0JCS8qICBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyICovCiAvKiBwcmludGsoInM1MjY6IENvdW50ZXIgTW9kZSByZWdpc3Rlcj0leFxuIiwgY21SZWcudmFsdWUpOyAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTYxNSwxMSArNjIzLDExIEBACiAJCWNtUmVnLnZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBoaWdoIHdvcmQgKi8KKwkJLyogIExvYWQgdGhlIHByZS1sb2FkIHJlZ2lzdGVyIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgbG93IHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKGluc24tPmRhdGFbMl0gJiAweEZGRkYpOwogCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CiAKQEAgLTY1MywxMSArNjYxLDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC02NjYsMTcgKzY3NCwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTY5OCwxMSArNzA2LDExIEBACiAJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLyogIFBSMCAqLwogCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CiAKLQkJLyogIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGhpZ2ggd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkICovCisJCS8qICBMb2FkIHRoZSBwcmUtbG9hZCByZWdpc3RlciAwIGxvdyB3b3JkICovCiAJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKIAkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOwogCkBAIC03MTEsMTcgKzcxOSwxNyBAQAogCQljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDE7CS8qICBQUjEgKi8KIAkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwogCi0JCS8qICBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBoaWdoIHdvcmQgKi8KIAkJdmFsdWUgPSAoc2hvcnQpKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKIAotCQkvKiAgTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLworCQkvKiAgTG9hZCB0aGUgcHJlLWxvYWQgcmVnaXN0ZXIgMSBsb3cgd29yZCAqLwogCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CiAJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKIAogCQkvKiAgV3JpdGUgdGhlIENvdW50ZXIgQ29udHJvbCBSZWdpc3RlciAqLwotCQlpZiAoaW5zbi0+ZGF0YVszXSAhPSAwKSB7Ci0JCQl2YWx1ZSA9IChzaG9ydCkoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCWlmIChpbnNuLT5kYXRhWzRdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KShpbnNuLT5kYXRhWzRdICYgMHhGRkZGKTsKIAkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKIAkJfQogCQlicmVhazsKQEAgLTc0MSw2ICs3NDksNyBAQAogewogCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvKiAgVW5wYWNrIGNoYW5zcGVjICovCiAJc2hvcnQgdmFsdWU7CisJdW5pb24gY21SZWcgY21SZWc7CiAKIAlwcmludGsoInM1MjY6IEdQQ1RfSU5TTl9XUklURSBvbiBjaGFubmVsICVkXG4iLCBzdWJkZXZfY2hhbm5lbCk7CiAJY21SZWcudmFsdWUgPSBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOwpAQCAtNzc1LDkgKzc4NCw4IEBACiAJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMV0gPQogCQkJICAgIGluc24tPmRhdGFbMV07CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoIiVkIFx0ICVkXG4iLCBpbnNuLT5kYXRhWzFdLCBpbnNuLT5kYXRhWzJdKTsKLQkJCXByaW50awotCQkJICAgICgiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zXG4iKTsKKwkJCXByaW50aygiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zIC0+ICVkICVkXG4iLAorCQkJCWluc24tPmRhdGFbMF0sIGluc24tPmRhdGFbMV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtOTQ5LDcgKzk1Nyw3IEBACiAJZGF0YVsxXSA9IGludyhBRERSX1JFRyhSRUdfRElPKSkgJiAweEZGOwkvKiAgbG93IDggYml0cyBhcmUgdGhlIGRhdGEgKi8KIAkvKiBvciB3ZSBjb3VsZCBqdXN0IHJldHVybiB0aGUgc29mdHdhcmUgY29weSBvZiB0aGUgb3V0cHV0IHZhbHVlcyBpZgogCSAqIGl0IHdhcyBhIHB1cmVseSBkaWdpdGFsIG91dHB1dCBzdWJkZXZpY2UgKi8KLQkvKiBkYXRhWzFdPXMtPnN0YXRlOyAqLworCS8qIGRhdGFbMV09cy0+c3RhdGUgJiAweEZGOyAqLwogCiAJcmV0dXJuIDI7CiB9CkBAIC05NTksMjggKzk2NywzMyBAQAogCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7Ci0Jc2hvcnQgdmFsdWU7CisJaW50IGdyb3VwLCBtYXNrOwogCiAJcHJpbnRrKCJTNTI2IERJTyBpbnNuX2NvbmZpZ1xuIik7CiAKLQlpZiAoaW5zbi0+biAhPSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZhbHVlID0gaW53KEFERFJfUkVHKFJFR19ESU8pKTsKLQogCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcwogCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKIAkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKIAkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KIAotCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKLQkJdmFsdWUgfD0gMSA8PCAoY2hhbiArIDEwKTsJLyogIGJpdCAxMC8xMSBzZXQgdGhlIGdyb3VwIDEvMidzIG1vZGUgKi8KLQkJcy0+aW9fYml0cyB8PSAoMHhGIDw8IGNoYW4pOwotCX0gZWxzZSB7Ci0JCXZhbHVlICY9IH4oMSA8PCAoY2hhbiArIDEwKSk7CS8qICAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4gKi8KLQkJcy0+aW9fYml0cyAmPSB+KDB4RiA8PCBjaGFuKTsKKwlncm91cCA9IGNoYW4gPj4gMjsKKwltYXNrID0gMHhGIDw8IChncm91cCA8PCAyKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPnN0YXRlIHw9IDEgPDwgKGdyb3VwICsgMTApOyAgLy8gYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5zdGF0ZSAmPSB+KDEgPDwgKGdyb3VwICsgMTApKTsvLyAxIGlzIG91dHB1dCwgMCBpcyBpbnB1dC4KKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW91dHcodmFsdWUsIEFERFJfUkVHKFJFR19ESU8pKTsKKwlvdXR3KHMtPnN0YXRlLCBBRERSX1JFRyhSRUdfRElPKSk7CiAKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IGEyMTk2NzkuLjgyYWE4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkMmEyMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotY29uZmlnIENPV0xPT1AKLQl0cmlzdGF0ZSAiY29weS1vbi13cml0ZSBwc2V1ZG8gQmxvY2sgRHJpdmVyIgotCWRlcGVuZHMgb24gQkxPQ0sKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBDb3dsb29wIGlzIGEgImNvcHktb24td3JpdGUiIHBzZXVkbyBibG9jayBkcml2ZXIuIEl0IGNhbiBiZQotCSAgc3RhY2tlZCBvbiB0b3Agb2YgYSAicmVhbCIgYmxvY2sgZHJpdmVyLCBhbmQgY2F0Y2hlcyBhbGwgd3JpdGUKLQkgIG9wZXJhdGlvbnMgb24gdGhlaXIgd2F5IGZyb20gdGhlIGZpbGUgc3lzdGVtcyBsYXllciBhYm92ZSB0bwotCSAgdGhlIHJlYWwgZHJpdmVyIGJlbG93LCBlZmZlY3RpdmVseSBzaGllbGRpbmcgdGhlIGxvd2VyIGRyaXZlcgotCSAgZnJvbSB0aG9zZSB3cml0ZSBhY2Nlc3Nlcy4gVGhlIHJlcXVlc3RzIGFyZSB0aGVuIGRpdmVydGVkIHRvCi0JICBhbiBvcmRpbmFyeSBmaWxlLCBsb2NhdGVkIHNvbWV3aGVyZSBlbHNlIChjb25maWd1cmFibGUpLiBMYXRlcgotCSAgcmVhZCByZXF1ZXN0cyBhcmUgY2hlY2tlZCB0byBzZWUgd2hldGhlciB0aGV5IGNhbiBiZSBzZXJ2aWNlZAotCSAgYnkgdGhlICJyZWFsIiBibG9jayBkcml2ZXIgYmVsb3csIG9yIG11c3QgYmUgcHVsbGVkIGluIGZyb20KLQkgIHRoZSBkaXZlcnRlZCBsb2NhdGlvbi4gTW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlIHRvb2xzIHRvCi0JICB1c2UgdGhlIGRyaXZlciBhcmUgb24gdGhlIHByb2plY3QncyB3ZWJzaXRlCi0JICBodHRwOi8vd3d3LkFUQ29tcHV0aW5nLm5sL2Nvd2xvb3AvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZiODFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX0NPV0xPT1ApCSs9IGNvd2xvb3AubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOTlkMWMxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1UT0RPOgotCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcwotCS0gcnVuIHNwYXJzZSB0byBlbnN1cmUgY2xlYW4KLQktIGZpeCB1cCAzMi82NGJpdCBpb2N0bCBpc3N1ZXMKLQktIG1vdmUgcHJvYyBmaWxlIHVzYWdlIHRvIGRlYnVnZnMKLQktIGF1ZGl0IGlvY3RscwotCS0gYWRkIGRvY3VtZW50YXRpb24KLQktIGdldCBsaW51eC1mc2RldmVsIHRvIHJldmlldyBpdAotCi1QbGVhc2Ugc2VuZCBwYXRjaGVzIHRvICJILkouIFRob21hc3NlbiIgPGhqdEBBVENvbXB1dGluZy5ubD4gYW5kCi1HcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jIGIvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzFjNzQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb3dsb29wL2Nvd2xvb3AuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NDIgKzAsMCBAQAotLyoKLSoqICAgICAgIENPV0xPT1AgYmxvY2sgZGV2aWNlIGRyaXZlciAoMi42IGtlcm5lbCBjb21wbGlhbnQpCi0qKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiogUmVhZC13cml0ZSBsb29wLWRyaXZlciB3aXRoIGNvcHktb24td3JpdGUgZnVuY3Rpb25hbGl0eS4KLSoqCi0qKiBTeW5vcHNpczoKLSoqCi0qKiAgICAgbW9kcHJvYmUgY293bG9vcCBbbWF4Y293cz0uLl0gW3Jkb2ZpbGU9Li4uLi4gY293ZmlsZT0uLi4uIFtvcHRpb249cl1dCi0qKgotKiogRGVmaW5pdGlvbiBvZiBudW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzOgotKiogICBtYXhjb3dzPQludW1iZXIgb2YgY29uZmlndXJlZCBjb3dkZXZpY2VzIChkZWZhdWx0OiAxNikKLSoqIChkbyBub3QgY29uZnVzZSB0aGlzIHdpdGggTUFYQ09XUzogYWJzb2x1dGUgbWF4aW11bSBhcyBjb21waWxlZCkKLSoqCi0qKiBPbmUgcGFpciBvZiBmaWxlbmFtZXMgY2FuIGJlIHN1cHBsaWVkIGR1cmluZyBpbnNtb2QvbW9kcHJvYmUgdG8gb3BlbgotKiogdGhlIGZpcnN0IGNvd2RldmljZToKLSoqICAgcmRvZmlsZT0JcmVhZC1vbmx5IGZpbGUgKG9yIGZpbGVzeXN0ZW0pCi0qKiAgIGNvd2ZpbGU9CXN0b3JhZ2Utc3BhY2UgZm9yIG1vZGlmaWVkIGJsb2NrcyBvZiByZWFkLW9ubHkgZmlsZShzeXN0ZW0pCi0qKiAgIG9wdGlvbj1yCXJlcGFpciBjb3dmaWxlIGF1dG9tYXRpY2FsbHkgaWYgaXQgYXBwZWFycyB0byBiZSBkaXJ0eQotKioKLSoqIE90aGVyIGNvd2RldmljZXMgY2FuIGJlIGFjdGl2YXRlZCB2aWEgdGhlIGNvbW1hbmQgImNvd2RldiIKLSoqIHdoZW5ldmVyIHRoZSBjb3dsb29wLWRyaXZlciBpcyBsb2FkZWQuCi0qKgotKiogVGhlIHJlYWQtb25seSBmaWxlIG1heSBiZSBvZiB0eXBlICdyZWd1bGFyJyBvciAnYmxvY2stZGV2aWNlJy4KLSoqCi0qKiBUaGUgY293ZmlsZSBtdXN0IGJlIG9mIHR5cGUgJ3JlZ3VsYXInLgotKiogSWYgYW4gZXhpc3RpbmcgcmVndWxhciBmaWxlIGlzIHVzZWQgYXMgY293ZmlsZSwgaXRzIGNvbnRlbnRzIHdpbGwgYmUKLSoqIHVzZWQgYWdhaW4gZm9yIHRoZSBjdXJyZW50IHJlYWQtb25seSBmaWxlLiBXaGVuIHRoZSBjb3dmaWxlIGhhcyBub3QgYmVlbgotKiogY2xvc2VkIHByb3Blcmx5IGR1cmluZyBhIHByZXZpb3VzIHNlc3Npb24gKGkuZS4gcm1tb2QgY293bG9vcCksIHRoZQotKiogY293bG9vcC1kcml2ZXIgcmVmdXNlcyB0byBvcGVuIGl0IHVubGVzcyB0aGUgcGFyYW1ldGVyICJvcHRpb249ciIgaXMKLSoqIHNwZWNpZmllZC4KLSoqCi0qKiBMYXlvdXQgb2YgY293ZmlsZToKLSoqCi0qKiAJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotKioJfCAgICAgICBjb3cgaGVhZCBibG9jayAgICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSoqCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKgl8LS0tICAgICAgICAgICAgICAgICAgICAgICAtLS18Ci0qKgl8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgTUFQVU5JVCBieXRlcwotKioJfC0tLSAgICAgICAgICAgICAgICAgICAgICAgLS0tfAotKioJfCAgICAgIHVzZWQtYmxvY2sgYml0bWFwICAgICAgfCAgIE1BUFVOSVQgYnl0ZXMKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSoqCXwgIGdhcCB0byBhbGlnbiBzdGFydC1vZmZzZXQgIHwKLSoqCXwgICAgICAgIHRvIDRLIG11bHRpcGxlICAgICAgIHwKLSoqCXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIDwtLS0tIHN0YXJ0LW9mZnNldCBjb3cgYmxvY2tzCi0qKgl8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0qKiAgICAgIHwgICAgd3JpdHRlbiBjb3cgYmxvY2tzICAgICAgIHwgICBNQVBVTklUIGJ5dGVzCi0qKiAgICAgIHwgICAgICAgICAgLi4uLi4gICAgICAgICAgICAgIHwKLSoqCi0qKiAJY293aGVhZCBibG9jazoKLSoqICAgCSAgLSBjb250YWlucyBnZW5lcmFsIGluZm8gYWJvdXQgdGhlIHJkb2ZpbGUgd2hpY2ggaXMgcmVsYXRlZAotKiogCSAgICB0byB0aGlzIGNvd2ZpbGUKLSoqCi0qKiAJdXNlZC1ibG9jayBiaXRtYXA6Ci0qKiAJICAtIGNvbnRhaW5zIG9uZSBiaXQgcGVyIGJsb2NrIHdpdGggYSBzaXplIG9mIE1BUFVOSVQgYnl0ZXMKLSoqIAkgIC0gYml0LXZhbHVlICcxJyA9IGJsb2NrIGhhcyBiZWVuIHdyaXR0ZW4gb24gY293Ci0qKiAJICAgICAgICAgICAgICAnMCcgPSBibG9jayB1bnVzZWQgb24gY293Ci0qKiAJICAtIHRvdGFsIGJpdG1hcCByb3VuZGVkIHRvIG11bHRpcGxlcyBvZiBNQVBVTklUCi0qKgotKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKiogQXV0aG9yOiAgICAgICAgICAgICBHZXJsb2YgTGFuZ2V2ZWxkIC0gQVQgQ29tcHV0aW5nIChNYXJjaCAyMDAzKQotKiogQ3VycmVudCBtYWludGFpbmVyOiBIZW5kcmlrLUphbiBUaG9tYXNzZW4gLSBBVCBDb21wdXRpbmcgKFN1bW1lciAyMDA2KQotKiogRW1haWw6ICAgICAgICAgICAgICBoanRAQVRDb21wdXRpbmcubmwKLSoqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoqIENvcHlyaWdodCAoQykgMjAwMy0yMDA5IEFUIENvbnN1bHRhbmN5Ci0qKgotKiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSoqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotKiogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotKiogbGF0ZXIgdmVyc2lvbi4KLSoqCi0qKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0qKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0qKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qKgotKiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qKgotKiogTWFqb3IgbW9kaWZpY2F0aW9uczoKLSoqCi0qKiAJMjAwNDA1CVBvcnRlZCB0byBrZXJuZWwtdmVyc2lvbiAyLjYJCUhlbmRyaWstSmFuIFRob21hc3NlbgotKioJMjAwNDA1CUFkZGVkIGNvd2hlYWQgdG8gY293ZmlsZSB0byBnYXJhbnRlZQotKioJCWNvbnNpc3RlbmN5IHdpdGggcmVhZC1vbmx5IGZpbGUJCUdlcmxvZiBMYW5nZXZlbGQKLSoqCTIwMDQwNQlQb3N0cG9uZWQgZmx1c2hpbmcgb2YgYml0bWFwcyB0byBpbXByb3ZlCi0qKgkJcGVyZm9ybWFuY2UuIAkJCQlHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA0MDUJSW5saW5lIHJlY292ZXJ5IGZvciBkaXJ0eSBjb3dmaWxlcy4JR2VybG9mIExhbmdldmVsZAotKioJMjAwNTAyCVJlZGVzaWduIHRvIHN1cHBvcnQgbW9yZSBjb3dkZXZpY2VzLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA1MDIJU3VwcG9ydCBkZXZpY2VzL2ZpbGUgPiAyIEdieXRlcy4JR2VybG9mIExhbmdldmVsZAotKioJMjAwNTA3CUNoZWNrIGZvciBmcmVlIHNwYWNlIHRvIGV4cGFuZCBjb3dmaWxlLglHZXJsb2YgTGFuZ2V2ZWxkCi0qKgkyMDA5MDIgIFVwZ3JhZGUgZm9yIGtlcm5lbCAyLjYuMjggICAgICAgICAgICAgICBIZW5kcmlrLUphbiBUaG9tYXNzZW4KLSoqCi0qKiBJbnNwaXJlZCBieQotKiogICAgbG9vcC5jICBieSBUaGVvZG9yZSBUcydvIGFuZAotKiogICAgY2xvb3AuYyBieSBQYXVsIGBSdXN0eScgUnVzc2VsbCAmIEtsYXVzIEtub3BwZXIuCi0qKgotKiogRGVzaWduLWNvbnNpZGVyYXRpb25zOgotKioKLSoqICAgRm9yIHRoZSBmaXJzdCBleHBlcmltZW50cyB3aXRoIHRoZSBjb3dsb29wLWRyaXZlciwgdGhlIHJlcXVlc3QtcXVldWUKLSoqICAgbWFkZSB1c2Ugb2YgdGhlIGRvX2dlbmVyaWNfZmlsZV9yZWFkKCkgd2hpY2ggd29ya2VkIGZpbmUgZXhjZXB0Ci0qKiAgIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIGNsb29wLWRyaXZlcjsgdGhhdCBjb21iaW5hdGlvbgotKiogICByZXN1bHRlZCBpbiBhIG5vbi1pbnRlcnJ1cHRpYmxlIGhhbmd1cCBvZiB0aGUgc3lzdGVtIGR1cmluZwotKiogICBoZWF2eSBsb2FkLiBPdGhlciBleHBlcmltZW50cyB1c2luZyB0aGUgYG1ha2VfcmVxdWVzdCcgaW50ZXJmYWNlIGFsc28KLSoqICAgcmVzdWx0ZWQgaW4gdW5wcmVkaWN0YWJsZSBzeXN0ZW0gaGFuZ3VwcyAod2l0aCBwcm9wZXIgdXNlIG9mIHNwaW5sb2NrcykuCi0qKgotKiogICBUbyBvdmVyY29tZSB0aGVzZSBwcm9ibGVtcywgdGhlIGNvd2xvb3AtZHJpdmVyIHN0YXJ0cyBhIGtlcm5lbC10aHJlYWQKLSoqICAgZm9yIGV2ZXJ5IGFjdGl2ZSBjb3dkZXZpY2UuCi0qKiAgIEFsbCByZWFkLSBhbmQgd3JpdGUtcmVxdWVzdCBvbiB0aGUgcmVhZC1vbmx5IGZpbGUgYW5kIGNvcHktb24td3JpdGUgZmlsZQotKiogICBhcmUgaGFuZGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGF0IHRocmVhZC4KLSoqICAgQSBzY2hlbWUgaGFzIGJlZW4gZGVzaWduZWQgdG8gd2FrZXVwIHRoZSBrZXJuZWwtdGhyZWFkIGFzCi0qKiAgIHNvb24gYXMgSS9PLXJlcXVlc3RzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlcXVlc3QtcXVldWU7IHRoaXMgdGhyZWFkCi0qKiAgIGhhbmRsZXMgdGhlIHJlcXVlc3RzIG9uZS1ieS1vbmUgYnkgY2FsbGluZyB0aGUgcHJvcGVyIHJlYWQtIG9yCi0qKiAgIHdyaXRlLWZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIG9wZW4gcmVhZC1vbmx5IGZpbGUgb3IgY29weS1vbi13cml0ZSBmaWxlLgotKiogICBXaGVuIGFsbCBwZW5kaW5nIHJlcXVlc3RzIGhhdmUgYmVlbiBoYW5kbGVkLCB0aGUga2VybmVsLXRocmVhZCBnb2VzCi0qKiAgIGJhY2sgdG8gc2xlZXAtc3RhdGUuCi0qKiAgIFRoaXMgYXBwcm9hY2ggcmVxdWlyZXMgc29tZSBhZGRpdGlvbmFsIGNvbnRleHQtc3dpdGNoZXM7IGhvd2V2ZXIgdGhlCi0qKiAgIHBlcmZvcm1hbmNlIGxvc3MgZHVyaW5nIGhlYXZ5IEkvTyBpcyBsZXNzIHRoYW4gMyUuCi0qKgotKiogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlzIHRoZSBjb3dsb29wIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIuIEl0IG11c3QgYmUKLSAgIGlkZW50aWNhbCB0byB0aGUgY29udGVudCBvZiB0aGUgaW5jbHVkZS1maWxlICJ2ZXJzaW9uLmgiIHRoYXQgaXMKLSAgIHVzZWQgaW4gYWxsIHN1cHBvcnRpbmcgdXRpbGl0aWVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotY2hhciByZXZpc2lvbltdID0gIiRSZXZpc2lvbjogMy4xICQiOyAvKiBjb3dsb19pbml0X21vZHVsZSgpIGhhcwotCQkJICAgICBhc3N1bXB0aW9ucyBhYm91dCB0aGlzIHN0cmluZydzIGZvcm1hdCAgICovCi0KLS8qIE5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXJlICpub3QqIHRoZSBjb3dsb29wIHBhY2thZ2UgdmVyc2lvbgotICAgbnVtYmVycywgYnV0IHNlcGFyYXRlIHJldmlzaW9uIGhpc3RvcnkgbnVtYmVycyB0byB0cmFjayB0aGUKLSAgIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIHNvdXJjZSBmaWxlOiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogJExvZzogY293bG9vcC5jLHYgJAotKioKLSoqIFJldmlzaW9uIDEuMzAgIDIwMDkvMDIvMDggaGp0Ci0qKiBJbnRlZ3JhdGVkIGVhcmxpZXIgZml4ZXMKLSoqIFVwZ3JhZGVkIHRvIGtlcm5lbCAyLjYuMjggKHRoYW5rcyBKZXJvbWUgUG91bGluKQotKioKLSoqIFJldmlzaW9uIDEuMjkgIDIwMDYvMTIvMDMgMjI6MTI6MDAgIGhqdAotKiogY2hhbmdlZCAnY293ZGV2bG9jaycgZnJvbSBzcGlubG9jayB0byBzZW1hcGhvcmUsIHRvIGF2b2lkCi0qKiAic2NoZWR1bGluZyB3aGlsZSBhdG9taWMiLiBDb250cmlidXRlZCBieSBKdWVyZ2VuIENocmlzdC4KLSoqIEFkZGVkIHZlcnNpb24uaCBhZ2FpbgotKioKLSoqIFJldmlzaW9uIDEuMjggIDIwMDYvMDgvMTYgMTY6MDA6MDAgIGhqdAotKiogbWFsbG9jIGVhY2ggaW5kaXZpZHVhbCBjb3dsb29wZGV2aWNlIHN0cnVjdCBzZXBhcmF0ZWx5Ci0qKgotKiogUmV2aXNpb24gMS4yNyAgMjAwNi8wMy8xNCAxNDo1NzowMyAgcm9vdAotKiogUmVtb3ZlZCBpbmNsdWRlIHZlcnNpb24uaAotKioKLSoqIFJldmlzaW9uIDEuMjYgIDIwMDUvMDgvMDggMTE6MjI6NDggIHJvb3QKLSoqIEltcGxlbWVudCBwb3NzaWJpbGl0eSB0byBjbG9zZSBhIGNvdyBmaWxlIG9yIHJlb3BlbiBhIGNvd2ZpbGUgcmVhZC1vbmx5LgotKioKLSoqIFJldmlzaW9uIDEuMjUgIDIwMDUvMDgvMDMgMTQ6MDA6MzkgIHJvb3QKLSoqIEFkZGVkIG1vZGluZm8gaW5mbyB0byBkcml2ZXIuCi0qKgotKiogUmV2aXNpb24gMS4yNCAgMjAwNS8wNy8yMSAwNjoxNDo1MyAgcm9vdAotKiogQ29zbWV0aWMgY2hhbmdlcyBzb3VyY2UgY29kZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIzICAyMDA1LzA3LzIwIDEzOjA3OjMyICByb290Ci0qKiBTdXBwbHkgaW9jdGwgdG8gd3JpdGUgd2F0Y2hkb2cgcHJvZ3JhbSB0byByZWFjdCBvbiBsYWNrIG9mIGNvd2ZpbGUgc3BhY2UuCi0qKgotKiogUmV2aXNpb24gMS4yMiAgMjAwNS8wNy8yMCAwNzo1MzozNCAgcm9vdAotKiogUmVndWxhciB2ZXJpZmljYXRpb24gb2YgZnJlZSBzcGFjZSBpbiBmaWxlc3lzdGVtIGhvbGRpbmcgdGhlIGNvd2ZpbGUKLSoqIChnaXZlIHdhcm5pbmdzIHdoZW5ldmVyIHNwYWNlIGlzIGFsbW9zdCBleGhhdXN0ZWQpLgotKiogVGVybWlub2xvZ3kgY2hhbmdlOiBjaGVja3N1bSByZW5hbWVkIHRvIGZpbmdlcnByaW50LgotKioKLSoqIFJldmlzaW9uIDEuMjEgIDIwMDUvMDcvMTkgMDk6MjE6NTIgIHJvb3QKLSoqIFJlbW92aW5nIG1heGltdW0gbGltaXQgb2YgMTYgR2IgcGVyIGNvd2RldmljZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjIwICAyMDA1LzA3LzE5IDA3OjUwOjMzICByb290Ci0qKiBNaW5vciBidWdmaXhlcyBhbmQgY29zbWV0aWMgY2hhbmdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjE5ICAyMDA1LzA2LzEwIDEyOjI5OjU1ICByb290Ci0qKiBSZW1vdmVkIGxvY2svdW5sb2NrIG9wZXJhdGlvbiBmcm9tIGNvd2xvX29wZW4oKS4KLSoqCi0qKiBSZXZpc2lvbiAxLjE4ICAyMDA1LzA1LzA5IDEyOjU2OjI2ICByb290Ci0qKiBBbGxvdyBhIGNvd2RldmljZSB0byBiZSBvcGVuIG1vcmUgdGhhbiBvbmNlCi0qKiAobmVlZGVkIGZvciBzdXBwb3J0IG9mIFJlaXNlckZTIGFuZCBYRlMpLgotKioKLSoqIFJldmlzaW9uIDEuMTcgIDIwMDUvMDMvMTcgMTQ6MzY6MTYgIHJvb3QKLSoqIEZpeGVkIHNvbWUgbGljZW5zZSBpc3N1ZXMuCi0qKgotKiogUmV2aXNpb24gMS4xNiAgMjAwNS8wMy8wNyAxNDo0MjowNSAgcm9vdAotKiogT25seSBhbGxvdyBvbmUgcGFyYWxsZWwgb3BlbiBwZXIgY293ZGV2aWNlLgotKioKLSoqIFJldmlzaW9uIDEuMTUgIDIwMDUvMDIvMTggMTE6NTI6MDQgIGdlcmxvZgotKiogUmVkZXNpZ24gdG8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGNvd2RldmljZSA+IDIgR2Igc3BhY2UuCi0qKgotKiogUmV2aXNpb24gMS4xNCAgMjAwNC8wOC8xNyAxNDoxOToxNiAgZ2VybG9mCi0qKiBNb2RpZmllZCBvdXRwdXQgb2YgL3Byb2MvY293bG9vcC4KLSoqCi0qKiBSZXZpc2lvbiAxLjEzICAyMDA0LzA4LzE2IDA3OjIxOjEwICBnZXJsb2YKLSoqIFNlcGFyYXRlIHN0YXRpc3RpY2FsIGNvdW50ZXIgZm9yIHJlYWQgb24gcmRvZmlsZSBhbmQgY293ZmlsZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjEyICAyMDA0LzA4LzExIDA2OjUyOjExICBnZXJsb2YKLSoqIE1vZGlmaWVkIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTEgIDIwMDQvMDgvMTEgMDY6NDQ6MTEgIGdlcmxvZgotKiogTW9kaWZpZWQgbG9nIG1lc3NhZ2VzLgotKioKLSoqIFJldmlzaW9uIDEuMTAgIDIwMDQvMDgvMTAgMTI6Mjc6MjcgIGdlcmxvZgotKiogQ29zbWV0aWMgY2hhbmdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjkgIDIwMDQvMDgvMDkgMTE6NDM6MzcgIGdlcmxvZgotKiogUmVtb3ZlZCBkb3VibGUgZGVmaW5pdGlvbiBvZiBtYWpvciBudW1iZXIgKENPV01BSk9SKS4KLSoqCi0qKiBSZXZpc2lvbiAxLjggIDIwMDQvMDgvMDkgMDg6MDM6MzkgIGdlcmxvZgotKiogQ2xlYW51cCBvZiBtZXNzYWdlcy4KLSoqCi0qKiBSZXZpc2lvbiAxLjcgIDIwMDQvMDUvMjcgMDY6Mzc6MzMgIGdlcmxvZgotKiogTW9kaWZpZWQgL3Byb2MgbWVzc2FnZS4KLSoqCi0qKiBSZXZpc2lvbiAxLjYgIDIwMDQvMDUvMjYgMjE6MjM6MjggIGdlcmxvZgotKiogTW9kaWZpZWQgL3Byb2Mgb3V0cHV0LgotKioKLSoqIFJldmlzaW9uIDEuNSAgMjAwNC8wNS8yNiAxMzoyMzozNCAgZ2VybG9mCi0qKiBTdXBwb3J0IGNvd3N5bmMgdG8gZm9yY2UgZmx1c2hpbmcgdGhlIGJpdG1hcHMgYW5kIGNvd2hlYWQuCi0qKgotKiogUmV2aXNpb24gMS40ICAyMDA0LzA1LzI2IDExOjExOjEwICBnZXJsb2YKLSoqIFVwZGF0ZWQgdGhlIGNvbW1lbnQgdG8gdGhlIGFjdHVhbCBzaXR1YXRpb24uCi0qKgotKiogUmV2aXNpb24gMS4zICAyMDA0LzA1LzI2IDEwOjUwOjAwICBnZXJsb2YKLSoqIEltcGxlbWVudGVkIHJlY292ZXJ5LW9wdGlvbi4KLSoqCi0qKiBSZXZpc2lvbiAxLjIgIDIwMDQvMDUvMjUgMTU6MTQ6NDEgIGdlcmxvZgotKiogTW9kaWZpZWQgYml0bWFwIGZsdXNoaW5nIHN0cmF0ZWd5LgotKioKLSovCi0KLSNkZWZpbmUgQ09XTUFKT1IJMjQxCi0KLS8vICNkZWZpbmUgQ09XREVCVUcKLQotI2lmZGVmIAlDT1dERUJVRwotI2RlZmluZSBERUJVR1AJCXByaW50awotI2RlZmluZSBEQ09XCQlLRVJOX0FMRVJUCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm9ybWF0LCB4Li4uKQotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+Ci0jaWZuZGVmIEFVVE9DT05GX0lOQ0xVREVECi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+Ci0KLSNpbmNsdWRlICJjb3dsb29wLmgiCi0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS8qIE1PRFVMRV9BVVRIT1IoIkdlcmxvZiBMYW5nZXZlbGQgPGdlcmxvZkBBVENvbXB1dGluZy5ubD4iKTsgICAgIG9ic29sZXRlIGFkZHJlc3MgKi8KLU1PRFVMRV9BVVRIT1IoIkhlbmRyaWstSmFuIFRob21hc3NlbiA8aGp0QEFUQ29tcHV0aW5nLm5sPiIpOyAvKiBjdXJyZW50IG1haW50YWluZXIgKi8KLU1PRFVMRV9ERVNDUklQVElPTigiQ29weS1vbi13cml0ZSBsb29wIGRyaXZlciIpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhjb3dzLCAiIE51bWJlciBvZiBjb25maWd1cmVkIGNvd2RldmljZXMgKGRlZmF1bHQgMTYpIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHJkb2ZpbGUsICIgUmVhZC1vbmx5IGZpbGUgZm9yIC9kZXYvY293LzAiKTsKLU1PRFVMRV9QQVJNX0RFU0MoY293ZmlsZSwgIiBDb3dmaWxlIGZvciAvZGV2L2Nvdy8wIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG9wdGlvbiwgIiAgUmVwYWlyIGNvd2ZpbGUgaWYgaW5jb25zaXN0ZW50OiBvcHRpb249ciIpOwotCi0jZGVmaW5lIERFVklDRV9OQU1FCSJjb3ciCi0KLSNkZWZpbmUJREZMQ09XUwkJMTYJCS8qIGRlZmF1bHQgY293bG9vcCBkZXZpY2VzCSovCi0KLXN0YXRpYyBpbnQgbWF4Y293cyA9IERGTENPV1M7Ci1tb2R1bGVfcGFyYW0obWF4Y293cywgaW50LCAwKTsKLXN0YXRpYyBjaGFyICpyZG9maWxlID0gIiI7Ci1tb2R1bGVfcGFyYW0ocmRvZmlsZSwgY2hhcnAsIDApOwotc3RhdGljIGNoYXIgKmNvd2ZpbGUgPSAiIjsKLW1vZHVsZV9wYXJhbShjb3dmaWxlLCBjaGFycCwgMCk7Ci1zdGF0aWMgY2hhciAqb3B0aW9uID0gIiI7Ci1tb2R1bGVfcGFyYW0ob3B0aW9uLCBjaGFycCwgMCk7Ci0KLS8qCi0qKiBwZXIgY293ZGV2aWNlIHNldmVyYWwgYml0bWFwIGNodW5rcyBhcmUgYWxsb3dlZCBvZiBNQVBDSFVOS1NaIGVhY2gKLSoqCi0qKiBlYWNoIGJpdG1hcCBjaHVuayBjYW4gZGVzY3JpYmUgTUFQQ0hVTktTWiAqIDggKiBNQVBVTklUIGJ5dGVzIG9mIGRhdGEKLSoqIHN1cHBvc2U6Ci0qKglNQVBDSFVOS1NaIDQwOTYgYW5kIE1BUFVOSVQgMTAyNCAtLT4gNDA5NiAqIDggKiAxMDI0ID0gMzIgTWIgcGVyIGNodW5rCi0qLwotI2RlZmluZQlNQVBDSFVOS1NaCTQwOTYJLyogI2J5dGVzIHBlciBiaXRtYXAgY2h1bmsgIChkbyBub3QgY2hhbmdlKSAgKi8KLQotI2RlZmluZSBTUENNSU5CTEsJMTAwCS8qIHNwYWNlIHRocmVzaG9sZCB0byBnaXZlIHdhcm5pbmcgbWVzc2FnZXMgICovCi0jZGVmaW5lIFNQQ0RGTElOVFZMCTE2CS8qIG9uY2UgZXZlcnkgU1BDREZMSU5UVkwgd3JpdGVzIHRvIGNvd2ZpbGUsICovCi0JCQkJLyogYXZhaWxhYmxlIHNwYWNlIGluIGZpbGVzeXN0ZW0gaXMgY2hlY2tlZCAgKi8KLQotI2RlZmluZQlDQUxDTUFQKHgpCSgoeCkvKE1BUENIVU5LU1oqOCkpCi0jZGVmaW5lCUNBTENCWVRFKHgpCSgoKHgpJShNQVBDSFVOS1NaKjgpKT4+MykKLSNkZWZpbmUJQ0FMQ0JJVCh4KQkoKHgpJjcpCi0KLSNkZWZpbmUgQUxMQ09XCQkxCi0jZGVmaW5lIEFMTFJETwkJMgotI2RlZmluZSBNSVhFRFVQCQkzCi0KLXN0YXRpYyBjaGFyCWFsbHplcm9lc1tNQVBVTklUXTsKLQotLyoKLSoqIGFkbWluaXN0cmF0aW9uIHBlciBjb3dkZXZpY2UgKHBhaXIgb2YgY293ZmlsZS9yZG9maWxlKQotKi8KLQotLyogYml0LXZhbHVlcyBmb3Igc3RhdGUgKi8KLSNkZWZpbmUJQ09XREVWT1BFTgkweDAxCS8qIGNvd2RldmljZSBvcGVuZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1JXQ09XT1BFTgkweDAyCS8qIGNvd2ZpbGUgb3BlbmVkIHJlYWQtd3JpdGUgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1JEQ09XT1BFTgkweDA0CS8qIGNvd2ZpbGUgb3BlbmVkIHJlYWQtb25seSAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lCUNPV1dBVENIRE9HCTB4MDggCS8qIGlvY3RsIGZvciB3YXRjaGRvZyBjb3dmaWxlIHNwYWNlIGFjdGl2ZSAgICovCi0KLSNkZWZpbmUJQ09XQ09XT1BFTgkoQ09XUldDT1dPUEVOfENPV1JEQ09XT1BFTikKLQotc3RydWN0IGNvd2xvb3BfZGV2aWNlCi17Ci0JLyoKLQkqKiBjdXJyZW50IHN0YXR1cwotCSovCi0JaW50CQlzdGF0ZTsJCQkvKiBiaXQtdmFsdWVzIChzZWUgYWJvdmUpICAgICovCi0JaW50CQlvcGVuY250OwkJLyogIyBvcGVucyBmb3IgY293ZGV2aWNlICAgICAqLwotCi0gICAgICAgIC8qCi0JKiogb3BlbiBmaWxlIHBvaW50ZXJzCi0JKi8KLSAgICAgICAgc3RydWN0IGZpbGUgIAkqcmRvZnAsICAgKmNvd2ZwOwkvKiBvcGVuIGZpbGUgcG9pbnRlcnMgICAgICAgICovCi0JY2hhcgkJKnJkb25hbWUsICpjb3duYW1lOwkvKiBmaWxlIG5hbWVzICAgICAgICAgICAgICAgICovCi0KLQkvKgotCSoqIHJlcXVlc3QgcXVldWUgYWRtaW5pc3RyYXRpb24KLQkqLwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpycXVldWU7Ci0Jc3BpbmxvY2tfdAkJcnFsb2NrOwotCXN0cnVjdCBnZW5kaXNrCQkqZ2Q7Ci0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIGFib3V0IHJlYWQtb25seSBmaWxlCi0JKi8KLQl1bnNpZ25lZCBpbnQJICAgICBudW1ibG9ja3M7CS8qICMgYmxvY2tzIGlucHV0IGZpbGUgaW4gTUFQVU5JVCAgICAqLwotCXVuc2lnbmVkIGludAkgICAgIGJsb2Nrc3o7ICAgLyogbWluaW11bSB1bml0IHRvIGFjY2VzcyB0aGlzIGRldiAgICovCi0JdW5zaWduZWQgbG9uZwkgICAgIGZpbmdlcnByaW50OyAvKiBmaW5nZXJwcmludCBvZiBjdXJyZW50IHJkb2ZpbGUgICovCi0Jc3RydWN0IGJsb2NrX2RldmljZSAgKmJlbG93ZGV2OwkvKiBibG9jayBkZXZpY2UgYmVsb3cgdXMgICAgICAgICAgICAgKi8KLQlzdHJ1Y3QgZ2VuZGlzayAgICAgICAqYmVsb3dnZDsgIC8qIGdlbmRpc2sgZm9yIGJsayBkZXYgYmVsb3cgdXMgICAgICAqLwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpiZWxvd3E7CS8qIHJlcS4gcXVldWUgb2YgYmxrIGRldiBiZWxvdyB1cyAgICAqLwotCi0JLyoKLQkqKiBiaXRtYXAgYWRtaW5pc3RyYXRpb24gdG8gcmVnaXN0ZXIgd2hpY2ggYmxvY2tzIGFyZSBtb2RpZmllZAotCSovCi0JbG9uZyBpbnQJbWFwc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBiaXRtYXAgKGJ5dGVzKSAgICAgICovCi0JbG9uZyBpbnQJbWFwcmVtYWluOwkvKiByZW1haW5pbmcgYnl0ZXMgaW4gbGFzdCBiaXRtYXAgICAgKi8KLQlpbnQJCW1hcGNvdW50OyAgICAgICAvKiBudW1iZXIgb2YgYml0bWFwcyBpbiB1c2UgICAgICAgICAgKi8KLQljaGFyIAkJKiptYXBjYWNoZTsJLyogYXJlYSB3aXRoIHBvaW50ZXJzIHRvIGJpdG1hcHMgICAgICovCi0KLQljaGFyCQkqaW9idWY7CQkvKiBkYXRhYnVmZmVyIG9mIE1BUFVOSVQgYnl0ZXMgICAgICAgKi8KLQlzdHJ1Y3QgY293aGVhZAkqY293aGVhZDsJLyogYnVmZmVyIGNvbnRhaW5pbmcgY293aGVhZCAgICAgICAgICovCi0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIGZvciBpbnRlcmZhY2Ugd2l0aCB0aGUga2VybmVsLXRocmVhZAotCSovCi0JaW50CQlwaWQ7CQkvKiBwaWQ9PTA6IG5vIHRocmVhZCBhdmFpbGFibGUgICAgICAgKi8KLQlzdHJ1Y3QgcmVxdWVzdAkqcmVxOwkJLyogcmVxdWVzdCB0byBiZSBoYW5kbGVkIG5vdyAgICAgICAgICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7CS8qIHdhaXQtUTogdGhyZWFkIHdhaXRzIGZvciB3b3JrICAgICAqLwotCWNoYXIJCWNsb3NlZG93bjsJLyogYm9vbGVhbjogdGhyZWFkIGV4aXQgcmVxdWlyZWQgICAgICovCi0JY2hhcgkJcWZpbGxlZDsJLyogYm9vbGVhbjogSS9PIHJlcXVlc3QgcGVuZGluZyAgICAgICovCi0JY2hhcgkJaW9idXN5OwkJLyogYm9vbGVhbjogcmVxIHVuZGVyIHRyZWF0bWVudCAgICAgICovCi0KLQkvKgotCSoqIGFkbWluaXN0cmF0aW9uIHRvIGtlZXAgdHJhY2sgb2YgZnJlZSBzcGFjZSBpbiBjb3dmaWxlIGZpbGVzeXN0ZW0KLQkqLwotCXVuc2lnbmVkIGxvbmcJYmxrc2l6ZTsJLyogYmxvY2sgc2l6ZSBvZiBmcyAoYnl0ZXMpICAgICAgICAgICovCi0JdW5zaWduZWQgbG9uZwlibGt0b3RhbDsJLyogcmVjZW50IHRvdGFsIHNwYWNlIGluIGZzIChibG9ja3MpICovCi0JdW5zaWduZWQgbG9uZwlibGthdmFpbDsJLyogcmVjZW50IGZyZWUgIHNwYWNlIGluIGZzIChibG9ja3MpICovCi0KLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YXRjaHE7CS8qIHdhaXQtUTogd2F0Y2hlciBhd2FpdHMgdGhyZXNob2xkICAqLwotCXVuc2lnbmVkIGxvbmcJd2F0Y2h0aHJlc2g7CS8qIHRocmVzaG9sZCBvZiB3YXRjaGVyIChibG9ja3MpICAgICAqLwotCi0JLyoKLQkqKiBzdGF0aXN0aWNhbCBjb3VudGVycwotCSovCi0JdW5zaWduZWQgbG9uZwlyZG9yZWFkczsJLyogbnVtYmVyIG9mICByZWFkLWFjdGlvbnMgcmRvICAgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3dyZWFkczsJLyogbnVtYmVyIG9mICByZWFkLWFjdGlvbnMgY293ICAgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3d3cml0ZXM7CS8qIG51bWJlciBvZiB3cml0ZS1hY3Rpb25zICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbnJjb3dibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgaW4gdXNlIG9uIGNvdyAgICAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjb3dsb29wX2RldmljZQkqKmNvd2RldmFsbDsJLyogcHRyIHRvIHB0cnMgdG8gYWxsIGNvd2RldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIAljb3dkZXZsb2NrOwkvKiBnZW5lcmljIGxvY2sgZm9yIGNvd2RldnMgICAgICAqLwotCi1zdGF0aWMgc3RydWN0IGdlbmRpc2sJCSpjb3djdGxnZDsJLyogZ2VuZGlzayBjb250cm9sIGNoYW5uZWwgICAgICAgKi8KLXN0YXRpYyBzcGlubG9ja190CQljb3djdGxycWxvY2s7ICAgLyogZm9yIHJlcS5xLiBvZiBjdHJsLiBjaGFubmVsICAgKi8KLQotLyoKLSoqIHByaXZhdGUgZGlyZWN0b3J5IC9wcm9jL2NvdwotKi8KLXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqY293bG9fcHJvY2RpcjsKLQotLyoKLSoqIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSovCi1zdGF0aWMgbG9uZyBpbnQgY293bG9fZG9fcmVxdWVzdCAoc3RydWN0IHJlcXVlc3QgKnJlcSk7Ci1zdGF0aWMgdm9pZAljb3dsb19zeW5jICAgICAgICh2b2lkKTsKLXN0YXRpYyBpbnQJY293bG9fY2hlY2tpbyAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosICAgICAgICAgaW50LCBsb2ZmX3QpOwotc3RhdGljIGludAljb3dsb19yZWFkbWl4ICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgaW50CWNvd2xvX3dyaXRlbWl4ICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb19yZWFkcmRvICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fcmVhZGNvdyAgICAoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGxvbmcgaW50IGNvd2xvX3JlYWRjb3dyYXcgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCB2b2lkICosIGludCwgbG9mZl90KTsKLXN0YXRpYyBsb25nIGludCBjb3dsb193cml0ZWNvdyAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgdm9pZCAqLCBpbnQsIGxvZmZfdCk7Ci1zdGF0aWMgbG9uZyBpbnQgY293bG9fd3JpdGVjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICosIHZvaWQgKiwgaW50LCBsb2ZmX3QpOwotc3RhdGljIGludCAgICAgIGNvd2xvX2lvY3RsICAgICAgKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgZm1vZGVfdCwKLSAgICAgICAgICAgCQkJIAkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyBpbnQJY293bG9fbWFrZXBhaXIgICAgKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fcmVtb3ZlcGFpciAgKHVuc2lnbmVkIGxvbmcgIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fd2F0Y2ggICAgICAgKHN0cnVjdCBjb3dwYWlyIF9fdXNlciAqKTsKLXN0YXRpYyBpbnQJY293bG9fY293Y3RsICAgICAgKHVuc2lnbmVkIGxvbmcgIF9fdXNlciAqLCBpbnQpOwotc3RhdGljIGludAljb3dsb19vcGVucGFpciAgICAoY2hhciAqLCBjaGFyICosIGludCwgaW50KTsKLXN0YXRpYyBpbnQgCWNvd2xvX2Nsb3NlcGFpciAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50CWNvd2xvX29wZW5yZG8gICAgIChzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKiwgY2hhciAqKTsKLXN0YXRpYyBpbnQJY293bG9fb3BlbmNvdyAgICAgKHN0cnVjdCBjb3dsb29wX2RldmljZSAqLCBjaGFyICosIGludCk7Ci1zdGF0aWMgdm9pZAljb3dsb191bmRvX29wZW5yZG8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICopOwotc3RhdGljIHZvaWQJY293bG9fdW5kb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogU3lzdGVtIGNhbGwgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogaGFuZGxlIHN5c3RlbSBjYWxsIG9wZW4oKS9tb3VudCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludCBjb3dsb19vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChpbWFqb3IoaW5vZGUpICE9IENPV01BSk9SKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5leHBlY3RlZCBtYWpvciAlZFxuIiwgaW1ham9yKGlub2RlKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXN3aXRjaCAoaW1pbm9yKGlub2RlKSkgewotCSAgIGNhc2UgQ09XQ1RMOgotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gb3BlbiAlZCBjb250cm9sXG4iLCBDT1dDVEwpOwotCQlicmVhazsKLQotCSAgIGRlZmF1bHQ6Ci0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBvcGVuIG1pbm9yICVkXG4iLCBpbWlub3IoaW5vZGUpKTsKLQotCQlpZiAoIGltaW5vcihpbm9kZSkgPj0gbWF4Y293cyApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQlpZiAoICEoKGNvd2RldmFsbFtpbWlub3IoaW5vZGUpXSktPnN0YXRlICYgQ09XREVWT1BFTikgKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJKGNvd2RldmFsbFtpbWlub3IoaW5vZGUpXSktPm9wZW5jbnQrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBzeXN0ZW0gY2FsbCBjbG9zZSgpL3Vtb3VudCgpCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qLwotc3RhdGljIGludCBjb3dsb19yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpnZCwgZm1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQotCWJkZXYgPSBiZGdldF9kaXNrKGdkLCAwKTsKLQlpbm9kZSA9IGJkZXYtPmJkX2lub2RlOwotCWlmICghaW5vZGUpCi0JCXJldHVybiAwOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlbGVhc2UgKGNsb3NlKSBtaW5vciAlZFxuIiwgaW1pbm9yKGlub2RlKSk7Ci0KLQlpZiAoIGltaW5vcihpbm9kZSkgIT0gQ09XQ1RMKQotCQkoY293ZGV2YWxsW2ltaW5vcihpbm9kZSldKS0+b3BlbmNudC0tOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgc3lzdGVtIGNhbGwgaW9jdGwoKQotKioKLSoqIHJldHVybnM6Ci0qKiAJMCAgIC0gb2theQotKiogICAgPCAwICAgLSBlcnJvciB2YWx1ZQotKi8KLXN0YXRpYyBpbnQgY293bG9faW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLAotCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGhkX2dlb21ldHJ5CWdlbzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmRldi0+YmRfaW5vZGU7Ci0KLQlERUJVR1AoRENPVyAiY293bG9vcCAtIGlvY3RsIGNtZCAleFxuIiwgY21kKTsKLQotCXN3aXRjaCAoIGltaW5vcihpbm9kZSkgKSB7Ci0KLQkgICAvKgotCSAgICoqIGFsbG93ZWQgdmlhIGNvbnRyb2wgZGV2aWNlIG9ubHkKLQkgICAqLwotCSAgIGNhc2UgQ09XQ1RMOgotCQlzd2l0Y2ggKGNtZCkgewotCQkgICAvKgotCQkgICAqKiB3cml0ZSBhbGwgYml0bWFwIGNodW5rcyBhbmQgY293aGVhZGVycyB0byBjb3dmaWxlcwotCQkgICAqLwotCQkgICBjYXNlIENPV1NZTkM6Ci0JCQlkb3duKCZjb3dkZXZsb2NrKTsKLQkJCWNvd2xvX3N5bmMoKTsKLQkJCXVwKCZjb3dkZXZsb2NrKTsKLQkJCXJldHVybiAwOwotCi0JCSAgIC8qCi0JCSAgICoqIG9wZW4gYSBuZXcgY293ZGV2aWNlIChwYWlyIG9mIHJkb2ZpbGUvY293ZmlsZSkKLQkJICAgKi8KLQkJICAgY2FzZSBDT1dNS1BBSVI6Ci0JCQlyZXR1cm4gY293bG9fbWFrZXBhaXIoKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiBjbG9zZSBhIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XUk1QQUlSOgotCQkJcmV0dXJuIGNvd2xvX3JlbW92ZXBhaXIoKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiB3YXRjaCBmcmVlIHNwYWNlIG9mIGZpbGVzeXN0ZW0gY29udGFpbmluZyBjb3dmaWxlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XV0FUQ0g6Ci0JCQlyZXR1cm4gY293bG9fd2F0Y2goKHZvaWQgX191c2VyICopYXJnKTsKLQotCQkgICAvKgotCQkgICAqKiBjbG9zZSBjb3dmaWxlIGZvciBhY3RpdmUgZGV2aWNlCi0JCSAgICovCi0JCSAgIGNhc2UgQ09XQ0xPU0U6Ci0JCQlyZXR1cm4gY293bG9fY293Y3RsKCh2b2lkIF9fdXNlciAqKWFyZywgQ09XQ0xPU0UpOwotCi0JCSAgIC8qCi0JCSAgICoqIHJlb3BlbiBjb3dmaWxlIHJlYWQtb25seSBmb3IgYWN0aXZlIGRldmljZQotCQkgICAqLwotCQkgICBjYXNlIENPV1JET1BFTjoKLQkJCXJldHVybiBjb3dsb19jb3djdGwoKHZvaWQgX191c2VyICopYXJnLCBDT1dSRE9QRU4pOwotCi0JCSAgIGRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSAvKiBlbmQgb2Ygc3dpdGNoIG9uIGNvbW1hbmQgKi8KLQotCSAgIC8qCi0JICAgKiogYWxsb3dlZCBmb3IgYW55IG90aGVyIGNvd2RldmljZQotCSAgICovCi0JICAgZGVmYXVsdDoKLQkJc3dpdGNoIChjbWQpIHsKLQkJICAgLyoKLQkJICAgKiogSERJT19HRVRHRU8gbXVzdCBiZSBzdXBwb3J0ZWQgZm9yIGZkaXNrLCBldGMKLQkJICAgKi8KLQkJICAgY2FzZSBIRElPX0dFVEdFTzoKLQkJCWdlby5jeWxpbmRlcnMgPSAwOwotCQkJZ2VvLmhlYWRzICAgICA9IDA7Ci0JCQlnZW8uc2VjdG9ycyAgID0gMDsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZnZW8sIHNpemVvZiBnZW8pKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9IC8qIGVuZCBvZiBzd2l0Y2ggb24gaW9jdGwtY21kIGNvZGUgcGFyYW1ldGVyICovCi0JfSAvKiBlbmQgb2Ygc3dpdGNoIG9uIG1pbm9yIG51bWJlciAqLwotfQotCi1zdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGNvd2xvX2ZvcHMgPQotewotCS5vd25lcgkgPSAgICAgVEhJU19NT0RVTEUsCi0gICAgICAgIC5vcGVuICAgID0gICAgIGNvd2xvX29wZW4sCS8qIGNhbGxlZCB1cG9uIG9wZW4gICovCi0gICAgICAgIC5yZWxlYXNlID0gICAgIGNvd2xvX3JlbGVhc2UsCS8qIGNhbGxlZCB1cG9uIGNsb3NlICovCi0gICAgICAgIC5pb2N0bCAgID0gICAgIGNvd2xvX2lvY3RsLCAgICAgLyogY2FsbGVkIHVwb24gaW9jdGwgKi8KLX07Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZCBDT1dNS1BBSVI6Ci0qKglvcGVuIGEgbmV3IGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIG9uLXRoZS1mbHkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19tYWtlcGFpcihzdHJ1Y3QgY293cGFpciBfX3VzZXIgKmFyZykKLXsKLQlpbnQJCWksIHJ2PTA7Ci0Jc3RydWN0IGNvd3BhaXIJY293cGFpcjsKLQl1bnNpZ25lZCBjaGFyCSpjb3dwYXRoOwotCXVuc2lnbmVkIGNoYXIJKnJkb3BhdGg7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgcGF0aG5hbWVzCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3dwYWlyLCBhcmcsIHNpemVvZiBjb3dwYWlyKSApCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKCAoTUFKT1IoY293cGFpci5kZXZpY2UpICE9IENPV01BSk9SKSAmJiAoY293cGFpci5kZXZpY2UgIT0gQU5ZREVWKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCAoTUlOT1IoY293cGFpci5kZXZpY2UpID49IG1heGNvd3MpICAmJiAoY293cGFpci5kZXZpY2UgIT0gQU5ZREVWKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkqKiByZXRyaWV2ZSBwYXRobmFtZSBzdHJpbmdzCi0JKi8KLQlpZiAoIChjb3dwYWlyLmNvd2ZsZW4gPiBQQVRIX01BWCkgfHwgKGNvd3BhaXIucmRvZmxlbiA+IFBBVEhfTUFYKSApCi0JCXJldHVybiAtRU5BTUVUT09MT05HOwotCi0JaWYgKCAhKGNvd3BhdGggPSBrbWFsbG9jKGNvd3BhaXIuY293ZmxlbisxLCBHRlBfS0VSTkVMKSkgKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICggY29weV9mcm9tX3VzZXIoY293cGF0aCwgKHZvaWQgX191c2VyICopY293cGFpci5jb3dmaWxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293cGFpci5jb3dmbGVuKSApIHsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQkqKGNvd3BhdGgrY293cGFpci5jb3dmbGVuKSA9IDA7Ci0KLQlpZiAoICEocmRvcGF0aCA9IGttYWxsb2MoY293cGFpci5yZG9mbGVuKzEsIEdGUF9LRVJORUwpKSApIHsKLQkJa2ZyZWUoY293cGF0aCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWlmICggY29weV9mcm9tX3VzZXIocmRvcGF0aCwgKHZvaWQgX191c2VyICopY293cGFpci5yZG9maWxlLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293cGFpci5yZG9mbGVuKSApIHsKLQkJa2ZyZWUocmRvcGF0aCk7Ci0JCWtmcmVlKGNvd3BhdGgpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JKihyZG9wYXRoK2Nvd3BhaXIucmRvZmxlbikgPSAwOwotCi0JLyoKLQkqKiBvcGVuIG5ldyBjb3dkZXZpY2UKLQkqLwotCWlmICggY293cGFpci5kZXZpY2UgPT0gQU5ZREVWKSB7Ci0JCS8qCi0JCSoqIHNlYXJjaCBmaXJzdCB1bnVzZWQgbWlub3IKLQkJKi8KLQkJZm9yIChpPTAsIHJ2PS1FQlVTWTsgaSA8IG1heGNvd3M7IGkrKykgewotCQkJaWYgKCAhKChjb3dkZXZhbGxbaV0pLT5zdGF0ZSAmIENPV0RFVk9QRU4pICkgewotCQkJCXJ2ID0gY293bG9fb3BlbnBhaXIocmRvcGF0aCwgY293cGF0aCwgMCwgaSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocnYpIHsgCQkvKiBvcGVuIGZhaWxlZD8gKi8KLQkJCWtmcmVlKHJkb3BhdGgpOwotCQkJa2ZyZWUoY293cGF0aCk7Ci0JCQlyZXR1cm4gcnY7Ci0JCX0KLQotCQkvKgotCQkqKiByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGNvd2RldmljZSB0byB1c2VyIHNwYWNlCi0JCSovCi0JCWNvd3BhaXIuZGV2aWNlID0gTUtERVYoQ09XTUFKT1IsIGkpOwotCi0JCWlmICggY29weV90b191c2VyKGFyZywgJmNvd3BhaXIsIHNpemVvZiBjb3dwYWlyKSkgewotCQkJa2ZyZWUocmRvcGF0aCk7Ci0JCQlrZnJlZShjb3dwYXRoKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfSBlbHNlIHsgCQkvKiBzcGVjaWZpYyBtaW5vciByZXF1ZXN0ZWQgKi8KLQkJaWYgKCAocnYgPSBjb3dsb19vcGVucGFpcihyZG9wYXRoLCBjb3dwYXRoLCAwLAotCQkJCQkJTUlOT1IoY293cGFpci5kZXZpY2UpKSkpIHsKLQkJCWtmcmVlKHJkb3BhdGgpOwotCQkJa2ZyZWUoY293cGF0aCk7Ci0JCQlyZXR1cm4gcnY7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGhhbmRsZSBpb2N0bC1jb21tYW5kIENPV1JNUEFJUjoKLSoqIAlkZWFjdGl2YXRlIGFuIGV4aXN0aW5nIGNvd2RldmljZSAocGFpciBvZiByZG9maWxlL2Nvd2ZpbGUpIG9uLXRoZS1mbHkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19yZW1vdmVwYWlyKHVuc2lnbmVkIGxvbmcgX191c2VyICphcmcpCi17Ci0JdW5zaWduZWQgbG9uZwkJY293ZGV2aWNlOwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JLyoKLQkqKiByZXRyaWV2ZSBpbmZvIGFib3V0IGRldmljZSB0byBiZSByZW1vdmVkCi0JKi8KLQlpZiAoIGNvcHlfZnJvbV91c2VyKCZjb3dkZXZpY2UsIGFyZywgc2l6ZW9mIGNvd2RldmljZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyoKLQkqKiB2ZXJpZnkgbWFqb3ItbWlub3IgbnVtYmVyCi0JKi8KLQlpZiAoIE1BSk9SKGNvd2RldmljZSkgIT0gQ09XTUFKT1IpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCBNSU5PUihjb3dkZXZpY2UpID49IG1heGNvd3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY293ZGV2ID0gY293ZGV2YWxsW01JTk9SKGNvd2RldmljZSldOwotCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkqKiBzeW5jaHJvbml6ZSBiaXRtYXBzIGFuZCBjbG9zZSBjb3dkZXZpY2UKLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCWRvd24oJmNvd2RldmxvY2spOwotCQljb3dsb19zeW5jKCk7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQl9Ci0KLQlyZXR1cm4gY293bG9fY2xvc2VwYWlyKGNvd2Rldik7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZCBDT1dXQVRDSDoKLSoqCXdhdGNoIHRoZSBmcmVlIHNwYWNlIG9mIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgYSBjb3dmaWxlCi0qKiAgICAgIG9mIGFuIG9wZW4gY293ZGV2aWNlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fd2F0Y2goc3RydWN0IGNvd3BhaXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXY7Ci0Jc3RydWN0IGNvd3dhdGNoCQljb3d3YXRjaDsKLQotCS8qCi0JKiogcmV0cmlldmUgc3RydWN0dXJlIGhvbGRpbmcgaW5mbwotCSovCi0JaWYgKCBjb3B5X2Zyb21fdXNlcigmY293d2F0Y2gsIGFyZywgc2l6ZW9mIGNvd3dhdGNoKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBpZiBjb3dkZXZpY2UgZXhpc3RzIGFuZCBpcyBjdXJyZW50bHkgb3BlbgotCSovCi0JaWYgKCBNSU5PUihjb3d3YXRjaC5kZXZpY2UpID49IG1heGNvd3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY293ZGV2ID0gY293ZGV2YWxsW01JTk9SKGNvd3dhdGNoLmRldmljZSldOwotCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyoKLQkqKiBpZiB0aGUgV0FUQ0hXQUlULW9wdGlvbiBpcyBzZXQsIHdhaXQgdW50aWwgdGhlIGluZGljYXRlZAotCSoqIHRocmVzaG9sZCBpcyByZWFjaGVkIChvbmx5IG9uZSB3YWl0ZXIgYWxsb3dlZCkKLQkqLwotCWlmIChjb3d3YXRjaC5mbGFncyAmIFdBVENIV0FJVCkgewotCQkvKgotCQkqKiBjaGVjayBpZiBhbHJlYWR5IGFub3RoZXIgd2FpdGVyIGFjdGl2ZQotCQkqKiBmb3IgdGhpcyBjb3dkZXZpY2UKLQkJKi8KLQkJaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRykKLQkJCXJldHVybiAtRUFHQUlOOwotCi0JCWNvd2Rldi0+c3RhdGUgfD0gQ09XV0FUQ0hET0c7Ci0KLQkJY293ZGV2LT53YXRjaHRocmVzaCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCSAgICAgICAgICAgICAgICAgICAgICBjb3d3YXRjaC50aHJlc2hvbGQgLwotCQkJCSAgICAgIChjb3dkZXYtPmJsa3NpemUgLyAxMDI0KTsKLQotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvd2Rldi0+d2F0Y2hxLAotCQkgICAgICAgICAgICAgICAgICAgIGNvd2Rldi0+d2F0Y2h0aHJlc2ggPj0gY293ZGV2LT5ibGthdmFpbCkpIHsKLQkJCWNvd2Rldi0+c3RhdGUgJj0gfkNPV1dBVENIRE9HOwotCQkJcmV0dXJuIEVJTlRSOwotCQl9Ci0KLQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XV0FUQ0hET0c7Ci0JfQotCi0JY293d2F0Y2gudG90YWxrYiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY293ZGV2LT5ibGt0b3RhbCAqCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY293ZGV2LT5ibGtzaXplIC8gMTAyNDsKLQljb3d3YXRjaC5hdmFpbGtiID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljb3dkZXYtPmJsa2F2YWlsICoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3dkZXYtPmJsa3NpemUgLyAxMDI0OwotCi0JaWYgKCBjb3B5X3RvX3VzZXIoYXJnLCAmY293d2F0Y2gsIHNpemVvZiBjb3d3YXRjaCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiBoYW5kbGUgaW9jdGwtY29tbWFuZHMgQ09XQ0xPU0UgYW5kIENPV1JET1BFTjoKLSoqCUNPV0NMT1NFICAtIGNsb3NlIHRoZSBjb3dmaWxlIHdoaWxlIHRoZSBjb3dkZXZpY2UgcmVtYWlucyBvcGVuOwotKiogICAgICAgICAgICAgICAgICB0aGlzIGFsbG93cyBhbiB1bm1vdW50IG9mIHRoZSBmaWxlc3lzdGVtIG9uIHdoaWNoCi0qKiAgICAgICAgICAgICAgICAgIHRoZSBjb3dmaWxlIHJlc2lkZXMKLSoqCUNPV1JET1BFTiAtIGNsb3NlIHRoZSBjb3dmaWxlIGFuZCByZW9wZW4gaXQgZm9yIHJlYWQtb25seTsKLSoqICAgICAgICAgICAgICAgICAgdGhpcyBhbGxvd3MgYSByZW1vdW50IHJlYWQtb255IG9mIHRoZSBmaWxlc3lzdGVtCi0qKiAgICAgICAgICAgICAgICAgIG9uIHdoaWNoIHRoZSBjb3dmaWxlIHJlc2lkZXMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19jb3djdGwodW5zaWduZWQgbG9uZyBfX3VzZXIgKmFyZywgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQl1bnNpZ25lZCBsb25nCQljb3dkZXZpY2U7Ci0KLQkvKgotCSoqIHJldHJpZXZlIGluZm8gYWJvdXQgZGV2aWNlIHRvIGJlIHJlbW92ZWQKLQkqLwotCWlmICggY29weV9mcm9tX3VzZXIoJmNvd2RldmljZSwgYXJnLCBzaXplb2YgY293ZGV2aWNlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKgotCSoqIHZlcmlmeSBtYWpvci1taW5vciBudW1iZXIKLQkqLwotCWlmICggTUFKT1IoY293ZGV2aWNlKSAhPSBDT1dNQUpPUikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIE1JTk9SKGNvd2RldmljZSkgPj0gbWF4Y293cykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljb3dkZXYgPSBjb3dkZXZhbGxbTUlOT1IoY293ZGV2aWNlKV07Ci0KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKgotCSoqIHN5bmNocm9uaXplIGJpdG1hcHMgYW5kIGNsb3NlIGNvd2ZpbGUKLQkqLwotCWlmIChjb3dkZXYtPnN0YXRlICYgQ09XUldDT1dPUEVOKSB7Ci0JCWRvd24oJmNvd2RldmxvY2spOwotCQljb3dsb19zeW5jKCk7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQl9Ci0KLQkvKgotCSoqIGhhbmRsZSBzcGVjaWZpYyBpb2N0bC1jb21tYW5kCi0JKi8KLQlzd2l0Y2ggKGNtZCkgewotCSAgIGNhc2UgQ09XUkRPUEVOOgotCQkvKgotCQkqKiBpZiB0aGUgY293ZmlsZSBpcyBzdGlsbCBvcGVuZWQgcmVhZC13cml0ZQotCQkqLwotCQlpZiAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgewotCQkJLyoKLQkJCSoqIGNsb3NlIHRoZSBjb3dmaWxlCi0JCQkqLwotICAJCQlpZiAoY293ZGV2LT5jb3dmcCkKLQkJICAJCWZpbHBfY2xvc2UoY293ZGV2LT5jb3dmcCwgMCk7Ci0KLQkJCWNvd2Rldi0+c3RhdGUgJj0gfkNPV1JXQ09XT1BFTjsKLQotCQkJLyoKLQkJCSoqIG9wZW4gYWdhaW4gZm9yIHJlYWQtb25seQotCQkJKi8KLQkJCWNvd2Rldi0+Y293ZnAgPSBmaWxwX29wZW4oY293ZGV2LT5jb3duYW1lLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZfE9fTEFSR0VGSUxFLCAwNjAwKTsKLQotCQkJaWYgKCAoY293ZGV2LT5jb3dmcCA9PSBOVUxMKSB8fCBJU19FUlIoY293ZGV2LT5jb3dmcCkgKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAiY293bG9vcCAtIGZhaWxlZCB0byByZW9wZW4gY293ZmlsZSAlc1xuIiwKLQkJCQkgICAgIGNvd2Rldi0+Y293bmFtZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkqKiBtYXJrIGNvd2ZpbGUgb3BlbiBmb3IgcmVhZC1vbmx5Ci0JCQkqLwotCQkJY293ZGV2LT5zdGF0ZSB8PSBDT1dSRENPV09QRU47Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQotCSAgIGNhc2UgQ09XQ0xPU0U6Ci0JCS8qCi0JCSoqIGlmIHRoZSBjb3dmaWxlIGlzIHN0aWxsIG9wZW4KLQkJKi8KLQkJaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dDT1dPUEVOKSB7Ci0JCQkvKgotCQkJKiogY2xvc2UgdGhlIGNvd2ZpbGUKLQkJCSovCi0gIAkJCWlmIChjb3dkZXYtPmNvd2ZwKQotCQkgIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCQkJY293ZGV2LT5zdGF0ZSAmPSB+Q09XQ09XT1BFTjsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEhhbmRsaW5nIG9mIEkvTy1yZXF1ZXN0cyBmb3IgYSBjb3dkZXZpY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBieSBjb3JlLWtlcm5lbCB0byBoYW5kbGUgdGhlIEkvTy1yZXF1ZXN0cwotKiogaW4gdGhlIHF1ZXVlCi0qLwotc3RhdGljIHZvaWQgY293bG9fcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdAkJKnJlcTsKLQlzdHJ1Y3QgY293bG9vcF9kZXZpY2UJKmNvd2RldjsKLQotCURFQlVHUChEQ09XICJjb3dsb29wIC0gcmVxdWVzdCBmdW5jdGlvbiBjYWxsZWQuLi4uXG4iKTsKLQotCXdoaWxlKChyZXEgPSBibGtfcGVla19yZXF1ZXN0KHEpKSAhPSBOVUxMKSB7Ci0JCURFQlVHUChEQ09XICJjb3dsb29wIC0gZ290IG5leHQgcmVxdWVzdFxuIik7Ci0KLQkJaWYgKCEgYmxrX2ZzX3JlcXVlc3QocmVxKSkgewotICAgICAgICAgICAgICAgCQkgLyogdGhpcyBpcyBub3QgYSBub3JtYWwgZmlsZSBzeXN0ZW0gcmVxdWVzdCAqLwotICAgICAgICAgICAgICAgIAlfX2Jsa19lbmRfcmVxdWVzdF9jdXIocmVxLCAtRUlPKTsKLSAgICAgICAgICAgICAgICAJY29udGludWU7Ci0gICAgICAgIAl9Ci0JCWNvd2RldiA9IHJlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCi0JCWlmIChjb3dkZXYtPmlvYnVzeSkKLQkJCXJldHVybjsKLQkJZWxzZQotCQkJY293ZGV2LT5pb2J1c3kgPSAxOwotCi0JCS8qCi0JCSoqIHdoZW4gbm8ga2VybmVsLXRocmVhZCBpcyBhdmFpbGFibGUsIHRoZSByZXF1ZXN0IHdpbGwKLQkJKiogcHJvZHVjZSBhbiBJL08tZXJyb3IKLQkJKi8KLQkJaWYgKCFjb3dkZXYtPnBpZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSImNvd2xvb3AgLSBubyB0aHJlYWQgYXZhaWxhYmxlXG4iKTsKLQkJCV9fYmxrX2VuZF9yZXF1ZXN0X2N1cihyZXEsIC1FSU8pOwkvKiByZXF1ZXN0IGZhaWxlZCAqLwotCQkJY293ZGV2LT5pb2J1c3kJPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkqKiBoYW5kbGUgSS9PLXJlcXVlc3QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGtlcm5lbC10aHJlYWQKLQkJKi8KLQkJY293ZGV2LT5yZXEgCT0gcmVxOwotCQljb3dkZXYtPnFmaWxsZWQJPSAxOwotCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKCZjb3dkZXYtPndhaXRxKTsKLQotCQkvKgotCQkqKiBnZXQgb3V0IG9mIHRoaXMgZnVuY3Rpb24gbm93IHdoaWxlIHRoZSBJL08tcmVxdWVzdCBpcwotCQkqKiB1bmRlciB0cmVhdG1lbnQgb2YgdGhlIGtlcm5lbC10aHJlYWQ7IHRoaXMgZnVuY3Rpb24KLQkJKiogd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgSS9PLXJlcXVlc3QgaGFzCi0JCSoqIGJlZW4gZmluaXNoZWQgYnkgdGhlIHRocmVhZAotCQkqLwotCQlyZXR1cm47Ci0JfQotfQotCi0vKgotKiogZGFlbW9uLXByb2Nlc3MgKGtlcm5lbC10aHJlYWQpIGV4ZWN1dGVzIHRoaXMgZnVuY3Rpb24KLSovCi1zdGF0aWMgaW50Ci1jb3dsb19kYWVtb24oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50CXJ2OwotCWludCAgICAgbWlub3I7Ci0JY2hhcglteW5hbWVbMTZdOwotCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQlpZiAoY293ZGV2ID09IGNvd2RldmFsbFttaW5vcl0pIGJyZWFrOwotCX0KLQlzcHJpbnRmKG15bmFtZSwgImNvd2xvb3BkJWQiLCBtaW5vcik7Ci0KLSAgICAgICAgZGFlbW9uaXplKG15bmFtZSk7Ci0KLQl3aGlsZSAoIWNvd2Rldi0+Y2xvc2Vkb3duKSB7Ci0JCS8qCi0JCSoqIHNsZWVwIHdoaWxlIHdhaXRpbmcgZm9yIGFuIEkvTyByZXF1ZXN0OwotCQkqKiBub3RlIHRoYXQgbm8gbm9uLWludGVycnVwdGlibGUgd2FpdCBoYXMgYmVlbiB1c2VkCi0JCSoqIGJlY2F1c2UgdGhlIG5vbi1pbnRlcnJ1cHRpYmxlIHZlcnNpb24gb2YKLQkJKiogYSAqc3luY2hyb25vdXMqIHdha2VfdXAgZG9lcyBub3QgZXhpc3QgKGFueSBtb3JlKQotCQkqLwotCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNvd2Rldi0+d2FpdHEsIGNvd2Rldi0+cWZpbGxlZCkpewotCQkJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsgLyogaWdub3JlIHNpZ25hbC1iYXNlZCB3YWtldXAgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGNvd2Rldi0+Y2xvc2Vkb3duKQkJLyogbW9kdWxlIHdpbGwgYmUgdW5sb2FkZWQgPyAqL3sKLQkJCWNvd2Rldi0+cGlkID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJLyoKLQkJKiogd29rZW4gdXAgYnkgdGhlIEkvTy1yZXF1ZXN0IGhhbmRsZXI6CXRyZWF0IHJlcXVlc3RlZCBJL08KLQkJKi8KLQkJY293ZGV2LT5xZmlsbGVkID0gMDsKLQotCQlydiA9IGNvd2xvX2RvX3JlcXVlc3QoY293ZGV2LT5yZXEpOwotCi0JCS8qCi0JCSoqIHJlYWNxdWlyZSB0aGUgcXVldWUtc3BpbmxvY2sgZm9yIG1hbmlwdWxhdGluZwotCQkqKiB0aGUgcmVxdWVzdC1xdWV1ZSBhbmQgZGVxdWV1ZSB0aGUgcmVxdWVzdAotCQkqLwotCQlzcGluX2xvY2tfaXJxKCZjb3dkZXYtPnJxbG9jayk7Ci0KLQkJX19ibGtfZW5kX3JlcXVlc3RfY3VyKGNvd2Rldi0+cmVxLCBydik7Ci0JCWNvd2Rldi0+aW9idXN5ID0gMDsKLQotCQkvKgotCQkqKiBpbml0aWF0ZSB0aGUgbmV4dCByZXF1ZXN0IGZyb20gdGhlIHF1ZXVlCi0JCSovCi0JCWNvd2xvX3JlcXVlc3QoY293ZGV2LT5ycXVldWUpOwotCi0JCXNwaW5fdW5sb2NrX2lycSgmY293ZGV2LT5ycWxvY2spOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUga2VybmVsIHRocmVhZAotKiogdG8gaGFuZGxlIHRoZSBxdWV1ZWQgSS9PLXJlcXVlc3RzCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBmYWlsCi0qKiAgICAgIDEgICAtIHN1Y2Nlc3MKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX2RvX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKnJlcSkKLXsKLQl1bnNpZ25lZCBsb25nCQlsZW47Ci0JbG9uZyBpbnQJCXJ2OwotCWxvZmZfdCAJCQlvZmZzZXQ7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXYgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKLQotCS8qCi0JKiogY2FsY3VsYXRlIHNvbWUgdmFyaWFibGVzIHdoaWNoIGFyZSBuZWVkZWQgbGF0ZXIgb24KLQkqLwotCWxlbiAgICAgPSAgICAgICAgICBibGtfcnFfY3VyX3NlY3RvcnMocmVxKSA8PCA5OwotCW9mZnNldCAgPSAobG9mZl90KSBibGtfcnFfcG9zKHJlcSkgICAgICAgICA8PCA5OwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHJlcSBjbWQ9JWQgb2Zmc2V0PSVsbGQgbGVuPSVsdSBhZGRyPSVwXG4iLAotCQkJCSoocmVxLT5jbWQpLCBvZmZzZXQsIGxlbiwgcmVxLT5idWZmZXIpOwotCi0JLyoKLQkqKiBoYW5kbGUgUkVBRC0gb3IgV1JJVEUtcmVxdWVzdAotCSovCi0Jc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7Ci0JICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JICAgY2FzZSBSRUFEOgotCQlzd2l0Y2ggKCBjb3dsb19jaGVja2lvKGNvd2RldiwgbGVuLCBvZmZzZXQpICkgewotCQkgICBjYXNlIEFMTENPVzoKLQkJCXJ2ID0gY293bG9fcmVhZGNvdyhjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBjYXNlIEFMTFJETzoKLQkJCXJ2ID0gY293bG9fcmVhZHJkbyhjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCSAgIAkgICBjYXNlIE1JWEVEVVA6Ci0JCQlydiA9IGNvd2xvX3JlYWRtaXgoY293ZGV2LCByZXEtPmJ1ZmZlciwgbGVuLCBvZmZzZXQpOwotCQkJYnJlYWs7Ci0KLQkJICAgZGVmYXVsdDoKLQkJCXJ2ID0gMDsJLyogbmV2ZXIgaGFwcGVucyAqLwotCQl9Ci0JCWJyZWFrOwotCi0JICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JICAgY2FzZSBXUklURToKLQkJc3dpdGNoICggY293bG9fY2hlY2tpbyhjb3dkZXYsIGxlbiwgb2Zmc2V0KSApIHsKLQkJICAgY2FzZSBBTExDT1c6Ci0JCQkvKgotCQkJKiogc3RyYWlnaHQtZm9yd2FyZCB3cml0ZSB3aWxsIGRvLi4uCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlIHN0cmFpZ2h0ICIpOwotCi0JCQlydiA9IGNvd2xvX3dyaXRlY293KGNvd2RldiwgcmVxLT5idWZmZXIsIGxlbiwgb2Zmc2V0KTsKLQkJCWJyZWFrOwkvKiBmcm9tIHN3aXRjaCAqLwotCi0JCSAgIGNhc2UgQUxMUkRPOgotCQkJaWYgKCAobGVuICYgTVVNQVNLKSA9PSAwKSB7Ci0JCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHdyaXRlIHN0cmFpZ2h0ICIpOwotCi0JCQkJcnYgPSBjb3dsb193cml0ZWNvdyhjb3dkZXYsIHJlcS0+YnVmZmVyLAotCQkJCQkJCQlsZW4sIG9mZnNldCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkgICAJICAgY2FzZSBNSVhFRFVQOgotCQkJcnYgPSBjb3dsb193cml0ZW1peChjb3dkZXYsIHJlcS0+YnVmZmVyLCBsZW4sIG9mZnNldCk7Ci0JCQlicmVhazsKLQotCQkgICBkZWZhdWx0OgotCQkJcnYgPSAwOwkvKiBuZXZlciBoYXBwZW5zICovCi0JCX0KLQkJYnJlYWs7Ci0KLQkgICBkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gdW5yZWNvZ25pemVkIGNvbW1hbmQgJWRcbiIsICoocmVxLT5jbWQpKTsKLQkJcnYgPSAwOwotCX0KLQotCXJldHVybiAocnYgPD0gMCA/IDAgOiAxKTsKLX0KLQotLyoKLSoqIGNoZWNrIGZvciBhIGdpdmVuIEkvTy1yZXF1ZXN0IGlmIGFsbCB1bmRlcmx5aW5nIGJsb2NrcwotKiogKHdpdGggc2l6ZSBNQVBVTklUKSBhcmUgZWl0aGVyIGluIHRoZSByZWFkLW9ubHkgZmlsZSBvciBpbgotKiogdGhlIGNvd2ZpbGUgKG9yIGEgY29tYmluYXRpb24gb2YgdGhlIHR3bykKLSoqCi0qKiByZXR1cm5zOgotKiogCUFMTFJETyAgLSBhbGwgdW5kZXJseWluZyBibG9ja3MgaW4gcmRvZmlsZQotKiogICAgICBBTExDT1cgIC0gYWxsIHVuZGVybHlpbmcgYmxvY2tzIGluIGNvd2ZpbGUKLSoqICAgICAgTUlYRURVUCAtIHVuZGVybHlpbmcgYmxvY2tzIHBhcnRseSBpbiByZG9maWxlIGFuZCBwYXJ0bHkgaW4gY293ZmlsZQotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX2NoZWNraW8oc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZwltYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgYmxvY2tuciwgcGFydGxlbjsKLQlsb25nIGludAl0b3RjbnQsIGNvd2NudDsKLQljaGFyCQkqbWM7Ci0KLQkvKgotCSoqIG5vdGljZSB0aGF0IHRoZSByZXF1ZXN0ZWQgYmxvY2sgbWlnaHQgY3Jvc3MKLQkqKiBhIGJsb2Nrc2l6ZSBib3VuZGFyeSB3aGlsZSBvbmUgb2YgdGhlIGNvbmNlcm5lZAotCSoqIGJsb2NrcyByZXNpZGVzIGluIHRoZSByZWFkLW9ubHkgZmlsZSBhbmQgYW5vdGhlcgotCSoqIG9uZSBpbiB0aGUgY29weS1vbi13cml0ZSBmaWxlOyBpbiB0aGF0IGNhc2UgdGhlCi0gICAgICAgICoqIHJlcXVlc3Qgd2lsbCBiZSBicm9rZW4gdXAgaW50byBwaWVjZXMKLQkqLwotCWlmICggKGxlbiA8PSBNQVBVTklUKSAmJgotCSAgICAgKE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKSA8PSBsZW4pICkgewotCQkvKgotCQkqKiBlYXN5IHNpdHVhdGlvbjoKLQkJKiogcmVxdWVzdGVkIGRhdGEtYmxvY2sgZW50aXJlbHkgZml0cyB3aXRoaW4KLQkJKiogdGhlIG1hcHVuaXQgdXNlZCBmb3IgdGhlIGJpdG1hcAotCQkqKiBjaGVjayBpZiB0aGF0IGJsb2NrIGlzIGxvY2F0ZWQgaW4gcmRvZmlsZSBvcgotCQkqKiBjb3dmaWxlCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCi0JCWlmICgqKCooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pK2J5dGVudW0pJigxPDxiaXRudW0pKQotCQkJcmV0dXJuIEFMTENPVzsKLQkJZWxzZQotCQkJcmV0dXJuIEFMTFJETzsKLQl9Ci0KLQkvKgotCSoqIGxlc3MgZWFzeSBzaXR1YXRpb246Ci0JKiogdGhlIHJlcXVlc3RlZCBkYXRhLWJsb2NrIGRvZXMgbm90IGZpdCB3aXRoaW4gdGhlIG1hcHVuaXQKLQkqKiB1c2VkIGZvciB0aGUgYml0bWFwCi0JKiogY2hlY2sgaWYgKmFsbCogdW5kZXJseWluZyBibG9ja3MgaW52b2x2ZWQgcmVzaWRlIG9uIHRoZSByZG9maWxlCi0gICAgICAgCSoqIG9yIHRoZSBjb3dmaWxlIChzbyBzdGlsbCBubyBicmVha3VwIHJlcXVpcmVkKQotCSovCi0JZm9yIChjb3djbnQ9dG90Y250PTA7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgb2Zmc2V0Kz1wYXJ0bGVuLCB0b3RjbnQrKyl7Ci0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBibG9ja25yIG9mIGludm9sdmVkIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGlzIHRoaXMgYmxvY2sgbG9jYXRlZCBpbiB0aGUgY293ZmlsZQotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCi0JCW1jCT0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSk7Ci0KLQkJaWYgKCoobWMrYnl0ZW51bSkmKDE8PGJpdG51bSkpCi0JCQljb3djbnQrKzs7Ci0KLQkJREVCVUdQKERDT1cKLQkJICAgICAgICJjb3dsb29wIC0gY2hlY2sgJWx1IC0gbWFwICVsdSwgYnl0ZSAlbHUsIGJpdCAlbHUsICIKLQkJICAgICAgICJjb3djbnQgJWxkLCB0b3RjbnQgJWxkICUwMnggJXBcbiIsCi0JCQlibG9ja25yLCBtYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgY293Y250LCB0b3RjbnQsCi0JCQkqKG1jK2J5dGVudW0pLCBtYyk7Ci0JfQotCi0JaWYgKGNvd2NudCA9PSAwKQkvKiBhbGwgaW52b2x2ZWQgYmxvY2tzIG9uIHJkb2ZpbGU/ICovCi0JCXJldHVybiBBTExSRE87Ci0KLQlpZiAoY293Y250ID09IHRvdGNudCkJLyogYWxsIGludm9sdmVkIGJsb2NrcyBvbiBjb3dmaWxlPyAqLwotCQlyZXR1cm4gQUxMQ09XOwotCi0JLyoKLQkqKiBzaXR1YXRpb24gc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZDoKLQkqKiBpbnZvbHZlZCB1bmRlcmx5aW5nIGJsb2NrcyBzcHJlYWQgb3ZlciBib3RoIGZpbGVzCi0JKi8KLQlyZXR1cm4gTUlYRURVUDsKLX0KLQotLyoKLSoqIHJlYWQgcmVxdWVzdGVkIGNodW5rIHBhcnRseSBmcm9tIHJkb2ZpbGUgYW5kIHBhcnRseSBmcm9tIGNvd2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlYWRtaXgoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQl1bnNpZ25lZCBsb25nCW1hcG51bSwgYnl0ZW51bSwgYml0bnVtLCBibG9ja25yLCBwYXJ0bGVuOwotCWxvbmcgaW50CXJ2OwotCWNoYXIJCSptYzsKLQotCS8qCi0JKiogY29tcGxpY2F0ZWQgYXBwcm9hY2g6IGJyZWFrdXAgcmVxdWlyZWQgb2YgcmVhZC1yZXF1ZXN0Ci0JKi8KLQlmb3IgKHJ2PTE7IGxlbiA+IDA7IGxlbi09cGFydGxlbiwgYnVmKz1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4pIHsKLQkJLyoKLQkJKiogY2FsY3VsYXRlIGJsb2NrbnIgb2YgZW50aXJlIGJsb2NrCi0JCSovCi0JCWJsb2NrbnIgPSBvZmZzZXQgPj4gTVVTSElGVDsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGlzIHRoaXMgYmxvY2sgbG9jYXRlZCBpbiB0aGUgY293ZmlsZQotCQkqLwotCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tucik7Ci0JCWJ5dGVudW0gPSBDQUxDQllURShibG9ja25yKTsKLQkJYml0bnVtICA9IENBTENCSVQgKGJsb2NrbnIpOwotCQltYwk9ICooY293ZGV2LT5tYXBjYWNoZSttYXBudW0pOwotCi0JCWlmICgqKG1jK2J5dGVudW0pJigxPDxiaXRudW0pKSB7Ci0JCQkvKgotCQkJKiogcmVhZCAocGFydGlhbCkgYmxvY2sgZnJvbSBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0IHJlYWQgIgotCQkJCSJjb3cgcGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsIHBhcnRsZW4sIG9mZnNldCk7Ci0KLQkJCWlmIChjb3dsb19yZWFkY293KGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSoqIHJlYWQgKHBhcnRpYWwpIGJsb2NrIGZyb20gcmRvZmlsZQotCQkJKi8KLQkJCURFQlVHUChEQ09XImNvd2xvb3AgLSBzcGxpdCByZWFkICIKLQkJCQkicmRvIHBhcnRsZW49JWxkIG9mZj0lbGxkXG4iLCBwYXJ0bGVuLCBvZmZzZXQpOwotCi0JCQlpZiAoY293bG9fcmVhZHJkbyhjb3dkZXYsIGJ1ZiwgcGFydGxlbiwgb2Zmc2V0KSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIGNodW5rIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGNvd2ZpbGUgbmVlZHMgcGllY2VzIHRvIGJlCi0qKiByZWFkIGZyb20gdGhlIHJkb2ZpbGUKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIGZhaWwKLSoqICAgICAgMSAgIC0gc3VjY2VzcwotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3dyaXRlbWl4KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JdW5zaWduZWQgbG9uZwltYXBudW0sIGJ5dGVudW0sIGJpdG51bSwgYmxvY2tuciwgcGFydGxlbjsKLQlsb25nIGludAlydjsKLQljaGFyCQkqbWM7Ci0KLQkvKgotCSoqIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQgc3R1ZmYgaXMgcmVxdWlyZWQ6Ci0JKiogaWYgdGhlIHJlcXVlc3QgaXMgbGFyZ2VyIHRoYW4gb25lIHVuZGVybHlpbmcKLQkqKiBibG9jayBvciBpcyBzcHJlYWQgb3ZlciB0d28gdW5kZXJseWluZyBibG9ja3MsCi0JKiogc3BsaXQgdGhlIHJlcXVlc3QgaW50byBwaWVjZXM7IGlmIGEgYmxvY2sgZG9lcyBub3QKLQkqKiBzdGFydCBhdCBhIGJsb2NrIGJvdW5kYXJ5LCB0YWtlIGNhcmUgdGhhdAotCSoqIHN1cnJvdW5kaW5nIGRhdGEgaXMgcmVhZCBmaXJzdCAoaWYgbmVlZGVkKSwKLQkqKiBmaXQgdGhlIG5ldyBkYXRhIGluIGFuZCB3cml0ZSBpdCBhcyBhIGZ1bGwgYmxvY2sKLQkqLwotCWZvciAocnY9MTsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBidWYrPXBhcnRsZW4sIG9mZnNldCs9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBibG9ja25yIG9mIGVudGlyZSBibG9jawotCQkqLwotCQlibG9ja25yID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJLyoKLQkJKiogaGFzIHRoaXMgYmxvY2sgYmVlbiB3cml0dGVuIGJlZm9yZT8KLQkJKi8KLQkJbWFwbnVtICA9IENBTENNQVAgKGJsb2NrbnIpOwotCQlieXRlbnVtID0gQ0FMQ0JZVEUoYmxvY2tucik7Ci0JCWJpdG51bSAgPSBDQUxDQklUIChibG9ja25yKTsKLQkJbWMJPSAqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKTsKLQotCQlpZiAoKihtYytieXRlbnVtKSYoMTw8Yml0bnVtKSkgewotCQkJLyoKLQkJCSoqIGJsb2NrIGhhcyBiZWVuIHdyaXR0ZW4gYmVmb3JlOwotCQkJKiogd3JpdGUgdHJhbnNwYXJhbnRseSB0byBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1cKLQkJCSAgICAgICAiY293bG9vcCAtIHNwbGl0d3IgdHJhbnNwXG4iKTsKLQotCQkJaWYgKGNvd2xvX3dyaXRlY293KGNvd2RldiwgYnVmLCBwYXJ0bGVuLCBvZmZzZXQpIDw9IDApCi0JCQkJcnYgPSAwOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSoqIGJsb2NrIGhhcyBuZXZlciBiZWVuIHdyaXR0ZW4gYmVmb3JlLAotCQkJKiogc28gcmVhZCBlbnRpcmUgYmxvY2sgZnJvbQotCQkJKiogcmVhZC1vbmx5IGZpbGUgZmlyc3QsIHVubGVzcwotCQkJKiogYSBmdWxsIGJsb2NrIGlzIHJlcXVlc3RlZCB0bwotCQkJKiogYmUgd3JpdHRlbgotCQkJKi8KLQkJCWlmIChwYXJ0bGVuIDwgTUFQVU5JVCkgewotCQkJCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgY293ZGV2LT5pb2J1ZiwKLQkJCQkgICAgICBNQVBVTklULCAobG9mZl90KWJsb2NrbnIgPDwgTVVTSElGVCkgPD0gMCkKLQkJCQkJcnYgPSAwOwotCQkJfQotCi0JCQkvKgotCQkJKiogdHJhbnNmZXIgbW9kaWZpZWQgcGFydCBpbnRvCi0JCQkqKiB0aGUgYmxvY2sganVzdCByZWFkCi0JCQkqLwotCQkJbWVtY3B5KGNvd2Rldi0+aW9idWYgKyAob2Zmc2V0ICYgTVVNQVNLKSwgYnVmLCBwYXJ0bGVuKTsKLQotCQkJLyoKLQkJCSoqIHdyaXRlIGVudGlyZSBibG9jayB0byBjb3dmaWxlCi0JCQkqLwotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIHNwbGl0ICIKLQkJCQkicGFydGxlbj0lbGQgb2ZmPSVsbGRcbiIsCi0JCQkJcGFydGxlbiwgKGxvZmZfdClibG9ja25yIDw8IE1VU0hJRlQpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3coY293ZGV2LCBjb3dkZXYtPmlvYnVmLCBNQVBVTklULAotCQkJCQkgICAgIChsb2ZmX3QpYmxvY2tuciA8PCBNVVNISUZUKSA8PSAwKQotCQkJCXJ2ID0gMDsKLQkJfQotCX0KLQotCXJldHVybiBydjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSS9PLXN1cHBvcnQgZm9yIHJlYWQtb25seSBmaWxlIGFuZCBjb3B5LW9uLXdyaXRlIGZpbGUgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogcmVhZCBkYXRhIGZyb20gdGhlIHJlYWQtb25seSBmaWxlCi0qKgotKiogcmV0dXJuLXZhbHVlOiBzaW1pbGFyIHRvIHVzZXItbW9kZSByZWFkCi0qLwotc3RhdGljIGxvbmcgaW50Ci1jb3dsb19yZWFkcmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JbW1fc2VnbWVudF90CW9sZF9mczsKLQlsb2ZmX3QJCXNhdmVvZmZzZXQgPSBvZmZzZXQ7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZHJkbyBjYWxsZWRcbiIpOwotCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyggZ2V0X2RzKCkgKTsKLQlydiA9IGNvd2Rldi0+cmRvZnAtPmZfb3AtPnJlYWQoY293ZGV2LT5yZG9mcCwgYnVmLCBsZW4sICZvZmZzZXQpOwotICAgICAgICBzZXRfZnMob2xkX2ZzKTsKLQotCWlmIChydiA8IGxlbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb3dsb29wIC0gcmVhZC1mYWlsdXJlICVsZCBvbiByZG9maWxlIgotCQkgICAgICAgICAgICAgICAgICAgICItIG9mZnNldD0lbGxkIGxlbj0lZFxuIiwKLQkJCQkJcnYsIHNhdmVvZmZzZXQsIGxlbik7Ci0JfQotCi0JY293ZGV2LT5yZG9yZWFkcysrOwotCXJldHVybiBydjsKLX0KLQotLyoKLSoqIHJlYWQgY293ZmlsZSBmcm9tIGEgbW9kaWZpZWQgb2Zmc2V0LCBpLmUuIHNraXBwaW5nIHRoZSBiaXRtYXAgYW5kIGNvd2hlYWQKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRjb3coc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZGNvdyBjYWxsZWRcbiIpOwotCi0Jb2Zmc2V0ICs9IGNvd2Rldi0+Y293aGVhZC0+ZG9mZnNldDsKLQotCXJldHVybiBjb3dsb19yZWFkY293cmF3KGNvd2RldiwgYnVmLCBsZW4sIG9mZnNldCk7Ci19Ci0KLS8qCi0qKiByZWFkIGNvd2ZpbGUgZnJvbSBhbiBhYnNvbHV0ZSBvZmZzZXQKLSoqCi0qKiByZXR1cm4tdmFsdWU6IHNpbWlsYXIgdG8gdXNlci1tb2RlIHJlYWQKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3JlYWRjb3dyYXcoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYsCi0JCQkJCXZvaWQgKmJ1ZiwgaW50IGxlbiwgbG9mZl90IG9mZnNldCkKLXsKLQlsb25nIGludAlydjsKLQltbV9zZWdtZW50X3QJb2xkX2ZzOwotCWxvZmZfdAkJc2F2ZW9mZnNldCA9IG9mZnNldDsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSByZWFkY293cmF3IGNhbGxlZFxuIik7Ci0KLQkvKgotCSoqIGJlIHN1cmUgdGhhdCBjb3dmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZC13cml0ZQotCSovCi0JaWYgKCAhKGNvd2Rldi0+c3RhdGUgJiBDT1dDT1dPUEVOKSApIHsKLQkJIHByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICAiY293bG9vcCAtIHJlYWQgcmVxdWVzdCBmcm9tIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIGlzc3VlIGxvdyBsZXZlbCByZWFkCi0JKi8KLSAgICAgICAgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKCBnZXRfZHMoKSApOwotCXJ2ID0gY293ZGV2LT5jb3dmcC0+Zl9vcC0+cmVhZChjb3dkZXYtPmNvd2ZwLCBidWYsIGxlbiwgJm9mZnNldCk7Ci0gICAgICAgIHNldF9mcyhvbGRfZnMpOwotCi0JaWYgKHJ2IDwgbGVuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gcmVhZC1mYWlsdXJlICVsZCBvbiBjb3dmaWxlIgotCQkgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLCBydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPmNvd3JlYWRzKys7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogd3JpdGUgY293ZmlsZSBmcm9tIGEgbW9kaWZpZWQgb2Zmc2V0LCBpLmUuIHNraXBwaW5nIHRoZSBiaXRtYXAgYW5kIGNvd2hlYWQKLSoqCi0qKiBpZiBhIGJsb2NrIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lIHdoaWxlIGl0cyBjb250ZW50cyBjb25zaXN0cwotKiogb2YgYmluYXJ5IHplcm9lcyBvbmx5LCB0aGUgY29uY2VybmluZyBiaXRtYXAgaXMgZmx1c2hlZCB0byB0aGUgY293ZmlsZQotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgd3JpdGUKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3dyaXRlY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LCB2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JdW5zaWduZWQgbG9uZwltYXBudW09MCwgbWFwYnl0ZT0wLCBtYXBiaXQ9MCwgY293YmxvY2s9MCwgcGFydGxlbjsKLQljaGFyCQkqdG1wcHRyLCAgKm1hcHB0ciA9IE5VTEw7Ci0JbG9mZl90CQl0bXBvZmZzZXQsIG1hcG9mZnNldCA9IDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGVjb3cgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKSB7Ci0JCSBwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSBXcml0ZSByZXF1ZXN0IHRvIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIHdyaXRlIHRoZSBlbnRpcmUgYmxvY2sgdG8gdGhlIGNvd2ZpbGUKLQkqLwotCXRtcG9mZnNldCA9IG9mZnNldCArIGNvd2Rldi0+Y293aGVhZC0+ZG9mZnNldDsKLQotCXJ2ID0gY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBidWYsIGxlbiwgdG1wb2Zmc2V0KTsKLQotCS8qCi0JKiogdmVyaWZ5IGlmIGVub3VnaCBzcGFjZSBhdmFpbGFibGUgb24gZmlsZXN5c3RlbSBob2xkaW5nCi0JKiogdGhlIGNvd2ZpbGUKLQkqKiAgIC0gd2hlbiB0aGUgbGFzdCB3cml0ZSBmYWlsZWQgKG1pZ2h0IGJlIGNhdXNlZCBieSBsYWNrIG9mIHNwYWNlKQotCSoqICAgLSB3aGVuIGEgd2F0Y2hlciBpcyBhY3RpdmUgKHRvIHJlYWN0IGFkZXF1YXRseSkKLQkqKiAgIC0gd2hlbiB0aGUgcHJldmlvdXMgY2hlY2sgaW5kaWNhdGVkIGZzIHdhcyBhbG1vc3QgZnVsbAotCSoqICAgLSB3aXRoIHJlZ3VsYXIgaW50ZXJ2YWxzCi0JKi8KLQlpZiAoIChydiA8PSAwKQkJCQkgICAgICAgfHwKLQkgICAgIChjb3dkZXYtPnN0YXRlICAgICAgICAmIENPV1dBVENIRE9HKSAgICAgIHx8Ci0JICAgICAoY293ZGV2LT5ibGthdmFpbCAvIDIgPCBTUENERkxJTlRWTCkgICAgICB8fAotCSAgICAgKGNvd2Rldi0+Y293d3JpdGVzICAgICUgU1BDREZMSU5UVkwgPT0gMCkgKSB7Ci0JCXN0cnVjdCBrc3RhdGZzCQlrczsKLQotCQlpZiAodmZzX3N0YXRmcyhjb3dkZXYtPmNvd2ZwLT5mX2RlbnRyeSwgJmtzKT09MCl7Ci0JCQlpZiAoa3MuZl9iYXZhaWwgPD0gU1BDTUlOQkxLKSB7Ci0JCQkJc3dpdGNoIChrcy5mX2JhdmFpbCkgewotCQkJCSAgIGNhc2UgMDoKLQkJCQkgICBjYXNlIDE6Ci0JCQkJICAgY2FzZSAyOgotCQkJCSAgIGNhc2UgMzoKLQkJCQkJcHJpbnRrKEtFUk5fQUxFUlQKLQkJCQkJICAgICAgICJjb3dsb29wIC0gIgotCQkJCQkgICAgICAgIkFMRVJUOiBjb3dmaWxlIGZ1bGwhXG4iKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQkgICBkZWZhdWx0OgotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgYWxtb3N0ICIKLQkJCQkJICAgICAgICJmdWxsIChvbmx5ICVsbHUgS2IgZnJlZSlcbiIsCi0JCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3MuZl9ic2l6ZSAqIGtzLmZfYmF2YWlsIC8xMDI0KTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWNvd2Rldi0+YmxrdG90YWwgPSBrcy5mX2Jsb2NrczsKLQkJCWNvd2Rldi0+YmxrYXZhaWwgPSBrcy5mX2JhdmFpbDsKLQotCQkJLyoKLQkJCSoqIHdha2V1cCB3YXRjaGVyIGlmIHRocmVzaG9sZCBoYXMgYmVlbiByZWFjaGVkCi0JCQkqLwotCQkJaWYgKCAoY293ZGV2LT5zdGF0ZSAmIENPV1dBVENIRE9HKSAmJgotCQkJICAgIChjb3dkZXYtPndhdGNodGhyZXNoID49IGNvd2Rldi0+YmxrYXZhaWwpICkgewotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY293ZGV2LT53YXRjaHEpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHJ2IDw9IDApCi0JCXJldHVybiBydjsKLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBibG9jayB3cml0dGVuXG4iKTsKLQotCS8qCi0JKiogY2hlY2sgaWYgYmxvY2socykgaXMvYXJlIHdyaXR0ZW4gdG8gdGhlIGNvd2ZpbGUKLQkqKiBmb3IgdGhlIGZpcnN0IHRpbWU7IGlmIHNvLCBhZGFwdCB0aGUgYml0bWFwCi0JKi8KLQlmb3IgKDsgbGVuID4gMDsgbGVuLT1wYXJ0bGVuLCBvZmZzZXQrPXBhcnRsZW4sIGJ1Zis9cGFydGxlbikgewotCQkvKgotCQkqKiBjYWxjdWxhdGUgcGFydGlhbCBsZW5ndGggZm9yIHRoaXMgdHJhbnNmZXIKLQkJKi8KLQkJcGFydGxlbiA9IE1BUFVOSVQgLSAob2Zmc2V0ICYgTVVNQVNLKTsKLQkJaWYgKHBhcnRsZW4gPiBsZW4pCi0JCQlwYXJ0bGVuID0gbGVuOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBiaXRuciBvZiB3cml0dGVuIGNodW5rIG9mIGNvd2Jsb2NrCi0JCSovCi0JCWNvd2Jsb2NrID0gb2Zmc2V0ID4+IE1VU0hJRlQ7Ci0KLQkJbWFwbnVtICAgPSBDQUxDTUFQIChjb3dibG9jayk7Ci0JCW1hcGJ5dGUgID0gQ0FMQ0JZVEUoY293YmxvY2spOwotCQltYXBiaXQgICA9IENBTENCSVQgKGNvd2Jsb2NrKTsKLQotCQlpZiAoKigqKGNvd2Rldi0+bWFwY2FjaGUrbWFwbnVtKSttYXBieXRlKSAmICgxPDxtYXBiaXQpKQotCQkJY29udGludWU7CS8qIGFscmVhZHkgd3JpdHRlbiBiZWZvcmUgKi8KLQotCSAgICAgICAJLyoKLQkJKiogaWYgdGhlIGJsb2NrIGlzIHdyaXR0ZW4gZm9yIHRoZSBmaXJzdCB0aW1lLAotCQkqKiB0aGUgY29ycmVzcG9uZGluZyBiaXQgc2hvdWxkIGJlIHNldCBpbiB0aGUgYml0bWFwCi0JCSovCi0JCSooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrbWFwYnl0ZSkgfD0gKDE8PG1hcGJpdCk7Ci0KLQkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBiaXR1cGRhdGUgYmxrPSVsZCBtYXA9JWxkICIKLQkJICAgICAgICAiYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCWNvd2Jsb2NrLCBtYXBudW0sIG1hcGJ5dGUsIG1hcGJpdCk7Ci0KLQkJLyoKLQkJKiogY2hlY2sgaWYgdGhlIGNvd2hlYWQgaW4gdGhlIGNvd2ZpbGUgaXMgY3VycmVudGx5Ci0JCSoqIG1hcmtlZCBjbGVhbjsgaWYgc28sIG1hcmsgaXQgZGlydHkgYW5kIGZsdXNoIGl0Ci0JCSovCi0JCWlmICggIShjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICY9IENPV0RJUlRZKSkgewotCQkJY293ZGV2LT5jb3doZWFkLT5mbGFncwl8PSBDT1dESVJUWTsKLQotCQkJY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCBjb3dkZXYtPmNvd2hlYWQsCi0JCQkJCQkJTUFQVU5JVCwgKGxvZmZfdCkwKTsKLQkJfQotCi0JCS8qCi0JCSoqIGlmIHRoZSB3cml0dGVuIGRhdGFibG9jayBjb250YWluZWQgYmluYXJ5IHplcm9lcywKLQkJKiogdGhlIGJpdG1hcCBibG9jayBzaG91bGQgYmUgbWFya2VkIHRvIGJlIGZsdXNoZWQgdG8gZGlzawotCQkqKiAoYmxvY2tzIGNvbnRhaW5pbmcgYWxsIHplcm9lcyBjYW5ub3QgYmUgcmVjb3ZlcmVkIGJ5Ci0JCSoqIHRoZSBjb3dyZXBhaXItcHJvZ3JhbSBsYXRlciBvbiBpZiBjb3dsb29wIGlzIG5vdCBwcm9wZXJseQotCQkqKiByZW1vdmVkIHZpYSBybW1vZCkKLQkJKi8KLQkJaWYgKCBtZW1jbXAoYnVmLCBhbGx6ZXJvZXMsIHBhcnRsZW4pICkgLyogbm90IGFsbCB6ZXJvZXM/ICovCi0JCQljb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgLyogbm8gZmx1c2ggbmVlZGVkICovCi0KLQkJLyoKLQkJKiogY2FsY3VsYXRlIHBvc2l0aW9ucyBvZiBiaXRtYXAgYmxvY2sgdG8gYmUgZmx1c2hlZAotCQkqKiAtIHBvaW50ZXIgb2YgYml0bWFwIGJsb2NrIGluIG1lbW9yeQotCQkqKiAtIG9mZnNldCAgb2YgYml0bWFwIGJsb2NrIGluIGNvd2ZpbGUKLQkJKi8KLQkJdG1wcHRyICAgID0gKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkgKyAobWFwYnl0ZSAmICh+TVVNQVNLKSk7Ci0JCXRtcG9mZnNldCA9IChsb2ZmX3QpIE1BUFVOSVQgKyBtYXBudW0gKiBNQVBDSFVOS1NaICsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGJ5dGUgJiAofk1VTUFTSykpOwotCi0JCS8qCi0JCSoqIGZsdXNoIGEgYml0bWFwIGJsb2NrIGF0IHRoZSBtb21lbnQgdGhhdCBhbGwgYml0cyBoYXZlCi0JCSoqIGJlZW4gc2V0IGluIHRoYXQgYmxvY2ssIGkuZS4gYXQgdGhlIG1vbWVudCB0aGF0IHdlCi0JCSoqIHN3aXRjaCB0byBhbm90aGVyIGJpdG1hcCBibG9jawotCQkqLwotCQlpZiAoIChtYXBvZmZzZXQgIT0gMCkgJiYgKG1hcG9mZnNldCAhPSB0bXBvZmZzZXQpICkgewotCQkJaWYgKGNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgbWFwcHRyLCBNQVBVTklULAotCQkJCQkJCW1hcG9mZnNldCkgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgb24gYml0bWFwIC0gIgotCQkJCSAgICAgICAiYmxrPSVsZCBtYXA9JWxkIGJ5dGU9JWxkIGJpdD0lbGRcbiIsCi0JCQkJICAJY293YmxvY2ssIG1hcG51bSwgbWFwYnl0ZSwgbWFwYml0KTsKLQkJCX0KLQotCQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdG1hcCBibGsgd3JpdHRlbiAlbGxkXG4iLAotCQkJCQkJCQltYXBvZmZzZXQpOwotCQl9Ci0KLQkJLyoKLQkJKiogcmVtZW1iZXIgb2Zmc2V0IGluIGNvd2ZpbGUgYW5kIG9mZnNldCBpbiBtZW1vcnkKLQkJKiogZm9yIGJpdG1hcCB0byBiZSBmbHVzaGVkOyBmbHVzaGluZyB3aWxsIGJlIGRvbmUKLQkJKiogYXMgc29vbiBhcyBhbGwgdXBkYXRlcyBpbiB0aGlzIGJpdG1hcCBibG9jayBoYXZlCi0JCSoqIGJlZW4gZG9uZQotCQkqLwotCQltYXBvZmZzZXQgPSB0bXBvZmZzZXQ7Ci0JCW1hcHB0ciAgICA9IHRtcHB0cjsKLQl9Ci0KLQkvKgotCSoqIGFueSBuZXcgYmxvY2sgd3JpdHRlbiBjb250YWluaW5nIGJpbmFyeSB6ZXJvZXM/Ci0JKi8KLQlpZiAobWFwb2Zmc2V0KSB7Ci0JCWlmIChjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsIG1hcHB0ciwgTUFQVU5JVCwgbWFwb2Zmc2V0KSA8IDApIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY293bG9vcCAtIHdyaXRlLWZhaWx1cmUgb24gYml0bWFwIC0gIgotCQkJICAgICAgICJibGs9JWxkIG1hcD0lbGQgYnl0ZT0lbGQgYml0PSVsZFxuIiwKLQkJCSAgICAgICBjb3dibG9jaywgbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQpOwotCQl9Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJpdG1hcCBibG9jayB3cml0dGVuICVsbGRcbiIsIG1hcG9mZnNldCk7Ci0JfQotCi0JcmV0dXJuIHJ2OwotfQotCi0vKgotKiogd3JpdGUgY293ZmlsZSBmcm9tIGFuIGFic29sdXRlIG9mZnNldAotKioKLSoqIHJldHVybi12YWx1ZTogc2ltaWxhciB0byB1c2VyLW1vZGUgd3JpdGUKLSovCi1zdGF0aWMgbG9uZyBpbnQKLWNvd2xvX3dyaXRlY293cmF3KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2LAotCQkJCQl2b2lkICpidWYsIGludCBsZW4sIGxvZmZfdCBvZmZzZXQpCi17Ci0JbG9uZyBpbnQJcnY7Ci0JbW1fc2VnbWVudF90CW9sZF9mczsKLQlsb2ZmX3QJCXNhdmVvZmZzZXQgPSBvZmZzZXQ7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gd3JpdGVjb3dyYXcgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogYmUgc3VyZSB0aGF0IGNvd2ZpbGUgaXMgb3BlbmVkIGZvciByZWFkLXdyaXRlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKSB7Ci0JCSBwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSB3cml0ZSByZXF1ZXN0IHRvIGNvd2ZpbGUgcmVmdXNlZFxuIik7Ci0KLQkJcmV0dXJuIC1FQkFERjsKLQl9Ci0KLQkvKgotCSoqIGlzc3VlIGxvdyBsZXZlbCB3cml0ZQotCSovCi0gICAgICAgIG9sZF9mcyA9IGdldF9mcygpOwotCXNldF9mcyggZ2V0X2RzKCkgKTsKLQlydiA9IGNvd2Rldi0+Y293ZnAtPmZfb3AtPndyaXRlKGNvd2Rldi0+Y293ZnAsIGJ1ZiwgbGVuLCAmb2Zmc2V0KTsKLSAgICAgICAgc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAocnYgPCBsZW4pIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB3cml0ZS1mYWlsdXJlICVsZCBvbiBjb3dmaWxlIgotCQkgICAgICAgIi0gb2Zmc2V0PSVsbGQgbGVuPSVkXG4iLCBydiwgc2F2ZW9mZnNldCwgbGVuKTsKLQl9Ci0KLQljb3dkZXYtPmNvd3dyaXRlcysrOwotCXJldHVybiBydjsKLX0KLQotCi0vKgotKiogcmVhZHByb2MtZnVuY3Rpb246IGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIC9wcm9jLWZpbGUgaXMgcmVhZAotKi8KLXN0YXRpYyBpbnQKLWNvd2xvX3JlYWRwcm9jKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBwb3MsIGludCBjbnQsIGludCAqZW9mLCB2b2lkICpwKQotewotCXN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2ID0gcDsKLQotCXJldmlzaW9uW3NpemVvZiByZXZpc2lvbiAtIDNdID0gJ1wwJzsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJIiAgIGNvd2xvb3AgdmVyc2lvbjogJTlzXG5cbiIKLQkJIiAgICAgIGRldmljZSBzdGF0ZTogJXMlcyVzJXNcbiIKLQkJIiAgIG51bWJlciBvZiBvcGVuczogJTlkXG4iCi0JCSIgICAgIHBpZCBvZiB0aHJlYWQ6ICU5ZFxuXG4iCi0JCSIgICAgcmVhZC1vbmx5IGZpbGU6ICU5c1xuIgotCQkiICAgICAgICAgIHJkb3JlYWRzOiAlOWx1XG5cbiIKLQkJImNvcHktb24td3JpdGUgZmlsZTogJTlzXG4iCi0JCSIgICAgIHN0YXRlIGNvd2ZpbGU6ICU5c1xuIgotCQkiICAgICBiaXRtYXAtYmxvY2tzOiAlOWx1IChvZiAlZCBieXRlcylcbiIKLQkJIiAgY293YmxvY2tzIGluIHVzZTogJTlsdSAob2YgJWQgYnl0ZXMpXG4iCi0JCSIgICAgICAgICAgY293cmVhZHM6ICU5bHVcbiIKLQkJIiAgICAgICAgIGNvd3dyaXRlczogJTlsdVxuIiwKLQkJCSZyZXZpc2lvblsxMV0sCi0KLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOICAgPyAiZGV2b3BlbiAiICAgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dSV0NPV09QRU4gPyAiY293b3BlbnJ3ICIgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dSRENPV09QRU4gPyAiY293b3BlbnJvICIgOiAiIiwKLQkJCWNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRyAgPyAid2F0Y2hkb2cgIiAgOiAiIiwKLQotCQkJY293ZGV2LT5vcGVuY250LAotCQkJY293ZGV2LT5waWQsCi0JCQljb3dkZXYtPnJkb25hbWUsCi0JCQljb3dkZXYtPnJkb3JlYWRzLAotCQkJY293ZGV2LT5jb3duYW1lLAotCQkJY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZID8gImRpcnR5IjoiY2xlYW4iLAotCQkJY293ZGV2LT5tYXBzaXplID4+IE1VU0hJRlQsIE1BUFVOSVQsCi0JCQljb3dkZXYtPm5yY293YmxvY2tzLCBNQVBVTklULAotCQkJY293ZGV2LT5jb3dyZWFkcywKLQkJCWNvd2Rldi0+Y293d3JpdGVzKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogU2V0dXAgYW5kIGRlc3Ryb3kgY293ZGV2aWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotKiogb3BlbiBhbmQgcHJlcGFyZSBhIGNvd2RldmljZSAocmRvZmlsZSBhbmQgY293ZmlsZSkgYW5kIGFsbG9jYXRlIGJpdG1hcHMKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19vcGVucGFpcihjaGFyICpyZG9mLCBjaGFyICpjb3dmLCBpbnQgYXV0b3JlY292ZXIsIGludCBtaW5vcikKLXsKLQlsb25nIGludAkJcnY7Ci0Jc3RydWN0IGNvd2xvb3BfZGV2aWNlCSpjb3dkZXYgPSBjb3dkZXZhbGxbbWlub3JdOwotCXN0cnVjdCBrc3RhdGZzCQlrczsKLQotCWRvd24oJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiByZXF1ZXN0ZWQgZGV2aWNlIGV4aXN0cz8KLQkqLwotCWlmIChtaW5vciA+PSBtYXhjb3dzKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKLQkqKiByZXF1ZXN0ZWQgZGV2aWNlIGFscmVhZHkgYXNzaWduZWQgdG8gY293ZGV2aWNlPwotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dERVZPUEVOKSB7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKgotCSoqIGluaXRpYWxpemUgYWRtaW5pc3RyYXRpb24KLQkqLwotCW1lbXNldChjb3dkZXYsIDAsIHNpemVvZiAqY293ZGV2KTsKLQotCXNwaW5fbG9ja19pbml0ICAgICAoJmNvd2Rldi0+cnFsb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb3dkZXYtPndhaXRxKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb3dkZXYtPndhdGNocSk7Ci0KLQkvKgotCSoqIG9wZW4gdGhlIHJlYWQtb25seSBmaWxlCi0JKi8KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gY2FsbCBvcGVucmRvLi4uLlxuIik7Ci0KLQlpZiAoIChydiA9IGNvd2xvX29wZW5yZG8oY293ZGV2LCByZG9mKSkgKSB7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiBydjsKLQl9Ci0KLQkvKgotCSoqIG9wZW4gdGhlIGNvd2ZpbGUKLQkqLwotCURFQlVHUChEQ09XImNvd2xvb3AgLSBjYWxsIG9wZW5jb3cuLi4uXG4iKTsKLQotCWlmICggKHJ2ID0gY293bG9fb3BlbmNvdyhjb3dkZXYsIGNvd2YsIGF1dG9yZWNvdmVyKSkgKSB7Ci0JCWNvd2xvX3VuZG9fb3BlbnJkbyhjb3dkZXYpOwotCQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQkJdXAoJmNvd2RldmxvY2spOwotCQlyZXR1cm4gcnY7Ci0JfQotCi0JLyoKLQkqKiBhZG1pbmlzdGVyIHRvdGFsIGFuZCBhdmFpbGFibGUgc2l6ZSBvZiBmaWxlc3lzdGVtIGhvbGRpbmcgY293ZmlsZQotCSovCi0JaWYgKHZmc19zdGF0ZnMoY293ZGV2LT5jb3dmcC0+Zl9kZW50cnksICZrcyk9PTApIHsKLQkJY293ZGV2LT5ibGtzaXplICA9IGtzLmZfYnNpemU7Ci0JCWNvd2Rldi0+YmxrdG90YWwgPSBrcy5mX2Jsb2NrczsKLQkJY293ZGV2LT5ibGthdmFpbCA9IGtzLmZfYmF2YWlsOwotCX0gZWxzZSB7Ci0JCWNvd2Rldi0+Ymxrc2l6ZSAgPSAxMDI0OwkvKiBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvICovCi0JfQotCi0JLyoKLQkqKiBmbHVzaCB0aGUgKHJlY292ZXJlZCkgYml0bWFwcyBhbmQgY293aGVhZCB0byB0aGUgY293ZmlsZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgY293c3luYy4uLi5cbiIpOwotCi0JY293bG9fc3luYygpOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBnZW5kaXNrIGZvciB0aGUgY293IGRldmljZQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGFsbG9jIGRpc2suLi4uXG4iKTsKLQotCWlmICgoY293ZGV2LT5nZCA9IGFsbG9jX2Rpc2soMSkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gYWxsb2NfZGlzayBmb3IgY293bG9vcFxuIik7Ci0KLQkJY293bG9fdW5kb19vcGVucmRvKGNvd2Rldik7Ci0JCWNvd2xvX3VuZG9fb3BlbmNvdyhjb3dkZXYpOwotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNvd2Rldi0+Z2QtPm1ham9yICAgICAgICA9IENPV01BSk9SOwotCWNvd2Rldi0+Z2QtPmZpcnN0X21pbm9yICA9IG1pbm9yOwotCWNvd2Rldi0+Z2QtPm1pbm9ycyAgICAgICA9IDE7Ci0JY293ZGV2LT5nZC0+Zm9wcyAgICAgICAgID0gJmNvd2xvX2ZvcHM7Ci0JY293ZGV2LT5nZC0+cHJpdmF0ZV9kYXRhID0gY293ZGV2OwotCXNwcmludGYoY293ZGV2LT5nZC0+ZGlza19uYW1lLCAiJXMlZCIsIERFVklDRV9OQU1FLCBtaW5vcik7Ci0KLQkvKiBpbiAuNSBLYiB1bml0cyAqLwotCXNldF9jYXBhY2l0eShjb3dkZXYtPmdkLCAoY293ZGV2LT5udW1ibG9ja3MqKE1BUFVOSVQvNTEyKSkpOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGluaXQgcmVxdWVzdCBxdWV1ZS4uLi5cbiIpOwotCi0JaWYgKChjb3dkZXYtPnJxdWV1ZSA9IGJsa19pbml0X3F1ZXVlKGNvd2xvX3JlcXVlc3QsICZjb3dkZXYtPnJxbG9jaykpCi0JCQkJCQkJCT09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gZ2V0IHJlcXVlc3QgcXVldWUgZm9yIGNvd2xvb3BcbiIpOwotCi0JCWRlbF9nZW5kaXNrKGNvd2Rldi0+Z2QpOwotCQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQkJY293bG9fdW5kb19vcGVuY293KGNvd2Rldik7Ci0JCXVwKCZjb3dkZXZsb2NrKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYmxrX3F1ZXVlX2xvZ2ljYWxfYmxvY2tfc2l6ZShjb3dkZXYtPnJxdWV1ZSwgY293ZGV2LT5ibG9ja3N6KTsKLQljb3dkZXYtPmdkLT5xdWV1ZSA9IGNvd2Rldi0+cnF1ZXVlOwotCi0JLyoKLQkqKiBzdGFydCBrZXJuZWwgdGhyZWFkIHRvIGhhbmRsZSByZXF1ZXN0cwotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGtpY2tvZmYgZGFlbW9uLi4uLlxuIik7Ci0KLQljb3dkZXYtPnBpZCA9IGtlcm5lbF90aHJlYWQoKGludCAoKikodm9pZCAqKSljb3dsb19kYWVtb24sIGNvd2RldiwgMCk7Ci0KLQkvKgotCSoqIGNyZWF0ZSBhIGZpbGUgYmVsb3cgZGlyZWN0b3J5IC9wcm9jL2NvdyBmb3IgdGhpcyBuZXcgY293ZGV2aWNlCi0JKi8KLQlpZiAoY293bG9fcHJvY2RpcikgewotCQljaGFyIAl0bXBuYW1lWzY0XTsKLQotCQlzcHJpbnRmKHRtcG5hbWUsICIlZCIsIG1pbm9yKTsKLQotCQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KHRtcG5hbWUsIDAgLCBjb3dsb19wcm9jZGlyLAotCQkJCQkJY293bG9fcmVhZHByb2MsIGNvd2Rldik7Ci0JfQotCi0JY293ZGV2LT5zdGF0ZQl8PSBDT1dERVZPUEVOOwotCi0JY293ZGV2LT5yZG9uYW1lID0gcmRvZjsKLQljb3dkZXYtPmNvd25hbWUgPSBjb3dmOwotCi0JLyoKLQkqKiBlbmFibGUgdGhlIG5ldyBkaXNrOyB0aGlzIHRyaWdnZXJzIHRoZSBmaXJzdCByZXF1ZXN0IQotCSovCi0JREVCVUdQKERDT1ciY293bG9vcCAtIGNhbGwgYWRkX2Rpc2suLi4uXG4iKTsKLQotCWFkZF9kaXNrKGNvd2Rldi0+Z2QpOwotCi0JdXAoJmNvd2RldmxvY2spOwotCXJldHVybiAwOwotfQotCi0vKgotKiogY2xvc2UgYSBjb3dkZXZpY2UgKHBhaXIgb2YgcmRvZmlsZS9jb3dmaWxlKSBhbmQgcmVsZWFzZSBtZW1vcnkKLSoqCi0qKiByZXR1cm5zOgotKiogCTAgICAtIG9rYXkKLSoqICAgIDwgMCAgIC0gZXJyb3IgdmFsdWUKLSovCi1zdGF0aWMgaW50Ci1jb3dsb19jbG9zZXBhaXIoc3RydWN0IGNvd2xvb3BfZGV2aWNlICpjb3dkZXYpCi17Ci0JaW50IG1pbm9yOwotCi0JZG93bigmY293ZGV2bG9jayk7Ci0KLQkvKgotCSoqIGlmIGNvd2RldmljZSBpcyBub3QgYWN0aXZhdGVkIGF0IGFsbCwgcmVmdXNlCi0JKi8KLQlpZiAoICEoY293ZGV2LT5zdGF0ZSAmIENPV0RFVk9QRU4pICkgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qCi0JKiogaWYgdGhpcyBjb3dkZXZpY2UgaXMgc3RpbGwgb3BlbiwgcmVmdXNlCi0JKi8KLQlpZiAoY293ZGV2LT5vcGVuY250ID4gMCkgewotCQl1cCgmY293ZGV2bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JdXAoJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiB3YWtldXAgd2F0Y2hlciAoaWYgYW55KQotCSovCi0JaWYgKGNvd2Rldi0+c3RhdGUgJiBDT1dXQVRDSERPRykgewotCQljb3dkZXYtPndhdGNodGhyZXNoID0gY293ZGV2LT5ibGthdmFpbDsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjb3dkZXYtPndhdGNocSk7Ci0JfQotCi0JLyoKLQkqKiB3YWtldXAga2VybmVsLXRocmVhZCB0byBiZSBhYmxlIHRvIGV4aXQKLQkqKiBhbmQgd2FpdCB1bnRpbCBpdCBoYXMgZXhpdGVkCi0JKi8KLQljb3dkZXYtPmNsb3NlZG93biA9IDE7Ci0JY293ZGV2LT5xZmlsbGVkICAgPSAxOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY293ZGV2LT53YWl0cSk7Ci0KLSAgICAgICAJd2hpbGUgKGNvd2Rldi0+cGlkKQotICAgICAgICAgICAgICAgCXNjaGVkdWxlKCk7Ci0KLQlkZWxfZ2VuZGlzayhjb3dkZXYtPmdkKTsgIC8qIHJldmVydCB0aGUgYWxsb2NfZGlzaygpICovCi0JcHV0X2Rpc2soY293ZGV2LT5nZCk7ICAgICAvKiByZXZlcnQgdGhlIGFkZF9kaXNrKCkgICAqLwotCi0JaWYgKGNvd2xvX3Byb2NkaXIpIHsKLQkJY2hhciAJdG1wbmFtZVs2NF07Ci0KLQkJZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQkJaWYgKGNvd2RldiA9PSBjb3dkZXZhbGxbbWlub3JdKSBicmVhazsKLQkJfQotCQlzcHJpbnRmKHRtcG5hbWUsICIlZCIsIG1pbm9yKTsKLQotCQlyZW1vdmVfcHJvY19lbnRyeSh0bXBuYW1lLCBjb3dsb19wcm9jZGlyKTsKLQl9Ci0KLQlibGtfY2xlYW51cF9xdWV1ZShjb3dkZXYtPnJxdWV1ZSk7Ci0KLQkvKgotCSoqIHJlbGVhc2UgbWVtb3J5IGZvciBmaWxlbmFtZXMgaWYgdGhlc2UgbmFtZXMgaGF2ZQotCSoqIGJlZW4gYWxsb2NhdGVkIGR5bmFtaWNhbGx5Ci0JKi8KLQlpZiAoIChjb3dkZXYtPmNvd25hbWUpICYmIChjb3dkZXYtPmNvd25hbWUgIT0gY293ZmlsZSkpCi0JCWtmcmVlKGNvd2Rldi0+Y293bmFtZSk7Ci0KLQlpZiAoIChjb3dkZXYtPnJkb25hbWUpICYmIChjb3dkZXYtPnJkb25hbWUgIT0gcmRvZmlsZSkpCi0JCWtmcmVlKGNvd2Rldi0+cmRvbmFtZSk7Ci0KLQljb3dsb191bmRvX29wZW5yZG8oY293ZGV2KTsKLQljb3dsb191bmRvX29wZW5jb3coY293ZGV2KTsKLQotCWNvd2Rldi0+c3RhdGUgJj0gfkNPV0RFVk9QRU47Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSoqIG9wZW4gdGhlIHJlYWQtb25seSBmaWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fb3BlbnJkbyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgY2hhciAqcmRvZikKLXsKLQlzdHJ1Y3QgZmlsZQkqZjsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlOwotCWxvbmcgaW50CWksIG5ydmFsOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW5yZG8gY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogb3BlbiB0aGUgcmVhZC1vbmx5IGZpbGUKLQkqLwotICAgICAgICBpZigqcmRvZiA9PSAnXDAnKSB7Ci0gICAgIAkgICAgIAlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gc3BlY2lmeSBuYW1lIGZvciByZWFkLW9ubHkgZmlsZVxuXG4iKTsKLSAgICAgICAgIAlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0JZiA9IGZpbHBfb3BlbihyZG9mLCBPX1JET05MWXxPX0xBUkdFRklMRSwgMCk7Ci0KLQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIG9wZW4gb2YgcmRvZmlsZSAlcyBmYWlsZWRcbiIsIHJkb2YpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQljb3dkZXYtPnJkb2ZwID0gZjsKLQotCWlub2RlID0gZi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoICFTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmICFTX0lTQkxLKGlub2RlLT5pX21vZGUpICkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJjb3dsb29wIC0gJXMgbm90IHJlZ3VsYXIgZmlsZSBvciBibG9ja2RldlxuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBkZXRlcm1pbmUgc2l6ZSByZG8uLi4uXG4iKTsKLQotCS8qCi0JKiogZGV0ZXJtaW5lIGJsb2NrLXNpemUgYW5kIHRvdGFsIHNpemUgb2YgcmVhZC1vbmx5IGZpbGUKLQkqLwotCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCS8qCi0JCSoqIHJlYWQtb25seSBmaWxlIGlzIGEgcmVndWxhciBmaWxlCi0JCSovCi0JCWNvd2Rldi0+YmxvY2tzeiAgID0gNTEyOwkvKiBvdGhlciB2YWx1ZSBmYWlscyAqLwotCQljb3dkZXYtPm51bWJsb2NrcyA9IGlub2RlLT5pX3NpemUgPj4gTVVTSElGVDsKLQotCQlpZiAoaW5vZGUtPmlfc2l6ZSAmIE1VTUFTSykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJjb3dsb29wIC0gcmRvZmlsZSAlcyB0cnVuY2F0ZWQgdG8gbXVsdGlwbGUgIgotCQkJICAgICAgICJvZiAlZCBieXRlc1xuIiwgcmRvZiwgTUFQVU5JVCk7Ci0JCX0KLQotCQlERUJVR1AoRENPVyJjb3dsb29wIC0gUk89cmVndWxhcjogbnVtYmxvY2tzPSVkLCBibG9ja3N6PSVkXG4iLAotCQkJY293ZGV2LT5udW1ibG9ja3MsIGNvd2Rldi0+YmxvY2tzeik7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJKiogcmVhZC1vbmx5IGZpbGUgaXMgYSBibG9jayBkZXZpY2UKLQkJKi8KLQkJY293ZGV2LT5iZWxvd2RldiAgPSBpbm9kZS0+aV9iZGV2OwotCQljb3dkZXYtPmJlbG93Z2QgICA9IGNvd2Rldi0+YmVsb3dkZXYtPmJkX2Rpc2s7IC8qIGdlbmRpc2sgKi8KLQotCQlpZiAoY293ZGV2LT5iZWxvd2Rldi0+YmRfcGFydCkgewotCQkJY293ZGV2LT5udW1ibG9ja3MgPSBjb3dkZXYtPmJlbG93ZGV2LT5iZF9wYXJ0LT5ucl9zZWN0cwotCQkJCQkJCQkvIChNQVBVTklULzUxMik7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5iZWxvd2dkKSB7Ci0JCQljb3dkZXYtPmJlbG93cSA9IGNvd2Rldi0+YmVsb3dnZC0+cXVldWU7Ci0KLQkJCWlmIChjb3dkZXYtPm51bWJsb2NrcyA9PSAwKSB7Ci0JCQkJY293ZGV2LT5udW1ibG9ja3MgPSBnZXRfY2FwYWNpdHkoY293ZGV2LT5iZWxvd2dkKQotICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJLyAoTUFQVU5JVC81MTIpOwotCQkJfQotCQl9Ci0KLQotCQlpZiAoY293ZGV2LT5iZWxvd3EpCi0JCQljb3dkZXYtPmJsb2Nrc3ogPSBxdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoY293ZGV2LT5iZWxvd3EpOwotCi0JCWlmIChjb3dkZXYtPmJsb2Nrc3ogPT0gMCkKLQkJCWNvd2Rldi0+YmxvY2tzeiA9IEJMT0NLX1NJWkU7IC8qIGRlZmF1bHQgMl4xMCAqLwotCi0JCURFQlVHUChEQ09XImNvd2xvb3AgLSBudW1ibG9ja3M9JWQsICIKLQkJICAgICAgICAgICAiYmxvY2tzej0lZCwgYmVsb3dnZD0lcCwgYmVsb3dxPSVwXG4iLAotCQkgIAljb3dkZXYtPm51bWJsb2NrcywgY293ZGV2LT5ibG9ja3N6LAotCQkJY293ZGV2LT5iZWxvd2dkLCBjb3dkZXYtPmJlbG93cSk7Ci0KLQkJREVCVUdQKERDT1ciY293bG9vcCAtIGJlbG93ZGV2LmJkX2Jsb2NrX3NpemU9JWRcbiIsCi0JCSAgCWNvd2Rldi0+YmVsb3dkZXYtPmJkX2Jsb2NrX3NpemUpOwotCX0KLQotCWlmIChjb3dkZXYtPm51bWJsb2NrcyA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtICVzIGhhcyBubyBjb250ZW50c1xuIiwgcmRvZik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgYXMgZ2VuZXJpYyBJL08gYnVmZmVyCi0JKi8KLQljb3dkZXYtPmlvYnVmICA9IGttYWxsb2MoTUFQVU5JVCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWNvd2Rldi0+aW9idWYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiY293bG9vcCAtIGNhbm5vdCBnZXQgc3BhY2UgZm9yIGJ1ZmZlciAlZFxuIiwgTUFQVU5JVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCURFQlVHUChEQ09XImNvd2xvb3AgLSBkZXRlcm1pbmUgZmluZ2VycHJpbnQgcmRvLi4uLlxuIik7Ci0KLQkvKgotCSoqIGRldGVybWluZSBmaW5nZXJwcmludCBmb3IgcmVhZC1vbmx5IGZpbGUKLQkqKiAJY2FsY3VsYXRlIGZpbmdlcnByaW50IGZyb20gZmlyc3QgZm91ciBkYXRhYmxvY2tzCi0JKioJd2hpY2ggZG8gbm90IGNvbnRhaW4gYmluYXJ5IHplcm9lcwotCSovCi0JZm9yIChpPTAsIGNvd2Rldi0+ZmluZ2VycHJpbnQ9MCwgbnJ2YWw9MDsKLQkJCShucnZhbCA8IDQpJiYoaSA8IGNvd2Rldi0+bnVtYmxvY2tzKTsgaSsrKSB7Ci0JCWludCAJCWo7Ci0JCXVuc2lnbmVkIGNoYXIJY3M7Ci0KLQkJLyoKLQkJKiogcmVhZCBuZXh0IGJsb2NrCi0JCSovCi0JCWlmIChjb3dsb19yZWFkcmRvKGNvd2RldiwgY293ZGV2LT5pb2J1ZiwgTUFQVU5JVCwKLQkJCQkJCShsb2ZmX3QpaSA8PCBNVVNISUZUKSA8IDEpCi0JCQlicmVhazsKLQotCQkvKgotCQkqKiBjYWxjdWxhdGUgZmluZ2VycHJpbnQgYnkgYWRkaW5nIGFsbCBieXRlLXZhbHVlcwotCQkqLwotCQlmb3IgKGo9MCwgY3M9MDsgaiA8IE1BUFVOSVQ7IGorKykKLQkJCWNzICs9ICooY293ZGV2LT5pb2J1ZitqKTsKLQotCQlpZiAoY3MgPT0gMCkJLyogYmxvY2sgcHJvYmFibHkgY29udGFpbmVkIHplcm9lcyAqLwotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJKiogc2hpZnQgYnl0ZS12YWx1ZSB0byBwcm9wZXIgcGxhY2UgaW4gZmluYWwgZmluZ2VycHJpbnQKLQkJKi8KLQkJY293ZGV2LT5maW5nZXJwcmludCB8PSBjcyA8PCAobnJ2YWwqOCk7Ci0JCW5ydmFsKys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0qKiB1bmRvIG1lbW9yeSBhbGxvY3MgYW5kIGZpbGUgb3BlbnMgaXNzdWVkIHNvIGZhcgotKiogcmVsYXRlZCB0byB0aGUgcmVhZC1vbmx5IGZpbGUKLSovCi1zdGF0aWMgdm9pZAotY293bG9fdW5kb19vcGVucmRvKHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWlmKGNvd2Rldi0+aW9idWYpOwotCQlrZnJlZShjb3dkZXYtPmlvYnVmKTsKLQotCWlmIChjb3dkZXYtPnJkb2ZwKQotICAJCWZpbHBfY2xvc2UoY293ZGV2LT5yZG9mcCwgMCk7Ci19Ci0KLS8qCi0qKiBvcGVuIHRoZSBjb3dmaWxlCi0qKgotKiogcmV0dXJuczoKLSoqIAkwICAgLSBva2F5Ci0qKiAgICA8IDAgICAtIGVycm9yIHZhbHVlCi0qLwotc3RhdGljIGludAotY293bG9fb3BlbmNvdyhzdHJ1Y3QgY293bG9vcF9kZXZpY2UgKmNvd2RldiwgY2hhciAqY293ZiwgaW50IGF1dG9yZWNvdmVyKQotewotCWxvbmcgaW50CQlpLCBydjsKLQlpbnQJCQltaW5vcjsKLQl1bnNpZ25lZCBsb25nCQluYjsKLQlzdHJ1Y3QgZmlsZQkJKmY7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGU7Ci0JbG9mZl90CQkJb2Zmc2V0OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293dG1wOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIG9wZW5jb3cgY2FsbGVkXG4iKTsKLQotCS8qCi0JKiogb3BlbiBjb3B5LW9uLXdyaXRlIGZpbGUgKHJlYWQtd3JpdGUpCi0JKi8KLSAgICAgICAgaWYgKGNvd2ZbMF0gPT0gJ1wwJykgewotICAgICAgICAgIAlwcmludGsoS0VSTl9FUlIKLSAgICAgICAgICAgICAgICAgImNvd2xvb3AgLSBzcGVjaWZ5IG5hbWUgb2YgY29weS1vbi13cml0ZSBmaWxlXG5cbiIpOwotICAgICAgICAgCXJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLQlmID0gZmlscF9vcGVuKGNvd2YsIE9fUkRXUnxPX0xBUkdFRklMRSwgMDYwMCk7Ci0KLQlpZiAoIChmID09IE5VTEwpIHx8IElTX0VSUihmKSApIHsKLQkJLyoKLQkJKiogbm9uLWV4aXN0aW5nIGNvd2ZpbGU6IHRyeSB0byBjcmVhdGUKLQkJKi8KLQkJZiA9IGZpbHBfb3Blbihjb3dmLCBPX1JEV1J8T19DUkVBVHxPX0xBUkdFRklMRSwgMDYwMCk7Ci0KLQkJaWYgKCAoZiA9PSBOVUxMKSB8fCBJU19FUlIoZikgKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICJjb3dsb29wIC0gZmFpbGVkIHRvIG9wZW4gZmlsZSAlcyBmb3IgcmVhZC13cml0ZVxuXG4iLAotCQkgICAgICAgCQkJCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkgCX0KLQl9Ci0KLQljb3dkZXYtPmNvd2ZwID0gZjsKLQotCWlub2RlID0gZi0+Zl9kZW50cnktPmRfaW5vZGU7Ci0KLQlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gJXMgaXMgbm90IHJlZ3VsYXIgZmlsZVxuIiwgY293Zik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JKiogY2hlY2sgaWYgdGhpcyBjb3dmaWxlIGlzIGFscmVhZHkgaW4gdXNlIGZvciBhbm90aGVyIGNvd2RldmljZQotCSovCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCi0JCWNvd3RtcCA9IGNvd2RldmFsbFttaW5vcl07Ci0KLQkJaWYgKCAhKGNvd3RtcC0+c3RhdGUgJiBDT1dERVZPUEVOKSApCi0JCQljb250aW51ZTsKLQotCQlpZiAoY293dG1wID09IGNvd2RldikKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjb3d0bXAtPmNvd2ZwLT5mX2RlbnRyeS0+ZF9pbm9kZSA9PSBmLT5mX2RlbnRyeS0+ZF9pbm9kZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSAlczogYWxyZWFkeSBpbiB1c2UgYXMgY293XG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQl9Ci0KLQkvKgotCSoqIG1hcmsgY293ZmlsZSBvcGVuIGZvciByZWFkLXdyaXRlCi0JKi8KLQljb3dkZXYtPnN0YXRlIHw9IENPV1JXQ09XT1BFTjsKLQotCS8qCi0JKiogY2FsY3VsYXRlIHNpemUgKGluIGJ5dGVzKSBmb3IgdG90YWwgYml0bWFwIGluIGNvd2ZpbGU7Ci0JKiogd2hlbiB0aGUgc2l6ZSBvZiB0aGUgY293aGVhZCBibG9jayBpcyBhZGRlZCwgdGhlIHN0YXJ0LW9mZnNldAotCSoqIGZvciB0aGUgbW9kaWZpZWQgZGF0YSBibG9ja3MgY2FuIGJlIGZvdW5kCi0JKi8KLQluYiA9IGNvd2Rldi0+bnVtYmxvY2tzOwotCi0JaWYgKG5iJTgpCQkvKiB0cmFuc2Zvcm0gI2JpdHMgdG8gI2J5dGVzICovCi0JCW5iKz04OyAgCS8qIHJvdW5kZWQgaWYgbmVjZXNzYXJ5ICAgICAgKi8KLQluYiAvPSA4OwotCi0JaWYgKG5iICYgTVVNQVNLKQkvKiByb3VuZCB1cCAjYnl0ZXMgdG8gTUFQVU5JVCBjaHVua3MgKi8KLQkJY293ZGV2LT5tYXBzaXplID0gKCAobmI+Pk1VU0hJRlQpICsxKSA8PCBNVVNISUZUOwotCWVsc2UKLQkJY293ZGV2LT5tYXBzaXplID0gbmI7Ci0KLQkvKgotCSoqIHJlc2VydmUgc3BhY2UgaW4gbWVtb3J5IGZvciB0aGUgY293aGVhZAotCSovCi0JY293ZGV2LT5jb3doZWFkID0ga21hbGxvYyhNQVBVTklULCBHRlBfS0VSTkVMKTsKLQotCWlmICghY293ZGV2LT5jb3doZWFkKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY293bG9vcCAtIGNhbm5vdCBnZXQgc3BhY2UgZm9yIGNvd2hlYWQgJWRcbiIsCi0JCQkJCQkJCSAgICAgTUFQVU5JVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjb3dkZXYtPmNvd2hlYWQsIDAsIE1BUFVOSVQpOwotCi0JREVCVUdQKERDT1ciY293bG9vcCAtIHByZXBhcmUgY293aGVhZC4uLi5cbiIpOwotCi0JLyoKLQkqKiBjaGVjayBpZiB0aGUgY293ZmlsZSBleGlzdHMgb3Igc2hvdWxkIGJlIGNyZWF0ZWQKLQkqLwotCWlmIChpbm9kZS0+aV9zaXplICE9IDApIHsKLQkJLyoKLQkJKiogZXhpc3RpbmcgY293ZmlsZTogcmVhZCB0aGUgY293IGhlYWQKLQkJKi8KLQkJaWYgKGlub2RlLT5pX3NpemUgPCBNQVBVTklUKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiY293bG9vcCAtIGV4aXN0aW5nIGNvd2ZpbGUgJXMgdG9vIHNtYWxsXG4iLAotCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQljb3dsb19yZWFkY293cmF3KGNvd2RldiwgY293ZGV2LT5jb3doZWFkLCBNQVBVTklULCAobG9mZl90KSAwKTsKLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGV4aXN0aW5nIGZpbGUgaXMgcmVhbGx5IGEgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5tYWdpYyAhPSBDT1dNQUdJQykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIGhhcyBpbmNvcnJlY3QgZm9ybWF0XG4iLAotCQkJCWNvd2YpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgdGhlIGNvd2hlYWQgdmVyc2lvbiBvZiB0aGUgY293ZmlsZQotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT52ZXJzaW9uID4gQ09XVkVSU0lPTikgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjb3dmaWxlICVzIG5ld2VyIHRoYW4gdGhpcyBkcml2ZXJcbiIsCi0JCQkJY293Zik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCS8qCi0JCSoqIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXMgbm90IGEgcGFja2VkIGNvd2ZpbGUKLQkJKi8KLQkJaWYgKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dQQUNLRUQpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICJjb3dsb29wIC0gcGFja2VkIGNvd2ZpbGUgJXMgbm90IGFjY2VwdGVkXG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogdmVyaWZ5IGlmIHRoZSBjb3dmaWxlIGhhcyBiZWVuIHByb3Blcmx5IGNsb3NlZAotCQkqLwotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5mbGFncyAmIENPV0RJUlRZKSB7Ci0JCQkvKgotCQkJKiogY293ZmlsZSB3YXMgbm90IHByb3Blcmx5IGNsb3NlZDsKLQkJCSoqIGNoZWNrIGlmIGF1dG9tYXRpYyByZWNvdmVyeSBpcyByZXF1aXJlZAotCQkJKiogKGFjdHVhbCByZWNvdmVyeSB3aWxsIGJlIGRvbmUgbGF0ZXIgb24pCi0JCQkqLwotCQkJaWYgKCFhdXRvcmVjb3ZlcikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiY293bG9vcCAtIGNvd2ZpbGUgJXMgaXMgZGlydHkgIgotCQkJCSAgICAgICAiKG5vdCBwcm9wZXJseSBjbG9zZWQgYnkgcm1tb2Q/KVxuIiwKLQkJCQkJY293Zik7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICJjb3dsb29wIC0gcnVuIGNvd3JlcGFpciBvciBzcGVjaWZ5ICIKLQkJCQkgICAgICAgIidvcHRpb249cicgdG8gcmVjb3ZlclxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkqKiB2ZXJpZnkgaWYgdGhlIGNvd2ZpbGUgaXMgcmVhbGx5IHJlbGF0ZWQgdG8gdGhpcyByZG9maWxlCi0JCSovCi0JCWlmIChjb3dkZXYtPmNvd2hlYWQtPnJkb2Jsb2NrcyAhPSBjb3dkZXYtPm51bWJsb2NrcykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAJICAgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyAoc2l6ZSAlbGxkKSBub3QgcmVsYXRlZCAiCi0JCSAgICAgICAJICAgICAgICJ0byByZG9maWxlIChzaXplICVsbGQpXG4iLAotCQkJCWNvd2YsCi0JCQkJKGxvbmcgbG9uZyljb3dkZXYtPmNvd2hlYWQtPnJkb2Jsb2NrcyA8PE1VU0hJRlQsCi0JCQkJKGxvbmcgbG9uZyljb3dkZXYtPm51bWJsb2NrcyA8PE1VU0hJRlQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoY293ZGV2LT5jb3doZWFkLT5yZG9maW5nZXJwcmludCAhPSBjb3dkZXYtPmZpbmdlcnByaW50KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgIAkgICAgICJjb3dsb29wIC0gY293ZmlsZSAlcyBub3QgcmVsYXRlZCB0byByZG9maWxlICIKLQkJCSAgICAgIiAoZmluZ2VycHJpbnQgZXJyIC0gcmRvZmlsZSBtb2RpZmllZD8pXG4iLCBjb3dmKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJKiogbmV3IGNvd2ZpbGU6IGRldGVybWluZSB0aGUgbWluaW1hbCBzaXplIChjb3doZWFkK2JpdG1hcCkKLQkJKi8KLQkJb2Zmc2V0ID0gKGxvZmZfdCkgTUFQVU5JVCArIGNvd2Rldi0+bWFwc2l6ZSAtIDE7Ci0KLQkJaWYgKCBjb3dsb193cml0ZWNvd3Jhdyhjb3dkZXYsICIiLCAxLCBvZmZzZXQpIDwgMSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBjYW5ub3Qgc2V0IGNvd2ZpbGUgdG8gc2l6ZSAlbGxkXG4iLAotCQkJCW9mZnNldCsxKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyoKLQkJKiogcHJlcGFyZSBuZXcgY293aGVhZAotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPm1hZ2ljCQk9IENPV01BR0lDOwotCQljb3dkZXYtPmNvd2hlYWQtPnZlcnNpb24JPSBDT1dWRVJTSU9OOwotCQljb3dkZXYtPmNvd2hlYWQtPm1hcHVuaXQJPSBNQVBVTklUOwotCQljb3dkZXYtPmNvd2hlYWQtPm1hcHNpemUJPSBjb3dkZXYtPm1hcHNpemU7Ci0JCWNvd2Rldi0+Y293aGVhZC0+cmRvYmxvY2tzCT0gY293ZGV2LT5udW1ibG9ja3M7Ci0JCWNvd2Rldi0+Y293aGVhZC0+cmRvZmluZ2VycHJpbnQJPSBjb3dkZXYtPmZpbmdlcnByaW50OwotCQljb3dkZXYtPmNvd2hlYWQtPmNvd3VzZWQJPSAwOwotCi0JCS8qCi0JCSoqIGNhbGN1bGF0ZSBzdGFydCBvZmZzZXQgb2YgZGF0YSBpbiBjb3dmaWxlLAotCQkqKiByb3VuZGVkIHVwIHRvIG11bHRpcGxlIG9mIDRLIHRvIGF2b2lkCi0JCSoqIHVubmVjZXNzYXJ5IGRpc2stdXNhZ2UgZm9yIHdyaXR0ZW4gZGF0YWJsb2NrcyBpbgotCQkqKiB0aGUgc3BhcnNlZCBjb3dmaWxlIG9uIGUuZy4gNEsgZmlsZXN5c3RlbXMKLQkJKi8KLQkJY293ZGV2LT5jb3doZWFkLT5kb2Zmc2V0ID0KLQkJCSgoTUFQVU5JVCtjb3dkZXYtPm1hcHNpemUrNDA5NSk+PjEyKTw8MTI7Ci0JfQotCi0JY293ZGV2LT5jb3doZWFkLT5mbGFncwk9IDA7Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVzZXJ2ZSBzcGFjZSBiaXRtYXAuLi4uXG4iKTsKLQotCS8qCi0JKiogcmVzZXJ2ZSBzcGFjZSBpbiBtZW1vcnkgZm9yIHRoZSBlbnRpcmUgYml0bWFwIGFuZAotCSoqIGZpbGwgaXQgd2l0aCB0aGUgYml0bWFwLWRhdGEgZnJvbSBkaXNrOyB0aGUgZW50aXJlCi0JKiogYml0bWFwIGlzIGFsbG9jYXRlZCBpbiBzZXZlcmFsIGNodW5rcyBiZWNhdXNlIGttYWxsb2MKLQkqKiBoYXMgcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyB0aGUgYWxsb3dlZCBzaXplIHBlciBrbWFsbG9jCi0JKi8KLQljb3dkZXYtPm1hcGNvdW50ID0gKGNvd2Rldi0+bWFwc2l6ZStNQVBDSFVOS1NaLTEpL01BUENIVU5LU1o7Ci0KLQkvKgotCSoqIHRoZSBzaXplIG9mIGV2ZXJ5IGJpdG1hcCBjaHVuayB3aWxsIGJlIE1BUENIVU5LU1ogYnl0ZXMsIGV4Y2VwdCBmb3IKLQkqKiB0aGUgbGFzdCBiaXRtYXAgY2h1bms6IGNhbGN1bGF0ZSByZW1haW5pbmcgc2l6ZSBmb3IgdGhpcyBjaHVuawotCSovCi0JaWYgKGNvd2Rldi0+bWFwc2l6ZSAlIE1BUENIVU5LU1ogPT0gMCkKLQkJY293ZGV2LT5tYXByZW1haW4gPSBNQVBDSFVOS1NaOwotCWVsc2UKLQkJY293ZGV2LT5tYXByZW1haW4gPSBjb3dkZXYtPm1hcHNpemUgJSBNQVBDSFVOS1NaOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSBhbGwgcG9pbnRlcnMgZm9yIHRoZSBiaXRtYXAtY2h1bmtzCi0JKiogKGluaXRpYWxpemUgYXJlYSB3aXRoIHplcm9lcyB0byBhbGxvdyBwcm9wZXIgdW5kbykKLQkqLwotCWNvd2Rldi0+bWFwY2FjaGUgPSBrbWFsbG9jKGNvd2Rldi0+bWFwY291bnQgKiBzaXplb2YoY2hhciAqKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjb3dkZXYtPm1hcGNhY2hlKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jYXRlIHNwYWNlIGZvciBiaXRtYXAgcHRyc1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1lbXNldChjb3dkZXYtPm1hcGNhY2hlLCAwLCBjb3dkZXYtPm1hcGNvdW50ICogc2l6ZW9mKGNoYXIgKikpOwotCi0JLyoKLQkqKiBhbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSB0aGUgYml0bWFwLWNodW5rcyB0aGVtc2VsdmVzCi0JKi8KLQlmb3IgKGk9MDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7IGkrKykgewotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJKihjb3dkZXYtPm1hcGNhY2hlK2kpID0ga21hbGxvYyhNQVBDSFVOS1NaLCBHRlBfS0VSTkVMKTsKLQkJZWxzZQotCQkJKihjb3dkZXYtPm1hcGNhY2hlK2kpID0ga21hbGxvYyhjb3dkZXYtPm1hcHJlbWFpbiwKLQkJCQkJCSAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwotCi0JCWlmICgqKGNvd2Rldi0+bWFwY2FjaGUraSkgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gbm8gc3BhY2UgZm9yIGJpdG1hcGNodW5rICVsZCIKLQkJCQkJIiB0b3RtYXBzej0lbGQsIG1hcGNudD0lZCBtYXB1bml0PSVkXG4iLAotCQkJCQlpLCBjb3dkZXYtPm1hcHNpemUsIGNvd2Rldi0+bWFwY291bnQsCi0JCQkJCU1BUFVOSVQpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQl9Ci0KLQlERUJVR1AoRENPVyJjb3dsb29wIC0gcmVhZCBiaXRtYXAgZnJvbSBjb3cuLi4uXG4iKTsKLQotCS8qCi0JKiogcmVhZCB0aGUgZW50aXJlIGJpdG1hcCBmcm9tIHRoZSBjb3dmaWxlIGludG8gdGhlIGluLW1lbW9yeSBjYWNoZTsKLQkqKiBjb3VudCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGFyZSBpbiB1c2UgYWxyZWFkeQotCSoqIChzdGF0aXN0aWNhbCBwdXJwb3NlcykKLQkqLwotCWZvciAoaT0wLCBvZmZzZXQ9TUFQVU5JVDsgaSA8IGNvd2Rldi0+bWFwY291bnQ7Ci0JCQkJCWkrKywgb2Zmc2V0Kz1NQVBDSFVOS1NaKSB7Ci0JCXVuc2lnbmVkIGxvbmcJbnVtYnl0ZXM7Ci0KLQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCS8qCi0JCQkqKiBmdWxsIGJpdG1hcCBjaHVuawotCQkJKi8KLQkJCW51bWJ5dGVzID0gTUFQQ0hVTktTWjsKLQkJZWxzZQotCQkJLyoKLQkJCSoqIGxhc3QgYml0bWFwIGNodW5rOiBtaWdodCBiZSBwYXJ0bHkgZmlsbGVkCi0JCQkqLwotCQkJbnVtYnl0ZXMgPSBjb3dkZXYtPm1hcHJlbWFpbjsKLQotCQljb3dsb19yZWFkY293cmF3KGNvd2RldiwgKihjb3dkZXYtPm1hcGNhY2hlK2kpLAotCQkJCQkJCW51bWJ5dGVzLCBvZmZzZXQpOwotCX0KLQotCS8qCi0JKiogaWYgdGhlIGNvd2ZpbGUgd2FzIGRpcnR5IGFuZCBhdXRvbWF0aWMgcmVjb3ZlcnkgaXMgcmVxdWlyZWQsCi0JKiogcmVjb25zdHJ1Y3QgYSBwcm9wZXIgYml0bWFwIGluIG1lbW9yeSBub3cKLQkqLwotCWlmIChjb3dkZXYtPmNvd2hlYWQtPmZsYWdzICYgQ09XRElSVFkpIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nCWJsb2NrbnVtOwotCQljaGFyCQkJZGF0YWJ1ZltNQVBVTklUXTsKLQkJdW5zaWduZWQgbG9uZwkJbWFwbnVtLCBtYXBieXRlLCBtYXBiaXQ7Ci0KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gcmVjb3ZlciBkaXJ0eSBjb3dmaWxlICVzLi4uLlxuIiwKLQkJCQkJCQljb3dmKTsKLQotCQkvKgotCQkqKiByZWFkIGFsbCBkYXRhIGJsb2NrcwotCQkqLwotCQlmb3IgKGJsb2NrbnVtPTAsIHJ2PTEsIG9mZnNldD0wOwotCQkJY293bG9fcmVhZGNvdyhjb3dkZXYsIGRhdGFidWYsIE1BUFVOSVQsIG9mZnNldCkgPiAwOwotCQkJYmxvY2tudW0rKywgb2Zmc2V0ICs9IE1BUFVOSVQpIHsKLQotCQkJLyoKLQkJCSoqIGlmIHRoaXMgZGF0YWJsb2NrIGNvbnRhaW5zIHJlYWwgZGF0YSAobm90IGJpbmFyeQotCQkJKiogemVyb2VzKSwgc2V0IHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgYml0bWFwCi0JCQkqLwotCQkJaWYgKCBtZW1jbXAoZGF0YWJ1ZiwgYWxsemVyb2VzLCBNQVBVTklUKSA9PSAwKQotCQkJCWNvbnRpbnVlOwotCi0JCQltYXBudW0gID0gQ0FMQ01BUCAoYmxvY2tudW0pOwotCQkJbWFwYnl0ZSA9IENBTENCWVRFKGJsb2NrbnVtKTsKLQkJCW1hcGJpdCAgPSBDQUxDQklUIChibG9ja251bSk7Ci0KLQkJCSooKihjb3dkZXYtPm1hcGNhY2hlK21hcG51bSkrbWFwYnl0ZSkgfD0gKDE8PG1hcGJpdCk7Ci0JCX0KLQotCQlwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBjb3dmaWxlIHJlY292ZXJ5IGNvbXBsZXRlZFxuIik7Ci0JfQotCi0JLyoKLQkqKiBjb3VudCBhbGwgYml0cyBzZXQgaW4gdGhlIGJpdG1hcHMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzCi0JKi8KLQlmb3IgKGk9MCwgY293ZGV2LT5ucmNvd2Jsb2NrcyA9IDA7IGkgPCBjb3dkZXYtPm1hcGNvdW50OyBpKyspIHsKLQkJbG9uZwludW1ieXRlczsKLQkJY2hhcgkqcDsKLQotCQlpZiAoaSA8IChjb3dkZXYtPm1hcGNvdW50LTEpKQotCQkJbnVtYnl0ZXMgPSBNQVBDSFVOS1NaOwotCQllbHNlCi0JCQludW1ieXRlcyA9IGNvd2Rldi0+bWFwcmVtYWluOwotCi0JCXAgPSAqKGNvd2Rldi0+bWFwY2FjaGUraSk7Ci0KLQkJZm9yIChudW1ieXRlcy0tOyBudW1ieXRlcyA+PSAwOyBudW1ieXRlcy0tLCBwKyspIHsKLQkJCS8qCi0JCQkqKiBmb3Igb25seSBlaWdodCBjaGVja3MgdGhlIGZvbGxvd2luZyBjb25zdHJ1Y3Rpb24KLQkJCSoqIGlzIGZhc3RlciB0aGFuIGEgbG9vcC1jb25zdHJ1Y3Rpb24KLQkJCSovCi0JCQlpZiAoKCpwKSAmIDB4MDEpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgwMikJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDA0KQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4MDgpCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHgxMCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQkJaWYgKCgqcCkgJiAweDIwKQljb3dkZXYtPm5yY293YmxvY2tzKys7Ci0JCQlpZiAoKCpwKSAmIDB4NDApCWNvd2Rldi0+bnJjb3dibG9ja3MrKzsKLQkJCWlmICgoKnApICYgMHg4MCkJY293ZGV2LT5ucmNvd2Jsb2NrcysrOwotCQl9Ci0JfQotCi0JLyoKLQkqKiBjb25zaXN0ZW5jeS1jaGVjayBmb3IgbnVtYmVyIG9mIGJpdHMgc2V0IGluIGJpdG1hcAotCSovCi0JaWYgKCAhKGNvd2Rldi0+Y293aGVhZC0+ZmxhZ3MgJiBDT1dESVJUWSkgJiYKLQkgICAgKGNvd2Rldi0+Y293aGVhZC0+Y293dXNlZCAhPSBjb3dkZXYtPm5yY293YmxvY2tzKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjb3dsb29wIC0gaW5jb25zaXN0ZW50IGNvd2ZpbGUgYWRtaVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotKiogdW5kbyBtZW1vcnkgYWxsb2NzIGFuZCBmaWxlIG9wZW5zIGlzc3VlZCBzbyBmYXIKLSoqIHJlbGF0ZWQgdG8gdGhlIGNvd2ZpbGUKLSovCi1zdGF0aWMgdm9pZAotY293bG9fdW5kb19vcGVuY293KHN0cnVjdCBjb3dsb29wX2RldmljZSAqY293ZGV2KQotewotCWludAlpOwotCi0JaWYgKGNvd2Rldi0+bWFwY2FjaGUpIHsKLQkJZm9yIChpPTA7IGkgPCBjb3dkZXYtPm1hcGNvdW50OyBpKyspIHsKLQkJCWlmICgqKGNvd2Rldi0+bWFwY2FjaGUraSkgIT0gTlVMTCkKLQkJCQlrZnJlZSggKihjb3dkZXYtPm1hcGNhY2hlK2kpICk7Ci0JCX0KLQotCQlrZnJlZShjb3dkZXYtPm1hcGNhY2hlKTsKLQl9Ci0KLQlpZiAoY293ZGV2LT5jb3doZWFkKQotCQlrZnJlZShjb3dkZXYtPmNvd2hlYWQpOwotCi0JaWYgKCAoY293ZGV2LT5zdGF0ZSAmIENPV0NPV09QRU4pICYmIChjb3dkZXYtPmNvd2ZwKSApCi0gIAkJZmlscF9jbG9zZShjb3dkZXYtPmNvd2ZwLCAwKTsKLQotCS8qCi0JKiogbWFyayBjb3dmaWxlIGNsb3NlZAotCSovCi0JY293ZGV2LT5zdGF0ZSAmPSB+Q09XQ09XT1BFTjsKLX0KLQotLyoKLSoqIGZsdXNoIHRoZSBlbnRpcmUgYml0bWFwIGFuZCB0aGUgY293aGVhZCAoY2xlYW4pIHRvIHRoZSBjb3dmaWxlCi0qKgotKiogbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgY293ZGV2aWNlcy1sb2NrIHNldAotKi8KLXN0YXRpYyB2b2lkCi1jb3dsb19zeW5jKHZvaWQpCi17Ci0JaW50CQkJaSwgbWlub3I7Ci0JbG9mZl90CQkJb2Zmc2V0OwotCXN0cnVjdCBjb3dsb29wX2RldmljZQkqY293ZGV2OwotCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7ICBtaW5vcisrKSB7Ci0JCWNvd2RldiA9IGNvd2RldmFsbFttaW5vcl07Ci0JCWlmICggISAoY293ZGV2LT5zdGF0ZSAmIENPV1JXQ09XT1BFTikgKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpPTAsIG9mZnNldD1NQVBVTklUOyBpIDwgY293ZGV2LT5tYXBjb3VudDsKLQkJCQkJaSsrLCBvZmZzZXQgKz0gTUFQQ0hVTktTWikgewotCQkJdW5zaWduZWQgbG9uZwludW1ieXRlczsKLQotCQkJaWYgKGkgPCAoY293ZGV2LT5tYXBjb3VudC0xKSkKLQkJCQkvKgotCQkJCSoqIGZ1bGwgYml0bWFwIGNodW5rCi0JCQkJKi8KLQkJCQludW1ieXRlcyA9IE1BUENIVU5LU1o7Ci0JCQllbHNlCi0JCQkJLyoKLQkJCQkqKiBsYXN0IGJpdG1hcCBjaHVuazogbWlnaHQgYmUgcGFydGx5IGZpbGxlZAotCQkJCSovCi0JCQkJbnVtYnl0ZXMgPSBjb3dkZXYtPm1hcHJlbWFpbjsKLQotCQkJREVCVUdQKERDT1cKLQkJCSAgICAgICAiY293bG9vcCAtIGZsdXNoaW5nIGJpdG1hcCAlMmQgKCUzbGQgS2IpXG4iLAotCQkJCQkJCWksIG51bWJ5dGVzLzEwMjQpOwotCi0JCQlpZiAoY293bG9fd3JpdGVjb3dyYXcoY293ZGV2LCAqKGNvd2Rldi0+bWFwY2FjaGUraSksCi0JCQkJCQludW1ieXRlcywgb2Zmc2V0KSA8IG51bWJ5dGVzKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkqKiBmbHVzaCBjbGVhbiB1cC10by1kYXRlIGNvd2hlYWQgdG8gY293ZmlsZQotCQkqLwotCQljb3dkZXYtPmNvd2hlYWQtPmNvd3VzZWQJID0gY293ZGV2LT5ucmNvd2Jsb2NrczsKLQkJY293ZGV2LT5jb3doZWFkLT5mbGFncwkJJj0gfkNPV0RJUlRZOwotCi0JCURFQlVHUChEQ09XICJjb3dsb29wIC0gZmx1c2hpbmcgY293aGVhZCAoJTNkIEtiKVxuIiwKLQkJCQkJCQlNQVBVTklULzEwMjQpOwotCi0JCWNvd2xvX3dyaXRlY293cmF3KGNvd2RldiwgY293ZGV2LT5jb3doZWFkLCBNQVBVTklULCAobG9mZl90KSAwKTsKLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1vZHVsZSBsb2FkaW5nL3VubG9hZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSoqIGNhbGxlZCBkdXJpbmcgaW5zbW9kL21vZHByb2JlCi0qLwotc3RhdGljIGludCBfX2luaXQKLWNvd2xvX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JaW50CXJ2OwotCWludAltaW5vciwgdXB0b2Nvd3M7Ci0KLSAgICAgICAgcmV2aXNpb25bc2l6ZW9mIHJldmlzaW9uIC0gM10gPSAnXDAnOwotCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiY293bG9vcCAtIChDKSAyMDA5IEFUQ29tcHV0aW5nLm5sIC0gdmVyc2lvbjogJXNcbiIsICZyZXZpc2lvblsxMV0pOwotICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgImNvd2xvb3AgLSBpbmZvOiB3d3cuQVRDb21wdXRpbmcubmwvY293bG9vcFxuIik7Ci0KLQltZW1zZXQoYWxsemVyb2VzLCAwLCBNQVBVTklUKTsKLQotCS8qCi0JKiogU2V0dXAgYWRtaW5pc3RyYXRpb24gZm9yIGFsbCBwb3NzaWJsZSBjb3dkZXZpY2VzLgotICAgICAgICAqKiBOb3RlIHRoYXQgdGhlaXIgbWlub3IgbnVtYmVycyBnbyBmcm9tIDAgdG8gTUFYQ09XUy0xIGluY2x1c2l2ZQotICAgICAgICAqKiBhbmQgbWlub3IgPT0gTUFYQ09XUy0xIGlzIHJlc2VydmVkIGZvciB0aGUgY29udHJvbCBkZXZpY2UuCi0JKi8KLQlpZiAoKG1heGNvd3MgPCAxKSB8fCAobWF4Y293cyA+IE1BWENPV1MpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gbWF4Y293cyBleGNlZWRzIG1heGltdW0gb2YgJWRcbiIsIE1BWENPV1MpOwotCi0gICAgICAgICAgICAgICAgbWF4Y293cyA9IERGTENPV1M7Ci0gICAgICAgIH0KLQotCS8qIGFsbG9jYXRlIHJvb20gZm9yIGEgdGFibGUgd2l0aCBhIHBvaW50ZXIgdG8gZWFjaCBjb3dsb29wX2RldmljZTogKi8KLSAgICAgICAgaWYgKCAoY293ZGV2YWxsID0ga21hbGxvYyhtYXhjb3dzICogc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKSwKLQkJCQkJCQlHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAgImNvd2xvb3AgLSBjYW4gbm90IGFsbG9jIHRhYmxlIGZvciAlZCBkZXZzXG4iLCBtYXhjb3dzKTsKLQkJdXB0b2Nvd3MgPSAwOwotCQlydiA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQltZW1zZXQoY293ZGV2YWxsLCAwLCBtYXhjb3dzICogc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSAqKSk7Ci0JLyogdGhlbiBob29rIGFuIGFjdHVhbCBjb3dsb29wX2RldmljZSBzdHJ1Y3QgdG8gZWFjaCBwb2ludGVyOiAqLwotCWZvciAobWlub3I9MDsgbWlub3IgPCBtYXhjb3dzOyBtaW5vcisrKSB7Ci0JCWlmICgoY293ZGV2YWxsW21pbm9yXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb3dsb29wX2RldmljZSksCi0JCQkJCQlHRlBfS0VSTkVMKSkgPT0gTlVMTCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgICAgICJjb3dsb29wIC0gY2FuIG5vdCBhbGxvYyBhZG1pbi1zdHJ1Y3QgZm9yIGRldiBubyAlZFxuIiwgbWlub3IpOwotCi0JCQl1cHRvY293cyA9IG1pbm9yOyAvKiB0aGlzIGlzIGhvdyBmYXIgd2UgZ290Li4uLiAqLwotCQkJcnYgPSAtRU5PTUVNOwotCQkJZ290byBlcnJvcl9vdXQ7Ci0JCX0KLSAgICAgICAgCW1lbXNldChjb3dkZXZhbGxbbWlub3JdLCAwLCBzaXplb2Yoc3RydWN0IGNvd2xvb3BfZGV2aWNlKSk7Ci0JfQotCXVwdG9jb3dzID0gbWF4Y293czsgLyogd2UgZ290IGFsbCBkZXZpY2VzICovCi0KLQlzZW1hX2luaXQoJmNvd2RldmxvY2ssIDEpOwotCi0JLyoKLQkqKiByZWdpc3RlciBjb3dsb29wIG1vZHVsZQotCSovCi0JaWYgKCByZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgImNvd2xvb3AgLSB1bmFibGUgdG8gZ2V0IG1ham9yICVkIGZvciBjb3dsb29wXG4iLCBDT1dNQUpPUik7Ci0JCXJ2ID0gLUVJTzsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCi0JLyoKLQkqKiBjcmVhdGUgYSBkaXJlY3RvcnkgYmVsb3cgL3Byb2MgdG8gYWxsb2NhdGUgYSBmaWxlCi0JKiogZm9yIGVhY2ggY293ZGV2aWNlIHRoYXQgaXMgYWxsb2NhdGVkIGxhdGVyIG9uCi0JKi8KLQljb3dsb19wcm9jZGlyID0gcHJvY19ta2RpcigiY293IiwgTlVMTCk7Ci0KLQkvKgotCSoqIGNoZWNrIGlmIGEgY293ZGV2aWNlIGhhcyB0byBiZSBvcGVuZWQgZHVyaW5nIGluc21vZC9tb2Rwcm9iZTsKLQkqKiB0d28gcGFyYW1ldGVycyBzaG91bGQgYmUgc3BlY2lmaWVkIHRoZW46IHJkb2ZpbGU9IGFuZCBjb3dmaWxlPQotCSovCi0JaWYoIChyZG9maWxlWzBdICE9ICdcMCcpICYmIChjb3dmaWxlWzBdICE9ICdcMCcpICkgewotCQljaGFyCSpwbyA9IG9wdGlvbjsKLQkJaW50CXdhbnRyZWNvdmVyID0gMDsKLQotCQkvKgotCQkqKiBjaGVjayBpZiBhdXRvbWF0aWMgcmVjb3ZlcnkgaXMgd2FudGVkCi0JCSovCi0JCXdoaWxlICgqcG8pIHsKLQkJCWlmICgqcG8gPT0gJ3InKSB7Ci0JCQkJd2FudHJlY292ZXIgPSAxOwotCQkJCWJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJcG8rKzsKLQkJfQotCi0JCS8qCi0JCSoqIG9wZW4gbmV3IGNvd2RldmljZSB3aXRoIG1pbm9yIG51bWJlciAwCi0JCSovCi0JCWlmICggKHJ2ID0gY293bG9fb3BlbnBhaXIocmRvZmlsZSwgY293ZmlsZSwgd2FudHJlY292ZXIsIDApKSkgewotCQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0gICAgICAgIH0gZWxzZSB7Ci0JCS8qCi0JCSoqIGNoZWNrIGlmIG9ubHkgb25lIHBhcmFtZXRlciBoYXMgYmVlbiBzcGVjaWZpZWQKLQkJKi8KLQkJaWYoIChyZG9maWxlWzBdICE9ICdcMCcpIHx8IChjb3dmaWxlWzBdICE9ICdcMCcpICkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgImNvd2xvb3AgLSBvbmx5IG9uZSBmaWxlbmFtZSBzcGVjaWZpZWRcbiIpOwotCQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkJdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQkJCXJ2ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3Jfb3V0OwotCQl9Ci0JfQotCi0JLyoKLQkqKiBhbGxvY2F0ZSBmYWtlIGRpc2sgYXMgY29udHJvbCBjaGFubmVsIHRvIGhhbmRsZSB0aGUgcmVxdWVzdHMKLQkqKiB0byBhY3RpdmF0ZSBhbmQgZGVhY3RpdmF0ZSBjb3dkZXZpY2VzIGR5bmFtaWNhbGx5Ci0JKi8KLQlpZiAoIShjb3djdGxnZCA9IGFsbG9jX2Rpc2soMSkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjb3dsb29wIC0gdW5hYmxlIHRvIGFsbG9jX2Rpc2sgZm9yIGNvd2N0bFxuIik7Ci0KLQkJcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCQkodm9pZCkgY293bG9fY2xvc2VwYWlyKGNvd2RldmFsbFswXSk7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KENPV01BSk9SLCBERVZJQ0VfTkFNRSk7Ci0JCXJ2ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2luaXQoJmNvd2N0bHJxbG9jayk7Ci0JY293Y3RsZ2QtPm1ham9yICAgICAgICA9IENPV01BSk9SOwotCWNvd2N0bGdkLT5maXJzdF9taW5vciAgPSBDT1dDVEw7Ci0JY293Y3RsZ2QtPm1pbm9ycyAgICAgICA9IDE7Ci0JY293Y3RsZ2QtPmZvcHMgICAgICAgICA9ICZjb3dsb19mb3BzOwotCWNvd2N0bGdkLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCS8qIHRoZSBkZXZpY2UgaGFzIGNhcGFjaXR5IDAsIHNvIHRoZXJlIHdpbGwgYmUgbm8gcS1yZXF1ZXN0cyAqLwotCWNvd2N0bGdkLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKE5VTEwsICZjb3djdGxycWxvY2spOwotCXNwcmludGYoY293Y3RsZ2QtPmRpc2tfbmFtZSwgImNvd2N0bCIpOwotCXNldF9jYXBhY2l0eShjb3djdGxnZCwgMCk7Ci0KLQlhZGRfZGlzayhjb3djdGxnZCk7Ci0KLSAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gbnVtYmVyIG9mIGNvbmZpZ3VyZWQgY293ZGV2aWNlczogJWRcbiIsCi0JCQkJCQkJCW1heGNvd3MpOwotCWlmIChyZG9maWxlWzBdICE9ICdcMCcpIHsKLQkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gaW5pdGlhbGl6ZWQgb24gcmRvZmlsZT0lc1xuIiwKLQkJCQkJCQkJcmRvZmlsZSk7Ci0JfSBlbHNlIHsKLQkgICAgcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gaW5pdGlhbGl6ZWQgd2l0aG91dCByZG9maWxlIHlldFxuIik7Ci0JfQotCXJldHVybiAwOwotCi1lcnJvcl9vdXQ6Ci0JZm9yIChtaW5vcj0wOyBtaW5vciA8IHVwdG9jb3dzIDsgbWlub3IrKykgewotCQlrZnJlZShjb3dkZXZhbGxbbWlub3JdKTsKLQl9Ci0Ja2ZyZWUoY293ZGV2YWxsKTsKLQlyZXR1cm4gcnY7Ci19Ci0KLS8qCi0qKiBjYWxsZWQgZHVyaW5nIHJtbW9kCi0qLwotc3RhdGljIHZvaWQgX19leGl0Ci1jb3dsb19jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludAltaW5vcjsKLQotCS8qCi0JKiogZmx1c2ggYml0bWFwcyBhbmQgY293aGVhZHMgdG8gdGhlIGNvd2ZpbGVzCi0JKi8KLQlkb3duKCZjb3dkZXZsb2NrKTsKLQljb3dsb19zeW5jKCk7Ci0JdXAoJmNvd2RldmxvY2spOwotCi0JLyoKLQkqKiBjbG9zZSBhbGwgY293ZGV2aWNlcwotCSovCi0JZm9yIChtaW5vcj0wOyBtaW5vciA8IG1heGNvd3M7ICBtaW5vcisrKQotCQkodm9pZCkgY293bG9fY2xvc2VwYWlyKGNvd2RldmFsbFttaW5vcl0pOwotCi0JdW5yZWdpc3Rlcl9ibGtkZXYoQ09XTUFKT1IsIERFVklDRV9OQU1FKTsKLQotCS8qCi0JKiogZ2V0IHJpZCBvZiAvcHJvYy9jb3cgYW5kIHVucmVnaXN0ZXIgdGhlIGRyaXZlcgotCSovCi0JcmVtb3ZlX3Byb2NfZW50cnkoImNvdyIsIE5VTEwpOwotCi0JZm9yIChtaW5vciA9IDA7IG1pbm9yIDwgbWF4Y293czsgbWlub3IrKykgewotCQlrZnJlZShjb3dkZXZhbGxbbWlub3JdKTsKLQl9Ci0Ja2ZyZWUoY293ZGV2YWxsKTsKLQotCWRlbF9nZW5kaXNrKGNvd2N0bGdkKTsgIC8qIHJldmVydCB0aGUgYWxsb2NfZGlzaygpICovCi0JcHV0X2Rpc2sgICAoY293Y3RsZ2QpOyAgLyogcmV2ZXJ0IHRoZSBhZGRfZGlzaygpICAgKi8KLQlibGtfY2xlYW51cF9xdWV1ZShjb3djdGxnZC0+cXVldWUpOyAvKiBjbGVhbnVwIHRoZSBlbXB0eSBxdWV1ZSAqLwotCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjb3dsb29wIC0gdW5sb2FkZWRcbiIpOwotfQotCi1tb2R1bGVfaW5pdChjb3dsb19pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChjb3dsb19jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmggYi9kcml2ZXJzL3N0YWdpbmcvY293bG9vcC9jb3dsb29wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDRhMzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Nvd2xvb3AvY293bG9vcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSoqIERPIE5PVCBNT0RJRlkgVEhFU0UgVkFMVUVTICh3b3VsZCBtYWtlIG9sZCBjb3dmaWxlcyB1bnVzYWJsZSkKLSovCi0jZGVmaW5lCU1BUFVOSVQJCTEwMjQJCS8qIGJsb2Nrc2l6ZSBmb3IgYml0IGluIGJpdG1hcCAgICAgICAqLwotI2RlZmluZQlNVVNISUZUCQkxMAkJLyogYml0c2hpZnQgIGZvciBiaXQgaW4gYml0bWFwICAgICAgICovCi0jZGVmaW5lCU1VTUFTSwkJMHgzZmYJCS8qIGJpdG1hc2sgICBmb3IgYml0IGluIGJpdG1hcCAgICAgICAqLwotCi0jZGVmaW5lCUNPV01BR0lDCTB4NTc0ZjQzN2YJLyogYnl0ZS1zd2FwcGVkICc3ZiBDIE8gVycgICAgICAgICAgICovCi0jZGVmaW5lCUNPV0RJUlRZCTB4MDEKLSNkZWZpbmUJQ09XUEFDS0VECTB4MDIKLSNkZWZpbmUJQ09XVkVSU0lPTgkxCi0KLXN0cnVjdCBjb3doZWFkCi17Ci0JaW50CQltYWdpYzsJCS8qIGlkZW50aWZpZXMgYSBjb3dmaWxlICAgICAgICAgICAgICAqLwotCXNob3J0CQl2ZXJzaW9uOwkvKiB2ZXJzaW9uIG9mIGNvd2hlYWQgICAgICAgICAgICAgICAgKi8KLQlzaG9ydAkJZmxhZ3M7ICAgIAkvKiBmbGFncyBpbmRpY2F0aW5nIHN0YXR1cyAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCW1hcHVuaXQ7CS8qIGJsb2Nrc2l6ZSBwZXIgYml0IGluIGJpdG1hcCAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJbWFwc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBiaXRtYXAgKGJ5dGVzKSAgICAgICovCi0JdW5zaWduZWQgbG9uZwlkb2Zmc2V0OwkvKiBzdGFydC1vZmZzZXQgZGF0YWJsb2NrcyBpbiBjb3cgICAgKi8KLQl1bnNpZ25lZCBsb25nCXJkb2Jsb2NrczsJLyogc2l6ZSBvZiByZWxhdGVkIHJlYWQtb25seSBmaWxlICAgICovCi0JdW5zaWduZWQgbG9uZwlyZG9maW5nZXJwcmludDsJLyogZmluZ2VycHJpbnQgb2YgcmVhZC1vbmx5IGZpbGUgICAgICovCi0JdW5zaWduZWQgbG9uZwljb3d1c2VkOwkvKiBudW1iZXIgb2YgZGF0YWJsb2NrcyB1c2VkIGluIGNvdyAgKi8KLX07Ci0KLSNkZWZpbmUgQ09XREVWRElSCSIvZGV2L2Nvdy8iCi0jZGVmaW5lIENPV0RFVklDRQlDT1dERVZESVIgIiVsZCIKLSNkZWZpbmUgQ09XQ09OVFJPTAlDT1dERVZESVIgImN0bCIKLQotI2RlZmluZSBNQVhDT1dTCQkxMDI0Ci0jZGVmaW5lIENPV0NUTAkJKE1BWENPV1MtMSkJLyogbWlub3IgbnVtYmVyIG9mIC9kZXYvY293L2N0bCAgICAgKi8KLQotI2RlZmluZSBDT1dQUk9DRElSCSIvcHJvYy9jb3cvIgotI2RlZmluZSBDT1dQUk9DRklMRQlDT1dQUk9DRElSICIlZCIKLQotLyoKLSoqIGlvY3RsIHJlbGF0ZWQgc3R1ZmYKLSovCi0jZGVmaW5lIEFOWURFVgkJKCh1bnNpZ25lZCBsb25nKS0xKQotCi1zdHJ1Y3QgY293cGFpcgotewotCXVuc2lnbmVkIGNoYXIJKnJkb2ZpbGU7CS8qIHBhdGhuYW1lIG9mIHRoZSByZG9maWxlICAgICAgICAgICAqLwotCXVuc2lnbmVkIGNoYXIJKmNvd2ZpbGU7CS8qIHBhdGhuYW1lIG9mIHRoZSBjb3dmaWxlICAgICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0CXJkb2ZsZW47CS8qIGxlbmd0aCBvZiByZG9maWxlIHBhdGhuYW1lICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0CWNvd2ZsZW47CS8qIGxlbmd0aCBvZiBjb3dmaWxlIHBhdGhuYW1lICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJZGV2aWNlOwkJLyogcmVxdWVzdGVkL3JldHVybmVkIGRldmljZSBudW1iZXIgICovCi19OwotCi1zdHJ1Y3QgY293d2F0Y2gKLXsKLQlpbnQgICAgICAJZmxhZ3M7CQkvKiByZXF1ZXN0IGZsYWdzICAgICAgICAgICAgICAgICAgICAgKi8KLQl1bnNpZ25lZCBsb25nCWRldmljZTsJCS8qIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyICAgICAgICAgICAqLwotCXVuc2lnbmVkIGxvbmcJdGhyZXNob2xkOwkvKiBjb250aW51ZSBpZiBmcmVlIEtiIDwgdGhyZXNob2xkICAgKi8KLQl1bnNpZ25lZCBsb25nCXRvdGFsa2I7CS8qIHJldDogdG90YWwgZmlsZXN5c3RlbSBzaXplIChLYikgICAqLwotCXVuc2lnbmVkIGxvbmcJYXZhaWxrYjsJLyogcmV0OiBmcmVlICBmaWxlc3lzdGVtIHNpemUgKEtiKSAgICovCi19OwotCi0jZGVmaW5lCVdBVENIV0FJVAkweDAxCQkvKiBibG9jayB1bnRpbCB0aHJlc2hvbGQgcmVhY2hlZCAgICAgKi8KLQotI2RlZmluZQlDT1dTWU5DCQlfSU8gICgnQycsIDEpCi0jZGVmaW5lCUNPV01LUEFJUglfSU9XICgnQycsIDIsIHN0cnVjdCBjb3dwYWlyKQotI2RlZmluZQlDT1dSTVBBSVIJX0lPVyAoJ0MnLCAzLCB1bnNpZ25lZCBsb25nKQotI2RlZmluZQlDT1dXQVRDSAlfSU9XICgnQycsIDQsIHN0cnVjdCBjb3d3YXRjaCkKLSNkZWZpbmUJQ09XQ0xPU0UJX0lPVyAoJ0MnLCA1LCB1bnNpZ25lZCBsb25nKQotI2RlZmluZQlDT1dSRE9QRU4JX0lPVyAoJ0MnLCA2LCB1bnNpZ25lZCBsb25nKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCmluZGV4IGVlMTYwMTAuLmMyNGU0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2Rjb3JlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHEtPnF1ZXVlZGF0YTsKIAlpbnQgZXJyID0gLUVJTzsKIAotCWlmIChiaW9fZW1wdHlfYmFycmllcihiaW8pICYmICFxLT5wcmVwYXJlX2Rpc2NhcmRfZm4pIHsKKwlpZiAoYmlvX2VtcHR5X2JhcnJpZXIoYmlvKSAmJiAhYmxrX3F1ZXVlX2Rpc2NhcmQocSkpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhIGRpcnR5XlduaWNlIGhhY2ssIGJ1dCBpZiB3ZSBjb21wbGV0ZSB0aGlzCiAJCSAqIG9wZXJhdGlvbiB3aXRoIC1FT1BOT1RTVVBQIGxpa2UgaW50ZW5kZWQsIFhGUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggNjI5NGQzOC4uMmMzZDY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0yMjMsNyArMjIzLDcgQEAKIAogZXh0ZXJuIGlubGluZSB2b2lkIGFkZF8xMGJpdCh1MzIgKnYsIGludCBuKQogewotCSp2ID0gSU5ERVgxMCgqdiArIG4pOworCSp2ID0gSU5ERVgxMCgqdiArIG4pIHwgKCp2ICYgRVRfRE1BMTBfV1JBUCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCA4ZjJlOTFmLi4xMGUyMWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTExNzcsMTIgKzExNzcsMjAgQEAKIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKIHsKLQl1MzIgdiA9ICpmYnI7Ci0JYWRkXzEwYml0KCZ2LCAxKTsKLQlpZiAodiA+IGxpbWl0KQotCQl2ID0gKCpmYnIgJiB+RVRfRE1BMTBfTUFTSykgXiBFVF9ETUExMF9XUkFQOwotCSpmYnIgPSB2OwotCXJldHVybiB2OworICAgICAgICB1MzIgdiA9ICpmYnI7CisgICAgICAgIHYrKzsKKyAgICAgICAgLyogVGhpcyB3b3JrcyBmb3IgYWxsIGNhc2VzIHdoZXJlIGxpbWl0IDwgMTAyNC4gVGhlIDEwMjMgY2FzZQorICAgICAgICAgICB3b3JrcyBiZWNhdXNlIDEwMjMrKyBpcyAxMDI0IHdoaWNoIG1lYW5zIHRoZSBpZiBjb25kaXRpb24gaXMgbm90CisgICAgICAgICAgIHRha2VuIGJ1dCB0aGUgY2Fycnkgb2YgdGhlIGJpdCBpbnRvIHRoZSB3cmFwIGJpdCB0b2dnbGVzIHRoZSB3cmFwCisgICAgICAgICAgIHZhbHVlIGNvcnJlY3RseSAqLworICAgICAgICBpZiAoKHYgJiBFVF9ETUExMF9NQVNLKSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgdiAmPSB+RVRfRE1BMTBfTUFTSzsKKyAgICAgICAgICAgICAgICB2IF49IEVUX0RNQTEwX1dSQVA7CisgICAgICAgIH0KKyAgICAgICAgLyogRm9yIHRoZSAxMDIzIGNhc2UgKi8KKyAgICAgICAgdiAmPSAoRVRfRE1BMTBfTUFTS3xFVF9ETUExMF9XUkFQKTsKKyAgICAgICAgKmZiciA9IHY7CisgICAgICAgIHJldHVybiB2OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsTWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKaW5kZXggYTgzOWQ4Zi4uZmE5NzNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWxNZ210LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgX0NIQU5ORUxfTUdNVF9IXwogCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSAiUmluZ0J1ZmZlci5oIgogI2luY2x1ZGUgIlZtYnVzQ2hhbm5lbEludGVyZmFjZS5oIgogI2luY2x1ZGUgIlZtYnVzUGFja2V0Rm9ybWF0LmgiCkBAIC01NCw3ICs1NSw3IEBACiAJQ2hhbm5lbE1lc3NhZ2VWaWV3UmFuZ2VSZW1vdmUJCT0gMTgsCiAjZW5kaWYKIAlDaGFubmVsTWVzc2FnZUNvdW50Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHZtYnVzX2NoYW5uZWxfbWVzc2FnZV9oZWFkZXIgewogCWVudW0gdm1idXNfY2hhbm5lbF9tZXNzYWdlX3R5cGUgTWVzc2FnZVR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjLmMKaW5kZXggMTYxMGI4NC4uZDM4NGMwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2MuYwpAQCAtMTA1Miw3ICsxMDUyLDcgQEAKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm5ldERldmljZS0+UmVjZWl2ZVBhY2tldExpc3QpKSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0LCAmbGlzdEhlYWQpOworCQlsaXN0X21vdmVfdGFpbChuZXREZXZpY2UtPlJlY2VpdmVQYWNrZXRMaXN0Lm5leHQsICZsaXN0SGVhZCk7CiAJCWlmICgrK2NvdW50ID09IHZteGZlcnBhZ2VQYWNrZXQtPlJhbmdlQ291bnQgKyAxKQogCQkJYnJlYWs7CiAJfQpAQCAtMTA3MSw3ICsxMDcxLDcgQEAKIAkJLyogUmV0dXJuIGl0IHRvIHRoZSBmcmVlbGlzdCAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssIGZsYWdzKTsKIAkJZm9yIChpID0gY291bnQ7IGkgIT0gMDsgaS0tKSB7Ci0JCQlsaXN0X21vdmVfdGFpbCgmbGlzdEhlYWQsCisJCQlsaXN0X21vdmVfdGFpbChsaXN0SGVhZC5uZXh0LAogCQkJCSAgICAgICAmbmV0RGV2aWNlLT5SZWNlaXZlUGFja2V0TGlzdCk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0RGV2aWNlLT5yZWNlaXZlX3BhY2tldF9saXN0X2xvY2ssCkBAIC0xMDg1LDggKzEwODUsNyBAQAogCX0KIAogCS8qIFJlbW92ZSB0aGUgMXN0IHBhY2tldCB0byByZXByZXNlbnQgdGhlIHhmZXIgcGFnZSBwYWNrZXQgaXRzZWxmICovCi0JeGZlcnBhZ2VQYWNrZXQgPSBsaXN0X2VudHJ5KCZsaXN0SGVhZCwgc3RydWN0IHhmZXJwYWdlX3BhY2tldCwKLQkJCQkgICAgTGlzdEVudHJ5KTsKKwl4ZmVycGFnZVBhY2tldCA9IChzdHJ1Y3QgeGZlcnBhZ2VfcGFja2V0KilsaXN0SGVhZC5uZXh0OwogCWxpc3RfZGVsKCZ4ZmVycGFnZVBhY2tldC0+TGlzdEVudHJ5KTsKIAogCS8qIFRoaXMgaXMgaG93IG11Y2ggd2UgY2FuIHNhdGlzZnkgKi8KQEAgLTExMDIsOCArMTEwMSw3IEBACiAKIAkvKiBFYWNoIHJhbmdlIHJlcHJlc2VudHMgMSBSTkRJUyBwa3QgdGhhdCBjb250YWlucyAxIGV0aGVybmV0IGZyYW1lICovCiAJZm9yIChpID0gMDsgaSA8IChjb3VudCAtIDEpOyBpKyspIHsKLQkJbmV0dnNjUGFja2V0ID0gbGlzdF9lbnRyeSgmbGlzdEhlYWQsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0LAotCQkJCQkgIExpc3RFbnRyeSk7CisJCW5ldHZzY1BhY2tldCA9IChzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCopbGlzdEhlYWQubmV4dDsKIAkJbGlzdF9kZWwoJm5ldHZzY1BhY2tldC0+TGlzdEVudHJ5KTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBuZXR2c2MgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCmluZGV4IDRkMzkwYjIuLmRiZmJkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9UT0RPCkBAIC0xLDExICsxLDE3IEBACiBUT0RPOgogCS0gZml4IHJlbWFpbmluZyBjaGVja3BhdGNoIHdhcm5pbmdzIGFuZCBlcnJvcnMKKwktIHVzZSBvZiAvKiogd2hlbiBpdCBpcyBub3QgYSBrZXJuZWxkb2MgaGVhZGVyCiAJLSByZW1vdmUgUmluZ0J1ZmZlci5jIHRvIHVzIGluLWtlcm5lbCByaW5nYnVmZmVyIGZ1bmN0aW9ucyBpbnN0ZWFkLgogCS0gYXVkaXQgdGhlIHZtYnVzIHRvIHZlcmlmeSBpdCBpcyB3b3JraW5nIHByb3Blcmx5IHdpdGggdGhlCiAJICBkcml2ZXIgbW9kZWwKKwktIGNvbnZlcnQgdm1idXMgZHJpdmVyIGludGVyZmFjZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlcworICAgICAgICAgIHRvIGNvbnN0YW50LCBhLmsuYSB2bWJ1c19vcHMKIAktIHNlZSBpZiB0aGUgdm1idXMgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSBvdGhlciB2aXJ0dWFsIGJ1c3NlcwogCSAgaW4gdGhlIGtlcm5lbAogCS0gYXVkaXQgdGhlIG5ldHdvcmsgZHJpdmVyCisJICAtIHVzZSBleGlzdGluZyBuZXRfZGV2aWNlX3N0YXRzIHN0cnVjdCBpbiBuZXR3b3JrIGRldmljZQorCSAgLSBjaGVja2luZyBmb3IgY2FycmllciBpbnNpZGUgb3BlbiBpcyB3cm9uZywgbmV0d29yayBkZXZpY2UgQVBJCisgICAgICAgICAgICBjb25mdXNpb24/PwogCS0gYXVkaXQgdGhlIGJsb2NrIGRyaXZlcgogCS0gYXVkaXQgdGhlIHNjc2kgZHJpdmVyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuYwppbmRleCA4ZmU1NDNiLi4zYTQ3OTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9vc2QuaAppbmRleCA5NTA0NjA0Li5jZTA2NGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvb3NkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L29zZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIF9PU0RfSF8KICNkZWZpbmUgX09TRF9IXwogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qIERlZmluZXMgKi8KICNkZWZpbmUgQUxJR05fVVAodmFsdWUsIGFsaWduKQkoKCh2YWx1ZSkgJiAoYWxpZ24tMSkpID8JCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCA1ODIzMThmLi44OTRlZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC01MDcsMTIgKzUwNywxMiBAQAogCiAJY2hpbGRfZGV2aWNlX29iaiA9ICZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWNoaWxkX2RldmljZV9vYmotPmNvbnRleHQgPSBjb250ZXh0OwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlVHlwZSwgJnR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwotCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsICZpbnN0YW5jZSwKKwltZW1jcHkoJmNoaWxkX2RldmljZV9vYmotPmRldmljZVR5cGUsIHR5cGUsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOworCW1lbWNweSgmY2hpbGRfZGV2aWNlX29iai0+ZGV2aWNlSW5zdGFuY2UsIGluc3RhbmNlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKIAotCW1lbWNweSgmY2hpbGRfZGV2aWNlX2N0eC0+Y2xhc3NfaWQsICZ0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKLQltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgJmluc3RhbmNlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmNsYXNzX2lkLCB0eXBlLCBzaXplb2Yoc3RydWN0IGh2X2d1aWQpKTsKKwltZW1jcHkoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZV9pZCwgaW5zdGFuY2UsIHNpemVvZihzdHJ1Y3QgaHZfZ3VpZCkpOwogCiAJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKIApAQCAtNTM3LDE4ICs1MzcsNyBAQAogCURQUklOVF9EQkcoVk1CVVNfRFJWLCAiY2hpbGQgZGV2aWNlICglcCkgcmVnaXN0ZXJpbmciLAogCQkgICBjaGlsZF9kZXZpY2VfY3R4KTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHJlZ2lzdGVyZWQgYWxyZWFkeSAqLwotCWlmIChzdHJsZW4oZGV2X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSkpICE9IDApIHsKLQkJRFBSSU5UX0VSUihWTUJVU19EUlYsCi0JCQkgICAiY2hpbGQgZGV2aWNlICglcCkgYWxyZWFkeSByZWdpc3RlcmVkIC0gYnVzaWQgJXMiLAotCQkJICAgY2hpbGRfZGV2aWNlX2N0eCwKLQkJCSAgIGRldl9uYW1lKCZjaGlsZF9kZXZpY2VfY3R4LT5kZXZpY2UpKTsKLQotCQlyZXQgPSAtMTsKLQkJZ290byBDbGVhbnVwOwotCX0KLQotCS8qIFNldCB0aGUgZGV2aWNlIGJ1cyBpZC4gT3RoZXJ3aXNlLCBkZXZpY2VfcmVnaXN0ZXIoKXdpbGwgZmFpbC4gKi8KKwkvKiBTZXQgdGhlIGRldmljZSBuYW1lLiBPdGhlcndpc2UsIGRldmljZV9yZWdpc3RlcigpIHdpbGwgZmFpbC4gKi8KIAlkZXZfc2V0X25hbWUoJmNoaWxkX2RldmljZV9jdHgtPmRldmljZSwgInZtYnVzXzBfJWQiLAogCQkgICAgIGF0b21pY19pbmNfcmV0dXJuKCZkZXZpY2VfbnVtKSk7CiAKQEAgLTU3Myw3ICs1NjIsNiBAQAogCQlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJjaGlsZCBkZXZpY2UgKCVwKSByZWdpc3RlcmVkIiwKIAkJCSAgICAmY2hpbGRfZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAotQ2xlYW51cDoKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTYyMyw4ICs2MTEsNiBAQAogc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7Ci0JaW50IGkgPSAwOwotCWludCBsZW4gPSAwOwogCWludCByZXQ7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKQEAgLTY0NCw4ICs2MzAsNiBAQAogCQkgICAgZGV2aWNlX2N0eC0+Y2xhc3NfaWQuZGF0YVsxNF0sCiAJCSAgICBkZXZpY2VfY3R4LT5jbGFzc19pZC5kYXRhWzE1XSk7CiAKLQllbnYtPmVudnBfaWR4ID0gaTsKLQllbnYtPmJ1ZmxlbiA9IGxlbjsKIAlyZXQgPSBhZGRfdWV2ZW50X3ZhcihlbnYsICJWTUJVU19ERVZJQ0VfQ0xBU1NfR1VJRD17IgogCQkJICAgICAiJTAyeCUwMnglMDJ4JTAyeC0lMDJ4JTAyeC0lMDJ4JTAyeC0iCiAJCQkgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeH0iLApAQCAtNjkxLDggKzY3NSw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWVudi0+ZW52cFtlbnYtPmVudnBfaWR4XSA9IE5VTEw7Ci0KIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL0tjb25maWcKaW5kZXggYmViOTlhNS4uNDU4NjY1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBJSU8KIAl0cmlzdGF0ZSAiSW5kdXN0cmlhbCBJL08gc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFTMzkwCiAJLS0taGVscC0tLQogCSAgVGhlIGluZHVzdHJpYWwgSS9PIHN1YnN5c3RlbSBwcm92aWRlcyBhIHVuaWZpZWQgZnJhbWV3b3JrIGZvcgogCSAgZHJpdmVycyBmb3IgbWFueSBkaWZmZXJlbnQgdHlwZXMgb2YgZW1iZWRkZWQgc2Vuc29ycyB1c2luZyBhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggMWZhMThmMi4uNzY4ZjQ0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlICJpaW8uaCIKICNpbmNsdWRlICJ0cmlnZ2VyX2NvbnN1bWVyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2xpZ2h0L3RzbDI1NjEuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCmluZGV4IGVhOGE1ZWYuLmZjMjEwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vbGlnaHQvdHNsMjU2MS5jCkBAIC0yMzksMTAgKzIzOSw2IEBACiAJcmV0dXJuIHRzbDI1NjFfcG93ZXJkb3duKGNsaWVudCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MjksIDB4MzksIDB4NDksIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdHNsMjU2MV9pZFtdID0gewogCXsgInRzbDI1NjEiLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwppbmRleCBkNTQ5ZDA4Li5mNmNjMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgT1RVUwogCXRyaXN0YXRlICJBdGhlcm9zIE9UVVMgODAyLjExbiBVU0Igd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOXzgwMjExICYmIE1BQzgwMjExCisJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBNQUM4MDIxMQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zIDgwMi4xMW4gVVNCIGhhcmR3YXJlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKaW5kZXggOTExMWRjYi4uOGNjZmZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAl1c2VyX2J1Zl9ydW5uaW5nID0gTlVMTDsKIAloYXNoX3N0ciA9IE5VTEw7CiAJbm9kZV9wdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKLQl1c2VyX2J1ZiA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCXVzZXJfYnVmID0ga3phbGxvYyhjb3VudCsxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW5vZGVfcHRyIHx8ICF1c2VyX2J1ZikKIAkJZ290byBvdXQ7CiAKQEAgLTIwNyw2ICsyMDcsNyBAQAogCQlsaXN0X2FkZCgmKG5vZGVfcHRyLT5saXN0KSwgJihkZXYtPmhlYWQtPmxpc3QpKTsKIAkJbm9kZV9wdHIgPSBOVUxMOwogCX0gZWxzZSB7CisJCWNoYXIgKnRtcHU7CiAJCWlmICghY2FwX2RldmljZXNbMF0uaGVhZCB8fAogCQkJCWxpc3RfZW1wdHkoJihjYXBfZGV2aWNlc1swXS5oZWFkLT5saXN0KSkpIHsKIAkJCXJldHZhbCA9IC1FSU5WQUw7CkBAIC0yMTgsMTAgKzIxOSwxMCBAQAogCQkgKiBuZWVkIHRvIHNwbGl0IGl0IGFuZCBoYXNoICd1c2VyMUB1c2VyMicgdXNpbmcgJ3JhbmRvbXN0cmluZycKIAkJICogYXMgdGhlIGtleS4KIAkJICovCi0JCXVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKLQkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7Ci0JCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOwotCQlyYW5kX3N0ciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKwkJdG1wdSA9IHVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKKwkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7CisJCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ0bXB1LCAiQCIpOworCQlyYW5kX3N0ciA9IHRtcHU7CiAJCWlmICghc291cmNlX3VzZXIgfHwgIXRhcmdldF91c2VyIHx8ICFyYW5kX3N0cikgewogCQkJcmV0dmFsID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjI5LDcgKzIzMCw4IEBACiAKIAkJLyogaGFzaCB0aGUgc3RyaW5nIHVzZXIxQHVzZXIyIHdpdGggcmFuZF9zdHIgYXMgdGhlIGtleSAqLwogCQlsZW4gPSBzdHJsZW4oc291cmNlX3VzZXIpICsgc3RybGVuKHRhcmdldF91c2VyKSArIDE7Ci0JCWhhc2hfc3RyID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCQkvKiBzcmMsIEAsIGxlbiwgXDAgKi8KKwkJaGFzaF9zdHIgPSBremFsbG9jKGxlbisxLCBHRlBfS0VSTkVMKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCBzb3VyY2VfdXNlcik7CiAJCXN0cmNhdChoYXNoX3N0ciwgIkAiKTsKIAkJc3RyY2F0KGhhc2hfc3RyLCB0YXJnZXRfdXNlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IGRkN2QzZmQuLjRjZTM5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC0yMDcxLDExICsyMDcxLDE1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoa2V5cGFkX2VuYWJsZWQgJiYga2V5cGFkX2luaXRpYWxpemVkKQorCWlmIChrZXlwYWRfZW5hYmxlZCAmJiBrZXlwYWRfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZrZXlwYWRfZGV2KTsKKwkJa2V5cGFkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKLQlpZiAobGNkX2VuYWJsZWQgJiYgbGNkX2luaXRpYWxpemVkKQorCWlmIChsY2RfZW5hYmxlZCAmJiBsY2RfaW5pdGlhbGl6ZWQpIHsKIAkJbWlzY19kZXJlZ2lzdGVyKCZsY2RfZGV2KTsKKwkJbGNkX2luaXRpYWxpemVkID0gMDsKKwl9CiAKIAlwYXJwb3J0X3JlbGVhc2UocHBydCk7CiAJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShwcHJ0KTsKQEAgLTIyMTEsMTMgKzIyMTUsMTYgQEAKIAkJZGVsX3RpbWVyKCZzY2FuX3RpbWVyKTsKIAogCWlmIChwcHJ0ICE9IE5VTEwpIHsKLQkJaWYgKGtleXBhZF9lbmFibGVkKQorCQlpZiAoa2V5cGFkX2VuYWJsZWQpIHsKIAkJCW1pc2NfZGVyZWdpc3Rlcigma2V5cGFkX2Rldik7CisJCQlrZXlwYWRfaW5pdGlhbGl6ZWQgPSAwOworCQl9CiAKIAkJaWYgKGxjZF9lbmFibGVkKSB7CiAJCQlwYW5lbF9sY2RfcHJpbnQoIlx4MGNMQ0QgZHJpdmVyICIgUEFORUxfVkVSU0lPTgogCQkJCQkiXG51bmxvYWRlZC5ceDFiW0xjXHgxYltMYlx4MWJbTC0iKTsKIAkJCW1pc2NfZGVyZWdpc3RlcigmbGNkX2Rldik7CisJCQlsY2RfaW5pdGlhbGl6ZWQgPSAwOwogCQl9CiAKIAkJLyogVE9ETzogZnJlZSBhbGwgaW5wdXQgc2lnbmFscyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jIGIvZHJpdmVycy9zdGFnaW5nL3BvY2gvcG9jaC5jCmluZGV4IDBkMTExZGQuLjJlYjhlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2NoL3BvY2guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9jaC9wb2NoLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlICJwb2NoLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwppbmRleCA3ZjQ0ZTVlLi5lZmUzOGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnIFJUMjg2MAogCXRyaXN0YXRlICJSYWxpbmsgMjg2MCB3aXJlbGVzcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOXzgwMjExCisJZGVwZW5kcyBvbiBQQ0kgJiYgWDg2ICYmIFdMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMjg2MCB3aXJlbGVzcyBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCmluZGV4IGZiMTczNTUuLjg1N2ZmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKQEAgLTM2Myw2ICszNjMsOCBAQAogCVVMT05HCQkJU3dJZHggPSBwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4OwogCiAJcFR4RCAgPSAoUFRYRF9TVFJVQykgcEFkLT5NZ210UmluZy5DZWxsW1N3SWR4XS5BbGxvY1ZhOworCWlmICghcFR4RCkKKwkJcmV0dXJuIDA7CiAKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZGlzUGFja2V0ID0gcFBhY2tldDsKIAlwQWQtPk1nbXRSaW5nLkNlbGxbU3dJZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwppbmRleCA5ZDU4OWMyLi4wMTljYzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKIAogSU5UCVNob3dfU1NJRF9Qcm9jKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCmluZGV4IGIzOTZhOWIuLmVkMjdiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRfY29uZmlnLmgiCiAKIFVMT05HCVJURGVidWdMZXZlbCA9IFJUX0RFQlVHX0VSUk9SOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCmluZGV4IDc2ODQxZjYuLmFlYTVjODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUlQyODcwCiAJdHJpc3RhdGUgIlJhbGluayAyODcwLzMwNzAgd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBYODYgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gVVNCICYmIFg4NiAmJiBXTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHh4NzAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL0tjb25maWcKaW5kZXggMjU1ZThlYS4uMmIzZjc0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIGNvbmZpZyBSVDMwOTAKIAl0cmlzdGF0ZSAiUmFsaW5rIDMwOTAgd2lyZWxlc3Mgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTl84MDIxMQorCWRlcGVuZHMgb24gUENJICYmIFg4NiAmJiBXTEFOCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIDMwOTAgd2lyZWxlc3MgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IDViZTA3MTQuLjNlNTFlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9jb21tb24vY21tX2luZm8uYwpAQCAtMzQsNiArMzQsNyBAQAogICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDkwL3J0X2xpbnV4LmMKaW5kZXggZDIyNDFlYy4uOWI5NGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9ydF9saW51eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvcnRfbGludXguYwpAQCAtMjUsNiArMjUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlICJydF9jb25maWcuaCIKIAogVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKaW5kZXggMjM2ZTQyNy4uMjAzYzc5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBSVEw4MTg3U0UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTg3U0UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJZGVwZW5kcyBvbiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IDAxM2MzZTEuLjRjNWQ2M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC01MywxMCArNTMsOCBAQAogCiAJCWxpc3RfZGVsKHB0cik7CiAKLQkJaWYgKGVudHJ5LT5vcHMpIHsKKwkJaWYgKGVudHJ5LT5vcHMpCiAJCQllbnRyeS0+b3BzLT5kZWluaXQoZW50cnktPnByaXYpOwotCQkJbW9kdWxlX3B1dChlbnRyeS0+b3BzLT5vd25lcik7Ci0JCX0KIAkJa2ZyZWUoZW50cnkpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA2ZmJlNDg5Li4xODM5MmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0xODksMTAgKzE4OSw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotCQkJCW1vZHVsZV9wdXQoY3J5cHQtPm9wcy0+b3duZXIpOwotCQkJfQogCQkJa2ZyZWUoY3J5cHQpOwogCQkJaWVlZS0+Y3J5cHRbaV0gPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCA1OWIyYWI0Li4zMzRlNGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTI4MzksMTYgKzI4MzksMTIgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfdGtpcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF9jY21wIik7CisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9CiAJaWYgKG9wcyA9PSBOVUxMKSB7CiAJCXByaW50aygidW5rbm93biBjcnlwdG8gYWxnICclcydcbiIsIHBhcmFtLT51LmNyeXB0LmFsZyk7CiAJCXBhcmFtLT51LmNyeXB0LmVyciA9IElFRUVfQ1JZUFRfRVJSX1VOS05PV05fQUxHOwpAQCAtMjg2OSw3ICsyODY1LDcgQEAKIAkJfQogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKwkJaWYgKG5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5wcml2ID0KIAkJCQluZXdfY3J5cHQtPm9wcy0+aW5pdChwYXJhbS0+dS5jcnlwdC5pZHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDhkOGJkZDAuLmEwOGI5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0zMzEsMTIgKzMzMSwxMCBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQlpZiAoIW5ld19jcnlwdC0+b3BzKSB7Ci0JCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCQlpZiAoIW5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQl9CiAKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9IG5ld19jcnlwdC0+b3BzLT5pbml0KGtleSk7CiAKIAkJaWYgKCFuZXdfY3J5cHQtPm9wcyB8fCAhbmV3X2NyeXB0LT5wcml2KSB7CkBAIC00ODMsNyArNDgxLDcgQEAKICAgICAgICAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOwogICAgICAgICBpbnQgaSwgaWR4LCByZXQgPSAwOwogICAgICAgICBpbnQgZ3JvdXBfa2V5ID0gMDsKLSAgICAgICAgY29uc3QgY2hhciAqYWxnLCAqbW9kdWxlOworICAgICAgICBjb25zdCBjaGFyICphbGc7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX29wcyAqb3BzOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKipjcnlwdDsKIApAQCAtNTM5LDE1ICs1MzcsMTIgQEAKICAgICAgICAgc3dpdGNoIChleHQtPmFsZykgewogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfV0VQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJXRVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfd2VwIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgYWxnID0gIlRLSVAiOwotICAgICAgICAgICAgICAgIG1vZHVsZSA9ICJpZWVlODAyMTFfY3J5cHRfdGtpcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgogICAgICAgICAgICAgICAgIGFsZyA9ICJDQ01QIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X2NjbXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIElFRUU4MDIxMV9ERUJVR19XWCgiJXM6IHVua25vd24gY3J5cHRvIGFsZyAlZFxuIiwKQEAgLTU1OCwxMCArNTUzLDggQEAKIC8vCXByaW50aygiOC0wOS0wOC05PT09PT0+JXMsIGFsZyBuYW1lOiVzXG4iLF9fZnVuY19fLCBhbGcpOwogCiAJIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0X21vZHVsZShtb2R1bGUpOworICAgICAgICBpZiAob3BzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKQEAgLTU4MSw3ICs1NzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPm9wcyA9IG9wczsKLSAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKyAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKaW5kZXggMzEwMGFhNS4uMzdlNGZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUlRMODE5MkUKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyRSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IDFhOGVhOGEuLmIxYzU0OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtNTMsMTQgKzUzLDggQEAKIAogCQlsaXN0X2RlbChwdHIpOwogCi0JCWlmIChlbnRyeS0+b3BzKSB7CisJCWlmIChlbnRyeS0+b3BzKQogCQkJZW50cnktPm9wcy0+ZGVpbml0KGVudHJ5LT5wcml2KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLSNlbHNlCi0JCQlfX01PRF9ERUNfVVNFX0NPVU5UKGVudHJ5LT5vcHMtPm93bmVyKTsKLSNlbmRpZgotCQl9CiAJCWtmcmVlKGVudHJ5KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDE2MjU2YTMuLjEyYzJhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0yNDIsMTQgKzI0Miw4IEBACiAJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICpjcnlwdCA9IGllZWUtPmNyeXB0W2ldOwogCQlpZiAoY3J5cHQpIHsKLQkJCWlmIChjcnlwdC0+b3BzKSB7CisJCQlpZiAoY3J5cHQtPm9wcykKIAkJCQljcnlwdC0+b3BzLT5kZWluaXQoY3J5cHQtPnByaXYpOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJCQltb2R1bGVfcHV0KGNyeXB0LT5vcHMtPm93bmVyKTsKLSNlbHNlCi0JCQkJX19NT0RfREVDX1VTRV9DT1VOVChjcnlwdC0+b3BzLT5vd25lcik7Ci0jZW5kaWYKLQkJCX0KIAkJCWtmcmVlKGNyeXB0KTsKIAkJCWllZWUtPmNyeXB0W2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDJmYzA0ZGYuLmVhZTdjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTMyODQsMTcgKzMyODQsMTQgQEAKIAkJZ290byBza2lwX2hvc3RfY3J5cHQ7CiAKIAlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwlpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIldFUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCQkvL3NldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yIFdFUDQwIGF0IG90aGVyIHBsYWNlCi0JfSBlbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApIHsKLQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF90a2lwIik7CisJCS8qIHNldCBXRVA0MCBmaXJzdCwgaXQgd2lsbCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gV0VQMTA0IG9yCisJCSAqIFdFUDQwIGF0IG90aGVyIHBsYWNlICovCisJZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIlRLSVAiKSA9PSAwKQogCQlvcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMocGFyYW0tPnUuY3J5cHQuYWxnKTsKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X2NjbXAiKTsKKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0KIAlpZiAob3BzID09IE5VTEwpIHsKIAkJcHJpbnRrKCJ1bmtub3duIGNyeXB0byBhbGcgJyVzJ1xuIiwgcGFyYW0tPnUuY3J5cHQuYWxnKTsKIAkJcGFyYW0tPnUuY3J5cHQuZXJyID0gSUVFRV9DUllQVF9FUlJfVU5LTk9XTl9BTEc7CkBAIC0zMzE1LDExICszMzEyLDcgQEAKIAkJfQogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gb3BzOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZWxzZQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X2luY19tb2RfY291bnQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbmRpZgorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPQogCQkJCW5ld19jcnlwdC0+b3BzLT5pbml0KHBhcmFtLT51LmNyeXB0LmlkeCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDIyMzQ4MzEuLjRlMzRhMWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTQ4MiwxNSArNDgyLDkgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQltZW1zZXQobmV3X2NyeXB0LCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhKSk7CiAJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJaWYgKCFuZXdfY3J5cHQtPm9wcykgewotCQkJcmVxdWVzdF9tb2R1bGUoImllZWU4MDIxMV9jcnlwdF93ZXAiKTsKKwkJaWYgKCFuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+b3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKCJXRVAiKTsKLQkJfQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCi0jZWxzZQotCQlpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X2luY19tb2RfY291bnQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKLSNlbmRpZgorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChrZXkpOwogCiAJCWlmICghbmV3X2NyeXB0LT5vcHMgfHwgIW5ld19jcnlwdC0+cHJpdikgewpAQCAtNjQ0LDcgKzYzOCw3IEBACiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKICAgICAgICAgaW50IGksIGlkeDsKICAgICAgICAgaW50IGdyb3VwX2tleSA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFsZywgKm1vZHVsZTsKKyAgICAgICAgY29uc3QgY2hhciAqYWxnOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgKm9wczsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKQEAgLTcxMSwxNSArNzA1LDEyIEBACiAgICAgICAgIHN3aXRjaCAoZXh0LT5hbGcpIHsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiV0VQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3dlcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJUS0lQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3RraXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiQ0NNUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF9jY21wIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCkBAIC03MzAsMTAgKzcyMSw4IEBACiAJcHJpbnRrKCJhbGcgbmFtZTolc1xuIixhbGcpOwogCiAJIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0X21vZHVsZShtb2R1bGUpOworICAgICAgICBpZiAob3BzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKQEAgLTc1OCw3ICs3NDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPm9wcyA9IG9wczsKLSAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKyAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKaW5kZXggZDRmYTY1NC4uYjA4MDJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICN1bmRlZiBERUJVR19UWF9ERVNDCiAKIC8vI2RlZmluZSBDT05GSUdfUlRMODE5Ml9JT19NQVAKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJyODE5MkVfaHcuaCIKICNpbmNsdWRlICJyODE5MkUuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwppbmRleCA3NzBmNDEyLi5iOGM5NWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFJUTDgxOTJTVQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJTVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gUENJICYmIFdMQU4KIAlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggZDc2YTU0ZC4uNTIxZTdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTUzLDEwICs1Myw4IEBACiAKIAkJbGlzdF9kZWwocHRyKTsKIAotCQlpZiAoZW50cnktPm9wcykgeworCQlpZiAoZW50cnktPm9wcykKIAkJCWVudHJ5LT5vcHMtPmRlaW5pdChlbnRyeS0+cHJpdik7Ci0JCQltb2R1bGVfcHV0KGVudHJ5LT5vcHMtPm93bmVyKTsKLQkJfQogCQlrZnJlZShlbnRyeSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDY4ZGM4ZmEuLmMzMzgzYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTIxNiwxMCArMjE2LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVM7IGkrKykgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEgKmNyeXB0ID0gaWVlZS0+Y3J5cHRbaV07CiAJCWlmIChjcnlwdCkgewotCQkJaWYgKGNyeXB0LT5vcHMpIHsKKwkJCWlmIChjcnlwdC0+b3BzKQogCQkJCWNyeXB0LT5vcHMtPmRlaW5pdChjcnlwdC0+cHJpdik7Ci0JCQkJbW9kdWxlX3B1dChjcnlwdC0+b3BzLT5vd25lcik7Ci0JCQl9CiAJCQlrZnJlZShjcnlwdCk7CiAJCQlpZWVlLT5jcnlwdFtpXSA9IE5VTEw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IGM2NGFlMDMuLmZkOGUxMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMzAyNiwxNyArMzAyNiwxNCBAQAogCQlnb3RvIHNraXBfaG9zdF9jcnlwdDsKIAogCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCWlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiV0VQIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JCS8vc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IgV0VQNDAgYXQgb3RoZXIgcGxhY2UKLQl9IGVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJUS0lQIikgPT0gMCkgewotCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3RraXAiKTsKKwkJLyogc2V0IFdFUDQwIGZpcnN0LCBpdCB3aWxsIGJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBXRVAxMDQgb3IKKwkJICogV0VQNDAgYXQgb3RoZXIgcGxhY2UgKi8KKwllbHNlIGlmIChvcHMgPT0gTlVMTCAmJiBzdHJjbXAocGFyYW0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpID09IDApCiAJCW9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhwYXJhbS0+dS5jcnlwdC5hbGcpOwotCX0gZWxzZSBpZiAob3BzID09IE5VTEwgJiYgc3RyY21wKHBhcmFtLT51LmNyeXB0LmFsZywgIkNDTVAiKSA9PSAwKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJpZWVlODAyMTFfY3J5cHRfY2NtcCIpOworCWVsc2UgaWYgKG9wcyA9PSBOVUxMICYmIHN0cmNtcChwYXJhbS0+dS5jcnlwdC5hbGcsICJDQ01QIikgPT0gMCkKIAkJb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKHBhcmFtLT51LmNyeXB0LmFsZyk7Ci0JfQogCWlmIChvcHMgPT0gTlVMTCkgewogCQlwcmludGsoInVua25vd24gY3J5cHRvIGFsZyAnJXMnXG4iLCBwYXJhbS0+dS5jcnlwdC5hbGcpOwogCQlwYXJhbS0+dS5jcnlwdC5lcnIgPSBJRUVFX0NSWVBUX0VSUl9VTktOT1dOX0FMRzsKQEAgLTMwNTgsNyArMzA1NSw3IEBACiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBvcHM7CiAKLQkJaWYgKG5ld19jcnlwdC0+b3BzICYmIHRyeV9tb2R1bGVfZ2V0KG5ld19jcnlwdC0+b3BzLT5vd25lcikpCisJCWlmIChuZXdfY3J5cHQtPm9wcykKIAkJCW5ld19jcnlwdC0+cHJpdiA9CiAJCQkJbmV3X2NyeXB0LT5vcHMtPmluaXQocGFyYW0tPnUuY3J5cHQuaWR4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCAxMDc3NTkwLi42MTQ2YzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMzU4LDExICszNTgsOSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1lbXNldChuZXdfY3J5cHQsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEpKTsKIAkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQlpZiAoIW5ld19jcnlwdC0+b3BzKSB7Ci0JCQlyZXF1ZXN0X21vZHVsZSgiaWVlZTgwMjExX2NyeXB0X3dlcCIpOworCQlpZiAoIW5ld19jcnlwdC0+b3BzKQogCQkJbmV3X2NyeXB0LT5vcHMgPSBpZWVlODAyMTFfZ2V0X2NyeXB0b19vcHMoIldFUCIpOwotCQl9Ci0JCWlmIChuZXdfY3J5cHQtPm9wcyAmJiB0cnlfbW9kdWxlX2dldChuZXdfY3J5cHQtPm9wcy0+b3duZXIpKQorCQlpZiAobmV3X2NyeXB0LT5vcHMpCiAJCQluZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChrZXkpOwogCiAJCWlmICghbmV3X2NyeXB0LT5vcHMgfHwgIW5ld19jcnlwdC0+cHJpdikgewpAQCAtNTA3LDcgKzUwNSw3IEBACiAgICAgICAgIHN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKICAgICAgICAgaW50IGksIGlkeDsKICAgICAgICAgaW50IGdyb3VwX2tleSA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmFsZywgKm1vZHVsZTsKKyAgICAgICAgY29uc3QgY2hhciAqYWxnOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19vcHMgKm9wczsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9jcnlwdF9kYXRhICoqY3J5cHQ7CiAKQEAgLTU3MCwxNSArNTY4LDEyIEBACiAgICAgICAgIHN3aXRjaCAoZXh0LT5hbGcpIHsKICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiV0VQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3dlcCI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgogICAgICAgICAgICAgICAgIGFsZyA9ICJUS0lQIjsKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSAiaWVlZTgwMjExX2NyeXB0X3RraXAiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKICAgICAgICAgICAgICAgICBhbGcgPSAiQ0NNUCI7Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gImllZWU4MDIxMV9jcnlwdF9jY21wIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBJRUVFODAyMTFfREVCVUdfV1goIiVzOiB1bmtub3duIGNyeXB0byBhbGcgJWRcbiIsCkBAIC01ODksMTAgKzU4NCw4IEBACiAJcHJpbnRrKCJhbGcgbmFtZTolc1xuIixhbGcpOwogCiAJIG9wcyA9IGllZWU4MDIxMV9nZXRfY3J5cHRvX29wcyhhbGcpOwotICAgICAgICBpZiAob3BzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0X21vZHVsZSgiJXMiLCBtb2R1bGUpOworICAgICAgICBpZiAob3BzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgb3BzID0gaWVlZTgwMjExX2dldF9jcnlwdG9fb3BzKGFsZyk7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0RFQlVHX1dYKCIlczogdW5rbm93biBjcnlwdG8gYWxnICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGV4dC0+YWxnKTsKQEAgLTYxMiw3ICs2MDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPm9wcyA9IG9wczsKLSAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMgJiYgdHJ5X21vZHVsZV9nZXQobmV3X2NyeXB0LT5vcHMtPm93bmVyKSkKKyAgICAgICAgICAgICAgICBpZiAobmV3X2NyeXB0LT5vcHMpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY3J5cHQtPnByaXYgPSBuZXdfY3J5cHQtPm9wcy0+aW5pdChpZHgpOwogICAgICAgICAgICAgICAgIGlmIChuZXdfY3J5cHQtPnByaXYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobmV3X2NyeXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKaW5kZXggODdmOGExMS4uZjg5MGExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ3ZmI3NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotY29uZmlnIFNUTEM0NVhYCi0JdHJpc3RhdGUgInN0bGM0NTUwLzQ1NjAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0hBUkRJUlFTCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIGRyaXZlciBmb3Igc3RsYzQ1NTAgYW5kIHN0bGM0NTYwIGNoaXBzZXRzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCBzdGxjNDV4eC4gIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZTMyOTAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX1NUTEM0NVhYKQkrPSBzdGxjNDV4eC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTk5ZWIzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU5NCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3RsYzQ1eHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgInN0bGM0NXh4LmgiCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0KLSNpbmNsdWRlICJzdGxjNDV4eF9sbWFjLmgiCi0KLS8qCi0gKiBncGlvcyBzaG91bGQgYmUgaGFuZGxlZCBpbiBib2FyZCBmaWxlcyBhbmQgcHJvdmlkZWQgdmlhIHBsYXRmb3JtIGRhdGEsCi0gKiBidXQgYmVjYXVzZSBpdCdzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGZvciBzdGxjNDV4eCB0byBoYXZlIGEgaGVhZGVyIGZpbGUKLSAqIGluIGluY2x1ZGUvbGludXgsIGxldCdzIHVzZSBtb2R1bGUgcGFyYW1hdGVycyBmb3Igbm93Ci0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfZ3Bpb19wb3dlciA9IDk3OwotbW9kdWxlX3BhcmFtKHN0bGM0NXh4X2dwaW9fcG93ZXIsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN0bGM0NXh4X2dwaW9fcG93ZXIsICJzdGxjNDV4eCBncGlvIG51bWJlciBmb3IgcG93ZXIgbGluZSIpOwotCi1zdGF0aWMgaW50IHN0bGM0NXh4X2dwaW9faXJxID0gODc7Ci1tb2R1bGVfcGFyYW0oc3RsYzQ1eHhfZ3Bpb19pcnEsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN0bGM0NXh4X2dwaW9faXJxLCAic3RsYzQ1eHggZ3BpbyBudW1iZXIgZm9yIGlycSBsaW5lIik7Ci0KLXN0YXRpYyBjb25zdCB1OCBkZWZhdWx0X2NhbF9jaGFubmVsc1tdID0gewotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgwOSwKLQkweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsCi0JMHhlMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLAotCTB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwKLQkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwKLQkweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsCi0JMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCi0JMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLAotCTB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAotCTB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwKLQkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwKLQkweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsCi0JMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCi0JMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLAotCTB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLAotCTB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwKLQkweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsCi0JMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCi0JMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLAotCTB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLAotCTB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwKLQkweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsCi0JMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsCi0JMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCi0JMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLAotCTB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLAotCTB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywKLQkweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwKLQkweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwKLQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsCi0JMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKLQkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLAotCTB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLAotCTB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwKLQkweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywKLQkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwKLQkweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LCAweDA5LCAweDAwLCAweDAwLCAweGM5LAotCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCi0JMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLAotCTB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLAotCTB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwKLQkweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwKLQkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwKLQkweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsCi0JMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDhhLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKLQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLAotCTB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwKLQkweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwKLQkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCi0JMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwKLQkweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAotCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsCi0JMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAotCTB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCi0JMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKLQkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwOSwgMHgwMCwgMHgwMCwKLQkweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwKLQkweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCi0JMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywKLQkweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCi0JMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwKLQkweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAotCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsCi0JMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAotCTB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsCi0JMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLAotCTB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKLQkweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAotCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwKLQkweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCi0JMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwKLQkweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAotCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsCi0JMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAotCTB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsCi0JMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKLQkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLAotCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKLQkweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLAotCTB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCi0JMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4MDksIDB4MDAsCi0JMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwKLQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCi0JMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwKLQkweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAotCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsCi0JMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKLQkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAotCTB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsCi0JMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKLQkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LAotCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsCi0JMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKLQkweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLAotCTB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwKLQkweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LAotCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwKLQkweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLAotCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsCi0JMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKLQkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAotCTB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsCi0JMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKLQkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LAotCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKLQkweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLAotCTB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCi0JMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwKLQkweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLAotCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKLQkweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAotCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAgfTsKLQotc3RhdGljIGNvbnN0IHU4IGRlZmF1bHRfY2FsX3Jzc2lbXSA9IHsKLQkweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLAotCTB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLAotCTB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwKLQkweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X2VkY2Yoc3RydWN0IHN0bGM0NXh4ICpzdGxjKTsKLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NldHVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYyk7Ci1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zY2FuKHN0cnVjdCBzdGxjNDV4eCAqc3RsYyk7Ci1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9wc20oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIGVuYWJsZSk7Ci1zdGF0aWMgaW50IHN0bGM0NXh4X3R4X251bGxmdW5jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpOwotc3RhdGljIGludCBzdGxjNDV4eF90eF9wc3BvbGwoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSk7Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX3Jzc2koc3RydWN0IGRldmljZSAqZGV2LAotCQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3NpemVfdCBsZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlsZW4gPSBQQUdFX1NJWkU7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Y2FsX3Jzc2kpCi0JCWhleF9kdW1wX3RvX2J1ZmZlcihzdGxjLT5jYWxfcnNzaSwgUlNTSV9DQUxfQVJSQVlfTEVOLCAxNiwKLQkJCQkgICAyLCBidWYsIGxlbiwgMCk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlsZW4gPSBzdHJsZW4oYnVmKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9yc3NpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChjb3VudCAhPSBSU1NJX0NBTF9BUlJBWV9MRU4pIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImludmFsaWQgY2FsX3Jzc2kgbGVuZ3RoOiAlenUiLCBjb3VudCk7Ci0JCWNvdW50ID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWtmcmVlKHN0bGMtPmNhbF9yc3NpKTsKLQotCXN0bGMtPmNhbF9yc3NpID0ga21lbWR1cChidWYsIFJTU0lfQ0FMX0FSUkFZX0xFTiwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIXN0bGMtPmNhbF9yc3NpKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjYWxfcnNzaSIpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLSBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkJCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzc2l6ZV90IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCWxlbiA9IFBBR0VfU0laRTsKLQotCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKLQotCWlmIChzdGxjLT5jYWxfY2hhbm5lbHMpCi0JCWhleF9kdW1wX3RvX2J1ZmZlcihzdGxjLT5jYWxfY2hhbm5lbHMsIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiwKLQkJCQkgICAxNiwgMiwgYnVmLCBsZW4sIDApOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlsZW4gPSBzdHJsZW4oYnVmKTsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9jaGFubmVscyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoY291bnQgIT0gQ0hBTk5FTF9DQUxfQVJSQVlfTEVOKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJpbnZhbGlkIGNhbF9jaGFubmVscyBzaXplOiAlenUgIiwgY291bnQpOwotCQljb3VudCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlrZnJlZShzdGxjLT5jYWxfY2hhbm5lbHMpOwotCi0Jc3RsYy0+Y2FsX2NoYW5uZWxzID0ga21lbWR1cChidWYsIGNvdW50LCBHRlBfS0VSTkVMKTsKLQotCWlmICghc3RsYy0+Y2FsX2NoYW5uZWxzKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjYWxfY2hhbm5lbHMiKTsKLQkJY291bnQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi1vdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zaG93X3R4X2J1ZihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJCSAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0Jc3NpemVfdCBsZW4gPSAwOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgewotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIweCV4OiAweCV4LTB4JXhcbiIsCi0JCQkgICAgICAgZW50cnktPmhhbmRsZSwgZW50cnktPnN0YXJ0LAotCQkJICAgICAgIGVudHJ5LT5lbmQpOwotCX0KLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIERFVklDRV9BVFRSKGNhbF9yc3NpLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfcnNzaSwKLQkJICAgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX3Jzc2kpOwotc3RhdGljIERFVklDRV9BVFRSKGNhbF9jaGFubmVscywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgIHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX2NoYW5uZWxzLAotCQkgICBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfY2hhbm5lbHMpOwotc3RhdGljIERFVklDRV9BVFRSKHR4X2J1ZiwgU19JUlVHTywgc3RsYzQ1eHhfc3lzZnNfc2hvd190eF9idWYsIE5VTEwpOwotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9zcGlfcmVhZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07Ci0Jc3RydWN0IHNwaV9tZXNzYWdlIG07Ci0KLQkvKiBXZSBmaXJzdCBwdXNoIHRoZSBhZGRyZXNzICovCi0JYWRkciA9IChhZGRyIDw8IDgpIHwgQUREUl9SRUFEX0JJVF8xNTsKLQotCXNwaV9tZXNzYWdlX2luaXQoJm0pOwotCW1lbXNldCh0LCAwLCBzaXplb2YodCkpOwotCi0JdFswXS50eF9idWYgPSAmYWRkcjsKLQl0WzBdLmxlbiA9IDI7Ci0Jc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMF0sICZtKTsKLQotCXRbMV0ucnhfYnVmID0gYnVmOwotCXRbMV0ubGVuID0gbGVuOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7Ci0KLQlzcGlfc3luYyhzdGxjLT5zcGksICZtKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9zcGlfd3JpdGUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFszXTsKLQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKLQl1MTYgbGFzdF93b3JkOwotCi0JLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLwotCWFkZHIgPSBhZGRyIDw8IDg7Ci0KLQlzcGlfbWVzc2FnZV9pbml0KCZtKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKLQotCXRbMF0udHhfYnVmID0gJmFkZHI7Ci0JdFswXS5sZW4gPSAyOwotCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7Ci0KLQl0WzFdLnR4X2J1ZiA9IGJ1ZjsKLQl0WzFdLmxlbiA9IGxlbjsKLQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOwotCi0JaWYgKGxlbiAlIDIpIHsKLQkJbGFzdF93b3JkID0gKCh1OCAqKWJ1ZilbbGVuIC0gMV07Ci0KLQkJdFsyXS50eF9idWYgPSAmbGFzdF93b3JkOwotCQl0WzJdLmxlbiA9IDI7Ci0JCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzJdLCAmbSk7Ci0JfQotCi0Jc3BpX3N5bmMoc3RsYy0+c3BpLCAmbSk7Ci19Ci0KLXN0YXRpYyB1MTYgc3RsYzQ1eHhfcmVhZDE2KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUxNiB2YWw7Ci0KLQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgdTMyIHN0bGM0NXh4X3JlYWQzMihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1MzIgdmFsOwotCi0Jc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfd3JpdGUxNihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwgdTE2IHZhbCkKLXsKLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF93cml0ZTMyKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLCB1MzIgdmFsKQotewotCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Ci19Ci0KLXN0cnVjdCBzdGxjNDV4eF9zcGlfcmVnIHsKLQl1MTYgYWRkcmVzczsKLQl1MTYgbGVuZ3RoOwotCWNoYXIgKm5hbWU7Ci19OwotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4YnVmZmVyX2R1bXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXI7Ci0JY2hhciAqYnVmLCAqcG9zOwotCWludCBidWZfbGVuLCBsLCBjb3VudDsKLQotCWlmICghKERFQlVHX0xFVkVMICYgREVCVUdfVFhCVUZGRVIpKQotCQlyZXR1cm47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCWJ1Zl9sZW4gPSA1MDA7Ci0JYnVmID0ga21hbGxvYyhidWZfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuOwotCi0JcG9zID0gYnVmOwotCWNvdW50ID0gMDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodHhidWZmZXIsICZzdGxjLT50eGJ1ZmZlciwgYnVmZmVyX2xpc3QpIHsKLQkJbCA9IHNucHJpbnRmKHBvcywgYnVmX2xlbiwgIjB4JXgtMHgleCwiLAotCQkJICAgICB0eGJ1ZmZlci0+c3RhcnQsIHR4YnVmZmVyLT5lbmQpOwotCQkvKiBkcm9wIHRoZSBudWxsIGJ5dGUgKi8KLQkJcG9zICs9IGw7Ci0JCWJ1Zl9sZW4gLT0gbDsKLQkJY291bnQrKzsKLQl9Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJKnBvcyA9ICdcMCc7Ci0JZWxzZQotCQkqLS1wb3MgPSAnXDAnOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogaW4gYnVmZmVyICVkIHJlZ2lvbnM6ICVzIiwKLQkJICAgICAgIGNvdW50LCBidWYpOwotCi0Ja2ZyZWUoYnVmKTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgaW50IHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXI7Ci0JaW50IHBvczsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JcG9zID0gRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQ7Ci0KLQlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogdGhlIGVudHJpZXMgaW4gdHhidWZmZXIgbXVzdCBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBpbgotCSAqIHRoZSByZWFsIGJ1ZmZlcgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodHhidWZmZXIsICZzdGxjLT50eGJ1ZmZlciwgYnVmZmVyX2xpc3QpIHsKLQkJaWYgKHBvcyArIGxlbiA8IHR4YnVmZmVyLT5zdGFydCkKLQkJCWJyZWFrOwotCQlwb3MgPSBBTElHTih0eGJ1ZmZlci0+ZW5kICsgMSwgNCk7Ci0JfQotCi0JaWYgKHBvcyArIGxlbiA+IEZJUk1XQVJFX1RYQlVGRkVSX0VORCkKLQkJLyogbm90IGVub3VnaCByb29tICovCi0JCXBvcyA9IC0xOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogZmluZCAlenUgQjogMHgleCIsIGxlbiwgcG9zKTsKLQotb3V0OgotCXJldHVybiBwb3M7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhidWZmZXJfYWRkKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKLQkJCQkgc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcikKLXsKLQlzdHJ1Y3QgdHhidWZmZXIgKnIsICpwcmV2ID0gTlVMTDsKLQotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpIHsKLQkJbGlzdF9hZGQoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JciA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4YnVmZmVyLCBzdHJ1Y3QgdHhidWZmZXIsIGJ1ZmZlcl9saXN0KTsKLQotCWlmICh0eGJ1ZmZlci0+c3RhcnQgPCByLT5zdGFydCkgewotCQkvKiBhZGQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLwotCQlsaXN0X2FkZCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcmV2ID0gTlVMTDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZzdGxjLT50eGJ1ZmZlciwgYnVmZmVyX2xpc3QpIHsKLQkJLyogc2tpcCBmaXJzdCBlbnRyeSwgd2UgY2hlY2tlZCBmb3IgdGhhdCBhYm92ZSAqLwotCQlpZiAoIXByZXYpIHsKLQkJCXByZXYgPSByOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBkb3VibGUtY2hlY2sgb3ZlcmxhcHMgKi8KLQkJV0FSTl9PTl9PTkNFKHR4YnVmZmVyLT5zdGFydCA+PSByLT5zdGFydCAmJgotCQkJICAgICB0eGJ1ZmZlci0+c3RhcnQgPD0gci0+ZW5kKTsKLQkJV0FSTl9PTl9PTkNFKHR4YnVmZmVyLT5lbmQgPj0gci0+c3RhcnQgJiYKLQkJCSAgICAgdHhidWZmZXItPmVuZCA8PSByLT5lbmQpOwotCi0JCWlmIChwcmV2LT5lbmQgPCB0eGJ1ZmZlci0+c3RhcnQgJiYKLQkJICAgIHR4YnVmZmVyLT5lbmQgPCByLT5zdGFydCkgewotCQkJLyogaW5zZXJ0IGF0IHRoaXMgc3BvdCAqLwotCQkJbGlzdF9hZGRfdGFpbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmci0+YnVmZmVyX2xpc3QpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCQlwcmV2ID0gcjsKLQl9Ci0KLQkvKiBub3QgZm91bmQgKi8KLQlsaXN0X2FkZF90YWlsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7Ci0KLQlyZXR1cm4gMDsKLQotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgdHhidWZmZXIgKnN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywKLQkJCQkJCSBzaXplX3QgZnJhbWVfbGVuKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnkgPSBOVUxMOwotCXNpemVfdCBsZW47Ci0JaW50IHBvczsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOwotCi0JbGVuID0gRklSTVdBUkVfVFhCVUZGRVJfSEVBREVSICsgZnJhbWVfbGVuICsgRklSTVdBUkVfVFhCVUZGRVJfVFJBSUxFUjsKLQlwb3MgPSBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0bGMsIGxlbik7Ci0KLQlpZiAocG9zIDwgMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlXQVJOX09OX09OQ0UocG9zICsgbGVuID4gRklSTVdBUkVfVFhCVUZGRVJfRU5EKTsKLQlXQVJOX09OX09OQ0UocG9zIDwgRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQpOwotCi0JZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKLQllbnRyeS0+c3RhcnQgPSBwb3M7Ci0JZW50cnktPmZyYW1lX3N0YXJ0ID0gcG9zICsgRklSTVdBUkVfVFhCVUZGRVJfSEVBREVSOwotCWVudHJ5LT5lbmQgPSBlbnRyeS0+c3RhcnQgKyBsZW4gLSAxOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFhCVUZGRVIsICJ0eGJ1ZmZlcjogYWxsb2NhdGVkIDB4JXgtMHgleCIsCi0JCSAgICAgICBlbnRyeS0+c3RhcnQsIGVudHJ5LT5lbmQpOwotCi0Jc3RsYzQ1eHhfdHhidWZmZXJfYWRkKHN0bGMsIGVudHJ5KTsKLQotCXN0bGM0NXh4X3R4YnVmZmVyX2R1bXAoc3RsYyk7Ci0KLQlyZXR1cm4gZW50cnk7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLwotc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCi0JCQkJICAgc3RydWN0IHR4YnVmZmVyICp0eGJ1ZmZlcikKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGZyZWVkIDB4JXgtMHgleCIsCi0JCSAgICAgICB0eGJ1ZmZlci0+c3RhcnQsIHR4YnVmZmVyLT5lbmQpOwotCi0JbGlzdF9kZWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCk7Ci0Ja2ZyZWUodHhidWZmZXIpOwotfQotCi0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfd2FpdF9iaXQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MTYgcmVnLCB1MzIgbWFzaywKLQkJCSAgICAgdTMyIGV4cGVjdGVkKQotewotCWludCBpOwotCWNoYXIgYnVmZmVyWzRdOwotCi0JZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgewotCQlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCByZWcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOwotCQlpZiAoKCgqKHUzMiAqKWJ1ZmZlcikgJiBtYXNrKSA9PSBleHBlY3RlZCkKLQkJCXJldHVybiAxOwotCQltc2xlZXAoMSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKLQlpbnQgcmV0OwotCi0JLyogRklYTUU6IHNob3VsZCBkcml2ZXIgdXNlIGl0J3Mgb3duIHN0cnVjdCBkZXZpY2U/ICovCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsICIzODI2LmFybSIsICZzdGxjLT5zcGktPmRldik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9lcnJvcigicmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZDogJWQiLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmIChmdy0+c2l6ZSAlIDQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDMyYml0OiAlenUiLAotCQkJICAgICAgIGZ3LT5zaXplKTsKLQkJcmV0dXJuIC1FSUxTRVE7IC8qIElsbGVnYWwgYnl0ZSBzZXF1ZW5jZSAgKi87Ci0JfQotCi0JaWYgKGZ3LT5zaXplIDwgMTAwMCkgewotCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgaXMgdG9vIHNtYWxsOiAlenUiLCBmdy0+c2l6ZSk7Ci0JCXJldHVybiAtRUlMU0VROwotCX0KLQotCXN0bGMtPmZ3ID0ga21lbWR1cChmdy0+ZGF0YSwgZnctPnNpemUsIEdGUF9LRVJORUwpOwotCWlmICghc3RsYy0+ZncpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpcm13YXJlIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXN0bGMtPmZ3X2xlbiA9IGZ3LT5zaXplOwotCi0JcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF91cGxvYWRfZmlybXdhcmUoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2RtYV9yZWdzIGRtYV9yZWdzOwotCXVuc2lnbmVkIGxvbmcgZndfbGVuLCBmd19hZGRyOwotCWxvbmcgX2Z3X2xlbjsKLQlpbnQgcmV0OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JaWYgKCFzdGxjLT5mdykgewotCQlyZXQgPSBzdGxjNDV4eF9yZXF1ZXN0X2Zpcm13YXJlKHN0bGMpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogc3RvcCB0aGUgZGV2aWNlICovCi0Jc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAotCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAotCQkJIHwgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQpOwotCi0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKLQkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUKLQkJCSB8IFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKTsKLQotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlmd19hZGRyID0gRklSTVdBUkVfQUREUkVTUzsKLQlmd19sZW4gPSBzdGxjLT5md19sZW47Ci0KLQl3aGlsZSAoZndfbGVuID4gMCkgewotCQlfZndfbGVuID0gKGZ3X2xlbiA+IFNQSV9NQVhfUEFDS0VUX1NJWkUpCi0JCQk/IFNQSV9NQVhfUEFDS0VUX1NJWkUgOiBmd19sZW47Ci0JCWRtYV9yZWdzLmNtZCA9IFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEU7Ci0JCWRtYV9yZWdzLmxlbiA9IGNwdV90b19sZTE2KF9md19sZW4pOwotCQlkbWFfcmVncy5hZGRyID0gY3B1X3RvX2xlMzIoZndfYWRkcik7Ci0KLQkJZndfbGVuIC09IF9md19sZW47Ci0JCWZ3X2FkZHIgKz0gX2Z3X2xlbjsKLQotCQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCBkbWFfcmVncy5jbWQpOwotCi0JCWlmIChzdGxjNDV4eF93YWl0X2JpdChzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKLQkJCQkgICAgICBIT1NUX0FMTE9XRUQsIEhPU1RfQUxMT1dFRCkgPT0gMCkgewotCQkJc3RsYzQ1eHhfZXJyb3IoImZ3X3VwbG9hZCBub3QgYWxsb3dlZCB0byBETUEgd3JpdGUiKTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9Ci0KLQkJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfTEVOLCBkbWFfcmVncy5sZW4pOwotCQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLCBkbWFfcmVncy5hZGRyKTsKLQotCQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEsIHN0bGMtPmZ3LCBfZndfbGVuKTsKLQotCQkvKiBGSVhNRTogSSB0aGluayB0aGlzIGRvZXNuJ3Qgd29yayBpZiBmaXJtd2FyZSBpcyBsYXJnZSwKLQkJICogdGhpcyBsb29wIGdvZXMgdG8gc2Vjb25kIHJvdW5kLiBmdy0+ZGF0YSBpcyBub3QKLQkJICogaW5jcmVhc2VkIGF0IGFsbCEgKi8KLQl9Ci0KLQlCVUdfT04oZndfbGVuICE9IDApOwotCi0JLyogZW5hYmxlIGhvc3QgaW50ZXJydXB0cyAqLwotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfRU4sIFNQSV9IT1NUX0lOVFNfREVGQVVMVCk7Ci0KLQkvKiBib290IHRoZSBkZXZpY2UgKi8KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUCi0JCQkgfCBTUElfQ1RSTF9TVEFUX1JBTV9CT09UKTsKLQotCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7Ci0KLQlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCi0JCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCk7Ci0JbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2NoZWNrX3R4c2VudChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeSwgKm47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7Ci0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVudHJ5LT5saWZldGltZSkpIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJc3RsYzQ1eHhfd2FybmluZygiZnJhbWUgMHgleCBsaWZldGltZSBleGNlZWRlZCIsCi0JCQkJCQkgZW50cnktPnN0YXJ0KTsKLQkJCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0JCQlza2JfcHVsbChlbnRyeS0+c2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzKHN0bGMtPmh3LCBlbnRyeS0+c2tiKTsKLQkJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9wb3dlcl9vZmYoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSk7Ci0JZ3Bpb19zZXRfdmFsdWUoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3Bvd2VyX29uKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlncGlvX3NldF92YWx1ZShzdGxjNDV4eF9ncGlvX3Bvd2VyLCAxKTsKLQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSk7Ci0KLQkvKgotCSAqIG5lZWQgdG8gd2FpdCBhIHdoaWxlIGJlZm9yZSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkLCB0aGUgbGVuZ3RoCi0JICogaXMganVzdCBhIGd1ZXNzCi0JICovCi0JbXNsZWVwKDEwKTsKLX0KLQotLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9mbHVzaF9xdWV1ZXMoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKSB7Ci0JCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhfc2VudCwKLQkJCQkJIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7Ci0JCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7Ci0JCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCX0KLQotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpIHsKLQkJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eF9wZW5kaW5nLAotCQkJCQkgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKLQkJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKLQkJZGV2X2tmcmVlX3NrYihlbnRyeS0+c2tiKTsKLQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7Ci0JfQotCi0JV0FSTl9PTighbGlzdF9lbXB0eSgmc3RsYy0+dHhfcGVuZGluZykpOwotCVdBUk5fT04oIWxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dvcmtfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RsYzQ1eHgsCi0JCQkJCSAgICAgd29ya19yZXNldCk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVTRVQpCi0JCWdvdG8gb3V0OwotCi0Jc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQkvKiB3YWl0IHRoYXQgYWxsIHdvcmtfc3RydWN0cyBoYXZlIGZpbmlzaGVkLCB3ZSBjYW4ndCBob2xkCi0JICogc3RsYy0+bXV0ZXggdG8gYXZvaWQgZGVhZGxvY2sgKi8KLQljYW5jZWxfd29ya19zeW5jKCZzdGxjLT53b3JrKTsKLQotCS8qIEZJWE1FOiBmaW5kIG91dCBnb29kIHZhbHVlIHRvIHdhaXQgZm9yIGNoaXAgcG93ZXIgZG93biAqLwotCW1zbGVlcCgxMDApOwotCi0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JLyogRklYTUU6IHdlIHNob3VsZCBncmFjZWZ1bGx5IGhhbmRsZSBpZiB0aGUgc3RhdGUgaGFzIGNoYW5nZWQKLQkgKiBhZnRlciByZS1hY3F1aXJpbmcgbXV0ZXggKi8KLQlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFU0VUKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0Jc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0bGMpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVTRVRUSU5HOwotCi0Jc3RsYzQ1eHhfcG93ZXJfb24oc3RsYyk7Ci0Jc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0bGMpOwotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXggKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3Jlc2V0KHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdGxjNDV4eF93YXJuaW5nKCJyZXNldHRpbmcgZmlybXdhcmUiKTsKLQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFU0VUOwotCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzdGxjLT5odyk7Ci0JcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29ya19yZXNldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dvcmtfdHhfdGltZW91dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzdGxjNDV4eCwKLQkJCQkJICAgICB3b3JrX3R4X3RpbWVvdXQud29yayk7Ci0KLQlzdGxjNDV4eF93YXJuaW5nKCJ0eCB0aW1lb3V0Iik7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpCi0JCWdvdG8gb3V0OwotCi0Jc3RsYzQ1eHhfcmVzZXQoc3RsYyk7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfaW50X2FjayhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUzMiB2YWwpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9BQ0ssIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dha2V1cChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCXUzMiBpbnRzOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JLyogd2FrZSB0aGUgY2hpcCAqLwotCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsIFNQSV9UQVJHRVRfSU5UX1dBS0VVUCk7Ci0KLQkvKiBBbmQgd2FpdCBmb3IgdGhlIFJFQURZIGludGVycnVwdCAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7Ci0KLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jd2hpbGUgKCEoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCi0JCQkJZ290byBvdXQ7Ci0JCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQl9Ci0KLQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9SRUFEWSk7Ci0KLW91dDoKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3NsZWVwKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLCBTUElfVEFSR0VUX0lOVF9TTEVFUCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X2ludF9yZWFkeShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVF9FTiwKLQkJCSBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSk7Ci0KLQlzd2l0Y2ggKHN0bGMtPmZ3X3N0YXRlKSB7Ci0JY2FzZSBGV19TVEFURV9CT09USU5HOgotCQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFQURZOwotCQljb21wbGV0ZSgmc3RsYy0+ZndfY29tcCk7Ci0JCWJyZWFrOwotCWNhc2UgRldfU1RBVEVfUkVTRVRUSU5HOgotCQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFQURZOwotCi0JCXN0bGM0NXh4X3R4X3NjYW4oc3RsYyk7Ci0JCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOwotCQlzdGxjNDV4eF90eF9lZGNmKHN0bGMpOwotCi0JCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzdGxjLT5odyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeF90eGFjayhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX3R4ICp0eDsKLQlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OwotCWludCBmb3VuZCA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOwotCXR4ID0gKHN0cnVjdCBzX2xtb190eCAqKSAoY29udHJvbCArIDEpOwotCi0JaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4X3NlbnQpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlzdGxjNDV4eF93YXJuaW5nKCJubyBmcmFtZXMgd2FpdGluZyBmb3IgIgotCQkJCQkgImFja25vd2xlZGdlbWVudCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKLQkJaWYgKGNvbnRyb2wtPmhhbmRsZSA9PSBlbnRyeS0+aGFuZGxlKSB7Ci0JCQlmb3VuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmQpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoImNvdWxkbid0IGZpbmQgZnJhbWUgZm9yIHR4IGFjayAweCV4IiwKLQkJCQkJIGNvbnRyb2wtPmhhbmRsZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgIlRYIEFDSyAweCV4IiwgZW50cnktPmhhbmRsZSk7Ci0KLQlpZiAoZW50cnktPnN0YXR1c19uZWVkZWQpIHsKLQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7Ci0KLQkJaWYgKCEodHgtPmZsYWdzICYgTE1fVFhfRkFJTEVEKSkgewotCQkJLyogZnJhbWUgd2FzIGFja2VkICovCi0JCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JCQlpbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IHR4LT5yY3BpIC8gMiAtIDExMDsKLQkJfQotCi0JCXNrYl9wdWxsKGVudHJ5LT5za2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCQlpZWVlODAyMTFfdHhfc3RhdHVzKHN0bGMtPmh3LCBlbnRyeS0+c2tiKTsKLQl9Ci0KLQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOwotCi0Jc3RsYzQ1eHhfY2hlY2tfdHhzZW50KHN0bGMpOwotCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkKLQkJLyogdGhlcmUgYXJlIG5vIHBlbmRpbmcgZnJhbWVzLCB3ZSBjYW4gc3RvcCB0aGUgdHggdGltZW91dAotCQkgKiB0aW1lciAqLwotCQljYW5jZWxfZGVsYXllZF93b3JrKCZzdGxjLT53b3JrX3R4X3RpbWVvdXQpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOwotCi0JaWYgKHN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgJiYKLQkgICAgc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBNQVhfRlJBTUVfTEVOKSAhPSAtMSkgewotCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19RVUVVRSwgInJvb20gaW4gdHggYnVmZmVyLCB3YWtpbmcgcXVldWVzIik7Ci0JCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhzdGxjLT5odyk7Ci0JCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAwOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X2NvbnRyb2woc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0JaW50IHJldCA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQljb250cm9sID0gKHN0cnVjdCBzX2xtX2NvbnRyb2wgKikgc2tiLT5kYXRhOwotCi0Jc3dpdGNoIChjb250cm9sLT5vaWQpIHsKLQljYXNlIExNX09JRF9UWDoKLQkJcmV0ID0gc3RsYzQ1eHhfcnhfdHhhY2soc3RsYywgc2tiKTsKLQkJYnJlYWs7Ci0JY2FzZSBMTV9PSURfU0VUVVA6Ci0JY2FzZSBMTV9PSURfU0NBTjoKLQljYXNlIExNX09JRF9UUkFQOgotCWNhc2UgTE1fT0lEX0VEQ0Y6Ci0JY2FzZSBMTV9PSURfS0VZQ0FDSEU6Ci0JY2FzZSBMTV9PSURfUFNNOgotCWNhc2UgTE1fT0lEX1NUQVRTOgotCWNhc2UgTE1fT0lEX0xFRDoKLQlkZWZhdWx0OgotCQlzdGxjNDV4eF93YXJuaW5nKCJ1bmhhbmRsZWQgcnggY29udHJvbCBvaWQgJWRcbiIsCi0JCQkJIGNvbnRyb2wtPm9pZCk7Ci0JCWJyZWFrOwotCX0KLQotCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIGNvcGllZCBmcm9tIG1hYzgwMjExICovCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9wYXJzZV9lbGVtcyh1OCAqc3RhcnQsIHNpemVfdCBsZW4sCi0JCQkJIHN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKip0aW0sCi0JCQkJIHNpemVfdCAqdGltX2xlbikKLXsKLQlzaXplX3QgbGVmdCA9IGxlbjsKLQl1OCAqcG9zID0gc3RhcnQ7Ci0KLQl3aGlsZSAobGVmdCA+PSAyKSB7Ci0JCXU4IGlkLCBlbGVuOwotCi0JCWlkID0gKnBvcysrOwotCQllbGVuID0gKnBvcysrOwotCQlsZWZ0IC09IDI7Ci0KLQkJaWYgKGVsZW4gPiBsZWZ0KQotCQkJcmV0dXJuOwotCi0JCXN3aXRjaCAoaWQpIHsKLQkJY2FzZSBXTEFOX0VJRF9USU06Ci0JCQkqdGltID0gKHN0cnVjdCBzdGxjNDV4eF9pZV90aW0gKikgcG9zOwotCQkJKnRpbV9sZW4gPSBlbGVuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWxlZnQgLT0gZWxlbjsKLQkJcG9zICs9IGVsZW47Ci0JfQotfQotCi0vKgotICogbWFjODAyMTEgZG9lc24ndCBoYXZlIHN1cHBvcnQgZm9yIGFza2luZyBmcmFtZXMgd2l0aCBQUy1Qb2xsLCBzbyBsZXQncwotICogaW1wbGVtZW50IGluIHRoZSBkcml2ZXIgZm9yIG5vdy4gV2UgaGF2ZSB0byBhZGQgc3VwcG9ydCB0byBtYWM4MDIxMQotICogbGF0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfY2hlY2tfbW9yZV9kYXRhKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0Jc2l6ZV90IGxlbjsKLQl1MTYgZmM7Ci0KLQloZHIgPSAodm9pZCAqKSBza2ItPmRhdGEgKyBzaXplb2YoKmRhdGEpOwotCWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKCpkYXRhKTsKLQotCS8qIG1pbmltdW0gZnJhbWUgbGVuZ3RoIGlzIHRoZSBudWxsIGZyYW1lIGxlbmd0aCAyNCBieXRlcyAqLwotCWlmIChsZW4gPCAyNCkgewotCQlzdGxjNDV4eF93YXJuaW5nKCJpbnZhbGlkIGZyYW1lIGxlbmd0aCB3aGVuIGNoZWNraW5nIGZvciAiCi0JCQkJICJtb3JlIGRhdGEiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkKLQkJLyogdGhpcyBpcyBub3QgZnJvbSBEUyAqLwotCQlyZXR1cm4gMDsKLQotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoaGRyLT5hZGRyMSwgc3RsYy0+bWFjX2FkZHIpICE9IDApCi0JCS8qIHRoZSBmcmFtZSB3YXMgbm90IGZvciB1cyAqLwotCQlyZXR1cm4gMDsKLQotCWlmICghKGZjICYgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpKSB7Ci0JCS8qIEFQIGhhcyBubyBtb3JlIGZyYW1lcyBidWZmZXJlZCBmb3IgdXMgKi8KLQkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAiYWxsIGJ1ZmZlcmVkIGZyYW1lcyByZXRyaWV2ZWQiKTsKLQkJc3RsYy0+cHNwb2xsaW5nID0gZmFsc2U7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIE1PUkVEQVRBIGJpdCBpcyBzZXQsIGxldCdzIGFzayBmb3IgYSBuZXcgZnJhbWUgZnJvbSB0aGUgQVAgKi8KLQlzdGxjNDV4eF90eF9wc3BvbGwoc3RsYywgc3RsYy0+cHNtKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogbWFjODAyMTEgY2Fubm90IHJlYWQgVElNIGZyb20gYmVhY29ucywgc28gbGV0J3MgYWRkIGEgaGFjayB0byB0aGUKLSAqIGRyaXZlci4gV2UgaGF2ZSB0byBhZGQgc3VwcG9ydCB0byBtYWM4MDIxMSBsYXRlci4KLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF9yeF9kYXRhX2JlYWNvbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKLQlzaXplX3QgbGVuID0gc2tiLT5sZW4sIHRpbV9sZW4gPSAwLCBiYXNlbGVuLCBwdmJtYXBfbGVuOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQlzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICp0aW0gPSBOVUxMOwotCWludCBibWFwX29mZnNldCwgaW5kZXgsIGFpZF9iaXQ7Ci0KLQltZ210ID0gKHZvaWQgKikgc2tiLT5kYXRhICsgc2l6ZW9mKCpkYXRhKTsKLQotCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKLQlpZiAoYmFzZWxlbiA+IGxlbikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJpbnZhbGlkIGJhc2VsZW4gaW4gYmVhY29uIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN0bGM0NXh4X3BhcnNlX2VsZW1zKG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLCAmdGltLAotCQkJICAgICAmdGltX2xlbik7Ci0KLQlpZiAoIXRpbSkgewotCQlzdGxjNDV4eF93YXJuaW5nKCJkaWRuJ3QgZmluZCB0aW0gZnJvbSBhIGJlYWNvbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibWFwX29mZnNldCA9IHRpbS0+Ym1hcF9jb250cm9sICYgMHhmZTsKLQlpbmRleCA9IHN0bGMtPmFpZCAvIDggLSBibWFwX29mZnNldDsKLQotCXB2Ym1hcF9sZW4gPSB0aW1fbGVuIC0gMzsKLQlpZiAoaW5kZXggPiBwdmJtYXBfbGVuKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFpZF9iaXQgPSAhISh0aW0tPnB2Ym1hcFtpbmRleF0gJiAoMSA8PCBzdGxjLT5haWQgJSA4KSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJmYyAweCV4IGR1cmF0aW9uICVkIHNlcSAlZCBkdGltICV1ICIKLQkJICAgICAgICJibWFwX2NvbnRyb2wgMHgleCBhaWRfYml0ICVkIiwKLQkJICAgICAgIG1nbXQtPmZyYW1lX2NvbnRyb2wsIG1nbXQtPmR1cmF0aW9uLCBtZ210LT5zZXFfY3RybCA+PiA0LAotCQkgICAgICAgdGltLT5kdGltX2NvdW50LCB0aW0tPmJtYXBfY29udHJvbCwgYWlkX2JpdCk7Ci0KLQlpZiAoIWFpZF9iaXQpCi0JCXJldHVybiAwOwotCi0Jc3RsYy0+cHNwb2xsaW5nID0gdHJ1ZTsKLQlzdGxjNDV4eF90eF9wc3BvbGwoc3RsYywgc3RsYy0+cHNtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3J4X2RhdGEoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3Qgc19sbV9kYXRhX2luICpkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfaW4gKikgc2tiLT5kYXRhOwotCWludCBhbGlnbiA9IDA7Ci0JdTggKnAsIGFsaWduX2xlbjsKLQl1MTYgbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JaWYgKHN0bGMtPnBzbSkgewotCQlpZiAoZGF0YS0+ZmxhZ3MgJiBMTV9JTl9CRUFDT04pCi0JCQlzdGxjNDV4eF9yeF9kYXRhX2JlYWNvbihzdGxjLCBza2IpOwotCQllbHNlIGlmIChzdGxjLT5wc3BvbGxpbmcgJiYgKGRhdGEtPmZsYWdzICYgTE1fSU5fREFUQSkpCi0JCQlzdGxjNDV4eF9jaGVja19tb3JlX2RhdGEoc3RsYywgc2tiKTsKLQl9Ci0KLQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOwotCi0Jc3RhdHVzLmZyZXEgPSBkYXRhLT5mcmVxdWVuY3k7Ci0Jc3RhdHVzLnNpZ25hbCA9IGRhdGEtPnJjcGkgLyAyIC0gMTEwOwotCi0JLyogbGV0J3MgYXNzdW1lIHRoYXQgbWF4aW11bSByY3BpIHZhbHVlIGlzIDE0MCAoPSAzNSBkQm0pICovCi0Jc3RhdHVzLnF1YWwgPSBkYXRhLT5yY3BpICogMTAwIC8gMTQwOwotCi0Jc3RhdHVzLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JLyoKLQkgKiBGSVhNRTogdGhpcyBnaXZlcyB3YXJuaW5nIGZyb20gX19pZWVlODAyMTFfcngoKQotCSAqCi0JICogc3RhdHVzLnJhdGVfaWR4ID0gZGF0YS0+cmF0ZTsKLQkgKi8KLQotCWxlbiA9IGRhdGEtPmxlbmd0aDsKLQotCWlmIChkYXRhLT5mbGFncyAmIExNX0ZMQUdfQUxJR04pCi0JCWFsaWduID0gMTsKLQotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpkYXRhKSk7Ci0KLQlpZiAoYWxpZ24pIHsKLQkJcCA9IHNrYi0+ZGF0YTsKLQkJYWxpZ25fbGVuID0gKnA7Ci0JCXNrYl9wdWxsKHNrYiwgYWxpZ25fbGVuKTsKLQl9Ci0KLQlza2JfdHJpbShza2IsIGxlbik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19SWCwgInJ4IGRhdGEgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCW1lbWNweShJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwotCWllZWU4MDIxMV9yeChzdGxjLT5odywgc2tiKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotc3RhdGljIGludCBzdGxjNDV4eF9yeChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXQ7Ci0JdTE2IGxlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN0bGM0NXh4X3dha2V1cChzdGxjKTsKLQotCS8qIGR1bW15IHJlYWQgdG8gZmx1c2ggU1BJIERNQSBjb250cm9sbGVyIGJ1ZyAqLwotCXN0bGM0NXh4X3JlYWQxNihzdGxjLCBTUElfQURSU19HRU5fUFVSUF8xKTsKLQotCWxlbiA9IHN0bGM0NXh4X3JlYWQxNihzdGxjLCBTUElfQURSU19ETUFfREFUQSk7Ci0KLQlpZiAobGVuID09IDApIHsKLQkJc3RsYzQ1eHhfd2FybmluZygicnggcmVxdWVzdCBvZiB6ZXJvIGJ5dGVzIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKLQlpZiAoIXNrYikgewotCQlzdGxjNDV4eF93YXJuaW5nKCJjb3VsZCBub3QgYWxsb2Mgc2tiIik7Ci0JCXJldHVybiAwOwotCX0KLQotCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBLCBza2JfcHV0KHNrYiwgbGVuKSwgbGVuKTsKLQotCXN0bGM0NXh4X3NsZWVwKHN0bGMpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfUlgsICJyeCBmcmFtZSAweCVwICVkIEIiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQlzdGxjNDV4eF9kdW1wKERFQlVHX1JYX0NPTlRFTlQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCi0JY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKLQotCWlmIChjb250cm9sLT5mbGFncyAmIExNX0ZMQUdfQ09OVFJPTCkKLQkJcmV0ID0gc3RsYzQ1eHhfcnhfY29udHJvbChzdGxjLCBza2IpOwotCWVsc2UKLQkJcmV0ID0gc3RsYzQ1eHhfcnhfZGF0YShzdGxjLCBza2IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc3RsYzQ1eHhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmNvbmZpZykKLXsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY29uZmlnOwotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfSVJRLCAiSVJRIik7Ci0KLQlxdWV1ZV93b3JrKHN0bGMtPmh3LT53b3JrcXVldWUsICZzdGxjLT53b3JrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF90eF9mcmFtZShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHUzMiBhZGRyZXNzLAotCQkJICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IHNfZG1hX3JlZ3MgZG1hX3JlZ3M7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWludCByZXQgPSAwOwotCXUzMiBpbnRzOwotCi0Jc3RsYy0+dHhfZnJhbWVzKys7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGZyYW1lIDB4JXAgJXp1IEIiLCBidWYsIGxlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBidWYsIGxlbik7Ci0KLQlzdGxjNDV4eF93YWtldXAoc3RsYyk7Ci0KLQlkbWFfcmVncy5jbWQgID0gU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRTsKLQlkbWFfcmVncy5sZW4gID0gY3B1X3RvX2xlMTYobGVuKTsKLQlkbWFfcmVncy5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcmVzcyk7Ci0KLQlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsICZkbWFfcmVncywKLQkJCSAgIHNpemVvZihkbWFfcmVncykpOwotCi0Jc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBLCBidWYsIGxlbik7Ci0KLQl0aW1lb3V0ID0gamlmZmllcyArIDIgKiBIWjsKLQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7Ci0Jd2hpbGUgKCEoaW50cyAmIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSkpIHsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXN0bGM0NXh4X3dhcm5pbmcoIldSX1JFQURZIHRpbWVvdXQiKTsKLQkJCXJldCA9IC0xOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCX0KLQotCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1dSX1JFQURZKTsKLQotCXN0bGM0NXh4X3NsZWVwKHN0bGMpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF93cV90eChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKSB7Ci0JCWVudHJ5ID0gbGlzdF9lbnRyeShzdGxjLT50eF9wZW5kaW5nLm5leHQsCi0JCQkJICAgc3RydWN0IHR4YnVmZmVyLCB0eF9saXN0KTsKLQotCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+dHhfbGlzdCk7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JCXJldCA9IHN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5mcmFtZV9zdGFydCwKLQkJCQkJZW50cnktPnNrYi0+ZGF0YSwgZW50cnktPnNrYi0+bGVuKTsKLQotCQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JCWlmIChyZXQgPCAwKSB7Ci0JCQkvKiBmcmFtZSB0cmFuc2ZlciB0byBmaXJtd2FyZSBidWZmZXIgZmFpbGVkICovCi0JCQkvKiBGSVhNRTogcmVwb3J0IHRoaXMgdG8gbWFjODAyMTEgKi8KLQkJCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7Ci0JCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzdGxjLT53b3JrX3R4X3RpbWVvdXQsCi0JCQkJICAgbXNlY3NfdG9famlmZmllcyhUWF9USU1FT1VUKSk7Ci0JfQotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RsYzQ1eHgsIHdvcmspOwotCXUzMiBpbnRzOwotCWludCByZXQ7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoc3RsYy0+Zndfc3RhdGUgPT0gRldfU1RBVEVfT0ZGICYmCi0JICAgIHN0bGMtPmZ3X3N0YXRlID09IEZXX1NUQVRFX1JFU0VUKQotCQlnb3RvIG91dDsKLQotCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CSCwgImJlZ2luIGhvc3RfaW50cyAweCUwOHgiLCBpbnRzKTsKLQotCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSB7Ci0JCXN0bGM0NXh4X2ludF9yZWFkeShzdGxjKTsKLQkJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfUkVBRFkpOwotCX0KLQotCWlmIChzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9VUERBVEUpIHsKLQkJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfVVBEQVRFKTsKLQkJcmV0ID0gc3RsYzQ1eHhfcngoc3RsYyk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmIChpbnRzICYgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkgewotCQlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOwotCQlyZXQgPSBzdGxjNDV4eF9yeChzdGxjKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlyZXQgPSBzdGxjNDV4eF93cV90eChzdGxjKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9yZXNldChzdGxjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOwotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JILCAiZW5kIGhvc3RfaW50cyAweCUwOHgiLCBpbnRzKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9lZGNmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOwotCXN0cnVjdCBzX2xtb19lZGNmICplZGNmOwotCXNpemVfdCBsZW4sIGVkY2ZfbGVuOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JZWRjZl9sZW4gPSBzaXplb2YoKmVkY2YpOwotCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBlZGNmX2xlbjsKLQljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwotCWVkY2YgPSAoc3RydWN0IHNfbG1vX2VkY2YgKikgKGNvbnRyb2wgKyAxKTsKLQotCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKLQljb250cm9sLT5sZW5ndGggPSBlZGNmX2xlbjsKLQljb250cm9sLT5vaWQgPSBMTV9PSURfRURDRjsKLQotCWVkY2YtPnNsb3R0aW1lID0gMHgxNDsKLQllZGNmLT5zaWZzID0gMTA7Ci0JZWRjZi0+ZW9mcGFkID0gNjsKLQllZGNmLT5tYXhidXJzdCA9IDE1MDA7Ci0KLQllZGNmLT5xdWV1ZXNbMF0uYWlmcyA9IDI7Ci0JZWRjZi0+cXVldWVzWzBdLnBhZDAgPSAxOwotCWVkY2YtPnF1ZXVlc1swXS5jd21pbiA9IDM7Ci0JZWRjZi0+cXVldWVzWzBdLmN3bWF4ID0gNzsKLQllZGNmLT5xdWV1ZXNbMF0udHhvcCA9IDQ3OwotCWVkY2YtPnF1ZXVlc1sxXS5haWZzID0gMjsKLQllZGNmLT5xdWV1ZXNbMV0ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzFdLmN3bWluID0gNzsKLQllZGNmLT5xdWV1ZXNbMV0uY3dtYXggPSAxNTsKLQllZGNmLT5xdWV1ZXNbMV0udHhvcCA9IDk0OwotCWVkY2YtPnF1ZXVlc1syXS5haWZzID0gMzsKLQllZGNmLT5xdWV1ZXNbMl0ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzJdLmN3bWluID0gMTU7Ci0JZWRjZi0+cXVldWVzWzJdLmN3bWF4ID0gMTAyMzsKLQllZGNmLT5xdWV1ZXNbMl0udHhvcCA9IDA7Ci0JZWRjZi0+cXVldWVzWzNdLmFpZnMgPSA3OwotCWVkY2YtPnF1ZXVlc1szXS5wYWQwID0gMDsKLQllZGNmLT5xdWV1ZXNbM10uY3dtaW4gPSAxNTsKLQllZGNmLT5xdWV1ZXNbM10uY3dtYXggPSAxMDIzOwotCWVkY2YtPnF1ZXVlc1szXS50eG9wID0gMDsKLQllZGNmLT5xdWV1ZXNbNF0uYWlmcyA9IDEzOwotCWVkY2YtPnF1ZXVlc1s0XS5wYWQwID0gOTk7Ci0JZWRjZi0+cXVldWVzWzRdLmN3bWluID0gMzQzNzsKLQllZGNmLT5xdWV1ZXNbNF0uY3dtYXggPSA1MTI7Ci0JZWRjZi0+cXVldWVzWzRdLnR4b3AgPSAxMjsKLQllZGNmLT5xdWV1ZXNbNV0uYWlmcyA9IDE0MjsKLQllZGNmLT5xdWV1ZXNbNV0ucGFkMCA9IDEwOTsKLQllZGNmLT5xdWV1ZXNbNV0uY3dtaW4gPSA4NzU2OwotCWVkY2YtPnF1ZXVlc1s1XS5jd21heCA9IDY7Ci0JZWRjZi0+cXVldWVzWzVdLnR4b3AgPSAwOwotCWVkY2YtPnF1ZXVlc1s2XS5haWZzID0gNDsKLQllZGNmLT5xdWV1ZXNbNl0ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzZdLmN3bWluID0gMDsKLQllZGNmLT5xdWV1ZXNbNl0uY3dtYXggPSA1ODcwNTsKLQllZGNmLT5xdWV1ZXNbNl0udHhvcCA9IDI1NzE2OwotCWVkY2YtPnF1ZXVlc1s3XS5haWZzID0gMDsKLQllZGNmLT5xdWV1ZXNbN10ucGFkMCA9IDA7Ci0JZWRjZi0+cXVldWVzWzddLmN3bWluID0gMDsKLQllZGNmLT5xdWV1ZXNbN10uY3dtYXggPSAwOwotCWVkY2YtPnF1ZXVlc1s3XS50eG9wID0gMDsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zZXR1cChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCi17Ci0Jc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKLQlzdHJ1Y3Qgc19sbW9fc2V0dXAgKnNldHVwOwotCXNpemVfdCBsZW4sIHNldHVwX2xlbjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNldHVwX2xlbiA9IHNpemVvZigqc2V0dXApOwotCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBzZXR1cF9sZW47Ci0JY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlzZXR1cCA9IChzdHJ1Y3Qgc19sbW9fc2V0dXAgKikgKGNvbnRyb2wgKyAxKTsKLQotCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKLQljb250cm9sLT5sZW5ndGggPSBzZXR1cF9sZW47Ci0JY29udHJvbC0+b2lkID0gTE1fT0lEX1NFVFVQOwotCi0Jc2V0dXAtPmZsYWdzID0gTE1fU0VUVVBfSU5GUkE7Ci0Jc2V0dXAtPmFudGVubmEgPSAyOwotCXNldHVwLT5yeF9hbGlnbiA9IDA7Ci0Jc2V0dXAtPnJ4X2J1ZmZlciA9IEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUOwotCXNldHVwLT5yeF9tdHUgPSBGSVJNV0FSRV9NVFU7Ci0Jc2V0dXAtPmZyb250ZW5kID0gNTsKLQlzZXR1cC0+dGltZW91dCA9IDA7Ci0Jc2V0dXAtPnRydW5jYXRlID0gNDg4OTY7Ci0Jc2V0dXAtPmJyYXRlbWFzayA9IDB4ZmZmZmZmZmY7Ci0Jc2V0dXAtPnJlZl9jbG9jayA9IDY0NDI0NTA5NDsKLQlzZXR1cC0+bHBmX2JhbmR3aWR0aCA9IDY1NTM1OwotCXNldHVwLT5vc2Nfc3RhcnRfZGVsYXkgPSA2NTUzNTsKLQotCW1lbWNweShzZXR1cC0+bWFjYWRkciwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkoc2V0dXAtPmJzc2lkLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3NjYW4oc3RydWN0IHN0bGM0NXh4ICpzdGxjKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX3NjYW4gKnNjYW47Ci0Jc2l6ZV90IGxlbiwgc2Nhbl9sZW47Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlzY2FuX2xlbiA9IHNpemVvZigqc2Nhbik7Ci0JbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHNjYW5fbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0Jc2NhbiA9IChzdHJ1Y3Qgc19sbW9fc2NhbiAqKSAoY29udHJvbCArIDEpOwotCi0JY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOwotCWNvbnRyb2wtPmxlbmd0aCA9IHNjYW5fbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9TQ0FOOwotCi0Jc2Nhbi0+ZmxhZ3MgPSBMTV9TQ0FOX0VYSVQ7Ci0Jc2Nhbi0+YnJhdGVtYXNrID0gMHgxNWY7Ci0Jc2Nhbi0+YWxvZnRbMF0gPSAzOwotCXNjYW4tPmFsb2Z0WzFdID0gMzsKLQlzY2FuLT5hbG9mdFsyXSA9IDE7Ci0Jc2Nhbi0+YWxvZnRbM10gPSAwOwotCXNjYW4tPmFsb2Z0WzRdID0gMDsKLQlzY2FuLT5hbG9mdFs1XSA9IDA7Ci0Jc2Nhbi0+YWxvZnRbNl0gPSAwOwotCXNjYW4tPmFsb2Z0WzddID0gMDsKLQotCW1lbWNweSgmc2Nhbi0+cnNzaWNhbCwgJnN0bGMtPmNhbF9yc3NpWyhzdGxjLT5jaGFubmVsIC0gMSkgKgotCQkJCQkgICAgICAgUlNTSV9DQUxfTEVOXSwKLQkgICAgICAgUlNTSV9DQUxfTEVOKTsKLQltZW1jcHkoJnNjYW4tPmNoYW5uZWwsICZzdGxjLT5jYWxfY2hhbm5lbHNbKHN0bGMtPmNoYW5uZWwgLSAxKSAqCi0JCQkJCQkgICBDSEFOTkVMX0NBTF9MRU5dLAotCSAgICAgICBDSEFOTkVMX0NBTF9MRU4pOwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOwotCi0Ja2ZyZWUoY29udHJvbCk7Ci19Ci0KLS8qCi0gKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4Ci0gKi8KLXN0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfcHNwb2xsKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKnBzcG9sbDsKLQlpbnQgcGF5bG9hZF9sZW4sIHBhZGRpbmcsIGk7Ci0Jc3RydWN0IHNfbG1fZGF0YV9vdXQgKmRhdGE7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWNoYXIgKnBheWxvYWQ7Ci0JdTE2IGZjOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gKyAxNik7Ci0JaWYgKCFza2IpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiZmFpbGVkIHRvIGFsbG9jYXRlIHBzcG9sbCBmcmFtZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JcHNwb2xsID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAxNik7Ci0JbWVtc2V0KHBzcG9sbCwgMCwgMTYpOwotCWZjID0gSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEw7Ci0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUE07Ci0JcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwotCXBzcG9sbC0+ZHVyYXRpb25faWQgPSBjcHVfdG9fbGUxNihzdGxjLT5haWQpOwotCi0JLyogYWlkIGluIFBTLVBvbGwgaGFzIGl0cyB0d28gTVNCcyBlYWNoIHNldCB0byAxICovCi0JcHNwb2xsLT5kdXJhdGlvbl9pZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1KSB8IGNwdV90b19sZTE2KDEgPDwgMTQpOwotCi0JbWVtY3B5KHBzcG9sbC0+YWRkcjEsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHBzcG9sbC0+YWRkcjIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJzZW5kaW5nIFBTLVBvbGwgZnJhbWUgdG8gJXBNIChwb3dlcnNhdmUgJWQsICIKLQkJICAgICAgICJmYyAweCV4LCBhaWQgJWQpIiwgcHNwb2xsLT5hZGRyMSwKLQkJICAgICAgIHBvd2Vyc2F2ZSwgZmMsIHN0bGMtPmFpZCk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlpZiAoIWVudHJ5KSB7Ci0JCS8qCi0JCSAqIFRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgotCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAotCQkgKiBzcGFjZS4KLQkJICoKLQkJICogQnV0IEknbSB0b28gbGF6eSBhbmQgb21pdCBpdCBmb3Igbm93LgotCQkgKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIHR4IGJ1ZmZlciBmdWxsIGlzIGZ1bGwgIgotCQkJCQkgImZvciBudWxsIGZyYW1lIik7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCXBheWxvYWQgPSBza2ItPmRhdGE7Ci0JcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKLQlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKLQllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOwotCi0JZW50cnktPnNrYiA9IHNrYjsKLQllbnRyeS0+c3RhdHVzX25lZWRlZCA9IGZhbHNlOwotCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7Ci0JZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKLQkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKLQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAotCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0JZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQlpZiAocGFkZGluZykKLQkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOwotCi0JZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7Ci0JZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47Ci0JZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKLQlkYXRhLT5haWQgPSAxOwotCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKLQlkYXRhLT5yZXRyaWVzID0gNzsKLQlkYXRhLT5hbG9mdF9jdHJsID0gMDsKLQlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKLQlkYXRhLT5rZXl0eXBlID0gMDsKLQlkYXRhLT5rZXlsZW4gPSAwOwotCWRhdGEtPnF1ZXVlID0gTE1fUVVFVUVfREFUQTM7Ci0JZGF0YS0+YmFja2xvZyA9IDMyOwotCWRhdGEtPmFudGVubmEgPSAyOwotCWRhdGEtPmN0cyA9IDM7Ci0JZGF0YS0+cG93ZXIgPSAxMjc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlkYXRhLT5hbG9mdFtpXSA9IDA7Ci0KLQkvKgotCSAqIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlcgotCSAqCi0JICogRklYTUU6IGlnbm9yZWQgZm9yIG5vdwotCSAqLwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPnN0YXJ0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4Ci0gKgotICogc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gbWFjODAyMTEvaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMKLSAqLwotc3RhdGljIGludCBzdGxjNDV4eF90eF9udWxsZnVuYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKLQlpbnQgcGF5bG9hZF9sZW4sIHBhZGRpbmcsIGk7Ci0Jc3RydWN0IHNfbG1fZGF0YV9vdXQgKmRhdGE7Ci0Jc3RydWN0IHR4YnVmZmVyICplbnRyeTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWNoYXIgKnBheWxvYWQ7Ci0JdTE2IGZjOwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gKyAyNCk7Ci0JaWYgKCFza2IpIHsKLQkJc3RsYzQ1eHhfd2FybmluZygiZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbCBmcmFtZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIHN0bGMtPmh3LT5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChudWxsZnVuYywgMCwgMjQpOwotCWZjID0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUzsKLQotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BNOwotCi0JbnVsbGZ1bmMtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjMsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19QU00sICJzZW5kaW5nIE51bGwgZnJhbWUgdG8gJXBNIChwb3dlcnNhdmUgJWQsICIKLQkJICAgICAgICJmYyAweCV4KSIsIG51bGxmdW5jLT5hZGRyMSwgcG93ZXJzYXZlLCBmYyk7Ci0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JZW50cnkgPSBzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdGxjLCBza2ItPmxlbik7Ci0KLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlpZiAoIWVudHJ5KSB7Ci0JCS8qCi0JCSAqIFRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgotCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAotCQkgKiBzcGFjZS4KLQkJICoKLQkJICogQnV0IEknbSB0b28gbGF6eSBhbmQgb21pdCBpdCBmb3Igbm93LgotCQkgKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXN0bGM0NXh4X3dhcm5pbmcoImZpcm13YXJlIHR4IGJ1ZmZlciBmdWxsIGlzIGZ1bGwgIgotCQkJCQkgImZvciBudWxsIGZyYW1lIik7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCXBheWxvYWQgPSBza2ItPmRhdGE7Ci0JcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKLQlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKLQllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOwotCi0JZW50cnktPnNrYiA9IHNrYjsKLQllbnRyeS0+c3RhdHVzX25lZWRlZCA9IGZhbHNlOwotCWVudHJ5LT5oYW5kbGUgPSAodTMyKSBza2I7Ci0JZW50cnktPmxpZmV0aW1lID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVFhfRlJBTUVfTElGRVRJTUUpOwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBkYXRhIDB4JXggKDB4JXAgcGF5bG9hZCAlZCBCICIKLQkJICAgICAgICJwYWRkaW5nICVkIGhlYWRlcl9sZW4gJWQpIiwKLQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIHBheWxvYWQsIHBheWxvYWRfbGVuLCBwYWRkaW5nLAotCQkgICAgICAgZW50cnktPmhlYWRlcl9sZW4pOwotCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwotCi0JZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX291dCAqKSBza2JfcHVzaChza2IsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCW1lbXNldChkYXRhLCAwLCBlbnRyeS0+aGVhZGVyX2xlbik7Ci0KLQlpZiAocGFkZGluZykKLQkJZGF0YS0+ZmxhZ3MgPSBMTV9GTEFHX0FMSUdOOwotCi0JZGF0YS0+ZmxhZ3MgPSBMTV9PVVRfQlVSU1Q7Ci0JZGF0YS0+bGVuZ3RoID0gcGF5bG9hZF9sZW47Ci0JZGF0YS0+aGFuZGxlID0gZW50cnktPmhhbmRsZTsKLQlkYXRhLT5haWQgPSAxOwotCWRhdGEtPnJ0c19yZXRyaWVzID0gNzsKLQlkYXRhLT5yZXRyaWVzID0gNzsKLQlkYXRhLT5hbG9mdF9jdHJsID0gMDsKLQlkYXRhLT5jcnlwdF9vZmZzZXQgPSA1ODsKLQlkYXRhLT5rZXl0eXBlID0gMDsKLQlkYXRhLT5rZXlsZW4gPSAwOwotCWRhdGEtPnF1ZXVlID0gTE1fUVVFVUVfREFUQTM7Ci0JZGF0YS0+YmFja2xvZyA9IDMyOwotCWRhdGEtPmFudGVubmEgPSAyOwotCWRhdGEtPmN0cyA9IDM7Ci0JZGF0YS0+cG93ZXIgPSAxMjc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlkYXRhLT5hbG9mdFtpXSA9IDA7Ci0KLQkvKgotCSAqIGNoZWNrIGlmIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIGluIHR4IGJ1ZmZlcgotCSAqCi0JICogRklYTUU6IGlnbm9yZWQgZm9yIG5vdwotCSAqLwotCi0Jc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgZW50cnktPnN0YXJ0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQotCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXggKi8KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X3R4X3BzbShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7Ci0Jc3RydWN0IHNfbG1vX3BzbSAqcHNtOwotCXNpemVfdCBsZW4sIHBzbV9sZW47Ci0KLQlXQVJOX09OKCFzdGxjLT5hc3NvY2lhdGVkKTsKLQlXQVJOX09OKHN0bGMtPmFpZCA8IDEpOwotCVdBUk5fT04oc3RsYy0+YWlkID4gMjAwNyk7Ci0KLQlwc21fbGVuID0gc2l6ZW9mKCpwc20pOwotCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBwc21fbGVuOwotCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JcHNtID0gKHN0cnVjdCBzX2xtb19wc20gKikgKGNvbnRyb2wgKyAxKTsKLQotCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKLQljb250cm9sLT5sZW5ndGggPSBwc21fbGVuOwotCWNvbnRyb2wtPm9pZCA9IExNX09JRF9QU007Ci0KLQlpZiAoZW5hYmxlKQotCQlwc20tPmZsYWdzIHw9IExNX1BTTTsKLQotCXBzbS0+YWlkID0gc3RsYy0+YWlkOwotCi0JcHNtLT5iZWFjb25fcmNwaV9za2lwX21heCA9IDYwOwotCi0JcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzBdLnBlcmlvZHMgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzFdLmludGVydmFsID0gMTsKLQlwc20tPmludGVydmFsc1sxXS5wZXJpb2RzID0gMTsKLQlwc20tPmludGVydmFsc1syXS5pbnRlcnZhbCA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbMl0ucGVyaW9kcyA9IDE7Ci0JcHNtLT5pbnRlcnZhbHNbM10uaW50ZXJ2YWwgPSAxOwotCXBzbS0+aW50ZXJ2YWxzWzNdLnBlcmlvZHMgPSAxOwotCi0JcHNtLT5uciA9IDA7Ci0JcHNtLT5leGNsdWRlWzBdID0gMDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgInNlbmRpbmcgTE1fT0lEX1BTTSAoYWlkICVkLCBpbnRlcnZhbCAlZCkiLAotCQkgICAgICAgcHNtLT5haWQsIHBzbS0+aW50ZXJ2YWxzWzBdLmludGVydmFsKTsKLQotCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKLQotCWtmcmVlKGNvbnRyb2wpOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOwotCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOwotCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7Ci0JY2hhciAqcGF5bG9hZDsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKLQlpZiAoIWVudHJ5KSB7Ci0JCS8qIHRoZSBxdWV1ZSBzaG91bGQgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIGZpcm13YXJlIGJ1ZmZlcgotCQkgKiBpcyBmdWxsLCBzbyBmaXJtd2FyZSBidWZmZXIgc2hvdWxkIGFsd2F5cyBoYXZlIGVub3VnaAotCQkgKiBzcGFjZSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgYnVmZmVyIGZ1bGwiKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQotCi0JaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQotCXBheWxvYWQgPSBza2ItPmRhdGE7Ci0JcGF5bG9hZF9sZW4gPSBza2ItPmxlbjsKLQlwYWRkaW5nID0gKGludCkgKHNrYi0+ZGF0YSAtIHNpemVvZigqZGF0YSkpICYgMzsKLQllbnRyeS0+aGVhZGVyX2xlbiA9IHNpemVvZigqZGF0YSkgKyBwYWRkaW5nOwotCi0JZW50cnktPnNrYiA9IHNrYjsKLQllbnRyeS0+c3RhdHVzX25lZWRlZCA9IHRydWU7Ci0JZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKLQllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgotCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAotCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCi0JCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7Ci0Jc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7Ci0KLQlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOwotCi0JbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKLQotCWlmIChwYWRkaW5nKQotCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047Ci0KLQlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKLQlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKLQlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOwotCWRhdGEtPmFpZCA9IDE7Ci0JZGF0YS0+cnRzX3JldHJpZXMgPSA3OwotCWRhdGEtPnJldHJpZXMgPSA3OwotCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOwotCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OwotCWRhdGEtPmtleXR5cGUgPSAwOwotCWRhdGEtPmtleWxlbiA9IDA7Ci0JZGF0YS0+cXVldWUgPSAyOwotCWRhdGEtPmJhY2tsb2cgPSAzMjsKLQlkYXRhLT5hbnRlbm5hID0gMjsKLQlkYXRhLT5jdHMgPSAzOwotCWRhdGEtPnBvd2VyID0gMTI3OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlyYXRlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHN0bGMtPmh3LCBpbmZvKTsKLQkJZGF0YS0+YWxvZnRbaV0gPSByYXRlLT5od192YWx1ZTsKLQl9Ci0KLQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3BlbmRpbmcpOwotCi0JLyogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyICovCi0JaWYgKHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgPT0gLTEpIHsKLQkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJ0eCBidWZmZXIgZnVsbCwgc3RvcHBpbmcgcXVldWVzIik7Ci0JCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAxOwotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOwotCX0KLQotCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmspOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCi0JcmV0dXJuIE5FVERFVl9UWF9PSzsKLX0KLQotc3RhdGljIGludCBzdGxjNDV4eF9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX0JPT1RJTkc7Ci0Jc3RsYy0+Y2hhbm5lbCA9IDE7Ci0KLQlzdGxjNDV4eF9wb3dlcl9vbihzdGxjKTsKLQotCXJldCA9IHN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKLQlpZiAocmV0IDwgMCkgewotCQlzdGxjNDV4eF9wb3dlcl9vZmYoc3RsYyk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjAwMCk7Ci0JdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZzdGxjLT5md19jb21wLAotCQkJCQkJCSAgICB0aW1lb3V0KTsKLQlpZiAoIXRpbWVvdXQpIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGJvb3QgZmFpbGVkIik7Ci0JCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0JPT1QsICJmaXJtd2FyZSBib290ZWQiKTsKLQotCS8qIEZJWE1FOiBzaG91bGQgd2UgdGFrZSBtdXRleCBqdXN0IGFmdGVyIHdhaXRfZm9yX2NvbXBsZXRpb24oKT8gKi8KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlXQVJOX09OKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKTsKLQotCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKLQotCS8qIEZJWE1FOiBtYWtlIHN1cmUgdGhhdCBhbGwgd29ya19zdHJ1Y3RzIGhhdmUgY29tcGxldGVkICovCi0KLQlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOwotCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKLQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7Ci0KLQlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX09GRjsKLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKLXsKLQlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKLQotCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAoY29uZi0+dHlwZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCW1lbWNweShzdGxjLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotfQotCi1zdGF0aWMgaW50IHN0bGM0NXh4X29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlzdGxjLT5jaGFubmVsID0gaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWU7Ci0Jc3RsYzQ1eHhfdHhfc2NhbihzdGxjKTsKLQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKLQlzdGxjNDV4eF90eF9lZGNmKHN0bGMpOwotCi0JaWYgKChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAhPSBzdGxjLT5wc20pIHsKLQkJc3RsYy0+cHNtID0gaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUzsKLQkJaWYgKHN0bGMtPmFzc29jaWF0ZWQpIHsKLQkJCXN0bGM0NXh4X3R4X3BzbShzdGxjLCBzdGxjLT5wc20pOwotCQkJc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RsYywgc3RsYy0+cHNtKTsKLQkJfQotCX0KLQotCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bGM0NXh4X29wX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgICAgICBpbnQgbWNfY291bnQsCi0JCQkJICAgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCi17Ci0JKnRvdGFsX2ZsYWdzID0gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAotCQkJCQkgdTMyIGNoYW5nZWQpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0JbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOwotCi0JbWVtY3B5KHN0bGMtPmJzc2lkLCBpbmZvLT5ic3NpZCwgRVRIX0FMRU4pOwotCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOwotCi0JbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Ci0KLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCXN0bGMtPmFzc29jaWF0ZWQgPSBpbmZvLT5hc3NvYzsKLQkJaWYgKGluZm8tPmFzc29jKQotCQkJc3RsYy0+YWlkID0gaW5mby0+YWlkOwotCQllbHNlCi0JCQlzdGxjLT5haWQgPSAtMTsKLQotCQlpZiAoc3RsYy0+cHNtKSB7Ci0JCQlzdGxjNDV4eF90eF9wc20oc3RsYywgc3RsYy0+cHNtKTsKLQkJCXN0bGM0NXh4X3R4X251bGxmdW5jKHN0bGMsIHN0bGMtPnBzbSk7Ci0JCX0KLQl9Ci19Ci0KLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIHN0bGM0NXh4X3JhdGVzW10gPSB7Ci0JeyAuYml0cmF0ZSA9IDEwLCAgLmh3X3ZhbHVlID0gMCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMCwgfSwKLQl7IC5iaXRyYXRlID0gMjAsICAuaHdfdmFsdWUgPSAxLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAxLCB9LAotCXsgLmJpdHJhdGUgPSA1NSwgIC5od192YWx1ZSA9IDIsICAgIC5od192YWx1ZV9zaG9ydCA9IDIsIH0sCi0JeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMywgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMywgfSwKLQl7IC5iaXRyYXRlID0gNjAsICAuaHdfdmFsdWUgPSA0LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA0LCB9LAotCXsgLmJpdHJhdGUgPSA5MCwgIC5od192YWx1ZSA9IDUsICAgIC5od192YWx1ZV9zaG9ydCA9IDUsIH0sCi0JeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gNiwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNiwgfSwKLQl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSA3LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA3LCB9LAotCXsgLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDgsICAgIC5od192YWx1ZV9zaG9ydCA9IDgsIH0sCi0JeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gOSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gOSwgfSwKLQl7IC5iaXRyYXRlID0gNDgwLCAuaHdfdmFsdWUgPSAxMCwgICAuaHdfdmFsdWVfc2hvcnQgPSAxMCwgfSwKLQl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAxMSwgICAuaHdfdmFsdWVfc2hvcnQgPSAxMSwgfSwKLX07Ci0KLS8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBzdGxjNDV4eF9jaGFubmVsc1tdID0gewotCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCi0JeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKLQl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAotCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCi0JeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKLQl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAotCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCi0JeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKLQl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAotCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAotCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAotCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAotCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAotfTsKLQotLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzdGxjNDV4eF9iYW5kXzJnaHogPSB7Ci0JLmNoYW5uZWxzID0gc3RsYzQ1eHhfY2hhbm5lbHMsCi0JLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHN0bGM0NXh4X2NoYW5uZWxzKSwKLQkuYml0cmF0ZXMgPSBzdGxjNDV4eF9yYXRlcywKLQkubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUoc3RsYzQ1eHhfcmF0ZXMpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHN0bGM0NXh4X29wcyA9IHsKLQkuc3RhcnQgPSBzdGxjNDV4eF9vcF9zdGFydCwKLQkuc3RvcCA9IHN0bGM0NXh4X29wX3N0b3AsCi0JLmFkZF9pbnRlcmZhY2UgPSBzdGxjNDV4eF9vcF9hZGRfaW50ZXJmYWNlLAotCS5yZW1vdmVfaW50ZXJmYWNlID0gc3RsYzQ1eHhfb3BfcmVtb3ZlX2ludGVyZmFjZSwKLQkuY29uZmlnID0gc3RsYzQ1eHhfb3BfY29uZmlnLAotCS5jb25maWd1cmVfZmlsdGVyID0gc3RsYzQ1eHhfb3BfY29uZmlndXJlX2ZpbHRlciwKLQkudHggPSBzdGxjNDV4eF9vcF90eCwKLQkuYnNzX2luZm9fY2hhbmdlZCA9IHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQsCi19OwotCi1zdGF0aWMgaW50IHN0bGM0NXh4X3JlZ2lzdGVyX21hYzgwMjExKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKLXsKLQkvKiBGSVhNRTogU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoKSByZXF1aXJlcyBkZWZhdWx0X21hY19hZGRyCi0JICAgdG8gYmUgbm9uLWNvbnN0IGZvciBzb21lIHN0cmFuZ2UgcmVhc29uICovCi0Jc3RhdGljIHU4IGRlZmF1bHRfbWFjX2FkZHJbRVRIX0FMRU5dID0gewotCQkweDAwLCAweDAyLCAweGVlLCAweGMwLCAweGZmLCAweGVlCi0JfTsKLQlpbnQgcmV0OwotCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoc3RsYy0+aHcsIGRlZmF1bHRfbWFjX2FkZHIpOwotCi0JcmV0ID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKLQlpZiAocmV0KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJ1bmFibGUgdG8gcmVnaXN0ZXIgbWFjODAyMTEgaHc6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN0bGM0NXh4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic3RsYzQ1eHgiLAotCS5pZAkJPSAtMSwKLQotCS8qIGRldmljZSBtb2RlbCBpbnNpc3RzIHRvIGhhdmUgYSByZWxlYXNlIGZ1bmN0aW9uICovCi0JLmRldiAgICAgICAgICAgID0gewotCQkucmVsZWFzZSA9IHN0bGM0NXh4X2RldmljZV9yZWxlYXNlLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzdGxjNDV4eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQotewotCXN0cnVjdCBzdGxjNDV4eCAqc3RsYzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlpbnQgcmV0OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JLyogbWFjODAyMTEgYWxsb2MgKi8KLQlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnN0bGMpLCAmc3RsYzQ1eHhfb3BzKTsKLQlpZiAoIWh3KSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIG1hYzgwMjExIGNsZWFycyBody0+cHJpdiAqLwotCXN0bGMgPSBody0+cHJpdjsKLQotCXN0bGMtPmh3ID0gaHc7Ci0JZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgc3RsYyk7Ci0Jc3RsYy0+c3BpID0gc3BpOwotCi0Jc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7Ci0Jc3BpLT5tYXhfc3BlZWRfaHogPSAyNDAwMDAwMDsKLQotCXJldCA9IHNwaV9zZXR1cChzcGkpOwotCWlmIChyZXQgPCAwKQotCQlzdGxjNDV4eF9lcnJvcigic3BpX3NldHVwIGZhaWxlZCIpOwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9fcG93ZXIsICJzdGxjNDV4eCBwb3dlciIpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHN0bGM0NXh4X2dwaW9faXJxLCAic3RsYzQ1eHggaXJxIik7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImlycSBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWdwaW9fZGlyZWN0aW9uX291dHB1dChzdGxjNDV4eF9ncGlvX3Bvd2VyLCAwKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChzdGxjNDV4eF9ncGlvX2lycSk7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCi0JCQkgIHN0bGM0NXh4X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgInN0bGM0NXh4IiwKLQkJCSAgc3RsYy0+c3BpKTsKLQlpZiAocmV0IDwgMCkKLQkJLyogRklYTUU6IGhhbmRsZSB0aGUgZXJyb3IgKi8KLQkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfaXJxKCkgZmFpbGVkIik7Ci0KLQlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLAotCQkgICAgIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQotCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSk7Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnN0bGM0NXh4X2RldmljZSk7Ci0JaWYgKHJldCkgewotCQlzdGxjNDV4eF9lcnJvcigiQ291bGRuJ3QgcmVnaXN0ZXIgd2xhbl9vbWFwIGRldmljZS4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JZGV2X3NldF9kcnZkYXRhKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCBzdGxjKTsKLQotCUlOSVRfV09SSygmc3RsYy0+d29yaywgc3RsYzQ1eHhfd29yayk7Ci0JSU5JVF9XT1JLKCZzdGxjLT53b3JrX3Jlc2V0LCBzdGxjNDV4eF93b3JrX3Jlc2V0KTsKLQlJTklUX0RFTEFZRURfV09SSygmc3RsYy0+d29ya190eF90aW1lb3V0LCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQpOwotCW11dGV4X2luaXQoJnN0bGMtPm11dGV4KTsKLQlpbml0X2NvbXBsZXRpb24oJnN0bGMtPmZ3X2NvbXApOwotCXNwaW5fbG9ja19pbml0KCZzdGxjLT50eF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhidWZmZXIpOwotCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9wZW5kaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmc3RsYy0+dHhfc2VudCk7Ci0KLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAotCQlJRUVFODAyMTFfSFdfTk9JU0VfREJNOwotCS8qIGZvdXIgYnl0ZXMgZm9yIHBhZGRpbmcgKi8KLQlody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHNfbG1fZGF0YV9vdXQpICsgNDsKLQotCS8qIHVuaXQgdXMgKi8KLQlody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDA7Ci0KLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnN0bGM0NXh4X2JhbmRfMmdoejsKLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmc3BpLT5kZXYpOwotCi0JQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9yc3NpKSAhPSBSU1NJX0NBTF9BUlJBWV9MRU4pOwotCUJVSUxEX0JVR19PTihzaXplb2YoZGVmYXVsdF9jYWxfY2hhbm5lbHMpICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTik7Ci0KLQlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoZGVmYXVsdF9jYWxfcnNzaSwgUlNTSV9DQUxfQVJSQVlfTEVOLAotCQkJCSBHRlBfS0VSTkVMKTsKLQlzdGxjLT5jYWxfY2hhbm5lbHMgPSBrbWVtZHVwKGRlZmF1bHRfY2FsX2NoYW5uZWxzLAotCQkJCSAgICAgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOLAotCQkJCSAgICAgR0ZQX0tFUk5FTCk7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfcnNzaSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfcnNzaSIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnN0bGM0NXh4X2RldmljZS5kZXYsICZkZXZfYXR0cl9jYWxfY2hhbm5lbHMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXN0bGM0NXh4X2Vycm9yKCJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGZpbGUgY2FsX2NoYW5uZWxzIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX3R4X2J1Zik7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSB0eF9idWYiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RsYyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0Jc3RsYzQ1eHhfaW5mbygidiIgRFJJVkVSX1ZFUlNJT04gIiBsb2FkZWQiKTsKLQotCXN0bGM0NXh4X2luZm8oImNvbmZpZyBidWZmZXIgMHgleC0weCV4IiwKLQkJICAgICAgRklSTVdBUkVfQ09ORklHX1NUQVJULCBGSVJNV0FSRV9DT05GSUdfRU5EKTsKLQlzdGxjNDV4eF9pbmZvKCJ0eCAweCV4LTB4JXgsIHJ4IDB4JXgtMHgleCIsCi0JCSAgICAgIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9UWEJVRkZFUl9FTkQsCi0JCSAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJULCBGSVJNV0FSRV9SWEJVRkZFUl9FTkQpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgc3RsYzQ1eHhfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCi17Ci0Jc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0KLQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKLQotCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KHN0bGMtPmh3KTsKLQotCWZyZWVfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwgc3BpKTsKLQotCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX3Bvd2VyKTsKLQlncGlvX2ZyZWUoc3RsYzQ1eHhfZ3Bpb19pcnEpOwotCi0JLyogRklYTUU6IGZyZWUgY2FsX2NoYW5uZWxzIGFuZCBjYWxfcnNzaT8gKi8KLQotCWtmcmVlKHN0bGMtPmZ3KTsKLQotCW11dGV4X2Rlc3Ryb3koJnN0bGMtPm11dGV4KTsKLQotCS8qIGZyZWVzIGFsc28gc3RsYyAqLwotCWllZWU4MDIxMV9mcmVlX2h3KHN0bGMtPmh3KTsKLQlzdGxjID0gTlVMTDsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzdGxjNDV4eF9zcGlfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS8qIHVzZSBjeDMxMTB4IG5hbWUgYmVjYXVzZSBib2FyZC1uODAwLmMgdXNlcyB0aGF0IGZvciB0aGUKLQkJICogU1BJIHBvcnQgKi8KLQkJLm5hbWUJCT0gImN4MzExMHgiLAotCQkuYnVzCQk9ICZzcGlfYnVzX3R5cGUsCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQl9LAotCi0JLnByb2JlCQk9IHN0bGM0NXh4X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3RsYzQ1eHhfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHN0bGM0NXh4X2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0JcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmc3RsYzQ1eHhfc3BpX2RyaXZlcik7Ci0JaWYgKHJldCA8IDApIHsKLQkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byByZWdpc3RlciBTUEkgZHJpdmVyOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzdGxjNDV4eF9leGl0KHZvaWQpCi17Ci0Jc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOwotCi0Jc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKLQotCXN0bGM0NXh4X2luZm8oInVubG9hZGVkIik7Ci19Ci0KLW1vZHVsZV9pbml0KHN0bGM0NXh4X2luaXQpOwotbW9kdWxlX2V4aXQoc3RsYzQ1eHhfZXhpdCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPiIpOwotTU9EVUxFX0FMSUFTKCJzcGk6Y3gzMTEweCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM5NmJiYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3RsYzQ1eHgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgotICoKLSAqIENvbnRhY3Q6IEthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAic3RsYzQ1eHhfbG1hYy5oIgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJzdGxjNDV4eCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMS4zIgotCi0jZGVmaW5lIERSSVZFUl9QUkVGSVggRFJJVkVSX05BTUUgIjogIgotCi1lbnVtIHsKLQlERUJVR19OT05FID0gMCwKLQlERUJVR19GVU5DID0gMSA8PCAwLAotCURFQlVHX0lSUSA9IDEgPDwgMSwKLQlERUJVR19CSCA9IDEgPDwgMiwKLQlERUJVR19SWCA9IDEgPDwgMywKLQlERUJVR19SWF9DT05URU5UID0gMSA8PCA1LAotCURFQlVHX1RYID0gMSA8PCA2LAotCURFQlVHX1RYX0NPTlRFTlQgPSAxIDw8IDgsCi0JREVCVUdfVFhCVUZGRVIgPSAxIDw8IDksCi0JREVCVUdfUVVFVUUgPSAxIDw8IDEwLAotCURFQlVHX0JPT1QgPSAxIDw8IDExLAotCURFQlVHX1BTTSA9IDEgPDwgMTIsCi0JREVCVUdfQUxMID0gfjAsCi19OwotCi0jZGVmaW5lIERFQlVHX0xFVkVMIERFQlVHX05PTkUKLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgREVCVUdfQUxMICovCi0vKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19UWCB8IERFQlVHX1JYIHwgREVCVUdfSVJRKSAqLwotLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfVFggfCBERUJVR19NRU1SRUdJT04gfCBERUJVR19RVUVVRSkgKi8KLS8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX01FTVJFR0lPTiB8IERFQlVHX1FVRVVFKSAqLwotCi0jZGVmaW5lIHN0bGM0NXh4X2Vycm9yKGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9QUkVGSVggIkVSUk9SICIgZm10ICJcbiIsICMjYXJnKQotCi0jZGVmaW5lIHN0bGM0NXh4X3dhcm5pbmcoZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9QUkVGSVggIldBUk5JTkcgIiBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgc3RsYzQ1eHhfaW5mbyhmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpCi0KLSNkZWZpbmUgc3RsYzQ1eHhfZGVidWcobGV2ZWwsIGZtdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChsZXZlbCAmIERFQlVHX0xFVkVMKSBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfUFJFRklYIGZtdCAiXG4iLCAjI2FyZyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHN0bGM0NXh4X2R1bXAobGV2ZWwsIGJ1ZiwgbGVuKQkJXAotCWRvIHsgXAotCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAotCQkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX09GRlNFVCwgXAotCQkJCSAgICAgICAxNiwgMSwgYnVmLCBsZW4sIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgTUFDMlNUUihhKSAoKGEpWzBdLCAoYSlbMV0sIChhKVsyXSwgKGEpWzNdLCAoYSlbNF0sIChhKVs1XSkKLSNkZWZpbmUgTUFDU1RSICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKLQotLyogQml0IDE1IGlzIHJlYWQvd3JpdGUgYml0OyBPTiA9IFJFQUQsIE9GRiA9IFdSSVRFICovCi0jZGVmaW5lIEFERFJfUkVBRF9CSVRfMTUgIDB4ODAwMAotCi0jZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTICAgICAweDAwCi0jZGVmaW5lIFNQSV9BRFJTX0FSTV9JTlRfRU4JICAgIDB4MDQKLQotI2RlZmluZSBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMgICAgMHgwOAotI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9FTgkgICAgMHgwYwotI2RlZmluZSBTUElfQURSU19IT1NUX0lOVF9BQ0sJICAgIDB4MTAKLQotI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8xICAgCSAgICAweDE0Ci0jZGVmaW5lIFNQSV9BRFJTX0dFTl9QVVJQXzIgICAJICAgIDB4MTgKLQotLyogaGlnaCB3b3JkICovCi0jZGVmaW5lIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQgICAgICAweDI2Ci0KLSNkZWZpbmUgU1BJX0FEUlNfRE1BX0RBVEEgICAgICAJICAgIDB4MjgKLQotI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCAgICAgMHgyYwotI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfTEVOICAgICAgMHgyZQotI2RlZmluZSBTUElfQURSU19ETUFfV1JJVEVfQkFTRSAgICAgMHgzMAotCi0jZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwgICAgICAweDM0Ci0jZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0xFTiAgICAgICAweDM2Ci0jZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0JBU0UgICAgICAweDM4Ci0KLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIDB4ODAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCAgMHg0MDAwCi0jZGVmaW5lIFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QgICAgICAweDIwMDAKLSNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUICAgIDB4MTAwMAotI2RlZmluZSBTUElfQ1RSTF9TVEFUX0hPU1RfQ1BVX0VOICAgMHgwODAwCi0KLSNkZWZpbmUgU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRSAgIDB4MDAwMQotI2RlZmluZSBTUElfRE1BX1JFQURfQ1RSTF9FTkFCTEUgICAgMHgwMDAxCi0jZGVmaW5lIEhPU1RfQUxMT1dFRCAgICAgICAgICAgICAgICAoMSA8PCA3KQotCi0jZGVmaW5lIEZJUk1XQVJFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwCi0KLSNkZWZpbmUgU1BJX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCAgICAgICAgIC8qIG1zZWMgKi8KLQotI2RlZmluZSBTUElfTUFYX1RYX1BBQ0tFVFMgICAgICAgICAgICAgICAgICAgICAgMzIKLQotI2RlZmluZSBTUElfTUFYX1BBQ0tFVF9TSVpFICAgICAgICAgICAgICAgICAgICAgMzI3NjcKLQotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9XQUtFVVAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9TTEVFUCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUElfVEFSR0VUX0lOVF9SRERPTkUgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAotCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0NUUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0jZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0RSICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCi0KLSNkZWZpbmUgU1BJX0hPU1RfSU5UX1JFQURZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU1BJX0hPU1RfSU5UX1dSX1JFQURZICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1BJX0hPU1RfSU5UX1NXX1VQREFURSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1BJX0hPU1RfSU5UX1VQREFURSAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLQotLyogY2xlYXIgdG8gc2VuZCAqLwotI2RlZmluZSBTUElfSE9TVF9JTlRfQ1RTCSAgICAgICAgICAgICAgICAweDAwMDA0MDAwCi0KLS8qIGRhdGEgcmVhZHkgKi8KLSNkZWZpbmUgU1BJX0hPU1RfSU5UX0RSCSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDgwMDAKLQotI2RlZmluZSBTUElfSE9TVF9JTlRTX0RFRkFVTFQgXAotCShTUElfSE9TVF9JTlRfUkVBRFkgfCBTUElfSE9TVF9JTlRfVVBEQVRFIHwgU1BJX0hPU1RfSU5UX1NXX1VQREFURSkKLQotI2RlZmluZSBUQVJHRVRfQk9PVF9TTEVFUCA1MAotCi0vKiBUaGUgZmlybXdhcmUgYnVmZmVyIGlzIGRpdmlkZWQgaW50byB0aHJlZSBhcmVhczoKLSAqCi0gKiBvIGNvbmZpZyBhcmVhIChmb3IgY29udHJvbCBjb21tYW5kcykKLSAqIG8gdHggYnVmZmVyCi0gKiBvIHJ4IGJ1ZmZlcgotICovCi0jZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9TVEFSVCAweDIwMjAwCi0jZGVmaW5lIEZJUk1XQVJFX0JVRkZFUl9FTkQgMHgyN2M2MAotI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfTEVOIChGSVJNV0FSRV9CVUZGRVJfRU5EIC0gRklSTVdBUkVfQlVGRkVSX1NUQVJUKQotI2RlZmluZSBGSVJNV0FSRV9NVFUgMzI0MAotI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfUEFZTE9BRF9MRU4gMTAyNAotI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfU1RBUlQgRklSTVdBUkVfQlVGRkVSX1NUQVJUCi0jZGVmaW5lIEZJUk1XQVJFX0NPTkZJR19MRU4gKHNpemVvZihzdHJ1Y3Qgc19sbV9jb250cm9sKSArIFwKLQkJCSAgICAgRklSTVdBUkVfQ09ORklHX1BBWUxPQURfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfRU5EIChGSVJNV0FSRV9DT05GSUdfU1RBUlQgKyBGSVJNV0FSRV9DT05GSUdfTEVOIC0gMSkKLSNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfTEVOICg1ICogRklSTVdBUkVfTVRVICsgMTAyNCkKLSNkZWZpbmUgRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQgKEZJUk1XQVJFX0JVRkZFUl9FTkQgLSBGSVJNV0FSRV9SWEJVRkZFUl9MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX0VORCAoRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQgKyBcCi0JCQkgICAgICAgRklSTVdBUkVfUlhCVUZGRVJfTEVOIC0gMSkKLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQgKEZJUk1XQVJFX0JVRkZFUl9TVEFSVCArIEZJUk1XQVJFX0NPTkZJR19MRU4pCi0jZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0xFTiAoRklSTVdBUkVfQlVGRkVSX0xFTiAtIEZJUk1XQVJFX0NPTkZJR19MRU4gLSBcCi0JCQkgICAgICAgRklSTVdBUkVfUlhCVUZGRVJfTEVOKQotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9FTkQgKEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUICsgXAotCQkJICAgICAgIEZJUk1XQVJFX1RYQlVGRkVSX0xFTiAtIDEpCi0KLSNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfSEVBREVSIDEwMAotI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9UUkFJTEVSIDQKLQotLyogRklYTUU6IGNvbWUgdXAgd2l0aCBhIHByb3BlciB2YWx1ZSAqLwotI2RlZmluZSBNQVhfRlJBTUVfTEVOIDI1MDAKLQotLyogdW5pdCBpcyBtcyAqLwotI2RlZmluZSBUWF9GUkFNRV9MSUZFVElNRSAyMDAwCi0jZGVmaW5lIFRYX1RJTUVPVVQgNDAwMAotCi0jZGVmaW5lIFNVUFBPUlRFRF9DSEFOTkVMUyAxMwotCi0vKiBGSVhNRSAqLwotLyogI2RlZmluZSBDSEFOTkVMX0NBTF9MRU4gb2Zmc2V0b2Yoc3RydWN0IHNfbG1vX3NjYW4sIGJyYXRlbWFzaykgLSBcICovCi0vKiAJb2Zmc2V0b2Yoc3RydWN0IHNfbG1vX3NjYW4sIGNoYW5uZWwpICovCi0jZGVmaW5lIENIQU5ORUxfQ0FMX0xFTiAyOTIKLSNkZWZpbmUgQ0hBTk5FTF9DQUxfQVJSQVlfTEVOIChTVVBQT1JURURfQ0hBTk5FTFMgKiBDSEFOTkVMX0NBTF9MRU4pCi0vKiBGSVhNRSAqLwotLyogI2RlZmluZSBSU1NJX0NBTF9MRU4gc2l6ZW9mKHN0cnVjdCBzX2xtb19zY2FuKSAtIFwgKi8KLS8qIAlvZmZzZXRvZihzdHJ1Y3Qgc19sbW9fc2NhbiwgcnNzaWNhbCkgKi8KLSNkZWZpbmUgUlNTSV9DQUxfTEVOIDgKLSNkZWZpbmUgUlNTSV9DQUxfQVJSQVlfTEVOIChTVVBQT1JURURfQ0hBTk5FTFMgKiBSU1NJX0NBTF9MRU4pCi0KLXN0cnVjdCBzX2RtYV9yZWdzIHsKLQl1bnNpZ25lZCBzaG9ydCBjbWQ7Ci0JdW5zaWduZWQgc2hvcnQgbGVuOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLX07Ci0KLXN0cnVjdCBzdGxjNDV4eF9pZV90aW0gewotCXU4IGR0aW1fY291bnQ7Ci0JdTggZHRpbV9wZXJpb2Q7Ci0JdTggYm1hcF9jb250cm9sOwotCXU4IHB2Ym1hcFsyNTFdOwotfTsKLQotc3RydWN0IHR4YnVmZmVyIHsKLQkvKiBjYW4gYmUgcmVtb3ZlZCB3aGVuIHN3aXRjaGVkIHRvIHNrYiBxdWV1ZSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhfbGlzdDsKLQotCXN0cnVjdCBsaXN0X2hlYWQgYnVmZmVyX2xpc3Q7Ci0KLQlpbnQgc3RhcnQ7Ci0JaW50IGZyYW1lX3N0YXJ0OwotCWludCBlbmQ7Ci0KLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUzMiBoYW5kbGU7Ci0KLQlib29sIHN0YXR1c19uZWVkZWQ7Ci0KLQlpbnQgaGVhZGVyX2xlbjsKLQotCS8qIHVuaXQgamlmZmllcyAqLwotCXVuc2lnbmVkIGxvbmcgbGlmZXRpbWU7Ci19OwotCi1lbnVtIGZ3X3N0YXRlIHsKLQlGV19TVEFURV9PRkYsCi0JRldfU1RBVEVfQk9PVElORywKLQlGV19TVEFURV9SRUFEWSwKLQlGV19TVEFURV9SRVNFVCwKLQlGV19TVEFURV9SRVNFVFRJTkcsCi19OwotCi1zdHJ1Y3Qgc3RsYzQ1eHggewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfcmVzZXQ7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrX3R4X3RpbWVvdXQ7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCXN0cnVjdCBjb21wbGV0aW9uIGZ3X2NvbXA7Ci0KLQotCXU4IGJzc2lkW0VUSF9BTEVOXTsKLQl1OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JaW50IGNoYW5uZWw7Ci0KLQl1OCAqY2FsX3Jzc2k7Ci0JdTggKmNhbF9jaGFubmVsczsKLQotCWVudW0gZndfc3RhdGUgZndfc3RhdGU7Ci0KLQlzcGlubG9ja190IHR4X2xvY2s7Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWZmZXI7Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLwotCXN0cnVjdCBsaXN0X2hlYWQgdHhfcGVuZGluZzsKLQotCS8qIHByb3RlY3RlZCBieSB0eF9sb2NrICovCi0JaW50IHR4X3F1ZXVlX3N0b3BwZWQ7Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgbXV0ZXggKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4X3NlbnQ7Ci0KLQlpbnQgdHhfZnJhbWVzOwotCi0JdTggKmZ3OwotCWludCBmd19sZW47Ci0KLQlib29sIHBzbTsKLQlib29sIGFzc29jaWF0ZWQ7Ci0JaW50IGFpZDsKLQlib29sIHBzcG9sbGluZzsKLX07Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNWRiODAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4X2xtYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICBUaGlzIGlzIHRoZSBMTUFDIEFQSSBpbnRlcmZhY2UgaGVhZGVyIGZpbGUgZm9yIFNUTEM0NTYwLiAgICAgICAgCSoKLSogIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICAgICoKLSogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICoKLSogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCSoKLSogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICoKLSogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCSoKLSogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICoKLSogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICoKLSogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19sbWFjX2hfXwotI2RlZmluZSBfX2xtYWNfaF9fCi0KLSNkZWZpbmUgTE1fVE9QX1ZBUklBTlQgICAgICAweDA1MDYKLSNkZWZpbmUgTE1fQk9UVE9NX1ZBUklBTlQgICAweDA1MDYKLQotLyoKLSAqIExNQUMgLSBVTUFDIGludGVyZmFjZSBkZWZpbml0aW9uOgotICovCi0KLSNkZWZpbmUgTE1fRkxBR19DT05UUk9MICAgICAweDgwMDAKLSNkZWZpbmUgTE1fRkxBR19BTElHTiAgICAgICAweDQwMDAKLQotI2RlZmluZSBMTV9DVFJMX09QU0VUICAgICAgIDB4MDAwMQotCi0jZGVmaW5lIExNX09VVF9QUk9NSVNDICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX09VVF9USU1FU1RBTVAgICAgMHgwMDAyCi0jZGVmaW5lIExNX09VVF9TRVFOUiAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIExNX09VVF9CVVJTVCAgICAgICAgMHgwMDEwCi0jZGVmaW5lIExNX09VVF9OT0NBTkNFTCAgICAgMHgwMDIwCi0jZGVmaW5lIExNX09VVF9DTEVBUlRJTSAgICAgMHgwMDQwCi0jZGVmaW5lIExNX09VVF9ISVRDSEhJS0UgICAgMHgwMDgwCi0jZGVmaW5lIExNX09VVF9DT01QUkVTUyAgICAgMHgwMTAwCi0jZGVmaW5lIExNX09VVF9DT05DQVQgICAgICAgMHgwMjAwCi0jZGVmaW5lIExNX09VVF9QQ1NfQUNDRVBUICAgMHgwNDAwCi0jZGVmaW5lIExNX09VVF9XQUlURU9TUCAgICAgMHgwODAwCi0KLQotI2RlZmluZSBMTV9BTE9GVF9TUCAgICAgICAgIDB4MTAKLSNkZWZpbmUgTE1fQUxPRlRfQ1RTICAgICAgICAweDIwCi0jZGVmaW5lIExNX0FMT0ZUX1JUUyAgICAgICAgMHg0MAotI2RlZmluZSBMTV9BTE9GVF9NQVNLICAgICAgIDB4MWYKLSNkZWZpbmUgTE1fQUxPRlRfUkFURSAgICAgICAweDBmCi0KLSNkZWZpbmUgTE1fSU5fRkNTX0dPT0QgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fSU5fTUFUQ0hfTUFDICAgICAweDAwMDIKLSNkZWZpbmUgTE1fSU5fTUNCQyAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fSU5fQkVBQ09OICAgICAgICAweDAwMDgKLSNkZWZpbmUgTE1fSU5fTUFUQ0hfQlNTICAgICAweDAwMTAKLSNkZWZpbmUgTE1fSU5fQkNBU1RfQlNTICAgICAweDAwMjAKLSNkZWZpbmUgTE1fSU5fREFUQSAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fSU5fVFJVTkNBVEVEICAgICAweDAwODAKLQotI2RlZmluZSBMTV9JTl9UUkFOU1BBUkVOVCAgIDB4MDIwMAotCi0jZGVmaW5lIExNX1FVRVVFX0JFQUNPTiAgICAgMAotI2RlZmluZSBMTV9RVUVVRV9TQ0FOICAgICAgIDEKLSNkZWZpbmUgTE1fUVVFVUVfTUdUICAgICAgICAyCi0jZGVmaW5lIExNX1FVRVVFX01DQkMgICAgICAgMwotI2RlZmluZSBMTV9RVUVVRV9EQVRBICAgICAgIDQKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTAgICAgICA0Ci0jZGVmaW5lIExNX1FVRVVFX0RBVEExICAgICAgNQotI2RlZmluZSBMTV9RVUVVRV9EQVRBMiAgICAgIDYKLSNkZWZpbmUgTE1fUVVFVUVfREFUQTMgICAgICA3Ci0KLSNkZWZpbmUgTE1fU0VUVVBfSU5GUkEgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1NFVFVQX0lCU1MgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9TRVRVUF9UUkFOU1BBUkVOVCAgICAweDAwMDgKLSNkZWZpbmUgTE1fU0VUVVBfUFJPTUlTQ1VPVVMgICAgMHgwMDEwCi0jZGVmaW5lIExNX1NFVFVQX0hJQkVSTkFURSAgICAgIDB4MDAyMAotI2RlZmluZSBMTV9TRVRVUF9OT0FDSyAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgTE1fU0VUVVBfUlhfRElTQUJMRUQgICAgMHgwMDgwCi0KLSNkZWZpbmUgTE1fQU5URU5OQV8wICAgICAgICAgICAgMAotI2RlZmluZSBMTV9BTlRFTk5BXzEgICAgICAgICAgICAxCi0jZGVmaW5lIExNX0FOVEVOTkFfRElWRVJTSVRZICAgIDIKLQotI2RlZmluZSBMTV9UWF9GQUlMRUQgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgTE1fVFhfUFNNICAgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIExNX1RYX1BTTV9DQU5DRUxMRUQJMHgwMDA0Ci0KLSNkZWZpbmUgTE1fU0NBTl9FWElUICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1NDQU5fVFJBUCAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9TQ0FOX0FDVElWRSAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fU0NBTl9GSUxURVIgICAgICAgICAgMHgwMDA4Ci0KLSNkZWZpbmUgTE1fUFNNICAgICAgICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIExNX1BTTV9EVElNICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBMTV9QU01fTUNCQyAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgTE1fUFNNX0NIRUNLU1VNICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIExNX1BTTV9TS0lQX01PUkVfREFUQSAgIDB4MDAxMAotI2RlZmluZSBMTV9QU01fQkVBQ09OX1RJTUVPVVQgICAweDAwMjAKLSNkZWZpbmUgTE1fUFNNX0hGT1NMRUVQICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIExNX1BTTV9BVVRPU1dJVENIX1NMRUVQIDB4MDA4MAotI2RlZmluZQlMTV9QU01fTFBJVAkJMHgwMTAwCi0jZGVmaW5lIExNX1BTTV9CRl9VQ0FTVF9TS0lQICAgIDB4MDIwMAotI2RlZmluZSBMTV9QU01fQkZfTUNBU1RfU0tJUCAgICAweDA0MDAKLQotLyogaGZvc2xlZXAgKi8KLSNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9NQVNLIChMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCB8IExNX1BTTV9IRk9TTEVFUCkKLSNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9TSElGVCAgICAgICA2Ci0vKiBoZm9zbGVlcGVuZCAqLwotI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX01BU0sgKExNX1BTTV9CRl9NQ0FTVF9TS0lQIHwgTE1fUFNNX0JGX1VDQVNUX1NLSVApCi0jZGVmaW5lIExNX1BTTV9CRl9PUFRJT05fU0hJRlQgIDkKLQotCi0jZGVmaW5lIExNX1BSSVZBQ0NfV0VQICAgICAgICAgIDB4MDEKLSNkZWZpbmUgTE1fUFJJVkFDQ19US0lQICAgICAgICAgMHgwMgotI2RlZmluZSBMTV9QUklWQUNDX01JQ0hBRUwgICAgICAweDA0Ci0jZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX0tQICAgICAgIDB4MDgKLSNkZWZpbmUgTE1fUFJJVkFDQ19DQ1hfTUlDICAgICAgMHgxMAotI2RlZmluZSBMTV9QUklWQUNDX0FFU19DQ01QICAgICAweDIwCi0KLS8qIHNpemUgb2Ygc19sbV9kZXNjciBpbiB3b3JkcyAqLwotI2RlZmluZSBMTV9ERVNDUl9TSVpFX1dPUkRTICAgICAxMQotCi0jaWZuZGVmIF9fQVNTRU1CTEVSX18KLQotZW51bSB7Ci0gICAgTE1fTU9ERV9DTElFTlQgPSAwLAotICAgIExNX01PREVfQVAKLX07Ci0KLXN0cnVjdCBzX2xtX2Rlc2NyIHsKLSAgICB1aW50MTZfdCBtb2RlczsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MzJfdCBidWZmZXJfc3RhcnQ7Ci0gICAgdWludDMyX3QgYnVmZmVyX2VuZDsKLSAgICB1aW50OF90IGhlYWRlcjsKLSAgICB1aW50OF90IHRyYWlsZXI7Ci0gICAgdWludDhfdCB0eF9xdWV1ZXM7Ci0gICAgdWludDhfdCB0eF9kZXB0aDsKLSAgICB1aW50OF90IHByaXZhY3k7Ci0gICAgdWludDhfdCByeF9rZXljYWNoZTsKLSAgICB1aW50OF90IHRpbV9zaXplOwotICAgIHVpbnQ4X3QgcGFkMTsKLSAgICB1aW50OF90IHJhdGVzWzE2XTsKLSAgICB1aW50MzJfdCBsaW5rOwotCXVpbnQxNl90IG10dTsKLX07Ci0KLQotc3RydWN0IHNfbG1fY29udHJvbCB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgbGVuZ3RoOwotICAgIHVpbnQzMl90IGhhbmRsZTsKLSAgICB1aW50MTZfdCBvaWQ7Ci0gICAgdWludDE2X3QgcGFkOwotICAgIC8qIHVpbnQ4X3QgZGF0YVtdOyAqLwotfTsKLQotZW51bSB7Ci0gICAgTE1fUFJJVl9OT05FID0gMCwKLSAgICBMTV9QUklWX1dFUCwKLSAgICBMTV9QUklWX1RLSVAsCi0gICAgTE1fUFJJVl9US0lQTUlDSEFFTCwKLSAgICBMTV9QUklWX0NDWF9XRVBNSUMsCi0gICAgTE1fUFJJVl9DQ1hfS1BNSUMsCi0gICAgTE1fUFJJVl9DQ1hfS1AsCi0gICAgTE1fUFJJVl9BRVNfQ0NNUAotfTsKLQotZW51bSB7Ci0gICAgTE1fREVDUllQVF9OT05FLAotICAgIExNX0RFQ1JZUFRfT0ssCi0gICAgTE1fREVDUllQVF9OT0tFWSwKLSAgICBMTV9ERUNSWVBUX05PTUlDSEFFTCwKLSAgICBMTV9ERUNSWVBUX05PQ0tJUE1JQywKLSAgICBMTV9ERUNSWVBUX0ZBSUxfV0VQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9US0lQLAotICAgIExNX0RFQ1JZUFRfRkFJTF9NSUNIQUVMLAotICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQS1AsCi0gICAgTE1fREVDUllQVF9GQUlMX0NLSVBNSUMsCi0gICAgTE1fREVDUllQVF9GQUlMX0FFU0NDTVAKLX07Ci0KLXN0cnVjdCBzX2xtX2RhdGFfb3V0IHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDMyX3QgaGFuZGxlOwotICAgIHVpbnQxNl90IGFpZDsKLSAgICB1aW50OF90IHJ0c19yZXRyaWVzOwotICAgIHVpbnQ4X3QgcmV0cmllczsKLSAgICB1aW50OF90IGFsb2Z0WzhdOwotICAgIHVpbnQ4X3QgYWxvZnRfY3RybDsKLSAgICB1aW50OF90IGNyeXB0X29mZnNldDsKLSAgICB1aW50OF90IGtleXR5cGU7Ci0gICAgdWludDhfdCBrZXlsZW47Ci0gICAgdWludDhfdCBrZXlbMTZdOwotICAgIHVpbnQ4X3QgcXVldWU7Ci0gICAgdWludDhfdCBiYWNrbG9nOwotICAgIHVpbnQxNl90IGR1cmF0aW9uc1s0XTsKLSAgICB1aW50OF90IGFudGVubmE7Ci0gICAgdWludDhfdCBjdHM7Ci0gICAgaW50MTZfdCBwb3dlcjsKLSAgICB1aW50OF90IHBhZFsyXTsKLSAgICAvKnVpbnQ4X3QgZGF0YVtdOyovCi19OwotCi0jZGVmaW5lIExNX1JDUElfSU5WQUxJRCAgICAgICAgICgweGZmKQotCi1zdHJ1Y3Qgc19sbV9kYXRhX2luIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBsZW5ndGg7Ci0gICAgdWludDE2X3QgZnJlcXVlbmN5OwotICAgIHVpbnQ4X3QgYW50ZW5uYTsKLSAgICB1aW50OF90IHJhdGU7Ci0gICAgdWludDhfdCByY3BpOwotICAgIHVpbnQ4X3Qgc3E7Ci0gICAgdWludDhfdCBkZWNyeXB0OwotICAgIHVpbnQ4X3QgcnNzaV9yYXc7Ci0gICAgdWludDMyX3QgY2xvY2tbMl07Ci0gICAgLyp1aW50OF90IGRhdGFbXTsqLwotfTsKLQotdW5pb24gdV9sbV9kYXRhIHsKLSAgICBzdHJ1Y3Qgc19sbV9kYXRhX291dCBvdXQ7Ci0gICAgc3RydWN0IHNfbG1fZGF0YV9pbiBpbjsKLX07Ci0KLWVudW0gewotICAgIExNX09JRF9TRVRVUAk9IDAsCi0gICAgTE1fT0lEX1NDQU4JCT0gMSwKLSAgICBMTV9PSURfVFJBUAkJPSAyLAotICAgIExNX09JRF9FRENGCQk9IDMsCi0gICAgTE1fT0lEX0tFWUNBQ0hFCT0gNCwKLSAgICBMTV9PSURfUFNNCQk9IDYsCi0gICAgTE1fT0lEX1RYQ0FOQ0VMCT0gNywKLSAgICBMTV9PSURfVFgJCT0gOCwKLSAgICBMTV9PSURfQlVSU1QJPSA5LAotICAgIExNX09JRF9TVEFUUwk9IDEwLAotICAgIExNX09JRF9MRUQJCT0gMTMsCi0gICAgTE1fT0lEX1RJTUVSCT0gMTUsCi0gICAgTE1fT0lEX05BVgkJPSAyMCwKLSAgICBMTV9PSURfUENTCQk9IDIyLAotICAgIExNX09JRF9CVF9CQUxBTkNFUiAgPSAyOCwKLSAgICBMTV9PSURfR1JPVVBfQUREUkVTU19UQUJMRQk9IDMwLAotICAgIExNX09JRF9BUlBUQUJMRSAgICAgPSAzMSwKLSAgICBMTV9PSURfQlRfT1BUSU9OUyA9IDM1Ci19OwotCi1lbnVtIHsKLSAgICBMTV9GUk9OVEVORF9VTktOT1dOID0gMCwKLSAgICBMTV9GUk9OVEVORF9EVUVUVEUzLAotICAgIExNX0ZST05URU5EX0RVRVRURTIsCi0gICAgTE1fRlJPTlRFTkRfRlJJU0JFRSwKLSAgICBMTV9GUk9OVEVORF9DUk9TU0JPVywKLSAgICBMTV9GUk9OVEVORF9MT05HQk9XCi19OwotCi0KLSNkZWZpbmUgSU5WQUxJRF9MUEZfQkFORFdJRFRIICAgMHhmZmZmCi0jZGVmaW5lIElOVkFMSURfT1NDX1NUQVJUX0RFTEFZIDB4ZmZmZgotCi1zdHJ1Y3Qgc19sbW9fc2V0dXAgewotICAgIHVpbnQxNl90IGZsYWdzOwotICAgIHVpbnQ4X3QgIG1hY2FkZHJbNl07Ci0gICAgdWludDhfdCAgYnNzaWRbNl07Ci0gICAgdWludDhfdCAgYW50ZW5uYTsKLSAgICB1aW50OF90ICByeF9hbGlnbjsKLSAgICB1aW50MzJfdCByeF9idWZmZXI7Ci0gICAgdWludDE2X3QgcnhfbXR1OwotICAgIHVpbnQxNl90IGZyb250ZW5kOwotICAgIHVpbnQxNl90IHRpbWVvdXQ7Ci0gICAgdWludDE2X3QgdHJ1bmNhdGU7Ci0gICAgdWludDMyX3QgYnJhdGVtYXNrOwotICAgIHVpbnQ4X3QgIHNic3Nfb2Zmc2V0OwotICAgIHVpbnQ4X3QgIG1jYXN0X3dpbmRvdzsKLSAgICB1aW50OF90ICByeF9yc3NpX3RocmVzaG9sZDsKLSAgICB1aW50OF90ICByeF9lZF90aHJlc2hvbGQ7Ci0gICAgdWludDMyX3QgcmVmX2Nsb2NrOwotICAgIHVpbnQxNl90IGxwZl9iYW5kd2lkdGg7Ci0gICAgdWludDE2X3Qgb3NjX3N0YXJ0X2RlbGF5OwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fc2NhbiB7Ci0gICAgdWludDE2X3QgZmxhZ3M7Ci0gICAgdWludDE2X3QgZHdlbGw7Ci0gICAgdWludDhfdCBjaGFubmVsWzI5Ml07Ci0gICAgdWludDMyX3QgYnJhdGVtYXNrOwotICAgIHVpbnQ4X3QgIGFsb2Z0WzhdOwotICAgIHVpbnQ4X3QgIHJzc2ljYWxbOF07Ci19OwotCi0KLWVudW0gewotICAgIExNX1RSQVBfU0NBTiA9IDAsCi0gICAgTE1fVFJBUF9USU1FUiwKLSAgICBMTV9UUkFQX0JFQUNPTl9UWCwKLSAgICBMTV9UUkFQX0ZBQV9SQURJT19PTiwKLSAgICBMTV9UUkFQX0ZBQV9SQURJT19PRkYsCi0gICAgTE1fVFJBUF9SQURBUiwKLSAgICBMTV9UUkFQX05PX0JFQUNPTiwKLSAgICBMTV9UUkFQX1RCVFQsCi0gICAgTE1fVFJBUF9TQ09fRU5URVIsCi0gICAgTE1fVFJBUF9TQ09fRVhJVAotfTsKLQotc3RydWN0IHNfbG1vX3RyYXAgewotICAgIHVpbnQxNl90IGV2ZW50OwotICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKLX07Ci0KLXN0cnVjdCBzX2xtb190aW1lciB7Ci0gICAgdWludDMyX3QgaW50ZXJ2YWw7Ci19OwotCi1zdHJ1Y3Qgc19sbW9fbmF2IHsKLSAgICB1aW50MzJfdCBwZXJpb2Q7Ci19OwotCi0KLXN0cnVjdCBzX2xtb19lZGNmX3F1ZXVlOwotCi1zdHJ1Y3Qgc19sbW9fZWRjZiB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgc2xvdHRpbWU7Ci0gICAgdWludDhfdCAgc2lmczsKLSAgICB1aW50OF90ICBlb2ZwYWQ7Ci0gICAgc3RydWN0IHNfbG1vX2VkY2ZfcXVldWUgewotCSAgICB1aW50OF90ICBhaWZzOwotCSAgICB1aW50OF90ICBwYWQwOwotCSAgICB1aW50MTZfdCBjd21pbjsKLQkgICAgdWludDE2X3QgY3dtYXg7Ci0JICAgIHVpbnQxNl90IHR4b3A7Ci0gICAgfSBxdWV1ZXNbOF07Ci0gICAgdWludDhfdCAgbWFwcGluZ1s0XTsKLSAgICB1aW50MTZfdCBtYXhidXJzdDsKLSAgICB1aW50MTZfdCByb3VuZF90cmlwX2RlbGF5OwotfTsKLQotc3RydWN0IHNfbG1vX2tleWNhY2hlIHsKLSAgICB1aW50OF90IGVudHJ5OwotICAgIHVpbnQ4X3Qga2V5aWQ7Ci0gICAgdWludDhfdCBhZGRyZXNzWzZdOwotICAgIHVpbnQ4X3QgcGFkWzJdOwotICAgIHVpbnQ4X3Qga2V5dHlwZTsKLSAgICB1aW50OF90IGtleWxlbjsKLSAgICB1aW50OF90IGtleVsyNF07Ci19OwotCi0KLXN0cnVjdCBzX2xtX2ludGVydmFsOwotCi1zdHJ1Y3Qgc19sbW9fcHNtIHsKLSAgICB1aW50MTZfdCAgICBmbGFnczsKLSAgICB1aW50MTZfdCAgICBhaWQ7Ci0gICAgc3RydWN0IHNfbG1faW50ZXJ2YWwgewotCSAgICB1aW50MTZfdCBpbnRlcnZhbDsKLQkgICAgdWludDE2X3QgcGVyaW9kczsKLSAgICB9IGludGVydmFsc1s0XTsKLSAgICAvKiB1aW50MTZfdCAgICBwYWQ7ICovCi0gICAgdWludDhfdCAgICAgYmVhY29uX3JjcGlfc2tpcF9tYXg7Ci0gICAgdWludDhfdCAgICAgcmNwaV9kZWx0YV90aHJlc2hvbGQ7Ci0gICAgdWludDhfdCAgICAgbnI7Ci0gICAgdWludDhfdCAgICAgZXhjbHVkZVsxXTsKLX07Ci0KLSNkZWZpbmUgTUNfRklMVEVSX0FERFJFU1NfTlVNICAgNAotCi1zdHJ1Y3Qgc19sbW9fZ3JvdXBfYWRkcmVzc190YWJsZSB7Ci0gICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKLSAgICB1aW50MTZfdCAgICBudW1fYWRkcmVzczsKLSAgICB1aW50OF90ICAgICBtYWNhZGRyX2xpc3RbTUNfRklMVEVSX0FERFJFU1NfTlVNXVs2XTsKLX07Ci0KLXN0cnVjdCBzX2xtb190eGNhbmNlbCB7Ci0gICAgdWludDMyX3QgYWRkcmVzc1sxXTsKLX07Ci0KLQotc3RydWN0IHNfbG1vX3R4IHsKLSAgICB1aW50OF90ICBmbGFnczsKLSAgICB1aW50OF90ICByZXRyaWVzOwotICAgIHVpbnQ4X3QgIHJjcGk7Ci0gICAgdWludDhfdCAgc3E7Ci0gICAgdWludDE2X3Qgc2VxY3RybDsKLSAgICB1aW50OF90ICBhbnRlbm5hOwotICAgIHVpbnQ4X3QgIHBhZDsKLX07Ci0KLXN0cnVjdCBzX2xtb19idXJzdCB7Ci0gICAgdWludDhfdCAgZmxhZ3M7Ci0gICAgdWludDhfdCAgcXVldWU7Ci0gICAgdWludDhfdCAgYmFja2xvZzsKLSAgICB1aW50OF90ICBwYWQ7Ci0gICAgdWludDE2X3QgZHVyYXRpb25zWzMyXTsKLX07Ci0KLXN0cnVjdCBzX2xtb19zdGF0cyB7Ci0gICAgdWludDMyX3QgdmFsaWQ7Ci0gICAgdWludDMyX3QgZmNzOwotICAgIHVpbnQzMl90IGFib3J0OwotICAgIHVpbnQzMl90IHBoeWFib3J0OwotICAgIHVpbnQzMl90IHJ0c19zdWNjZXNzOwotICAgIHVpbnQzMl90IHJ0c19mYWlsOwotICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKLSAgICB1aW50MzJfdCB0aW1lX3R4OwotICAgIHVpbnQzMl90IG5vaXNlZmxvb3I7Ci0gICAgdWludDMyX3Qgc2FtcGxlX25vaXNlWzhdOwotICAgIHVpbnQzMl90IHNhbXBsZV9jY2E7Ci0gICAgdWludDMyX3Qgc2FtcGxlX3R4OwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fbGVkIHsKLSAgICB1aW50MTZfdCBmbGFnczsKLSAgICB1aW50MTZfdCBtYXNrWzJdOwotICAgIHVpbnQxNl90IGRlbGF5LypbMl0qLzsKLX07Ci0KLQotc3RydWN0IHNfbG1vX2J0X2JhbGFuY2VyIHsKLSAgICB1aW50MTZfdCBwcmlvX3RocmVzaDsKLSAgICB1aW50MTZfdCBhY2xfdGhyZXNoOwotfTsKLQotCi1zdHJ1Y3Qgc19sbW9fYXJwX3RhYmxlIHsKLSAgICB1aW50MTZfdCAgICBmaWx0ZXJfZW5hYmxlOwotICAgIHVpbnQzMl90ICAgIGlwYWRkcjsKLX07Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCi0KLSNlbmRpZiAvKiBfX2xtYWNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggM2QyYTg0Yy4uZTEzOWVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKaW5kZXggODk2MGZhOS4uMDBmZTA4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCmluZGV4IDdmOTZiY2EuLjA1MTg2MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKQEAgLTEzMzIsNyArMTMzMiw2IEBACiAgICAgICAgIGZyZWVfbmV0ZGV2KHBEZXZpY2UtPmRldik7CiAgICAgfQogCi0Ja2ZyZWUocERldmljZSk7CiAgICAgREJHX1BSVChNU0dfTEVWRUxfREVCVUcsIEtFUk5fSU5GTyAiZGV2aWNlX2Rpc2Nvbm5lY3QzLi4gXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL0tjb25maWcKaW5kZXggOTQwNDYwYy4uMTMyNjcxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFczNVVORAogCXRyaXN0YXRlICJJUzg5QzM1IFdMQU4gVVNCIGRyaXZlciIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgVVNCICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTiAmJiBVU0IgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBoaWdobHkgZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgV2luYm9uZCBXSUZJIGNhcmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwppbmRleCA4OTUwNzI0Li4wNjcwODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTUxLDEwICs1MSwyNiBAQAogCS5uX2JpdHJhdGVzCT0gQVJSQVlfU0laRSh3YnNvZnRfcmF0ZXMpLAogfTsKIAorc3RhdGljIHZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCB1MTYgYmVhY29uX3BlcmlvZCkKK3sKKwl1MzIgdG1wOworCisJaWYgKHBId0RhdGEtPlN1cnByaXNlUmVtb3ZlKQorCQlyZXR1cm47CisKKwlwSHdEYXRhLT5CZWFjb25QZXJpb2QgPSBiZWFjb25fcGVyaW9kOworCXRtcCA9IHBId0RhdGEtPkJlYWNvblBlcmlvZCA8PCAxNjsKKwl0bXAgfD0gcEh3RGF0YS0+UHJvYmVEZWxheTsKKwlXYjM1UmVnX1dyaXRlKHBId0RhdGEsIDB4MDg0OCwgdG1wKTsKK30KKwogc3RhdGljIGludCB3YnNvZnRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0JcHJpbnRrKCJ3YnNvZnRfYWRkIGludGVyZmFjZSBjYWxsZWRcbiIpOworCXN0cnVjdCB3YnNvZnRfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKworCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgY29uZi0+dmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04MywxMCArOTksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBtY19jb3VudCwKKwkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCit7CisJcmV0dXJuIG1jX2NvdW50OworfQorCiBzdGF0aWMgdm9pZCB3YnNvZnRfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAotCQkJCSAgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQorCQkJCSAgICB1NjQgbXVsdGljYXN0KQogewogCXVuc2lnbmVkIGludCBuZXdfZmxhZ3M7CiAKQEAgLTk0LDcgKzExNiw3IEBACiAKIAlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQogCQluZXdfZmxhZ3MgfD0gRklGX1BST01JU0NfSU5fQlNTOwotCWVsc2UgaWYgKCgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHx8IChtY19jb3VudCA+IDMyKSkKKwllbHNlIGlmICgoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB8fCAobXVsdGljYXN0ID4gMzIpKQogCQluZXdfZmxhZ3MgfD0gRklGX0FMTE1VTFRJOwogCiAJZGV2LT5mbGFncyAmPSB+SUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKQEAgLTEzOCwxOSArMTYwLDYgQEAKIAlXYjM1UmVnX1dyaXRlKHBId0RhdGEsIDB4MDgyNCwgcmVnLT5NMjRfTWFjQ29udHJvbCk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgdTE2IGJlYWNvbl9wZXJpb2QpCi17Ci0JdTMyIHRtcDsKLQotCWlmIChwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSkKLQkJcmV0dXJuOwotCi0JcEh3RGF0YS0+QmVhY29uUGVyaW9kID0gYmVhY29uX3BlcmlvZDsKLQl0bXAgPSBwSHdEYXRhLT5CZWFjb25QZXJpb2QgPDwgMTY7Ci0JdG1wIHw9IHBId0RhdGEtPlByb2JlRGVsYXk7Ci0JV2IzNVJlZ19Xcml0ZShwSHdEYXRhLCAweDA4NDgsIHRtcCk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgQ2hhbkluZm8gY2hhbm5lbCkKIHsKQEAgLTI0NCw3ICsyNTMsNiBAQAogc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZkZXYtPmNvbmY7CiAJQ2hhbkluZm8gY2g7CiAKIAlwcmludGsoIndic29mdF9jb25maWcgY2FsbGVkXG4iKTsKQEAgLTI1NCw3ICsyNjIsNiBAQAogCWNoLkNoYW5ObyA9IDE7CiAKIAloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCgmcHJpdi0+c0h3RGF0YSwgY2gpOwotCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgY29uZi0+YmVhY29uX2ludCk7CiAJaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCZwcml2LT5zSHdEYXRhLCAxKTsKIAloYWxfc2V0X2FjY2VwdF9wcm9taXNjdW91cygmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCZwcml2LT5zSHdEYXRhLCAxKTsKQEAgLTI3Nyw2ICsyODQsNyBAQAogCS5hZGRfaW50ZXJmYWNlCQk9IHdic29mdF9hZGRfaW50ZXJmYWNlLAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Jzb2Z0X3JlbW92ZV9pbnRlcmZhY2UsCiAJLmNvbmZpZwkJCT0gd2Jzb2Z0X2NvbmZpZywKKwkucHJlcGFyZV9tdWx0aWNhc3QJPSB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IHdic29mdF9nZXRfc3RhdHMsCiAJLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3R4X3N0YXRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKaW5kZXggOTk1OWI2NS4uZjQ0Mjk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBSSVNNMl9VU0IKIAl0cmlzdGF0ZSAiUHJpc20yLjUvMyBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gV0xBTl84MDIxMSAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCisJZGVwZW5kcyBvbiBXTEFOICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSB3bGFuLW5nIHByaXNtIDIuNS8zIFVTQiBkcml2ZXIgZm9yIGEgd2lkZSByYW5nZSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA0ZTgzYzI5Li42ZjhkOGY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMKQEAgLTE4MCwxNSArMTgwLDE1IEBACiAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFRIRVJNQUxfVFJJUF9DUklUSUNBTDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWwiKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiY3JpdGljYWxcbiIpOwogCWNhc2UgVEhFUk1BTF9UUklQX0hPVDoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90Iik7CisJCXJldHVybiBzcHJpbnRmKGJ1ZiwgImhvdFxuIik7CiAJY2FzZSBUSEVSTUFMX1RSSVBfUEFTU0lWRToKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJwYXNzaXZlXG4iKTsKIAljYXNlIFRIRVJNQUxfVFJJUF9BQ1RJVkU6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFjdGl2ZSIpOworCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmVcbiIpOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgInVua25vd24iKTsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93blxuIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDAzZWZiMDYuLmU5NDEzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CkBAIC02NTgsNyArNjU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1aW9fdm1fb3BzID0gewogCS5vcGVuID0gdWlvX3ZtYV9vcGVuLAogCS5jbG9zZSA9IHVpb192bWFfY2xvc2UsCiAJLmZhdWx0ID0gdWlvX3ZtYV9mYXVsdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19wZHJ2X2dlbmlycS5jIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKaW5kZXggMDIzNDdjNS4uYWE1M2RiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKKysrIGIvZHJpdmVycy91aW8vdWlvX3BkcnZfZ2VuaXJxLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCXJldHVybiAwOwogIGJhZDE6CiAJa2ZyZWUocHJpdik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOwogIGJhZDA6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBlMzg2MWIyLi5lNGVjYTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC02MDksOSArNjA5LDkgQEAKIAogCWFjbS0+dGhyb3R0bGUgPSAwOwogCi0JdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiAJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpOwogCXJ2ID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZhY20tPnBvcnQsIHR0eSwgZmlscCk7CisJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7CiBkb25lOgogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CiBlcnJfb3V0OgpAQCAtNjg2LDE1ICs2ODYsMjEgQEAKIAogCS8qIFBlcmZvcm0gdGhlIGNsb3NpbmcgcHJvY2VzcyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZG8gdGhlIGhhcmR3YXJlCiAJICAgc2h1dGRvd24gKi8KLQlpZiAoIWFjbSB8fCB0dHlfcG9ydF9jbG9zZV9zdGFydCgmYWNtLT5wb3J0LCB0dHksIGZpbHApID09IDApCisJaWYgKCFhY20pCiAJCXJldHVybjsKKwlpZiAodHR5X3BvcnRfY2xvc2Vfc3RhcnQoJmFjbS0+cG9ydCwgdHR5LCBmaWxwKSA9PSAwKSB7CisJCW11dGV4X2xvY2soJm9wZW5fbXV0ZXgpOworCQlpZiAoIWFjbS0+ZGV2KSB7CisJCQl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOworCQkJYWNtX3R0eV91bnJlZ2lzdGVyKGFjbSk7CisJCQl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJfQorCQltdXRleF91bmxvY2soJm9wZW5fbXV0ZXgpOworCQlyZXR1cm47CisJfQogCWFjbV9wb3J0X2Rvd24oYWNtLCAwKTsKIAl0dHlfcG9ydF9jbG9zZV9lbmQoJmFjbS0+cG9ydCwgdHR5KTsKLQltdXRleF9sb2NrKCZvcGVuX211dGV4KTsKIAl0dHlfcG9ydF90dHlfc2V0KCZhY20tPnBvcnQsIE5VTEwpOwotCWlmICghYWNtLT5kZXYpCi0JCWFjbV90dHlfdW5yZWdpc3RlcihhY20pOwotCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNtX3R0eV93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNidG1jLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwppbmRleCAzMzNlZTAyLi4yNDczY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBVU0JUTUNfU0laRV9JT0JVRkZFUgkyMDQ4CiAKIC8qIERlZmF1bHQgVVNCIHRpbWVvdXQgKGluIG1pbGxpc2Vjb25kcykgKi8KLSNkZWZpbmUgVVNCVE1DX1RJTUVPVVQJCTEwCisjZGVmaW5lIFVTQlRNQ19USU1FT1VUCQk1MDAwCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiByZWFkIGN5Y2xlcyB0byBlbXB0eSBidWxrIGluIGVuZHBvaW50IGR1cmluZyBDTEVBUiBhbmQKQEAgLTk5Myw3ICs5OTMsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSB1c2J0bWNfcmVhZCwKIAkud3JpdGUJCT0gdXNidG1jX3dyaXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCAzMzM1MTMxLi5hMThlM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw3IEBACiBjb25maWcgVVNCX0dBREdFVF9QWEEyNVgKIAlib29sZWFuICJQWEEgMjV4IG9yIElYUCA0eHgiCiAJZGVwZW5kcyBvbiAoQVJDSF9QWEEgJiYgUFhBMjV4KSB8fCBBUkNIX0lYUDRYWAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI1eCBzZXJpZXMgWFNjYWxlIEFSTS01VEUgcHJvY2Vzc29ycyBpbmNsdWRlCiAJICAgYW4gaW50ZWdyYXRlZCBmdWxsIHNwZWVkIFVTQiAxLjEgZGV2aWNlIGNvbnRyb2xsZXIuICBUaGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggZjM3ZGUyOC4uMTY3Y2IyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTYxLDExICs2MSw2IEBACiAgKiBzaW1wbGVyLCBNaWNyb3NvZnQgcHVzaGVzIHRoZWlyIG93biBhcHByb2FjaDogUk5ESVMuICBUaGUgcHVibGlzaGVkCiAgKiBSTkRJUyBzcGVjcyBhcmUgYW1iaWd1b3VzIGFuZCBhcHBlYXIgdG8gYmUgaW5jb21wbGV0ZSwgYW5kIGFyZSBhbHNvCiAgKiBuZWVkbGVzc2x5IGNvbXBsZXguICBUaGV5IGJvcnJvdyBtb3JlIGZyb20gQ0RDIEFDTSB0aGFuIENEQyBFQ00uCi0gKgotICogV2hpbGUgQ0RDIEVDTSwgQ0RDIFN1YnNldCwgYW5kIFJORElTIGFyZSBkZXNpZ25lZCB0byBleHRlbmQgdGhlIGV0aGVybmV0Ci0gKiBpbnRlcmZhY2UgdG8gdGhlIHRhcmdldCwgQ0RDIEVFTSB3YXMgZGVzaWduZWQgdG8gdXNlIGV0aGVybmV0IG92ZXIgdGhlIFVTQgotICogbGluayBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0YXJnZXQuICBDREMgRUVNIGlzIGltcGxlbWVudGVkIGFzIGFuIGFsdGVybmF0aXZlCi0gKiB0byB0aG9zZSBvdGhlciBwcm90b2NvbHMgd2hlbiB0aGF0IGNvbW11bmljYXRpb24gbW9kZWwgaXMgbW9yZSBhcHByb3ByaWF0ZQogICovCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJFdGhlcm5ldCBHYWRnZXQiCkBAIC0xNTcsOCArMTUyLDggQEAKICNkZWZpbmUgUk5ESVNfUFJPRFVDVF9OVU0JMHhhNGEyCS8qIEV0aGVybmV0L1JORElTIEdhZGdldCAqLwogCiAvKiBGb3IgRUVNIGdhZGdldHMgKi8KLSNkZWZpbmUgRUVNX1ZFTkRPUl9OVU0JMHgwNTI1CS8qIElOVkFMSUQgLSBORUVEUyBUTyBCRSBBTExPQ0FURUQgKi8KLSNkZWZpbmUgRUVNX1BST0RVQ1RfTlVNCTB4YTRhMQkvKiBJTlZBTElEIC0gTkVFRFMgVE8gQkUgQUxMT0NBVEVEICovCisjZGVmaW5lIEVFTV9WRU5ET1JfTlVNCQkweDFkNmIJLyogTGludXggRm91bmRhdGlvbiAqLworI2RlZmluZSBFRU1fUFJPRFVDVF9OVU0JCTB4MDEwMgkvKiBFRU0gR2FkZ2V0ICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdWRjX2NvcmUuYwppbmRleCA0MmE3NGI4Li5mYTNkMTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91ZGNfY29yZS5jCkBAIC0yMTM5LDcgKzIxMzksNyBAQAogc3RhdGljIHZvaWQgZnNsX3VkY19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAljb21wbGV0ZSh1ZGNfY29udHJvbGxlci0+ZG9uZSk7Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCB1ZGNfY29udHJvbGxlci0+ZXBfcWhfc2l6ZSwKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPnBhcmVudCwgdWRjX2NvbnRyb2xsZXItPmVwX3FoX3NpemUsCiAJCQl1ZGNfY29udHJvbGxlci0+ZXBfcWgsIHVkY19jb250cm9sbGVyLT5lcF9xaF9kbWEpOwogCWtmcmVlKHVkY19jb250cm9sbGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IGM1MmE2ODEuLjAxZWUwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMTQwMiw3ICsxNDAyLDggQEAKIAlzdHJ1Y3QgY2xrICpjbGs7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQgPSAwOwotCWludCBpLCByZXNfc2l6ZTsKKwlpbnQgaTsKKwlyZXNvdXJjZV9zaXplX3QgcmVzX3NpemU7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKSB7CkBAIC0xNDE2LDcgKzE0MTcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXNfc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJcmVzX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzX3NpemUsIHJlcy0+bmFtZSkpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgYWxsb2NhdGUgJWQgYnl0ZXMgYXQgJWQgYWRkcmVzc1xuIiwKIAkJCXJlc19zaXplLCByZXMtPnN0YXJ0KTsKQEAgLTE1MjcsOCArMTUyOCw3IEBACiAJY2xrX2Rpc2FibGUoaW14X3VzYi0+Y2xrKTsKIAlpb3VubWFwKGlteF91c2ItPmJhc2UpOwogCi0JcmVsZWFzZV9tZW1fcmVnaW9uKGlteF91c2ItPnJlcy0+c3RhcnQsCi0JCWlteF91c2ItPnJlcy0+ZW5kIC0gaW14X3VzYi0+cmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihpbXhfdXNiLT5yZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGlteF91c2ItPnJlcykpOwogCiAJaWYgKHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdCgmcGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggYzQ0MzY3Zi4uYmYwZjY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMjk1MDAxNS4uMmQ4NjdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC04NzUsNyArODc1LDcgQEAKIH0KIAogLyogdXNlZCBhZnRlciBlbmRwb2ludCBjb25maWd1cmF0aW9uICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcmludGVyX2lvX29wZXJhdGlvbnMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm9wZW4gPQkJcHJpbnRlcl9vcGVuLAogCS5yZWFkID0JCXByaW50ZXJfcmVhZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuaAppbmRleCAwMzA4N2U3Li45YTUzN2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5oCkBAIC0xMzEsMzEgKzEzMSw0OCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfcmVhZF9maWZvKHN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgICAgICBpbnQgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkYXRhOworCWludCBpOworCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGZpZm9hZGRyID0gcjhhNjY1OTctPnJlZyArIG9mZnNldDsKLQkJdW5zaWduZWQgbG9uZyBjb3VudDsKLQkJdW5pb24gewotCQkJdW5zaWduZWQgbG9uZyBkd29yZDsKLQkJCXVuc2lnbmVkIGNoYXIgYnl0ZVs0XTsKLQkJfSBkYXRhOwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7CisJCS8qIDMyLWJpdCBhY2Nlc3NlcyBmb3Igb25fY2hpcCBjb250cm9sbGVycyAqLwogCi0JCWNvdW50ID0gbGVuIC8gNDsKLQkJaW5zbChmaWZvYWRkciwgYnVmLCBjb3VudCk7CisJCS8qIGFsaWduZWQgYnVmIGNhc2UgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCWluc2woZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlidWYgKz0gbGVuICYgfjB4MDM7CisJCQlsZW4gJj0gMHgwMzsKKwkJfQogCi0JCWlmIChsZW4gJiAweDAwMDAwMDAzKSB7Ci0JCQlkYXRhLmR3b3JkID0gaW5sKGZpZm9hZGRyKTsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspCi0JCQkJcGJbaV0gPSBkYXRhLmJ5dGVbaV07CisJCS8qIHVuYWxpZ25lZCBidWYgY2FzZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWlmICghKGkgJiAweDAzKSkKKwkJCQlkYXRhID0gaW5sKGZpZm9hZGRyKTsKKworCQkJYnVmW2ldID0gKGRhdGEgPj4gKChpICYgMHgwMykgKiA4KSkgJiAweGZmOwogCQl9CiAJfSBlbHNlIHsKLQkJbGVuID0gKGxlbiArIDEpIC8gMjsKLQkJaW5zdyhyOGE2NjU5Ny0+cmVnICsgb2Zmc2V0LCBidWYsIGxlbik7CisJCS8qIDE2LWJpdCBhY2Nlc3NlcyBmb3IgZXh0ZXJuYWwgY29udHJvbGxlcnMgKi8KKworCQkvKiBhbGlnbmVkIGJ1ZiBjYXNlICovCisJCWlmIChsZW4gPj0gMiAmJiAhKCh1bnNpZ25lZCBsb25nKWJ1ZiAmIDB4MDEpKSB7CisJCQlpbnN3KGZpZm9hZGRyLCBidWYsIGxlbiAvIDIpOworCQkJYnVmICs9IGxlbiAmIH4weDAxOworCQkJbGVuICY9IDB4MDE7CisJCX0KKworCQkvKiB1bmFsaWduZWQgYnVmIGNhc2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQlpZiAoIShpICYgMHgwMSkpCisJCQkJZGF0YSA9IGludyhmaWZvYWRkcik7CisKKwkJCWJ1ZltpXSA9IChkYXRhID4+ICgoaSAmIDB4MDEpICogOCkpICYgMHhmZjsKKwkJfQogCX0KIH0KIApAQCAtMTY2LDM4ICsxODMsNDAgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHI4YTY2NTk3X3dyaXRlX2ZpZm8oc3RydWN0IHI4YTY2NTk3ICpyOGE2NjU5NywKLQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHUxNiAqYnVmLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCSAgICAgICBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZmlmb2FkZHIgPSByOGE2NjU5Ny0+cmVnICsgb2Zmc2V0OworCWludCBhZGogPSAwOworCWludCBpOwogCiAJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkgewotCQl1bnNpZ25lZCBsb25nIGNvdW50OwotCQl1bnNpZ25lZCBjaGFyICpwYjsKLQkJaW50IGk7Ci0KLQkJY291bnQgPSBsZW4gLyA0OwotCQlvdXRzbChmaWZvYWRkciwgYnVmLCBjb3VudCk7Ci0KLQkJaWYgKGxlbiAmIDB4MDAwMDAwMDMpIHsKLQkJCXBiID0gKHVuc2lnbmVkIGNoYXIgKilidWYgKyBjb3VudCAqIDQ7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgKGxlbiAmIDB4MDAwMDAwMDMpOyBpKyspIHsKLQkJCQlpZiAocjhhNjY1OTdfcmVhZChyOGE2NjU5NywgQ0ZJRk9TRUwpICYgQklHRU5EKQotCQkJCQlvdXRiKHBiW2ldLCBmaWZvYWRkciArIGkpOwotCQkJCWVsc2UKLQkJCQkJb3V0YihwYltpXSwgZmlmb2FkZHIgKyAzIC0gaSk7Ci0JCQl9CisJCS8qIDMyLWJpdCBhY2Nlc3Mgb25seSBpZiBidWYgaXMgMzItYml0IGFsaWduZWQgKi8KKwkJaWYgKGxlbiA+PSA0ICYmICEoKHVuc2lnbmVkIGxvbmcpYnVmICYgMHgwMykpIHsKKwkJCW91dHNsKGZpZm9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJYnVmICs9IGxlbiAmIH4weDAzOworCQkJbGVuICY9IDB4MDM7CiAJCX0KIAl9IGVsc2UgewotCQlpbnQgb2RkID0gbGVuICYgMHgwMDAxOwotCi0JCWxlbiA9IGxlbiAvIDI7Ci0JCW91dHN3KGZpZm9hZGRyLCBidWYsIGxlbik7Ci0JCWlmICh1bmxpa2VseShvZGQpKSB7Ci0JCQlidWYgPSAmYnVmW2xlbl07Ci0JCQlvdXRiKCh1bnNpZ25lZCBjaGFyKSpidWYsIGZpZm9hZGRyKTsKKwkJLyogMTYtYml0IGFjY2VzcyBvbmx5IGlmIGJ1ZiBpcyAxNi1iaXQgYWxpZ25lZCAqLworCQlpZiAobGVuID49IDIgJiYgISgodW5zaWduZWQgbG9uZylidWYgJiAweDAxKSkgeworCQkJb3V0c3coZmlmb2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCQlidWYgKz0gbGVuICYgfjB4MDE7CisJCQlsZW4gJj0gMHgwMTsKIAkJfQogCX0KKworCS8qIGFkanVzdCBmaWZvIGFkZHJlc3MgaW4gdGhlIGxpdHRsZSBlbmRpYW4gY2FzZSAqLworCWlmICghKHI4YTY2NTk3X3JlYWQocjhhNjY1OTcsIENGSUZPU0VMKSAmIEJJR0VORCkpIHsKKwkJaWYgKHI4YTY2NTk3LT5wZGF0YS0+b25fY2hpcCkKKwkJCWFkaiA9IDB4MDM7IC8qIDMyLWJpdCB3aWRlICovCisJCWVsc2UKKwkJCWFkaiA9IDB4MDE7IC8qIDE2LWJpdCB3aWRlICovCisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlvdXRiKGJ1ZltpXSwgZmlmb2FkZHIgKyBhZGogLSAoaSAmIGFkaikpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcjhhNjY1OTdfbWRmeShzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCAzZWEwNTkzLi5iMjVjZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMTQwMCw2ICsxNDAwLDEwIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlwZXJpb2QgPSB1cmItPmludGVydmFsOworCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCisJCXBlcmlvZCA8PD0gMzsKKwogCW5vdyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPmZyYW1lX2luZGV4KSAlIG1vZDsKIAogCS8qIHdoZW4ncyB0aGUgbGFzdCB1ZnJhbWUgdGhpcyB1cmIgY291bGQgc3RhcnQ/ICovCkBAIC0xNDE3LDE0ICsxNDIxLDE1IEBACiAKIAkJLyogRmVsbCBiZWhpbmQgKGJ5IHVwIHRvIHR3aWNlIHRoZSBzbG9wIGFtb3VudCk/ICovCiAJCWlmIChzdGFydCA+PSBtYXggLSAyICogOCAqIFNDSEVEVUxFX1NMT1ApCi0JCQlzdGFydCArPSBzdHJlYW0tPmludGVydmFsICogRElWX1JPVU5EX1VQKAotCQkJCQltYXggLSBzdGFydCwgc3RyZWFtLT5pbnRlcnZhbCkgLSBtb2Q7CisJCQlzdGFydCArPSBwZXJpb2QgKiBESVZfUk9VTkRfVVAoCisJCQkJCW1heCAtIHN0YXJ0LCBwZXJpb2QpIC0gbW9kOwogCiAJCS8qIFRyaWVkIHRvIHNjaGVkdWxlIHRvbyBmYXIgaW50byB0aGUgZnV0dXJlPyAqLwogCQlpZiAodW5saWtlbHkoKHN0YXJ0ICsgc2NoZWQtPnNwYW4pID49IG1heCkpIHsKIAkJCXN0YXR1cyA9IC1FRkJJRzsKIAkJCWdvdG8gZmFpbDsKIAkJfQorCQlzdHJlYW0tPm5leHRfdWZyYW1lID0gc3RhcnQ7CiAJCWdvdG8gcmVhZHk7CiAJfQogCkBAIC0xNDQwLDEwICsxNDQ1LDYgQEAKIAogCS8qIE5PVEU6ICBhc3N1bWVzIFVSQl9JU09fQVNBUCwgdG8gbGltaXQgY29tcGxleGl0eS9idWdzICovCiAKLQlwZXJpb2QgPSB1cmItPmludGVydmFsOwotCWlmICghc3RyZWFtLT5oaWdoc3BlZWQpCi0JCXBlcmlvZCA8PD0gMzsKLQogCS8qIGZpbmQgYSB1ZnJhbWUgc2xvdCB3aXRoIGVub3VnaCBiYW5kd2lkdGggKi8KIAlmb3IgKDsgc3RhcnQgPCAoc3RyZWFtLT5uZXh0X3VmcmFtZSArIHBlcmlvZCk7IHN0YXJ0KyspIHsKIAkJaW50CQllbm91Z2hfc3BhY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggZTM1ZDgyOC4uNWM3NzRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtMjI4NCwxMCArMjI4NCwxMCBAQAogCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiSVNQMTM2MiBNZW1vcnkgdXNhZ2U6XG4iKTsKIAlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSVNUTDogICAgMiAqICU0ZDogICAgICU0ZCBAICQlMDR4OiQlMDR4XG4iLAogCQkgaXN0bF9zaXplIC8gMiwgaXN0bF9zaXplLCAwLCBpc3RsX3NpemUgLyAyKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgSU5UTDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBJTlRMOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgSVNQMTM2Ml9JTlRMX0JVRkZFUlMsIGludGxfYmxrc2l6ZSAtIFBURF9IRUFERVJfU0laRSwKIAkJIGludGxfc2l6ZSwgaXN0bF9zaXplKTsKLQlkZXZfaW5mbyhoY2QtPnNlbGYuY29udHJvbGxlciwgIiAgQVRMIDogJTRkICogKCUzdSs4KTogICU0ZCBAICQlMDR4XG4iLAorCWRldl9pbmZvKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiICBBVEwgOiAlNGQgKiAoJTNsdSs4KTogICU0ZCBAICQlMDR4XG4iLAogCQkgYXRsX2J1ZmZlcnMsIGF0bF9ibGtzaXplIC0gUFREX0hFQURFUl9TSVpFLAogCQkgYXRsX3NpemUsIGlzdGxfc2l6ZSArIGludGxfc2l6ZSk7CiAJZGV2X2luZm8oaGNkLT5zZWxmLmNvbnRyb2xsZXIsICIgIFVTRUQvRlJFRTogICAlNGQgICAgICAlNGRcbiIsIHRvdGFsLApAQCAtMjY3NywxMiArMjY3NywxMiBAQAogCURCRygwLCAiJXM6IFJlbW92aW5nIEhDRFxuIiwgX19mdW5jX18pOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+ZGF0YV9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmRhdGFfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5kYXRhX3JlZyk7CiAKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgKHUzMilpc3AxMzYyX2hjZC0+YWRkcl9yZWcpOworCURCRygwLCAiJXM6IFVubWFwcGluZyBhZGRyX3JlZyBAICVwXG4iLCBfX2Z1bmNfXywKKwkgICAgaXNwMTM2Ml9oY2QtPmFkZHJfcmVnKTsKIAlpb3VubWFwKGlzcDEzNjJfaGNkLT5hZGRyX3JlZyk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwpAQCAtMjgxMCwxNiArMjgxMCwxNiBAQAogCXJldHVybiAwOwogCiAgZXJyNjoKLQlEQkcoMCwgIiVzOiBGcmVlaW5nIGRldiAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilpc3AxMzYyX2hjZCk7CisJREJHKDAsICIlczogRnJlZWluZyBkZXYgJXBcbiIsIF9fZnVuY19fLCBpc3AxMzYyX2hjZCk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKICBlcnI1OgotCURCRygwLCAiJXM6IFVubWFwcGluZyBkYXRhX3JlZyBAICUwOHhcbiIsIF9fZnVuY19fLCAodTMyKWRhdGFfcmVnKTsKKwlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgZGF0YV9yZWcgQCAlcFxuIiwgX19mdW5jX18sIGRhdGFfcmVnKTsKIAlpb3VubWFwKGRhdGFfcmVnKTsKICBlcnI0OgogCURCRygwLCAiJXM6IFJlbGVhc2luZyBtZW0gcmVnaW9uICUwOGx4XG4iLCBfX2Z1bmNfXywgKGxvbmcgdW5zaWduZWQgaW50KWRhdGEtPnN0YXJ0KTsKIAlyZWxlYXNlX21lbV9yZWdpb24oZGF0YS0+c3RhcnQsIHJlc291cmNlX2xlbihkYXRhKSk7CiAgZXJyMzoKLQlEQkcoMCwgIiVzOiBVbm1hcHBpbmcgYWRkcl9yZWcgQCAlMDh4XG4iLCBfX2Z1bmNfXywgKHUzMilhZGRyX3JlZyk7CisJREJHKDAsICIlczogVW5tYXBwaW5nIGFkZHJfcmVnIEAgJXBcbiIsIF9fZnVuY19fLCBhZGRyX3JlZyk7CiAJaW91bm1hcChhZGRyX3JlZyk7CiAgZXJyMjoKIAlEQkcoMCwgIiVzOiBSZWxlYXNpbmcgbWVtIHJlZ2lvbiAlMDhseFxuIiwgX19mdW5jX18sIChsb25nIHVuc2lnbmVkIGludClhZGRyLT5zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjIuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCmluZGV4IGZlNjBmNjIuLjFhMjUzZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi5oCkBAIC01ODAsNyArNTgwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIEFMSUdOU1RBVChzdHJ1Y3QgaXNwMTM2Ml9oY2QgKmlzcDEzNjJfaGNkLCB2b2lkICpwdHIpCiB7Ci0JdW5zaWduZWQgcCA9ICh1bnNpZ25lZClwdHI7CisJdW5zaWduZWQgbG9uZyBwID0gKHVuc2lnbmVkIGxvbmcpcHRyOwogCWlmICghKHAgJiAweGYpKQogCQlpc3AxMzYyX2hjZC0+c3RhdDE2Kys7CiAJZWxzZSBpZiAoIShwICYgMHg3KSkKQEAgLTc3MCw3ICs3NzAsNyBAQAogCWlmICghbGVuKQogCQlyZXR1cm47CiAKLQlpZiAoKHVuc2lnbmVkKWRwICYgMHgxKSB7CisJaWYgKCh1bnNpZ25lZCBsb25nKWRwICYgMHgxKSB7CiAJCS8qIG5vdCBhbGlnbmVkICovCiAJCWZvciAoOyBsZW4gPiAxOyBsZW4gLT0gMikgewogCQkJZGF0YSA9ICpkcCsrOwpAQCAtOTYyLDggKzk2Miw4IEBACiAKIAlpc3AxMzYyX3dyaXRlX2RpcmFkZHIoaXNwMTM2Ml9oY2QsIG9mZnNldCwgbGVuKTsKIAotCURCRygzLCAiJXM6IFJlYWRpbmcgJWQgYnl0ZSBmcm9tIGJ1ZmZlciBAJTA0eCB0byBtZW1vcnkgQCAlMDh4XG4iLCBfX2Z1bmNfXywKLQkgICAgbGVuLCBvZmZzZXQsICh1MzIpYnVmKTsKKwlEQkcoMywgIiVzOiBSZWFkaW5nICVkIGJ5dGUgZnJvbSBidWZmZXIgQCUwNHggdG8gbWVtb3J5IEAgJXBcbiIsCisJICAgIF9fZnVuY19fLCBsZW4sIG9mZnNldCwgYnVmKTsKIAogCWlzcDEzNjJfd3JpdGVfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQsIEhDdVBJTlRfRU9UKTsKIAlfV0FSTl9PTigoaXNwMTM2Ml9yZWFkX3JlZzE2KGlzcDEzNjJfaGNkLCBIQ3VQSU5UKSAmIEhDdVBJTlRfRU9UKSk7CkBAIC05ODIsOCArOTgyLDggQEAKIAogCWlzcDEzNjJfd3JpdGVfZGlyYWRkcihpc3AxMzYyX2hjZCwgb2Zmc2V0LCBsZW4pOwogCi0JREJHKDMsICIlczogV3JpdGluZyAlZCBieXRlIHRvIGJ1ZmZlciBAJTA0eCBmcm9tIG1lbW9yeSBAICUwOHhcbiIsIF9fZnVuY19fLAotCSAgICBsZW4sIG9mZnNldCwgKHUzMilidWYpOworCURCRygzLCAiJXM6IFdyaXRpbmcgJWQgYnl0ZSB0byBidWZmZXIgQCUwNHggZnJvbSBtZW1vcnkgQCAlcFxuIiwKKwkgICAgX19mdW5jX18sIGxlbiwgb2Zmc2V0LCBidWYpOwogCiAJaXNwMTM2Ml93cml0ZV9yZWcxNihpc3AxMzYyX2hjZCwgSEN1UElOVCwgSEN1UElOVF9FT1QpOwogCV9XQVJOX09OKChpc3AxMzYyX3JlYWRfcmVnMTYoaXNwMTM2Ml9oY2QsIEhDdVBJTlQpICYgSEN1UElOVF9FT1QpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwppbmRleCA3OGJiNzcxLi4yNGViNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCkBAIC04Nyw2ICs4Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIHZvaWQgcXVpcmtfYW1kX3BsbChpbnQgc3RhdGUpOwogc3RhdGljIHZvaWQgYW1kX2lzb19kZXZfcHV0KHZvaWQpOworc3RhdGljIHZvaWQgc2I4MDBfcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBxdWlya19hbWRfcGxsKGludCBzdGF0ZSkKIHsKQEAgLTk2LDYgKzk3LDEwIEBACiB7CiAJcmV0dXJuOwogfQorc3RhdGljIGlubGluZSB2b2lkIHNiODAwX3ByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSwgaW50IG9uKQoreworCXJldHVybjsKK30KICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwppbmRleCBkMmJhMDRkLi5iOGExMTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCkBAIC0xNzcsNiArMTc3LDEzIEBACiAJCXJldHVybiAwOwogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKKworCS8qIFNCODAwIG5lZWRzIHByZS1mZXRjaCBmaXggKi8KKwlpZiAoKHJldiA+PSAweDQwKSAmJiAocmV2IDw9IDB4NGYpKSB7CisJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfQU1EX1BSRUZFVENIOworCQlvaGNpX2RiZyhvaGNpLCAiZW5hYmxlZCBBTUQgcHJlZmV0Y2ggcXVpcmtcbiIpOworCX0KKwogCWlmICgocmV2ID4gMHgzYikgfHwgKHJldiA8IDB4MzApKSB7CiAJCXBjaV9kZXZfcHV0KGFtZF9zbWJ1c19kZXYpOwogCQlhbWRfc21idXNfZGV2ID0gTlVMTDsKQEAgLTI2Miw2ICsyNjksMTkgQEAKIAogfQogCitzdGF0aWMgdm9pZCBzYjgwMF9wcmVmZXRjaChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBvbikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl1MTYgbWlzYzsKKworCXBkZXYgPSB0b19wY2lfZGV2KG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNvbnRyb2xsZXIpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsICZtaXNjKTsKKwlpZiAob24gPT0gMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgJiAweGZjZmYpOworCWVsc2UKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAsIG1pc2MgfCAweDAzMDApOworfQorCiAvKiBMaXN0IG9mIHF1aXJrcyBmb3IgT0hDSSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9oY2lfcGNpX3F1aXJrc1tdID0gewogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwppbmRleCBiNTI5NGE5Li5mMWMwNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC00ODEsMzggKzQ4MSw0NyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYJQ09ORklHX1BNCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgcHhhMjd4X29oY2kgKm9oY2kgPSB0b19weGEyN3hfb2hjaShoY2QpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm9oY2kubmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKIAlvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOwogCi0JcHhhMjd4X3N0b3BfaGMob2hjaSwgJnBkZXYtPmRldik7CisJcHhhMjd4X3N0b3BfaGMob2hjaSwgZGV2KTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHB4YTI3eF9vaGNpICpvaGNpID0gdG9fcHhhMjd4X29oY2koaGNkKTsKKwlzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhICppbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJaW50IHN0YXR1czsKIAogCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5vaGNpLm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CiAJb2hjaS0+b2hjaS5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllczsKIAotCWlmICgoc3RhdHVzID0gcHhhMjd4X3N0YXJ0X2hjKG9oY2ksICZwZGV2LT5kZXYpKSA8IDApCisJaWYgKChzdGF0dXMgPSBweGEyN3hfc3RhcnRfaGMob2hjaSwgZGV2KSkgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwogCisJLyogU2VsZWN0IFBvd2VyIE1hbmFnZW1lbnQgTW9kZSAqLworCXB4YTI3eF9vaGNpX3NlbGVjdF9wbW0ob2hjaSwgaW5mLT5wb3J0X21vZGUpOworCiAJb2hjaV9maW5pc2hfY29udHJvbGxlcl9yZXN1bWUoaGNkKTsKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIG9oY2lfaGNkX3B4YTI3eF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCkBAIC01MjIsMTMgKzUzMSwxMiBAQAogCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCiAJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZCwKLQkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAotI2VuZGlmCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTI3eC1vaGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZvaGNpX2hjZF9weGEyN3hfcG1fb3BzLAorI2VuZGlmCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcS5jCmluZGV4IDE2ZmVjYjguLjM1Mjg4YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1xLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXEuYwpAQCAtNDksOSArNDksMTIgQEAKIAlzd2l0Y2ggKHVzYl9waXBldHlwZSAodXJiLT5waXBlKSkgewogCWNhc2UgUElQRV9JU09DSFJPTk9VUzoKIAkJb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcy0tOwotCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwCi0JCQkJJiYgcXVpcmtfYW1kaXNvKG9oY2kpKQotCQkJcXVpcmtfYW1kX3BsbCgxKTsKKwkJaWYgKG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pc29jX3JlcXMgPT0gMCkgeworCQkJaWYgKHF1aXJrX2FtZGlzbyhvaGNpKSkKKwkJCQlxdWlya19hbWRfcGxsKDEpOworCQkJaWYgKHF1aXJrX2FtZHByZWZldGNoKG9oY2kpKQorCQkJCXNiODAwX3ByZWZldGNoKG9oY2ksIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CiAJCW9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmJhbmR3aWR0aF9pbnRfcmVxcy0tOwpAQCAtNjgwLDkgKzY4MywxMiBAQAogCQkJCWRhdGEgKyB1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLm9mZnNldCwKIAkJCQl1cmItPmlzb19mcmFtZV9kZXNjIFtjbnRdLmxlbmd0aCwgdXJiLCBjbnQpOwogCQl9Ci0JCWlmIChvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzID09IDAKLQkJCQkmJiBxdWlya19hbWRpc28ob2hjaSkpCi0JCQlxdWlya19hbWRfcGxsKDApOworCQlpZiAob2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2lzb2NfcmVxcyA9PSAwKSB7CisJCQlpZiAocXVpcmtfYW1kaXNvKG9oY2kpKQorCQkJCXF1aXJrX2FtZF9wbGwoMCk7CisJCQlpZiAocXVpcmtfYW1kcHJlZmV0Y2gob2hjaSkpCisJCQkJc2I4MDBfcHJlZmV0Y2gob2hjaSwgMSk7CisJCX0KIAkJcGVyaW9kaWMgPSBvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5iYW5kd2lkdGhfaXNvY19yZXFzKysgPT0gMAogCQkJJiYgb2hjaV90b19oY2Qob2hjaSktPnNlbGYuYmFuZHdpZHRoX2ludF9yZXFzID09IDA7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAppbmRleCAyMjIwMTFmLi41YmYxNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2kuaApAQCAtNDAyLDYgKzQwMiw3IEBACiAjZGVmaW5lCU9IQ0lfUVVJUktfRlJBTUVfTk8JMHg4MAkJCS8qIG5vIGJpZyBlbmRpYW4gZnJhbWVfbm8gc2hpZnQgKi8KICNkZWZpbmUJT0hDSV9RVUlSS19IVUJfUE9XRVIJMHgxMDAJCQkvKiBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vYyBzZXR1cCAqLwogI2RlZmluZQlPSENJX1FVSVJLX0FNRF9JU08JMHgyMDAJCQkvKiBJU08gdHJhbnNmZXJzKi8KKyNkZWZpbmUJT0hDSV9RVUlSS19BTURfUFJFRkVUQ0gJMHg0MDAJCQkvKiBwcmUtZmV0Y2ggZm9yIElTTyB0cmFuc2ZlciAqLwogCS8vIHRoZXJlIGFyZSBhbHNvIGNoaXAgcXVpcmtzL2J1Z3MgaW4gaW5pdCBsb2dpYwogCiAJc3RydWN0IHdvcmtfc3RydWN0CW5lY193b3JrOwkvKiBXb3JrZXIgZm9yIE5FQyBxdWlyayAqLwpAQCAtNDMzLDYgKzQzNCwxMCBAQAogewogCXJldHVybiBvaGNpLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1EX0lTTzsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IHF1aXJrX2FtZHByZWZldGNoKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK3sKKwlyZXR1cm4gb2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRF9QUkVGRVRDSDsKK30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBxdWlya19uZWMoc3RydWN0IG9oY2lfaGNkICpvaGNpKQogewpAQCAtNDQ2LDYgKzQ1MSwxMCBAQAogewogCXJldHVybiAwOwogfQorc3RhdGljIGlubGluZSBpbnQgcXVpcmtfYW1kcHJlZmV0Y2goc3RydWN0IG9oY2lfaGNkICpvaGNpKQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYmV0d2VlbiBhbiBoY2QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb2hjaV9oY2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvcGNpLXF1aXJrcy5jIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKaW5kZXggMjNjZjNiZC4uODNiNWY5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMKQEAgLTQ3NSw0ICs0NzUsNCBAQAogCWVsc2UgaWYgKHBkZXYtPmNsYXNzID09IFBDSV9DTEFTU19TRVJJQUxfVVNCX1hIQ0kpCiAJCXF1aXJrX3VzYl9oYW5kb2ZmX3hoY2kocGRldik7CiB9Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcXVpcmtfdXNiX2Vhcmx5X2hhbmRvZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggNzQ5YjUzNy4uZTMzZDM2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC0xMDAzLDE5ICsxMDAzLDIwIEBACiAJaWYgKHN5c3N0cyA9PSBTRTApIHsKIAkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5BVFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOwogCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBBVFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKKwkJCXI4YTY2NTk3X2JzZXQocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCQllbHNlIGlmIChzeXNzdHMgPT0gTFNfSlNUUykKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOworCisJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+RFRDSCwgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOwogCX0KIAotCWlmIChzeXNzdHMgPT0gRlNfSlNUUykKLQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgSFNFLCBnZXRfc3lzY2ZnX3JlZyhwb3J0KSk7Ci0JZWxzZSBpZiAoc3lzc3RzID09IExTX0pTVFMpCi0JCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEhTRSwgZ2V0X3N5c2NmZ19yZWcocG9ydCkpOwotCi0JcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5EVENILCBnZXRfaW50c3RzX3JlZyhwb3J0KSk7Ci0JcjhhNjY1OTdfYnNldChyOGE2NjU5NywgRFRDSEUsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKLQotCWlmIChyOGE2NjU5Ny0+YnVzX3N1c3BlbmRlZCkKLQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyhyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTAyNCw2ICsxMDI1LDggQEAKIAl1MTYgc3BlZWQgPSBnZXRfcmhfdXNiX3NwZWVkKHI4YTY2NTk3LCBwb3J0KTsKIAlzdHJ1Y3QgcjhhNjY1OTdfcm9vdF9odWIgKnJoID0gJnI4YTY2NTk3LT5yb290X2h1Yltwb3J0XTsKIAorCXJoLT5wb3J0ICY9IH4oKDEgPDwgVVNCX1BPUlRfRkVBVF9ISUdIU1BFRUQpIHwKKwkJICAgICAgKDEgPDwgVVNCX1BPUlRfRkVBVF9MT1dTUEVFRCkpOwogCWlmIChzcGVlZCA9PSBIU01PREUpCiAJCXJoLT5wb3J0IHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfSElHSFNQRUVEKTsKIAllbHNlIGlmIChzcGVlZCA9PSBMU01PREUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3doY2kvYXNsLmMKaW5kZXggYzYzMjQzNy4uNTYyZWJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2FzbC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9hc2wuYwpAQCAtMTE1LDYgKzExNSwxMCBAQAogCQlpZiAoc3RhdHVzICYgUVREX1NUU19IQUxURUQpIHsKIAkJCS8qIFVnLCBhbiBlcnJvci4gKi8KIAkJCXByb2Nlc3NfaGFsdGVkX3F0ZCh3aGMsIHFzZXQsIHRkKTsKKwkJCS8qIEEgaGFsdGVkIHFURCBhbHdheXMgdHJpZ2dlcnMgYW4gdXBkYXRlCisJCQkgICBiZWNhdXNlIHRoZSBxc2V0IHdhcyBlaXRoZXIgcmVtb3ZlZCBvcgorCQkJICAgcmVhY3RpdmF0ZWQuICovCisJCQl1cGRhdGUgfD0gV0hDX1VQREFURV9VUERBVEVEOwogCQkJZ290byBkb25lOwogCQl9CiAKQEAgLTMwNSw2ICszMDksNyBAQAogCXN0cnVjdCB3aGNfdXJiICp3dXJiID0gdXJiLT5oY3ByaXY7CiAJc3RydWN0IHdoY19xc2V0ICpxc2V0ID0gd3VyYi0+cXNldDsKIAlzdHJ1Y3Qgd2hjX3N0ZCAqc3RkLCAqdDsKKwlib29sIGhhc19xdGQgPSBmYWxzZTsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTMxNSwxNyArMzIwLDIxIEBACiAJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0ZCwgdCwgJnFzZXQtPnN0ZHMsIGxpc3Rfbm9kZSkgewotCQlpZiAoc3RkLT51cmIgPT0gdXJiKQorCQlpZiAoc3RkLT51cmIgPT0gdXJiKSB7CisJCQlpZiAoc3RkLT5xdGQpCisJCQkJaGFzX3F0ZCA9IHRydWU7CiAJCQlxc2V0X2ZyZWVfc3RkKHdoYywgc3RkKTsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCXN0ZC0+cXRkID0gTlVMTDsgLyogc28gdGhpcyBzdGQgaXMgcmUtYWRkZWQgd2hlbiB0aGUgcXNldCBpcyAqLwogCX0KIAotCWFzbF9xc2V0X3JlbW92ZSh3aGMsIHFzZXQpOwotCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKLQl3dXJiLT5pc19hc3luYyA9IHRydWU7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlhc2xfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJd3VyYi0+c3RhdHVzID0gc3RhdHVzOworCQl3dXJiLT5pc19hc3luYyA9IHRydWU7CisJCXF1ZXVlX3dvcmsod2hjLT53b3JrcXVldWUsICZ3dXJiLT5kZXF1ZXVlX3dvcmspOworCX0gZWxzZQorCQlxc2V0X3JlbW92ZV91cmIod2hjLCBxc2V0LCB1cmIsIHN0YXR1cyk7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2hjLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKaW5kZXggY2YyZDQ1OS4uMjI3M2M4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL2RlYnVnLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwemxfcHJpbnQsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGlfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRpX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE0Miw3ICsxNDIsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhc2xfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFzbF9mb3BzID0gewogCS5vcGVuICAgID0gYXNsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKQEAgLTE1MCw3ICsxNTAsNyBAQAogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwemxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHB6bF9mb3BzID0gewogCS5vcGVuICAgID0gcHpsX29wZW4sCiAJLnJlYWQgICAgPSBzZXFfcmVhZCwKIAkubGxzZWVrICA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvd2hjaS9wemwuYwppbmRleCBhOWUwNWJhLi4wZGIzZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3doY2kvcHpsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC93aGNpL3B6bC5jCkBAIC0xMjEsNiArMTIxLDEwIEBACiAJCWlmIChzdGF0dXMgJiBRVERfU1RTX0hBTFRFRCkgewogCQkJLyogVWcsIGFuIGVycm9yLiAqLwogCQkJcHJvY2Vzc19oYWx0ZWRfcXRkKHdoYywgcXNldCwgdGQpOworCQkJLyogQSBoYWx0ZWQgcVREIGFsd2F5cyB0cmlnZ2VycyBhbiB1cGRhdGUKKwkJCSAgIGJlY2F1c2UgdGhlIHFzZXQgd2FzIGVpdGhlciByZW1vdmVkIG9yCisJCQkgICByZWFjdGl2YXRlZC4gKi8KKwkJCXVwZGF0ZSB8PSBXSENfVVBEQVRFX1VQREFURUQ7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIApAQCAtMzMzLDYgKzMzNyw3IEBACiAJc3RydWN0IHdoY191cmIgKnd1cmIgPSB1cmItPmhjcHJpdjsKIAlzdHJ1Y3Qgd2hjX3FzZXQgKnFzZXQgPSB3dXJiLT5xc2V0OwogCXN0cnVjdCB3aGNfc3RkICpzdGQsICp0OworCWJvb2wgaGFzX3F0ZCA9IGZhbHNlOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzQzLDE3ICszNDgsMjIgQEAKIAkJZ290byBvdXQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3RkLCB0LCAmcXNldC0+c3RkcywgbGlzdF9ub2RlKSB7Ci0JCWlmIChzdGQtPnVyYiA9PSB1cmIpCisJCWlmIChzdGQtPnVyYiA9PSB1cmIpIHsKKwkJCWlmIChzdGQtPnF0ZCkKKwkJCQloYXNfcXRkID0gdHJ1ZTsKIAkJCXFzZXRfZnJlZV9zdGQod2hjLCBzdGQpOwotCQllbHNlCisJCX0gZWxzZQogCQkJc3RkLT5xdGQgPSBOVUxMOyAvKiBzbyB0aGlzIHN0ZCBpcyByZS1hZGRlZCB3aGVuIHRoZSBxc2V0IGlzICovCiAJfQogCi0JcHpsX3FzZXRfcmVtb3ZlKHdoYywgcXNldCk7Ci0Jd3VyYi0+c3RhdHVzID0gc3RhdHVzOwotCXd1cmItPmlzX2FzeW5jID0gZmFsc2U7Ci0JcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7Ci0KKwlpZiAoaGFzX3F0ZCkgeworCQlwemxfcXNldF9yZW1vdmUod2hjLCBxc2V0KTsKKwkJdXBkYXRlX3B6bF9od192aWV3KHdoYyk7CisJCXd1cmItPnN0YXR1cyA9IHN0YXR1czsKKwkJd3VyYi0+aXNfYXN5bmMgPSBmYWxzZTsKKwkJcXVldWVfd29yayh3aGMtPndvcmtxdWV1ZSwgJnd1cmItPmRlcXVldWVfd29yayk7CisJfSBlbHNlCisJCXFzZXRfcmVtb3ZlX3VyYih3aGMsIHFzZXQsIHVyYiwgc3RhdHVzKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3aGMtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCmluZGV4IDk5OTExZTcuLjkzMmY5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKQEAgLTMzNSw2ICszMzUsMTIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOwogCXhoY2lfZGJnKHhoY2ksICJvcCByZWcgc3RhdHVzID0gMHgleFxuIiwgdGVtcCk7CisJaWYgKHRlbXAgPT0gMHhmZmZmZmZmZikgeworCQl4aGNpX2RiZyh4aGNpLCAiSFcgZGllZCwgcG9sbGluZyBzdG9wcGVkLlxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX2RiZyh4aGNpLCAiaXJfc2V0IDAgcGVuZGluZyA9IDB4JXhcbiIsIHRlbXApOwogCXhoY2lfZGJnKHhoY2ksICJOby1vcCBjb21tYW5kcyBoYW5kbGVkID0gJWRcbiIsIHhoY2ktPm5vb3BzX2hhbmRsZWQpOwpAQCAtNzc2LDYgKzc4Miw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OworCXUzMiB0ZW1wOwogCXN0cnVjdCB4aGNpX2hjZCAqeGhjaTsKIAlzdHJ1Y3QgeGhjaV90ZCAqdGQ7CiAJdW5zaWduZWQgaW50IGVwX2luZGV4OwpAQCAtNzg4LDYgKzc5NSwxNyBAQAogCXJldCA9IHVzYl9oY2RfY2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsKIAlpZiAocmV0IHx8ICF1cmItPmhjcHJpdikKIAkJZ290byBkb25lOworCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmICh0ZW1wID09IDB4ZmZmZmZmZmYpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkhXIGRpZWQsIGZyZWVpbmcgVEQuXG4iKTsKKwkJdGQgPSAoc3RydWN0IHhoY2lfdGQgKikgdXJiLT5oY3ByaXY7CisKKwkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKHhoY2lfdG9faGNkKHhoY2kpLCB1cmIsIC1FU0hVVERPV04pOworCQlrZnJlZSh0ZCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJeGhjaV9kYmcoeGhjaSwgIkNhbmNlbCBVUkIgJXBcbiIsIHVyYik7CiAJeGhjaV9kYmcoeGhjaSwgIkV2ZW50IHJpbmc6XG4iKTsKQEAgLTg3Nyw3ICs4OTUsNyBAQAogCWN0cmxfY3R4LT5kcm9wX2ZsYWdzIHw9IGRyb3BfZmxhZzsKIAluZXdfZHJvcF9mbGFncyA9IGN0cmxfY3R4LT5kcm9wX2ZsYWdzOwogCi0JY3RybF9jdHgtPmFkZF9mbGFncyA9IH5kcm9wX2ZsYWc7CisJY3RybF9jdHgtPmFkZF9mbGFncyAmPSB+ZHJvcF9mbGFnOwogCW5ld19hZGRfZmxhZ3MgPSBjdHJsX2N0eC0+YWRkX2ZsYWdzOwogCiAJbGFzdF9jdHggPSB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoY3RybF9jdHgtPmFkZF9mbGFncyk7CkBAIC0xNDEwLDExICsxNDI4LDIwIEBACiB7CiAJc3RydWN0IHhoY2lfaGNkICp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdGF0ZTsKIAogCWlmICh1ZGV2LT5zbG90X2lkID09IDApCiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJLyogRG9uJ3QgZGlzYWJsZSB0aGUgc2xvdCBpZiB0aGUgaG9zdCBjb250cm9sbGVyIGlzIGRlYWQuICovCisJc3RhdGUgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5vcF9yZWdzLT5zdGF0dXMpOworCWlmIChzdGF0ZSA9PSAweGZmZmZmZmZmKSB7CisJCXhoY2lfZnJlZV92aXJ0X2RldmljZSh4aGNpLCB1ZGV2LT5zbG90X2lkKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCiAJaWYgKHhoY2lfcXVldWVfc2xvdF9jb250cm9sKHhoY2ksIFRSQl9ESVNBQkxFX1NMT1QsIHVkZXYtPnNsb3RfaWQpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FOiBhbGxvY2F0ZSBhIGNvbW1hbmQgcmluZyBzZWdtZW50XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCAxZGI0ZmVhLi5iOGZkMjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC04MDIsOSArODAyLDExIEBACiAJaW50IGk7CiAKIAkvKiBGcmVlIHRoZSBFdmVudCBSaW5nIFNlZ21lbnQgVGFibGUgYW5kIHRoZSBhY3R1YWwgRXZlbnQgUmluZyAqLwotCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7Ci0JeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2Jhc2UpOwotCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9kZXF1ZXVlKTsKKwlpZiAoeGhjaS0+aXJfc2V0KSB7CisJCXhoY2lfd3JpdGVsKHhoY2ksIDAsICZ4aGNpLT5pcl9zZXQtPmVyc3Rfc2l6ZSk7CisJCXhoY2lfd3JpdGVfNjQoeGhjaSwgMCwgJnhoY2ktPmlyX3NldC0+ZXJzdF9iYXNlKTsKKwkJeGhjaV93cml0ZV82NCh4aGNpLCAwLCAmeGhjaS0+aXJfc2V0LT5lcnN0X2RlcXVldWUpOworCX0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB4aGNpX2Vyc3RfZW50cnkpKih4aGNpLT5lcnN0Lm51bV9lbnRyaWVzKTsKIAlpZiAoeGhjaS0+ZXJzdC5lbnRyaWVzKQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIHNpemUsCkBAIC04NDEsOSArODQzLDkgQEAKIAkJCQl4aGNpLT5kY2JhYSwgeGhjaS0+ZGNiYWEtPmRtYSk7CiAJeGhjaS0+ZGNiYWEgPSBOVUxMOwogCisJc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogCXhoY2ktPnBhZ2Vfc2l6ZSA9IDA7CiAJeGhjaS0+cGFnZV9zaGlmdCA9IDA7Ci0Jc2NyYXRjaHBhZF9mcmVlKHhoY2kpOwogfQogCiBpbnQgeGhjaV9tZW1faW5pdChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGdmcF90IGZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggMTczYzM5Yy4uODIxYjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC04NjQsOSArODY0LDExIEBACiAJY3VyX3NlZyA9IHN0YXJ0X3NlZzsKIAogCWRvIHsKKwkJaWYgKHN0YXJ0X2RtYSA9PSAwKQorCQkJcmV0dXJuIDA7CiAJCS8qIFdlIG1heSBnZXQgYW4gZXZlbnQgZm9yIGEgTGluayBUUkIgaW4gdGhlIG1pZGRsZSBvZiBhIFREICovCiAJCWVuZF9zZWdfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywKLQkJCQkmc3RhcnRfc2VnLT50cmJzW1RSQlNfUEVSX1NFR01FTlQgLSAxXSk7CisJCQkJJmN1cl9zZWctPnRyYnNbVFJCU19QRVJfU0VHTUVOVCAtIDFdKTsKIAkJLyogSWYgdGhlIGVuZCBUUkIgaXNuJ3QgaW4gdGhpcyBzZWdtZW50LCB0aGlzIGlzIHNldCB0byAwICovCiAJCWVuZF90cmJfZG1hID0geGhjaV90cmJfdmlydF90b19kbWEoY3VyX3NlZywgZW5kX3RyYik7CiAKQEAgLTg5Myw4ICs4OTUsOSBAQAogCQl9CiAJCWN1cl9zZWcgPSBjdXJfc2VnLT5uZXh0OwogCQlzdGFydF9kbWEgPSB4aGNpX3RyYl92aXJ0X3RvX2RtYShjdXJfc2VnLCAmY3VyX3NlZy0+dHJic1swXSk7Ci0JfSB3aGlsZSAoMSk7CisJfSB3aGlsZSAoY3VyX3NlZyAhPSBzdGFydF9zZWcpOwogCisJcmV0dXJuIDA7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jIGIvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYwppbmRleCBkNjQ1ZjM4Li4zMmQwMTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKQEAgLTQyOSw4ICs0MjksNyBAQAogCXJldHVybiByZWFkX2NvdW50OwogfQogCi1zdGF0aWMgc3RydWN0Ci1maWxlX29wZXJhdGlvbnMgdXNiX3Jpb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3Jpb19mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCXJlYWRfcmlvLAogCS53cml0ZSA9CXdyaXRlX3JpbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMgYi9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2JfaW5pdC5jCmluZGV4IDI3M2RlNWQuLjBhYjk5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYl9pbml0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9zaXN1c2J2Z2Evc2lzdXNiX2luaXQuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAKICNpbmNsdWRlICJzaXN1c2IuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKaW5kZXggMjkwOTJiOC4uNGZiMTIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIAogCWlmIChsZTE2X3RvX2NwdShkZXYtPnVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSAweDAwMDEpIHsKIAkJZGV2X3dhcm4oJmludGVyZmFjZS0+ZGV2LCAiVVNCTENEIG1vZGVsIG5vdCBzdXBwb3J0ZWQuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCQogCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCmluZGV4IGRmZGM0M2UuLjEwZjMyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwpAQCAtMzQ4LDEyICszNDgsMTIgQEAKIAogLyoKICAqIFJldHVybiBhIGZldyAoa2lsby0pYnl0ZXMgdG8gdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlci4KLSAqIFRoaXMgaXMgdXNlZCBpZiBhIERNQSBmZXRjaCBmYWlscy4KKyAqIFRoaXMgaXMgdXNlZCBpZiBhIGRhdGEgZmV0Y2ggZmFpbHMuCiAgKi8KIHN0YXRpYyB2b2lkIG1vbl9idWZmX2FyZWFfc2hyaW5rKHN0cnVjdCBtb25fcmVhZGVyX2JpbiAqcnAsIHVuc2lnbmVkIGludCBzaXplKQogewogCi0Jc2l6ZSA9IChzaXplICsgUEtUX0FMSUdOLTEpICYgfihQS1RfQUxJR04tMSk7CisJLyogc2l6ZSAmPSB+KFBLVF9BTElHTi0xKTsgIC0tIHdlJ3JlIGNhbGxlZCB3aXRoIGFsaWduZWQgc2l6ZSAqLwogCXJwLT5iX2NudCAtPSBzaXplOwogCWlmIChycC0+Yl9pbiA8IHNpemUpCiAJCXJwLT5iX2luICs9IHJwLT5iX3NpemU7CkBAIC00MzMsNiArNDMzLDcgQEAKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CisJdW5zaWduZWQgaW50IGRlbHRhOwogCXVuc2lnbmVkIGludCBuZGVzYywgbGVuZGVzYzsKIAl1bnNpZ25lZCBjaGFyIGRpcjsKIAlzdHJ1Y3QgbW9uX2Jpbl9oZHIgKmVwOwpAQCAtNTM3LDggKzUzOCwxMCBAQAogCWlmIChsZW5ndGggIT0gMCkgewogCQllcC0+ZmxhZ19kYXRhID0gbW9uX2Jpbl9nZXRfZGF0YShycCwgb2Zmc2V0LCB1cmIsIGxlbmd0aCk7CiAJCWlmIChlcC0+ZmxhZ19kYXRhICE9IDApIHsJLyogWWVzLCBpdCdzIDB4MDAsIG5vdCAnMCcgKi8KLQkJCWVwLT5sZW5fY2FwID0gMDsKLQkJCW1vbl9idWZmX2FyZWFfc2hyaW5rKHJwLCBsZW5ndGgpOworCQkJZGVsdGEgPSAoZXAtPmxlbl9jYXAgKyBQS1RfQUxJR04tMSkgJiB+KFBLVF9BTElHTi0xKTsKKwkJCWVwLT5sZW5fY2FwIC09IGxlbmd0aDsKKwkJCWRlbHRhIC09IChlcC0+bGVuX2NhcCArIFBLVF9BTElHTi0xKSAmIH4oUEtUX0FMSUdOLTEpOworCQkJbW9uX2J1ZmZfYXJlYV9zaHJpbmsocnAsIGRlbHRhKTsKIAkJfQogCX0gZWxzZSB7CiAJCWVwLT5mbGFnX2RhdGEgPSBkYXRhX3RhZzsKQEAgLTExNzQsNyArMTE3Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbW9uX2Jpbl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1vbl9iaW5fdm1fb3BzID0gewogCS5vcGVuID0gICAgIG1vbl9iaW5fdm1hX29wZW4sCiAJLmNsb3NlID0gICAgbW9uX2Jpbl92bWFfY2xvc2UsCiAJLmZhdWx0ID0gICAgbW9uX2Jpbl92bWFfZmF1bHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggODAzYWRjYi4uYjg0YWJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtOCw4ICs4LDggQEAKIAogIyAoTSlIRFJDID0gKE11bHRpcG9pbnQpIEhpZ2hzcGVlZCBEdWFsLVJvbGUgQ29udHJvbGxlcgogY29uZmlnIFVTQl9NVVNCX0hEUkMKLQlkZXBlbmRzIG9uIChVU0IgfHwgVVNCX0dBREdFVCkgJiYgSEFWRV9DTEsKLQlkZXBlbmRzIG9uICFTVVBFUkgKKwlkZXBlbmRzIG9uIChVU0IgfHwgVVNCX0dBREdFVCkKKwlkZXBlbmRzIG9uIChBUk0gfHwgQkxBQ0tGSU4pCiAJc2VsZWN0IE5PUF9VU0JfWENFSVYgaWYgQVJDSF9EQVZJTkNJCiAJc2VsZWN0IFRXTDQwMzBfVVNCIGlmIE1BQ0hfT01BUF8zNDMwU0RQCiAJc2VsZWN0IE5PUF9VU0JfWENFSVYgaWYgTUFDSF9PTUFQM0VWTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCmluZGV4IGYyZjY2ZWIuLmZjZWM4N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggMzgxZDY0OC4uNmFhNWYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC05NSw2ICs5NSwxMyBAQAogI2VuZGlmCiAjZW5kaWYJLyogbmVlZCBNVVNCIGdhZGdldCBzZWxlY3Rpb24gKi8KIAorI2lmbmRlZiBDT05GSUdfSEFWRV9DTEsKKy8qIER1bW15IHN0dWIgZm9yIGNsayBmcmFtZXdvcmsgKi8KKyNkZWZpbmUgY2xrX2dldChkZXYsIGlkKQlOVUxMCisjZGVmaW5lIGNsa19wdXQoY2xvY2spCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgY2xrX2VuYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNsa19kaXNhYmxlKGNsb2NrKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKaW5kZXggZmJmZDNmZC4uY2MxZDcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCkBAIC00MzksMTUgKzQzOSw2IEBACiAvKiBOb3QgaW1wbGVtZW50ZWQgLSBIVyBoYXMgc2VwZXJhdGUgVHgvUnggRklGTyAqLwogI2RlZmluZSBNVVNCX1RYQ1NSX01PREUJCQkweDAwMDAKIAotLyoKLSAqIER1bW15IHN0dWIgZm9yIGNsayBmcmFtZXdvcmssIGl0IHdpbGwgYmUgcmVtb3ZlZAotICogdW50aWwgQmxhY2tmaW4gc3VwcG9ydHMgY2xrIGZyYW1ld29yawotICovCi0jZGVmaW5lIGNsa19nZXQoZGV2LCBpZCkJTlVMTAotI2RlZmluZSBjbGtfcHV0KGNsb2NrKQkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGNsa19lbmFibGUoY2xvY2spCWRvIHt9IHdoaWxlICgwKQotI2RlZmluZSBjbGtfZGlzYWJsZShjbG9jaykJZG8ge30gd2hpbGUgKDApCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3dyaXRlX3R4Zmlmb3N6KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGNfc2l6ZSkKIHsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggMmNiZmFiMy4uYjEwYWM4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTU1NCwxMyArNTU0LDEyIEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIH0KIAogLyogQmFzZWQgb24gZnRkaV9zaW8uYyB1bnRocm90dGxlICovCkBAIC01NjksMTQgKzU2OCwxMyBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPnJ4X2xvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5yeF9sb2NrKTsKIAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCiAJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJ4X3dvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCmluZGV4IDRhMjA4ZmUuLmJkMjU0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTUwLDYgKzUwLDggQEAKIHN0YXRpYyB2b2lkIGNwMjEweF9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50KTsKIHN0YXRpYyBpbnQgY3AyMTB4X3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKik7CiBzdGF0aWMgdm9pZCBjcDIxMHhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKK3N0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7CitzdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtMTEzLDYgKzExNSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTY2QSwgMHgwMzAzKSB9LCAvKiBDbGlwc2FsIDU1MDBQQ1UgQy1CdXMgVVNCIGludGVyZmFjZSAqLwogCXsgVVNCX0RFVklDRSgweDE2RDYsIDB4MDAwMSkgfSwgLyogSmFibG90cm9uIHNlcmlhbCBpbnRlcmZhY2UgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxOEVGLCAweEUwMEYpIH0sIC8qIEVMViBVU0ItSTJDLUludGVyZmFjZSAqLworCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4OTUwMCkgfSwgLyogRFc3MDAgR1BTIFVTQiBpbnRlcmZhY2UgKi8KIAl7IH0gLyogVGVybWluYXRpbmcgRW50cnkgKi8KIH07CiAKQEAgLTE0Miw2ICsxNDUsOCBAQAogCS50aW9jbXNldAkJPSBjcDIxMHhfdGlvY21zZXQsCiAJLmF0dGFjaAkJCT0gY3AyMTB4X3N0YXJ0dXAsCiAJLmRpc2Nvbm5lY3QJCT0gY3AyMTB4X2Rpc2Nvbm5lY3QsCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMsCisJLmNhcnJpZXJfcmFpc2VkCQk9IGNwMjEweF9jYXJyaWVyX3JhaXNlZAogfTsKIAogLyogQ29uZmlnIHJlcXVlc3QgdHlwZXMgKi8KQEAgLTc0NSw2ICs3NTAsMTQgQEAKIAlyZXR1cm4gY3AyMTB4X3NldF9jb25maWcocG9ydCwgQ1AyMTBYX1NFVF9NSFMsICZjb250cm9sLCAyKTsKIH0KIAorc3RhdGljIHZvaWQgY3AyMTB4X2R0cl9ydHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCwgaW50IG9uKQoreworCWlmIChvbikKKwkJY3AyMTB4X3Rpb2Ntc2V0X3BvcnQocCwgTlVMTCwgIFRJT0NNX0RUUnxUSU9DTV9SVFMsIDApOworCWVsc2UKKwkJY3AyMTB4X3Rpb2Ntc2V0X3BvcnQocCwgTlVMTCwgIDAsIFRJT0NNX0RUUnxUSU9DTV9SVFMpOworfQorCiBzdGF0aWMgaW50IGNwMjEweF90aW9jbWdldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC03NjcsNiArNzgwLDE1IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbDsKKwljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOworCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwppbmRleCBlMGE4YjcxLi5hNTkxZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKQEAgLTExNTUsMTMgKzExNTUsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT5yeF9mbGFncyA9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIH0KIAogCkBAIC0xMTcwLDE0ICsxMTY5LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgYWN0dWFsbHlfdGhyb3R0bGVkLCByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCXByaXYtPnJ4X2ZsYWdzID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCWlmICghcHJpdi0+Y29tbV9pc19vaykKIAkJcmV0dXJuOwpAQCAtMTE4NSw3ICsxMTgzLDcgQEAKIAlpZiAoYWN0dWFsbHlfdGhyb3R0bGVkKSB7CiAJCXBvcnQtPmludGVycnVwdF9pbl91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCi0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgIgogCQkJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IGFiM2RkOTkuLjY4ZTgwYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTg5OCwxNiArODk4LDE2IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHBfcG9ydF9sb2NrLCBmbGFncyk7CiAKLQkvKiB0dXJuIHRocm90dGxlIG9mZiAqLwotCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7Ci0JcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7Ci0KIAkvKiByZXN0YXJ0IHJlYWQgY2hhaW4gKi8KIAlpZiAocHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCkgewogCQlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKIAl9CiAKKwkvKiB0dXJuIHRocm90dGxlIG9mZiAqLworCXByaXYtPmRwX3Rocm90dGxlZCA9IDA7CisJcHJpdi0+ZHBfdGhyb3R0bGVfcmVzdGFydCA9IDA7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcF9wb3J0X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZW1wZWcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCmluZGV4IDMzYzllOWMuLjdkZDBlM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA0Zjg4M2IxLi45YzYwZDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNzYsMTMgKzc2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxhc3RfZHRyX3J0czsJLyogc2F2ZWQgbW9kZW0gY29udHJvbCBvdXRwdXRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgZGVsdGFfbXNyX3dhaXQ7IC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsgICAgICAgIC8qIFVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KLQlfX3U4IHJ4X2ZsYWdzOwkJLyogcmVjZWl2ZSBzdGF0ZSBmbGFncyAodGhyb3R0bGluZykgKi8KLQlzcGlubG9ja190IHJ4X2xvY2s7CS8qIHNwaW5sb2NrIGZvciByZWNlaXZlIHN0YXRlICovCi0Jc3RydWN0IGRlbGF5ZWRfd29yayByeF93b3JrOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7Ci0JaW50IHJ4X3Byb2Nlc3NlZDsKLQl1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOwotCiAJX191MTYgaW50ZXJmYWNlOwkvKiBGVDIyMzJDLCBGVDIyMzJIIG9yIEZUNDIzMkggcG9ydCBpbnRlcmZhY2UKIAkJCQkgICAoMCBmb3IgRlQyMzIvMjQ1KSAqLwogCkBAIC03MzcsMTAgKzczMSw2IEBACiAvKiBDb25zdGFudHMgZm9yIHJlYWQgdXJiIGFuZCB3cml0ZSB1cmIgKi8KICNkZWZpbmUgQlVGU1ogNTEyCiAKLS8qIHJ4X2ZsYWdzICovCi0jZGVmaW5lIFRIUk9UVExFRAkJMHgwMQotI2RlZmluZSBBQ1RVQUxMWV9USFJPVFRMRUQJMHgwMgotCiAvKiBVc2VkIGZvciBUSU9DTUlXQUlUICovCiAjZGVmaW5lIEZURElfU1RBVFVTX0IwX01BU0sJKEZURElfUlMwX0NUUyB8IEZURElfUlMwX0RTUiB8IEZURElfUlMwX1JJIHwgRlRESV9SUzBfUkxTRCkKICNkZWZpbmUgRlRESV9TVEFUVVNfQjFfTUFTSwkoRlRESV9SU19CSSkKQEAgLTc2Myw3ICs3NTMsNyBAQAogc3RhdGljIGludCAgZnRkaV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgZnRkaV9wcm9jZXNzX3JlYWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBmdGRpX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZCk7CiBzdGF0aWMgaW50ICBmdGRpX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKQEAgLTEyMzQsNyArMTIyNCw2IEBACiAJCQkJCShuZXdfc2VyaWFsLmZsYWdzICYgQVNZTkNfRkxBR1MpKTsKIAlwcml2LT5jdXN0b21fZGl2aXNvciA9IG5ld19zZXJpYWwuY3VzdG9tX2Rpdmlzb3I7CiAKLQl0dHktPmxvd19sYXRlbmN5ID0gKHByaXYtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6IDA7CiAJd3JpdGVfbGF0ZW5jeV90aW1lcihwb3J0KTsKIAogY2hlY2tfYW5kX2V4aXQ6CkBAIC0xNTI3LDcgKzE1MTYsNiBAQAogCX0KIAogCWtyZWZfaW5pdCgmcHJpdi0+a3JlZik7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJ4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKQEAgLTE1NDksNyArMTUzNyw2IEBACiAJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gQlVGU1o7CiAJfQogCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnJ4X3dvcmssIGZ0ZGlfcHJvY2Vzc19yZWFkKTsKIAlwcml2LT5wb3J0ID0gcG9ydDsKIAogCS8qIEZyZWUgcG9ydCdzIGV4aXN0aW5nIHdyaXRlIHVyYiBhbmQgdHJhbnNmZXIgYnVmZmVyLiAqLwpAQCAtMTY4Niw2ICsxNjczLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZnRkaV9zdWJtaXRfcmVhZF91cmIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworCXN0cnVjdCB1cmIgKnVyYiA9IHBvcnQtPnJlYWRfdXJiOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdDsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJICAgZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgbWVtX2ZsYWdzKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIGludCBmdGRpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsgLyogZnRkaV9vcGVuICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwpAQCAtMTcwMCwxMiArMTcwNyw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKTsKIAlwcml2LT50eF9ieXRlcyA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfYnl0ZXMgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQotCWlmICh0dHkpCi0JCXR0eS0+bG93X2xhdGVuY3kgPSAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkgPyAxIDogMDsKIAogCXdyaXRlX2xhdGVuY3lfdGltZXIocG9ydCk7CiAKQEAgLTE3MjUsMjMgKzE3MjYsMTQgQEAKIAkJZnRkaV9zZXRfdGVybWlvcyh0dHksIHBvcnQsIHR0eS0+dGVybWlvcyk7CiAKIAkvKiBOb3QgdGhyb3R0bGVkICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJcG9ydC0+dGhyb3R0bGVkID0gMDsKKwlwb3J0LT50aHJvdHRsZV9yZXEgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JcHJpdi0+cnhfcHJvY2Vzc2VkID0gMDsKLQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAotCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JZWxzZQorCXJlc3VsdCA9IGZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOworCWlmICghcmVzdWx0KQogCQlrcmVmX2dldCgmcHJpdi0+a3JlZik7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTc4NywxMCArMTc3OSw2IEBACiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCi0KLQkvKiBjYW5jZWwgYW55IHNjaGVkdWxlZCByZWFkaW5nICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5yeF93b3JrKTsKLQogCS8qIHNodXRkb3duIG91ciBidWxrIHJlYWQgKi8KIAl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwogCWtyZWZfcHV0KCZwcml2LT5rcmVmLCBmdGRpX3Npb19wcml2X3JlbGVhc2UpOwpAQCAtMjAxMywyNzEgKzIwMDEsMTIxIEBACiAJcmV0dXJuIGJ1ZmZlcmVkOwogfQogCitzdGF0aWMgaW50IGZ0ZGlfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiwKKwkJY2hhciAqcGFja2V0LCBpbnQgbGVuKQoreworCWludCBpOworCWNoYXIgc3RhdHVzOworCWNoYXIgZmxhZzsKKwljaGFyICpjaDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAobGVuIDwgMikgeworCQlkYmcoIm1hbGZvcm1lZCBwYWNrZXQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ29tcGFyZSBuZXcgbGluZSBzdGF0dXMgdG8gdGhlIG9sZCBvbmUsIHNpZ25hbCBpZiBkaWZmZXJlbnQvCisJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCisJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLworCXN0YXR1cyA9IHBhY2tldFswXSAmIEZURElfU1RBVFVTX0IwX01BU0s7CisJaWYgKHN0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgeworCQlwcml2LT5kaWZmX3N0YXR1cyB8PSBzdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CisJCXByaXYtPnByZXZfc3RhdHVzID0gc3RhdHVzOworCX0KKworCS8qCisJICogQWx0aG91Z2ggdGhlIGRldmljZSB1c2VzIGEgYml0bWFzayBhbmQgaGVuY2UgY2FuIGhhdmUgbXVsdGlwbGUKKwkgKiBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZSBwcmlvcml0eSB0aGUgZXJyb3IgaXMKKwkgKiByZXR1cm5lZCB0byB0aGUgdHR5IGxheWVyLgorCSAqLworCWZsYWcgPSBUVFlfTk9STUFMOworCWlmIChwYWNrZXRbMV0gJiBGVERJX1JTX09FKSB7CisJCWZsYWcgPSBUVFlfT1ZFUlJVTjsKKwkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19CSSkgeworCQlmbGFnID0gVFRZX0JSRUFLOworCQlkYmcoIkJSRUFLIHJlY2VpdmVkIik7CisJCXVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHBvcnQpOworCX0KKwlpZiAocGFja2V0WzFdICYgRlRESV9SU19QRSkgeworCQlmbGFnID0gVFRZX1BBUklUWTsKKwkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKKwl9CisJaWYgKHBhY2tldFsxXSAmIEZURElfUlNfRkUpIHsKKwkJZmxhZyA9IFRUWV9GUkFNRTsKKwkJZGJnKCJGUkFNSU5HIGVycm9yIik7CisJfQorCisJbGVuIC09IDI7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOwkvKiBzdGF0dXMgb25seSAqLworCWNoID0gcGFja2V0ICsgMjsKKworCWlmICghKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpICYmIGZsYWcgPT0gVFRZX05PUk1BTCkKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGNoLCBsZW4pOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyssIGNoKyspIHsKKwkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsICpjaCkpCisJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAqY2gsIGZsYWcpOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfcHJvY2Vzc19yZWFkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWNoYXIgKmRhdGEgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWludCBpOworCWludCBsZW47CisJaW50IGNvdW50ID0gMDsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBpICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgeworCQlsZW4gPSBtaW5fdChpbnQsIHVyYi0+YWN0dWFsX2xlbmd0aCAtIGksIHByaXYtPm1heF9wYWNrZXRfc2l6ZSk7CisJCWNvdW50ICs9IGZ0ZGlfcHJvY2Vzc19wYWNrZXQodHR5LCBwb3J0LCBwcml2LCAmZGF0YVtpXSwgbGVuKTsKKwl9CisKKwlpZiAoY291bnQpCisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisKIHN0YXRpYyB2b2lkIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5jb250ZXh0OwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKLQl1bnNpZ25lZCBsb25nIGNvdW50cmVhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQotCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzID4gMCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoICVkICIKLQkJCSJhY3R1YWxfbGVuZ3RoICVkIG51bWJlciBvZiBwYWNrZXRzICVkXG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIHRyYW5zZmVyX2ZsYWdzICV4XG4iLCBfX2Z1bmNfXywKLQkJCXVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCX0KLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA8PSAwKQotCQlyZXR1cm47Ci0KLQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gYmFkIHR0eSBwb2ludGVyIC0gZXhpdGluZyIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JaWYgKCFwcml2KSB7Ci0JCWRiZygiJXMgLSBiYWQgcG9ydCBwcml2YXRlIGRhdGEgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh1cmIgIT0gcG9ydC0+cmVhZF91cmIpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gTm90IG15IHVyYiFcbiIsIF9fZnVuY19fKTsKLQotCWlmIChzdGF0dXMpIHsKLQkJLyogVGhpcyB3aWxsIGhhcHBlbiBhdCBjbG9zZSBldmVyeSB0aW1lIHNvIGl0IGlzIGEgZGJnIG5vdCBhbgotCQkgICBlcnIgKi8KLQkJZGJnKCIodGhpcyBpcyBvayBvbiBjbG9zZSkgbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIHN0YXR1cyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvdW50IGRhdGEgYnl0ZXMsIGJ1dCBub3Qgc3RhdHVzIGJ5dGVzICovCi0JY291bnRyZWFkID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWNvdW50cmVhZCAtPSAyICogRElWX1JPVU5EX1VQKGNvdW50cmVhZCwgcHJpdi0+bWF4X3BhY2tldF9zaXplKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnJ4X2J5dGVzICs9IGNvdW50cmVhZDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0KLQlmdGRpX3Byb2Nlc3NfcmVhZCgmcHJpdi0+cnhfd29yay53b3JrKTsKLW91dDoKLQl0dHlfa3JlZl9wdXQodHR5KTsKLX0gLyogZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2sgKi8KLQotCi1zdGF0aWMgdm9pZCBmdGRpX3Byb2Nlc3NfcmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17IC8qIGZ0ZGlfcHJvY2Vzc19yZWFkICovCi0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnRkaV9wcml2YXRlLCByeF93b3JrLndvcmspOwotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBwcml2LT5wb3J0OwotCXN0cnVjdCB1cmIgKnVyYjsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwotCWNoYXIgZXJyb3JfZmxhZzsKLQl1bnNpZ25lZCBjaGFyICpkYXRhOwotCi0JaW50IGk7Ci0JaW50IHJlc3VsdDsKLQlpbnQgbmVlZF9mbGlwOwotCWludCBwYWNrZXRfb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPD0gMCkKLQkJcmV0dXJuOwotCi0JdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7Ci0JaWYgKCF0dHkpIHsKLQkJZGJnKCIlcyAtIGJhZCB0dHkgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7CisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKLQlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWlmICghcHJpdikgewotCQlkYmcoIiVzIC0gYmFkIHBvcnQgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgLSBleGl0aW5nIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlmdGRpX3Byb2Nlc3NfcmVhZChwb3J0KTsKIAotCXVyYiA9IHBvcnQtPnJlYWRfdXJiOwotCWlmICghdXJiKSB7Ci0JCWRiZygiJXMgLSBiYWQgcmVhZF91cmIgcG9pbnRlciAtIGV4aXRpbmciLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCWlmIChwcml2LT5yeF9wcm9jZXNzZWQpIHsKLQkJZGJnKCIlcyAtIGFscmVhZHkgcHJvY2Vzc2VkOiAlZCBieXRlcywgJWQgcmVtYWluIiwgX19mdW5jX18sCi0JCQkJcHJpdi0+cnhfcHJvY2Vzc2VkLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCAtIHByaXYtPnJ4X3Byb2Nlc3NlZCk7Ci0JfSBlbHNlIHsKLQkJLyogVGhlIGZpcnN0IHR3byBieXRlcyBvZiBldmVyeSByZWFkIHBhY2tldCBhcmUgc3RhdHVzICovCi0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAyKQotCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKLQkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7Ci0JCWVsc2UKLQkJCWRiZygiU3RhdHVzIG9ubHk6ICUwM29vICUwM29vIiwgZGF0YVswXSwgZGF0YVsxXSk7Ci0JfQotCi0KLQkvKiBUTyBETyAtLSBjaGVjayBmb3IgaHVuZyB1cCBsaW5lIGFuZCBoYW5kbGUgYXBwcm9wcmlhdGVseTogKi8KLQkvKiAgIHNlbmQgaGFuZ3VwICAqLwotCS8qIFNlZSBhY20uYyAtIHlvdSBkbyBhIHR0eV9oYW5ndXAgIC0gZWcgdHR5X2hhbmd1cCh0dHkpICovCi0JLyogaWYgQ0QgaXMgZHJvcHBlZCBhbmQgdGhlIGxpbmUgaXMgbm90IENMT0NBTCB0aGVuIHdlIHNob3VsZCBoYW5ndXAgKi8KLQotCW5lZWRfZmxpcCA9IDA7Ci0JZm9yIChwYWNrZXRfb2Zmc2V0ID0gcHJpdi0+cnhfcHJvY2Vzc2VkOwotCQlwYWNrZXRfb2Zmc2V0IDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyBwYWNrZXRfb2Zmc2V0ICs9IHByaXYtPm1heF9wYWNrZXRfc2l6ZSkgewotCQlpbnQgbGVuZ3RoOwotCi0JCS8qIENvbXBhcmUgbmV3IGxpbmUgc3RhdHVzIHRvIHRoZSBvbGQgb25lLCBzaWduYWwgaWYgZGlmZmVyZW50LwotCQkgICBOLkIuIHBhY2tldCBtYXkgYmUgcHJvY2Vzc2VkIG1vcmUgdGhhbiBvbmNlLCBidXQgZGlmZmVyZW5jZXMKLQkJICAgYXJlIG9ubHkgcHJvY2Vzc2VkIG9uY2UuICAqLwotCQljaGFyIG5ld19zdGF0dXMgPSBkYXRhW3BhY2tldF9vZmZzZXQgKyAwXSAmCi0JCQkJCQlGVERJX1NUQVRVU19CMF9NQVNLOwotCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJcHJpdi0+ZGlmZl9zdGF0dXMgfD0KLQkJCQluZXdfc3RhdHVzIF4gcHJpdi0+cHJldl9zdGF0dXM7Ci0JCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCXByaXYtPnByZXZfc3RhdHVzID0gbmV3X3N0YXR1czsKLQkJfQotCi0JCWxlbmd0aCA9IG1pbl90KHUzMiwgcHJpdi0+bWF4X3BhY2tldF9zaXplLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKLQkJaWYgKGxlbmd0aCA8IDApIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gYmFkIHBhY2tldCBsZW5ndGg6ICVkXG4iLAotCQkJCV9fZnVuY19fLCBsZW5ndGgrMik7Ci0JCQlsZW5ndGggPSAwOwotCQl9Ci0KLQkJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKSB7Ci0JCQlkYmcoIiVzIC0gdGhyb3R0bGVkIiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuZ3RoKSA8IGxlbmd0aCkgewotCQkJLyogYnJlYWsgb3V0ICYgd2FpdCBmb3IgdGhyb3R0bGluZy91bnRocm90dGxpbmcgdG8KLQkJCSAgIGhhcHBlbiAqLwotCQkJZGJnKCIlcyAtIHJlY2VpdmUgcm9vbSBsb3ciLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIEhhbmRsZSBlcnJvcnMgYW5kIGJyZWFrICovCi0JCWVycm9yX2ZsYWcgPSBUVFlfTk9STUFMOwotCQkvKiBBbHRob3VnaCB0aGUgZGV2aWNlIHVzZXMgYSBiaXRtYXNrIGFuZCBoZW5jZSBjYW4gaGF2ZQotCQkgICBtdWx0aXBsZSBlcnJvcnMgb24gYSBwYWNrZXQgLSB0aGUgb3JkZXIgaGVyZSBzZXRzIHRoZQotCQkgICBwcmlvcml0eSB0aGUgZXJyb3IgaXMgcmV0dXJuZWQgdG8gdGhlIHR0eSBsYXllciAgKi8KLQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19PRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9PVkVSUlVOOwotCQkJZGJnKCJPVkVSUlJVTiBlcnJvciIpOwotCQl9Ci0JCWlmIChkYXRhW3BhY2tldF9vZmZzZXQrMV0gJiBGVERJX1JTX0JJKSB7Ci0JCQllcnJvcl9mbGFnID0gVFRZX0JSRUFLOwotCQkJZGJnKCJCUkVBSyByZWNlaXZlZCIpOwotCQkJdXNiX3NlcmlhbF9oYW5kbGVfYnJlYWsocG9ydCk7Ci0JCX0KLQkJaWYgKGRhdGFbcGFja2V0X29mZnNldCsxXSAmIEZURElfUlNfUEUpIHsKLQkJCWVycm9yX2ZsYWcgPSBUVFlfUEFSSVRZOwotCQkJZGJnKCJQQVJJVFkgZXJyb3IiKTsKLQkJfQotCQlpZiAoZGF0YVtwYWNrZXRfb2Zmc2V0KzFdICYgRlRESV9SU19GRSkgewotCQkJZXJyb3JfZmxhZyA9IFRUWV9GUkFNRTsKLQkJCWRiZygiRlJBTUlORyBlcnJvciIpOwotCQl9Ci0JCWlmIChsZW5ndGggPiAwKSB7Ci0JCQlmb3IgKGkgPSAyOyBpIDwgbGVuZ3RoKzI7IGkrKykgewotCQkJCS8qIE5vdGUgdGhhdCB0aGUgZXJyb3IgZmxhZyBpcyBkdXBsaWNhdGVkIGZvcgotCQkJCSAgIGV2ZXJ5IGNoYXJhY3RlciByZWNlaXZlZCBzaW5jZSB3ZSBkb24ndCBrbm93Ci0JCQkJICAgd2hpY2ggY2hhcmFjdGVyIGl0IGFwcGxpZWQgdG8gKi8KLQkJCQlpZiAoIXVzYl9zZXJpYWxfaGFuZGxlX3N5c3JxX2NoYXIodHR5LCBwb3J0LAotCQkJCQkJZGF0YVtwYWNrZXRfb2Zmc2V0ICsgaV0pKQotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCi0JCQkJCQlkYXRhW3BhY2tldF9vZmZzZXQgKyBpXSwKLQkJCQkJCWVycm9yX2ZsYWcpOwotCQkJfQotCQkJbmVlZF9mbGlwID0gMTsKLQkJfQotCi0jaWZkZWYgTk9UX0NPUlJFQ1RfQlVUX0tFRVBJTkdfSVRfRk9SX05PVwotCQkvKiBpZiBhIHBhcml0eSBlcnJvciBpcyBkZXRlY3RlZCB5b3UgZ2V0IHN0YXR1cyBwYWNrZXRzIGZvcmV2ZXIKLQkJICAgdW50aWwgYSBjaGFyYWN0ZXIgaXMgc2VudCB3aXRob3V0IGEgcGFyaXR5IGVycm9yLgotCQkgICBUaGlzIGRvZXNuJ3Qgd29yayB3ZWxsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhCi0JCSAgIG5ldmVyIGVuZGluZyBzdHJlYW0gb2YgYmFkIGRhdGEgLSBldmVuIHRob3VnaCBuZXcgZGF0YQotCQkgICBoYXNuJ3QgYmVlbiBzZW50LiBUaGVyZWZvcmUgSSAoYmlsbCkgaGF2ZSB0YWtlbiB0aGlzIG91dC4KLQkJICAgSG93ZXZlciAtIHRoaXMgbWlnaHQgbWFrZSBzZW5zZSBmb3IgZnJhbWluZyBlcnJvcnMgYW5kIHNvIG9uCi0JCSAgIHNvIEkgYW0gbGVhdmluZyB0aGUgY29kZSBpbiBmb3Igbm93LgotCQkqLwotCQllbHNlIHsKLQkJCWlmIChlcnJvcl9mbGFnICE9IFRUWV9OT1JNQUwpIHsKLQkJCQlkYmcoImVycm9yX2ZsYWcgaXMgbm90IG5vcm1hbCIpOwotCQkJCS8qIEluIHRoaXMgY2FzZSBpdCBpcyBqdXN0IHN0YXR1cyAtIGlmIHRoYXQgaXMKLQkJCQkgICBhbiBlcnJvciBzZW5kIGEgYmFkIGNoYXJhY3RlciAqLwotCQkJCWlmICh0dHktPmZsaXAuY291bnQgPj0gVFRZX0ZMSVBCVUZfU0laRSkKLQkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDB4ZmYsIGVycm9yX2ZsYWcpOwotCQkJCW5lZWRfZmxpcCA9IDE7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0gLyogImZvcihwYWNrZXRfb2Zmc2V0PTAuLi4iICovCi0KLQkvKiBMb3cgbGF0ZW5jeSAqLwotCWlmIChuZWVkX2ZsaXApCi0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0KLQlpZiAocGFja2V0X29mZnNldCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkvKiBub3QgY29tcGxldGVseSBwcm9jZXNzZWQgLSByZWNvcmQgcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+cnhfcHJvY2Vzc2VkID0gcGFja2V0X29mZnNldDsKLQkJZGJnKCIlcyAtIGluY29tcGxldGUsICVkIGJ5dGVzIHByb2Nlc3NlZCwgJWQgcmVtYWluIiwKLQkJCQlfX2Z1bmNfXywgcGFja2V0X29mZnNldCwKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGggLSBwYWNrZXRfb2Zmc2V0KTsKLQkJLyogY2hlY2sgaWYgd2Ugd2VyZSB0aHJvdHRsZWQgd2hpbGUgcHJvY2Vzc2luZyAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQlpZiAocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpIHsKLQkJCXByaXYtPnJ4X2ZsYWdzIHw9IEFDVFVBTExZX1RIUk9UVExFRDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKLQkJCWRiZygiJXMgLSBkZWZlcnJpbmcgcmVtYWluZGVyIHVudGlsIHVudGhyb3R0bGVkIiwKLQkJCQkJX19mdW5jX18pOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCQkvKiBpZiB0aGUgcG9ydCBpcyBjbG9zZWQgc3RvcCB0cnlpbmcgdG8gcmVhZCAqLwotCQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApCi0JCQkvKiBkZWxheSBwcm9jZXNzaW5nIG9mIHJlbWFpbmRlciAqLwotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAxKTsKLQkJZWxzZQotCQkJZGJnKCIlcyAtIHBvcnQgaXMgY2xvc2VkIiwgX19mdW5jX18pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiB1cmIgaXMgY29tcGxldGVseSBwcm9jZXNzZWQgKi8KLQlwcml2LT5yeF9wcm9jZXNzZWQgPSAwOwotCi0JLyogaWYgdGhlIHBvcnQgaXMgY2xvc2VkIHN0b3AgdHJ5aW5nIHRvIHJlYWQgKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCA+IDApIHsKLQkJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwotCQl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCi0JCQl1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCWZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKLQotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsCi0JCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JfQotb3V0OgotCXR0eV9rcmVmX3B1dCh0dHkpOwotfSAvKiBmdGRpX3Byb2Nlc3NfcmVhZCAqLwotCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwlwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXE7CisJaWYgKCFwb3J0LT50aHJvdHRsZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgdm9pZCBmdGRpX2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CkBAIC0yNjA5LDMzICsyNDQ3LDMxIEBACiBzdGF0aWMgdm9pZCBmdGRpX3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0Jc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCXBvcnQtPnRocm90dGxlX3JlcSA9IDE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogfQogCi0KLXN0YXRpYyB2b2lkIGZ0ZGlfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQordm9pZCBmdGRpX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJaW50IHdhc190aHJvdHRsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOwotCWFjdHVhbGx5X3Rocm90dGxlZCA9IHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwotCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwl3YXNfdGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVkOworCXBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90dGxlX3JlcSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5yeF93b3JrLCAwKTsKKwkvKiBSZXN1Ym1pdCB1cmIgaWYgdGhyb3R0bGVkIGFuZCBvcGVuLiAqLworCWlmICh3YXNfdGhyb3R0bGVkICYmIHRlc3RfYml0KEFTWU5DQl9JTklUSUFMSVpFRCwgJnBvcnQtPnBvcnQuZmxhZ3MpKQorCQlmdGRpX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZnRkaV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwppbmRleCAyMDQzMmQzLi41YWM5MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKQEAgLTEzOTAsMTQgKzEzOTAsMTMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAJLyogc2V0IGZsYWcsIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBwdXQgaW50byBhIHF1ZXVlCiAJICAgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkd8RkxBR1NfVEhST1RUTEVEOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogfQogCiAKQEAgLTE0MDUsMTMgKzE0MDQsMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKmdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmdhcm1pbl9kYXRhX3AtPmxvY2spOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19USFJPVFRMRUQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAKIAkvKiBpbiBuYXRpdmUgbW9kZSBzZW5kIHF1ZXVlZCBkYXRhIHRvIHR0eSwgaW4KIAkgICBzZXJpYWwgbW9kZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLwpAQCAtMTQxOSw3ICsxNDE3LDcgQEAKIAkJZ2FybWluX2ZsdXNoX3F1ZXVlKGdhcm1pbl9kYXRhX3ApOwogCiAJaWYgKDAgIT0gKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfQlVMS19JTl9BQ1RJVkUpKSB7Ci0JCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwogCQlpZiAoc3RhdHVzKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZGViYTA4Yy4uYmJlMDA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC01NDYsNyArNTQ2LDcgQEAKIAogCWlmICh3YXNfdGhyb3R0bGVkKSB7CiAJCS8qIFJlc3VtZSByZWFkaW5nIGZyb20gZGV2aWNlICovCi0JCXVzYl9zZXJpYWxfZ2VuZXJpY19yZXN1Ym1pdF9yZWFkX3VyYihwb3J0LCBHRlBfS0VSTkVMKTsKKwkJZmx1c2hfYW5kX3Jlc3VibWl0X3JlYWRfdXJiKHBvcnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKaW5kZXggMjRmY2M2NC4uZDYyMzFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCkBAIC05NjYsNiArOTY2LDE1IEBACiBzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiBTb21lIG9mIHRoZSBkZXZpY2VzIGluIGlwYXFfaWRfdGFibGVbXSBhcmUgY29tcG9zaXRlLCBhbmQgd2UKKwkgKiBzaG91bGRuJ3QgYmluZCB0byBhbGwgdGhlIGludGVyZmFjZXMuICBUaGlzIHRlc3Qgd2lsbCBydWxlIG91dAorCSAqIHNvbWUgb2J2aW91c2x5IGludmFsaWQgcG9zc2liaWxpdGllcy4KKwkgKi8KKwlpZiAoc2VyaWFsLT5udW1fYnVsa19pbiA8IHNlcmlhbC0+bnVtX3BvcnRzIHx8CisJCQlzZXJpYWwtPm51bV9idWxrX291dCA8IHNlcmlhbC0+bnVtX3BvcnRzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewogCQkvKgogCQkgKiBGSVhNRTogSFAgaVBhcSByeDM3MTUsIHBvc3NpYmx5IG90aGVycywgaGF2ZSAxIGNvbmZpZyB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IDI1N2MxNmMuLjEyOTZhMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkvKiBqdXN0IHJlc3RhcnQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IFVSQiAqLwogCWRiZygia2V5c3Bhbl9wZGFfcnhfdW50aHJvdHRsZSBwb3J0ICVkIiwgcG9ydC0+bnVtYmVyKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlpZiAodXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQykpCisJaWYgKHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpKQogCQlkYmcoIiB1c2Jfc3VibWl0X3VyYihyZWFkIHVyYikgZmFpbGVkIik7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKaW5kZXggZjczNzMzNy4uM2E3ODczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCkBAIC05NTEsNyArOTUxLDcgQEAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCiAJcG9ydC0+cmVhZF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBhZDQ5OThiLi5jZDAwOWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtNzc3LDIwICs3NzcsMTkgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgbWN0X3UyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+cnhfZmxhZ3MgfD0gVEhST1RUTEVEOwogCWlmIChDX0NSVFNDVFModHR5KSkgewogCQlwcml2LT5jb250cm9sX3N0YXRlICY9IH5USU9DTV9SVFM7CiAJCWNvbnRyb2xfc3RhdGUgPSBwcml2LT5jb250cm9sX3N0YXRlOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJCSh2b2lkKSBtY3RfdTIzMl9zZXRfbW9kZW1fY3RybChwb3J0LT5zZXJpYWwsIGNvbnRyb2xfc3RhdGUpOwogCX0gZWxzZSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAl9CiB9CiAKQEAgLTc5OSwyMCArNzk4LDE5IEBACiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG1jdF91MjMyX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZTsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCWlmICgocHJpdi0+cnhfZmxhZ3MgJiBUSFJPVFRMRUQpICYmIENfQ1JUU0NUUyh0dHkpKSB7CiAJCXByaXYtPnJ4X2ZsYWdzICY9IH5USFJPVFRMRUQ7CiAJCXByaXYtPmNvbnRyb2xfc3RhdGUgfD0gVElPQ01fUlRTOwogCQljb250cm9sX3N0YXRlID0gcHJpdi0+Y29udHJvbF9zdGF0ZTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQkodm9pZCkgbWN0X3UyMzJfc2V0X21vZGVtX2N0cmwocG9ydC0+c2VyaWFsLCBjb250cm9sX3N0YXRlKTsKIAl9IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCAxMDg1YTU3Li44MGY1OWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTMxNCwyMSArMzE0LDI0IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IG9wdGljb25fcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCwgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPnRocm90dGxlZCA9IGZhbHNlOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcHJpdi0+YnVsa19yZWFkX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+YnVsa19yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmJ1bGtfcmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgb3B0aWNvbl90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBmNjZlMzk4Li4zMTlhYWY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMTY1LDYgKzE2NSw3IEBACiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNECQkJMHgxNDNECiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNFCQkJMHgxNDNFCiAjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNDNGCQkJMHgxNDNGCisjZGVmaW5lIEhVQVdFSV9QUk9EVUNUX0UxNEFDCQkJMHgxNEFDCiAKICNkZWZpbmUgUVVBTlRBX1ZFTkRPUl9JRAkJCTB4MDQwOAogI2RlZmluZSBRVUFOVEFfUFJPRFVDVF9RMTAxCQkJMHhFQTAyCkBAIC0zMDcsNiArMzA4LDcgQEAKIAogI2RlZmluZSBETElOS19WRU5ET1JfSUQJCQkJMHgxMTg2CiAjZGVmaW5lIERMSU5LX1BST0RVQ1RfRFdNXzY1MgkJCTB4M2UwNAorI2RlZmluZSBETElOS19QUk9EVUNUX0RXTV82NTJfVTUJCTB4Y2UxNgogCiAjZGVmaW5lIFFJU0RBX1ZFTkRPUl9JRAkJCQkweDFkYTUKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjFfNDUxMgkJCTB4NDUxMgpAQCAtMzE0LDEwICszMTYsMTQgQEAKICNkZWZpbmUgUUlTREFfUFJPRFVDVF9IMjBfNDUxNQkJCTB4NDUxNQogI2RlZmluZSBRSVNEQV9QUk9EVUNUX0gyMF80NTE5CQkJMHg0NTE5CiAKKy8qIFRMQVlURUNIIFBST0RVQ1RTICovCisjZGVmaW5lIFRMQVlURUNIX1ZFTkRPUl9JRAkJCTB4MjBCOQorI2RlZmluZSBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMAkJCTB4MTY4MgogCiAvKiBUT1NISUJBIFBST0RVQ1RTICovCiAjZGVmaW5lIFRPU0hJQkFfVkVORE9SX0lECQkJMHgwOTMwCiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9IU0RQQV9NSU5JQ0FSRAkJMHgxMzAyCisjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQogI2RlZmluZSBBTElOS19QUk9EVUNUXzNHVQkJCTB4OTIwMApAQCAtMzI2LDYgKzMzMiw5IEBACiAjZGVmaW5lIEFMQ0FURUxfVkVORE9SX0lECQkJMHgxYmJiCiAjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwUwkJCTB4MDAwMAogCisvKiBBaXJwbHVzIHByb2R1Y3RzICovCisjZGVmaW5lIEFJUlBMVVNfVkVORE9SX0lECQkJMHgxMDExCisjZGVmaW5lIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTAJCQkweDMxOTgKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09MVCkgfSwKQEAgLTQyNCw2ICs0MzMsNyBAQAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oSFVBV0VJX1ZFTkRPUl9JRCwgSFVBV0VJX1BST0RVQ1RfRTE0M0QsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTQzRSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKEhVQVdFSV9WRU5ET1JfSUQsIEhVQVdFSV9QUk9EVUNUX0UxNDNGLCAweGZmLCAweGZmLCAweGZmKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FMTRBQykgfSwKIAl7IFVTQl9ERVZJQ0UoQU1PSV9WRU5ET1JfSUQsIEFNT0lfUFJPRFVDVF85NTA4KSB9LAogCXsgVVNCX0RFVklDRShOT1ZBVEVMV0lSRUxFU1NfVkVORE9SX0lELCBOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9WNjQwKSB9LCAvKiBOb3ZhdGVsIE1lcmxpbiBWNjQwL1hWNjIwICovCiAJeyBVU0JfREVWSUNFKE5PVkFURUxXSVJFTEVTU19WRU5ET1JfSUQsIE5PVkFURUxXSVJFTEVTU19QUk9EVUNUX1Y2MjApIH0sIC8qIE5vdmF0ZWwgTWVybGluIFY2MjAvUzYyMCAqLwpAQCAtNTc3LDE0ICs1ODcsMTggQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQkVOUV9WRU5ET1JfSUQsIEJFTlFfUFJPRFVDVF9IMTApIH0sCiAJeyBVU0JfREVWSUNFKERMSU5LX1ZFTkRPUl9JRCwgRExJTktfUFJPRFVDVF9EV01fNjUyKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1Ml9VNSkgfSwgLyogWWVzLCBBTElOS19WRU5ET1JfSUQgKi8KIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMV80NTEyKSB9LAogCXsgVVNCX0RFVklDRShRSVNEQV9WRU5ET1JfSUQsIFFJU0RBX1BST0RVQ1RfSDIxXzQ1MjMpIH0sCiAJeyBVU0JfREVWSUNFKFFJU0RBX1ZFTkRPUl9JRCwgUUlTREFfUFJPRFVDVF9IMjBfNDUxNSkgfSwKIAl7IFVTQl9ERVZJQ0UoUUlTREFfVkVORE9SX0lELCBRSVNEQV9QUk9EVUNUX0gyMF80NTE5KSB9LAorCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oQUxJTktfVkVORE9SX0lELCBBTElOS19QUk9EVUNUXzNHVSwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxDQVRFTF9WRU5ET1JfSUQsIEFMQ0FURUxfUFJPRFVDVF9YMDYwUykgfSwKKwl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCisJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG9wdGlvbl9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggMGY0YTcwY2UuLmM2NDRlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAKIAlkYmcoIiVzKCk6IHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiIsIF9fZnVuY19fKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQiCiAJCQkJIiB3aXRoIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKQEAgLTMzNSw3ICszMzUsNyBAQAogCiAJCWRiZygiJXMoKTogc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19mdW5jX18pOwogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiB1c2Jfc3VibWl0X3VyYigpIGZhaWxlZCIKIAkJCQkiIHdpdGggZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKIAlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfTk9JTyk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IHVzYl9zdWJtaXRfdXJiKCkgZmFpbGVkIgogCQkJICAgICAgICIgd2l0aCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggMTEyOGUwMS4uOWVjMWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtMTA0NiwxMyArMTA0NiwxNSBAQAogCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAlpZiAobGluZV9zdGF0dXMgJiBVQVJUX09WRVJSVU5fRVJST1IpCiAJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwotCWlmIChwb3J0LT5jb25zb2xlICYmIHBvcnQtPnN5c3JxKSB7CisKKwlpZiAodHR5X2ZsYWcgPT0gVFRZX05PUk1BTCAmJiAhKHBvcnQtPmNvbnNvbGUgJiYgcG9ydC0+c3lzcnEpKQorCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwllbHNlIHsKIAkJaW50IGk7CiAJCWZvciAoaSA9IDA7IGkgPCB1cmItPmFjdHVhbF9sZW5ndGg7ICsraSkKIAkJCWlmICghdXNiX3NlcmlhbF9oYW5kbGVfc3lzcnFfY2hhcih0dHksIHBvcnQsIGRhdGFbaV0pKQogCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YVtpXSwgdHR5X2ZsYWcpOwotCX0gZWxzZQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwl9CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDhjMDc1YjIuLjUwMTkzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgV2hvbSBiYXNlZCBoaXMgb24gdGhlIEtleXNwYW4gZHJpdmVyIGJ5IEh1Z2ggQmxlbWluZ3MgPGh1Z2hAYmxlbWluZ3Mub3JnPgogKi8KIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidi4xLjMuNyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYuMS4zLjgiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIktldmluIExsb3lkLCBFbGluYSBQYXNoZXZhLCBNYXR0aGV3IFNhZmFyLCBSb3J5IEZpbGVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIERyaXZlciBmb3IgU2llcnJhIFdpcmVsZXNzIFVTQiBtb2RlbXMiCiAKQEAgLTI5Niw3ICsyOTYsNiBAQAogCWludCBkc3Jfc3RhdGU7CiAJaW50IGRjZF9zdGF0ZTsKIAlpbnQgcmlfc3RhdGU7Ci0KIAl1bnNpZ25lZCBpbnQgb3BlbmVkOjE7CiB9OwogCkBAIC0zMDYsNiArMzA1LDggQEAKIAlzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJX191MTYgaW50ZXJmYWNlID0gMDsKIAlpbnQgdmFsID0gMDsKKwlpbnQgZG9fc2VuZCA9IDA7CisJaW50IHJldHZhbDsKIAogCWRldl9kYmcoJnBvcnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTMyNCwxMCArMzI1LDcgQEAKIAkJICovCiAJCWlmIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7CiAJCQkvKiBzZW5kIGNvbnRyb2wgbWVzc2FnZSAqLwotCQkJcmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCQl1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJCU5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwkJCWRvX3NlbmQgPSAxOwogCQl9CiAJfQogCkBAIC0zMzksMTIgKzMzNywxOCBAQAogCQkJaW50ZXJmYWNlID0gMTsKIAkJZWxzZSBpZiAocG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzID09IDUpCiAJCQlpbnRlcmZhY2UgPSAyOwotCQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLAotCQkJTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCisJCWRvX3NlbmQgPSAxOwogCX0KLQlyZXR1cm4gMDsKKwlpZiAoIWRvX3NlbmQpCisJCXJldHVybiAwOworCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCTB4MjIsIDB4MjEsIHZhbCwgaW50ZXJmYWNlLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHNlcmlhbC0+aW50ZXJmYWNlKTsKKworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB2b2lkIHNpZXJyYV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LApAQCAtNzczLDggKzc3NywxMSBAQAogCiAJaWYgKHNlcmlhbC0+ZGV2KSB7CiAJCW11dGV4X2xvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpCisJCWlmICghc2VyaWFsLT5kaXNjb25uZWN0ZWQpIHsKKwkJCXNlcmlhbC0+aW50ZXJmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwkJCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCQlzaWVycmFfc2VuZF9zZXR1cChwb3J0KTsKKwkJfQogCQltdXRleF91bmxvY2soJnNlcmlhbC0+ZGlzY19tdXRleCk7CiAJCXNwaW5fbG9ja19pcnEoJmludGZkYXRhLT5zdXNwX2xvY2spOwogCQlwb3J0ZGF0YS0+b3BlbmVkID0gMDsKQEAgLTc4OCw4ICs3OTUsNiBAQAogCQkJc2llcnJhX3JlbGVhc2VfdXJiKHBvcnRkYXRhLT5pbl91cmJzW2ldKTsKIAkJCXBvcnRkYXRhLT5pbl91cmJzW2ldID0gTlVMTDsKIAkJfQotCQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Uoc2VyaWFsLT5pbnRlcmZhY2UpOwotCQlzZXJpYWwtPmludGVyZmFjZS0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAJfQogfQogCkBAIC04MjcsNiArODMyLDggQEAKIAlpZiAoZXJyKSB7CiAJCS8qIGdldCByaWQgb2YgZXZlcnl0aGluZyBhcyBpbiBjbG9zZSAqLwogCQlzaWVycmFfY2xvc2UocG9ydCk7CisJCS8qIHJlc3RvcmUgYmFsYW5jZSBmb3IgYXV0b3BtICovCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzZXJpYWwtPmludGVyZmFjZSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXNpZXJyYV9zZW5kX3NldHVwKHBvcnQpOwpAQCAtOTE1LDcgKzkyMiw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBzdG9wX3JlYWRfd3JpdGVfdXJicyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewotCWludCBpLCBqOworCWludCBpOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOwogCkBAIC05MjMsOCArOTMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQkJZm9yIChqID0gMDsgaiA8IE5fSU5fVVJCOyBqKyspCi0JCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPmluX3VyYnNbal0pOworCQlzaWVycmFfc3RvcF9yeF91cmJzKHBvcnQpOwogCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZwb3J0ZGF0YS0+YWN0aXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKaW5kZXggY2I3ZTk1Zi4uYjI4MmMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMTY1LDM0ICsxNjUsMzYgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzeW1ib2xfdW50aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXN1bHQ7CisJYm9vbCB3YXNfdGhyb3R0bGVkOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJd2FzX3Rocm90dGxlZCA9IHByaXYtPmFjdHVhbGx5X3Rocm90dGxlZDsKIAlwcml2LT5hY3R1YWxseV90aHJvdHRsZWQgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCXByaXYtPmludF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPmludF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwlpZiAod2FzX3Rocm90dGxlZCkgeworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCiAJCQkJCQkJX19mdW5jX18sIHJlc3VsdCk7CisJfQogfQogCiBzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBmZjc1YTM1Li5iZDNmYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTE1Niw3ICsxNTYsOCBAQAogCWlmIChzZXJpYWwtPm1pbm9yICE9IFNFUklBTF9UVFlfTk9fTUlOT1IpCiAJCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKIAotCXNlcmlhbC0+dHlwZS0+cmVsZWFzZShzZXJpYWwpOworCWlmIChzZXJpYWwtPmF0dGFjaGVkKQorCQlzZXJpYWwtPnR5cGUtPnJlbGVhc2Uoc2VyaWFsKTsKIAogCS8qIE5vdyB0aGF0IG5vdGhpbmcgaXMgdXNpbmcgdGhlIHBvcnRzLCB0aGV5IGNhbiBiZSBmcmVlZCAqLwogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0X3BvaW50ZXJzOyArK2kpIHsKQEAgLTE5Miw3ICsxOTMsNyBAQAogICogVGhpcyBpcyB0aGUgZmlyc3QgcGxhY2UgYSBuZXcgdHR5IGdldHMgdXNlZC4gIEhlbmNlIHRoaXMgaXMgd2hlcmUgd2UKICAqIGFjcXVpcmUgcmVmZXJlbmNlcyB0byB0aGUgdXNiX3NlcmlhbCBzdHJ1Y3R1cmUgYW5kIHRoZSBkcml2ZXIgbW9kdWxlLAogICogd2hlcmUgd2Ugc3RvcmUgYSBwb2ludGVyIHRvIHRoZSBwb3J0LCBhbmQgd2hlcmUgd2UgZG8gYW4gYXV0b3Jlc3VtZS4KLSAqIEFsbCB0aGVzZSBhY3Rpb25zIGFyZSByZXZlcnNlZCBpbiBzZXJpYWxfcmVsZWFzZSgpLgorICogQWxsIHRoZXNlIGFjdGlvbnMgYXJlIHJldmVyc2VkIGluIHNlcmlhbF9jbGVhbnVwKCkuCiAgKi8KIHN0YXRpYyBpbnQgc2VyaWFsX2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKQEAgLTMzOSwxNSArMzQwLDE2IEBACiB9CiAKIC8qKgotICogc2VyaWFsX3JlbGVhc2UgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAorICogc2VyaWFsX2NsZWFudXAgLSBmcmVlIHJlc291cmNlcyBwb3N0IGNsb3NlL2hhbmd1cAogICogQHBvcnQ6IHBvcnQgdG8gZnJlZSB1cAogICoKICAqIERvIHRoZSByZXNvdXJjZSBmcmVlaW5nIGFuZCByZWZjb3VudCBkcm9wcGluZyBmb3IgdGhlIHBvcnQuCiAgKiBBdm9pZCBmcmVlaW5nIHRoZSBjb25zb2xlLgogICoKLSAqIENhbGxlZCB3aGVuIHRoZSBsYXN0IHR0eSBrcmVmIGlzIGRyb3BwZWQuCisgKiBDYWxsZWQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgdGhlIGxhc3QgdHR5IGtyZWYgaXMgZHJvcHBlZCwKKyAqIGFuZCB0aGUgdHR5IGxheWVyIGhhcyBhbHJlYWR5IGRvbmUgdGhlIHR0eV9zaHV0ZG93bih0dHkpOwogICovCi1zdGF0aWMgdm9pZCBzZXJpYWxfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgc2VyaWFsX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwpAQCAtMzYxLDkgKzM2Myw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JLyogU3RhbmRhcmQgc2h1dGRvd24gcHJvY2Vzc2luZyAqLwotCXR0eV9zaHV0ZG93bih0dHkpOwotCiAJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CiAKIAlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CkBAIC0xMDYxLDEyICsxMDYwLDE1IEBACiAJCW1vZHVsZV9wdXQodHlwZS0+ZHJpdmVyLm93bmVyKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHByb2JlX2Vycm9yOworCQlzZXJpYWwtPmF0dGFjaGVkID0gMTsKIAkJaWYgKHJldHZhbCA+IDApIHsKIAkJCS8qIHF1aWV0bHkgYWNjZXB0IHRoaXMgZGV2aWNlLCBidXQgZG9uJ3QgYmluZCB0byBhCiAJCQkgICBzZXJpYWwgcG9ydCBhcyBpdCdzIGFib3V0IHRvIGRpc2FwcGVhciAqLwogCQkJc2VyaWFsLT5udW1fcG9ydHMgPSAwOwogCQkJZ290byBleGl0OwogCQl9CisJfSBlbHNlIHsKKwkJc2VyaWFsLT5hdHRhY2hlZCA9IDE7CiAJfQogCiAJaWYgKGdldF9mcmVlX3NlcmlhbChzZXJpYWwsIG51bV9wb3J0cywgJm1pbm9yKSA9PSBOVUxMKSB7CkBAIC0xMTY2LDggKzExNjgsMTAgQEAKIAogCWlmIChzZXJpYWwtPnR5cGUtPnN1c3BlbmQpIHsKIAkJciA9IHNlcmlhbC0+dHlwZS0+c3VzcGVuZChzZXJpYWwsIG1lc3NhZ2UpOwotCQlpZiAociA8IDApCisJCWlmIChyIDwgMCkgeworCQkJc2VyaWFsLT5zdXNwZW5kaW5nID0gMDsKIAkJCWdvdG8gZXJyX291dDsKKwkJfQogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CkBAIC0xMjEwLDcgKzEyMTQsNyBAQAogCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAogCS50aW9jbWdldCA9CQlzZXJpYWxfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0JCXNlcmlhbF90aW9jbXNldCwKLQkuc2h1dGRvd24gPSAJCXNlcmlhbF9yZWxlYXNlLAorCS5jbGVhbnVwID0gCQlzZXJpYWxfY2xlYW51cCwKIAkuaW5zdGFsbCA9IAkJc2VyaWFsX2luc3RhbGwsCiAJLnByb2NfZm9wcyA9CQkmc2VyaWFsX3Byb2NfZm9wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDFhYTVkMjAuLmFkMWY5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC01MTMsNyArNTEzLDggQEAKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JCXByaXYtPmJ5dGVzX2luICs9IGF2YWlsYWJsZV9yb29tOworCQlpZiAodHR5KQorCQkJcHJpdi0+Ynl0ZXNfaW4gKz0gYXZhaWxhYmxlX3Jvb207CiAKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwpAQCAtNTgyLDEyICs1ODMsMTEgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCXByaXYtPnRocm90dGxlZCA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CiAKIApAQCAtNTk1LDIxICs1OTUsMjMgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgdmlzb3JfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXN1bHQ7CisJaW50IHJlc3VsdCwgd2FzX3Rocm90dGxlZDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlwcml2LT50aHJvdHRsZWQgPSAwOworCXdhc190aHJvdHRsZWQgPSBwcml2LT5hY3R1YWxseV90aHJvdHRsZWQ7CiAJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAotCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCWlmICh3YXNfdGhyb3R0bGVkKSB7CisJCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCQlpZiAocmVzdWx0KQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcGFsbV9vc18zX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggNjI0MjRlZS4uMTA5M2QyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtOTQ5LDEzICs5NDksMTIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3Qgd2hpdGVoZWF0X3ByaXZhdGUgKmluZm8gPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWluZm8tPmZsYWdzIHw9IFRIUk9UVExFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCXJldHVybjsKIH0KQEAgLTk2NiwxNCArOTY1LDEzIEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHdoaXRlaGVhdF9wcml2YXRlICppbmZvID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBhY3R1YWxseV90aHJvdHRsZWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnEoJmluZm8tPmxvY2spOwogCWFjdHVhbGx5X3Rocm90dGxlZCA9IGluZm8tPmZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEOwogCWluZm8tPmZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbmZvLT5sb2NrKTsKIAogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpCiAJCXJ4X2RhdGFfc29mdGludCgmaW5mby0+cnhfd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwppbmRleCBlMjBkYzUyLi41ODlmNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkvKiBkZXZpY2Ugc3VwcG9ydHMgYW5kIG5lZWRzIGJpZ2dlciBzZW5zZSBidWZmZXIgKi8KIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TQU5FX1NFTlNFKQogCQkJc2Vuc2Vfc2l6ZSA9IH4wOwotCitSZXRyeV9TZW5zZToKIAkJVVNfREVCVUdQKCJJc3N1aW5nIGF1dG8tUkVRVUVTVF9TRU5TRVxuIik7CiAKIAkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzZW5zZV9zaXplKTsKQEAgLTcyMCw2ICs3MjAsMjEgQEAKIAkJCXNyYi0+cmVzdWx0ID0gRElEX0FCT1JUIDw8IDE2OwogCQkJZ290byBIYW5kbGVfRXJyb3JzOwogCQl9CisKKwkJLyogU29tZSBkZXZpY2VzIGNsYWltIHRvIHN1cHBvcnQgbGFyZ2VyIHNlbnNlIGJ1dCBmYWlsIHdoZW4KKwkJICogdHJ5aW5nIHRvIHJlcXVlc3QgaXQuIFdoZW4gYSB0cmFuc3BvcnQgZmFpbHVyZSBoYXBwZW5zCisJCSAqIHVzaW5nIFVTX0ZTX1NBTkVfU0VOU0UsIHdlIGFsd2F5cyByZXRyeSB3aXRoIGEgc3RhbmRhcmQKKwkJICogKHNtYWxsKSBzZW5zZSByZXF1ZXN0LiBUaGlzIGZpeGVzIHNvbWUgVVNCIEdTTSBtb2RlbXMKKwkJICovCisJCWlmICh0ZW1wX3Jlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEICYmCisJCSAgICAodXMtPmZmbGFncyAmIFVTX0ZMX1NBTkVfU0VOU0UpICYmCisJCSAgICBzZW5zZV9zaXplICE9IFVTX1NFTlNFX1NJWkUpIHsKKwkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlLCByZXRyeSBzbWFsbCBzZW5zZVxuIik7CisJCQlzZW5zZV9zaXplID0gVVNfU0VOU0VfU0laRTsKKwkJCWdvdG8gUmV0cnlfU2Vuc2U7CisJCX0KKworCQkvKiBPdGhlciBmYWlsdXJlcyAqLwogCQlpZiAodGVtcF9yZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpIHsKIAkJCVVTX0RFQlVHUCgiLS0gYXV0by1zZW5zZSBmYWlsdXJlXG4iKTsKIApAQCAtNzY4LDE3ICs3ODMsMzIgQEAKIAkJLyogc2V0IHRoZSByZXN1bHQgc28gdGhlIGhpZ2hlciBsYXllcnMgZXhwZWN0IHRoaXMgZGF0YSAqLwogCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAotCQkvKiBJZiB0aGluZ3MgYXJlIHJlYWxseSBva2F5LCB0aGVuIGxldCdzIHNob3cgdGhhdC4gIFplcm8KLQkJICogb3V0IHRoZSBzZW5zZSBidWZmZXIgc28gdGhlIGhpZ2hlciBsYXllcnMgd29uJ3QgcmVhbGl6ZQotCQkgKiB3ZSBkaWQgYW4gdW5zb2xpY2l0ZWQgYXV0by1zZW5zZS4gKi8KLQkJaWYgKHJlc3VsdCA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCAmJgotCQkJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCisJCS8qIFdlIG9mdGVuIGdldCBlbXB0eSBzZW5zZSBkYXRhLiAgVGhpcyBjb3VsZCBpbmRpY2F0ZSB0aGF0CisJCSAqIGV2ZXJ5dGhpbmcgd29ya2VkIG9yIHRoYXQgdGhlcmUgd2FzIGFuIHVuc3BlY2lmaWVkCisJCSAqIHByb2JsZW0uICBXZSBoYXZlIHRvIGRlY2lkZSB3aGljaC4KKwkJICovCisJCWlmICgJLyogRmlsZW1hcmsgMCwgaWdub3JlIEVPTSwgSUxJIDAsIG5vIHNlbnNlICovCiAJCQkJKHNyYi0+c2Vuc2VfYnVmZmVyWzJdICYgMHhhZikgPT0gMCAmJgogCQkJLyogTm8gQVNDIG9yIEFTQ1EgKi8KIAkJCQlzcmItPnNlbnNlX2J1ZmZlclsxMl0gPT0gMCAmJgogCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzEzXSA9PSAwKSB7Ci0JCQlzcmItPnJlc3VsdCA9IFNBTV9TVEFUX0dPT0Q7Ci0JCQlzcmItPnNlbnNlX2J1ZmZlclswXSA9IDB4MDsKKworCQkJLyogSWYgdGhpbmdzIGFyZSByZWFsbHkgb2theSwgdGhlbiBsZXQncyBzaG93IHRoYXQuCisJCQkgKiBaZXJvIG91dCB0aGUgc2Vuc2UgYnVmZmVyIHNvIHRoZSBoaWdoZXIgbGF5ZXJzCisJCQkgKiB3b24ndCByZWFsaXplIHdlIGRpZCBhbiB1bnNvbGljaXRlZCBhdXRvLXNlbnNlLgorCQkJICovCisJCQlpZiAocmVzdWx0ID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJCQkJc3JiLT5yZXN1bHQgPSBTQU1fU1RBVF9HT09EOworCQkJCXNyYi0+c2Vuc2VfYnVmZmVyWzBdID0gMHgwOworCisJCQkvKiBJZiB0aGVyZSB3YXMgYSBwcm9ibGVtLCByZXBvcnQgYW4gdW5zcGVjaWZpZWQKKwkJCSAqIGhhcmR3YXJlIGVycm9yIHRvIHByZXZlbnQgdGhlIGhpZ2hlciBsYXllcnMgZnJvbQorCQkJICogZW50ZXJpbmcgYW4gaW5maW5pdGUgcmV0cnkgbG9vcC4KKwkJCSAqLworCQkJfSBlbHNlIHsKKwkJCQlzcmItPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJCQlzcmItPnNlbnNlX2J1ZmZlclsyXSA9IEhBUkRXQVJFX0VSUk9SOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCAwNzlhZTBmLi5kNGYwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTE4MjMsNiArMTgyMywxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKIAorLyogUmVwb3J0ZWQgYnkgU2VyZ2V5IFBpbmFldiA8ZGZvQGFudGV4LnJ1PiAqLworVU5VU1VBTF9ERVYoICAweDQxMDIsIDB4MTA1OSwgMHgwMDAwLCAgMHgwMDAwLAorICAgICAgICAgICAgICAgImlSaXZlciIsCisgICAgICAgICAgICAgICAiUDdLIiwKKyAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfTUFYX1NFQ1RPUlNfNjQgKSwKKwogLyoKICAqIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CiAgKiBUaGUga2V5IG1ha2VzIHRoZSBTQ1NJIHN0YWNrIHByaW50IGNvbmZ1c2luZyAoYnV0IGhhcm1sZXNzKSBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggYjJmMTQ5Zi4uNDUxNmMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0yMDAsMzUgKzIwMCw0MCBAQAogewogCWludCByZXN1bHQsIGJ5dGVzLCBzZWNkX3NpemU7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYl9kZXYtPmRldjsKLQlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3Igc2VjZDsKKwlzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IgKnNlY2Q7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgKmV0ZCwgKmNjbTFfZXRkID0gTlVMTDsKLQl2b2lkICpzZWNkX2J1ZjsKIAljb25zdCB2b2lkICppdHIsICp0b3A7CiAJY2hhciBidWZbNjRdOwogCisJc2VjZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciksIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmVzdWx0ID0gdXNiX2dldF9kZXNjcmlwdG9yKHVzYl9kZXYsIFVTQl9EVF9TRUNVUklUWSwKLQkJCQkgICAgMCwgJnNlY2QsIHNpemVvZihzZWNkKSk7CisJCQkJICAgIDAsIHNlY2QsIHNpemVvZihzdHJ1Y3QgdXNiX3NlY3VyaXR5X2Rlc2NyaXB0b3IpKTsKIAlpZiAocmVzdWx0IDwgc2l6ZW9mKHNlY2QpKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2Q7CisJCWdvdG8gb3V0OwogCX0KLQlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLndUb3RhbExlbmd0aCk7Ci0Jc2VjZF9idWYgPSBrbWFsbG9jKHNlY2Rfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNlY2RfYnVmID09IE5VTEwpIHsKKwlzZWNkX3NpemUgPSBsZTE2X3RvX2NwdShzZWNkLT53VG90YWxMZW5ndGgpOworCXNlY2QgPSBrcmVhbGxvYyhzZWNkLCBzZWNkX3NpemUsIEdGUF9LRVJORUwpOworCWlmIChzZWNkID09IE5VTEwpIHsKIAkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3Igc2VjdXJpdHkgZGVzY3JpcHRvcnNcbiIpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsb2M7CisJCWdvdG8gb3V0OwogCX0KIAlyZXN1bHQgPSB1c2JfZ2V0X2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX1NFQ1VSSVRZLAotCQkJCSAgICAwLCBzZWNkX2J1Ziwgc2VjZF9zaXplKTsKKwkJCQkgICAgMCwgc2VjZCwgc2VjZF9zaXplKTsKIAlpZiAocmVzdWx0IDwgc2VjZF9zaXplKSB7CiAJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcmVhZCBzZWN1cml0eSBkZXNjcmlwdG9yIG9yICIKIAkJCSJub3QgZW5vdWdoIGRhdGE6ICVkXG4iLCByZXN1bHQpOwotCQlnb3RvIGVycm9yX3NlY2RfYWxsOworCQlnb3RvIG91dDsKIAl9CiAJYnl0ZXMgPSAwOwotCWl0ciA9IHNlY2RfYnVmICsgc2l6ZW9mKHNlY2QpOwotCXRvcCA9IHNlY2RfYnVmICsgcmVzdWx0OworCWl0ciA9ICZzZWNkWzFdOworCXRvcCA9ICh2b2lkICopc2VjZCArIHJlc3VsdDsKIAl3aGlsZSAoaXRyIDwgdG9wKSB7CiAJCWV0ZCA9IGl0cjsKIAkJaWYgKHRvcCAtIGl0ciA8IHNpemVvZigqZXRkKSkgewpAQCAtMjU5LDI0ICsyNjQsMTYgQEAKIAkJZGV2X2VycihkZXYsICJXVVNCIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgQ0NNMSBlbmNyeXB0aW9uLCAiCiAJCQkiY2FuJ3QgdXNlIVxuIik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3Jfbm9fY2NtMTsKKwkJZ290byBvdXQ7CiAJfQogCXd1c2JfZGV2LT5jY20xX2V0ZCA9ICpjY20xX2V0ZDsKIAlkZXZfZGJnKGRldiwgInN1cHBvcnRlZCBlbmNyeXB0aW9uOiAlczsgdXNpbmcgJXMgKDB4JTAyeC8lMDJ4KVxuIiwKIAkJYnVmLCB3dXNiX2V0X25hbWUoY2NtMV9ldGQtPmJFbmNyeXB0aW9uVHlwZSksCiAJCWNjbTFfZXRkLT5iRW5jcnlwdGlvblZhbHVlLCBjY20xX2V0ZC0+YkF1dGhLZXlJbmRleCk7CiAJcmVzdWx0ID0gMDsKLQlrZnJlZShzZWNkX2J1Zik7CiBvdXQ6CisJa2ZyZWUoc2VjZCk7CiAJcmV0dXJuIHJlc3VsdDsKLQotCi1lcnJvcl9ub19jY20xOgotZXJyb3Jfc2VjZF9hbGw6Ci0Ja2ZyZWUoc2VjZF9idWYpOwotZXJyb3Jfc2VjZF9hbGxvYzoKLWVycm9yX3NlY2Q6Ci0JZ290byBvdXQ7CiB9CiAKIHZvaWQgd3VzYl9kZXZfc2VjX3JtKHN0cnVjdCB3dXNiX2RldiAqd3VzYl9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItZGVidWcuYyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCmluZGV4IDRhNDI5OTMuLjJlZWNlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXdiL3V3Yi1kZWJ1Zy5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tbWFuZF9mb3BzID0gewogCS5vcGVuICAgPSBjb21tYW5kX29wZW4sCiAJLndyaXRlICA9IGNvbW1hbmRfd3JpdGUsCiAJLnJlYWQgICA9IE5VTEwsCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcmVzZXJ2YXRpb25zX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzZXJ2YXRpb25zX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNlcnZhdGlvbnNfZm9wcyA9IHsKIAkub3BlbiAgICA9IHJlc2VydmF0aW9uc19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZHJwX2F2YWlsX3ByaW50LCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJwX2F2YWlsX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcnBfYXZhaWxfZm9wcyA9IHsKIAkub3BlbiAgICA9IGRycF9hdmFpbF9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93aGMtcmMuYyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCmluZGV4IDFkOWE2ZjUuLjAxOTUwYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3doYy1yYy5jCisrKyBiL2RyaXZlcnMvdXdiL3doYy1yYy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCA5YmJiMjg1Li4xODhlMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0yMTIxLDcgKzIxMjEsNyBAQAogCiBjb25maWcgRkJfUFJFX0lOSVRfRkIKIAlib29sICJEb24ndCByZWluaXRpYWxpemUsIHVzZSBib290bG9hZGVyJ3MgR0RDL0Rpc3BsYXkgY29uZmlndXJhdGlvbiIKLQlkZXBlbmRzIG9uIEZCX01CODYyWFhfTElNRQorCWRlcGVuZHMgb24gRkIgJiYgRkJfTUI4NjJYWF9MSU1FCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIGRpc3BsYXkgY29udGVudHMgc2hvdWxkIGJlIGluaGVyaXRlZCBhcyBzZXQgYnkKIAkgIHRoZSBib290bG9hZGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdGFmYi5jIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCmluZGV4IDhjZDI3OWIuLjM3NjI0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKQEAgLTMyOSwxMiArMzI5LDYgQEAKICAqCiAgKgkqIHBlcmZvcm0gZmIgc3BlY2lmaWMgbW1hcCAqCiAgKglpbnQgKCpmYl9tbWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotICoKLSAqCSogc2F2ZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICoKLSAqCXZvaWQgKCpmYl9zYXZlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci0gKgotICoJKiByZXN0b3JlIHNhdmVkIHN0YXRlICoKLSAqCXZvaWQgKCpmYl9yZXN0b3JlX3N0YXRlKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiAgKiB9IDsKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0bWVsX2xjZGZiLmMKaW5kZXggMjgzMGZmZC4uZDVlODAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdG1lbF9sY2RmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXRtZWxfbGNkZmIuYwpAQCAtNDg0LDYgKzQ4NCw3IEBACiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGNsa192YWx1ZV9raHo7CiAJdW5zaWduZWQgbG9uZyBiaXRzX3Blcl9saW5lOworCXVuc2lnbmVkIGxvbmcgcGl4X2ZhY3RvciA9IDI7CiAKIAltaWdodF9zbGVlcCgpOwogCkBAIC01MTYsMjAgKzUxNywyNCBAQAogCS8qIE5vdywgdGhlIExDREMgY29yZS4uLiAqLwogCiAJLyogU2V0IHBpeGVsIGNsb2NrICovCisJaWYgKGNwdV9pc19hdDkxc2FtOWc0NSgpICYmICFjcHVfaXNfYXQ5MXNhbTlnNDVlcygpKQorCQlwaXhfZmFjdG9yID0gMTsKKwogCWNsa192YWx1ZV9raHogPSBjbGtfZ2V0X3JhdGUoc2luZm8tPmxjZGNfY2xrKSAvIDEwMDA7CiAKIAl2YWx1ZSA9IERJVl9ST1VORF9VUChjbGtfdmFsdWVfa2h6LCBQSUNPUzJLSFooaW5mby0+dmFyLnBpeGNsb2NrKSk7CiAKLQlpZiAodmFsdWUgPCAyKSB7CisJaWYgKHZhbHVlIDwgcGl4X2ZhY3RvcikgewogCQlkZXZfbm90aWNlKGluZm8tPmRldmljZSwgIkJ5cGFzc2luZyBwaXhlbCBjbG9jayBkaXZpZGVyXG4iKTsKIAkJbGNkY193cml0ZWwoc2luZm8sIEFUTUVMX0xDRENfTENEQ09OMSwgQVRNRUxfTENEQ19CWVBBU1MpOwogCX0gZWxzZSB7Ci0JCXZhbHVlID0gKHZhbHVlIC8gMikgLSAxOworCQl2YWx1ZSA9ICh2YWx1ZSAvIHBpeF9mYWN0b3IpIC0gMTsKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgICogcHJvZ3JhbW1pbmcgQ0xLVkFMID0gMHglMDhseFxuIiwKIAkJCQl2YWx1ZSk7CiAJCWxjZGNfd3JpdGVsKHNpbmZvLCBBVE1FTF9MQ0RDX0xDRENPTjEsCiAJCQkJdmFsdWUgPDwgQVRNRUxfTENEQ19DTEtWQUxfT0ZGU0VUKTsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gS0haMlBJQ09TKGNsa192YWx1ZV9raHogLyAoMiAqICh2YWx1ZSArIDEpKSk7CisJCWluZm8tPnZhci5waXhjbG9jayA9CisJCQlLSFoyUElDT1MoY2xrX3ZhbHVlX2toeiAvIChwaXhfZmFjdG9yICogKHZhbHVlICsgMSkpKTsKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIgIHVwZGF0ZWQgcGl4Y2xrOiAgICAgJWx1IEtIelxuIiwKIAkJCQkJUElDT1MyS0haKGluZm8tPnZhci5waXhjbG9jaykpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDkwODYxY2QuLjA5YmZhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMzEsNiArMzEsMTMgQEAKIAkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgTENEIHBhbmVscyB1c3VhbGx5IGZvdW5kIG9uIFNIQVJQCiAJICBjb3JnaSAoQzd4MCkgYW5kIHNwaXR6IChDeHgwMCkgbW9kZWxzLgogCitjb25maWcgTENEX0xNUzI4M0dGMDUKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBMTVMyODNHRjA1IExDRCIKKwlkZXBlbmRzIG9uIExDRF9DTEFTU19ERVZJQ0UgJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0dQSU8KKwloZWxwCisJICBTUEkgZHJpdmVyIGZvciBTYW1zdW5nIExNUzI4M0dGMDUuIFRoaXMgcHJvdmlkZXMgYmFzaWMgc3VwcG9ydAorCSAgZm9yIHBvd2VyaW5nIHRoZSBMQ0QgdXAvZG93biB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLgorCiBjb25maWcgTENEX0xUVjM1MFFWCiAJdHJpc3RhdGUgIlNhbXN1bmcgTFRWMzUwUVYgTENEIFBhbmVsIgogCWRlcGVuZHMgb24gTENEX0NMQVNTX0RFVklDRSAmJiBTUElfTUFTVEVSCkBAIC0yMjksMyArMjM2LDI5IEBACiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBUYWJsZXRraW9zayBTYWhhcmEgVG91Y2gtaVQsIHNheSB5IHRvIGVuYWJsZSB0aGUKIAkgIGJhY2tsaWdodCBkcml2ZXIuCisKK2NvbmZpZyBCQUNLTElHSFRfV004MzFYCisJdHJpc3RhdGUgIldNODMxeCBQTUlDIEJhY2tsaWdodCBEcml2ZXIiCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFICYmIE1GRF9XTTgzMVgKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIGJhY2tsaWdodCBkcml2ZW4gYnkgdGhlIElTSU5LIGFuZCBEQ0RDIG9mIGEKKwkgIFdNODMxeCBQTUlDIHNheSB5IHRvIGVuYWJsZSB0aGUgYmFja2xpZ2h0IGRyaXZlciBmb3IgaXQuCisKK2NvbmZpZyBCQUNLTElHSFRfQURYCisJdHJpc3RhdGUgIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgQmFja2xpZ2h0IERyaXZlciIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgQVJDSF9QWEFfQURYCisJZGVmYXVsdCB5CisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIG9uIEF2aW9uaWMgRGVzaWduIFhhbnRob3MtYmFzZWQKKwkgIGJvYXJkcy4KKworY29uZmlnIEJBQ0tMSUdIVF9BRFA1NTIwCisJdHJpc3RhdGUgIkJhY2tsaWdodCBEcml2ZXIgZm9yIEFEUDU1MjAvQURQNTUwMSB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBQTUlDX0FEUDU1MjAKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBCU1QvQkxfU05LIG91dHB1dCBvZgorCSAgQURQNTUyMCBvciBBRFA1NTAxLCBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgYWRwNTUyMF9ibC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQppbmRleCA0ZWIxNzhjLi45YTQwNTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIG9iai0kKENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFKSAgICAgKz0gbGNkLm8KIG9iai0kKENPTkZJR19MQ0RfQ09SR0kpCQkgICArPSBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX0xDRF9IUDcwMCkJCSAgICs9IGpvcm5hZGE3MjBfbGNkLm8KK29iai0kKENPTkZJR19MQ0RfTE1TMjgzR0YwNSkJICAgKz0gbG1zMjgzZ2YwNS5vCiBvYmotJChDT05GSUdfTENEX0xUVjM1MFFWKQkgICArPSBsdHYzNTBxdi5vCiBvYmotJChDT05GSUdfTENEX0lMSTkzMjApCSAgICs9IGlsaTkzMjAubwogb2JqLSQoQ09ORklHX0xDRF9QTEFURk9STSkJICAgKz0gcGxhdGZvcm1fbGNkLm8KQEAgLTI0LDQgKzI1LDcgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUJQX05WSURJQSkgKz0gbWJwX252aWRpYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1RPU0EpCSs9IHRvc2FfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEpCSs9IGtiMzg4Nl9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUX1dNODMxWCkJKz0gd204MzF4X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfQURYKSAgICArPSBhZHhfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwKQkrPSBhZHA1NTIwX2JsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWRwNTUyMF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDVkYTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHA1NTIwX2JsLmMKQEAgLTAsMCArMSwzNzcgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBBbmFsb2cgRGV2aWNlcyBBRFA1NTIwL0FEUDU1MDEgTUZEIFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2FkcDU1MjAuaD4KKworc3RydWN0IGFkcDU1MjBfYmwgeworCXN0cnVjdCBkZXZpY2UgKm1hc3RlcjsKKwlzdHJ1Y3QgYWRwNTUyMF9iYWNrbGlnaHRfcGxhdGZyb21fZGF0YSAqcGRhdGE7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdW5zaWduZWQgbG9uZyBjYWNoZWRfZGF5bGlnaHRfbWF4OworCWludCBpZDsKKwlpbnQgY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBkZXZpY2UgKm1hc3RlciA9IGRhdGEtPm1hc3RlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkYXRhLT5wZGF0YS0+ZW5fYW1ibF9zZW5zKSB7CisJCWlmICgoYnJpZ2h0bmVzcyA+IDApICYmIChicmlnaHRuZXNzIDwgQURQNTAyMF9NQVhfQlJJR0hUTkVTUykpIHsKKwkJCS8qIERpc2FibGUgQW1iaWVudCBMaWdodCBhdXRvIGFkanVzdCAqLworCQkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQlCTF9BVVRPX0FESik7CisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgYnJpZ2h0bmVzcyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTUFYX0JSSUdIVE5FU1MgLT4gRW5hYmxlIEFtYmllbnQgTGlnaHQgYXV0byBhZGp1c3QKKwkJCSAqIHJlc3RvcmUgZGF5bGlnaHQgbDMgc3lzZnMgYnJpZ2h0bmVzcworCQkJICovCisJCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwKKwkJCQkJIGRhdGEtPmNhY2hlZF9kYXlsaWdodF9tYXgpOworCQkJcmV0IHw9IGFkcDU1MjBfc2V0X2JpdHMobWFzdGVyLCBCTF9DT05UUk9MLAorCQkJCQkgQkxfQVVUT19BREopOworCQl9CisJfSBlbHNlIHsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9NQVgsIGJyaWdodG5lc3MpOworCX0KKworCWlmIChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcyA9PSAwKQorCQlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsCisJCQkJTU9ERV9TVEFUVVMsIERJTV9FTik7CisJZWxzZSBpZiAoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDAgJiYgYnJpZ2h0bmVzcykKKwkJcmV0IHw9IGFkcDU1MjBfY2xyX2JpdHMobWFzdGVyLAorCQkJCU1PREVfU1RBVFVTLCBESU1fRU4pOworCisJaWYgKCFyZXQpCisJCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBhZHA1NTIwX2JsX3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgYWRwNTUyMF9ibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJaW50IGVycm9yOworCXVpbnQ4X3QgcmVnX3ZhbDsKKworCWVycm9yID0gYWRwNTUyMF9yZWFkKGRhdGEtPm1hc3RlciwgQkxfVkFMVUUsICZyZWdfdmFsKTsKKworCXJldHVybiBlcnJvciA/IGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA6IHJlZ192YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHA1NTIwX2JsX29wcyA9IHsKKwkudXBkYXRlX3N0YXR1cwk9IGFkcDU1MjBfYmxfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSBhZHA1NTIwX2JsX2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBhZHA1NTIwX2JsX3NldHVwKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgZGV2aWNlICptYXN0ZXIgPSBkYXRhLT5tYXN0ZXI7CisJc3RydWN0IGFkcDU1MjBfYmFja2xpZ2h0X3BsYXRmcm9tX2RhdGEgKnBkYXRhID0gZGF0YS0+cGRhdGE7CisJaW50IHJldCA9IDA7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIERBWUxJR0hUX01BWCwgcGRhdGEtPmwxX2RheWxpZ2h0X21heCk7CisJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVlMSUdIVF9ESU0sIHBkYXRhLT5sMV9kYXlsaWdodF9kaW0pOworCisJaWYgKHBkYXRhLT5lbl9hbWJsX3NlbnMpIHsKKwkJZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCA9IHBkYXRhLT5sMV9kYXlsaWdodF9tYXg7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgT0ZGSUNFX01BWCwgcGRhdGEtPmwyX29mZmljZV9tYXgpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIE9GRklDRV9ESU0sIHBkYXRhLT5sMl9vZmZpY2VfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX01BWCwgcGRhdGEtPmwzX2RhcmtfbWF4KTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBEQVJLX0RJTSwgcGRhdGEtPmwzX2RhcmtfZGltKTsKKwkJcmV0IHw9IGFkcDU1MjBfd3JpdGUobWFzdGVyLCBMMl9UUklQLCBwZGF0YS0+bDJfdHJpcCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDJfSFlTLCBwZGF0YS0+bDJfaHlzdCk7CisJCXJldCB8PSBhZHA1NTIwX3dyaXRlKG1hc3RlciwgTDNfVFJJUCwgcGRhdGEtPmwzX3RyaXApOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEwzX0hZUywgcGRhdGEtPmwzX2h5c3QpOworCQlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEFMU19DTVBSX0NGRywKKwkJCUFMU19DTVBSX0NGR19WQUwocGRhdGEtPmFibWxfZmlsdCwgTDNfRU4pKTsKKwl9CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0NPTlRST0wsCisJCQlCTF9DVFJMX1ZBTChwZGF0YS0+ZmFkZV9sZWRfbGF3LCBwZGF0YS0+ZW5fYW1ibF9zZW5zKSk7CisKKwlyZXQgfD0gYWRwNTUyMF93cml0ZShtYXN0ZXIsIEJMX0ZBREUsIEZBREVfVkFMKHBkYXRhLT5mYWRlX2luLAorCQkJcGRhdGEtPmZhZGVfb3V0KSk7CisKKwlyZXQgfD0gYWRwNTUyMF9zZXRfYml0cyhtYXN0ZXIsIE1PREVfU1RBVFVTLCBCTF9FTiB8IERJTV9FTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCByZWcpCit7CisJc3RydWN0IGFkcDU1MjBfYmwgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisJdWludDhfdCByZWdfdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJZXJyb3IgPSBhZHA1NTIwX3JlYWQoZGF0YS0+bWFzdGVyLCByZWcsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHJlZ192YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLAorCQkJIHNpemVfdCBjb3VudCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7CisJYWRwNTUyMF93cml0ZShkYXRhLT5tYXN0ZXIsIHJlZywgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfbWF4X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBUktfTUFYKTsKK30KKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIERBUktfTUFYKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihkYXJrX21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXJrX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9kYXJrX21heF9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgT0ZGSUNFX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9tYXgsIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX21heF9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX01BWCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmZGF0YS0+Y2FjaGVkX2RheWxpZ2h0X21heCk7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9NQVgpOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X21heCwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9tYXhfc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfbWF4X3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXJrX2RpbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIGFkcDU1MjBfc2hvdyhkZXYsIGJ1ZiwgREFSS19ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX2RhcmtfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVJLX0RJTSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGFya19kaW0sIDA2NjQsIGFkcDU1MjBfYmxfZGFya19kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGFya19kaW1fc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIE9GRklDRV9ESU0pOworfQorCitzdGF0aWMgc3NpemVfdCBhZHA1NTIwX2JsX29mZmljZV9kaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gYWRwNTUyMF9zdG9yZShkZXYsIGJ1ZiwgY291bnQsIE9GRklDRV9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKG9mZmljZV9kaW0sIDA2NjQsIGFkcDU1MjBfYmxfb2ZmaWNlX2RpbV9zaG93LAorCQkJYWRwNTUyMF9ibF9vZmZpY2VfZGltX3N0b3JlKTsKKworc3RhdGljIHNzaXplX3QgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBhZHA1NTIwX3Nob3coZGV2LCBidWYsIERBWUxJR0hUX0RJTSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGFkcDU1MjBfc3RvcmUoZGV2LCBidWYsIGNvdW50LCBEQVlMSUdIVF9ESU0pOworfQorc3RhdGljIERFVklDRV9BVFRSKGRheWxpZ2h0X2RpbSwgMDY2NCwgYWRwNTUyMF9ibF9kYXlsaWdodF9kaW1fc2hvdywKKwkJCWFkcDU1MjBfYmxfZGF5bGlnaHRfZGltX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkcDU1MjBfYmxfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9kYXJrX21heC5hdHRyLAorCSZkZXZfYXR0cl9kYXJrX2RpbS5hdHRyLAorCSZkZXZfYXR0cl9vZmZpY2VfbWF4LmF0dHIsCisJJmRldl9hdHRyX29mZmljZV9kaW0uYXR0ciwKKwkmZGV2X2F0dHJfZGF5bGlnaHRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2RheWxpZ2h0X2RpbS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkcDU1MjBfYmxfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhZHA1NTIwX2JsX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHA1NTIwX2JsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCBhZHA1NTIwX2JsICpkYXRhOworCWludCByZXQgPSAwOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT5tYXN0ZXIgPSBwZGV2LT5kZXYucGFyZW50OworCWRhdGEtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoZGF0YS0+cGRhdGEgID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsIGRhdGEtPm1hc3RlciwKKwkJCWRhdGEsICZhZHA1NTIwX2JsX29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0KKwkJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBBRFA1MDIwX01BWF9CUklHSFRORVNTOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJJmFkcDU1MjBfYmxfYXR0cl9ncm91cCk7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBzeXNmc1xuIik7CisJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJCWtmcmVlKGRhdGEpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKwlyZXQgfD0gYWRwNTUyMF9ibF9zZXR1cChibCk7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgYWRwNTUyMF9ibF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYWRwNTUyMF9ibCAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWFkcDU1MjBfY2xyX2JpdHMoZGF0YS0+bWFzdGVyLCBNT0RFX1NUQVRVUywgQkxfRU4pOworCisJaWYgKGRhdGEtPnBkYXRhLT5lbl9hbWJsX3NlbnMpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmYmwtPmRldi5rb2JqLAorCQkJCSZhZHA1NTIwX2JsX2F0dHJfZ3JvdXApOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkcDU1MjBfYmxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJcmV0dXJuIGFkcDU1MjBfYmxfc2V0KGJsLCAwKTsKK30KKworc3RhdGljIGludCBhZHA1NTIwX2JsX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgYWRwNTUyMF9ibF9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWRwNTUyMF9ibF9yZXN1bWUJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFkcDU1MjBfYmxfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhZHA1NTIwLWJhY2tsaWdodCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGFkcDU1MjBfYmxfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhZHA1NTIwX2JsX3JlbW92ZSksCisJLnN1c3BlbmQJPSBhZHA1NTIwX2JsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhZHA1NTIwX2JsX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkcDU1MjBfYmxfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkcDU1MjBfYmxfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KGFkcDU1MjBfYmxfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHA1NTIwX2JsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYWRwNTUyMF9ibF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYWRwNTUyMF9ibF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIZW5uZXJpY2ggPGhlbm5lcmljaEBibGFja2Zpbi51Y2xpbnV4Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURQNTUyMCgwMSkgQmFja2xpZ2h0IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphZHA1NTIwLWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNiZGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvYWR4X2JsLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9hZHguYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBBRFhfQkFDS0xJR0hUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUgQURYX0JBQ0tMSUdIVF9DT05UUk9MX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0JSSUdIVE5FU1MJMHgwOAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX1NUQVRVUwkJMHgxMAorI2RlZmluZSBBRFhfQkFDS0xJR0hUX0VSUk9SCQkweDE4CisKK3N0cnVjdCBhZHhibCB7CisJdm9pZCBfX2lvbWVtICpiYXNlOworfTsKKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2KQoreworCXN0cnVjdCBhZHhibCAqYmwgPSBibF9nZXRfZGF0YShibGRldik7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBibGRldi0+cHJvcHMuYnJpZ2h0bmVzczsKKwl3cml0ZWwodmFsdWUsIGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKworCXZhbHVlID0gcmVhZGwoYmwtPmJhc2UgKyBBRFhfQkFDS0xJR0hUX0NPTlRST0wpOworCisJaWYgKGJsZGV2LT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfRkJCTEFOSykKKwkJdmFsdWUgJj0gfkFEWF9CQUNLTElHSFRfQ09OVFJPTF9FTkFCTEU7CisJZWxzZQorCQl2YWx1ZSB8PSBBRFhfQkFDS0xJR0hUX0NPTlRST0xfRU5BQkxFOworCisJd3JpdGVsKHZhbHVlLCBibC0+YmFzZSArIEFEWF9CQUNLTElHSFRfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldikKK3sKKwlzdHJ1Y3QgYWR4YmwgKmJsID0gYmxfZ2V0X2RhdGEoYmxkZXYpOworCXUzMiBicmlnaHRuZXNzOworCisJYnJpZ2h0bmVzcyA9IHJlYWRsKGJsLT5iYXNlICsgQURYX0JBQ0tMSUdIVF9CUklHSFRORVNTKTsKKwlyZXR1cm4gYnJpZ2h0bmVzcyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9jaGVja19mYihzdHJ1Y3QgZmJfaW5mbyAqZmIpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhZHhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IDAsCisJLnVwZGF0ZV9zdGF0dXMgPSBhZHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzID0gYWR4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKKwkuY2hlY2tfZmIgPSBhZHhfYmFja2xpZ2h0X2NoZWNrX2ZiLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYWR4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWR4YmwgKmJsOworCWludCByZXQgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcyksIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmJsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlibC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghYmwtPmJhc2UpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlibGRldiA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2X25hbWUoJnBkZXYtPmRldiksICZwZGV2LT5kZXYsIGJsLAorCQkJJmFkeF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoIWJsZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWJsZGV2LT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmxkZXYtPnByb3BzLmJyaWdodG5lc3MgPSAweGZmOworCWJsZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibGRldik7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKKwlpbnQgcmV0ID0gMDsKKworCWJsZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYmxkZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwlibGRldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IDB4ZmY7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmxkZXYpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGFkeF9iYWNrbGlnaHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR4X2JhY2tsaWdodF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIGFkeF9iYWNrbGlnaHRfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhZHhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBhZHhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhZHhfYmFja2xpZ2h0X3JlbW92ZSksCisJLnN1c3BlbmQgPSBhZHhfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZSA9IGFkeF9iYWNrbGlnaHRfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFkeC1iYWNrbGlnaHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWR4X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWR4X2JhY2tsaWdodF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWR4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFkeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWR4X2JhY2tsaWdodF9pbml0KTsKK21vZHVsZV9leGl0KGFkeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBCYWNrbGlnaHQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLjY2MTVhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC03Myw2ICs3MywyNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GQiAqLwogCitzdGF0aWMgdm9pZCBiYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJCSAgICAgZW51bSBiYWNrbGlnaHRfdXBkYXRlX3JlYXNvbiByZWFzb24pCit7CisJY2hhciAqZW52cFsyXTsKKworCXN3aXRjaCAocmVhc29uKSB7CisJY2FzZSBCQUNLTElHSFRfVVBEQVRFX1NZU0ZTOgorCQllbnZwWzBdID0gIlNPVVJDRT1zeXNmcyI7CisJCWJyZWFrOworCWNhc2UgQkFDS0xJR0hUX1VQREFURV9IT1RLRVk6CisJCWVudnBbMF0gPSAiU09VUkNFPWhvdGtleSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVudnBbMF0gPSAiU09VUkNFPXVua25vd24iOworCQlicmVhazsKKwl9CisJZW52cFsxXSA9IE5VTEw7CisJa29iamVjdF91ZXZlbnRfZW52KCZiZC0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKKwlzeXNmc19ub3RpZnkoJmJkLT5kZXYua29iaiwgTlVMTCwgImFjdHVhbF9icmlnaHRuZXNzIik7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGJhY2tsaWdodF9zaG93X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsY2hhciAqYnVmKQogewpAQCAtMTQyLDYgKzE2Myw4IEBACiAJfQogCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKIAorCWJhY2tsaWdodF9nZW5lcmF0ZV9ldmVudChiZCwgQkFDS0xJR0hUX1VQREFURV9TWVNGUyk7CisKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxNCw2ICsyMzcsMjUgQEAKIH07CiAKIC8qKgorICogYmFja2xpZ2h0X2ZvcmNlX3VwZGF0ZSAtIHRlbGwgdGhlIGJhY2tsaWdodCBzdWJzeXN0ZW0gdGhhdCBoYXJkd2FyZSBzdGF0ZQorICogICBoYXMgY2hhbmdlZAorICogQGJkOiB0aGUgYmFja2xpZ2h0IGRldmljZSB0byB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgYmFja2xpZ2h0IGluIHJlc3BvbnNlIHRvIGEgaGFyZHdhcmUgZXZlbnQsCisgKiBhbmQgZ2VuZXJhdGUgYSB1ZXZlbnQgdG8gbm90aWZ5IHVzZXJzcGFjZQorICovCit2b2lkIGJhY2tsaWdodF9mb3JjZV91cGRhdGUoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkLAorCQkJICAgIGVudW0gYmFja2xpZ2h0X3VwZGF0ZV9yZWFzb24gcmVhc29uKQoreworCW11dGV4X2xvY2soJmJkLT5vcHNfbG9jayk7CisJaWYgKGJkLT5vcHMgJiYgYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MpCisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYmQtPm9wcy0+Z2V0X2JyaWdodG5lc3MoYmQpOworCW11dGV4X3VubG9jaygmYmQtPm9wc19sb2NrKTsKKwliYWNrbGlnaHRfZ2VuZXJhdGVfZXZlbnQoYmQsIHJlYXNvbik7Cit9CitFWFBPUlRfU1lNQk9MKGJhY2tsaWdodF9mb3JjZV91cGRhdGUpOworCisvKioKICAqIGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgbmV3IG9iamVjdCBvZgogICogICBiYWNrbGlnaHRfZGV2aWNlIGNsYXNzLgogICogQG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBuZXcgb2JqZWN0KG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9sY2QuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCmluZGV4IDIyMTFhODUuLjk2Nzc0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2xjZC5jCkBAIC00MzMsOCArNDMzLDkgQEAKIAogCWlmIChjb3JnaWJsX2ZsYWdzICYgQ09SR0lCTF9TVVNQRU5ERUQpCiAJCWludGVuc2l0eSA9IDA7Ci0JaWYgKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpCi0JCWludGVuc2l0eSAmPSBsY2QtPmxpbWl0X21hc2s7CisKKwlpZiAoKGNvcmdpYmxfZmxhZ3MgJiBDT1JHSUJMX0JBVFRMT1cpICYmIGludGVuc2l0eSA+IGxjZC0+bGltaXRfbWFzaykKKwkJaW50ZW5zaXR5ID0gbGNkLT5saW1pdF9tYXNrOwogCiAJcmV0dXJuIGNvcmdpX2JsX3NldF9pbnRlbnNpdHkobGNkLCBpbnRlbnNpdHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvZGE5MDN4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwppbmRleCA5M2JiNDM0Li43MDFhMTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9kYTkwM3hfYmwuYwpAQCAtMTU0LDM0ICsxNTQsMzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlyZXR1cm4gZGE5MDN4X2JhY2tsaWdodF9zZXQoYmwsIDApOwogfQogCi1zdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IGRhOTAzeF9iYWNrbGlnaHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CiAJcmV0dXJuIDA7CiB9Ci0jZWxzZQotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQJTlVMTAotI2RlZmluZSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZQkJTlVMTAorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZGE5MDN4X2JhY2tsaWdodF9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBkYTkwM3hfYmFja2xpZ2h0X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBkYTkwM3hfYmFja2xpZ2h0X3Jlc3VtZSwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGE5MDN4X2JhY2tsaWdodF9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImRhOTAzeC1iYWNrbGlnaHQiLAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtCT0gJmRhOTAzeF9iYWNrbGlnaHRfcG1fb3BzLAorI2VuZGlmCiAJfSwKIAkucHJvYmUJCT0gZGE5MDN4X2JhY2tsaWdodF9wcm9iZSwKIAkucmVtb3ZlCQk9IGRhOTAzeF9iYWNrbGlnaHRfcmVtb3ZlLAotCS5zdXNwZW5kCT0gZGE5MDN4X2JhY2tsaWdodF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gZGE5MDN4X2JhY2tsaWdodF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBkYTkwM3hfYmFja2xpZ2h0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCmluZGV4IDViZTU1YTIuLjdmYjRlZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJLnVwZGF0ZV9zdGF0dXMgID0gaHA2ODBibF9zZXRfaW50ZW5zaXR5LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgaHA2ODBibF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiNjQ0OTQ3Li5hNDgyZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtNTYsNyArNTYsNyBAQAogCiBzdGF0aWMgaW50IGxjZF9yZWdpc3Rlcl9mYihzdHJ1Y3QgbGNkX2RldmljZSAqbGQpCiB7Ci0JbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZigmbGQtPmZiX25vdGlmKSk7CisJbWVtc2V0KCZsZC0+ZmJfbm90aWYsIDAsIHNpemVvZihsZC0+ZmJfbm90aWYpKTsKIAlsZC0+ZmJfbm90aWYubm90aWZpZXJfY2FsbCA9IGZiX25vdGlmaWVyX2NhbGxiYWNrOwogCXJldHVybiBmYl9yZWdpc3Rlcl9jbGllbnQoJmxkLT5mYl9ub3RpZik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sbXMyODNnZjA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ3YjU0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2xtczI4M2dmMDUuYwpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIGxtczI4M2dmMDUuYyAtLSBzdXBwb3J0IGZvciBTYW1zdW5nIExNUzI4M0dGMDUgTENECisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1hcmVrIFZhc3V0IDxtYXJlay52YXN1dEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGNkLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2xtczI4M2dmMDUuaD4KKworc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgeworCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGk7CisJc3RydWN0IGxjZF9kZXZpY2UJKmxkOworfTsKKworc3RydWN0IGxtczI4M2dmMDVfc2VxIHsKKwl1bnNpZ25lZCBjaGFyCQlyZWc7CisJdW5zaWduZWQgc2hvcnQJCXZhbHVlOworCXVuc2lnbmVkIGNoYXIJCWRlbGF5OworfTsKKworLyogTWFnaWMgc2VxdWVuY2VzIHN1cHBsaWVkIGJ5IG1hbnVmYWN0dXJlciwgZm9yIGRldGFpbHMgcmVmZXIgdG8gZGF0YXNoZWV0ICovCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfaW5pdHNlcVtdID0geworCS8qIFJFRywgVkFMVUUsIERFTEFZICovCisJeyAweDA3LCAweDAwMDAsIDAgfSwKKwl7IDB4MTMsIDB4MDAwMCwgMTAgfSwKKworCXsgMHgxMSwgMHgzMDA0LCAwIH0sCisJeyAweDE0LCAweDIwMEYsIDAgfSwKKwl7IDB4MTAsIDB4MWEyMCwgMCB9LAorCXsgMHgxMywgMHgwMDQwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNjAsIDAgfSwKKwl7IDB4MTMsIDB4MDA3MCwgMjAwIH0sCisKKwl7IDB4MDEsIDB4MDEyNywgMCB9LAorCXsgMHgwMiwJMHgwNzAwLCAwIH0sCisJeyAweDAzLCAweDEwMzAsIDAgfSwKKwl7IDB4MDgsIDB4MDIwOCwgMCB9LAorCXsgMHgwQiwgMHgwNjIwLCAwIH0sCisJeyAweDBDLCAweDAxMTAsIDAgfSwKKwl7IDB4MzAsIDB4MDEyMCwgMCB9LAorCXsgMHgzMSwgMHgwMTI3LCAwIH0sCisJeyAweDMyLCAweDAwMDAsIDAgfSwKKwl7IDB4MzMsIDB4MDUwMywgMCB9LAorCXsgMHgzNCwgMHgwNzI3LCAwIH0sCisJeyAweDM1LCAweDAxMjQsIDAgfSwKKwl7IDB4MzYsIDB4MDcwNiwgMCB9LAorCXsgMHgzNywgMHgwNzAxLCAwIH0sCisJeyAweDM4LCAweDBGMDAsIDAgfSwKKwl7IDB4MzksIDB4MEYwMCwgMCB9LAorCXsgMHg0MCwgMHgwMDAwLCAwIH0sCisJeyAweDQxLCAweDAwMDAsIDAgfSwKKwl7IDB4NDIsIDB4MDEzZiwgMCB9LAorCXsgMHg0MywgMHgwMDAwLCAwIH0sCisJeyAweDQ0LCAweDAxM2YsIDAgfSwKKwl7IDB4NDUsIDB4MDAwMCwgMCB9LAorCXsgMHg0NiwgMHhlZjAwLCAwIH0sCisJeyAweDQ3LCAweDAxM2YsIDAgfSwKKwl7IDB4NDgsIDB4MDAwMCwgMCB9LAorCXsgMHgwNywgMHgwMDE1LCAzMCB9LAorCisJeyAweDA3LCAweDAwMTcsIDAgfSwKKworCXsgMHgyMCwgMHgwMDAwLCAwIH0sCisJeyAweDIxLCAweDAwMDAsIDAgfSwKKwl7IDB4MjIsIDB4MDAwMCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGxtczI4M2dmMDVfc2VxIGRpc3BfcGR3bnNlcVtdID0geworCXsgMHgwNywgMHgwMDE2LCAzMCB9LAorCisJeyAweDA3LCAweDAwMDQsIDAgfSwKKwl7IDB4MTAsIDB4MDIyMCwgMjAgfSwKKworCXsgMHgxMywgMHgwMDYwLCA1MCB9LAorCisJeyAweDEzLCAweDAwNDAsIDUwIH0sCisKKwl7IDB4MTMsIDB4MDAwMCwgMCB9LAorCXsgMHgxMCwgMHgwMDAwLCAwIH0KK307CisKKworc3RhdGljIHZvaWQgbG1zMjgzZ2YwNV9yZXNldCh1bnNpZ25lZCBsb25nIGdwaW8sIGJvb2wgaW52ZXJ0ZWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWludmVydGVkKTsKKwltZGVsYXkoMTAwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCBpbnZlcnRlZCk7CisJbWRlbGF5KDIwKTsKKwlncGlvX3NldF92YWx1ZShncGlvLCAhaW52ZXJ0ZWQpOworCW1kZWxheSgyMCk7Cit9CisKK3N0YXRpYyB2b2lkIGxtczI4M2dmMDVfdG9nZ2xlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQlzdHJ1Y3QgbG1zMjgzZ2YwNV9zZXEgKnNlcSwgaW50IHN6KQoreworCWNoYXIgYnVmWzNdOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKKwkJYnVmWzBdID0gMHg3NDsKKwkJYnVmWzFdID0gMHgwMDsKKwkJYnVmWzJdID0gc2VxW2ldLnJlZzsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQlidWZbMF0gPSAweDc2OworCQlidWZbMV0gPSBzZXFbaV0udmFsdWUgPj4gODsKKwkJYnVmWzJdID0gc2VxW2ldLnZhbHVlICYgMHhmZjsKKwkJc3BpX3dyaXRlKHNwaSwgYnVmLCAzKTsKKworCQltZGVsYXkoc2VxW2ldLmRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG1zMjgzZ2YwNV9wb3dlcl9zZXQoc3RydWN0IGxjZF9kZXZpY2UgKmxkLCBpbnQgcG93ZXIpCit7CisJc3RydWN0IGxtczI4M2dmMDVfc3RhdGUgKnN0ID0gbGNkX2dldF9kYXRhKGxkKTsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gc3QtPnNwaTsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHBvd2VyKSB7CisJCWlmIChwZGF0YSkKKwkJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sCisJCQkJCXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9pbml0c2VxLCBBUlJBWV9TSVpFKGRpc3BfaW5pdHNlcSkpOworCX0gZWxzZSB7CisJCWxtczI4M2dmMDVfdG9nZ2xlKHNwaSwgZGlzcF9wZHduc2VxLCBBUlJBWV9TSVpFKGRpc3BfcGR3bnNlcSkpOworCQlpZiAocGRhdGEpCisJCQlncGlvX3NldF92YWx1ZShwZGF0YS0+cmVzZXRfZ3BpbywKKwkJCQkJcGRhdGEtPnJlc2V0X2ludmVydGVkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGxtc19vcHMgPSB7CisJLnNldF9wb3dlcgk9IGxtczI4M2dmMDVfcG93ZXJfc2V0LAorCS5nZXRfcG93ZXIJPSBOVUxMLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbG1zMjgzZ2YwNV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdDsKKwlzdHJ1Y3QgbG1zMjgzZ2YwNV9wZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBsY2RfZGV2aWNlICpsZDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwZGF0YSAhPSBOVUxMKSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfZ3BpbywgIkxNUzI4NUdGMDUgUkVTRVQiKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5yZXNldF9ncGlvLAorCQkJCQkJIXBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbXMyODNnZjA1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJObyBtZW1vcnkgZm9yIGRldmljZSBzdGF0ZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWxkID0gbGNkX2RldmljZV9yZWdpc3RlcigibG1zMjgzZ2YwNSIsICZzcGktPmRldiwgc3QsICZsbXNfb3BzKTsKKwlpZiAoSVNfRVJSKGxkKSkgeworCQlyZXQgPSBQVFJfRVJSKGxkKTsKKwkJZ290byBlcnIyOworCX0KKworCXN0LT5zcGkgPSBzcGk7CisJc3QtPmxkID0gbGQ7CisKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdCk7CisKKwkvKiBraWNrIGluIHRoZSBMQ0QgKi8KKwlpZiAocGRhdGEpCisJCWxtczI4M2dmMDVfcmVzZXQocGRhdGEtPnJlc2V0X2dwaW8sIHBkYXRhLT5yZXNldF9pbnZlcnRlZCk7CisJbG1zMjgzZ2YwNV90b2dnbGUoc3BpLCBkaXNwX2luaXRzZXEsIEFSUkFZX1NJWkUoZGlzcF9pbml0c2VxKSk7CisKKwlyZXR1cm4gMDsKKworZXJyMjoKKwlrZnJlZShzdCk7CitlcnI6CisJaWYgKHBkYXRhICE9IE5VTEwpCisJCWdwaW9fZnJlZShwZGF0YS0+cmVzZXRfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsbXMyODNnZjA1X3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBsbXMyODNnZjA1X3N0YXRlICpzdCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOworCXN0cnVjdCBsbXMyODNnZjA1X3BkYXRhICpwZGF0YSA9IHN0LT5zcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCisJbGNkX2RldmljZV91bnJlZ2lzdGVyKHN0LT5sZCk7CisKKwlpZiAocGRhdGEgIT0gTlVMTCkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5yZXNldF9ncGlvKTsKKworCWtmcmVlKHN0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbG1zMjgzZ2YwNV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibG1zMjgzZ2YwNSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IGxtczI4M2dmMDVfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChsbXMyODNnZjA1X3JlbW92ZSksCit9OworCitzdGF0aWMgX19pbml0IGludCBsbXMyODNnZjA1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbG1zMjgzZ2YwNV9kcml2ZXIpOworfQorCitzdGF0aWMgX19leGl0IHZvaWQgbG1zMjgzZ2YwNV9leGl0KHZvaWQpCit7CisJc3BpX3VucmVnaXN0ZXJfZHJpdmVyKCZsbXMyODNnZjA1X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxtczI4M2dmMDVfaW5pdCk7Cittb2R1bGVfZXhpdChsbXMyODNnZjA1X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMQ0QyODNHRjA1IExDRCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWJwX252aWRpYV9ibC5jCmluZGV4IDNiYjRjMGEuLjllZGI4ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21icF9udmlkaWFfYmwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYnBfbnZpZGlhX2JsLmMKQEAgLTE2Niw2ICsxNjYsMTUgQEAKIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDEsMSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rQWlyMSwxIiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJmludGVsX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rIDUsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTc1LDYgKzE4NCwxNSBAQAogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2sgNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2s1LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKIAkJLmlkZW50CQk9ICJNYWNCb29rQWlyIDIsMSIsCiAJCS5tYXRjaGVzCT0gewogCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLApAQCAtMTkxLDYgKzIwOSwyNCBAQAogCQl9LAogCQkuZHJpdmVyX2RhdGEJPSAodm9pZCAqKSZudmlkaWFfY2hpcHNldF9kYXRhLAogCX0sCisJeworCQkuY2FsbGJhY2sJPSBtYnBfZG1pX21hdGNoLAorCQkuaWRlbnQJCT0gIk1hY0Jvb2tQcm8gNSwyIiwKKwkJLm1hdGNoZXMJPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJBcHBsZSBJbmMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY0Jvb2tQcm81LDIiKSwKKwkJfSwKKwkJLmRyaXZlcl9kYXRhCT0gKHZvaWQgKikmbnZpZGlhX2NoaXBzZXRfZGF0YSwKKwl9LAorCXsKKwkJLmNhbGxiYWNrCT0gbWJwX2RtaV9tYXRjaCwKKwkJLmlkZW50CQk9ICJNYWNCb29rUHJvIDUsNSIsCisJCS5tYXRjaGVzCT0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQXBwbGUgSW5jLiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJNYWNCb29rUHJvNSw1IiksCisJCX0sCisJCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopJm52aWRpYV9jaGlwc2V0X2RhdGEsCisJfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvd204MzF4X2JsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY3YmRiNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L3dtODMxeF9ibC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODMxeCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdG9uaWNzIHBsYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzMXgvcmVndWxhdG9yLmg+CisKK3N0cnVjdCB3bTgzMXhfYmFja2xpZ2h0X2RhdGEgeworCXN0cnVjdCB3bTgzMXggKndtODMxeDsKKwlpbnQgaXNpbmtfcmVnOworCWludCBjdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IHdtODMxeF9iYWNrbGlnaHRfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkYXRhLT53bTgzMXg7CisJaW50IHBvd2VyX3VwID0gIWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyAmJiBicmlnaHRuZXNzOworCWludCBwb3dlcl9kb3duID0gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmICFicmlnaHRuZXNzOworCWludCByZXQ7CisKKwlpZiAocG93ZXJfdXApIHsKKwkJLyogRW5hYmxlIHRoZSBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9FTkEsIFdNODMxWF9DUzFfRU5BKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBFbmFibGUgdGhlIERDLURDICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQ0RDX0VOQUJMRSwKKwkJCQkgICAgICBXTTgzMVhfREM0X0VOQSwgV004MzFYX0RDNF9FTkEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKworCWlmIChwb3dlcl9kb3duKSB7CisJCS8qIERDREMgZmlyc3QgKi8KKwkJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLAorCQkJCSAgICAgIFdNODMxWF9EQzRfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKworCQkvKiBJU0lOSyAqLworCQlyZXQgPSB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBkYXRhLT5pc2lua19yZWcsCisJCQkJICAgICAgV004MzFYX0NTMV9EUklWRSB8IFdNODMxWF9DUzFfRU5BLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisKKwkvKiBTZXQgdGhlIG5ldyBicmlnaHRuZXNzICovCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgZGF0YS0+aXNpbmtfcmVnLAorCQkJICAgICAgV004MzFYX0NTMV9JU0VMX01BU0ssIGJyaWdodG5lc3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjsKKworCWlmIChwb3dlcl91cCkgeworCQkvKiBEcml2ZSBjdXJyZW50IHRocm91Z2ggdGhlIElTSU5LICovCisJCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywKKwkJCQkgICAgICBXTTgzMVhfQ1MxX0RSSVZFLCBXTTgzMVhfQ1MxX0RSSVZFKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCS8qIElmIHdlIHdlcmUgaW4gdGhlIG1pZGRsZSBvZiBhIHBvd2VyIHRyYW5zaXRpb24gYWx3YXlzIHNodXQgZG93bgorCSAqIGZvciBzYWZldHkuCisJICovCisJaWYgKHBvd2VyX3VwIHx8IHBvd2VyX2Rvd24pIHsKKwkJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0RDRENfRU5BQkxFLCBXTTgzMVhfREM0X0VOQSwgMCk7CisJCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIGRhdGEtPmlzaW5rX3JlZywgV004MzFYX0NTMV9FTkEsIDApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlpbnQgYnJpZ2h0bmVzcyA9IGJsLT5wcm9wcy5icmlnaHRuZXNzOworCisJaWYgKGJsLT5wcm9wcy5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLnN0YXRlICYgQkxfQ09SRV9TVVNQRU5ERUQpCisJCWJyaWdodG5lc3MgPSAwOworCisJcmV0dXJuIHdtODMxeF9iYWNrbGlnaHRfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXJldHVybiBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyB3bTgzMXhfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucyA9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkudXBkYXRlX3N0YXR1cwk9IHdtODMxeF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywKKwkuZ2V0X2JyaWdodG5lc3MJPSB3bTgzMXhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODMxeCAqd204MzF4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzMXhfcGRhdGEgKndtODMxeF9wZGF0YTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9wZGF0YSAqcGRhdGE7CisJc3RydWN0IHdtODMxeF9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJaW50IHJldCwgaSwgbWF4X2lzZWwsIGlzaW5rX3JlZywgZGNkY19jZmc7CisKKwkvKiBXZSBuZWVkIHBsYXRmb3JtIGRhdGEgKi8KKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQl3bTgzMXhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHdtODMxeF9wZGF0YS0+YmFja2xpZ2h0OworCX0gZWxzZSB7CisJCXBkYXRhID0gTlVMTDsKKwl9CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGaWd1cmUgb3V0IHRoZSBtYXhpbXVtIGN1cnJlbnQgd2UgY2FuIHVzZSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTgzMVhfSVNJTktfTUFYX0lTRUw7IGkrKykgeworCQlpZiAod204MzF4X2lzaW5rdl92YWx1ZXNbaV0gPiBwZGF0YS0+bWF4X3VBKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG1heF91QTogJWR1QVxuIiwgcGRhdGEtPm1heF91QSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltYXhfaXNlbCA9IGkgLSAxOworCisJaWYgKHBkYXRhLT5tYXhfdUEgIT0gd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJNYXhpbXVtIGN1cnJlbnQgaXMgJWR1QSBub3QgJWR1QSBhcyByZXF1ZXN0ZWRcbiIsCisJCQkgd204MzF4X2lzaW5rdl92YWx1ZXNbbWF4X2lzZWxdLCBwZGF0YS0+bWF4X3VBKTsKKworCXN3aXRjaCAocGRhdGEtPmlzaW5rKSB7CisJY2FzZSAxOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzE7CisJCWRjZGNfY2ZnID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpc2lua19yZWcgPSBXTTgzMVhfQ1VSUkVOVF9TSU5LXzI7CisJCWRjZGNfY2ZnID0gV004MzFYX0RDNF9GQlNSQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBJU0lOSyAlZFxuIiwgcGRhdGEtPmlzaW5rKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ29uZmlndXJlIHRoZSBJU0lOSyB0byB1c2UgZm9yIGZlZWRiYWNrICovCisJcmV0ID0gd204MzF4X3JlZ191bmxvY2sod204MzF4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9EQzRfQ09OVFJPTCwgV004MzFYX0RDNF9GQlNSQywKKwkJCSAgICAgIGRjZGNfY2ZnKTsKKworCXdtODMxeF9yZWdfbG9jayh3bTgzMXgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkYXRhLT53bTgzMXggPSB3bTgzMXg7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gMDsKKwlkYXRhLT5pc2lua19yZWcgPSBpc2lua19yZWc7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoIndtODMxeCIsICZwZGV2LT5kZXYsCisJCQlkYXRhLCAmd204MzF4X2JhY2tsaWdodF9vcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKworCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9pc2VsOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gbWF4X2lzZWw7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwkvKiBEaXNhYmxlIHRoZSBEQ0RDIGlmIGl0IHdhcyBzdGFydGVkIHNvIHdlIGNhbiBib290c3RyYXAgKi8KKwl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfRENEQ19FTkFCTEUsIFdNODMxWF9EQzRfRU5BLCAwKTsKKworCisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzF4X2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCisJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGJsKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzF4X2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIndtODMxeC1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSB3bTgzMXhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUJCT0gd204MzF4X2JhY2tsaWdodF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTgzMXhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzMXhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh3bTgzMXhfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204MzF4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndtODMxeF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODMxeF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgV004MzF4IFBNSUNzIik7CitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzMXgtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCmluZGV4IDVhNjg2Y2UuLjM2ODFjNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jCkBAIC0yMzExLDE0ICsyMzExLDExIEBACiAJCW9wcy0+Z3JhcGhpY3MgPSAxOwogCiAJCWlmICghYmxhbmspIHsKLQkJCWlmIChpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZSkKLQkJCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9zdGF0ZShpbmZvKTsKIAkJCXZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX05PVyB8IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCW9wcy0+Z3JhcGhpY3MgPSAwOwogCQkJb3BzLT52YXIgPSBpbmZvLT52YXI7Ci0JCX0gZWxzZSBpZiAoaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUpCi0JCQlpbmZvLT5mYm9wcy0+ZmJfcmVzdG9yZV9zdGF0ZShpbmZvKTsKKwkJfQogCX0KIAogIAlpZiAoIWZiY29uX2lzX2luYWN0aXZlKHZjLCBpbmZvKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IDQyZTEwMDUuLjAzNWQ1NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8dmlkZW8vZGE4eHgtZmIuaD4KQEAgLTcwNSw3ICs3MDQsNyBAQAogCiAJaWYgKGkgPT0gQVJSQVlfU0laRShrbm93bl9sY2RfcGFuZWxzKSkgewogCQlkZXZfZXJyKCZkZXZpY2UtPmRldiwgIkdMQ0Q6IE5vIHZhbGlkIHBhbmVsIGZvdW5kXG4iKTsKLQkJcmV0ID0gRU5PREVWOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKIAl9IGVsc2UKIAkJZGV2X2luZm8oJmRldmljZS0+ZGV2LCAiR0xDRDogRm91bmQgJXMgcGFuZWxcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKaW5kZXggMGE3YTY2Ny4uYzI3YWIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZmJfZGVmZXJyZWRfaW9fdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBmYl9kZWZlcnJlZF9pb192bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZiX2RlZmVycmVkX2lvX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBmYl9kZWZlcnJlZF9pb19ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBhMWYyZTdjLi45OWJiZDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogIAkJZ2xvYmFsID0gMTsKICAJfQogCi0gCWlmICghZ2xvYmFsICYmICFzdHJzdHIob3B0aW9ucywgImZiOiIpKSB7CisgCWlmICghZ2xvYmFsICYmICFzdHJjaHIob3B0aW9ucywgJzonKSkgewogIAkJZmJfbW9kZV9vcHRpb24gPSBvcHRpb25zOwogIAkJZ2xvYmFsID0gMTsKICAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaS5jCmluZGV4IGYyZGU1YTEuLjQ3NDQyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpLmMKQEAgLTI0LDExICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogI2luY2x1ZGUgIm1kZGlfaHcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jIGIvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfbnQzNTM5OS5jCmluZGV4IDljNzgwNTAuLmM5ZTkzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X250MzUzOTkuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF9udDM1Mzk5LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21zbV9mYi5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZGRpX2NsaWVudF90b3NoaWJhLmMKaW5kZXggODBkMGY1Zi4uNzEwNDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tc20vbWRkaV9jbGllbnRfdG9zaGliYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kZGlfY2xpZW50X3Rvc2hpYmEuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tc20vbWRwLmMgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwppbmRleCA5OTYzNmEyLi42YzUxOWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYworKysgYi9kcml2ZXJzL3ZpZGVvL21zbS9tZHAuYwpAQCAtMjIsOSArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaWZkZWYgQ09ORklHX0FORFJPSURfUE1FTQotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KIAogI2luY2x1ZGUgPG1hY2gvbXNtX2lvbWFwLmg+CkBAIC0yNjIsMTEgKzI1OSw2IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJdW5zaWduZWQgbG9uZyB2c3RhcnQ7CiAKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JaWYgKCFnZXRfcG1lbV9maWxlKGltZy0+bWVtb3J5X2lkLCBzdGFydCwgJnZzdGFydCwgbGVuLCBmaWxlcCkpCi0JCXJldHVybiAwOwotI2VuZGlmCi0KIAlmaWxlID0gZmdldF9saWdodChpbWctPm1lbW9yeV9pZCwgJnB1dF9uZWVkZWQpOwogCWlmIChmaWxlID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTI4MywxMiArMjc1LDYgQEAKIAogdm9pZCBwdXRfaW1nKHN0cnVjdCBmaWxlICpzcmNfZmlsZSwgc3RydWN0IGZpbGUgKmRzdF9maWxlKQogewotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQlpZiAoc3JjX2ZpbGUpCi0JCXB1dF9wbWVtX2ZpbGUoc3JjX2ZpbGUpOwotCWlmIChkc3RfZmlsZSkKLQkJcHV0X3BtZW1fZmlsZShkc3RfZmlsZSk7Ci0jZW5kaWYKIH0KIAogaW50IG1kcF9ibGl0KHN0cnVjdCBtZHBfZGV2aWNlICptZHBfZGV2LCBzdHJ1Y3QgZmJfaW5mbyAqZmIsCkBAIC0zMjAsOSArMzA2LDYgQEAKIAlpZiAodW5saWtlbHkoZ2V0X2ltZygmcmVxLT5kc3QsIGZiLCAmZHN0X3N0YXJ0LCAmZHN0X2xlbiwgJmRzdF9maWxlKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtcGRfcHBwOiBjb3VsZCBub3QgcmV0cmlldmUgZHN0IGltYWdlIGZyb20gIgogCQkJCSJtZW1vcnlcbiIpOwotI2lmZGVmIENPTkZJR19BTkRST0lEX1BNRU0KLQkJcHV0X3BtZW1fZmlsZShzcmNfZmlsZSk7Ci0jZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJm1kcF9tdXRleCk7CkBAIC00OTksNyArNDgyLDYgQEAKIAkvKiByZWdpc3RlciBtZHAgZGV2aWNlICovCiAJbWRwLT5tZHBfZGV2LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCW1kcC0+bWRwX2Rldi5kZXYuY2xhc3MgPSBtZHBfY2xhc3M7Ci0Jc25wcmludGYobWRwLT5tZHBfZGV2LmRldi5idXNfaWQsIEJVU19JRF9TSVpFLCAibWRwJWQiLCBwZGV2LT5pZCk7CiAKIAkvKiBpZiB5b3UgY2FuIHJlbW92ZSB0aGUgcGxhdGZvcm0gZGV2aWNlIHlvdSdkIGhhdmUgdG8gaW1wbGVtZW50CiAJICogdGhpczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYyBiL2RyaXZlcnMvdmlkZW8vbXNtL21kcF9wcHAuYwppbmRleCBiYTJjNDY3Li40ZmYwMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21zbS9tZHBfcHBwLmMKKysrIGIvZHJpdmVycy92aWRlby9tc20vbWRwX3BwcC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXNtX21kcC5oPgotI2luY2x1ZGUgPGxpbnV4L2FuZHJvaWRfcG1lbS5oPgogI2luY2x1ZGUgPG1hY2gvbXNtX2ZiLmg+CiAKICNpbmNsdWRlICJtZHBfaHcuaCIKQEAgLTU3OSwyNSArNTc4LDYgQEAKIHN0YXRpYyB2b2lkIGZsdXNoX2ltZ3Moc3RydWN0IG1kcF9ibGl0X3JlcSAqcmVxLCBzdHJ1Y3QgbWRwX3JlZ3MgKnJlZ3MsCiAJCSAgICAgICBzdHJ1Y3QgZmlsZSAqc3JjX2ZpbGUsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSkKIHsKLSNpZmRlZiBDT05GSUdfQU5EUk9JRF9QTUVNCi0JdWludDMyX3Qgc3JjMF9sZW4sIHNyYzFfbGVuLCBkc3QwX2xlbiwgZHN0MV9sZW47Ci0KLQkvKiBmbHVzaCBzcmMgaW1hZ2VzIHRvIG1lbW9yeSBiZWZvcmUgZG1hIHRvIG1kcCAqLwotCWdldF9sZW4oJnJlcS0+c3JjLCAmcmVxLT5zcmNfcmVjdCwgcmVncy0+c3JjX2JwcCwgJnNyYzBfbGVuLAotCQkmc3JjMV9sZW4pOwotCWZsdXNoX3BtZW1fZmlsZShzcmNfZmlsZSwgcmVxLT5zcmMub2Zmc2V0LCBzcmMwX2xlbik7Ci0JaWYgKElTX1BTRVVET1BMTlIocmVxLT5zcmMuZm9ybWF0KSkKLQkJZmx1c2hfcG1lbV9maWxlKHNyY19maWxlLCByZXEtPnNyYy5vZmZzZXQgKyBzcmMwX2xlbiwKLQkJCQlzcmMxX2xlbik7Ci0KLQkvKiBmbHVzaCBkc3QgaW1hZ2VzICovCi0JZ2V0X2xlbigmcmVxLT5kc3QsICZyZXEtPmRzdF9yZWN0LCByZWdzLT5kc3RfYnBwLCAmZHN0MF9sZW4sCi0JCSZkc3QxX2xlbik7Ci0JZmx1c2hfcG1lbV9maWxlKGRzdF9maWxlLCByZXEtPmRzdC5vZmZzZXQsIGRzdDBfbGVuKTsKLQlpZiAoSVNfUFNFVURPUExOUihyZXEtPmRzdC5mb3JtYXQpKQotCQlmbHVzaF9wbWVtX2ZpbGUoZHN0X2ZpbGUsIHJlcS0+ZHN0Lm9mZnNldCArIGRzdDBfbGVuLAotCQkJCWRzdDFfbGVuKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBnZXRfY2hyb21hX2FkZHIoc3RydWN0IG1kcF9pbWcgKmltZywgc3RydWN0IG1kcF9yZWN0ICpyZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwppbmRleCBkNWU1OTU1Li43MGRhZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwpAQCAtOTMsNyArOTMsNyBAQAogfTsKIAogLyogVGhlc2UgbmVlZCB0byBiZSBzYXZlZCAvIHJlc3RvcmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcmVzdC4gKi8KLXN0YXRpYyBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgYmxpenphcmRfcGxsX3JlZ3NbXSA9IHsKIAl7CiAJCS5zdGFydAk9IDB4MDQsCQkvKiBEb24ndCBzYXZlIFBMTCBjdHJsICgweDBDKSAqLwogCQkuZW5kCT0gMHgwYSwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0IGJsaXp6YXJkX2dlbl9yZWdzW10gPSB7CiAJewogCQkuc3RhcnQJPSAweDE4LAkJLyogU0RSQU0gY29udHJvbCAqLwogCQkuZW5kCT0gMHgyMCwKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAJc3RydWN0IG9tYXBmYl9kZXZpY2UJKmZiZGV2OwogCXN0cnVjdCBsY2RfY3RybF9leHRpZgkqZXh0aWY7Ci0Jc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CisJY29uc3Qgc3RydWN0IGxjZF9jdHJsCSppbnRfY3RybDsKIAogCXZvaWQJCQkoKnBvd2VyX3VwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCXZvaWQJCQkoKnBvd2VyX2Rvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCQkJICAgKDEgPDwgT01BUEZCX0NPTE9SX1lVVjQyMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9zYXZlX3JlZ3Moc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQorc3RhdGljIHZvaWQgX3NhdmVfcmVncyhjb25zdCBzdHJ1Y3QgYmxpenphcmRfcmVnX2xpc3QgKmxpc3QsIGludCBjbnQpCiB7CiAJaW50IGk7CiAKQEAgLTEzODMsNyArMTM4Myw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfcmVzdG9yZV9yZWdzKHN0cnVjdCBibGl6emFyZF9yZWdfbGlzdCAqbGlzdCwgaW50IGNudCkKK3N0YXRpYyB2b2lkIF9yZXN0b3JlX3JlZ3MoY29uc3Qgc3RydWN0IGJsaXp6YXJkX3JlZ19saXN0ICpsaXN0LCBpbnQgY250KQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCmluZGV4IDgwYTExZDAuLmYxNmU0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCWF0b21pY19kZWMoJmRpc3BjLm1hcF9jb3VudFtwbGFuZV0pOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG1tYXBfdXNlcl9vcHMgPSB7CiAJLm9wZW4gPSBtbWFwX3VzZXJfb3BlbiwKIAkuY2xvc2UgPSBtbWFwX3VzZXJfY2xvc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCAxMjVlNjA1Li4wZDBjOGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAgKiBTZXQgZmJfaW5mby5maXggZmllbGRzIGFuZCBhbHNvIHVwZGF0ZXMgZmJkZXYuCiAgKiBXaGVuIGNhbGxpbmcgdGhpcyBmYl9pbmZvLnZhciBtdXN0IGJlIHNldCB1cCBhbHJlYWR5LgogICovCi1zdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmkpCitzdGF0aWMgdm9pZCBzZXRfZmJfZml4KHN0cnVjdCBmYl9pbmZvICpmYmksIGludCBmcm9tX2luaXQpCiB7CiAJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CiAJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CkBAIC00MDMsMTAgKzQwMywxNiBAQAogCiAJcmcgPSAmcGxhbmUtPmZiZGV2LT5tZW1fZGVzYy5yZWdpb25bcGxhbmUtPmlkeF07CiAJZmJpLT5zY3JlZW5fYmFzZQk9IHJnLT52YWRkcjsKLQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOwotCWZpeC0+c21lbV9zdGFydAkJPSByZy0+cGFkZHI7Ci0JZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKLQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisKKwlpZiAoIWZyb21faW5pdCkgeworCQltdXRleF9sb2NrKCZmYmktPm1tX2xvY2spOworCQlmaXgtPnNtZW1fc3RhcnQJCT0gcmctPnBhZGRyOworCQlmaXgtPnNtZW1fbGVuCQk9IHJnLT5zaXplOworCQltdXRleF91bmxvY2soJmZiaS0+bW1fbG9jayk7CisJfSBlbHNlIHsKKwkJZml4LT5zbWVtX3N0YXJ0CQk9IHJnLT5wYWRkcjsKKwkJZml4LT5zbWVtX2xlbgkJPSByZy0+c2l6ZTsKKwl9CiAKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJYnBwID0gdmFyLT5iaXRzX3Blcl9waXhlbDsKQEAgLTcwNCw3ICs3MTAsNyBAQAogCWludCByID0gMDsKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7Ci0Jc2V0X2ZiX2ZpeChmYmkpOworCXNldF9mYl9maXgoZmJpLCAwKTsKIAlyID0gY3RybF9jaGFuZ2VfbW9kZShmYmkpOwogCW9tYXBmYl9ycXVldWVfdW5sb2NrKGZiZGV2KTsKIApAQCAtOTA0LDcgKzkxMCw3IEBACiAJCWlmIChvbGRfc2l6ZSAhPSBzaXplKSB7CiAJCQlpZiAoc2l6ZSkgewogCQkJCW1lbWNweSgmZmJpLT52YXIsIG5ld192YXIsIHNpemVvZihmYmktPnZhcikpOwotCQkJCXNldF9mYl9maXgoZmJpKTsKKwkJCQlzZXRfZmJfZml4KGZiaSwgMCk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogU2V0IHRoZXNlIGV4cGxpY2l0bHkgdG8gaW5kaWNhdGUgdGhhdCB0aGUKQEAgLTE1MDQsNyArMTUxMCw3IEBACiAJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGZiZGV2LT5wYW5lbC0+YnBwOwogCiAJc2V0X2ZiX3ZhcihpbmZvLCB2YXIpOwotCXNldF9mYl9maXgoaW5mbyk7CisJc2V0X2ZiX2ZpeChpbmZvLCAxKTsKIAogCXIgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAxNiwgMCk7CiAJaWYgKHIgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCA2NTA2MTE3Li4xODIwYzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC0xNjM4LDI0ICsxNjM4LDI2IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0RJU0FCTEVfUE0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19FTkFCTEVfUE0pOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgcHhhZmJfc3VzcGVuZAlOVUxMCi0jZGVmaW5lIHB4YWZiX3Jlc3VtZQlOVUxMCisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBweGFmYl9wbV9vcHMgPSB7CisJLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAorfTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBweGFmYl9pbml0X3ZpZGVvX21lbW9yeShzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpKQpAQCAtMjA4MSw2ICsyMDgzLDkgQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCisJaWYgKGNwdV9pc19weGEzeHgoKSAmJiBpbmYtPmFjY2VsZXJhdGlvbl9lbmFibGVkKQorCQlmYmktPmZiLmZpeC5hY2NlbCA9IEZCX0FDQ0VMX1BYQTNYWDsKKwogCWZiaS0+YmFja2xpZ2h0X3Bvd2VyID0gaW5mLT5weGFmYl9iYWNrbGlnaHRfcG93ZXI7CiAJZmJpLT5sY2RfcG93ZXIgPSBpbmYtPnB4YWZiX2xjZF9wb3dlcjsKIApAQCAtMjA5MSwxNCArMjA5NiwxNCBAQAogCQlnb3RvIGZhaWxlZF9mYmk7CiAJfQogCi0JciA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCBkZXYtPm5hbWUpOworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIGRldi0+bmFtZSk7CiAJaWYgKHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbGVkX2ZiaTsKIAl9CiAKLQlmYmktPm1taW9fYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJZmJpLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoZmJpLT5tbWlvX2Jhc2UgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byBtYXAgSS9PIG1lbW9yeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKQEAgLTIxOTcsNyArMjIwMiw3IEBACiBmYWlsZWRfZnJlZV9pbzoKIAlpb3VubWFwKGZiaS0+bW1pb19iYXNlKTsKIGZhaWxlZF9mcmVlX3JlczoKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIGZhaWxlZF9mYmk6CiAJY2xrX3B1dChmYmktPmNsayk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKQEAgLTIyMzcsNyArMjI0Miw3IEBACiAJaW91bm1hcChmYmktPm1taW9fYmFzZSk7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOwogCiAJY2xrX3B1dChmYmktPmNsayk7CiAJa2ZyZWUoZmJpKTsKQEAgLTIyNDgsMTEgKzIyNTMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YWZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhZmJfcHJvYmUsCiAJLnJlbW92ZSAJPSBfX2RldmV4aXRfcChweGFmYl9yZW1vdmUpLAotCS5zdXNwZW5kCT0gcHhhZmJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHB4YWZiX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInB4YTJ4eC1mYiIsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGFmYl9wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAzN2IxMzVkLi44NDJkMTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMTU2NSw3ICsxNTY1LDcgQEAKIAkJdmdhX291dDgoMHgzYzUsIHNyOCwgcGFyKTsKIAkJdmdhX291dDgoMHgzYzQsIDB4MGQsIHBhcik7CiAJCXNyZCA9IHZnYV9pbjgoMHgzYzUsIHBhcik7Ci0JCXNyZCAmPSAweDAzOworCQlzcmQgJj0gMHg1MDsKIAogCQlzd2l0Y2ggKGJsYW5rKSB7CiAJCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKQEAgLTE2MDYsMjIgKzE2MDYsNiBAQAogCXJldHVybiAoYmxhbmsgPT0gRkJfQkxBTktfTk9STUFMKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYXZhZ2VmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQotCXNhdmFnZV9nZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLX0KLQotc3RhdGljIHZvaWQgc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7Ci0KLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGluZm8pOwotCXNhdmFnZV9zZXRfZGVmYXVsdF9wYXIocGFyLCAmcGFyLT5zYXZlKTsKLQlzYXZhZ2VmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKLX0KLQogc3RhdGljIGludCBzYXZhZ2VmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKIAlzdHJ1Y3Qgc2F2YWdlZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CkBAIC0xNjY3LDggKzE2NTEsNiBAQAogCS5mYl9zZXRjb2xyZWcgICA9IHNhdmFnZWZiX3NldGNvbHJlZywKIAkuZmJfcGFuX2Rpc3BsYXkgPSBzYXZhZ2VmYl9wYW5fZGlzcGxheSwKIAkuZmJfYmxhbmsgICAgICAgPSBzYXZhZ2VmYl9ibGFuaywKLQkuZmJfc2F2ZV9zdGF0ZSAgPSBzYXZhZ2VmYl9zYXZlX3N0YXRlLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gc2F2YWdlZmJfcmVzdG9yZV9zdGF0ZSwKICNpZiBkZWZpbmVkKENPTkZJR19GQl9TQVZBR0VfQUNDRUwpCiAJLmZiX2ZpbGxyZWN0ICAgID0gc2F2YWdlZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhICAgID0gc2F2YWdlZmJfY29weWFyZWEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3V2ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCmluZGV4IGUzNTIzMmEuLjU0ZmJiMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCkBAIC0xNDExLDIzICsxNDExLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZlc2FmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JaWYgKHBhci0+dmJlX3N0YXRlX3NhdmVkKQotCQlrZnJlZShwYXItPnZiZV9zdGF0ZV9zYXZlZCk7Ci0KLQlwYXItPnZiZV9zdGF0ZV9zYXZlZCA9IHV2ZXNhZmJfdmJlX3N0YXRlX3NhdmUocGFyKTsKLX0KLQotc3RhdGljIHZvaWQgdXZlc2FmYl9yZXN0b3JlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCi0JdXZlc2FmYl92YmVfc3RhdGVfcmVzdG9yZShwYXIsIHBhci0+dmJlX3N0YXRlX3NhdmVkKTsKLX0KLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgdXZlc2FmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5mYl9vcGVuCT0gdXZlc2FmYl9vcGVuLApAQCAtMTQ0MSw4ICsxNDI0LDYgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIAkuZmJfY2hlY2tfdmFyCT0gdXZlc2FmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSB1dmVzYWZiX3NldF9wYXIsCi0JLmZiX3NhdmVfc3RhdGUJPSB1dmVzYWZiX3NhdmVfc3RhdGUsCi0JLmZiX3Jlc3RvcmVfc3RhdGUgPSB1dmVzYWZiX3Jlc3RvcmVfc3RhdGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdXZlc2FmYl9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0xNDU5LDE1ICsxNDQwLDYgQEAKIAlpbmZvLT5maXgueXBhbnN0ZXAgPSBwYXItPnlwYW4gPyAxIDogMDsKIAlpbmZvLT5maXgueXdyYXBzdGVwID0gKHBhci0+eXBhbiA+IDEpID8gMSA6IDA7CiAKLQkvKgotCSAqIElmIHdlIHdlcmUgdW5hYmxlIHRvIGdldCB0aGUgc3RhdGUgYnVmZmVyIHNpemUsIGRpc2FibGUKLQkgKiBmdW5jdGlvbnMgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRoZSBoYXJkd2FyZSBzdGF0ZS4KLQkgKi8KLQlpZiAocGFyLT52YmVfc3RhdGVfc2l6ZSA9PSAwKSB7Ci0JCWluZm8tPmZib3BzLT5mYl9zYXZlX3N0YXRlID0gTlVMTDsKLQkJaW5mby0+ZmJvcHMtPmZiX3Jlc3RvcmVfc3RhdGUgPSBOVUxMOwotCX0KLQogCS8qIERpc2FibGUgYmxhbmtpbmcgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIHNvLiAqLwogCWlmICghYmxhbmspCiAJCWluZm8tPmZib3BzLT5mYl9ibGFuayA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX2JhbGxvb24uYwppbmRleCAyMDBjMjJmLi45ZGQ1ODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19iYWxsb29uLmMKQEAgLTE5LDcgKzE5LDYgQEAKICAqLwogLy8jZGVmaW5lIERFQlVHCiAjaW5jbHVkZSA8bGludXgvdmlydGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19iYWxsb29uLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTI0OCw3ICsyNDcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHZpcnRiYWxsb29uX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0YmFsbG9vbl9yZW1vdmUoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZpcnRpb19iYWxsb29uICp2YiA9IHZkZXYtPnByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0YTFmMWViLi4yOGQ5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01MzAsMTkgKzUzMCwyMiBAQAogCQkJZXJyID0gUFRSX0VSUih2cXNbaV0pOwogCQkJZ290byBlcnJvcl9maW5kOwogCQl9CisKKwkJaWYgKCF2cF9kZXYtPnBlcl92cV92ZWN0b3JzIHx8IG1zaXhfdmVjID09IFZJUlRJT19NU0lfTk9fVkVDVE9SKQorCQkJY29udGludWU7CisKIAkJLyogYWxsb2NhdGUgcGVyLXZxIGlycSBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCQlpZiAodnBfZGV2LT5wZXJfdnFfdmVjdG9ycykgewotCQkJc25wcmludGYodnBfZGV2LT5tc2l4X25hbWVzW21zaXhfdmVjXSwKLQkJCQkgc2l6ZW9mICp2cF9kZXYtPm1zaXhfbmFtZXMsCi0JCQkJICIlcy0lcyIsCi0JCQkJIGRldl9uYW1lKCZ2cF9kZXYtPnZkZXYuZGV2KSwgbmFtZXNbaV0pOwotCQkJZXJyID0gcmVxdWVzdF9pcnEobXNpeF92ZWMsIHZyaW5nX2ludGVycnVwdCwgMCwKLQkJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAotCQkJCQkgIHZxc1tpXSk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJdnBfZGVsX3ZxKHZxc1tpXSk7Ci0JCQkJZ290byBlcnJvcl9maW5kOwotCQkJfQorCQlzbnByaW50Zih2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJIHNpemVvZiAqdnBfZGV2LT5tc2l4X25hbWVzLAorCQkJICIlcy0lcyIsCisJCQkgZGV2X25hbWUoJnZwX2Rldi0+dmRldi5kZXYpLCBuYW1lc1tpXSk7CisJCWVyciA9IHJlcXVlc3RfaXJxKHZwX2Rldi0+bXNpeF9lbnRyaWVzW21zaXhfdmVjXS52ZWN0b3IsCisJCQkJICB2cmluZ19pbnRlcnJ1cHQsIDAsCisJCQkJICB2cF9kZXYtPm1zaXhfbmFtZXNbbXNpeF92ZWNdLAorCQkJCSAgdnFzW2ldKTsKKwkJaWYgKGVycikgeworCQkJdnBfZGVsX3ZxKHZxc1tpXSk7CisJCQlnb3RvIGVycm9yX2ZpbmQ7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYwppbmRleCBmNTM2MDA1Li5mYmQyZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCisrKyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKQEAgLTI4NSw2ICsyODUsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwkvKiBPbmx5IGdldCB1c2VkIGFycmF5IGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBob3N0LiAqLworCXJtYigpOworCiAJaSA9IHZxLT52cmluZy51c2VkLT5yaW5nW3ZxLT5sYXN0X3VzZWRfaWR4JXZxLT52cmluZy5udW1dLmlkOwogCSpsZW4gPSB2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCV2cS0+dnJpbmcubnVtXS5sZW47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwppbmRleCBkZjUyY2IzLi40MDZjYWE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczI0ODIuYwpAQCAtMjQsMTkgKzI0LDYgQEAKICNpbmNsdWRlICIuLi93MV9pbnQuaCIKIAogLyoqCi0gKiBBZGRyZXNzIGlzIHNlbGVjdGVkIHVzaW5nIDIgcGlucywgcmVzdWx0aW5nIGluIDQgcG9zc2libGUgYWRkcmVzc2VzLgotICogIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIKLSAqIEhvd2V2ZXIsIHRoZSBjaGlwIGNhbm5vdCBiZSBkZXRlY3RlZCB3aXRob3V0IGRvaW5nIGFuIGkyYyB3cml0ZSwKLSAqIHNvIHVzZSB0aGUgZm9yY2UgbW9kdWxlIHBhcmFtZXRlci4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKLQotLyoqCi0gKiBJbnNtb2QgcGFyYW1ldGVycwotICovCi1JMkNfQ0xJRU5UX0lOU01PRF8xKGRzMjQ4Mik7Ci0KLS8qKgogICogVGhlIERTMjQ4MiByZWdpc3RlcnMgLSB0aGVyZSBhcmUgMyByZWdpc3RlcnMgdGhhdCBhcmUgYWRkcmVzc2VkIGJ5IGEgcmVhZAogICogcG9pbnRlci4gVGhlIHJlYWQgcG9pbnRlciBpcyBzZXQgYnkgdGhlIGxhc3QgY29tbWFuZCBleGVjdXRlZC4KICAqCkBAIC05Niw4ICs4Myw2IEBACiAKIHN0YXRpYyBpbnQgZHMyNDgyX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBkczI0ODJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGRzMjQ4Ml9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAKIApAQCAtMTE3LDggKzEwMiw2IEBACiAJLnByb2JlCQk9IGRzMjQ4Ml9wcm9iZSwKIAkucmVtb3ZlCQk9IGRzMjQ4Ml9yZW1vdmUsCiAJLmlkX3RhYmxlCT0gZHMyNDgyX2lkLAotCS5kZXRlY3QJCT0gZHMyNDgyX2RldGVjdCwKLQkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKIH07CiAKIC8qCkBAIC00MjUsMTkgKzQwOCw2IEBACiB9CiAKIAotc3RhdGljIGludCBkczI0ODJfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKLQkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8Ci0JCQkJICAgICBJMkNfRlVOQ19TTUJVU19CWVRFKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJkczI0ODIiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGRzMjQ4Ml9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtNDQ2LDYgKzQxNiwxMSBAQAogCWludCB0ZW1wMTsKIAlpbnQgaWR4OwogCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEgfAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQllURSkpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkczI0ODJfZGF0YSksIEdGUF9LRVJORUwpKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKaW5kZXggZmYzZWI4Zi4uMzcxMWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpAQCAtMjgyLDYgKzI4MiwxMyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbnVjOTAwX3dkdC4KIAorY29uZmlnIEFEWF9XQVRDSERPRworCXRyaXN0YXRlICJBdmlvbmljIERlc2lnbiBYYW50aG9zIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gQVJDSF9QWEFfQURYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgb24gQXZpb25pYworCSAgRGVzaWduIFhhbnRob3MgYm9hcmRzLgorCiAjIEFWUjMyIEFyY2hpdGVjdHVyZQogCiBjb25maWcgQVQzMkFQNzAwWF9XRFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDM0OGIzYjguLjY5OTE5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtNDUsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX0NPSDkwMTMyN19XQVRDSERPRykgKz0gY29oOTAxMzI3X3dkdC5vCiBvYmotJChDT05GSUdfU1RNUDNYWFhfV0FUQ0hET0cpICs9IHN0bXAzeHh4X3dkdC5vCiBvYmotJChDT05GSUdfTlVDOTAwX1dBVENIRE9HKSArPSBudWM5MDBfd2R0Lm8KK29iai0kKENPTkZJR19BRFhfV0FUQ0hET0cpICs9IGFkeF93ZHQubwogCiAjIEFWUjMyIEFyY2hpdGVjdHVyZQogb2JqLSQoQ09ORklHX0FUMzJBUDcwMFhfV0RUKSArPSBhdDMyYXA3MDB4X3dkdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YWZiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FkeF93ZHQuYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEF2aW9uaWMgRGVzaWduIEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisKKyNkZWZpbmUgV0FUQ0hET0dfTkFNRSAiYWR4LXdkdCIKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZQlBRFhfV0RUX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJQURYX1dEVF9DT05UUk9MX0VOQUJMRQkoMSA8PCAwKQorI2RlZmluZQlBRFhfV0RUX0NPTlRST0xfblJFU0VUCSgxIDw8IDEpCisjZGVmaW5lCUFEWF9XRFRfVElNRU9VVAkJMHgwOAorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYWR4X3dkdF9kZXY7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBkcml2ZXJfb3BlbjsKKworI2RlZmluZQlXRFRfU1RBVEVfU1RPUAkwCisjZGVmaW5lCVdEVF9TVEFURV9TVEFSVAkxCisKK3N0cnVjdCBhZHhfd2R0IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXVuc2lnbmVkIGludCBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgd2FrZTsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gYWR4X3dkdF9pbmZvID0geworCS5pZGVudGl0eSA9ICJBdmlvbmljIERlc2lnbiBYYW50aG9zIFdhdGNoZG9nIiwKKwkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAorfTsKKworc3RhdGljIHZvaWQgYWR4X3dkdF9zdGFydF9sb2NrZWQoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1MzIgY3RybDsKKworCWN0cmwgPSByZWFkbCh3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCWN0cmwgfD0gQURYX1dEVF9DT05UUk9MX0VOQUJMRTsKKwl3cml0ZWwoY3RybCwgd2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwl3ZHQtPnN0YXRlID0gV0RUX1NUQVRFX1NUQVJUOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0YXJ0KHN0cnVjdCBhZHhfd2R0ICp3ZHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKKwlhZHhfd2R0X3N0YXJ0X2xvY2tlZCh3ZHQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBhZHhfd2R0X3N0b3BfbG9ja2VkKHN0cnVjdCBhZHhfd2R0ICp3ZHQpCit7CisJdTMyIGN0cmw7CisKKwljdHJsID0gcmVhZGwod2R0LT5iYXNlICsgQURYX1dEVF9DT05UUk9MKTsKKwljdHJsICY9IH5BRFhfV0RUX0NPTlRST0xfRU5BQkxFOworCXdyaXRlbChjdHJsLCB3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCXdkdC0+c3RhdGUgPSBXRFRfU1RBVEVfU1RPUDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9zdG9wKHN0cnVjdCBhZHhfd2R0ICp3ZHQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKKwlhZHhfd2R0X3N0b3BfbG9ja2VkKHdkdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc2V0X3RpbWVvdXQoc3RydWN0IGFkeF93ZHQgKndkdCwgdW5zaWduZWQgbG9uZyBzZWNvbmRzKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IHNlY29uZHMgKiAxMDAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHN0YXRlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCXN0YXRlID0gd2R0LT5zdGF0ZTsKKwlhZHhfd2R0X3N0b3BfbG9ja2VkKHdkdCk7CisJd3JpdGVsKHRpbWVvdXQsIHdkdC0+YmFzZSArIEFEWF9XRFRfVElNRU9VVCk7CisKKwlpZiAoc3RhdGUgPT0gV0RUX1NUQVRFX1NUQVJUKQorCQlhZHhfd2R0X3N0YXJ0X2xvY2tlZCh3ZHQpOworCisJd2R0LT50aW1lb3V0ID0gdGltZW91dDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9nZXRfdGltZW91dChzdHJ1Y3QgYWR4X3dkdCAqd2R0LCB1bnNpZ25lZCBsb25nICpzZWNvbmRzKQoreworCSpzZWNvbmRzID0gd2R0LT50aW1lb3V0IC8gMTAwMDsKK30KKworc3RhdGljIHZvaWQgYWR4X3dkdF9rZWVwYWxpdmUoc3RydWN0IGFkeF93ZHQgKndkdCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndkdC0+bG9jaywgZmxhZ3MpOworCXdyaXRlbCh3ZHQtPnRpbWVvdXQsIHdkdC0+YmFzZSArIEFEWF9XRFRfVElNRU9VVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgYWR4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShhZHhfd2R0X2Rldik7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmZHJpdmVyX29wZW4pKQorCQlyZXR1cm4gLUVCVVNZOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gd2R0OworCWFkeF93ZHRfc2V0X3RpbWVvdXQod2R0LCAzMCk7CisJYWR4X3dkdF9zdGFydCh3ZHQpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IGFkeF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJYWR4X3dkdF9zdG9wKHdkdCk7CisJY2xlYXJfYml0KDAsICZkcml2ZXJfb3Blbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgYWR4X3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwl1bnNpZ25lZCBsb25nIF9fdXNlciAqcCA9IGFyZ3A7CisJdW5zaWduZWQgbG9uZyBzZWNvbmRzID0gMDsKKwl1bnNpZ25lZCBpbnQgb3B0aW9uczsKKwlsb25nIHJldCA9IC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmYWR4X3dkdF9pbmZvLCBzaXplb2YoYWR4X3dkdF9pbmZvKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldHVybiBwdXRfdXNlcigwLCBwKTsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlhZHhfd2R0X2tlZXBhbGl2ZSh3ZHQpOworCQlyZXR1cm4gMDsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKHNlY29uZHMsIHApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYWR4X3dkdF9zZXRfdGltZW91dCh3ZHQsIHNlY29uZHMpOworCisJCS8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlhZHhfd2R0X2dldF90aW1lb3V0KHdkdCwgJnNlY29uZHMpOworCQlyZXR1cm4gcHV0X3VzZXIoc2Vjb25kcywgcCk7CisKKwljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmb3B0aW9ucywgYXJncCwgc2l6ZW9mKG9wdGlvbnMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWlmIChvcHRpb25zICYgV0RJT1NfRElTQUJMRUNBUkQpIHsKKwkJCWFkeF93ZHRfc3RvcCh3ZHQpOworCQkJcmV0ID0gMDsKKwkJfQorCisJCWlmIChvcHRpb25zICYgV0RJT1NfRU5BQkxFQ0FSRCkgeworCQkJYWR4X3dkdF9zdGFydCh3ZHQpOworCQkJcmV0ID0gMDsKKwkJfQorCisJCXJldHVybiByZXQ7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT1RUWTsKK30KKworc3RhdGljIHNzaXplX3QgYWR4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGxlbikKKwkJYWR4X3dkdF9rZWVwYWxpdmUod2R0KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkeF93ZHRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gbm9fbGxzZWVrLAorCS5vcGVuID0gYWR4X3dkdF9vcGVuLAorCS5yZWxlYXNlID0gYWR4X3dkdF9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGFkeF93ZHRfaW9jdGwsCisJLndyaXRlID0gYWR4X3dkdF93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBhZHhfd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yID0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUgPSAid2F0Y2hkb2ciLAorCS5mb3BzID0gJmFkeF93ZHRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkeF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0OworCWludCByZXQgPSAwOworCXUzMiBjdHJsOworCisJd2R0ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqd2R0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3ZHQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIFdEVCBzdHJ1Y3R1cmVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmd2R0LT5sb2NrKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBJL08gbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXdkdC0+YmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIXdkdC0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCS8qIGRpc2FibGUgd2F0Y2hkb2cgYW5kIHJlYm9vdCBvbiB0aW1lb3V0ICovCisJY3RybCA9IHJlYWRsKHdkdC0+YmFzZSArIEFEWF9XRFRfQ09OVFJPTCk7CisJY3RybCAmPSB+QURYX1dEVF9DT05UUk9MX0VOQUJMRTsKKwljdHJsICY9IH5BRFhfV0RUX0NPTlRST0xfblJFU0VUOworCXdyaXRlbChjdHJsLCB3ZHQtPmJhc2UgKyBBRFhfV0RUX0NPTlRST0wpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd2R0KTsKKwlhZHhfd2R0X2RldiA9IHBkZXY7CisKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZhZHhfd2R0X21pc2NkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3IgJWQgIgorCQkJCSIoZXJyPSVkKVxuIiwgV0FUQ0hET0dfTUlOT1IsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkeF93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWlzY19kZXJlZ2lzdGVyKCZhZHhfd2R0X21pc2NkZXYpOworCWFkeF93ZHRfc3RvcCh3ZHQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkeF93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJYWR4X3dkdF9zdG9wKHdkdCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWR4X3dkdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGFkeF93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJd2R0LT53YWtlID0gKHdkdC0+c3RhdGUgPT0gV0RUX1NUQVRFX1NUQVJUKSA/IDEgOiAwOworCWFkeF93ZHRfc3RvcCh3ZHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR4X3dkdF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgYWR4X3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAod2R0LT53YWtlKQorCQlhZHhfd2R0X3N0YXJ0KHdkdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIGFkeF93ZHRfcG1fb3BzID0geworCS5zdXNwZW5kID0gYWR4X3dkdF9zdXNwZW5kLAorCS5yZXN1bWUgPSBhZHhfd2R0X3Jlc3VtZSwKK307CisKKyMgIGRlZmluZSBBRFhfV0RUX1BNX09QUwkoJmFkeF93ZHRfcG1fb3BzKQorI2Vsc2UKKyMgIGRlZmluZSBBRFhfV0RUX1BNX09QUwlOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWR4X3dkdF9kcml2ZXIgPSB7CisJLnByb2JlID0gYWR4X3dkdF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoYWR4X3dkdF9yZW1vdmUpLAorCS5zaHV0ZG93biA9IGFkeF93ZHRfc2h1dGRvd24sCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBXQVRDSERPR19OQU1FLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLnBtID0gQURYX1dEVF9QTV9PUFMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFkeF93ZHRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFkeF93ZHRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFkeF93ZHRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhZHhfd2R0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFkeF93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChhZHhfd2R0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkF2aW9uaWMgRGVzaWduIFhhbnRob3MgV2F0Y2hkb2cgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJUaGllcnJ5IFJlZGluZyA8dGhpZXJyeS5yZWRpbmdAYXZpb25pYy1kZXNpZ24uZGU+Iik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKaW5kZXggMWU4ZjAyZi4uZDNjODI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIHApOwogCXJpb3dkX2RldmljZSA9IHA7Ci0JZXJyID0gMDsKKwlyZXR1cm4gMDsKIAogb3V0X2lvdW5tYXA6CiAJb2ZfaW91bm1hcCgmb3AtPnJlc291cmNlWzBdLCBwLT5yZWdzLCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYwppbmRleCA4NTJjYTE5Li45MTQzMGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAl9CiAKIAllcnIgPSBtaXNjX3JlZ2lzdGVyKCZmaXRwYzJfd2R0X21pc2NkZXYpOwotCWlmICghZXJyKSB7CisJaWYgKGVycikgewogCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJCQkJCVdBVENIRE9HX01JTk9SLCBlcnIpOwogCQlnb3RvIGVycl9tYXJnaW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi94ZW5mcy94ZW5idXMuYyBiL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCmluZGV4IGE5NTkyZDkuLjZjNDI2OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCisrKyBiL2RyaXZlcnMveGVuL3hlbmZzL3hlbmJ1cy5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggODczY2QzMS4uMTVjY2U1MyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtNDAsNiArNDAsMjQgQEAKICNpbmNsdWRlICJmaWQuaCIKIAogLyoqCisgKiBzdHJ1Y3QgcDlfcmRpciAtIHJlYWRkaXIgYWNjb3VudGluZworICogQG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHJlYWRkaXIKKyAqIEBoZWFkOiBzdGFydCBvZmZzZXQgb2YgY3VycmVudCBkaXJyZWFkIGJ1ZmZlcgorICogQHRhaWw6IGVuZCBvZmZzZXQgb2YgY3VycmVudCBkaXJyZWFkIGJ1ZmZlcgorICogQGJ1ZjogZGlycmVhZCBidWZmZXIKKyAqCisgKiBwcml2YXRlIHN0cnVjdHVyZSBmb3Iga2VlcGluZyB0cmFjayBvZiByZWFkZGlyCisgKiBhbGxvY2F0ZWQgb24gZGVtYW5kCisgKi8KKworc3RydWN0IHA5X3JkaXIgeworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlpbnQgaGVhZDsKKwlpbnQgdGFpbDsKKwl1aW50OF90ICpidWY7Cit9OworCisvKioKICAqIGR0X3R5cGUgLSByZXR1cm4gZmlsZSB0eXBlCiAgKiBAbWlzdGF0OiBtaXN0YXQgc3RydWN0dXJlCiAgKgpAQCAtNzAsNTYgKzg4LDc5IEBACiB7CiAJaW50IG92ZXI7CiAJc3RydWN0IHA5X3dzdGF0IHN0OwotCWludCBlcnI7CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCWludCBidWZsZW47Ci0JY2hhciAqc3RhdGJ1ZjsKLQlpbnQgbiwgaSA9IDA7CisJaW50IHJlY2xlbiA9IDA7CisJc3RydWN0IHA5X3JkaXIgKnJkaXI7CiAKIAlQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIm5hbWUgJXNcbiIsIGZpbHAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlmaWQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAKIAlidWZsZW4gPSBmaWQtPmNsbnQtPm1zaXplIC0gUDlfSU9IRFJTWjsKLQlzdGF0YnVmID0ga21hbGxvYyhidWZsZW4sIEdGUF9LRVJORUwpOwotCWlmICghc3RhdGJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CiAKLQl3aGlsZSAoMSkgewotCQllcnIgPSB2OWZzX2ZpbGVfcmVhZG4oZmlscCwgc3RhdGJ1ZiwgTlVMTCwgYnVmbGVuLAotCQkJCQkJCQlmaWQtPnJkaXJfZnBvcyk7Ci0JCWlmIChlcnIgPD0gMCkKLQkJCWJyZWFrOworCS8qIGFsbG9jYXRlIHJkaXIgb24gZGVtYW5kICovCisJaWYgKCFmaWQtPnJkaXIpIHsKKwkJcmRpciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwOV9yZGlyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CiAKLQkJbiA9IGVycjsKLQkJd2hpbGUgKGkgPCBuKSB7Ci0JCQllcnIgPSBwOXN0YXRfcmVhZChzdGF0YnVmICsgaSwgYnVmbGVuLWksICZzdCwKLQkJCQkJCQlmaWQtPmNsbnQtPmRvdHUpOworCQlpZiAocmRpciA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBleGl0OworCQl9CisJCXNwaW5fbG9jaygmZmlscC0+Zl9kZW50cnktPmRfbG9jayk7CisJCWlmICghZmlkLT5yZGlyKSB7CisJCQlyZGlyLT5idWYgPSAodWludDhfdCAqKXJkaXIgKyBzaXplb2Yoc3RydWN0IHA5X3JkaXIpOworCQkJbXV0ZXhfaW5pdCgmcmRpci0+bXV0ZXgpOworCQkJcmRpci0+aGVhZCA9IHJkaXItPnRhaWwgPSAwOworCQkJZmlkLT5yZGlyID0gKHZvaWQgKikgcmRpcjsKKwkJCXJkaXIgPSBOVUxMOworCQl9CisJCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2RlbnRyeS0+ZF9sb2NrKTsKKwkJa2ZyZWUocmRpcik7CisJfQorCXJkaXIgPSAoc3RydWN0IHA5X3JkaXIgKikgZmlkLT5yZGlyOworCisJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZyZGlyLT5tdXRleCk7CisJd2hpbGUgKGVyciA9PSAwKSB7CisJCWlmIChyZGlyLT50YWlsID09IHJkaXItPmhlYWQpIHsKKwkJCWVyciA9IHY5ZnNfZmlsZV9yZWFkbihmaWxwLCByZGlyLT5idWYsIE5VTEwsCisJCQkJCQkJYnVmbGVuLCBmaWxwLT5mX3Bvcyk7CisJCQlpZiAoZXJyIDw9IDApCisJCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisKKwkJCXJkaXItPmhlYWQgPSAwOworCQkJcmRpci0+dGFpbCA9IGVycjsKKwkJfQorCisJCXdoaWxlIChyZGlyLT5oZWFkIDwgcmRpci0+dGFpbCkgeworCQkJZXJyID0gcDlzdGF0X3JlYWQocmRpci0+YnVmICsgcmRpci0+aGVhZCwKKwkJCQkJCWJ1ZmxlbiAtIHJkaXItPmhlYWQsICZzdCwKKwkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJyZXR1cm5lZCAlZFxuIiwgZXJyKTsKIAkJCQllcnIgPSAtRUlPOwogCQkJCXA5c3RhdF9mcmVlKCZzdCk7Ci0JCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQotCi0JCQlpICs9IHN0LnNpemUrMjsKLQkJCWZpZC0+cmRpcl9mcG9zICs9IHN0LnNpemUrMjsKKwkJCXJlY2xlbiA9IHN0LnNpemUrMjsKIAogCQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBzdC5uYW1lLCBzdHJsZW4oc3QubmFtZSksCiAJCQkgICAgZmlscC0+Zl9wb3MsIHY5ZnNfcWlkMmlubygmc3QucWlkKSwgZHRfdHlwZSgmc3QpKTsKIAotCQkJZmlscC0+Zl9wb3MgKz0gc3Quc2l6ZSsyOwotCiAJCQlwOXN0YXRfZnJlZSgmc3QpOwogCiAJCQlpZiAob3ZlcikgewogCQkJCWVyciA9IDA7Ci0JCQkJZ290byBmcmVlX2FuZF9leGl0OworCQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQkJfQorCQkJcmRpci0+aGVhZCArPSByZWNsZW47CisJCQlmaWxwLT5mX3BvcyArPSByZWNsZW47CiAJCX0KIAl9CiAKLWZyZWVfYW5kX2V4aXQ6Ci0Ja2ZyZWUoc3RhdGJ1Zik7Cit1bmxvY2tfYW5kX2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZyZGlyLT5tdXRleCk7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggNTk0NzYyOC4uMThmNzRlYyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTk5NCw4ICs5OTQsNyBAQAogCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLAogCQkiJXMgLT4gJXMgKCVzKVxuIiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3QtPmV4dGVuc2lvbiwgYnVmZmVyKTsKIAotCXJldHZhbCA9IGJ1ZmxlbjsKLQorCXJldHZhbCA9IHN0cm5sZW4oYnVmZmVyLCBidWZsZW4pOwogZG9uZToKIAlrZnJlZShzdCk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTEwNjIsNyArMTA2MSw3IEBACiAJCQlfX3B1dG5hbWUobGluayk7CiAJCQlsaW5rID0gRVJSX1BUUihsZW4pOwogCQl9IGVsc2UKLQkJCWxpbmtbbGVuXSA9IDA7CisJCQlsaW5rW21pbihsZW4sIFBBVEhfTUFYLTEpXSA9IDA7CiAJfQogCW5kX3NldF9saW5rKG5kLCBsaW5rKTsKIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZDRiZjhjYS4uNjRkNDRlZiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xMzUsOCArMTM1LDggQEAKIAogY29uZmlnIEhVR0VUTEJGUwogCWJvb2wgIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFg4NiB8fCBJQTY0IHx8IFBQQzY0IHx8IFNQQVJDNjQgfHwgKFNVUEVSSCAmJiBNTVUpIHx8IFwKLQkJICAgKFMzOTAgJiYgNjRCSVQpIHx8IFNZU19TVVBQT1JUU19IVUdFVExCRlMgfHwgQlJPS0VOCisJZGVwZW5kcyBvbiBYODYgfHwgSUE2NCB8fCBTUEFSQzY0IHx8IChTMzkwICYmIDY0QklUKSB8fCBcCisJCSAgIFNZU19TVVBQT1JUU19IVUdFVExCRlMgfHwgQlJPS0VOCiAJaGVscAogCSAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvbgogCSAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZApkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmggYi9mcy9hZnMvY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM0ZjZiNC4uMDAwMDAwMAotLS0gYS9mcy9hZnMvY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLS8qIEFGUyBsb2NhbCBjYWNoZSBtYW5hZ2VtZW50IGludGVyZmFjZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnNjYWNoZS5oPgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAxMDZiZTY2Li42ZWNlMmExIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAorKysgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTgsMTAgKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CiAKICNpbmNsdWRlICJhZnMuaCIKICNpbmNsdWRlICJhZnNfdmwuaCIKLSNpbmNsdWRlICJjYWNoZS5oIgogCiAjZGVmaW5lIEFGU19DRUxMX01BWF9BRERSUyAxNQogCmRpZmYgLS1naXQgYS9mcy9hbm9uX2lub2Rlcy5jIGIvZnMvYW5vbl9pbm9kZXMuYwppbmRleCBkMTFjNTFmLi4yY2E3YTdjIDEwMDY0NAotLS0gYS9mcy9hbm9uX2lub2Rlcy5jCisrKyBiL2ZzL2Fub25faW5vZGVzLmMKQEAgLTgsOCArOCwxMCBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDc2NzM4MDAuLjEyZGE1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0yNDksNiArMjQ5LDcgQEAKIAogCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fZnJlZSk7CiAKIHZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvKQogewpAQCAtMjU3LDYgKzI1OCw3IEBACiAJYmlvLT5iaV9jb21wX2NwdSA9IC0xOwogCWF0b21pY19zZXQoJmJpby0+YmlfY250LCAxKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2luaXQpOwogCiAvKioKICAqIGJpb19hbGxvY19iaW9zZXQgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCkBAIC0zMTEsNiArMzEzLDcgQEAKIAltZW1wb29sX2ZyZWUocCwgYnMtPmJpb19wb29sKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX2FsbG9jX2Jpb3NldCk7CiAKIHN0YXRpYyB2b2lkIGJpb19mc19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTMyMiw4ICszMjUsMTYgQEAKICAqCUBnZnBfbWFzazogYWxsb2NhdGlvbiBtYXNrIHRvIHVzZQogICoJQG5yX2lvdmVjczogbnVtYmVyIG9mIGlvdmVjcwogICoKLSAqCUFsbG9jYXRlIGEgbmV3IGJpbyB3aXRoIEBucl9pb3ZlY3MgYnZlY3MuICBJZiBAZ2ZwX21hc2sKLSAqCWNvbnRhaW5zIF9fR0ZQX1dBSVQsIHRoZSBhbGxvY2F0aW9uIGlzIGd1YXJhbnRlZWQgdG8gc3VjY2VlZC4KKyAqCWJpb19hbGxvYyB3aWxsIGFsbG9jYXRlIGEgYmlvIGFuZCBhc3NvY2lhdGVkIGJpb192ZWMgYXJyYXkgdGhhdCBjYW4gaG9sZAorICoJYXQgbGVhc3QgQG5yX2lvdmVjcyBlbnRyaWVzLiBBbGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUgZnJvbSB0aGUKKyAqCWZzX2Jpb19zZXQuIEFsc28gc2VlIEBiaW9fYWxsb2NfYmlvc2V0IGFuZCBAYmlvX2ttYWxsb2MuCisgKgorICoJSWYgJV9fR0ZQX1dBSVQgaXMgc2V0LCB0aGVuIGJpb19hbGxvYyB3aWxsIGFsd2F5cyBiZSBhYmxlIHRvIGFsbG9jYXRlCisgKglhIGJpby4gVGhpcyBpcyBkdWUgdG8gdGhlIG1lbXBvb2wgZ3VhcmFudGVlcy4gVG8gbWFrZSB0aGlzIHdvcmssIGNhbGxlcnMKKyAqCW11c3QgbmV2ZXIgYWxsb2NhdGUgbW9yZSB0aGFuIDEgYmlvIGF0IGEgdGltZSBmcm9tIHRoaXMgcG9vbC4gQ2FsbGVycworICoJdGhhdCBuZWVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiAxIGJpbyBtdXN0IGFsd2F5cyBzdWJtaXQgdGhlIHByZXZpb3VzbHkKKyAqCWFsbG9jYXRlZCBiaW8gZm9yIElPIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGEgbmV3IG9uZS4gRmFpbHVyZSB0bworICoJZG8gc28gY2FuIGNhdXNlIGxpdmVsb2NrcyB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCiAgKgogICoJUkVUVVJOUzoKICAqCVBvaW50ZXIgdG8gbmV3IGJpbyBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCkBAIC0zMzcsNiArMzQ4LDcgQEAKIAogCXJldHVybiBiaW87CiB9CitFWFBPUlRfU1lNQk9MKGJpb19hbGxvYyk7CiAKIHN0YXRpYyB2b2lkIGJpb19rbWFsbG9jX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQogewpAQCAtMzQ2LDIxICszNTgsMTMgQEAKIH0KIAogLyoqCi0gKiBiaW9fYWxsb2MgLSBhbGxvY2F0ZSBhIGJpbyBmb3IgSS9PCisgKiBiaW9fa21hbGxvYyAtIGFsbG9jYXRlIGEgYmlvIGZvciBJL08gdXNpbmcga21hbGxvYygpCiAgKiBAZ2ZwX21hc2s6ICAgdGhlIEdGUF8gbWFzayBnaXZlbiB0byB0aGUgc2xhYiBhbGxvY2F0b3IKICAqIEBucl9pb3ZlY3M6CW51bWJlciBvZiBpb3ZlY3MgdG8gcHJlLWFsbG9jYXRlCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgIGJpb19hbGxvYyB3aWxsIGFsbG9jYXRlIGEgYmlvIGFuZCBhc3NvY2lhdGVkIGJpb192ZWMgYXJyYXkgdGhhdCBjYW4gaG9sZAotICogICBhdCBsZWFzdCBAbnJfaW92ZWNzIGVudHJpZXMuIEFsbG9jYXRpb25zIHdpbGwgYmUgZG9uZSBmcm9tIHRoZQotICogICBmc19iaW9fc2V0LiBBbHNvIHNlZSBAYmlvX2FsbG9jX2Jpb3NldC4KLSAqCi0gKiAgIElmICVfX0dGUF9XQUlUIGlzIHNldCwgdGhlbiBiaW9fYWxsb2Mgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBhbGxvY2F0ZQotICogICBhIGJpby4gVGhpcyBpcyBkdWUgdG8gdGhlIG1lbXBvb2wgZ3VhcmFudGVlcy4gVG8gbWFrZSB0aGlzIHdvcmssIGNhbGxlcnMKLSAqICAgbXVzdCBuZXZlciBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gYXQgYSB0aW1lIGZyb20gdGhpcyBwb29sLiBDYWxsZXJzCi0gKiAgIHRoYXQgbmVlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gMSBiaW8gbXVzdCBhbHdheXMgc3VibWl0IHRoZSBwcmV2aW91c2x5Ci0gKiAgIGFsbG9jYXRlZCBiaW8gZm9yIElPIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGEgbmV3IG9uZS4gRmFpbHVyZSB0bwotICogICBkbyBzbyBjYW4gY2F1c2UgbGl2ZWxvY2tzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KKyAqICAgQWxsb2NhdGUgYSBuZXcgYmlvIHdpdGggQG5yX2lvdmVjcyBidmVjcy4gIElmIEBnZnBfbWFzayBjb250YWlucworICogICAlX19HRlBfV0FJVCwgdGhlIGFsbG9jYXRpb24gaXMgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgogICoKICAqKi8KIHN0cnVjdCBiaW8gKmJpb19rbWFsbG9jKGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzKQpAQCAtMzgwLDYgKzM4NCw3IEBACiAKIAlyZXR1cm4gYmlvOwogfQorRVhQT1JUX1NZTUJPTChiaW9fa21hbGxvYyk7CiAKIHZvaWQgemVyb19maWxsX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC00MDIsNyArNDA3LDcgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgUHV0IGEgcmVmZXJlbmNlIHRvIGEgJnN0cnVjdCBiaW8sIGVpdGhlciBvbmUgeW91IGhhdmUgZ290dGVuIHdpdGgKLSAqICAgYmlvX2FsbG9jIG9yIGJpb19nZXQuIFRoZSBsYXN0IHB1dCBvZiBhIGJpbyB3aWxsIGZyZWUgaXQuCisgKiAgIGJpb19hbGxvYywgYmlvX2dldCBvciBiaW9fY2xvbmUuIFRoZSBsYXN0IHB1dCBvZiBhIGJpbyB3aWxsIGZyZWUgaXQuCiAgKiovCiB2b2lkIGJpb19wdXQoc3RydWN0IGJpbyAqYmlvKQogewpAQCAtNDE2LDYgKzQyMSw3IEBACiAJCWJpby0+YmlfZGVzdHJ1Y3RvcihiaW8pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woYmlvX3B1dCk7CiAKIGlubGluZSBpbnQgYmlvX3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKQEAgLTQyNCw2ICs0MzAsNyBAQAogCiAJcmV0dXJuIGJpby0+YmlfcGh5c19zZWdtZW50czsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX3BoeXNfc2VnbWVudHMpOwogCiAvKioKICAqIAlfX2Jpb19jbG9uZQktCWNsb25lIGEgYmlvCkBAIC00NTEsNiArNDU4LDcgQEAKIAliaW8tPmJpX3NpemUgPSBiaW9fc3JjLT5iaV9zaXplOwogCWJpby0+YmlfaWR4ID0gYmlvX3NyYy0+YmlfaWR4OwogfQorRVhQT1JUX1NZTUJPTChfX2Jpb19jbG9uZSk7CiAKIC8qKgogICoJYmlvX2Nsb25lCS0JY2xvbmUgYSBiaW8KQEAgLTQ4Miw2ICs0OTAsNyBAQAogCiAJcmV0dXJuIGI7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19jbG9uZSk7CiAKIC8qKgogICoJYmlvX2dldF9ucl92ZWNzCQktIHJldHVybiBhcHByb3ggbnVtYmVyIG9mIHZlY3MKQEAgLTUwNSw2ICs1MTQsNyBAQAogCiAJcmV0dXJuIG5yX3BhZ2VzOwogfQorRVhQT1JUX1NZTUJPTChiaW9fZ2V0X25yX3ZlY3MpOwogCiBzdGF0aWMgaW50IF9fYmlvX2FkZF9wYWdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBwYWdlCiAJCQkgICpwYWdlLCB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LApAQCAtNjM1LDYgKzY0NSw3IEBACiAJcmV0dXJuIF9fYmlvX2FkZF9wYWdlKHEsIGJpbywgcGFnZSwgbGVuLCBvZmZzZXQsCiAJCQkgICAgICBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19hZGRfcGNfcGFnZSk7CiAKIC8qKgogICoJYmlvX2FkZF9wYWdlCS0JYXR0ZW1wdCB0byBhZGQgcGFnZSB0byBiaW8KQEAgLTY1NSw2ICs2NjYsNyBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoYmlvLT5iaV9iZGV2KTsKIAlyZXR1cm4gX19iaW9fYWRkX3BhZ2UocSwgYmlvLCBwYWdlLCBsZW4sIG9mZnNldCwgcXVldWVfbWF4X3NlY3RvcnMocSkpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fYWRkX3BhZ2UpOwogCiBzdHJ1Y3QgYmlvX21hcF9kYXRhIHsKIAlzdHJ1Y3QgYmlvX3ZlYyAqaW92ZWNzOwpAQCAtNzc2LDYgKzc4OCw3IEBACiAJYmlvX3B1dChiaW8pOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGJpb191bmNvcHlfdXNlcik7CiAKIC8qKgogICoJYmlvX2NvcHlfdXNlcl9pb3YJLQljb3B5IHVzZXIgZGF0YSB0byBiaW8KQEAgLTkyMCw2ICs5MzMsNyBAQAogCiAJcmV0dXJuIGJpb19jb3B5X3VzZXJfaW92KHEsIG1hcF9kYXRhLCAmaW92LCAxLCB3cml0ZV90b192bSwgZ2ZwX21hc2spOwogfQorRVhQT1JUX1NZTUJPTChiaW9fY29weV91c2VyKTsKIAogc3RhdGljIHN0cnVjdCBiaW8gKl9fYmlvX21hcF91c2VyX2lvdihzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAkJCQkgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LApAQCAtMTA1MCw2ICsxMDY0LDcgQEAKIAogCXJldHVybiBiaW9fbWFwX3VzZXJfaW92KHEsIGJkZXYsICZpb3YsIDEsIHdyaXRlX3RvX3ZtLCBnZnBfbWFzayk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19tYXBfdXNlcik7CiAKIC8qKgogICoJYmlvX21hcF91c2VyX2lvdiAtIG1hcCB1c2VyIHNnX2lvdmVjIHRhYmxlIGludG8gYmlvCkBAIC0xMTE3LDEzICsxMTMyLDEzIEBACiAJX19iaW9fdW5tYXBfdXNlcihiaW8pOwogCWJpb19wdXQoYmlvKTsKIH0KK0VYUE9SVF9TWU1CT0woYmlvX3VubWFwX3VzZXIpOwogCiBzdGF0aWMgdm9pZCBiaW9fbWFwX2tlcm5fZW5kaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQogewogCWJpb19wdXQoYmlvKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGJpbyAqX19iaW9fbWFwX2tlcm4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHZvaWQgKmRhdGEsCiAJCQkJICB1bnNpZ25lZCBpbnQgbGVuLCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTExODksNiArMTIwNCw3IEBACiAJYmlvX3B1dChiaW8pOwogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQorRVhQT1JUX1NZTUJPTChiaW9fbWFwX2tlcm4pOwogCiBzdGF0aWMgdm9pZCBiaW9fY29weV9rZXJuX2VuZGlvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKIHsKQEAgLTEyNTAsNiArMTI2Niw3IEBACiAKIAlyZXR1cm4gYmlvOwogfQorRVhQT1JUX1NZTUJPTChiaW9fY29weV9rZXJuKTsKIAogLyoKICAqIGJpb19zZXRfcGFnZXNfZGlydHkoKSBhbmQgYmlvX2NoZWNrX3BhZ2VzX2RpcnR5KCkgYXJlIHN1cHBvcnQgZnVuY3Rpb25zCkBAIC0xNDAwLDYgKzE0MTcsNyBAQAogCWlmIChiaW8tPmJpX2VuZF9pbykKIAkJYmlvLT5iaV9lbmRfaW8oYmlvLCBlcnJvcik7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19lbmRpbyk7CiAKIHZvaWQgYmlvX3BhaXJfcmVsZWFzZShzdHJ1Y3QgYmlvX3BhaXIgKmJwKQogewpAQCAtMTQxMCw2ICsxNDI4LDcgQEAKIAkJbWVtcG9vbF9mcmVlKGJwLCBicC0+YmlvMi5iaV9wcml2YXRlKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGJpb19wYWlyX3JlbGVhc2UpOwogCiBzdGF0aWMgdm9pZCBiaW9fcGFpcl9lbmRfMShzdHJ1Y3QgYmlvICpiaSwgaW50IGVycikKIHsKQEAgLTE0NzcsNiArMTQ5Niw3IEBACiAKIAlyZXR1cm4gYnA7CiB9CitFWFBPUlRfU1lNQk9MKGJpb19zcGxpdCk7CiAKIC8qKgogICogICAgICBiaW9fc2VjdG9yX29mZnNldCAtIEZpbmQgaGFyZHdhcmUgc2VjdG9yIG9mZnNldCBpbiBiaW8KQEAgLTE1NDcsNiArMTU2Nyw3IEBACiAKIAlrZnJlZShicyk7CiB9CitFWFBPUlRfU1lNQk9MKGJpb3NldF9mcmVlKTsKIAogLyoqCiAgKiBiaW9zZXRfY3JlYXRlICAtIENyZWF0ZSBhIGJpb19zZXQKQEAgLTE1OTIsNiArMTYxMyw3IEBACiAJYmlvc2V0X2ZyZWUoYnMpOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChiaW9zZXRfY3JlYXRlKTsKIAogc3RhdGljIHZvaWQgX19pbml0IGJpb3ZlY19pbml0X3NsYWJzKHZvaWQpCiB7CkBAIC0xNjM2LDI5ICsxNjU4LDQgQEAKIAogCXJldHVybiAwOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoaW5pdF9iaW8pOwotCi1FWFBPUlRfU1lNQk9MKGJpb19hbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKGJpb19rbWFsbG9jKTsKLUVYUE9SVF9TWU1CT0woYmlvX3B1dCk7Ci1FWFBPUlRfU1lNQk9MKGJpb19mcmVlKTsKLUVYUE9SVF9TWU1CT0woYmlvX2VuZGlvKTsKLUVYUE9SVF9TWU1CT0woYmlvX2luaXQpOwotRVhQT1JUX1NZTUJPTChfX2Jpb19jbG9uZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19jbG9uZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19waHlzX3NlZ21lbnRzKTsKLUVYUE9SVF9TWU1CT0woYmlvX2FkZF9wYWdlKTsKLUVYUE9SVF9TWU1CT0woYmlvX2FkZF9wY19wYWdlKTsKLUVYUE9SVF9TWU1CT0woYmlvX2dldF9ucl92ZWNzKTsKLUVYUE9SVF9TWU1CT0woYmlvX21hcF91c2VyKTsKLUVYUE9SVF9TWU1CT0woYmlvX3VubWFwX3VzZXIpOwotRVhQT1JUX1NZTUJPTChiaW9fbWFwX2tlcm4pOwotRVhQT1JUX1NZTUJPTChiaW9fY29weV9rZXJuKTsKLUVYUE9SVF9TWU1CT0woYmlvX3BhaXJfcmVsZWFzZSk7Ci1FWFBPUlRfU1lNQk9MKGJpb19zcGxpdCk7Ci1FWFBPUlRfU1lNQk9MKGJpb19jb3B5X3VzZXIpOwotRVhQT1JUX1NZTUJPTChiaW9fdW5jb3B5X3VzZXIpOwotRVhQT1JUX1NZTUJPTChiaW9zZXRfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woYmlvc2V0X2ZyZWUpOwotRVhQT1JUX1NZTUJPTChiaW9fYWxsb2NfYmlvc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggOWNmNGI5Mi4uOGJlZDA1NSAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTEyNDgsOCArMTI0OCw4IEBACiAJCQliZF9zZXRfc2l6ZShiZGV2LCAobG9mZl90KWJkZXYtPmJkX3BhcnQtPm5yX3NlY3RzIDw8IDkpOwogCQl9CiAJfSBlbHNlIHsKLQkJcHV0X2Rpc2soZGlzayk7CiAJCW1vZHVsZV9wdXQoZGlzay0+Zm9wcy0+b3duZXIpOworCQlwdXRfZGlzayhkaXNrKTsKIAkJZGlzayA9IE5VTEw7CiAJCWlmIChiZGV2LT5iZF9jb250YWlucyA9PSBiZGV2KSB7CiAJCQlpZiAoYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbikgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYWNsLmMgYi9mcy9idHJmcy9hY2wuYwppbmRleCBmMTI4NDI3Li4zNjE2MDQyIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hY2wuYworKysgYi9mcy9idHJmcy9hY2wuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgImJ0cmZzX2lub2RlLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKIAotI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKKyNpZmRlZiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMCiAKIHN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpidHJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewpAQCAtMzEzLDcgKzMxMyw3IEBACiAJLnNldAk9IGJ0cmZzX3hhdHRyX2FjbF9hY2Nlc3Nfc2V0LAogfTsKIAotI2Vsc2UgLyogQ09ORklHX0ZTX1BPU0lYX0FDTCAqLworI2Vsc2UgLyogQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTCAqLwogCiBpbnQgYnRyZnNfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC0zMjUsNCArMzI1LDQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19GU19QT1NJWF9BQ0wgKi8KKyNlbmRpZiAvKiBDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMICovCmRpZmYgLS1naXQgYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYyBiL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5jCmluZGV4IDI4MmNhMDguLmMwODYxZTcgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5jCisrKyBiL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5jCkBAIC02NCw2ICs2NCw1MSBAQAogfTsKIAogLyoKKyAqIGJ0cmZzX3N0YXJ0X3dvcmtlcnMgdXNlcyBrdGhyZWFkX3J1biwgd2hpY2ggY2FuIGJsb2NrIHdhaXRpbmcgZm9yIG1lbW9yeQorICogZm9yIGEgdmVyeSBsb25nIHRpbWUuICBJdCB3aWxsIGFjdHVhbGx5IHRocm90dGxlIG9uIHBhZ2Ugd3JpdGViYWNrLAorICogYW5kIHNvIGl0IG1heSBub3QgbWFrZSBwcm9ncmVzcyB1bnRpbCBhZnRlciBvdXIgYnRyZnMgd29ya2VyIHRocmVhZHMKKyAqIHByb2Nlc3MgYWxsIG9mIHRoZSBwZW5kaW5nIHdvcmsgc3RydWN0cyBpbiB0aGVpciBxdWV1ZQorICoKKyAqIFRoaXMgbWVhbnMgd2UgY2FuJ3QgdXNlIGJ0cmZzX3N0YXJ0X3dvcmtlcnMgZnJvbSBpbnNpZGUgYSBidHJmcyB3b3JrZXIKKyAqIHRocmVhZCB0aGF0IGlzIHVzZWQgYXMgcGFydCBvZiBjbGVhbmluZyBkaXJ0eSBtZW1vcnksIHdoaWNoIHByZXR0eSBtdWNoCisgKiBpbnZvbHZlcyBhbGwgb2YgdGhlIHdvcmtlciB0aHJlYWRzLgorICoKKyAqIEluc3RlYWQgd2UgaGF2ZSBhIGhlbHBlciBxdWV1ZSB3aG8gbmV2ZXIgaGFzIG1vcmUgdGhhbiBvbmUgdGhyZWFkCisgKiB3aGVyZSB3ZSBzY2hlZHVsZXIgdGhyZWFkIHN0YXJ0IG9wZXJhdGlvbnMuICBUaGlzIHdvcmtlcl9zdGFydCBzdHJ1Y3QKKyAqIGlzIHVzZWQgdG8gY29udGFpbiB0aGUgd29yayBhbmQgaG9sZCBhIHBvaW50ZXIgdG8gdGhlIHF1ZXVlIHRoYXQgbmVlZHMKKyAqIGFub3RoZXIgd29ya2VyLgorICovCitzdHJ1Y3Qgd29ya2VyX3N0YXJ0IHsKKwlzdHJ1Y3QgYnRyZnNfd29yayB3b3JrOworCXN0cnVjdCBidHJmc193b3JrZXJzICpxdWV1ZTsKK307CisKK3N0YXRpYyB2b2lkIHN0YXJ0X25ld193b3JrZXJfZnVuYyhzdHJ1Y3QgYnRyZnNfd29yayAqd29yaykKK3sKKwlzdHJ1Y3Qgd29ya2VyX3N0YXJ0ICpzdGFydDsKKwlzdGFydCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd29ya2VyX3N0YXJ0LCB3b3JrKTsKKwlidHJmc19zdGFydF93b3JrZXJzKHN0YXJ0LT5xdWV1ZSwgMSk7CisJa2ZyZWUoc3RhcnQpOworfQorCitzdGF0aWMgaW50IHN0YXJ0X25ld193b3JrZXIoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKnF1ZXVlKQoreworCXN0cnVjdCB3b3JrZXJfc3RhcnQgKnN0YXJ0OworCWludCByZXQ7CisKKwlzdGFydCA9IGt6YWxsb2Moc2l6ZW9mKCpzdGFydCksIEdGUF9OT0ZTKTsKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0YXJ0LT53b3JrLmZ1bmMgPSBzdGFydF9uZXdfd29ya2VyX2Z1bmM7CisJc3RhcnQtPnF1ZXVlID0gcXVldWU7CisJcmV0ID0gYnRyZnNfcXVldWVfd29ya2VyKHF1ZXVlLT5hdG9taWNfd29ya2VyX3N0YXJ0LCAmc3RhcnQtPndvcmspOworCWlmIChyZXQpCisJCWtmcmVlKHN0YXJ0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogaGVscGVyIGZ1bmN0aW9uIHRvIG1vdmUgYSB0aHJlYWQgb250byB0aGUgaWRsZSBsaXN0IGFmdGVyIGl0CiAgKiBoYXMgZmluaXNoZWQgc29tZSByZXF1ZXN0cy4KICAqLwpAQCAtMTE4LDExICsxNjMsMTMgQEAKIAkJZ290byBvdXQ7CiAKIAl3b3JrZXJzLT5hdG9taWNfc3RhcnRfcGVuZGluZyA9IDA7Ci0JaWYgKHdvcmtlcnMtPm51bV93b3JrZXJzID49IHdvcmtlcnMtPm1heF93b3JrZXJzKQorCWlmICh3b3JrZXJzLT5udW1fd29ya2VycyArIHdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nID49CisJICAgIHdvcmtlcnMtPm1heF93b3JrZXJzKQogCQlnb3RvIG91dDsKIAorCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nICs9IDE7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Vycy0+bG9jaywgZmxhZ3MpOwotCWJ0cmZzX3N0YXJ0X3dvcmtlcnMod29ya2VycywgMSk7CisJc3RhcnRfbmV3X3dvcmtlcih3b3JrZXJzKTsKIAlyZXR1cm47CiAKIG91dDoKQEAgLTM5MCw5ICs0MzcsMTEgQEAKIC8qCiAgKiBzaW1wbGUgaW5pdCBvbiBzdHJ1Y3QgYnRyZnNfd29ya2VycwogICovCi12b2lkIGJ0cmZzX2luaXRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgY2hhciAqbmFtZSwgaW50IG1heCkKK3ZvaWQgYnRyZnNfaW5pdF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBjaGFyICpuYW1lLCBpbnQgbWF4LAorCQkJc3RydWN0IGJ0cmZzX3dvcmtlcnMgKmFzeW5jX2hlbHBlcikKIHsKIAl3b3JrZXJzLT5udW1fd29ya2VycyA9IDA7CisJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgPSAwOwogCUlOSVRfTElTVF9IRUFEKCZ3b3JrZXJzLT53b3JrZXJfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJndvcmtlcnMtPmlkbGVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJndvcmtlcnMtPm9yZGVyX2xpc3QpOwpAQCAtNDA0LDE0ICs0NTMsMTUgQEAKIAl3b3JrZXJzLT5uYW1lID0gbmFtZTsKIAl3b3JrZXJzLT5vcmRlcmVkID0gMDsKIAl3b3JrZXJzLT5hdG9taWNfc3RhcnRfcGVuZGluZyA9IDA7Ci0Jd29ya2Vycy0+YXRvbWljX3dvcmtlcl9zdGFydCA9IDA7CisJd29ya2Vycy0+YXRvbWljX3dvcmtlcl9zdGFydCA9IGFzeW5jX2hlbHBlcjsKIH0KIAogLyoKICAqIHN0YXJ0cyBuZXcgd29ya2VyIHRocmVhZHMuICBUaGlzIGRvZXMgbm90IGVuZm9yY2UgdGhlIG1heCB3b3JrZXIKICAqIGNvdW50IGluIGNhc2UgeW91IG5lZWQgdG8gdGVtcG9yYXJpbHkgZ28gcGFzdCBpdC4KICAqLwotaW50IGJ0cmZzX3N0YXJ0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGludCBudW1fd29ya2VycykKK3N0YXRpYyBpbnQgX19idHJmc19zdGFydF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLAorCQkJCSBpbnQgbnVtX3dvcmtlcnMpCiB7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcl90aHJlYWQgKndvcmtlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTQ0NCw2ICs0OTQsOCBAQAogCQlsaXN0X2FkZF90YWlsKCZ3b3JrZXItPndvcmtlcl9saXN0LCAmd29ya2Vycy0+aWRsZV9saXN0KTsKIAkJd29ya2VyLT5pZGxlID0gMTsKIAkJd29ya2Vycy0+bnVtX3dvcmtlcnMrKzsKKwkJd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmctLTsKKwkJV0FSTl9PTih3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZyA8IDApOwogCQlzcGluX3VubG9ja19pcnEoJndvcmtlcnMtPmxvY2spOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ1Miw2ICs1MDQsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgYnRyZnNfc3RhcnRfd29ya2VycyhzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2VycywgaW50IG51bV93b3JrZXJzKQoreworCXNwaW5fbG9ja19pcnEoJndvcmtlcnMtPmxvY2spOworCXdvcmtlcnMtPm51bV93b3JrZXJzX3N0YXJ0aW5nICs9IG51bV93b3JrZXJzOworCXNwaW5fdW5sb2NrX2lycSgmd29ya2Vycy0+bG9jayk7CisJcmV0dXJuIF9fYnRyZnNfc3RhcnRfd29ya2Vycyh3b3JrZXJzLCBudW1fd29ya2Vycyk7Cit9CisKIC8qCiAgKiBydW4gdGhyb3VnaCB0aGUgbGlzdCBhbmQgZmluZCBhIHdvcmtlciB0aHJlYWQgdGhhdCBkb2Vzbid0IGhhdmUgYSBsb3QKICAqIHRvIGRvIHJpZ2h0IG5vdy4gIFRoaXMgY2FuIHJldHVybiBudWxsIGlmIHdlIGFyZW4ndCB5ZXQgYXQgdGhlIHRocmVhZApAQCAtNDYxLDcgKzUyMSwxMCBAQAogewogCXN0cnVjdCBidHJmc193b3JrZXJfdGhyZWFkICp3b3JrZXI7CiAJc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKLQlpbnQgZW5mb3JjZV9taW4gPSB3b3JrZXJzLT5udW1fd29ya2VycyA8IHdvcmtlcnMtPm1heF93b3JrZXJzOworCWludCBlbmZvcmNlX21pbjsKKworCWVuZm9yY2VfbWluID0gKHdvcmtlcnMtPm51bV93b3JrZXJzICsgd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcpIDwKKwkJd29ya2Vycy0+bWF4X3dvcmtlcnM7CiAKIAkvKgogCSAqIGlmIHdlIGZpbmQgYW4gaWRsZSB0aHJlYWQsIGRvbid0IG1vdmUgaXQgdG8gdGhlIGVuZCBvZiB0aGUKQEAgLTUwOSwxNSArNTcyLDE3IEBACiAJd29ya2VyID0gbmV4dF93b3JrZXIod29ya2Vycyk7CiAKIAlpZiAoIXdvcmtlcikgewotCQlpZiAod29ya2Vycy0+bnVtX3dvcmtlcnMgPj0gd29ya2Vycy0+bWF4X3dvcmtlcnMpIHsKKwkJaWYgKHdvcmtlcnMtPm51bV93b3JrZXJzICsgd29ya2Vycy0+bnVtX3dvcmtlcnNfc3RhcnRpbmcgPj0KKwkJICAgIHdvcmtlcnMtPm1heF93b3JrZXJzKSB7CiAJCQlnb3RvIGZhbGxiYWNrOwogCQl9IGVsc2UgaWYgKHdvcmtlcnMtPmF0b21pY193b3JrZXJfc3RhcnQpIHsKIAkJCXdvcmtlcnMtPmF0b21pY19zdGFydF9wZW5kaW5nID0gMTsKIAkJCWdvdG8gZmFsbGJhY2s7CiAJCX0gZWxzZSB7CisJCQl3b3JrZXJzLT5udW1fd29ya2Vyc19zdGFydGluZysrOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Vycy0+bG9jaywgZmxhZ3MpOwogCQkJLyogd2UncmUgYmVsb3cgdGhlIGxpbWl0LCBzdGFydCBhbm90aGVyIHdvcmtlciAqLwotCQkJYnRyZnNfc3RhcnRfd29ya2Vycyh3b3JrZXJzLCAxKTsKKwkJCV9fYnRyZnNfc3RhcnRfd29ya2Vycyh3b3JrZXJzLCAxKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hc3luYy10aHJlYWQuaCBiL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5oCmluZGV4IGZjMDg5YjkuLjUwNzc3NDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5oCisrKyBiL2ZzL2J0cmZzL2FzeW5jLXRocmVhZC5oCkBAIC02NCw2ICs2NCw4IEBACiAJLyogY3VycmVudCBudW1iZXIgb2YgcnVubmluZyB3b3JrZXJzICovCiAJaW50IG51bV93b3JrZXJzOwogCisJaW50IG51bV93b3JrZXJzX3N0YXJ0aW5nOworCiAJLyogbWF4IG51bWJlciBvZiB3b3JrZXJzIGFsbG93ZWQuICBjaGFuZ2VkIGJ5IGJ0cmZzX3N0YXJ0X3dvcmtlcnMgKi8KIAlpbnQgbWF4X3dvcmtlcnM7CiAKQEAgLTc4LDkgKzgwLDEwIEBACiAKIAkvKgogCSAqIGFyZSB3ZSBhbGxvd2VkIHRvIHNsZWVwIHdoaWxlIHN0YXJ0aW5nIHdvcmtlcnMgb3IgYXJlIHdlIHJlcXVpcmVkCi0JICogdG8gc3RhcnQgdGhlbSBhdCBhIGxhdGVyIHRpbWU/CisJICogdG8gc3RhcnQgdGhlbSBhdCBhIGxhdGVyIHRpbWU/ICBJZiB3ZSBjYW4ndCBzbGVlcCwgdGhpcyBpbmRpY2F0ZXMKKwkgKiB3aGljaCBxdWV1ZSB3ZSBuZWVkIHRvIHVzZSB0byBzY2hlZHVsZSB0aHJlYWQgY3JlYXRpb24uCiAJICovCi0JaW50IGF0b21pY193b3JrZXJfc3RhcnQ7CisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgKmF0b21pY193b3JrZXJfc3RhcnQ7CiAKIAkvKiBsaXN0IHdpdGggYWxsIHRoZSB3b3JrIHRocmVhZHMuICBUaGUgd29ya2VycyBvbiB0aGUgaWRsZSB0aHJlYWQKIAkgKiBtYXkgYmUgYWN0aXZlbHkgc2VydmljaW5nIGpvYnMsIGJ1dCB0aGV5IGhhdmVuJ3QgeWV0IGhpdCB0aGUKQEAgLTEwOSw3ICsxMTIsOCBAQAogaW50IGJ0cmZzX3F1ZXVlX3dvcmtlcihzdHJ1Y3QgYnRyZnNfd29ya2VycyAqd29ya2Vycywgc3RydWN0IGJ0cmZzX3dvcmsgKndvcmspOwogaW50IGJ0cmZzX3N0YXJ0X3dvcmtlcnMoc3RydWN0IGJ0cmZzX3dvcmtlcnMgKndvcmtlcnMsIGludCBudW1fd29ya2Vycyk7CiBpbnQgYnRyZnNfc3RvcF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzKTsKLXZvaWQgYnRyZnNfaW5pdF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBjaGFyICpuYW1lLCBpbnQgbWF4KTsKK3ZvaWQgYnRyZnNfaW5pdF93b3JrZXJzKHN0cnVjdCBidHJmc193b3JrZXJzICp3b3JrZXJzLCBjaGFyICpuYW1lLCBpbnQgbWF4LAorCQkJc3RydWN0IGJ0cmZzX3dvcmtlcnMgKmFzeW5jX3N0YXJ0ZXIpOwogaW50IGJ0cmZzX3JlcXVldWVfd29yayhzdHJ1Y3QgYnRyZnNfd29yayAqd29yayk7CiB2b2lkIGJ0cmZzX3NldF93b3JrX2hpZ2hfcHJpbyhzdHJ1Y3QgYnRyZnNfd29yayAqd29yayk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmggYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCmluZGV4IDgyZWU1NmJiLi5mNjc4M2E0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9idHJmc19pbm9kZS5oCisrKyBiL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKQEAgLTg2LDYgKzg2LDEyIEBACiAJICogdHJhbnNpZCBvZiB0aGUgdHJhbnNfaGFuZGxlIHRoYXQgbGFzdCBtb2RpZmllZCB0aGlzIGlub2RlCiAJICovCiAJdTY0IGxhc3RfdHJhbnM7CisKKwkvKgorCSAqIGxvZyB0cmFuc2lkIHdoZW4gdGhpcyBpbm9kZSB3YXMgbGFzdCBtb2RpZmllZAorCSAqLworCXU2NCBsYXN0X3N1Yl90cmFuczsKKwogCS8qCiAJICogdHJhbnNpZCB0aGF0IGxhc3QgbG9nZ2VkIHRoaXMgaW5vZGUKIAkgKi8KQEAgLTEyOCw2ICsxMzQsMTYgQEAKIAl1NjQgbGFzdF91bmxpbmtfdHJhbnM7CiAKIAkvKgorCSAqIENvdW50ZXJzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBleHRlbnQgaXRlbSdzIHdlIG1heSB1c2UgZHVlCisJICogdG8gZGVsYWxsb2MgYW5kIHN1Y2guICBvdXRzdGFuZGluZ19leHRlbnRzIGlzIHRoZSBudW1iZXIgb2YgZXh0ZW50CisJICogaXRlbXMgd2UgdGhpbmsgd2UnbGwgZW5kIHVwIHVzaW5nLCBhbmQgcmVzZXJ2ZWRfZXh0ZW50cyBpcyB0aGUgbnVtYmVyCisJICogb2YgZXh0ZW50IGl0ZW1zIHdlJ3ZlIHJlc2VydmVkIG1ldGFkYXRhIGZvci4KKwkgKi8KKwlzcGlubG9ja190IGFjY291bnRpbmdfbG9jazsKKwlpbnQgcmVzZXJ2ZWRfZXh0ZW50czsKKwlpbnQgb3V0c3RhbmRpbmdfZXh0ZW50czsKKworCS8qCiAJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSB0cnVuY2F0ZSB3aGVuIGEgZmlsZSB0aGF0IHVzZWQKIAkgKiB0byBoYXZlIGdvb2QgZGF0YSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gemVyby4gIFdoZW4gaXQgaXMgc2V0CiAJICogdGhlIGJ0cmZzIGZpbGUgcmVsZWFzZSBjYWxsIHdpbGwgYWRkIHRoaXMgaW5vZGUgdG8gdGhlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA4MDU5OWI0Li40NDRiM2U5IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTY3NSwyMSArNjc1LDI4IEBACiAJCQkJICAgY3VycmVudCBhbGxvY2F0aW9ucyAqLwogCXU2NCBieXRlc19yZWFkb25seTsJLyogdG90YWwgYnl0ZXMgdGhhdCBhcmUgcmVhZCBvbmx5ICovCiAJdTY0IGJ5dGVzX3N1cGVyOwkvKiB0b3RhbCBieXRlcyByZXNlcnZlZCBmb3IgdGhlIHN1cGVyIGJsb2NrcyAqLwotCi0JLyogZGVsYWxsb2MgYWNjb3VudGluZyAqLwotCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIHJlc2VydmVkIGZvciBhbGxvY2F0aW9uLAotCQkJCSAgIHRoaXMgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHJlc2VydmVkIHlldAotCQkJCSAgIGJ5IHRoZSBhbGxvY2F0b3IgKi8KKwl1NjQgYnl0ZXNfcm9vdDsJCS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvIGNvbW1pdCBhCisJCQkJICAgdHJhbnNhY3Rpb24gKi8KIAl1NjQgYnl0ZXNfbWF5X3VzZTsJLyogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5IGJlIHVzZWQgZm9yCi0JCQkJICAgZGVsYWxsb2MgKi8KKwkJCQkgICBkZWxhbGxvYy9hbGxvY2F0aW9ucyAqLworCXU2NCBieXRlc19kZWxhbGxvYzsJLyogbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSByZXNlcnZlZCBmb3IKKwkJCQkgICBkZWxheWVkIGFsbG9jYXRpb24gKi8KIAogCWludCBmdWxsOwkJLyogaW5kaWNhdGVzIHRoYXQgd2UgY2Fubm90IGFsbG9jYXRlIGFueSBtb3JlCiAJCQkJICAgY2h1bmtzIGZvciB0aGlzIHNwYWNlICovCiAJaW50IGZvcmNlX2FsbG9jOwkvKiBzZXQgaWYgd2UgbmVlZCB0byBmb3JjZSBhIGNodW5rIGFsbG9jIGZvcgogCQkJCSAgIHRoaXMgc3BhY2UgKi8KKwlpbnQgZm9yY2VfZGVsYWxsb2M7CS8qIG1ha2UgcGVvcGxlIHN0YXJ0IGRvaW5nIGZpbGVtYXBfZmx1c2ggdW50aWwKKwkJCQkgICB3ZSdyZSB1bmRlciBhIHRocmVzaG9sZCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCisJLyogZm9yIGNvbnRyb2xsaW5nIGhvdyB3ZSBmcmVlIHVwIHNwYWNlIGZvciBhbGxvY2F0aW9ucyAqLworCXdhaXRfcXVldWVfaGVhZF90IGFsbG9jYXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZmx1c2hfd2FpdDsKKwlpbnQgYWxsb2NhdGluZ19jaHVuazsKKwlpbnQgZmx1c2hpbmc7CisKIAkvKiBmb3IgYmxvY2sgZ3JvdXBzIGluIG91ciBzYW1lIHR5cGUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrX2dyb3VwczsKIAlzcGlubG9ja190IGxvY2s7CkBAIC05MDMsNiArOTEwLDcgQEAKIAkgKiBBIHRoaXJkIHBvb2wgZG9lcyBzdWJtaXRfYmlvIHRvIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhlIG90aGVyCiAJICogdHdvCiAJICovCisJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZ2VuZXJpY193b3JrZXI7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBkZWxhbGxvY193b3JrZXJzOwogCXN0cnVjdCBidHJmc193b3JrZXJzIGVuZGlvX3dvcmtlcnM7CkBAIC05MTAsNiArOTE4LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbmRpb19tZXRhX3dyaXRlX3dvcmtlcnM7CiAJc3RydWN0IGJ0cmZzX3dvcmtlcnMgZW5kaW9fd3JpdGVfd29ya2VyczsKIAlzdHJ1Y3QgYnRyZnNfd29ya2VycyBzdWJtaXRfd29ya2VyczsKKwlzdHJ1Y3QgYnRyZnNfd29ya2VycyBlbm9zcGNfd29ya2VyczsKIAkvKgogCSAqIGZpeHVwIHdvcmtlcnMgdGFrZSBkaXJ0eSBwYWdlcyB0aGF0IGRpZG4ndCBwcm9wZXJseSBnbyB0aHJvdWdoCiAJICogdGhlIGNvdyBtZWNoYW5pc20gYW5kIG1ha2UgdGhlbSBzYWZlIHRvIHdyaXRlLiAgSXQgaGFwcGVucwpAQCAtMTAwMCw3ICsxMDA5LDEwIEBACiAJYXRvbWljX3QgbG9nX3dyaXRlcnM7CiAJYXRvbWljX3QgbG9nX2NvbW1pdFsyXTsKIAl1bnNpZ25lZCBsb25nIGxvZ190cmFuc2lkOworCXVuc2lnbmVkIGxvbmcgbGFzdF9sb2dfY29tbWl0OwogCXVuc2lnbmVkIGxvbmcgbG9nX2JhdGNoOworCXBpZF90IGxvZ19zdGFydF9waWQ7CisJYm9vbCBsb2dfbXVsdGlwbGVfcGlkczsKIAogCXU2NCBvYmplY3RpZDsKIAl1NjQgbGFzdF90cmFuczsKQEAgLTExNDEsNiArMTE1Myw3IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX0ZMVVNIT05DT01NSVQgICAgICAgKDEgPDwgNykKICNkZWZpbmUgQlRSRlNfTU9VTlRfU1NEX1NQUkVBRAkJKDEgPDwgOCkKICNkZWZpbmUgQlRSRlNfTU9VTlRfTk9TU0QJCSgxIDw8IDkpCisjZGVmaW5lIEJUUkZTX01PVU5UX0RJU0NBUkQJCSgxIDw8IDEwKQogCiAjZGVmaW5lIGJ0cmZzX2NsZWFyX29wdChvLCBvcHQpCQkoKG8pICY9IH5CVFJGU19NT1VOVF8jI29wdCkKICNkZWZpbmUgYnRyZnNfc2V0X29wdChvLCBvcHQpCQkoKG8pIHw9IEJUUkZTX01PVU5UXyMjb3B0KQpAQCAtMjAyMiw3ICsyMDM1LDEyIEBACiB2b2lkIGJ0cmZzX3NldF9pbm9kZV9zcGFjZV9pbmZvKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlvbmRlKTsKIHZvaWQgYnRyZnNfY2xlYXJfc3BhY2VfaW5mb19mdWxsKHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKTsKIAotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCBudW1faXRlbXMpOworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcyk7CitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKTsKK2ludCBidHJmc19yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGlub2RlICppbm9kZSwgaW50IG51bV9pdGVtcyk7CiBpbnQgYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXU2NCBieXRlcyk7CiB2b2lkIGJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKQEAgLTIzMTQsNyArMjMzMiw3IEBACiB2b2lkIGJ0cmZzX29ycGhhbl9jbGVhbnVwKHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiBpbnQgYnRyZnNfaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBidHJmc19kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYnRyZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qIGlvY3RsLmMgKi8KIGxvbmcgYnRyZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKQEAgLTIzMjYsNyArMjM0NCw3IEBACiBpbnQgYnRyZnNfZHJvcF9leHRlbnRfY2FjaGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIGludCBza2lwX3Bpbm5lZCk7CiBpbnQgYnRyZnNfY2hlY2tfZmlsZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnM7CiBpbnQgYnRyZnNfZHJvcF9leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICB1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsb2NrZWRfZW5kLApAQCAtMjM1Nyw3ICsyMzc1LDcgQEAKIGludCBidHJmc19zeW5jX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB3YWl0KTsKIAogLyogYWNsLmMgKi8KLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogaW50IGJ0cmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzayk7CiAjZWxzZQogI2RlZmluZSBidHJmc19jaGVja19hY2wgTlVMTApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDY0NGU3OTYuLjAyYjZhZmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTgyMiwxNCArODIyLDE0IEBACiAKIGludCBidHJmc193cml0ZV90cmVlX2Jsb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLCBidWYtPnN0YXJ0LAotCQkJCSAgICAgIGJ1Zi0+c3RhcnQgKyBidWYtPmxlbiAtIDEsIFdCX1NZTkNfQUxMKTsKKwlyZXR1cm4gZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywgYnVmLT5zdGFydCwKKwkJCQkJYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIGludCBidHJmc193YWl0X3RyZWVfYmxvY2tfd3JpdGViYWNrKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpCiB7Ci0JcmV0dXJuIGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLAotCQkJCSAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CisJcmV0dXJuIGZpbGVtYXBfZmRhdGF3YWl0X3JhbmdlKGJ1Zi0+Zmlyc3RfcGFnZS0+bWFwcGluZywKKwkJCQkgICAgICAgYnVmLT5zdGFydCwgYnVmLT5zdGFydCArIGJ1Zi0+bGVuIC0gMSk7CiB9CiAKIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyZWFkX3RyZWVfYmxvY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCkBAIC05MTcsNiArOTE3LDcgQEAKIAlhdG9taWNfc2V0KCZyb290LT5sb2dfd3JpdGVycywgMCk7CiAJcm9vdC0+bG9nX2JhdGNoID0gMDsKIAlyb290LT5sb2dfdHJhbnNpZCA9IDA7CisJcm9vdC0+bGFzdF9sb2dfY29tbWl0ID0gMDsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZyb290LT5kaXJ0eV9sb2dfcGFnZXMsCiAJCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIApAQCAtMTA4Nyw2ICsxMDg4LDcgQEAKIAlXQVJOX09OKHJvb3QtPmxvZ19yb290KTsKIAlyb290LT5sb2dfcm9vdCA9IGxvZ19yb290OwogCXJvb3QtPmxvZ190cmFuc2lkID0gMDsKKwlyb290LT5sYXN0X2xvZ19jb21taXQgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC0xNjMwLDcgKzE2MzIsNyBAQAogCWZzX2luZm8tPnNiID0gc2I7CiAJZnNfaW5mby0+bWF4X2V4dGVudCA9ICh1NjQpLTE7CiAJZnNfaW5mby0+bWF4X2lubGluZSA9IDgxOTIgKiAxMDI0OwotCWZzX2luZm8tPm1ldGFkYXRhX3JhdGlvID0gODsKKwlmc19pbmZvLT5tZXRhZGF0YV9yYXRpbyA9IDA7CiAKIAlmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywKIAkJCQkJICBudW1fb25saW5lX2NwdXMoKSArIDIsIDgpOwpAQCAtMTc0NiwyMSArMTc0OCwyNSBAQAogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfaXB1dDsKIAl9Ci1wcmludGsoInRocmVhZCBwb29sIGlzICVkXG4iLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKLQkvKgotCSAqIHdlIG5lZWQgdG8gc3RhcnQgYWxsIHRoZSBlbmRfaW8gd29ya2VycyB1cCBmcm9udCBiZWNhdXNlIHRoZQotCSAqIHF1ZXVlIHdvcmsgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgYXQgaW50ZXJydXB0IHRpbWUsIGFuZCBzbyBpdAotCSAqIGNhbm5vdCBkeW5hbWljYWxseSBncm93LgotCSAqLworCisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5nZW5lcmljX3dvcmtlciwKKwkJCSAgICJnZW53b3JrIiwgMSwgTlVMTCk7CisKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMsICJ3b3JrZXIiLAotCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZGVsYWxsb2Nfd29ya2VycywgImRlbGFsbG9jIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAic3VibWl0IiwKIAkJCSAgIG1pbl90KHU2NCwgZnNfZGV2aWNlcy0+bnVtX2RldmljZXMsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSk7CisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CisJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbm9zcGNfd29ya2VycywgImVub3NwYyIsCisJCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAogCS8qIGEgaGlnaGVyIGlkbGUgdGhyZXNoIG9uIHRoZSBzdWJtaXQgd29ya2VycyBtYWtlcyBpdCBtdWNoIG1vcmUKIAkgKiBsaWtlbHkgdGhhdCBiaW9zIHdpbGwgYmUgc2VuZCBkb3duIGluIGEgc2FuZSBvcmRlciB0byB0aGUKQEAgLTE3NzQsMTUgKzE3ODAsMjAgQEAKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAlmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLm9yZGVyZWQgPSAxOwogCi0JYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAiZml4dXAiLCAxKTsKKwlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmZpeHVwX3dvcmtlcnMsICJmaXh1cCIsIDEsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fd29ya2VycywgImVuZGlvIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dvcmtlcnMsICJlbmRpby1tZXRhIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwKKwkJCSAgICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsCi0JCQkgICAiZW5kaW8tbWV0YS13cml0ZSIsIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgImVuZGlvLW1ldGEtd3JpdGUiLCBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplLAorCQkJICAgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKIAlidHJmc19pbml0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsICJlbmRpby13cml0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsCisJCQkgICAmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCiAJLyoKIAkgKiBlbmRpb3MgYXJlIGxhcmdlbHkgcGFyYWxsZWwgYW5kIHNob3VsZCBoYXZlIGEgdmVyeQpAQCAtMTc5NCwxMiArMTgwNSw4IEBACiAJZnNfaW5mby0+ZW5kaW9fd3JpdGVfd29ya2Vycy5pZGxlX3RocmVzaCA9IDI7CiAJZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmlkbGVfdGhyZXNoID0gMjsKIAotCWZzX2luZm8tPmVuZGlvX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCWZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMuYXRvbWljX3dvcmtlcl9zdGFydCA9IDE7Ci0JZnNfaW5mby0+ZW5kaW9fbWV0YV93cml0ZV93b3JrZXJzLmF0b21pY193b3JrZXJfc3RhcnQgPSAxOwotCiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+d29ya2VycywgMSk7CisJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5maXh1cF93b3JrZXJzLCAxKTsKQEAgLTE4MDcsNiArMTgxNCw3IEBACiAJYnRyZnNfc3RhcnRfd29ya2VycygmZnNfaW5mby0+ZW5kaW9fbWV0YV93b3JrZXJzLCAxKTsKIAlidHJmc19zdGFydF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb19tZXRhX3dyaXRlX3dvcmtlcnMsIDEpOwogCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX3dyaXRlX3dvcmtlcnMsIDEpOworCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzLCAxKTsKIAogCWZzX2luZm8tPmJkaS5yYV9wYWdlcyAqPSBidHJmc19zdXBlcl9udW1fZGV2aWNlcyhkaXNrX3N1cGVyKTsKIAlmc19pbmZvLT5iZGkucmFfcGFnZXMgPSBtYXgoZnNfaW5mby0+YmRpLnJhX3BhZ2VzLApAQCAtMjAxMiw2ICsyMDIwLDcgQEAKIAlmcmVlX2V4dGVudF9idWZmZXIoY2h1bmtfcm9vdC0+bm9kZSk7CiAJZnJlZV9leHRlbnRfYnVmZmVyKGNodW5rX3Jvb3QtPmNvbW1pdF9yb290KTsKIGZhaWxfc2JfYnVmZmVyOgorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjAyMCw2ICsyMDI5LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIGZhaWxfaXB1dDoKIAlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMihmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nKTsKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKQEAgLTI0MzcsNiArMjQ0Nyw3IEBACiAKIAlpcHV0KGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKIAorCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Z2VuZXJpY193b3JrZXIpOwogCWJ0cmZzX3N0b3Bfd29ya2VycygmZnNfaW5mby0+Zml4dXBfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5kZWxhbGxvY193b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPndvcmtlcnMpOwpAQCAtMjQ0NSw2ICsyNDU2LDcgQEAKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVuZGlvX21ldGFfd3JpdGVfd29ya2Vycyk7CiAJYnRyZnNfc3RvcF93b3JrZXJzKCZmc19pbmZvLT5lbmRpb193cml0ZV93b3JrZXJzKTsKIAlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPnN1Ym1pdF93b3JrZXJzKTsKKwlidHJmc19zdG9wX3dvcmtlcnMoJmZzX2luZm8tPmVub3NwY193b3JrZXJzKTsKIAogCWJ0cmZzX2Nsb3NlX2RldmljZXMoZnNfaW5mby0+ZnNfZGV2aWNlcyk7CiAJYnRyZnNfbWFwcGluZ190cmVlX2ZyZWUoJmZzX2luZm8tPm1hcHBpbmdfdHJlZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCA5OTNmOTNmLi45NDYyN2M0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTY4LDYgKzY4LDggQEAKIAkJCSAgc3RydWN0IGV4dGVudF9idWZmZXIgKiptdXN0X2NsZWFuKTsKIHN0YXRpYyBpbnQgZmluZF9uZXh0X2tleShzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGxldmVsLAogCQkJIHN0cnVjdCBidHJmc19rZXkgKmtleSk7CitzdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcywKKwkJCSAgICBpbnQgZHVtcF9ibG9ja19ncm91cHMpOwogCiBzdGF0aWMgbm9pbmxpbmUgaW50CiBibG9ja19ncm91cF9jYWNoZV9kb25lKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpCkBAIC0xNTY2LDIzICsxNTY4LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIEJJT19SV19ESVNDQVJECiBzdGF0aWMgdm9pZCBidHJmc19pc3N1ZV9kaXNjYXJkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgbGVuKQogewogCWJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0ID4+IDksIGxlbiA+PiA5LCBHRlBfS0VSTkVMLAogCQkJICAgICBESVNDQVJEX0ZMX0JBUlJJRVIpOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgYnRyZnNfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkJdTY0IG51bV9ieXRlcykKIHsKLSNpZmRlZiBCSU9fUldfRElTQ0FSRAogCWludCByZXQ7CiAJdTY0IG1hcF9sZW5ndGggPSBudW1fYnl0ZXM7CiAJc3RydWN0IGJ0cmZzX211bHRpX2JpbyAqbXVsdGkgPSBOVUxMOwogCisJaWYgKCFidHJmc190ZXN0X29wdChyb290LCBESVNDQVJEKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBUZWxsIHRoZSBibG9jayBkZXZpY2UocykgdGhhdCB0aGUgc2VjdG9ycyBjYW4gYmUgZGlzY2FyZGVkICovCiAJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKCZyb290LT5mc19pbmZvLT5tYXBwaW5nX3RyZWUsIFJFQUQsCiAJCQkgICAgICBieXRlbnIsICZtYXBfbGVuZ3RoLCAmbXVsdGksIDApOwpAQCAtMTYwMiw5ICsxNjA0LDYgQEAKIAl9CiAKIAlyZXR1cm4gcmV0OwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgogfQogCiBpbnQgYnRyZnNfaW5jX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCkBAIC0yNzY1LDY3ICsyNzY0LDQ0OCBAQAogCQkJCQkJICAgICAgIGFsbG9jX3RhcmdldCk7CiB9CiAKK3N0YXRpYyB1NjQgY2FsY3VsYXRlX2J5dGVzX25lZWRlZChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwl1NjQgbnVtX2J5dGVzOworCWludCBsZXZlbDsKKworCWxldmVsID0gQlRSRlNfTUFYX0xFVkVMIC0gMjsKKwkvKgorCSAqIE5PVEU6IHRoZXNlIGNhbGN1bGF0aW9ucyBhcmUgYWJzb2x1dGVseSB0aGUgd29yc3QgcG9zc2libGUgY2FzZS4KKwkgKiBUaGlzIGFzc3VtZXMgdGhhdCBfZXZlcnlfIGl0ZW0gd2UgaW5zZXJ0IHdpbGwgcmVxdWlyZSBhIG5ldyBsZWFmLCBhbmQKKwkgKiB0aGF0IHRoZSB0cmVlIGhhcyBncm93biB0byBpdHMgbWF4aW11bSBsZXZlbCBzaXplLgorCSAqLworCisJLyoKKwkgKiBmb3IgZXZlcnkgaXRlbSB3ZSBpbnNlcnQgd2UgY291bGQgaW5zZXJ0IGJvdGggYW4gZXh0ZW50IGl0ZW0gYW5kIGEKKwkgKiBleHRlbnQgcmVmIGl0ZW0uICBUaGVuIGZvciBldmVyIGl0ZW0gd2UgaW5zZXJ0LCB3ZSB3aWxsIG5lZWQgdG8gY293CisJICogYm90aCB0aGUgb3JpZ2luYWwgbGVhZiwgcGx1cyB0aGUgbGVhZiB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgaXQuCisJICoKKwkgKiBVbmxlc3Mgd2UgYXJlIHRhbGtpbmcgYWJvdXQgdGhlIGV4dGVudCByb290LCB0aGVuIHdlIGp1c3Qgd2FudCB0aGUKKwkgKiBudW1iZXIgb2YgaXRlbXMgKiAyLCBzaW5jZSB3ZSBqdXN0IG5lZWQgdGhlIGV4dGVudCBpdGVtIHBsdXMgaXRzIHJlZi4KKwkgKi8KKwlpZiAocm9vdCA9PSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCkKKwkJbnVtX2J5dGVzID0gbnVtX2l0ZW1zICogMjsKKwllbHNlCisJCW51bV9ieXRlcyA9IChudW1faXRlbXMgKyAoMiAqIG51bV9pdGVtcykpICogMzsKKworCS8qCisJICogbnVtX2J5dGVzIGlzIHRvdGFsIG51bWJlciBvZiBsZWF2ZXMgd2UgY291bGQgbmVlZCB0aW1lcyB0aGUgbGVhZgorCSAqIHNpemUsIGFuZCB0aGVuIGZvciBldmVyeSBsZWFmIHdlIGNvdWxkIGVuZCB1cCBjb3cnaW5nIDIgbm9kZXMgcGVyCisJICogbGV2ZWwsIGRvd24gdG8gdGhlIGxlYWYgbGV2ZWwuCisJICovCisJbnVtX2J5dGVzID0gKG51bV9ieXRlcyAqIHJvb3QtPmxlYWZzaXplKSArCisJCShudW1fYnl0ZXMgKiAobGV2ZWwgKiAyKSkgKiByb290LT5ub2Rlc2l6ZTsKKworCXJldHVybiBudW1fYnl0ZXM7Cit9CisKIC8qCi0gKiBmb3Igbm93IHRoaXMganVzdCBtYWtlcyBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgNSUgb2Ygb3VyIG1ldGFkYXRhIHNwYWNlIGZyZWUKLSAqIGZvciB1c2UuCisgKiBVbnJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLiAgSWYgd2UgaGF2ZSBsZXNzIHJlc2VydmVkIGNyZWRpdHMgdGhhbgorICogd2UgaGF2ZSBleHRlbnRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KICAqLwotaW50IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbnVtX2l0ZW1zKQogewogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbzsKLQl1NjQgYWxsb2NfdGFyZ2V0LCB0aHJlc2g7Ci0JaW50IGNvbW1pdHRlZCA9IDAsIHJldDsKKwl1NjQgbnVtX2J5dGVzOworCXU2NCBhbGxvY190YXJnZXQ7CisJYm9vbCBidWcgPSBmYWxzZTsKIAogCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLwogCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOwogCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOwotCWlmICghbWV0YV9zaW5mbykKLQkJZ290byBhbGxvYzsKIAorCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCisJCQkJCSAgIG51bV9pdGVtcyk7CisKKwlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJaWYgKEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzIDw9CisJICAgIEJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKSB7CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMtLTsKKwlCVUdfT04oQlRSRlNfSShpbm9kZSktPnJlc2VydmVkX2V4dGVudHMgPCAwKTsKKworCWlmIChtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA8IG51bV9ieXRlcykgeworCQlidWcgPSB0cnVlOworCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOworCX0KKwlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisKKwlCVUdfT04oYnVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JjZV9kZWxhbGxvYyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqbWV0YV9zaW5mbykKK3sKKwl1NjQgdGhyZXNoOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlOworCisJdGhyZXNoID0gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMgLSB0aHJlc2g7CisJdGhyZXNoICo9IDgwOworCWRvX2Rpdih0aHJlc2gsIDEwMCk7CisJaWYgKHRocmVzaCA8PSBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYykKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAxOworCWVsc2UKKwkJbWV0YV9zaW5mby0+Zm9yY2VfZGVsYWxsb2MgPSAwOworfQorCitzdHJ1Y3QgYXN5bmNfZmx1c2ggeworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCXN0cnVjdCBidHJmc193b3JrIHdvcms7Cit9OworCitzdGF0aWMgbm9pbmxpbmUgdm9pZCBmbHVzaF9kZWxhbGxvY19hc3luYyhzdHJ1Y3QgYnRyZnNfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCXN0cnVjdCBidHJmc19yb290ICpyb290OworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvOworCisJYXN5bmMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzeW5jX2ZsdXNoLCB3b3JrKTsKKwlyb290ID0gYXN5bmMtPnJvb3Q7CisJaW5mbyA9IGFzeW5jLT5pbmZvOworCisJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCWJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHJvb3QsIDApOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5mbHVzaGluZyA9IDA7CisJc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXdha2VfdXAoJmluZm8tPmZsdXNoX3dhaXQpOworCisJa2ZyZWUoYXN5bmMpOworfQorCitzdGF0aWMgdm9pZCB3YWl0X29uX2ZsdXNoKHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICppbmZvKQoreworCURFRklORV9XQUlUKHdhaXQpOworCXU2NCB1c2VkOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b193YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNlZCA9IGluZm8tPmJ5dGVzX3VzZWQgKyBpbmZvLT5ieXRlc19yZXNlcnZlZCArCisJCQlpbmZvLT5ieXRlc19waW5uZWQgKyBpbmZvLT5ieXRlc19yZWFkb25seSArCisJCQlpbmZvLT5ieXRlc19zdXBlciArIGluZm8tPmJ5dGVzX3Jvb3QgKworCQkJaW5mby0+Ynl0ZXNfbWF5X3VzZSArIGluZm8tPmJ5dGVzX2RlbGFsbG9jOworCQlpZiAodXNlZCA8IGluZm8tPnRvdGFsX2J5dGVzKSB7CisJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXNjaGVkdWxlKCk7CisJfQorCWZpbmlzaF93YWl0KCZpbmZvLT5mbHVzaF93YWl0LCAmd2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX2RlbGFsbG9jKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSBzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgYXN5bmNfZmx1c2ggKmFzeW5jOworCWJvb2wgd2FpdCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICghaW5mby0+Zmx1c2hpbmcpIHsKKwkJaW5mby0+Zmx1c2hpbmcgPSAxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5mbHVzaF93YWl0KTsKKwl9IGVsc2UgeworCQl3YWl0ID0gdHJ1ZTsKKwl9CisKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAod2FpdCkgeworCQl3YWl0X29uX2ZsdXNoKGluZm8pOworCQlyZXR1cm47CisJfQorCisJYXN5bmMgPSBremFsbG9jKHNpemVvZigqYXN5bmMpLCBHRlBfTk9GUyk7CisJaWYgKCFhc3luYykKKwkJZ290byBmbHVzaDsKKworCWFzeW5jLT5yb290ID0gcm9vdDsKKwlhc3luYy0+aW5mbyA9IGluZm87CisJYXN5bmMtPndvcmsuZnVuYyA9IGZsdXNoX2RlbGFsbG9jX2FzeW5jOworCisJYnRyZnNfcXVldWVfd29ya2VyKCZyb290LT5mc19pbmZvLT5lbm9zcGNfd29ya2VycywKKwkJCSAgICZhc3luYy0+d29yayk7CisJd2FpdF9vbl9mbHVzaChpbmZvKTsKKwlyZXR1cm47CisKK2ZsdXNoOgorCWJ0cmZzX3N0YXJ0X2RlbGFsbG9jX2lub2Rlcyhyb290KTsKKwlidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhyb290LCAwKTsKKworCXNwaW5fbG9jaygmaW5mby0+bG9jayk7CisJaW5mby0+Zmx1c2hpbmcgPSAwOworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwl3YWtlX3VwKCZpbmZvLT5mbHVzaF93YWl0KTsKK30KKworc3RhdGljIGludCBtYXliZV9hbGxvY2F0ZV9jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8pCit7CisJc3RydWN0IGJ0cmZzX3N1cGVyX2Jsb2NrICpkaXNrX3N1cGVyID0gJnJvb3QtPmZzX2luZm8tPnN1cGVyX2NvcHk7CisJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7CisJYm9vbCB3YWl0ID0gZmFsc2U7CisJaW50IHJldCA9IDA7CisJdTY0IG1pbl9tZXRhZGF0YTsKKwl1NjQgZnJlZV9zcGFjZTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19zdXBlcl90b3RhbF9ieXRlcyhkaXNrX3N1cGVyKTsKKwkvKgorCSAqIHdlIGFsbG93IHRoZSBtZXRhZGF0YSB0byBncm93IHRvIGEgbWF4IG9mIGVpdGhlciAxMGdiIG9yIDUlIG9mIHRoZQorCSAqIHNwYWNlIGluIHRoZSB2b2x1bWUuCisJICovCisJbWluX21ldGFkYXRhID0gbWluKCh1NjQpMTAgKiAxMDI0ICogMTAyNCAqIDEwMjQsCisJCQkgICAgIGRpdjY0X3U2NChmcmVlX3NwYWNlICogNSwgMTAwKSk7CisJaWYgKGluZm8tPnRvdGFsX2J5dGVzID49IG1pbl9tZXRhZGF0YSkgeworCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJCXJldHVybiAwOworCX0KKworCWlmIChpbmZvLT5mdWxsKSB7CisJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKSB7CisJCWluZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJaW5mby0+YWxsb2NhdGluZ19jaHVuayA9IDE7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmFsbG9jYXRlX3dhaXQpOworCX0gZWxzZSB7CisJCXdhaXQgPSB0cnVlOworCX0KKworCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKworCWlmICh3YWl0KSB7CisJCXdhaXRfZXZlbnQoaW5mby0+YWxsb2NhdGVfd2FpdCwKKwkJCSAgICFpbmZvLT5hbGxvY2F0aW5nX2NodW5rKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCSAgICAgNDA5NiArIDIgKiAxMDI0ICogMTAyNCwKKwkJCSAgICAgaW5mby0+ZmxhZ3MsIDApOworCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CitvdXQ6CisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKKwlpbmZvLT5hbGxvY2F0aW5nX2NodW5rID0gMDsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisJd2FrZV91cCgmaW5mby0+YWxsb2NhdGVfd2FpdCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlc2VydmUgbWV0YWRhdGEgc3BhY2UgZm9yIGRlbGFsbG9jLgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Moc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBudW1faXRlbXMpCit7CisJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOworCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICptZXRhX3NpbmZvOworCXU2NCBudW1fYnl0ZXM7CisJdTY0IHVzZWQ7CisJdTY0IGFsbG9jX3RhcmdldDsKKwlpbnQgZmx1c2hlZCA9IDA7CisJaW50IGZvcmNlX2RlbGFsbG9jOworCisJLyogZ2V0IHRoZSBzcGFjZSBpbmZvIGZvciB3aGVyZSB0aGUgbWV0YWRhdGEgd2lsbCBsaXZlICovCisJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMCk7CisJbWV0YV9zaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKGluZm8sIGFsbG9jX3RhcmdldCk7CisKKwludW1fYnl0ZXMgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAorCQkJCQkgICBudW1faXRlbXMpOwogYWdhaW46CiAJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLQlpZiAoIW1ldGFfc2luZm8tPmZ1bGwpCi0JCXRocmVzaCA9IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzICogODA7Ci0JZWxzZQotCQl0aHJlc2ggPSBtZXRhX3NpbmZvLT50b3RhbF9ieXRlcyAqIDk1OwogCi0JZG9fZGl2KHRocmVzaCwgMTAwKTsKKwlmb3JjZV9kZWxhbGxvYyA9IG1ldGFfc2luZm8tPmZvcmNlX2RlbGFsbG9jOwogCi0JaWYgKG1ldGFfc2luZm8tPmJ5dGVzX3VzZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZXNlcnZlZCArCi0JICAgIG1ldGFfc2luZm8tPmJ5dGVzX3Bpbm5lZCArIG1ldGFfc2luZm8tPmJ5dGVzX3JlYWRvbmx5ICsKLQkgICAgbWV0YV9zaW5mby0+Ynl0ZXNfc3VwZXIgPiB0aHJlc2gpIHsKLQkJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JCWlmICghbWV0YV9zaW5mby0+ZnVsbCkgewotCQkJbWV0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFmbHVzaGVkKQorCQltZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYyArPSBudW1fYnl0ZXM7CisKKwl1c2VkID0gbWV0YV9zaW5mby0+Ynl0ZXNfdXNlZCArIG1ldGFfc2luZm8tPmJ5dGVzX3Jlc2VydmVkICsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfcGlubmVkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVhZG9ubHkgKworCQltZXRhX3NpbmZvLT5ieXRlc19zdXBlciArIG1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgKworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICsgbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2M7CisKKwlpZiAodXNlZCA+IG1ldGFfc2luZm8tPnRvdGFsX2J5dGVzKSB7CisJCWZsdXNoZWQrKzsKKworCQlpZiAoZmx1c2hlZCA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCWZsdXNoZWQrKzsKKwkJfSBlbHNlIHsKIAkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKLWFsbG9jOgotCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJCWlmICghdHJhbnMpCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAotCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfdGFyZ2V0LCAwKTsKLQkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQlpZiAoIW1ldGFfc2luZm8pIHsKLQkJCQltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywKLQkJCQkJCQkgICAgICAgYWxsb2NfdGFyZ2V0KTsKLQkJCX0KKwkJaWYgKGZsdXNoZWQgPT0gMikgeworCQkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKwkJCWdvdG8gYWdhaW47CisJCX0gZWxzZSBpZiAoZmx1c2hlZCA9PSAzKSB7CisJCQlmbHVzaF9kZWxhbGxvYyhyb290LCBtZXRhX3NpbmZvKTsKIAkJCWdvdG8gYWdhaW47CiAJCX0KKwkJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfZGVsYWxsb2MgLT0gbnVtX2J5dGVzOwogCQlzcGluX3VubG9jaygmbWV0YV9zaW5mby0+bG9jayk7Ci0KLQkJaWYgKCFjb21taXR0ZWQpIHsKLQkJCWNvbW1pdHRlZCA9IDE7Ci0JCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlpZiAoIXRyYW5zKQotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJlbm9zcGMsIGhhcyAlZCwgcmVzZXJ2ZWQgJWRcbiIsCisJCSAgICAgICBCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cywKKwkJICAgICAgIEJUUkZTX0koaW5vZGUpLT5yZXNlcnZlZF9leHRlbnRzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKG1ldGFfc2luZm8sIDAsIDApOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CisKKwlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfZXh0ZW50cysrOworCWNoZWNrX2ZvcmNlX2RlbGFsbG9jKG1ldGFfc2luZm8pOworCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICghZmx1c2hlZCAmJiBmb3JjZV9kZWxhbGxvYykKKwkJZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdW5yZXNlcnZlIG51bV9pdGVtcyBudW1iZXIgb2YgaXRlbXMgd29ydGggb2YgbWV0YWRhdGEgc3BhY2UuICBUaGlzIG5lZWRzIHRvCisgKiBiZSBwYWlyZWQgd2l0aCBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlLgorICoKKyAqIE5PVEU6IGlmIHlvdSBoYXZlIHRoZSBvcHRpb24sIHJ1biB0aGlzIF9BRlRFUl8geW91IGRvIGEKKyAqIGJ0cmZzX2VuZF90cmFuc2FjdGlvbiwgc2luY2UgYnRyZnNfZW5kX3RyYW5zYWN0aW9uIHdpbGwgcnVuIGRlbGF5ZWQgcmVmCisgKiBvcHJhdGlvbnMgd2hpY2ggd2lsbCByZXN1bHQgaW4gbW9yZSB1c2VkIG1ldGFkYXRhLCBzbyB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZQorICogY2FuIGRvIHRoYXQgd2l0aG91dCBpc3N1ZS4KKyAqLworaW50IGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWJvb2wgYnVnID0gZmFsc2U7CisKKwkvKiBnZXQgdGhlIHNwYWNlIGluZm8gZm9yIHdoZXJlIHRoZSBtZXRhZGF0YSB3aWxsIGxpdmUgKi8KKwlhbGxvY190YXJnZXQgPSBidHJmc19nZXRfYWxsb2NfcHJvZmlsZShyb290LCAwKTsKKwltZXRhX3NpbmZvID0gX19maW5kX3NwYWNlX2luZm8oaW5mbywgYWxsb2NfdGFyZ2V0KTsKKworCW51bV9ieXRlcyA9IGNhbGN1bGF0ZV9ieXRlc19uZWVkZWQocm9vdCwgbnVtX2l0ZW1zKTsKKworCXNwaW5fbG9jaygmbWV0YV9zaW5mby0+bG9jayk7CisJaWYgKG1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgPCBudW1fYnl0ZXMpIHsKKwkJYnVnID0gdHJ1ZTsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSA9IDA7CisJfSBlbHNlIHsKKwkJbWV0YV9zaW5mby0+Ynl0ZXNfbWF5X3VzZSAtPSBudW1fYnl0ZXM7CisJfQorCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCUJVR19PTihidWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXNlcnZlIHNvbWUgbWV0YWRhdGEgc3BhY2UgZm9yIHVzZS4gIFdlJ2xsIGNhbGN1bGF0ZSB0aGUgd29yc3RlIGNhc2UgbnVtYmVyCisgKiBvZiBieXRlcyB0aGF0IHdvdWxkIGJlIG5lZWRlZCB0byBtb2RpZnkgbnVtX2l0ZW1zIG51bWJlciBvZiBpdGVtcy4gIElmIHdlCisgKiBoYXZlIHNwYWNlLCBmYW50YXN0aWMsIGlmIG5vdCwgeW91IGdldCAtRU5PU1BDLiAgUGxlYXNlIGNhbGwKKyAqIGJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZSB3aGVuIHlvdSBhcmUgZG9uZSBmb3IgdGhlIF9TQU1FXyBudW1iZXIgb2YKKyAqIGl0ZW1zIHlvdSByZXNlcnZlZCwgc2luY2Ugd2hhdGV2ZXIgbWV0YWRhdGEgeW91IG5lZWRlZCBzaG91bGQgaGF2ZSBhbHJlYWR5CisgKiBiZWVuIGFsbG9jYXRlZC4KKyAqCisgKiBUaGlzIHdpbGwgY29tbWl0IHRoZSB0cmFuc2FjdGlvbiB0byBtYWtlIG1vcmUgc3BhY2UgaWYgd2UgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAqIG1ldGFkYXRhIHNwYWNlLiAgVEhlIG9ubHkgdGltZSB3ZSBkb24ndCBkbyB0aGlzIGlzIGlmIHdlJ3JlIHJlc2VydmluZyBzcGFjZQorICogaW5zaWRlIG9mIGEgdHJhbnNhY3Rpb24sIHRoZW4gd2Ugd2lsbCBqdXN0IHJldHVybiAtRU5PU1BDIGFuZCBpdCBpcyB0aGUKKyAqIGNhbGxlcnMgcmVzcG9uc2liaWxpdHkgdG8gaGFuZGxlIGl0IHByb3Blcmx5LgorICovCitpbnQgYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG51bV9pdGVtcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKm1ldGFfc2luZm87CisJdTY0IG51bV9ieXRlczsKKwl1NjQgdXNlZDsKKwl1NjQgYWxsb2NfdGFyZ2V0OworCWludCByZXRyaWVzID0gMDsKKworCS8qIGdldCB0aGUgc3BhY2UgaW5mbyBmb3Igd2hlcmUgdGhlIG1ldGFkYXRhIHdpbGwgbGl2ZSAqLworCWFsbG9jX3RhcmdldCA9IGJ0cmZzX2dldF9hbGxvY19wcm9maWxlKHJvb3QsIDApOworCW1ldGFfc2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhpbmZvLCBhbGxvY190YXJnZXQpOworCisJbnVtX2J5dGVzID0gY2FsY3VsYXRlX2J5dGVzX25lZWRlZChyb290LCBudW1faXRlbXMpOworYWdhaW46CisJc3Bpbl9sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKworCWlmICh1bmxpa2VseSghbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCkpCisJCW1ldGFfc2luZm8tPmJ5dGVzX3Jvb3QgPSBjYWxjdWxhdGVfYnl0ZXNfbmVlZGVkKHJvb3QsIDYpOworCisJaWYgKCFyZXRyaWVzKQorCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlICs9IG51bV9ieXRlczsKKworCXVzZWQgPSBtZXRhX3NpbmZvLT5ieXRlc191c2VkICsgbWV0YV9zaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKworCQltZXRhX3NpbmZvLT5ieXRlc19waW5uZWQgKyBtZXRhX3NpbmZvLT5ieXRlc19yZWFkb25seSArCisJCW1ldGFfc2luZm8tPmJ5dGVzX3N1cGVyICsgbWV0YV9zaW5mby0+Ynl0ZXNfcm9vdCArCisJCW1ldGFfc2luZm8tPmJ5dGVzX21heV91c2UgKyBtZXRhX3NpbmZvLT5ieXRlc19kZWxhbGxvYzsKKworCWlmICh1c2VkID4gbWV0YV9zaW5mby0+dG90YWxfYnl0ZXMpIHsKKwkJcmV0cmllcysrOworCQlpZiAocmV0cmllcyA9PSAxKSB7CisJCQlpZiAobWF5YmVfYWxsb2NhdGVfY2h1bmsocm9vdCwgbWV0YV9zaW5mbykpCisJCQkJZ290byBhZ2FpbjsKKwkJCXJldHJpZXMrKzsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrKCZtZXRhX3NpbmZvLT5sb2NrKTsKKwkJfQorCisJCWlmIChyZXRyaWVzID09IDIpIHsKKwkJCWZsdXNoX2RlbGFsbG9jKHJvb3QsIG1ldGFfc2luZm8pOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlzcGluX2xvY2soJm1ldGFfc2luZm8tPmxvY2spOworCQltZXRhX3NpbmZvLT5ieXRlc19tYXlfdXNlIC09IG51bV9ieXRlczsKKwkJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOworCisJCWR1bXBfc3BhY2VfaW5mbyhtZXRhX3NpbmZvLCAwLCAwKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJY2hlY2tfZm9yY2VfZGVsYWxsb2MobWV0YV9zaW5mbyk7CiAJc3Bpbl91bmxvY2soJm1ldGFfc2luZm8tPmxvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yODg4LDcgKzMyNjgsNyBAQAogCQlzcGluX3VubG9jaygmZGF0YV9zaW5mby0+bG9jayk7CiAKIAkJLyogY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB0cnkgYWdhaW4gKi8KLQkJaWYgKCFjb21taXR0ZWQpIHsKKwkJaWYgKCFjb21taXR0ZWQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHsKIAkJCWNvbW1pdHRlZCA9IDE7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoIXRyYW5zKQpAQCAtMjkxNiw3ICszMjk2LDcgQEAKIAlCVFJGU19JKGlub2RlKS0+cmVzZXJ2ZWRfYnl0ZXMgKz0gYnl0ZXM7CiAJc3Bpbl91bmxvY2soJmRhdGFfc2luZm8tPmxvY2spOwogCi0JcmV0dXJuIGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMDE1LDE3ICszMzk1LDE1IEBACiAJQlVHX09OKCFzcGFjZV9pbmZvKTsKIAogCXNwaW5fbG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKSB7CisJaWYgKHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jKQogCQlmb3JjZSA9IDE7Ci0JCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKLQl9CiAJaWYgKHNwYWNlX2luZm8tPmZ1bGwpIHsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCQlnb3RvIG91dDsKIAl9CiAKIAl0aHJlc2ggPSBzcGFjZV9pbmZvLT50b3RhbF9ieXRlcyAtIHNwYWNlX2luZm8tPmJ5dGVzX3JlYWRvbmx5OwotCXRocmVzaCA9IGRpdl9mYWN0b3IodGhyZXNoLCA2KTsKKwl0aHJlc2ggPSBkaXZfZmFjdG9yKHRocmVzaCwgOCk7CiAJaWYgKCFmb3JjZSAmJgogCSAgIChzcGFjZV9pbmZvLT5ieXRlc191c2VkICsgc3BhY2VfaW5mby0+Ynl0ZXNfcGlubmVkICsKIAkgICAgc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKyBhbGxvY19ieXRlcykgPCB0aHJlc2gpIHsKQEAgLTMwMzksNyArMzQxNyw3IEBACiAJICogd2Uga2VlcCBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIG1ldGFkYXRhIGNodW5rcyBhbGxvY2F0ZWQgaW4gdGhlCiAJICogRlMgYXMgd2VsbC4KIAkgKi8KLQlpZiAoZmxhZ3MgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSB7CisJaWYgKGZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSAmJiBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykgewogCQlmc19pbmZvLT5kYXRhX2NodW5rX2FsbG9jYXRpb25zKys7CiAJCWlmICghKGZzX2luZm8tPmRhdGFfY2h1bmtfYWxsb2NhdGlvbnMgJQogCQkgICAgICBmc19pbmZvLT5tZXRhZGF0YV9yYXRpbykpCkBAIC0zMDQ3LDggKzM0MjUsMTEgQEAKIAl9CiAKIAlyZXQgPSBidHJmc19hbGxvY19jaHVuayh0cmFucywgZXh0ZW50X3Jvb3QsIGZsYWdzKTsKKwlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChyZXQpCiAJCXNwYWNlX2luZm8tPmZ1bGwgPSAxOworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKwlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZleHRlbnRfcm9vdC0+ZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0zMzA2LDYgKzM2ODcsMTQgQEAKIAlpZiAoaXNfZGF0YSkKIAkJZ290byBwaW5pdDsKIAorCS8qCisJICogZGlzY2FyZCBpcyBzbG9vb293LCBhbmQgc28gdHJpZ2dlcmluZyBkaXNjYXJkcyBvbgorCSAqIGluZGl2aWR1YWwgYnRyZWUgYmxvY2tzIGlzbid0IGEgZ29vZCBwbGFuLiAgSnVzdAorCSAqIHBpbiBldmVyeXRoaW5nIGluIGRpc2NhcmQgbW9kZS4KKwkgKi8KKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgRElTQ0FSRCkpCisJCWdvdG8gcGluaXQ7CisKIAlidWYgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMpOwogCWlmICghYnVmKQogCQlnb3RvIHBpbml0OwpAQCAtMzcxMyw3ICs0MTAyLDcgQEAKIH0KIAogZW51bSBidHJmc19sb29wX3R5cGUgewotCUxPT1BfQ0FDSEVEX09OTFkgPSAwLAorCUxPT1BfRklORF9JREVBTCA9IDAsCiAJTE9PUF9DQUNISU5HX05PV0FJVCA9IDEsCiAJTE9PUF9DQUNISU5HX1dBSVQgPSAyLAogCUxPT1BfQUxMT0NfQ0hVTksgPSAzLApAQCAtMzc0MiwxMSArNDEzMSwxNSBAQAogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAgPSBOVUxMOwogCWludCBlbXB0eV9jbHVzdGVyID0gMiAqIDEwMjQgKiAxMDI0OwogCWludCBhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwlpbnQgZG9uZV9jaHVua19hbGxvYyA9IDA7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CiAJaW50IGxhc3RfcHRyX2xvb3AgPSAwOwogCWludCBsb29wID0gMDsKIAlib29sIGZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7CiAJYm9vbCBmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwlib29sIGZhaWxlZF9hbGxvYyA9IGZhbHNlOworCXU2NCBpZGVhbF9jYWNoZV9wZXJjZW50ID0gMDsKKwl1NjQgaWRlYWxfY2FjaGVfb2Zmc2V0ID0gMDsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYnRyZnNfc2V0X2tleV90eXBlKGlucywgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKQEAgLTM3ODIsMTQgKzQxNzUsMTkgQEAKIAkJZW1wdHlfY2x1c3RlciA9IDA7CiAKIAlpZiAoc2VhcmNoX3N0YXJ0ID09IGhpbnRfYnl0ZSkgeworaWRlYWxfY2FjaGU6CiAJCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCiAJCQkJCQkgICAgICAgc2VhcmNoX3N0YXJ0KTsKIAkJLyoKIAkJICogd2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGJsb2NrIGdyb3VwIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggb3VyCiAJCSAqIGFsbG9jYXRpb24gYml0cywgb3IgaWYgaXRzIG5vdCBjYWNoZWQuCisJCSAqCisJCSAqIEhvd2V2ZXIgaWYgd2UgYXJlIHJlLXNlYXJjaGluZyB3aXRoIGFuIGlkZWFsIGJsb2NrIGdyb3VwCisJCSAqIHBpY2tlZCBvdXQgdGhlbiB3ZSBkb24ndCBjYXJlIHRoYXQgdGhlIGJsb2NrIGdyb3VwIGlzIGNhY2hlZC4KIAkJICovCiAJCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSAmJgotCQkgICAgYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCkpIHsKKwkJICAgIChibG9ja19ncm91cC0+Y2FjaGVkICE9IEJUUkZTX0NBQ0hFX05PIHx8CisJCSAgICAgc2VhcmNoX3N0YXJ0ID09IGlkZWFsX2NhY2hlX29mZnNldCkpIHsKIAkJCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7CiAJCQlpZiAobGlzdF9lbXB0eSgmYmxvY2tfZ3JvdXAtPmxpc3QpIHx8CiAJCQkgICAgYmxvY2tfZ3JvdXAtPnJvKSB7CkBAIC0zODAxLDEzICs0MTk5LDEzIEBACiAJCQkJICovCiAJCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAkJCQl1cF9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKIAkJCQlnb3RvIGhhdmVfYmxvY2tfZ3JvdXA7CisJCQl9CiAJCX0gZWxzZSBpZiAoYmxvY2tfZ3JvdXApIHsKIAkJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCX0KIAl9Ci0KIHNlYXJjaDoKIAlkb3duX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2tfZ3JvdXAsICZzcGFjZV9pbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTM4MTksMjggKzQyMTcsNDUgQEAKIAogaGF2ZV9ibG9ja19ncm91cDoKIAkJaWYgKHVubGlrZWx5KGJsb2NrX2dyb3VwLT5jYWNoZWQgPT0gQlRSRlNfQ0FDSEVfTk8pKSB7CisJCQl1NjQgZnJlZV9wZXJjZW50OworCisJCQlmcmVlX3BlcmNlbnQgPSBidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSk7CisJCQlmcmVlX3BlcmNlbnQgKj0gMTAwOworCQkJZnJlZV9wZXJjZW50ID0gZGl2NjRfdTY0KGZyZWVfcGVyY2VudCwKKwkJCQkJCSBibG9ja19ncm91cC0+a2V5Lm9mZnNldCk7CisJCQlmcmVlX3BlcmNlbnQgPSAxMDAgLSBmcmVlX3BlcmNlbnQ7CisJCQlpZiAoZnJlZV9wZXJjZW50ID4gaWRlYWxfY2FjaGVfcGVyY2VudCAmJgorCQkJICAgIGxpa2VseSghYmxvY2tfZ3JvdXAtPnJvKSkgeworCQkJCWlkZWFsX2NhY2hlX29mZnNldCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CisJCQkJaWRlYWxfY2FjaGVfcGVyY2VudCA9IGZyZWVfcGVyY2VudDsKKwkJCX0KKwogCQkJLyoKLQkJCSAqIHdlIHdhbnQgdG8gc3RhcnQgY2FjaGluZyBrdGhyZWFkcywgYnV0IG5vdCB0b28gbWFueQotCQkJICogcmlnaHQgb2ZmIHRoZSBiYXQgc28gd2UgZG9uJ3Qgb3ZlcndoZWxtIHRoZSBzeXN0ZW0sCi0JCQkgKiBzbyBvbmx5IHN0YXJ0IHRoZW0gaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAyIGFuZCB3ZSdyZQotCQkJICogaW4gdGhlIGluaXRpYWwgYWxsb2NhdGlvbiBwaGFzZS4KKwkJCSAqIFdlIG9ubHkgd2FudCB0byBzdGFydCBrdGhyZWFkIGNhY2hpbmcgaWYgd2UgYXJlIGF0CisJCQkgKiB0aGUgcG9pbnQgd2hlcmUgd2Ugd2lsbCB3YWl0IGZvciBjYWNoaW5nIHRvIG1ha2UKKwkJCSAqIHByb2dyZXNzLCBvciBpZiBvdXIgaWRlYWwgc2VhcmNoIGlzIG92ZXIgYW5kIHdlJ3ZlCisJCQkgKiBmb3VuZCBzb21lYm9keSB0byBzdGFydCBjYWNoaW5nLgogCQkJICovCiAJCQlpZiAobG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQgfHwKLQkJCSAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpIHsKKwkJCSAgICAobG9vcCA+IExPT1BfRklORF9JREVBTCAmJgorCQkJICAgICBhdG9taWNfcmVhZCgmc3BhY2VfaW5mby0+Y2FjaGluZ190aHJlYWRzKSA8IDIpKSB7CiAJCQkJcmV0ID0gY2FjaGVfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCUJVR19PTihyZXQpOwogCQkJfQorCQkJZm91bmRfdW5jYWNoZWRfYmcgPSB0cnVlOworCisJCQkvKgorCQkJICogSWYgbG9vcCBpcyBzZXQgZm9yIGNhY2hlZCBvbmx5LCB0cnkgdGhlIG5leHQgYmxvY2sKKwkJCSAqIGdyb3VwLgorCQkJICovCisJCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwpCisJCQkJZ290byBsb29wOwogCQl9CiAKIAkJY2FjaGVkID0gYmxvY2tfZ3JvdXBfY2FjaGVfZG9uZShibG9ja19ncm91cCk7Ci0JCWlmICh1bmxpa2VseSghY2FjaGVkKSkgeworCQlpZiAodW5saWtlbHkoIWNhY2hlZCkpCiAJCQlmb3VuZF91bmNhY2hlZF9iZyA9IHRydWU7CiAKLQkJCS8qIGlmIHdlIG9ubHkgd2FudCBjYWNoZWQgYmdzLCBsb29wICovCi0JCQlpZiAobG9vcCA9PSBMT09QX0NBQ0hFRF9PTkxZKQotCQkJCWdvdG8gbG9vcDsKLQkJfQotCiAJCWlmICh1bmxpa2VseShibG9ja19ncm91cC0+cm8pKQogCQkJZ290byBsb29wOwogCkBAIC0zOTUxLDE0ICs0MzY2LDIzIEBACiAKIAkJb2Zmc2V0ID0gYnRyZnNfZmluZF9zcGFjZV9mb3JfYWxsb2MoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKIAkJCQkJCSAgICBudW1fYnl0ZXMsIGVtcHR5X3NpemUpOwotCQlpZiAoIW9mZnNldCAmJiAoY2FjaGVkIHx8ICghY2FjaGVkICYmCi0JCQkJCSAgIGxvb3AgPT0gTE9PUF9DQUNISU5HX05PV0FJVCkpKSB7Ci0JCQlnb3RvIGxvb3A7Ci0JCX0gZWxzZSBpZiAoIW9mZnNldCAmJiAoIWNhY2hlZCAmJgotCQkJCSAgICAgICBsb29wID4gTE9PUF9DQUNISU5HX05PV0FJVCkpIHsKKwkJLyoKKwkJICogSWYgd2UgZGlkbid0IGZpbmQgYSBjaHVuaywgYW5kIHdlIGhhdmVuJ3QgZmFpbGVkIG9uIHRoaXMKKwkJICogYmxvY2sgZ3JvdXAgYmVmb3JlLCBhbmQgdGhpcyBibG9jayBncm91cCBpcyBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGNhY2hpbmcgYW5kIHdlIGFyZSBvayB3aXRoIHdhaXRpbmcsIHRoZW4gZ28gYWhlYWQgYW5kIHdhaXQKKwkJICogZm9yIHByb2dyZXNzIHRvIGJlIG1hZGUsIGFuZCBzZXQgZmFpbGVkX2FsbG9jIHRvIHRydWUuCisJCSAqCisJCSAqIElmIGZhaWxlZF9hbGxvYyBpcyB0cnVlIHRoZW4gd2UndmUgYWxyZWFkeSB3YWl0ZWQgb24gdGhpcworCQkgKiBibG9jayBncm91cCBvbmNlIGFuZCBzaG91bGQgbW92ZSBvbiB0byB0aGUgbmV4dCBibG9jayBncm91cC4KKwkJICovCisJCWlmICghb2Zmc2V0ICYmICFmYWlsZWRfYWxsb2MgJiYgIWNhY2hlZCAmJgorCQkgICAgbG9vcCA+IExPT1BfQ0FDSElOR19OT1dBSVQpIHsKIAkJCXdhaXRfYmxvY2tfZ3JvdXBfY2FjaGVfcHJvZ3Jlc3MoYmxvY2tfZ3JvdXAsCi0JCQkJCW51bV9ieXRlcyArIGVtcHR5X3NpemUpOworCQkJCQkJbnVtX2J5dGVzICsgZW1wdHlfc2l6ZSk7CisJCQlmYWlsZWRfYWxsb2MgPSB0cnVlOwogCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQl9IGVsc2UgaWYgKCFvZmZzZXQpIHsKKwkJCWdvdG8gbG9vcDsKIAkJfQogY2hlY2tzOgogCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgb2Zmc2V0KTsKQEAgLTQwMDYsMTMgKzQ0MzAsMTYgQEAKIAkJYnJlYWs7CiBsb29wOgogCQlmYWlsZWRfY2x1c3Rlcl9yZWZpbGwgPSBmYWxzZTsKKwkJZmFpbGVkX2FsbG9jID0gZmFsc2U7CiAJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJfQogCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCi0JLyogTE9PUF9DQUNIRURfT05MWSwgb25seSBzZWFyY2ggZnVsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcwotCSAqIExPT1BfQ0FDSElOR19OT1dBSVQsIHNlYXJjaCBwYXJ0aWFsbHkgY2FjaGVkIGJsb2NrIGdyb3VwcywgYnV0Ci0JICoJCQlkb250IHdhaXQgZm9SIHRoZW0gdG8gZmluaXNoIGNhY2hpbmcKKwkvKiBMT09QX0ZJTkRfSURFQUwsIG9ubHkgc2VhcmNoIGNhY2hpbmcvY2FjaGVkIGJnJ3MsIGFuZCBkb24ndCB3YWl0IGZvcgorCSAqCQkJZm9yIHRoZW0gdG8gbWFrZSBjYWNoaW5nIHByb2dyZXNzLiAgQWxzbworCSAqCQkJZGV0ZXJtaW5lIHRoZSBiZXN0IHBvc3NpYmxlIGJnIHRvIGNhY2hlCisJICogTE9PUF9DQUNISU5HX05PV0FJVCwgc2VhcmNoIHBhcnRpYWxseSBjYWNoZWQgYmxvY2sgZ3JvdXBzLCBraWNraW5nCisJICoJCQljYWNoaW5nIGt0aHJlYWRzIGFzIHdlIG1vdmUgYWxvbmcKIAkgKiBMT09QX0NBQ0hJTkdfV0FJVCwgc2VhcmNoIGV2ZXJ5dGhpbmcsIGFuZCB3YWl0IGlmIG91ciBiZyBpcyBjYWNoaW5nCiAJICogTE9PUF9BTExPQ19DSFVOSywgZm9yY2UgYSBjaHVuayBhbGxvY2F0aW9uIGFuZCB0cnkgYWdhaW4KIAkgKiBMT09QX05PX0VNUFRZX1NJWkUsIHNldCBlbXB0eV9zaXplIGFuZCBlbXB0eV9jbHVzdGVyIHRvIDAgYW5kIHRyeQpAQCAtNDAyMSwxMiArNDQ0OCw0NyBAQAogCWlmICghaW5zLT5vYmplY3RpZCAmJiBsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFICYmCiAJICAgIChmb3VuZF91bmNhY2hlZF9iZyB8fCBlbXB0eV9zaXplIHx8IGVtcHR5X2NsdXN0ZXIgfHwKIAkgICAgIGFsbG93ZWRfY2h1bmtfYWxsb2MpKSB7Ci0JCWlmIChmb3VuZF91bmNhY2hlZF9iZykgeworCQlpZiAobG9vcCA9PSBMT09QX0ZJTkRfSURFQUwgJiYgZm91bmRfdW5jYWNoZWRfYmcpIHsKIAkJCWZvdW5kX3VuY2FjaGVkX2JnID0gZmFsc2U7Ci0JCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7Ci0JCQkJbG9vcCsrOworCQkJbG9vcCsrOworCQkJaWYgKCFpZGVhbF9jYWNoZV9wZXJjZW50ICYmCisJCQkgICAgYXRvbWljX3JlYWQoJnNwYWNlX2luZm8tPmNhY2hpbmdfdGhyZWFkcykpCiAJCQkJZ290byBzZWFyY2g7Ci0JCQl9CisKKwkJCS8qCisJCQkgKiAxIG9mIHRoZSBmb2xsb3dpbmcgMiB0aGluZ3MgaGF2ZSBoYXBwZW5lZCBzbyBmYXIKKwkJCSAqCisJCQkgKiAxKSBXZSBmb3VuZCBhbiBpZGVhbCBibG9jayBncm91cCBmb3IgY2FjaGluZyB0aGF0CisJCQkgKiBpcyBtb3N0bHkgZnVsbCBhbmQgd2lsbCBjYWNoZSBxdWlja2x5LCBzbyB3ZSBtaWdodAorCQkJICogYXMgd2VsbCB3YWl0IGZvciBpdC4KKwkJCSAqCisJCQkgKiAyKSBXZSBzZWFyY2hlZCBmb3IgY2FjaGVkIG9ubHkgYW5kIHdlIGRpZG4ndCBmaW5kCisJCQkgKiBhbnl0aGluZywgYW5kIHdlIGRpZG4ndCBzdGFydCBhbnkgY2FjaGluZyBrdGhyZWFkcworCQkJICogZWl0aGVyLCBzbyBjaGFuY2VzIGFyZSB3ZSB3aWxsIGxvb3AgdGhyb3VnaCBhbmQKKwkJCSAqIHN0YXJ0IGEgY291cGxlIGNhY2hpbmcga3RocmVhZHMsIGFuZCB0aGVuIGNvbWUgYmFjaworCQkJICogYXJvdW5kIGFuZCBqdXN0IHdhaXQgZm9yIHRoZW0uICBUaGlzIHdpbGwgYmUgc2xvd2VyCisJCQkgKiBiZWNhdXNlIHdlIHdpbGwgaGF2ZSAyIGNhY2hpbmcga3RocmVhZHMgcmVhZGluZyBhdAorCQkJICogdGhlIHNhbWUgdGltZSB3aGVuIHdlIGNvdWxkIGhhdmUganVzdCBzdGFydGVkIG9uZQorCQkJICogYW5kIHdhaXRlZCBmb3IgaXQgdG8gZ2V0IGZhciBlbm91Z2ggdG8gZ2l2ZSB1cyBhbgorCQkJICogYWxsb2NhdGlvbiwgc28gZ28gYWhlYWQgYW5kIGdvIHRvIHRoZSB3YWl0IGNhY2hpbmcKKwkJCSAqIGxvb3AuCisJCQkgKi8KKwkJCWxvb3AgPSBMT09QX0NBQ0hJTkdfV0FJVDsKKwkJCXNlYXJjaF9zdGFydCA9IGlkZWFsX2NhY2hlX29mZnNldDsKKwkJCWlkZWFsX2NhY2hlX3BlcmNlbnQgPSAwOworCQkJZ290byBpZGVhbF9jYWNoZTsKKwkJfSBlbHNlIGlmIChsb29wID09IExPT1BfRklORF9JREVBTCkgeworCQkJLyoKKwkJCSAqIERpZG4ndCBmaW5kIGEgdW5jYWNoZWQgYmcsIHdhaXQgb24gYW55dGhpbmcgd2UgZmluZAorCQkJICogbmV4dC4KKwkJCSAqLworCQkJbG9vcCA9IExPT1BfQ0FDSElOR19XQUlUOworCQkJZ290byBzZWFyY2g7CisJCX0KKworCQlpZiAobG9vcCA8IExPT1BfQ0FDSElOR19XQUlUKSB7CisJCQlsb29wKys7CisJCQlnb3RvIHNlYXJjaDsKIAkJfQogCiAJCWlmIChsb29wID09IExPT1BfQUxMT0NfQ0hVTkspIHsKQEAgLTQwMzgsNyArNDUwMCw4IEBACiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgbnVtX2J5dGVzICsKIAkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsIDEpOwogCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0JCX0gZWxzZSB7CisJCQlkb25lX2NodW5rX2FsbG9jID0gMTsKKwkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYykgewogCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSAxOwogCQl9CiAKQEAgLTQwNjMsMjEgKzQ1MjYsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBkdW1wX3NwYWNlX2luZm8oc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKmluZm8sIHU2NCBieXRlcykKK3N0YXRpYyB2b2lkIGR1bXBfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbywgdTY0IGJ5dGVzLAorCQkJICAgIGludCBkdW1wX2Jsb2NrX2dyb3VwcykKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlOwogCisJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKIAlwcmludGsoS0VSTl9JTkZPICJzcGFjZV9pbmZvIGhhcyAlbGx1IGZyZWUsIGlzICVzZnVsbFxuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykoaW5mby0+dG90YWxfYnl0ZXMgLSBpbmZvLT5ieXRlc191c2VkIC0KLQkJCQkgICAgaW5mby0+Ynl0ZXNfcGlubmVkIC0gaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpLAorCQkJCSAgICBpbmZvLT5ieXRlc19waW5uZWQgLSBpbmZvLT5ieXRlc19yZXNlcnZlZCAtCisJCQkJICAgIGluZm8tPmJ5dGVzX3N1cGVyKSwKIAkgICAgICAgKGluZm8tPmZ1bGwpID8gIiIgOiAibm90ICIpOwogCXByaW50ayhLRVJOX0lORk8gInNwYWNlX2luZm8gdG90YWw9JWxsdSwgcGlubmVkPSVsbHUsIGRlbGFsbG9jPSVsbHUsIgotCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1XG4iLAorCSAgICAgICAiIG1heV91c2U9JWxsdSwgdXNlZD0lbGx1LCByb290PSVsbHUsIHN1cGVyPSVsbHUsIHJlc2VydmVkPSVsbHUiCisJICAgICAgICJcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+dG90YWxfYnl0ZXMsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfcGlubmVkLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX2RlbGFsbG9jLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX21heV91c2UsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCk7CisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5mby0+Ynl0ZXNfdXNlZCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmZvLT5ieXRlc19yb290LAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3N1cGVyLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWluZm8tPmJ5dGVzX3Jlc2VydmVkKTsKKwlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CisKKwlpZiAoIWR1bXBfYmxvY2tfZ3JvdXBzKQorCQlyZXR1cm47CiAKIAlkb3duX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZpbmZvLT5ibG9ja19ncm91cHMsIGxpc3QpIHsKQEAgLTQxNDUsNyArNDYxOSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWxsb2NhdGlvbiBmYWlsZWQgZmxhZ3MgJWxsdSwgIgogCQkgICAgICAgIndhbnRlZCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWRhdGEsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bV9ieXRlcyk7Ci0JCWR1bXBfc3BhY2VfaW5mbyhzaW5mbywgbnVtX2J5dGVzKTsKKwkJZHVtcF9zcGFjZV9pbmZvKHNpbmZvLCBudW1fYnl0ZXMsIDEpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00NTA2LDYgKzQ5ODAsNyBAQAogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IHJlZnM7CisJdTY0IGZsYWdzOwogCXU2NCBsYXN0ID0gMDsKIAl1MzIgbnJpdGVtczsKIAl1MzIgYmxvY2tzaXplOwpAQCAtNDU0MywxNSArNTAxOCwxOSBAQAogCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQljb250aW51ZTsKIAorCQkvKiBXZSBkb24ndCBsb2NrIHRoZSB0cmVlIGJsb2NrLCBpdCdzIE9LIHRvIGJlIHJhY3kgaGVyZSAqLworCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCQkJCQkgICAgICAgJnJlZnMsICZmbGFncyk7CisJCUJVR19PTihyZXQpOworCQlCVUdfT04ocmVmcyA9PSAwKTsKKwogCQlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7Ci0JCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCi0JCQkJCQlieXRlbnIsIGJsb2Nrc2l6ZSwKLQkJCQkJCSZyZWZzLCBOVUxMKTsKLQkJCUJVR19PTihyZXQpOwotCQkJQlVHX09OKHJlZnMgPT0gMCk7CiAJCQlpZiAocmVmcyA9PSAxKQogCQkJCWdvdG8gcmVhZGE7CiAKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJCWlmICghd2MtPnVwZGF0ZV9yZWYgfHwKIAkJCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkKIAkJCQljb250aW51ZTsKQEAgLTQ1NjAsNiArNTAzOSwxMCBAQAogCQkJCQkJICAmd2MtPnVwZGF0ZV9wcm9ncmVzcyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3Yy0+bGV2ZWwgPT0gMSAmJgorCQkJICAgIChmbGFncyAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSkKKwkJCQljb250aW51ZTsKIAkJfQogcmVhZGE6CiAJCXJldCA9IHJlYWRhaGVhZF90cmVlX2Jsb2NrKHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLApAQCAtNDU4Myw3ICs1MDY2LDcgQEAKIHN0YXRpYyBub2lubGluZSBpbnQgd2Fsa19kb3duX3Byb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIGludCBsb29rdXBfaW5mbykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViID0gcGF0aC0+bm9kZXNbbGV2ZWxdOwpAQCAtNDU5OCw4ICs1MDgxLDkgQEAKIAkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudCBvZiB0cmVlIGJsb2NrIGlzIDEsIGl0IHdvbid0IGluY3JlYXNlCiAJICogYWdhaW4uIG9uY2UgZnVsbCBiYWNrcmVmIGZsYWcgaXMgc2V0LCB3ZSBuZXZlciBjbGVhciBpdC4KIAkgKi8KLQlpZiAoKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSAmJiB3Yy0+cmVmc1tsZXZlbF0gIT0gMSkgfHwKLQkgICAgKHdjLT5zdGFnZSA9PSBVUERBVEVfQkFDS1JFRiAmJiAhKHdjLT5mbGFnc1tsZXZlbF0gJiBmbGFnKSkpIHsKKwlpZiAobG9va3VwX2luZm8gJiYKKwkgICAgKCh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UgJiYgd2MtPnJlZnNbbGV2ZWxdICE9IDEpIHx8CisJICAgICAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmICEod2MtPmZsYWdzW2xldmVsXSAmIGZsYWcpKSkpIHsKIAkJQlVHX09OKCFwYXRoLT5sb2Nrc1tsZXZlbF0pOwogCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsCiAJCQkJCSAgICAgICBlYi0+c3RhcnQsIGViLT5sZW4sCkBAIC00NjYwLDcgKzUxNDQsNyBAQAogc3RhdGljIG5vaW5saW5lIGludCBkb193YWxrX2Rvd24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgc3RydWN0IHdhbGtfY29udHJvbCAqd2MpCisJCQkJIHN0cnVjdCB3YWxrX2NvbnRyb2wgKndjLCBpbnQgKmxvb2t1cF9pbmZvKQogewogCXU2NCBieXRlbnI7CiAJdTY0IGdlbmVyYXRpb247CkBAIC00NjgwLDggKzUxNjQsMTAgQEAKIAkgKiBmb3IgdGhlIHN1YnRyZWUKIAkgKi8KIAlpZiAod2MtPnN0YWdlID09IFVQREFURV9CQUNLUkVGICYmCi0JICAgIGdlbmVyYXRpb24gPD0gcm9vdC0+cm9vdF9rZXkub2Zmc2V0KQorCSAgICBnZW5lcmF0aW9uIDw9IHJvb3QtPnJvb3Rfa2V5Lm9mZnNldCkgeworCQkqbG9va3VwX2luZm8gPSAxOwogCQlyZXR1cm4gMTsKKwl9CiAKIAlieXRlbnIgPSBidHJmc19ub2RlX2Jsb2NrcHRyKHBhdGgtPm5vZGVzW2xldmVsXSwgcGF0aC0+c2xvdHNbbGV2ZWxdKTsKIAlibG9ja3NpemUgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIGxldmVsIC0gMSk7CkBAIC00Njk0LDE0ICs1MTgwLDE5IEBACiAJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwogCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOwogCi0JaWYgKHdjLT5zdGFnZSA9PSBEUk9QX1JFRkVSRU5DRSkgewotCQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X2luZm8odHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAotCQkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCi0JCQkJCSAgICAgICAmd2MtPmZsYWdzW2xldmVsIC0gMV0pOwotCQlCVUdfT04ocmV0KTsKLQkJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJcmV0ID0gYnRyZnNfbG9va3VwX2V4dGVudF9pbmZvKHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKKwkJCQkgICAgICAgJndjLT5yZWZzW2xldmVsIC0gMV0sCisJCQkJICAgICAgICZ3Yy0+ZmxhZ3NbbGV2ZWwgLSAxXSk7CisJQlVHX09OKHJldCk7CisJQlVHX09OKHdjLT5yZWZzW2xldmVsIC0gMV0gPT0gMCk7CisJKmxvb2t1cF9pbmZvID0gMDsKIAorCWlmICh3Yy0+c3RhZ2UgPT0gRFJPUF9SRUZFUkVOQ0UpIHsKIAkJaWYgKHdjLT5yZWZzW2xldmVsIC0gMV0gPiAxKSB7CisJCQlpZiAobGV2ZWwgPT0gMSAmJgorCQkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQkJZ290byBza2lwOworCiAJCQlpZiAoIXdjLT51cGRhdGVfcmVmIHx8CiAJCQkgICAgZ2VuZXJhdGlvbiA8PSByb290LT5yb290X2tleS5vZmZzZXQpCiAJCQkJZ290byBza2lwOwpAQCAtNDcxNSwxMiArNTIwNiwxNyBAQAogCQkJd2MtPnN0YWdlID0gVVBEQVRFX0JBQ0tSRUY7CiAJCQl3Yy0+c2hhcmVkX2xldmVsID0gbGV2ZWwgLSAxOwogCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxldmVsID09IDEgJiYKKwkJICAgICh3Yy0+ZmxhZ3NbMF0gJiBCVFJGU19CTE9DS19GTEFHX0ZVTExfQkFDS1JFRikpCisJCQlnb3RvIHNraXA7CiAJfQogCiAJaWYgKCFidHJmc19idWZmZXJfdXB0b2RhdGUobmV4dCwgZ2VuZXJhdGlvbikpIHsKIAkJYnRyZnNfdHJlZV91bmxvY2sobmV4dCk7CiAJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJbmV4dCA9IE5VTEw7CisJCSpsb29rdXBfaW5mbyA9IDE7CiAJfQogCiAJaWYgKCFuZXh0KSB7CkBAIC00NzQzLDIxICs1MjM5LDIyIEBACiBza2lwOgogCXdjLT5yZWZzW2xldmVsIC0gMV0gPSAwOwogCXdjLT5mbGFnc1tsZXZlbCAtIDFdID0gMDsKKwlpZiAod2MtPnN0YWdlID09IERST1BfUkVGRVJFTkNFKSB7CisJCWlmICh3Yy0+ZmxhZ3NbbGV2ZWxdICYgQlRSRlNfQkxPQ0tfRkxBR19GVUxMX0JBQ0tSRUYpIHsKKwkJCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7CisJCX0gZWxzZSB7CisJCQlCVUdfT04ocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgIT0KKwkJCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7CisJCQlwYXJlbnQgPSAwOworCQl9CiAKLQlpZiAod2MtPmZsYWdzW2xldmVsXSAmIEJUUkZTX0JMT0NLX0ZMQUdfRlVMTF9CQUNLUkVGKSB7Ci0JCXBhcmVudCA9IHBhdGgtPm5vZGVzW2xldmVsXS0+c3RhcnQ7Ci0JfSBlbHNlIHsKLQkJQlVHX09OKHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkICE9Ci0JCSAgICAgICBidHJmc19oZWFkZXJfb3duZXIocGF0aC0+bm9kZXNbbGV2ZWxdKSk7Ci0JCXBhcmVudCA9IDA7CisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgcGFyZW50LAorCQkJCQlyb290LT5yb290X2tleS5vYmplY3RpZCwgbGV2ZWwgLSAxLCAwKTsKKwkJQlVHX09OKHJldCk7CiAJfQotCi0JcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLCBwYXJlbnQsCi0JCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsIGxldmVsIC0gMSwgMCk7Ci0JQlVHX09OKHJldCk7Ci0KIAlidHJmc190cmVlX3VubG9jayhuZXh0KTsKIAlmcmVlX2V4dGVudF9idWZmZXIobmV4dCk7CisJKmxvb2t1cF9pbmZvID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNDg3MSw2ICs1MzY4LDcgQEAKIAkJCQkgICBzdHJ1Y3Qgd2Fsa19jb250cm9sICp3YykKIHsKIAlpbnQgbGV2ZWwgPSB3Yy0+bGV2ZWw7CisJaW50IGxvb2t1cF9pbmZvID0gMTsKIAlpbnQgcmV0OwogCiAJd2hpbGUgKGxldmVsID49IDApIHsKQEAgLTQ4NzgsMTQgKzUzNzYsMTQgQEAKIAkJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzW2xldmVsXSkpCiAJCQlicmVhazsKIAotCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSB3YWxrX2Rvd25fcHJvYyh0cmFucywgcm9vdCwgcGF0aCwgd2MsIGxvb2t1cF9pbmZvKTsKIAkJaWYgKHJldCA+IDApCiAJCQlicmVhazsKIAogCQlpZiAobGV2ZWwgPT0gMCkKIAkJCWJyZWFrOwogCi0JCXJldCA9IGRvX3dhbGtfZG93bih0cmFucywgcm9vdCwgcGF0aCwgd2MpOworCQlyZXQgPSBkb193YWxrX2Rvd24odHJhbnMsIHJvb3QsIHBhdGgsIHdjLCAmbG9va3VwX2luZm8pOwogCQlpZiAocmV0ID4gMCkgewogCQkJcGF0aC0+c2xvdHNbbGV2ZWxdKys7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMGNiODhmOC4uOTY1NzdlOCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTI4MCw2ICsyODAsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWVyZ2VfY2Ioc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpuZXcsCisJCSAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3RoZXIpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKQorCQl0cmVlLT5vcHMtPm1lcmdlX2V4dGVudF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIG5ldywKKwkJCQkJICAgICBvdGhlcik7Cit9CisKIC8qCiAgKiB1dGlsaXR5IGZ1bmN0aW9uIHRvIGxvb2sgZm9yIG1lcmdlIGNhbmRpZGF0ZXMgaW5zaWRlIGEgZ2l2ZW4gcmFuZ2UuCiAgKiBBbnkgZXh0ZW50cyB3aXRoIG1hdGNoaW5nIHN0YXRlIGFyZSBtZXJnZWQgdG9nZXRoZXIgaW50byBhIHNpbmdsZQpAQCAtMzAzLDYgKzMxMSw3IEBACiAJCW90aGVyID0gcmJfZW50cnkob3RoZXJfbm9kZSwgc3RydWN0IGV4dGVudF9zdGF0ZSwgcmJfbm9kZSk7CiAJCWlmIChvdGhlci0+ZW5kID09IHN0YXRlLT5zdGFydCAtIDEgJiYKIAkJICAgIG90aGVyLT5zdGF0ZSA9PSBzdGF0ZS0+c3RhdGUpIHsKKwkJCW1lcmdlX2NiKHRyZWUsIHN0YXRlLCBvdGhlcik7CiAJCQlzdGF0ZS0+c3RhcnQgPSBvdGhlci0+c3RhcnQ7CiAJCQlvdGhlci0+dHJlZSA9IE5VTEw7CiAJCQlyYl9lcmFzZSgmb3RoZXItPnJiX25vZGUsICZ0cmVlLT5zdGF0ZSk7CkBAIC0zMTQsMzMgKzMyMywzNyBAQAogCQlvdGhlciA9IHJiX2VudHJ5KG90aGVyX25vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUsIHJiX25vZGUpOwogCQlpZiAob3RoZXItPnN0YXJ0ID09IHN0YXRlLT5lbmQgKyAxICYmCiAJCSAgICBvdGhlci0+c3RhdGUgPT0gc3RhdGUtPnN0YXRlKSB7CisJCQltZXJnZV9jYih0cmVlLCBzdGF0ZSwgb3RoZXIpOwogCQkJb3RoZXItPnN0YXJ0ID0gc3RhdGUtPnN0YXJ0OwogCQkJc3RhdGUtPnRyZWUgPSBOVUxMOwogCQkJcmJfZXJhc2UoJnN0YXRlLT5yYl9ub2RlLCAmdHJlZS0+c3RhdGUpOwogCQkJZnJlZV9leHRlbnRfc3RhdGUoc3RhdGUpOworCQkJc3RhdGUgPSBOVUxMOwogCQl9CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCitzdGF0aWMgaW50IHNldF9zdGF0ZV9jYihzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5zZXRfYml0X2hvb2spIHsKLQkJdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUtPnN0YXJ0LAotCQkJCQlzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOworCQlyZXR1cm4gdHJlZS0+b3BzLT5zZXRfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGFydCwgc3RhdGUtPmVuZCwKKwkJCQkJICAgICAgIHN0YXRlLT5zdGF0ZSwgYml0cyk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNsZWFyX3N0YXRlX2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAogCQkJICAgdW5zaWduZWQgbG9uZyBiaXRzKQogewotCWlmICh0cmVlLT5vcHMgJiYgdHJlZS0+b3BzLT5jbGVhcl9iaXRfaG9vaykgewotCQl0cmVlLT5vcHMtPmNsZWFyX2JpdF9ob29rKHRyZWUtPm1hcHBpbmctPmhvc3QsIHN0YXRlLT5zdGFydCwKLQkJCQkJICBzdGF0ZS0+ZW5kLCBzdGF0ZS0+c3RhdGUsIGJpdHMpOwotCX0KKwlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2spCisJCXRyZWUtPm9wcy0+Y2xlYXJfYml0X2hvb2sodHJlZS0+bWFwcGluZy0+aG9zdCwgc3RhdGUsIGJpdHMpOwogfQogCiAvKgpAQCAtMzU4LDYgKzM3MSw3IEBACiAJCQlpbnQgYml0cykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlpbnQgcmV0OwogCiAJaWYgKGVuZCA8IHN0YXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgZW5kIDwgc3RhcnQgJWxsdSAlbGx1XG4iLApAQCAtMzY1LDExICszNzksMTQgQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnQpOwogCQlXQVJOX09OKDEpOwogCX0KLQlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKLQkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGFydCA9IHN0YXJ0OwogCXN0YXRlLT5lbmQgPSBlbmQ7Ci0Jc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlyZXQgPSBzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYml0cyAmIEVYVEVOVF9ESVJUWSkKKwkJdHJlZS0+ZGlydHlfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOwogCW5vZGUgPSB0cmVlX2luc2VydCgmdHJlZS0+c3RhdGUsIGVuZCwgJnN0YXRlLT5yYl9ub2RlKTsKIAlpZiAobm9kZSkgewpAQCAtMzg3LDYgKzQwNCwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNwbGl0X2NiKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgc3RydWN0IGV4dGVudF9zdGF0ZSAqb3JpZywKKwkJICAgICB1NjQgc3BsaXQpCit7CisJaWYgKHRyZWUtPm9wcyAmJiB0cmVlLT5vcHMtPnNwbGl0X2V4dGVudF9ob29rKQorCQlyZXR1cm4gdHJlZS0+b3BzLT5zcGxpdF9leHRlbnRfaG9vayh0cmVlLT5tYXBwaW5nLT5ob3N0LAorCQkJCQkJICAgIG9yaWcsIHNwbGl0KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHNwbGl0IGEgZ2l2ZW4gZXh0ZW50IHN0YXRlIHN0cnVjdCBpbiB0d28sIGluc2VydGluZyB0aGUgcHJlYWxsb2NhdGVkCiAgKiBzdHJ1Y3QgJ3ByZWFsbG9jJyBhcyB0aGUgbmV3bHkgY3JlYXRlZCBzZWNvbmQgaGFsZi4gICdzcGxpdCcgaW5kaWNhdGVzIGFuCkBAIC00MDUsNiArNDMxLDkgQEAKIAkJICAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnByZWFsbG9jLCB1NjQgc3BsaXQpCiB7CiAJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwlzcGxpdF9jYih0cmVlLCBvcmlnLCBzcGxpdCk7CisKIAlwcmVhbGxvYy0+c3RhcnQgPSBvcmlnLT5zdGFydDsKIAlwcmVhbGxvYy0+ZW5kID0gc3BsaXQgLSAxOwogCXByZWFsbG9jLT5zdGF0ZSA9IG9yaWctPnN0YXRlOwpAQCAtNDMxLDcgKzQ2MCw4IEBACiAJCQkgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsIGludCBiaXRzLCBpbnQgd2FrZSwKIAkJCSAgICBpbnQgZGVsZXRlKQogewotCWludCByZXQgPSBzdGF0ZS0+c3RhdGUgJiBiaXRzOworCWludCBiaXRzX3RvX2NsZWFyID0gYml0cyAmIH5FWFRFTlRfRE9fQUNDT1VOVElORzsKKwlpbnQgcmV0ID0gc3RhdGUtPnN0YXRlICYgYml0c190b19jbGVhcjsKIAogCWlmICgoYml0cyAmIEVYVEVOVF9ESVJUWSkgJiYgKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CkBAIC00MzksNyArNDY5LDcgQEAKIAkJdHJlZS0+ZGlydHlfYnl0ZXMgLT0gcmFuZ2U7CiAJfQogCWNsZWFyX3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKLQlzdGF0ZS0+c3RhdGUgJj0gfmJpdHM7CisJc3RhdGUtPnN0YXRlICY9IH5iaXRzX3RvX2NsZWFyOwogCWlmICh3YWtlKQogCQl3YWtlX3VwKCZzdGF0ZS0+d3EpOwogCWlmIChkZWxldGUgfHwgc3RhdGUtPnN0YXRlID09IDApIHsKQEAgLTU0Miw4ICs1NzIsOCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJCWlmIChzdGF0ZS0+ZW5kIDw9IGVuZCkgewotCQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBzdGF0ZSwgYml0cywKLQkJCQkJd2FrZSwgZGVsZXRlKTsKKwkJCXNldCB8PSBjbGVhcl9zdGF0ZV9iaXQodHJlZSwgc3RhdGUsIGJpdHMsIHdha2UsCisJCQkJCSAgICAgICBkZWxldGUpOwogCQkJaWYgKGxhc3RfZW5kID09ICh1NjQpLTEpCiAJCQkJZ290byBvdXQ7CiAJCQlzdGFydCA9IGxhc3RfZW5kICsgMTsKQEAgLTU2MSwxMiArNTkxLDExIEBACiAJCQlwcmVhbGxvYyA9IGFsbG9jX2V4dGVudF9zdGF0ZShHRlBfQVRPTUlDKTsKIAkJZXJyID0gc3BsaXRfc3RhdGUodHJlZSwgc3RhdGUsIHByZWFsbG9jLCBlbmQgKyAxKTsKIAkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQogCQlpZiAod2FrZSkKIAkJCXdha2VfdXAoJnN0YXRlLT53cSk7CiAKLQkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywKLQkJCQkgICAgICAgd2FrZSwgZGVsZXRlKTsKKwkJc2V0IHw9IGNsZWFyX3N0YXRlX2JpdCh0cmVlLCBwcmVhbGxvYywgYml0cywgd2FrZSwgZGVsZXRlKTsKKwogCQlwcmVhbGxvYyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTY2NywxNiArNjk2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zdGF0ZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKK3N0YXRpYyBpbnQgc2V0X3N0YXRlX2JpdHMoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUsCiAJCQkgICBpbnQgYml0cykKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gc2V0X3N0YXRlX2NiKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKChiaXRzICYgRVhURU5UX0RJUlRZKSAmJiAhKHN0YXRlLT5zdGF0ZSAmIEVYVEVOVF9ESVJUWSkpIHsKIAkJdTY0IHJhbmdlID0gc3RhdGUtPmVuZCAtIHN0YXRlLT5zdGFydCArIDE7CiAJCXRyZWUtPmRpcnR5X2J5dGVzICs9IHJhbmdlOwogCX0KLQlzZXRfc3RhdGVfY2IodHJlZSwgc3RhdGUsIGJpdHMpOwogCXN0YXRlLT5zdGF0ZSB8PSBiaXRzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhY2hlX3N0YXRlKHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLApAQCAtNzU4LDcgKzc5NCwxMCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCWVyciA9IHNldF9zdGF0ZV9iaXRzKHRyZWUsIHN0YXRlLCBiaXRzKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCiAJCWNhY2hlX3N0YXRlKHN0YXRlLCBjYWNoZWRfc3RhdGUpOwogCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCWlmIChsYXN0X2VuZCA9PSAodTY0KS0xKQpAQCAtODA1LDcgKzg0NCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAkJaWYgKHN0YXRlLT5lbmQgPD0gZW5kKSB7Ci0JCQlzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQllcnIgPSBzZXRfc3RhdGVfYml0cyh0cmVlLCBzdGF0ZSwgYml0cyk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OwogCQkJY2FjaGVfc3RhdGUoc3RhdGUsIGNhY2hlZF9zdGF0ZSk7CiAJCQltZXJnZV9zdGF0ZSh0cmVlLCBzdGF0ZSk7CiAJCQlpZiAobGFzdF9lbmQgPT0gKHU2NCktMSkKQEAgLTgyOSwxMSArODcwLDEzIEBACiAJCQl0aGlzX2VuZCA9IGxhc3Rfc3RhcnQgLSAxOwogCQllcnIgPSBpbnNlcnRfc3RhdGUodHJlZSwgcHJlYWxsb2MsIHN0YXJ0LCB0aGlzX2VuZCwKIAkJCQkgICBiaXRzKTsKKwkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKKwkJaWYgKGVycikgeworCQkJcHJlYWxsb2MgPSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KIAkJY2FjaGVfc3RhdGUocHJlYWxsb2MsIGNhY2hlZF9zdGF0ZSk7CiAJCXByZWFsbG9jID0gTlVMTDsKLQkJQlVHX09OKGVyciA9PSAtRUVYSVNUKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwogCQlzdGFydCA9IHRoaXNfZW5kICsgMTsKIAkJZ290byBzZWFyY2hfYWdhaW47CiAJfQpAQCAtODUyLDcgKzg5NSwxMSBAQAogCQllcnIgPSBzcGxpdF9zdGF0ZSh0cmVlLCBzdGF0ZSwgcHJlYWxsb2MsIGVuZCArIDEpOwogCQlCVUdfT04oZXJyID09IC1FRVhJU1QpOwogCi0JCXNldF9zdGF0ZV9iaXRzKHRyZWUsIHByZWFsbG9jLCBiaXRzKTsKKwkJZXJyID0gc2V0X3N0YXRlX2JpdHModHJlZSwgcHJlYWxsb2MsIGJpdHMpOworCQlpZiAoZXJyKSB7CisJCQlwcmVhbGxvYyA9IE5VTEw7CisJCQlnb3RvIG91dDsKKwkJfQogCQljYWNoZV9zdGF0ZShwcmVhbGxvYywgY2FjaGVkX3N0YXRlKTsKIAkJbWVyZ2Vfc3RhdGUodHJlZSwgcHJlYWxsb2MpOwogCQlwcmVhbGxvYyA9IE5VTEw7CkBAIC05MTAsNyArOTU3LDggQEAKIAkJICAgICAgIGdmcF90IG1hc2spCiB7CiAJcmV0dXJuIGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQlFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsIDAsIDAsCisJCQkJRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfRE9fQUNDT1VOVElORywgMCwgMCwKIAkJCQlOVUxMLCBtYXNrKTsKIH0KIApAQCAtMTM1NSwxMiArMTQwMyw3IEBACiBpbnQgZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCQl1NjQgc3RhcnQsIHU2NCBlbmQsIHN0cnVjdCBwYWdlICpsb2NrZWRfcGFnZSwKLQkJCQlpbnQgdW5sb2NrX3BhZ2VzLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMikKKwkJCQl1bnNpZ25lZCBsb25nIG9wKQogewogCWludCByZXQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzWzE2XTsKQEAgLTEzNzAsMTcgKzE0MTMsMjEgQEAKIAlpbnQgaTsKIAlpbnQgY2xlYXJfYml0cyA9IDA7CiAKLQlpZiAoY2xlYXJfdW5sb2NrKQorCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9VTkxPQ0spCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0xPQ0tFRDsKLQlpZiAoY2xlYXJfZGlydHkpCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0RJUlRZKQogCQljbGVhcl9iaXRzIHw9IEVYVEVOVF9ESVJUWTsKIAotCWlmIChjbGVhcl9kZWxhbGxvYykKKwlpZiAob3AgJiBFWFRFTlRfQ0xFQVJfREVMQUxMT0MpCiAJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RFTEFMTE9DOwogCisJaWYgKG9wICYgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcpCisJCWNsZWFyX2JpdHMgfD0gRVhURU5UX0RPX0FDQ09VTlRJTkc7CisKIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIGNsZWFyX2JpdHMsIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKLQlpZiAoISh1bmxvY2tfcGFnZXMgfHwgY2xlYXJfZGlydHkgfHwgc2V0X3dyaXRlYmFjayB8fCBlbmRfd3JpdGViYWNrIHx8Ci0JICAgICAgc2V0X3ByaXZhdGUyKSkKKwlpZiAoIShvcCAmIChFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkgICAgRVhURU5UX1NFVF9XUklURUJBQ0sgfCBFWFRFTlRfRU5EX1dSSVRFQkFDSyB8CisJCSAgICBFWFRFTlRfU0VUX1BSSVZBVEUyKSkpCiAJCXJldHVybiAwOwogCiAJd2hpbGUgKG5yX3BhZ2VzID4gMCkgewpAQCAtMTM4OSwyMCArMTQzNiwyMCBAQAogCQkJCSAgICAgbnJfcGFnZXMsIEFSUkFZX1NJWkUocGFnZXMpKSwgcGFnZXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgcmV0OyBpKyspIHsKIAotCQkJaWYgKHNldF9wcml2YXRlMikKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfUFJJVkFURTIpCiAJCQkJU2V0UGFnZVByaXZhdGUyKHBhZ2VzW2ldKTsKIAogCQkJaWYgKHBhZ2VzW2ldID09IGxvY2tlZF9wYWdlKSB7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChjbGVhcl9kaXJ0eSkKKwkJCWlmIChvcCAmIEVYVEVOVF9DTEVBUl9ESVJUWSkKIAkJCQljbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlc1tpXSk7Ci0JCQlpZiAoc2V0X3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9TRVRfV1JJVEVCQUNLKQogCQkJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAoZW5kX3dyaXRlYmFjaykKKwkJCWlmIChvcCAmIEVYVEVOVF9FTkRfV1JJVEVCQUNLKQogCQkJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7Ci0JCQlpZiAodW5sb2NrX3BhZ2VzKQorCQkJaWYgKG9wICYgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFKQogCQkJCXVubG9ja19wYWdlKHBhZ2VzW2ldKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlc1tpXSk7CiAJCX0KQEAgLTI2NjgsNyArMjcxNSw4IEBACiAJbG9ja19leHRlbnQodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CiAJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBzdGFydCwgZW5kLAotCQkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MsCisJCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQyB8CisJCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkgMSwgMSwgTlVMTCwgR0ZQX05PRlMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCAxNGVkMTZmLi4zNmRlMjUwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0ZJTExFRCAoMSA8PCA4KQogI2RlZmluZSBFWFRFTlRfQk9VTkRBUlkgKDEgPDwgOSkKICNkZWZpbmUgRVhURU5UX05PREFUQVNVTSAoMSA8PCAxMCkKKyNkZWZpbmUgRVhURU5UX0RPX0FDQ09VTlRJTkcgKDEgPDwgMTEpCiAjZGVmaW5lIEVYVEVOVF9JT0JJVFMgKEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfV1JJVEVCQUNLKQogCiAvKiBmbGFncyBmb3IgYmlvIHN1Ym1pc3Npb24gKi8KQEAgLTI1LDYgKzI2LDE2IEBACiAjZGVmaW5lIEVYVEVOVF9CVUZGRVJfQkxPQ0tJTkcgMQogI2RlZmluZSBFWFRFTlRfQlVGRkVSX0RJUlRZIDIKIAorLyogdGhlc2UgYXJlIGZsYWdzIGZvciBleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jICovCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSAweDEKKyNkZWZpbmUgRVhURU5UX0NMRUFSX1VOTE9DSwkgMHgyCisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ERUxBTExPQwkgMHg0CisjZGVmaW5lIEVYVEVOVF9DTEVBUl9ESVJUWQkgMHg4CisjZGVmaW5lIEVYVEVOVF9TRVRfV1JJVEVCQUNLCSAweDEwCisjZGVmaW5lIEVYVEVOVF9FTkRfV1JJVEVCQUNLCSAweDIwCisjZGVmaW5lIEVYVEVOVF9TRVRfUFJJVkFURTIJIDB4NDAKKyNkZWZpbmUgRVhURU5UX0NMRUFSX0FDQ09VTlRJTkcgIDB4ODAKKwogLyoKICAqIHBhZ2UtPnByaXZhdGUgdmFsdWVzLiAgRXZlcnkgcGFnZSB0aGF0IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVudAogICogbWFwIGhhcyBwYWdlLT5wcml2YXRlIHNldCB0byBvbmUuCkBAIC02MCw4ICs3MSwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLCBpbnQgdXB0b2RhdGUpOwogCWludCAoKnNldF9iaXRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIGJpdHMpOwotCWludCAoKmNsZWFyX2JpdF9ob29rKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cyk7CisJaW50ICgqY2xlYXJfYml0X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBiaXRzKTsKKwlpbnQgKCptZXJnZV9leHRlbnRfaG9vaykoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSBzdHJ1Y3QgZXh0ZW50X3N0YXRlICpvdGhlcik7CisJaW50ICgqc3BsaXRfZXh0ZW50X2hvb2spKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCk7CiAJaW50ICgqd3JpdGVfY2FjaGVfcGFnZXNfbG9ja19ob29rKShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB9OwogCkBAIC03OSwxMCArOTUsMTQgQEAKIAl1NjQgc3RhcnQ7CiAJdTY0IGVuZDsgLyogaW5jbHVzaXZlICovCiAJc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKworCS8qIEFERCBORVcgRUxFTUVOVFMgQUZURVIgVEhJUyAqLwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKIAlhdG9taWNfdCByZWZzOwogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTY0IHNwbGl0X3N0YXJ0OworCXU2NCBzcGxpdF9lbmQ7CiAKIAkvKiBmb3IgdXNlIGJ5IHRoZSBGUyAqLwogCXU2NCBwcml2YXRlOwpAQCAtMjc5LDEwICsyOTksNSBAQAogaW50IGV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCiAJCQkJdTY0IHN0YXJ0LCB1NjQgZW5kLCBzdHJ1Y3QgcGFnZSAqbG9ja2VkX3BhZ2UsCi0JCQkJaW50IHVubG9ja19wYWdlLAotCQkJCWludCBjbGVhcl91bmxvY2ssCi0JCQkJaW50IGNsZWFyX2RlbGFsbG9jLCBpbnQgY2xlYXJfZGlydHksCi0JCQkJaW50IHNldF93cml0ZWJhY2ssCi0JCQkJaW50IGVuZF93cml0ZWJhY2ssCi0JCQkJaW50IHNldF9wcml2YXRlMik7CisJCQkJdW5zaWduZWQgbG9uZyBvcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCAyYzcyNmI3Li5jY2JkY2I1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAl3cml0ZV9sb2NrKCZ0cmVlLT5sb2NrKTsKIAllbSA9IGxvb2t1cF9leHRlbnRfbWFwcGluZyh0cmVlLCBzdGFydCwgbGVuKTsKIAotCVdBUk5fT04oZW0tPnN0YXJ0ICE9IHN0YXJ0IHx8ICFlbSk7CisJV0FSTl9PTighZW0gfHwgZW0tPnN0YXJ0ICE9IHN0YXJ0KTsKIAogCWlmICghZW0pCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IDU3MWFkM2MuLjA2NTUwYWYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTEyMyw3ICsxMjMsMTAgQEAKIAkJICAgIHJvb3QtPnNlY3RvcnNpemUgLSAxKSAmIH4oKHU2NClyb290LT5zZWN0b3JzaXplIC0gMSk7CiAKIAllbmRfb2ZfbGFzdF9ibG9jayA9IHN0YXJ0X3BvcyArIG51bV9ieXRlcyAtIDE7Ci0JYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJZXJyID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgc3RhcnRfcG9zLCBlbmRfb2ZfbGFzdF9ibG9jayk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlzdHJ1Y3QgcGFnZSAqcCA9IHBhZ2VzW2ldOwogCQlTZXRQYWdlVXB0b2RhdGUocCk7CkBAIC04NzUsNyArODc4LDggQEAKIAkJCWJ0cmZzX3B1dF9vcmRlcmVkX2V4dGVudChvcmRlcmVkKTsKIAogCQljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0X3BvcywKLQkJCQkgIGxhc3RfcG9zIC0gMSwgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DLAorCQkJCSAgbGFzdF9wb3MgLSAxLCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkJCSAgRVhURU5UX0RPX0FDQ09VTlRJTkcsCiAJCQkJICBHRlBfTk9GUyk7CiAJCXVubG9ja19leHRlbnQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAogCQkJICAgICAgc3RhcnRfcG9zLCBsYXN0X3BvcyAtIDEsIEdGUF9OT0ZTKTsKQEAgLTkxNywyMSArOTIxLDM1IEBACiAJc3RhcnRfcG9zID0gcG9zOwogCiAJdmZzX2NoZWNrX2Zyb3plbihpbm9kZS0+aV9zYiwgU0JfRlJFRVpFX1dSSVRFKTsKKworCS8qIGRvIHRoZSByZXNlcnZlIGJlZm9yZSB0aGUgbXV0ZXggbG9jayBpbiBjYXNlIHdlIGhhdmUgdG8gZG8gc29tZQorCSAqIGZsdXNoaW5nLiAgV2Ugd291bGRuJ3QgZGVhZGxvY2ssIGJ1dCB0aGlzIGlzIG1vcmUgcG9saXRlLgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ub2xvY2s7CisKKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKIAllcnIgPSBnZW5lcmljX3dyaXRlX2NoZWNrcyhmaWxlLCAmcG9zLCAmY291bnQsIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CisKIAlpZiAoY291bnQgPT0gMCkKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKIAogCWVyciA9IGZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfbm9sb2NrOworCQlnb3RvIG91dDsKKwogCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7CiAKIAlwYWdlcyA9IGttYWxsb2MobnJwdHJzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKIAotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkvKiBnZW5lcmljX3dyaXRlX2NoZWNrcyBjYW4gY2hhbmdlIG91ciBwb3MgKi8KKwlzdGFydF9wb3MgPSBwb3M7CisKIAlCVFJGU19JKGlub2RlKS0+c2VxdWVuY2UrKzsKIAlmaXJzdF9pbmRleCA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWxhc3RfaW5kZXggPSAocG9zICsgY291bnQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CkBAIC0xMDA1LDkgKzEwMjMsOCBAQAogCQl9CiAKIAkJaWYgKHdpbGxfd3JpdGUpIHsKLQkJCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgcG9zLAotCQkJCQkgICAgICAgcG9zICsgd3JpdGVfYnl0ZXMgLSAxLAotCQkJCQkgICAgICAgV0JfU1lOQ19BTEwpOworCQkJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHBvcywKKwkJCQkJCSBwb3MgKyB3cml0ZV9ieXRlcyAtIDEpOwogCQl9IGVsc2UgewogCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZF9ucihpbm9kZS0+aV9tYXBwaW5nLAogCQkJCQkJCSAgIG51bV9wYWdlcyk7CkBAIC0xMDI4LDYgKzEwNDUsNyBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChyZXQpCiAJCWVyciA9IHJldDsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAogb3V0X25vbG9jazoKIAlrZnJlZShwYWdlcyk7CkBAIC0xMDY4LDggKzEwODYsMTAgQEAKIAkJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCQllbHNlCiAJCQkJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JCQl9IGVsc2UgeworCQkJfSBlbHNlIGlmIChyZXQgIT0gQlRSRlNfTk9fTE9HX1NZTkMpIHsKIAkJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJfSBlbHNlIHsKKwkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCQkJfQogCQl9CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKQEAgLTExMTksNiArMTEzOSwxMyBAQAogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCisKKwkvKiB3ZSB3YWl0IGZpcnN0LCBzaW5jZSB0aGUgd3JpdGViYWNrIG1heSBjaGFuZ2UgdGhlIGlub2RlICovCisJcm9vdC0+bG9nX2JhdGNoKys7CisJLyogdGhlIFZGUyBjYWxsZWQgZmlsZW1hcF9mZGF0YXdyaXRlIGZvciB1cyAqLworCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJcm9vdC0+bG9nX2JhdGNoKys7CisKIAkvKgogCSAqIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiB0aGF0IGxhc3QgbW9kaWZpZWQgdGhpcyBpbm9kZQogCSAqIGFuZCBzZWUgaWYgaXRzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQKQEAgLTExMjYsNiArMTE1MywxMSBAQAogCWlmICghQlRSRlNfSShpbm9kZSktPmxhc3RfdHJhbnMpCiAJCWdvdG8gb3V0OwogCisJLyoKKwkgKiBpZiB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0aGF0IGNoYW5nZWQgdGhpcyBmaWxlIHdhcyBiZWZvcmUKKwkgKiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgd2UgY2FuIGJhaWwgb3V0IG5vdyB3aXRob3V0IGFueQorCSAqIHN5bmNpbmcKKwkgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKEJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zIDw9CiAJICAgIHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKSB7CkBAIC0xMTM1LDEzICsxMTY3LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKLQlyb290LT5sb2dfYmF0Y2grKzsKLQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKLQlyb290LT5sb2dfYmF0Y2grKzsKLQotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9QQUdFUykpCi0JCWdvdG8gb3V0OwogCS8qCiAJICogb2sgd2UgaGF2ZW4ndCBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIHlldCwgbGV0cyBkbyBhIGNvbW1pdAogCSAqLwpAQCAtMTE3MCwyMSArMTE5NSwyNSBAQAogCSAqLwogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXQgPiAwKSB7Ci0JCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwotCQllbHNlCisJaWYgKHJldCAhPSBCVFJGU19OT19MT0dfU1lOQykgeworCQlpZiAocmV0ID4gMCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJZWxzZQorCQkJCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgogCXJldHVybiByZXQgPiAwID8gRUlPIDogcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGJ0cmZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBidHJmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gYnRyZnNfcGFnZV9ta3dyaXRlLAogfTsKQEAgLTExOTYsNyArMTIyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQgICAgICAgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggNWMyY2FhZC4uY2IyODQ5ZiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkJCXdpbmRvd19zdGFydCA9IGVudHJ5LT5vZmZzZXQ7CiAJCQl3aW5kb3dfZnJlZSA9IGVudHJ5LT5ieXRlczsKIAkJCWxhc3QgPSBlbnRyeTsKLQkJCW1heF9leHRlbnQgPSAwOworCQkJbWF4X2V4dGVudCA9IGVudHJ5LT5ieXRlczsKIAkJfSBlbHNlIHsKIAkJCWxhc3QgPSBuZXh0OwogCQkJd2luZG93X2ZyZWUgKz0gbmV4dC0+Ynl0ZXM7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBlOWI3NmJjLi5iM2FkMTY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTYyLDcgKzYyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBidHJmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBidHJmc19hb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgYnRyZnNfc3ltbGlua19hb3BzOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJ0cmZzX2Rpcl9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IGV4dGVudF9pb19vcHMgYnRyZnNfZXh0ZW50X2lvX29wczsKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpidHJmc19pbm9kZV9jYWNoZXA7CkBAIC00MjQsOSArNDI0LDEyIEBACiAJCQkgKiBhbmQgZnJlZSB1cCBvdXIgdGVtcCBwYWdlcy4KIAkJCSAqLwogCQkJZXh0ZW50X2NsZWFyX3VubG9ja19kZWxhbGxvYyhpbm9kZSwKLQkJCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLCAxLCAwLAotCQkJCQkJICAgICAwLCAxLCAxLCAxLCAwKTsKKwkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJICAgICBFWFRFTlRfQ0xFQVJfVU5MT0NLX1BBR0UgfCBFWFRFTlRfQ0xFQVJfRElSVFkgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJICAgICBFWFRFTlRfQ0xFQVJfQUNDT1VOVElORyB8CisJCQkgICAgIEVYVEVOVF9TRVRfV1JJVEVCQUNLIHwgRVhURU5UX0VORF9XUklURUJBQ0spOwogCQkJcmV0ID0gMDsKIAkJCWdvdG8gZnJlZV9wYWdlc19vdXQ7CiAJCX0KQEAgLTUzNSw3ICs1MzgsNyBAQAogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpZiAobGlzdF9lbXB0eSgmYXN5bmNfY293LT5leHRlbnRzKSkKIAkJcmV0dXJuIDA7CkBAIC01NDksNiArNTUyLDcgQEAKIAogCQlpb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwogCityZXRyeToKIAkJLyogZGlkIHRoZSBjb21wcmVzc2lvbiBjb2RlIGZhbGwgYmFjayB0byB1bmNvbXByZXNzZWQgSU8/ICovCiAJCWlmICghYXN5bmNfZXh0ZW50LT5wYWdlcykgewogCQkJaW50IHBhZ2Vfc3RhcnRlZCA9IDA7CkBAIC01NTksMTEgKzU2MywxMSBAQAogCQkJCSAgICBhc3luY19leHRlbnQtPnJhbV9zaXplIC0gMSwgR0ZQX05PRlMpOwogCiAJCQkvKiBhbGxvY2F0ZSBibG9ja3MgKi8KLQkJCWNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0LAotCQkJCSAgICAgICBhc3luY19leHRlbnQtPnN0YXJ0ICsKLQkJCQkgICAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJICAgICAgICZwYWdlX3N0YXJ0ZWQsICZucl93cml0dGVuLCAwKTsKKwkJCXJldCA9IGNvd19maWxlX3JhbmdlKGlub2RlLCBhc3luY19jb3ctPmxvY2tlZF9wYWdlLAorCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJCSAgICAgJnBhZ2Vfc3RhcnRlZCwgJm5yX3dyaXR0ZW4sIDApOwogCiAJCQkvKgogCQkJICogaWYgcGFnZV9zdGFydGVkLCBjb3dfZmlsZV9yYW5nZSBpbnNlcnRlZCBhbgpAQCAtNTcxLDcgKzU3NSw3IEBACiAJCQkgKiBhbmQgSU8gZm9yIHVzLiAgT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHN1Ym1pdAogCQkJICogYWxsIHRob3NlIHBhZ2VzIGRvd24gdG8gdGhlIGRyaXZlLgogCQkJICovCi0JCQlpZiAoIXBhZ2Vfc3RhcnRlZCkKKwkJCWlmICghcGFnZV9zdGFydGVkICYmICFyZXQpCiAJCQkJZXh0ZW50X3dyaXRlX2xvY2tlZF9yYW5nZShpb190cmVlLAogCQkJCQkJICBpbm9kZSwgYXN5bmNfZXh0ZW50LT5zdGFydCwKIAkJCQkJCSAgYXN5bmNfZXh0ZW50LT5zdGFydCArCkBAIC01OTksNyArNjAzLDIxIEBACiAJCQkJCSAgIGFzeW5jX2V4dGVudC0+Y29tcHJlc3NlZF9zaXplLAogCQkJCQkgICAwLCBhbGxvY19oaW50LAogCQkJCQkgICAodTY0KS0xLCAmaW5zLCAxKTsKLQkJQlVHX09OKHJldCk7CisJCWlmIChyZXQpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGFzeW5jX2V4dGVudC0+bnJfcGFnZXM7IGkrKykgeworCQkJCVdBUk5fT04oYXN5bmNfZXh0ZW50LT5wYWdlc1tpXS0+bWFwcGluZyk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGFzeW5jX2V4dGVudC0+cGFnZXNbaV0pOworCQkJfQorCQkJa2ZyZWUoYXN5bmNfZXh0ZW50LT5wYWdlcyk7CisJCQlhc3luY19leHRlbnQtPm5yX3BhZ2VzID0gMDsKKwkJCWFzeW5jX2V4dGVudC0+cGFnZXMgPSBOVUxMOworCQkJdW5sb2NrX2V4dGVudChpb190cmVlLCBhc3luY19leHRlbnQtPnN0YXJ0LAorCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQgKworCQkJCSAgICAgIGFzeW5jX2V4dGVudC0+cmFtX3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQlnb3RvIHJldHJ5OworCQl9CisKIAkJZW0gPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKIAkJZW0tPnN0YXJ0ID0gYXN5bmNfZXh0ZW50LT5zdGFydDsKIAkJZW0tPmxlbiA9IGFzeW5jX2V4dGVudC0+cmFtX3NpemU7CkBAIC02MzcsMTEgKzY1NSwxNCBAQAogCQkgKiBjbGVhciBkaXJ0eSwgc2V0IHdyaXRlYmFjayBhbmQgdW5sb2NrIHRoZSBwYWdlcy4KIAkJICovCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCSAgICAgJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAotCQkJCQkgICAgIGFzeW5jX2V4dGVudC0+c3RhcnQsCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5zdGFydCArCi0JCQkJCSAgICAgYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCi0JCQkJCSAgICAgTlVMTCwgMSwgMSwgMCwgMSwgMSwgMCwgMCk7CisJCQkJJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLAorCQkJCWFzeW5jX2V4dGVudC0+c3RhcnQsCisJCQkJYXN5bmNfZXh0ZW50LT5zdGFydCArCisJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsCisJCQkJTlVMTCwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwKKwkJCQlFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJCUVYVEVOVF9DTEVBUl9ESVJUWSB8IEVYVEVOVF9TRVRfV1JJVEVCQUNLKTsKIAogCQlyZXQgPSBidHJmc19zdWJtaXRfY29tcHJlc3NlZF93cml0ZShpbm9kZSwKIAkJCQkgICAgYXN5bmNfZXh0ZW50LT5zdGFydCwKQEAgLTcxMiw5ICs3MzMsMTUgQEAKIAkJCQkJICAgIHN0YXJ0LCBlbmQsIDAsIE5VTEwpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsCi0JCQkJCQkgICAgICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJCSAgICAgc3RhcnQsIGVuZCwgTlVMTCwgMSwgMSwKLQkJCQkJCSAgICAgMSwgMSwgMSwgMSwgMCk7CisJCQkJICAgICAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCisJCQkJICAgICBzdGFydCwgZW5kLCBOVUxMLAorCQkJCSAgICAgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9VTkxPQ0sgfAorCQkJCSAgICAgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9BQ0NPVU5USU5HIHwKKwkJCQkgICAgIEVYVEVOVF9DTEVBUl9ESVJUWSB8CisJCQkJICAgICBFWFRFTlRfU0VUX1dSSVRFQkFDSyB8CisJCQkJICAgICBFWFRFTlRfRU5EX1dSSVRFQkFDSyk7CiAJCQkqbnJfd3JpdHRlbiA9ICpucl93cml0dGVuICsKIAkJCSAgICAgKGVuZCAtIHN0YXJ0ICsgUEFHRV9DQUNIRV9TSVpFKSAvIFBBR0VfQ0FDSEVfU0laRTsKIAkJCSpwYWdlX3N0YXJ0ZWQgPSAxOwpAQCAtNzMxLDEzICs3NTgsMjkgQEAKIAllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLAogCQkJCSAgIHN0YXJ0LCBudW1fYnl0ZXMpOwogCWlmIChlbSkgewotCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OwotCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQkvKgorCQkgKiBpZiBibG9jayBzdGFydCBpc24ndCBhbiBhY3R1YWwgYmxvY2sgbnVtYmVyIHRoZW4gZmluZCB0aGUKKwkJICogZmlyc3QgYmxvY2sgaW4gdGhpcyBpbm9kZSBhbmQgdXNlIHRoYXQgYXMgYSBoaW50LiAgSWYgdGhhdAorCQkgKiBibG9jayBpcyBhbHNvIGJvZ3VzIHRoZW4ganVzdCBkb24ndCB3b3JyeSBhYm91dCBpdC4KKwkJICovCisJCWlmIChlbS0+YmxvY2tfc3RhcnQgPj0gRVhURU5UX01BUF9MQVNUX0JZVEUpIHsKKwkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCQllbSA9IHNlYXJjaF9leHRlbnRfbWFwcGluZyhlbV90cmVlLCAwLCAwKTsKKwkJCWlmIChlbSAmJiBlbS0+YmxvY2tfc3RhcnQgPCBFWFRFTlRfTUFQX0xBU1RfQllURSkKKwkJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJaWYgKGVtKQorCQkJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCX0gZWxzZSB7CisJCQlhbGxvY19oaW50ID0gZW0tPmJsb2NrX3N0YXJ0OworCQkJZnJlZV9leHRlbnRfbWFwKGVtKTsKKwkJfQogCX0KIAlyZWFkX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLmxvY2spOwogCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBudW1fYnl0ZXMgLSAxLCAwKTsKIAogCXdoaWxlIChkaXNrX251bV9ieXRlcyA+IDApIHsKKwkJdW5zaWduZWQgbG9uZyBvcDsKKwogCQljdXJfYWxsb2Nfc2l6ZSA9IG1pbihkaXNrX251bV9ieXRlcywgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LCBjdXJfYWxsb2Nfc2l6ZSwKIAkJCQkJICAgcm9vdC0+c2VjdG9yc2l6ZSwgMCwgYWxsb2NfaGludCwKQEAgLTc4OSwxMCArODMyLDEzIEBACiAJCSAqIERvIHNldCB0aGUgUHJpdmF0ZTIgYml0IHNvIHdlIGtub3cgdGhpcyBwYWdlIHdhcyBwcm9wZXJseQogCQkgKiBzZXR1cCBmb3Igd3JpdGVwYWdlCiAJCSAqLworCQlvcCA9IHVubG9jayA/IEVYVEVOVF9DTEVBUl9VTkxPQ0tfUEFHRSA6IDA7CisJCW9wIHw9IEVYVEVOVF9DTEVBUl9VTkxPQ0sgfCBFWFRFTlRfQ0xFQVJfREVMQUxMT0MgfAorCQkJRVhURU5UX1NFVF9QUklWQVRFMjsKKwogCQlleHRlbnRfY2xlYXJfdW5sb2NrX2RlbGFsbG9jKGlub2RlLCAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCiAJCQkJCSAgICAgc3RhcnQsIHN0YXJ0ICsgcmFtX3NpemUgLSAxLAotCQkJCQkgICAgIGxvY2tlZF9wYWdlLCB1bmxvY2ssIDEsCi0JCQkJCSAgICAgMSwgMCwgMCwgMCwgMSk7CisJCQkJCSAgICAgbG9ja2VkX3BhZ2UsIG9wKTsKIAkJZGlza19udW1fYnl0ZXMgLT0gY3VyX2FsbG9jX3NpemU7CiAJCW51bV9ieXRlcyAtPSBjdXJfYWxsb2Nfc2l6ZTsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CkBAIC04NjQsOCArOTEwLDggQEAKIAl1NjQgY3VyX2VuZDsKIAlpbnQgbGltaXQgPSAxMCAqIDEwMjQgKiAxMDQyOwogCi0JY2xlYXJfZXh0ZW50X2JpdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQgfAotCQkJIEVYVEVOVF9ERUxBTExPQywgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VELAorCQkJIDEsIDAsIE5VTEwsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJYXN5bmNfY293ID0ga21hbGxvYyhzaXplb2YoKmFzeW5jX2NvdyksIEdGUF9OT0ZTKTsKIAkJYXN5bmNfY293LT5pbm9kZSA9IGlub2RlOwpAQCAtMTAwNiw2ICsxMDUyLDcgQEAKIAogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA+IGN1cl9vZmZzZXQpIHsKIAkJCWV4dGVudF9lbmQgPSBmb3VuZF9rZXkub2Zmc2V0OworCQkJZXh0ZW50X3R5cGUgPSAwOwogCQkJZ290byBvdXRfY2hlY2s7CiAJCX0KIApAQCAtMTExMiw4ICsxMTU5LDEwIEBACiAJCUJVR19PTihyZXQpOwogCiAJCWV4dGVudF9jbGVhcl91bmxvY2tfZGVsYWxsb2MoaW5vZGUsICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwKLQkJCQkJY3VyX29mZnNldCwgY3VyX29mZnNldCArIG51bV9ieXRlcyAtIDEsCi0JCQkJCWxvY2tlZF9wYWdlLCAxLCAxLCAxLCAwLCAwLCAwLCAxKTsKKwkJCQljdXJfb2Zmc2V0LCBjdXJfb2Zmc2V0ICsgbnVtX2J5dGVzIC0gMSwKKwkJCQlsb2NrZWRfcGFnZSwgRVhURU5UX0NMRUFSX1VOTE9DS19QQUdFIHwKKwkJCQlFWFRFTlRfQ0xFQVJfVU5MT0NLIHwgRVhURU5UX0NMRUFSX0RFTEFMTE9DIHwKKwkJCQlFWFRFTlRfU0VUX1BSSVZBVEUyKTsKIAkJY3VyX29mZnNldCA9IGV4dGVudF9lbmQ7CiAJCWlmIChjdXJfb2Zmc2V0ID4gZW5kKQogCQkJYnJlYWs7CkBAIC0xMTU5LDYgKzEyMDgsODkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGJ0cmZzX3NwbGl0X2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm9yaWcsIHU2NCBzcGxpdCkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCXU2NCBzaXplOworCisJaWYgKCEob3JpZy0+c3RhdGUgJiBFWFRFTlRfREVMQUxMT0MpKQorCQlyZXR1cm4gMDsKKworCXNpemUgPSBvcmlnLT5lbmQgLSBvcmlnLT5zdGFydCArIDE7CisJaWYgKHNpemUgPiByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXU2NCBudW1fZXh0ZW50czsKKwkJdTY0IG5ld19zaXplOworCisJCW5ld19zaXplID0gb3JpZy0+ZW5kIC0gc3BsaXQgKyAxOworCQludW1fZXh0ZW50cyA9IGRpdjY0X3U2NChzaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJCXJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpOworCisJCS8qCisJCSAqIGlmIHdlIGJyZWFrIGEgbGFyZ2UgZXh0ZW50IHVwIHRoZW4gbGVhdmUgb3VzdGFuZGluZ19leHRlbnRzCisJCSAqIGJlLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGFjY291bnRlZCBmb3IgdGhlIGxhcmdlIGV4dGVudC4KKwkJICovCisJCWlmIChkaXY2NF91NjQobmV3X3NpemUgKyByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50IC0gMSwKKwkJCSAgICAgIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQpIDwgbnVtX2V4dGVudHMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKys7CisJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBleHRlbnRfaW8uYyBtZXJnZV9leHRlbnRfaG9vaywgdXNlZCB0byB0cmFjayBtZXJnZWQgZGVsYXllZCBhbGxvY2F0aW9uCisgKiBleHRlbnRzIHNvIHdlIGNhbiBrZWVwIHRyYWNrIG9mIG5ldyBleHRlbnRzIHRoYXQgYXJlIGp1c3QgbWVyZ2VkIG9udG8gb2xkCisgKiBleHRlbnRzLCBzdWNoIGFzIHdoZW4gd2UgYXJlIGRvaW5nIHNlcXVlbnRpYWwgd3JpdGVzLCBzbyB3ZSBjYW4gcHJvcGVybHkKKyAqIGFjY291bnQgZm9yIHRoZSBtZXRhZGF0YSBzcGFjZSB3ZSdsbCBuZWVkLgorICovCitzdGF0aWMgaW50IGJ0cmZzX21lcmdlX2V4dGVudF9ob29rKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqbmV3LAorCQkJCSAgIHN0cnVjdCBleHRlbnRfc3RhdGUgKm90aGVyKQoreworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisJdTY0IG5ld19zaXplLCBvbGRfc2l6ZTsKKwl1NjQgbnVtX2V4dGVudHM7CisKKwkvKiBub3QgZGVsYWxsb2MsIGlnbm9yZSBpdCAqLworCWlmICghKG90aGVyLT5zdGF0ZSAmIEVYVEVOVF9ERUxBTExPQykpCisJCXJldHVybiAwOworCisJb2xkX3NpemUgPSBvdGhlci0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKwlpZiAobmV3LT5zdGFydCA8IG90aGVyLT5zdGFydCkKKwkJbmV3X3NpemUgPSBvdGhlci0+ZW5kIC0gbmV3LT5zdGFydCArIDE7CisJZWxzZQorCQluZXdfc2l6ZSA9IG5ldy0+ZW5kIC0gb3RoZXItPnN0YXJ0ICsgMTsKKworCS8qIHdlJ3JlIG5vdCBiaWdnZXIgdGhhbiB0aGUgbWF4LCB1bnJlc2VydmUgdGhlIHNwYWNlIGFuZCBnbyAqLworCWlmIChuZXdfc2l6ZSA8PSByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSB7CisJCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJCUJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzLS07CisJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBncmV3IGJ5IGFub3RoZXIgbWF4X2V4dGVudCwganVzdCByZXR1cm4sIHdlIHdhbnQgdG8ga2VlcCB0aGF0CisJICogcmVzZXJ2ZWQgYW1vdW50LgorCSAqLworCW51bV9leHRlbnRzID0gZGl2NjRfdTY0KG9sZF9zaXplICsgcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCAtIDEsCisJCQkJcm9vdC0+ZnNfaW5mby0+bWF4X2V4dGVudCk7CisJaWYgKGRpdjY0X3U2NChuZXdfc2l6ZSArIHJvb3QtPmZzX2luZm8tPm1heF9leHRlbnQgLSAxLAorCQkgICAgICByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KSA+IG51bV9leHRlbnRzKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGV4dGVudF9pby5jIHNldF9iaXRfaG9vaywgdXNlZCB0byB0cmFjayBkZWxheWVkIGFsbG9jYXRpb24KICAqIGJ5dGVzIGluIHRoaXMgZmlsZSwgYW5kIHRvIG1haW50YWluIHRoZSBsaXN0IG9mIGlub2RlcyB0aGF0CkBAIC0xMTY3LDYgKzEyOTksNyBAQAogc3RhdGljIGludCBidHJmc19zZXRfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKIHsKKwogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKQEAgLTExNzQsNiArMTMwNywxMCBAQAogCSAqLwogCWlmICghKG9sZCAmIEVYVEVOVF9ERUxBTExPQykgJiYgKGJpdHMgJiBFWFRFTlRfREVMQUxMT0MpKSB7CiAJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisKKwkJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMrKzsKKwkJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOwogCQlidHJmc19kZWxhbGxvY19yZXNlcnZlX3NwYWNlKHJvb3QsIGlub2RlLCBlbmQgLSBzdGFydCArIDEpOwogCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOwogCQlCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgKz0gZW5kIC0gc3RhcnQgKyAxOwpAQCAtMTE5MCwyMiArMTMyNywzMSBAQAogLyoKICAqIGV4dGVudF9pby5jIGNsZWFyX2JpdF9ob29rLCBzZWUgc2V0X2JpdF9ob29rIGZvciB3aHkKICAqLwotc3RhdGljIGludCBidHJmc19jbGVhcl9iaXRfaG9vayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQkgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgYml0cykKK3N0YXRpYyBpbnQgYnRyZnNfY2xlYXJfYml0X2hvb2soc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiaXRzKQogewogCS8qCiAJICogc2V0X2JpdCBhbmQgY2xlYXIgYml0IGhvb2tzIG5vcm1hbGx5IHJlcXVpcmUgX2lycXNhdmUvcmVzdG9yZQogCSAqIGJ1dCBpbiB0aGlzIGNhc2UsIHdlIGFyZSBvbmx5IHRlc3RlaW5nIGZvciB0aGUgREVMQUxMT0MKIAkgKiBiaXQsIHdoaWNoIGlzIG9ubHkgc2V0IG9yIGNsZWFyZWQgd2l0aCBpcnFzIG9uCiAJICovCi0JaWYgKChvbGQgJiBFWFRFTlRfREVMQUxMT0MpICYmIChiaXRzICYgRVhURU5UX0RFTEFMTE9DKSkgeworCWlmICgoc3RhdGUtPnN0YXRlICYgRVhURU5UX0RFTEFMTE9DKSAmJiAoYml0cyAmIEVYVEVOVF9ERUxBTExPQykpIHsKIAkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAorCQlpZiAoYml0cyAmIEVYVEVOVF9ET19BQ0NPVU5USU5HKSB7CisJCQlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5hY2NvdW50aW5nX2xvY2spOworCQkJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwkJCXNwaW5fdW5sb2NrKCZCVFJGU19JKGlub2RlKS0+YWNjb3VudGluZ19sb2NrKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCQl9CisKIAkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKLQkJaWYgKGVuZCAtIHN0YXJ0ICsgMSA+IHJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2J5dGVzKSB7CisJCWlmIChzdGF0ZS0+ZW5kIC0gc3RhdGUtPnN0YXJ0ICsgMSA+CisJCSAgICByb290LT5mc19pbmZvLT5kZWxhbGxvY19ieXRlcykgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnMgd2FybmluZzogZGVsYWxsb2MgYWNjb3VudCAiCiAJCQkgICAgICAgIiVsbHUgJWxsdVxuIiwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWVuZCAtIHN0YXJ0ICsgMSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgICAgIHN0YXRlLT5lbmQgLSBzdGF0ZS0+c3RhcnQgKyAxLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkgICAgICAgcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMpOwogCQkJYnRyZnNfZGVsYWxsb2NfZnJlZV9zcGFjZShyb290LCBpbm9kZSwgKHU2NCktMSk7CkBAIC0xMjEzLDkgKzEzNTksMTIgQEAKIAkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyA9IDA7CiAJCX0gZWxzZSB7CiAJCQlidHJmc19kZWxhbGxvY19mcmVlX3NwYWNlKHJvb3QsIGlub2RlLAotCQkJCQkJICBlbmQgLSBzdGFydCArIDEpOwotCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gZW5kIC0gc3RhcnQgKyAxOwotCQkJQlRSRlNfSShpbm9kZSktPmRlbGFsbG9jX2J5dGVzIC09IGVuZCAtIHN0YXJ0ICsgMTsKKwkJCQkJCSAgc3RhdGUtPmVuZCAtCisJCQkJCQkgIHN0YXRlLT5zdGFydCArIDEpOworCQkJcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYnl0ZXMgLT0gc3RhdGUtPmVuZCAtCisJCQkJc3RhdGUtPnN0YXJ0ICsgMTsKKwkJCUJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19ieXRlcyAtPSBzdGF0ZS0+ZW5kIC0KKwkJCQlzdGF0ZS0+c3RhcnQgKyAxOwogCQl9CiAJCWlmIChCVFJGU19JKGlub2RlKS0+ZGVsYWxsb2NfYnl0ZXMgPT0gMCAmJgogCQkgICAgIWxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19pbm9kZXMpKSB7CkBAIC0yMzU0LDcgKzI1MDMsMTkgQEAKIAogCXJvb3QgPSBCVFJGU19JKGRpciktPnJvb3Q7CiAKKwkvKgorCSAqIDUgaXRlbXMgZm9yIHVubGluayBpbm9kZQorCSAqIDEgZm9yIG9ycGhhbgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCkBAIC0yMzY5LDYgKzI1MzAsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCiAJYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0NDksNyArMjYxMSwxNiBAQAogCSAgICBpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAKKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KKwogCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWlmICh1bmxpa2VseShpbm9kZS0+aV9pbm8gPT0gQlRSRlNfRU1QVFlfU1VCVk9MX0RJUl9PQkpFQ1RJRCkpIHsKQEAgLTI0NzIsNiArMjY0Myw3IEBACiBvdXQ6CiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CiAJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uX3Rocm90dGxlKHRyYW5zLCByb290KTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAKIAlpZiAocmV0ICYmICFlcnIpCkBAIC0yOTEyLDEyICszMDg0LDIyIEBACiAKIAlpZiAoKG9mZnNldCAmIChibG9ja3NpemUgLSAxKSkgPT0gMCkKIAkJZ290byBvdXQ7CisJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVOT01FTTsKIGFnYWluOgogCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgpOwotCWlmICghcGFnZSkKKwlpZiAoIXBhZ2UpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfZm9yX2RlbGFsbG9jKHJvb3QsIGlub2RlLCAxKTsKIAkJZ290byBvdXQ7CisJfQogCiAJcGFnZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwogCXBhZ2VfZW5kID0gcGFnZV9zdGFydCArIFBBR0VfQ0FDSEVfU0laRSAtIDE7CkBAIC0yOTUwLDcgKzMxMzIsMTYgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJY2xlYXJfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKKwkJCSAgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsCisJCQkgIEdGUF9OT0ZTKTsKKworCXJldCA9IGJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKTsKKwlpZiAocmV0KSB7CisJCXVubG9ja19leHRlbnQoaW9fdHJlZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQsIEdGUF9OT0ZTKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCXJldCA9IDA7CiAJaWYgKG9mZnNldCAhPSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJa2FkZHIgPSBrbWFwKHBhZ2UpOwpAQCAtMjk2Myw2ICszMTU0LDkgQEAKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJaWYgKHJldCkKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIG91dDoKQEAgLTI5ODEsMTcgKzMxNzUsMTUgQEAKIAl1NjQgbGFzdF9ieXRlOwogCXU2NCBjdXJfb2Zmc2V0OwogCXU2NCBob2xlX3NpemU7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCWlmIChzaXplIDw9IGhvbGVfc3RhcnQpCiAJCXJldHVybiAwOwogCi0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwllcnIgPSBidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlidHJmc190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUpOwotCiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOwogCQlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGhvbGVfc3RhcnQsCkBAIC0zMDI0LDEyICszMjE2LDE4IEBACiAJCQkJCQkgY3VyX29mZnNldCwgJmhpbnRfYnl0ZSwgMSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOworCisJCQllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwogCQkJZXJyID0gYnRyZnNfaW5zZXJ0X2ZpbGVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQlpbm9kZS0+aV9pbm8sIGN1cl9vZmZzZXQsIDAsCiAJCQkJCTAsIGhvbGVfc2l6ZSwgMCwgaG9sZV9zaXplLAogCQkJCQkwLCAwLCAwKTsKIAkJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBob2xlX3N0YXJ0LAogCQkJCQlsYXN0X2J5dGUgLSAxLCAwKTsKKwkJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAkJfQogCQlmcmVlX2V4dGVudF9tYXAoZW0pOwogCQljdXJfb2Zmc2V0ID0gbGFzdF9ieXRlOwpAQCAtMzM1Myw2ICszNTUxLDcgQEAKIAliaS0+Z2VuZXJhdGlvbiA9IDA7CiAJYmktPnNlcXVlbmNlID0gMDsKIAliaS0+bGFzdF90cmFucyA9IDA7CisJYmktPmxhc3Rfc3ViX3RyYW5zID0gMDsKIAliaS0+bG9nZ2VkX3RyYW5zID0gMDsKIAliaS0+ZGVsYWxsb2NfYnl0ZXMgPSAwOwogCWJpLT5yZXNlcnZlZF9ieXRlcyA9IDA7CkBAIC0zNTAzLDEyICszNzAyLDE0IEBACiB7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3Q7CiAKLQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKLQkJcmV0dXJuIDA7CisJaWYgKCFkZW50cnktPmRfaW5vZGUgJiYgIUlTX1JPT1QoZGVudHJ5KSkKKwkJZGVudHJ5ID0gZGVudHJ5LT5kX3BhcmVudDsKIAotCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7Ci0JaWYgKGJ0cmZzX3Jvb3RfcmVmcygmcm9vdC0+cm9vdF9pdGVtKSA9PSAwKQotCQlyZXR1cm4gMTsKKwlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCXJvb3QgPSBCVFJGU19JKGRlbnRyeS0+ZF9pbm9kZSktPnJvb3Q7CisJCWlmIChidHJmc19yb290X3JlZnMoJnJvb3QtPnJvb3RfaXRlbSkgPT0gMCkKKwkJCXJldHVybiAxOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzk5MCwxMSArNDE5MSwxOCBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBmb3IgaW5vZGUgaXRlbSBhbmQgcmVmCisJICogMiBmb3IgZGlyIGl0ZW1zCisJICogMSBmb3IgeGF0dHIgaWYgc2VsaW51eCBpcyBvbgorCSAqLworCWVyciA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGVycikKLQkJZ290byBmYWlsOworCQlyZXR1cm4gZXJyOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoIXRyYW5zKQorCQlnb3RvIGZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNDAzMiw2ICs0MjQwLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNSk7CiAJaWYgKGRyb3BfaW5vZGUpIHsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKQEAgLTQwNTIsMTAgKzQyNjEsMTggQEAKIAl1NjQgb2JqZWN0aWQ7CiAJdTY0IGluZGV4ID0gMDsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGZvciBkaXIgaXRlbXMKKwkgKiAxIGZvciB4YXR0ciBpZiBzZWxpbnV4IGlzIG9uCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gZmFpbDsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CiAKIAllcnIgPSBidHJmc19maW5kX2ZyZWVfb2JqZWN0aWQodHJhbnMsIHJvb3QsIGRpci0+aV9pbm8sICZvYmplY3RpZCk7CkBAIC00MDk2LDYgKzQzMTMsNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA1KTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDExOCwxMCArNDMzNiwxNiBAQAogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWJ0cmZzX2luY19ubGluayhpbm9kZSk7Ci0JZXJyID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIDEgaXRlbSBmb3IgaW5vZGUgcmVmCisJICogMiBpdGVtcyBmb3IgZGlyIGl0ZW1zCisJICovCisJZXJyID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZXJyKQotCQlnb3RvIGZhaWw7CisJCXJldHVybiBlcnI7CisKKwlidHJmc19pbmNfbmxpbmsoaW5vZGUpOworCiAJZXJyID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgJmluZGV4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CkBAIC00MTQ1LDYgKzQzNjksNyBAQAogCW5yID0gdHJhbnMtPmJsb2Nrc191c2VkOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBmYWlsOgorCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAzKTsKIAlpZiAoZHJvcF9pbm9kZSkgewogCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDE2NCwxNyArNDM4OSwyMSBAQAogCXU2NCBpbmRleCA9IDA7CiAJdW5zaWduZWQgbG9uZyBuciA9IDE7CiAKLQllcnIgPSBidHJmc19jaGVja19tZXRhZGF0YV9mcmVlX3NwYWNlKHJvb3QpOworCS8qCisJICogMiBpdGVtcyBmb3IgaW5vZGUgYW5kIHJlZgorCSAqIDIgaXRlbXMgZm9yIGRpciBpdGVtcworCSAqIDEgZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJcmV0dXJuIGVycjsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwotCi0JaWYgKElTX0VSUih0cmFucykpIHsKLQkJZXJyID0gUFRSX0VSUih0cmFucyk7CisJaWYgKCF0cmFucykgeworCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCWJ0cmZzX3NldF90cmFuc19ibG9ja19ncm91cCh0cmFucywgZGlyKTsKIAogCWVyciA9IGJ0cmZzX2ZpbmRfZnJlZV9vYmplY3RpZCh0cmFucywgcm9vdCwgZGlyLT5pX2lubywgJm9iamVjdGlkKTsKIAlpZiAoZXJyKSB7CkBAIC00MjIzLDYgKzQ0NTIsNyBAQAogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX29uX2VycikKIAkJaXB1dChpbm9kZSk7CiAJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CkBAIC00Njg0LDcgKzQ5MTQsOCBAQAogCQkgKi8KIAkJY2xlYXJfZXh0ZW50X2JpdCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwKIAkJCQkgRVhURU5UX0RJUlRZIHwgRVhURU5UX0RFTEFMTE9DIHwKLQkJCQkgRVhURU5UX0xPQ0tFRCwgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOworCQkJCSBFWFRFTlRfTE9DS0VEIHwgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDAsCisJCQkJIE5VTEwsIEdGUF9OT0ZTKTsKIAkJLyoKIAkJICogd2hvZXZlciBjbGVhcmVkIHRoZSBwcml2YXRlIGJpdCBpcyByZXNwb25zaWJsZQogCQkgKiBmb3IgdGhlIGZpbmlzaF9vcmRlcmVkX2lvCkBAIC00Njk3LDggKzQ5MjgsOCBAQAogCQlsb2NrX2V4dGVudCh0cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCX0KIAljbGVhcl9leHRlbnRfYml0KHRyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAotCQkgRVhURU5UX0xPQ0tFRCB8IEVYVEVOVF9ESVJUWSB8IEVYVEVOVF9ERUxBTExPQywKLQkJIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKKwkJIEVYVEVOVF9MT0NLRUQgfCBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfAorCQkgRVhURU5UX0RPX0FDQ09VTlRJTkcsIDEsIDEsIE5VTEwsIEdGUF9OT0ZTKTsKIAlfX2J0cmZzX3JlbGVhc2VwYWdlKHBhZ2UsIEdGUF9OT0ZTKTsKIAogCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7CkBAIC00NzQ3LDYgKzQ5NzgsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9tZXRhZGF0YV9mb3JfZGVsYWxsb2Mocm9vdCwgaW5vZGUsIDEpOworCWlmIChyZXQpIHsKKwkJYnRyZnNfZnJlZV9yZXNlcnZlZF9kYXRhX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IFZNX0ZBVUxUX05PUEFHRTsgLyogbWFrZSB0aGUgVk0gcmV0cnkgdGhlIGZhdWx0ICovCiBhZ2FpbjoKIAlsb2NrX3BhZ2UocGFnZSk7CkBAIC00Nzc4LDcgKzUwMTYsMjQgQEAKIAkJZ290byBhZ2FpbjsKIAl9CiAKLQlidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCk7CisJLyoKKwkgKiBYWFggLSBwYWdlX21rd3JpdGUgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB0aGUgcGFnZSBpcyBkaXJ0aWVkLCBldmVuCisJICogaWYgaXQgd2FzIGFscmVhZHkgZGlydHksIHNvIGZvciBzcGFjZSBhY2NvdW50aW5nIHJlYXNvbnMgd2UgbmVlZCB0bworCSAqIGNsZWFyIGFueSBkZWxhbGxvYyBiaXRzIGZvciB0aGUgcmFuZ2Ugd2UgYXJlIGZpeGluZyB0byBzYXZlLiAgVGhlcmUKKwkgKiBpcyBwcm9iYWJseSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcywgYnV0IGZvciBub3cga2VlcCBjb25zaXN0ZW50IHdpdGgKKwkgKiBwcmVwYXJlX3BhZ2VzIGluIHRoZSBub3JtYWwgd3JpdGUgcGF0aC4KKwkgKi8KKwljbGVhcl9leHRlbnRfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLAorCQkJICBFWFRFTlRfRElSVFkgfCBFWFRFTlRfREVMQUxMT0MgfCBFWFRFTlRfRE9fQUNDT1VOVElORywKKwkJCSAgR0ZQX05PRlMpOworCisJcmV0ID0gYnRyZnNfc2V0X2V4dGVudF9kZWxhbGxvYyhpbm9kZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpOworCWlmIChyZXQpIHsKKwkJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOworCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZGF0YV9zcGFjZShyb290LCBpbm9kZSwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KIAlyZXQgPSAwOwogCiAJLyogcGFnZSBpcyB3aG9sbHkgb3IgcGFydGlhbGx5IGluc2lkZSBFT0YgKi8KQEAgLTQ3OTcsMTAgKzUwNTIsMTMgQEAKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLQlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24gKyAxOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbjsKKwlCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+bG9nX3RyYW5zaWQ7CisKIAl1bmxvY2tfZXh0ZW50KGlvX3RyZWUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kLCBHRlBfTk9GUyk7CiAKIG91dF91bmxvY2s6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhyb290LCBpbm9kZSwgMSk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBWTV9GQVVMVF9MT0NLRUQ7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CkBAIC00ODIxLDcgKzUwNzksOSBAQAogCWlmIChJU19BUFBFTkQoaW5vZGUpIHx8IElTX0lNTVVUQUJMRShpbm9kZSkpCiAJCXJldHVybjsKIAotCWJ0cmZzX3RydW5jYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5vZGUtPmlfc2l6ZSk7CisJcmV0ID0gYnRyZnNfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbm9kZS0+aV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm47CiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOwpAQCAtNDkxNiw3ICs1MTc2LDEyIEBACiAJaWYgKCFlaSkKIAkJcmV0dXJuIE5VTEw7CiAJZWktPmxhc3RfdHJhbnMgPSAwOworCWVpLT5sYXN0X3N1Yl90cmFucyA9IDA7CiAJZWktPmxvZ2dlZF90cmFucyA9IDA7CisJZWktPm91dHN0YW5kaW5nX2V4dGVudHMgPSAwOworCWVpLT5yZXNlcnZlZF9leHRlbnRzID0gMDsKKwllaS0+cm9vdCA9IE5VTEw7CisJc3Bpbl9sb2NrX2luaXQoJmVpLT5hY2NvdW50aW5nX2xvY2spOwogCWJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZV9pbml0KCZlaS0+b3JkZXJlZF90cmVlKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfb3JwaGFuKTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CkBAIC00OTMyLDYgKzUxOTcsMTQgQEAKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKIAkvKgorCSAqIFRoaXMgY2FuIGhhcHBlbiB3aGVyZSB3ZSBjcmVhdGUgYW4gaW5vZGUsIGJ1dCBzb21lYm9keSBlbHNlIGFsc28KKwkgKiBjcmVhdGVkIHRoZSBzYW1lIGlub2RlIGFuZCB3ZSBuZWVkIHRvIGRlc3Ryb3kgdGhlIG9uZSB3ZSBhbHJlYWR5CisJICogY3JlYXRlZC4KKwkgKi8KKwlpZiAoIXJvb3QpCisJCWdvdG8gZnJlZTsKKworCS8qCiAJICogTWFrZSBzdXJlIHdlJ3JlIHByb3Blcmx5IHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJlZCBvcGVyYXRpb24KIAkgKiBsaXN0cy4KIAkgKi8KQEAgLTQ5NjYsNiArNTIzOSw3IEBACiAJfQogCWlub2RlX3RyZWVfZGVsKGlub2RlKTsKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgMCwgKHU2NCktMSwgMCk7CitmcmVlOgogCWttZW1fY2FjaGVfZnJlZShidHJmc19pbm9kZV9jYWNoZXAsIEJUUkZTX0koaW5vZGUpKTsKIH0KIApAQCAtNTA3MCw3ICs1MzQ0LDE1IEBACiAJICAgIG5ld19pbm9kZS0+aV9zaXplID4gQlRSRlNfRU1QVFlfRElSX1NJWkUpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCi0JcmV0ID0gYnRyZnNfY2hlY2tfbWV0YWRhdGFfZnJlZV9zcGFjZShyb290KTsKKwkvKgorCSAqIFdlIHdhbnQgdG8gcmVzZXJ2ZSB0aGUgYWJzb2x1dGUgd29yc3QgY2FzZSBhbW91bnQgb2YgaXRlbXMuICBTbyBpZgorCSAqIGJvdGggaW5vZGVzIGFyZSBzdWJ2b2xzIGFuZCB3ZSBuZWVkIHRvIHVubGluayB0aGVtIHRoZW4gdGhhdCB3b3VsZAorCSAqIHJlcXVpcmUgNCBpdGVtIG1vZGlmaWNhdGlvbnMsIGJ1dCBpZiB0aGV5IGFyZSBib3RoIG5vcm1hbCBpbm9kZXMgaXQKKwkgKiB3b3VsZCByZXF1aXJlIDUgaXRlbSBtb2RpZmljYXRpb25zLCBzbyB3ZSdsbCBhc3N1bWUgdGhlaXIgbm9ybWFsCisJICogaW5vZGVzLiAgU28gNSAqIDIgaXMgMTAsIHBsdXMgMSBmb3IgdGhlIG5ldyBsaW5rLCBzbyAxMSB0b3RhbCBpdGVtcworCSAqIHNob3VsZCBjb3ZlciB0aGUgd29yc3QgY2FzZSBudW1iZXIgb2YgaXRlbXMgd2UnbGwgbW9kaWZ5LgorCSAqLworCXJldCA9IGJ0cmZzX3Jlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgMTEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTUxODUsNiArNTQ2Nyw4IEBACiAKIAlpZiAob2xkX2lub2RlLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKQogCQl1cF9yZWFkKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKKworCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTI1NiwxMSArNTU0MCwxOCBAQAogCWlmIChuYW1lX2xlbiA+IEJUUkZTX01BWF9JTkxJTkVfREFUQV9TSVpFKHJvb3QpKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAotCWVyciA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAyIGl0ZW1zIGZvciBpbm9kZSBpdGVtIGFuZCByZWYKKwkgKiAyIGl0ZW1zIGZvciBkaXIgaXRlbXMKKwkgKiAxIGl0ZW0gZm9yIHhhdHRyIGlmIHNlbGludXggaXMgb24KKwkgKi8KKwllcnIgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZhaWw7CisJCXJldHVybiBlcnI7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2ZhaWw7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCiAJZXJyID0gYnRyZnNfZmluZF9mcmVlX29iamVjdGlkKHRyYW5zLCByb290LCBkaXItPmlfaW5vLCAmb2JqZWN0aWQpOwpAQCAtNTM0MSw2ICs1NjMyLDcgQEAKIAluciA9IHRyYW5zLT5ibG9ja3NfdXNlZDsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogb3V0X2ZhaWw6CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDUpOwogCWlmIChkcm9wX2lub2RlKSB7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAkJaXB1dChpbm9kZSk7CkBAIC01MzYyLDYgKzU2NTQsMTEgQEAKIAogCXdoaWxlIChudW1fYnl0ZXMgPiAwKSB7CiAJCWFsbG9jX3NpemUgPSBtaW4obnVtX2J5dGVzLCByb290LT5mc19pbmZvLT5tYXhfZXh0ZW50KTsKKworCQlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisKIAkJcmV0ID0gYnRyZnNfcmVzZXJ2ZV9leHRlbnQodHJhbnMsIHJvb3QsIGFsbG9jX3NpemUsCiAJCQkJCSAgIHJvb3QtPnNlY3RvcnNpemUsIDAsIGFsbG9jX2hpbnQsCiAJCQkJCSAgICh1NjQpLTEsICZpbnMsIDEpOwpAQCAtNTM4MSw2ICs1Njc4LDcgQEAKIAkJbnVtX2J5dGVzIC09IGlucy5vZmZzZXQ7CiAJCWN1cl9vZmZzZXQgKz0gaW5zLm9mZnNldDsKIAkJYWxsb2NfaGludCA9IGlucy5vYmplY3RpZCArIGlucy5vZmZzZXQ7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCAxKTsKIAl9CiBvdXQ6CiAJaWYgKGN1cl9vZmZzZXQgPiBzdGFydCkgewpAQCAtNTU0NCw3ICs1ODQyLDcgQEAKIAkucGVybWlzc2lvbgk9IGJ0cmZzX3Blcm1pc3Npb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidHJmc19kaXJfZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnRyZnNfZGlyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGJ0cmZzX3JlYWxfcmVhZGRpciwKQEAgLTU1NjYsNiArNTg2NCw4IEBACiAJLnJlYWRwYWdlX2lvX2ZhaWxlZF9ob29rID0gYnRyZnNfaW9fZmFpbGVkX2hvb2ssCiAJLnNldF9iaXRfaG9vayA9IGJ0cmZzX3NldF9iaXRfaG9vaywKIAkuY2xlYXJfYml0X2hvb2sgPSBidHJmc19jbGVhcl9iaXRfaG9vaywKKwkubWVyZ2VfZXh0ZW50X2hvb2sgPSBidHJmc19tZXJnZV9leHRlbnRfaG9vaywKKwkuc3BsaXRfZXh0ZW50X2hvb2sgPSBidHJmc19zcGxpdF9leHRlbnRfaG9vaywKIH07CiAKIC8qCkBAIC01NjMyLDYgKzU5MzIsNiBAQAogCS5yZW1vdmV4YXR0cgk9IGJ0cmZzX3JlbW92ZXhhdHRyLAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGJ0cmZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IGJ0cmZzX2RlbnRyeV9kZWxldGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggYTg1NzdhNy4uY2RiYjA1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yMzksNyArMjM5LDEzIEBACiAJdTY0IGluZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM0MCw2ICszNDYsOSBAQAogCWVyciA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJaWYgKGVyciAmJiAhcmV0KQogCQlyZXQgPSBlcnI7CisKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CisJYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShyb290LCBucik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU1LDE5ICszNjQsMjcgQEAKIAlpZiAoIXJvb3QtPnJlZl9jb3dzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldCA9IGJ0cmZzX2NoZWNrX21ldGFkYXRhX2ZyZWVfc3BhY2Uocm9vdCk7CisJLyoKKwkgKiAxIC0gaW5vZGUgaXRlbQorCSAqIDIgLSByZWZzCisJICogMSAtIHJvb3QgaXRlbQorCSAqIDIgLSBkaXIgaXRlbXMKKwkgKi8KKwlyZXQgPSBidHJmc19yZXNlcnZlX21ldGFkYXRhX3NwYWNlKHJvb3QsIDYpOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF91bmxvY2s7CiAKIAlwZW5kaW5nX3NuYXBzaG90ID0ga3phbGxvYyhzaXplb2YoKnBlbmRpbmdfc25hcHNob3QpLCBHRlBfTk9GUyk7CiAJaWYgKCFwZW5kaW5nX3NuYXBzaG90KSB7CiAJCXJldCA9IC1FTk9NRU07CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJcGVuZGluZ19zbmFwc2hvdC0+bmFtZSA9IGttYWxsb2MobmFtZWxlbiArIDEsIEdGUF9OT0ZTKTsKIAlpZiAoIXBlbmRpbmdfc25hcHNob3QtPm5hbWUpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJa2ZyZWUocGVuZGluZ19zbmFwc2hvdCk7CisJCWJ0cmZzX3VucmVzZXJ2ZV9tZXRhZGF0YV9zcGFjZShyb290LCA2KTsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAJbWVtY3B5KHBlbmRpbmdfc25hcHNob3QtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOwpAQCAtODEzLDYgKzgzMCw3IEBACiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyKSB7CisJCXNocmlua19kY2FjaGVfc2Iocm9vdC0+ZnNfaW5mby0+c2IpOwogCQlidHJmc19pbnZhbGlkYXRlX2lub2RlcyhkZXN0KTsKIAkJZF9kZWxldGUoZGVudHJ5KTsKIAl9CkBAIC0xMTA1LDggKzExMjMsMTAgQEAKIAkJCQkJZGF0YW8gKz0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQkJZGF0YWwgLT0gb2ZmIC0ga2V5Lm9mZnNldDsKIAkJCQl9Ci0JCQkJaWYgKGtleS5vZmZzZXQgKyBkYXRhbyArIGRhdGFsID4gb2ZmICsgbGVuKQotCQkJCQlkYXRhbCA9IG9mZiArIGxlbiAtIGtleS5vZmZzZXQgLSBkYXRhbzsKKworCQkJCWlmIChrZXkub2Zmc2V0ICsgZGF0YWwgPiBvZmYgKyBsZW4pCisJCQkJCWRhdGFsID0gb2ZmICsgbGVuIC0ga2V5Lm9mZnNldDsKKwogCQkJCS8qIGRpc2tvID09IDAgbWVhbnMgaXQncyBhIGhvbGUgKi8KIAkJCQlpZiAoIWRpc2tvKQogCQkJCQlkYXRhbyA9IDA7CkBAIC0xMjE1LDE1ICsxMjM1LDE1IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZkZW50cnkoZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCisJcmV0ID0gLUVQRVJNOwogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChmaWxlLT5wcml2YXRlX2RhdGEpIHsKLQkJcmV0ID0gLUVJTlBST0dSRVNTOwogCQlnb3RvIG91dDsKLQl9CisKKwlyZXQgPSAtRUlOUFJPR1JFU1M7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBtbnRfd2FudF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIAlpZiAocmV0KQpAQCAtMTIzMywxMiArMTI1MywxOSBAQAogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMrKzsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAorCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAodHJhbnMpCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRyYW5zOwotCWVsc2UKLQkJcmV0ID0gLUVOT01FTTsKLQkvKnByaW50ayhLRVJOX0lORk8gImJ0cmZzX2lvY3RsX3RyYW5zX3N0YXJ0IG9uICVwXG4iLCBmaWxlKTsqLworCWlmICghdHJhbnMpCisJCWdvdG8gb3V0X2Ryb3A7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB0cmFuczsKKwlyZXR1cm4gMDsKKworb3V0X2Ryb3A6CisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOworCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKKwltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltbnRfZHJvcF93cml0ZShmaWxlLT5mX3BhdGgubW50KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1NCwyNCArMTI4MSwyMCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KGZpbGUpLT5kX2lub2RlOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnM7Ci0JaW50IHJldCA9IDA7CiAKIAl0cmFucyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpZiAoIXRyYW5zKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCWlmICghdHJhbnMpCisJCXJldHVybiAtRUlOVkFMOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAKKwlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMtLTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCW1udF9kcm9wX3dyaXRlKGZpbGUtPmZfcGF0aC5tbnQpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogbG9uZyBidHJmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50CmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IGI1ZDZkMjQuLjU3OTliYzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0zMDYsNiArMzA2LDEyIEBACiAJdHJlZS0+bGFzdCA9IE5VTEw7CiAJc2V0X2JpdChCVFJGU19PUkRFUkVEX0NPTVBMRVRFLCAmZW50cnktPmZsYWdzKTsKIAorCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJQlRSRlNfSShpbm9kZSktPm91dHN0YW5kaW5nX2V4dGVudHMtLTsKKwlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CisJYnRyZnNfdW5yZXNlcnZlX21ldGFkYXRhX2Zvcl9kZWxhbGxvYyhCVFJGU19JKGlub2RlKS0+cm9vdCwKKwkJCQkJICAgICAgaW5vZGUsIDEpOworCiAJc3Bpbl9sb2NrKCZCVFJGU19JKGlub2RlKS0+cm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CiAJbGlzdF9kZWxfaW5pdCgmZW50cnktPnJvb3RfZXh0ZW50X2xpc3QpOwogCkBAIC00NTgsNyArNDY0LDcgQEAKIAkgKiBzdGFydCBJTyBvbiBhbnkgZGlydHkgb25lcyBzbyB0aGUgd2FpdCBkb2Vzbid0IHN0YWxsIHdhaXRpbmcKIAkgKiBmb3IgcGRmbHVzaCB0byBmaW5kIHRoZW0KIAkgKi8KLQlidHJmc19mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBlbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIGVuZCk7CiAJaWYgKHdhaXQpIHsKIAkJd2FpdF9ldmVudChlbnRyeS0+d2FpdCwgdGVzdF9iaXQoQlRSRlNfT1JERVJFRF9DT01QTEVURSwKIAkJCQkJCSAmZW50cnktPmZsYWdzKSk7CkBAIC00ODgsMTcgKzQ5NCwxNSBAQAogCS8qIHN0YXJ0IElPIGFjcm9zcyB0aGUgcmFuZ2UgZmlyc3QgdG8gaW5zdGFudGlhdGUgYW55IGRlbGFsbG9jCiAJICogZXh0ZW50cwogCSAqLwotCWJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kLCBXQl9TWU5DX0FMTCk7CisJZmlsZW1hcF9mZGF0YXdyaXRlX3JhbmdlKGlub2RlLT5pX21hcHBpbmcsIHN0YXJ0LCBvcmlnX2VuZCk7CiAKIAkvKiBUaGUgY29tcHJlc3Npb24gY29kZSB3aWxsIGxlYXZlIHBhZ2VzIGxvY2tlZCBidXQgcmV0dXJuIGZyb20KIAkgKiB3cml0ZXBhZ2Ugd2l0aG91dCBzZXR0aW5nIHRoZSBwYWdlIHdyaXRlYmFjay4gIFN0YXJ0aW5nIGFnYWluCiAJICogd2l0aCBXQl9TWU5DX0FMTCB3aWxsIGVuZCB1cCB3YWl0aW5nIGZvciB0aGUgSU8gdG8gYWN0dWFsbHkgc3RhcnQuCiAJICovCi0JYnRyZnNfZmRhdGF3cml0ZV9yYW5nZShpbm9kZS0+aV9tYXBwaW5nLCBzdGFydCwgb3JpZ19lbmQsIFdCX1NZTkNfQUxMKTsKKwlmaWxlbWFwX2ZkYXRhd3JpdGVfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAotCWJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJICAgc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVCwKLQkJCQkJICAgb3JpZ19lbmQgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJZmlsZW1hcF9mZGF0YXdhaXRfcmFuZ2UoaW5vZGUtPmlfbWFwcGluZywgc3RhcnQsIG9yaWdfZW5kKTsKIAogCWVuZCA9IG9yaWdfZW5kOwogCWZvdW5kID0gMDsKQEAgLTcxNiw4OSArNzIwLDYgQEAKIH0KIAogCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiBfX2ZpbGVtYXBfZmRhdGF3cml0ZV9yYW5nZSAtIHN0YXJ0IHdyaXRlYmFjayBvbiBtYXBwaW5nIGRpcnR5IHBhZ2VzIGluIHJhbmdlCi0gKiBAbWFwcGluZzoJYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKLSAqIEBzdGFydDoJb2Zmc2V0IGluIGJ5dGVzIHdoZXJlIHRoZSByYW5nZSBzdGFydHMKLSAqIEBlbmQ6CW9mZnNldCBpbiBieXRlcyB3aGVyZSB0aGUgcmFuZ2UgZW5kcyAoaW5jbHVzaXZlKQotICogQHN5bmNfbW9kZToJZW5hYmxlIHN5bmNocm9ub3VzIG9wZXJhdGlvbgotICoKLSAqIFN0YXJ0IHdyaXRlYmFjayBhZ2FpbnN0IGFsbCBvZiBhIG1hcHBpbmcncyBkaXJ0eSBwYWdlcyB0aGF0IGxpZQotICogd2l0aGluIHRoZSBieXRlIG9mZnNldHMgPHN0YXJ0LCBlbmQ+IGluY2x1c2l2ZS4KLSAqCi0gKiBJZiBzeW5jX21vZGUgaXMgV0JfU1lOQ19BTEwgdGhlbiB0aGlzIGlzIGEgImRhdGEgaW50ZWdyaXR5IiBvcGVyYXRpb24sIGFzCi0gKiBvcHBvc2VkIHRvIGEgcmVndWxhciBtZW1vcnkgY2xlYW5zaW5nIHdyaXRlYmFjay4gIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4KLSAqIHRoZXNlIHR3byBvcGVyYXRpb25zIGlzIHRoYXQgaWYgYSBkaXJ0eSBwYWdlL2J1ZmZlciBpcyBlbmNvdW50ZXJlZCwgaXQgbXVzdAotICogYmUgd2FpdGVkIHVwb24sIGFuZCBub3QganVzdCBza2lwcGVkIG92ZXIuCi0gKi8KLWludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCi0JCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKQotewotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5zeW5jX21vZGUgPSBzeW5jX21vZGUsCi0JCS5ucl90b193cml0ZSA9IG1hcHBpbmctPm5ycGFnZXMgKiAyLAotCQkucmFuZ2Vfc3RhcnQgPSBzdGFydCwKLQkJLnJhbmdlX2VuZCA9IGVuZCwKLQl9OwotCXJldHVybiBidHJmc193cml0ZXBhZ2VzKG1hcHBpbmcsICZ3YmMpOwotfQotCi0vKioKLSAqIHRha2VuIGZyb20gbW0vZmlsZW1hcC5jIGJlY2F1c2UgaXQgaXNuJ3QgZXhwb3J0ZWQKLSAqCi0gKiB3YWl0X29uX3BhZ2Vfd3JpdGViYWNrX3JhbmdlIC0gd2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlCi0gKiBAbWFwcGluZzoJdGFyZ2V0IGFkZHJlc3Nfc3BhY2UKLSAqIEBzdGFydDoJYmVnaW5uaW5nIHBhZ2UgaW5kZXgKLSAqIEBlbmQ6CWVuZGluZyBwYWdlIGluZGV4Ci0gKgotICogV2FpdCBmb3Igd3JpdGViYWNrIHRvIGNvbXBsZXRlIGFnYWluc3QgcGFnZXMgaW5kZXhlZCBieSBzdGFydC0+ZW5kCi0gKiBpbmNsdXNpdmUKLSAqLwotaW50IGJ0cmZzX3dhaXRfb25fcGFnZV93cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJICAgICAgIHBnb2ZmX3Qgc3RhcnQsIHBnb2ZmX3QgZW5kKQotewotCXN0cnVjdCBwYWdldmVjIHB2ZWM7Ci0JaW50IG5yX3BhZ2VzOwotCWludCByZXQgPSAwOwotCXBnb2ZmX3QgaW5kZXg7Ci0KLQlpZiAoZW5kIDwgc3RhcnQpCi0JCXJldHVybiAwOwotCi0JcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKLQlpbmRleCA9IHN0YXJ0OwotCXdoaWxlICgoaW5kZXggPD0gZW5kKSAmJgotCQkJKG5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCi0JCQlQQUdFQ0FDSEVfVEFHX1dSSVRFQkFDSywKLQkJCW1pbihlbmQgLSBpbmRleCwgKHBnb2ZmX3QpUEFHRVZFQ19TSVpFLTEpICsgMSkpICE9IDApIHsKLQkJdW5zaWduZWQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgewotCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLnBhZ2VzW2ldOwotCi0JCQkvKiB1bnRpbCByYWRpeCB0cmVlIGxvb2t1cCBhY2NlcHRzIGVuZF9pbmRleCAqLwotCQkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kKQotCQkJCWNvbnRpbnVlOwotCi0JCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwotCQkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKLQkJCQlyZXQgPSAtRUlPOwotCQl9Ci0JCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7Ci0JCWNvbmRfcmVzY2hlZCgpOwotCX0KLQotCS8qIENoZWNrIGZvciBvdXRzdGFuZGluZyB3cml0ZSBlcnJvcnMgKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VOT1NQQywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVOT1NQQzsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFTX0VJTywgJm1hcHBpbmctPmZsYWdzKSkKLQkJcmV0ID0gLUVJTzsKLQotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBhZGQgYSBnaXZlbiBpbm9kZSB0byB0aGUgbGlzdCBvZiBpbm9kZXMgdGhhdCBtdXN0IGJlIGZ1bGx5IG9uCiAgKiBkaXNrIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGNvbW1pdCBmaW5pc2hlcy4KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggOTkzYTdlYS4uZjgyZTg3NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTE1MywxMCArMTUzLDYgQEAKIGludCBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9leHRlbnQgKm9yZGVyZWQpOwogaW50IGJ0cmZzX2ZpbmRfb3JkZXJlZF9zdW0oc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG9mZnNldCwgdTY0IGRpc2tfYnl0ZW5yLCB1MzIgKnN1bSk7Ci1pbnQgYnRyZnNfd2FpdF9vbl9wYWdlX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCQkgICAgICAgcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOwotaW50IGJ0cmZzX2ZkYXRhd3JpdGVfcmFuZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBzdGFydCwKLQkJCSAgIGxvZmZfdCBlbmQsIGludCBzeW5jX21vZGUpOwogaW50IGJ0cmZzX3dhaXRfb3JkZXJlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LCBpbnQgbm9jb3dfb25seSk7CiBpbnQgYnRyZnNfcnVuX29yZGVyZWRfb3BlcmF0aW9ucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IHdhaXQpOwogaW50IGJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCAzNjFhZDMyLi5jZmNjOTNjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0zNTE4LDcgKzM1MTgsNyBAQAogCUJVR19PTighcmMtPmJsb2NrX2dyb3VwKTsKIAogCWJ0cmZzX2luaXRfd29ya2VycygmcmMtPndvcmtlcnMsICJyZWxvY2F0ZSIsCi0JCQkgICBmc19pbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsIE5VTEwpOwogCiAJcmMtPmV4dGVudF9yb290ID0gZXh0ZW50X3Jvb3Q7CiAJYnRyZnNfcHJlcGFyZV9ibG9ja19ncm91cF9yZWxvY2F0aW9uKGV4dGVudF9yb290LCByYy0+YmxvY2tfZ3JvdXApOwpAQCAtMzcwMSw3ICszNzAxLDcgQEAKIAltYXBwaW5nX3RyZWVfaW5pdCgmcmMtPnJlbG9jX3Jvb3RfdHJlZSk7CiAJSU5JVF9MSVNUX0hFQUQoJnJjLT5yZWxvY19yb290cyk7CiAJYnRyZnNfaW5pdF93b3JrZXJzKCZyYy0+d29ya2VycywgInJlbG9jYXRlIiwKLQkJCSAgIHJvb3QtPmZzX2luZm8tPnRocmVhZF9wb29sX3NpemUpOworCQkJICAgcm9vdC0+ZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwgTlVMTCk7CiAJcmMtPmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7CiAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yb290LXRyZWUuYyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCmluZGV4IDkzNTE0MjguLjY3ZmEyZDIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL3Jvb3QtdHJlZS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAl3cml0ZV9leHRlbnRfYnVmZmVyKGwsIGl0ZW0sIHB0ciwgc2l6ZW9mKCppdGVtKSk7CiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwogb3V0OgotCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTMzMiw3ICszMzEsNiBAQAogCUJVR19PTihyZWZzICE9IDApOwogCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKIG91dDoKLQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuYwppbmRleCA2NzAzNTM4Li43NTJhNTQ2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCisrKyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTY2LDcgKzY2LDggQEAKIAlPcHRfZGVncmFkZWQsIE9wdF9zdWJ2b2wsIE9wdF9kZXZpY2UsIE9wdF9ub2RhdGFzdW0sIE9wdF9ub2RhdGFjb3csCiAJT3B0X21heF9leHRlbnQsIE9wdF9tYXhfaW5saW5lLCBPcHRfYWxsb2Nfc3RhcnQsIE9wdF9ub2JhcnJpZXIsCiAJT3B0X3NzZCwgT3B0X25vc3NkLCBPcHRfc3NkX3NwcmVhZCwgT3B0X3RocmVhZF9wb29sLCBPcHRfbm9hY2wsCi0JT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZXJyLAorCU9wdF9jb21wcmVzcywgT3B0X25vdHJlZWxvZywgT3B0X3JhdGlvLCBPcHRfZmx1c2hvbmNvbW1pdCwKKwlPcHRfZGlzY2FyZCwgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTg4LDYgKzg5LDcgQEAKIAl7T3B0X25vdHJlZWxvZywgIm5vdHJlZWxvZyJ9LAogCXtPcHRfZmx1c2hvbmNvbW1pdCwgImZsdXNob25jb21taXQifSwKIAl7T3B0X3JhdGlvLCAibWV0YWRhdGFfcmF0aW89JWQifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjU3LDYgKzI1OSw5IEBACiAJCQkJICAgICAgIGluZm8tPm1ldGFkYXRhX3JhdGlvKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIE9wdF9kaXNjYXJkOgorCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIERJU0NBUkQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMzQ0LDcgKzM0OSw5IEBACiAJc2ItPnNfZXhwb3J0X29wID0gJmJ0cmZzX2V4cG9ydF9vcHM7CiAJc2ItPnNfeGF0dHIgPSBidHJmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c190aW1lX2dyYW4gPSAxOworI2lmZGVmIENPTkZJR19CVFJGU19GU19QT1NJWF9BQ0wKIAlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKyNlbmRpZgogCiAJdHJlZV9yb290ID0gb3Blbl9jdHJlZShzYiwgZnNfZGV2aWNlcywgKGNoYXIgKilkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggODhmODY2Zi4uYzIwN2U4YyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC0xNjMsOCArMTYzLDE0IEBACiAJfQogfQogCitlbnVtIGJ0cmZzX3RyYW5zX3R5cGUgeworCVRSQU5TX1NUQVJULAorCVRSQU5TX0pPSU4sCisJVFJBTlNfVVNFUlNQQUNFLAorfTsKKwogc3RhdGljIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnN0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJCQkgICAgIGludCBudW1fYmxvY2tzLCBpbnQgd2FpdCkKKwkJCQkJICAgICBpbnQgbnVtX2Jsb2NrcywgaW50IHR5cGUpCiB7CiAJc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqaCA9CiAJCWttZW1fY2FjaGVfYWxsb2MoYnRyZnNfdHJhbnNfaGFuZGxlX2NhY2hlcCwgR0ZQX05PRlMpOwpAQCAtMTcyLDcgKzE3OCw4IEBACiAKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF9yZWNvdmVyaW5nICYmCi0JICAgICgod2FpdCA9PSAxICYmICFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKSB8fCB3YWl0ID09IDIpKQorCSAgICAoKHR5cGUgPT0gVFJBTlNfU1RBUlQgJiYgIXJvb3QtPmZzX2luZm8tPm9wZW5faW9jdGxfdHJhbnMpIHx8CisJICAgICB0eXBlID09IFRSQU5TX1VTRVJTUEFDRSkpCiAJCXdhaXRfY3VycmVudF90cmFucyhyb290KTsKIAlyZXQgPSBqb2luX3RyYW5zYWN0aW9uKHJvb3QpOwogCUJVR19PTihyZXQpOwpAQCAtMTg2LDYgKzE5Myw5IEBACiAJaC0+YWxsb2NfZXhjbHVkZV9zdGFydCA9IDA7CiAJaC0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CiAKKwlpZiAoIWN1cnJlbnQtPmpvdXJuYWxfaW5mbyAmJiB0eXBlICE9IFRSQU5TX1VTRVJTUEFDRSkKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gaDsKKwogCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnVzZV9jb3VudCsrOwogCXJlY29yZF9yb290X2luX3RyYW5zKGgsIHJvb3QpOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwpAQCAtMTk1LDE4ICsyMDUsMTggQEAKIHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKmJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDEpOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19TVEFSVCk7CiB9CiBzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpidHJmc19qb2luX3RyYW5zYWN0aW9uKHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkJICAgaW50IG51bV9ibG9ja3MpCiB7Ci0JcmV0dXJuIHN0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIG51bV9ibG9ja3MsIDApOworCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyb290LCBudW1fYmxvY2tzLCBUUkFOU19KT0lOKTsKIH0KIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqYnRyZnNfc3RhcnRfaW9jdGxfdHJhbnNhY3Rpb24oc3RydWN0IGJ0cmZzX3Jvb3QgKnIsCiAJCQkJCQkJIGludCBudW1fYmxvY2tzKQogewotCXJldHVybiBzdGFydF90cmFuc2FjdGlvbihyLCBudW1fYmxvY2tzLCAyKTsKKwlyZXR1cm4gc3RhcnRfdHJhbnNhY3Rpb24ociwgbnVtX2Jsb2NrcywgVFJBTlNfVVNFUlNQQUNFKTsKIH0KIAogLyogd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgdG8gYmUgZnVsbHkgY29tcGxldGUgKi8KQEAgLTMxNyw2ICszMjcsOSBAQAogCQl3YWtlX3VwKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAltdXRleF91bmxvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKworCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJbWVtc2V0KHRyYW5zLCAwLCBzaXplb2YoKnRyYW5zKSk7CiAJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zX2hhbmRsZV9jYWNoZXAsIHRyYW5zKTsKIApAQCAtMzM4LDEwICszNTEsMTAgQEAKIC8qCiAgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgogICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCi0gKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKiB0aG9zZSBleHRlbnRzIGFyZSBzZW50IHRvIGRpc2sgYnV0IGRvZXMgbm90IHdhaXQgb24gdGhlbQogICovCi1pbnQgYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpCitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkgICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKIHsKIAlpbnQgcmV0OwogCWludCBlcnIgPSAwOwpAQCAtMzg4LDYgKzQwMSwyOSBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCQl9CiAJfQorCWlmIChlcnIpCisJCXdlcnIgPSBlcnI7CisJcmV0dXJuIHdlcnI7Cit9CisKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0LiAgV2Ugd2FpdAorICogb24gYWxsIHRoZSBwYWdlcyBhbmQgY2xlYXIgdGhlbSBmcm9tIHRoZSBkaXJ0eSBwYWdlcyBzdGF0ZSB0cmVlCisgKi8KK2ludCBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCBlcnIgPSAwOworCWludCB3ZXJyID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmJ0cmVlX2lub2RlID0gcm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGU7CisJdTY0IHN0YXJ0ID0gMDsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXQoZGlydHlfcGFnZXMsIDAsICZzdGFydCwgJmVuZCwKIAkJCQkJICAgIEVYVEVOVF9ESVJUWSk7CkBAIC00MTgsNiArNDU0LDIyIEBACiAJcmV0dXJuIHdlcnI7CiB9CiAKKy8qCisgKiB3aGVuIGJ0cmVlIGJsb2NrcyBhcmUgYWxsb2NhdGVkLCB0aGV5IGhhdmUgc29tZSBjb3JyZXNwb25kaW5nIGJpdHMgc2V0IGZvcgorICogdGhlbSBpbiBvbmUgb2YgdHdvIGV4dGVudF9pbyB0cmVlcy4gIFRoaXMgaXMgdXNlZCB0byBtYWtlIHN1cmUgYWxsIG9mCisgKiB0aG9zZSBleHRlbnRzIGFyZSBvbiBkaXNrIGZvciB0cmFuc2FjdGlvbiBvciBsb2cgY29tbWl0CisgKi8KK2ludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcykKK3sKKwlpbnQgcmV0OworCWludCByZXQyOworCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMocm9vdCwgZGlydHlfcGFnZXMpOworCXJldDIgPSBidHJmc193YWl0X21hcmtlZF9leHRlbnRzKHJvb3QsIGRpcnR5X3BhZ2VzKTsKKwlyZXR1cm4gcmV0IHx8IHJldDI7Cit9CisKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290KQogewpAQCAtNzQzLDYgKzc5NSw3IEBACiAJbWVtY3B5KCZwZW5kaW5nLT5yb290X2tleSwgJmtleSwgc2l6ZW9mKGtleSkpOwogZmFpbDoKIAlrZnJlZShuZXdfcm9vdF9pdGVtKTsKKwlidHJmc191bnJlc2VydmVfbWV0YWRhdGFfc3BhY2Uocm9vdCwgNik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTA1OSw2ICsxMTEyLDkgQEAKIAogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCisJaWYgKGN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9PSB0cmFucykKKwkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKwogCWttZW1fY2FjaGVfZnJlZShidHJmc190cmFuc19oYW5kbGVfY2FjaGVwLCB0cmFucyk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDY2M2M2NzQuLmQ0ZTNlN2EgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtNzksNiArNzksNyBAQAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uLT50cmFuc2lkOworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3N1Yl90cmFucyA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5sb2dfdHJhbnNpZDsKIH0KIAogaW50IGJ0cmZzX2VuZF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTEwNyw1ICsxMDgsOSBAQAogCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQkJc3RydWN0IGV4dGVudF9pb190cmVlICpkaXJ0eV9wYWdlcyk7CitpbnQgYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOworaW50IGJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqZGlydHlfcGFnZXMpOwogaW50IGJ0cmZzX3RyYW5zYWN0aW9uX2luX2NvbW1pdChzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IDc4Mjc4NDEuLjc0MTY2NmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMTM3LDExICsxMzcsMjAgQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaWYgKHJvb3QtPmxvZ19yb290KSB7CisJCWlmICghcm9vdC0+bG9nX3N0YXJ0X3BpZCkgeworCQkJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJCX0gZWxzZSBpZiAocm9vdC0+bG9nX3N0YXJ0X3BpZCAhPSBjdXJyZW50LT5waWQpIHsKKwkJCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gdHJ1ZTsKKwkJfQorCiAJCXJvb3QtPmxvZ19iYXRjaCsrOwogCQlhdG9taWNfaW5jKCZyb290LT5sb2dfd3JpdGVycyk7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQorCXJvb3QtPmxvZ19tdWx0aXBsZV9waWRzID0gZmFsc2U7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IGN1cnJlbnQtPnBpZDsKIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmVlX2xvZ19tdXRleCk7CiAJaWYgKCFyb290LT5mc19pbmZvLT5sb2dfcm9vdF90cmVlKSB7CiAJCXJldCA9IGJ0cmZzX2luaXRfbG9nX3Jvb3RfdHJlZSh0cmFucywgcm9vdC0+ZnNfaW5mbyk7CkBAIC0xOTcxLDYgKzE5ODAsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKmxvZyA9IHJvb3QtPmxvZ19yb290OwogCXN0cnVjdCBidHJmc19yb290ICpsb2dfcm9vdF90cmVlID0gcm9vdC0+ZnNfaW5mby0+bG9nX3Jvb3RfdHJlZTsKKwl1NjQgbG9nX3RyYW5zaWQgPSAwOwogCiAJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAlpbmRleDEgPSByb290LT5sb2dfdHJhbnNpZCAlIDI7CkBAIC0xOTg3LDEwICsxOTk3LDExIEBACiAKIAl3aGlsZSAoMSkgewogCQl1bnNpZ25lZCBsb25nIGJhdGNoID0gcm9vdC0+bG9nX2JhdGNoOwotCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCisJCWlmIChyb290LT5sb2dfbXVsdGlwbGVfcGlkcykgeworCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOworCQl9CiAJCXdhaXRfZm9yX3dyaXRlcih0cmFucywgcm9vdCk7CiAJCWlmIChiYXRjaCA9PSByb290LT5sb2dfYmF0Y2gpCiAJCQlicmVhazsKQEAgLTIwMDMsMTQgKzIwMTQsMTkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOworCS8qIHdlIHN0YXJ0IElPIG9uICBhbGwgdGhlIG1hcmtlZCBleHRlbnRzIGhlcmUsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorCSAqIHdhaXQgZm9yIHRoZW0gdW50aWwgbGF0ZXIuCisJICovCisJcmV0ID0gYnRyZnNfd3JpdGVfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOwogCiAJYnRyZnNfc2V0X3Jvb3Rfbm9kZSgmbG9nLT5yb290X2l0ZW0sIGxvZy0+bm9kZSk7CiAKIAlyb290LT5sb2dfYmF0Y2ggPSAwOworCWxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CiAJcm9vdC0+bG9nX3RyYW5zaWQrKzsKIAlsb2ctPmxvZ190cmFuc2lkID0gcm9vdC0+bG9nX3RyYW5zaWQ7CisJcm9vdC0+bG9nX3N0YXJ0X3BpZCA9IDA7CiAJc21wX21iKCk7CiAJLyoKIAkgKiBsb2cgdHJlZSBoYXMgYmVlbiBmbHVzaGVkIHRvIGRpc2ssIG5ldyBtb2RpZmljYXRpb25zIG9mCkBAIC0yMDM2LDYgKzIwNTIsNyBAQAogCiAJaW5kZXgyID0gbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdKSkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJd2FpdF9sb2dfY29tbWl0KHRyYW5zLCBsb2dfcm9vdF90cmVlLAogCQkJCWxvZ19yb290X3RyZWUtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwpAQCAtMjA1NSw2ICsyMDcyLDcgQEAKIAkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgogCSAqLwogCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgeworCQlidHJmc193YWl0X21hcmtlZF9leHRlbnRzKGxvZywgJmxvZy0+ZGlydHlfbG9nX3BhZ2VzKTsKIAkJbXV0ZXhfdW5sb2NrKCZsb2dfcm9vdF90cmVlLT5sb2dfbXV0ZXgpOwogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIG91dF93YWtlX2xvZ19yb290OwpAQCAtMjA2Myw2ICsyMDgxLDcgQEAKIAlyZXQgPSBidHJmc193cml0ZV9hbmRfd2FpdF9tYXJrZWRfZXh0ZW50cyhsb2dfcm9vdF90cmVlLAogCQkJCSZsb2dfcm9vdF90cmVlLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOworCWJ0cmZzX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCiAJYnRyZnNfc2V0X3N1cGVyX2xvZ19yb290KCZyb290LT5mc19pbmZvLT5zdXBlcl9mb3JfY29tbWl0LAogCQkJCWxvZ19yb290X3RyZWUtPm5vZGUtPnN0YXJ0KTsKQEAgLTIwODIsOSArMjEwMSwxNCBAQAogCSAqIHRoZSBydW5uaW5nIHRyYW5zYWN0aW9uIG9wZW4sIHNvIGEgZnVsbCBjb21taXQgY2FuJ3QgaG9wCiAJICogaW4gYW5kIGNhdXNlIHByb2JsZW1zIGVpdGhlci4KIAkgKi8KLQl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAyKTsKKwl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAxKTsKIAlyZXQgPSAwOwogCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAocm9vdC0+bGFzdF9sb2dfY29tbWl0IDwgbG9nX3RyYW5zaWQpCisJCXJvb3QtPmxhc3RfbG9nX2NvbW1pdCA9IGxvZ190cmFuc2lkOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwogb3V0X3dha2VfbG9nX3Jvb3Q6CiAJYXRvbWljX3NldCgmbG9nX3Jvb3RfdHJlZS0+bG9nX2NvbW1pdFtpbmRleDJdLCAwKTsKIAlzbXBfbWIoKTsKQEAgLTI4NTIsNiArMjg3NiwyMSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaW5fbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+bGFzdF9zdWJfdHJhbnMgPD0gcm9vdC0+bGFzdF9sb2dfY29tbWl0KQorCQlyZXQgPSAxOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisKIC8qCiAgKiBoZWxwZXIgZnVuY3Rpb24gYXJvdW5kIGJ0cmZzX2xvZ19pbm9kZSB0byBtYWtlIHN1cmUgbmV3bHkgY3JlYXRlZAogICogcGFyZW50IGRpcmVjdG9yaWVzIGFsc28gZW5kIHVwIGluIHRoZSBsb2cuICBBIG1pbmltYWwgaW5vZGUgYW5kIGJhY2tyZWYKQEAgLTI4OTEsNiArMjkzMCwxMSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZW5kX25vX3RyYW5zOwogCisJaWYgKGlub2RlX2luX2xvZyh0cmFucywgaW5vZGUpKSB7CisJCXJldCA9IEJUUkZTX05PX0xPR19TWU5DOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKIAlzdGFydF9sb2dfdHJhbnModHJhbnMsIHJvb3QpOwogCiAJcmV0ID0gYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSwgaW5vZGVfb25seSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5oIGIvZnMvYnRyZnMvdHJlZS1sb2cuaAppbmRleCBkMDljNzYwLi4wNzc2ZWFjIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5oCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKQEAgLTE5LDYgKzE5LDkgQEAKICNpZm5kZWYgX19UUkVFX0xPR18KICNkZWZpbmUgX19UUkVFX0xPR18KIAorLyogcmV0dXJuIHZhbHVlIGZvciBidHJmc19sb2dfZGVudHJ5X3NhZmUgdGhhdCBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGxvZyBpdCBhdCBhbGwgKi8KKyNkZWZpbmUgQlRSRlNfTk9fTE9HX1NZTkMgMjU2CisKIGludCBidHJmc19zeW5jX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwogaW50IGJ0cmZzX2ZyZWVfbG9nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmMgYi9mcy9idHJmcy92b2x1bWVzLmMKaW5kZXggMjNlN2QzNi4uN2VkYTQ4MyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5jCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwpAQCAtNDQ2LDggKzQ0NiwxMCBAQAogCQkJZ290byBlcnJvcjsKIAogCQlkZXZpY2UtPm5hbWUgPSBrc3RyZHVwKG9yaWdfZGV2LT5uYW1lLCBHRlBfTk9GUyk7Ci0JCWlmICghZGV2aWNlLT5uYW1lKQorCQlpZiAoIWRldmljZS0+bmFtZSkgeworCQkJa2ZyZWUoZGV2aWNlKTsKIAkJCWdvdG8gZXJyb3I7CisJCX0KIAogCQlkZXZpY2UtPmRldmlkID0gb3JpZ19kZXYtPmRldmlkOwogCQlkZXZpY2UtPndvcmsuZnVuYyA9IHBlbmRpbmdfYmlvc19mbjsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3hhdHRyLmMgYi9mcy9idHJmcy94YXR0ci5jCmluZGV4IGE5ZDNiZjQuLmI2ZGQ1OTYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3hhdHRyLmMKKysrIGIvZnMvYnRyZnMveGF0dHIuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAgKiBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIGRpcmVjdGx5LgogICovCiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqYnRyZnNfeGF0dHJfaGFuZGxlcnNbXSA9IHsKLSNpZmRlZiBDT05GSUdfRlNfUE9TSVhfQUNMCisjaWZkZWYgQ09ORklHX0JUUkZTX0ZTX1BPU0lYX0FDTAogCSZidHJmc194YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIsCiAJJmJ0cmZzX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggMjRhZmQ3NC4uNmZhNTMwMiAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2JkZXYpOwogCiAvKgotICogS2ljayBwZGZsdXNoIHRoZW4gdHJ5IHRvIGZyZWUgdXAgc29tZSBaT05FX05PUk1BTCBtZW1vcnkuCisgKiBLaWNrIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyB0aGVuIHRyeSB0byBmcmVlIHVwIHNvbWUgWk9ORV9OT1JNQUwgbWVtb3J5LgogICovCiBzdGF0aWMgdm9pZCBmcmVlX21vcmVfbWVtb3J5KHZvaWQpCiB7CkBAIC0xNzA5LDkgKzE3MDksOSBAQAogCQkvKgogCQkgKiBJZiBpdCdzIGEgZnVsbHkgbm9uLWJsb2NraW5nIHdyaXRlIGF0dGVtcHQgYW5kIHdlIGNhbm5vdAogCQkgKiBsb2NrIHRoZSBidWZmZXIgdGhlbiByZWRpcnR5IHRoZSBwYWdlLiAgTm90ZSB0aGF0IHRoaXMgY2FuCi0JCSAqIHBvdGVudGlhbGx5IGNhdXNlIGEgYnVzeS13YWl0IGxvb3AgZnJvbSBwZGZsdXNoIGFuZCBrc3dhcGQKLQkJICogYWN0aXZpdHksIGJ1dCB0aG9zZSBjb2RlIHBhdGhzIGhhdmUgdGhlaXIgb3duIGhpZ2hlci1sZXZlbAotCQkgKiB0aHJvdHRsaW5nLgorCQkgKiBwb3RlbnRpYWxseSBjYXVzZSBhIGJ1c3ktd2FpdCBsb29wIGZyb20gd3JpdGViYWNrIHRocmVhZHMKKwkJICogYW5kIGtzd2FwZCBhY3Rpdml0eSwgYnV0IHRob3NlIGNvZGUgcGF0aHMgaGF2ZSB0aGVpciBvd24KKwkJICogaGlnaGVyLWxldmVsIHRocm90dGxpbmcuCiAJCSAqLwogCQlpZiAod2JjLT5zeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FIHx8ICF3YmMtPm5vbmJsb2NraW5nKSB7CiAJCQlsb2NrX2J1ZmZlcihiaCk7CkBAIC0zMjA4LDcgKzMyMDgsNyBAQAogICogc3RpbGwgcnVubmluZyBvYnNvbGV0ZSBmbHVzaCBkYWVtb25zLCBzbyB3ZSB0ZXJtaW5hdGUgdGhlbSBoZXJlLgogICoKICAqIFVzZSBvZiBiZGZsdXNoKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIGtlcm5lbC4KLSAqIFRoZSBgcGRmbHVzaCcga2VybmVsIHRocmVhZHMgZnVsbHkgcmVwbGFjZSBiZGZsdXNoIGRhZW1vbnMgYW5kIHRoaXMgY2FsbC4KKyAqIFRoZSBgZmx1c2gtWCcga2VybmVsIHRocmVhZHMgZnVsbHkgcmVwbGFjZSBiZGZsdXNoIGRhZW1vbnMgYW5kIHRoaXMgY2FsbC4KICAqLwogU1lTQ0FMTF9ERUZJTkUyKGJkZmx1c2gsIGludCwgZnVuYywgbG9uZywgZGF0YSkKIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCA2OTk0YTBmLi44MGYzNTI1IDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSwgU01CRlMgc3VjY2Vzc29yKSIKIAlkZXBlbmRzIG9uIElORVQKIAlzZWxlY3QgTkxTCisJc2VsZWN0IFNMT1dfV09SSwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCiAJICAoQ0lGUykgcHJvdG9jb2wgd2hpY2ggaXMgdGhlIHN1Y2Nlc3NvciB0byB0aGUgU2VydmVyIE1lc3NhZ2UgQmxvY2sKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDkwYzViMzkuLjlhNWU0ZjUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjQsOSArNjQsNiBAQAogdW5zaWduZWQgaW50IGV4dGVuZGVkX3NlY3VyaXR5ID0gQ0lGU1NFQ19ERUY7CiAvKiB1bnNpZ25lZCBpbnQgbnRsbXYyX3N1cHBvcnQgPSAwOyAqLwogdW5zaWduZWQgaW50IHNpZ25fQ0lGU19QRFVzID0gMTsKLWV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZDsgLyogcmVtb3ZlIHNwYXJzZSB3YXJuaW5nICovCi1zdHJ1Y3QgdGFza19zdHJ1Y3QgKm9wbG9ja1RocmVhZCA9IE5VTEw7Ci0vKiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICogZG5vdGlmeVRocmVhZDsgcmVtb3ZlIHNwYXJzZSB3YXJuaW5nICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2lmc19zdXBlcl9vcHM7CiB1bnNpZ25lZCBpbnQgQ0lGU01heEJ1ZlNpemUgPSBDSUZTX01BWF9NU0dTSVpFOwogbW9kdWxlX3BhcmFtKENJRlNNYXhCdWZTaXplLCBpbnQsIDApOwpAQCAtOTcyLDg5ICs5NjksMTIgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19vcGxvY2tfY2FjaGVwKTsKIH0KIAotc3RhdGljIGludCBjaWZzX29wbG9ja190aHJlYWQodm9pZCAqZHVtbXlhcmcpCi17Ci0Jc3RydWN0IG9wbG9ja19xX2VudHJ5ICpvcGxvY2tfaXRlbTsKLQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCV9fdTE2ICBuZXRmaWQ7Ci0JaW50IHJjLCB3YWl0cmMgPSAwOwotCi0Jc2V0X2ZyZWV6YWJsZSgpOwotCWRvIHsKLQkJaWYgKHRyeV90b19mcmVlemUoKSkKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZjaWZzX29wbG9ja19saXN0KSkgewotCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCXNjaGVkdWxlX3RpbWVvdXQoMzkqSFopOwotCQl9IGVsc2UgewotCQkJb3Bsb2NrX2l0ZW0gPSBsaXN0X2VudHJ5KGNpZnNfb3Bsb2NrX2xpc3QubmV4dCwKLQkJCQkJCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSwgcWhlYWQpOwotCQkJY0ZZSSgxLCAoImZvdW5kIG9wbG9jayBpdGVtIHRvIHdyaXRlIG91dCIpKTsKLQkJCXBUY29uID0gb3Bsb2NrX2l0ZW0tPnRjb247Ci0JCQlpbm9kZSA9IG9wbG9ja19pdGVtLT5waW5vZGU7Ci0JCQluZXRmaWQgPSBvcGxvY2tfaXRlbS0+bmV0ZmlkOwotCQkJc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQkJRGVsZXRlT3Bsb2NrUUVudHJ5KG9wbG9ja19pdGVtKTsKLQkJCS8qIGNhbiBub3QgZ3JhYiBpbm9kZSBzZW0gaGVyZSBzaW5jZSBpdCB3b3VsZAotCQkJCWRlYWRsb2NrIHdoZW4gb3Bsb2NrIHJlY2VpdmVkIG9uIGRlbGV0ZQotCQkJCXNpbmNlIHZmc191bmxpbmsgaG9sZHMgdGhlIGlfbXV0ZXggYWNyb3NzCi0JCQkJdGhlIGNhbGwgKi8KLQkJCS8qIG11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsqLwotCQkJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLQkJCQlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwgPT0gMCkKLQkJCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1JFQUQpOwotCQkJCWVsc2UgaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKQotCQkJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfV1JJVEUpOwotI2VuZGlmCi0JCQkJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7Ci0JCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZCA9PSAwKSB7Ci0JCQkJCXdhaXRyYyA9IGZpbGVtYXBfZmRhdGF3YWl0KAotCQkJCQkJCSAgICAgIGlub2RlLT5pX21hcHBpbmcpOwotCQkJCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7Ci0JCQkJfQotCQkJCWlmIChyYyA9PSAwKQotCQkJCQlyYyA9IHdhaXRyYzsKLQkJCX0gZWxzZQotCQkJCXJjID0gMDsKLQkJCS8qIG11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOyovCi0JCQlpZiAocmMpCi0JCQkJQ0lGU19JKGlub2RlKS0+d3JpdGVfYmVoaW5kX3JjID0gcmM7Ci0JCQljRllJKDEsICgiT3Bsb2NrIGZsdXNoIGlub2RlICVwIHJjICVkIiwKLQkJCQlpbm9kZSwgcmMpKTsKLQotCQkJCS8qIHJlbGVhc2luZyBzdGFsZSBvcGxvY2sgYWZ0ZXIgcmVjZW50IHJlY29ubmVjdAotCQkJCW9mIHNtYiBzZXNzaW9uIHVzaW5nIGEgbm93IGluY29ycmVjdCBmaWxlCi0JCQkJaGFuZGxlIGlzIG5vdCBhIGRhdGEgaW50ZWdyaXR5IGlzc3VlIGJ1dCBkbwotCQkJCW5vdCBib3RoZXIgc2VuZGluZyBhbiBvcGxvY2sgcmVsZWFzZSBpZiBzZXNzaW9uCi0JCQkJdG8gc2VydmVyIHN0aWxsIGlzIGRpc2Nvbm5lY3RlZCBzaW5jZSBvcGxvY2sKLQkJCQlhbHJlYWR5IHJlbGVhc2VkIGJ5IHRoZSBzZXJ2ZXIgaW4gdGhhdCBjYXNlICovCi0JCQlpZiAoIXBUY29uLT5uZWVkX3JlY29ubmVjdCkgewotCQkJCXJjID0gQ0lGU1NNQkxvY2soMCwgcFRjb24sIG5ldGZpZCwKLQkJCQkJCTAgLyogbGVuICovICwgMCAvKiBvZmZzZXQgKi8sIDAsCi0JCQkJCQkwLCBMT0NLSU5HX0FORFhfT1BMT0NLX1JFTEVBU0UsCi0JCQkJCQlmYWxzZSAvKiB3YWl0IGZsYWcgKi8pOwotCQkJCWNGWUkoMSwgKCJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpKTsKLQkJCX0KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KDEpOyAgLyogeWllbGQgaW4gY2FzZSBxIHdlcmUgY29ycnVwdCAqLwotCQl9Ci0JfSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBfX2luaXQKIGluaXRfY2lmcyh2b2lkKQogewogCWludCByYyA9IDA7CiAJY2lmc19wcm9jX2luaXQoKTsKIAlJTklUX0xJU1RfSEVBRCgmY2lmc190Y3Bfc2VzX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZjaWZzX29wbG9ja19saXN0KTsKICNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIAlJTklUX0xJU1RfSEVBRCgmR2xvYmFsRG5vdGlmeVJlcUxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZHbG9iYWxEbm90aWZ5UnNwX1EpOwpAQCAtMTA4Myw3ICsxMDAzLDYgQEAKIAlyd2xvY2tfaW5pdCgmR2xvYmFsU01CU2VzbG9jayk7CiAJcndsb2NrX2luaXQoJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmR2xvYmFsTWlkX0xvY2spOwotCXNwaW5fbG9ja19pbml0KCZjaWZzX29wbG9ja19sb2NrKTsKIAogCWlmIChjaWZzX21heF9wZW5kaW5nIDwgMikgewogCQljaWZzX21heF9wZW5kaW5nID0gMjsKQEAgLTExMTgsMTYgKzEwMzcsMTMgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU7CiAjZW5kaWYKLQlvcGxvY2tUaHJlYWQgPSBrdGhyZWFkX3J1bihjaWZzX29wbG9ja190aHJlYWQsIE5VTEwsICJjaWZzb3Bsb2NrZCIpOwotCWlmIChJU19FUlIob3Bsb2NrVGhyZWFkKSkgewotCQlyYyA9IFBUUl9FUlIob3Bsb2NrVGhyZWFkKTsKLQkJY0VSUk9SKDEsICgiZXJyb3IgJWQgY3JlYXRlIG9wbG9jayB0aHJlYWQiLCByYykpOwotCQlnb3RvIG91dF91bnJlZ2lzdGVyX2Rmc19rZXlfdHlwZTsKLQl9CisJcmMgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCWlmIChyYykKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9yZXNvbHZlcl9rZXk7CiAKIAlyZXR1cm4gMDsKIAotIG91dF91bnJlZ2lzdGVyX2Rmc19rZXlfdHlwZToKKyBvdXRfdW5yZWdpc3Rlcl9yZXNvbHZlcl9rZXk6CiAjaWZkZWYgQ09ORklHX0NJRlNfREZTX1VQQ0FMTAogCXVucmVnaXN0ZXJfa2V5X3R5cGUoJmtleV90eXBlX2Ruc19yZXNvbHZlcik7CiAgb3V0X3VucmVnaXN0ZXJfa2V5X3R5cGU6CkBAIC0xMTY0LDcgKzEwODAsNiBAQAogCWNpZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CiAJY2lmc19kZXN0cm95X21pZHMoKTsKIAljaWZzX2Rlc3Ryb3lfcmVxdWVzdF9idWZzKCk7Ci0Ja3RocmVhZF9zdG9wKG9wbG9ja1RocmVhZCk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlIEZyZW5jaCA8c2ZyZW5jaEB1cy5pYm0uY29tPiIpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDZjZmM4MWEuLjVkMGZkZTEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgogI2luY2x1ZGUgImNpZnNhY2wuaCIKIC8qCkBAIC0zNDYsMTQgKzM0NywxNiBAQAogCS8qIGxvY2sgc2NvcGUgaWQgKDAgaWYgbm9uZSkgKi8KIAlzdHJ1Y3QgZmlsZSAqcGZpbGU7IC8qIG5lZWRlZCBmb3Igd3JpdGVwYWdlICovCiAJc3RydWN0IGlub2RlICpwSW5vZGU7IC8qIG5lZWRlZCBmb3Igb3Bsb2NrIGJyZWFrICovCisJc3RydWN0IHZmc21vdW50ICptbnQ7CiAJc3RydWN0IG11dGV4IGxvY2tfbXV0ZXg7CiAJc3RydWN0IGxpc3RfaGVhZCBsbGlzdDsgLyogbGlzdCBvZiBieXRlIHJhbmdlIGxvY2tzIHdlIGhhdmUuICovCiAJYm9vbCBjbG9zZVBlbmQ6MTsJLyogZmlsZSBpcyBtYXJrZWQgdG8gY2xvc2UgKi8KIAlib29sIGludmFsaWRIYW5kbGU6MTsJLyogZmlsZSBjbG9zZWQgdmlhIHNlc3Npb24gYWJlbmQgKi8KLQlib29sIG1lc3NhZ2VNb2RlOjE7CS8qIGZvciBwaXBlczogbWVzc2FnZSB2cyBieXRlIG1vZGUgKi8KKwlib29sIG9wbG9ja19icmVha19jYW5jZWxsZWQ6MTsKIAlhdG9taWNfdCBjb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLwogCXN0cnVjdCBtdXRleCBmaF9tdXRleDsgLyogcHJldmVudHMgcmVvcGVuIHJhY2UgYWZ0ZXIgZGVhZCBzZXMqLwogCXN0cnVjdCBjaWZzX3NlYXJjaF9pbmZvIHNyY2hfaW5mOworCXN0cnVjdCBzbG93X3dvcmsgb3Bsb2NrX2JyZWFrOyAvKiBzbG93X3dvcmsgam9iIGZvciBvcGxvY2sgYnJlYWtzICovCiB9OwogCiAvKiBUYWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBmaWxlIHByaXZhdGUgZGF0YSAqLwpAQCAtMzY1LDggKzM2OCwxMCBAQAogLyogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiB0aGUgZmlsZSBwcml2YXRlIGRhdGEgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjaWZzRmlsZUluZm9fcHV0KHN0cnVjdCBjaWZzRmlsZUluZm8gKmNpZnNfZmlsZSkKIHsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2lmc19maWxlLT5jb3VudCkpCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNpZnNfZmlsZS0+Y291bnQpKSB7CisJCWlwdXQoY2lmc19maWxlLT5wSW5vZGUpOwogCQlrZnJlZShjaWZzX2ZpbGUpOworCX0KIH0KIAogLyoKQEAgLTM4Miw3ICszODcsNiBAQAogCXVuc2lnbmVkIGxvbmcgdGltZTsJLyogamlmZmllcyBvZiBsYXN0IHVwZGF0ZS9jaGVjayBvZiBpbm9kZSAqLwogCWJvb2wgY2xpZW50Q2FuQ2FjaGVSZWFkOjE7CS8qIHJlYWQgb3Bsb2NrICovCiAJYm9vbCBjbGllbnRDYW5DYWNoZUFsbDoxOwkvKiByZWFkIGFuZCB3cml0ZWJlaGluZCBvcGxvY2sgKi8KLQlib29sIG9wbG9ja1BlbmRpbmc6MTsKIAlib29sIGRlbGV0ZV9wZW5kaW5nOjE7CQkvKiBERUxFVEVfT05fQ0xPU0UgaXMgc2V0ICovCiAJdTY0ICBzZXJ2ZXJfZW9mOwkJLyogY3VycmVudCBmaWxlIHNpemUgb24gc2VydmVyICovCiAJdTY0ICB1bmlxdWVpZDsJCQkvKiBzZXJ2ZXIgaW5vZGUgbnVtYmVyICovCkBAIC01ODUsOSArNTg5LDkgQEAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfTEFOTUFOCTB4MTAwMTAKICNkZWZpbmUgICBDSUZTU0VDX01VU1RfUExOVFhUCTB4MjAwMjAKICNpZmRlZiBDT05GSUdfQ0lGU19VUENBTEwKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBRjBBRiAvKiBhbGxvd3Mgd2VhayBzZWN1cml0eSBidXQgYWxzbyBrcmI1ICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QkYwQkYgLyogYWxsb3dzIHdlYWsgc2VjdXJpdHkgYnV0IGFsc28ga3JiNSAqLwogI2Vsc2UKLSNkZWZpbmUgICBDSUZTU0VDX01BU0sgICAgICAgICAgMHhBNzBBNyAvKiBjdXJyZW50IGZsYWdzIHN1cHBvcnRlZCBpZiB3ZWFrICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4QjcwQjcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLwogI2VuZGlmIC8qIFVQQ0FMTCAqLwogI2Vsc2UgLyogZG8gbm90IGFsbG93IHdlYWsgcHcgaGFzaCAqLwogI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTApAQCAtNjY5LDEyICs2NzMsNiBAQAogICovCiBHTE9CQUxfRVhURVJOIHJ3bG9ja190IEdsb2JhbFNNQlNlc2xvY2s7CiAKLS8qIEdsb2JhbCBsaXN0IG9mIG9wbG9ja3MgKi8KLUdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBjaWZzX29wbG9ja19saXN0OwotCi0vKiBQcm90ZWN0cyB0aGUgY2lmc19vcGxvY2tfbGlzdCAqLwotR0xPQkFMX0VYVEVSTiBzcGlubG9ja190IGNpZnNfb3Bsb2NrX2xvY2s7Ci0KIC8qIE91dHN0YW5kaW5nIGRpciBub3RpZnkgcmVxdWVzdHMgKi8KIEdMT0JBTF9FWFRFUk4gc3RydWN0IGxpc3RfaGVhZCBHbG9iYWxEbm90aWZ5UmVxTGlzdDsKIC8qIERpck5vdGlmeSByZXNwb25zZSBxdWV1ZSAqLwpAQCAtNzI1LDMgKzcyMyw0IEBACiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21pbl9zbWFsbDsgIC8qIG1pbiBzaXplIG9mIHNtYWxsIGJ1ZiBwb29sICovCiBHTE9CQUxfRVhURVJOIHVuc2lnbmVkIGludCBjaWZzX21heF9wZW5kaW5nOyAvKiBNQVggcmVxdWVzdHMgYXQgb25jZSB0byBzZXJ2ZXIqLwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgY2lmc19vcGxvY2tfYnJlYWtfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggZGE4ZmJmNS4uNTY0NjcyNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC04NiwxOCArODYsMTcgQEAKIAkJCSAgICAgY29uc3QgaW50IHN0YWdlLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApOwogZXh0ZXJuIF9fdTE2IEdldE5leHRNaWQoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyKTsKLWV4dGVybiBzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKkFsbG9jT3Bsb2NrUUVudHJ5KHN0cnVjdCBpbm9kZSAqLCB1MTYsCi0JCQkJCQkgc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKLWV4dGVybiB2b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKik7Ci1leHRlcm4gdm9pZCBEZWxldGVUY29uT3Bsb2NrUUVudHJpZXMoc3RydWN0IGNpZnNUY29uSW5mbyAqKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY2lmc19OVHRpbWVUb1VuaXgoX19sZTY0IHV0Y19uYW5vc2Vjb25kc19zaW5jZV8xNjAxKTsKIGV4dGVybiB1NjQgY2lmc19Vbml4VGltZVRvTlQoc3RydWN0IHRpbWVzcGVjKTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgY252cnREb3NVbml4VG0oX19sZTE2IGxlX2RhdGUsIF9fbGUxNiBsZV90aW1lLAogCQkJCSAgICAgIGludCBvZmZzZXQpOwogCitleHRlcm4gc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19uZXdfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwKKwkJCQlfX3UxNiBmaWxlSGFuZGxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQlzdHJ1Y3QgdmZzbW91bnQgKm1udCwgdW5zaWduZWQgaW50IG9mbGFncyk7CiBleHRlcm4gaW50IGNpZnNfcG9zaXhfb3BlbihjaGFyICpmdWxsX3BhdGgsIHN0cnVjdCBpbm9kZSAqKnBpbm9kZSwKLQkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAotCQkJICAgaW50ICpwb3Bsb2NrLCBfX3UxNiAqcG5ldGZpZCwgaW50IHhpZCk7CisJCQkgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwgaW50IG1vZGUsIGludCBvZmxhZ3MsCisJCQkgICBfX3UzMiAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgY2lmc191bml4X2Jhc2ljX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwKIAkJCQkgICAgIEZJTEVfVU5JWF9CQVNJQ19JTkZPICppbmZvLAogCQkJCSAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CkBAIC0zODksNCArMzg4LDUgQEAKIAkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNHZXRFeHRBdHRyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCBfX3U2NCAqcEV4dEF0dHJCaXRzLCBfX3U2NCAqcE1hc2spOworZXh0ZXJuIHZvaWQgY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYik7CiAjZW5kaWYJCQkvKiBfQ0lGU1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggMzAxZTMwNy4uOTQxNDQxZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTk0LDYgKzk0LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAxLCAmcFRjb24tPm9wZW5GaWxlTGlzdCkgewogCQlvcGVuX2ZpbGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNGaWxlSW5mbywgdGxpc3QpOwogCQlvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUgPSB0cnVlOworCQlvcGVuX2ZpbGUtPm9wbG9ja19icmVha19jYW5jZWxsZWQgPSB0cnVlOwogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCS8qIEJCIEFkZCBjYWxsIHRvIGludmFsaWRhdGVfaW5vZGVzKHNiKSBmb3IgYWxsIHN1cGVyYmxvY2tzIG1vdW50ZWQKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggZDQ5NjgyNC4uNjNlYTgzZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE1NzcsNyArMTU3Nyw4IEBACiAKIG91dF9lcnI6CiAJaWYgKHRjcF9zZXMpIHsKLQkJa2ZyZWUodGNwX3Nlcy0+aG9zdG5hbWUpOworCQlpZiAoIUlTX0VSUih0Y3Bfc2VzLT5ob3N0bmFtZSkpCisJCQlrZnJlZSh0Y3Bfc2VzLT5ob3N0bmFtZSk7CiAJCWlmICh0Y3Bfc2VzLT5zc29ja2V0KQogCQkJc29ja19yZWxlYXNlKHRjcF9zZXMtPnNzb2NrZXQpOwogCQlrZnJlZSh0Y3Bfc2VzKTsKQEAgLTE2NzAsNyArMTY3MSw2IEBACiAJQ0lGU1NNQlREaXMoeGlkLCB0Y29uKTsKIAlfRnJlZVhpZCh4aWQpOwogCi0JRGVsZXRlVGNvbk9wbG9ja1FFbnRyaWVzKHRjb24pOwogCXRjb25JbmZvRnJlZSh0Y29uKTsKIAljaWZzX3B1dF9zbWJfc2VzKHNlcyk7CiB9CkBAIC0yMjIwLDE2ICsyMjIwLDggQEAKIAkJICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgY29uc3QgY2hhciAqZnVsbF9wYXRoKQogewogCWludCByYzsKLQlfX3U2NCBpbm9kZV9udW07CiAJRklMRV9BTExfSU5GTyAqcGZpbGVfaW5mbzsKIAotCXJjID0gQ0lGU0dldFNydklub2RlTnVtYmVyKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCAmaW5vZGVfbnVtLAotCQkJCSAgIGNpZnNfc2ItPmxvY2FsX25scywKLQkJCQkgICBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JaWYgKHJjICE9IC1FT1BOT1RTVVBQKQotCQlyZXR1cm4gcmM7Ci0KIAlwZmlsZV9pbmZvID0ga21hbGxvYyhzaXplb2YoRklMRV9BTExfSU5GTyksIEdGUF9LRVJORUwpOwogCWlmIChwZmlsZV9pbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggYTY0MjRjZi4uNjI3YTYwYSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSAiY2lmc2ZzLmgiCiAjaW5jbHVkZSAiY2lmc3BkdS5oIgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCkBAIC0xMjksNDQgKzEzMCw0NSBAQAogCXJldHVybiBmdWxsX3BhdGg7CiB9CiAKLXN0YXRpYyB2b2lkCi1jaWZzX2ZpbGxfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwgX191MTYgZmlsZUhhbmRsZSwKLQkJCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIGJvb2wgd3JpdGVfb25seSkKK3N0cnVjdCBjaWZzRmlsZUluZm8gKgorY2lmc19uZXdfZmlsZWluZm8oc3RydWN0IGlub2RlICpuZXdpbm9kZSwgX191MTYgZmlsZUhhbmRsZSwKKwkJICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZmc21vdW50ICptbnQsIHVuc2lnbmVkIGludCBvZmxhZ3MpCiB7CiAJaW50IG9wbG9jayA9IDA7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwogCXN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlOworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKG1udC0+bW50X3NiKTsKIAogCXBDaWZzRmlsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pLCBHRlBfS0VSTkVMKTsKLQogCWlmIChwQ2lmc0ZpbGUgPT0gTlVMTCkKLQkJcmV0dXJuOworCQlyZXR1cm4gcENpZnNGaWxlOwogCiAJaWYgKG9wbG9ja0VuYWJsZWQpCiAJCW9wbG9jayA9IFJFUV9PUExPQ0s7CiAKIAlwQ2lmc0ZpbGUtPm5ldGZpZCA9IGZpbGVIYW5kbGU7CiAJcENpZnNGaWxlLT5waWQgPSBjdXJyZW50LT50Z2lkOwotCXBDaWZzRmlsZS0+cElub2RlID0gbmV3aW5vZGU7CisJcENpZnNGaWxlLT5wSW5vZGUgPSBpZ3JhYihuZXdpbm9kZSk7CisJcENpZnNGaWxlLT5tbnQgPSBtbnQ7CisJcENpZnNGaWxlLT5wZmlsZSA9IGZpbGU7CiAJcENpZnNGaWxlLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7CiAJcENpZnNGaWxlLT5jbG9zZVBlbmQgPSBmYWxzZTsKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmZoX211dGV4KTsKIAltdXRleF9pbml0KCZwQ2lmc0ZpbGUtPmxvY2tfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZwQ2lmc0ZpbGUtPmxsaXN0KTsKIAlhdG9taWNfc2V0KCZwQ2lmc0ZpbGUtPmNvdW50LCAxKTsKKwlzbG93X3dvcmtfaW5pdCgmcENpZnNGaWxlLT5vcGxvY2tfYnJlYWssICZjaWZzX29wbG9ja19icmVha19vcHMpOwogCi0JLyogc2V0IHRoZSBmb2xsb3dpbmcgaW4gb3BlbiBub3cKLQkJCXBDaWZzRmlsZS0+cGZpbGUgPSBmaWxlOyAqLwogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmdGNvbi0+b3BlbkZpbGVMaXN0KTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJmNpZnNfc2ItPnRjb24tPm9wZW5GaWxlTGlzdCk7CiAJcENpZnNJbm9kZSA9IENJRlNfSShuZXdpbm9kZSk7CiAJaWYgKHBDaWZzSW5vZGUpIHsKIAkJLyogaWYgcmVhZGFibGUgZmlsZSBpbnN0YW5jZSBwdXQgZmlyc3QgaW4gbGlzdCovCi0JCWlmICh3cml0ZV9vbmx5KQorCQlpZiAob2ZsYWdzICYgRk1PREVfUkVBRCkKKwkJCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LCAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwkJZWxzZQogCQkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKIAkJCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKLQkJZWxzZQotCQkJbGlzdF9hZGQoJnBDaWZzRmlsZS0+Zmxpc3QsICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwogCiAJCWlmICgob3Bsb2NrICYgMHhGKSA9PSBPUExPQ0tfRVhDTFVTSVZFKSB7CiAJCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IHRydWU7CkBAIC0xNzYsMTggKzE3OCwxOCBAQAogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CiAJfQogCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisKKwlyZXR1cm4gcENpZnNGaWxlOwogfQogCiBpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAotCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCi0JCSAgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQorCQkgICAgc3RydWN0IHZmc21vdW50ICptbnQsIGludCBtb2RlLCBpbnQgb2ZsYWdzLAorCQkgICAgX191MzIgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQogewogCWludCByYzsKLQlfX3UzMiBvcGxvY2s7Ci0JYm9vbCB3cml0ZV9vbmx5ID0gZmFsc2U7CiAJRklMRV9VTklYX0JBU0lDX0lORk8gKnByZXNwX2RhdGE7CiAJX191MzIgcG9zaXhfZmxhZ3MgPSAwOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKHNiKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihtbnQtPm1udF9zYik7CiAJc3RydWN0IGNpZnNfZmF0dHIgZmF0dHI7CiAKIAljRllJKDEsICgicG9zaXggb3BlbiAlcyIsIGZ1bGxfcGF0aCkpOwpAQCAtMjIzLDEyICsyMjUsOSBAQAogCWlmIChvZmxhZ3MgJiBPX0RJUkVDVCkKIAkJcG9zaXhfZmxhZ3MgfD0gU01CX09fRElSRUNUOwogCi0JaWYgKCEob2ZsYWdzICYgRk1PREVfUkVBRCkpCi0JCXdyaXRlX29ubHkgPSB0cnVlOwotCiAJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCXJjID0gQ0lGU1BPU0lYQ3JlYXRlKHhpZCwgY2lmc19zYi0+dGNvbiwgcG9zaXhfZmxhZ3MsIG1vZGUsCi0JCQlwbmV0ZmlkLCBwcmVzcF9kYXRhLCAmb3Bsb2NrLCBmdWxsX3BhdGgsCisJCQlwbmV0ZmlkLCBwcmVzcF9kYXRhLCBwb3Bsb2NrLCBmdWxsX3BhdGgsCiAJCQljaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWlmIChyYykKQEAgLTI0NCw3ICsyNDMsNyBAQAogCiAJLyogZ2V0IG5ldyBpbm9kZSBhbmQgc2V0IGl0IHVwICovCiAJaWYgKCpwaW5vZGUgPT0gTlVMTCkgewotCQkqcGlub2RlID0gY2lmc19pZ2V0KHNiLCAmZmF0dHIpOworCQkqcGlub2RlID0gY2lmc19pZ2V0KG1udC0+bW50X3NiLCAmZmF0dHIpOwogCQlpZiAoISpwaW5vZGUpIHsKIAkJCXJjID0gLUVOT01FTTsKIAkJCWdvdG8gcG9zaXhfb3Blbl9yZXQ7CkBAIC0yNTMsNyArMjUyLDcgQEAKIAkJY2lmc19mYXR0cl90b19pbm9kZSgqcGlub2RlLCAmZmF0dHIpOwogCX0KIAotCWNpZnNfZmlsbF9maWxlaW5mbygqcGlub2RlLCAqcG5ldGZpZCwgY2lmc19zYi0+dGNvbiwgd3JpdGVfb25seSk7CisJY2lmc19uZXdfZmlsZWluZm8oKnBpbm9kZSwgKnBuZXRmaWQsIE5VTEwsIG1udCwgb2ZsYWdzKTsKIAogcG9zaXhfb3Blbl9yZXQ6CiAJa2ZyZWUocHJlc3BfZGF0YSk7CkBAIC0yODAsNyArMjc5LDcgQEAKIAlpbnQgcmMgPSAtRU5PRU5UOwogCWludCB4aWQ7CiAJaW50IGNyZWF0ZV9vcHRpb25zID0gQ1JFQVRFX05PVF9ESVI7Ci0JaW50IG9wbG9jayA9IDA7CisJX191MzIgb3Bsb2NrID0gMDsKIAlpbnQgb2ZsYWdzOwogCWJvb2wgcG9zaXhfY3JlYXRlID0gZmFsc2U7CiAJLyoKQEAgLTI5OCw3ICsyOTcsNiBAQAogCUZJTEVfQUxMX0lORk8gKmJ1ZiA9IE5VTEw7CiAJc3RydWN0IGlub2RlICpuZXdpbm9kZSA9IE5VTEw7CiAJaW50IGRpc3Bvc2l0aW9uID0gRklMRV9PVkVSV1JJVEVfSUY7Ci0JYm9vbCB3cml0ZV9vbmx5ID0gZmFsc2U7CiAKIAl4aWQgPSBHZXRYaWQoKTsKIApAQCAtMzIzLDcgKzMyMSw3IEBACiAJaWYgKHRjb24tPnVuaXhfZXh0ICYmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgogCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewotCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdpbm9kZSwgaW5vZGUtPmlfc2IsCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJm5ld2lub2RlLCBuZC0+cGF0aC5tbnQsCiAJCQkJICAgICBtb2RlLCBvZmxhZ3MsICZvcGxvY2ssICZmaWxlSGFuZGxlLCB4aWQpOwogCQkvKiBFSU8gY291bGQgaW5kaWNhdGUgdGhhdCAocG9zaXggb3Blbikgb3BlcmF0aW9uIGlzIG5vdAogCQkgICBzdXBwb3J0ZWQsIGRlc3BpdGUgd2hhdCBzZXJ2ZXIgY2xhaW1lZCBpbiBjYXBhYmlsaXR5CkBAIC0zNTEsMTEgKzM0OSw4IEBACiAJCWRlc2lyZWRBY2Nlc3MgPSAwOwogCQlpZiAob2ZsYWdzICYgRk1PREVfUkVBRCkKIAkJCWRlc2lyZWRBY2Nlc3MgfD0gR0VORVJJQ19SRUFEOyAvKiBpcyB0aGlzIHRvbyBsaXR0bGU/ICovCi0JCWlmIChvZmxhZ3MgJiBGTU9ERV9XUklURSkgeworCQlpZiAob2ZsYWdzICYgRk1PREVfV1JJVEUpCiAJCQlkZXNpcmVkQWNjZXNzIHw9IEdFTkVSSUNfV1JJVEU7Ci0JCQlpZiAoIShvZmxhZ3MgJiBGTU9ERV9SRUFEKSkKLQkJCQl3cml0ZV9vbmx5ID0gdHJ1ZTsKLQkJfQogCiAJCWlmICgob2ZsYWdzICYgKE9fQ1JFQVQgfCBPX0VYQ0wpKSA9PSAoT19DUkVBVCB8IE9fRVhDTCkpCiAJCQlkaXNwb3NpdGlvbiA9IEZJTEVfQ1JFQVRFOwpAQCAtNDcwLDggKzQ2NSw4IEBACiAJCS8qIG1rbm9kIGNhc2UgLSBkbyBub3QgbGVhdmUgZmlsZSBvcGVuICovCiAJCUNJRlNTTUJDbG9zZSh4aWQsIHRjb24sIGZpbGVIYW5kbGUpOwogCX0gZWxzZSBpZiAoIShwb3NpeF9jcmVhdGUpICYmIChuZXdpbm9kZSkpIHsKLQkJCWNpZnNfZmlsbF9maWxlaW5mbyhuZXdpbm9kZSwgZmlsZUhhbmRsZSwKLQkJCQkJY2lmc19zYi0+dGNvbiwgd3JpdGVfb25seSk7CisJCQljaWZzX25ld19maWxlaW5mbyhuZXdpbm9kZSwgZmlsZUhhbmRsZSwgTlVMTCwKKwkJCQkJCW5kLT5wYXRoLm1udCwgb2ZsYWdzKTsKIAl9CiBjaWZzX2NyZWF0ZV9vdXQ6CiAJa2ZyZWUoYnVmKTsKQEAgLTYxMSw3ICs2MDYsNyBAQAogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsgLyogdG8gZ2V0IGFyb3VuZCBzcHVyaW91cyBnY2Mgd2FybmluZywgc2V0IHRvIHplcm8gaGVyZSAqLwotCWludCBvcGxvY2sgPSAwOworCV9fdTMyIG9wbG9jayA9IDA7CiAJX191MTYgZmlsZUhhbmRsZSA9IDA7CiAJYm9vbCBwb3NpeF9vcGVuID0gZmFsc2U7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKQEAgLTY4Myw4ICs2NzgsNyBAQAogCQlpZiAoIShuZC0+ZmxhZ3MgJiAoTE9PS1VQX1BBUkVOVCB8IExPT0tVUF9ESVJFQ1RPUlkpKSAmJgogCQkgICAgIChuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgJiYgIXBUY29uLT5icm9rZW5fcG9zaXhfb3BlbiAmJgogCQkgICAgIChuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgJiBPX0NSRUFUKSkgewotCQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmbmV3SW5vZGUsCi0JCQkJCXBhcmVudF9kaXJfaW5vZGUtPmlfc2IsCisJCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZuZXdJbm9kZSwgbmQtPnBhdGgubW50LAogCQkJCQluZC0+aW50ZW50Lm9wZW4uY3JlYXRlX21vZGUsCiAJCQkJCW5kLT5pbnRlbnQub3Blbi5mbGFncywgJm9wbG9jaywKIAkJCQkJJmZpbGVIYW5kbGUsIHhpZCk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGZhN2JlYWMuLjQyOTMzN2UgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlICJjaWZzZnMuaCIKICNpbmNsdWRlICJjaWZzcGR1LmgiCkBAIC0zOSwyNyArNDAsNiBAQAogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc19pbml0X3ByaXZhdGUoCi0Jc3RydWN0IGNpZnNGaWxlSW5mbyAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCXN0cnVjdCBmaWxlICpmaWxlLCBfX3UxNiBuZXRmaWQpCi17Ci0JbWVtc2V0KHByaXZhdGVfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBjaWZzRmlsZUluZm8pKTsKLQlwcml2YXRlX2RhdGEtPm5ldGZpZCA9IG5ldGZpZDsKLQlwcml2YXRlX2RhdGEtPnBpZCA9IGN1cnJlbnQtPnRnaWQ7Ci0JbXV0ZXhfaW5pdCgmcHJpdmF0ZV9kYXRhLT5maF9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcHJpdmF0ZV9kYXRhLT5sb2NrX211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmcHJpdmF0ZV9kYXRhLT5sbGlzdCk7Ci0JcHJpdmF0ZV9kYXRhLT5wZmlsZSA9IGZpbGU7IC8qIG5lZWRlZCBmb3Igd3JpdGVwYWdlICovCi0JcHJpdmF0ZV9kYXRhLT5wSW5vZGUgPSBpbm9kZTsKLQlwcml2YXRlX2RhdGEtPmludmFsaWRIYW5kbGUgPSBmYWxzZTsKLQlwcml2YXRlX2RhdGEtPmNsb3NlUGVuZCA9IGZhbHNlOwotCS8qIEluaXRpYWxpemUgcmVmZXJlbmNlIGNvdW50IHRvIG9uZS4gIFRoZSBwcml2YXRlIGRhdGEgaXMKLQlmcmVlZCBvbiB0aGUgcmVsZWFzZSBvZiB0aGUgbGFzdCByZWZlcmVuY2UgKi8KLQlhdG9taWNfc2V0KCZwcml2YXRlX2RhdGEtPmNvdW50LCAxKTsKLQotCXJldHVybiBwcml2YXRlX2RhdGE7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfY29udmVydF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19SRE9OTFkpCkBAIC0xMjMsOSArMTAzLDExIEBACiB9CiAKIC8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLwotc3RhdGljIGlubGluZSBpbnQgY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAotCQkJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBpbnQgb3Bsb2NrLCB1MTYgbmV0ZmlkKQorc3RhdGljIGlubGluZSBpbnQKK2NpZnNfcG9zaXhfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAorCQkJICAgICBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGUsIF9fdTMyIG9wbG9jaywKKwkJCSAgICAgdTE2IG5ldGZpZCkKIHsKIAogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwpAQCAtMjE5LDE3ICsyMDEsNiBAQAogCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOwogCWludCByYzsKIAotCS8qIHdhbnQgaGFuZGxlcyB3ZSBjYW4gdXNlIHRvIHJlYWQgd2l0aCBmaXJzdAotCSAgIGluIHRoZSBsaXN0IHNvIHdlIGRvIG5vdCBoYXZlIHRvIHdhbGsgdGhlCi0JICAgbGlzdCB0byBzZWFyY2ggZm9yIG9uZSBpbiB3cml0ZV9iZWdpbiAqLwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmcENpZnNGaWxlLT5mbGlzdCwKLQkJCSAgICAgICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCX0gZWxzZSB7Ci0JCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPmZsaXN0LAotCQkJICZwQ2lmc0lub2RlLT5vcGVuRmlsZUxpc3QpOwotCX0KLQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWlmIChwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQpIHsKIAkJLyogd2UgaGF2ZSB0aGUgaW5vZGUgb3BlbiBzb21ld2hlcmUgZWxzZQogCQkgICBubyBuZWVkIHRvIGRpc2NhcmQgY2FjaGUgZGF0YSAqLwpAQCAtMjc5LDcgKzI1MCw4IEBACiBpbnQgY2lmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCByYyA9IC1FQUNDRVM7Ci0JaW50IHhpZCwgb3Bsb2NrOworCWludCB4aWQ7CisJX191MzIgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CkBAIC0zMjQsNyArMjk2LDcgQEAKIAkJCWxlNjRfdG9fY3B1KHRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpKSB7CiAJCWludCBvZmxhZ3MgPSAoaW50KSBjaWZzX3Bvc2l4X2NvbnZlcnRfZmxhZ3MoZmlsZS0+Zl9mbGFncyk7CiAJCS8qIGNhbiBub3QgcmVmcmVzaCBpbm9kZSBpbmZvIHNpbmNlIHNpemUgY291bGQgYmUgc3RhbGUgKi8KLQkJcmMgPSBjaWZzX3Bvc2l4X29wZW4oZnVsbF9wYXRoLCAmaW5vZGUsIGlub2RlLT5pX3NiLAorCQlyYyA9IGNpZnNfcG9zaXhfb3BlbihmdWxsX3BhdGgsICZpbm9kZSwgZmlsZS0+Zl9wYXRoLm1udCwKIAkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKIAkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKIAkJaWYgKHJjID09IDApIHsKQEAgLTQxNCwyNCArMzg2LDE3IEBACiAJCWNGWUkoMSwgKCJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCIsIHJjKSk7CiAJCWdvdG8gb3V0OwogCX0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPQotCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlwQ2lmc0ZpbGUgPSBjaWZzX25ld19maWxlaW5mbyhpbm9kZSwgbmV0ZmlkLCBmaWxlLCBmaWxlLT5mX3BhdGgubW50LAorCQkJCQlmaWxlLT5mX2ZsYWdzKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBwQ2lmc0ZpbGU7CiAJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7Ci0Jd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZ0Y29uLT5vcGVuRmlsZUxpc3QpOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAocENpZnNJbm9kZSkgewotCQlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsCi0JCQkJCSAgICBwQ2lmc0ZpbGUsIHRjb24sCi0JCQkJCSAgICAmb3Bsb2NrLCBidWYsIGZ1bGxfcGF0aCwgeGlkKTsKLQl9IGVsc2UgewotCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCX0KKwlyYyA9IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoaW5vZGUsIGZpbGUsIHBDaWZzSW5vZGUsIHBDaWZzRmlsZSwgdGNvbiwKKwkJCQkgICAgJm9wbG9jaywgYnVmLCBmdWxsX3BhdGgsIHhpZCk7CiAKIAlpZiAob3Bsb2NrICYgQ0lGU19DUkVBVEVfQUNUSU9OKSB7CiAJCS8qIHRpbWUgdG8gc2V0IG1vZGUgd2hpY2ggd2UgY2FuIG5vdCBzZXQgZWFybGllciBkdWUgdG8KQEAgLTQ3NCw3ICs0MzksOCBAQAogc3RhdGljIGludCBjaWZzX3Jlb3Blbl9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBib29sIGNhbl9mbHVzaCkKIHsKIAlpbnQgcmMgPSAtRUFDQ0VTOwotCWludCB4aWQsIG9wbG9jazsKKwlpbnQgeGlkOworCV9fdTMyIG9wbG9jazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlOwpAQCAtNTQzLDcgKzUwOSw3IEBACiAJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgewogCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCi0JCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgaW5vZGUtPmlfc2IsCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgZmlsZS0+Zl9wYXRoLm1udCwKIAkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKIAkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKIAkJaWYgKHJjID09IDApIHsKQEAgLTIzMDgsNiArMjI3NCw3MyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQKK2NpZnNfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKKwkJCQkJCSAgb3Bsb2NrX2JyZWFrKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY2ZpbGUtPnBJbm9kZTsKKwlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lub2RlID0gQ0lGU19JKGlub2RlKTsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihjZmlsZS0+bW50LT5tbnRfc2IpOworCWludCByYywgd2FpdHJjID0gMDsKKworCWlmIChpbm9kZSAmJiBTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisJCWlmIChjaW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID09IDApCisJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfUkVBRCk7CisJCWVsc2UgaWYgKGNpbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID09IDApCisJCQlicmVha19sZWFzZShpbm9kZSwgRk1PREVfV1JJVEUpOworI2VuZGlmCisJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgeworCQkJd2FpdHJjID0gZmlsZW1hcF9mZGF0YXdhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCQlpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShpbm9kZSk7CisJCX0KKwkJaWYgKCFyYykKKwkJCXJjID0gd2FpdHJjOworCQlpZiAocmMpCisJCQljaW5vZGUtPndyaXRlX2JlaGluZF9yYyA9IHJjOworCQljRllJKDEsICgiT3Bsb2NrIGZsdXNoIGlub2RlICVwIHJjICVkIiwgaW5vZGUsIHJjKSk7CisJfQorCisJLyoKKwkgKiByZWxlYXNpbmcgc3RhbGUgb3Bsb2NrIGFmdGVyIHJlY2VudCByZWNvbm5lY3Qgb2Ygc21iIHNlc3Npb24gdXNpbmcKKwkgKiBhIG5vdyBpbmNvcnJlY3QgZmlsZSBoYW5kbGUgaXMgbm90IGEgZGF0YSBpbnRlZ3JpdHkgaXNzdWUgYnV0IGRvCisJICogbm90IGJvdGhlciBzZW5kaW5nIGFuIG9wbG9jayByZWxlYXNlIGlmIHNlc3Npb24gdG8gc2VydmVyIHN0aWxsIGlzCisJICogZGlzY29ubmVjdGVkIHNpbmNlIG9wbG9jayBhbHJlYWR5IHJlbGVhc2VkIGJ5IHRoZSBzZXJ2ZXIKKwkgKi8KKwlpZiAoIWNmaWxlLT5jbG9zZVBlbmQgJiYgIWNmaWxlLT5vcGxvY2tfYnJlYWtfY2FuY2VsbGVkKSB7CisJCXJjID0gQ0lGU1NNQkxvY2soMCwgY2lmc19zYi0+dGNvbiwgY2ZpbGUtPm5ldGZpZCwgMCwgMCwgMCwgMCwKKwkJCQkgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLCBmYWxzZSk7CisJCWNGWUkoMSwgKCJPcGxvY2sgcmVsZWFzZSByYyA9ICVkIiwgcmMpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2NpZnNfb3Bsb2NrX2JyZWFrX2dldChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjaWZzRmlsZUluZm8sCisJCQkJCQkgIG9wbG9ja19icmVhayk7CisJbW50Z2V0KGNmaWxlLT5tbnQpOworCWNpZnNGaWxlSW5mb19nZXQoY2ZpbGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2lmc19vcGxvY2tfYnJlYWtfcHV0KHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGNpZnNGaWxlSW5mbywKKwkJCQkJCSAgb3Bsb2NrX2JyZWFrKTsKKwltbnRwdXQoY2ZpbGUtPm1udCk7CisJY2lmc0ZpbGVJbmZvX3B1dChjZmlsZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIGNpZnNfb3Bsb2NrX2JyZWFrX29wcyA9IHsKKwkuZ2V0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX2dldCwKKwkucHV0X3JlZgk9IGNpZnNfb3Bsb2NrX2JyZWFrX3B1dCwKKwkuZXhlY3V0ZQk9IGNpZnNfb3Bsb2NrX2JyZWFrLAorfTsKKwogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBjaWZzX2FkZHJfb3BzID0gewogCS5yZWFkcGFnZSA9IGNpZnNfcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcyA9IGNpZnNfcmVhZHBhZ2VzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDVlMjQ5MjUuLmNhYmFiZDggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTUxMiwxMyArNTEyLDEwIEBACiAJCQkJCWNpZnNfc2ItPmxvY2FsX25scywKIAkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwotCQkJaWYgKHJjMSkgeworCQkJaWYgKHJjMSB8fCAhZmF0dHIuY2ZfdW5pcXVlaWQpIHsKIAkJCQljRllJKDEsICgiR2V0U3J2SW5vZGVOdW0gcmMgJWQiLCByYzEpKTsKIAkJCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7Ci0JCQkJLyogZGlzYWJsZSBzZXJ2ZXJpbm8gaWYgY2FsbCBub3Qgc3VwcG9ydGVkICovCi0JCQkJaWYgKHJjMSA9PSAtRUlOVkFMKQotCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmPQotCQkJCQkJCX5DSUZTX01PVU5UX1NFUlZFUl9JTlVNOworCQkJCWNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKGNpZnNfc2IpOwogCQkJfQogCQl9IGVsc2UgewogCQkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpdW5pcXVlKHNiLCBST09UX0kpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCBlMDc5YTkxLi5kMjdkNGVjIDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMzIsNyArMzIsNiBAQAogCiBleHRlcm4gbWVtcG9vbF90ICpjaWZzX3NtX3JlcV9wb29scDsKIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwotZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3Bsb2NrVGhyZWFkOwogCiAvKiBUaGUgeGlkIHNlcnZlcyBhcyBhIHVzZWZ1bCBpZGVudGlmaWVyIGZvciBlYWNoIGluY29taW5nIHZmcyByZXF1ZXN0LAogICAgaW4gYSBzaW1pbGFyIHdheSB0byB0aGUgbWlkIHdoaWNoIGlzIHVzZWZ1bCB0byB0cmFjayBlYWNoIHNlbnQgc21iLApAQCAtNTAwLDYgKzQ5OSw3IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqcENpZnNJbm9kZTsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpuZXRmaWxlOworCWludCByYzsKIAogCWNGWUkoMSwgKCJDaGVja2luZyBmb3Igb3Bsb2NrIGJyZWFrIG9yIGRub3RpZnkgcmVzcG9uc2UiKSk7CiAJaWYgKChwU01CLT5oZHIuQ29tbWFuZCA9PSBTTUJfQ09NX05UX1RSQU5TQUNUKSAmJgpAQCAtNTYyLDMwICs1NjIsNDAgQEAKIAkJCQljb250aW51ZTsKIAogCQkJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9vcGxvY2tfYnJrcyk7Ci0JCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKKwkJCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlsaXN0X2Zvcl9lYWNoKHRtcDIsICZ0Y29uLT5vcGVuRmlsZUxpc3QpIHsKIAkJCQluZXRmaWxlID0gbGlzdF9lbnRyeSh0bXAyLCBzdHJ1Y3QgY2lmc0ZpbGVJbmZvLAogCQkJCQkJICAgICB0bGlzdCk7CiAJCQkJaWYgKHBTTUItPkZpZCAhPSBuZXRmaWxlLT5uZXRmaWQpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJd3JpdGVfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOworCQkJCS8qCisJCQkJICogZG9uJ3QgZG8gYW55dGhpbmcgaWYgZmlsZSBpcyBhYm91dCB0byBiZQorCQkJCSAqIGNsb3NlZCBhbnl3YXkuCisJCQkJICovCisJCQkJaWYgKG5ldGZpbGUtPmNsb3NlUGVuZCkgeworCQkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJCXJlYWRfdW5sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCX0KKwogCQkJCWNGWUkoMSwgKCJmaWxlIGlkIG1hdGNoLCBvcGxvY2sgYnJlYWsiKSk7CiAJCQkJcENpZnNJbm9kZSA9IENJRlNfSShuZXRmaWxlLT5wSW5vZGUpOwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJaWYgKHBTTUItPk9wbG9ja0xldmVsID09IDApCiAJCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IGZhbHNlOwotCQkJCXBDaWZzSW5vZGUtPm9wbG9ja1BlbmRpbmcgPSB0cnVlOwotCQkJCUFsbG9jT3Bsb2NrUUVudHJ5KG5ldGZpbGUtPnBJbm9kZSwKLQkJCQkJCSAgbmV0ZmlsZS0+bmV0ZmlkLCB0Y29uKTsKLQkJCQljRllJKDEsICgiYWJvdXQgdG8gd2FrZSB1cCBvcGxvY2sgdGhyZWFkIikpOwotCQkJCWlmIChvcGxvY2tUaHJlYWQpCi0JCQkJCXdha2VfdXBfcHJvY2VzcyhvcGxvY2tUaHJlYWQpOwotCisJCQkJcmMgPSBzbG93X3dvcmtfZW5xdWV1ZSgmbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrKTsKKwkJCQlpZiAocmMpIHsKKwkJCQkJY0VSUk9SKDEsICgiZmFpbGVkIHRvIGVucXVldWUgb3Bsb2NrICIKKwkJCQkJCSAgICJicmVhazogJWRcbiIsIHJjKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0ZmlsZS0+b3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCA9IGZhbHNlOworCQkJCX0KKwkJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQkJcmVhZF91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CisJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJCQlyZWFkX3VubG9jaygmY2lmc190Y3Bfc2VzX2xvY2spOwogCQkJY0ZZSSgxLCAoIk5vIG1hdGNoaW5nIGZpbGUgZm9yIG9wbG9jayBicmVhayIpKTsKIAkJCXJldHVybiB0cnVlOwpAQCAtNzA1LDMgKzcxNSwxNyBAQAogY3RvVUNTX291dDoKIAlyZXR1cm4gaTsKIH0KKwordm9pZAorY2lmc19hdXRvZGlzYWJsZV9zZXJ2ZXJpbm8oc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKK3sKKwlpZiAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFUlZFUl9JTlVNKSB7CisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICY9IH5DSUZTX01PVU5UX1NFUlZFUl9JTlVNOworCQljRVJST1IoMSwgKCJBdXRvZGlzYWJsaW5nIHRoZSB1c2Ugb2Ygc2VydmVyIGlub2RlIG51bWJlcnMgb24gIgorCQkJICAgIiVzLiBUaGlzIHNlcnZlciBkb2Vzbid0IHNlZW0gdG8gc3VwcG9ydCB0aGVtICIKKwkJCSAgICJwcm9wZXJseS4gSGFyZGxpbmtzIHdpbGwgbm90IGJlIHJlY29nbml6ZWQgb24gdGhpcyAiCisJCQkgICAibW91bnQuIENvbnNpZGVyIG1vdW50aW5nIHdpdGggdGhlIFwibm9zZXJ2ZXJpbm9cIiAiCisJCQkgICAib3B0aW9uIHRvIHNpbGVuY2UgdGhpcyBtZXNzYWdlLiIsCisJCQkgICBjaWZzX3NiLT50Y29uLT50cmVlTmFtZSkpOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggZjgyM2E0YS4uZjg0MDYyZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNpZnNfZGlyX2luZm9fdG9fZmF0dHIoc3RydWN0IGNpZnNfZmF0dHIgKmZhdHRyLCBGSUxFX0RJUkVDVE9SWV9JTkZPICppbmZvLAogCQkgICAgICAgc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYikKIHsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNpZnNfZmlsbF9jb21tb25faW5mbyhmYXR0ciwgY2lmc19zYik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBjaWZzX3N0ZF9pbmZvX3RvX2ZhdHRyKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwgRklORF9GSUxFX1NUQU5EQVJEX0lORk8gKmluZm8sCiAJCSAgICAgICBzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiKQogewpAQCAtNzI3LDExICs3MjcsMTIgQEAKIAkJY2lmc19kaXJfaW5mb190b19mYXR0cigmZmF0dHIsIChGSUxFX0RJUkVDVE9SWV9JTkZPICopCiAJCQkJCXBmaW5kRW50cnksIGNpZnNfc2IpOwogCi0JLyogRklYTUU6IG1ha2UgX3RvX2ZhdHRyIGZ1bmN0aW9ucyBmaWxsIHRoaXMgb3V0ICovCi0JaWYgKHBDaWZzRi0+c3JjaF9pbmYuaW5mb19sZXZlbCA9PSBTTUJfRklORF9GSUxFX0lEX0ZVTExfRElSX0lORk8pCisJaWYgKGludW0gJiYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9TRVJWRVJfSU5VTSkpIHsKIAkJZmF0dHIuY2ZfdW5pcXVlaWQgPSBpbnVtOwotCWVsc2UKKwl9IGVsc2UgewogCQlmYXR0ci5jZl91bmlxdWVpZCA9IGl1bmlxdWUoc2IsIFJPT1RfSSk7CisJCWNpZnNfYXV0b2Rpc2FibGVfc2VydmVyaW5vKGNpZnNfc2IpOworCX0KIAogCWlubyA9IGNpZnNfdW5pcXVlaWRfdG9faW5vX3QoZmF0dHIuY2ZfdW5pcXVlaWQpOwogCXRtcF9kZW50cnkgPSBjaWZzX3JlYWRkaXJfbG9va3VwKGZpbGUtPmZfZGVudHJ5LCAmcXN0cmluZywgJmZhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDFkYTRhYjIuLjA3YjhlNzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtMTAzLDU2ICsxMDMsNiBAQAogCW1lbXBvb2xfZnJlZShtaWRFbnRyeSwgY2lmc19taWRfcG9vbHApOwogfQogCi1zdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKgotQWxsb2NPcGxvY2tRRW50cnkoc3RydWN0IGlub2RlICpwaW5vZGUsIF9fdTE2IGZpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbikKLXsKLQlzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKnRlbXA7Ci0JaWYgKChwaW5vZGUgPT0gTlVMTCkgfHwgKHRjb24gPT0gTlVMTCkpIHsKLQkJY0VSUk9SKDEsICgiTnVsbCBwYXJtcyBwYXNzZWQgdG8gQWxsb2NPcGxvY2tRRW50cnkiKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQl0ZW1wID0gKHN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqKSBrbWVtX2NhY2hlX2FsbG9jKGNpZnNfb3Bsb2NrX2NhY2hlcCwKLQkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAodGVtcCA9PSBOVUxMKQotCQlyZXR1cm4gdGVtcDsKLQllbHNlIHsKLQkJdGVtcC0+cGlub2RlID0gcGlub2RlOwotCQl0ZW1wLT50Y29uID0gdGNvbjsKLQkJdGVtcC0+bmV0ZmlkID0gZmlkOwotCQlzcGluX2xvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCQlsaXN0X2FkZF90YWlsKCZ0ZW1wLT5xaGVhZCwgJmNpZnNfb3Bsb2NrX2xpc3QpOwotCQlzcGluX3VubG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JfQotCXJldHVybiB0ZW1wOwotfQotCi12b2lkIERlbGV0ZU9wbG9ja1FFbnRyeShzdHJ1Y3Qgb3Bsb2NrX3FfZW50cnkgKm9wbG9ja0VudHJ5KQotewotCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0gICAgLyogc2hvdWxkIHdlIGNoZWNrIGlmIGxpc3QgZW1wdHkgZmlyc3Q/ICovCi0JbGlzdF9kZWwoJm9wbG9ja0VudHJ5LT5xaGVhZCk7Ci0Jc3Bpbl91bmxvY2soJmNpZnNfb3Bsb2NrX2xvY2spOwotCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIG9wbG9ja0VudHJ5KTsKLX0KLQotCi12b2lkIERlbGV0ZVRjb25PcGxvY2tRRW50cmllcyhzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uKQotewotCXN0cnVjdCBvcGxvY2tfcV9lbnRyeSAqdGVtcDsKLQotCWlmICh0Y29uID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmY2lmc19vcGxvY2tfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZW1wLCAmY2lmc19vcGxvY2tfbGlzdCwgcWhlYWQpIHsKLQkJaWYgKCh0ZW1wLT50Y29uKSAmJiAodGVtcC0+dGNvbiA9PSB0Y29uKSkgewotCQkJbGlzdF9kZWwoJnRlbXAtPnFoZWFkKTsKLQkJCWttZW1fY2FjaGVfZnJlZShjaWZzX29wbG9ja19jYWNoZXAsIHRlbXApOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZjaWZzX29wbG9ja19sb2NrKTsKLX0KLQogc3RhdGljIGludAogc21iX3NlbmR2KHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgc3RydWN0IGt2ZWMgKmlvdiwgaW50IG5fdmVjKQogewpkaWZmIC0tZ2l0IGEvZnMvY29kYS9wc2Rldi5jIGIvZnMvY29kYS9wc2Rldi5jCmluZGV4IDAzNzZhYzYuLmJlNDM5MmMgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvcHNkZXYuYworKysgYi9mcy9jb2RhL3BzZGV2LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkNTc2YjU1Li42YzE5MDQwIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTUzMiw2ICsxNTMyLDggQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXQ7CiAKKwljdXJyZW50LT5zdGFja19zdGFydCA9IGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjazsKKwogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KIAljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggZjkxZmQ1MWIuLmQ4NGU3MDUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0xODAwLDcgKzE4MDAsNyBAQAogLyoganVzdCBhY2NvdW50IGZvciBkaWZmZXJlbnQgYWxpZ25tZW50ICovCiBzdGF0aWMgaW50IGNvbXBhdF9pb2N0bF9wcmVhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IHNwYWNlX3Jlc3ZfMzIJX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7CiAJc3RydWN0IHNwYWNlX3Jlc3YJX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7CiAKIAlpZiAoY29weV9pbl91c2VyKCZwLT5sX3R5cGUsCSZwMzItPmxfdHlwZSwJc2l6ZW9mKHMxNikpIHx8CkBAIC0yODAyLDcgKzI4MDIsNyBAQAogI2Vsc2UKIAljYXNlIEZTX0lPQ19SRVNWU1A6CiAJY2FzZSBGU19JT0NfUkVTVlNQNjQ6Ci0JCWVycm9yID0gaW9jdGxfcHJlYWxsb2NhdGUoZmlscCwgKHZvaWQgX191c2VyICopYXJnKTsKKwkJZXJyb3IgPSBpb2N0bF9wcmVhbGxvY2F0ZShmaWxwLCBjb21wYXRfcHRyKGFyZykpOwogCQlnb3RvIG91dF9mcHV0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMjQwY2VmMS4uNzA3MzZlYiAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTMxNiw2ICszMTYsMTAgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwogCisJLyogd2l0aCBzY3RwIHRoZXJlJ3Mgbm8gY29ubmVjdGluZyB3aXRob3V0IHNlbmRpbmcgKi8KKwlpZiAoZGxtX2NvbmZpZy5jaV9wcm90b2NvbCAhPSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChub2RlaWQgPT0gZGxtX291cl9ub2RlaWQoKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTQ1NSw5ICs0NTksOSBAQAogCQkJaW50IHByaW1fbGVuLCByZXQ7CiAJCQlpbnQgYWRkcl9sZW47CiAJCQlzdHJ1Y3QgY29ubmVjdGlvbiAqbmV3X2NvbjsKLQkJCXN0cnVjdCBmaWxlICpmaWxlOwogCQkJc2N0cF9wZWVsb2ZmX2FyZ190IHBhcmc7CiAJCQlpbnQgcGFyZ2xlbiA9IHNpemVvZihwYXJnKTsKKwkJCWludCBlcnI7CiAKIAkJCS8qCiAJCQkgKiBXZSBnZXQgdGhpcyBiZWZvcmUgYW55IGRhdGEgZm9yIGFuIGFzc29jaWF0aW9uLgpAQCAtNTEyLDE5ICs1MTYsMjIgQEAKIAkJCXJldCA9IGtlcm5lbF9nZXRzb2Nrb3B0KGNvbi0+c29jaywgSVBQUk9UT19TQ1RQLAogCQkJCQkJU0NUUF9TT0NLT1BUX1BFRUxPRkYsCiAJCQkJCQkodm9pZCAqKSZwYXJnLCAmcGFyZ2xlbik7Ci0JCQlpZiAocmV0KSB7CisJCQlpZiAocmV0IDwgMCkgewogCQkJCWxvZ19wcmludCgiQ2FuJ3QgcGVlbCBvZmYgYSBzb2NrZXQgZm9yICIKLQkJCQkJICAiY29ubmVjdGlvbiAlZCB0byBub2RlICVkOiBlcnI9JWRcbiIsCisJCQkJCSAgImNvbm5lY3Rpb24gJWQgdG8gbm9kZSAlZDogZXJyPSVkIiwKIAkJCQkJICBwYXJnLmFzc29jaWQsIG5vZGVpZCwgcmV0KTsKKwkJCQlyZXR1cm47CiAJCQl9Ci0JCQlmaWxlID0gZmdldChwYXJnLnNkKTsKLQkJCW5ld19jb24tPnNvY2sgPSBTT0NLRVRfSShmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CisJCQluZXdfY29uLT5zb2NrID0gc29ja2ZkX2xvb2t1cChwYXJnLnNkLCAmZXJyKTsKKwkJCWlmICghbmV3X2Nvbi0+c29jaykgeworCQkJCWxvZ19wcmludCgic29ja2ZkX2xvb2t1cCBlcnJvciAlZCIsIGVycik7CisJCQkJcmV0dXJuOworCQkJfQogCQkJYWRkX3NvY2sobmV3X2Nvbi0+c29jaywgbmV3X2Nvbik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJcHV0X3VudXNlZF9mZChwYXJnLnNkKTsKKwkJCXNvY2tmZF9wdXQobmV3X2Nvbi0+c29jayk7CiAKLQkJCWxvZ19wcmludCgiZ290IG5ldy9yZXN0YXJ0ZWQgYXNzb2NpYXRpb24gJWQgbm9kZWlkICVkIiwKLQkJCQkgKGludClzbi0+c25fYXNzb2NfY2hhbmdlLnNhY19hc3NvY19pZCwgbm9kZWlkKTsKKwkJCWxvZ19wcmludCgiY29ubmVjdGluZyB0byAlZCBzY3RwIGFzc29jaWF0aW9uICVkIiwKKwkJCQkgbm9kZWlkLCAoaW50KXNuLT5zbl9hc3NvY19jaGFuZ2Uuc2FjX2Fzc29jX2lkKTsKIAogCQkJLyogU2VuZCBhbnkgcGVuZGluZyB3cml0ZXMgKi8KIAkJCWNsZWFyX2JpdChDRl9DT05ORUNUX1BFTkRJTkcsICZuZXdfY29uLT5mbGFncyk7CkBAIC04MzcsOCArODQ0LDYgQEAKIAlpZiAoY29uLT5yZXRyaWVzKysgPiBNQVhfQ09OTkVDVF9SRVRSSUVTKQogCQlyZXR1cm47CiAKLQlsb2dfcHJpbnQoIkluaXRpYXRpbmcgYXNzb2NpYXRpb24gd2l0aCBub2RlICVkIiwgY29uLT5ub2RlaWQpOwotCiAJaWYgKG5vZGVpZF90b19hZGRyKGNvbi0+bm9kZWlkLCAoc3RydWN0IHNvY2thZGRyICopJnJlbV9hZGRyKSkgewogCQlsb2dfcHJpbnQoIm5vIGFkZHJlc3MgZm9yIG5vZGVpZCAlZCIsIGNvbi0+bm9kZWlkKTsKIAkJcmV0dXJuOwpAQCAtODU1LDExICs4NjAsMTQgQEAKIAlvdXRtZXNzYWdlLm1zZ19mbGFncyA9IE1TR19FT1I7CiAKIAlzcGluX2xvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKLQllID0gbGlzdF9lbnRyeShjb24tPndyaXRlcXVldWUubmV4dCwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksCi0JCSAgICAgICBsaXN0KTsKIAotCUJVR19PTigoc3RydWN0IGxpc3RfaGVhZCAqKSBlID09ICZjb24tPndyaXRlcXVldWUpOworCWlmIChsaXN0X2VtcHR5KCZjb24tPndyaXRlcXVldWUpKSB7CisJCXNwaW5fdW5sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7CisJCWxvZ19wcmludCgid3JpdGVxdWV1ZSBlbXB0eSBmb3Igbm9kZWlkICVkIiwgY29uLT5ub2RlaWQpOworCQlyZXR1cm47CisJfQogCisJZSA9IGxpc3RfZmlyc3RfZW50cnkoJmNvbi0+d3JpdGVxdWV1ZSwgc3RydWN0IHdyaXRlcXVldWVfZW50cnksIGxpc3QpOwogCWxlbiA9IGUtPmxlbjsKIAlvZmZzZXQgPSBlLT5vZmZzZXQ7CiAJc3Bpbl91bmxvY2soJmNvbi0+d3JpdGVxdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL0tjb25maWcgYi9mcy9lY3J5cHRmcy9LY29uZmlnCmluZGV4IDBjNzU0ZTYuLjFjZDZkOWQgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL0tjb25maWcKKysrIGIvZnMvZWNyeXB0ZnMvS2NvbmZpZwpAQCAtMSw2ICsxLDkgQEAKIGNvbmZpZyBFQ1JZUFRfRlMKIAl0cmlzdGF0ZSAiZUNyeXB0IGZpbGVzeXN0ZW0gbGF5ZXIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTyAmJiBORVQKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBLRVlTICYmIENSWVBUTworCXNlbGVjdCBDUllQVE9fRUNCCisJc2VsZWN0IENSWVBUT19DQkMKKwlzZWxlY3QgQ1JZUFRPX01ENQogCWhlbHAKIAkgIEVuY3J5cHRlZCBmaWxlc3lzdGVtIHRoYXQgb3BlcmF0ZXMgb24gdGhlIFZGUyBsYXllci4gIFNlZQogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9lY3J5cHRmcy50eHQ+IHRvIGxlYXJuIG1vcmUgYWJvdXQKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKaW5kZXggYjkxODUxZi4uZmJiNmU1ZSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKKysrIGIvZnMvZWNyeXB0ZnMvY3J5cHRvLmMKQEAgLTI0NSwxMyArMjQ1LDExIEBACiAJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjcnlwdF9zdGF0LT50Zm0pOwogCWlmIChjcnlwdF9zdGF0LT5oYXNoX3RmbSkKIAkJY3J5cHRvX2ZyZWVfaGFzaChjcnlwdF9zdGF0LT5oYXNoX3RmbSk7Ci0JbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXlfc2lnLCBrZXlfc2lnX3RtcCwKIAkJCQkgJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0LCBjcnlwdF9zdGF0X2xpc3QpIHsKIAkJbGlzdF9kZWwoJmtleV9zaWctPmNyeXB0X3N0YXRfbGlzdCk7CiAJCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19rZXlfc2lnX2NhY2hlLCBrZXlfc2lnKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7CiAJbWVtc2V0KGNyeXB0X3N0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCkpOwogfQogCkBAIC01MTEsMTMgKzUwOSwxNCBAQAogCQkJCSAgKyBleHRlbnRfb2Zmc2V0KSwgY3J5cHRfc3RhdCk7CiAJCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfaW5vZGUsIGVuY19leHRlbnRfdmlydCwKIAkJCQkJICBvZmZzZXQsIGNyeXB0X3N0YXQtPmV4dGVudF9zaXplKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gd3JpdGUgbG93ZXIgcGFnZTsgcmMgPSBbJWRdIgogCQkJCQkiXG4iLCByYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KKwlyYyA9IDA7CiBvdXQ6CiAJaWYgKGVuY19leHRlbnRfcGFnZSkgewogCQlrdW5tYXAoZW5jX2V4dGVudF9wYWdlKTsKQEAgLTYzMyw3ICs2MzIsNyBAQAogCQlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIoZW5jX2V4dGVudF92aXJ0LCBvZmZzZXQsCiAJCQkJCSBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkJIGVjcnlwdGZzX2lub2RlKTsKLQkJaWYgKHJjKSB7CisJCWlmIChyYyA8IDApIHsKIAkJCWVjcnlwdGZzX3ByaW50ayhLRVJOX0VSUiwgIkVycm9yIGF0dGVtcHRpbmcgIgogCQkJCQkidG8gcmVhZCBsb3dlciBwYWdlOyByYyA9IFslZF0iCiAJCQkJCSJcbiIsIHJjKTsKQEAgLTc5Nyw2ICs3OTYsNyBAQAogCWtmcmVlKGZ1bGxfYWxnX25hbWUpOwogCWlmIChJU19FUlIoY3J5cHRfc3RhdC0+dGZtKSkgewogCQlyYyA9IFBUUl9FUlIoY3J5cHRfc3RhdC0+dGZtKTsKKwkJY3J5cHRfc3RhdC0+dGZtID0gTlVMTDsKIAkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fRVJSLCAiY3J5cHRmczogaW5pdF9jcnlwdF9jdHgoKTogIgogCQkJCSJFcnJvciBpbml0aWFsaXppbmcgY2lwaGVyIFslc11cbiIsCiAJCQkJY3J5cHRfc3RhdC0+Y2lwaGVyKTsKQEAgLTkyNSw3ICs5MjUsOSBAQAogCXN0cnVjdCBlY3J5cHRmc19nbG9iYWxfYXV0aF90b2sgKmdsb2JhbF9hdXRoX3RvazsKIAlpbnQgcmMgPSAwOwogCisJbXV0ZXhfbG9jaygmY3J5cHRfc3RhdC0+a2V5c2lnX2xpc3RfbXV0ZXgpOwogCW11dGV4X2xvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2xvYmFsX2F1dGhfdG9rLAogCQkJICAgICZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdCwKIAkJCSAgICBtb3VudF9jcnlwdF9zdGF0X2xpc3QpIHsKQEAgLTkzNCwxMyArOTM2LDEzIEBACiAJCXJjID0gZWNyeXB0ZnNfYWRkX2tleXNpZyhjcnlwdF9zdGF0LCBnbG9iYWxfYXV0aF90b2stPnNpZyk7CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBhZGRpbmcga2V5c2lnOyByYyA9IFslZF1cbiIsIHJjKTsKLQkJCW11dGV4X3VubG9jaygKLQkJCQkmbW91bnRfY3J5cHRfc3RhdC0+Z2xvYmFsX2F1dGhfdG9rX2xpc3RfbXV0ZXgpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdF9tdXRleCk7CisKIG91dDoKKwltdXRleF91bmxvY2soJm1vdW50X2NyeXB0X3N0YXQtPmdsb2JhbF9hdXRoX3Rva19saXN0X211dGV4KTsKKwltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTEyMTIsMTQgKzEyMTQsMTUgQEAKIAkJY3J5cHRfc3RhdC0+ZXh0ZW50X3NpemUgPSBFQ1JZUFRGU19ERUZBVUxUX0VYVEVOVF9TSVpFOwogCXJjID0gZWNyeXB0ZnNfcmVhZF9sb3dlcihkYXRhLCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmIChyYykgeworCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVhZGluZyBoZWFkZXIgcmVnaW9uOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFjb250YWluc19lY3J5cHRmc19tYXJrZXIoZGF0YSArIEVDUllQVEZTX0ZJTEVfU0laRV9CWVRFUykpIHsKIAkJcmMgPSAtRUlOVkFMOwotCX0KKwl9IGVsc2UKKwkJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKIH0KQEAgLTEzMTQsMTAgKzEzMTcsMTEgQEAKIAogCXJjID0gZWNyeXB0ZnNfd3JpdGVfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlLCB2aXJ0LAogCQkJCSAgMCwgdmlydF9sZW4pOwotCWlmIChyYykKKwlpZiAocmMgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhdHRlbXB0aW5nIHRvIHdyaXRlIGhlYWRlciAiCi0JCSAgICAgICAiaW5mb3JtYXRpb24gdG8gbG93ZXIgZmlsZTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIHJjKTsKKwkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CisJZWxzZQorCQlyYyA9IDA7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNTk3LDcgKzE2MDEsNyBAQAogCX0KIAlyYyA9IGVjcnlwdGZzX3JlYWRfbG93ZXIocGFnZV92aXJ0LCAwLCBjcnlwdF9zdGF0LT5leHRlbnRfc2l6ZSwKIAkJCQkgZWNyeXB0ZnNfaW5vZGUpOwotCWlmICghcmMpCisJaWYgKHJjID49IDApCiAJCXJjID0gZWNyeXB0ZnNfcmVhZF9oZWFkZXJzX3ZpcnQocGFnZV92aXJ0LCBjcnlwdF9zdGF0LAogCQkJCQkJZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQkJRUNSWVBURlNfVkFMSURBVEVfSEVBREVSX1NJWkUpOwpAQCAtMTcwMiw3ICsxNzA2LDcgQEAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyBzdXBwb3J0IGZvciByZXF1ZXN0ZWQgZmlsZW5hbWUgIgogCQkgICAgICAgImVuY3J5cHRpb24gbWV0aG9kIGluIHRoaXMgcmVsZWFzZVxuIiwgX19mdW5jX18pOwotCQlyYyA9IC1FTk9UU1VQUDsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogb3V0OgpAQCAtMTc2Myw3ICsxNzY3LDcgQEAKIAlpZiAoSVNfRVJSKCprZXlfdGZtKSkgewogCQlyYyA9IFBUUl9FUlIoKmtleV90Zm0pOwogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBjcnlwdG8gY2lwaGVyIHdpdGggbmFtZSAiCi0JCSAgICAgICAiWyVzXTsgcmMgPSBbJWRdXG4iLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgIlslc107IHJjID0gWyVkXVxuIiwgZnVsbF9hbGdfbmFtZSwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfZmxhZ3MoKmtleV90Zm0sIENSWVBUT19URk1fUkVRX1dFQUtfS0VZKTsKQEAgLTE3NzYsNyArMTc4MCw4IEBACiAJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleSgqa2V5X3RmbSwgZHVtbXlfa2V5LCAqa2V5X3NpemUpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGF0dGVtcHRpbmcgdG8gc2V0IGtleSBvZiBzaXplIFslemRdIGZvciAiCi0JCSAgICAgICAiY2lwaGVyIFslc107IHJjID0gWyVkXVxuIiwgKmtleV9zaXplLCBjaXBoZXJfbmFtZSwgcmMpOworCQkgICAgICAgImNpcGhlciBbJXNdOyByYyA9IFslZF1cbiIsICprZXlfc2l6ZSwgZnVsbF9hbGdfbmFtZSwKKwkJICAgICAgIHJjKTsKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTY2LDcgKzIxNzEsNyBAQAogCQkJKCplbmNvZGVkX25hbWUpWygqZW5jb2RlZF9uYW1lX3NpemUpXSA9ICdcMCc7CiAJCQkoKmVuY29kZWRfbmFtZV9zaXplKSsrOwogCQl9IGVsc2UgewotCQkJcmMgPSAtRU5PVFNVUFA7CisJCQlyYyA9IC1FT1BOT1RTVVBQOwogCQl9CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBlbmNvZGUgIgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggMmYwOTQ1ZC4uMDU2ZmVkNjIgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtNDc2LDYgKzQ3Niw3IEBACiAJc3RydWN0IGlub2RlICpsb3dlcl9kaXJfaW5vZGUgPSBlY3J5cHRmc19pbm9kZV90b19sb3dlcihkaXIpOwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnk7CiAKKwlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbG93ZXJfZGlyX2RlbnRyeSA9IGxvY2tfcGFyZW50KGxvd2VyX2RlbnRyeSk7CiAJcmMgPSB2ZnNfdW5saW5rKGxvd2VyX2Rpcl9pbm9kZSwgbG93ZXJfZGVudHJ5KTsKIAlpZiAocmMpIHsKQEAgLTQ4OSw2ICs0OTAsNyBAQAogCWRfZHJvcChkZW50cnkpOwogb3V0X3VubG9jazoKIAl1bmxvY2tfZGlyKGxvd2VyX2Rpcl9kZW50cnkpOworCWRwdXQobG93ZXJfZGVudHJ5KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMgYi9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCmluZGV4IDI1OTUyNWM5Li5hMGE3ODQ3IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKQEAgLTQxNiw3ICs0MTYsOSBAQAogCQkJICAgICZtb3VudF9jcnlwdF9zdGF0LT5nbG9iYWxfYXV0aF90b2tfbGlzdCwKIAkJCSAgICBtb3VudF9jcnlwdF9zdGF0X2xpc3QpIHsKIAkJaWYgKG1lbWNtcCh3YWxrZXItPnNpZywgc2lnLCBFQ1JZUFRGU19TSUdfU0laRV9IRVgpID09IDApIHsKLQkJCSgqZ2xvYmFsX2F1dGhfdG9rKSA9IHdhbGtlcjsKKwkJCXJjID0ga2V5X3ZhbGlkYXRlKHdhbGtlci0+Z2xvYmFsX2F1dGhfdG9rX2tleSk7CisJCQlpZiAoIXJjKQorCQkJCSgqZ2xvYmFsX2F1dGhfdG9rKSA9IHdhbGtlcjsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtNjEyLDcgKzYxNCwxMiBAQAogCX0KIAkvKiBUT0RPOiBTdXBwb3J0IG90aGVyIGtleSBtb2R1bGVzIHRoYW4gcGFzc3BocmFzZSBmb3IKIAkgKiBmaWxlbmFtZSBlbmNyeXB0aW9uICovCi0JQlVHX09OKHMtPmF1dGhfdG9rLT50b2tlbl90eXBlICE9IEVDUllQVEZTX1BBU1NXT1JEKTsKKwlpZiAocy0+YXV0aF90b2stPnRva2VuX3R5cGUgIT0gRUNSWVBURlNfUEFTU1dPUkQpIHsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEZpbGVuYW1lIGVuY3J5cHRpb24gb25seSBzdXBwb3J0cyAiCisJCSAgICAgICAicGFzc3dvcmQgdG9rZW5zXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfdW5sb2NrOworCX0KIAlzZ19pbml0X29uZSgKIAkJJnMtPmhhc2hfc2csCiAJCSh1OCAqKXMtPmF1dGhfdG9rLT50b2tlbi5wYXNzd29yZC5zZXNzaW9uX2tleV9lbmNyeXB0aW9uX2tleSwKQEAgLTkxMCw3ICs5MTcsMTIgQEAKIAl9CiAJLyogVE9ETzogU3VwcG9ydCBvdGhlciBrZXkgbW9kdWxlcyB0aGFuIHBhc3NwaHJhc2UgZm9yCiAJICogZmlsZW5hbWUgZW5jcnlwdGlvbiAqLwotCUJVR19PTihzLT5hdXRoX3Rvay0+dG9rZW5fdHlwZSAhPSBFQ1JZUFRGU19QQVNTV09SRCk7CisJaWYgKHMtPmF1dGhfdG9rLT50b2tlbl90eXBlICE9IEVDUllQVEZTX1BBU1NXT1JEKSB7CisJCXJjID0gLUVPUE5PVFNVUFA7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGaWxlbmFtZSBlbmNyeXB0aW9uIG9ubHkgc3VwcG9ydHMgIgorCQkgICAgICAgInBhc3N3b3JkIHRva2Vuc1xuIiwgX19mdW5jX18pOworCQlnb3RvIG91dF9mcmVlX3VubG9jazsKKwl9CiAJcmMgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleSgKIAkJcy0+ZGVzYy50Zm0sCiAJCXMtPmF1dGhfdG9rLT50b2tlbi5wYXNzd29yZC5zZXNzaW9uX2tleV9lbmNyeXB0aW9uX2tleSwKQEAgLTEzMTYsOCArMTMyOCwxMCBAQAogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQotCWVjcnlwdGZzX2NpcGhlcl9jb2RlX3RvX3N0cmluZyhjcnlwdF9zdGF0LT5jaXBoZXIsCi0JCQkJICAgICAgICh1MTYpZGF0YVsoKnBhY2tldF9zaXplKV0pOworCXJjID0gZWNyeXB0ZnNfY2lwaGVyX2NvZGVfdG9fc3RyaW5nKGNyeXB0X3N0YXQtPmNpcGhlciwKKwkJCQkJICAgICh1MTYpZGF0YVsoKnBhY2tldF9zaXplKV0pOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKIAkvKiBBIGxpdHRsZSBleHRyYSB3b3JrIHRvIGRpZmZlcmVudGlhdGUgYW1vbmcgdGhlIEFFUyBrZXkKIAkgKiBzaXplczsgc2VlIFJGQzI0NDAgKi8KIAlzd2l0Y2goZGF0YVsoKnBhY2tldF9zaXplKSsrXSkgewpAQCAtMTMyOCw3ICsxMzQyLDkgQEAKIAkJY3J5cHRfc3RhdC0+a2V5X3NpemUgPQogCQkJKCpuZXdfYXV0aF90b2spLT5zZXNzaW9uX2tleS5lbmNyeXB0ZWRfa2V5X3NpemU7CiAJfQotCWVjcnlwdGZzX2luaXRfY3J5cHRfY3R4KGNyeXB0X3N0YXQpOworCXJjID0gZWNyeXB0ZnNfaW5pdF9jcnlwdF9jdHgoY3J5cHRfc3RhdCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOwogCWlmICh1bmxpa2VseShkYXRhWygqcGFja2V0X3NpemUpKytdICE9IDB4MDMpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9ubHkgUzJLIElEIDMgaXMgY3VycmVudGx5IHN1cHBvcnRlZFxuIik7CiAJCXJjID0gLUVOT1NZUzsKQEAgLTIzNjYsMjEgKzIzODIsMTggQEAKIGludCBlY3J5cHRmc19hZGRfa2V5c2lnKHN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0LCBjaGFyICpzaWcpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2tleV9zaWcgKm5ld19rZXlfc2lnOwotCWludCByYyA9IDA7CiAKIAluZXdfa2V5X3NpZyA9IGttZW1fY2FjaGVfYWxsb2MoZWNyeXB0ZnNfa2V5X3NpZ19jYWNoZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXdfa2V5X3NpZykgewotCQlyYyA9IC1FTk9NRU07CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIkVycm9yIGFsbG9jYXRpbmcgZnJvbSBlY3J5cHRmc19rZXlfc2lnX2NhY2hlXG4iKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1jcHkobmV3X2tleV9zaWctPmtleXNpZywgc2lnLCBFQ1JZUFRGU19TSUdfU0laRV9IRVgpOwotCW11dGV4X2xvY2soJmNyeXB0X3N0YXQtPmtleXNpZ19saXN0X211dGV4KTsKKwkvKiBDYWxsZXIgbXVzdCBob2xkIGtleXNpZ19saXN0X211dGV4ICovCiAJbGlzdF9hZGQoJm5ld19rZXlfc2lnLT5jcnlwdF9zdGF0X2xpc3QsICZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5rZXlzaWdfbGlzdF9tdXRleCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOworCisJcmV0dXJuIDA7CiB9CiAKIHN0cnVjdCBrbWVtX2NhY2hlICplY3J5cHRmc19nbG9iYWxfYXV0aF90b2tfY2FjaGU7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMgYi9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKaW5kZXggYzZkN2E0ZC4uZTE0Y2Y3ZSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMva3RocmVhZC5jCisrKyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwpAQCAtMTM2LDYgKzEzNiw3IEBACiAJCQkgICAgIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQogewogCXN0cnVjdCBlY3J5cHRmc19vcGVuX3JlcSAqcmVxOworCWludCBmbGFncyA9IE9fTEFSR0VGSUxFOwogCWludCByYyA9IDA7CiAKIAkvKiBDb3JyZXNwb25kaW5nIGRwdXQoKSBhbmQgbW50cHV0KCkgYXJlIGRvbmUgd2hlbiB0aGUKQEAgLTE0MywxMCArMTQ0LDE0IEBACiAJICogZGVzdHJveWVkLiAqLwogCWRnZXQobG93ZXJfZGVudHJ5KTsKIAltbnRnZXQobG93ZXJfbW50KTsKLQkoKmxvd2VyX2ZpbGUpID0gZGVudHJ5X29wZW4obG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsCi0JCQkJICAgIChPX1JEV1IgfCBPX0xBUkdFRklMRSksIGNyZWQpOworCWZsYWdzIHw9IElTX1JET05MWShsb3dlcl9kZW50cnktPmRfaW5vZGUpID8gT19SRE9OTFkgOiBPX1JEV1I7CisJKCpsb3dlcl9maWxlKSA9IGRlbnRyeV9vcGVuKGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCBmbGFncywgY3JlZCk7CiAJaWYgKCFJU19FUlIoKmxvd2VyX2ZpbGUpKQogCQlnb3RvIG91dDsKKwlpZiAoZmxhZ3MgJiBPX1JET05MWSkgeworCQlyYyA9IFBUUl9FUlIoKCpsb3dlcl9maWxlKSk7CisJCWdvdG8gb3V0OworCX0KIAlyZXEgPSBrbWVtX2NhY2hlX2FsbG9jKGVjcnlwdGZzX29wZW5fcmVxX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJlcSkgewogCQlyYyA9IC1FTk9NRU07CkBAIC0xODAsMjEgKzE4NSw4IEBACiAJCSAgICAgICBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JaWYgKElTX0VSUigqcmVxLT5sb3dlcl9maWxlKSkgeworCWlmIChJU19FUlIoKnJlcS0+bG93ZXJfZmlsZSkpCiAJCXJjID0gUFRSX0VSUigqcmVxLT5sb3dlcl9maWxlKTsKLQkJZGdldChsb3dlcl9kZW50cnkpOwotCQltbnRnZXQobG93ZXJfbW50KTsKLQkJKCpsb3dlcl9maWxlKSA9IGRlbnRyeV9vcGVuKGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAotCQkJCQkgICAgKE9fUkRPTkxZIHwgT19MQVJHRUZJTEUpLCBjcmVkKTsKLQkJaWYgKElTX0VSUigqbG93ZXJfZmlsZSkpIHsKLQkJCXJjID0gUFRSX0VSUigqcmVxLT5sb3dlcl9maWxlKTsKLQkJCSgqbG93ZXJfZmlsZSkgPSBOVUxMOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yIGF0dGVtcHRpbmcgcHJpdmlsZWdlZCAiCi0JCQkgICAgICAgIm9wZW4gb2YgbG93ZXIgZmlsZSB3aXRoIGVpdGhlciBSVyBvciBSTyAiCi0JCQkgICAgICAgInBlcm1zOyByYyA9IFslZF0uIEdpdmluZyB1cC5cbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHJjKTsKLQkJfQotCX0KIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZyZXEtPm11eCk7CiBvdXRfZnJlZToKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCA5ZjBhYTk4Li5jNmFjODVkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2V5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvZnNfc3RhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KICNpbmNsdWRlICJlY3J5cHRmc19rZXJuZWwuaCIKIAogLyoqCkBAIC0xMTgsNiArMTE5LDcgQEAKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvID0KIAkJZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOworCWludCBvcGVuZWRfbG93ZXJfZmlsZSA9IDA7CiAJaW50IHJjID0gMDsKIAogCW11dGV4X2xvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwpAQCAtMTI5LDE1ICsxMzEsMTcgQEAKIAkJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGVjcnlwdGZzX2RlbnRyeSk7CiAJCXJjID0gZWNyeXB0ZnNfcHJpdmlsZWdlZF9vcGVuKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLAogCQkJCQkgICAgICBsb3dlcl9kZW50cnksIGxvd2VyX21udCwgY3JlZCk7Ci0JCWlmIChyYyB8fCBJU19FUlIoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSkpIHsKKwkJaWYgKHJjKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9wZW5pbmcgbG93ZXIgcGVyc2lzdGVudCBmaWxlICIKIAkJCSAgICAgICAiZm9yIGxvd2VyX2RlbnRyeSBbMHglcF0gYW5kIGxvd2VyX21udCBbMHglcF07ICIKIAkJCSAgICAgICAicmMgPSBbJWRdXG4iLCBsb3dlcl9kZW50cnksIGxvd2VyX21udCwgcmMpOwotCQkJcmMgPSBQVFJfRVJSKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOwogCQkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7Ci0JCX0KKwkJfSBlbHNlCisJCQlvcGVuZWRfbG93ZXJfZmlsZSA9IDE7CiAJfQogCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJaWYgKG9wZW5lZF9sb3dlcl9maWxlKQorCQlpbWFfY291bnRzX2dldChpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21tYXAuYyBiL2ZzL2VjcnlwdGZzL21tYXAuYwppbmRleCAwNTc3MmFlLi5kZjRjZTk5IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tbWFwLmMKKysrIGIvZnMvZWNyeXB0ZnMvbW1hcC5jCkBAIC0zOTYsOSArMzk2LDExIEBACiAJcmMgPSBlY3J5cHRmc193cml0ZV9sb3dlcihlY3J5cHRmc19pbm9kZSwgZmlsZV9zaXplX3ZpcnQsIDAsCiAJCQkJICBzaXplb2YodTY0KSk7CiAJa2ZyZWUoZmlsZV9zaXplX3ZpcnQpOwotCWlmIChyYykKKwlpZiAocmMgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3cml0aW5nIGZpbGUgc2l6ZSB0byBoZWFkZXI7ICIKIAkJICAgICAgICJyYyA9IFslZF1cbiIsIF9fZnVuY19fLCByYyk7CisJZWxzZQorCQlyYyA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jIGIvZnMvZWNyeXB0ZnMvcmVhZF93cml0ZS5jCmluZGV4IGExMzdjNmUuLjBjYzRmYWYgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL3JlYWRfd3JpdGUuYworKysgYi9mcy9lY3J5cHRmcy9yZWFkX3dyaXRlLmMKQEAgLTM0LDE1ICszNCwxNCBAQAogICoKICAqIFdyaXRlIGRhdGEgdG8gdGhlIGxvd2VyIGZpbGUuCiAgKgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG9uIGVycm9yCisgKiBSZXR1cm5zIGJ5dGVzIHdyaXR0ZW4gb24gc3VjY2VzczsgbGVzcyB0aGFuIHplcm8gb24gZXJyb3IKICAqLwogaW50IGVjcnlwdGZzX3dyaXRlX2xvd2VyKHN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUsIGNoYXIgKmRhdGEsCiAJCQkgbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm87Ci0Jc3NpemVfdCBvY3RldHNfd3JpdHRlbjsKIAltbV9zZWdtZW50X3QgZnNfc2F2ZTsKLQlpbnQgcmMgPSAwOworCXNzaXplX3QgcmM7CiAKIAlpbm9kZV9pbmZvID0gZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShlY3J5cHRmc19pbm9kZSk7CiAJbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CkBAIC01MCwxNCArNDksOSBAQAogCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zID0gb2Zmc2V0OwogCWZzX3NhdmUgPSBnZXRfZnMoKTsKIAlzZXRfZnMoZ2V0X2RzKCkpOwotCW9jdGV0c193cml0dGVuID0gdmZzX3dyaXRlKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUsIGRhdGEsIHNpemUsCi0JCQkJICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zKTsKKwlyYyA9IHZmc193cml0ZShpbm9kZV9pbmZvLT5sb3dlcl9maWxlLCBkYXRhLCBzaXplLAorCQkgICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfcG9zKTsKIAlzZXRfZnMoZnNfc2F2ZSk7Ci0JaWYgKG9jdGV0c193cml0dGVuIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvY3RldHNfd3JpdHRlbiA9IFsldGRdOyAiCi0JCSAgICAgICAiZXhwZWN0ZWQgWyV0ZF1cbiIsIF9fZnVuY19fLCBvY3RldHNfd3JpdHRlbiwgc2l6ZSk7Ci0JCXJjID0gLUVJTlZBTDsKLQl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKIAltYXJrX2lub2RlX2RpcnR5X3N5bmMoZWNyeXB0ZnNfaW5vZGUpOwogCXJldHVybiByYzsKQEAgLTkxLDYgKzg1LDggQEAKIAkJICArIG9mZnNldF9pbl9wYWdlKTsKIAl2aXJ0ID0ga21hcChwYWdlX2Zvcl9sb3dlcik7CiAJcmMgPSBlY3J5cHRmc193cml0ZV9sb3dlcihlY3J5cHRmc19pbm9kZSwgdmlydCwgb2Zmc2V0LCBzaXplKTsKKwlpZiAocmMgPiAwKQorCQlyYyA9IDA7CiAJa3VubWFwKHBhZ2VfZm9yX2xvd2VyKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMjksMzAgKzIyNSwyNCBAQAogICogUmVhZCBAc2l6ZSBieXRlcyBvZiBkYXRhIGF0IGJ5dGUgb2Zmc2V0IEBvZmZzZXQgZnJvbSB0aGUgbG93ZXIKICAqIGlub2RlIGludG8gbWVtb3J5IGxvY2F0aW9uIEBkYXRhLgogICoKLSAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvbiBlcnJvcgorICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3M7IDAgb24gRU9GOyBsZXNzIHRoYW4gemVybyBvbiBlcnJvcgogICovCiBpbnQgZWNyeXB0ZnNfcmVhZF9sb3dlcihjaGFyICpkYXRhLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKIAkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfaW5vZGUpCiB7CiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQogCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2lub2RlKTsKLQlzc2l6ZV90IG9jdGV0c19yZWFkOwogCW1tX3NlZ21lbnRfdCBmc19zYXZlOwotCWludCByYyA9IDA7CisJc3NpemVfdCByYzsKIAogCW11dGV4X2xvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCUJVR19PTighaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CiAJZnNfc2F2ZSA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7Ci0Jb2N0ZXRzX3JlYWQgPSB2ZnNfcmVhZChpbm9kZV9pbmZvLT5sb3dlcl9maWxlLCBkYXRhLCBzaXplLAotCQkJICAgICAgICZpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX3Bvcyk7CisJcmMgPSB2ZnNfcmVhZChpbm9kZV9pbmZvLT5sb3dlcl9maWxlLCBkYXRhLCBzaXplLAorCQkgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZS0+Zl9wb3MpOwogCXNldF9mcyhmc19zYXZlKTsKLQlpZiAob2N0ZXRzX3JlYWQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG9jdGV0c19yZWFkID0gWyV0ZF07ICIKLQkJICAgICAgICJleHBlY3RlZCBbJXRkXVxuIiwgX19mdW5jX18sIG9jdGV0c19yZWFkLCBzaXplKTsKLQkJcmMgPSAtRUlOVkFMOwotCX0KIAltdXRleF91bmxvY2soJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOwogCXJldHVybiByYzsKIH0KQEAgLTI4NCw2ICsyNzQsOCBAQAogCW9mZnNldCA9ICgoKChsb2ZmX3QpcGFnZV9pbmRleCkgPDwgUEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXRfaW5fcGFnZSk7CiAJdmlydCA9IGttYXAocGFnZV9mb3JfZWNyeXB0ZnMpOwogCXJjID0gZWNyeXB0ZnNfcmVhZF9sb3dlcih2aXJ0LCBvZmZzZXQsIHNpemUsIGVjcnlwdGZzX2lub2RlKTsKKwlpZiAocmMgPiAwKQorCQlyYyA9IDA7CiAJa3VubWFwKHBhZ2VfZm9yX2VjcnlwdGZzKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlX2Zvcl9lY3J5cHRmcyk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvc3VwZXIuYyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKaW5kZXggMTJkNjQ5Ni4uYjE1YTQzYSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvc3VwZXIuYworKysgYi9mcy9lY3J5cHRmcy9zdXBlci5jCkBAIC03Nyw3ICs3Nyw2IEBACiAJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm87CiAKIAlpbm9kZV9pbmZvID0gZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShpbm9kZSk7Ci0JbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CiAJaWYgKGlub2RlX2luZm8tPmxvd2VyX2ZpbGUpIHsKIAkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5ID0KIAkJCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUtPmZfZGVudHJ5OwpAQCAtODksNyArODgsNiBAQAogCQkJZF9kcm9wKGxvd2VyX2RlbnRyeSk7CiAJCX0KIAl9Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKIAllY3J5cHRmc19kZXN0cm95X2NyeXB0X3N0YXQoJmlub2RlX2luZm8tPmNyeXB0X3N0YXQpOwogCWttZW1fY2FjaGVfZnJlZShlY3J5cHRmc19pbm9kZV9pbmZvX2NhY2hlLCBpbm9kZV9pbmZvKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBkNDliZTZiLi5iYTExMmJkIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC02MjQsMTAgKzYyNCw4IEBACiAJLyogTW92ZSBzdGFjayBwYWdlcyBkb3duIGluIG1lbW9yeS4gKi8KIAlpZiAoc3RhY2tfc2hpZnQpIHsKIAkJcmV0ID0gc2hpZnRfYXJnX3BhZ2VzKHZtYSwgc3RhY2tfc2hpZnQpOwotCQlpZiAocmV0KSB7Ci0JCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKICNpZmRlZiBDT05GSUdfU1RBQ0tfR1JPV1NVUApAQCAtNjQxLDcgKzYzOSw3IEBACiAKIG91dF91bmxvY2s6CiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woc2V0dXBfYXJnX3BhZ2VzKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9mc3luYy5jIGIvZnMvZXh0My9mc3luYy5jCmluZGV4IDQ1MWQxNjYuLjgyMDlmMjYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZnN5bmMuYworKysgYi9mcy9leHQzL2ZzeW5jLmMKQEAgLTQ2LDE5ICs0NiwyMSBAQAogaW50IGV4dDNfc3luY19maWxlKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CisJam91cm5hbF90ICpqb3VybmFsID0gRVhUM19TQihpbm9kZS0+aV9zYiktPnNfam91cm5hbDsKIAlpbnQgcmV0ID0gMDsKKwl0aWRfdCBjb21taXRfdGlkOworCisJaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlyZXR1cm4gMDsKIAogCUpfQVNTRVJUKGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpID09IE5VTEwpOwogCiAJLyoKLQkgKiBkYXRhPXdyaXRlYmFjazoKKwkgKiBkYXRhPXdyaXRlYmFjayxvcmRlcmVkOgogCSAqICBUaGUgY2FsbGVyJ3MgZmlsZW1hcF9mZGF0YXdyaXRlKCkvd2FpdCB3aWxsIHN5bmMgdGhlIGRhdGEuCi0JICogIHN5bmNfaW5vZGUoKSB3aWxsIHN5bmMgdGhlIG1ldGFkYXRhCi0JICoKLQkgKiBkYXRhPW9yZGVyZWQ6Ci0JICogIFRoZSBjYWxsZXIncyBmaWxlbWFwX2ZkYXRhd3JpdGUoKSB3aWxsIHdyaXRlIHRoZSBkYXRhIGFuZAotCSAqICBzeW5jX2lub2RlKCkgd2lsbCB3cml0ZSB0aGUgaW5vZGUgaWYgaXQgaXMgZGlydHkuICBUaGVuIHRoZSBjYWxsZXIncwotCSAqICBmaWxlbWFwX2ZkYXRhd2FpdCgpIHdpbGwgd2FpdCBvbiB0aGUgcGFnZXMuCisJICogIE1ldGFkYXRhIGlzIGluIHRoZSBqb3VybmFsLCB3ZSB3YWl0IGZvciBhIHByb3BlciB0cmFuc2FjdGlvbgorCSAqICB0byBjb21taXQgaGVyZS4KIAkgKgogCSAqIGRhdGE9am91cm5hbDoKIAkgKiAgZmlsZW1hcF9mZGF0YXdyaXRlIHdvbid0IGRvIGFueXRoaW5nICh0aGUgYnVmZmVycyBhcmUgY2xlYW4pLgpAQCAtNzMsMjIgKzc1LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChkYXRhc3luYyAmJiAhKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9EQVRBU1lOQykpCi0JCWdvdG8gZmx1c2g7CisJaWYgKGRhdGFzeW5jKQorCQljb21taXRfdGlkID0gYXRvbWljX3JlYWQoJmVpLT5pX2RhdGFzeW5jX3RpZCk7CisJZWxzZQorCQljb21taXRfdGlkID0gYXRvbWljX3JlYWQoJmVpLT5pX3N5bmNfdGlkKTsKIAotCS8qCi0JICogVGhlIFZGUyBoYXMgd3JpdHRlbiB0aGUgZmlsZSBkYXRhLiAgSWYgdGhlIGlub2RlIGlzIHVuYWx0ZXJlZAotCSAqIHRoZW4gd2UgbmVlZCBub3Qgc3RhcnQgYSBjb21taXQuCi0JICovCi0JaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRElSVFlfU1lOQ3xJX0RJUlRZX0RBVEFTWU5DKSkgewotCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewotCQkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAotCQkJLm5yX3RvX3dyaXRlID0gMCwgLyogc3lzX2ZzeW5jIGRpZCB0aGlzICovCi0JCX07Ci0JCXJldCA9IHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOworCWlmIChsb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIGNvbW1pdF90aWQpKSB7CisJCWxvZ193YWl0X2NvbW1pdChqb3VybmFsLCBjb21taXRfdGlkKTsKIAkJZ290byBvdXQ7CiAJfQotZmx1c2g6CisKIAkvKgogCSAqIEluIGNhc2Ugd2UgZGlkbid0IGNvbW1pdCBhIHRyYW5zYWN0aW9uLCB3ZSBoYXZlIHRvIGZsdXNoCiAJICogZGlzayBjYWNoZXMgbWFudWFsbHkgc28gdGhhdCBkYXRhIHJlYWxseSBpcyBvbiBwZXJzaXN0ZW50CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggYWNmMWIxNC4uMzU0ZWQzYiAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtNjk5LDggKzY5OSw5IEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGV4dDNfYmxvY2tfYWxsb2NfaW5mbyAqYmxvY2tfaTsKIAlleHQzX2ZzYmxrX3QgY3VycmVudF9ibG9jazsKKwlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CiAKLQlibG9ja19pID0gRVhUM19JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvOworCWJsb2NrX2kgPSBlaS0+aV9ibG9ja19hbGxvY19pbmZvOwogCS8qCiAJICogSWYgd2UncmUgc3BsaWNpbmcgaW50byBhIFt0ZF1pbmRpcmVjdCBibG9jayAoYXMgb3Bwb3NlZCB0byB0aGUKIAkgKiBpbm9kZSkgdGhlbiB3ZSBuZWVkIHRvIGdldCB3cml0ZSBhY2Nlc3MgdG8gdGhlIFt0ZF1pbmRpcmVjdCBibG9jawpAQCAtNzQxLDYgKzc0Miw4IEBACiAKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCS8qIGV4dDNfbWFya19pbm9kZV9kaXJ0eSBhbHJlYWR5IHVwZGF0ZWQgaV9zeW5jX3RpZCAqLworCWF0b21pY19zZXQoJmVpLT5pX2RhdGFzeW5jX3RpZCwgaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCk7CiAKIAkvKiBoYWQgd2Ugc3BsaWNlZCBpdCBvbnRvIGluZGlyZWN0IGJsb2NrPyAqLwogCWlmICh3aGVyZS0+YmgpIHsKQEAgLTE3MzUsNiArMTczOCw3IEBACiAJc3NpemVfdCByZXQ7CiAJaW50IG9ycGhhbiA9IDA7CiAJc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWludCByZXRyaWVzID0gMDsKIAogCWlmIChydyA9PSBXUklURSkgewogCQlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OwpAQCAtMTc1Nyw5ICsxNzYxLDEyIEBACiAJCX0KIAl9CiAKK3JldHJ5OgogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSBleHQzX2dldF9ibG9jaywgTlVMTCk7CisJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCisJCWdvdG8gcmV0cnk7CiAKIAlpZiAob3JwaGFuKSB7CiAJCWludCBlcnI7CkBAIC0yNzUwLDYgKzI3NTcsOCBAQAogCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlqb3VybmFsX3QgKmpvdXJuYWwgPSBFWFQzX1NCKHNiKS0+c19qb3VybmFsOworCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uOwogCWxvbmcgcmV0OwogCWludCBibG9jazsKIApAQCAtMjgyNyw2ICsyODM2LDMwIEBACiAJCWVpLT5pX2RhdGFbYmxvY2tdID0gcmF3X2lub2RlLT5pX2Jsb2NrW2Jsb2NrXTsKIAlJTklUX0xJU1RfSEVBRCgmZWktPmlfb3JwaGFuKTsKIAorCS8qCisJICogU2V0IHRyYW5zYWN0aW9uIGlkJ3Mgb2YgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSB0byBiZSBjb21taXR0ZWQKKwkgKiB0byBmaW5pc2ggZltkYXRhXXN5bmMuIFdlIHNldCB0aGVtIHRvIGN1cnJlbnRseSBydW5uaW5nIHRyYW5zYWN0aW9uCisJICogYXMgd2UgY2Fubm90IGJlIHN1cmUgdGhhdCB0aGUgaW5vZGUgb3Igc29tZSBvZiBpdHMgbWV0YWRhdGEgaXNuJ3QKKwkgKiBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbiAtIHRoZSBpbm9kZSBjb3VsZCBoYXZlIGJlZW4gcmVjbGFpbWVkIGFuZAorCSAqIG5vdyBpdCBpcyByZXJlYWQgZnJvbSBkaXNrLgorCSAqLworCWlmIChqb3VybmFsKSB7CisJCXRpZF90IHRpZDsKKworCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pCisJCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbjsKKwkJZWxzZQorCQkJdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb247CisJCWlmICh0cmFuc2FjdGlvbikKKwkJCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwkJZWxzZQorCQkJdGlkID0gam91cm5hbC0+al9jb21taXRfc2VxdWVuY2U7CisJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOworCQlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgdGlkKTsKKwkJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCB0aWQpOworCX0KKwogCWlmIChpbm9kZS0+aV9pbm8gPj0gRVhUM19GSVJTVF9JTk8oaW5vZGUtPmlfc2IpICsgMSAmJgogCSAgICBFWFQzX0lOT0RFX1NJWkUoaW5vZGUtPmlfc2IpID4gRVhUM19HT09EX09MRF9JTk9ERV9TSVpFKSB7CiAJCS8qCkBAIC0zMDExLDYgKzMwNDQsNyBAQAogCQllcnIgPSByYzsKIAllaS0+aV9zdGF0ZSAmPSB+RVhUM19TVEFURV9ORVc7CiAKKwlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCk7CiBvdXRfYnJlbHNlOgogCWJyZWxzZSAoYmgpOwogCWV4dDNfc3RkX2Vycm9yKGlub2RlLT5pX3NiLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9zdXBlci5jIGIvZnMvZXh0My9zdXBlci5jCmluZGV4IDcyNzQzZDMuLjQyNzQ5NmMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvc3VwZXIuYworKysgYi9mcy9leHQzL3N1cGVyLmMKQEAgLTQ2Niw2ICs0NjYsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAllaS0+aV9ibG9ja19hbGxvY19pbmZvID0gTlVMTDsKIAllaS0+dmZzX2lub2RlLmlfdmVyc2lvbiA9IDE7CisJYXRvbWljX3NldCgmZWktPmlfZGF0YXN5bmNfdGlkLCAwKTsKKwlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgMCk7CiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQogCkBAIC0yMzIxLDcgKzIzMjMsMTggQEAKIAogCWlmICghc2JoKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXMtPnNfd3RpbWUgPSBjcHVfdG9fbGUzMihnZXRfc2Vjb25kcygpKTsKKwkvKgorCSAqIElmIHRoZSBmaWxlIHN5c3RlbSBpcyBtb3VudGVkIHJlYWQtb25seSwgZG9uJ3QgdXBkYXRlIHRoZQorCSAqIHN1cGVyYmxvY2sgd3JpdGUgdGltZS4gIFRoaXMgYXZvaWRzIHVwZGF0aW5nIHRoZSBzdXBlcmJsb2NrCisJICogd3JpdGUgdGltZSB3aGVuIHdlIGFyZSBtb3VudGluZyB0aGUgcm9vdCBmaWxlIHN5c3RlbQorCSAqIHJlYWQvb25seSBidXQgd2UgbmVlZCB0byByZXBsYXkgdGhlIGpvdXJuYWw7IGF0IHRoYXQgcG9pbnQsCisJICogZm9yIHBlb3BsZSB3aG8gYXJlIGVhc3Qgb2YgR01UIGFuZCB3aG8gbWFrZSB0aGVpciBjbG9jaworCSAqIHRpY2sgaW4gbG9jYWx0aW1lIGZvciBXaW5kb3dzIGJ1Zy1mb3ItYnVnIGNvbXBhdGliaWxpdHksCisJICogdGhlIGNsb2NrIGlzIHNldCBpbiB0aGUgZnV0dXJlLCBhbmQgdGhpcyB3aWxsIGNhdXNlIGUyZnNjaworCSAqIHRvIGNvbXBsYWluIGFuZCBmb3JjZSBhIGZ1bGwgZmlsZSBzeXN0ZW0gY2hlY2suCisJICovCisJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQorCQllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOwogCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIoZXh0M19jb3VudF9mcmVlX2Jsb2NrcyhzYikpOwogCWVzLT5zX2ZyZWVfaW5vZGVzX2NvdW50ID0gY3B1X3RvX2xlMzIoZXh0M19jb3VudF9mcmVlX2lub2RlcyhzYikpOwogCUJVRkZFUl9UUkFDRShzYmgsICJtYXJraW5nIGRpcnR5Iik7CmRpZmYgLS1naXQgYS9mcy9leHQ0L0tjb25maWcgYi9mcy9leHQ0L0tjb25maWcKaW5kZXggZDVjMGVhMi4uOWYyZDQ1ZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9LY29uZmlnCisrKyBiL2ZzL2V4dDQvS2NvbmZpZwpAQCAtMjYsMjAgKzI2LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIEVYVDRERVZfQ09NUEFUCi0JYm9vbCAiRW5hYmxlIGV4dDRkZXYgY29tcGF0aWJpbGl0eSIKLQlkZXBlbmRzIG9uIEVYVDRfRlMKLQloZWxwCi0JICBTdGFydGluZyB3aXRoIDIuNi4yOCwgdGhlIG5hbWUgb2YgdGhlIGV4dDQgZmlsZXN5c3RlbSB3YXMKLQkgIHJlbmFtZWQgZnJvbSBleHQ0ZGV2IHRvIGV4dDQuICBVbmZvcnR1bmF0ZWx5IHRoZXJlIGFyZSBzb21lCi0JICBsZWdhY3kgdXNlcnNwYWNlIHByb2dyYW1zIChzdWNoIGFzIGtsaWJjJ3MgZnN0eXBlKSBoYXZlCi0JICAiZXh0NGRldiIgaGFyZGNvZGVkLgotCi0JICBUbyBlbmFibGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgc28gdGhhdCBzeXN0ZW1zIHRoYXQgYXJlCi0JICBzdGlsbCBleHBlY3RpbmcgdG8gbW91bnQgZXh0NCBmaWxlc3lzdGVtcyB1c2luZyBleHQ0ZGV2LAotCSAgY2hvb3NlIFkgaGVyZS4gICBUaGlzIGZlYXR1cmUgd2lsbCBnbyBhd2F5IGJ5IDIuNi4zMSwgc28KLQkgIHBsZWFzZSBhcnJhbmdlIHRvIGdldCB5b3VyIHVzZXJzcGFjZSBwcm9ncmFtcyBmaXhlZCEKLQogY29uZmlnIEVYVDRfRlNfWEFUVFIKIAlib29sICJFeHQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMiCiAJZGVwZW5kcyBvbiBFWFQ0X0ZTCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IGUyMjdlZWEuLjg4MjU1MTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC02NSw2ICs2NSwxMiBAQAogLyogZGF0YSB0eXBlIGZvciBibG9jayBncm91cCBudW1iZXIgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50IGV4dDRfZ3JvdXBfdDsKIAorLyoKKyAqIEZsYWdzIHVzZWQgaW4gbWJhbGxvYydzIGFsbG9jYXRpb25fY29udGV4dCBmbGFncyBmaWVsZC4gIAorICoKKyAqIEFsc28gdXNlZCB0byBzaG93IHdoYXQncyBnb2luZyBvbiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdoZW4gdGhlCisgKiBmbGFnIGZpZWxkIGlzIGV4cG9ydGVkIHZpYSB0aGUgdHJhY2Vwb3J0IGludGVyZmFjZQorICovCiAKIC8qIHByZWZlciBnb2FsIGFnYWluLiBsZW5ndGggKi8KICNkZWZpbmUgRVhUNF9NQl9ISU5UX01FUkdFCQkweDAwMDEKQEAgLTEyNyw2ICsxMzMsMTYgQEAKIAlpbnQgcGFnZXNfd3JpdHRlbjsKIAlpbnQgcmV0dmFsOwogfTsKKyNkZWZpbmUJRElPX0FJT19VTldSSVRURU4JMHgxCit0eXBlZGVmIHN0cnVjdCBleHQ0X2lvX2VuZCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwkJLyogcGVyLWZpbGUgZmluaXNoZWQgQUlPIGxpc3QgKi8KKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsJCS8qIGZpbGUgYmVpbmcgd3JpdHRlbiB0byAqLworCXVuc2lnbmVkIGludAkJZmxhZzsJCS8qIHVud3JpdHRlbiBvciBub3QgKi8KKwlpbnQJCQllcnJvcjsJCS8qIEkvTyBlcnJvciBjb2RlICovCisJZXh0NF9sYmxrX3QJCW9mZnNldDsJCS8qIG9mZnNldCBpbiB0aGUgZmlsZSAqLworCXNpemVfdAkJCXNpemU7CQkvKiBzaXplIG9mIHRoZSBleHRlbnQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsJCS8qIGRhdGEgd29yayBxdWV1ZSAqLworfSBleHQ0X2lvX2VuZF90OwogCiAvKgogICogU3BlY2lhbCBpbm9kZXMgbnVtYmVycwpAQCAtMzA2LDYgKzMyMiw3IEBACiAjZGVmaW5lIEVYVDRfU1RBVEVfTk9fRVhQQU5ECQkweDAwMDAwMDA4IC8qIE5vIHNwYWNlIGZvciBleHBhbnNpb24gKi8KICNkZWZpbmUgRVhUNF9TVEFURV9EQV9BTExPQ19DTE9TRQkweDAwMDAwMDEwIC8qIEFsbG9jIERBIGJsa3Mgb24gY2xvc2UgKi8KICNkZWZpbmUgRVhUNF9TVEFURV9FWFRfTUlHUkFURQkJMHgwMDAwMDAyMCAvKiBJbm9kZSBpcyBtaWdyYXRpbmcgKi8KKyNkZWZpbmUgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOCTB4MDAwMDAwNDAgLyogbmVlZCBjb252ZXJ0IG9uIGRpbyBkb25lKi8KIAogLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwogc3RydWN0IGV4dDRfbmV3X2dyb3VwX2lucHV0IHsKQEAgLTM0Nyw3ICszNjQsMTYgQEAKIAkvKiBDYWxsIGV4dDRfZGFfdXBkYXRlX3Jlc2VydmVfc3BhY2UoKSBhZnRlciBzdWNjZXNzZnVsbHkgCiAJICAgYWxsb2NhdGluZyB0aGUgYmxvY2tzICovCiAjZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19VUERBVEVfUkVTRVJWRV9TUEFDRQkweDAwMDgKLQorCS8qIGNhbGxlciBpcyBmcm9tIHRoZSBkaXJlY3QgSU8gcGF0aCwgcmVxdWVzdCB0byBjcmVhdGlvbiBvZiBhbgorCXVuaXRpYWxpemVkIGV4dGVudHMgaWYgbm90IGFsbG9jYXRlZCwgc3BsaXQgdGhlIHVuaW5pdGlhbGl6ZWQKKwlleHRlbnQgaWYgYmxvY2tzIGhhcyBiZWVuIHByZWFsbG9jYXRlZCBhbHJlYWR5Ki8KKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0RJTwkJCTB4MDAxMAorI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVAkJCTB4MDAyMAorI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQJCShFWFQ0X0dFVF9CTE9DS1NfRElPfFwKKwkJCQkJIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5JTklUX0VYVCkKKwkvKiBDb252ZXJ0IGV4dGVudCB0byBpbml0aWFsaXplZCBhZnRlciBkaXJlY3QgSU8gY29tcGxldGUgKi8KKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVAkJKEVYVDRfR0VUX0JMT0NLU19DT05WRVJUfFwKKwkJCQkJIEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkKIAogLyoKICAqIGlvY3RsIGNvbW1hbmRzCkBAIC01MDAsOCArNTI2LDggQEAKIHN0YXRpYyBpbmxpbmUgX19sZTMyIGV4dDRfZW5jb2RlX2V4dHJhX3RpbWUoc3RydWN0IHRpbWVzcGVjICp0aW1lKQogewogICAgICAgIHJldHVybiBjcHVfdG9fbGUzMigoc2l6ZW9mKHRpbWUtPnR2X3NlYykgPiA0ID8KLQkJCSAgIHRpbWUtPnR2X3NlYyA+PiAzMiA6IDApIHwKLQkJCSAgICgodGltZS0+dHZfbnNlYyA8PCAyKSAmIEVYVDRfTlNFQ19NQVNLKSk7CisJCQkgICAodGltZS0+dHZfc2VjID4+IDMyKSAmIEVYVDRfRVBPQ0hfTUFTSyA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCh0aW1lLT50dl9uc2VjIDw8IEVYVDRfRVBPQ0hfQklUUykgJiBFWFQ0X05TRUNfTUFTSykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9kZWNvZGVfZXh0cmFfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnRpbWUsIF9fbGUzMiBleHRyYSkKQEAgLTUwOSw3ICs1MzUsNyBAQAogICAgICAgIGlmIChzaXplb2YodGltZS0+dHZfc2VjKSA+IDQpCiAJICAgICAgIHRpbWUtPnR2X3NlYyB8PSAoX191NjQpKGxlMzJfdG9fY3B1KGV4dHJhKSAmIEVYVDRfRVBPQ0hfTUFTSykKIAkJCSAgICAgICA8PCAzMjsKLSAgICAgICB0aW1lLT50dl9uc2VjID0gKGxlMzJfdG9fY3B1KGV4dHJhKSAmIEVYVDRfTlNFQ19NQVNLKSA+PiAyOworICAgICAgIHRpbWUtPnR2X25zZWMgPSAobGUzMl90b19jcHUoZXh0cmEpICYgRVhUNF9OU0VDX01BU0spID4+IEVYVDRfRVBPQ0hfQklUUzsKIH0KIAogI2RlZmluZSBFWFQ0X0lOT0RFX1NFVF9YVElNRSh4dGltZSwgaW5vZGUsIHJhd19pbm9kZSkJCQkgICAgICAgXApAQCAtNjcyLDYgKzY5OCwxMSBAQAogCV9fdTE2IGlfZXh0cmFfaXNpemU7CiAKIAlzcGlubG9ja190IGlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jazsKKworCS8qIGNvbXBsZXRlZCBhc3luYyBESU9zIHRoYXQgbWlnaHQgbmVlZCB1bndyaXR0ZW4gZXh0ZW50cyBoYW5kbGluZyAqLworCXN0cnVjdCBsaXN0X2hlYWQgaV9haW9fZGlvX2NvbXBsZXRlX2xpc3Q7CisJLyogY3VycmVudCBpb19lbmQgc3RydWN0dXJlIGZvciBhc3luYyBESU8gd3JpdGUqLworCWV4dDRfaW9fZW5kX3QgKmN1cl9haW9fZGlvOwogfTsKIAogLyoKQEAgLTcxMyw2ICs3NDQsNyBAQAogI2RlZmluZSBFWFQ0X01PVU5UX1FVT1RBCQkweDgwMDAwIC8qIFNvbWUgcXVvdGEgb3B0aW9uIHNldCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX1VTUlFVT1RBCQkweDEwMDAwMCAvKiAib2xkIiB1c2VyIHF1b3RhICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfR1JQUVVPVEEJCTB4MjAwMDAwIC8qICJvbGQiIGdyb3VwIHF1b3RhICovCisjZGVmaW5lIEVYVDRfTU9VTlRfSk9VUk5BTF9DSEVDS1NVTQkweDgwMDAwMCAvKiBKb3VybmFsIGNoZWNrc3VtcyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0pPVVJOQUxfQVNZTkNfQ09NTUlUCTB4MTAwMDAwMCAvKiBKb3VybmFsIEFzeW5jIENvbW1pdCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0lfVkVSU0lPTiAgICAgICAgICAgIDB4MjAwMDAwMCAvKiBpX3ZlcnNpb24gc3VwcG9ydCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0RFTEFMTE9DCQkweDgwMDAwMDAgLyogRGVsYWxsb2Mgc3VwcG9ydCAqLwpAQCAtOTQyLDE4ICs5NzQsMTEgQEAKIAl1bnNpZ25lZCBpbnQgc19tYl9zdGF0czsKIAl1bnNpZ25lZCBpbnQgc19tYl9vcmRlcjJfcmVxczsKIAl1bnNpZ25lZCBpbnQgc19tYl9ncm91cF9wcmVhbGxvYzsKKwl1bnNpZ25lZCBpbnQgc19tYXhfd3JpdGViYWNrX21iX2J1bXA7CiAJLyogd2hlcmUgbGFzdCBhbGxvY2F0aW9uIHdhcyBkb25lIC0gZm9yIHN0cmVhbSBhbGxvY2F0aW9uICovCiAJdW5zaWduZWQgbG9uZyBzX21iX2xhc3RfZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBzX21iX2xhc3Rfc3RhcnQ7CiAKLQkvKiBoaXN0b3J5IHRvIGRlYnVnIHBvbGljeSAqLwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgKnNfbWJfaGlzdG9yeTsKLQlpbnQgc19tYl9oaXN0b3J5X2N1cjsKLQlpbnQgc19tYl9oaXN0b3J5X21heDsKLQlpbnQgc19tYl9oaXN0b3J5X251bTsKLQlzcGlubG9ja190IHNfbWJfaGlzdG9yeV9sb2NrOwotCWludCBzX21iX2hpc3RvcnlfZmlsdGVyOwotCiAJLyogc3RhdHMgZm9yIGJ1ZGR5IGFsbG9jYXRvciAqLwogCXNwaW5sb2NrX3Qgc19tYl9wYV9sb2NrOwogCWF0b21pY190IHNfYmFsX3JlcXM7CS8qIG51bWJlciBvZiByZXFzIHdpdGggbGVuID4gMSAqLwpAQCAtOTgwLDYgKzEwMDUsOSBAQAogCiAJdW5zaWduZWQgaW50IHNfbG9nX2dyb3Vwc19wZXJfZmxleDsKIAlzdHJ1Y3QgZmxleF9ncm91cHMgKnNfZmxleF9ncm91cHM7CisKKwkvKiB3b3JrcXVldWUgZm9yIGRpbyB1bndyaXR0ZW4gKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZGlvX3Vud3JpdHRlbl93cTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDRfc2JfaW5mbyAqRVhUNF9TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMTM5Nyw3ICsxNDI1LDcgQEAKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKTsKIGV4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKIGV4dGVybiBxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotCitleHRlcm4gaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogLyogaW9jdGwuYyAqLwogZXh0ZXJuIGxvbmcgZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGxvbmcgZXh0NF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKQEAgLTE2OTksNiArMTcyNyw4IEBACiBleHRlcm4gdm9pZCBleHQ0X2V4dF9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LAogCQkJICBsb2ZmX3QgbGVuKTsKK2V4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCisJCQkgIGxvZmZfdCBsZW4pOwogZXh0ZXJuIGludCBleHQ0X2dldF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcywKIAkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaAppbmRleCA2MTY1MmYxLi4yY2E2ODY0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfZXh0ZW50cy5oCisrKyBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIAkJKGxlMTZfdG9fY3B1KGV4dC0+ZWVfbGVuKSAtIEVYVF9JTklUX01BWF9MRU4pKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGV4dDRfZXh0X21hcmtfaW5pdGlhbGl6ZWQoc3RydWN0IGV4dDRfZXh0ZW50ICpleHQpCit7CisJZXh0LT5lZV9sZW4gPSBjcHVfdG9fbGUxNihleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleHQpKTsKK30KKwogZXh0ZXJuIGludCBleHQ0X2V4dF9jYWxjX21ldGFkYXRhX2Ftb3VudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYmxvY2tzKTsKIGV4dGVybiBleHQ0X2ZzYmxrX3QgZXh0X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4KTsKIGV4dGVybiBleHQ0X2ZzYmxrX3QgaWR4X3BibG9jayhzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICopOwpAQCAtMjM1LDcgKzI0MCw3IEBACiAJCQkJIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLAogCQkJCSBzdHJ1Y3QgZXh0NF9leHRlbnQgKik7CiBleHRlcm4gdW5zaWduZWQgaW50IGV4dDRfZXh0X2NoZWNrX292ZXJsYXAoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHQ0X2V4dGVudCAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTsKLWV4dGVybiBpbnQgZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0X3BhdGggKiwgc3RydWN0IGV4dDRfZXh0ZW50ICopOworZXh0ZXJuIGludCBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqLCBzdHJ1Y3QgZXh0NF9leHRlbnQgKiwgaW50KTsKIGV4dGVybiBpbnQgZXh0NF9leHRfd2Fsa19zcGFjZShzdHJ1Y3QgaW5vZGUgKiwgZXh0NF9sYmxrX3QsIGV4dDRfbGJsa190LAogCQkJCQkJCWV4dF9wcmVwYXJlX2NhbGxiYWNrLCB2b2lkICopOwogZXh0ZXJuIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpleHQ0X2V4dF9maW5kX2V4dGVudChzdHJ1Y3QgaW5vZGUgKiwgZXh0NF9sYmxrX3QsCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfamJkMi5oIGIvZnMvZXh0NC9leHQ0X2piZDIuaAppbmRleCAxMzlmYjhjLi5hMjg2NTk4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfamJkMi5oCisrKyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmgKQEAgLTE2MSwxMSArMTYxLDEzIEBACiBoYW5kbGVfdCAqZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuYmxvY2tzKTsKIGludCBfX2V4dDRfam91cm5hbF9zdG9wKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlKTsKIAotI2RlZmluZSBFWFQ0X05PSk9VUk5BTF9IQU5ETEUJKChoYW5kbGVfdCAqKSAweDEpCisjZGVmaW5lIEVYVDRfTk9KT1VSTkFMX01BWF9SRUZfQ09VTlQgKCh1bnNpZ25lZCBsb25nKSA0MDk2KQogCisvKiBOb3RlOiAgRG8gbm90IHVzZSB0aGlzIGZvciBOVUxMIGhhbmRsZXMuICBUaGlzIGlzIG9ubHkgdG8gZGV0ZXJtaW5lIGlmCisgKiBhIHByb3Blcmx5IGFsbG9jYXRlZCBoYW5kbGUgaXMgdXNpbmcgYSBqb3VybmFsIG9yIG5vdC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZV90ICpoYW5kbGUpCiB7Ci0JaWYgKGhhbmRsZSA9PSBFWFQ0X05PSk9VUk5BTF9IQU5ETEUpCisJaWYgKCh1bnNpZ25lZCBsb25nKWhhbmRsZSA8IEVYVDRfTk9KT1VSTkFMX01BWF9SRUZfQ09VTlQpCiAJCXJldHVybiAwOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA3YTM4MzI1Li43MTUyNjRiIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtNzIzLDcgKzcyMyw3IEBACiAgKiBpbnNlcnQgbmV3IGluZGV4IFtAbG9naWNhbDtAcHRyXSBpbnRvIHRoZSBibG9jayBhdCBAY3VycDsKICAqIGNoZWNrIHdoZXJlIHRvIGluc2VydDogYmVmb3JlIEBjdXJwIG9yIGFmdGVyIEBjdXJwCiAgKi8KLXN0YXRpYyBpbnQgZXh0NF9leHRfaW5zZXJ0X2luZGV4KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitpbnQgZXh0NF9leHRfaW5zZXJ0X2luZGV4KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKmN1cnAsCiAJCQkJaW50IGxvZ2ljYWwsIGV4dDRfZnNibGtfdCBwdHIpCiB7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQAogICovCiBpbnQgZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLAotCQkJCXN0cnVjdCBleHQ0X2V4dGVudCAqbmV3ZXh0KQorCQkJCXN0cnVjdCBleHQ0X2V4dGVudCAqbmV3ZXh0LCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKIAlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4LCAqZmV4OwpAQCAtMTYwMiw3ICsxNjAyLDggQEAKIAlCVUdfT04ocGF0aFtkZXB0aF0ucF9oZHIgPT0gTlVMTCk7CiAKIAkvKiB0cnkgdG8gaW5zZXJ0IGJsb2NrIGludG8gZm91bmQgZXh0ZW50IGFuZCByZXR1cm4gKi8KLQlpZiAoZXggJiYgZXh0NF9jYW5fZXh0ZW50c19iZV9tZXJnZWQoaW5vZGUsIGV4LCBuZXdleHQpKSB7CisJaWYgKGV4ICYmIChmbGFnICE9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkKKwkJJiYgZXh0NF9jYW5fZXh0ZW50c19iZV9tZXJnZWQoaW5vZGUsIGV4LCBuZXdleHQpKSB7CiAJCWV4dF9kZWJ1ZygiYXBwZW5kIFslZF0lZCBibG9jayB0byAlZDpbJWRdJWQgKGZyb20gJWxsdSlcbiIsCiAJCQkJZXh0NF9leHRfaXNfdW5pbml0aWFsaXplZChuZXdleHQpLAogCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKG5ld2V4dCksCkBAIC0xNzIyLDcgKzE3MjMsOCBAQAogCiBtZXJnZToKIAkvKiB0cnkgdG8gbWVyZ2UgZXh0ZW50cyB0byB0aGUgcmlnaHQgKi8KLQlleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIG5lYXJleCk7CisJaWYgKGZsYWcgIT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQorCQlleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIG5lYXJleCk7CiAKIAkvKiB0cnkgdG8gbWVyZ2UgZXh0ZW50cyB0byB0aGUgbGVmdCAqLwogCkBAIC0yMzc4LDYgKzIzODAsNyBAQAogCSAqLwogCiAJaWYgKEVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTKSkgeworI2lmIGRlZmluZWQoQUdHUkVTU0lWRV9URVNUKSB8fCBkZWZpbmVkKENIRUNLX0JJTlNFQVJDSCkgfHwgZGVmaW5lZChFWFRFTlRTX1NUQVRTKQogCQlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBmaWxlIGV4dGVudHMgZW5hYmxlZCIpOwogI2lmZGVmIEFHR1JFU1NJVkVfVEVTVAogCQlwcmludGsoIiwgYWdncmVzc2l2ZSB0ZXN0cyIpOwpAQCAtMjM4OSw2ICsyMzkyLDcgQEAKIAkJcHJpbnRrKCIsIHN0YXRzIik7CiAjZW5kaWYKIAkJcHJpbnRrKCJcbiIpOworI2VuZGlmCiAjaWZkZWYgRVhURU5UU19TVEFUUwogCQlzcGluX2xvY2tfaW5pdCgmRVhUNF9TQihzYiktPnNfZXh0X3N0YXRzX2xvY2spOwogCQlFWFQ0X1NCKHNiKS0+c19leHRfbWluID0gMSA8PCAzMDsKQEAgLTI0OTAsNyArMjQ5NCw2IEBACiB9CiAKICNkZWZpbmUgRVhUNF9FWFRfWkVST19MRU4gNwotCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgZXh0NF9leHRfZ2V0X2Jsb2NrcygpIGlmIHNvbWVvbmUgdHJpZXMgdG8gd3JpdGUKICAqIHRvIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50LiBJdCBtYXkgcmVzdWx0IGluIHNwbGl0dGluZyB0aGUgdW5pbml0aWFsaXplZApAQCAtMjU4Myw3ICsyNTg2LDggQEAKIAkJCWV4My0+ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihpYmxvY2spOwogCQkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MywgbmV3YmxvY2spOwogCQkJZXgzLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQpOwotCQkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMpOworCQkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLAorCQkJCQkJCWV4MywgMCk7CiAJCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKIAkJCQllcnIgPSAgZXh0NF9leHRfemVyb291dChpbm9kZSwgJm9yaWdfZXgpOwogCQkJCWlmIChlcnIpCkBAIC0yNjM5LDcgKzI2NDMsNyBAQAogCQlleHQ0X2V4dF9zdG9yZV9wYmxvY2soZXgzLCBuZXdibG9jayArIG1heF9ibG9ja3MpOwogCQlleDMtPmVlX2xlbiA9IGNwdV90b19sZTE2KGFsbG9jYXRlZCAtIG1heF9ibG9ja3MpOwogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgzKTsKLQkJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCBleDMpOworCQllcnIgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsIGV4MywgMCk7CiAJCWlmIChlcnIgPT0gLUVOT1NQQykgewogCQkJZXJyID0gIGV4dDRfZXh0X3plcm9vdXQoaW5vZGUsICZvcmlnX2V4KTsKIAkJCWlmIChlcnIpCkBAIC0yNzU3LDcgKzI3NjEsNyBAQAogCWVyciA9IGV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CiAJZ290byBvdXQ7CiBpbnNlcnQ6Ci0JZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgpOworCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4LCAwKTsKIAlpZiAoZXJyID09IC1FTk9TUEMpIHsKIAkJZXJyID0gIGV4dDRfZXh0X3plcm9vdXQoaW5vZGUsICZvcmlnX2V4KTsKIAkJaWYgKGVycikKQEAgLTI3ODUsNiArMjc4OSwzMzEgQEAKIH0KIAogLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGV4dDRfZXh0X2dldF9ibG9ja3MoKSBmcm9tCisgKiBleHQ0X2dldF9ibG9ja3NfZGlvX3dyaXRlKCkgd2hlbiBESU8gdG8gd3JpdGUKKyAqIHRvIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50LgorICoKKyAqIFdyaXRpbmcgdG8gYW4gdW5pbml0aXplZCBleHRlbnQgbWF5IHJlc3VsdCBpbiBzcGxpdHRpbmcgdGhlIHVuaW5pdGlhbGl6ZWQKKyAqIGV4dGVudCBpbnRvIG11bHRpcGxlIC9pbnRpYWxpemVkIHVuaW50aWFsaXplZCBleHRlbnRzICh1cCB0byB0aHJlZSkKKyAqIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzOgorICogICBhPiBUaGVyZSBpcyBubyBzcGxpdCByZXF1aXJlZDogRW50aXJlIGV4dGVudCBzaG91bGQgYmUgdW5pbml0aWFsaXplZAorICogICBiPiBTcGxpdHMgaW4gdHdvIGV4dGVudHM6IFdyaXRlIGlzIGhhcHBlbmluZyBhdCBlaXRoZXIgZW5kIG9mIHRoZSBleHRlbnQKKyAqICAgYz4gU3BsaXRzIGluIHRocmVlIGV4dGVudHM6IFNvbW9uZSBpcyB3cml0aW5nIGluIG1pZGRsZSBvZiB0aGUgZXh0ZW50CisgKgorICogT25lIG9mIG1vcmUgaW5kZXggYmxvY2tzIG1heWJlIG5lZWRlZCBpZiB0aGUgZXh0ZW50IHRyZWUgZ3JvdyBhZnRlcgorICogdGhlIHVuaW50aWFsaXplZCBleHRlbnQgc3BsaXQuIFRvIHByZXZlbnQgRU5PU1BDIG9jY3VyIGF0IHRoZSBJTworICogY29tcGxldGUsIHdlIG5lZWQgdG8gc3BsaXQgdGhlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGJlZm9yZSBESU8gc3VibWl0CisgKiB0aGUgSU8uIFRoZSB1bmluaXRpbGl6ZWQgZXh0ZW50IGNhbGxlZCBhdCB0aGlzIHRpbWUgd2lsbCBiZSBzcGxpdAorICogaW50byB0aHJlZSB1bmluaXRpYWxpemVkIGV4dGVudChhdCBtb3N0KS4gQWZ0ZXIgSU8gY29tcGxldGUsIHRoZSBwYXJ0CisgKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqIHZpYSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoKS4KKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IHRvIGJlIHdyaXR0ZW4gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoLAorCQkJCQlleHQ0X2xibGtfdCBpYmxvY2ssCisJCQkJCXVuc2lnbmVkIGludCBtYXhfYmxvY2tzLAorCQkJCQlpbnQgZmxhZ3MpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleCwgbmV3ZXgsIG9yaWdfZXg7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleDEgPSBOVUxMOworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXgyID0gTlVMTDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4MyA9IE5VTEw7CisJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CisJZXh0NF9sYmxrX3QgZWVfYmxvY2s7CisJdW5zaWduZWQgaW50IGFsbG9jYXRlZCwgZWVfbGVuLCBkZXB0aDsKKwlleHQ0X2ZzYmxrX3QgbmV3YmxvY2s7CisJaW50IGVyciA9IDA7CisKKwlleHRfZGVidWcoImV4dDRfc3BsaXRfdW53cml0dGVuX2V4dGVudHM6IGlub2RlICVsdSwiCisJCSAgImlibG9jayAlbGx1LCBtYXhfYmxvY2tzICV1XG4iLCBpbm9kZS0+aV9pbm8sCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylpYmxvY2ssIG1heF9ibG9ja3MpOworCWRlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwllaCA9IHBhdGhbZGVwdGhdLnBfaGRyOworCWV4ID0gcGF0aFtkZXB0aF0ucF9leHQ7CisJZWVfYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spOworCWVlX2xlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKKwlhbGxvY2F0ZWQgPSBlZV9sZW4gLSAoaWJsb2NrIC0gZWVfYmxvY2spOworCW5ld2Jsb2NrID0gaWJsb2NrIC0gZWVfYmxvY2sgKyBleHRfcGJsb2NrKGV4KTsKKwlleDIgPSBleDsKKwlvcmlnX2V4LmVlX2Jsb2NrID0gZXgtPmVlX2Jsb2NrOworCW9yaWdfZXguZWVfbGVuICAgPSBjcHVfdG9fbGUxNihlZV9sZW4pOworCWV4dDRfZXh0X3N0b3JlX3BibG9jaygmb3JpZ19leCwgZXh0X3BibG9jayhleCkpOworCisJLyoKKyAJICogSWYgdGhlIHVuaW5pdGlhbGl6ZWQgZXh0ZW50IGJlZ2lucyBhdCB0aGUgc2FtZSBsb2dpY2FsCisgCSAqIGJsb2NrIHdoZXJlIHRoZSB3cml0ZSBiZWdpbnMsIGFuZCB0aGUgd3JpdGUgY29tcGxldGVseQorIAkgKiBjb3ZlcnMgdGhlIGV4dGVudCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIHNwbGl0IGl0LgorIAkgKi8KKwlpZiAoKGlibG9jayA9PSBlZV9ibG9jaykgJiYgKGFsbG9jYXRlZCA8PSBtYXhfYmxvY2tzKSkKKwkJcmV0dXJuIGFsbG9jYXRlZDsKKworCWVyciA9IGV4dDRfZXh0X2dldF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwkvKiBleDE6IGVlX2Jsb2NrIHRvIGlibG9jayAtIDEgOiB1bmluaXRpYWxpemVkICovCisJaWYgKGlibG9jayA+IGVlX2Jsb2NrKSB7CisJCWV4MSA9IGV4OworCQlleDEtPmVlX2xlbiA9IGNwdV90b19sZTE2KGlibG9jayAtIGVlX2Jsb2NrKTsKKwkJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4MSk7CisJCWV4MiA9ICZuZXdleDsKKwl9CisJLyoKKwkgKiBmb3Igc2FuaXR5LCB1cGRhdGUgdGhlIGxlbmd0aCBvZiB0aGUgZXgyIGV4dGVudCBiZWZvcmUKKwkgKiB3ZSBpbnNlcnQgZXgzLCBpZiBleDEgaXMgTlVMTC4gVGhpcyBpcyB0byBhdm9pZCB0ZW1wb3JhcnkKKwkgKiBvdmVybGFwIG9mIGJsb2Nrcy4KKwkgKi8KKwlpZiAoIWV4MSAmJiBhbGxvY2F0ZWQgPiBtYXhfYmxvY2tzKQorCQlleDItPmVlX2xlbiA9IGNwdV90b19sZTE2KG1heF9ibG9ja3MpOworCS8qIGV4MzogdG8gZWVfYmxvY2sgKyBlZV9sZW4gOiB1bmluaXRpYWxpc2VkICovCisJaWYgKGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpIHsKKwkJdW5zaWduZWQgaW50IG5ld2RlcHRoOworCQlleDMgPSAmbmV3ZXg7CisJCWV4My0+ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihpYmxvY2sgKyBtYXhfYmxvY2tzKTsKKwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MywgbmV3YmxvY2sgKyBtYXhfYmxvY2tzKTsKKwkJZXgzLT5lZV9sZW4gPSBjcHVfdG9fbGUxNihhbGxvY2F0ZWQgLSBtYXhfYmxvY2tzKTsKKwkJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4Myk7CisJCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgZXgzLCBmbGFncyk7CisJCWlmIChlcnIgPT0gLUVOT1NQQykgeworCQkJZXJyID0gIGV4dDRfZXh0X3plcm9vdXQoaW5vZGUsICZvcmlnX2V4KTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBmaXhfZXh0ZW50X2xlbjsKKwkJCS8qIHVwZGF0ZSB0aGUgZXh0ZW50IGxlbmd0aCBhbmQgbWFyayBhcyBpbml0aWFsaXplZCAqLworCQkJZXgtPmVlX2Jsb2NrID0gb3JpZ19leC5lZV9ibG9jazsKKwkJCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCQkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJCQlleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCQkJLyogemVyb2VkIHRoZSBmdWxsIGV4dGVudCAqLworCQkJLyogYmxvY2tzIGF2YWlsYWJsZSBmcm9tIGlibG9jayAqLworCQkJcmV0dXJuIGFsbG9jYXRlZDsKKworCQl9IGVsc2UgaWYgKGVycikKKwkJCWdvdG8gZml4X2V4dGVudF9sZW47CisJCS8qCisJCSAqIFRoZSBkZXB0aCwgYW5kIGhlbmNlIGVoICYgZXggbWlnaHQgY2hhbmdlCisJCSAqIGFzIHBhcnQgb2YgdGhlIGluc2VydCBhYm92ZS4KKwkJICovCisJCW5ld2RlcHRoID0gZXh0X2RlcHRoKGlub2RlKTsKKwkJLyoKKwkJICogdXBkYXRlIHRoZSBleHRlbnQgbGVuZ3RoIGFmdGVyIHN1Y2Nlc3NmdWwgaW5zZXJ0IG9mIHRoZQorCQkgKiBzcGxpdCBleHRlbnQKKwkJICovCisJCW9yaWdfZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoZWVfbGVuIC0KKwkJCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4MykpOworCQlkZXB0aCA9IG5ld2RlcHRoOworCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CisJCXBhdGggPSBleHQ0X2V4dF9maW5kX2V4dGVudChpbm9kZSwgaWJsb2NrLCBwYXRoKTsKKwkJaWYgKElTX0VSUihwYXRoKSkgeworCQkJZXJyID0gUFRSX0VSUihwYXRoKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CisJCWV4ID0gcGF0aFtkZXB0aF0ucF9leHQ7CisJCWlmIChleDIgIT0gJm5ld2V4KQorCQkJZXgyID0gZXg7CisKKwkJZXJyID0gZXh0NF9leHRfZ2V0X2FjY2VzcyhoYW5kbGUsIGlub2RlLCBwYXRoICsgZGVwdGgpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJYWxsb2NhdGVkID0gbWF4X2Jsb2NrczsKKwl9CisJLyoKKwkgKiBJZiB0aGVyZSB3YXMgYSBjaGFuZ2Ugb2YgZGVwdGggYXMgcGFydCBvZiB0aGUKKwkgKiBpbnNlcnRpb24gb2YgZXgzIGFib3ZlLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbGVuZ3RoCisJICogb2YgdGhlIGV4MSBleHRlbnQgYWdhaW4gaGVyZQorCSAqLworCWlmIChleDEgJiYgZXgxICE9IGV4KSB7CisJCWV4MSA9IGV4OworCQlleDEtPmVlX2xlbiA9IGNwdV90b19sZTE2KGlibG9jayAtIGVlX2Jsb2NrKTsKKwkJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKGV4MSk7CisJCWV4MiA9ICZuZXdleDsKKwl9CisJLyoKKwkgKiBleDI6IGlibG9jayB0byBpYmxvY2sgKyBtYXhibG9ja3MtMSA6IHRvIGJlIGRpcmVjdCBJTyB3cml0dGVuLAorCSAqIHVuaW5pdGlhbGlzZWQgc3RpbGwuCisJICovCisJZXgyLT5lZV9ibG9jayA9IGNwdV90b19sZTMyKGlibG9jayk7CisJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgbmV3YmxvY2spOworCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkKTsKKwlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoZXgyKTsKKwlpZiAoZXgyICE9IGV4KQorCQlnb3RvIGluc2VydDsKKwkvKiBNYXJrIG1vZGlmaWVkIGV4dGVudCBhcyBkaXJ0eSAqLworCWVyciA9IGV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJZXh0X2RlYnVnKCJvdXQgaGVyZVxuIik7CisJZ290byBvdXQ7CitpbnNlcnQ6CisJZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgsIGZsYWdzKTsKKwlpZiAoZXJyID09IC1FTk9TUEMpIHsKKwkJZXJyID0gIGV4dDRfZXh0X3plcm9vdXQoaW5vZGUsICZvcmlnX2V4KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZml4X2V4dGVudF9sZW47CisJCS8qIHVwZGF0ZSB0aGUgZXh0ZW50IGxlbmd0aCBhbmQgbWFyayBhcyBpbml0aWFsaXplZCAqLworCQlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCQlleC0+ZWVfbGVuICAgPSBvcmlnX2V4LmVlX2xlbjsKKwkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBleHRfcGJsb2NrKCZvcmlnX2V4KSk7CisJCWV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CisJCS8qIHplcm8gb3V0IHRoZSBmaXJzdCBoYWxmICovCisJCXJldHVybiBhbGxvY2F0ZWQ7CisJfSBlbHNlIGlmIChlcnIpCisJCWdvdG8gZml4X2V4dGVudF9sZW47CitvdXQ6CisJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKKwlyZXR1cm4gZXJyID8gZXJyIDogYWxsb2NhdGVkOworCitmaXhfZXh0ZW50X2xlbjoKKwlleC0+ZWVfYmxvY2sgPSBvcmlnX2V4LmVlX2Jsb2NrOworCWV4LT5lZV9sZW4gICA9IG9yaWdfZXguZWVfbGVuOworCWV4dDRfZXh0X3N0b3JlX3BibG9jayhleCwgZXh0X3BibG9jaygmb3JpZ19leCkpOworCWV4dDRfZXh0X21hcmtfdW5pbml0aWFsaXplZChleCk7CisJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlyZXR1cm4gZXJyOworfQorc3RhdGljIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoKQoreworCXN0cnVjdCBleHQ0X2V4dGVudCAqZXg7CisJc3RydWN0IGV4dDRfZXh0ZW50X2hlYWRlciAqZWg7CisJaW50IGRlcHRoOworCWludCBlcnIgPSAwOworCWludCByZXQgPSAwOworCisJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCWVoID0gcGF0aFtkZXB0aF0ucF9oZHI7CisJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKKworCWVyciA9IGV4dDRfZXh0X2dldF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwkvKiBmaXJzdCBtYXJrIHRoZSBleHRlbnQgYXMgaW5pdGlhbGl6ZWQgKi8KKwlleHQ0X2V4dF9tYXJrX2luaXRpYWxpemVkKGV4KTsKKworCS8qCisJICogV2UgaGF2ZSB0byBzZWUgaWYgaXQgY2FuIGJlIG1lcmdlZCB3aXRoIHRoZSBleHRlbnQKKwkgKiBvbiB0aGUgbGVmdC4KKwkgKi8KKwlpZiAoZXggPiBFWFRfRklSU1RfRVhURU5UKGVoKSkgeworCQkvKgorCQkgKiBUbyBtZXJnZSBsZWZ0LCBwYXNzICJleCAtIDEiIHRvIHRyeV90b19tZXJnZSgpLAorCQkgKiBzaW5jZSBpdCBtZXJnZXMgdG93YXJkcyByaWdodCBfb25seV8uCisJCSAqLworCQlyZXQgPSBleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIGV4IC0gMSk7CisJCWlmIChyZXQpIHsKKwkJCWVyciA9IGV4dDRfZXh0X2NvcnJlY3RfaW5kZXhlcyhoYW5kbGUsIGlub2RlLCBwYXRoKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisJCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CisJCQlleC0tOworCQl9CisJfQorCS8qCisJICogVHJ5IHRvIE1lcmdlIHRvd2FyZHMgcmlnaHQuCisJICovCisJcmV0ID0gZXh0NF9leHRfdHJ5X3RvX21lcmdlKGlub2RlLCBwYXRoLCBleCk7CisJaWYgKHJldCkgeworCQllcnIgPSBleHQ0X2V4dF9jb3JyZWN0X2luZGV4ZXMoaGFuZGxlLCBpbm9kZSwgcGF0aCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJZGVwdGggPSBleHRfZGVwdGgoaW5vZGUpOworCX0KKwkvKiBNYXJrIG1vZGlmaWVkIGV4dGVudCBhcyBkaXJ0eSAqLworCWVyciA9IGV4dDRfZXh0X2RpcnR5KGhhbmRsZSwgaW5vZGUsIHBhdGggKyBkZXB0aCk7CitvdXQ6CisJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitleHQ0X2V4dF9oYW5kbGVfdW5pbml0aWFsaXplZF9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlleHQ0X2xibGtfdCBpYmxvY2ssIHVuc2lnbmVkIGludCBtYXhfYmxvY2tzLAorCQkJc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsIGludCBmbGFncywKKwkJCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LAorCQkJZXh0NF9mc2Jsa190IG5ld2Jsb2NrKQoreworCWludCByZXQgPSAwOworCWludCBlcnIgPSAwOworCWV4dDRfaW9fZW5kX3QgKmlvID0gRVhUNF9JKGlub2RlKS0+Y3VyX2Fpb19kaW87CisKKwlleHRfZGVidWcoImV4dDRfZXh0X2hhbmRsZV91bmluaXRpYWxpemVkX2V4dGVudHM6IGlub2RlICVsdSwgbG9naWNhbCIKKwkJICAiYmxvY2sgJWxsdSwgbWF4X2Jsb2NrcyAldSwgZmxhZ3MgJWQsIGFsbG9jYXRlZCAldSIsCisJCSAgaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZyBsb25nKWlibG9jaywgbWF4X2Jsb2NrcywKKwkJICBmbGFncywgYWxsb2NhdGVkKTsKKwlleHQ0X2V4dF9zaG93X2xlYWYoaW5vZGUsIHBhdGgpOworCisJLyogRElPIGdldF9ibG9jaygpIGJlZm9yZSBzdWJtaXQgdGhlIElPLCBzcGxpdCB0aGUgZXh0ZW50ICovCisJaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkgeworCQlyZXQgPSBleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwKKwkJCQkJCWlub2RlLCBwYXRoLCBpYmxvY2ssCisJCQkJCQltYXhfYmxvY2tzLCBmbGFncyk7CisJCS8qCisJCSAqIEZsYWcgdGhlIGlub2RlKG5vbiBhaW8gY2FzZSkgb3IgZW5kX2lvIHN0cnVjdCAoYWlvIGNhc2UpCisJCSAqIHRoYXQgdGhpcyBJTyBuZWVkcyB0byBjb252ZXJ0aW9uIHRvIHdyaXR0ZW4gd2hlbiBJTyBpcworCQkgKiBjb21wbGV0ZWQKKwkJICovCisJCWlmIChpbykKKwkJCWlvLT5mbGFnID0gRElPX0FJT19VTldSSVRURU47CisJCWVsc2UKKwkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOworCQlnb3RvIG91dDsKKwl9CisJLyogYXN5bmMgRElPIGVuZF9pbyBjb21wbGV0ZSwgY29udmVydCB0aGUgZmlsbGVkIGV4dGVudCB0byB3cml0dGVuICovCisJaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpIHsKKwkJcmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2RpbyhoYW5kbGUsIGlub2RlLAorCQkJCQkJCXBhdGgpOworCQlnb3RvIG91dDI7CisJfQorCS8qIGJ1ZmZlcmVkIElPIGNhc2UgKi8KKwkvKgorCSAqIHJlcGVhdCBmYWxsb2NhdGUgY3JlYXRpb24gcmVxdWVzdAorCSAqIHdlIGFscmVhZHkgaGF2ZSBhbiB1bndyaXR0ZW4gZXh0ZW50CisJICovCisJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpCisJCWdvdG8gbWFwX291dDsKKworCS8qIGJ1ZmZlcmVkIFJFQUQgb3IgYnVmZmVyZWQgd3JpdGVfYmVnaW4oKSBsb29rdXAgKi8KKwlpZiAoKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX0NSRUFURSkgPT0gMCkgeworCQkvKgorCQkgKiBXZSBoYXZlIGJsb2NrcyByZXNlcnZlZCBhbHJlYWR5LiAgV2UKKwkJICogcmV0dXJuIGFsbG9jYXRlZCBibG9ja3Mgc28gdGhhdCBkZWxhbGxvYworCQkgKiB3b24ndCBkbyBibG9jayByZXNlcnZhdGlvbiBmb3IgdXMuICBCdXQKKwkJICogdGhlIGJ1ZmZlciBoZWFkIHdpbGwgYmUgdW5tYXBwZWQgc28gdGhhdAorCQkgKiBhIHJlYWQgZnJvbSB0aGUgYmxvY2sgcmV0dXJucyAwcy4KKwkJICovCisJCXNldF9idWZmZXJfdW53cml0dGVuKGJoX3Jlc3VsdCk7CisJCWdvdG8gb3V0MTsKKwl9CisKKwkvKiBidWZmZXJlZCB3cml0ZSwgd3JpdGVwYWdlIHRpbWUsIGNvbnZlcnQqLworCXJldCA9IGV4dDRfZXh0X2NvbnZlcnRfdG9faW5pdGlhbGl6ZWQoaGFuZGxlLCBpbm9kZSwKKwkJCQkJCXBhdGgsIGlibG9jaywKKwkJCQkJCW1heF9ibG9ja3MpOworb3V0OgorCWlmIChyZXQgPD0gMCkgeworCQllcnIgPSByZXQ7CisJCWdvdG8gb3V0MjsKKwl9IGVsc2UKKwkJYWxsb2NhdGVkID0gcmV0OworCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CittYXBfb3V0OgorCXNldF9idWZmZXJfbWFwcGVkKGJoX3Jlc3VsdCk7CitvdXQxOgorCWlmIChhbGxvY2F0ZWQgPiBtYXhfYmxvY2tzKQorCQlhbGxvY2F0ZWQgPSBtYXhfYmxvY2tzOworCWV4dDRfZXh0X3Nob3dfbGVhZihpbm9kZSwgcGF0aCk7CisJYmhfcmVzdWx0LT5iX2JkZXYgPSBpbm9kZS0+aV9zYi0+c19iZGV2OworCWJoX3Jlc3VsdC0+Yl9ibG9ja25yID0gbmV3YmxvY2s7CitvdXQyOgorCWlmIChwYXRoKSB7CisJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKKwkJa2ZyZWUocGF0aCk7CisJfQorCXJldHVybiBlcnIgPyBlcnIgOiBhbGxvY2F0ZWQ7Cit9CisvKgogICogQmxvY2sgYWxsb2NhdGlvbi9tYXAvcHJlYWxsb2NhdGlvbiByb3V0aW5lIGZvciBleHRlbnRzIGJhc2VkIGZpbGVzCiAgKgogICoKQEAgLTI4MTQsNiArMzE0Myw3IEBACiAJaW50IGVyciA9IDAsIGRlcHRoLCByZXQsIGNhY2hlX3R5cGU7CiAJdW5zaWduZWQgaW50IGFsbG9jYXRlZCA9IDA7CiAJc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0IGFyOworCWV4dDRfaW9fZW5kX3QgKmlvID0gRVhUNF9JKGlub2RlKS0+Y3VyX2Fpb19kaW87CiAKIAlfX2NsZWFyX2JpdChCSF9OZXcsICZiaF9yZXN1bHQtPmJfc3RhdGUpOwogCWV4dF9kZWJ1ZygiYmxvY2tzICV1LyV1IHJlcXVlc3RlZCBmb3IgaW5vZGUgJWx1XG4iLApAQCAtMjg4OSwzMyArMzIxOSwxMCBAQAogCQkJCQkJCUVYVDRfRVhUX0NBQ0hFX0VYVEVOVCk7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCkKLQkJCQlnb3RvIG91dDsKLQkJCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFKSA9PSAwKSB7Ci0JCQkJaWYgKGFsbG9jYXRlZCA+IG1heF9ibG9ja3MpCi0JCQkJCWFsbG9jYXRlZCA9IG1heF9ibG9ja3M7Ci0JCQkJLyoKLQkJCQkgKiBXZSBoYXZlIGJsb2NrcyByZXNlcnZlZCBhbHJlYWR5LiAgV2UKLQkJCQkgKiByZXR1cm4gYWxsb2NhdGVkIGJsb2NrcyBzbyB0aGF0IGRlbGFsbG9jCi0JCQkJICogd29uJ3QgZG8gYmxvY2sgcmVzZXJ2YXRpb24gZm9yIHVzLiAgQnV0Ci0JCQkJICogdGhlIGJ1ZmZlciBoZWFkIHdpbGwgYmUgdW5tYXBwZWQgc28gdGhhdAotCQkJCSAqIGEgcmVhZCBmcm9tIHRoZSBibG9jayByZXR1cm5zIDBzLgotCQkJCSAqLwotCQkJCXNldF9idWZmZXJfdW53cml0dGVuKGJoX3Jlc3VsdCk7Ci0JCQkJYmhfcmVzdWx0LT5iX2JkZXYgPSBpbm9kZS0+aV9zYi0+c19iZGV2OwotCQkJCWJoX3Jlc3VsdC0+Yl9ibG9ja25yID0gbmV3YmxvY2s7Ci0JCQkJZ290byBvdXQyOwotCQkJfQotCi0JCQlyZXQgPSBleHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZSwgaW5vZGUsCi0JCQkJCQkJCXBhdGgsIGlibG9jaywKLQkJCQkJCQkJbWF4X2Jsb2Nrcyk7Ci0JCQlpZiAocmV0IDw9IDApIHsKLQkJCQllcnIgPSByZXQ7Ci0JCQkJZ290byBvdXQyOwotCQkJfSBlbHNlCi0JCQkJYWxsb2NhdGVkID0gcmV0OwotCQkJZ290byBvdXRuZXc7CisJCQlyZXQgPSBleHQ0X2V4dF9oYW5kbGVfdW5pbml0aWFsaXplZF9leHRlbnRzKGhhbmRsZSwKKwkJCQkJaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgcGF0aCwKKwkJCQkJZmxhZ3MsIGFsbG9jYXRlZCwgYmhfcmVzdWx0LCBuZXdibG9jayk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC0yOTg2LDkgKzMyOTMsMjcgQEAKIAkvKiB0cnkgdG8gaW5zZXJ0IG5ldyBleHRlbnQgaW50byBmb3VuZCBsZWFmIGFuZCByZXR1cm4gKi8KIAlleHQ0X2V4dF9zdG9yZV9wYmxvY2soJm5ld2V4LCBuZXdibG9jayk7CiAJbmV3ZXguZWVfbGVuID0gY3B1X3RvX2xlMTYoYXIubGVuKTsKLQlpZiAoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfVU5JTklUX0VYVCkgIC8qIE1hcmsgdW5pbml0aWFsaXplZCAqLworCS8qIE1hcmsgdW5pbml0aWFsaXplZCAqLworCWlmIChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19VTklOSVRfRVhUKXsKIAkJZXh0NF9leHRfbWFya191bmluaXRpYWxpemVkKCZuZXdleCk7Ci0JZXJyID0gZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIGlub2RlLCBwYXRoLCAmbmV3ZXgpOworCQkvKgorCQkgKiBpb19lbmQgc3RydWN0dXJlIHdhcyBjcmVhdGVkIGZvciBldmVyeSBhc3luYworCQkgKiBkaXJlY3QgSU8gd3JpdGUgdG8gdGhlIG1pZGRsZSBvZiB0aGUgZmlsZS4KKwkJICogVG8gYXZvaWQgdW5lY2Vzc2FyeSBjb252ZXJ0aW9uIGZvciBldmVyeSBhaW8gZGlvIHJld3JpdGUKKwkJICogdG8gdGhlIG1pZCBvZiBmaWxlLCBoZXJlIHdlIGZsYWcgdGhlIElPIHRoYXQgaXMgcmVhbGx5CisJCSAqIG5lZWQgdGhlIGNvbnZlcnRpb24uCisJCSAqIEZvciBub24gYXN5Y24gZGlyZWN0IElPIGNhc2UsIGZsYWcgdGhlIGlub2RlIHN0YXRlCisJCSAqIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIGNvbnZlcnRpb24gd2hlbiBJTyBpcyBkb25lLgorCQkgKi8KKwkJaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkgeworCQkJaWYgKGlvKQorCQkJCWlvLT5mbGFnID0gRElPX0FJT19VTldSSVRURU47CisJCQllbHNlCisJCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PQorCQkJCQlFWFQ0X1NUQVRFX0RJT19VTldSSVRURU47OworCQl9CisJfQorCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4LCBmbGFncyk7CiAJaWYgKGVycikgewogCQkvKiBmcmVlIGRhdGEgYmxvY2tzIHdlIGp1c3QgYWxsb2NhdGVkICovCiAJCS8qIG5vdCBhIGdvb2QgaWRlYSB0byBjYWxsIGRpc2NhcmQgaGVyZSBkaXJlY3RseSwKQEAgLTMwMDIsNyArMzMyNyw2IEBACiAJLyogcHJldmlvdXMgcm91dGluZSBjb3VsZCB1c2UgYmxvY2sgd2UgYWxsb2NhdGVkICovCiAJbmV3YmxvY2sgPSBleHRfcGJsb2NrKCZuZXdleCk7CiAJYWxsb2NhdGVkID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oJm5ld2V4KTsKLW91dG5ldzoKIAlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOwogCiAJLyogQ2FjaGUgb25seSB3aGVuIGl0IGlzIF9ub3RfIGFuIHVuaW5pdGlhbGl6ZWQgZXh0ZW50ICovCkBAIC0zMjAxLDYgKzM1MjUsNjQgQEAKIH0KIAogLyoKKyAqIFRoaXMgZnVuY3Rpb24gY29udmVydCBhIHJhbmdlIG9mIGJsb2NrcyB0byB3cml0dGVuIGV4dGVudHMKKyAqIFRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIHBhc3MgdGhlIHN0YXJ0IG9mZnNldCBhbmQgdGhlIHNpemUuCisgKiBhbGwgdW53cml0dGVuIGV4dGVudHMgd2l0aGluIHRoaXMgcmFuZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQgdG8KKyAqIHdyaXR0ZW4gZXh0ZW50cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QgSU8gZW5kIGlvIGNhbGwgYmFjaworICogZnVuY3Rpb24sIHRvIGNvbnZlcnQgdGhlIGZhbGxvY2F0ZWQgZXh0ZW50cyBhZnRlciBJTyBpcyBjb21wbGV0ZWQuCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgICBsb2ZmX3QgbGVuKQoreworCWhhbmRsZV90ICpoYW5kbGU7CisJZXh0NF9sYmxrX3QgYmxvY2s7CisJdW5zaWduZWQgaW50IG1heF9ibG9ja3M7CisJaW50IHJldCA9IDA7CisJaW50IHJldDIgPSAwOworCXN0cnVjdCBidWZmZXJfaGVhZCBtYXBfYmg7CisJdW5zaWduZWQgaW50IGNyZWRpdHMsIGJsa2JpdHMgPSBpbm9kZS0+aV9ibGtiaXRzOworCisJYmxvY2sgPSBvZmZzZXQgPj4gYmxrYml0czsKKwkvKgorCSAqIFdlIGNhbid0IGp1c3QgY29udmVydCBsZW4gdG8gbWF4X2Jsb2NrcyBiZWNhdXNlCisJICogSWYgYmxvY2tzaXplID0gNDA5NiBvZmZzZXQgPSAzMDcyIGFuZCBsZW4gPSAyMDQ4CisJICovCisJbWF4X2Jsb2NrcyA9IChFWFQ0X0JMT0NLX0FMSUdOKGxlbiArIG9mZnNldCwgYmxrYml0cykgPj4gYmxrYml0cykKKwkJCQkJCQktIGJsb2NrOworCS8qCisJICogY3JlZGl0cyB0byBpbnNlcnQgMSBleHRlbnQgaW50byBleHRlbnQgdHJlZQorCSAqLworCWNyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7CisJd2hpbGUgKHJldCA+PSAwICYmIHJldCA8IG1heF9ibG9ja3MpIHsKKwkJYmxvY2sgPSBibG9jayArIHJldDsKKwkJbWF4X2Jsb2NrcyA9IG1heF9ibG9ja3MgLSByZXQ7CisJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgY3JlZGl0cyk7CisJCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQkJYnJlYWs7CisJCX0KKwkJbWFwX2JoLmJfc3RhdGUgPSAwOworCQlyZXQgPSBleHQ0X2dldF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmxvY2ssCisJCQkJICAgICAgbWF4X2Jsb2NrcywgJm1hcF9iaCwKKwkJCQkgICAgICBFWFQ0X0dFVF9CTE9DS1NfRElPX0NPTlZFUlRfRVhUKTsKKwkJaWYgKHJldCA8PSAwKSB7CisJCQlXQVJOX09OKHJldCA8PSAwKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGV4dDRfZXh0X2dldF9ibG9ja3MgIgorCQkJCSAgICAicmV0dXJuZWQgZXJyb3IgaW5vZGUjJWx1LCBibG9jaz0ldSwgIgorCQkJCSAgICAibWF4X2Jsb2Nrcz0ldSIsIF9fZnVuY19fLAorCQkJCSAgICBpbm9kZS0+aV9pbm8sIGJsb2NrLCBtYXhfYmxvY2tzKTsKKwkJfQorCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CisJCXJldDIgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworCQlpZiAocmV0IDw9IDAgfHwgcmV0MiApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldCA+IDAgPyByZXQyIDogcmV0OworfQorLyoKICAqIENhbGxiYWNrIGZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCBleHRlbnQgdG8gZ2F0aGVyIEZJRU1BUCBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIGludCBleHQ0X2V4dF9maWVtYXBfY2Ioc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfZXh0X3BhdGggKnBhdGgsCmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jCmluZGV4IDVjYTNlY2EuLjk2MzA1ODMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZmlsZS5jCisrKyBiL2ZzL2V4dDQvZmlsZS5jCkBAIC04MSw3ICs4MSw3IEBACiAJcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV4dDRfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGV4dDRfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSAgID0gZXh0NF9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IDA3NDc1NzQuLjJiMTUzMTIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYworKysgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICAqCiAgKiBXaGF0IHdlIGRvIGlzIGp1c3Qga2ljayBvZmYgYSBjb21taXQgYW5kIHdhaXQgb24gaXQuICBUaGlzIHdpbGwgc25hcHNob3QgdGhlCiAgKiBpbm9kZSB0byBkaXNrLgorICoKKyAqIGlfbXV0ZXggbG9jayBpcyBoZWxkIHdoZW4gZW50ZXJpbmcgYW5kIGV4aXRpbmcgdGhpcyBmdW5jdGlvbgogICovCiAKIGludCBleHQ0X3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCkBAIC01Niw2ICs1OCw5IEBACiAKIAl0cmFjZV9leHQ0X3N5bmNfZmlsZShmaWxlLCBkZW50cnksIGRhdGFzeW5jKTsKIAorCXJldCA9IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKGlub2RlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CiAJLyoKIAkgKiBkYXRhPXdyaXRlYmFjazoKIAkgKiAgVGhlIGNhbGxlcidzIGZpbGVtYXBfZmRhdGF3cml0ZSgpL3dhaXQgd2lsbCBzeW5jIHRoZSBkYXRhLgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IDA2NDc0NmYuLjJjOGNhYTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYworKysgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKQEAgLTE5Miw3ICsxOTMsNyBAQAogICogc28gYmVmb3JlIHdlIGNhbGwgaGVyZSBldmVyeXRoaW5nIG11c3QgYmUgY29uc2lzdGVudGx5IGRpcnRpZWQgYWdhaW5zdAogICogdGhpcyB0cmFuc2FjdGlvbi4KICAqLwotIGludCBleHQ0X3RydW5jYXRlX3Jlc3RhcnRfdHJhbnMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKK2ludCBleHQ0X3RydW5jYXRlX3Jlc3RhcnRfdHJhbnMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgaW50IG5ibG9ja3MpCiB7CiAJaW50IHJldDsKQEAgLTIwOCw2ICsyMDksNyBAQAogCXVwX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKIAlyZXQgPSBleHQ0X2pvdXJuYWxfcmVzdGFydChoYW5kbGUsIGJsb2Nrc19mb3JfdHJ1bmNhdGUoaW5vZGUpKTsKIAlkb3duX3dyaXRlKCZFWFQ0X0koaW5vZGUpLT5pX2RhdGFfc2VtKTsKKwlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTExNDUsNiArMTE0Nyw2NCBAQAogfQogCiAvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgY29udGlndW91cyBkaXJ0eSBwYWdlcyBpbiBhIGdpdmVuIGlub2RlCisgKiBzdGFydGluZyBhdCBwYWdlIGZyYW1lIGlkeC4KKyAqLworc3RhdGljIHBnb2ZmX3QgZXh0NF9udW1fZGlydHlfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpZHgsCisJCQkJICAgIHVuc2lnbmVkIGludCBtYXhfcGFnZXMpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCXBnb2ZmX3QJaW5kZXg7CisJc3RydWN0IHBhZ2V2ZWMgcHZlYzsKKwlwZ29mZl90IG51bSA9IDA7CisJaW50IGksIG5yX3BhZ2VzLCBkb25lID0gMDsKKworCWlmIChtYXhfcGFnZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisJcGFnZXZlY19pbml0KCZwdmVjLCAwKTsKKwl3aGlsZSAoIWRvbmUpIHsKKwkJaW5kZXggPSBpZHg7CisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXBfdGFnKCZwdmVjLCBtYXBwaW5nLCAmaW5kZXgsCisJCQkJCSAgICAgIFBBR0VDQUNIRV9UQUdfRElSVFksCisJCQkJCSAgICAgIChwZ29mZl90KVBBR0VWRUNfU0laRSk7CisJCWlmIChucl9wYWdlcyA9PSAwKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07CisJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJaWYgKHVubGlrZWx5KHBhZ2UtPm1hcHBpbmcgIT0gbWFwcGluZykgfHwKKwkJCSAgICAhUGFnZURpcnR5KHBhZ2UpIHx8CisJCQkgICAgUGFnZVdyaXRlYmFjayhwYWdlKSB8fAorCQkJICAgIHBhZ2UtPmluZGV4ICE9IGlkeCkgeworCQkJCWRvbmUgPSAxOworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJCQliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJCQkJZG8geworCQkJCQlpZiAoIWJ1ZmZlcl9kZWxheShiaCkgJiYKKwkJCQkJICAgICFidWZmZXJfdW53cml0dGVuKGJoKSkKKwkJCQkJCWRvbmUgPSAxOworCQkJCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKwkJCQl9IHdoaWxlICghZG9uZSAmJiAoYmggIT0gaGVhZCkpOworCQkJfQorCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAoZG9uZSkKKwkJCQlicmVhazsKKwkJCWlkeCsrOworCQkJbnVtKys7CisJCQlpZiAobnVtID49IG1heF9wYWdlcykKKwkJCQlicmVhazsKKwkJfQorCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCX0KKwlyZXR1cm4gbnVtOworfQorCisvKgogICogVGhlIGV4dDRfZ2V0X2Jsb2NrcygpIGZ1bmN0aW9uIHRyaWVzIHRvIGxvb2sgdXAgdGhlIHJlcXVlc3RlZCBibG9ja3MsCiAgKiBhbmQgcmV0dXJucyBpZiB0aGUgYmxvY2tzIGFyZSBhbHJlYWR5IG1hcHBlZC4KICAqCkBAIC0xMTc1LDYgKzEyMzUsOSBAQAogCWNsZWFyX2J1ZmZlcl9tYXBwZWQoYmgpOwogCWNsZWFyX2J1ZmZlcl91bndyaXR0ZW4oYmgpOwogCisJZXh0X2RlYnVnKCJleHQ0X2dldF9ibG9ja3MoKTogaW5vZGUgJWx1LCBmbGFnICVkLCBtYXhfYmxvY2tzICV1LCIKKwkJICAibG9naWNhbCBibG9jayAlbHVcbiIsIGlub2RlLT5pX2lubywgZmxhZ3MsIG1heF9ibG9ja3MsCisJCSAgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwogCS8qCiAJICogVHJ5IHRvIHNlZSBpZiB3ZSBjYW4gZ2V0IHRoZSBibG9jayB3aXRob3V0IHJlcXVlc3RpbmcgYSBuZXcKIAkgKiBmaWxlIHN5c3RlbSBibG9jay4KQEAgLTE3OTYsMTEgKzE4NTksMTEgQEAKIAogCWlmIChleHQ0X2NsYWltX2ZyZWVfYmxvY2tzKHNiaSwgdG90YWwpKSB7CiAJCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgdG90YWwpOwogCQlpZiAoZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtPmlfc2IsICZyZXRyaWVzKSkgewogCQkJeWllbGQoKTsKIAkJCWdvdG8gcmVwZWF0OwogCQl9Ci0JCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b3RhbCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICs9IG5yYmxvY2tzOwpAQCAtMjA5MiwxOCArMjE1NSwxOCBAQAogc3RhdGljIHZvaWQgZXh0NF9wcmludF9mcmVlX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpOwotCXByaW50ayhLRVJOX0VNRVJHICJUb3RhbCBmcmVlIGJsb2NrcyBjb3VudCAlbGxkXG4iLAotCQkJZXh0NF9jb3VudF9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYikpOwotCXByaW50ayhLRVJOX0VNRVJHICJGcmVlL0RpcnR5IGJsb2NrIGRldGFpbHNcbiIpOwotCXByaW50ayhLRVJOX0VNRVJHICJmcmVlX2Jsb2Nrcz0lbGxkXG4iLAotCQkJKGxvbmcgbG9uZylwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiZGlydHlfYmxvY2tzPSVsbGRcbiIsCi0JCQkobG9uZyBsb25nKXBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIpKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiQmxvY2sgcmVzZXJ2YXRpb24gZGV0YWlsc1xuIik7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgImlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3M9JXVcbiIsCi0JCQlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiaV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcz0ldVxuIiwKLQkJCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOworCXByaW50ayhLRVJOX0NSSVQgIlRvdGFsIGZyZWUgYmxvY2tzIGNvdW50ICVsbGRcbiIsCisJICAgICAgIGV4dDRfY291bnRfZnJlZV9ibG9ja3MoaW5vZGUtPmlfc2IpKTsKKwlwcmludGsoS0VSTl9DUklUICJGcmVlL0RpcnR5IGJsb2NrIGRldGFpbHNcbiIpOworCXByaW50ayhLRVJOX0NSSVQgImZyZWVfYmxvY2tzPSVsbGRcbiIsCisJICAgICAgIChsb25nIGxvbmcpIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlcikpOworCXByaW50ayhLRVJOX0NSSVQgImRpcnR5X2Jsb2Nrcz0lbGxkXG4iLAorCSAgICAgICAobG9uZyBsb25nKSBwZXJjcHVfY291bnRlcl9zdW0oJnNiaS0+c19kaXJ0eWJsb2Nrc19jb3VudGVyKSk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiQmxvY2sgcmVzZXJ2YXRpb24gZGV0YWlsc1xuIik7CisJcHJpbnRrKEtFUk5fQ1JJVCAiaV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcz0ldVxuIiwKKwkgICAgICAgRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2Nrcyk7CisJcHJpbnRrKEtFUk5fQ1JJVCAiaV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcz0ldVxuIiwKKwkgICAgICAgRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2Nrcyk7CiAJcmV0dXJuOwogfQogCkBAIC0yMTg5LDE0ICsyMjUyLDE0IEBACiAJCSAqIHdyaXRlcGFnZSBhbmQgd3JpdGVwYWdlcyB3aWxsIGFnYWluIHRyeSB0byB3cml0ZQogCQkgKiB0aGUgc2FtZS4KIAkJICovCi0JCXByaW50ayhLRVJOX0VNRVJHICIlcyBibG9jayBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgaW5vZGUgJWx1ICIKLQkJCQkgICJhdCBsb2dpY2FsIG9mZnNldCAlbGx1IHdpdGggbWF4IGJsb2NrcyAiCi0JCQkJICAiJXpkIHdpdGggZXJyb3IgJWRcbiIsCi0JCQkJICBfX2Z1bmNfXywgbXBkLT5pbm9kZS0+aV9pbm8sCi0JCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW5leHQsCi0JCQkJICBtcGQtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMsIGVycik7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJUaGlzIHNob3VsZCBub3QgaGFwcGVuLiEhICIKLQkJCQkJIkRhdGEgd2lsbCBiZSBsb3N0XG4iKTsKKwkJZXh0NF9tc2cobXBkLT5pbm9kZS0+aV9zYiwgS0VSTl9DUklULAorCQkJICJkZWxheWVkIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkIGZvciBpbm9kZSAlbHUgYXQgIgorCQkJICJsb2dpY2FsIG9mZnNldCAlbGx1IHdpdGggbWF4IGJsb2NrcyAlemQgd2l0aCAiCisJCQkgImVycm9yICVkXG4iLCBtcGQtPmlub2RlLT5pX2lubywKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBuZXh0LAorCQkJIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiVGhpcyBzaG91bGQgbm90IGhhcHBlbiEhICAiCisJCSAgICAgICAiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOwogCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKIAkJCWV4dDRfcHJpbnRfZnJlZV9ibG9ja3MobXBkLT5pbm9kZSk7CiAJCX0KQEAgLTI3NDMsOCArMjgwNiwxMCBAQAogCWludCBub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKIAlpbnQgcGFnZXNfd3JpdHRlbiA9IDA7CiAJbG9uZyBwYWdlc19za2lwcGVkOworCXVuc2lnbmVkIGludCBtYXhfcGFnZXM7CiAJaW50IHJhbmdlX2N5Y2xpYywgY3ljbGVkID0gMSwgaW9fZG9uZSA9IDA7Ci0JaW50IG5lZWRlZF9ibG9ja3MsIHJldCA9IDAsIG5yX3RvX3dyaXRlYnVtcCA9IDA7CisJaW50IG5lZWRlZF9ibG9ja3MsIHJldCA9IDA7CisJbG9uZyBkZXNpcmVkX25yX3RvX3dyaXRlLCBucl90b193cml0ZWJ1bXAgPSAwOwogCWxvZmZfdCByYW5nZV9zdGFydCA9IHdiYy0+cmFuZ2Vfc3RhcnQ7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihtYXBwaW5nLT5ob3N0LT5pX3NiKTsKIApAQCAtMjc3MSwxNiArMjgzNiw2IEBACiAJaWYgKHVubGlrZWx5KHNiaS0+c19tb3VudF9mbGFncyAmIEVYVDRfTUZfRlNfQUJPUlRFRCkpCiAJCXJldHVybiAtRVJPRlM7CiAKLQkvKgotCSAqIE1ha2Ugc3VyZSBucl90b193cml0ZSBpcyA+PSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QKLQkgKiBUaGlzIG1ha2Ugc3VyZSBzbWFsbCBmaWxlcyBibG9ja3MgYXJlIGFsbG9jYXRlZCBpbgotCSAqIHNpbmdsZSBhdHRlbXB0LiBUaGlzIGVuc3VyZSB0aGF0IHNtYWxsIGZpbGVzCi0JICogZ2V0IGxlc3MgZnJhZ21lbnRlZC4KLQkgKi8KLQlpZiAod2JjLT5ucl90b193cml0ZSA8IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCkgewotCQlucl90b193cml0ZWJ1bXAgPSBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QgLSB3YmMtPm5yX3RvX3dyaXRlOwotCQl3YmMtPm5yX3RvX3dyaXRlID0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0OwotCX0KIAlpZiAod2JjLT5yYW5nZV9zdGFydCA9PSAwICYmIHdiYy0+cmFuZ2VfZW5kID09IExMT05HX01BWCkKIAkJcmFuZ2Vfd2hvbGUgPSAxOwogCkBAIC0yNzk1LDYgKzI4NTAsMzYgQEAKIAl9IGVsc2UKIAkJaW5kZXggPSB3YmMtPnJhbmdlX3N0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKKwkvKgorCSAqIFRoaXMgd29ya3MgYXJvdW5kIHR3byBmb3JtcyBvZiBzdHVwaWRpdHkuICBUaGUgZmlyc3QgaXMgaW4KKwkgKiB0aGUgd3JpdGViYWNrIGNvZGUsIHdoaWNoIGNhcHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzCisJICogd3JpdHRlbiB0byBiZSAxMDI0IHBhZ2VzLiAgVGhpcyBpcyB3cm9uZyBvbiBtdWx0aXBsZQorCSAqIGxldmVsczsgZGlmZmVyZW50IGFyY2hpdGVjdHVlcyBoYXZlIGEgZGlmZmVyZW50IHBhZ2Ugc2l6ZSwKKwkgKiB3aGljaCBjaGFuZ2VzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHdoaWNoIGdldHMKKwkgKiB3cml0dGVuLiAgU2Vjb25kbHksIDQgbWVnYWJ5dGVzIGlzIHdheSB0b28gc21hbGwuICBYRlMKKwkgKiBmb3JjZXMgdGhpcyB2YWx1ZSB0byBiZSAxNiBtZWdhYnl0ZXMgYnkgbXVsdGlwbHlpbmcKKwkgKiBucl90b193cml0ZSBwYXJhbWV0ZXIgYnkgZm91ciwgYW5kIHRoZW4gcmVsaWVzIG9uIGl0cworCSAqIGFsbG9jYXRvciB0byBhbGxvY2F0ZSBsYXJnZXIgZXh0ZW50cyB0byBtYWtlIHRoZW0KKwkgKiBjb250aWd1b3VzLiAgVW5mb3J0dW5hdGVseSB0aGlzIGJyaW5ncyB1cyB0byB0aGUgc2Vjb25kCisJICogc3R1cGlkaXR5LCB3aGljaCBpcyB0aGF0IGV4dDQncyBtYmFsbG9jIGNvZGUgb25seSBhbGxvY2F0ZXMKKwkgKiBhdCBtb3N0IDIwNDggYmxvY2tzLiAgU28gd2UgZm9yY2UgY29udGlndW91cyB3cml0ZXMgdXAgdG8KKwkgKiB0aGUgbnVtYmVyIG9mIGRpcnR5IGJsb2NrcyBpbiB0aGUgaW5vZGUsIG9yCisJICogc2JpLT5tYXhfd3JpdGViYWNrX21iX2J1bXAgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisJICovCisJbWF4X3BhZ2VzID0gc2JpLT5zX21heF93cml0ZWJhY2tfbWJfYnVtcCA8PCAoMjAgLSBQQUdFX0NBQ0hFX1NISUZUKTsKKwlpZiAoIXJhbmdlX2N5Y2xpYyAmJiByYW5nZV93aG9sZSkKKwkJZGVzaXJlZF9ucl90b193cml0ZSA9IHdiYy0+bnJfdG9fd3JpdGUgKiA4OworCWVsc2UKKwkJZGVzaXJlZF9ucl90b193cml0ZSA9IGV4dDRfbnVtX2RpcnR5X3BhZ2VzKGlub2RlLCBpbmRleCwKKwkJCQkJCQkgICBtYXhfcGFnZXMpOworCWlmIChkZXNpcmVkX25yX3RvX3dyaXRlID4gbWF4X3BhZ2VzKQorCQlkZXNpcmVkX25yX3RvX3dyaXRlID0gbWF4X3BhZ2VzOworCisJaWYgKHdiYy0+bnJfdG9fd3JpdGUgPCBkZXNpcmVkX25yX3RvX3dyaXRlKSB7CisJCW5yX3RvX3dyaXRlYnVtcCA9IGRlc2lyZWRfbnJfdG9fd3JpdGUgLSB3YmMtPm5yX3RvX3dyaXRlOworCQl3YmMtPm5yX3RvX3dyaXRlID0gZGVzaXJlZF9ucl90b193cml0ZTsKKwl9CisKIAltcGQud2JjID0gd2JjOwogCW1wZC5pbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAKQEAgLTI4MjIsMTAgKzI5MDcsOSBAQAogCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIG5lZWRlZF9ibG9ja3MpOwogCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBqYmQyX3N0YXJ0OiAiCisJCQlleHQ0X21zZyhpbm9kZS0+aV9zYiwgS0VSTl9DUklULCAiJXM6IGpiZDJfc3RhcnQ6ICIKIAkJCSAgICAgICAiJWxkIHBhZ2VzLCBpbm8gJWx1OyBlcnIgJWRcbiIsIF9fZnVuY19fLAogCQkJCXdiYy0+bnJfdG9fd3JpdGUsIGlub2RlLT5pX2lubywgcmV0KTsKLQkJCWR1bXBfc3RhY2soKTsKIAkJCWdvdG8gb3V0X3dyaXRlcGFnZXM7CiAJCX0KIApAQCAtMjg5Nyw5ICsyOTgxLDEwIEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCWlmIChwYWdlc19za2lwcGVkICE9IHdiYy0+cGFnZXNfc2tpcHBlZCkKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gbGVhdmluZyAlcyAiCi0JCQkJIndpdGggbnJfdG9fd3JpdGUgPSAlbGQgcmV0ID0gJWRcbiIsCi0JCQkJX19mdW5jX18sIHdiYy0+bnJfdG9fd3JpdGUsIHJldCk7CisJCWV4dDRfbXNnKGlub2RlLT5pX3NiLCBLRVJOX0NSSVQsCisJCQkgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gbGVhdmluZyAlcyAiCisJCQkgIndpdGggbnJfdG9fd3JpdGUgPSAlbGQgcmV0ID0gJWRcbiIsCisJCQkgX19mdW5jX18sIHdiYy0+bnJfdG9fd3JpdGUsIHJldCk7CiAKIAkvKiBVcGRhdGUgaW5kZXggKi8KIAlpbmRleCArPSBwYWdlc193cml0dGVuOwpAQCAtMjkxNCw3ICsyOTk5LDggQEAKIG91dF93cml0ZXBhZ2VzOgogCWlmICghbm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpCiAJCXdiYy0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgPSAwOwotCXdiYy0+bnJfdG9fd3JpdGUgLT0gbnJfdG9fd3JpdGVidW1wOworCWlmICh3YmMtPm5yX3RvX3dyaXRlID4gbnJfdG9fd3JpdGVidW1wKQorCQl3YmMtPm5yX3RvX3dyaXRlIC09IG5yX3RvX3dyaXRlYnVtcDsKIAl3YmMtPnJhbmdlX3N0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CiAJdHJhY2VfZXh0NF9kYV93cml0ZXBhZ2VzX3Jlc3VsdChpbm9kZSwgd2JjLCByZXQsIHBhZ2VzX3dyaXR0ZW4pOwogCXJldHVybiByZXQ7CkBAIC0zMjcyLDYgKzMzNTgsOCBAQAogfQogCiAvKgorICogT19ESVJFQ1QgZm9yIGV4dDMgKG9yIGluZGlyZWN0IG1hcCkgYmFzZWQgZmlsZXMKKyAqCiAgKiBJZiB0aGUgT19ESVJFQ1Qgd3JpdGUgd2lsbCBleHRlbmQgdGhlIGZpbGUgdGhlbiBhZGQgdGhpcyBpbm9kZSB0byB0aGUKICAqIG9ycGhhbiBsaXN0LiAgU28gcmVjb3Zlcnkgd2lsbCB0cnVuY2F0ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaXplCiAgKiBpZiB0aGUgbWFjaGluZSBjcmFzaGVzIGR1cmluZyB0aGUgd3JpdGUuCkBAIC0zMjgwLDcgKzMzNjgsNyBAQAogICogY3Jhc2hlcyB0aGVuIHN0YWxlIGRpc2sgZGF0YSBfbWF5XyBiZSBleHBvc2VkIGluc2lkZSB0aGUgZmlsZS4gQnV0IGN1cnJlbnQKICAqIFZGUyBjb2RlIGZhbGxzIGJhY2sgaW50byBidWZmZXJlZCBwYXRoIGluIHRoYXQgY2FzZSBzbyB3ZSBhcmUgc2FmZS4KICAqLwotc3RhdGljIHNzaXplX3QgZXh0NF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCitzdGF0aWMgc3NpemVfdCBleHQ0X2luZF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKIHsKQEAgLTMyOTEsNiArMzM3OSw3IEBACiAJc3NpemVfdCByZXQ7CiAJaW50IG9ycGhhbiA9IDA7CiAJc2l6ZV90IGNvdW50ID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWludCByZXRyaWVzID0gMDsKIAogCWlmIChydyA9PSBXUklURSkgewogCQlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OwpAQCAtMzMxMyw5ICszNDAyLDEyIEBACiAJCX0KIAl9CiAKK3JldHJ5OgogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSBleHQ0X2dldF9ibG9jaywgTlVMTCk7CisJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCisJCWdvdG8gcmV0cnk7CiAKIAlpZiAob3JwaGFuKSB7CiAJCWludCBlcnI7CkBAIC0zMzU0LDYgKzM0NDYsMzY0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBleHQ0X2dldF9ibG9ja19kaW9fd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAorCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKK3sKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBtYXhfYmxvY2tzID0gYmhfcmVzdWx0LT5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKKwlpbnQgZGlvX2NyZWRpdHM7CisKKwlleHQ0X2RlYnVnKCJleHQ0X2dldF9ibG9ja19kaW9fd3JpdGU6IGlub2RlICVsdSwgY3JlYXRlIGZsYWcgJWRcbiIsCisJCSAgIGlub2RlLT5pX2lubywgY3JlYXRlKTsKKwkvKgorCSAqIERJTyBWRlMgY29kZSBwYXNzZXMgY3JlYXRlID0gMCBmbGFnIGZvciB3cml0ZSB0bworCSAqIHRoZSBtaWRkbGUgb2YgZmlsZS4gSXQgZG9lcyB0aGlzIHRvIGF2b2lkIGJsb2NrCisJICogYWxsb2NhdGlvbiBmb3IgaG9sZXMsIHRvIHByZXZlbnQgZXhwb3NlIHN0YWxlIGRhdGEKKwkgKiBvdXQgd2hlbiB0aGVyZSBpcyBwYXJhbGxlbCBidWZmZXJlZCByZWFkICh3aGljaCBkb2VzCisJICogbm90IGhvbGQgdGhlIGlfbXV0ZXggbG9jaykgd2hpbGUgZGlyZWN0IElPIHdyaXRlIGhhcworCSAqIG5vdCBjb21wbGV0ZWQuIERJTyByZXF1ZXN0IG9uIGhvbGVzIGZpbmFsbHkgZmFsbHMgYmFjaworCSAqIHRvIGJ1ZmZlcmVkIElPIGZvciB0aGlzIHJlYXNvbi4KKwkgKgorCSAqIEZvciBleHQ0IGV4dGVudCBiYXNlZCBmaWxlLCBzaW5jZSB3ZSBzdXBwb3J0IGZhbGxvY2F0ZSwKKwkgKiBuZXcgYWxsb2NhdGVkIGV4dGVudCBhcyB1bmluaXRpYWxpemVkLCBmb3IgaG9sZXMsIHdlCisJICogY291bGQgZmFsbG9jYXRlIGJsb2NrcyBmb3IgaG9sZXMsIHRodXMgcGFyYWxsZWwKKwkgKiBidWZmZXJlZCBJTyByZWFkIHdpbGwgemVybyBvdXQgdGhlIHBhZ2Ugd2hlbiByZWFkIG9uCisJICogYSBob2xlIHdoaWxlIHBhcmFsbGVsIERJTyB3cml0ZSB0byB0aGUgaG9sZSBoYXMgbm90IGNvbXBsZXRlZC4KKwkgKgorCSAqIHdoZW4gd2UgY29tZSBoZXJlLCB3ZSBrbm93IGl0J3MgYSBkaXJlY3QgSU8gd3JpdGUgdG8KKwkgKiB0byB0aGUgbWlkZGxlIG9mIGZpbGUgKDxpX3NpemUpCisJICogc28gaXQncyBzYWZlIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgZmxhZyBmcm9tIFZGUy4KKwkgKi8KKwljcmVhdGUgPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQ7CisKKwlpZiAobWF4X2Jsb2NrcyA+IERJT19NQVhfQkxPQ0tTKQorCQltYXhfYmxvY2tzID0gRElPX01BWF9CTE9DS1M7CisJZGlvX2NyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7CisJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBkaW9fY3JlZGl0cyk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBpYmxvY2ssIG1heF9ibG9ja3MsIGJoX3Jlc3VsdCwKKwkJCSAgICAgIGNyZWF0ZSk7CisJaWYgKHJldCA+IDApIHsKKwkJYmhfcmVzdWx0LT5iX3NpemUgPSAocmV0IDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCQlyZXQgPSAwOworCX0KKwlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGV4dDRfZnJlZV9pb19lbmQoZXh0NF9pb19lbmRfdCAqaW8pCit7CisJQlVHX09OKCFpbyk7CisJaXB1dChpby0+aW5vZGUpOworCWtmcmVlKGlvKTsKK30KK3N0YXRpYyB2b2lkIGR1bXBfYWlvX2Rpb19saXN0KHN0cnVjdCBpbm9kZSAqIGlub2RlKQoreworI2lmZGVmCUVYVDRfREVCVUcKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXIsICpiZWZvcmUsICphZnRlcjsKKwlleHQ0X2lvX2VuZF90ICppbywgKmlvMCwgKmlvMTsKKworCWlmIChsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCkpeworCQlleHQ0X2RlYnVnKCJpbm9kZSAlbHUgYWlvIGRpbyBsaXN0IGlzIGVtcHR5XG4iLCBpbm9kZS0+aV9pbm8pOworCQlyZXR1cm47CisJfQorCisJZXh0NF9kZWJ1ZygiRHVtcCBpbm9kZSAlbHUgYWlvX2Rpb19jb21wbGV0ZWRfSU8gbGlzdCBcbiIsIGlub2RlLT5pX2lubyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbywgJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0LCBsaXN0KXsKKwkJY3VyID0gJmlvLT5saXN0OworCQliZWZvcmUgPSBjdXItPnByZXY7CisJCWlvMCA9IGNvbnRhaW5lcl9vZihiZWZvcmUsIGV4dDRfaW9fZW5kX3QsIGxpc3QpOworCQlhZnRlciA9IGN1ci0+bmV4dDsKKwkJaW8xID0gY29udGFpbmVyX29mKGFmdGVyLCBleHQ0X2lvX2VuZF90LCBsaXN0KTsKKworCQlleHQ0X2RlYnVnKCJpbyAweCVwIGZyb20gaW5vZGUgJWx1LHByZXYgMHglcCxuZXh0IDB4JXBcbiIsCisJCQkgICAgaW8sIGlub2RlLT5pX2lubywgaW8wLCBpbzEpOworCX0KKyNlbmRpZgorfQorCisvKgorICogY2hlY2sgYSByYW5nZSBvZiBzcGFjZSBhbmQgY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuLgorICovCitzdGF0aWMgaW50IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGV4dDRfaW9fZW5kX3QgKmlvKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpby0+aW5vZGU7CisJbG9mZl90IG9mZnNldCA9IGlvLT5vZmZzZXQ7CisJc2l6ZV90IHNpemUgPSBpby0+c2l6ZTsKKwlpbnQgcmV0ID0gMDsKKworCWV4dDRfZGVidWcoImVuZF9haW9fZGlvX29ubG9jazogaW8gMHglcCBmcm9tIGlub2RlICVsdSxsaXN0LT5uZXh0IDB4JXAsIgorCQkgICAibGlzdC0+cHJldiAweCVwXG4iLAorCSAgICAgICAgICAgaW8sIGlub2RlLT5pX2lubywgaW8tPmxpc3QubmV4dCwgaW8tPmxpc3QucHJldik7CisKKwlpZiAobGlzdF9lbXB0eSgmaW8tPmxpc3QpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGlvLT5mbGFnICE9IERJT19BSU9fVU5XUklUVEVOKQorCQlyZXR1cm4gcmV0OworCisJaWYgKG9mZnNldCArIHNpemUgPD0gaV9zaXplX3JlYWQoaW5vZGUpKQorCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsIG9mZnNldCwgc2l6ZSk7CisKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IGZhaWxlZCB0byBjb252ZXJ0IHVud3JpdHRlbiIKKwkJCSJleHRlbnRzIHRvIHdyaXR0ZW4gZXh0ZW50cywgZXJyb3IgaXMgJWQiCisJCQkiIGlvIGlzIHN0aWxsIG9uIGlub2RlICVsdSBhaW8gZGlvIGxpc3RcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByZXQsIGlub2RlLT5pX2lubyk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogY2xlYXIgdGhlIERJTyBBSU8gdW53cml0dGVuIGZsYWcgKi8KKwlpby0+ZmxhZyA9IDA7CisJcmV0dXJuIHJldDsKK30KKy8qCisgKiB3b3JrIG9uIGNvbXBsZXRlZCBhaW8gZGlvIElPLCB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvIGV4dGVudHMKKyAqLworc3RhdGljIHZvaWQgZXh0NF9lbmRfYWlvX2Rpb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlleHQ0X2lvX2VuZF90ICppbyAgPSBjb250YWluZXJfb2Yod29yaywgZXh0NF9pb19lbmRfdCwgd29yayk7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7CisJaWYgKHJldCA+PSAwKSB7CisJCWlmICghbGlzdF9lbXB0eSgmaW8tPmxpc3QpKQorCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOworCQlleHQ0X2ZyZWVfaW9fZW5kKGlvKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Cit9CisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleHQ0X3N5bmNfZmlsZSgpLgorICoKKyAqIFdoZW4gQUlPIERJTyBJTyBpcyBjb21wbGV0ZWQsIHRoZSB3b3JrIHRvIGNvbnZlcnQgdW53cml0dGVuCisgKiBleHRlbnRzIHRvIHdyaXR0ZW4gaXMgcXVldWVkIG9uIHdvcmtxdWV1ZSBidXQgbWF5IG5vdCBnZXQgaW1tZWRpYXRlbHkKKyAqIHNjaGVkdWxlZC4gV2hlbiBmc3luYyBpcyBjYWxsZWQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZQorICogY29udmVyc2lvbiBpcyBjb21wbGV0ZSBiZWZvcmUgZnN5bmMgcmV0dXJucy4KKyAqIFRoZSBpbm9kZSBrZWVwcyB0cmFjayBvZiBhIGxpc3Qgb2YgY29tcGxldGVkIEFJTyBmcm9tIERJTyBwYXRoCisgKiB0aGF0IG1pZ2h0IG5lZWRzIHRvIGRvIHRoZSBjb252ZXJzaW9uLiBUaGlzIGZ1bmN0aW9uIHdhbGtzIHRocm91Z2gKKyAqIHRoZSBsaXN0IGFuZCBjb252ZXJ0IHRoZSByZWxhdGVkIHVud3JpdHRlbiBleHRlbnRzIHRvIHdyaXR0ZW4uCisgKi8KK2ludCBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWV4dDRfaW9fZW5kX3QgKmlvOworCWludCByZXQgPSAwOworCWludCByZXQyID0gMDsKKworCWlmIChsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCkpCisJCXJldHVybiByZXQ7CisKKwlkdW1wX2Fpb19kaW9fbGlzdChpbm9kZSk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCkpeworCQlpbyA9IGxpc3RfZW50cnkoRVhUNF9JKGlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QubmV4dCwKKwkJCQlleHQ0X2lvX2VuZF90LCBsaXN0KTsKKwkJLyoKKwkJICogQ2FsbGluZyBleHQ0X2VuZF9haW9fZGlvX25vbG9jaygpIHRvIGNvbnZlcnQgY29tcGxldGVkCisJCSAqIElPIHRvIHdyaXR0ZW4uCisJCSAqCisJCSAqIFdoZW4gZXh0NF9zeW5jX2ZpbGUoKSBpcyBjYWxsZWQsIHJ1bl9xdWV1ZSgpIG1heSBhbHJlYWR5CisJCSAqIGFib3V0IHRvIGZsdXNoIHRoZSB3b3JrIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBpbyBzdHJ1Y3R1cmUuCisJCSAqIEl0IHdpbGwgYmUgdXBzZXQgaWYgaXQgZm91bmRzIHRoZSBpbyBzdHJ1Y3R1cmUgcmVsYXRlZAorCQkgKiB0byB0aGUgd29yay10by1iZSBzY2hlZHVsZSBpcyBmcmVlZC4KKwkJICoKKwkJICogVGh1cyB3ZSBuZWVkIHRvIGtlZXAgdGhlIGlvIHN0cnVjdHVyZSBzdGlsbCB2YWxpZCBoZXJlIGFmdGVyCisJCSAqIGNvbnZlcnRpb24gZmluaXNoZWQuIFRoZSBpbyBzdHJ1Y3R1cmUgaGFzIGEgZmxhZyB0bworCQkgKiBhdm9pZCBkb3VibGUgY29udmVydGluZyBmcm9tIGJvdGggZnN5bmMgYW5kIGJhY2tncm91bmQgd29yaworCQkgKiBxdWV1ZSB3b3JrLgorCQkgKi8KKwkJcmV0ID0gZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soaW8pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldDIgPSByZXQ7CisJCWVsc2UKKwkJCWxpc3RfZGVsX2luaXQoJmlvLT5saXN0KTsKKwl9CisJcmV0dXJuIChyZXQyIDwgMCkgPyByZXQyIDogMDsKK30KKworc3RhdGljIGV4dDRfaW9fZW5kX3QgKmV4dDRfaW5pdF9pb19lbmQgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZXh0NF9pb19lbmRfdCAqaW8gPSBOVUxMOworCisJaW8gPSBrbWFsbG9jKHNpemVvZigqaW8pLCBHRlBfTk9GUyk7CisKKwlpZiAoaW8pIHsKKwkJaWdyYWIoaW5vZGUpOworCQlpby0+aW5vZGUgPSBpbm9kZTsKKwkJaW8tPmZsYWcgPSAwOworCQlpby0+b2Zmc2V0ID0gMDsKKwkJaW8tPnNpemUgPSAwOworCQlpby0+ZXJyb3IgPSAwOworCQlJTklUX1dPUksoJmlvLT53b3JrLCBleHQ0X2VuZF9haW9fZGlvX3dvcmspOworCQlJTklUX0xJU1RfSEVBRCgmaW8tPmxpc3QpOworCX0KKworCXJldHVybiBpbzsKK30KKworc3RhdGljIHZvaWQgZXh0NF9lbmRfaW9fZGlvKHN0cnVjdCBraW9jYiAqaW9jYiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICBzc2l6ZV90IHNpemUsIHZvaWQgKnByaXZhdGUpCit7CisgICAgICAgIGV4dDRfaW9fZW5kX3QgKmlvX2VuZCA9IGlvY2ItPnByaXZhdGU7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOworCisJLyogaWYgbm90IGFzeW5jIGRpcmVjdCBJTyBvciBkaW8gd2l0aCAwIGJ5dGVzIHdyaXRlLCBqdXN0IHJldHVybiAqLworCWlmICghaW9fZW5kIHx8ICFzaXplKQorCQlyZXR1cm47CisKKwlleHRfZGVidWcoImV4dDRfZW5kX2lvX2RpbygpOiBpb19lbmQgMHglcCIKKwkJICAiZm9yIGlub2RlICVsdSwgaW9jYiAweCVwLCBvZmZzZXQgJWxsdSwgc2l6ZSAlbGx1XG4iLAorIAkJICBpb2NiLT5wcml2YXRlLCBpb19lbmQtPmlub2RlLT5pX2lubywgaW9jYiwgb2Zmc2V0LAorCQkgIHNpemUpOworCisJLyogaWYgbm90IGFpbyBkaW8gd2l0aCB1bndyaXR0ZW4gZXh0ZW50cywganVzdCBmcmVlIGlvIGFuZCByZXR1cm4gKi8KKwlpZiAoaW9fZW5kLT5mbGFnICE9IERJT19BSU9fVU5XUklUVEVOKXsKKwkJZXh0NF9mcmVlX2lvX2VuZChpb19lbmQpOworCQlpb2NiLT5wcml2YXRlID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWlvX2VuZC0+b2Zmc2V0ID0gb2Zmc2V0OworCWlvX2VuZC0+c2l6ZSA9IHNpemU7CisJd3EgPSBFWFQ0X1NCKGlvX2VuZC0+aW5vZGUtPmlfc2IpLT5kaW9fdW53cml0dGVuX3dxOworCisJLyogcXVldWUgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuICovCisJcXVldWVfd29yayh3cSwgJmlvX2VuZC0+d29yayk7CisKKwkvKiBBZGQgdGhlIGlvX2VuZCB0byBwZXItaW5vZGUgY29tcGxldGVkIGFpbyBkaW8gbGlzdCovCisJbGlzdF9hZGRfdGFpbCgmaW9fZW5kLT5saXN0LAorCQkgJkVYVDRfSShpb19lbmQtPmlub2RlKS0+aV9haW9fZGlvX2NvbXBsZXRlX2xpc3QpOworCWlvY2ItPnByaXZhdGUgPSBOVUxMOworfQorLyoKKyAqIEZvciBleHQ0IGV4dGVudCBmaWxlcywgZXh0NCB3aWxsIGRvIGRpcmVjdC1pbyB3cml0ZSB0byBob2xlcywKKyAqIHByZWFsbG9jYXRlZCBleHRlbnRzLCBhbmQgdGhvc2Ugd3JpdGUgZXh0ZW5kIHRoZSBmaWxlLCBubyBuZWVkIHRvCisgKiBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSU8uCisgKgorICogRm9yIGhvbGVzLCB3ZSBmYWxsb2NhdGUgdGhvc2UgYmxvY2tzLCBtYXJrIHRoZW0gYXMgdW5pbnRpYWxpemVkCisgKiBJZiB0aG9zZSBibG9ja3Mgd2VyZSBwcmVhbGxvY2F0ZWQsIHdlIG1hcmsgc3VyZSB0aGV5IGFyZSBzcGxpdGVkLCBidXQKKyAqIHN0aWxsIGtlZXAgdGhlIHJhbmdlIHRvIHdyaXRlIGFzIHVuaW50aWFsaXplZC4KKyAqCisgKiBUaGUgdW53cnJpdHRlbiBleHRlbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHdyaXR0ZW4gd2hlbiBESU8gaXMgY29tcGxldGVkLgorICogRm9yIGFzeW5jIGRpcmVjdCBJTywgc2luY2UgdGhlIElPIG1heSBzdGlsbCBwZW5kaW5nIHdoZW4gcmV0dXJuLCB3ZQorICogc2V0IHVwIGFuIGVuZF9pbyBjYWxsIGJhY2sgZnVuY3Rpb24sIHdoaWNoIHdpbGwgZG8gdGhlIGNvbnZlcnRpb24KKyAqIHdoZW4gYXN5bmMgZGlyZWN0IElPIGNvbXBsZXRlZC4KKyAqCisgKiBJZiB0aGUgT19ESVJFQ1Qgd3JpdGUgd2lsbCBleHRlbmQgdGhlIGZpbGUgdGhlbiBhZGQgdGhpcyBpbm9kZSB0byB0aGUKKyAqIG9ycGhhbiBsaXN0LiAgU28gcmVjb3Zlcnkgd2lsbCB0cnVuY2F0ZSBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaXplCisgKiBpZiB0aGUgbWFjaGluZSBjcmFzaGVzIGR1cmluZyB0aGUgd3JpdGUuCisgKgorICovCitzdGF0aWMgc3NpemVfdCBleHQ0X2V4dF9kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgbG9mZl90IG9mZnNldCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzc2l6ZV90IHJldDsKKwlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisKKwlsb2ZmX3QgZmluYWxfc2l6ZSA9IG9mZnNldCArIGNvdW50OworCWlmIChydyA9PSBXUklURSAmJiBmaW5hbF9zaXplIDw9IGlub2RlLT5pX3NpemUpIHsKKwkJLyoKKyAJCSAqIFdlIGNvdWxkIGRpcmVjdCB3cml0ZSB0byBob2xlcyBhbmQgZmFsbG9jYXRlLgorCQkgKgorIAkJICogQWxsb2NhdGVkIGJsb2NrcyB0byBmaWxsIHRoZSBob2xlIGFyZSBtYXJrZWQgYXMgdW5pbml0aWFsaXplZAorIAkJICogdG8gcHJldmVudCBwYXJhbGVsIGJ1ZmZlcmVkIHJlYWQgdG8gZXhwb3NlIHRoZSBzdGFsZSBkYXRhCisgCQkgKiBiZWZvcmUgRElPIGNvbXBsZXRlIHRoZSBkYXRhIElPLgorCQkgKgorIAkJICogQXMgdG8gcHJldmlvdXNseSBmYWxsb2NhdGVkIGV4dGVudHMsIGV4dDQgZ2V0X2Jsb2NrCisgCQkgKiB3aWxsIGp1c3Qgc2ltcGx5IG1hcmsgdGhlIGJ1ZmZlciBtYXBwZWQgYnV0IHN0aWxsCisgCQkgKiBrZWVwIHRoZSBleHRlbnRzIHVuaW5pdGlhbGl6ZWQuCisgCQkgKgorCQkgKiBmb3Igbm9uIEFJTyBjYXNlLCB3ZSB3aWxsIGNvbnZlcnQgdGhvc2UgdW53cml0dGVuIGV4dGVudHMKKwkJICogdG8gd3JpdHRlbiBhZnRlciByZXR1cm4gYmFjayBmcm9tIGJsb2NrZGV2X2RpcmVjdF9JTy4KKwkJICoKKwkJICogZm9yIGFzeW5jIERJTywgdGhlIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgZGVmZXJlZCB3aGVuCisJCSAqIHRoZSBJTyBpcyBjb21wbGV0ZWQuIFRoZSBleHQ0IGVuZF9pbyBjYWxsYmFjayBmdW5jdGlvbgorCQkgKiB3aWxsIGJlIGNhbGxlZCB0byB0YWtlIGNhcmUgb2YgdGhlIGNvbnZlcnNpb24gd29yay4KKwkJICogSGVyZSBmb3IgYXN5bmMgY2FzZSwgd2UgYWxsb2NhdGUgYW4gaW9fZW5kIHN0cnVjdHVyZSB0bworCQkgKiBob29rIHRvIHRoZSBpb2NiLgorIAkJICovCisJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CisJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgeworCQkJaW9jYi0+cHJpdmF0ZSA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUpOworCQkJaWYgKCFpb2NiLT5wcml2YXRlKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJLyoKKwkJCSAqIHdlIHNhdmUgdGhlIGlvIHN0cnVjdHVyZSBmb3IgY3VycmVudCBhc3luYworCQkJICogZGlyZWN0IElPLCBzbyB0aGF0IGxhdGVyIGV4dDRfZ2V0X2Jsb2NrcygpCisJCQkgKiBjb3VsZCBmbGFnIHRoZSBpbyBzdHJ1Y3R1cmUgd2hldGhlciB0aGVyZQorCQkJICogaXMgYSB1bndyaXR0ZW4gZXh0ZW50cyBuZWVkcyB0byBiZSBjb252ZXJ0ZWQKKwkJCSAqIHdoZW4gSU8gaXMgY29tcGxldGVkLgorCQkJICovCisJCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IGlvY2ItPnByaXZhdGU7CisJCX0KKworCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLAorCQkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCQkJCQkgb2Zmc2V0LCBucl9zZWdzLAorCQkJCQkgZXh0NF9nZXRfYmxvY2tfZGlvX3dyaXRlLAorCQkJCQkgZXh0NF9lbmRfaW9fZGlvKTsKKwkJaWYgKGlvY2ItPnByaXZhdGUpCisJCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CisJCS8qCisJCSAqIFRoZSBpb19lbmQgc3RydWN0dXJlIHRha2VzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSwKKwkJICogdGhhdCBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgZGVzdHJveWVkIGFuZCB0aGUKKwkJICogcmVmZXJlbmNlIHRvIHRoZSBpbm9kZSBuZWVkIHRvIGJlIGRyb3BwZWQsIHdoZW4gSU8gaXMKKwkJICogY29tcGxldGUsIGV2ZW4gd2l0aCAwIGJ5dGUgd3JpdGUsIG9yIGZhaWxlZC4KKwkJICoKKwkJICogSW4gdGhlIHN1Y2Nlc3NmdWwgQUlPIERJTyBjYXNlLCB0aGUgaW9fZW5kIHN0cnVjdHVyZSB3aWxsIGJlCisJCSAqIGRlc2N0cm95ZWQgYW5kIHRoZSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIHdpbGwgYmUgZHJvcHBlZAorCQkgKiBhZnRlciB0aGUgZW5kX2lvIGNhbGwgYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQuCisJCSAqCisJCSAqIEluIHRoZSBjYXNlIHRoZXJlIGlzIDAgYnl0ZSB3cml0ZSwgb3IgZXJyb3IgY2FzZSwgc2luY2UKKwkJICogVkZTIGRpcmVjdCBJTyB3b24ndCBpbnZva2UgdGhlIGVuZF9pbyBjYWxsIGJhY2sgZnVuY3Rpb24sCisJCSAqIHdlIG5lZWQgdG8gZnJlZSB0aGUgZW5kX2lvIHN0cnVjdHVyZSBoZXJlLgorCQkgKi8KKwkJaWYgKHJldCAhPSAtRUlPQ0JRVUVVRUQgJiYgcmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkgeworCQkJZXh0NF9mcmVlX2lvX2VuZChpb2NiLT5wcml2YXRlKTsKKwkJCWlvY2ItPnByaXZhdGUgPSBOVUxMOworCQl9IGVsc2UgaWYgKHJldCA+IDAgJiYgKEVYVDRfSShpbm9kZSktPmlfc3RhdGUgJgorCQkJCSAgICAgICBFWFQ0X1NUQVRFX0RJT19VTldSSVRURU4pKSB7CisJCQlpbnQgZXJyOworCQkJLyoKKwkJCSAqIGZvciBub24gQUlPIGNhc2UsIHNpbmNlIHRoZSBJTyBpcyBhbHJlYWR5CisJCQkgKiBjb21wbGV0ZWQsIHdlIGNvdWxkIGRvIHRoZSBjb252ZXJ0aW9uIHJpZ2h0IGhlcmUKKwkJCSAqLworCQkJZXJyID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGlub2RlLAorCQkJCQkJCSAgICAgb2Zmc2V0LCByZXQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0ID0gZXJyOworCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZm9yIHdyaXRlIHRoZSB0aGUgZW5kIG9mIGZpbGUgY2FzZSwgd2UgZmFsbCBiYWNrIHRvIG9sZCB3YXkgKi8KKwlyZXR1cm4gZXh0NF9pbmRfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpb3YsIG9mZnNldCwgbnJfc2Vncyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV4dDRfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGxvZmZfdCBvZmZzZXQsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisKKwlpZiAoRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkKKwkJcmV0dXJuIGV4dDRfZXh0X2RpcmVjdF9JTyhydywgaW9jYiwgaW92LCBvZmZzZXQsIG5yX3NlZ3MpOworCisJcmV0dXJuIGV4dDRfaW5kX2RpcmVjdF9JTyhydywgaW9jYiwgaW92LCBvZmZzZXQsIG5yX3NlZ3MpOworfQorCiAvKgogICogUGFnZXMgY2FuIGJlIG1hcmtlZCBkaXJ0eSBjb21wbGV0ZWx5IGFzeW5jaHJvbm91c2x5IGZyb20gZXh0NCdzIGpvdXJuYWxsaW5nCiAgKiBhY3Rpdml0eS4gIEJ5IGZpbGVtYXBfc3luY19wdGUoKSwgdHJ5X3RvX3VubWFwX29uZSgpLCBldGMuICBXZSBjYW5ub3QgZG8KQEAgLTQ1NTEsOCArNTAwMSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZXh0NF9kb191cGRhdGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXN0cnVjdCBleHQ0X2lsb2MgKmlsb2MsCi0JCQkJaW50IGRvX3N5bmMpCisJCQkJc3RydWN0IGV4dDRfaWxvYyAqaWxvYykKIHsKIAlzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlID0gZXh0NF9yYXdfaW5vZGUoaWxvYyk7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwpAQCAtNDY1MywyMiArNTEwMiwxMCBAQAogCQlyYXdfaW5vZGUtPmlfZXh0cmFfaXNpemUgPSBjcHVfdG9fbGUxNihlaS0+aV9leHRyYV9pc2l6ZSk7CiAJfQogCi0JLyoKLQkgKiBJZiB3ZSdyZSBub3QgdXNpbmcgYSBqb3VybmFsIGFuZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tCi0JICogZXh0NF93cml0ZV9pbm9kZSgpIHRvIHN5bmMgdGhlIGlub2RlIChtYWtpbmcgZG9fc3luYyB0cnVlKSwKLQkgKiB3ZSBjYW4ganVzdCB1c2Ugc3luY19kaXJ0eV9idWZmZXIoKSBkaXJlY3RseSB0byBkbyBvdXIgZGlydHkKLQkgKiB3b3JrLiAgVGVzdGluZyBzX2pvdXJuYWwgaGVyZSBpcyBhIGJpdCByZWR1bmRhbnQgYnV0IGl0J3MKLQkgKiB3b3J0aCBpdCB0byBhdm9pZCBwb3RlbnRpYWwgZnV0dXJlIHRyb3VibGUuCi0JICovCi0JaWYgKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2pvdXJuYWwgPT0gTlVMTCAmJiBkb19zeW5jKSB7Ci0JCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgc3luY19kaXJ0eV9idWZmZXIiKTsKLQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCX0gZWxzZSB7Ci0JCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQkJcmMgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBiaCk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gcmM7Ci0JfQorCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKKwlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKKwlpZiAoIWVycikKKwkJZXJyID0gcmM7CiAJZWktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfTkVXOwogCiBvdXRfYnJlbHNlOgpAQCAtNDczNiw4ICs1MTczLDE2IEBACiAJCWVyciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmlsb2MpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQkJZXJyID0gZXh0NF9kb191cGRhdGVfaW5vZGUoRVhUNF9OT0pPVVJOQUxfSEFORExFLAotCQkJCQkgICBpbm9kZSwgJmlsb2MsIHdhaXQpOworCQlpZiAod2FpdCkKKwkJCXN5bmNfZGlydHlfYnVmZmVyKGlsb2MuYmgpOworCQlpZiAoYnVmZmVyX3JlcShpbG9jLmJoKSAmJiAhYnVmZmVyX3VwdG9kYXRlKGlsb2MuYmgpKSB7CisJCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJCQkgICAiSU8gZXJyb3Igc3luY2luZyBpbm9kZSwgIgorCQkJCSAgICJpbm9kZT0lbHUsIGJsb2NrPSVsbHUiLAorCQkJCSAgIGlub2RlLT5pX2lubywKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWlsb2MuYmgtPmJfYmxvY2tucik7CisJCQllcnIgPSAtRUlPOworCQl9CiAJfQogCXJldHVybiBlcnI7CiB9CkBAIC01MDMzLDcgKzU0NzgsNyBAQAogCWdldF9iaChpbG9jLT5iaCk7CiAKIAkvKiBleHQ0X2RvX3VwZGF0ZV9pbm9kZSgpIGRvZXMgamJkMl9qb3VybmFsX2RpcnR5X21ldGFkYXRhICovCi0JZXJyID0gZXh0NF9kb191cGRhdGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgaWxvYywgMCk7CisJZXJyID0gZXh0NF9kb191cGRhdGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgaWxvYyk7CiAJcHV0X2JoKGlsb2MtPmJoKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTE3NywyNyArNTYyMiwxNCBAQAogICovCiB2b2lkIGV4dDRfZGlydHlfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQloYW5kbGVfdCAqY3VycmVudF9oYW5kbGUgPSBleHQ0X2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKIAloYW5kbGVfdCAqaGFuZGxlOwogCi0JaWYgKCFleHQ0X2hhbmRsZV92YWxpZChjdXJyZW50X2hhbmRsZSkpIHsKLQkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGN1cnJlbnRfaGFuZGxlLCBpbm9kZSk7Ci0JCXJldHVybjsKLQl9Ci0KIAloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJZ290byBvdXQ7Ci0JaWYgKGN1cnJlbnRfaGFuZGxlICYmCi0JCWN1cnJlbnRfaGFuZGxlLT5oX3RyYW5zYWN0aW9uICE9IGhhbmRsZS0+aF90cmFuc2FjdGlvbikgewotCQkvKiBUaGlzIHRhc2sgaGFzIGEgdHJhbnNhY3Rpb24gb3BlbiBhZ2FpbnN0IGEgZGlmZmVyZW50IGZzICovCi0JCXByaW50ayhLRVJOX0VNRVJHICIlczogdHJhbnNhY3Rpb25zIGRvIG5vdCBtYXRjaCFcbiIsCi0JCSAgICAgICBfX2Z1bmNfXyk7Ci0JfSBlbHNlIHsKLQkJamJkX2RlYnVnKDUsICJtYXJraW5nIGRpcnR5LiAgb3V0ZXIgaGFuZGxlPSVwXG4iLAotCQkJCWN1cnJlbnRfaGFuZGxlKTsKLQkJZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwotCX0KKworCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKKwogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiBvdXQ6CiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCBlOWM2MTg5Li5iYmExMjgyIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtMjA5NiwyMDcgKzIwOTYsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLSNpZmRlZiBFWFQ0X01CX0hJU1RPUlkKLXN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiB7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaGlzdG9yeTsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCWludCBzdGFydDsKLQlpbnQgbWF4OwotfTsKLQotc3RhdGljIHZvaWQgKmV4dDRfbWJfaGlzdG9yeV9za2lwX2VtcHR5KHN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiAqcywKLQkJCQkJc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHMsCi0JCQkJCWludCBmaXJzdCkKLXsKLQlpZiAoaHMgPT0gcy0+aGlzdG9yeSArIHMtPm1heCkKLQkJaHMgPSBzLT5oaXN0b3J5OwotCWlmICghZmlyc3QgJiYgaHMgPT0gcy0+aGlzdG9yeSArIHMtPnN0YXJ0KQotCQlyZXR1cm4gTlVMTDsKLQl3aGlsZSAoaHMtPm9yaWcuZmVfbGVuID09IDApIHsKLQkJaHMrKzsKLQkJaWYgKGhzID09IHMtPmhpc3RvcnkgKyBzLT5tYXgpCi0JCQlocyA9IHMtPmhpc3Rvcnk7Ci0JCWlmIChocyA9PSBzLT5oaXN0b3J5ICsgcy0+c3RhcnQpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0JcmV0dXJuIGhzOwotfQotCi1zdGF0aWMgdm9pZCAqZXh0NF9tYl9zZXFfaGlzdG9yeV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgKmhzOwotCWludCBsID0gKnBvczsKLQotCWlmIChsID09IDApCi0JCXJldHVybiBTRVFfU1RBUlRfVE9LRU47Ci0JaHMgPSBleHQ0X21iX2hpc3Rvcnlfc2tpcF9lbXB0eShzLCBzLT5oaXN0b3J5ICsgcy0+c3RhcnQsIDEpOwotCWlmICghaHMpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlICgtLWwgJiYgKGhzID0gZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkocywgKytocywgMCkpICE9IE5VTEwpOwotCXJldHVybiBoczsKLX0KLQotc3RhdGljIHZvaWQgKmV4dDRfbWJfc2VxX2hpc3RvcnlfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwKLQkJCQkgICAgICBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgZXh0NF9tYl9wcm9jX3Nlc3Npb24gKnMgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGV4dDRfbWJfaGlzdG9yeSAqaHMgPSB2OwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGV4dDRfbWJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPmhpc3RvcnkgKyBzLT5zdGFydCwgMSk7Ci0JZWxzZQotCQlyZXR1cm4gZXh0NF9tYl9oaXN0b3J5X3NraXBfZW1wdHkocywgKytocywgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9zZXFfaGlzdG9yeV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCWNoYXIgYnVmWzI1XSwgYnVmMlsyNV0sIGJ1ZjNbMjVdLCAqZm10OwotCXN0cnVjdCBleHQ0X21iX2hpc3RvcnkgKmhzID0gdjsKLQotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNXMgJS04cyAlLTIzcyAlLTIzcyAlLTIzcyAlLTVzICIKLQkJCQkiJS01cyAlLTJzICUtNnMgJS01cyAlLTVzICUtNnNcbiIsCi0JCQkgICJwaWQiLCAiaW5vZGUiLCAib3JpZ2luYWwiLCAiZ29hbCIsICJyZXN1bHQiLCAiZm91bmQiLAotCQkJICAgImdycHMiLCAiY3IiLCAiZmxhZ3MiLCAibWVyZ2UiLCAidGFpbCIsICJicm9rZW4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGhzLT5vcCA9PSBFWFQ0X01CX0hJU1RPUllfQUxMT0MpIHsKLQkJZm10ID0gIiUtNXUgJS04dSAlLTIzcyAlLTIzcyAlLTIzcyAlLTV1ICUtNXUgJS0ydSAiCi0JCQkiMHglMDR4ICUtNXMgJS01dSAlLTZ1XG4iOwotCQlzcHJpbnRmKGJ1ZjIsICIldS8lZC8ldUAldSIsIGhzLT5yZXN1bHQuZmVfZ3JvdXAsCi0JCQlocy0+cmVzdWx0LmZlX3N0YXJ0LCBocy0+cmVzdWx0LmZlX2xlbiwKLQkJCWhzLT5yZXN1bHQuZmVfbG9naWNhbCk7Ci0JCXNwcmludGYoYnVmLCAiJXUvJWQvJXVAJXUiLCBocy0+b3JpZy5mZV9ncm91cCwKLQkJCWhzLT5vcmlnLmZlX3N0YXJ0LCBocy0+b3JpZy5mZV9sZW4sCi0JCQlocy0+b3JpZy5mZV9sb2dpY2FsKTsKLQkJc3ByaW50ZihidWYzLCAiJXUvJWQvJXVAJXUiLCBocy0+Z29hbC5mZV9ncm91cCwKLQkJCWhzLT5nb2FsLmZlX3N0YXJ0LCBocy0+Z29hbC5mZV9sZW4sCi0JCQlocy0+Z29hbC5mZV9sb2dpY2FsKTsKLQkJc2VxX3ByaW50ZihzZXEsIGZtdCwgaHMtPnBpZCwgaHMtPmlubywgYnVmLCBidWYzLCBidWYyLAotCQkJCWhzLT5mb3VuZCwgaHMtPmdyb3VwcywgaHMtPmNyLCBocy0+ZmxhZ3MsCi0JCQkJaHMtPm1lcmdlZCA/ICJNIiA6ICIiLCBocy0+dGFpbCwKLQkJCQlocy0+YnVkZHkgPyAxIDw8IGhzLT5idWRkeSA6IDApOwotCX0gZWxzZSBpZiAoaHMtPm9wID09IEVYVDRfTUJfSElTVE9SWV9QUkVBTExPQykgewotCQlmbXQgPSAiJS01dSAlLTh1ICUtMjNzICUtMjNzICUtMjNzXG4iOwotCQlzcHJpbnRmKGJ1ZjIsICIldS8lZC8ldUAldSIsIGhzLT5yZXN1bHQuZmVfZ3JvdXAsCi0JCQlocy0+cmVzdWx0LmZlX3N0YXJ0LCBocy0+cmVzdWx0LmZlX2xlbiwKLQkJCWhzLT5yZXN1bHQuZmVfbG9naWNhbCk7Ci0JCXNwcmludGYoYnVmLCAiJXUvJWQvJXVAJXUiLCBocy0+b3JpZy5mZV9ncm91cCwKLQkJCWhzLT5vcmlnLmZlX3N0YXJ0LCBocy0+b3JpZy5mZV9sZW4sCi0JCQlocy0+b3JpZy5mZV9sb2dpY2FsKTsKLQkJc2VxX3ByaW50ZihzZXEsIGZtdCwgaHMtPnBpZCwgaHMtPmlubywgYnVmLCAiIiwgYnVmMik7Ci0JfSBlbHNlIGlmIChocy0+b3AgPT0gRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQpIHsKLQkJc3ByaW50ZihidWYyLCAiJXUvJWQvJXUiLCBocy0+cmVzdWx0LmZlX2dyb3VwLAotCQkJaHMtPnJlc3VsdC5mZV9zdGFydCwgaHMtPnJlc3VsdC5mZV9sZW4pOwotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNXUgJS04dSAlLTIzcyBkaXNjYXJkXG4iLAotCQkJCWhzLT5waWQsIGhzLT5pbm8sIGJ1ZjIpOwotCX0gZWxzZSBpZiAoaHMtPm9wID09IEVYVDRfTUJfSElTVE9SWV9GUkVFKSB7Ci0JCXNwcmludGYoYnVmMiwgIiV1LyVkLyV1IiwgaHMtPnJlc3VsdC5mZV9ncm91cCwKLQkJCWhzLT5yZXN1bHQuZmVfc3RhcnQsIGhzLT5yZXN1bHQuZmVfbGVuKTsKLQkJc2VxX3ByaW50ZihzZXEsICIlLTV1ICUtOHUgJS0yM3MgZnJlZVxuIiwKLQkJCQlocy0+cGlkLCBocy0+aW5vLCBidWYyKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4dDRfbWJfc2VxX2hpc3Rvcnlfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBleHQ0X21iX3NlcV9oaXN0b3J5X29wcyA9IHsKLQkuc3RhcnQgID0gZXh0NF9tYl9zZXFfaGlzdG9yeV9zdGFydCwKLQkubmV4dCAgID0gZXh0NF9tYl9zZXFfaGlzdG9yeV9uZXh0LAotCS5zdG9wICAgPSBleHQ0X21iX3NlcV9oaXN0b3J5X3N0b3AsCi0JLnNob3cgICA9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfc2hvdywKLX07Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9zZXFfaGlzdG9yeV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBQREUoaW5vZGUpLT5kYXRhOwotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCXN0cnVjdCBleHQ0X21iX3Byb2Nfc2Vzc2lvbiAqczsKLQlpbnQgcmM7Ci0JaW50IHNpemU7Ci0KLQlpZiAodW5saWtlbHkoc2JpLT5zX21iX2hpc3RvcnkgPT0gTlVMTCkpCi0JCXJldHVybiAtRU5PTUVNOwotCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOwotCWlmIChzID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCXMtPnNiID0gc2I7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5KSAqIHNiaS0+c19tYl9oaXN0b3J5X21heDsKLQlzLT5oaXN0b3J5ID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocy0+aGlzdG9yeSA9PSBOVUxMKSB7Ci0JCWtmcmVlKHMpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzcGluX2xvY2soJnNiaS0+c19tYl9oaXN0b3J5X2xvY2spOwotCW1lbWNweShzLT5oaXN0b3J5LCBzYmktPnNfbWJfaGlzdG9yeSwgc2l6ZSk7Ci0Jcy0+bWF4ID0gc2JpLT5zX21iX2hpc3RvcnlfbWF4OwotCXMtPnN0YXJ0ID0gc2JpLT5zX21iX2hpc3RvcnlfY3VyICUgcy0+bWF4OwotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLQotCXJjID0gc2VxX29wZW4oZmlsZSwgJmV4dDRfbWJfc2VxX2hpc3Rvcnlfb3BzKTsKLQlpZiAocmMgPT0gMCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSAoc3RydWN0IHNlcV9maWxlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gczsKLQl9IGVsc2UgewotCQlrZnJlZShzLT5oaXN0b3J5KTsKLQkJa2ZyZWUocyk7Ci0JfQotCXJldHVybiByYzsKLQotfQotCi1zdGF0aWMgaW50IGV4dDRfbWJfc2VxX2hpc3RvcnlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCWtmcmVlKHMtPmhpc3RvcnkpOwotCWtmcmVlKHMpOwotCXJldHVybiBzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGV4dDRfbWJfc2VxX2hpc3Rvcnlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGV4dDRfbWJfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzLT5zYjsKLQljaGFyIHN0clszMl07Ci0JaW50IHZhbHVlOwotCi0JaWYgKGNvdW50ID49IHNpemVvZihzdHIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogJXMgc3RyaW5nIHRvbyBsb25nLCBtYXggJXUgYnl0ZXNcbiIsCi0JCQkJIm1iX2hpc3RvcnkiLCAoaW50KXNpemVvZihzdHIpKTsKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JdmFsdWUgPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMCk7Ci0JaWYgKHZhbHVlIDwgMCkKLQkJcmV0dXJuIC1FUkFOR0U7Ci0JRVhUNF9TQihzYiktPnNfbWJfaGlzdG9yeV9maWx0ZXIgPSB2YWx1ZTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9tYl9zZXFfaGlzdG9yeV9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBleHQ0X21iX3NlcV9oaXN0b3J5X29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLndyaXRlCQk9IGV4dDRfbWJfc2VxX2hpc3Rvcnlfd3JpdGUsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBleHQ0X21iX3NlcV9oaXN0b3J5X3JlbGVhc2UsCi19OwotCiBzdGF0aWMgdm9pZCAqZXh0NF9tYl9zZXFfZ3JvdXBzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2VxLT5wcml2YXRlOwpAQCAtMjM5Niw4MiArMjE5NSw2IEBACiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyB2b2lkIGV4dDRfbWJfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0KLQlpZiAoc2JpLT5zX3Byb2MgIT0gTlVMTCkgewotCQlyZW1vdmVfcHJvY19lbnRyeSgibWJfZ3JvdXBzIiwgc2JpLT5zX3Byb2MpOwotCQlpZiAoc2JpLT5zX21iX2hpc3RvcnlfbWF4KQotCQkJcmVtb3ZlX3Byb2NfZW50cnkoIm1iX2hpc3RvcnkiLCBzYmktPnNfcHJvYyk7Ci0JfQotCWtmcmVlKHNiaS0+c19tYl9oaXN0b3J5KTsKLX0KLQotc3RhdGljIHZvaWQgZXh0NF9tYl9oaXN0b3J5X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKLQlpbnQgaTsKLQotCWlmIChzYmktPnNfcHJvYyAhPSBOVUxMKSB7Ci0JCWlmIChzYmktPnNfbWJfaGlzdG9yeV9tYXgpCi0JCQlwcm9jX2NyZWF0ZV9kYXRhKCJtYl9oaXN0b3J5IiwgU19JUlVHTywgc2JpLT5zX3Byb2MsCi0JCQkJCSAmZXh0NF9tYl9zZXFfaGlzdG9yeV9mb3BzLCBzYik7Ci0JCXByb2NfY3JlYXRlX2RhdGEoIm1iX2dyb3VwcyIsIFNfSVJVR08sIHNiaS0+c19wcm9jLAotCQkJCSAmZXh0NF9tYl9zZXFfZ3JvdXBzX2ZvcHMsIHNiKTsKLQl9Ci0KLQlzYmktPnNfbWJfaGlzdG9yeV9jdXIgPSAwOwotCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLQlpID0gc2JpLT5zX21iX2hpc3RvcnlfbWF4ICogc2l6ZW9mKHN0cnVjdCBleHQ0X21iX2hpc3RvcnkpOwotCXNiaS0+c19tYl9oaXN0b3J5ID0gaSA/IGt6YWxsb2MoaSwgR0ZQX0tFUk5FTCkgOiBOVUxMOwotCS8qIGlmIHdlIGNhbid0IGFsbG9jYXRlIGhpc3RvcnksIHRoZW4gd2Ugc2ltcGxlIHdvbid0IHVzZSBpdCAqLwotfQotCi1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQKLWV4dDRfbWJfc3RvcmVfaGlzdG9yeShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKQotewotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoYWMtPmFjX3NiKTsKLQlzdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5IGg7Ci0KLQlpZiAoc2JpLT5zX21iX2hpc3RvcnkgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKCEoYWMtPmFjX29wICYgc2JpLT5zX21iX2hpc3RvcnlfZmlsdGVyKSkKLQkJcmV0dXJuOwotCi0JaC5vcCA9IGFjLT5hY19vcDsKLQloLnBpZCA9IGN1cnJlbnQtPnBpZDsKLQloLmlubyA9IGFjLT5hY19pbm9kZSA/IGFjLT5hY19pbm9kZS0+aV9pbm8gOiAwOwotCWgub3JpZyA9IGFjLT5hY19vX2V4OwotCWgucmVzdWx0ID0gYWMtPmFjX2JfZXg7Ci0JaC5mbGFncyA9IGFjLT5hY19mbGFnczsKLQloLmZvdW5kID0gYWMtPmFjX2ZvdW5kOwotCWguZ3JvdXBzID0gYWMtPmFjX2dyb3Vwc19zY2FubmVkOwotCWguY3IgPSBhYy0+YWNfY3JpdGVyaWE7Ci0JaC50YWlsID0gYWMtPmFjX3RhaWw7Ci0JaC5idWRkeSA9IGFjLT5hY19idWRkeTsKLQloLm1lcmdlZCA9IDA7Ci0JaWYgKGFjLT5hY19vcCA9PSBFWFQ0X01CX0hJU1RPUllfQUxMT0MpIHsKLQkJaWYgKGFjLT5hY19nX2V4LmZlX3N0YXJ0ID09IGFjLT5hY19iX2V4LmZlX3N0YXJ0ICYmCi0JCQkJYWMtPmFjX2dfZXguZmVfZ3JvdXAgPT0gYWMtPmFjX2JfZXguZmVfZ3JvdXApCi0JCQloLm1lcmdlZCA9IDE7Ci0JCWguZ29hbCA9IGFjLT5hY19nX2V4OwotCQloLnJlc3VsdCA9IGFjLT5hY19mX2V4OwotCX0KLQotCXNwaW5fbG9jaygmc2JpLT5zX21iX2hpc3RvcnlfbG9jayk7Ci0JbWVtY3B5KHNiaS0+c19tYl9oaXN0b3J5ICsgc2JpLT5zX21iX2hpc3RvcnlfY3VyLCAmaCwgc2l6ZW9mKGgpKTsKLQlpZiAoKytzYmktPnNfbWJfaGlzdG9yeV9jdXIgPj0gc2JpLT5zX21iX2hpc3RvcnlfbWF4KQotCQlzYmktPnNfbWJfaGlzdG9yeV9jdXIgPSAwOwotCXNwaW5fdW5sb2NrKCZzYmktPnNfbWJfaGlzdG9yeV9sb2NrKTsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgZXh0NF9tYl9oaXN0b3J5X3JlbGVhc2Uoc2IpCi0jZGVmaW5lIGV4dDRfbWJfaGlzdG9yeV9pbml0KHNiKQotI2VuZGlmCi0KIAogLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGV4dDRfZ3JvdXBfaW5mbyBkYXRhIGZvciB0aGUgZ2l2ZW4gZ3JvdXAuICovCiBpbnQgZXh0NF9tYl9hZGRfZ3JvdXBpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGV4dDRfZ3JvdXBfdCBncm91cCwKQEAgLTI2OTAsNyArMjQxMyw2IEBACiAJc2JpLT5zX21iX3N0YXRzID0gTUJfREVGQVVMVF9TVEFUUzsKIAlzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QgPSBNQl9ERUZBVUxUX1NUUkVBTV9USFJFU0hPTEQ7CiAJc2JpLT5zX21iX29yZGVyMl9yZXFzID0gTUJfREVGQVVMVF9PUkRFUjJfUkVRUzsKLQlzYmktPnNfbWJfaGlzdG9yeV9maWx0ZXIgPSBFWFQ0X01CX0hJU1RPUllfREVGQVVMVDsKIAlzYmktPnNfbWJfZ3JvdXBfcHJlYWxsb2MgPSBNQl9ERUZBVUxUX0dST1VQX1BSRUFMTE9DOwogCiAJc2JpLT5zX2xvY2FsaXR5X2dyb3VwcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZXh0NF9sb2NhbGl0eV9ncm91cCk7CkBAIC0yNzA4LDEyICsyNDMwLDEyIEBACiAJCXNwaW5fbG9ja19pbml0KCZsZy0+bGdfcHJlYWxsb2NfbG9jayk7CiAJfQogCi0JZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpOworCWlmIChzYmktPnNfcHJvYykKKwkJcHJvY19jcmVhdGVfZGF0YSgibWJfZ3JvdXBzIiwgU19JUlVHTywgc2JpLT5zX3Byb2MsCisJCQkJICZleHQ0X21iX3NlcV9ncm91cHNfZm9wcywgc2IpOwogCiAJaWYgKHNiaS0+c19qb3VybmFsKQogCQlzYmktPnNfam91cm5hbC0+al9jb21taXRfY2FsbGJhY2sgPSByZWxlYXNlX2Jsb2Nrc19vbl9jb21taXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFWFQ0LWZzOiBtYmFsbG9jIGVuYWJsZWRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzkwLDcgKzI1MTIsOCBAQAogCX0KIAogCWZyZWVfcGVyY3B1KHNiaS0+c19sb2NhbGl0eV9ncm91cHMpOwotCWV4dDRfbWJfaGlzdG9yeV9yZWxlYXNlKHNiKTsKKwlpZiAoc2JpLT5zX3Byb2MpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJtYl9ncm91cHMiLCBzYmktPnNfcHJvYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNzYsNyArMjk5OSwxMCBAQAogCQkJYXRvbWljX2luYygmc2JpLT5zX2JhbF9icmVha3MpOwogCX0KIAotCWV4dDRfbWJfc3RvcmVfaGlzdG9yeShhYyk7CisJaWYgKGFjLT5hY19vcCA9PSBFWFQ0X01CX0hJU1RPUllfQUxMT0MpCisJCXRyYWNlX2V4dDRfbWJhbGxvY19hbGxvYyhhYyk7CisJZWxzZQorCQl0cmFjZV9leHQ0X21iYWxsb2NfcHJlYWxsb2MoYWMpOwogfQogCiAvKgpAQCAtMzc3Niw3ICszNTAyLDYgQEAKIAlpZiAoYWMpIHsKIAkJYWMtPmFjX3NiID0gc2I7CiAJCWFjLT5hY19pbm9kZSA9IHBhLT5wYV9pbm9kZTsKLQkJYWMtPmFjX29wID0gRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQ7CiAJfQogCiAJd2hpbGUgKGJpdCA8IGVuZCkgewpAQCAtMzc5Niw3ICszNTIxLDcgQEAKIAkJCWFjLT5hY19iX2V4LmZlX3N0YXJ0ID0gYml0OwogCQkJYWMtPmFjX2JfZXguZmVfbGVuID0gbmV4dCAtIGJpdDsKIAkJCWFjLT5hY19iX2V4LmZlX2xvZ2ljYWwgPSAwOwotCQkJZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwkJCXRyYWNlX2V4dDRfbWJhbGxvY19kaXNjYXJkKGFjKTsKIAkJfQogCiAJCXRyYWNlX2V4dDRfbWJfcmVsZWFzZV9pbm9kZV9wYShhYywgcGEsIGdycF9ibGtfc3RhcnQgKyBiaXQsCkBAIC0zODMxLDkgKzM1NTYsNiBAQAogCWV4dDRfZ3JvdXBfdCBncm91cDsKIAlleHQ0X2dycGJsa190IGJpdDsKIAotCWlmIChhYykKLQkJYWMtPmFjX29wID0gRVhUNF9NQl9ISVNUT1JZX0RJU0NBUkQ7Ci0KIAl0cmFjZV9leHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoYWMsIHBhKTsKIAlCVUdfT04ocGEtPnBhX2RlbGV0ZWQgPT0gMCk7CiAJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgcGEtPnBhX3BzdGFydCwgJmdyb3VwLCAmYml0KTsKQEAgLTM4NDgsNyArMzU3MCw3IEBACiAJCWFjLT5hY19iX2V4LmZlX3N0YXJ0ID0gYml0OwogCQlhYy0+YWNfYl9leC5mZV9sZW4gPSBwYS0+cGFfbGVuOwogCQlhYy0+YWNfYl9leC5mZV9sb2dpY2FsID0gMDsKLQkJZXh0NF9tYl9zdG9yZV9oaXN0b3J5KGFjKTsKKwkJdHJhY2VfZXh0NF9tYmFsbG9jX2Rpc2NhcmQoYWMpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDE4OSw3ICszOTExLDYgQEAKIAlzaXplID0gYWMtPmFjX29fZXguZmVfbG9naWNhbCArIGFjLT5hY19vX2V4LmZlX2xlbjsKIAlpc2l6ZSA9IChpX3NpemVfcmVhZChhYy0+YWNfaW5vZGUpICsgYWMtPmFjX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpCiAJCT4+IGJzYml0czsKLQlzaXplID0gbWF4KHNpemUsIGlzaXplKTsKIAogCWlmICgoc2l6ZSA9PSBpc2l6ZSkgJiYKIAkgICAgIWV4dDRfZnNfaXNfYnVzeShzYmkpICYmCkBAIC00MTk5LDYgKzM5MjAsNyBAQAogCX0KIAogCS8qIGRvbid0IHVzZSBncm91cCBhbGxvY2F0aW9uIGZvciBsYXJnZSBmaWxlcyAqLworCXNpemUgPSBtYXgoc2l6ZSwgaXNpemUpOwogCWlmIChzaXplID49IHNiaS0+c19tYl9zdHJlYW1fcmVxdWVzdCkgewogCQlhYy0+YWNfZmxhZ3MgfD0gRVhUNF9NQl9TVFJFQU1fQUxMT0M7CiAJCXJldHVybjsKQEAgLTQ3MzksNyArNDQ2MSw2IEBACiAKIAlhYyA9IGttZW1fY2FjaGVfYWxsb2MoZXh0NF9hY19jYWNoZXAsIEdGUF9OT0ZTKTsKIAlpZiAoYWMpIHsKLQkJYWMtPmFjX29wID0gRVhUNF9NQl9ISVNUT1JZX0ZSRUU7CiAJCWFjLT5hY19pbm9kZSA9IGlub2RlOwogCQlhYy0+YWNfc2IgPSBzYjsKIAl9CkBAIC00ODA2LDcgKzQ1MjcsNyBAQAogCQlhYy0+YWNfYl9leC5mZV9ncm91cCA9IGJsb2NrX2dyb3VwOwogCQlhYy0+YWNfYl9leC5mZV9zdGFydCA9IGJpdDsKIAkJYWMtPmFjX2JfZXguZmVfbGVuID0gY291bnQ7Ci0JCWV4dDRfbWJfc3RvcmVfaGlzdG9yeShhYyk7CisJCXRyYWNlX2V4dDRfbWJhbGxvY19mcmVlKGFjKTsKIAl9CiAKIAllcnIgPSBleHQ0X21iX2xvYWRfYnVkZHkoc2IsIGJsb2NrX2dyb3VwLCAmZTRiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggMTg4ZDNkNy4uMGNhODExMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTUyLDE4ICs1Miw4IEBACiAjZGVmaW5lIG1iX2RlYnVnKG4sIGZtdCwgYS4uLikKICNlbmRpZgogCi0vKgotICogd2l0aCBFWFQ0X01CX0hJU1RPUlkgbWJhbGxvYyBzdG9yZXMgbGFzdCBOIGFsbG9jYXRpb25zIGluIG1lbW9yeQotICogYW5kIHlvdSBjYW4gbW9uaXRvciBpdCBpbiAvcHJvYy9mcy9leHQ0LzxkZXY+L21iX2hpc3RvcnkKLSAqLwotI2RlZmluZSBFWFQ0X01CX0hJU1RPUlkKICNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX0FMTE9DCQkxCS8qIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgRVhUNF9NQl9ISVNUT1JZX1BSRUFMTE9DCTIJLyogcHJlYWxsb2NhdGVkIGJsb2NrcyB1c2VkICovCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWV9ESVNDQVJECQk0CS8qIHByZWFsbG9jYXRpb24gZGlzY2FyZGVkICovCi0jZGVmaW5lIEVYVDRfTUJfSElTVE9SWV9GUkVFCQk4CS8qIGZyZWUgKi8KLQotI2RlZmluZSBFWFQ0X01CX0hJU1RPUllfREVGQVVMVAkJKEVYVDRfTUJfSElTVE9SWV9BTExPQyB8IFwKLQkJCQkJIEVYVDRfTUJfSElTVE9SWV9QUkVBTExPQykKIAogLyoKICAqIEhvdyBsb25nIG1iYWxsb2MgY2FuIGxvb2sgZm9yIGEgYmVzdCBleHRlbnQgKGluIGZvdW5kIGV4dGVudHMpCkBAIC04NCw3ICs3NCw3IEBACiAgKiB3aXRoICdleHQ0X21iX3N0YXRzJyBhbGxvY2F0b3Igd2lsbCBjb2xsZWN0IHN0YXRzIHRoYXQgd2lsbCBiZQogICogc2hvd24gYXQgdW1vdW50LiBUaGUgY29sbGVjdGluZyBjb3N0cyB0aG91Z2ghCiAgKi8KLSNkZWZpbmUgTUJfREVGQVVMVF9TVEFUUwkJMQorI2RlZmluZSBNQl9ERUZBVUxUX1NUQVRTCQkwCiAKIC8qCiAgKiBmaWxlcyBzbWFsbGVyIHRoYW4gTUJfREVGQVVMVF9TVFJFQU1fVEhSRVNIT0xEIGFyZSBzZXJ2ZWQKQEAgLTIxNywyMiArMjA3LDYgQEAKICNkZWZpbmUgQUNfU1RBVFVTX0ZPVU5ECQkyCiAjZGVmaW5lIEFDX1NUQVRVU19CUkVBSwkJMwogCi1zdHJ1Y3QgZXh0NF9tYl9oaXN0b3J5IHsKLQlzdHJ1Y3QgZXh0NF9mcmVlX2V4dGVudCBvcmlnOwkvKiBvcmlnIGFsbG9jYXRpb24gKi8KLQlzdHJ1Y3QgZXh0NF9mcmVlX2V4dGVudCBnb2FsOwkvKiBnb2FsIGFsbG9jYXRpb24gKi8KLQlzdHJ1Y3QgZXh0NF9mcmVlX2V4dGVudCByZXN1bHQ7CS8qIHJlc3VsdCBhbGxvY2F0aW9uICovCi0JdW5zaWduZWQgcGlkOwotCXVuc2lnbmVkIGlubzsKLQlfX3UxNiBmb3VuZDsJLyogaG93IG1hbnkgZXh0ZW50cyBoYXZlIGJlZW4gZm91bmQgKi8KLQlfX3UxNiBncm91cHM7CS8qIGhvdyBtYW55IGdyb3VwcyBoYXZlIGJlZW4gc2Nhbm5lZCAqLwotCV9fdTE2IHRhaWw7CS8qIHdoYXQgdGFpbCBicm9rZSBzb21lIGJ1ZGR5ICovCi0JX191MTYgYnVkZHk7CS8qIGJ1ZGR5IHRoZSB0YWlsIF5eXiBicm9rZSAqLwotCV9fdTE2IGZsYWdzOwotCV9fdTggY3I6MzsJLyogd2hpY2ggcGhhc2UgdGhlIHJlc3VsdCBleHRlbnQgd2FzIGZvdW5kIGF0ICovCi0JX191OCBvcDo0OwotCV9fdTggbWVyZ2VkOjE7Ci19OwotCiBzdHJ1Y3QgZXh0NF9idWRkeSB7CiAJc3RydWN0IHBhZ2UgKmJkX2J1ZGR5X3BhZ2U7CiAJdm9pZCAqYmRfYnVkZHk7CkBAIC0yNDcsMTMgKzIyMSw2IEBACiAjZGVmaW5lIEVYVDRfTUJfQklUTUFQKGU0YikJKChlNGIpLT5iZF9iaXRtYXApCiAjZGVmaW5lIEVYVDRfTUJfQlVERFkoZTRiKQkoKGU0YiktPmJkX2J1ZGR5KQogCi0jaWZuZGVmIEVYVDRfTUJfSElTVE9SWQotc3RhdGljIGlubGluZSB2b2lkIGV4dDRfbWJfc3RvcmVfaGlzdG9yeShzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKQotewotCXJldHVybjsKLX0KLSNlbmRpZgotCiAjZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKIAogc3RhdGljIGlubGluZSBleHQ0X2ZzYmxrX3QgZXh0NF9ncnBfb2Zmc190b19ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9taWdyYXRlLmMgYi9mcy9leHQ0L21pZ3JhdGUuYwppbmRleCBiZjUxOWYyLi5hOTNkNWI4IDEwMDY0NAotLS0gYS9mcy9leHQ0L21pZ3JhdGUuYworKysgYi9mcy9leHQ0L21pZ3JhdGUuYwpAQCAtNzUsNyArNzUsNyBAQAogCQkJCWdvdG8gZXJyX291dDsKIAkJfQogCX0KLQlyZXR2YWwgPSBleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgaW5vZGUsIHBhdGgsICZuZXdleHQpOworCXJldHZhbCA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4dCwgMCk7CiBlcnJfb3V0OgogCWlmIChwYXRoKSB7CiAJCWV4dDRfZXh0X2Ryb3BfcmVmcyhwYXRoKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYyBiL2ZzL2V4dDQvbW92ZV9leHRlbnQuYwppbmRleCBjMDdhMjkxLi4yNWI2YjE0IDEwMDY0NAotLS0gYS9mcy9leHQ0L21vdmVfZXh0ZW50LmMKKysrIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmIChleHQ0X2V4dF9pbnNlcnRfZXh0ZW50KGhhbmRsZSwgb3JpZ19pbm9kZSwKLQkJCQkJb3JpZ19wYXRoLCBuZXdfZXh0KSkKKwkJCQkJb3JpZ19wYXRoLCBuZXdfZXh0LCAwKSkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtMzMzLDcgKzMzMyw3IEBACiAJCQlnb3RvIG91dDsKIAogCQlpZiAoZXh0NF9leHRfaW5zZXJ0X2V4dGVudChoYW5kbGUsIG9yaWdfaW5vZGUsCi0JCQkJCSAgIG9yaWdfcGF0aCwgZW5kX2V4dCkpCisJCQkJCSAgIG9yaWdfcGF0aCwgZW5kX2V4dCwgMCkpCiAJCQlnb3RvIG91dDsKIAl9CiBvdXQ6CkBAIC0xMDAxLDE0ICsxMDAxLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogb3JpZyBhbmQgZG9ub3Igc2hvdWxkIGJlIGRpZmZlcmVudCBmaWxlICovCi0JaWYgKG9yaWdfaW5vZGUtPmlfaW5vID09IGRvbm9yX2lub2RlLT5pX2lubykgewotCQlleHQ0X2RlYnVnKCJleHQ0IG1vdmUgZXh0ZW50OiBUaGUgYXJndW1lbnQgZmlsZXMgc2hvdWxkIG5vdCAiCi0JCQkiYmUgc2FtZSBmaWxlIFtpbm86b3JpZyAlbHUsIGRvbm9yICVsdV1cbiIsCi0JCQlvcmlnX2lub2RlLT5pX2lubywgZG9ub3JfaW5vZGUtPmlfaW5vKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJLyogRXh0NCBtb3ZlIGV4dGVudCBzdXBwb3J0cyBvbmx5IGV4dGVudCBiYXNlZCBmaWxlICovCiAJaWYgKCEoRVhUNF9JKG9yaWdfaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkgewogCQlleHQ0X2RlYnVnKCJleHQ0IG1vdmUgZXh0ZW50OiBvcmlnIGZpbGUgaXMgbm90IGV4dGVudHMgIgpAQCAtMTIzMiw2ICsxMjI0LDE0IEBACiAJaW50IGJsb2NrX2xlbl9pbl9wYWdlOwogCWludCB1bmluaXQ7CiAKKwkvKiBvcmlnIGFuZCBkb25vciBzaG91bGQgYmUgZGlmZmVyZW50IGZpbGUgKi8KKwlpZiAob3JpZ19pbm9kZS0+aV9pbm8gPT0gZG9ub3JfaW5vZGUtPmlfaW5vKSB7CisJCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgbm90ICIKKwkJCSJiZSBzYW1lIGZpbGUgW2lubzpvcmlnICVsdSwgZG9ub3IgJWx1XVxuIiwKKwkJCW9yaWdfaW5vZGUtPmlfaW5vLCBkb25vcl9pbm9kZS0+aV9pbm8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBwcm90ZWN0IG9yaWcgYW5kIGRvbm9yIGFnYWluc3QgYSB0cnVuY2F0ZSAqLwogCXJldDEgPSBtZXh0X2lub2RlX2RvdWJsZV9sb2NrKG9yaWdfaW5vZGUsIGRvbm9yX2lub2RlKTsKIAlpZiAocmV0MSA8IDApCmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggNDJmODFkMi4uNmQyYzFiOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMTUxOCwxMiArMTUxOCw4IEBACiAJCQlyZXR1cm4gcmV0dmFsOwogCiAJCWlmIChibG9ja3MgPT0gMSAmJiAhZHhfZmFsbGJhY2sgJiYKLQkJICAgIEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpIHsKLQkJCXJldHZhbCA9IG1ha2VfaW5kZXhlZF9kaXIoaGFuZGxlLCBkZW50cnksIGlub2RlLCBiaCk7Ci0JCQlpZiAocmV0dmFsID09IC1FTk9TUEMpCi0JCQkJYnJlbHNlKGJoKTsKLQkJCXJldHVybiByZXR2YWw7Ci0JCX0KKwkJICAgIEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkpCisJCQlyZXR1cm4gbWFrZV9pbmRleGVkX2RpcihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJYmggPSBleHQ0X2FwcGVuZChoYW5kbGUsIGRpciwgJmJsb2NrLCAmcmV0dmFsKTsKQEAgLTE1MzIsMTAgKzE1MjgsNyBAQAogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGJoLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gMDsKIAlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSwgYmxvY2tzaXplKTsKLQlyZXR2YWwgPSBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7Ci0JaWYgKHJldHZhbCA9PSAtRU5PU1BDKQotCQlicmVsc2UoYmgpOwotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKIH0KIAogLyoKQEAgLTE2NjQsOCArMTY1Nyw3IEBACiAJaWYgKCFkZSkKIAkJZ290byBjbGVhbnVwOwogCWVyciA9IGFkZF9kaXJlbnRfdG9fYnVmKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgZGUsIGJoKTsKLQlpZiAoZXJyICE9IC1FTk9TUEMpCi0JCWJoID0gTlVMTDsKKwliaCA9IE5VTEw7CiAJZ290byBjbGVhbnVwOwogCiBqb3VybmFsX2Vycm9yOgpAQCAtMjA3Niw3ICsyMDY4LDggQEAKIAlzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAoIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpCisJLyogZXh0NF9oYW5kbGVfdmFsaWQoKSBhc3N1bWVzIGEgdmFsaWQgaGFuZGxlX3QgcG9pbnRlciAqLworCWlmIChoYW5kbGUgJiYgIWV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkpCiAJCXJldHVybiAwOwogCiAJbXV0ZXhfbG9jaygmRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfb3JwaGFuX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IGRmNTM5YmEuLmQ0Y2E5MmEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTUwLDEzICs1MCw2IEBACiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvZXh0NC5oPgogCi1zdGF0aWMgaW50IGRlZmF1bHRfbWJfaGlzdG9yeV9sZW5ndGggPSAxMDAwOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCwgZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCwKLQkJICAgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9tYl9oaXN0b3J5X2xlbmd0aCwKLQkJICJEZWZhdWx0IG51bWJlciBvZiBlbnRyaWVzIHNhdmVkIGZvciBtYl9oaXN0b3J5Iik7Ci0KIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZXh0NF9wcm9jX3Jvb3Q7CiBzdGF0aWMgc3RydWN0IGtzZXQgKmV4dDRfa3NldDsKIApAQCAtMTg5LDYgKzE4MiwzNiBAQAogCQliZy0+YmdfaXRhYmxlX3VudXNlZF9oaSA9IGNwdV90b19sZTE2KGNvdW50ID4+IDE2KTsKIH0KIAorCisvKiBKdXN0IGluY3JlbWVudCB0aGUgbm9uLXBvaW50ZXIgaGFuZGxlIHZhbHVlICovCitzdGF0aWMgaGFuZGxlX3QgKmV4dDRfZ2V0X25vam91cm5hbCh2b2lkKQoreworCWhhbmRsZV90ICpoYW5kbGUgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CisJdW5zaWduZWQgbG9uZyByZWZfY250ID0gKHVuc2lnbmVkIGxvbmcpaGFuZGxlOworCisJQlVHX09OKHJlZl9jbnQgPj0gRVhUNF9OT0pPVVJOQUxfTUFYX1JFRl9DT1VOVCk7CisKKwlyZWZfY250Kys7CisJaGFuZGxlID0gKGhhbmRsZV90ICopcmVmX2NudDsKKworCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IGhhbmRsZTsKKwlyZXR1cm4gaGFuZGxlOworfQorCisKKy8qIERlY3JlbWVudCB0aGUgbm9uLXBvaW50ZXIgaGFuZGxlIHZhbHVlICovCitzdGF0aWMgdm9pZCBleHQ0X3B1dF9ub2pvdXJuYWwoaGFuZGxlX3QgKmhhbmRsZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJlZl9jbnQgPSAodW5zaWduZWQgbG9uZyloYW5kbGU7CisKKwlCVUdfT04ocmVmX2NudCA9PSAwKTsKKworCXJlZl9jbnQtLTsKKwloYW5kbGUgPSAoaGFuZGxlX3QgKilyZWZfY250OworCisJY3VycmVudC0+am91cm5hbF9pbmZvID0gaGFuZGxlOworfQorCiAvKgogICogV3JhcHBlcnMgZm9yIGpiZDJfam91cm5hbF9zdGFydC9lbmQuCiAgKgpAQCAtMjE1LDExICsyMzgsNyBAQAogCQl9CiAJCXJldHVybiBqYmQyX2pvdXJuYWxfc3RhcnQoam91cm5hbCwgbmJsb2Nrcyk7CiAJfQotCS8qCi0JICogV2UncmUgbm90IGpvdXJuYWxpbmcsIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgaW5kaWNhdGlvbi4KLQkgKi8KLQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBFWFQ0X05PSk9VUk5BTF9IQU5ETEU7Ci0JcmV0dXJuIGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKKwlyZXR1cm4gZXh0NF9nZXRfbm9qb3VybmFsKCk7CiB9CiAKIC8qCkBAIC0yMzUsMTEgKzI1NCw3IEBACiAJaW50IHJjOwogCiAJaWYgKCFleHQ0X2hhbmRsZV92YWxpZChoYW5kbGUpKSB7Ci0JCS8qCi0JCSAqIERvIHRoaXMgaGVyZSBzaW5jZSB3ZSBkb24ndCBjYWxsIGpiZDJfam91cm5hbF9zdG9wKCkgaW4KLQkJICogbm8tam91cm5hbCBtb2RlLgotCQkgKi8KLQkJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKKwkJZXh0NF9wdXRfbm9qb3VybmFsKGhhbmRsZSk7CiAJCXJldHVybiAwOwogCX0KIAlzYiA9IGhhbmRsZS0+aF90cmFuc2FjdGlvbi0+dF9qb3VybmFsLT5qX3ByaXZhdGU7CkBAIC01ODAsNiArNTk1LDkgQEAKIAlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBzYmktPnNfZXM7CiAJaW50IGksIGVycjsKIAorCWZsdXNoX3dvcmtxdWV1ZShzYmktPmRpb191bndyaXR0ZW5fd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHNiaS0+ZGlvX3Vud3JpdHRlbl93cSk7CisKIAlsb2NrX3N1cGVyKHNiKTsKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChzYi0+c19kaXJ0KQpAQCAtNjg0LDYgKzcwMiw4IEBACiAJZWktPmlfYWxsb2NhdGVkX21ldGFfYmxvY2tzID0gMDsKIAllaS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmKGVpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spKTsKKwlJTklUX0xJU1RfSEVBRCgmZWktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KTsKKwllaS0+Y3VyX2Fpb19kaW8gPSBOVUxMOwogCiAJcmV0dXJuICZlaS0+dmZzX2lub2RlOwogfQpAQCAtMTA1Miw3ICsxMDcyLDcgQEAKIAlPcHRfam91cm5hbF91cGRhdGUsIE9wdF9qb3VybmFsX2RldiwKIAlPcHRfam91cm5hbF9jaGVja3N1bSwgT3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0LAogCU9wdF9hYm9ydCwgT3B0X2RhdGFfam91cm5hbCwgT3B0X2RhdGFfb3JkZXJlZCwgT3B0X2RhdGFfd3JpdGViYWNrLAotCU9wdF9kYXRhX2Vycl9hYm9ydCwgT3B0X2RhdGFfZXJyX2lnbm9yZSwgT3B0X21iX2hpc3RvcnlfbGVuZ3RoLAorCU9wdF9kYXRhX2Vycl9hYm9ydCwgT3B0X2RhdGFfZXJyX2lnbm9yZSwKIAlPcHRfdXNyanF1b3RhLCBPcHRfZ3JwanF1b3RhLCBPcHRfb2ZmdXNyanF1b3RhLCBPcHRfb2ZmZ3JwanF1b3RhLAogCU9wdF9qcWZtdF92ZnNvbGQsIE9wdF9qcWZtdF92ZnN2MCwgT3B0X3F1b3RhLCBPcHRfbm9xdW90YSwKIAlPcHRfaWdub3JlLCBPcHRfYmFycmllciwgT3B0X25vYmFycmllciwgT3B0X2VyciwgT3B0X3Jlc2l6ZSwKQEAgLTEwOTksNyArMTExOSw2IEBACiAJe09wdF9kYXRhX3dyaXRlYmFjaywgImRhdGE9d3JpdGViYWNrIn0sCiAJe09wdF9kYXRhX2Vycl9hYm9ydCwgImRhdGFfZXJyPWFib3J0In0sCiAJe09wdF9kYXRhX2Vycl9pZ25vcmUsICJkYXRhX2Vycj1pZ25vcmUifSwKLQl7T3B0X21iX2hpc3RvcnlfbGVuZ3RoLCAibWJfaGlzdG9yeV9sZW5ndGg9JXUifSwKIAl7T3B0X29mZnVzcmpxdW90YSwgInVzcmpxdW90YT0ifSwKIAl7T3B0X3VzcmpxdW90YSwgInVzcmpxdW90YT0lcyJ9LAogCXtPcHRfb2ZmZ3JwanF1b3RhLCAiZ3JwanF1b3RhPSJ9LApAQCAtMTI4MSw5ICsxMzAwLDExIEBACiAJCQkqam91cm5hbF9kZXZudW0gPSBvcHRpb247CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfam91cm5hbF9jaGVja3N1bToKLQkJCWJyZWFrOwkvKiBLZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0NIRUNLU1VNKTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2FzeW5jX2NvbW1pdDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9BU1lOQ19DT01NSVQpOworCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0NIRUNLU1VNKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ub2xvYWQ6CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PTE9BRCk7CkBAIC0xMzQwLDEzICsxMzYxLDYgQEAKIAkJY2FzZSBPcHRfZGF0YV9lcnJfaWdub3JlOgogCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERBVEFfRVJSX0FCT1JUKTsKIAkJCWJyZWFrOwotCQljYXNlIE9wdF9tYl9oaXN0b3J5X2xlbmd0aDoKLQkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQotCQkJCXJldHVybiAwOwotCQkJaWYgKG9wdGlvbiA8IDApCi0JCQkJcmV0dXJuIDA7Ci0JCQlzYmktPnNfbWJfaGlzdG9yeV9tYXggPSBvcHRpb247Ci0JCQlicmVhazsKICNpZmRlZiBDT05GSUdfUVVPVEEKIAkJY2FzZSBPcHRfdXNyanF1b3RhOgogCQkJcXR5cGUgPSBVU1JRVU9UQTsKQEAgLTE2NDYsMTMgKzE2NjAsNiBAQAogCQkJRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSwKIAkJCXNiaS0+c19tb3VudF9vcHQpOwogCi0JaWYgKEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwpIHsKLQkJZXh0NF9tc2coc2IsIEtFUk5fSU5GTywgIiVzIGpvdXJuYWwgb24gJXMiLAotCQkgICAgICAgRVhUNF9TQihzYiktPnNfam91cm5hbC0+al9pbm9kZSA/ICJpbnRlcm5hbCIgOgotCQkgICAgICAgImV4dGVybmFsIiwgRVhUNF9TQihzYiktPnNfam91cm5hbC0+al9kZXZuYW1lKTsKLQl9IGVsc2UgewotCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAibm8gam91cm5hbCIpOwotCX0KIAlyZXR1cm4gcmVzOwogfQogCkBAIC0yMTk3LDYgKzIyMDQsNyBAQAogRVhUNF9SV19BVFRSX1NCSV9VSShtYl9vcmRlcjJfcmVxLCBzX21iX29yZGVyMl9yZXFzKTsKIEVYVDRfUldfQVRUUl9TQklfVUkobWJfc3RyZWFtX3JlcSwgc19tYl9zdHJlYW1fcmVxdWVzdCk7CiBFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX2dyb3VwX3ByZWFsbG9jLCBzX21iX2dyb3VwX3ByZWFsbG9jKTsKK0VYVDRfUldfQVRUUl9TQklfVUkobWF4X3dyaXRlYmFja19tYl9idW1wLCBzX21heF93cml0ZWJhY2tfbWJfYnVtcCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpleHQ0X2F0dHJzW10gPSB7CiAJQVRUUl9MSVNUKGRlbGF5ZWRfYWxsb2NhdGlvbl9ibG9ja3MpLApAQCAtMjIxMCw2ICsyMjE4LDcgQEAKIAlBVFRSX0xJU1QobWJfb3JkZXIyX3JlcSksCiAJQVRUUl9MSVNUKG1iX3N0cmVhbV9yZXEpLAogCUFUVFJfTElTVChtYl9ncm91cF9wcmVhbGxvYyksCisJQVRUUl9MSVNUKG1heF93cml0ZWJhY2tfbWJfYnVtcCksCiAJTlVMTCwKIH07CiAKQEAgLTI0MTMsNyArMjQyMiw2IEBACiAJc2JpLT5zX2NvbW1pdF9pbnRlcnZhbCA9IEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSAqIEhaOwogCXNiaS0+c19taW5fYmF0Y2hfdGltZSA9IEVYVDRfREVGX01JTl9CQVRDSF9USU1FOwogCXNiaS0+c19tYXhfYmF0Y2hfdGltZSA9IEVYVDRfREVGX01BWF9CQVRDSF9USU1FOwotCXNiaS0+c19tYl9oaXN0b3J5X21heCA9IGRlZmF1bHRfbWJfaGlzdG9yeV9sZW5ndGg7CiAKIAlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCkBAIC0yNjc5LDYgKzI2ODcsNyBAQAogCX0KIAogCXNiaS0+c19zdHJpcGUgPSBleHQ0X2dldF9zdHJpcGVfc2l6ZShzYmkpOworCXNiaS0+c19tYXhfd3JpdGViYWNrX21iX2J1bXAgPSAxMjg7CiAKIAkvKgogCSAqIHNldCB1cCBlbm91Z2ggc28gdGhhdCBpdCBjYW4gcmVhZCBhbiBpbm9kZQpAQCAtMjc1MiwxNCArMjc2MSwyMCBAQAogCQlnb3RvIGZhaWxlZF9tb3VudDQ7CiAJfQogCi0JamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKLQkJCQkgIEpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsIDApOwotCWlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9BU1lOQ19DT01NSVQpKQotCQlqYmQyX2pvdXJuYWxfc2V0X2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLCAwLCAwLAorCWlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9BU1lOQ19DT01NSVQpKSB7CisJCWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoc2JpLT5zX2pvdXJuYWwsCisJCQkJSkJEMl9GRUFUVVJFX0NPTVBBVF9DSEVDS1NVTSwgMCwKIAkJCQlKQkQyX0ZFQVRVUkVfSU5DT01QQVRfQVNZTkNfQ09NTUlUKTsKLQllbHNlCisJfSBlbHNlIGlmICh0ZXN0X29wdChzYiwgSk9VUk5BTF9DSEVDS1NVTSkpIHsKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLCAwKTsKIAkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKHNiaS0+c19qb3VybmFsLCAwLCAwLAogCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOworCX0gZWxzZSB7CisJCWpiZDJfam91cm5hbF9jbGVhcl9mZWF0dXJlcyhzYmktPnNfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAorCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOworCX0KIAogCS8qIFdlIGhhdmUgbm93IHVwZGF0ZWQgdGhlIGpvdXJuYWwgaWYgcmVxdWlyZWQsIHNvIHdlIGNhbgogCSAqIHZhbGlkYXRlIHRoZSBkYXRhIGpvdXJuYWxpbmcgbW9kZS4gKi8KQEAgLTI3OTgsNiArMjgxMywxMiBAQAogCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PQkgpOwogCQl9CiAJfQorCUVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiZXh0NC1kaW8tdW53cml0dGVuIik7CisJaWYgKCFFWFQ0X1NCKHNiKS0+ZGlvX3Vud3JpdHRlbl93cSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGZhaWxlZCB0byBjcmVhdGUgRElPIHdvcmtxdWV1ZVxuIik7CisJCWdvdG8gZmFpbGVkX21vdW50X3dxOworCX0KKwogCS8qCiAJICogVGhlIGpiZDJfam91cm5hbF9sb2FkIHdpbGwgaGF2ZSBkb25lIGFueSBuZWNlc3NhcnkgbG9nIHJlY292ZXJ5LAogCSAqIHNvIHdlIGNhbiBzYWZlbHkgbW91bnQgdGhlIHJlc3Qgb2YgdGhlIGZpbGVzeXN0ZW0gbm93LgpAQCAtMjg0OSwxMiArMjg3MCwxMiBAQAogCQkJICJhdmFpbGFibGUiKTsKIAl9CiAKLQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7CisJaWYgKHRlc3Rfb3B0KHNiLCBERUxBTExPQykgJiYKKwkgICAgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSkpIHsKIAkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgIklnbm9yaW5nIGRlbGFsbG9jIG9wdGlvbiAtICIKIAkJCSAicmVxdWVzdGVkIGRhdGEgam91cm5hbGluZyBtb2RlIik7CiAJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBERUxBTExPQyk7Ci0JfSBlbHNlIGlmICh0ZXN0X29wdChzYiwgREVMQUxMT0MpKQotCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiZGVsYXllZCBhbGxvY2F0aW9uIGVuYWJsZWQiKTsKKwl9CiAKIAllcnIgPSBleHQ0X3NldHVwX3N5c3RlbV96b25lKHNiKTsKIAlpZiAoZXJyKSB7CkBAIC0yOTEwLDYgKzI5MzEsOCBAQAogCiBmYWlsZWRfbW91bnQ0OgogCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgIm1vdW50IGZhaWxlZCIpOworCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxKTsKK2ZhaWxlZF9tb3VudF93cToKIAlleHQ0X3JlbGVhc2Vfc3lzdGVtX3pvbmUoc2IpOwogCWlmIChzYmktPnNfam91cm5hbCkgewogCQlqYmQyX2pvdXJuYWxfZGVzdHJveShzYmktPnNfam91cm5hbCk7CkBAIC0zMTY0LDkgKzMxODcsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpCi0JCWV4dDRfbXNnKHNiLCBLRVJOX0lORk8sICJiYXJyaWVycyBlbmFibGVkIik7Ci0JZWxzZQorCWlmICghKGpvdXJuYWwtPmpfZmxhZ3MgJiBKQkQyX0JBUlJJRVIpKQogCQlleHQ0X21zZyhzYiwgS0VSTl9JTkZPLCAiYmFycmllcnMgZGlzYWJsZWQiKTsKIAogCWlmICghcmVhbGx5X3JlYWRfb25seSAmJiB0ZXN0X29wdChzYiwgVVBEQVRFX0pPVVJOQUwpKSB7CkBAIC0zMzYxLDExICszMzgyLDEzIEBACiB7CiAJaW50IHJldCA9IDA7CiAJdGlkX3QgdGFyZ2V0OworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwogCiAJdHJhY2VfZXh0NF9zeW5jX2ZzKHNiLCB3YWl0KTsKLQlpZiAoamJkMl9qb3VybmFsX3N0YXJ0X2NvbW1pdChFWFQ0X1NCKHNiKS0+c19qb3VybmFsLCAmdGFyZ2V0KSkgeworCWZsdXNoX3dvcmtxdWV1ZShzYmktPmRpb191bndyaXR0ZW5fd3EpOworCWlmIChqYmQyX2pvdXJuYWxfc3RhcnRfY29tbWl0KHNiaS0+c19qb3VybmFsLCAmdGFyZ2V0KSkgewogCQlpZiAod2FpdCkKLQkJCWpiZDJfbG9nX3dhaXRfY29tbWl0KEVYVDRfU0Ioc2IpLT5zX2pvdXJuYWwsIHRhcmdldCk7CisJCQlqYmQyX2xvZ193YWl0X2NvbW1pdChzYmktPnNfam91cm5hbCwgdGFyZ2V0KTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTM5NTEsMjcgKzM5NzQsNiBAQAogCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKIH07CiAKLSNpZmRlZiBDT05GSUdfRVhUNERFVl9DT01QQVQKLXN0YXRpYyBpbnQgZXh0NGRldl9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJCSAgY29uc3QgY2hhciAqZGV2X25hbWUsIHZvaWQgKmRhdGEsc3RydWN0IHZmc21vdW50ICptbnQpCi17Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiRVhUNC1mcyAoJXMpOiBVcGRhdGUgeW91ciB1c2Vyc3BhY2UgcHJvZ3JhbXMgIgotCSAgICAgICAidG8gbW91bnQgdXNpbmcgZXh0NFxuIiwgZGV2X25hbWUpOwotCXByaW50ayhLRVJOX1dBUk5JTkcgIkVYVDQtZnMgKCVzKTogZXh0NGRldiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAiCi0JICAgICAgICJ3aWxsIGdvIGF3YXkgYnkgMi42LjMxXG4iLCBkZXZfbmFtZSk7Ci0JcmV0dXJuIGdldF9zYl9iZGV2KGZzX3R5cGUsIGZsYWdzLCBkZXZfbmFtZSwgZGF0YSwgZXh0NF9maWxsX3N1cGVyLG1udCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQ0ZGV2X2ZzX3R5cGUgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJleHQ0ZGV2IiwKLQkuZ2V0X3NiCQk9IGV4dDRkZXZfZ2V0X3NiLAotCS5raWxsX3NiCT0ga2lsbF9ibG9ja19zdXBlciwKLQkuZnNfZmxhZ3MJPSBGU19SRVFVSVJFU19ERVYsCi19OwotTU9EVUxFX0FMSUFTKCJleHQ0ZGV2Iik7Ci0jZW5kaWYKLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9leHQ0X2ZzKHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTM5OTYsMTMgKzM5OTgsNiBAQAogCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmV4dDRfZnNfdHlwZSk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0jaWZkZWYgQ09ORklHX0VYVDRERVZfQ09NUEFUCi0JZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NGRldl9mc190eXBlKTsKLQlpZiAoZXJyKSB7Ci0JCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NF9mc190eXBlKTsKLQkJZ290byBvdXQ7Ci0JfQotI2VuZGlmCiAJcmV0dXJuIDA7CiBvdXQ6CiAJZGVzdHJveV9pbm9kZWNhY2hlKCk7CkBAIC00MDIxLDkgKzQwMTYsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZXh0NF9mcyh2b2lkKQogewogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXh0NF9mc190eXBlKTsKLSNpZmRlZiBDT05GSUdfRVhUNERFVl9DT01QQVQKLQl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmV4dDRkZXZfZnNfdHlwZSk7Ci0jZW5kaWYKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKIAlleGl0X2V4dDRfeGF0dHIoKTsKIAlleGl0X2V4dDRfbWJhbGxvYygpOwpkaWZmIC0tZ2l0IGEvZnMvZmF0L2ZhdC5oIGIvZnMvZmF0L2ZhdC5oCmluZGV4IGFkYjBlNzIuLjdkYjA5NzkgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9mYXQuaAorKysgYi9mcy9mYXQvZmF0LmgKQEAgLTMyMyw3ICszMjMsNyBAQAogLyogZmF0L21pc2MuYyAqLwogZXh0ZXJuIHZvaWQgZmF0X2ZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpIF9fY29sZDsKLWV4dGVybiB2b2lkIGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiBpbnQgZmF0X2NsdXN0ZXJzX2ZsdXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBmYXRfY2hhaW5fYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZGNsdXMsIGludCBucl9jbHVzdGVyKTsKIGV4dGVybiB2b2lkIGZhdF90aW1lX2ZhdDJ1bml4KHN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmksIHN0cnVjdCB0aW1lc3BlYyAqdHMsCiAJCQkgICAgICBfX2xlMTYgX190aW1lLCBfX2xlMTYgX19kYXRlLCB1OCB0aW1lX2NzKTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggMDQ2MjlkMS4uNzZiNzk2MSAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTQ1MSwxMiArNDUxLDE2IEBACiAKIHN0YXRpYyBpbnQgZmF0X3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCiB7Ci0JbG9ja19zdXBlcihzYik7Ci0JZmF0X2NsdXN0ZXJzX2ZsdXNoKHNiKTsKLQlzYi0+c19kaXJ0ID0gMDsKLQl1bmxvY2tfc3VwZXIoc2IpOworCWludCBlcnIgPSAwOwogCi0JcmV0dXJuIDA7CisJaWYgKHNiLT5zX2RpcnQpIHsKKwkJbG9ja19zdXBlcihzYik7CisJCXNiLT5zX2RpcnQgPSAwOworCQllcnIgPSBmYXRfY2x1c3RlcnNfZmx1c2goc2IpOworCQl1bmxvY2tfc3VwZXIoc2IpOworCX0KKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGZhdF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTgxMiw3ICs4MTYsNyBAQAogCQkJc2VxX3B1dHMobSwgIixzaG9ydG5hbWU9bWl4ZWQiKTsKIAkJCWJyZWFrOwogCQljYXNlIFZGQVRfU0ZOX0RJU1BMQVlfTE9XRVIgfCBWRkFUX1NGTl9DUkVBVEVfV0lOOTU6Ci0JCQkvKiBzZXFfcHV0cyhtLCAiLHNob3J0bmFtZT1sb3dlciIpOyAqLworCQkJc2VxX3B1dHMobSwgIixzaG9ydG5hbWU9bG93ZXIiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJc2VxX3B1dHMobSwgIixzaG9ydG5hbWU9dW5rbm93biIpOwpAQCAtOTYzLDcgKzk2Nyw3IEBACiAJb3B0cy0+Y29kZXBhZ2UgPSBmYXRfZGVmYXVsdF9jb2RlcGFnZTsKIAlvcHRzLT5pb2NoYXJzZXQgPSBmYXRfZGVmYXVsdF9pb2NoYXJzZXQ7CiAJaWYgKGlzX3ZmYXQpIHsKLQkJb3B0cy0+c2hvcnRuYW1lID0gVkZBVF9TRk5fRElTUExBWV9MT1dFUnxWRkFUX1NGTl9DUkVBVEVfV0lOOTU7CisJCW9wdHMtPnNob3J0bmFtZSA9IFZGQVRfU0ZOX0RJU1BMQVlfV0lOTlR8VkZBVF9TRk5fQ1JFQVRFX1dJTjk1OwogCQlvcHRzLT5yb2RpciA9IDA7CiAJfSBlbHNlIHsKIAkJb3B0cy0+c2hvcnRuYW1lID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9taXNjLmMgYi9mcy9mYXQvbWlzYy5jCmluZGV4IDRlMzViZTguLjBmNTVmNWMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9taXNjLmMKKysrIGIvZnMvZmF0L21pc2MuYwpAQCAtNDMsMTkgKzQzLDE5IEBACiAKIC8qIEZsdXNoZXMgdGhlIG51bWJlciBvZiBmcmVlIGNsdXN0ZXJzIG9uIEZBVDMyICovCiAvKiBYWFg6IE5lZWQgdG8gd3JpdGUgb25lIHBlciBGU0lORk8gYmxvY2suICBDdXJyZW50bHkgb25seSB3cml0ZXMgMSAqLwotdm9pZCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK2ludCBmYXRfY2x1c3RlcnNfZmx1c2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGZhdF9ib290X2ZzaW5mbyAqZnNpbmZvOwogCiAJaWYgKHNiaS0+ZmF0X2JpdHMgIT0gMzIpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAliaCA9IHNiX2JyZWFkKHNiLCBzYmktPmZzaW5mb19zZWN0b3IpOwogCWlmIChiaCA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRkFUOiBicmVhZCBmYWlsZWQgaW4gZmF0X2NsdXN0ZXJzX2ZsdXNoXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmc2luZm8gPSAoc3RydWN0IGZhdF9ib290X2ZzaW5mbyAqKWJoLT5iX2RhdGE7CkBAIC03NCw2ICs3NCw4IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAl9CiAJYnJlbHNlKGJoKTsKKworCXJldHVybiAwOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX3ZmYXQuYyBiL2ZzL2ZhdC9uYW1laV92ZmF0LmMKaW5kZXggY2I2ZTgzNS4uZjU2NWYyNCAxMDA2NDQKLS0tIGEvZnMvZmF0L25hbWVpX3ZmYXQuYworKysgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCkBAIC00OTksMTcgKzQ5OSwxMCBAQAogCWludCBjaGFybGVuOwogCiAJaWYgKHV0ZjgpIHsKLQkJaW50IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpOwotCi0JCSpvdXRsZW4gPSB1dGY4c190b191dGYxNnMobmFtZSwgUEFUSF9NQVgsICh3Y2hhcl90ICopIG91dG5hbWUpOwotCi0JCS8qCi0JCSAqIFdlIHN0cmlwcGVkICcuJ3MgYmVmb3JlIGFuZCBzZXQgbGVuIGFwcHJvcHJpYXRlbHksCi0JCSAqIGJ1dCB1dGY4c190b191dGYxNnMgZG9lc24ndCBjYXJlIGFib3V0IGxlbgotCQkgKi8KLQkJKm91dGxlbiAtPSAobmFtZV9sZW4gLSBsZW4pOwotCi0JCWlmICgqb3V0bGVuID4gMjU1KQorCQkqb3V0bGVuID0gdXRmOHNfdG9fdXRmMTZzKG5hbWUsIGxlbiwgKHdjaGFyX3QgKilvdXRuYW1lKTsKKwkJaWYgKCpvdXRsZW4gPCAwKQorCQkJcmV0dXJuICpvdXRsZW47CisJCWVsc2UgaWYgKCpvdXRsZW4gPiAyNTUpCiAJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIAogCQlvcCA9ICZvdXRuYW1lWypvdXRsZW4gKiBzaXplb2Yod2NoYXJfdCldOwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggZmMwODlmMi4uMmNmOTNlYyAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkJdHlwZSA9IFBJRFRZUEVfUElEOwogCQlicmVhazsKIAotCWNhc2UgRl9PV05FUl9HSUQ6CisJY2FzZSBGX09XTkVSX1BHUlA6CiAJCXR5cGUgPSBQSURUWVBFX1BHSUQ7CiAJCWJyZWFrOwogCkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBJRFRZUEVfUEdJRDoKLQkJb3duZXIudHlwZSA9IEZfT1dORVJfR0lEOworCQlvd25lci50eXBlID0gRl9PV05FUl9QR1JQOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9mcy9maWxlLmMgYi9mcy9maWxlLmMKaW5kZXggZjMxMzMxNC4uODdlMTI5MCAxMDA2NDQKLS0tIGEvZnMvZmlsZS5jCisrKyBiL2ZzL2ZpbGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggOGUxZTVlMS4uOWQ1MzYwYyAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTQxLDggKzQxLDkgQEAKIAlsb25nIG5yX3BhZ2VzOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJZW51bSB3cml0ZWJhY2tfc3luY19tb2RlcyBzeW5jX21vZGU7Ci0JaW50IGZvcl9rdXBkYXRlOwotCWludCByYW5nZV9jeWNsaWM7CisJaW50IGZvcl9rdXBkYXRlOjE7CisJaW50IHJhbmdlX2N5Y2xpYzoxOworCWludCBmb3JfYmFja2dyb3VuZDoxOwogfTsKIAogLyoKQEAgLTI0OSwxNCArMjUwLDI1IEBACiAgKiAgIGNvbXBsZXRpb24uIENhbGxlciBuZWVkIG5vdCBob2xkIHNiIHNfdW1vdW50IHNlbWFwaG9yZS4KICAqCiAgKi8KLXZvaWQgYmRpX3N0YXJ0X3dyaXRlYmFjayhzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLCBsb25nIG5yX3BhZ2VzKQordm9pZCBiZGlfc3RhcnRfd3JpdGViYWNrKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3Qgd2Jfd3JpdGViYWNrX2FyZ3MgYXJncyA9IHsKKwkJLnNiCQk9IHNiLAogCQkuc3luY19tb2RlCT0gV0JfU1lOQ19OT05FLAogCQkubnJfcGFnZXMJPSBucl9wYWdlcywKIAkJLnJhbmdlX2N5Y2xpYwk9IDEsCiAJfTsKIAorCS8qCisJICogV2UgdHJlYXQgQG5yX3BhZ2VzPTAgYXMgdGhlIHNwZWNpYWwgY2FzZSB0byBkbyBiYWNrZ3JvdW5kIHdyaXRlYmFjaywKKwkgKiBpZS4gdG8gc3luYyBwYWdlcyB1bnRpbCB0aGUgYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQgaXMgcmVhY2hlZC4KKwkgKi8KKwlpZiAoIW5yX3BhZ2VzKSB7CisJCWFyZ3MubnJfcGFnZXMgPSBMT05HX01BWDsKKwkJYXJncy5mb3JfYmFja2dyb3VuZCA9IDE7CisJfQorCiAJYmRpX2FsbG9jX3F1ZXVlX3dvcmsoYmRpLCAmYXJncyk7CiB9CiAKQEAgLTMxMCw3ICszMjIsNyBAQAogCSAqIEZvciBpbm9kZXMgYmVpbmcgY29uc3RhbnRseSByZWRpcnRpZWQsIGRpcnRpZWRfd2hlbiBjYW4gZ2V0IHN0dWNrLgogCSAqIEl0IF9hcHBlYXJzXyB0byBiZSBpbiB0aGUgZnV0dXJlLCBidXQgaXMgYWN0dWFsbHkgaW4gZGlzdGFudCBwYXN0LgogCSAqIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBzdWNoIHdyYXBwZWQtYXJvdW5kIHJlbGF0aXZlIHRpbWVzCi0JICogZnJvbSBwZXJtYW5lbnRseSBzdG9wcGluZyB0aGUgd2hvbGUgcGRmbHVzaCB3cml0ZWJhY2suCisJICogZnJvbSBwZXJtYW5lbnRseSBzdG9wcGluZyB0aGUgd2hvbGUgYmRpIHdyaXRlYmFjay4KIAkgKi8KIAlyZXQgPSByZXQgJiYgdGltZV9iZWZvcmVfZXEoaW5vZGUtPmRpcnRpZWRfd2hlbiwgamlmZmllcyk7CiAjZW5kaWYKQEAgLTMyNCwxMyArMzM2LDM4IEBACiAJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGlzcGF0Y2hfcXVldWUsCiAJCQkJdW5zaWduZWQgbG9uZyAqb2xkZXJfdGhhbl90aGlzKQogeworCUxJU1RfSEVBRCh0bXApOworCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5vZGU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZG9fc2Jfc29ydCA9IDA7CisKIAl3aGlsZSAoIWxpc3RfZW1wdHkoZGVsYXlpbmdfcXVldWUpKSB7Ci0JCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBsaXN0X2VudHJ5KGRlbGF5aW5nX3F1ZXVlLT5wcmV2LAotCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQlpbm9kZSA9IGxpc3RfZW50cnkoZGVsYXlpbmdfcXVldWUtPnByZXYsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKIAkJaWYgKG9sZGVyX3RoYW5fdGhpcyAmJgogCQkgICAgaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgKm9sZGVyX3RoYW5fdGhpcykpCiAJCQlicmVhazsKLQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwYXRjaF9xdWV1ZSk7CisJCWlmIChzYiAmJiBzYiAhPSBpbm9kZS0+aV9zYikKKwkJCWRvX3NiX3NvcnQgPSAxOworCQlzYiA9IGlub2RlLT5pX3NiOworCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZ0bXApOworCX0KKworCS8qIGp1c3Qgb25lIHNiIGluIGxpc3QsIHNwbGljZSB0byBkaXNwYXRjaF9xdWV1ZSBhbmQgd2UncmUgZG9uZSAqLworCWlmICghZG9fc2Jfc29ydCkgeworCQlsaXN0X3NwbGljZSgmdG1wLCBkaXNwYXRjaF9xdWV1ZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBNb3ZlIGlub2RlcyBmcm9tIG9uZSBzdXBlcmJsb2NrIHRvZ2V0aGVyICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZ0bXApKSB7CisJCWlub2RlID0gbGlzdF9lbnRyeSh0bXAucHJldiwgc3RydWN0IGlub2RlLCBpX2xpc3QpOworCQlzYiA9IGlub2RlLT5pX3NiOworCQlsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZShwb3MsIG5vZGUsICZ0bXApIHsKKwkJCWlub2RlID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJCWlmIChpbm9kZS0+aV9zYiA9PSBzYikKKwkJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsIGRpc3BhdGNoX3F1ZXVlKTsKKwkJfQogCX0KIH0KIApAQCAtNDM5LDggKzQ3NiwxOCBAQAogCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CiAJaW5vZGUtPmlfc3RhdGUgJj0gfklfU1lOQzsKIAlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkcgfCBJX0NMRUFSKSkpIHsKLQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSAmJgotCQkgICAgbWFwcGluZ190YWdnZWQobWFwcGluZywgUEFHRUNBQ0hFX1RBR19ESVJUWSkpIHsKKwkJaWYgKChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfUEFHRVMpICYmIHdiYy0+Zm9yX2t1cGRhdGUpIHsKKwkJCS8qCisJCQkgKiBNb3JlIHBhZ2VzIGdldCBkaXJ0aWVkIGJ5IGEgZmFzdCBkaXJ0aWVyLgorCQkJICovCisJCQlnb3RvIHNlbGVjdF9xdWV1ZTsKKwkJfSBlbHNlIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpIHsKKwkJCS8qCisJCQkgKiBBdCBsZWFzdCBYRlMgd2lsbCByZWRpcnR5IHRoZSBpbm9kZSBkdXJpbmcgdGhlCisJCQkgKiB3cml0ZWJhY2sgKGRlbGFsbG9jKSBhbmQgb24gaW8gY29tcGxldGlvbiAoaXNpemUpLgorCQkJICovCisJCQlyZWRpcnR5X3RhaWwoaW5vZGUpOworCQl9IGVsc2UgaWYgKG1hcHBpbmdfdGFnZ2VkKG1hcHBpbmcsIFBBR0VDQUNIRV9UQUdfRElSVFkpKSB7CiAJCQkvKgogCQkJICogV2UgZGlkbid0IHdyaXRlIGJhY2sgYWxsIHRoZSBwYWdlcy4gIG5mc193cml0ZXBhZ2VzKCkKIAkJCSAqIHNvbWV0aW1lcyBiYWxlcyBvdXQgd2l0aG91dCBkb2luZyBhbnl0aGluZy4gUmVkaXJ0eQpAQCAtNDYyLDYgKzUwOSw3IEBACiAJCQkJICogc29vbiBhcyB0aGUgcXVldWUgYmVjb21lcyB1bmNvbmdlc3RlZC4KIAkJCQkgKi8KIAkJCQlpbm9kZS0+aV9zdGF0ZSB8PSBJX0RJUlRZX1BBR0VTOworc2VsZWN0X3F1ZXVlOgogCQkJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApIHsKIAkJCQkJLyoKIAkJCQkJICogc2xpY2UgdXNlZCB1cDogcXVldWUgZm9yIG5leHQgdHVybgpAQCAtNDg0LDEyICs1MzIsNiBAQAogCQkJCWlub2RlLT5pX3N0YXRlIHw9IElfRElSVFlfUEFHRVM7CiAJCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKIAkJCX0KLQkJfSBlbHNlIGlmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpIHsKLQkJCS8qCi0JCQkgKiBTb21lb25lIHJlZGlydGllZCB0aGUgaW5vZGUgd2hpbGUgd2VyZSB3cml0aW5nIGJhY2sKLQkJCSAqIHRoZSBwYWdlcy4KLQkJCSAqLwotCQkJcmVkaXJ0eV90YWlsKGlub2RlKTsKIAkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpKSB7CiAJCQkvKgogCQkJICogVGhlIGlub2RlIGlzIGNsZWFuLCBpbnVzZQpAQCAtNTA2LDYgKzU0OCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHVucGluX3NiX2Zvcl93cml0ZWJhY2soc3RydWN0IHN1cGVyX2Jsb2NrICoqcHNiKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSAqcHNiOworCisJaWYgKHNiKSB7CisJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJCXB1dF9zdXBlcihzYik7CisJCSpwc2IgPSBOVUxMOworCX0KK30KKwogLyoKICAqIEZvciBXQl9TWU5DX05PTkUgd3JpdGViYWNrLCB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdGhlIHNiIHBpbm5lZAogICogYmVmb3JlIGNhbGxpbmcgd3JpdGViYWNrLiBTbyBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBwaW4gaXQsIHNvIGl0IGRvZXNuJ3QKQEAgLTUxNSwxMSArNTY4LDIwIEBACiAgKiAxIGlmIHdlIGZhaWxlZC4KICAqLwogc3RhdGljIGludCBwaW5fc2JfZm9yX3dyaXRlYmFjayhzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKLQkJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqKnBzYikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAKIAkvKgorCSAqIElmIHRoaXMgc2IgaXMgYWxyZWFkeSBwaW5uZWQsIG5vdGhpbmcgbW9yZSB0byBkby4gSWYgbm90IGFuZAorCSAqICpwc2IgaXMgbm9uLU5VTEwsIHVucGluIHRoZSBvbGQgb25lIGZpcnN0CisJICovCisJaWYgKHNiID09ICpwc2IpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCpwc2IpCisJCXVucGluX3NiX2Zvcl93cml0ZWJhY2socHNiKTsKKworCS8qCiAJICogQ2FsbGVyIG11c3QgYWxyZWFkeSBob2xkIHRoZSByZWYgZm9yIHRoaXMKIAkgKi8KIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKQEAgLTUzMiw3ICs1OTQsNyBAQAogCWlmIChkb3duX3JlYWRfdHJ5bG9jaygmc2ItPnNfdW1vdW50KSkgewogCQlpZiAoc2ItPnNfcm9vdCkgewogCQkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwotCQkJcmV0dXJuIDA7CisJCQlnb3RvIHBpbm5lZDsKIAkJfQogCQkvKgogCQkgKiB1bW91bnRlZCwgZHJvcCByd3NlbSBhZ2FpbiBhbmQgZmFsbCB0aHJvdWdoIHRvIGZhaWx1cmUKQEAgLTU0MywyNCArNjA1LDE1IEBACiAJc2ItPnNfY291bnQtLTsKIAlzcGluX3VubG9jaygmc2JfbG9jayk7CiAJcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHVucGluX3NiX2Zvcl93cml0ZWJhY2soc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JCQkJICAgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7Ci0KLQlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpCi0JCXJldHVybjsKLQotCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7Ci0JcHV0X3N1cGVyKHNiKTsKK3Bpbm5lZDoKKwkqcHNiID0gc2I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdyaXRlYmFja19pbm9kZXNfd2Ioc3RydWN0IGJkaV93cml0ZWJhY2sgKndiLAogCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YmMtPnNiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB3YmMtPnNiLCAqcGluX3NiID0gTlVMTDsKIAljb25zdCBpbnQgaXNfYmxrZGV2X3NiID0gc2JfaXNfYmxrZGV2X3NiKHNiKTsKIAljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsJLyogbGl2ZWxvY2sgYXZvaWRhbmNlICovCiAKQEAgLTYxOSw3ICs2NzIsNyBAQAogCQlpZiAoaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgc3RhcnQpKQogCQkJYnJlYWs7CiAKLQkJaWYgKHBpbl9zYl9mb3Jfd3JpdGViYWNrKHdiYywgaW5vZGUpKSB7CisJCWlmIChwaW5fc2JfZm9yX3dyaXRlYmFjayh3YmMsIGlub2RlLCAmcGluX3NiKSkgewogCQkJcmVxdWV1ZV9pbyhpbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNjI4LDcgKzY4MSw2IEBACiAJCV9faWdldChpbm9kZSk7CiAJCXBhZ2VzX3NraXBwZWQgPSB3YmMtPnBhZ2VzX3NraXBwZWQ7CiAJCXdyaXRlYmFja19zaW5nbGVfaW5vZGUoaW5vZGUsIHdiYyk7Ci0JCXVucGluX3NiX2Zvcl93cml0ZWJhY2sod2JjLCBpbm9kZSk7CiAJCWlmICh3YmMtPnBhZ2VzX3NraXBwZWQgIT0gcGFnZXNfc2tpcHBlZCkgewogCQkJLyoKIAkJCSAqIHdyaXRlYmFjayBpcyBub3QgbWFraW5nIHByb2dyZXNzIGR1ZSB0byBsb2NrZWQKQEAgLTY0OCw2ICs3MDAsOCBAQAogCQkJd2JjLT5tb3JlX2lvID0gMTsKIAl9CiAKKwl1bnBpbl9zYl9mb3Jfd3JpdGViYWNrKCZwaW5fc2IpOworCiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCS8qIExlYXZlIGFueSB1bndyaXR0ZW4gaW5vZGVzIG9uIGJfaW8gKi8KIH0KQEAgLTcwNiw2ICs3NjAsNyBAQAogCX07CiAJdW5zaWduZWQgbG9uZyBvbGRlc3RfamlmOwogCWxvbmcgd3JvdGUgPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKIAlpZiAod2JjLmZvcl9rdXBkYXRlKSB7CiAJCXdiYy5vbGRlcl90aGFuX3RoaXMgPSAmb2xkZXN0X2ppZjsKQEAgLTcxOSwyMCArNzc0LDE2IEBACiAKIAlmb3IgKDs7KSB7CiAJCS8qCi0JCSAqIERvbid0IGZsdXNoIGFueXRoaW5nIGZvciBub24taW50ZWdyaXR5IHdyaXRlYmFjayB3aGVyZQotCQkgKiBubyBucl9wYWdlcyB3YXMgZ2l2ZW4KKwkJICogU3RvcCB3cml0ZWJhY2sgd2hlbiBucl9wYWdlcyBoYXMgYmVlbiBjb25zdW1lZAogCQkgKi8KLQkJaWYgKCFhcmdzLT5mb3Jfa3VwZGF0ZSAmJiBhcmdzLT5ucl9wYWdlcyA8PSAwICYmCi0JCSAgICAgYXJncy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkKKwkJaWYgKGFyZ3MtPm5yX3BhZ2VzIDw9IDApCiAJCQlicmVhazsKIAogCQkvKgotCQkgKiBJZiBubyBzcGVjaWZpYyBwYWdlcyB3ZXJlIGdpdmVuIGFuZCB0aGlzIGlzIGp1c3QgYQotCQkgKiBwZXJpb2RpYyBiYWNrZ3JvdW5kIHdyaXRlb3V0IGFuZCB3ZSBhcmUgYmVsb3cgdGhlCi0JCSAqIGJhY2tncm91bmQgZGlydHkgdGhyZXNob2xkLCBkb24ndCBkbyBhbnl0aGluZworCQkgKiBGb3IgYmFja2dyb3VuZCB3cml0ZW91dCwgc3RvcCB3aGVuIHdlIGFyZSBiZWxvdyB0aGUKKwkJICogYmFja2dyb3VuZCBkaXJ0eSB0aHJlc2hvbGQKIAkJICovCi0JCWlmIChhcmdzLT5mb3Jfa3VwZGF0ZSAmJiBhcmdzLT5ucl9wYWdlcyA8PSAwICYmCi0JCSAgICAhb3Zlcl9iZ3JvdW5kX3RocmVzaCgpKQorCQlpZiAoYXJncy0+Zm9yX2JhY2tncm91bmQgJiYgIW92ZXJfYmdyb3VuZF90aHJlc2goKSkKIAkJCWJyZWFrOwogCiAJCXdiYy5tb3JlX2lvID0gMDsKQEAgLTc0NCwxMyArNzk1LDMyIEBACiAJCXdyb3RlICs9IE1BWF9XUklURUJBQ0tfUEFHRVMgLSB3YmMubnJfdG9fd3JpdGU7CiAKIAkJLyoKLQkJICogSWYgd2UgcmFuIG91dCBvZiBzdHVmZiB0byB3cml0ZSwgYmFpbCB1bmxlc3MgbW9yZV9pbyBnb3Qgc2V0CisJCSAqIElmIHdlIGNvbnN1bWVkIGV2ZXJ5dGhpbmcsIHNlZSBpZiB3ZSBoYXZlIG1vcmUKIAkJICovCi0JCWlmICh3YmMubnJfdG9fd3JpdGUgPiAwIHx8IHdiYy5wYWdlc19za2lwcGVkID4gMCkgewotCQkJaWYgKHdiYy5tb3JlX2lvICYmICF3YmMuZm9yX2t1cGRhdGUpCi0JCQkJY29udGludWU7CisJCWlmICh3YmMubnJfdG9fd3JpdGUgPD0gMCkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBEaWRuJ3Qgd3JpdGUgZXZlcnl0aGluZyBhbmQgd2UgZG9uJ3QgaGF2ZSBtb3JlIElPLCBiYWlsCisJCSAqLworCQlpZiAoIXdiYy5tb3JlX2lvKQogCQkJYnJlYWs7CisJCS8qCisJCSAqIERpZCB3ZSB3cml0ZSBzb21ldGhpbmc/IFRyeSBmb3IgbW9yZQorCQkgKi8KKwkJaWYgKHdiYy5ucl90b193cml0ZSA8IE1BWF9XUklURUJBQ0tfUEFHRVMpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTm90aGluZyB3cml0dGVuLiBXYWl0IGZvciBzb21lIGlub2RlIHRvCisJCSAqIGJlY29tZSBhdmFpbGFibGUgZm9yIHdyaXRlYmFjay4gT3RoZXJ3aXNlCisJCSAqIHdlJ2xsIGp1c3QgYnVzeWxvb3AuCisJCSAqLworCQlzcGluX2xvY2soJmlub2RlX2xvY2spOworCQlpZiAoIWxpc3RfZW1wdHkoJndiLT5iX21vcmVfaW8pKSAgeworCQkJaW5vZGUgPSBsaXN0X2VudHJ5KHdiLT5iX21vcmVfaW8ucHJldiwKKwkJCQkJCXN0cnVjdCBpbm9kZSwgaV9saXN0KTsKKwkJCWlub2RlX3dhaXRfZm9yX3dyaXRlYmFjayhpbm9kZSk7CiAJCX0KKwkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCX0KIAogCXJldHVybiB3cm90ZTsKQEAgLTEwNjAsOSArMTEzMCw2IEBACiAgKiBJZiBvbGRlcl90aGFuX3RoaXMgaXMgbm9uLU5VTEwsIHRoZW4gb25seSB3cml0ZSBvdXQgaW5vZGVzIHdoaWNoCiAgKiBoYWQgdGhlaXIgZmlyc3QgZGlydHlpbmcgYXQgYSB0aW1lIGVhcmxpZXIgdGhhbiAqb2xkZXJfdGhhbl90aGlzLgogICoKLSAqIElmIHdlJ3JlIGEgcGRsZnVzaCB0aHJlYWQsIHRoZW4gaW1wbGVtZW50IHBkZmx1c2ggY29sbGlzaW9uIGF2b2lkYW5jZQotICogYWdhaW5zdCB0aGUgZW50aXJlIGxpc3QuCi0gKgogICogSWYgYGJkaScgaXMgbm9uLXplcm8gdGhlbiB3ZSdyZSBiZWluZyBhc2tlZCB0byB3cml0ZWJhY2sgYSBzcGVjaWZpYyBxdWV1ZS4KICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBibG9ja2RldiBzdXBlcmJsb2NrJ3MgaW5vZGVzIGFyZSBiYWNrZWQgYnkKICAqIGEgdmFyaWV0eSBvZiBxdWV1ZXMsIHNvIGFsbCBpbm9kZXMgYXJlIHNlYXJjaGVkLiAgRm9yIG90aGVyIHN1cGVyYmxvY2tzLApAQCAtMTE0MSw3ICsxMjA4LDcgQEAKIAlucl90b193cml0ZSA9IG5yX2RpcnR5ICsgbnJfdW5zdGFibGUgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CiAKLQliZGlfd3JpdGViYWNrX2FsbChzYiwgbnJfdG9fd3JpdGUpOworCWJkaV9zdGFydF93cml0ZWJhY2soc2ItPnNfYmRpLCBzYiwgbnJfdG9fd3JpdGUpOwogfQogRVhQT1JUX1NZTUJPTCh3cml0ZWJhY2tfaW5vZGVzX3NiKTsKIApkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggOTkyZjZjOS4uOGFkYTc4YSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC03MTIsOCArNzEyLDEwIEBACiAJCQlmdXNlX2ludmFsaWRhdGVfYXR0cihuZXdkaXIpOwogCiAJCS8qIG5ld2VudCB3aWxsIGVuZCB1cCBuZWdhdGl2ZSAqLwotCQlpZiAobmV3ZW50LT5kX2lub2RlKQorCQlpZiAobmV3ZW50LT5kX2lub2RlKSB7CisJCQlmdXNlX2ludmFsaWRhdGVfYXR0cihuZXdlbnQtPmRfaW5vZGUpOwogCQkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKG5ld2VudCk7CisJCX0KIAl9IGVsc2UgaWYgKGVyciA9PSAtRUlOVFIpIHsKIAkJLyogSWYgcmVxdWVzdCB3YXMgaW50ZXJydXB0ZWQsIERFSVRZIG9ubHkga25vd3MgaWYgdGhlCiAJCSAgIHJlbmFtZSBhY3R1YWxseSB0b29rIHBsYWNlLiAgSWYgdGhlIGludmFsaWRhdGlvbgpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCBjYmM0NjQwLi5jMTg5MTNhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMTA2Myw3ICsxMDYzLDggQEAKIAkJCQlicmVhazsKIAkJfQogCX0KLQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOworCWlmICghSVNfRVJSKHJlcSkpCisJCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJaWYgKHJlcyA+IDApCiAJCSpwcG9zID0gcG9zOwogCkBAIC0xMzEzLDcgKzEzMTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGZ1c2VfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGZ1c2VfZmlsZV92bV9vcHMgPSB7CiAJLmNsb3NlCQk9IGZ1c2Vfdm1hX2Nsb3NlLAogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBmdXNlX3BhZ2VfbWt3cml0ZSwKQEAgLTE1OTksNyArMTYwMCw3IEBACiAJCQlrYWRkciArPSBjb3B5OwogCQl9CiAKLQkJa3VubWFwKG1hcCk7CisJCWt1bm1hcChwYWdlKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZmlsZS5jIGIvZnMvZ2ZzMi9maWxlLmMKaW5kZXggMTY2ZjM4Zi4uNGViMzA4YSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9maWxlLmMKKysrIGIvZnMvZ2ZzMi9maWxlLmMKQEAgLTQxOCw3ICs0MTgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2ZzMl92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdmczJfdm1fb3BzID0gewogCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IGdmczJfcGFnZV9ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmMKaW5kZXggOWI5ZDYzOS4uMDUyZjIxNCAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKKysrIGIvZnMvaGZzL2J0cmVlLmMKQEAgLTU4LDYgKzU4LDExIEBACiAJfQogCXVubG9ja19uZXdfaW5vZGUodHJlZS0+aW5vZGUpOwogCisJaWYgKCFIRlNfSSh0cmVlLT5pbm9kZSktPmZpcnN0X2Jsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgImhmczogaW52YWxpZCBidHJlZSBleHRlbnQgcmVjb3JkcyAoMCBzaXplKS5cbiIpOworCQlnb3RvIGZyZWVfaW5vZGU7CisJfQorCiAJbWFwcGluZyA9IHRyZWUtPmlub2RlLT5pX21hcHBpbmc7CiAJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIDAsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3dyYXBwZXIuYyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCmluZGV4IDE3NWQwOGUuLmJlZDc4YWM4IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3dyYXBwZXIuYworKysgYi9mcy9oZnNwbHVzL3dyYXBwZXIuYwpAQCAtOTksNiArOTksMTAgQEAKIAogCWlmIChoZnNwbHVzX2dldF9sYXN0X3Nlc3Npb24oc2IsICZwYXJ0X3N0YXJ0LCAmcGFydF9zaXplKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCh1NjQpcGFydF9zdGFydCArIHBhcnRfc2l6ZSA+IDB4MTAwMDAwMDAwVUxMKSB7CisJCXByX2VycigiaGZzOiB2b2x1bWVzIGxhcmdlciB0aGFuIDJUQiBhcmUgbm90IHN1cHBvcnRlZCB5ZXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJd2hpbGUgKDEpIHsKIAkJYmggPSBzYl9icmVhZDUxMihzYiwgcGFydF9zdGFydCArIEhGU1BMVVNfVk9MSEVBRF9TRUNUT1IsIHZoZHIpOwogCQlpZiAoIWJoKQpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggN2IxN2ExNC4uNmM3NTExMCAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJCSAgIHU2NCBsZW4sIGdldF9ibG9ja190ICpnZXRfYmxvY2spCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcDsKLQl1bnNpZ25lZCBpbnQgc3RhcnRfYmxrOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGFydF9ibGs7CiAJbG9uZyBsb25nIGxlbmd0aCA9IDAsIG1hcF9sZW4gPSAwOwogCXU2NCBsb2dpY2FsID0gMCwgcGh5cyA9IDAsIHNpemUgPSAwOwogCXUzMiBmbGFncyA9IEZJRU1BUF9FWFRFTlRfTUVSR0VEOwpkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggYmQzYzA3My4uNDE2MGFmYSAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC03Myw2ICs3Myw3IEBACiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfYWNrX2Vycik7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfY2xlYXJfZXJyKTsKIEVYUE9SVF9TWU1CT0wobG9nX3dhaXRfY29tbWl0KTsKK0VYUE9SVF9TWU1CT0wobG9nX3N0YXJ0X2NvbW1pdCk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfc3RhcnRfY29tbWl0KTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF9mb3JjZV9jb21taXRfbmVzdGVkKTsKIEVYUE9SVF9TWU1CT0woam91cm5hbF93aXBlKTsKQEAgLTc1Niw2ICs3NTcsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC04MjAsNiArODIyLDcgQEAKIAogCXJldHVybiBqb3VybmFsOwogb3V0X2VycjoKKwlrZnJlZShqb3VybmFsLT5qX3didWYpOwogCWtmcmVlKGpvdXJuYWwpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9jaGVja3BvaW50LmMgYi9mcy9qYmQyL2NoZWNrcG9pbnQuYwppbmRleCA1ZDcwYjNlLi5jYTBmNWViIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NoZWNrcG9pbnQuYworKysgYi9mcy9qYmQyL2NoZWNrcG9pbnQuYwpAQCAtNjQzLDYgKzY0Myw3IEBACiAKIGludCBfX2piZDJfam91cm5hbF9yZW1vdmVfY2hlY2twb2ludChzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCkKIHsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgKnN0YXRzOwogCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uOwogCWpvdXJuYWxfdCAqam91cm5hbDsKIAlpbnQgcmV0ID0gMDsKQEAgLTY3OSw2ICs2ODAsMTIgQEAKIAogCS8qIE9LLCB0aGF0IHdhcyB0aGUgbGFzdCBidWZmZXIgZm9yIHRoZSB0cmFuc2FjdGlvbjogd2UgY2FuIG5vdwogCSAgIHNhZmVseSByZW1vdmUgdGhpcyB0cmFuc2FjdGlvbiBmcm9tIHRoZSBsb2cgKi8KKwlzdGF0cyA9ICZ0cmFuc2FjdGlvbi0+dF9jaHBfc3RhdHM7CisJaWYgKHN0YXRzLT5jc19jaHBfdGltZSkKKwkJc3RhdHMtPmNzX2NocF90aW1lID0gamJkMl90aW1lX2RpZmYoc3RhdHMtPmNzX2NocF90aW1lLAorCQkJCQkJICAgIGppZmZpZXMpOworCXRyYWNlX2piZDJfY2hlY2twb2ludF9zdGF0cyhqb3VybmFsLT5qX2ZzX2Rldi0+YmRfZGV2LAorCQkJCSAgICB0cmFuc2FjdGlvbi0+dF90aWQsIHN0YXRzKTsKIAogCV9famJkMl9qb3VybmFsX2Ryb3BfdHJhbnNhY3Rpb24oam91cm5hbCwgdHJhbnNhY3Rpb24pOwogCWtmcmVlKHRyYW5zYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IDI2ZDk5MWQuLmQ0Y2ZkNmQgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY29tbWl0LmMKKysrIGIvZnMvamJkMi9jb21taXQuYwpAQCAtNDEwLDEwICs0MTAsMTAgQEAKIAlpZiAoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdCkKIAkJd3JpdGVfb3AgPSBXUklURV9TWU5DX1BMVUc7CiAJdHJhY2VfamJkMl9jb21taXRfbG9ja2luZyhqb3VybmFsLCBjb21taXRfdHJhbnNhY3Rpb24pOwotCXN0YXRzLnUucnVuLnJzX3dhaXQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfbWF4X3dhaXQ7Ci0Jc3RhdHMudS5ydW4ucnNfbG9ja2VkID0gamlmZmllczsKLQlzdGF0cy51LnJ1bi5yc19ydW5uaW5nID0gamJkMl90aW1lX2RpZmYoY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0LAotCQkJCQkJc3RhdHMudS5ydW4ucnNfbG9ja2VkKTsKKwlzdGF0cy5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKKwlzdGF0cy5ydW4ucnNfbG9ja2VkID0gamlmZmllczsKKwlzdGF0cy5ydW4ucnNfcnVubmluZyA9IGpiZDJfdGltZV9kaWZmKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGFydCwKKwkJCQkJICAgICAgc3RhdHMucnVuLnJzX2xvY2tlZCk7CiAKIAlzcGluX2xvY2soJmNvbW1pdF90cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CiAJd2hpbGUgKGNvbW1pdF90cmFuc2FjdGlvbi0+dF91cGRhdGVzKSB7CkBAIC00ODYsOSArNDg2LDkgQEAKIAlqYmQyX2pvdXJuYWxfc3dpdGNoX3Jldm9rZV90YWJsZShqb3VybmFsKTsKIAogCXRyYWNlX2piZDJfY29tbWl0X2ZsdXNoaW5nKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7Ci0Jc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX2xvY2tlZCA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnUucnVuLnJzX2xvY2tlZCwKLQkJCQkJICAgICAgIHN0YXRzLnUucnVuLnJzX2ZsdXNoaW5nKTsKKwlzdGF0cy5ydW4ucnNfZmx1c2hpbmcgPSBqaWZmaWVzOworCXN0YXRzLnJ1bi5yc19sb2NrZWQgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy5ydW4ucnNfbG9ja2VkLAorCQkJCQkgICAgIHN0YXRzLnJ1bi5yc19mbHVzaGluZyk7CiAKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0ZMVVNIOwogCWpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbiA9IGNvbW1pdF90cmFuc2FjdGlvbjsKQEAgLTUyMywxMSArNTIzLDExIEBACiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAKIAl0cmFjZV9qYmQyX2NvbW1pdF9sb2dnaW5nKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7Ci0Jc3RhdHMudS5ydW4ucnNfbG9nZ2luZyA9IGppZmZpZXM7Ci0Jc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy51LnJ1bi5yc19mbHVzaGluZywKLQkJCQkJCSBzdGF0cy51LnJ1bi5yc19sb2dnaW5nKTsKLQlzdGF0cy51LnJ1bi5yc19ibG9ja3MgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0czsKLQlzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkID0gMDsKKwlzdGF0cy5ydW4ucnNfbG9nZ2luZyA9IGppZmZpZXM7CisJc3RhdHMucnVuLnJzX2ZsdXNoaW5nID0gamJkMl90aW1lX2RpZmYoc3RhdHMucnVuLnJzX2ZsdXNoaW5nLAorCQkJCQkgICAgICAgc3RhdHMucnVuLnJzX2xvZ2dpbmcpOworCXN0YXRzLnJ1bi5yc19ibG9ja3MgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfb3V0c3RhbmRpbmdfY3JlZGl0czsKKwlzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCA9IDA7CiAKIAlKX0FTU0VSVChjb21taXRfdHJhbnNhY3Rpb24tPnRfbnJfYnVmZmVycyA8PQogCQkgY29tbWl0X3RyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpOwpAQCAtNjk1LDcgKzY5NSw3IEBACiAJCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQl9CiAJCQljb25kX3Jlc2NoZWQoKTsKLQkJCXN0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gYnVmczsKKwkJCXN0YXRzLnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IGJ1ZnM7CiAKIAkJCS8qIEZvcmNlIGEgbmV3IGRlc2NyaXB0b3IgdG8gYmUgZ2VuZXJhdGVkIG5leHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgcm91bmQgdGhlIGxvb3AuICovCkBAIC05ODgsMzMgKzk4OCwzMCBAQAogCUpfQVNTRVJUKGNvbW1pdF90cmFuc2FjdGlvbi0+dF9zdGF0ZSA9PSBUX0NPTU1JVCk7CiAKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQgPSBqaWZmaWVzOwotCXN0YXRzLnUucnVuLnJzX2xvZ2dpbmcgPSBqYmQyX3RpbWVfZGlmZihzdGF0cy51LnJ1bi5yc19sb2dnaW5nLAotCQkJCQkJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXJ0KTsKKwlzdGF0cy5ydW4ucnNfbG9nZ2luZyA9IGpiZDJfdGltZV9kaWZmKHN0YXRzLnJ1bi5yc19sb2dnaW5nLAorCQkJCQkgICAgICBjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQpOwogCiAJLyoKLQkgKiBGaWxlIHRoZSB0cmFuc2FjdGlvbiBmb3IgaGlzdG9yeQorCSAqIEZpbGUgdGhlIHRyYW5zYWN0aW9uIHN0YXRpc3RpY3MKIAkgKi8KLQlzdGF0cy50c190eXBlID0gSkJEMl9TVEFUU19SVU47CiAJc3RhdHMudHNfdGlkID0gY29tbWl0X3RyYW5zYWN0aW9uLT50X3RpZDsKLQlzdGF0cy51LnJ1bi5yc19oYW5kbGVfY291bnQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2NvdW50OwotCXNwaW5fbG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwotCW1lbWNweShqb3VybmFsLT5qX2hpc3RvcnkgKyBqb3VybmFsLT5qX2hpc3RvcnlfY3VyLCAmc3RhdHMsCi0JCQlzaXplb2Yoc3RhdHMpKTsKLQlpZiAoKytqb3VybmFsLT5qX2hpc3RvcnlfY3VyID09IGpvdXJuYWwtPmpfaGlzdG9yeV9tYXgpCi0JCWpvdXJuYWwtPmpfaGlzdG9yeV9jdXIgPSAwOworCXN0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQgPSBjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2NvdW50OworCXRyYWNlX2piZDJfcnVuX3N0YXRzKGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXYsCisJCQkgICAgIGNvbW1pdF90cmFuc2FjdGlvbi0+dF90aWQsICZzdGF0cy5ydW4pOwogCiAJLyoKIAkgKiBDYWxjdWxhdGUgb3ZlcmFsbCBzdGF0cwogCSAqLworCXNwaW5fbG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwogCWpvdXJuYWwtPmpfc3RhdHMudHNfdGlkKys7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc193YWl0ICs9IHN0YXRzLnUucnVuLnJzX3dhaXQ7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19ydW5uaW5nICs9IHN0YXRzLnUucnVuLnJzX3J1bm5pbmc7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19sb2NrZWQgKz0gc3RhdHMudS5ydW4ucnNfbG9ja2VkOwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfZmx1c2hpbmcgKz0gc3RhdHMudS5ydW4ucnNfZmx1c2hpbmc7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19sb2dnaW5nICs9IHN0YXRzLnUucnVuLnJzX2xvZ2dpbmc7Ci0Jam91cm5hbC0+al9zdGF0cy51LnJ1bi5yc19oYW5kbGVfY291bnQgKz0gc3RhdHMudS5ydW4ucnNfaGFuZGxlX2NvdW50OwotCWpvdXJuYWwtPmpfc3RhdHMudS5ydW4ucnNfYmxvY2tzICs9IHN0YXRzLnUucnVuLnJzX2Jsb2NrczsKLQlqb3VybmFsLT5qX3N0YXRzLnUucnVuLnJzX2Jsb2Nrc19sb2dnZWQgKz0gc3RhdHMudS5ydW4ucnNfYmxvY2tzX2xvZ2dlZDsKKwlqb3VybmFsLT5qX3N0YXRzLnJ1bi5yc193YWl0ICs9IHN0YXRzLnJ1bi5yc193YWl0OworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX3J1bm5pbmcgKz0gc3RhdHMucnVuLnJzX3J1bm5pbmc7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfbG9ja2VkICs9IHN0YXRzLnJ1bi5yc19sb2NrZWQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfZmx1c2hpbmcgKz0gc3RhdHMucnVuLnJzX2ZsdXNoaW5nOworCWpvdXJuYWwtPmpfc3RhdHMucnVuLnJzX2xvZ2dpbmcgKz0gc3RhdHMucnVuLnJzX2xvZ2dpbmc7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfaGFuZGxlX2NvdW50ICs9IHN0YXRzLnJ1bi5yc19oYW5kbGVfY291bnQ7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfYmxvY2tzICs9IHN0YXRzLnJ1bi5yc19ibG9ja3M7CisJam91cm5hbC0+al9zdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZCArPSBzdGF0cy5ydW4ucnNfYmxvY2tzX2xvZ2dlZDsKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwogCiAJY29tbWl0X3RyYW5zYWN0aW9uLT50X3N0YXRlID0gVF9GSU5JU0hFRDsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggNTNiODZlMS4uZmVkODUzODggMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC0xMzYsMTAgKzEzNiw2IEBACiAJam91cm5hbC0+al90YXNrID0gY3VycmVudDsKIAl3YWtlX3VwKCZqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAia2pvdXJuYWxkMiBzdGFydGluZzogcGlkICVkLCBkZXYgJXMsICIKLQkgICAgICAgImNvbW1pdCBpbnRlcnZhbCAlbGQgc2Vjb25kc1xuIiwgY3VycmVudC0+cGlkLAotCSAgICAgICBqb3VybmFsLT5qX2Rldm5hbWUsIGpvdXJuYWwtPmpfY29tbWl0X2ludGVydmFsIC8gSFopOwotCiAJLyoKIAkgKiBBbmQgbm93LCB3YWl0IGZvcmV2ZXIgZm9yIGNvbW1pdCB3YWtldXAgZXZlbnRzLgogCSAqLwpAQCAtMjIzLDcgKzIxOSw4IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JdCA9IGt0aHJlYWRfcnVuKGtqb3VybmFsZDIsIGpvdXJuYWwsICJram91cm5hbGQyIik7CisJdCA9IGt0aHJlYWRfcnVuKGtqb3VybmFsZDIsIGpvdXJuYWwsICJqYmQyLyVzIiwKKwkJCWpvdXJuYWwtPmpfZGV2bmFtZSk7CiAJaWYgKElTX0VSUih0KSkKIAkJcmV0dXJuIFBUUl9FUlIodCk7CiAKQEAgLTY3OSwxNTMgKzY3Niw2IEBACiAJaW50IG1heDsKIH07CiAKLXN0YXRpYyB2b2lkICpqYmQyX2hpc3Rvcnlfc2tpcF9lbXB0eShzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnMsCi0JCQkJCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0cywKLQkJCQkJaW50IGZpcnN0KQotewotCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPm1heCkKLQkJdHMgPSBzLT5zdGF0czsKLQlpZiAoIWZpcnN0ICYmIHRzID09IHMtPnN0YXRzICsgcy0+c3RhcnQpCi0JCXJldHVybiBOVUxMOwotCXdoaWxlICh0cy0+dHNfdHlwZSA9PSAwKSB7Ci0JCXRzKys7Ci0JCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPm1heCkKLQkJCXRzID0gcy0+c3RhdHM7Ci0JCWlmICh0cyA9PSBzLT5zdGF0cyArIHMtPnN0YXJ0KQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiB0czsKLQotfQotCi1zdGF0aWMgdm9pZCAqamJkMl9zZXFfaGlzdG9yeV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGpiZDJfc3RhdHNfcHJvY19zZXNzaW9uICpzID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zICp0czsKLQlpbnQgbCA9ICpwb3M7Ci0KLQlpZiAobCA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCXRzID0gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgcy0+c3RhdHMgKyBzLT5zdGFydCwgMSk7Ci0JaWYgKCF0cykKLQkJcmV0dXJuIE5VTEw7Ci0JbC0tOwotCXdoaWxlIChsKSB7Ci0JCXRzID0gamJkMl9oaXN0b3J5X3NraXBfZW1wdHkocywgKyt0cywgMCk7Ci0JCWlmICghdHMpCi0JCQlicmVhazsKLQkJbC0tOwotCX0KLQlyZXR1cm4gdHM7Ci19Ci0KLXN0YXRpYyB2b2lkICpqYmQyX3NlcV9oaXN0b3J5X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqdHMgPSB2OwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHMsIHMtPnN0YXRzICsgcy0+c3RhcnQsIDEpOwotCWVsc2UKLQkJcmV0dXJuIGpiZDJfaGlzdG9yeV9za2lwX2VtcHR5KHMsICsrdHMsIDApOwotfQotCi1zdGF0aWMgaW50IGpiZDJfc2VxX2hpc3Rvcnlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcyAqdHMgPSB2OwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNHMgJS01cyAlLTVzICUtNXMgJS01cyAlLTVzICUtNXMgJS02cyAlLTVzICIKLQkJCQkiJS01cyAlLTVzICUtNXMgJS01cyAlLTVzXG4iLCAiUi9DIiwgInRpZCIsCi0JCQkJIndhaXQiLCAicnVuIiwgImxvY2siLCAiZmx1c2giLCAibG9nIiwgImhuZGxzIiwKLQkJCQkiYmxvY2siLCAiaW5sb2ciLCAiY3RpbWUiLCAid3JpdGUiLCAiZHJvcCIsCi0JCQkJImNsb3NlIik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodHMtPnRzX3R5cGUgPT0gSkJEMl9TVEFUU19SVU4pCi0JCXNlcV9wcmludGYoc2VxLCAiJS00cyAlLTVsdSAlLTV1ICUtNXUgJS01dSAlLTV1ICUtNXUgIgotCQkJCSIlLTZsdSAlLTVsdSAlLTVsdVxuIiwgIlIiLCB0cy0+dHNfdGlkLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX3dhaXQpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX3J1bm5pbmcpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX2xvY2tlZCksCi0JCQkJamlmZmllc190b19tc2Vjcyh0cy0+dS5ydW4ucnNfZmx1c2hpbmcpLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUucnVuLnJzX2xvZ2dpbmcpLAotCQkJCXRzLT51LnJ1bi5yc19oYW5kbGVfY291bnQsCi0JCQkJdHMtPnUucnVuLnJzX2Jsb2NrcywKLQkJCQl0cy0+dS5ydW4ucnNfYmxvY2tzX2xvZ2dlZCk7Ci0JZWxzZSBpZiAodHMtPnRzX3R5cGUgPT0gSkJEMl9TVEFUU19DSEVDS1BPSU5UKQotCQlzZXFfcHJpbnRmKHNlcSwgIiUtNHMgJS01bHUgJTQ4cyAlLTV1ICUtNWx1ICUtNWx1ICUtNWx1XG4iLAotCQkJCSJDIiwgdHMtPnRzX3RpZCwgIiAiLAotCQkJCWppZmZpZXNfdG9fbXNlY3ModHMtPnUuY2hwLmNzX2NocF90aW1lKSwKLQkJCQl0cy0+dS5jaHAuY3Nfd3JpdHRlbiwgdHMtPnUuY2hwLmNzX2Ryb3BwZWQsCi0JCQkJdHMtPnUuY2hwLmNzX2ZvcmNlZF90b19jbG9zZSk7Ci0JZWxzZQotCQlKX0FTU0VSVCgwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgamJkMl9zZXFfaGlzdG9yeV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGpiZDJfc2VxX2hpc3Rvcnlfb3BzID0gewotCS5zdGFydCAgPSBqYmQyX3NlcV9oaXN0b3J5X3N0YXJ0LAotCS5uZXh0ICAgPSBqYmQyX3NlcV9oaXN0b3J5X25leHQsCi0JLnN0b3AgICA9IGpiZDJfc2VxX2hpc3Rvcnlfc3RvcCwKLQkuc2hvdyAgID0gamJkMl9zZXFfaGlzdG9yeV9zaG93LAotfTsKLQotc3RhdGljIGludCBqYmQyX3NlcV9oaXN0b3J5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jam91cm5hbF90ICpqb3VybmFsID0gUERFKGlub2RlKS0+ZGF0YTsKLQlzdHJ1Y3QgamJkMl9zdGF0c19wcm9jX3Nlc3Npb24gKnM7Ci0JaW50IHJjLCBzaXplOwotCi0JcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdHJhbnNhY3Rpb25fc3RhdHNfcykgKiBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCXMtPnN0YXRzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAocy0+c3RhdHMgPT0gTlVMTCkgewotCQlrZnJlZShzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNwaW5fbG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwotCW1lbWNweShzLT5zdGF0cywgam91cm5hbC0+al9oaXN0b3J5LCBzaXplKTsKLQlzLT5tYXggPSBqb3VybmFsLT5qX2hpc3RvcnlfbWF4OwotCXMtPnN0YXJ0ID0gam91cm5hbC0+al9oaXN0b3J5X2N1ciAlIHMtPm1heDsKLQlzcGluX3VubG9jaygmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwotCi0JcmMgPSBzZXFfb3BlbihmaWxlLCAmamJkMl9zZXFfaGlzdG9yeV9vcHMpOwotCWlmIChyYyA9PSAwKSB7Ci0JCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJbS0+cHJpdmF0ZSA9IHM7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUocy0+c3RhdHMpOwotCQlrZnJlZShzKTsKLQl9Ci0JcmV0dXJuIHJjOwotCi19Ci0KLXN0YXRpYyBpbnQgamJkMl9zZXFfaGlzdG9yeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBqYmQyX3N0YXRzX3Byb2Nfc2Vzc2lvbiAqcyA9IHNlcS0+cHJpdmF0ZTsKLQotCWtmcmVlKHMtPnN0YXRzKTsKLQlrZnJlZShzKTsKLQlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9oaXN0b3J5X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGpiZDJfc2VxX2hpc3Rvcnlfb3BlbiwKLQkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKLQkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgICAgICAgID0gamJkMl9zZXFfaGlzdG9yeV9yZWxlYXNlLAotfTsKLQogc3RhdGljIHZvaWQgKmpiZDJfc2VxX2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCXJldHVybiAqcG9zID8gTlVMTCA6IFNFUV9TVEFSVF9UT0tFTjsKQEAgLTg0MiwyOSArNjkyLDI5IEBACiAKIAlpZiAodiAhPSBTRVFfU1RBUlRfVE9LRU4pCiAJCXJldHVybiAwOwotCXNlcV9wcmludGYoc2VxLCAiJWx1IHRyYW5zYWN0aW9uLCBlYWNoIHVwdG8gJXUgYmxvY2tzXG4iLAorCXNlcV9wcmludGYoc2VxLCAiJWx1IHRyYW5zYWN0aW9uLCBlYWNoIHVwIHRvICV1IGJsb2Nrc1xuIiwKIAkJCXMtPnN0YXRzLT50c190aWQsCiAJCQlzLT5qb3VybmFsLT5qX21heF90cmFuc2FjdGlvbl9idWZmZXJzKTsKIAlpZiAocy0+c3RhdHMtPnRzX3RpZCA9PSAwKQogCQlyZXR1cm4gMDsKIAlzZXFfcHJpbnRmKHNlcSwgImF2ZXJhZ2U6IFxuICAldW1zIHdhaXRpbmcgZm9yIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc193YWl0IC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfd2FpdCAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBydW5uaW5nIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19ydW5uaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfcnVubmluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyB0cmFuc2FjdGlvbiB3YXMgYmVpbmcgbG9ja2VkXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19sb2NrZWQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19sb2NrZWQgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICV1bXMgZmx1c2hpbmcgZGF0YSAoaW4gb3JkZXJlZCBtb2RlKVxuIiwKLQkgICAgamlmZmllc190b19tc2VjcyhzLT5zdGF0cy0+dS5ydW4ucnNfZmx1c2hpbmcgLyBzLT5zdGF0cy0+dHNfdGlkKSk7CisJICAgIGppZmZpZXNfdG9fbXNlY3Mocy0+c3RhdHMtPnJ1bi5yc19mbHVzaGluZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJXVtcyBsb2dnaW5nIHRyYW5zYWN0aW9uXG4iLAotCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT51LnJ1bi5yc19sb2dnaW5nIC8gcy0+c3RhdHMtPnRzX3RpZCkpOworCSAgICBqaWZmaWVzX3RvX21zZWNzKHMtPnN0YXRzLT5ydW4ucnNfbG9nZ2luZyAvIHMtPnN0YXRzLT50c190aWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgJWxsdXVzIGF2ZXJhZ2UgdHJhbnNhY3Rpb24gY29tbWl0IHRpbWVcbiIsCiAJCSAgIGRpdl91NjQocy0+am91cm5hbC0+al9hdmVyYWdlX2NvbW1pdF90aW1lLCAxMDAwKSk7CiAJc2VxX3ByaW50ZihzZXEsICIgICVsdSBoYW5kbGVzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2hhbmRsZV9jb3VudCAvIHMtPnN0YXRzLT50c190aWQpOworCSAgICBzLT5zdGF0cy0+cnVuLnJzX2hhbmRsZV9jb3VudCAvIHMtPnN0YXRzLT50c190aWQpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbHUgYmxvY2tzIHBlciB0cmFuc2FjdGlvblxuIiwKLQkgICAgcy0+c3RhdHMtPnUucnVuLnJzX2Jsb2NrcyAvIHMtPnN0YXRzLT50c190aWQpOworCSAgICBzLT5zdGF0cy0+cnVuLnJzX2Jsb2NrcyAvIHMtPnN0YXRzLT50c190aWQpOwogCXNlcV9wcmludGYoc2VxLCAiICAlbHUgbG9nZ2VkIGJsb2NrcyBwZXIgdHJhbnNhY3Rpb25cbiIsCi0JICAgIHMtPnN0YXRzLT51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkIC8gcy0+c3RhdHMtPnRzX3RpZCk7CisJICAgIHMtPnN0YXRzLT5ydW4ucnNfYmxvY2tzX2xvZ2dlZCAvIHMtPnN0YXRzLT50c190aWQpOwogCXJldHVybiAwOwogfQogCkBAIC05MjAsNyArNzcwLDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9pbmZvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqYmQyX3NlcV9pbmZvX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuICAgICAgICAgICA9IGpiZDJfc2VxX2luZm9fb3BlbiwKIAkucmVhZCAgICAgICAgICAgPSBzZXFfcmVhZCwKQEAgLTkzNCw4ICs3ODQsNiBAQAogewogCWpvdXJuYWwtPmpfcHJvY19lbnRyeSA9IHByb2NfbWtkaXIoam91cm5hbC0+al9kZXZuYW1lLCBwcm9jX2piZDJfc3RhdHMpOwogCWlmIChqb3VybmFsLT5qX3Byb2NfZW50cnkpIHsKLQkJcHJvY19jcmVhdGVfZGF0YSgiaGlzdG9yeSIsIFNfSVJVR08sIGpvdXJuYWwtPmpfcHJvY19lbnRyeSwKLQkJCQkgJmpiZDJfc2VxX2hpc3RvcnlfZm9wcywgam91cm5hbCk7CiAJCXByb2NfY3JlYXRlX2RhdGEoImluZm8iLCBTX0lSVUdPLCBqb3VybmFsLT5qX3Byb2NfZW50cnksCiAJCQkJICZqYmQyX3NlcV9pbmZvX2ZvcHMsIGpvdXJuYWwpOwogCX0KQEAgLTk0NCwyNyArNzkyLDkgQEAKIHN0YXRpYyB2b2lkIGpiZDJfc3RhdHNfcHJvY19leGl0KGpvdXJuYWxfdCAqam91cm5hbCkKIHsKIAlyZW1vdmVfcHJvY19lbnRyeSgiaW5mbyIsIGpvdXJuYWwtPmpfcHJvY19lbnRyeSk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImhpc3RvcnkiLCBqb3VybmFsLT5qX3Byb2NfZW50cnkpOwogCXJlbW92ZV9wcm9jX2VudHJ5KGpvdXJuYWwtPmpfZGV2bmFtZSwgcHJvY19qYmQyX3N0YXRzKTsKIH0KIAotc3RhdGljIHZvaWQgam91cm5hbF9pbml0X3N0YXRzKGpvdXJuYWxfdCAqam91cm5hbCkKLXsKLQlpbnQgc2l6ZTsKLQotCWlmICghcHJvY19qYmQyX3N0YXRzKQotCQlyZXR1cm47Ci0KLQlqb3VybmFsLT5qX2hpc3RvcnlfbWF4ID0gMTAwOwotCXNpemUgPSBzaXplb2Yoc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MpICogam91cm5hbC0+al9oaXN0b3J5X21heDsKLQlqb3VybmFsLT5qX2hpc3RvcnkgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmICgham91cm5hbC0+al9oaXN0b3J5KSB7Ci0JCWpvdXJuYWwtPmpfaGlzdG9yeV9tYXggPSAwOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX2hpc3RvcnlfbG9jayk7Ci19Ci0KIC8qCiAgKiBNYW5hZ2VtZW50IGZvciBqb3VybmFsIGNvbnRyb2wgYmxvY2tzOiBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZAogICogZGVzdHJveSBqb3VybmFsX3Qgc3RydWN0dXJlcywgYW5kIHRvIGluaXRpYWxpc2UgYW5kIHJlYWQgZXhpc3RpbmcKQEAgLTEwMDksNyArODM5LDcgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWpvdXJuYWxfaW5pdF9zdGF0cyhqb3VybmFsKTsKKwlzcGluX2xvY2tfaW5pdCgmam91cm5hbC0+al9oaXN0b3J5X2xvY2spOwogCiAJcmV0dXJuIGpvdXJuYWw7CiBmYWlsOgpAQCAtMTA4Myw2ICs5MTMsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbCk7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CkBAIC0xMTE1LDcgKzk0Niw3IEBACiAJd2hpbGUgKChwID0gc3RyY2hyKHAsICcvJykpKQogCQkqcCA9ICchJzsKIAlwID0gam91cm5hbC0+al9kZXZuYW1lICsgc3RybGVuKGpvdXJuYWwtPmpfZGV2bmFtZSk7Ci0Jc3ByaW50ZihwLCAiOiVsdSIsIGpvdXJuYWwtPmpfaW5vZGUtPmlfaW5vKTsKKwlzcHJpbnRmKHAsICItJWx1Iiwgam91cm5hbC0+al9pbm9kZS0+aV9pbm8pOwogCWpiZF9kZWJ1ZygxLAogCQkgICJqb3VybmFsICVwOiBpbm9kZSAlcy8lbGQsIHNpemUgJUxkLCBiaXRzICVkLCBibGtzaXplICVsZFxuIiwKIAkJICBqb3VybmFsLCBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLApAQCAtMTE1Niw2ICs5ODcsNyBAQAogCiAJcmV0dXJuIGpvdXJuYWw7CiBvdXRfZXJyOgorCWtmcmVlKGpvdXJuYWwtPmpfd2J1Zik7CiAJamJkMl9zdGF0c19wcm9jX2V4aXQoam91cm5hbCk7CiAJa2ZyZWUoam91cm5hbCk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9tbWFwLmMgYi9mcy9uY3Bmcy9tbWFwLmMKaW5kZXggNWQ4ZGNiOS4uMTU0NThkZSAxMDA2NDQKLS0tIGEvZnMvbmNwZnMvbW1hcC5jCisrKyBiL2ZzL25jcGZzL21tYXAuYwpAQCAtOTUsNyArOTUsNyBAQAogCXJldHVybiBWTV9GQVVMVF9NQUpPUjsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBuY3BfZmlsZV9tbWFwID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmNwX2ZpbGVfbW1hcCA9CiB7CiAJLmZhdWx0ID0gbmNwX2ZpbGVfbW1hcF9mYXVsdCwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNjM5NzZjMC4uOTllYTE5NiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTE4MCw3ICsxMTgwLDcgQEAKIAkJCQkgICAgICAxLCBmbGFncyAmIE5GU19NT1VOVF9OT1JFU1ZQT1JUKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVycm9yOwotCW1lbWNweShjbHAtPmNsX2lwYWRkciwgaXBfYWRkciwgc2l6ZW9mKGNscC0+Y2xfaXBhZGRyKSk7CisJc3RybGNweShjbHAtPmNsX2lwYWRkciwgaXBfYWRkciwgc2l6ZW9mKGNscC0+Y2xfaXBhZGRyKSk7CiAKIAllcnJvciA9IG5mc19pZG1hcF9uZXcoY2xwKTsKIAlpZiAoZXJyb3IgPCAwKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggMzIwNjJjMy4uN2NiMjk4NSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTUzNiw2ICsxNTM2LDggQEAKIAkJb2xkX2RlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKGlub2RlKTsKKwogCWRfZHJvcChkZW50cnkpOwogCWVycm9yID0gTkZTX1BST1RPKGRpciktPmxpbmsoaW5vZGUsIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoZXJyb3IgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2RpcmVjdC5jIGIvZnMvbmZzL2RpcmVjdC5jCmluZGV4IDZjMzIxMDAuLmUxZDQxNWUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXJlY3QuYworKysgYi9mcy9uZnMvZGlyZWN0LmMKQEAgLTQ1Nyw2ICs0NTcsNyBAQAogCX07CiAJc3RydWN0IHJwY190YXNrX3NldHVwIHRhc2tfc2V0dXBfZGF0YSA9IHsKIAkJLnJwY19jbGllbnQgPSBORlNfQ0xJRU5UKGlub2RlKSwKKwkJLnJwY19tZXNzYWdlID0gJm1zZywKIAkJLmNhbGxiYWNrX29wcyA9ICZuZnNfd3JpdGVfZGlyZWN0X29wcywKIAkJLndvcmtxdWV1ZSA9IG5mc2lvZF93b3JrcXVldWUsCiAJCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggODZkNmI0ZC4uZjVmZGQzOSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC01OSw3ICs1OSw3IEBACiBzdGF0aWMgaW50IG5mc19mbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogc3RhdGljIGludCBuZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmwpOwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzOwogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBuZnNfZmlsZV9sbHNlZWssCkBAIC01NzIsNyArNTcyLDcgQEAKIAlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5mc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZSA9IG5mc192bV9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYyBiL2ZzL25mcy9uZnM0bmFtZXNwYWNlLmMKaW5kZXggMjYzNmMyNi4uZmEzNDA4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRuYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmZzNG5hbWVzcGFjZS5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAogCW1udF9wYXRoID0gbmZzNF9wYXRobmFtZV9zdHJpbmcoJmxvY2F0aW9uLT5yb290cGF0aCwgcGFnZTIsIFBBR0VfU0laRSk7CiAJaWYgKElTX0VSUihtbnRfcGF0aCkpCi0JCXJldHVybiBtbnQ7CisJCXJldHVybiBFUlJfQ0FTVChtbnRfcGF0aCk7CiAJbW91bnRkYXRhLT5tbnRfcGF0aCA9IG1udF9wYXRoOwogCW1heGJ1ZmxlbiA9IG1udF9wYXRoIC0gMSAtIHBhZ2UyOwogCkBAIC0xMzIsMTUgKzEzMiwxNSBAQAogCQlpZiAoYnVmLT5sZW4gPD0gMCB8fCBidWYtPmxlbiA+PSBtYXhidWZsZW4pCiAJCQljb250aW51ZTsKIAotCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7Ci0KIAkJaWYgKG1lbWNocihidWYtPmRhdGEsIElQVjZfU0NPUEVfREVMSU1JVEVSLCBidWYtPmxlbikpCiAJCQljb250aW51ZTsKLQkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwKLQkJCQlidWYtPmxlbiwKLQkJCQltb3VudGRhdGEtPmFkZHIsIG1vdW50ZGF0YS0+YWRkcmxlbik7CisKKwkJbW91bnRkYXRhLT5hZGRybGVuID0gbmZzX3BhcnNlX3NlcnZlcl9uYW1lKGJ1Zi0+ZGF0YSwgYnVmLT5sZW4sCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpOwogCQlpZiAobW91bnRkYXRhLT5hZGRybGVuID09IDApCiAJCQljb250aW51ZTsKKworCQltb3VudGRhdGEtPmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CiAJCXJwY19zZXRfcG9ydChtb3VudGRhdGEtPmFkZHIsIE5GU19QT1JUKTsKIAogCQltZW1jcHkocGFnZTIsIGJ1Zi0+ZGF0YSwgYnVmLT5sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBlZDdjMjY5Li5mZjM3NDU0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNzIsMTIgKzcyLDE3IEBACiAvKiBQcmV2ZW50IGxlYWtzIG9mIE5GU3Y0IGVycm9ycyBpbnRvIHVzZXJsYW5kICovCiBzdGF0aWMgaW50IG5mczRfbWFwX2Vycm9ycyhpbnQgZXJyKQogewotCWlmIChlcnIgPCAtMTAwMCkgeworCWlmIChlcnIgPj0gLTEwMDApCisJCXJldHVybiBlcnI7CisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBjb3VsZCBub3QgaGFuZGxlIE5GU3Y0IGVycm9yICVkXG4iLAogCQkJCV9fZnVuY19fLCAtZXJyKTsKLQkJcmV0dXJuIC1FSU87CisJCWJyZWFrOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOwogfQogCiAvKgpAQCAtMzA2MCw5ICszMDY1LDYgQEAKIAlpZiAodGltZV9iZWZvcmUoY2xwLT5jbF9sYXN0X3JlbmV3YWwsdGltZXN0YW1wKSkKIAkJY2xwLT5jbF9sYXN0X3JlbmV3YWwgPSB0aW1lc3RhbXA7CiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0JZHByaW50aygiJXMgY2FsbGluZyBwdXRfcnBjY3JlZCBvbiBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sCi0JCQkJdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbmV3X29wcyA9IHsKQEAgLTQ4NzcsNyArNDg3OSw2IEBACiAJbmZzNDFfc2VxdWVuY2VfZnJlZV9zbG90KGNscCwgdGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIAlkcHJpbnRrKCIlcyBycGNfY3JlZCAlcFxuIiwgX19mdW5jX18sIHRhc2stPnRrX21zZy5ycGNfY3JlZCk7CiAKLQlwdXRfcnBjY3JlZCh0YXNrLT50a19tc2cucnBjX2NyZWQpOwogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfYXJncCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggZTI3YzZjZS4uMDE1NmMwMSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC0xMjcsMTIgKzEyNyw2IEBACiB9CiAKIHZvaWQKLW5mczRfcmVuZXdkX3ByZXBhcmVfc2h1dGRvd24oc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3JlbmV3ZCk7Ci19Ci0KLXZvaWQKIG5mczRfa2lsbF9yZW5ld2Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNscC0+Y2xfcmVuZXdkKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IDgzYWQ0N2MuLjIwYjRlMzAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtNTY4MSw3ICs1NjgxLDYgQEAKIAl7IE5GUzRFUlJfU0VSVkVSRkFVTFQsCS1FU0VSVkVSRkFVTFQJfSwKIAl7IE5GUzRFUlJfQkFEVFlQRSwJLUVCQURUWVBFCX0sCiAJeyBORlM0RVJSX0xPQ0tFRCwJLUVBR0FJTgkJfSwKLQl7IE5GUzRFUlJfUkVTT1VSQ0UsCS1FUkVNT1RFSU8JfSwKIAl7IE5GUzRFUlJfU1lNTElOSywJLUVMT09QCQl9LAogCXsgTkZTNEVSUl9PUF9JTExFR0FMLAktRU9QTk9UU1VQUAl9LAogCXsgTkZTNEVSUl9ERUFETE9DSywJLUVERUFETEsJfSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9zdXBlci5jIGIvZnMvbmZzL3N1cGVyLmMKaW5kZXggODEwNzcwZi4uOTBiZTU1MSAxMDA2NDQKLS0tIGEvZnMvbmZzL3N1cGVyLmMKKysrIGIvZnMvbmZzL3N1cGVyLmMKQEAgLTcyOCwyMiArNzI4LDI0IEBACiAJdW5sb2NrX2tlcm5lbCgpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKGludCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEodW5zaWduZWQgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOwogCWlmIChkYXRhKSB7Ci0JCWRhdGEtPmZsYWdzCQk9IGZsYWdzOwogCQlkYXRhLT5yc2l6ZQkJPSBORlNfTUFYX0ZJTEVfSU9fU0laRTsKIAkJZGF0YS0+d3NpemUJCT0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CiAJCWRhdGEtPmFjcmVnbWluCQk9IE5GU19ERUZfQUNSRUdNSU47CiAJCWRhdGEtPmFjcmVnbWF4CQk9IE5GU19ERUZfQUNSRUdNQVg7CiAJCWRhdGEtPmFjZGlybWluCQk9IE5GU19ERUZfQUNESVJNSU47CiAJCWRhdGEtPmFjZGlybWF4CQk9IE5GU19ERUZfQUNESVJNQVg7CisJCWRhdGEtPm1vdW50X3NlcnZlci5wb3J0CT0gTkZTX1VOU1BFQ19QT1JUOwogCQlkYXRhLT5uZnNfc2VydmVyLnBvcnQJPSBORlNfVU5TUEVDX1BPUlQ7CisJCWRhdGEtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9UQ1A7CiAJCWRhdGEtPmF1dGhfZmxhdm9yc1swXQk9IFJQQ19BVVRIX1VOSVg7CiAJCWRhdGEtPmF1dGhfZmxhdm9yX2xlbgk9IDE7CisJCWRhdGEtPnZlcnNpb24JCT0gdmVyc2lvbjsKIAkJZGF0YS0+bWlub3J2ZXJzaW9uCT0gMDsKIAl9CiAJcmV0dXJuIGRhdGE7CkBAIC03NzYsMTUgKzc3OCwxMyBAQAogICogU2VsZWN0IGJldHdlZW4gYSBkZWZhdWx0IHBvcnQgdmFsdWUgYW5kIGEgdXNlci1zcGVjaWZpZWQgcG9ydCB2YWx1ZS4KICAqIElmIGEgemVybyB2YWx1ZSBpcyBzZXQsIHRoZW4gYXV0b2JpbmQgd2lsbCBiZSB1c2VkLgogICovCi1zdGF0aWMgdm9pZCBuZnNfc2V0X2RlZmF1bHRfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgY29uc3QgaW50IHBhcnNlZF9wb3J0LAorc3RhdGljIHZvaWQgbmZzX3NldF9wb3J0KHN0cnVjdCBzb2NrYWRkciAqc2FwLCBpbnQgKnBvcnQsCiAJCQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfcG9ydCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBwb3J0ID0gZGVmYXVsdF9wb3J0OworCWlmICgqcG9ydCA9PSBORlNfVU5TUEVDX1BPUlQpCisJCSpwb3J0ID0gZGVmYXVsdF9wb3J0OwogCi0JaWYgKHBhcnNlZF9wb3J0ICE9IE5GU19VTlNQRUNfUE9SVCkKLQkJcG9ydCA9IHBhcnNlZF9wb3J0OwotCi0JcnBjX3NldF9wb3J0KHNhcCwgcG9ydCk7CisJcnBjX3NldF9wb3J0KHNhcCwgKnBvcnQpOwogfQogCiAvKgpAQCAtMTI1Myw2ICsxMjUzLDcgQEAKIAkJCWRlZmF1bHQ6CiAJCQkJZGZwcmludGsoTU9VTlQsICJORlM6ICAgdW5yZWNvZ25pemVkICIKIAkJCQkJCSJ0cmFuc3BvcnQgcHJvdG9jb2xcbiIpOworCQkJCWtmcmVlKHN0cmluZyk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlicmVhazsKQEAgLTE0NzUsNyArMTQ3Niw3IEBACiAJCWFyZ3MtPm1vdW50X3NlcnZlci5hZGRybGVuID0gYXJncy0+bmZzX3NlcnZlci5hZGRybGVuOwogCX0KIAlyZXF1ZXN0LnNhbGVuID0gYXJncy0+bW91bnRfc2VydmVyLmFkZHJsZW47Ci0JbmZzX3NldF9kZWZhdWx0X3BvcnQocmVxdWVzdC5zYXAsIGFyZ3MtPm1vdW50X3NlcnZlci5wb3J0LCAwKTsKKwluZnNfc2V0X3BvcnQocmVxdWVzdC5zYXAsICZhcmdzLT5tb3VudF9zZXJ2ZXIucG9ydCwgMCk7CiAKIAkvKgogCSAqIE5vdyBhc2sgdGhlIG1vdW50IHNlcnZlciB0byBtYXAgb3VyIGV4cG9ydCBwYXRoCkBAIC0xNzY1LDcgKzE3NjYsNyBAQAogCQkJZ290byBvdXRfdjRfbm90X2NvbXBpbGVkOwogI2VuZGlmCiAKLQkJbmZzX3NldF9kZWZhdWx0X3BvcnQoc2FwLCBhcmdzLT5uZnNfc2VydmVyLnBvcnQsIDApOworCQluZnNfc2V0X3BvcnQoc2FwLCAmYXJncy0+bmZzX3NlcnZlci5wb3J0LCAwKTsKIAogCQluZnNfc2V0X21vdW50X3RyYW5zcG9ydF9wcm90b2NvbChhcmdzKTsKIApAQCAtMTg0Niw5ICsxODQ3LDEwIEBACiAJICAgIGRhdGEtPmFjZGlybWluICE9IG5mc3MtPmFjZGlybWluIC8gSFogfHwKIAkgICAgZGF0YS0+YWNkaXJtYXggIT0gbmZzcy0+YWNkaXJtYXggLyBIWiB8fAogCSAgICBkYXRhLT50aW1lbyAhPSAoMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFopIHx8CisJICAgIGRhdGEtPm5mc19zZXJ2ZXIucG9ydCAhPSBuZnNzLT5wb3J0IHx8CiAJICAgIGRhdGEtPm5mc19zZXJ2ZXIuYWRkcmxlbiAhPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuIHx8Ci0JICAgIG1lbWNtcCgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKLQkJICAgZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKSAhPSAwKQorCSAgICAhcnBjX2NtcF9hZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLAorCQkJICAoc3RydWN0IHNvY2thZGRyICopJm5mc3MtPm5mc19jbGllbnQtPmNsX2FkZHIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpAQCAtMTg5MSw2ICsxODkzLDcgQEAKIAlkYXRhLT5hY2Rpcm1pbiA9IG5mc3MtPmFjZGlybWluIC8gSFo7CiAJZGF0YS0+YWNkaXJtYXggPSBuZnNzLT5hY2Rpcm1heCAvIEhaOwogCWRhdGEtPnRpbWVvID0gMTBVICogbmZzcy0+Y2xpZW50LT5jbF90aW1lb3V0LT50b19pbml0dmFsIC8gSFo7CisJZGF0YS0+bmZzX3NlcnZlci5wb3J0ID0gbmZzcy0+cG9ydDsKIAlkYXRhLT5uZnNfc2VydmVyLmFkZHJsZW4gPSBuZnNzLT5uZnNfY2xpZW50LT5jbF9hZGRybGVuOwogCW1lbWNweSgmZGF0YS0+bmZzX3NlcnZlci5hZGRyZXNzLCAmbmZzcy0+bmZzX2NsaWVudC0+Y2xfYWRkciwKIAkJZGF0YS0+bmZzX3NlcnZlci5hZGRybGVuKTsKQEAgLTIxMDQsNyArMjEwNyw3IEBACiAJfTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YShORlNfTU9VTlRfVkVSMyB8IE5GU19NT1VOVF9UQ1ApOworCWRhdGEgPSBuZnNfYWxsb2NfcGFyc2VkX21vdW50X2RhdGEoMyk7CiAJbW50ZmggPSBremFsbG9jKHNpemVvZigqbW50ZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGF0YSA9PSBOVUxMIHx8IG1udGZoID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZmg7CkBAIC0yMzI5LDcgKzIzMzIsNyBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhcmdzLT5uZnNfc2VydmVyLmFkZHJlc3M7CiAKLQluZnNfc2V0X2RlZmF1bHRfcG9ydChzYXAsIGFyZ3MtPm5mc19zZXJ2ZXIucG9ydCwgTkZTX1BPUlQpOworCW5mc19zZXRfcG9ydChzYXAsICZhcmdzLT5uZnNfc2VydmVyLnBvcnQsIE5GU19QT1JUKTsKIAogCW5mc192YWxpZGF0ZV90cmFuc3BvcnRfcHJvdG9jb2woYXJncyk7CiAKQEAgLTIzNzQsNyArMjM3Nyw2IEBACiAJaWYgKGRhdGEgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9fZGF0YTsKIAotCWFyZ3MtPnZlcnNpb24JCT0gNDsKIAlzd2l0Y2ggKGRhdGEtPnZlcnNpb24pIHsKIAljYXNlIDE6CiAJCWlmIChkYXRhLT5ob3N0X2FkZHJsZW4gPiBzaXplb2YoYXJncy0+bmZzX3NlcnZlci5hZGRyZXNzKSkKQEAgLTI2NTgsNyArMjY2MCw3IEBACiAJc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCi0JZGF0YSA9IG5mc19hbGxvY19wYXJzZWRfbW91bnRfZGF0YSgwKTsKKwlkYXRhID0gbmZzX2FsbG9jX3BhcnNlZF9tb3VudF9kYXRhKDQpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWVfZGF0YTsKIApAQCAtMjY4OCw3ICsyNjkwLDYgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAluZnNfc3VwZXJfcmV0dXJuX2FsbF9kZWxlZ2F0aW9ucyhzYik7CiAJa2lsbF9hbm9uX3N1cGVyKHNiKTsKLQluZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcik7CiAJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc2IpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnMzeGRyLmMgYi9mcy9uZnNkL25mczN4ZHIuYwppbmRleCBlZGY5MjZlLi5kMGEyY2UxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczN4ZHIuYworKysgYi9mcy9uZnNkL25mczN4ZHIuYwpAQCAtOTU4LDcgKzk1OCw3IEBACiAJCXAxID0gZW5jb2RlX2VudHJ5X2JhZ2dhZ2UoY2QsIHAxLCBuYW1lLCBuYW1sZW4sIGlubyk7CiAKIAkJaWYgKHBsdXMpCi0JCQlwID0gZW5jb2RlX2VudHJ5cGx1c19iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuKTsKKwkJCXAxID0gZW5jb2RlX2VudHJ5cGx1c19iYWdnYWdlKGNkLCBwMSwgbmFtZSwgbmFtbGVuKTsKIAogCQkvKiBkZXRlcm1pbmUgZW50cnkgd29yZCBsZW5ndGggYW5kIGxlbmd0aHMgdG8gZ28gaW4gcGFnZXMgKi8KIAkJbnVtX2VudHJ5X3dvcmRzID0gcDEgLSB0bXA7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCAwMDM4OGQyLi41YzAxZmMxIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogZXh0ZXJuIGludCBuZnNkX3Bvb2xfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IG5mc2RfcG9vbF9zdGF0c19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG9vbF9zdGF0c19vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IG5mc2RfcG9vbF9zdGF0c19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2J0bm9kZS5jIGIvZnMvbmlsZnMyL2J0bm9kZS5jCmluZGV4IDZhMjcxMWYuLjg0YzI1MzggMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9idG5vZGUuYworKysgYi9mcy9uaWxmczIvYnRub2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKIAogdm9pZCBuaWxmc19idG5vZGVfY2FjaGVfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICpidG5jKQogeworCW1lbXNldChidG5jLCAwLCBzaXplb2YoKmJ0bmMpKTsKIAlJTklUX1JBRElYX1RSRUUoJmJ0bmMtPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CiAJc3Bpbl9sb2NrX2luaXQoJmJ0bmMtPnRyZWVfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmJ0bmMtPnByaXZhdGVfbGlzdCk7CkBAIC04Niw2ICs4Nyw3IEBACiAJCQlicmVsc2UoYmgpOwogCQkJQlVHKCk7CiAJCX0KKwkJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiAJCWJoLT5iX2JkZXYgPSBOSUxGU19JX05JTEZTKGlub2RlKS0+bnNfYmRldjsKIAkJYmgtPmJfYmxvY2tuciA9IGJsb2NrbnI7CiAJCXNldF9idWZmZXJfbWFwcGVkKGJoKTsKQEAgLTI3NSw4ICsyNzcsNyBAQAogCQkJCSAgICAgICAiaW52YWxpZCBvbGRrZXkgJWxsZCAobmV3a2V5PSVsbGQpIiwKIAkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvbGRrZXksCiAJCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3a2V5KTsKLQkJaWYgKCF0ZXN0X3NldF9idWZmZXJfZGlydHkob2JoKSAmJiBUZXN0U2V0UGFnZURpcnR5KG9wYWdlKSkKLQkJCUJVRygpOworCQluaWxmc19idG5vZGVfbWFya19kaXJ0eShvYmgpOwogCiAJCXNwaW5fbG9ja19pcnEoJmJ0bmMtPnRyZWVfbG9jayk7CiAJCXJhZGl4X3RyZWVfZGVsZXRlKCZidG5jLT5wYWdlX3RyZWUsIG9sZGtleSk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvY3BmaWxlLmMgYi9mcy9uaWxmczIvY3BmaWxlLmMKaW5kZXggMWM2Y2ZiNS4uM2Y1ZDVkMCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2NwZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9jcGZpbGUuYwpAQCAtODcxLDcgKzg3MSw2IEBACiAJCSAqIGV4Y2x1c2l2ZSB3aXRoIGEgbmV3IG1vdW50IGpvYi4gIFRob3VnaCBpdCBkb2Vzbid0IGNvdmVyCiAJCSAqIHVtb3VudCwgaXQncyBlbm91Z2ggZm9yIHRoZSBwdXJwb3NlLgogCQkgKi8KLQkJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJaWYgKG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChuaWxmcywgY25vLCAxKSkgewogCQkJLyogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvIHByb3RlY3QKIAkJCSAgIHBsYWluIHJlYWQtb25seSBtb3VudHMgc2luY2UgdGhleSBhcmUgZXhjbHVzaXZlCkBAIC04ODAsNyArODc5LDYgQEAKIAkJCXJldCA9IC1FQlVTWTsKIAkJfSBlbHNlCiAJCQlyZXQgPSBuaWxmc19jcGZpbGVfY2xlYXJfc25hcHNob3QoY3BmaWxlLCBjbm8pOwotCQltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSBOSUxGU19TTkFQU0hPVDoKIAkJcmV0dXJuIG5pbGZzX2NwZmlsZV9zZXRfc25hcHNob3QoY3BmaWxlLCBjbm8pOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2Rpci5jIGIvZnMvbmlsZnMyL2Rpci5jCmluZGV4IDFhNGZhMDQuLmUwOTcwOTkgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9kaXIuYworKysgYi9mcy9uaWxmczIvZGlyLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IG5pbGZzX3JlYWRkaXIsCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZmlsZS5jIGIvZnMvbmlsZnMyL2ZpbGUuYwppbmRleCBmYzgyNzhjLi4zMDI5MmRmIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbmlsZnNfZmlsZV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IG5pbGZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBuaWxmc19wYWdlX21rd3JpdGUsCiB9OwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiBXZSBoYXZlIG1vc3RseSBOVUxMJ3MgaGVyZTogdGhlIGN1cnJlbnQgZGVmYXVsdHMgYXJlIG9rIGZvcgogICogdGhlIG5pbGZzIGZpbGVzeXN0ZW0uCiAgKi8KLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmlsZnNfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9pbm9kZS5jIGIvZnMvbmlsZnMyL2lub2RlLmMKaW5kZXggMmQyYzUwMS4uMmEwYTVhMyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2lub2RlLmMKKysrIGIvZnMvbmlsZnMyL2lub2RlLmMKQEAgLTQwMCw2ICs0MDAsNyBAQAogCWlpLT5pX2Rpcl9hY2wgPSBTX0lTUkVHKGlub2RlLT5pX21vZGUpID8KIAkJMCA6IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9kaXJfYWNsKTsKICNlbmRpZgorCWlpLT5pX2Rpcl9zdGFydF9sb29rdXAgPSAwOwogCWlpLT5pX2NubyA9IDA7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9nZW5lcmF0aW9uKTsKIApAQCAtNjYzLDcgKzY2NCw2IEBACiAJaW50IGVycjsKIAogCXNwaW5fbG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwotCS8qIENhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIE1VU1QgbG9jayBzX2lub2RlX2xvY2sgKi8KIAlpZiAoaWktPmlfYmggPT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmc2JpLT5zX2lub2RlX2xvY2spOwogCQllcnIgPSBuaWxmc19pZmlsZV9nZXRfaW5vZGVfYmxvY2soc2JpLT5zX2lmaWxlLCBpbm9kZS0+aV9pbm8sCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvaW9jdGwuYyBiL2ZzL25pbGZzMi9pb2N0bC5jCmluZGV4IDY1NzJlYTQuLmY2YWY3NjAgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9pb2N0bC5jCisrKyBiL2ZzL25pbGZzMi9pb2N0bC5jCkBAIC05OSw3ICs5OSw4IEBACiBzdGF0aWMgaW50IG5pbGZzX2lvY3RsX2NoYW5nZV9jcG1vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmNwZmlsZSA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmcy0+bnNfY3BmaWxlOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzOworCXN0cnVjdCBpbm9kZSAqY3BmaWxlID0gbmlsZnMtPm5zX2NwZmlsZTsKIAlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB0aTsKIAlzdHJ1Y3QgbmlsZnNfY3Btb2RlIGNwbW9kZTsKIAlpbnQgcmV0OwpAQCAtMTA5LDE0ICsxMTAsMTcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNwbW9kZSwgYXJncCwgc2l6ZW9mKGNwbW9kZSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCW11dGV4X2xvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CiAJcmV0ID0gbmlsZnNfY3BmaWxlX2NoYW5nZV9jcG1vZGUoCiAJCWNwZmlsZSwgY3Btb2RlLmNtX2NubywgY3Btb2RlLmNtX21vZGUpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewogCQluaWxmc190cmFuc2FjdGlvbl9hYm9ydChpbm9kZS0+aV9zYik7CisJCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KKwltdXRleF91bmxvY2soJm5pbGZzLT5uc19tb3VudF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjk3LDcgKzMwMSwxOCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JYmgtPmJfcHJpdmF0ZSA9IHZkZXNjOworCWlmICh1bmxpa2VseSghbGlzdF9lbXB0eSgmYmgtPmJfYXNzb2NfYnVmZmVycykpKSB7CisJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBjb25mbGljdGluZyAlcyBidWZmZXI6IGlubz0lbGx1LCAiCisJCSAgICAgICAiY25vPSVsbHUsIG9mZnNldD0lbGx1LCBibG9ja25yPSVsbHUsIHZibG9ja25yPSVsbHVcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfaW5vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfY25vLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfYmxvY2tuciwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX3ZibG9ja25yKTsKKwkJYnJlbHNlKGJoKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQogCWxpc3RfYWRkX3RhaWwoJmJoLT5iX2Fzc29jX2J1ZmZlcnMsIGJ1ZmZlcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzM1LDI0ICszNTAsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJcmV0ID0gbmlsZnNfZ2NjYWNoZV93YWl0X2FuZF9tYXJrX2RpcnR5KGJoKTsKIAkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKLQkJCQl2ZGVzYyA9IGJoLT5iX3ByaXZhdGU7Ci0JCQkJcHJpbnRrKEtFUk5fQ1JJVAotCQkJCSAgICAgICAiJXM6IGNvbmZsaWN0aW5nICVzIGJ1ZmZlcjogIgotCQkJCSAgICAgICAiaW5vPSVsbHUsIGNubz0lbGx1LCBvZmZzZXQ9JWxsdSwgIgotCQkJCSAgICAgICAiYmxvY2tucj0lbGx1LCB2YmxvY2tucj0lbGx1XG4iLAotCQkJCSAgICAgICBfX2Z1bmNfXywKLQkJCQkgICAgICAgdmRlc2MtPnZkX2ZsYWdzID8gIm5vZGUiIDogImRhdGEiLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9pbm8sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdmRlc2MtPnZkX2NubywKLQkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl2ZGVzYy0+dmRfb2Zmc2V0LAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF9ibG9ja25yLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXZkZXNjLT52ZF92YmxvY2tucik7Ci0JCQl9CisJCQlXQVJOX09OKHJldCA9PSAtRUVYSVNUKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCWxpc3RfZGVsX2luaXQoJmJoLT5iX2Fzc29jX2J1ZmZlcnMpOwotCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJYnJlbHNlKGJoKTsKIAl9CiAJcmV0dXJuIG5tZW1iczsKQEAgLTM2MCw3ICszNjEsNiBAQAogIGZhaWxlZDoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmgsIG4sICZidWZmZXJzLCBiX2Fzc29jX2J1ZmZlcnMpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci0JCWJoLT5iX3ByaXZhdGUgPSBOVUxMOwogCQlicmVsc2UoYmgpOwogCX0KIAlyZXR1cm4gcmV0OwpAQCAtNDcxLDcgKzQ3MSw2IEBACiAJcmV0dXJuIDA7CiAKICBmYWlsZWQ6Ci0JbmlsZnNfcmVtb3ZlX2FsbF9nY2lub2RlKG5pbGZzKTsKIAlwcmludGsoS0VSTl9FUlIgIk5JTEZTOiBHQyBmYWlsZWQgZHVyaW5nIHByZXBhcmF0aW9uOiAlczogZXJyPSVkXG4iLAogCSAgICAgICBtc2csIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTU2MCw2ICs1NTksOCBAQAogCWVsc2UKIAkJcmV0ID0gbmlsZnNfY2xlYW5fc2VnbWVudHMoaW5vZGUtPmlfc2IsIGFyZ3YsIGtidWZzKTsKIAorCWlmIChyZXQgPCAwKQorCQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCiAgb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbWR0LmMgYi9mcy9uaWxmczIvbWR0LmMKaW5kZXggYjE4YzQ5OS4uZjYzMjYxMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL21kdC5jCisrKyBiL2ZzL25pbGZzMi9tZHQuYwpAQCAtNDMzLDcgKzQzMyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGVmX21kdF9pb3BzOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX21kdF9mb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX21kdF9mb3BzOwogCiAvKgogICogTklMRlMyIHVzZXMgcHNldWRvIGlub2RlcyBmb3IgbWV0YSBkYXRhIGZpbGVzIHN1Y2ggYXMgREFULCBjcGZpbGUsIHN1ZmlsZSwKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9uaWxmcy5oIGIvZnMvbmlsZnMyL25pbGZzLmgKaW5kZXggYmFkNzM2OC4uNGRhNmY2NyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL25pbGZzLmgKQEAgLTI5NCw5ICsyOTQsOSBAQAogLyoKICAqIElub2RlcyBhbmQgZmlsZXMgb3BlcmF0aW9ucwogICovCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuaWxmc19kaXJfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5pbGZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5pbGZzX2FvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmlsZnNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNjgzZGY4OS4uNmVmZjY2YSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yNDY4LDE3ICsyNDY4LDIyIEBACiAJLyogQ2xlYXIgcmVxdWVzdHMgKGV2ZW4gd2hlbiB0aGUgY29uc3RydWN0aW9uIGZhaWxlZCkgKi8KIAlzcGluX2xvY2soJnNjaS0+c2Nfc3RhdGVfbG9jayk7CiAKLQlzY2ktPnNjX3N0YXRlICY9IH5OSUxGU19TRUdDVE9SX0NPTU1JVDsKLQogCWlmIChyZXEtPm1vZGUgPT0gU0NfTFNFR19TUikgeworCQlzY2ktPnNjX3N0YXRlICY9IH5OSUxGU19TRUdDVE9SX0NPTU1JVDsKIAkJc2NpLT5zY19zZXFfZG9uZSA9IHJlcS0+c2VxX2FjY2VwdGVkOwogCQluaWxmc19zZWdjdG9yX3dha2V1cChzY2ksIHJlcS0+c2NfZXJyID8gOiByZXEtPnNiX2Vycik7CiAJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCA9IDA7Ci0JfSBlbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfRklMRSkKLQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9GSUxFX0JJVDsKLQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQotCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0RBVF9CSVQ7CisJfSBlbHNlIHsKKwkJaWYgKHJlcS0+bW9kZSA9PSBTQ19GTFVTSF9GSUxFKQorCQkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ICY9IH5GTFVTSF9GSUxFX0JJVDsKKwkJZWxzZSBpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0RBVCkKKwkJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKIAorCQkvKiByZS1lbmFibGUgdGltZXIgaWYgY2hlY2twb2ludCBjcmVhdGlvbiB3YXMgbm90IGRvbmUgKi8KKwkJaWYgKHNjaS0+c2NfdGltZXIgJiYgKHNjaS0+c2Nfc3RhdGUgJiBOSUxGU19TRUdDVE9SX0NPTU1JVCkgJiYKKwkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIHNjaS0+c2NfdGltZXItPmV4cGlyZXMpKQorCQkJYWRkX3RpbWVyKHNjaS0+c2NfdGltZXIpOworCX0KIAlzcGluX3VubG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmxzL25sc19iYXNlLmMgYi9mcy9ubHMvbmxzX2Jhc2UuYwppbmRleCAyMjI0YjRkLi40NGE4OGE5IDEwMDY0NAotLS0gYS9mcy9ubHMvbmxzX2Jhc2UuYworKysgYi9mcy9ubHMvbmxzX2Jhc2UuYwpAQCAtMTI0LDEwICsxMjQsMTAgQEAKIAl3aGlsZSAoKnMgJiYgbGVuID4gMCkgewogCQlpZiAoKnMgJiAweDgwKSB7CiAJCQlzaXplID0gdXRmOF90b191dGYzMihzLCBsZW4sICZ1KTsKLQkJCWlmIChzaXplIDwgMCkgewotCQkJCS8qIElnbm9yZSBjaGFyYWN0ZXIgYW5kIG1vdmUgb24gKi8KLQkJCQlzaXplID0gMTsKLQkJCX0gZWxzZSBpZiAodSA+PSBQTEFORV9TSVpFKSB7CisJCQlpZiAoc2l6ZSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmICh1ID49IFBMQU5FX1NJWkUpIHsKIAkJCQl1IC09IFBMQU5FX1NJWkU7CiAJCQkJKm9wKysgPSAod2NoYXJfdCkgKFNVUlJPR0FURV9QQUlSIHwKIAkJCQkJCSgodSA+PiAxMCkgJiBTVVJST0dBVEVfQklUUykpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jIGIvZnMvbm90aWZ5L2Rub3RpZnkvZG5vdGlmeS5jCmluZGV4IDgyOGE4ODkuLjdlNTRlNTIgMTAwNjQ0Ci0tLSBhL2ZzL25vdGlmeS9kbm90aWZ5L2Rub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZG5vdGlmeS9kbm90aWZ5LmMKQEAgLTkxLDYgKzkxLDcgQEAKIAlzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmRuOwogCXN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqKnByZXY7CiAJc3RydWN0IGZvd25fc3RydWN0ICpmb3duOworCV9fdTMyIHRlc3RfbWFzayA9IGV2ZW50LT5tYXNrICYgfkZTX0VWRU5UX09OX0NISUxEOwogCiAJdG9fdGVsbCA9IGV2ZW50LT50b190ZWxsOwogCkBAIC0xMDYsNyArMTA3LDcgQEAKIAlzcGluX2xvY2soJmVudHJ5LT5sb2NrKTsKIAlwcmV2ID0gJmRuZW50cnktPmRuOwogCXdoaWxlICgoZG4gPSAqcHJldikgIT0gTlVMTCkgewotCQlpZiAoKGRuLT5kbl9tYXNrICYgZXZlbnQtPm1hc2spID09IDApIHsKKwkJaWYgKChkbi0+ZG5fbWFzayAmIHRlc3RfbWFzaykgPT0gMCkgewogCQkJcHJldiA9ICZkbi0+ZG5fbmV4dDsKIAkJCWNvbnRpbnVlOwogCQl9CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vZGVfbWFyay5jIGIvZnMvbm90aWZ5L2lub2RlX21hcmsuYwppbmRleCBjOGEwN2M2Li4zMTY1ZDg1IDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vZGVfbWFyay5jCisrKyBiL2ZzL25vdGlmeS9pbm9kZV9tYXJrLmMKQEAgLTMyNCwxMSArMzI0LDExIEBACiAJc3Bpbl9sb2NrKCZncm91cC0+bWFya19sb2NrKTsKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCi0JZW50cnktPmdyb3VwID0gZ3JvdXA7Ci0JZW50cnktPmlub2RlID0gaW5vZGU7Ci0KIAlsZW50cnkgPSBmc25vdGlmeV9maW5kX21hcmtfZW50cnkoZ3JvdXAsIGlub2RlKTsKIAlpZiAoIWxlbnRyeSkgeworCQllbnRyeS0+Z3JvdXAgPSBncm91cDsKKwkJZW50cnktPmlub2RlID0gaW5vZGU7CisKIAkJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5pX2xpc3QsICZpbm9kZS0+aV9mc25vdGlmeV9tYXJrX2VudHJpZXMpOwogCQlsaXN0X2FkZCgmZW50cnktPmdfbGlzdCwgJmdyb3VwLT5tYXJrX2VudHJpZXMpOwogCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMgYi9mcy9ub3RpZnkvbm90aWZpY2F0aW9uLmMKaW5kZXggMzgxNmQ1Ny4uYjhiZjUzYiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L25vdGlmaWNhdGlvbi5jCisrKyBiL2ZzL25vdGlmeS9ub3RpZmljYXRpb24uYwpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCQkvKiByZW1lbWJlciwgYWZ0ZXIgb2xkIHdhcyBwdXQgb24gdGhlIHdhaXRfcSB3ZSBhcmVuJ3QKIAkJCSAqIGFsbG93ZWQgdG8gbG9vayBhdCB0aGUgaW5vZGUgYW55IG1vcmUsIG9ubHkgdGhpbmcKIAkJCSAqIGxlZnQgdG8gY2hlY2sgd2FzIGlmIHRoZSBmaWxlX25hbWUgaXMgdGhlIHNhbWUgKi8KLQkJCWlmIChvbGQtPm5hbWVfbGVuICYmCisJCQlpZiAoIW9sZC0+bmFtZV9sZW4gfHwKIAkJCSAgICAhc3RyY21wKG9sZC0+ZmlsZV9uYW1lLCBuZXctPmZpbGVfbmFtZSkpCiAJCQkJcmV0dXJuIHRydWU7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDA5Y2MyNWQuLmM0NTJkMTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtOTY2LDcgKzk2Niw3IEBACiB9CiAjZW5kaWYgIC8qIENPTkZJR19ERUJVR19GUyAqLwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvMmhiX2RlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvMmhiX2RlYnVnX2ZvcHMgPSB7CiAJLm9wZW4gPQkJbzJoYl9kZWJ1Z19vcGVuLAogCS5yZWxlYXNlID0JbzJoYl9kZWJ1Z19yZWxlYXNlLAogCS5yZWFkID0JCW8yaGJfZGVidWdfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbmV0ZGVidWcuYwppbmRleCBjZmIyYmU3Li5kYTc5NGJjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL25ldGRlYnVnLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9uZXRkZWJ1Zy5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zdF9zZXFfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5zdF9zZXFfZm9wcyA9IHsKIAkub3BlbiA9IG5zdF9mb3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC0zODgsNyArMzg4LDcgQEAKIAlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjX3NlcV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Nfc2VxX2ZvcHMgPSB7CiAJLm9wZW4gPSBzY19mb3Bfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCmluZGV4IGNhNDYwMDIuLjQyYjBiYWQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfcHVyZ2VsaXN0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19wdXJnZWxpc3RfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19wdXJnZWxpc3Rfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2J1ZmZlcl9yZWxlYXNlLAogCS5yZWFkID0JCWRlYnVnX2J1ZmZlcl9yZWFkLApAQCAtNTM4LDcgKzUzOCw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX21sZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbWxlX2ZvcHMgPSB7CiAJLm9wZW4gPQkJZGVidWdfbWxlX29wZW4sCiAJLnJlbGVhc2UgPQlkZWJ1Z19idWZmZXJfcmVsZWFzZSwKIAkucmVhZCA9CQlkZWJ1Z19idWZmZXJfcmVhZCwKQEAgLTc0MSw3ICs3NDEsNyBAQAogCXJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfbG9ja3Jlc19mb3BzID0gewogCS5vcGVuID0JCWRlYnVnX2xvY2tyZXNfb3BlbiwKIAkucmVsZWFzZSA9CWRlYnVnX2xvY2tyZXNfcmVsZWFzZSwKIAkucmVhZCA9CQlzZXFfcmVhZCwKQEAgLTkyNSw3ICs5MjUsNyBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19zdGF0ZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9CQlkZWJ1Z19zdGF0ZV9vcGVuLAogCS5yZWxlYXNlID0JZGVidWdfYnVmZmVyX3JlbGVhc2UsCiAJLnJlYWQgPQkJZGVidWdfYnVmZmVyX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9tbWFwLmMgYi9mcy9vY2ZzMi9tbWFwLmMKaW5kZXggYjYwNjQ5Ni4uMzk3Mzc2MSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbW1hcC5jCisrKyBiL2ZzL29jZnMyL21tYXAuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBvY2ZzMl9maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgb2NmczJfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CQk9IG9jZnMyX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSBvY2ZzMl9wYWdlX21rd3JpdGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggNGNjM2M4OS4uYzBlNDhhZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0zNzMsNyArMzczLDcgQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfb3NiX2RlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9vc2JfZGVidWdfZm9wcyA9IHsKIAkub3BlbiA9CQlvY2ZzMl9vc2JfZGVidWdfb3BlbiwKIAkucmVsZWFzZSA9CW9jZnMyX2RlYnVnX3JlbGVhc2UsCiAJLnJlYWQgPQkJb2NmczJfZGVidWdfcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL29tZnMvZGlyLmMgYi9mcy9vbWZzL2Rpci5jCmluZGV4IDM2ODBiYWUuLmI0MmQ2MjQgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZGlyLmMKKysrIGIvZnMvb21mcy9kaXIuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJLnJtZGlyID0gb21mc19ybWRpciwKIH07CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIgPSBvbWZzX3JlYWRkaXIsCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCmRpZmYgLS1naXQgYS9mcy9vbWZzL2ZpbGUuYyBiL2ZzL29tZnMvZmlsZS5jCmluZGV4IDQ4NDVmYmIuLjM5OTQ4N2MgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvZmlsZS5jCisrKyBiL2ZzL29tZnMvZmlsZS5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXR1cm4gZ2VuZXJpY19ibG9ja19ibWFwKG1hcHBpbmcsIGJsb2NrLCBvbWZzX2dldF9ibG9jayk7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5yZWFkID0gZG9fc3luY19yZWFkLAogCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCmRpZmYgLS1naXQgYS9mcy9vbWZzL29tZnMuaCBiL2ZzL29tZnMvb21mcy5oCmluZGV4IGRmNzEwMzkuLmViZTJmZGIgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvb21mcy5oCisrKyBiL2ZzL29tZnMvb21mcy5oCkBAIC00NCwxNCArNDQsMTQgQEAKIGV4dGVybiBpbnQgb21mc19jbGVhcl9yYW5nZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgYmxvY2ssIGludCBjb3VudCk7CiAKIC8qIGRpci5jICovCi1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19kaXJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvbWZzX2Rpcl9pbm9wczsKIGV4dGVybiBpbnQgb21mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogZXh0ZXJuIGludCBvbWZzX2lzX2JhZChzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmksIHN0cnVjdCBvbWZzX2hlYWRlciAqaGVhZGVyLAogCQkJdTY0IGZzYmxvY2spOwogCiAvKiBmaWxlLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG9tZnNfZmlsZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21mc19maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb21mc19maWxlX2lub3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb21mc19hb3BzOwogZXh0ZXJuIHZvaWQgb21mc19tYWtlX2VtcHR5X3RhYmxlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDUyYzQxNTEuLmFlMTdkMDI2IDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC03NzcsMzYgKzc3Nyw1NSBAQAogc3RhdGljIGludAogcGlwZV9yZWFkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JLyogV2UgY291bGQgaGF2ZSBwZXJoYXBzIHVzZWQgYXRvbWljX3QsIGJ1dCB0aGlzIGFuZCBmcmllbmRzCi0JICAgYmVsb3cgYXJlIHRoZSBvbmx5IHBsYWNlcy4gIFNvIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aHdoaWxlLiAgKi8KKwlpbnQgcmV0ID0gLUVOT0VOVDsKKwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisKKwlpZiAoaW5vZGUtPmlfcGlwZSkgeworCQlyZXQgPSAwOworCQlpbm9kZS0+aV9waXBlLT5yZWFkZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBwaXBlX3dyaXRlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCisJaWYgKGlub2RlLT5pX3BpcGUpIHsKKwkJcmV0ID0gMDsKKwkJaW5vZGUtPmlfcGlwZS0+d3JpdGVycysrOworCX0KKwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAogcGlwZV9yZHdyX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJaW50IHJldCA9IC1FTk9FTlQ7CisKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWlub2RlLT5pX3BpcGUtPnJlYWRlcnMrKzsKLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWlub2RlLT5pX3BpcGUtPndyaXRlcnMrKzsKKworCWlmIChpbm9kZS0+aV9waXBlKSB7CisJCXJldCA9IDA7CisJCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SRUFEKQorCQkJaW5vZGUtPmlfcGlwZS0+cmVhZGVycysrOworCQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCisJCQlpbm9kZS0+aV9waXBlLT53cml0ZXJzKys7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IDBjNmJjNjAuLjgyMmMyZDUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTMyMiw2ICszMjIsOCBAQAogCQkJcC0+bml2Y3N3KTsKIH0KIAorI2lmZGVmIENPTkZJR19NTVUKKwogc3RydWN0IHN0YWNrX3N0YXRzIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAl1bnNpZ25lZCBsb25nCXN0YXJ0cGFnZTsKQEAgLTQwMiw2ICs0MDQsMTEgQEAKIAkJbW1wdXQobW0pOwogCX0KIH0KKyNlbHNlCitzdGF0aWMgdm9pZCB0YXNrX3Nob3dfc3RhY2tfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7Cit9CisjZW5kaWYJCS8qIENPTkZJR19NTVUgKi8KIAogaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJCXN0cnVjdCBwaWQgKnBpZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpAQCAtNTY0LDcgKzU3MSw3IEBACiAJCXJzc2xpbSwKIAkJbW0gPyBtbS0+c3RhcnRfY29kZSA6IDAsCiAJCW1tID8gbW0tPmVuZF9jb2RlIDogMCwKLQkJKHBlcm1pdHRlZCkgPyB0YXNrLT5zdGFja19zdGFydCA6IDAsCisJCShwZXJtaXR0ZWQgJiYgbW0pID8gdGFzay0+c3RhY2tfc3RhcnQgOiAwLAogCQllc3AsCiAJCWVpcCwKIAkJLyogVGhlIHNpZ25hbCBpbmZvcm1hdGlvbiBoZXJlIGlzIG9ic29sZXRlLgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCA4Mzc0NjlhLi5hZjY0M2I1IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMjU5Nyw4ICsyNTk3LDcgQEAKIAluYW1lLmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHBpZCk7CiAJZGVudHJ5ID0gZF9oYXNoX2FuZF9sb29rdXAobW50LT5tbnRfcm9vdCwgJm5hbWUpOwogCWlmIChkZW50cnkpIHsKLQkJaWYgKCEoY3VycmVudC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSkKLQkJCXNocmlua19kY2FjaGVfcGFyZW50KGRlbnRyeSk7CisJCXNocmlua19kY2FjaGVfcGFyZW50KGRlbnRyeSk7CiAJCWRfZHJvcChkZW50cnkpOwogCQlkcHV0KGRlbnRyeSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9rY29yZS5jIGIvZnMvcHJvYy9rY29yZS5jCmluZGV4IDU2MDEzMzcuLmE0NGE3ODkgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mva2NvcmUuYworKysgYi9mcy9wcm9jL2tjb3JlLmMKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9tZW1pbmZvLmMgYi9mcy9wcm9jL21lbWluZm8uYwppbmRleCBjN2JmZjRmLi5hNjUyMzljIDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtOTksNyArOTksNyBAQAogCQkiVm1hbGxvY1VzZWQ6ICAgICU4bHUga0JcbiIKIAkJIlZtYWxsb2NDaHVuazogICAlOGx1IGtCXG4iCiAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCi0JCSJIYXJkd2FyZUNvcnJ1cHRlZDogJThsdSBrQlxuIgorCQkiSGFyZHdhcmVDb3JydXB0ZWQ6ICU1bHUga0JcbiIKICNlbmRpZgogCQksCiAJCUsoaS50b3RhbHJhbSksCmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDIyODFjMmMuLjUwMzNjZTAgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC05NCw2ICs5NCw3IEBACiAjZGVmaW5lIEtQRl9DT01QT1VORF9UQUlMCTE2CiAjZGVmaW5lIEtQRl9IVUdFCQkxNwogI2RlZmluZSBLUEZfVU5FVklDVEFCTEUJCTE4CisjZGVmaW5lIEtQRl9IV1BPSVNPTgkJMTkKICNkZWZpbmUgS1BGX05PUEFHRQkJMjAKIAogI2RlZmluZSBLUEZfS1NNCQkJMjEKQEAgLTE4MCw2ICsxODEsMTAgQEAKIAl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfVU5FVklDVEFCTEUsCVBHX3VuZXZpY3RhYmxlKTsKIAl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfTUxPQ0tFRCwJUEdfbWxvY2tlZCk7CiAKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKKwl1IHw9IGtwZl9jb3B5X2JpdChrLCBLUEZfSFdQT0lTT04sCVBHX2h3cG9pc29uKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCiAJdSB8PSBrcGZfY29weV9iaXQoaywgS1BGX1VOQ0FDSEVELAlQR191bmNhY2hlZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3JvbWZzL3N0b3JhZ2UuYyBiL2ZzL3JvbWZzL3N0b3JhZ2UuYwppbmRleCBiMzIwOGFkLi43MWUyYjRkIDEwMDY0NAotLS0gYS9mcy9yb21mcy9zdG9yYWdlLmMKKysrIGIvZnMvcm9tZnMvc3RvcmFnZS5jCkBAIC0yNTMsMTEgKzI1MywxMSBAQAogCiAjaWZkZWYgQ09ORklHX1JPTUZTX09OX01URAogCWlmIChzYi0+c19tdGQpCi0JCXJldHVybiByb21mc19tdGRfc3RybmxlbihzYiwgcG9zLCBsaW1pdCk7CisJCXJldHVybiByb21mc19tdGRfc3RybmxlbihzYiwgcG9zLCBtYXhsZW4pOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JPTUZTX09OX0JMT0NLCiAJaWYgKHNiLT5zX2JkZXYpCi0JCXJldHVybiByb21mc19ibGtfc3RybmxlbihzYiwgcG9zLCBsaW1pdCk7CisJCXJldHVybiByb21mc19ibGtfc3RybmxlbihzYiwgcG9zLCBtYXhsZW4pOwogI2VuZGlmCiAJcmV0dXJuIC1FSU87CiB9CmRpZmYgLS1naXQgYS9mcy9zZWxlY3QuYyBiL2ZzL3NlbGVjdC5jCmluZGV4IGEyMDFmYzMuLmZkMzhjZTIgMTAwNjQ0Ci0tLSBhL2ZzL3NlbGVjdC5jCisrKyBiL2ZzL3NlbGVjdC5jCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9iaW4uYyBiL2ZzL3N5c2ZzL2Jpbi5jCmluZGV4IDI1MjQ3MTQuLjYwYzcwMmIgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Jpbi5jCisrKyBiL2ZzL3N5c2ZzL2Jpbi5jCkBAIC00MCw3ICs0MCw3IEBACiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAJdm9pZAkJCQkqYnVmZmVyOwogCWludAkJCQltbWFwcGVkOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAJKnZtX29wczsKKwljb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKnZtX29wczsKIAlzdHJ1Y3QgZmlsZQkJCSpmaWxlOwogCXN0cnVjdCBobGlzdF9ub2RlCQlsaXN0OwogfTsKQEAgLTMzMSw3ICszMzEsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYmluX3ZtX29wcyA9IHsKIAkub3BlbgkJPSBiaW5fdm1hX29wZW4sCiAJLmNsb3NlCQk9IGJpbl92bWFfY2xvc2UsCiAJLmZhdWx0CQk9IGJpbl9mYXVsdCwKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Rpci5jIGIvZnMvc3lzZnMvZGlyLmMKaW5kZXggMDA1MGZjNC4uZTAyMDE4MyAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZGlyLmMKKysrIGIvZnMvc3lzZnMvZGlyLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlICJzeXNmcy5oIgogCiBERUZJTkVfTVVURVgoc3lzZnNfbXV0ZXgpOwpAQCAtMjg1LDYgKzI4Niw5IEBACiAJCXN5c2ZzX3B1dChzZC0+c19zeW1saW5rLnRhcmdldF9zZCk7CiAJaWYgKHN5c2ZzX3R5cGUoc2QpICYgU1lTRlNfQ09QWV9OQU1FKQogCQlrZnJlZShzZC0+c19uYW1lKTsKKwlpZiAoc2QtPnNfaWF0dHIgJiYgc2QtPnNfaWF0dHItPmlhX3NlY2RhdGEpCisJCXNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KHNkLT5zX2lhdHRyLT5pYV9zZWNkYXRhLAorCQkJCQlzZC0+c19pYXR0ci0+aWFfc2VjZGF0YV9sZW4pOwogCWtmcmVlKHNkLT5zX2lhdHRyKTsKIAlzeXNmc19mcmVlX2lubyhzZC0+c19pbm8pOwogCWttZW1fY2FjaGVfZnJlZShzeXNmc19kaXJfY2FjaGVwLCBzZCk7CkBAIC04OTQsNyArODk4LDggQEAKIAogCW11dGV4X2xvY2soJnN5c2ZzX3JlbmFtZV9tdXRleCk7CiAJQlVHX09OKCFzZC0+c19wYXJlbnQpOwotCW5ld19wYXJlbnRfc2QgPSBuZXdfcGFyZW50X2tvYmotPnNkID8gbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OworCW5ld19wYXJlbnRfc2QgPSAobmV3X3BhcmVudF9rb2JqICYmIG5ld19wYXJlbnRfa29iai0+c2QpID8KKwkJbmV3X3BhcmVudF9rb2JqLT5zZCA6ICZzeXNmc19yb290OwogCiAJZXJyb3IgPSAwOwogCWlmIChzZC0+c19wYXJlbnQgPT0gbmV3X3BhcmVudF9zZCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCA1NjFhOWMwLi5mNWVhNDY4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzdHJ1Y3Qgc3lzZnNfb3Blbl9kaXJlbnQgKm9kLCAqbmV3X29kID0gTlVMTDsKIAogIHJldHJ5OgotCXNwaW5fbG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CiAKIAlpZiAoIXNkLT5zX2F0dHIub3BlbiAmJiBuZXdfb2QpIHsKIAkJc2QtPnNfYXR0ci5vcGVuID0gbmV3X29kOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJmJ1ZmZlci0+bGlzdCwgJm9kLT5idWZmZXJzKTsKIAl9CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKIAogCWlmIChvZCkgewogCQlrZnJlZShuZXdfb2QpOwpAQCAtMzE1LDggKzMxNSw5IEBACiAJCQkJICBzdHJ1Y3Qgc3lzZnNfYnVmZmVyICpidWZmZXIpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCA9IHNkLT5zX2F0dHIub3BlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9kLT5yZWZjbnQpKQpAQCAtMzI0LDcgKzMyNSw3IEBACiAJZWxzZQogCQlvZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc3lzZnNfb3Blbl9kaXJlbnRfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJa2ZyZWUob2QpOwogfQpAQCAtNDU2LDggKzQ1Nyw5IEBACiB2b2lkIHN5c2ZzX25vdGlmeV9kaXJlbnQoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzeXNmc19vcGVuX2RpcmVudF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lzZnNfb3Blbl9kaXJlbnRfbG9jaywgZmxhZ3MpOwogCiAJb2QgPSBzZC0+c19hdHRyLm9wZW47CiAJaWYgKG9kKSB7CkBAIC00NjUsNyArNDY3LDcgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZvZC0+cG9sbCk7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnN5c2ZzX29wZW5fZGlyZW50X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5c2ZzX29wZW5fZGlyZW50X2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX25vdGlmeV9kaXJlbnQpOwogCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9maWxlLmMgYi9mcy91Ymlmcy9maWxlLmMKaW5kZXggMmU2NDgxYS4uMTAwOWFkYyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZmlsZS5jCisrKyBiL2ZzL3ViaWZzL2ZpbGUuYwpAQCAtMTUzNCw3ICsxNTM0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHViaWZzX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1Ymlmc19maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQgICAgICAgID0gZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlID0gdWJpZnNfdm1fcGFnZV9ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCAzODE4NTQ0Li5jMmUzMGVlIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0xODYsMTkgKzE4NiwzNyBAQAogfQogCiAvKgorICogSWYgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBpb2VuZCBpcyBiZXlvbmQgdGhlIGN1cnJlbnQgRU9GLAorICogcmV0dXJuIHRoZSBuZXcgRU9GIHZhbHVlLCBvdGhlcndpc2UgemVyby4KKyAqLworU1RBVElDIHhmc19mc2l6ZV90Cit4ZnNfaW9lbmRfbmV3X2VvZigKKwl4ZnNfaW9lbmRfdAkJKmlvZW5kKQoreworCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOworCXhmc19mc2l6ZV90CQlpc2l6ZTsKKwl4ZnNfZnNpemVfdAkJYnNpemU7CisKKwlic2l6ZSA9IGlvZW5kLT5pb19vZmZzZXQgKyBpb2VuZC0+aW9fc2l6ZTsKKwlpc2l6ZSA9IE1BWChpcC0+aV9zaXplLCBpcC0+aV9uZXdfc2l6ZSk7CisJaXNpemUgPSBNSU4oaXNpemUsIGJzaXplKTsKKwlyZXR1cm4gaXNpemUgPiBpcC0+aV9kLmRpX3NpemUgPyBpc2l6ZSA6IDA7Cit9CisKKy8qCiAgKiBVcGRhdGUgb24tZGlzayBmaWxlIHNpemUgbm93IHRoYXQgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIGRpc2suCiAgKiBUaGUgY3VycmVudCBpbi1tZW1vcnkgZmlsZSBzaXplIGlzIGlfc2l6ZS4gIElmIGEgd3JpdGUgaXMgYmV5b25kCiAgKiBlb2YgaV9uZXdfc2l6ZSB3aWxsIGJlIHRoZSBpbnRlbmRlZCBmaWxlIHNpemUgdW50aWwgaV9zaXplIGlzCiAgKiB1cGRhdGVkLiAgSWYgdGhpcyB3cml0ZSBkb2VzIG5vdCBleHRlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHZhbGlkCiAgKiBmaWxlIHNpemUgdGhlbiByZXN0cmljdCB0aGlzIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSB3cml0ZS4KICAqLworCiBTVEFUSUMgdm9pZAogeGZzX3NldGZpbGVzaXplKAogCXhmc19pb2VuZF90CQkqaW9lbmQpCiB7CiAJeGZzX2lub2RlX3QJCSppcCA9IFhGU19JKGlvZW5kLT5pb19pbm9kZSk7CiAJeGZzX2ZzaXplX3QJCWlzaXplOwotCXhmc19mc2l6ZV90CQlic2l6ZTsKIAogCUFTU0VSVCgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHKTsKIAlBU1NFUlQoaW9lbmQtPmlvX3R5cGUgIT0gSU9NQVBfUkVBRCk7CkBAIC0yMDYsMTYgKzIyNCwxMCBAQAogCWlmICh1bmxpa2VseShpb2VuZC0+aW9fZXJyb3IpKQogCQlyZXR1cm47CiAKLQlic2l6ZSA9IGlvZW5kLT5pb19vZmZzZXQgKyBpb2VuZC0+aW9fc2l6ZTsKLQogCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JaXNpemUgPSBNQVgoaXAtPmlfc2l6ZSwgaXAtPmlfbmV3X3NpemUpOwotCWlzaXplID0gTUlOKGlzaXplLCBic2l6ZSk7Ci0KLQlpZiAoaXAtPmlfZC5kaV9zaXplIDwgaXNpemUpIHsKKwlpc2l6ZSA9IHhmc19pb2VuZF9uZXdfZW9mKGlvZW5kKTsKKwlpZiAoaXNpemUpIHsKIAkJaXAtPmlfZC5kaV9zaXplID0gaXNpemU7Ci0JCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKIAkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CiAJfQogCkBAIC00MDQsMTAgKzQxNiwxNiBAQAogCXN0cnVjdCBiaW8JKmJpbykKIHsKIAlhdG9taWNfaW5jKCZpb2VuZC0+aW9fcmVtYWluaW5nKTsKLQogCWJpby0+YmlfcHJpdmF0ZSA9IGlvZW5kOwogCWJpby0+YmlfZW5kX2lvID0geGZzX2VuZF9iaW87CiAKKwkvKgorCSAqIElmIHRoZSBJL08gaXMgYmV5b25kIEVPRiB3ZSBtYXJrIHRoZSBpbm9kZSBkaXJ0eSBpbW1lZGlhdGVseQorCSAqIGJ1dCBkb24ndCB1cGRhdGUgdGhlIGlub2RlIHNpemUgdW50aWwgSS9PIGNvbXBsZXRpb24uCisJICovCisJaWYgKHhmc19pb2VuZF9uZXdfZW9mKGlvZW5kKSkKKwkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhYRlNfSShpb2VuZC0+aW9faW5vZGUpKTsKKwogCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CiAJQVNTRVJUKCFiaW9fZmxhZ2dlZChiaW8sIEJJT19FT1BOT1RTVVBQKSk7CiAJYmlvX3B1dChiaW8pOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IDk4OGQ4ZjguLmVmZjYxZTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzOwogCiBTVEFUSUMgc3NpemVfdAogeGZzX2ZpbGVfYWlvX3JlYWQoCkBAIC0xNzYsMTQgKzE3Niw3IEBACiAJc3RydWN0IGRlbnRyeQkJKmRlbnRyeSwKIAlpbnQJCQlkYXRhc3luYykKIHsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKLQlpbnQJCQllcnJvcjsKLQotCS8qIGNhcHR1cmUgc2l6ZSB1cGRhdGVzIGluIEkvTyBjb21wbGV0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBpbm9kZS4gKi8KLQllcnJvciA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZGVudHJ5LT5kX2lub2RlKTsKIAogCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKIAlyZXR1cm4gLXhmc19mc3luYyhpcCk7CkBAIC0yODAsNyArMjczLDcgQEAKIAkuZnN5bmMJCT0geGZzX2ZpbGVfZnN5bmMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5wYWdlX21rd3JpdGUJPSB4ZnNfdm1fcGFnZV9ta3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCBkYTAxNTlkLi5jZDQyZWY3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC01NywxOSArNTcsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9maWVtYXAuaD4KIAogLyoKLSAqIEJyaW5nIHRoZSBhdGltZSBpbiB0aGUgWEZTIGlub2RlIHVwdG9kYXRlLgotICogVXNlZCBiZWZvcmUgbG9nZ2luZyB0aGUgaW5vZGUgdG8gZGlzayBvciB3aGVuIHRoZSBMaW51eCBpbm9kZSBnb2VzIGF3YXkuCisgKiBCcmluZyB0aGUgdGltZXN0YW1wcyBpbiB0aGUgWEZTIGlub2RlIHVwdG9kYXRlLgorICoKKyAqIFVzZWQgYmVmb3JlIHdyaXRpbmcgdGhlIGlub2RlIHRvIGRpc2suCiAgKi8KIHZvaWQKLXhmc19zeW5jaHJvbml6ZV9hdGltZSgKK3hmc19zeW5jaHJvbml6ZV90aW1lcygKIAl4ZnNfaW5vZGVfdAkqaXApCiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IFZGU19JKGlwKTsKIAotCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9DTEVBUikpIHsKLQkJaXAtPmlfZC5kaV9hdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfYXRpbWUudHZfc2VjOwotCQlpcC0+aV9kLmRpX2F0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfYXRpbWUudHZfbnNlYzsKLQl9CisJaXAtPmlfZC5kaV9hdGltZS50X3NlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfYXRpbWUudHZfc2VjOworCWlwLT5pX2QuZGlfYXRpbWUudF9uc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9hdGltZS50dl9uc2VjOworCWlwLT5pX2QuZGlfY3RpbWUudF9zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX2N0aW1lLnR2X3NlYzsKKwlpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYyA9IChfX2ludDMyX3QpaW5vZGUtPmlfY3RpbWUudHZfbnNlYzsKKwlpcC0+aV9kLmRpX210aW1lLnRfc2VjID0gKF9faW50MzJfdClpbm9kZS0+aV9tdGltZS50dl9zZWM7CisJaXAtPmlfZC5kaV9tdGltZS50X25zZWMgPSAoX19pbnQzMl90KWlub2RlLT5pX210aW1lLnR2X25zZWM7CiB9CiAKIC8qCkBAIC0xMDYsMzIgKzEwOSwyMCBAQAogCWlmICgoZmxhZ3MgJiBYRlNfSUNIR1RJTUVfTU9EKSAmJgogCSAgICAhdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX210aW1lLCAmdHYpKSB7CiAJCWlub2RlLT5pX210aW1lID0gdHY7Ci0JCWlwLT5pX2QuZGlfbXRpbWUudF9zZWMgPSAoX19pbnQzMl90KXR2LnR2X3NlYzsKLQkJaXAtPmlfZC5kaV9tdGltZS50X25zZWMgPSAoX19pbnQzMl90KXR2LnR2X25zZWM7CiAJCXN5bmNfaXQgPSAxOwogCX0KIAlpZiAoKGZsYWdzICYgWEZTX0lDSEdUSU1FX0NIRykgJiYKIAkgICAgIXRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJnR2KSkgewogCQlpbm9kZS0+aV9jdGltZSA9IHR2OwotCQlpcC0+aV9kLmRpX2N0aW1lLnRfc2VjID0gKF9faW50MzJfdCl0di50dl9zZWM7Ci0JCWlwLT5pX2QuZGlfY3RpbWUudF9uc2VjID0gKF9faW50MzJfdCl0di50dl9uc2VjOwogCQlzeW5jX2l0ID0gMTsKIAl9CiAKIAkvKgotCSAqIFdlIHVwZGF0ZSB0aGUgaV91cGRhdGVfY29yZSBmaWVsZCBfYWZ0ZXJfIGNoYW5naW5nCi0JICogdGhlIHRpbWVzdGFtcHMgaW4gb3JkZXIgdG8gY29vcmRpbmF0ZSBwcm9wZXJseSB3aXRoCi0JICogeGZzX2lmbHVzaCgpIHNvIHRoYXQgd2UgZG9uJ3QgbG9zZSB0aW1lc3RhbXAgdXBkYXRlcy4KLQkgKiBUaGlzIGtlZXBzIHVzIGZyb20gaGF2aW5nIHRvIGhvbGQgdGhlIGlub2RlIGxvY2sKLQkgKiB3aGlsZSBkb2luZyB0aGlzLiAgV2UgdXNlIHRoZSBTWU5DSFJPTklaRSBtYWNybyB0bwotCSAqIGVuc3VyZSB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdCByZW9yZGVyIHRoZSB1cGRhdGUKLQkgKiBvZiBpX3VwZGF0ZV9jb3JlIGFib3ZlIHRoZSB0aW1lc3RhbXAgdXBkYXRlcyBhYm92ZS4KKwkgKiBVcGRhdGUgY29tcGxldGUgLSBub3cgbWFrZSBzdXJlIGV2ZXJ5b25lIGtub3dzIHRoYXQgdGhlIGlub2RlCisJICogaXMgZGlydHkuCiAJICovCi0JaWYgKHN5bmNfaXQpIHsKLQkJU1lOQ0hST05JWkUoKTsKLQkJaXAtPmlfdXBkYXRlX2NvcmUgPSAxOworCWlmIChzeW5jX2l0KQogCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKLQl9CiB9CiAKIC8qCkBAIC01MDYsMTAgKzQ5Nyw4IEBACiAJc3RhdC0+Z2lkID0gaXAtPmlfZC5kaV9naWQ7CiAJc3RhdC0+aW5vID0gaXAtPmlfaW5vOwogCXN0YXQtPmF0aW1lID0gaW5vZGUtPmlfYXRpbWU7Ci0Jc3RhdC0+bXRpbWUudHZfc2VjID0gaXAtPmlfZC5kaV9tdGltZS50X3NlYzsKLQlzdGF0LT5tdGltZS50dl9uc2VjID0gaXAtPmlfZC5kaV9tdGltZS50X25zZWM7Ci0Jc3RhdC0+Y3RpbWUudHZfc2VjID0gaXAtPmlfZC5kaV9jdGltZS50X3NlYzsKLQlzdGF0LT5jdGltZS50dl9uc2VjID0gaXAtPmlfZC5kaV9jdGltZS50X25zZWM7CisJc3RhdC0+bXRpbWUgPSBpbm9kZS0+aV9tdGltZTsKKwlzdGF0LT5jdGltZSA9IGlub2RlLT5pX2N0aW1lOwogCXN0YXQtPmJsb2NrcyA9CiAJCVhGU19GU0JfVE9fQkIobXAsIGlwLT5pX2QuZGlfbmJsb2NrcyArIGlwLT5pX2RlbGF5ZWRfYmxrcyk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggNDllNGE2YS4uMDcyMDUwZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCQl4aXAtPmlfbmV3X3NpemUgPSBuZXdfc2l6ZTsKIAogCWlmIChsaWtlbHkoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkKLQkJeGZzX2ljaGd0aW1lKHhpcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOworCQlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwogCiAJLyoKIAkgKiBJZiB0aGUgb2Zmc2V0IGlzIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgd2UgaGF2ZSBhIGNvdXBsZQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKaW5kZXggOWU0MWY5MS4uM2Q0YTBjOCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAtRVJPRlM7Ci0JaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJaWYgKG9wICE9IFFfWFFVT1RBUk0gJiYgIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggYmRkNDFjOC4uMThhNGI4ZSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC05NzcsNiArOTc3LDI4IEBACiB9CiAKIC8qCisgKiBEaXJ0eSB0aGUgWEZTIGlub2RlIHdoZW4gbWFya19pbm9kZV9kaXJ0eV9zeW5jKCkgaXMgY2FsbGVkIHNvIHRoYXQKKyAqIHdlIGNhdGNoIHVubG9nZ2VkIFZGUyBsZXZlbCB1cGRhdGVzIHRvIHRoZSBpbm9kZS4gQ2FyZSBtdXN0IGJlIHRha2VuCisgKiBoZXJlIC0gdGhlIHRyYW5zYWN0aW9uIGNvZGUgY2FsbHMgbWFya19pbm9kZV9kaXJ0eV9zeW5jKCkgdG8gbWFyayB0aGUKKyAqIFZGUyBpbm9kZSBkaXJ0eSBpbiBhIHRyYW5zYWN0aW9uIGFuZCBjbGVhcnMgdGhlIGlfdXBkYXRlX2NvcmUgZmllbGQ7CisgKiBpdCBtdXN0IGNsZWFyIHRoZSBmaWVsZCBhZnRlciBjYWxsaW5nIG1hcmtfaW5vZGVfZGlydHlfc3luYygpIHRvCisgKiBjb3JyZWN0bHkgaW5kaWNhdGUgdGhhdCB0aGUgZGlydHkgc3RhdGUgaGFzIGJlZW4gcHJvcGFnYXRlZCBpbnRvIHRoZQorICogaW5vZGUgbG9nIGl0ZW0uCisgKgorICogV2UgbmVlZCB0aGUgYmFycmllcigpIHRvIG1haW50YWluIGNvcnJlY3Qgb3JkZXJpbmcgYmV0d2VlbiB1bmxvZ2dlZAorICogdXBkYXRlcyBhbmQgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdCBjb2RlIHRoYXQgY2xlYXJzIHRoZSBpX3VwZGF0ZV9jb3JlCisgKiBmaWVsZC4gVGhpcyByZXF1aXJlcyBhbGwgdXBkYXRlcyB0byBiZSBjb21wbGV0ZWQgYmVmb3JlIG1hcmtpbmcgdGhlCisgKiBpbm9kZSBkaXJ0eS4KKyAqLworU1RBVElDIHZvaWQKK3hmc19mc19kaXJ0eV9pbm9kZSgKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlKQoreworCWJhcnJpZXIoKTsKKwlYRlNfSShpbm9kZSktPmlfdXBkYXRlX2NvcmUgPSAxOworfQorCisvKgogICogQXR0ZW1wdCB0byBmbHVzaCB0aGUgaW5vZGUsIHRoaXMgd2lsbCBhY3R1YWxseSBmYWlsCiAgKiBpZiB0aGUgaW5vZGUgaXMgcGlubmVkLCBidXQgd2UgZGlydHkgdGhlIGlub2RlIGFnYWluCiAgKiBhdCB0aGUgcG9pbnQgd2hlbiBpdCBpcyB1bnBpbm5lZCBhZnRlciBhIGxvZyB3cml0ZSwKQEAgLTExMjYsNyArMTE0OCw3IEBACiB9CiAKIFNUQVRJQyBpbnQKLXhmc19mc19zeW5jX3N1cGVyKAoreGZzX2ZzX3N5bmNfZnMoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlpbnQJCQl3YWl0KQogewpAQCAtMTEzNCwyMyArMTE1NiwyMyBAQAogCWludAkJCWVycm9yOwogCiAJLyoKLQkgKiBUcmVhdCBhIHN5bmMgb3BlcmF0aW9uIGxpa2UgYSBmcmVlemUuICBUaGlzIGlzIHRvIHdvcmsKLQkgKiBhcm91bmQgYSByYWNlIGluIHN5bmNfaW5vZGVzKCkgd2hpY2ggd29ya3MgaW4gdHdvIHBoYXNlcwotCSAqIC0gYW4gYXN5bmNocm9ub3VzIGZsdXNoLCB3aGljaCBjYW4gd3JpdGUgb3V0IGFuIGlub2RlCi0JICogd2l0aG91dCB3YWl0aW5nIGZvciBmaWxlIHNpemUgdXBkYXRlcyB0byBjb21wbGV0ZSwgYW5kIGEKLQkgKiBzeW5jaHJvbm91cyBmbHVzaCwgd2hpY2ggd29udCBkbyBhbnl0aGluZyBiZWNhdXNlIHRoZQotCSAqIGFzeW5jIGZsdXNoIHJlbW92ZWQgdGhlIGlub2RlJ3MgZGlydHkgZmxhZy4gIEFsc28KLQkgKiBzeW5jX2lub2RlcygpIHdpbGwgbm90IHNlZSBhbnkgZmlsZXMgdGhhdCBqdXN0IGhhdmUKLQkgKiBvdXRzdGFuZGluZyB0cmFuc2FjdGlvbnMgdG8gYmUgZmx1c2hlZCBiZWNhdXNlIHdlIGRvbid0Ci0JICogZGlydHkgdGhlIExpbnV4IGlub2RlIHVudGlsIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBJL08KLQkgKiBjb21wbGV0ZXMuCisJICogTm90IG11Y2ggd2UgY2FuIGRvIGZvciB0aGUgZmlyc3QgYXN5bmMgcGFzcy4gIFdyaXRpbmcgb3V0IHRoZQorCSAqIHN1cGVyYmxvY2sgd291bGQgYmUgY291bnRlci1wcm9kdWN0aXZlIGFzIHdlIGFyZSBnb2luZyB0byByZWRpcnR5CisJICogd2hlbiB3cml0aW5nIG91dCBvdGhlciBkYXRhIGFuZCBtZXRhZGF0YSAoYW5kIHdyaXRpbmcgb3V0IGEgc2luZ2xlCisJICogYmxvY2sgaXMgcXVpdGUgZmFzdCBhbnl3YXkpLgorCSAqCisJICogVHJ5IHRvIGFzeW5jaHJvbm91c2x5IGtpY2sgb2ZmIHF1b3RhIHN5bmNpbmcgYXQgbGVhc3QuCiAJICovCi0JaWYgKHdhaXQgfHwgdW5saWtlbHkoc2ItPnNfZnJvemVuID09IFNCX0ZSRUVaRV9XUklURSkpCi0JCWVycm9yID0geGZzX3F1aWVzY2VfZGF0YShtcCk7Ci0JZWxzZQotCQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgMCk7CisJaWYgKCF3YWl0KSB7CisJCXhmc19xbV9zeW5jKG1wLCBTWU5DX1RSWUxPQ0spOworCQlyZXR1cm4gMDsKKwl9CiAKLQlpZiAodW5saWtlbHkobGFwdG9wX21vZGUpKSB7CisJZXJyb3IgPSB4ZnNfcXVpZXNjZV9kYXRhKG1wKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAtZXJyb3I7CisKKwlpZiAobGFwdG9wX21vZGUpIHsKIAkJaW50CXByZXZfc3luY19zZXEgPSBtcC0+bV9zeW5jX3NlcTsKIAogCQkvKgpAQCAtMTE2OSw3ICsxMTkxLDcgQEAKIAkJCQltcC0+bV9zeW5jX3NlcSAhPSBwcmV2X3N5bmNfc2VxKTsKIAl9CiAKLQlyZXR1cm4gLWVycm9yOworCXJldHVybiAwOwogfQogCiBTVEFUSUMgaW50CkBAIC0xNTM5LDEwICsxNTYxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgeGZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLmFsbG9jX2lub2RlCQk9IHhmc19mc19hbGxvY19pbm9kZSwKIAkuZGVzdHJveV9pbm9kZQkJPSB4ZnNfZnNfZGVzdHJveV9pbm9kZSwKKwkuZGlydHlfaW5vZGUJCT0geGZzX2ZzX2RpcnR5X2lub2RlLAogCS53cml0ZV9pbm9kZQkJPSB4ZnNfZnNfd3JpdGVfaW5vZGUsCiAJLmNsZWFyX2lub2RlCQk9IHhmc19mc19jbGVhcl9pbm9kZSwKIAkucHV0X3N1cGVyCQk9IHhmc19mc19wdXRfc3VwZXIsCi0JLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfc3VwZXIsCisJLnN5bmNfZnMJCT0geGZzX2ZzX3N5bmNfZnMsCiAJLmZyZWV6ZV9mcwkJPSB4ZnNfZnNfZnJlZXplLAogCS5zdGF0ZnMJCQk9IHhmc19mc19zdGF0ZnMsCiAJLnJlbW91bnRfZnMJCT0geGZzX2ZzX3JlbW91bnQsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggMzIwYmU2YS4uOTYxZGYwYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtMzA5LDExICszMDksMTUgQEAKIFNUQVRJQyBpbnQKIHhmc19jb21taXRfZHVtbXlfdHJhbnMoCiAJc3RydWN0IHhmc19tb3VudAkqbXAsCi0JdWludAkJCWxvZ19mbGFncykKKwl1aW50CQkJZmxhZ3MpCiB7CiAJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBtcC0+bV9yb290aXA7CiAJc3RydWN0IHhmc190cmFucwkqdHA7CiAJaW50CQkJZXJyb3I7CisJaW50CQkJbG9nX2ZsYWdzID0gWEZTX0xPR19GT1JDRTsKKworCWlmIChmbGFncyAmIFNZTkNfV0FJVCkKKwkJbG9nX2ZsYWdzIHw9IFhGU19MT0dfU1lOQzsKIAogCS8qCiAJICogUHV0IGEgZHVtbXkgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZyB0byB0ZWxsIHJlY292ZXJ5CkBAIC0zMzEsMTMgKzMzNSwxMiBAQAogCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKIAl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JLyogWFhYKGhjaCk6IGlnbm9yaW5nIHRoZSBlcnJvciBoZXJlLi4gKi8KIAllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwotCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAorCS8qIHRoZSBsb2cgZm9yY2UgZW5zdXJlcyB0aGlzIHRyYW5zYWN0aW9uIGlzIHB1c2hlZCB0byBkaXNrICovCiAJeGZzX2xvZ19mb3JjZShtcCwgMCwgbG9nX2ZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludApAQCAtMzg1LDcgKzM4OCwyMCBAQAogCWVsc2UKIAkJWEZTX0JVRl9BU1lOQyhicCk7CiAKLQlyZXR1cm4geGZzX2J3cml0ZShtcCwgYnApOworCWVycm9yID0geGZzX2J3cml0ZShtcCwgYnApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgZGF0YSBpbnRlZ3JpdHkgc3luYyBtYWtlIHN1cmUgYWxsIHBlbmRpbmcgYnVmZmVycworCSAqIGFyZSBmbHVzaGVkIG91dCBmb3IgdGhlIGxvZyBjb3ZlcmFnZSBjaGVjayBiZWxvdy4KKwkgKi8KKwlpZiAoZmxhZ3MgJiBTWU5DX1dBSVQpCisJCXhmc19mbHVzaF9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3AsIDEpOworCisJaWYgKHhmc19sb2dfbmVlZF9jb3ZlcmVkKG1wKSkKKwkJZXJyb3IgPSB4ZnNfY29tbWl0X2R1bW15X3RyYW5zKG1wLCBmbGFncyk7CisJcmV0dXJuIGVycm9yOwogCiAgb3V0X2JyZWxzZToKIAl4ZnNfYnVmX3JlbHNlKGJwKTsKQEAgLTQxOSwxNCArNDM1LDE2IEBACiAJLyogcHVzaCBub24tYmxvY2tpbmcgKi8KIAl4ZnNfc3luY19kYXRhKG1wLCAwKTsKIAl4ZnNfcW1fc3luYyhtcCwgU1lOQ19UUllMT0NLKTsKLQl4ZnNfZmlsZXN0cmVhbV9mbHVzaChtcCk7CiAKLQkvKiBwdXNoIGFuZCBibG9jayAqLworCS8qIHB1c2ggYW5kIGJsb2NrIHRpbGwgY29tcGxldGUgKi8KIAl4ZnNfc3luY19kYXRhKG1wLCBTWU5DX1dBSVQpOwogCXhmc19xbV9zeW5jKG1wLCBTWU5DX1dBSVQpOwogCisJLyogZHJvcCBpbm9kZSByZWZlcmVuY2VzIHBpbm5lZCBieSBmaWxlc3RyZWFtcyAqLworCXhmc19maWxlc3RyZWFtX2ZsdXNoKG1wKTsKKwogCS8qIHdyaXRlIHN1cGVyYmxvY2sgYW5kIGhvb3ZlciB1cCBzaHV0ZG93biBlcnJvcnMgKi8KLQllcnJvciA9IHhmc19zeW5jX2ZzZGF0YShtcCwgMCk7CisJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIFNZTkNfV0FJVCk7CiAKIAkvKiBmbHVzaCBkYXRhLW9ubHkgZGV2aWNlcyAqLwogCWlmIChtcC0+bV9ydGRldl90YXJncCkKQEAgLTU3MCw4ICs1ODgsNiBAQAogCQkvKiBkZ2M6IGVycm9ycyBpZ25vcmVkIGhlcmUgKi8KIAkJZXJyb3IgPSB4ZnNfcW1fc3luYyhtcCwgU1lOQ19UUllMT0NLKTsKIAkJZXJyb3IgPSB4ZnNfc3luY19mc2RhdGEobXAsIFNZTkNfVFJZTE9DSyk7Ci0JCWlmICh4ZnNfbG9nX25lZWRfY292ZXJlZChtcCkpCi0JCQllcnJvciA9IHhmc19jb21taXRfZHVtbXlfdHJhbnMobXAsIFhGU19MT0dfRk9SQ0UpOwogCX0KIAltcC0+bV9zeW5jX3NlcSsrOwogCXdha2VfdXAoJm1wLT5tX3dhaXRfc2luZ2xlX3N5bmNfdGFzayk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggNGU0Mjc2YjkuLjVkMWEzYjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKQEAgLTg3Niw3ICs4NzYsNiBAQAogCQlpcC0+aV9nZHF1b3QgPSBOVUxMOwogCX0KIAl4ZnNfaXB1dChpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCUlSRUxFKGlwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IDc0NjVmOWUuLmFiODlhN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTIwNiwxMCArMjA2LDEwIEBACiAJICogcHJvY2VzcyB0aGF0IHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZCBvdXQgZnJvbQogCSAqIHVuZGVyIGl0LgogCSAqLwotCWlmICgoc2JwLT5ic19jdGltZS50dl9zZWMgIT0gaXAtPmlfZC5kaV9jdGltZS50X3NlYykgfHwKLQkgICAgKHNicC0+YnNfY3RpbWUudHZfbnNlYyAhPSBpcC0+aV9kLmRpX2N0aW1lLnRfbnNlYykgfHwKLQkgICAgKHNicC0+YnNfbXRpbWUudHZfc2VjICE9IGlwLT5pX2QuZGlfbXRpbWUudF9zZWMpIHx8Ci0JICAgIChzYnAtPmJzX210aW1lLnR2X25zZWMgIT0gaXAtPmlfZC5kaV9tdGltZS50X25zZWMpKSB7CisJaWYgKChzYnAtPmJzX2N0aW1lLnR2X3NlYyAhPSBWRlNfSShpcCktPmlfY3RpbWUudHZfc2VjKSB8fAorCSAgICAoc2JwLT5ic19jdGltZS50dl9uc2VjICE9IFZGU19JKGlwKS0+aV9jdGltZS50dl9uc2VjKSB8fAorCSAgICAoc2JwLT5ic19tdGltZS50dl9zZWMgIT0gVkZTX0koaXApLT5pX210aW1lLnR2X3NlYykgfHwKKwkgICAgKHNicC0+YnNfbXRpbWUudHZfbnNlYyAhPSBWRlNfSShpcCktPmlfbXRpbWUudHZfbnNlYykpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUJVU1kpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKaW5kZXggZmE5MTNlNDUuLjQxYWQ1MzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGlyMl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwpAQCAtODU0LDYgKzg1NCw3IEBACiAJCQkgKi8KIAkJCXJhX3dhbnQgPSBob3dtYW55KGJ1ZnNpemUgKyBtcC0+bV9kaXJibGtzaXplLAogCQkJCQkgIG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSkgLSAxOworCQkJQVNTRVJUKHJhX3dhbnQgPj0gMCk7CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBkb24ndCBoYXZlIGFzIG1hbnkgYXMgd2Ugd2FudCwgYW5kIHdlIGhhdmVuJ3QKQEAgLTEwODgsNyArMTA4OSw4IEBACiAJCSAqLwogCQlwdHIgKz0gbGVuZ3RoOwogCQljdXJvZmYgKz0gbGVuZ3RoOwotCQlidWZzaXplIC09IGxlbmd0aDsKKwkJLyogYnVmc2l6ZSBtYXkgaGF2ZSBqdXN0IGJlZW4gYSBndWVzczsgZG9uJ3QgZ28gbmVnYXRpdmUgKi8KKwkJYnVmc2l6ZSA9IGJ1ZnNpemUgPiBsZW5ndGggPyBidWZzaXplIC0gbGVuZ3RoIDogMDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggYWI2NGYzZS4uMDc4NTc5NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC04ODAsNiArODgwLDcgQEAKIAkJCQkgKiBOb3QgaW4gcmFuZ2UgLSBzYXZlIGxhc3Qgc2VhcmNoCiAJCQkJICogbG9jYXRpb24gYW5kIGFsbG9jYXRlIGEgbmV3IGlub2RlCiAJCQkJICovCisJCQkJeGZzX2J0cmVlX2RlbF9jdXJzb3IodGN1ciwgWEZTX0JUUkVFX05PRVJST1IpOwogCQkJCXBhZy0+cGFnbF9sZWZ0cmVjID0gdHJlYy5pcl9zdGFydGlubzsKIAkJCQlwYWctPnBhZ2xfcmlnaHRyZWMgPSByZWMuaXJfc3RhcnRpbm87CiAJCQkJcGFnLT5wYWdsX3BhZ2lubyA9IHBhZ2lubzsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCBjMWRjN2VmLi5iOTJhNGZhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZS5jCkBAIC0zMDY4LDkgKzMwNjgsOSBAQAogCVNZTkNIUk9OSVpFKCk7CiAKIAkvKgotCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZS4KKwkgKiBNYWtlIHN1cmUgdG8gZ2V0IHRoZSBsYXRlc3QgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZS4KIAkgKi8KLQl4ZnNfc3luY2hyb25pemVfYXRpbWUoaXApOworCXhmc19zeW5jaHJvbml6ZV90aW1lcyhpcCk7CiAKIAlpZiAoWEZTX1RFU1RfRVJST1IoYmUxNl90b19jcHUoZGlwLT5kaV9tYWdpYykgIT0gWEZTX0RJTk9ERV9NQUdJQywKIAkJCSAgICAgICBtcCwgWEZTX0VSUlRBR19JRkxVU0hfMSwgWEZTX1JBTkRPTV9JRkxVU0hfMSkpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAwYjM4YjlhLi40MTU1NWRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC01MDQsNyArNTA0LDcgQEAKIHZvaWQJCXhmc19sb2NrX2lub2Rlcyh4ZnNfaW5vZGVfdCAqKiwgaW50LCB1aW50KTsKIHZvaWQJCXhmc19sb2NrX3R3b19pbm9kZXMoeGZzX2lub2RlX3QgKiwgeGZzX2lub2RlX3QgKiwgdWludCk7CiAKLXZvaWQJCXhmc19zeW5jaHJvbml6ZV9hdGltZSh4ZnNfaW5vZGVfdCAqKTsKK3ZvaWQJCXhmc19zeW5jaHJvbml6ZV90aW1lcyh4ZnNfaW5vZGVfdCAqKTsKIHZvaWQJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoeGZzX2lub2RlX3QgKik7CiAKICNpZiBkZWZpbmVkKFhGU19JTk9ERV9UUkFDRSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKaW5kZXggNDdkNWI2Ni4uOTc5NGI4NyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMKQEAgLTIzMiw2ICsyMzIsMTUgQEAKIAludmVjcwkgICAgID0gMTsKIAogCS8qCisJICogTWFrZSBzdXJlIHRoZSBsaW51eCBpbm9kZSBpcyBkaXJ0eS4gV2UgZG8gdGhpcyBiZWZvcmUKKwkgKiBjbGVhcmluZyBpX3VwZGF0ZV9jb3JlIGFzIHRoZSBWRlMgd2lsbCBjYWxsIGJhY2sgaW50bworCSAqIFhGUyBoZXJlIGFuZCBzZXQgaV91cGRhdGVfY29yZSwgc28gd2UgbmVlZCB0byBkaXJ0eSB0aGUKKwkgKiBpbm9kZSBmaXJzdCBzbyB0aGF0IHRoZSBvcmRlcmluZyBvZiBpX3VwZGF0ZV9jb3JlIGFuZAorCSAqIHVubG9nZ2VkIG1vZGlmaWNhdGlvbnMgc3RpbGwgd29ya3MgYXMgZGVzY3JpYmVkIGJlbG93LgorCSAqLworCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOworCisJLyoKIAkgKiBDbGVhciBpX3VwZGF0ZV9jb3JlIGlmIHRoZSB0aW1lc3RhbXBzIChvciBhbnkgb3RoZXIKIAkgKiBub24tdHJhbnNhY3Rpb25hbCBtb2RpZmljYXRpb24pIG5lZWQgZmx1c2hpbmcvbG9nZ2luZwogCSAqIGFuZCB3ZSdyZSBhYm91dCB0byBsb2cgdGhlbSB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb3JlLgpAQCAtMjYzLDE0ICsyNzIsOSBAQAogCX0KIAogCS8qCi0JICogTWFrZSBzdXJlIHRvIGdldCB0aGUgbGF0ZXN0IGF0aW1lIGZyb20gdGhlIExpbnV4IGlub2RlLgorCSAqIE1ha2Ugc3VyZSB0byBnZXQgdGhlIGxhdGVzdCB0aW1lc3RhbXBzIGZyb20gdGhlIExpbnV4IGlub2RlLgogCSAqLwotCXhmc19zeW5jaHJvbml6ZV9hdGltZShpcCk7Ci0KLQkvKgotCSAqIG1ha2Ugc3VyZSB0aGUgbGludXggaW5vZGUgaXMgZGlydHkKLQkgKi8KLQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKwl4ZnNfc3luY2hyb25pemVfdGltZXMoaXApOwogCiAJdmVjcC0+aV9hZGRyID0gKHhmc19jYWRkcl90KSZpcC0+aV9kOwogCXZlY3AtPmlfbGVuICA9IHNpemVvZihzdHJ1Y3QgeGZzX2ljZGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IGI2OGY5MTAuLjYyZWZhYjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtNTksNiArNTksNyBAQAogewogCXhmc19pY2Rpbm9kZV90CSpkaWM7CS8qIGRpbm9kZSBjb3JlIGluZm8gcG9pbnRlciAqLwogCXhmc19pbm9kZV90CSppcDsJCS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCisJc3RydWN0IGlub2RlCSppbm9kZTsKIAlpbnQJCWVycm9yOwogCiAJZXJyb3IgPSB4ZnNfaWdldChtcCwgTlVMTCwgaW5vLApAQCAtNzIsNiArNzMsNyBAQAogCUFTU0VSVChpcC0+aV9pbWFwLmltX2Jsa25vICE9IDApOwogCiAJZGljID0gJmlwLT5pX2Q7CisJaW5vZGUgPSBWRlNfSShpcCk7CiAKIAkvKiB4ZnNfaWdldCByZXR1cm5zIHRoZSBmb2xsb3dpbmcgd2l0aG91dCBuZWVkaW5nCiAJICogZnVydGhlciBjaGFuZ2UuCkBAIC04MywxNiArODUsMTkgQEAKIAlidWYtPmJzX3VpZCA9IGRpYy0+ZGlfdWlkOwogCWJ1Zi0+YnNfZ2lkID0gZGljLT5kaV9naWQ7CiAJYnVmLT5ic19zaXplID0gZGljLT5kaV9zaXplOworCiAJLyoKLQkgKiBXZSBhcmUgcmVhZGluZyB0aGUgYXRpbWUgZnJvbSB0aGUgTGludXggaW5vZGUgYmVjYXVzZSB0aGUKLQkgKiBkaW5vZGUgbWlnaHQgbm90IGJlIHVwdG9kYXRlLgorCSAqIFdlIG5lZWQgdG8gcmVhZCB0aGUgdGltZXN0YW1wcyBmcm9tIHRoZSBMaW51eCBpbm9kZSBiZWNhdXNlCisJICogdGhlIFZGUyBrZWVwcyB3cml0aW5nIGRpcmVjdGx5IGludG8gdGhlIGlub2RlIHN0cnVjdHVyZSBpbnN0ZWFkCisJICogb2YgdGVsbGluZyB1cyBhYm91dCB0aGUgdXBkYXRlcy4KIAkgKi8KLQlidWYtPmJzX2F0aW1lLnR2X3NlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9zZWM7Ci0JYnVmLT5ic19hdGltZS50dl9uc2VjID0gVkZTX0koaXApLT5pX2F0aW1lLnR2X25zZWM7Ci0JYnVmLT5ic19tdGltZS50dl9zZWMgPSBkaWMtPmRpX210aW1lLnRfc2VjOwotCWJ1Zi0+YnNfbXRpbWUudHZfbnNlYyA9IGRpYy0+ZGlfbXRpbWUudF9uc2VjOwotCWJ1Zi0+YnNfY3RpbWUudHZfc2VjID0gZGljLT5kaV9jdGltZS50X3NlYzsKLQlidWYtPmJzX2N0aW1lLnR2X25zZWMgPSBkaWMtPmRpX2N0aW1lLnRfbnNlYzsKKwlidWYtPmJzX2F0aW1lLnR2X3NlYyA9IGlub2RlLT5pX2F0aW1lLnR2X3NlYzsKKwlidWYtPmJzX2F0aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9hdGltZS50dl9uc2VjOworCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gaW5vZGUtPmlfbXRpbWUudHZfc2VjOworCWJ1Zi0+YnNfbXRpbWUudHZfbnNlYyA9IGlub2RlLT5pX210aW1lLnR2X25zZWM7CisJYnVmLT5ic19jdGltZS50dl9zZWMgPSBpbm9kZS0+aV9jdGltZS50dl9zZWM7CisJYnVmLT5ic19jdGltZS50dl9uc2VjID0gaW5vZGUtPmlfY3RpbWUudHZfbnNlYzsKKwogCWJ1Zi0+YnNfeGZsYWdzID0geGZzX2lwMnhmbGFncyhpcCk7CiAJYnVmLT5ic19leHRzaXplID0gZGljLT5kaV9leHRzaXplIDw8IG1wLT5tX3NiLnNiX2Jsb2NrbG9nOwogCWJ1Zi0+YnNfZXh0ZW50cyA9IGRpYy0+ZGlfbmV4dGVudHM7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKaW5kZXggMTA5OTM5NS4uZmIxN2Y4MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIAkJCQkJIlhGUzogTlVMTCBkcXVvdCBpbiAlcy4iLCBfX2Z1bmNfXyk7CiAJCQkJZ290byBuZXh0OwogCQkJfQotCQkJaWYgKGl0ZW0tPnJpX2J1ZltpXS5pX2xlbiA8IHNpemVvZih4ZnNfZHFibGtfdCkpIHsKKwkJCWlmIChpdGVtLT5yaV9idWZbaV0uaV9sZW4gPCBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCkpIHsKIAkJCQljbW5fZXJyKENFX0FMRVJULAogCQkJCQkiWEZTOiBkcXVvdCB0b28gc21hbGwgKCVkKSBpbiAlcy4iLAogCQkJCQlpdGVtLT5yaV9idWZbaV0uaV9sZW4sIF9fZnVuY19fKTsKQEAgLTI2MzUsNyArMjYzNSw3IEBACiAJCQkiWEZTOiBOVUxMIGRxdW90IGluICVzLiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwogCX0KLQlpZiAoaXRlbS0+cmlfYnVmWzFdLmlfbGVuIDwgc2l6ZW9mKHhmc19kcWJsa190KSkgeworCWlmIChpdGVtLT5yaV9idWZbMV0uaV9sZW4gPCBzaXplb2YoeGZzX2Rpc2tfZHF1b3RfdCkpIHsKIAkJY21uX2VycihDRV9BTEVSVCwKIAkJCSJYRlM6IGRxdW90IHRvbyBzbWFsbCAoJWQpIGluICVzLiIsCiAJCQlpdGVtLT5yaV9idWZbMV0uaV9sZW4sIF9fZnVuY19fKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IGYzMTI3MWMuLjJmZmM1NzAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtNDY3LDYgKzQ2Nyw3IEBACiB7CiAJeGZzX2xvZ19pdGVtX3QJCSpkbGlwID0gTlVMTDsKIAl4ZnNfbG9nX2l0ZW1fdAkJKm1saXA7CS8qIHB0ciB0byBtaW5pbXVtIGxpcCAqLworCXhmc19sc25fdAkJdGFpbF9sc247CiAKIAltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CiAKQEAgLTQ4Myw4ICs0ODQsMTYgQEAKIAogCWlmIChtbGlwID09IGRsaXApIHsKIAkJbWxpcCA9IHhmc19haWxfbWluKGFpbHApOworCQkvKgorCQkgKiBJdCBpcyBub3Qgc2FmZSB0byBhY2Nlc3MgbWxpcCBhZnRlciB0aGUgQUlMIGxvY2sgaXMKKwkJICogZHJvcHBlZCwgc28gd2UgbXVzdCBnZXQgYSBjb3B5IG9mIGxpX2xzbiBiZWZvcmUgd2UgZG8KKwkJICogc28uICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IG9uIDMyLWJpdCBwbGF0Zm9ybXMKKwkJICogd2hlcmUgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyA2NC1iaXQgdmFsdWVzIGxpa2UgbGlfbHNuCisJCSAqIGlzIG5vdCBhdG9taWMuCisJCSAqLworCQl0YWlsX2xzbiA9IG1saXAtPmxpX2xzbjsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwotCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwgbWxpcC0+bGlfbHNuKTsKKwkJeGZzX2xvZ19tb3ZlX3RhaWwoYWlscC0+eGFfbW91bnQsIHRhaWxfbHNuKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9jaygmYWlscC0+eGFfbG9jayk7CiAJfQpAQCAtNTE0LDYgKzUyMyw3IEBACiB7CiAJeGZzX2xvZ19pdGVtX3QJCSpkbGlwOwogCXhmc19sb2dfaXRlbV90CQkqbWxpcDsKKwl4ZnNfbHNuX3QJCXRhaWxfbHNuOwogCiAJaWYgKGxpcC0+bGlfZmxhZ3MgJiBYRlNfTElfSU5fQUlMKSB7CiAJCW1saXAgPSB4ZnNfYWlsX21pbihhaWxwKTsKQEAgLTUyNyw5ICs1MzcsMTYgQEAKIAogCQlpZiAobWxpcCA9PSBkbGlwKSB7CiAJCQltbGlwID0geGZzX2FpbF9taW4oYWlscCk7CisJCQkvKgorCQkJICogSXQgaXMgbm90IHNhZmUgdG8gYWNjZXNzIG1saXAgYWZ0ZXIgdGhlIEFJTCBsb2NrCisJCQkgKiBpcyBkcm9wcGVkLCBzbyB3ZSBtdXN0IGdldCBhIGNvcHkgb2YgbGlfbHNuCisJCQkgKiBiZWZvcmUgd2UgZG8gc28uICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50CisJCQkgKiBvbiAzMi1iaXQgcGxhdGZvcm1zIHdoZXJlIGFjY2Vzc2luZyBhbmQgdXBkYXRpbmcKKwkJCSAqIDY0LWJpdCB2YWx1ZXMgbGlrZSBsaV9sc24gaXMgbm90IGF0b21pYy4KKwkJCSAqLworCQkJdGFpbF9sc24gPSBtbGlwID8gbWxpcC0+bGlfbHNuIDogMDsKIAkJCXNwaW5fdW5sb2NrKCZhaWxwLT54YV9sb2NrKTsKLQkJCXhmc19sb2dfbW92ZV90YWlsKGFpbHAtPnhhX21vdW50LAotCQkJCQkJKG1saXAgPyBtbGlwLT5saV9sc24gOiAwKSk7CisJCQl4ZnNfbG9nX21vdmVfdGFpbChhaWxwLT54YV9tb3VudCwgdGFpbF9sc24pOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwogCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggYTQzNGYyOC4uYjU3MmY3ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtMjQ3NiwxMiArMjQ3Niw2IEBACiAJQVNTRVJUKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpIHx8IGlwLT5pX2RlbGF5ZWRfYmxrcyA9PSAwKTsKIAogCS8qCi0JICogTWFrZSBzdXJlIHRoZSBhdGltZSBpbiB0aGUgWEZTIGlub2RlIGlzIGNvcnJlY3QgYmVmb3JlIGZyZWVpbmcgdGhlCi0JICogTGludXggaW5vZGUuCi0JICovCi0JeGZzX3N5bmNocm9uaXplX2F0aW1lKGlwKTsKLQotCS8qCiAJICogSWYgd2UgaGF2ZSBub3RoaW5nIHRvIGZsdXNoIHdpdGggdGhpcyBpbm9kZSB0aGVuIGNvbXBsZXRlIHRoZQogCSAqIHRlYXJkb3duIG5vdywgb3RoZXJ3aXNlIGJyZWFrIHRoZSBsaW5rIGJldHdlZW4gdGhlIHhmcyBpbm9kZSBhbmQgdGhlCiAJICogbGludXggaW5vZGUgYW5kIGNsZWFuIHVwIHRoZSB4ZnMgaW5vZGUgbGF0ZXIuIFRoaXMgYXZvaWRzIGZsdXNoaW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCmluZGV4IDFjZWYxMzkuLjNjZDljY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oCkBAIC03MCw3ICs3MCw2IEBACiAJQUNQSV9CVVNfVFlQRV9QT1dFUiwKIAlBQ1BJX0JVU19UWVBFX1BST0NFU1NPUiwKIAlBQ1BJX0JVU19UWVBFX1RIRVJNQUwsCi0JQUNQSV9CVVNfVFlQRV9TWVNURU0sCiAJQUNQSV9CVVNfVFlQRV9QT1dFUl9CVVRUT04sCiAJQUNQSV9CVVNfVFlQRV9TTEVFUF9CVVRUT04sCiAJQUNQSV9CVVNfREVWSUNFX1RZUEVfQ09VTlQKQEAgLTE0MiwxMCArMTQxLDcgQEAKIAogc3RydWN0IGFjcGlfZGV2aWNlX2ZsYWdzIHsKIAl1MzIgZHluYW1pY19zdGF0dXM6MTsKLQl1MzIgaGFyZHdhcmVfaWQ6MTsKLQl1MzIgY29tcGF0aWJsZV9pZHM6MTsKIAl1MzIgYnVzX2FkZHJlc3M6MTsKLQl1MzIgdW5pcXVlX2lkOjE7CiAJdTMyIHJlbW92YWJsZToxOwogCXUzMiBlamVjdGFibGU6MTsKIAl1MzIgbG9ja2FibGU6MTsKQEAgLTE1NCw3ICsxNTAsNyBAQAogCXUzMiBwZXJmb3JtYW5jZV9tYW5hZ2VhYmxlOjE7CiAJdTMyIHdha2VfY2FwYWJsZToxOwkvKiBXYWtldXAoX1BSVykgc3VwcG9ydGVkPyAqLwogCXUzMiBmb3JjZV9wb3dlcl9zdGF0ZToxOwotCXUzMiByZXNlcnZlZDoxOTsKKwl1MzIgcmVzZXJ2ZWQ6MjI7CiB9OwogCiAvKiBGaWxlIFN5c3RlbSAqLwpAQCAtMTcyLDIwICsxNjgsMjMgQEAKIHR5cGVkZWYgY2hhciBhY3BpX2RldmljZV9uYW1lWzQwXTsKIHR5cGVkZWYgY2hhciBhY3BpX2RldmljZV9jbGFzc1syMF07CiAKK3N0cnVjdCBhY3BpX2hhcmR3YXJlX2lkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqaWQ7Cit9OworCiBzdHJ1Y3QgYWNwaV9kZXZpY2VfcG5wIHsKIAlhY3BpX2J1c19pZCBidXNfaWQ7CS8qIE9iamVjdCBuYW1lICovCiAJYWNwaV9idXNfYWRkcmVzcyBidXNfYWRkcmVzczsJLyogX0FEUiAqLwotCWNoYXIgKmhhcmR3YXJlX2lkOwkvKiBfSElEICovCi0Jc3RydWN0IGFjcGljYV9kZXZpY2VfaWRfbGlzdCAqY2lkX2xpc3Q7CS8qIF9DSURzICovCiAJY2hhciAqdW5pcXVlX2lkOwkvKiBfVUlEICovCisJc3RydWN0IGxpc3RfaGVhZCBpZHM7CQkvKiBfSElEIGFuZCBfQ0lEcyAqLwogCWFjcGlfZGV2aWNlX25hbWUgZGV2aWNlX25hbWU7CS8qIERyaXZlci1kZXRlcm1pbmVkICovCiAJYWNwaV9kZXZpY2VfY2xhc3MgZGV2aWNlX2NsYXNzOwkvKiAgICAgICAgIiAgICAgICAgICAqLwogfTsKIAogI2RlZmluZSBhY3BpX2RldmljZV9iaWQoZCkJKChkKS0+cG5wLmJ1c19pZCkKICNkZWZpbmUgYWNwaV9kZXZpY2VfYWRyKGQpCSgoZCktPnBucC5idXNfYWRkcmVzcykKLSNkZWZpbmUgYWNwaV9kZXZpY2VfaGlkKGQpCSgoZCktPnBucC5oYXJkd2FyZV9pZCkKLSNkZWZpbmUgYWNwaV9kZXZpY2VfdWlkKGQpCSgoZCktPnBucC51bmlxdWVfaWQpCitjaGFyICphY3BpX2RldmljZV9oaWQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogI2RlZmluZSBhY3BpX2RldmljZV9uYW1lKGQpCSgoZCktPnBucC5kZXZpY2VfbmFtZSkKICNkZWZpbmUgYWNwaV9kZXZpY2VfY2xhc3MoZCkJKChkKS0+cG5wLmRldmljZV9jbGFzcykKIApAQCAtMjYyLDcgKzI2MSw4IEBACiAvKiBEZXZpY2UgKi8KIAogc3RydWN0IGFjcGlfZGV2aWNlIHsKLQlhY3BpX2hhbmRsZSBoYW5kbGU7CisJaW50IGRldmljZV90eXBlOworCWFjcGlfaGFuZGxlIGhhbmRsZTsJCS8qIG5vIGhhbmRsZSBmb3IgZml4ZWQgaGFyZHdhcmUgKi8KIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKQEAgLTMyMiw2ICszMjIsOCBAQAogCiBpbnQgYWNwaV9idXNfZ2V0X2RldmljZShhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBhY3BpX2RldmljZSAqKmRldmljZSk7CiB2b2lkIGFjcGlfYnVzX2RhdGFfaGFuZGxlcihhY3BpX2hhbmRsZSBoYW5kbGUsIHZvaWQgKmNvbnRleHQpOworYWNwaV9zdGF0dXMgYWNwaV9idXNfZ2V0X3N0YXR1c19oYW5kbGUoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKnN0YSk7CiBpbnQgYWNwaV9idXNfZ2V0X3N0YXR1cyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBpbnQgYWNwaV9idXNfZ2V0X3Bvd2VyKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50ICpzdGF0ZSk7CiBpbnQgYWNwaV9idXNfc2V0X3Bvd2VyKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHN0YXRlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCAwYzNkZDg2Li40OTVkYzhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC03MywxNCArNzMsMjMgQEAKICNkZWZpbmUgRl9TRVRTSUcJMTAJLyogZm9yIHNvY2tldHMuICovCiAjZGVmaW5lIEZfR0VUU0lHCTExCS8qIGZvciBzb2NrZXRzLiAqLwogI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHXzY0QklUCisjaWZuZGVmIEZfR0VUTEs2NAorI2RlZmluZSBGX0dFVExLNjQJMTIJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KKyNkZWZpbmUgRl9TRVRMSzY0CTEzCisjZGVmaW5lIEZfU0VUTEtXNjQJMTQKKyNlbmRpZgorI2VuZGlmCisKICNpZm5kZWYgRl9TRVRPV05fRVgKLSNkZWZpbmUgRl9TRVRPV05fRVgJMTIKLSNkZWZpbmUgRl9HRVRPV05fRVgJMTMKKyNkZWZpbmUgRl9TRVRPV05fRVgJMTUKKyNkZWZpbmUgRl9HRVRPV05fRVgJMTYKICNlbmRpZgogCiAjZGVmaW5lIEZfT1dORVJfVElECTAKICNkZWZpbmUgRl9PV05FUl9QSUQJMQotI2RlZmluZSBGX09XTkVSX0dJRAkyCisjZGVmaW5lIEZfT1dORVJfUEdSUAkyCiAKIHN0cnVjdCBmX293bmVyX2V4IHsKIAlpbnQJdHlwZTsKQEAgLTEzOSwxMiArMTQ4LDYgQEAKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKIAotI2lmbmRlZiBGX0dFVExLNjQKLSNkZWZpbmUgRl9HRVRMSzY0CTEyCS8qICB1c2luZyAnc3RydWN0IGZsb2NrNjQnICovCi0jZGVmaW5lIEZfU0VUTEs2NAkxMwotI2RlZmluZSBGX1NFVExLVzY0CTE0Ci0jZW5kaWYKLQogI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLNjQKICNpZm5kZWYgX19BUkNIX0ZMT0NLNjRfUEFECiAjZGVmaW5lIF9fQVJDSF9GTE9DSzY0X1BBRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaAppbmRleCA5Y2NhMzc4NS4uNjZkNjEwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19HUElPX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0dQSU9fSAogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCmluZGV4IDIzYmI0ZGEuLjYyZjU5MDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvaGFyZGlycS5oCkBAIC02LDcgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBfX3NvZnRpcnFfcGVuZGluZzsKKwl1bnNpZ25lZCBpbnQgX19zb2Z0aXJxX3BlbmRpbmc7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwogCiAjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4JLyogU3RhbmRhcmQgbWFwcGluZ3MgZm9yIGlycV9jcHVzdGF0X3QgYWJvdmUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCAyOWNhOGY1Li5iNmU4MThmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC03MjEsMTIgKzcyMSwxMiBAQAogCS4gPSBBTElHTihQQUdFX1NJWkUpOwkJCQkJCVwKIAkuZGF0YSA6IEFUKEFERFIoLmRhdGEpIC0gTE9BRF9PRkZTRVQpIHsJCQkJXAogCQlJTklUX1RBU0tfREFUQShpbml0dGFzaykJCQkJXAorCQlOT1NBVkVfREFUQQkJCQkJCVwKKwkJUEFHRV9BTElHTkVEX0RBVEEocGFnZWFsaWduZWQpCQkJCVwKIAkJQ0FDSEVMSU5FX0FMSUdORURfREFUQShjYWNoZWxpbmUpCQkJXAogCQlSRUFEX01PU1RMWV9EQVRBKGNhY2hlbGluZSkJCQkJXAogCQlEQVRBX0RBVEEJCQkJCQlcCiAJCUNPTlNUUlVDVE9SUwkJCQkJCVwKLQkJTk9TQVZFX0RBVEEJCQkJCQlcCi0JCVBBR0VfQUxJR05FRF9EQVRBKHBhZ2VhbGlnbmVkKQkJCQlcCiAJfQogCiAjZGVmaW5lIElOSVRfVEVYVF9TRUNUSU9OKGluaXR0ZXh0X2FsaWduKQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBhZTFlOWUxLi5iNjkzNDdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTM4Nyw2ICszODcsNyBAQAogICogQGdldF9tb2RlczogZ2V0IG1vZGUgbGlzdCBmb3IgdGhpcyBjb25uZWN0b3IKICAqIEBzZXRfcHJvcGVydHk6IHByb3BlcnR5IGZvciB0aGlzIGNvbm5lY3RvciBtYXkgbmVlZCB1cGRhdGUKICAqIEBkZXN0cm95OiBtYWtlIG9iamVjdCBnbyBhd2F5CisgKiBAZm9yY2U6IG5vdGlmeSB0aGUgZHJpdmVyIHRoZSBjb25uZWN0b3IgaXMgZm9yY2VkIG9uCiAgKgogICogRWFjaCBDUlRDIG1heSBoYXZlIG9uZSBvciBtb3JlIGNvbm5lY3RvcnMgYXR0YWNoZWQgdG8gaXQuICBUaGUgZnVuY3Rpb25zCiAgKiBiZWxvdyBhbGxvdyB0aGUgY29yZSBEUk0gY29kZSB0byBjb250cm9sIGNvbm5lY3RvcnMsIGVudW1lcmF0ZSBhdmFpbGFibGUgbW9kZXMsCkBAIC00MDEsNiArNDAyLDcgQEAKIAlpbnQgKCpzZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAogCQkJICAgICB1aW50NjRfdCB2YWwpOwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKwl2b2lkICgqZm9yY2UpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogfTsKIAogc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHsKQEAgLTQyOSw2ICs0MzEsMTMgQEAKIAl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIH07CiAKK2VudW0gZHJtX2Nvbm5lY3Rvcl9mb3JjZSB7CisJRFJNX0ZPUkNFX1VOU1BFQ0lGSUVELAorCURSTV9GT1JDRV9PRkYsCisJRFJNX0ZPUkNFX09OLCAgICAgICAgIC8qIGZvcmNlIG9uIGFuYWxvZyBwYXJ0IG5vcm1hbGx5ICovCisJRFJNX0ZPUkNFX09OX0RJR0lUQUwsIC8qIGZvciBEVkktSSB1c2UgZGlnaXRhbCBjb25uZWN0b3IgKi8KK307CisKIC8qKgogICogZHJtX2Nvbm5lY3RvciAtIGNlbnRyYWwgRFJNIGNvbm5lY3RvciBjb250cm9sIHN0cnVjdHVyZQogICogQGNydGM6IENSVEMgdGhpcyBjb25uZWN0b3IgaXMgY3VycmVudGx5IGNvbm5lY3RlZCB0bywgTlVMTCBpZiBub25lCkBAIC00NzgsOSArNDg3LDEyIEBACiAKIAl2b2lkICpoZWxwZXJfcHJpdmF0ZTsKIAorCS8qIGZvcmNlZCBvbiBjb25uZWN0b3IgKi8KKwllbnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2U7CiAJdWludDMyX3QgZW5jb2Rlcl9pZHNbRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUl07CiAJdWludDMyX3QgZm9yY2VfZW5jb2Rlcl9pZDsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7IC8qIGN1cnJlbnRseSBhY3RpdmUgZW5jb2RlciAqLworCXZvaWQgKmZiX2hlbHBlcl9wcml2YXRlOwogfTsKIAogLyoqCkBAIC03NDYsNyArNzU4LDcgQEAKIGV4dGVybiBib29sIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZHJtX2N2dF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJaW50IGhkaXNwbGF5LCBpbnQgdmRpc3BsYXksIGludCB2cmVmcmVzaCwKLQkJCQlib29sIHJlZHVjZWQsIGJvb2wgaW50ZXJsYWNlZCk7CisJCQkJYm9vbCByZWR1Y2VkLCBib29sIGludGVybGFjZWQsIGJvb2wgbWFyZ2lucyk7CiBleHRlcm4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRybV9ndGZfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCWludCBoZGlzcGxheSwgaW50IHZkaXNwbGF5LCBpbnQgdnJlZnJlc2gsCiAJCQkJYm9vbCBpbnRlcmxhY2VkLCBpbnQgbWFyZ2lucyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IDRjOGRhY2EuLmIyOWUyMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCkBAIC0zOSw2ICszOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCisjaW5jbHVkZSAiZHJtX2ZiX2hlbHBlci5oIgogc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyB7CiAJLyoKIAkgKiBDb250cm9sIHBvd2VyIGxldmVscyBvbiB0aGUgQ1JUQy4gIElmIHRoZSBtb2RlIHBhc3NlZCBpbiBpcwpAQCAtNjAsNiArNjEsOSBAQAogCS8qIE1vdmUgdGhlIGNydGMgb24gdGhlIGN1cnJlbnQgZmIgdG8gdGhlIGdpdmVuIHBvc2l0aW9uICpvcHRpb25hbCogKi8KIAlpbnQgKCptb2RlX3NldF9iYXNlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKIAkJCSAgICAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqb2xkX2ZiKTsKKworCS8qIHJlbG9hZCB0aGUgY3VycmVudCBjcnRjIExVVCAqLworCXZvaWQgKCpsb2FkX2x1dCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgewpAQCAtMTE5LDEwICsxMjMsMTEgQEAKIAllbmNvZGVyLT5oZWxwZXJfcHJpdmF0ZSA9ICh2b2lkICopZnVuY3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm1fY29ubmVjdG9yX2hlbHBlcl9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKK3N0YXRpYyBpbmxpbmUgaW50IGRybV9jb25uZWN0b3JfaGVscGVyX2FkZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzICpmdW5jcykKIHsKIAljb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlID0gKHZvaWQgKilmdW5jczsKKwlyZXR1cm4gZHJtX2ZiX2hlbHBlcl9hZGRfY29ubmVjdG9yKGNvbm5lY3Rvcik7CiB9CiAKIGV4dGVybiBpbnQgZHJtX2hlbHBlcl9yZXN1bWVfZm9yY2VfbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCA4OGZmZmJkLi41OGM4OTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCkBAIC0zNSw5ICszNSwzMCBAQAogCXN0cnVjdCBkcm1fbW9kZV9zZXQgbW9kZV9zZXQ7CiB9OwogCisKIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHsKIAl2b2lkICgqZ2FtbWFfc2V0KShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiByZWQsIHUxNiBncmVlbiwKIAkJCSAgdTE2IGJsdWUsIGludCByZWdubyk7CisJdm9pZCAoKmdhbW1hX2dldCkoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MTYgKnJlZCwgdTE2ICpncmVlbiwKKwkJCSAgdTE2ICpibHVlLCBpbnQgcmVnbm8pOworfTsKKworLyogbW9kZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAqLworc3RydWN0IGRybV9mYl9oZWxwZXJfY21kbGluZV9tb2RlIHsKKwlib29sIHNwZWNpZmllZDsKKwlib29sIHJlZnJlc2hfc3BlY2lmaWVkOworCWJvb2wgYnBwX3NwZWNpZmllZDsKKwlpbnQgeHJlcywgeXJlczsKKwlpbnQgYnBwOworCWludCByZWZyZXNoOworCWJvb2wgcmI7CisJYm9vbCBpbnRlcmxhY2U7CisJYm9vbCBjdnQ7CisJYm9vbCBtYXJnaW5zOworfTsKKworc3RydWN0IGRybV9mYl9oZWxwZXJfY29ubmVjdG9yIHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9jbWRsaW5lX21vZGUgY21kbGluZV9tb2RlOwogfTsKIAogc3RydWN0IGRybV9mYl9oZWxwZXIgewpAQCAtNTIsMTEgKzczLDE0IEBACiB9OwogCiBpbnQgZHJtX2ZiX2hlbHBlcl9zaW5nbGVfZmJfcHJvYmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgIGludCBwcmVmZXJyZWRfYnBwLAogCQkJCSAgaW50ICgqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkJICAgdWludDMyX3QgZmJfd2lkdGgsCiAJCQkJCQkgICB1aW50MzJfdCBmYl9oZWlnaHQsCiAJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX3dpZHRoLAogCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9oZWlnaHQsCisJCQkJCQkgICB1aW50MzJfdCBzdXJmYWNlX2RlcHRoLAorCQkJCQkJICAgdWludDMyX3Qgc3VyZmFjZV9icHAsCiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICoqZmJfcHRyKSk7CiBpbnQgZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmhlbHBlciwgaW50IGNydGNfY291bnQsCiAJCQkJICBpbnQgbWF4X2Nvbm4pOwpAQCAtNzcsNiArMTAxLDExIEBACiB2b2lkIGRybV9mYl9oZWxwZXJfcmVzdG9yZSh2b2lkKTsKIHZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7Ci12b2lkIGRybV9mYl9oZWxwZXJfZmlsbF9maXgoc3RydWN0IGZiX2luZm8gKmluZm8sIHVpbnQzMl90IHBpdGNoKTsKK3ZvaWQgZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdWludDMyX3QgcGl0Y2gsCisJCQkgICAgdWludDMyX3QgZGVwdGgpOworCitpbnQgZHJtX2ZiX2hlbHBlcl9hZGRfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworaW50IGRybV9mYl9oZWxwZXJfcGFyc2VfY29tbWFuZF9saW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCAzZjZlNTQ1Li5lNmYzYjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC04MCw3ICs4MCw3IEBACiAJezB4MTAwMiwgMHg1MTU4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjAwfSwgXAogCXsweDEwMDIsIDB4NTE1OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKIAl7MHgxMDAyLCAweDUxNUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCi0JezB4MTAwMiwgMHg1MTVFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAorCXsweDEwMDIsIDB4NTE1RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCiAJezB4MTAwMiwgMHg1NDYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKIAl7MHgxMDAyLCAweDU0NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl7MHgxMDAyLCAweDU5NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKLQl7MHgxMDAyLCAweDU5NjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCisJezB4MTAwMiwgMHg1OTY5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfFJBREVPTl9TSU5HTEVfQ1JUQ30sIFwKIAl7MHgxMDAyLCAweDVhNDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfSUdQR0FSVH0sIFwKIAl7MHgxMDAyLCAweDVhNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM0MDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg1YTYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNDAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX0lHUEdBUlR9LCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGNmZjRhMTAuLjFmZWVkNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xMjYsNiArMTI2LDcgQEAKIGhlYWRlci15ICs9IG5sODAyMTEuaAogaGVhZGVyLXkgKz0gcGFyYW0uaAogaGVhZGVyLXkgKz0gcGNpX3JlZ3MuaAoraGVhZGVyLXkgKz0gcGVyZl9ldmVudC5oCiBoZWFkZXIteSArPSBwZmtleXYyLmgKIGhlYWRlci15ICs9IHBnLmgKIGhlYWRlci15ICs9IHBoYW50b20uaApAQCAtMzYzLDYgKzM2NCw3IEBACiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYyLmgKIHVuaWZkZWYteSArPSB2aWRlb2Rldi5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX2NvbmZpZy5oCit1bmlmZGVmLXkgKz0gdmlydGlvX2lkcy5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX2Jsay5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX25ldC5oCiB1bmlmZGVmLXkgKz0gdmlydGlvXzlwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaCBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaAppbmRleCA4ODAxMzBmLi45MTAxZWQ2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hZ3BfYmFja2VuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwX2JhY2tlbmQuaApAQCAtNTMsNyArNTMsNyBAQAogCWludCBjdXJyZW50X21lbW9yeTsKIAlib29sIGNhbnRfdXNlX2FwZXJ0dXJlOwogCXVuc2lnbmVkIGxvbmcgcGFnZV9tYXNrOwotCXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOworCWNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCAqdm1fb3BzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvYW1iYS9tbWNpLmgKaW5kZXggYjQ5MGVjYy4uNmI0MjQxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCkBAIC0xLDE3ICsxLDE4IEBACiAvKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbW1jLmgKKyAqICBpbmNsdWRlL2xpbnV4L2FtYmEvbW1jaS5oCiAgKi8KLSNpZm5kZWYgQVNNQVJNX01BQ0hfTU1DX0gKLSNkZWZpbmUgQVNNQVJNX01BQ0hfTU1DX0gKKyNpZm5kZWYgQU1CQV9NTUNJX0gKKyNkZWZpbmUgQU1CQV9NTUNJX0gKIAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKLXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSB7CitzdHJ1Y3QgbW1jaV9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgb2NyX21hc2s7CQkJLyogYXZhaWxhYmxlIHZvbHRhZ2VzICovCiAJdTMyICgqdHJhbnNsYXRlX3ZkZCkoc3RydWN0IGRldmljZSAqLCB1bnNpZ25lZCBpbnQpOwogCXVuc2lnbmVkIGludCAoKnN0YXR1cykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQJZ3Bpb193cDsKIAlpbnQJZ3Bpb19jZDsKKwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllczsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvcGwwMjIuaAppbmRleCBkY2FkMGZmLi5lNDgzNmM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKKysrIGIvaW5jbHVkZS9saW51eC9hbWJhL3BsMDIyLmgKQEAgLTEzNiwxMiArMTM2LDEyIEBACiAKIC8qKgogICogZW51bSBTUEkgQ2xvY2sgUGhhc2UgLSBjbG9jayBwaGFzZSAoTW90b3JvbGEgU1BJIGludGVyZmFjZSBvbmx5KQotICogQFNTUF9DTEtfUklTSU5HX0VER0U6IFJlY2VpdmUgZGF0YSBvbiByaXNpbmcgZWRnZQotICogQFNTUF9DTEtfRkFMTElOR19FREdFOiBSZWNlaXZlIGRhdGEgb24gZmFsbGluZyBlZGdlCisgKiBAU1NQX0NMS19GSVJTVF9FREdFOiBSZWNlaXZlIGRhdGEgb24gZmlyc3QgZWRnZSB0cmFuc2l0aW9uIChhY3R1YWwgZGlyZWN0aW9uIGRlcGVuZHMgb24gcG9sYXJpdHkpCisgKiBAU1NQX0NMS19TRUNPTkRfRURHRTogUmVjZWl2ZSBkYXRhIG9uIHNlY29uZCBlZGdlIHRyYW5zaXRpb24gKGFjdHVhbCBkaXJlY3Rpb24gZGVwZW5kcyBvbiBwb2xhcml0eSkKICAqLwogZW51bSBzc3Bfc3BpX2Nsa19waGFzZSB7Ci0JU1NQX0NMS19SSVNJTkdfRURHRSwKLQlTU1BfQ0xLX0ZBTExJTkdfRURHRQorCVNTUF9DTEtfRklSU1RfRURHRSwKKwlTU1BfQ0xLX1NFQ09ORF9FREdFCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IDYyOTlhMjUuLjRmYjM1NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtMzM0LDkgKzMzNCwxMiBAQAogCVNFVEZFQVRVUkVTX1NBVEFfRElTQUJMRSA9IDB4OTAsIC8qIERpc2FibGUgdXNlIG9mIFNBVEEgZmVhdHVyZSAqLwogCiAJLyogU0VURkVBVFVSRSBTZWN0b3IgY291bnRzIGZvciBTQVRBIGZlYXR1cmVzICovCi0JU0FUQV9BTgkJCT0gMHgwNSwgIC8qIEFzeW5jaHJvbm91cyBOb3RpZmljYXRpb24gKi8KLQlTQVRBX0RJUE0JCT0gMHgwMywgIC8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLwotCVNBVEFfRlBETUFfQUEJCT0gMHgwMiwgIC8qIERNQSBTZXR1cCBGSVMgQXV0by1BY3RpdmF0ZSAqLworCVNBVEFfRlBETUFfT0ZGU0VUCT0gMHgwMSwJLyogRlBETUEgbm9uLXplcm8gYnVmZmVyIG9mZnNldHMgKi8KKwlTQVRBX0ZQRE1BX0FBCQk9IDB4MDIsIC8qIEZQRE1BIFNldHVwIEZJUyBBdXRvLUFjdGl2YXRlICovCisJU0FUQV9ESVBNCQk9IDB4MDMsCS8qIERldmljZSBJbml0aWF0ZWQgUG93ZXIgTWFuYWdlbWVudCAqLworCVNBVEFfRlBETUFfSU5fT1JERVIJPSAweDA0LAkvKiBGUERNQSBpbi1vcmRlciBkYXRhIGRlbGl2ZXJ5ICovCisJU0FUQV9BTgkJCT0gMHgwNSwJLyogQXN5bmNocm9ub3VzIE5vdGlmaWNhdGlvbiAqLworCVNBVEFfU1NQCQk9IDB4MDYsCS8qIFNvZnR3YXJlIFNldHRpbmdzIFByZXNlcnZhdGlvbiAqLwogCiAJLyogZmVhdHVyZSB2YWx1ZXMgZm9yIFNFVF9NQVggKi8KIAlBVEFfU0VUX01BWF9BRERSCT0gMHgwMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCAwZWUzM2MyLi5iNDQ5ZTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xMDEsNyArMTAxLDggQEAKIAkJY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IGJkaV9yZWdpc3Rlcl9kZXYoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgZGV2X3QgZGV2KTsKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7Ci12b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgbG9uZyBucl9wYWdlcyk7Cit2b2lkIGJkaV9zdGFydF93cml0ZWJhY2soc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlsb25nIG5yX3BhZ2VzKTsKIGludCBiZGlfd3JpdGViYWNrX3Rhc2soc3RydWN0IGJkaV93cml0ZWJhY2sgKndiKTsKIGludCBiZGlfaGFzX2RpcnR5X2lvKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oIGIvaW5jbHVkZS9saW51eC9iYWNrbGlnaHQuaAppbmRleCA3OWNhMmRhLi4wZjVmNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFja2xpZ2h0LmgKQEAgLTI3LDYgKzI3LDExIEBACiAgKiBBbnkgb3RoZXIgdXNlIG9mIHRoZSBsb2NrcyBiZWxvdyBpcyBwcm9iYWJseSB3cm9uZy4KICAqLwogCitlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHsKKwlCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSwKKwlCQUNLTElHSFRfVVBEQVRFX1NZU0ZTLAorfTsKKwogc3RydWN0IGJhY2tsaWdodF9kZXZpY2U7CiBzdHJ1Y3QgZmJfaW5mbzsKIApAQCAtMTAwLDYgKzEwNSw4IEBACiBleHRlcm4gc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwKIAlzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRldmRhdGEsIHN0cnVjdCBiYWNrbGlnaHRfb3BzICpvcHMpOwogZXh0ZXJuIHZvaWQgYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7CitleHRlcm4gdm9pZCBiYWNrbGlnaHRfZm9yY2VfdXBkYXRlKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCwKKwkJCQkgICBlbnVtIGJhY2tsaWdodF91cGRhdGVfcmVhc29uIHJlYXNvbik7CiAKICNkZWZpbmUgdG9fYmFja2xpZ2h0X2RldmljZShvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlLCBkZXYpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCmluZGV4IGUyM2E4NmMuLjIyMWNlY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaApAQCAtODIsNyArODIsNiBAQAogZW51bSB7CiAJUkVRX0xCX09QX0VKRUNUCT0gMHg0MCwJCS8qIGVqZWN0IHJlcXVlc3QgKi8KIAlSRVFfTEJfT1BfRkxVU0ggPSAweDQxLAkJLyogZmx1c2ggcmVxdWVzdCAqLwotCVJFUV9MQl9PUF9ESVNDQVJEID0gMHg0MiwJLyogZGlzY2FyZCBzZWN0b3JzICovCiB9OwogCiAvKgpAQCAtMjYxLDcgKzI2MCw2IEBACiB0eXBlZGVmIGludCAobWFrZV9yZXF1ZXN0X2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CiB0eXBlZGVmIGludCAocHJlcF9ycV9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkICh1bnBsdWdfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKLXR5cGVkZWYgaW50IChwcmVwYXJlX2Rpc2NhcmRfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAogc3RydWN0IGJpb192ZWM7CiBzdHJ1Y3QgYnZlY19tZXJnZV9kYXRhIHsKQEAgLTMxMyw2ICszMTEsNyBAQAogCXVuc2lnbmVkIGludAkJYWxpZ25tZW50X29mZnNldDsKIAl1bnNpZ25lZCBpbnQJCWlvX21pbjsKIAl1bnNpZ25lZCBpbnQJCWlvX29wdDsKKwl1bnNpZ25lZCBpbnQJCW1heF9kaXNjYXJkX3NlY3RvcnM7CiAKIAl1bnNpZ25lZCBzaG9ydAkJbG9naWNhbF9ibG9ja19zaXplOwogCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnbWVudHM7CkBAIC0zNDAsNyArMzM5LDYgQEAKIAltYWtlX3JlcXVlc3RfZm4JCSptYWtlX3JlcXVlc3RfZm47CiAJcHJlcF9ycV9mbgkJKnByZXBfcnFfZm47CiAJdW5wbHVnX2ZuCQkqdW5wbHVnX2ZuOwotCXByZXBhcmVfZGlzY2FyZF9mbgkqcHJlcGFyZV9kaXNjYXJkX2ZuOwogCW1lcmdlX2J2ZWNfZm4JCSptZXJnZV9idmVjX2ZuOwogCXByZXBhcmVfZmx1c2hfZm4JKnByZXBhcmVfZmx1c2hfZm47CiAJc29mdGlycV9kb25lX2ZuCQkqc29mdGlycV9kb25lX2ZuOwpAQCAtNDYwLDYgKzQ1OCw3IEBACiAjZGVmaW5lIFFVRVVFX0ZMQUdfVklSVCAgICAgICAgUVVFVUVfRkxBR19OT05ST1QgLyogcGFyYXZpcnQgZGV2aWNlICovCiAjZGVmaW5lIFFVRVVFX0ZMQUdfSU9fU1RBVCAgICAgMTUJLyogZG8gSU8gc3RhdHMgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19DUQkgICAgICAgMTYJLyogaGFyZHdhcmUgZG9lcyBxdWV1aW5nICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTcJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfQ0xVU1RFUikgfAkJXApAQCAtNTkxLDYgKzU5MCw3IEBACiAjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKQkoKHEpLT5vcmRzZXEpCiAjZGVmaW5lIGJsa19xdWV1ZV9zdGFja2FibGUocSkJXAogCXRlc3RfYml0KFFVRVVFX0ZMQUdfU1RBQ0tBQkxFLCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX2Rpc2NhcmQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19ESVNDQVJELCAmKHEpLT5xdWV1ZV9mbGFncykKIAogI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQogI2RlZmluZSBibGtfcGNfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX0JMT0NLX1BDKQpAQCAtOTI5LDYgKzkyOSw4IEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3BoeXNfc2VnbWVudHMoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX21heF9kaXNjYXJkX3NlY3RvcnMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCXVuc2lnbmVkIGludCBtYXhfZGlzY2FyZF9zZWN0b3JzKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX2FsaWdubWVudF9vZmZzZXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCkBAIC05NTUsNyArOTU3LDYgQEAKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc29mdGlycV9kb25lX2ZuICopOwotZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3NldF9kaXNjYXJkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHByZXBhcmVfZGlzY2FyZF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ycV90aW1lZF9vdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgcnFfdGltZWRfb3V0X2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVvdXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmxrX2dldF9iYWNraW5nX2Rldl9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwpAQCAtMTA4MCwyNSArMTA4MSwzNyBAQAogCXJldHVybiBxLT5saW1pdHMucGh5c2ljYWxfYmxvY2tfc2l6ZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9waHlzaWNhbF9ibG9ja19zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX3BoeXNpY2FsX2Jsb2NrX3NpemUoYmRldl9nZXRfcXVldWUoYmRldikpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxdWV1ZV9pb19taW4oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJcmV0dXJuIHEtPmxpbWl0cy5pb19taW47CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGJkZXZfaW9fbWluKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIHF1ZXVlX2lvX21pbihiZGV2X2dldF9xdWV1ZShiZGV2KSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHF1ZXVlX2lvX29wdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlyZXR1cm4gcS0+bGltaXRzLmlvX29wdDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9pb19vcHQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gcXVldWVfaW9fb3B0KGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcXVldWVfYWxpZ25tZW50X29mZnNldChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKLQlpZiAocSAmJiBxLT5saW1pdHMubWlzYWxpZ25lZCkKKwlpZiAocS0+bGltaXRzLm1pc2FsaWduZWQpCiAJCXJldHVybiAtMTsKIAotCWlmIChxICYmIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0KQotCQlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcS0+bGltaXRzLmFsaWdubWVudF9vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX3NlY3Rvcl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLApAQCAtMTEwOCw2ICsxMTIxLDE5IEBACiAJCSYgKHEtPmxpbWl0cy5pb19taW4gLSAxKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgYmRldl9hbGlnbm1lbnRfb2Zmc2V0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKworCWlmIChxLT5saW1pdHMubWlzYWxpZ25lZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpCisJCXJldHVybiBiZGV2LT5iZF9wYXJ0LT5hbGlnbm1lbnRfb2Zmc2V0OworCisJcmV0dXJuIHEtPmxpbWl0cy5hbGlnbm1lbnRfb2Zmc2V0OworfQorCiBzdGF0aWMgaW5saW5lIGludCBxdWV1ZV9kbWFfYWxpZ25tZW50KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCXJldHVybiBxID8gcS0+ZG1hX2FsaWdubWVudCA6IDUxMTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDdlNDM1MGUuLjNiNzNiOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTk4LDYgKzE5OCw3IEBACiAJCQkgICBjaGFyIF9fdXNlciAqYXJnKTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBibGtfdHJhY2VfcmVtb3ZlX3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIGV4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsa190cmFjZV9hdHRyX2dyb3VwOwpAQCAtMjExLDYgKzIxMiw3IEBACiAjIGRlZmluZSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KQkJCSgtRU5PVFRZKQogIyBkZWZpbmUgYmxrX3RyYWNlX3JlbW92ZShxKQkJCQkoLUVOT1RUWSkKICMgZGVmaW5lIGJsa19hZGRfdHJhY2VfbXNnKHEsIGZtdCwgLi4uKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGV2KQkJCWRvIHsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgaW50IGJsa190cmFjZV9pbml0X3N5c2ZzKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IGI2MmJiOTIuLjAwMDhkZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMzcsNyArMzcsNyBAQAogZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cF9vcGVyYXRpb25zOwogCiAvKiBEZWZpbmUgdGhlIGVudW1lcmF0aW9uIG9mIGFsbCBjZ3JvdXAgc3Vic3lzdGVtcyAqLwogI2RlZmluZSBTVUJTWVMoX3gpIF94ICMjIF9zdWJzeXNfaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDQ0NzE3ZWIuLjc5YTIzNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0yOTEsOCArMjkxLDE1IEBACiBpbnQgY3B1ZnJlcV9nZXRfcG9saWN5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgY3B1KTsKIGludCBjcHVmcmVxX3VwZGF0ZV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSk7CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIC8qIHF1ZXJ5IHRoZSBjdXJyZW50IENQVSBmcmVxdWVuY3kgKGluIGtIeikuIElmIHplcm8sIGNwdWZyZXEgY291bGRuJ3QgZGV0ZWN0IGl0ICovCiB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1ZnJlcV9nZXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAvKiBxdWVyeSB0aGUgbGFzdCBrbm93biBDUFUgZnJlcSAoaW4ga0h6KS4gSWYgemVybywgY3B1ZnJlcSBjb3VsZG4ndCBkZXRlY3QgaXQgKi8KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFjYTMxYmYuLjJlYTNlNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtMTI0LDcgKzEyNCw5IEBACiAJc3RydWN0IGJ1c190eXBlCQkqYnVzOwogCiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwotCWNvbnN0IGNoYXIgCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKwljb25zdCBjaGFyCQkqbW9kX25hbWU7CS8qIHVzZWQgZm9yIGJ1aWx0LWluIG1vZHVsZXMgKi8KKworCWJvb2wgc3VwcHJlc3NfYmluZF9hdHRyczsJLyogZGlzYWJsZXMgYmluZC91bmJpbmQgdmlhIHN5c2ZzICovCiAKIAlpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKmRldik7CiAJaW50ICgqcmVtb3ZlKSAoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IDQ1YTkzN2IuLjkwYTRlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtMzYxLDYgKzM2MSw3IEBACiAjZGVmaW5lIE5UX1BQQ19WU1gJMHgxMDIJCS8qIFBvd2VyUEMgVlNYIHJlZ2lzdGVycyAqLwogI2RlZmluZSBOVF8zODZfVExTCTB4MjAwCQkvKiBpMzg2IFRMUyBzbG90cyAoc3RydWN0IHVzZXJfZGVzYykgKi8KICNkZWZpbmUgTlRfMzg2X0lPUEVSTQkweDIwMQkJLyogeDg2IGlvIHBlcm1pc3Npb24gYml0bWFwICgxPWRlbnkpICovCisjZGVmaW5lIE5UX1BSWFNUQVRVUwkweDMwMAkJLyogczM5MCB1cHBlciByZWdpc3RlciBoYWx2ZXMgKi8KIAogCiAvKiBOb3RlIGhlYWRlciBpbiBhIFBUX05PVEUgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggY2ExYmZlOS4uOTNlNzQyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0xMzcsNiArMTM3LDE0IEBACiAJICogYnkgb3RoZXIgbWVhbnMsIHNvIHdlIGhhdmUgdHJ1bmNhdGVfbXV0ZXguCiAJICovCiAJc3RydWN0IG11dGV4IHRydW5jYXRlX211dGV4OworCisJLyoKKwkgKiBUcmFuc2FjdGlvbnMgdGhhdCBjb250YWluIGlub2RlJ3MgbWV0YWRhdGEgbmVlZGVkIHRvIGNvbXBsZXRlCisJICogZnN5bmMgYW5kIGZkYXRhc3luYywgcmVzcGVjdGl2ZWx5LgorCSAqLworCWF0b21pY190IGlfc3luY190aWQ7CisJYXRvbWljX3QgaV9kYXRhc3luY190aWQ7CisKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mYi5oIGIvaW5jbHVkZS9saW51eC9mYi5oCmluZGV4IGY4NDdkZjkuLmRlOWM3MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZiLmgKQEAgLTEzMyw2ICsxMzMsNyBAQAogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIyMzAgOTYJLyogTmVvTWFnaWMgTk0yMjMwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzNjAgOTcJLyogTmVvTWFnaWMgTk0yMzYwICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTgJLyogTmVvTWFnaWMgTk0yMzgwICAgICAgICAgICAgICAqLworI2RlZmluZSBGQl9BQ0NFTF9QWEEzWFgJCSA5OQkvKiBQWEEzeHgJCQkqLwogCiAjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTQgICAgICAgIDB4ODAJLyogUzMgU2F2YWdlNCAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAgICAgICAweDgxCS8qIFMzIFNhdmFnZTNEICAgICAgICAgICAgICAgICAgKi8KQEAgLTY2OCwxMiArNjY5LDYgQEAKIAkvKiBwZXJmb3JtIGZiIHNwZWNpZmljIG1tYXAgKi8KIAlpbnQgKCpmYl9tbWFwKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCi0JLyogc2F2ZSBjdXJyZW50IGhhcmR3YXJlIHN0YXRlICovCi0Jdm9pZCAoKmZiX3NhdmVfc3RhdGUpKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLQotCS8qIHJlc3RvcmUgc2F2ZWQgc3RhdGUgKi8KLQl2b2lkICgqZmJfcmVzdG9yZV9zdGF0ZSkoc3RydWN0IGZiX2luZm8gKmluZm8pOwotCiAJLyogZ2V0IGNhcGFiaWxpdHkgZ2l2ZW4gdmFyICovCiAJdm9pZCAoKmZiX2dldF9jYXBzKShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2JsaXRfY2FwcyAqY2FwcywKIAkJCSAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMmFkYWEyNS4uMjYyMGE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMzAwLDYgKzMwMCwxMCBAQAogI2RlZmluZSBCTEtUUkFDRVNUT1AgX0lPKDB4MTIsMTE3KQogI2RlZmluZSBCTEtUUkFDRVRFQVJET1dOIF9JTygweDEyLDExOCkKICNkZWZpbmUgQkxLRElTQ0FSRCBfSU8oMHgxMiwxMTkpCisjZGVmaW5lIEJMS0lPTUlOIF9JTygweDEyLDEyMCkKKyNkZWZpbmUgQkxLSU9PUFQgX0lPKDB4MTIsMTIxKQorI2RlZmluZSBCTEtBTElHTk9GRiBfSU8oMHgxMiwxMjIpCisjZGVmaW5lIEJMS1BCU1pHRVQgX0lPKDB4MTIsMTIzKQogCiAjZGVmaW5lIEJNQVBfSU9DVEwgMQkJLyogb2Jzb2xldGUgLSBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lIEZJQk1BUAkgICBfSU8oMHgwMCwxKQkvKiBibWFwIGFjY2VzcyAqLwpAQCAtMjQ0Niw3ICsyNDUwLDcgQEAKIAlfX3NpbXBsZV9hdHRyX2NoZWNrX2Zvcm1hdChfX2ZtdCwgMHVsbCk7CQkJXAogCXJldHVybiBzaW1wbGVfYXR0cl9vcGVuKGlub2RlLCBmaWxlLCBfX2dldCwgX19zZXQsIF9fZm10KTsJXAogfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIF9fZm9wcyA9IHsJCQkJXAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgX19mb3BzID0gewkJCQlcCiAJLm93bmVyCSA9IFRISVNfTU9EVUxFLAkJCQkJCVwKIAkub3BlbgkgPSBfX2ZvcHMgIyMgX29wZW4sCQkJCQlcCiAJLnJlbGVhc2UgPSBzaW1wbGVfYXR0cl9yZWxlYXNlLAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggY2QzZDJhYi4uMGI0Zjk3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICMgZGVmaW5lIGZ0cmFjZV9zZXRfZmlsdGVyKGJ1ZiwgbGVuLCByZXNldCkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2Rpc2FibGVfZGFlbW9uKCkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGZ0cmFjZV9lbmFibGVfZGFlbW9uKCkJCQlkbyB7IH0gd2hpbGUgKDApCi1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2Uodm9pZCAqc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3JlbGVhc2VfbW9kKHN0cnVjdCBtb2R1bGUgKm1vZCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggOGVjMTc5OS4uMWU1YTI2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnV0ZXguaApAQCAtMzMsOCArMzMsOCBAQAogI2RlZmluZSBGVVRFWF9MT0NLX1BJX1BSSVZBVEUJKEZVVEVYX0xPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1VOTE9DS19QSV9QUklWQVRFCShGVVRFWF9VTkxPQ0tfUEkgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCiAjZGVmaW5lIEZVVEVYX1RSWUxPQ0tfUElfUFJJVkFURSAoRlVURVhfVFJZTE9DS19QSSB8IEZVVEVYX1BSSVZBVEVfRkxBRykKLSNkZWZpbmUgRlVURVhfV0FJVF9CSVRTRVRfUFJJVkFURQkoRlVURVhfV0FJVF9CSVRTIHwgRlVURVhfUFJJVkFURV9GTEFHKQotI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFMgfCBGVVRFWF9QUklWQVRFX0ZMQUcpCisjZGVmaW5lIEZVVEVYX1dBSVRfQklUU0VUX1BSSVZBVEUJKEZVVEVYX1dBSVRfQklUU0VUIHwgRlVURVhfUFJJVkFURV9GTEFHKQorI2RlZmluZSBGVVRFWF9XQUtFX0JJVFNFVF9QUklWQVRFCShGVVRFWF9XQUtFX0JJVFNFVCB8IEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfV0FJVF9SRVFVRVVFX1BJX1BSSVZBVEUJKEZVVEVYX1dBSVRfUkVRVUVVRV9QSSB8IFwKIAkJCQkJIEZVVEVYX1BSSVZBVEVfRkxBRykKICNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUVfUElfUFJJVkFURQkoRlVURVhfQ01QX1JFUVVFVUVfUEkgfCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDExYWIxOWEuLjQxYTU5YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC0zLDE1ICszLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IHVzZXJfc3RydWN0OworCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQogCiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKLXN0cnVjdCBjdGxfdGFibGU7Ci1zdHJ1Y3QgdXNlcl9zdHJ1Y3Q7Ci0KIGludCBQYWdlSHVnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3ZtX2h1Z2V0bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7CiBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCBpbnQgYWNjdCwKIAkJCQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKip1c2VyLCBpbnQgY3JlYXRfZmxhZ3MpOwogaW50IGh1Z2V0bGJfZ2V0X3F1b3RhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb25nIGRlbHRhKTsKQEAgLTE4Nyw3ICsxODcsMTEgQEAKIAogI2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKQkJCTAKICNkZWZpbmUgc2V0X2ZpbGVfaHVnZXBhZ2VzKGZpbGUpCQlCVUcoKQotI2RlZmluZSBodWdldGxiX2ZpbGVfc2V0dXAobmFtZSxzaXplLGFjY3QsdXNlcixjcmVhdCkJRVJSX1BUUigtRU5PU1lTKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLAorCQlpbnQgYWNjdGZsYWcsIHN0cnVjdCB1c2VyX3N0cnVjdCAqKnVzZXIsIGludCBjcmVhdF9mbGFncykKK3sKKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsKK30KIAogI2VuZGlmIC8qICFDT05GSUdfSFVHRVRMQkZTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDU3ZDQxYjAuLjdiNDBjZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMzYxLDYgKzM2MSwyNCBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGRhdGEpOwogfQogCisvKioKKyAqIGkyY19sb2NrX2FkYXB0ZXIgLSBQcmV2ZW50IGFjY2VzcyB0byBhbiBJMkMgYnVzIHNlZ21lbnQKKyAqIEBhZGFwdGVyOiBUYXJnZXQgSTJDIGJ1cyBzZWdtZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfbG9ja19hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKKy8qKgorICogaTJjX3VubG9ja19hZGFwdGVyIC0gUmVhdXRob3JpemUgYWNjZXNzIHRvIGFuIEkyQyBidXMgc2VnbWVudAorICogQGFkYXB0ZXI6IFRhcmdldCBJMkMgYnVzIHNlZ21lbnQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGkyY191bmxvY2tfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5idXNfbG9jayk7Cit9CisKIC8qZmxhZ3MgZm9yIHRoZSBjbGllbnQgc3RydWN0OiAqLwogI2RlZmluZSBJMkNfQ0xJRU5UX1BFQwkweDA0CQkvKiBVc2UgUGFja2V0IEVycm9yIENoZWNraW5nICovCiAjZGVmaW5lIEkyQ19DTElFTlRfVEVOCTB4MTAJCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCmluZGV4IDJkMDJkZmQuLjUwODgyNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCkBAIC0zNDksMTEgKzM0OSwxMSBAQAogCWludAkJaXJxX2xpbmU7CiB9OwogCi0vKiBCb2FyZHMgaGF2ZSB1bmlxZSBtYXBwaW5ncyBvZiB7Y29sLCByb3d9IC0tPiBrZXljb2RlLgotICogQ29sdW1uIGFuZCByb3cgYXJlIDQgYml0cywgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgorLyogQm9hcmRzIGhhdmUgdW5pcWUgbWFwcGluZ3Mgb2Yge3JvdywgY29sfSAtLT4ga2V5Y29kZS4KKyAqIENvbHVtbiBhbmQgcm93IGFyZSA4IGJpdHMgZWFjaCwgYnV0IHJhbmdlIG9ubHkgZnJvbSAwLi43LgogICogYSBQRVJTSVNURU5UX0tFWSBpcyAiYWx3YXlzIG9uIiBhbmQgbmV2ZXIgcmVwb3J0ZWQuCiAgKi8KLSNkZWZpbmUgUEVSU0lTVEVOVF9LRVkoYywgcikJS0VZKChjKSwgKHIpLCBLRVlfUkVTRVJWRUQpCisjZGVmaW5lIFBFUlNJU1RFTlRfS0VZKHIsIGMpCUtFWSgociksIChjKSwgS0VZX1JFU0VSVkVEKQogCiBzdHJ1Y3QgdHdsNDAzMF9rZXlwYWRfZGF0YSB7CiAJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDQwMGFkYmIuLmZmOGJkZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC0yNzEsNiArMjcxLDcgQEAKICNlbHNlIC8qIE1PRFVMRSAqLwogCiAvKiBEb24ndCB1c2UgdGhlc2UgaW4gbW9kdWxlcywgYnV0IHNvbWUgcGVvcGxlIGRvLi4uICovCisjZGVmaW5lIGVhcmx5X2luaXRjYWxsKGZuKQkJbW9kdWxlX2luaXQoZm4pCiAjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgcG9zdGNvcmVfaW5pdGNhbGwoZm4pCQltb2R1bGVfaW5pdChmbikKICNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikJCW1vZHVsZV9pbml0KGZuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDBjY2ZjMzAuLmMyYjFhN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTEzNzcsNiArMTM3NywxMCBAQAogICogbWV0aG9kczsgZXJhc2UoKSBpcyBvcHRpb25hbC4gc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBuZWVkCiAgKiBvbmx5IGJlIGltcGxlbWVudGVkIGlmIGRyaXZlciBzZXRzIHVwIEZGX0dBSU4gYW5kIEZGX0FVVE9DRU5URVIKICAqIGJpdHMuCisgKgorICogTm90ZSB0aGF0IHBsYXliYWNrKCksIHNldF9nYWluKCkgYW5kIHNldF9hdXRvY2VudGVyKCkgYXJlIGNhbGxlZCB3aXRoCisgKiBkZXYtPmV2ZW50X2xvY2sgc3BpbmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBvZmYgYW5kIHRodXMgbWF5IG5vdAorICogc2xlZXAuCiAgKi8KIHN0cnVjdCBmZl9kZXZpY2UgewogCWludCAoKnVwbG9hZCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmZfZWZmZWN0ICplZmZlY3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBiNzhjZjgxLi43Y2E3MmI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KICNpbmNsdWRlIDxsaW51eC9pcnFuci5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CkBAIC02MTAsNiArNjA5LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19wb2xsX2FsbF9zaGFyZWRfaXJxcyh2b2lkKSB7IH0KICNlbmRpZgogCitzdHJ1Y3Qgc2VxX2ZpbGU7CiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdik7CiAKIHN0cnVjdCBpcnFfZGVzYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjLmggYi9pbmNsdWRlL2xpbnV4L2lwYy5oCmluZGV4IGI4ODI2MTAuLjNiMTU5NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcGMuaApAQCAtNzgsOCArNzgsNiBAQAogI2RlZmluZSBJUENDQUxMKHZlcnNpb24sb3ApCSgodmVyc2lvbik8PDE2IHwgKG9wKSkKIAogI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjZGVmaW5lIElQQ01OSSAzMjc2OCAgLyogPD0gTUFYX0lOVCBsaW1pdCBmb3IgaXBjIGFycmF5cyAoaW5jbHVkaW5nIHN5c2N0bCBjaGFuZ2VzKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2piZDIuaAppbmRleCA1MjY5NWQzLi5mMTAxMWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZDIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZDIuaApAQCAtNDY0LDkgKzQ2NCw5IEBACiAgKi8KIHN0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfcyB7CiAJdW5zaWduZWQgbG9uZwkJY3NfY2hwX3RpbWU7Ci0JdW5zaWduZWQgbG9uZwkJY3NfZm9yY2VkX3RvX2Nsb3NlOwotCXVuc2lnbmVkIGxvbmcJCWNzX3dyaXR0ZW47Ci0JdW5zaWduZWQgbG9uZwkJY3NfZHJvcHBlZDsKKwlfX3UzMgkJCWNzX2ZvcmNlZF90b19jbG9zZTsKKwlfX3UzMgkJCWNzX3dyaXR0ZW47CisJX191MzIJCQljc19kcm9wcGVkOwogfTsKIAogLyogVGhlIHRyYW5zYWN0aW9uX3QgdHlwZSBpcyB0aGUgZ3V0cyBvZiB0aGUgam91cm5hbGluZyBtZWNoYW5pc20uICBJdApAQCAtNjY4LDIzICs2NjgsMTYgQEAKIAl1bnNpZ25lZCBsb25nCQlyc19mbHVzaGluZzsKIAl1bnNpZ25lZCBsb25nCQlyc19sb2dnaW5nOwogCi0JdW5zaWduZWQgbG9uZwkJcnNfaGFuZGxlX2NvdW50OwotCXVuc2lnbmVkIGxvbmcJCXJzX2Jsb2NrczsKLQl1bnNpZ25lZCBsb25nCQlyc19ibG9ja3NfbG9nZ2VkOworCV9fdTMyCQkJcnNfaGFuZGxlX2NvdW50OworCV9fdTMyCQkJcnNfYmxvY2tzOworCV9fdTMyCQkJcnNfYmxvY2tzX2xvZ2dlZDsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbl9zdGF0c19zIHsKLQlpbnQgCQkJdHNfdHlwZTsKIAl1bnNpZ25lZCBsb25nCQl0c190aWQ7Ci0JdW5pb24gewotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwotCQlzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgY2hwOwotCX0gdTsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb25fcnVuX3N0YXRzX3MgcnVuOwogfTsKIAotI2RlZmluZSBKQkQyX1NUQVRTX1JVTgkJMQotI2RlZmluZSBKQkQyX1NUQVRTX0NIRUNLUE9JTlQJMgotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGpiZDJfdGltZV9kaWZmKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtOTg4LDEyICs5ODEsNiBAQAogCS8qCiAJICogSm91cm5hbCBzdGF0aXN0aWNzCiAJICovCi0Jc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3MgKmpfaGlzdG9yeTsKLQlpbnQJCQlqX2hpc3RvcnlfbWF4OwotCWludAkJCWpfaGlzdG9yeV9jdXI7Ci0JLyoKLQkgKiBQcm90ZWN0IHRoZSB0cmFuc2FjdGlvbnMgc3RhdGlzdGljcyBoaXN0b3J5Ci0JICovCiAJc3BpbmxvY2tfdAkJal9oaXN0b3J5X2xvY2s7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpqX3Byb2NfZW50cnk7CiAJc3RydWN0IHRyYW5zYWN0aW9uX3N0YXRzX3Mgal9zdGF0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IGQzY2QyM2YuLmY0ZTMxODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNjU5LDYgKzY1OSwxMiBAQAogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCisjaWZuZGVmIF9fRVhQT1JURURfSEVBREVSU19fCisjaWZuZGVmIF9fS0VSTkVMX18KKyN3YXJuaW5nIEF0dGVtcHQgdG8gdXNlIGtlcm5lbCBoZWFkZXJzIGZyb20gdXNlciBzcGFjZSwgc2VlIGh0dHA6Ly9rZXJuZWxuZXdiaWVzLm9yZy9LZXJuZWxIZWFkZXJzCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRVhQT1JURURfSEVBREVSU19fICovCisKICNkZWZpbmUgU0lfTE9BRF9TSElGVAkxNgogc3RydWN0IHN5c2luZm8gewogCWxvbmcgdXB0aW1lOwkJCS8qIFNlY29uZHMgc2luY2UgYm9vdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcmVmLmggYi9pbmNsdWRlL2xpbnV4L2tyZWYuaAppbmRleCAwY2VmNmJhLi5iMGNiMGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tyZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tyZWYuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfS1JFRl9IXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIHN0cnVjdCBrcmVmIHsKIAlhdG9taWNfdCByZWZjb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDc2MzE5YmYuLjg3Njk4NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNDE4LDYgKzQxOCwxNyBAQAogCQkJCSAgQVRBX1RJTUlOR19BQ1RJVkUgfCBBVEFfVElNSU5HX1JFQ09WRVIgfAogCQkJCSAgQVRBX1RJTUlOR19ETUFDS19IT0xEIHwgQVRBX1RJTUlOR19DWUNMRSB8CiAJCQkJICBBVEFfVElNSU5HX1VETUEsCisKKwkvKiBBQ1BJIGNvbnN0YW50cyAqLworCUFUQV9BQ1BJX0ZJTFRFUl9TRVRYRkVSCT0gMSA8PCAwLAorCUFUQV9BQ1BJX0ZJTFRFUl9MT0NLCT0gMSA8PCAxLAorCUFUQV9BQ1BJX0ZJTFRFUl9ESVBNCT0gMSA8PCAyLAorCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9PRkZTRVQgPSAxIDw8IDMsCS8qIEZQRE1BIG5vbi16ZXJvIG9mZnNldCAqLworCUFUQV9BQ1BJX0ZJTFRFUl9GUERNQV9BQSA9IDEgPDwgNCwJLyogRlBETUEgYXV0byBhY3RpdmF0ZSAqLworCisJQVRBX0FDUElfRklMVEVSX0RFRkFVTFQJPSBBVEFfQUNQSV9GSUxURVJfU0VUWEZFUiB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfTE9DSyB8CisJCQkJICBBVEFfQUNQSV9GSUxURVJfRElQTSwKIH07CiAKIGVudW0gYXRhX3hmZXJfbWFzayB7CkBAIC01ODcsNiArNTk4LDcgQEAKICNpZmRlZiBDT05GSUdfQVRBX0FDUEkKIAlhY3BpX2hhbmRsZQkJYWNwaV9oYW5kbGU7CiAJdW5pb24gYWNwaV9vYmplY3QJKmd0Zl9jYWNoZTsKKwl1bnNpZ25lZCBpbnQJCWd0Zl9maWx0ZXI7CiAjZW5kaWYKIAkvKiBuX3NlY3RvciBpcyBDTEVBUl9CRUdJTiwgcmVhZCBjb21tZW50IGFib3ZlIENMRUFSX0JFR0lOICovCiAJdTY0CQkJbl9zZWN0b3JzOwkvKiBzaXplIG9mIGRldmljZSwgaWYgQVRBICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJjMDkwZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9zdGF0dXMuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3N0YXR1cy5oIC0tIFN0YXR1cyBMRURzIGZvciBXTTgzMXgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004MzFYX1NUQVRVU19IX18KKyNkZWZpbmUgX19NRkRfV004MzFYX1NUQVRVU19IX18KKworI2RlZmluZSBXTTgzMVhfTEVEX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweEMwMDAgIC8qIExFRF9TUkMgLSBbMTU6MTRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogTEVEX1NSQyAtIFsxNToxNF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfU1JDIC0gWzE1OjE0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX01PREVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAzMDAgIC8qIExFRF9NT0RFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBMRURfTU9ERSAtIFs5OjhdICovCisjZGVmaW5lIFdNODMxWF9MRURfTU9ERV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX01PREUgLSBbOTo4XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX1NFUV9MRU5fTUFTSyAgICAgICAgICAgICAgICAweDAwMzAgIC8qIExFRF9TRVFfTEVOIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9TRVFfTEVOX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBMRURfU0VRX0xFTiAtIFs1OjRdICovCisjZGVmaW5lIFdNODMxWF9MRURfU0VRX0xFTl9XSURUSCAgICAgICAgICAgICAgICAgICAgMiAgLyogTEVEX1NFUV9MRU4gLSBbNTo0XSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEMgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIExFRF9EVVIgLSBbMzoyXSAqLworI2RlZmluZSBXTTgzMVhfTEVEX0RVVFlfQ1lDX01BU0sgICAgICAgICAgICAgICAweDAwMDMgIC8qIExFRF9EVVRZX0NZQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODMxWF9MRURfRFVUWV9DWUNfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogTEVEX0RVVFlfQ1lDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004MzFYX0xFRF9EVVRZX0NZQ19XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBMRURfRFVUWV9DWUMgLSBbMTowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBkZjA4NTUxLi4yNGMzOTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0yODgsNyArMjg4LDcgQEAKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gaW50IGlzX3ZtYWxsb2Nfb3JfbW9kdWxlX2FkZHIoY29uc3Qgdm9pZCAqeCk7CiAjZWxzZQotc3RhdGljIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCitzdGF0aWMgaW5saW5lIGludCBpc192bWFsbG9jX29yX21vZHVsZV9hZGRyKGNvbnN0IHZvaWQgKngpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggMjFkNmFhNC4uODRhNTI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTcxLDcgKzE3MSw3IEBACiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsJLyogU2VyaWFsaXplZCBieSBwYWdlX3RhYmxlX2xvY2sgKi8KIAogCS8qIEZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRlYWwgd2l0aCB0aGlzIHN0cnVjdC4gKi8KLQlzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKiB2bV9vcHM7CisJY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICp2bV9vcHM7CiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCBvdXIgYmFja2luZyBzdG9yZTogKi8KIAl1bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwkJLyogT2Zmc2V0ICh3aXRoaW4gdm1fZmlsZSkgaW4gUEFHRV9TSVpFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggODFiYjQyMy4uZWFmMzYzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSU5VWF9NTUNfSE9TVF9ICiAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCA2NTQ3YzNjLi44MmE5MTI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIGludCAoKnBhcmFtX2dldF9mbikoY2hhciAqYnVmZmVyLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7CiAKIC8qIEZsYWcgYml0cyBmb3Iga2VybmVsX3BhcmFtLmZsYWdzICovCi0jZGVmaW5lIEtQQVJBTV9LTUFMTE9DRUQJMQogI2RlZmluZSBLUEFSQU1fSVNCT09MCQkyCiAKIHN0cnVjdCBrZXJuZWxfcGFyYW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggZjZiOTAyNC4uZDA5ZGIxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC00MCw3ICs0MCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCA3OWZlYzZhLi5jZTUyMDQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTQyNSwxNSArNDI1LDYgQEAKIH07CiAKIC8qKgotICogc3RydWN0IG5pbGZzX2RhdF9ncm91cF9kZXNjIC0gYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcgotICogQGRnX25mcmVlczogbnVtYmVyIG9mIGZyZWUgdmlydHVhbCBibG9jayBudW1iZXJzIGluIGJsb2NrIGdyb3VwCi0gKi8KLXN0cnVjdCBuaWxmc19kYXRfZ3JvdXBfZGVzYyB7Ci0JX19sZTMyIGRnX25mcmVlczsKLX07Ci0KLQotLyoqCiAgKiBzdHJ1Y3QgbmlsZnNfc25hcHNob3RfbGlzdCAtIHNuYXBzaG90IGxpc3QKICAqIEBzc2xfbmV4dDogbmV4dCBjaGVja3BvaW50IG51bWJlciBvbiBzbmFwc2hvdCBsaXN0CiAgKiBAc3NsX3ByZXY6IHByZXZpb3VzIGNoZWNrcG9pbnQgbnVtYmVyIG9uIHNuYXBzaG90IGxpc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggZGExZmRhOC4uODRjZjFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTM3OSw5ICszNzksNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFCTB4NDM4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA3MDBfU0FUQQkweDQzOTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNzAwX0lERQkweDQzOWMKLS8qIEFNRCBTQiBDaGlwc2V0ICovCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX0lERQkgMHg3ODBjCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NBVEFfSURFIDB4NzgwMAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVkxTSQkJMHgxMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIJMHgwMDA1CkBAIC00ODUsNiArNDgyLDkgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNX1BDSUUgMHgwMzYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fRk9VUl9QT1JUX01PREVMCTB4MjUyCiAKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9JQk0JCTB4MTAxNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0lCTV9TQVRVUk5fU0VSSUFMX09ORV9QT1JUCTB4MDNkNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU5JU1lTCQkweDEwMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTklTWVNfRE1BX0RJUkVDVE9SIDB4MDAxQwogCkBAIC01NDMsNyArNTQzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9CUklER0UJMHg3NDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQVBJQwkweDc0NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMl9CUklER0UJMHg3NDU4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1NCOTAwX1NNQlVTCTB4NzgwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX1NNQlVTCTB4NzgwYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzVfSURFICAgIDB4MjA4RgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBICAgIDB4MjA5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggIDB4MjA5MQpAQCAtNTUzLDkgKzU1MywxMCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVURDICAgIDB4MjA5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfVU9DICAgIDB4MjA5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSURFICAgIDB4MjA5QQotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX1ZJREVPICAweDIwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTICAgIDB4MjA4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9IVURTT04yX0lERQkJMHg3ODBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0hVRFNPTjJfU0FUQV9JREUJMHg3ODAwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UCQkweDEwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWAkweDIwMDAKQEAgLTc3Niw2ICs3NzcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g1MTUJCTB4ODAzNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTIJCTB4ODAzOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTJfRk0JMHg4MDNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWElPMjAwMEEJMHg4MjMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMAkJMHhhYzEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTAzMQkJMHhhYzEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMQkJMHhhYzE1CkBAIC0xOTU0LDYgKzE5NTYsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFNFUklBTAkweDAxMDAgLyogMnggMTY1NTAgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19BCTB4MDEwMSAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CCTB4MDEwMiAvKiAyeCAxNjU1MCwgaGFsZiBvZiA0IHBvcnQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRUUk9fQQkweDAxMjAgLyogMnggMTY1NTBBLCBoYWxmIG9mIDQgcG9ydCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFRST19CCTB4MDEyMSAvKiAyeCAxNjU1MEEsIGhhbGYgb2YgNCBwb3J0ICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EJMHgwMTgwIC8qIDR4IDE2NTUwQSwgaGFsZiBvZiA4IHBvcnQgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQgkweDAxODEgLyogNHggMTY1NTBBLCBoYWxmIG9mIDggcG9ydCAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF9QTFVTCTB4MDIwMCAvKiAyeCAxNjY1MCAqLwpAQCAtMjE2MSw2ICsyMTY1LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSTc0MjBfMyAgICAgIDB4NzAwRAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0k3MzAwXzMgICAgICAweDcwMEUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJNzgwMF8zICAgICAgMHg3MDBGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3MzAwICAgICAgIDB4NzAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FERElEQVRBX0FQQ0llNzQyMCAgICAgICAweDcwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRERJREFUQV9BUENJZTc1MDAgICAgICAgMHg3MDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURESURBVEFfQVBDSWU3ODAwICAgICAgIDB4NzAxMwogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUERDCQkweDE1ZTkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9jb3VudGVyLmgKaW5kZXggMzY4YmQ3MC4uN2I3ZmJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfY291bnRlci5oCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX0VWRU5UX0ZPUksJCQk9IDcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IGFjZWZhZjcuLjllNzAxMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0zNTcsNyArMzU3LDcgQEAKIAkgKglzdHJ1Y3QgcGVyZl9ldmVudF9oZWFkZXIJaGVhZGVyOwogCSAqCXUzMgkJCQlwaWQsIHBwaWQ7CiAJICoJdTMyCQkJCXRpZCwgcHRpZDsKLQkgKgl7IHU2NAkJCQl0aW1lOyAgICAgfSAmJiBQRVJGX1NBTVBMRV9USU1FCisJICoJdTY0CQkJCXRpbWU7CiAJICogfTsKIAkgKi8KIAlQRVJGX1JFQ09SRF9GT1JLCQkJPSA3LApAQCAtNDQyLDYgKzQ0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2RlZmluZSBQRVJGX01BWF9TVEFDS19ERVBUSAkJMjU1CkBAIC00NzAsOCArNDcxLDggQEAKIAkJCXVuc2lnbmVkIGxvbmcJZXZlbnRfYmFzZTsKIAkJCWludAkJaWR4OwogCQl9OwotCQl1bmlvbiB7IC8qIHNvZnR3YXJlICovCi0JCQlhdG9taWM2NF90CWNvdW50OworCQlzdHJ1Y3QgeyAvKiBzb2Z0d2FyZSAqLworCQkJczY0CQlyZW1haW5pbmc7CiAJCQlzdHJ1Y3QgaHJ0aW1lcglocnRpbWVyOwogCQl9OwogCX07CkBAIC01MTMsNiArNTE0LDEwIEBACiAKIHN0cnVjdCBwZXJmX21tYXBfZGF0YSB7CiAJc3RydWN0IHJjdV9oZWFkCQkJcmN1X2hlYWQ7CisjaWZkZWYgQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0MKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcms7CisjZW5kaWYKKwlpbnQJCQkJZGF0YV9vcmRlcjsKIAlpbnQJCQkJbnJfcGFnZXM7CS8qIG5yIG9mIGRhdGEgcGFnZXMgICovCiAJaW50CQkJCXdyaXRhYmxlOwkvKiBhcmUgd2Ugd3JpdGFibGUgICAqLwogCWludAkJCQlucl9sb2NrZWQ7CS8qIG5yIHBhZ2VzIG1sb2NrZWQgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvbGwuaCBiL2luY2x1ZGUvbGludXgvcG9sbC5oCmluZGV4IGZhMjg3ZjIuLjY2NzM3NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9sbC5oCkBAIC02LDEwICs2LDEwIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogLyogfjgzMiBieXRlcyBvZiBzdGFjayBzcGFjZSB1c2VkIG1heCBpbiBzeXNfc2VsZWN0L3N5c19wb2xsIGJlZm9yZSBhbGxvY2F0aW5nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL2xpbnV4L3ByY3RsLmgKaW5kZXggOTMxMTUwNS4uYTNiYWViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmN0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJjdGwuaApAQCAtODgsNiArODgsMTggQEAKICNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFCQkzMQogI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQkJMzIKIAorLyoKKyAqIFNldCBlYXJseS9sYXRlIGtpbGwgbW9kZSBmb3IgaHdwb2lzb24gbWVtb3J5IGNvcnJ1cHRpb24uCisgKiBUaGlzIGluZmx1ZW5jZXMgd2hlbiB0aGUgcHJvY2VzcyBnZXRzIGtpbGxlZCBvbiBhIG1lbW9yeSBjb3JydXB0aW9uLgorICovCiAjZGVmaW5lIFBSX01DRV9LSUxMCTMzCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAgICAgMQorCisjIGRlZmluZSBQUl9NQ0VfS0lMTF9MQVRFICAgIDAKKyMgZGVmaW5lIFBSX01DRV9LSUxMX0VBUkxZICAgMQorIyBkZWZpbmUgUFJfTUNFX0tJTExfREVGQVVMVCAyCisKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CiAKICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW1mcy5oIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCmluZGV4IDM3YWFmMmIuLjRlNzY4ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFtZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdlbmVyaWNfZmlsZV92bV9vcHM7CiBleHRlcm4gaW50IF9faW5pdCBpbml0X3Jvb3Rmcyh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggNmZlMDM2My4uM2ViZDBiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNzcsNyArNzcsNyBAQAogI2Vycm9yICJVbmtub3duIFJDVSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24iCiAjZW5kaWYKIAotI2RlZmluZSBSQ1VfSEVBRF9JTklUIAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KKyNkZWZpbmUgUkNVX0hFQURfSU5JVAl7IC5uZXh0ID0gTlVMTCwgLmZ1bmMgPSBOVUxMIH0KICNkZWZpbmUgUkNVX0hFQUQoaGVhZCkgc3RydWN0IHJjdV9oZWFkIGhlYWQgPSBSQ1VfSEVBRF9JTklUCiAjZGVmaW5lIElOSVRfUkNVX0hFQUQocHRyKSBkbyB7IFwKICAgICAgICAocHRyKS0+bmV4dCA9IE5VTEw7IChwdHIpLT5mdW5jID0gTlVMTDsgXApAQCAtMTI5LDEyICsxMjksNiBAQAogCXJjdV9yZWFkX2FjcXVpcmUoKTsKIH0KIAotLyoqCi0gKiByY3VfcmVhZF91bmxvY2sgLSBtYXJrcyB0aGUgZW5kIG9mIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqCi0gKiBTZWUgcmN1X3JlYWRfbG9jaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICovCi0KIC8qCiAgKiBTbyB3aGVyZSBpcyByY3Vfd3JpdGVfbG9jaygpPyAgSXQgZG9lcyBub3QgZXhpc3QsIGFzIHRoZXJlIGlzIG5vCiAgKiB3YXkgZm9yIHdyaXRlcnMgdG8gbG9jayBvdXQgUkNVIHJlYWRlcnMuICBUaGlzIGlzIGEgZmVhdHVyZSwgbm90CkBAIC0xNDQsNiArMTM4LDEyIEBACiAgKiB1c2VkIGFzIHdlbGwuICBSQ1UgZG9lcyBub3QgY2FyZSBob3cgdGhlIHdyaXRlcnMga2VlcCBvdXQgb2YgZWFjaAogICogb3RoZXJzJyB3YXksIGFzIGxvbmcgYXMgdGhleSBkbyBzby4KICAqLworCisvKioKKyAqIHJjdV9yZWFkX3VubG9jayAtIG1hcmtzIHRoZSBlbmQgb2YgYW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLgorICoKKyAqIFNlZSByY3VfcmVhZF9sb2NrKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCByY3VfcmVhZF91bmxvY2sodm9pZCkKIHsKIAlyY3VfcmVhZF9yZWxlYXNlKCk7CkBAIC0xOTYsNiArMTk2LDggQEAKIAlfX2FjcXVpcmUoUkNVX1NDSEVEKTsKIAlyY3VfcmVhZF9hY3F1aXJlKCk7CiB9CisKKy8qIFVzZWQgYnkgbG9ja2RlcCBhbmQgdHJhY2luZzogY2Fubm90IGJlIHRyYWNlZCwgY2Fubm90IGNhbGwgbG9ja2RlcC4gKi8KIHN0YXRpYyBpbmxpbmUgbm90cmFjZSB2b2lkIHJjdV9yZWFkX2xvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7CkBAIC0yMTMsNiArMjE1LDggQEAKIAlfX3JlbGVhc2UoUkNVX1NDSEVEKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQorCisvKiBVc2VkIGJ5IGxvY2tkZXAgYW5kIHRyYWNpbmc6IGNhbm5vdCBiZSB0cmFjZWQsIGNhbm5vdCBjYWxsIGxvY2tkZXAuICovCiBzdGF0aWMgaW5saW5lIG5vdHJhY2Ugdm9pZCByY3VfcmVhZF91bmxvY2tfc2NoZWRfbm90cmFjZSh2b2lkKQogewogCV9fcmVsZWFzZShSQ1VfU0NIRUQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCAzNzY4Mjc3Li45NjQyYzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtMzAsMTAgKzMwLDE0IEBACiAjaWZuZGVmIF9fTElOVVhfUkNVVFJFRV9ICiAjZGVmaW5lIF9fTElOVVhfUkNVVFJFRV9ICiAKK3N0cnVjdCBub3RpZmllcl9ibG9jazsKKwogZXh0ZXJuIHZvaWQgcmN1X3NjaGVkX3FzKGludCBjcHUpOwogZXh0ZXJuIHZvaWQgcmN1X2JoX3FzKGludCBjcHUpOwotCitleHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwogZXh0ZXJuIGludCByY3VfbmVlZHNfY3B1KGludCBjcHUpOworZXh0ZXJuIGludCByY3VfZXhwZWRpdGVkX3RvcnR1cmVfc3RhdHMoY2hhciAqcGFnZSk7CiAKICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQogCkBAIC03MiwxMSArNzYsNyBAQAogCiBleHRlcm4gdm9pZCBjYWxsX3JjdV9zY2hlZChzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCiAJCQkgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKLQotc3RhdGljIGlubGluZSB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCkKLXsKLQlzeW5jaHJvbml6ZV9zY2hlZF9leHBlZGl0ZWQoKTsKLX0KK2V4dGVybiB2b2lkIHN5bmNocm9uaXplX3JjdV9leHBlZGl0ZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5jaHJvbml6ZV9yY3VfYmhfZXhwZWRpdGVkKHZvaWQpCiB7CkBAIC04NSwxNiArODUsMTEgQEAKIAogZXh0ZXJuIHZvaWQgX19yY3VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHJjdV9jaGVja19jYWxsYmFja3MoaW50IGNwdSwgaW50IHVzZXIpOwotZXh0ZXJuIHZvaWQgcmN1X3Jlc3RhcnRfY3B1KGludCBjcHUpOwogCiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfYmgodm9pZCk7CiBleHRlcm4gbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByY3VfaW5pdF9zY2hlZCh2b2lkKQotewotfQotCiAjaWZkZWYgQ09ORklHX05PX0haCiB2b2lkIHJjdV9lbnRlcl9ub2h6KHZvaWQpOwogdm9pZCByY3VfZXhpdF9ub2h6KHZvaWQpOwpAQCAtMTA3LDcgKzEwMiw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX05PX0haICovCiAKLS8qIEEgY29udGV4dCBzd2l0Y2ggaXMgYSBncmFjZSBwZXJpb2QgZm9yIHJjdXRyZWUuICovCisvKiBBIGNvbnRleHQgc3dpdGNoIGlzIGEgZ3JhY2UgcGVyaW9kIGZvciBSQ1Utc2NoZWQgYW5kIFJDVS1iaC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJjdV9ibG9ja2luZ19pc19ncCh2b2lkKQogewogCXJldHVybiBudW1fb25saW5lX2NwdXMoKSA9PSAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCmluZGV4IDczMWFmNzEuLmZjYjk4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKQEAgLTExNCw4ICsxMTQsNyBAQAogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwKIAkJdW5zaWduZWQgbG9uZyB2YWwpOwogaW50IF9fbXVzdF9jaGVjayByZXNfY291bnRlcl9jaGFyZ2Uoc3RydWN0IHJlc19jb3VudGVyICpjb3VudGVyLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCwKLQkJc3RydWN0IHJlc19jb3VudGVyICoqc29mdF9saW1pdF9hdCk7CisJCXVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgcmVzX2NvdW50ZXIgKipsaW1pdF9mYWlsX2F0KTsKIAogLyoKICAqIHVuY2hhcmdlIC0gdGVsbCB0aGF0IHNvbWUgcG9ydGlvbiBvZiB0aGUgcmVzb3VyY2UgaXMgcmVsZWFzZWQKQEAgLTEyOCw4ICsxMjcsNyBAQAogICovCiAKIHZvaWQgcmVzX2NvdW50ZXJfdW5jaGFyZ2VfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwotdm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJCWJvb2wgKndhc19zb2Z0X2xpbWl0X2V4Y2Vzcyk7Cit2b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwpOwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfbGltaXRfY2hlY2tfbG9ja2VkKHN0cnVjdCByZXNfY291bnRlciAqY250KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IGZlNjYxYWYuLmRiNTMyY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKQEAgLTE3Niw2ICsxNzYsOSBAQAogLyogUXVhbGNvbW0gTVNNIFNvQ3MgKi8KICNkZWZpbmUgUE9SVF9NU00JODgKIAorLyogQkNNNjN4eCBmYW1pbHkgU29DcyAqLworI2RlZmluZSBQT1JUX0JDTTYzWFgJODkKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1ZDI1NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogbG1zMjgzZ2YwNS5oIC0gUGxhdGZvcm0gZ2x1ZSBmb3IgU2Ftc3VuZyBMTVMyODNHRjA1IExDRAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpZm5kZWYgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKyNkZWZpbmUgX0lOQ0xVREVfTElOVVhfU1BJX0xNUzI4M0dGMDVfSF8KKworc3RydWN0IGxtczI4M2dmMDVfcGRhdGEgeworCXVuc2lnbmVkIGxvbmcJcmVzZXRfZ3BpbzsKKwlib29sCQlyZXNldF9pbnZlcnRlZDsKK307CisKKyNlbmRpZiAvKiBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggNDg5MDE5ZS4uYjg1MDg4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC02Miw3ICs2Miw3IEBACiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NUUlJDSFIKIGV4dGVybiBjaGFyICogc3RycmNocihjb25zdCBjaGFyICosaW50KTsKICNlbmRpZgotZXh0ZXJuIGNoYXIgKiBzdHJzdHJpcChjaGFyICopOworZXh0ZXJuIGNoYXIgKiBfX211c3RfY2hlY2sgc3Ryc3RyaXAoY2hhciAqKTsKICNpZm5kZWYgX19IQVZFX0FSQ0hfU1RSU1RSCiBleHRlcm4gY2hhciAqIHN0cnN0cihjb25zdCBjaGFyICosY29uc3QgY2hhciAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAppbmRleCBjZDE1ZGY2Li41ZTc4MWQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaApAQCAtMzAxLDYgKzMwMSw4IEBACiAjZGVmaW5lIHBtX25vdGlmaWVyKGZuLCBwcmkpCWRvIHsgKHZvaWQpKGZuKTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhQ09ORklHX1BNX1NMRUVQICovCiAKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggcG1fbXV0ZXg7CisKICNpZm5kZWYgQ09ORklHX0hJQkVSTkFUSU9OCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnaXN0ZXJfbm9zYXZlX3JlZ2lvbih1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgZSkKIHsKQEAgLTMwOCw4ICszMTAsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ub3NhdmVfcmVnaW9uX2xhdGUodW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nIGUpCiB7CiB9Ci0jZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCBtdXRleCBwbV9tdXRleDsKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N5c3RlbV9zbGVlcCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19zeXN0ZW1fc2xlZXAodm9pZCkge30KKworI2Vsc2UKKworLyogTGV0IHNvbWUgc3Vic3lzdGVtcyBsaWtlIG1lbW9yeSBob3RhZGQgZXhjbHVkZSBoaWJlcm5hdGlvbiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zeXN0ZW1fc2xlZXAodm9pZCkKK3sKKwltdXRleF9sb2NrKCZwbV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc3lzdGVtX3NsZWVwKHZvaWQpCit7CisJbXV0ZXhfdW5sb2NrKCZwbV9tdXRleCk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBmYzBiZjNlLi41N2U2MzU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0xMjksNyArMTI5LDcgQEAKIAkJCQl8IDEqU0RfQkFMQU5DRV9GT1JLCQkJXAogCQkJCXwgMCpTRF9CQUxBTkNFX1dBS0UJCQlcCiAJCQkJfCAxKlNEX1dBS0VfQUZGSU5FCQkJXAotCQkJCXwgMSpTRF9QUkVGRVJfTE9DQUwJCQlcCisJCQkJfCAwKlNEX1BSRUZFUl9MT0NBTAkJCVwKIAkJCQl8IDAqU0RfU0hBUkVfQ1BVUE9XRVIJCQlcCiAJCQkJfCAxKlNEX1NIQVJFX1BLR19SRVNPVVJDRVMJCVwKIAkJCQl8IDAqU0RfU0VSSUFMSVpFCQkJXApAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJfCAxKlNEX0JBTEFOQ0VfRk9SSwkJCVwKIAkJCQl8IDAqU0RfQkFMQU5DRV9XQUtFCQkJXAogCQkJCXwgMSpTRF9XQUtFX0FGRklORQkJCVwKLQkJCQl8IDEqU0RfUFJFRkVSX0xPQ0FMCQkJXAorCQkJCXwgMCpTRF9QUkVGRVJfTE9DQUwJCQlcCiAJCQkJfCAwKlNEX1NIQVJFX0NQVVBPV0VSCQkJXAogCQkJCXwgMCpTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTCQlcCiAJCQkJfCAwKlNEX1NFUklBTElaRQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlX3NlcS5oCmluZGV4IGMxMzRkZDEuLjA5MDc3ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vfc2VxLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9zZXEuaApAQCAtNyw3ICs3LDcgQEAKIAogLyoKICAqIFRyYWNlIHNlcXVlbmNlcyBhcmUgdXNlZCB0byBhbGxvdyBhIGZ1bmN0aW9uIHRvIGNhbGwgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMKLSAqIHRvIGNyZWF0ZSBhIHN0cmluZyBvZiBkYXRhIHRvIHVzZSAodXAgdG8gYSBtYXggb2YgUEFHRV9TSVpFLgorICogdG8gY3JlYXRlIGEgc3RyaW5nIG9mIGRhdGEgdG8gdXNlICh1cCB0byBhIG1heCBvZiBQQUdFX1NJWkUpLgogICovCiAKIHN0cnVjdCB0cmFjZV9zZXEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCA2NjBhOWRlLi4yYWFjOGE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMzYsNyArMzYsNyBAQAogI2lmbmRlZiBERUNMQVJFX1RSQUNFCiAKICNkZWZpbmUgVFBfUFJPVE8oYXJncy4uLikJYXJncwotI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCQlhcmdzCisjZGVmaW5lIFRQX0FSR1MoYXJncy4uLikJYXJncwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggMzU2NjEyOS4uYjA4Njc3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTQ1LDggKzQ1LDE2IEBACiAgKgogICogdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CiAgKgotICogCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZSBpcyBjbG9zZWQgZm9yCi0gKgl0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqIAlUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgd2hlbiBhIHBhcnRpY3VsYXIgdHR5IGRldmljZQorICoJaXMgY2xvc2VkIGZvciB0aGUgbGFzdCB0aW1lIGZyZWVpbmcgdXAgdGhlIHJlc291cmNlcy4KKyAqCisgKgorICogdm9pZCAoKmNsZWFudXApKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKKyAqCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5IHdoZW4gYSBwYXJ0aWN1bGFyIHR0eSBkZXZpY2UKKyAqCWlzIGNsb3NlZCBmb3IgdGhlIGxhc3QgdGltZSBmcmVlaW5nIHVwIHRoZSByZXNvdXJjZXMuIFRoaXMgaXMKKyAqCWFjdHVhbGx5IHRoZSBzZWNvbmQgcGFydCBvZiBzaHV0ZG93biBmb3Igcm91dGluZXMgdGhhdCBtaWdodCBzbGVlcC4KKyAqCiAgKgogICogaW50ICgqd3JpdGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAogICogCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwpAQCAtMjMzLDYgKzI0MSw3IEBACiAJaW50ICAoKm9wZW4pKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlscCk7CiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAJaW50ICAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpOwogCWludCAgKCpwdXRfY2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IGMxN2ViNjQuLmNlOTExZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xNTAsNiArMTUwLDcgQEAKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkJKmludGVyZmFjZTsKIAl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CiAJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKKwl1bnNpZ25lZCBjaGFyCQkJYXR0YWNoZWQ6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaAppbmRleCBlYTcyMjZhLi4wOTVlMTBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9WSVJUSU9fOVBfSAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLworI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAKIC8qIE1heGltdW0gbnVtYmVyIG9mIHZpcnRpbyBjaGFubmVscyBwZXIgcGFydGl0aW9uICgxIGZvciBub3cpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19iYWxsb29uLmgKaW5kZXggMDlkNzMwMC4uMTQxOGYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fYmFsbG9vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2JhbGxvb24uaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19CQUxMT09OX0gKIC8qIFRoaXMgaGVhZGVyIGlzIEJTRCBsaWNlbnNlZCBzbyBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50CiAgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4gKi8KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCiAvKiBUaGUgZmVhdHVyZSBiaXRtYXAgZm9yIHZpcnRpbyBiYWxsb29uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ibGsuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCmluZGV4IDE1Y2I2NjYuLmZkMjk0YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2Jsay5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogLyogRmVhdHVyZSBiaXRzICovCkBAIC0xMywxMSArMTQsOCBAQAogI2RlZmluZSBWSVJUSU9fQkxLX0ZfUk8JCTUJLyogRGlzayBpcyByZWFkLW9ubHkgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0JMS19TSVpFCTYJLyogQmxvY2sgc2l6ZSBvZiBkaXNrIGlzIGF2YWlsYWJsZSovCiAjZGVmaW5lIFZJUlRJT19CTEtfRl9TQ1NJCTcJLyogU3VwcG9ydHMgc2NzaSBjb21tYW5kIHBhc3N0aHJ1ICovCi0jZGVmaW5lIFZJUlRJT19CTEtfRl9JREVOVElGWQk4CS8qIEFUQSBJREVOVElGWSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgVklSVElPX0JMS19GX0ZMVVNICTkJLyogQ2FjaGUgZmx1c2ggY29tbWFuZCBzdXBwb3J0ICovCiAKLSNkZWZpbmUgVklSVElPX0JMS19JRF9CWVRFUwkoc2l6ZW9mKF9fdTE2WzI1Nl0pKQkvKiBJREVOVElGWSBEQVRBICovCi0KIHN0cnVjdCB2aXJ0aW9fYmxrX2NvbmZpZyB7CiAJLyogVGhlIGNhcGFjaXR5IChpbiA1MTItYnl0ZSBzZWN0b3JzKS4gKi8KIAlfX3U2NCBjYXBhY2l0eTsKQEAgLTMzLDcgKzMxLDYgQEAKIAl9IGdlb21ldHJ5OwogCS8qIGJsb2NrIHNpemUgb2YgZGV2aWNlIChpZiBWSVJUSU9fQkxLX0ZfQkxLX1NJWkUpICovCiAJX191MzIgYmxrX3NpemU7Ci0JX191OCBpZGVudGlmeVtWSVJUSU9fQkxLX0lEX0JZVEVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKaW5kZXggYjVmNTE5OC4uZmU4ODUxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNkZWZpbmUgX0xJTlVYX1ZJUlRJT19DT05TT0xFX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19pZHMuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW9fY29uZmlnLmg+CiAvKiBUaGlzIGhlYWRlciwgZXhjbHVkaW5nIHRoZSAjaWZkZWYgX19LRVJORUxfXyBwYXJ0LCBpcyBCU0QgbGljZW5zZWQgc28KICAqIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQgY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCmluZGV4IDFmNDE3MzQuLjA4NWU0MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oCkBAIC0zLDYgKzMsNyBAQAogLyogVGhpcyBoZWFkZXIgaXMgQlNEIGxpY2Vuc2VkIHNvIGFueW9uZSBjYW4gdXNlIHRoZSBkZWZpbml0aW9ucyB0byBpbXBsZW1lbnQKICAqIGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLiAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19ybmcuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCmluZGV4IDQ4MTIxYzMuLmM0ZDVkZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlydGlvX3JuZy5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfVklSVElPX1JOR19ICiAvKiBUaGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRpb25zIHRvIGltcGxlbWVudAogICogY29tcGF0aWJsZSBkcml2ZXJzL3NlcnZlcnMuICovCisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25maWcuaD4KIAogI2VuZGlmIC8qIF9MSU5VWF9WSVJUSU9fUk5HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDdlZjBjN2IuLmNmMjRjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjA3LDYgKzIwNyw3IEBACiAKIGV4dGVybiB2b2lkIGZsdXNoX3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwogZXh0ZXJuIHZvaWQgZmx1c2hfc2NoZWR1bGVkX3dvcmsodm9pZCk7CitleHRlcm4gdm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqd29yayk7CiAKIGV4dGVybiBpbnQgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogZXh0ZXJuIGludCBzY2hlZHVsZV93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCmluZGV4IGUyNjgxMjIuLmZiMDBiMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwL2NsaWVudC5oCkBAIC0xNTksOCArMTU5LDcgQEAKICAqIEBxaWQ6IHRoZSAmcDlfcWlkIHNlcnZlciBpZGVudGlmaWVyIHRoaXMgaGFuZGxlIHBvaW50cyB0bwogICogQGlvdW5pdDogdGhlIHNlcnZlciByZXBvcnRlZCBtYXhpbXVtIHRyYW5zYWN0aW9uIHNpemUgZm9yIHRoaXMgZmlsZQogICogQHVpZDogdGhlIG51bWVyaWMgdWlkIG9mIHRoZSBsb2NhbCB1c2VyIHdobyBvd25zIHRoaXMgaGFuZGxlCi0gKiBAYXV4OiB0cmFuc3BvcnQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKHVudXNlZD8pCi0gKiBAcmRpcl9mcG9zOiB0cmFja3Mgb2Zmc2V0IG9mIGZpbGUgcG9zaXRpb24gd2hlbiByZWFkaW5nIGRpcmVjdG9yeSBjb250ZW50cworICogQHJkaXI6IHJlYWRkaXIgYWNjb3VudGluZyBzdHJ1Y3R1cmUgKGFsbG9jYXRlZCBvbiBkZW1hbmQpCiAgKiBAZmxpc3Q6IHBlci1jbGllbnQtaW5zdGFuY2UgZmlkIHRyYWNraW5nCiAgKiBAZGxpc3Q6IHBlci1kZW50cnkgZmlkIHRyYWNraW5nCiAgKgpAQCAtMTc0LDkgKzE3Myw5IEBACiAJc3RydWN0IHA5X3FpZCBxaWQ7CiAJdTMyIGlvdW5pdDsKIAl1aWRfdCB1aWQ7Ci0Jdm9pZCAqYXV4OwogCi0JaW50IHJkaXJfZnBvczsKKwl2b2lkICpyZGlyOworCiAJc3RydWN0IGxpc3RfaGVhZCBmbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRsaXN0OwkvKiBsaXN0IG9mIGFsbCBmaWRzIGF0dGFjaGVkIHRvIGEgZGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggOWEzYjQ5OC4uZTBmNmZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0yNjIsNiArMjYyLDggQEAKIAlzdHJ1Y3QgZGV2aWNlCQkJZGV2OwogCS8qIGRhdGEgaW50ZXJuYWwgdG8gdGhlIHNvY2tldCBkcml2ZXIgKi8KIAl2b2lkCQkJCSpkcml2ZXJfZGF0YTsKKwkvKiBzdGF0dXMgb2YgdGhlIGNhcmQgZHVyaW5nIHJlc3VtZSBmcm9tIGEgc3lzdGVtIHNsZWVwIHN0YXRlICovCisJaW50CQkJCXJlc3VtZV9zdGF0dXM7CiB9OwogCiAKQEAgLTI3OSw3ICsyODEsOSBAQAogZXh0ZXJuIHN0cnVjdCBwY2NhcmRfcmVzb3VyY2Vfb3BzIHBjY2FyZF9ub25zdGF0aWNfb3BzOwogCiAvKiBzb2NrZXQgZHJpdmVycyBhcmUgZXhwZWN0ZWQgdG8gdXNlIHRoZXNlIGNhbGxiYWNrcyBpbiB0aGVpciAuZHJ2IHN0cnVjdCAqLwotZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcGNtY2lhX3NvY2tldF9kZXZfZWFybHlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwY21jaWFfc29ja2V0X2Rldl9sYXRlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKIAogLyogc29ja2V0IGRyaXZlcnMgdXNlIHRoaXMgY2FsbGJhY2sgaW4gdGhlaXIgSVJRIGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKaW5kZXggODg3ZTU3ZS4uYTcyZWRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKKysrIGIvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmgKQEAgLTMwMyw2ICszMDMsNyBAQAogCWludAkJCWNtZHNfbWF4OwkvKiBzaXplIG9mIGNtZHMgYXJyYXkgKi8KIAlzdHJ1Y3QgaXNjc2lfdGFzawkqKmNtZHM7CQkvKiBPcmlnaW5hbCBDbWRzIGFyciAqLwogCXN0cnVjdCBpc2NzaV9wb29sCWNtZHBvb2w7CS8qIFBEVSdzIHBvb2wgKi8KKwl2b2lkCQkJKmRkX2RhdGE7CS8qIExMRCBwcml2YXRlIGRhdGEgKi8KIH07CiAKIGVudW0gewpAQCAtMzYzLDcgKzM2NCw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKgogaXNjc2lfc2Vzc2lvbl9zZXR1cChzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0ICosIHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LAotCQkgICAgdWludDE2X3QsIGludCwgdWludDMyX3QsIHVuc2lnbmVkIGludCk7CisJCSAgICB1aW50MTZfdCwgaW50LCBpbnQsIHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIHZvaWQgaXNjc2lfc2Vzc2lvbl90ZWFyZG93bihzdHJ1Y3QgaXNjc2lfY2xzX3Nlc3Npb24gKik7CiBleHRlcm4gdm9pZCBpc2NzaV9zZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0KHN0cnVjdCBpc2NzaV9jbHNfc2Vzc2lvbiAqKTsKIGV4dGVybiBpbnQgaXNjc2lfc2V0X3BhcmFtKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCAwODQ0NzhlLi4zNGM0NmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTEyOSw2ICsxMjksOSBAQAogI2RlZmluZSBNSV9SRVBPUlRfVEFSR0VUX1BHUyAgMHgwYQogLyogdmFsdWVzIGZvciBtYWludGVuYW5jZSBvdXQgKi8KICNkZWZpbmUgTU9fU0VUX1RBUkdFVF9QR1MgICAgIDB4MGEKKy8qIHZhbHVlcyBmb3IgdmFyaWFibGUgbGVuZ3RoIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVBRF8zMgkJICAgICAgMHgwOQorI2RlZmluZSBXUklURV8zMgkgICAgICAweDBiCiAKIC8qIFZhbHVlcyBmb3IgVDEwLzA0LTI2MnI3ICovCiAjZGVmaW5lCUFUQV8xNgkJICAgICAgMHg4NQkvKiAxNi1ieXRlIHBhc3MtdGhydSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfY21uZC5oCmluZGV4IDM4NzhkMWQuLmE1ZTg4NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2NtbmQuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKQEAgLTIyOSwxMCArMjI5LDYgQEAKIAkvKiBPUy1IQkE6IFByb3RlY3RlZCwgSEJBLVRhcmdldDogUHJvdGVjdGVkICovCiAJU0NTSV9QUk9UX1JFQURfUEFTUywKIAlTQ1NJX1BST1RfV1JJVEVfUEFTUywKLQotCS8qIE9TLUhCQTogUHJvdGVjdGVkLCBIQkEtVGFyZ2V0OiBQcm90ZWN0ZWQsIGNoZWNrc3VtIGNvbnZlcnNpb24gKi8KLQlTQ1NJX1BST1RfUkVBRF9DT05WRVJULAotCVNDU0lfUFJPVF9XUklURV9DT05WRVJULAogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNjc2lfc2V0X3Byb3Rfb3Aoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgY2hhciBvcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaAppbmRleCBiNjJhMDk3Li40Nzk0MWZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKysrIGIvaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oCkBAIC03OTcsMjQgKzc5NywyNCBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY3NpX2hvc3RfZGlmX2NhcGFibGUoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIHVuc2lnbmVkIGludCB0YXJnZXRfdHlwZSkKIHsKLQlzd2l0Y2ggKHRhcmdldF90eXBlKSB7Ci0JY2FzZSAxOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUxX1BST1RFQ1RJT047Ci0JY2FzZSAyOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT047Ci0JY2FzZSAzOiByZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgU0hPU1RfRElGX1RZUEUzX1BST1RFQ1RJT047Ci0JfQorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhcFtdID0geyAwLAorCQkJCSAgICAgICBTSE9TVF9ESUZfVFlQRTFfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElGX1RZUEUyX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJRl9UWVBFM19QUk9URUNUSU9OIH07CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2hvc3QtPnByb3RfY2FwYWJpbGl0aWVzICYgY2FwW3RhcmdldF90eXBlXSA/IHRhcmdldF90eXBlIDogMDsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NzaV9ob3N0X2RpeF9jYXBhYmxlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0LCB1bnNpZ25lZCBpbnQgdGFyZ2V0X3R5cGUpCiB7Ci0Jc3dpdGNoICh0YXJnZXRfdHlwZSkgewotCWNhc2UgMDogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMF9QUk9URUNUSU9OOwotCWNhc2UgMTogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OOwotCWNhc2UgMjogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFMl9QUk9URUNUSU9OOwotCWNhc2UgMzogcmV0dXJuIHNob3N0LT5wcm90X2NhcGFiaWxpdGllcyAmIFNIT1NUX0RJWF9UWVBFM19QUk9URUNUSU9OOwotCX0KKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYXBbXSA9IHsgU0hPU1RfRElYX1RZUEUwX1BST1RFQ1RJT04sCisJCQkJICAgICAgIFNIT1NUX0RJWF9UWVBFMV9QUk9URUNUSU9OLAorCQkJCSAgICAgICBTSE9TVF9ESVhfVFlQRTJfUFJPVEVDVElPTiwKKwkJCQkgICAgICAgU0hPU1RfRElYX1RZUEUzX1BST1RFQ1RJT04gfTsKIAorCXJldHVybiBzaG9zdC0+cHJvdF9jYXBhYmlsaXRpZXMgJiBjYXBbdGFyZ2V0X3R5cGVdOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCmluZGV4IGQ4NmFmOTQuLjAwNDA1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaApAQCAtNDg4LDYgKzQ4OCwzOSBAQAogCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpX19lbnRyeS0+b2xkX3NlY3RvcikKICk7CiAKK1RSQUNFX0VWRU5UKGJsb2NrX3JxX3JlbWFwLAorCisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LAorCQkgc2VjdG9yX3QgZnJvbSksCisKKwlUUF9BUkdTKHEsIHJxLCBkZXYsIGZyb20pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCggZGV2X3QsCQlkZXYJCSkKKwkJX19maWVsZCggc2VjdG9yX3QsCXNlY3RvcgkJKQorCQlfX2ZpZWxkKCB1bnNpZ25lZCBpbnQsCW5yX3NlY3RvcgkpCisJCV9fZmllbGQoIGRldl90LAkJb2xkX2RldgkJKQorCQlfX2ZpZWxkKCBzZWN0b3JfdCwJb2xkX3NlY3RvcgkpCisJCV9fYXJyYXkoIGNoYXIsCQlyd2JzLAk2CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBkaXNrX2RldnQocnEtPnJxX2Rpc2spOworCQlfX2VudHJ5LT5zZWN0b3IJCT0gYmxrX3JxX3BvcyhycSk7CisJCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJsa19ycV9zZWN0b3JzKHJxKTsKKwkJX19lbnRyeS0+b2xkX2Rldgk9IGRldjsKKwkJX19lbnRyeS0+b2xkX3NlY3Rvcgk9IGZyb207CisJCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCSksCisKKwlUUF9wcmludGsoIiVkLCVkICVzICVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHUiLAorCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksIF9fZW50cnktPnJ3YnMsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylfX2VudHJ5LT5zZWN0b3IsCisJCSAgX19lbnRyeS0+bnJfc2VjdG9yLAorCQkgIE1BSk9SKF9fZW50cnktPm9sZF9kZXYpLCBNSU5PUihfX2VudHJ5LT5vbGRfZGV2KSwKKwkJICAodW5zaWduZWQgbG9uZyBsb25nKV9fZW50cnktPm9sZF9zZWN0b3IpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0JMT0NLX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKaW5kZXggYzFiZDhmMS4uZDA5NTUwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaApAQCAtMTEsNiArMTEsNyBAQAogc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9yZXF1ZXN0Owogc3RydWN0IGV4dDRfcHJlYWxsb2Nfc3BhY2U7CiBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvOworc3RydWN0IG1wYWdlX2RhX2RhdGE7CiAKICNkZWZpbmUgRVhUNF9JKGlub2RlKSAoY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCB2ZnNfaW5vZGUpKQogCkBAIC0yMzYsNiArMjM3LDcgQEAKIAkJX19maWVsZCgJY2hhciwJZm9yX2t1cGRhdGUJCSkKIAkJX19maWVsZCgJY2hhciwJZm9yX3JlY2xhaW0JCSkKIAkJX19maWVsZCgJY2hhciwJcmFuZ2VfY3ljbGljCQkpCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTI0OSwxNSArMjUxLDE3IEBACiAJCV9fZW50cnktPmZvcl9rdXBkYXRlCT0gd2JjLT5mb3Jfa3VwZGF0ZTsKIAkJX19lbnRyeS0+Zm9yX3JlY2xhaW0JPSB3YmMtPmZvcl9yZWNsYWltOwogCQlfX2VudHJ5LT5yYW5nZV9jeWNsaWMJPSB3YmMtPnJhbmdlX2N5Y2xpYzsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IG5yX3RvX3dyaXRlICVsZCBwYWdlc19za2lwcGVkICVsZCByYW5nZV9zdGFydCAlbGx1IHJhbmdlX2VuZCAlbGx1IG5vbmJsb2NraW5nICVkIGZvcl9rdXBkYXRlICVkIGZvcl9yZWNsYWltICVkIHJhbmdlX2N5Y2xpYyAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBucl90b193cml0ZSAlbGQgcGFnZXNfc2tpcHBlZCAlbGQgcmFuZ2Vfc3RhcnQgJWxsdSByYW5nZV9lbmQgJWxsdSBub25ibG9ja2luZyAlZCBmb3Jfa3VwZGF0ZSAlZCBmb3JfcmVjbGFpbSAlZCByYW5nZV9jeWNsaWMgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPm5yX3RvX3dyaXRlLAogCQkgIF9fZW50cnktPnBhZ2VzX3NraXBwZWQsIF9fZW50cnktPnJhbmdlX3N0YXJ0LAogCQkgIF9fZW50cnktPnJhbmdlX2VuZCwgX19lbnRyeS0+bm9uYmxvY2tpbmcsCiAJCSAgX19lbnRyeS0+Zm9yX2t1cGRhdGUsIF9fZW50cnktPmZvcl9yZWNsYWltLAotCQkgIF9fZW50cnktPnJhbmdlX2N5Y2xpYykKKwkJICBfX2VudHJ5LT5yYW5nZV9jeWNsaWMsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfcGFnZXMsCkBAIC0zMDksNiArMzEzLDcgQEAKIAkJX19maWVsZCgJY2hhciwJZW5jb3VudGVyZWRfY29uZ2VzdGlvbgkpCiAJCV9fZmllbGQoCWNoYXIsCW1vcmVfaW8JCQkpCQogCQlfX2ZpZWxkKAljaGFyLAlub19ucndyaXRlX2luZGV4X3VwZGF0ZSApCisJCV9fZmllbGQoICAgICAgIHBnb2ZmX3QsCXdyaXRlYmFja19pbmRleAkJKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKQEAgLTMyMCwxNCArMzI1LDE2IEBACiAJCV9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24JPSB3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb247CiAJCV9fZW50cnktPm1vcmVfaW8JPSB3YmMtPm1vcmVfaW87CiAJCV9fZW50cnktPm5vX25yd3JpdGVfaW5kZXhfdXBkYXRlID0gd2JjLT5ub19ucndyaXRlX2luZGV4X3VwZGF0ZTsKKwkJX19lbnRyeS0+d3JpdGViYWNrX2luZGV4ID0gaW5vZGUtPmlfbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OwogCSksCiAKLQlUUF9wcmludGsoImRldiAlcyBpbm8gJWx1IHJldCAlZCBwYWdlc193cml0dGVuICVkIHBhZ2VzX3NraXBwZWQgJWxkIGNvbmdlc3Rpb24gJWQgbW9yZV9pbyAlZCBub19ucndyaXRlX2luZGV4X3VwZGF0ZSAlZCIsCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSByZXQgJWQgcGFnZXNfd3JpdHRlbiAlZCBwYWdlc19za2lwcGVkICVsZCBjb25nZXN0aW9uICVkIG1vcmVfaW8gJWQgbm9fbnJ3cml0ZV9pbmRleF91cGRhdGUgJWQgd3JpdGViYWNrX2luZGV4ICVsdSIsCiAJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLAogCQkgICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sIF9fZW50cnktPnJldCwKIAkJICBfX2VudHJ5LT5wYWdlc193cml0dGVuLCBfX2VudHJ5LT5wYWdlc19za2lwcGVkLAogCQkgIF9fZW50cnktPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24sIF9fZW50cnktPm1vcmVfaW8sCi0JCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUpCisJCSAgX19lbnRyeS0+bm9fbnJ3cml0ZV9pbmRleF91cGRhdGUsCisJCSAgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPndyaXRlYmFja19pbmRleCkKICk7CiAKIFRSQUNFX0VWRU5UKGV4dDRfZGFfd3JpdGVfYmVnaW4sCkBAIC03MzcsNiArNzQ0LDE2OSBAQAogCQkgIF9fZW50cnktPmRhdGFfYmxvY2tzLCBfX2VudHJ5LT5tZXRhX2Jsb2NrcykKICk7CiAKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19hbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MTYsCWZvdW5kCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJZ3JvdXBzCQkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJYnVkZHkJCQkpCisJCV9fZmllbGQoCV9fdTE2LAlmbGFncwkJCSkKKwkJX19maWVsZCgJX191MTYsCXRhaWwJCQkpCisJCV9fZmllbGQoCV9fdTgsCWNyCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJb3JpZ19zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCW9yaWdfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfbGVuCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlnb2FsX3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJZ29hbF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJZ29hbF9sZW4JCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfbG9naWNhbAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X3N0YXJ0CQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfbGVuCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5kZXYJCT0gYWMtPmFjX2lub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCQk9IGFjLT5hY19pbm9kZS0+aV9pbm87CisJCV9fZW50cnktPmZvdW5kCQk9IGFjLT5hY19mb3VuZDsKKwkJX19lbnRyeS0+ZmxhZ3MJCT0gYWMtPmFjX2ZsYWdzOworCQlfX2VudHJ5LT5ncm91cHMJCT0gYWMtPmFjX2dyb3Vwc19zY2FubmVkOworCQlfX2VudHJ5LT5idWRkeQkJPSBhYy0+YWNfYnVkZHk7CisJCV9fZW50cnktPnRhaWwJCT0gYWMtPmFjX3RhaWw7CisJCV9fZW50cnktPmNyCQk9IGFjLT5hY19jcml0ZXJpYTsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5nb2FsX2xvZ2ljYWwJPSBhYy0+YWNfZ19leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5nb2FsX3N0YXJ0CT0gYWMtPmFjX2dfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPmdvYWxfZ3JvdXAJPSBhYy0+YWNfZ19leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+Z29hbF9sZW4JPSBhYy0+YWNfZ19leC5mZV9sZW47CisJCV9fZW50cnktPnJlc3VsdF9sb2dpY2FsCT0gYWMtPmFjX2ZfZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+cmVzdWx0X3N0YXJ0CT0gYWMtPmFjX2ZfZXguZmVfc3RhcnQ7CisJCV9fZW50cnktPnJlc3VsdF9ncm91cAk9IGFjLT5hY19mX2V4LmZlX2dyb3VwOworCQlfX2VudHJ5LT5yZXN1bHRfbGVuCT0gYWMtPmFjX2ZfZXguZmVfbGVuOworCSksCisKKwlUUF9wcmludGsoImRldiAlcyBpbm9kZSAlbHUgb3JpZyAldS8lZC8ldUAldSBnb2FsICV1LyVkLyV1QCV1ICIKKwkJICAicmVzdWx0ICV1LyVkLyV1QCV1IGJsa3MgJXUgZ3JwcyAldSBjciAldSBmbGFncyAweCUwNHggIgorCQkgICJ0YWlsICV1IGJyb2tlbiAldSIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPm9yaWdfZ3JvdXAsIF9fZW50cnktPm9yaWdfc3RhcnQsCisJCSAgX19lbnRyeS0+b3JpZ19sZW4sIF9fZW50cnktPm9yaWdfbG9naWNhbCwKKwkJICBfX2VudHJ5LT5nb2FsX2dyb3VwLCBfX2VudHJ5LT5nb2FsX3N0YXJ0LAorCQkgIF9fZW50cnktPmdvYWxfbGVuLCBfX2VudHJ5LT5nb2FsX2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwsCisJCSAgX19lbnRyeS0+Zm91bmQsIF9fZW50cnktPmdyb3VwcywgX19lbnRyeS0+Y3IsCisJCSAgX19lbnRyeS0+ZmxhZ3MsIF9fZW50cnktPnRhaWwsCisJCSAgX19lbnRyeS0+YnVkZHkgPyAxIDw8IF9fZW50cnktPmJ1ZGR5IDogMCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19wcmVhbGxvYywKKwlUUF9QUk9UTyhzdHJ1Y3QgZXh0NF9hbGxvY2F0aW9uX2NvbnRleHQgKmFjKSwKKworCVRQX0FSR1MoYWMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCW9yaWdfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlvcmlnX2dyb3VwCQkpCisJCV9fZmllbGQoCSAgaW50LAlvcmlnX2xlbgkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+b3JpZ19sb2dpY2FsCT0gYWMtPmFjX29fZXguZmVfbG9naWNhbDsKKwkJX19lbnRyeS0+b3JpZ19zdGFydAk9IGFjLT5hY19vX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5vcmlnX2dyb3VwCT0gYWMtPmFjX29fZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPm9yaWdfbGVuCT0gYWMtPmFjX29fZXguZmVfbGVuOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IG9yaWcgJXUvJWQvJXVAJXUgcmVzdWx0ICV1LyVkLyV1QCV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+b3JpZ19ncm91cCwgX19lbnRyeS0+b3JpZ19zdGFydCwKKwkJICBfX2VudHJ5LT5vcmlnX2xlbiwgX19lbnRyeS0+b3JpZ19sb2dpY2FsLAorCQkgIF9fZW50cnktPnJlc3VsdF9ncm91cCwgX19lbnRyeS0+cmVzdWx0X3N0YXJ0LAorCQkgIF9fZW50cnktPnJlc3VsdF9sZW4sIF9fZW50cnktPnJlc3VsdF9sb2dpY2FsKQorKTsKKworVFJBQ0VfRVZFTlQoZXh0NF9tYmFsbG9jX2Rpc2NhcmQsCisJVFBfUFJPVE8oc3RydWN0IGV4dDRfYWxsb2NhdGlvbl9jb250ZXh0ICphYyksCisKKwlUUF9BUkdTKGFjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCWlub190LAlpbm8JCQkpCisJCV9fZmllbGQoCV9fdTMyLCAJcmVzdWx0X2xvZ2ljYWwJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9zdGFydAkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9ncm91cAkJKQorCQlfX2ZpZWxkKAkgIGludCwJcmVzdWx0X2xlbgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGFjLT5hY19pbm9kZS0+aV9zYi0+c19kZXY7CisJCV9fZW50cnktPmlubwkJPSBhYy0+YWNfaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5yZXN1bHRfbG9naWNhbAk9IGFjLT5hY19iX2V4LmZlX2xvZ2ljYWw7CisJCV9fZW50cnktPnJlc3VsdF9zdGFydAk9IGFjLT5hY19iX2V4LmZlX3N0YXJ0OworCQlfX2VudHJ5LT5yZXN1bHRfZ3JvdXAJPSBhYy0+YWNfYl9leC5mZV9ncm91cDsKKwkJX19lbnRyeS0+cmVzdWx0X2xlbgk9IGFjLT5hY19iX2V4LmZlX2xlbjsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vZGUgJWx1IGV4dGVudCAldS8lZC8ldUAldSAiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgKHVuc2lnbmVkIGxvbmcpIF9fZW50cnktPmlubywKKwkJICBfX2VudHJ5LT5yZXN1bHRfZ3JvdXAsIF9fZW50cnktPnJlc3VsdF9zdGFydCwKKwkJICBfX2VudHJ5LT5yZXN1bHRfbGVuLCBfX2VudHJ5LT5yZXN1bHRfbG9naWNhbCkKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfbWJhbGxvY19mcmVlLAorCVRQX1BST1RPKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpLAorCisJVFBfQVJHUyhhYyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAlfX3UzMiwgCXJlc3VsdF9sb2dpY2FsCQkpCisJCV9fZmllbGQoCSAgaW50LAlyZXN1bHRfc3RhcnQJCSkKKwkJX19maWVsZCgJX191MzIsIAlyZXN1bHRfZ3JvdXAJCSkKKwkJX19maWVsZCgJICBpbnQsCXJlc3VsdF9sZW4JCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgkJPSBhYy0+YWNfaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JCT0gYWMtPmFjX2lub2RlLT5pX2lubzsKKwkJX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwJPSBhYy0+YWNfYl9leC5mZV9sb2dpY2FsOworCQlfX2VudHJ5LT5yZXN1bHRfc3RhcnQJPSBhYy0+YWNfYl9leC5mZV9zdGFydDsKKwkJX19lbnRyeS0+cmVzdWx0X2dyb3VwCT0gYWMtPmFjX2JfZXguZmVfZ3JvdXA7CisJCV9fZW50cnktPnJlc3VsdF9sZW4JPSBhYy0+YWNfYl9leC5mZV9sZW47CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlub2RlICVsdSBleHRlbnQgJXUvJWQvJXVAJXUgIiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+cmVzdWx0X2dyb3VwLCBfX2VudHJ5LT5yZXN1bHRfc3RhcnQsCisJCSAgX19lbnRyeS0+cmVzdWx0X2xlbiwgX19lbnRyeS0+cmVzdWx0X2xvZ2ljYWwpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0VYVDRfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCBiODUxZjBiLi4zYzYwYjc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC03LDYgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKK3N0cnVjdCB0cmFuc2FjdGlvbl9jaHBfc3RhdHNfczsKK3N0cnVjdCB0cmFuc2FjdGlvbl9ydW5fc3RhdHNfczsKKwogVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50LAogCiAJVFBfUFJPVE8oam91cm5hbF90ICpqb3VybmFsLCBpbnQgcmVzdWx0KSwKQEAgLTE2Miw2ICsxNjUsODEgQEAKIAkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8pCiApOwogCitUUkFDRV9FVkVOVChqYmQyX3J1bl9zdGF0cywKKwlUUF9QUk9UTyhkZXZfdCBkZXYsIHVuc2lnbmVkIGxvbmcgdGlkLAorCQkgc3RydWN0IHRyYW5zYWN0aW9uX3J1bl9zdGF0c19zICpzdGF0cyksCisKKwlUUF9BUkdTKGRldiwgdGlkLCBzdGF0cyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAkJZGV2X3QsCWRldgkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAl0aWQJCSkKKwkJX19maWVsZCgJdW5zaWduZWQgbG9uZywJd2FpdAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlydW5uaW5nCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvY2tlZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlmbHVzaGluZwkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCWxvZ2dpbmcJCSkKKwkJX19maWVsZCgJCV9fdTMyLAloYW5kbGVfY291bnQJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2NrcwkJKQorCQlfX2ZpZWxkKAkJX191MzIsCWJsb2Nrc19sb2dnZWQJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+d2FpdAkJPSBzdGF0cy0+cnNfd2FpdDsKKwkJX19lbnRyeS0+cnVubmluZwk9IHN0YXRzLT5yc19ydW5uaW5nOworCQlfX2VudHJ5LT5sb2NrZWQJCT0gc3RhdHMtPnJzX2xvY2tlZDsKKwkJX19lbnRyeS0+Zmx1c2hpbmcJPSBzdGF0cy0+cnNfZmx1c2hpbmc7CisJCV9fZW50cnktPmxvZ2dpbmcJPSBzdGF0cy0+cnNfbG9nZ2luZzsKKwkJX19lbnRyeS0+aGFuZGxlX2NvdW50CT0gc3RhdHMtPnJzX2hhbmRsZV9jb3VudDsKKwkJX19lbnRyeS0+YmxvY2tzCQk9IHN0YXRzLT5yc19ibG9ja3M7CisJCV9fZW50cnktPmJsb2Nrc19sb2dnZWQJPSBzdGF0cy0+cnNfYmxvY2tzX2xvZ2dlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgdGlkICVsdSB3YWl0ICV1IHJ1bm5pbmcgJXUgbG9ja2VkICV1IGZsdXNoaW5nICV1ICIKKwkJICAibG9nZ2luZyAldSBoYW5kbGVfY291bnQgJXUgYmxvY2tzICV1IGJsb2Nrc19sb2dnZWQgJXUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGlkLAorCQkgIGppZmZpZXNfdG9fbXNlY3MoX19lbnRyeS0+d2FpdCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5ydW5uaW5nKSwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmxvY2tlZCksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5mbHVzaGluZyksCisJCSAgamlmZmllc190b19tc2VjcyhfX2VudHJ5LT5sb2dnaW5nKSwKKwkJICBfX2VudHJ5LT5oYW5kbGVfY291bnQsIF9fZW50cnktPmJsb2NrcywKKwkJICBfX2VudHJ5LT5ibG9ja3NfbG9nZ2VkKQorKTsKKworVFJBQ0VfRVZFTlQoamJkMl9jaGVja3BvaW50X3N0YXRzLAorCVRQX1BST1RPKGRldl90IGRldiwgdW5zaWduZWQgbG9uZyB0aWQsCisJCSBzdHJ1Y3QgdHJhbnNhY3Rpb25fY2hwX3N0YXRzX3MgKnN0YXRzKSwKKworCVRQX0FSR1MoZGV2LCB0aWQsIHN0YXRzKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCQlkZXZfdCwJZGV2CQkpCisJCV9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXRpZAkJKQorCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAljaHBfdGltZQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZm9yY2VkX3RvX2Nsb3NlCSkKKwkJX19maWVsZCgJCV9fdTMyLAl3cml0dGVuCQkpCisJCV9fZmllbGQoCQlfX3UzMiwJZHJvcHBlZAkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGRldjsKKwkJX19lbnRyeS0+dGlkCQk9IHRpZDsKKwkJX19lbnRyeS0+Y2hwX3RpbWUJPSBzdGF0cy0+Y3NfY2hwX3RpbWU7CisJCV9fZW50cnktPmZvcmNlZF90b19jbG9zZT0gc3RhdHMtPmNzX2ZvcmNlZF90b19jbG9zZTsKKwkJX19lbnRyeS0+d3JpdHRlbgk9IHN0YXRzLT5jc193cml0dGVuOworCQlfX2VudHJ5LT5kcm9wcGVkCT0gc3RhdHMtPmNzX2Ryb3BwZWQ7CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIHRpZCAlbHUgY2hwX3RpbWUgJXUgZm9yY2VkX3RvX2Nsb3NlICV1ICIKKwkJICAid3JpdHRlbiAldSBkcm9wcGVkICV1IiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksIF9fZW50cnktPnRpZCwKKwkJICBqaWZmaWVzX3RvX21zZWNzKF9fZW50cnktPmNocF90aW1lKSwKKwkJICBfX2VudHJ5LT5mb3JjZWRfdG9fY2xvc2UsIF9fZW50cnktPndyaXR0ZW4sIF9fZW50cnktPmRyb3BwZWQpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0pCRDJfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKaW5kZXggZmNmZDlhMS4uZTQ2MTJkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvd29ya3F1ZXVlLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAkJX19lbnRyeS0+ZnVuYwkJPSB3b3JrLT5mdW5jOwogCSksCiAKLQlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwRiIsIF9fZW50cnktPnRocmVhZF9jb21tLAorCVRQX3ByaW50aygidGhyZWFkPSVzOiVkIGZ1bmM9JXBmIiwgX19lbnRyeS0+dGhyZWFkX2NvbW0sCiAJCV9fZW50cnktPnRocmVhZF9waWQsIF9fZW50cnktPmZ1bmMpCiApOwogCkBAIC00OCw3ICs0OCw3IEBACiAJCV9fZW50cnktPmZ1bmMJCT0gd29yay0+ZnVuYzsKIAkpLAogCi0JVFBfcHJpbnRrKCJ0aHJlYWQ9JXM6JWQgZnVuYz0lcEYiLCBfX2VudHJ5LT50aHJlYWRfY29tbSwKKwlUUF9wcmludGsoInRocmVhZD0lczolZCBmdW5jPSVwZiIsIF9fZW50cnktPnRocmVhZF9jb21tLAogCQlfX2VudHJ5LT50aHJlYWRfcGlkLCBfX2VudHJ5LT5mdW5jKQogKTsKIApkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IGM3YmFjMzkuLjllMDNlZjggMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCiBjb25maWcgQVVESVRTWVNDQUxMCiAJYm9vbCAiRW5hYmxlIHN5c3RlbS1jYWxsIGF1ZGl0aW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBQUEM2NCB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjR8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBBVURJVCAmJiAoWDg2IHx8IFBQQyB8fCBTMzkwIHx8IElBNjQgfHwgVU1MIHx8IFNQQVJDNjQgfHwgU1VQRVJIKQogCWRlZmF1bHQgeSBpZiBTRUNVUklUWV9TRUxJTlVYCiAJaGVscAogCSAgRW5hYmxlIGxvdy1vdmVyaGVhZCBzeXN0ZW0tY2FsbCBhdWRpdGluZyBpbmZyYXN0cnVjdHVyZSB0aGF0CkBAIC05MjEsNiArOTIxLDExIEBACiAJaGVscAogCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscy4KIAorY29uZmlnIFBFUkZfVVNFX1ZNQUxMT0MKKwlib29sCisJaGVscAorCSAgU2VlIHRvb2xzL3BlcmYvZGVzaWduLnR4dCBmb3IgZGV0YWlscworCiBtZW51ICJLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycyIKIAogY29uZmlnIFBFUkZfRVZFTlRTCkBAIC05MzIsNyArOTM3LDcgQEAKIAkgIEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgdmFyaW91cyBwZXJmb3JtYW5jZSBldmVudHMgcHJvdmlkZWQKIAkgIGJ5IHNvZnR3YXJlIGFuZCBoYXJkd2FyZS4KIAotCSAgU29mdHdhcmUgZXZlbnRzIGFyZSBzdXBwb3J0ZWQgZWl0aGVyIGJ1aWxkLWluIG9yIHZpYSB0aGUKKwkgIFNvZnR3YXJlIGV2ZW50cyBhcmUgc3VwcG9ydGVkIGVpdGhlciBidWlsdC1pbiBvciB2aWEgdGhlCiAJICB1c2Ugb2YgZ2VuZXJpYyB0cmFjZXBvaW50cy4KIAogCSAgTW9zdCBtb2Rlcm4gQ1BVcyBzdXBwb3J0IHBlcmZvcm1hbmNlIGV2ZW50cyB2aWEgcGVyZm9ybWFuY2UKQEAgLTk0NCw3ICs5NDksNyBAQAogCSAgdXNlZCB0byBwcm9maWxlIHRoZSBjb2RlIHRoYXQgcnVucyBvbiB0aGF0IENQVS4KIAogCSAgVGhlIExpbnV4IFBlcmZvcm1hbmNlIEV2ZW50IHN1YnN5c3RlbSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZgotCSAgdGhlc2Ugc29mdHdhcmUgYW5kIGhhcmR3YXJlIGNldmVudCBhcGFiaWxpdGllcywgYXZhaWxhYmxlIHZpYSBhCisJICB0aGVzZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgZXZlbnQgY2FwYWJpbGl0aWVzLCBhdmFpbGFibGUgdmlhIGEKIAkgIHN5c3RlbSBjYWxsIGFuZCB1c2VkIGJ5IHRoZSAicGVyZiIgdXRpbGl0eSBpbiB0b29scy9wZXJmLy4gSXQKIAkgIHByb3ZpZGVzIHBlciB0YXNrIGFuZCBwZXIgQ1BVIGNvdW50ZXJzLCBhbmQgaXQgcHJvdmlkZXMgZXZlbnQKIAkgIGNhcGFiaWxpdGllcyBvbiB0b3Agb2YgdGhvc2UuCkBAIC05NzYsNiArOTgxLDE5IEBACiAKIAkgIFNheSBOIGlmIHVuc3VyZS4KIAorY29uZmlnIERFQlVHX1BFUkZfVVNFX1ZNQUxMT0MKKwlkZWZhdWx0IG4KKwlib29sICJEZWJ1ZzogdXNlIHZtYWxsb2MgdG8gYmFjayBwZXJmIG1tYXAoKSBidWZmZXJzIgorCWRlcGVuZHMgb24gUEVSRl9FVkVOVFMgJiYgREVCVUdfS0VSTkVMCisJc2VsZWN0IFBFUkZfVVNFX1ZNQUxMT0MKKwloZWxwCisJIFVzZSB2bWFsbG9jIG1lbW9yeSB0byBiYWNrIHBlcmYgbW1hcCgpIGJ1ZmZlcnMuCisKKwkgTW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRoZSB2bWFsbG9jIGNvZGUgb24gcGxhdGZvcm1zCisJIHRoYXQgZG9uJ3QgcmVxdWlyZSBpdC4KKworCSBTYXkgTiBpZiB1bnN1cmUuCisKIGVuZG1lbnUKIAogY29uZmlnIFZNX0VWRU5UX0NPVU5URVJTCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDc0NDk4MTkuLjU5ODhkZWIgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC03NzgsNyArNzc4LDYgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGRvX2Jhc2ljX3NldHVwKHZvaWQpCiB7Ci0JcmN1X2luaXRfc2NoZWQoKTsgLyogbmVlZGVkIGJ5IG1vZHVsZV9pbml0IHN0YWdlLiAqLwogCWluaXRfd29ya3F1ZXVlcygpOwogCWNwdXNldF9pbml0X3NtcCgpOwogCXVzZXJtb2RlaGVscGVyX2luaXQoKTsKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCA5ZWIxNDg4Li40NjQ2OTRlIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC01NSw3ICs1NSw3IEBACiAjZGVmaW5lIHNobV9maWxlX2RhdGEoZmlsZSkgKCooKHN0cnVjdCBzaG1fZmlsZV9kYXRhICoqKSYoZmlsZSktPnByaXZhdGVfZGF0YSkpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobV9maWxlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobV92bV9vcHM7CiAKICNkZWZpbmUgc2htX2lkcyhucykJKChucyktPmlkc1tJUENfU0hNX0lEU10pCiAKQEAgLTMxMiw3ICszMTIsNyBAQAogCS5nZXRfdW5tYXBwZWRfYXJlYQk9IHNobV9nZXRfdW5tYXBwZWRfYXJlYSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htX3ZtX29wcyA9IHsKIAkub3Blbgk9IHNobV9vcGVuLAkvKiBjYWxsYmFjayBmb3IgYSBuZXcgdm0tYXJlYSBvcGVuICovCiAJLmNsb3NlCT0gc2htX2Nsb3NlLAkvKiBjYWxsYmFjayBmb3Igd2hlbiB0aGUgdm0tYXJlYSBpcyByZWxlYXNlZCAqLwogCS5mYXVsdAk9IHNobV9mYXVsdCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA3Y2NiYTRiLi4wMjQ5ZjRiIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC03MDMsNyArNzAzLDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIHN0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBjZ3JvdXBfYmFja2luZ19kZXZfaW5mbyA9IHsKIAkubmFtZQkJPSAiY2dyb3VwIiwKQEAgLTE3MTAsMTQgKzE3MTAsMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKIAlpZiAoY2Z0LT53cml0ZV91NjQpIHsKLQkJdTY0IHZhbCA9IHNpbXBsZV9zdHJ0b3VsbChidWZmZXIsICZlbmQsIDApOworCQl1NjQgdmFsID0gc2ltcGxlX3N0cnRvdWxsKHN0cnN0cmlwKGJ1ZmZlciksICZlbmQsIDApOwogCQlpZiAoKmVuZCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZXR2YWwgPSBjZnQtPndyaXRlX3U2NChjZ3JwLCBjZnQsIHZhbCk7CiAJfSBlbHNlIHsKLQkJczY0IHZhbCA9IHNpbXBsZV9zdHJ0b2xsKGJ1ZmZlciwgJmVuZCwgMCk7CisJCXM2NCB2YWwgPSBzaW1wbGVfc3RydG9sbChzdHJzdHJpcChidWZmZXIpLCAmZW5kLCAwKTsKIAkJaWYgKCplbmQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dmFsID0gY2Z0LT53cml0ZV9zNjQoY2dycCwgY2Z0LCB2YWwpOwpAQCAtMTc1Myw4ICsxNzUyLDcgQEAKIAl9CiAKIAlidWZmZXJbbmJ5dGVzXSA9IDA7ICAgICAvKiBudWwtdGVybWluYXRlICovCi0Jc3Ryc3RyaXAoYnVmZmVyKTsKLQlyZXR2YWwgPSBjZnQtPndyaXRlX3N0cmluZyhjZ3JwLCBjZnQsIGJ1ZmZlcik7CisJcmV0dmFsID0gY2Z0LT53cml0ZV9zdHJpbmcoY2dycCwgY2Z0LCBzdHJzdHJpcChidWZmZXIpKTsKIAlpZiAoIXJldHZhbCkKIAkJcmV0dmFsID0gbmJ5dGVzOwogb3V0OgpAQCAtMTg2Myw3ICsxODYxLDcgQEAKIAlyZXR1cm4gc2luZ2xlX3JlbGVhc2UoaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfc2VxZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX3NlcWZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGNncm91cF9maWxlX3dyaXRlLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC0xOTIyLDcgKzE5MjAsNyBAQAogCXJldHVybiBzaW1wbGVfcmVuYW1lKG9sZF9kaXIsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2dyb3VwX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkucmVhZCA9IGNncm91cF9maWxlX3JlYWQsCiAJLndyaXRlID0gY2dyb3VwX2ZpbGVfd3JpdGUsCiAJLmxsc2VlayA9IGdlbmVyaWNfZmlsZV9sbHNlZWssCkBAIC0zMzY5LDcgKzMzNjcsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX2Nncm91cF9zaG93LCBwaWQpOwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gY2dyb3VwX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCkBAIC0zMzk4LDcgKzMzOTYsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX2Nncm91cHN0YXRzX3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cHN0YXRzX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4gPSBjZ3JvdXBzdGF0c19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTM3MDgsOCArMzcwNiwxMCBAQAogdm9pZCBfX2Nzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKIAlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY3NzLT5jZ3JvdXA7CisJaW50IHZhbDsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKGF0b21pY19kZWNfcmV0dXJuKCZjc3MtPnJlZmNudCkgPT0gMSkgeworCXZhbCA9IGF0b21pY19kZWNfcmV0dXJuKCZjc3MtPnJlZmNudCk7CisJaWYgKHZhbCA9PSAxKSB7CiAJCWlmIChub3RpZnlfb25fcmVsZWFzZShjZ3JwKSkgewogCQkJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZjZ3JwLT5mbGFncyk7CiAJCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKQEAgLTM3MTcsNiArMzcxNyw3IEBACiAJCWNncm91cF93YWtldXBfcm1kaXJfd2FpdGVyKGNncnApOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKKwlXQVJOX09OX09OQ0UodmFsIDwgMSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA1ODU5ZjU5Li5mNzg2NGFjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTM1OSwxMCArMzU5LDggQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7CiAKLQlpZiAodGFza19zZXNzaW9uKGN1cnIpICE9IHBpZCkgeworCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKQogCQljaGFuZ2VfcGlkKGN1cnIsIFBJRFRZUEVfU0lELCBwaWQpOwotCQlwcm9jX3NpZF9jb25uZWN0b3IoY3Vycik7Ci0JfQogCiAJaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwaWQpOwpAQCAtOTkxLDggKzk4OSw2IEBACiAJdHNrLT5tZW1wb2xpY3kgPSBOVUxMOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZVVEVYCi0JaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZ0c2stPnBpX3N0YXRlX2xpc3QpKSkKLQkJZXhpdF9waV9zdGF0ZV9saXN0KHRzayk7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPnBpX3N0YXRlX2NhY2hlKSkKIAkJa2ZyZWUoY3VycmVudC0+cGlfc3RhdGVfY2FjaGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAyNjZjNmFmLi4xNjZiOGM0IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAlpbnQgY3B1OwogCWludCB0b3RhbCA9IDA7CiAKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQl0b3RhbCArPSBwZXJfY3B1KHByb2Nlc3NfY291bnRzLCBjcHUpOwogCiAJcmV0dXJuIHRvdGFsOwpAQCAtNTcwLDEyICs1NzAsMTggQEAKIAogCS8qIEdldCByaWQgb2YgYW55IGZ1dGV4ZXMgd2hlbiByZWxlYXNpbmcgdGhlIG1tICovCiAjaWZkZWYgQ09ORklHX0ZVVEVYCi0JaWYgKHVubGlrZWx5KHRzay0+cm9idXN0X2xpc3QpKQorCWlmICh1bmxpa2VseSh0c2stPnJvYnVzdF9saXN0KSkgewogCQlleGl0X3JvYnVzdF9saXN0KHRzayk7CisJCXRzay0+cm9idXN0X2xpc3QgPSBOVUxMOworCX0KICNpZmRlZiBDT05GSUdfQ09NUEFUCi0JaWYgKHVubGlrZWx5KHRzay0+Y29tcGF0X3JvYnVzdF9saXN0KSkKKwlpZiAodW5saWtlbHkodHNrLT5jb21wYXRfcm9idXN0X2xpc3QpKSB7CiAJCWNvbXBhdF9leGl0X3JvYnVzdF9saXN0KHRzayk7CisJCXRzay0+Y29tcGF0X3JvYnVzdF9saXN0ID0gTlVMTDsKKwl9CiAjZW5kaWYKKwlpZiAodW5saWtlbHkoIWxpc3RfZW1wdHkoJnRzay0+cGlfc3RhdGVfbGlzdCkpKQorCQlleGl0X3BpX3N0YXRlX2xpc3QodHNrKTsKICNlbmRpZgogCiAJLyogR2V0IHJpZCBvZiBhbnkgY2FjaGVkIHJlZ2lzdGVyIHN0YXRlICovCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDI0OGRkMTEuLmZiNjVlODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC04OSwzNiArODksMzYgQEAKIAl1bmlvbiBmdXRleF9rZXkga2V5OwogfTsKIAotLyoKLSAqIFdlIHVzZSB0aGlzIGhhc2hlZCB3YWl0cXVldWUgaW5zdGVhZCBvZiBhIG5vcm1hbCB3YWl0X3F1ZXVlX3QsIHNvCisvKioKKyAqIHN0cnVjdCBmdXRleF9xIC0gVGhlIGhhc2hlZCBmdXRleCBxdWV1ZSBlbnRyeSwgb25lIHBlciB3YWl0aW5nIHRhc2sKKyAqIEB0YXNrOgkJdGhlIHRhc2sgd2FpdGluZyBvbiB0aGUgZnV0ZXgKKyAqIEBsb2NrX3B0cjoJCXRoZSBoYXNoIGJ1Y2tldCBsb2NrCisgKiBAa2V5OgkJdGhlIGtleSB0aGUgZnV0ZXggaXMgaGFzaGVkIG9uCisgKiBAcGlfc3RhdGU6CQlvcHRpb25hbCBwcmlvcml0eSBpbmhlcml0YW5jZSBzdGF0ZQorICogQHJ0X3dhaXRlcjoJCXJ0X3dhaXRlciBzdG9yYWdlIGZvciB1c2Ugd2l0aCByZXF1ZXVlX3BpCisgKiBAcmVxdWV1ZV9waV9rZXk6CXRoZSByZXF1ZXVlX3BpIHRhcmdldCBmdXRleCBrZXkKKyAqIEBiaXRzZXQ6CQliaXRzZXQgZm9yIHRoZSBvcHRpb25hbCBiaXRtYXNrZWQgd2FrZXVwCisgKgorICogV2UgdXNlIHRoaXMgaGFzaGVkIHdhaXRxdWV1ZSwgaW5zdGVhZCBvZiBhIG5vcm1hbCB3YWl0X3F1ZXVlX3QsIHNvCiAgKiB3ZSBjYW4gd2FrZSBvbmx5IHRoZSByZWxldmFudCBvbmVzIChoYXNoZWQgcXVldWVzIG1heSBiZSBzaGFyZWQpLgogICoKICAqIEEgZnV0ZXhfcSBoYXMgYSB3b2tlbiBzdGF0ZSwganVzdCBsaWtlIHRhc2tzIGhhdmUgVEFTS19SVU5OSU5HLgogICogSXQgaXMgY29uc2lkZXJlZCB3b2tlbiB3aGVuIHBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpIHx8IHEtPmxvY2tfcHRyID09IDAuCiAgKiBUaGUgb3JkZXIgb2Ygd2FrdXAgaXMgYWx3YXlzIHRvIG1ha2UgdGhlIGZpcnN0IGNvbmRpdGlvbiB0cnVlLCB0aGVuCi0gKiB3YWtlIHVwIHEtPndhaXRlciwgdGhlbiBtYWtlIHRoZSBzZWNvbmQgY29uZGl0aW9uIHRydWUuCisgKiB0aGUgc2Vjb25kLgorICoKKyAqIFBJIGZ1dGV4ZXMgYXJlIHR5cGljYWxseSB3b2tlbiBiZWZvcmUgdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIGxpc3QgdmlhCisgKiB0aGUgcnRfbXV0ZXggY29kZS4gU2VlIHVucXVldWVfbWVfcGkoKS4KICAqLwogc3RydWN0IGZ1dGV4X3EgewogCXN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7Ci0JLyogV2FpdGVyIHJlZmVyZW5jZSAqLworCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwotCi0JLyogV2hpY2ggaGFzaCBsaXN0IGxvY2sgdG8gdXNlOiAqLwogCXNwaW5sb2NrX3QgKmxvY2tfcHRyOwotCi0JLyogS2V5IHdoaWNoIHRoZSBmdXRleCBpcyBoYXNoZWQgb246ICovCiAJdW5pb24gZnV0ZXhfa2V5IGtleTsKLQotCS8qIE9wdGlvbmFsIHByaW9yaXR5IGluaGVyaXRhbmNlIHN0YXRlOiAqLwogCXN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGU7Ci0KLQkvKiBydF93YWl0ZXIgc3RvcmFnZSBmb3IgcmVxdWV1ZV9waTogKi8KIAlzdHJ1Y3QgcnRfbXV0ZXhfd2FpdGVyICpydF93YWl0ZXI7Ci0KLQkvKiBUaGUgZXhwZWN0ZWQgcmVxdWV1ZSBwaSB0YXJnZXQgZnV0ZXgga2V5OiAqLwogCXVuaW9uIGZ1dGV4X2tleSAqcmVxdWV1ZV9waV9rZXk7Ci0KLQkvKiBCaXRzZXQgZm9yIHRoZSBvcHRpb25hbCBiaXRtYXNrZWQgd2FrZXVwICovCiAJdTMyIGJpdHNldDsKIH07CiAKQEAgLTE1MCw3ICsxNTAsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9mdXRleCh1bmlvbiBmdXRleF9rZXkgKmtleTEsIHVuaW9uIGZ1dGV4X2tleSAqa2V5MikKIHsKLQlyZXR1cm4gKGtleTEtPmJvdGgud29yZCA9PSBrZXkyLT5ib3RoLndvcmQKKwlyZXR1cm4gKGtleTEgJiYga2V5MgorCQkmJiBrZXkxLT5ib3RoLndvcmQgPT0ga2V5Mi0+Ym90aC53b3JkCiAJCSYmIGtleTEtPmJvdGgucHRyID09IGtleTItPmJvdGgucHRyCiAJCSYmIGtleTEtPmJvdGgub2Zmc2V0ID09IGtleTItPmJvdGgub2Zmc2V0KTsKIH0KQEAgLTE5OCwxMSArMTk5LDEyIEBACiB9CiAKIC8qKgotICogZ2V0X2Z1dGV4X2tleSAtIEdldCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB0aGUga2V5cyBmb3IgYSBmdXRleC4KLSAqIEB1YWRkcjogdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBmdXRleAotICogQGZzaGFyZWQ6IDAgZm9yIGEgUFJPQ0VTU19QUklWQVRFIGZ1dGV4LCAxIGZvciBQUk9DRVNTX1NIQVJFRAotICogQGtleTogYWRkcmVzcyB3aGVyZSByZXN1bHQgaXMgc3RvcmVkLgotICogQHJ3OiBtYXBwaW5nIG5lZWRzIHRvIGJlIHJlYWQvd3JpdGUgKHZhbHVlczogVkVSSUZZX1JFQUQsIFZFUklGWV9XUklURSkKKyAqIGdldF9mdXRleF9rZXkoKSAtIEdldCBwYXJhbWV0ZXJzIHdoaWNoIGFyZSB0aGUga2V5cyBmb3IgYSBmdXRleAorICogQHVhZGRyOgl2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGZ1dGV4CisgKiBAZnNoYXJlZDoJMCBmb3IgYSBQUk9DRVNTX1BSSVZBVEUgZnV0ZXgsIDEgZm9yIFBST0NFU1NfU0hBUkVECisgKiBAa2V5OglhZGRyZXNzIHdoZXJlIHJlc3VsdCBpcyBzdG9yZWQuCisgKiBAcnc6CQltYXBwaW5nIG5lZWRzIHRvIGJlIHJlYWQvd3JpdGUgKHZhbHVlczogVkVSSUZZX1JFQUQsCisgKiAJCVZFUklGWV9XUklURSkKICAqCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciAwCiAgKiBUaGUga2V5IHdvcmRzIGFyZSBzdG9yZWQgaW4gKmtleSBvbiBzdWNjZXNzLgpAQCAtMjg4LDggKzI5MCw4IEBACiAJZHJvcF9mdXRleF9rZXlfcmVmcyhrZXkpOwogfQogCi0vKgotICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUgLSBmYXVsdCBpbiB1c2VyIGFkZHJlc3MgYW5kIHZlcmlmeSBSVyBhY2Nlc3MKKy8qKgorICogZmF1bHRfaW5fdXNlcl93cml0ZWFibGUoKSAtIEZhdWx0IGluIHVzZXIgYWRkcmVzcyBhbmQgdmVyaWZ5IFJXIGFjY2VzcwogICogQHVhZGRyOglwb2ludGVyIHRvIGZhdWx0aW5nIHVzZXIgc3BhY2UgYWRkcmVzcwogICoKICAqIFNsb3cgcGF0aCB0byBmaXh1cCB0aGUgZmF1bHQgd2UganVzdCB0b29rIGluIHRoZSBhdG9taWMgd3JpdGUKQEAgLTMwOSw4ICszMTEsOCBAQAogCiAvKioKICAqIGZ1dGV4X3RvcF93YWl0ZXIoKSAtIFJldHVybiB0aGUgaGlnaGVzdCBwcmlvcml0eSB3YWl0ZXIgb24gYSBmdXRleAotICogQGhiOiAgICAgdGhlIGhhc2ggYnVja2V0IHRoZSBmdXRleF9xJ3MgcmVzaWRlIGluCi0gKiBAa2V5OiAgICB0aGUgZnV0ZXgga2V5ICh0byBkaXN0aW5ndWlzaCBpdCBmcm9tIG90aGVyIGZ1dGV4IGZ1dGV4X3EncykKKyAqIEBoYjoJCXRoZSBoYXNoIGJ1Y2tldCB0aGUgZnV0ZXhfcSdzIHJlc2lkZSBpbgorICogQGtleToJdGhlIGZ1dGV4IGtleSAodG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBvdGhlciBmdXRleCBmdXRleF9xJ3MpCiAgKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaGIgbG9jayBoZWxkLgogICovCkBAIC01ODgsNyArNTkwLDcgQEAKIH0KIAogLyoqCi0gKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gYXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4CisgKiBmdXRleF9sb2NrX3BpX2F0b21pYygpIC0gQXRvbWljIHdvcmsgcmVxdWlyZWQgdG8gYWNxdWlyZSBhIHBpIGF3YXJlIGZ1dGV4CiAgKiBAdWFkZHI6CQl0aGUgcGkgZnV0ZXggdXNlciBhZGRyZXNzCiAgKiBAaGI6CQkJdGhlIHBpIGZ1dGV4IGhhc2ggYnVja2V0CiAgKiBAa2V5OgkJdGhlIGZ1dGV4IGtleSBhc3NvY2lhdGVkIHdpdGggdWFkZHIgYW5kIGhiCkBAIC05MTUsOCArOTE3LDggQEAKIAloYjEgPSBoYXNoX2Z1dGV4KCZrZXkxKTsKIAloYjIgPSBoYXNoX2Z1dGV4KCZrZXkyKTsKIAotCWRvdWJsZV9sb2NrX2hiKGhiMSwgaGIyKTsKIHJldHJ5X3ByaXZhdGU6CisJZG91YmxlX2xvY2tfaGIoaGIxLCBoYjIpOwogCW9wX3JldCA9IGZ1dGV4X2F0b21pY19vcF9pbnVzZXIob3AsIHVhZGRyMik7CiAJaWYgKHVubGlrZWx5KG9wX3JldCA8IDApKSB7CiAKQEAgLTEwMTEsOSArMTAxMyw5IEBACiAKIC8qKgogICogcmVxdWV1ZV9waV93YWtlX2Z1dGV4KCkgLSBXYWtlIGEgdGFzayB0aGF0IGFjcXVpcmVkIHRoZSBsb2NrIGR1cmluZyByZXF1ZXVlCi0gKiBxOgl0aGUgZnV0ZXhfcQotICoga2V5Ogl0aGUga2V5IG9mIHRoZSByZXF1ZXVlIHRhcmdldCBmdXRleAotICogaGI6ICB0aGUgaGFzaF9idWNrZXQgb2YgdGhlIHJlcXVldWUgdGFyZ2V0IGZ1dGV4CisgKiBAcToJCXRoZSBmdXRleF9xCisgKiBAa2V5Ogl0aGUga2V5IG9mIHRoZSByZXF1ZXVlIHRhcmdldCBmdXRleAorICogQGhiOgkJdGhlIGhhc2hfYnVja2V0IG9mIHRoZSByZXF1ZXVlIHRhcmdldCBmdXRleAogICoKICAqIER1cmluZyBmdXRleF9yZXF1ZXVlLCB3aXRoIHJlcXVldWVfcGk9MSwgaXQgaXMgcG9zc2libGUgdG8gYWNxdWlyZSB0aGUKICAqIHRhcmdldCBmdXRleCBpZiBpdCBpcyB1bmNvbnRlbmRlZCBvciB2aWEgYSBsb2NrIHN0ZWFsLiAgU2V0IHRoZSBmdXRleF9xIGtleQpAQCAtMTAyNyw3ICsxMDI5LDYgQEAKIHZvaWQgcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHN0cnVjdCBmdXRleF9xICpxLCB1bmlvbiBmdXRleF9rZXkgKmtleSwKIAkJCSAgIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCiB7Ci0JZHJvcF9mdXRleF9rZXlfcmVmcygmcS0+a2V5KTsKIAlnZXRfZnV0ZXhfa2V5X3JlZnMoa2V5KTsKIAlxLT5rZXkgPSAqa2V5OwogCkBAIC0xMjI1LDYgKzEyMjYsNyBAQAogCQkgKi8KIAkJaWYgKHJldCA9PSAxKSB7CiAJCQlXQVJOX09OKHBpX3N0YXRlKTsKKwkJCWRyb3BfY291bnQrKzsKIAkJCXRhc2tfY291bnQrKzsKIAkJCXJldCA9IGdldF9mdXRleF92YWx1ZV9sb2NrZWQoJmN1cnZhbDIsIHVhZGRyMik7CiAJCQlpZiAoIXJldCkKQEAgLTEzMDMsNiArMTMwNSw3IEBACiAJCQlpZiAocmV0ID09IDEpIHsKIAkJCQkvKiBXZSBnb3QgdGhlIGxvY2suICovCiAJCQkJcmVxdWV1ZV9waV93YWtlX2Z1dGV4KHRoaXMsICZrZXkyLCBoYjIpOworCQkJCWRyb3BfY291bnQrKzsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAocmV0KSB7CiAJCQkJLyogLUVERUFETEsgKi8KQEAgLTEzNTAsNiArMTM1MywyNSBAQAogCXJldHVybiBoYjsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitxdWV1ZV91bmxvY2soc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCit7CisJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKKwlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOworfQorCisvKioKKyAqIHF1ZXVlX21lKCkgLSBFbnF1ZXVlIHRoZSBmdXRleF9xIG9uIHRoZSBmdXRleF9oYXNoX2J1Y2tldAorICogQHE6CVRoZSBmdXRleF9xIHRvIGVucXVldWUKKyAqIEBoYjoJVGhlIGRlc3RpbmF0aW9uIGhhc2ggYnVja2V0CisgKgorICogVGhlIGhiLT5sb2NrIG11c3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLCBhbmQgaXMgcmVsZWFzZWQgaGVyZS4gQSBjYWxsIHRvCisgKiBxdWV1ZV9tZSgpIGlzIHR5cGljYWxseSBwYWlyZWQgd2l0aCBleGFjdGx5IG9uZSBjYWxsIHRvIHVucXVldWVfbWUoKS4gIFRoZQorICogZXhjZXB0aW9ucyBpbnZvbHZlIHRoZSBQSSByZWxhdGVkIG9wZXJhdGlvbnMsIHdoaWNoIG1heSB1c2UgdW5xdWV1ZV9tZV9waSgpCisgKiBvciBub3RoaW5nIGlmIHRoZSB1bnF1ZXVlIGlzIGRvbmUgYXMgcGFydCBvZiB0aGUgd2FrZSBwcm9jZXNzIGFuZCB0aGUgdW5xdWV1ZQorICogc3RhdGUgaXMgaW1wbGljaXQgaW4gdGhlIHN0YXRlIG9mIHdva2VuIHRhc2sgKHNlZSBmdXRleF93YWl0X3JlcXVldWVfcGkoKSBmb3IKKyAqIGFuIGV4YW1wbGUpLgorICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcXVldWVfbWUoc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCiB7CiAJaW50IHByaW87CkBAIC0xMzczLDE5ICsxMzk1LDE3IEBACiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1xdWV1ZV91bmxvY2soc3RydWN0IGZ1dGV4X3EgKnEsIHN0cnVjdCBmdXRleF9oYXNoX2J1Y2tldCAqaGIpCi17Ci0Jc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKLQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwotfQotCi0vKgotICogcXVldWVfbWUgYW5kIHVucXVldWVfbWUgbXVzdCBiZSBjYWxsZWQgYXMgYSBwYWlyLCBlYWNoCi0gKiBleGFjdGx5IG9uY2UuICBUaGV5IGFyZSBjYWxsZWQgd2l0aCB0aGUgaGFzaGVkIHNwaW5sb2NrIGhlbGQuCisvKioKKyAqIHVucXVldWVfbWUoKSAtIFJlbW92ZSB0aGUgZnV0ZXhfcSBmcm9tIGl0cyBmdXRleF9oYXNoX2J1Y2tldAorICogQHE6CVRoZSBmdXRleF9xIHRvIHVucXVldWUKKyAqCisgKiBUaGUgcS0+bG9ja19wdHIgbXVzdCBub3QgYmUgaGVsZCBieSB0aGUgY2FsbGVyLiBBIGNhbGwgdG8gdW5xdWV1ZV9tZSgpIG11c3QKKyAqIGJlIHBhaXJlZCB3aXRoIGV4YWN0bHkgb25lIGVhcmxpZXIgY2FsbCB0byBxdWV1ZV9tZSgpLgorICoKKyAqIFJldHVybnM6CisgKiAgIDEgLSBpZiB0aGUgZnV0ZXhfcSB3YXMgc3RpbGwgcXVldWVkIChhbmQgd2UgcmVtb3ZlZCB1bnF1ZXVlZCBpdCkKKyAqICAgMCAtIGlmIHRoZSBmdXRleF9xIHdhcyBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHdha2luZyB0aHJlYWQKICAqLwotCi0vKiBSZXR1cm4gMSBpZiB3ZSB3ZXJlIHN0aWxsIHF1ZXVlZCAoaWUuIDAgbWVhbnMgd2Ugd2VyZSB3b2tlbikgKi8KIHN0YXRpYyBpbnQgdW5xdWV1ZV9tZShzdHJ1Y3QgZnV0ZXhfcSAqcSkKIHsKIAlzcGlubG9ja190ICpsb2NrX3B0cjsKQEAgLTE2MzgsMTcgKzE2NTgsMTQgQEAKIHN0YXRpYyB2b2lkIGZ1dGV4X3dhaXRfcXVldWVfbWUoc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYiwgc3RydWN0IGZ1dGV4X3EgKnEsCiAJCQkJc3RydWN0IGhydGltZXJfc2xlZXBlciAqdGltZW91dCkKIHsKLQlxdWV1ZV9tZShxLCBoYik7Ci0KIAkvKgotCSAqIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBzY2hlZHVsaW5nIHNpbmNlIHRoZSBxdWV1ZV9tZSgpLCBhcyB3ZQotCSAqIGNhbm5vdCBob2xkIGEgc3BpbmxvY2sgYWNyb3NzIHRoZSBnZXRfdXNlcigpIGluIGNhc2UgaXQKLQkgKiBmYXVsdHMsIGFuZCB3ZSBjYW5ub3QganVzdCBzZXQgVEFTS19JTlRFUlJVUFRJQkxFIHN0YXRlIHdoZW4KLQkgKiBxdWV1ZWluZyBvdXJzZWx2ZXMgaW50byB0aGUgZnV0ZXggaGFzaC4gVGhpcyBjb2RlIHRodXMgaGFzIHRvCi0JICogcmVseSBvbiB0aGUgZnV0ZXhfd2FrZSgpIGNvZGUgcmVtb3ZpbmcgdXMgZnJvbSBoYXNoIHdoZW4gaXQKLQkgKiB3YWtlcyB1cyB1cC4KKwkgKiBUaGUgdGFzayBzdGF0ZSBpcyBndWFyYW50ZWVkIHRvIGJlIHNldCBiZWZvcmUgYW5vdGhlciB0YXNrIGNhbgorCSAqIHdha2UgaXQuIHNldF9jdXJyZW50X3N0YXRlKCkgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2V0X21iKCkgYW5kCisJICogcXVldWVfbWUoKSBjYWxscyBzcGluX3VubG9jaygpIHVwb24gY29tcGxldGlvbiwgYm90aCBzZXJpYWxpemluZworCSAqIGFjY2VzcyB0byB0aGUgaGFzaCBsaXN0IGFuZCBmb3JjaW5nIGFub3RoZXIgbWVtb3J5IGJhcnJpZXIuCiAJICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlxdWV1ZV9tZShxLCBoYik7CiAKIAkvKiBBcm0gdGhlIHRpbWVyICovCiAJaWYgKHRpbWVvdXQpIHsKQEAgLTE2NTgsOCArMTY3NSw4IEBACiAJfQogCiAJLyoKLQkgKiAhcGxpc3Rfbm9kZV9lbXB0eSgpIGlzIHNhZmUgaGVyZSB3aXRob3V0IGFueSBsb2NrLgotCSAqIHEubG9ja19wdHIgIT0gMCBpcyBub3Qgc2FmZSwgYmVjYXVzZSBvZiBvcmRlcmluZyBhZ2FpbnN0IHdha2V1cC4KKwkgKiBJZiB3ZSBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIGxpc3QsIHRoZW4gYW5vdGhlciB0YXNrCisJICogaGFzIHRyaWVkIHRvIHdha2UgdXMsIGFuZCB3ZSBjYW4gc2tpcCB0aGUgY2FsbCB0byBzY2hlZHVsZSgpLgogCSAqLwogCWlmIChsaWtlbHkoIXBsaXN0X25vZGVfZW1wdHkoJnEtPmxpc3QpKSkgewogCQkvKgpAQCAtMTc3Niw2ICsxNzkzLDcgQEAKIAkJCQkJICAgICBjdXJyZW50LT50aW1lcl9zbGFja19ucyk7CiAJfQogCityZXRyeToKIAkvKiBQcmVwYXJlIHRvIHdhaXQgb24gdWFkZHIuICovCiAJcmV0ID0gZnV0ZXhfd2FpdF9zZXR1cCh1YWRkciwgdmFsLCBmc2hhcmVkLCAmcSwgJmhiKTsKIAlpZiAocmV0KQpAQCAtMTc5Myw5ICsxODExLDE0IEBACiAJCWdvdG8gb3V0X3B1dF9rZXk7CiAKIAkvKgotCSAqIFdlIGV4cGVjdCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSwgYnV0IGFub3RoZXIgdGhyZWFkIG1heQotCSAqIGhhdmUgaGFuZGxlZCBpdCBmb3IgdXMgYWxyZWFkeS4KKwkgKiBXZSBleHBlY3Qgc2lnbmFsX3BlbmRpbmcoY3VycmVudCksIGJ1dCB3ZSBtaWdodCBiZSB0aGUKKwkgKiB2aWN0aW0gb2YgYSBzcHVyaW91cyB3YWtldXAgYXMgd2VsbC4KIAkgKi8KKwlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCXB1dF9mdXRleF9rZXkoZnNoYXJlZCwgJnEua2V5KTsKKwkJZ290byByZXRyeTsKKwl9CisKIAlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJaWYgKCFhYnNfdGltZSkKIAkJZ290byBvdXRfcHV0X2tleTsKQEAgLTIxMDIsMTEgKzIxMjUsMTIgQEAKIAkJICogVW5xdWV1ZSB0aGUgZnV0ZXhfcSBhbmQgZGV0ZXJtaW5lIHdoaWNoIGl0IHdhcy4KIAkJICovCiAJCXBsaXN0X2RlbCgmcS0+bGlzdCwgJnEtPmxpc3QucGxpc3QpOwotCQlkcm9wX2Z1dGV4X2tleV9yZWZzKCZxLT5rZXkpOwogCisJCS8qIEhhbmRsZSBzcHVyaW91cyB3YWtldXBzIGdyYWNlZnVsbHkgKi8KKwkJcmV0ID0gLUVXT1VMREJMT0NLOwogCQlpZiAodGltZW91dCAmJiAhdGltZW91dC0+dGFzaykKIAkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCWVsc2UKKwkJZWxzZSBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXQgPSAtRVJFU1RBUlROT0lOVFI7CiAJfQogCXJldHVybiByZXQ7CkBAIC0yMTE0LDEyICsyMTM4LDEyIEBACiAKIC8qKgogICogZnV0ZXhfd2FpdF9yZXF1ZXVlX3BpKCkgLSBXYWl0IG9uIHVhZGRyIGFuZCB0YWtlIHVhZGRyMgotICogQHVhZGRyOgl0aGUgZnV0ZXggd2UgaW5pdGlhbHlsIHdhaXQgb24gKG5vbi1waSkKKyAqIEB1YWRkcjoJdGhlIGZ1dGV4IHdlIGluaXRpYWxseSB3YWl0IG9uIChub24tcGkpCiAgKiBAZnNoYXJlZDoJd2hldGhlciB0aGUgZnV0ZXhlcyBhcmUgc2hhcmVkICgxKSBvciBub3QgKDApLiAgVGhleSBtdXN0IGJlCiAgKiAJCXRoZSBzYW1lIHR5cGUsIG5vIHJlcXVldWVpbmcgZnJvbSBwcml2YXRlIHRvIHNoYXJlZCwgZXRjLgogICogQHZhbDoJdGhlIGV4cGVjdGVkIHZhbHVlIG9mIHVhZGRyCiAgKiBAYWJzX3RpbWU6CWFic29sdXRlIHRpbWVvdXQKLSAqIEBiaXRzZXQ6CTMyIGJpdCB3YWtldXAgYml0c2V0IHNldCBieSB1c2Vyc3BhY2UsIGRlZmF1bHRzIHRvIGFsbC4KKyAqIEBiaXRzZXQ6CTMyIGJpdCB3YWtldXAgYml0c2V0IHNldCBieSB1c2Vyc3BhY2UsIGRlZmF1bHRzIHRvIGFsbAogICogQGNsb2NrcnQ6CXdoZXRoZXIgdG8gdXNlIENMT0NLX1JFQUxUSU1FICgxKSBvciBDTE9DS19NT05PVE9OSUMgKDApCiAgKiBAdWFkZHIyOgl0aGUgcGkgZnV0ZXggd2Ugd2lsbCB0YWtlIHByaW9yIHRvIHJldHVybmluZyB0byB1c2VyLXNwYWNlCiAgKgpAQCAtMjI0Niw3ICsyMjcwLDcgQEAKIAkJcmVzID0gZml4dXBfb3duZXIodWFkZHIyLCBmc2hhcmVkLCAmcSwgIXJldCk7CiAJCS8qCiAJCSAqIElmIGZpeHVwX293bmVyKCkgcmV0dXJuZWQgYW4gZXJyb3IsIHByb3Byb2dhdGUgdGhhdC4gIElmIGl0Ci0JCSAqIGFjcXVpcmVkIHRoZSBsb2NrLCBjbGVhciBvdXIgLUVUSU1FRE9VVCBvciAtRUlOVFIuCisJCSAqIGFjcXVpcmVkIHRoZSBsb2NrLCBjbGVhciAtRVRJTUVET1VUIG9yIC1FSU5UUi4KIAkJICovCiAJCWlmIChyZXMpCiAJCQlyZXQgPSAocmVzIDwgMCkgPyByZXMgOiAwOwpAQCAtMjMwMiw5ICsyMzI2LDkgQEAKICAqLwogCiAvKioKLSAqIHN5c19zZXRfcm9idXN0X2xpc3QgLSBzZXQgdGhlIHJvYnVzdC1mdXRleCBsaXN0IGhlYWQgb2YgYSB0YXNrCi0gKiBAaGVhZDogcG9pbnRlciB0byB0aGUgbGlzdC1oZWFkCi0gKiBAbGVuOiBsZW5ndGggb2YgdGhlIGxpc3QtaGVhZCwgYXMgdXNlcnNwYWNlIGV4cGVjdHMKKyAqIHN5c19zZXRfcm9idXN0X2xpc3QoKSAtIFNldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKKyAqIEBoZWFkOglwb2ludGVyIHRvIHRoZSBsaXN0LWhlYWQKKyAqIEBsZW46CWxlbmd0aCBvZiB0aGUgbGlzdC1oZWFkLCBhcyB1c2Vyc3BhY2UgZXhwZWN0cwogICovCiBTWVNDQUxMX0RFRklORTIoc2V0X3JvYnVzdF9saXN0LCBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKiwgaGVhZCwKIAkJc2l6ZV90LCBsZW4pCkBAIC0yMzIzLDEwICsyMzQ3LDEwIEBACiB9CiAKIC8qKgotICogc3lzX2dldF9yb2J1c3RfbGlzdCAtIGdldCB0aGUgcm9idXN0LWZ1dGV4IGxpc3QgaGVhZCBvZiBhIHRhc2sKLSAqIEBwaWQ6IHBpZCBvZiB0aGUgcHJvY2VzcyBbemVybyBmb3IgY3VycmVudCB0YXNrXQotICogQGhlYWRfcHRyOiBwb2ludGVyIHRvIGEgbGlzdC1oZWFkIHBvaW50ZXIsIHRoZSBrZXJuZWwgZmlsbHMgaXQgaW4KLSAqIEBsZW5fcHRyOiBwb2ludGVyIHRvIGEgbGVuZ3RoIGZpZWxkLCB0aGUga2VybmVsIGZpbGxzIGluIHRoZSBoZWFkZXIgc2l6ZQorICogc3lzX2dldF9yb2J1c3RfbGlzdCgpIC0gR2V0IHRoZSByb2J1c3QtZnV0ZXggbGlzdCBoZWFkIG9mIGEgdGFzaworICogQHBpZDoJcGlkIG9mIHRoZSBwcm9jZXNzIFt6ZXJvIGZvciBjdXJyZW50IHRhc2tdCisgKiBAaGVhZF9wdHI6CXBvaW50ZXIgdG8gYSBsaXN0LWhlYWQgcG9pbnRlciwgdGhlIGtlcm5lbCBmaWxscyBpdCBpbgorICogQGxlbl9wdHI6CXBvaW50ZXIgdG8gYSBsZW5ndGggZmllbGQsIHRoZSBrZXJuZWwgZmlsbHMgaW4gdGhlIGhlYWRlciBzaXplCiAgKi8KIFNZU0NBTExfREVGSU5FMyhnZXRfcm9idXN0X2xpc3QsIGludCwgcGlkLAogCQlzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKiBfX3VzZXIgKiwgaGVhZF9wdHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCBlNWQ5OGNlLi4zZTFjMzZlIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTUwOSwxMyArNTA5LDE0IEBACiAgKiBuZXh0IGV2ZW50CiAgKiBDYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIGFuZCBiYXNlLT5sb2NrIGhlbGQKICAqLwotc3RhdGljIHZvaWQgaHJ0aW1lcl9mb3JjZV9yZXByb2dyYW0oc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlKQorc3RhdGljIHZvaWQKK2hydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpjcHVfYmFzZSwgaW50IHNraXBfZXF1YWwpCiB7CiAJaW50IGk7CiAJc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSA9IGNwdV9iYXNlLT5jbG9ja19iYXNlOwotCWt0aW1lX3QgZXhwaXJlczsKKwlrdGltZV90IGV4cGlyZXMsIGV4cGlyZXNfbmV4dDsKIAotCWNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCA9IEtUSU1FX01BWDsKKwlleHBpcmVzX25leHQudHY2NCA9IEtUSU1FX01BWDsKIAogCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrLCBiYXNlKyspIHsKIAkJc3RydWN0IGhydGltZXIgKnRpbWVyOwpAQCAtNTMxLDEwICs1MzIsMTUgQEAKIAkJICovCiAJCWlmIChleHBpcmVzLnR2NjQgPCAwKQogCQkJZXhwaXJlcy50djY0ID0gMDsKLQkJaWYgKGV4cGlyZXMudHY2NCA8IGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCkKLQkJCWNwdV9iYXNlLT5leHBpcmVzX25leHQgPSBleHBpcmVzOworCQlpZiAoZXhwaXJlcy50djY0IDwgZXhwaXJlc19uZXh0LnR2NjQpCisJCQlleHBpcmVzX25leHQgPSBleHBpcmVzOwogCX0KIAorCWlmIChza2lwX2VxdWFsICYmIGV4cGlyZXNfbmV4dC50djY0ID09IGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCkKKwkJcmV0dXJuOworCisJY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID0gZXhwaXJlc19uZXh0LnR2NjQ7CisKIAlpZiAoY3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ICE9IEtUSU1FX01BWCkKIAkJdGlja19wcm9ncmFtX2V2ZW50KGNwdV9iYXNlLT5leHBpcmVzX25leHQsIDEpOwogfQpAQCAtNjE3LDcgKzYyMyw3IEBACiAJYmFzZS0+Y2xvY2tfYmFzZVtDTE9DS19SRUFMVElNRV0ub2Zmc2V0ID0KIAkJdGltZXNwZWNfdG9fa3RpbWUocmVhbHRpbWVfb2Zmc2V0KTsKIAotCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UpOworCWhydGltZXJfZm9yY2VfcmVwcm9ncmFtKGJhc2UsIDApOwogCXNwaW5fdW5sb2NrKCZiYXNlLT5sb2NrKTsKIH0KIApAQCAtNzIwLDggKzcyNiw2IEBACiAJLyogIlJldHJpZ2dlciIgdGhlIGludGVycnVwdCB0byBnZXQgdGhpbmdzIGdvaW5nICovCiAJcmV0cmlnZ2VyX25leHRfZXZlbnQoTlVMTCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByaW50ayhLRVJOX0RFQlVHICJTd2l0Y2hlZCB0byBoaWdoIHJlc29sdXRpb24gbW9kZSBvbiBDUFUgJWRcbiIsCi0JICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTczMCw3ICs3MzQsOCBAQAogc3RhdGljIGlubGluZSBpbnQgaHJ0aW1lcl9ocmVzX2FjdGl2ZSh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2lzX2hyZXNfZW5hYmxlZCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX3N3aXRjaF90b19ocmVzKHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqYmFzZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQKK2hydGltZXJfZm9yY2VfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyX2NwdV9iYXNlICpiYXNlLCBpbnQgc2tpcF9lcXVhbCkgeyB9CiBzdGF0aWMgaW5saW5lIGludCBocnRpbWVyX2VucXVldWVfcmVwcm9ncmFtKHN0cnVjdCBocnRpbWVyICp0aW1lciwKIAkJCQkJICAgIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsCiAJCQkJCSAgICBpbnQgd2FrZXVwKQpAQCAtODczLDE5ICs4NzgsMjkgQEAKIAkJCSAgICAgc3RydWN0IGhydGltZXJfY2xvY2tfYmFzZSAqYmFzZSwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBuZXdzdGF0ZSwgaW50IHJlcHJvZ3JhbSkKIHsKLQlpZiAodGltZXItPnN0YXRlICYgSFJUSU1FUl9TVEFURV9FTlFVRVVFRCkgewotCQkvKgotCQkgKiBSZW1vdmUgdGhlIHRpbWVyIGZyb20gdGhlIHJidHJlZSBhbmQgcmVwbGFjZSB0aGUKLQkJICogZmlyc3QgZW50cnkgcG9pbnRlciBpZiBuZWNlc3NhcnkuCi0JCSAqLwotCQlpZiAoYmFzZS0+Zmlyc3QgPT0gJnRpbWVyLT5ub2RlKSB7Ci0JCQliYXNlLT5maXJzdCA9IHJiX25leHQoJnRpbWVyLT5ub2RlKTsKLQkJCS8qIFJlcHJvZ3JhbSB0aGUgY2xvY2sgZXZlbnQgZGV2aWNlLiBpZiBlbmFibGVkICovCi0JCQlpZiAocmVwcm9ncmFtICYmIGhydGltZXJfaHJlc19hY3RpdmUoKSkKLQkJCQlocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShiYXNlLT5jcHVfYmFzZSk7CisJaWYgKCEodGltZXItPnN0YXRlICYgSFJUSU1FUl9TVEFURV9FTlFVRVVFRCkpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBSZW1vdmUgdGhlIHRpbWVyIGZyb20gdGhlIHJidHJlZSBhbmQgcmVwbGFjZSB0aGUgZmlyc3QKKwkgKiBlbnRyeSBwb2ludGVyIGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoYmFzZS0+Zmlyc3QgPT0gJnRpbWVyLT5ub2RlKSB7CisJCWJhc2UtPmZpcnN0ID0gcmJfbmV4dCgmdGltZXItPm5vZGUpOworI2lmZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKKwkJLyogUmVwcm9ncmFtIHRoZSBjbG9jayBldmVudCBkZXZpY2UuIGlmIGVuYWJsZWQgKi8KKwkJaWYgKHJlcHJvZ3JhbSAmJiBocnRpbWVyX2hyZXNfYWN0aXZlKCkpIHsKKwkJCWt0aW1lX3QgZXhwaXJlczsKKworCQkJZXhwaXJlcyA9IGt0aW1lX3N1YihocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSwKKwkJCQkJICAgIGJhc2UtPm9mZnNldCk7CisJCQlpZiAoYmFzZS0+Y3B1X2Jhc2UtPmV4cGlyZXNfbmV4dC50djY0ID09IGV4cGlyZXMudHY2NCkKKwkJCQlocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShiYXNlLT5jcHVfYmFzZSwgMSk7CiAJCX0KLQkJcmJfZXJhc2UoJnRpbWVyLT5ub2RlLCAmYmFzZS0+YWN0aXZlKTsKKyNlbmRpZgogCX0KKwlyYl9lcmFzZSgmdGltZXItPm5vZGUsICZiYXNlLT5hY3RpdmUpOworb3V0OgogCXRpbWVyLT5zdGF0ZSA9IG5ld3N0YXRlOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCBhODFjZjgwLi4xN2M3MWJiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTExLDYgKzExLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggMTE0ZTcwNC4uYmQ3MjczZSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTIxLDcgKzEyMSw5IEBACiAJCWlmICghKHN0YXR1cyAmIElSUV9TUFVSSU9VU19ESVNBQkxFRCkpCiAJCQljb250aW51ZTsKIAorCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQl0cnlfb25lX2lycShpLCBkZXNjKTsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggY2ZhZGMxMi4uNTI0MGQ3NSAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzMzLDcgKzEzMzMsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxwLCAma3Byb2Jlc19zZXFfb3BzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdmc19rcHJvYmVzX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z2ZzX2twcm9iZXNfb3BlcmF0aW9ucyA9IHsKIAkub3BlbiAgICAgICAgICAgPSBrcHJvYmVzX29wZW4sCiAJLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgICAgICAgID0gc2VxX2xzZWVrLApAQCAtMTUxNSw3ICsxNTE1LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfa3AgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2twID0gewogCS5yZWFkID0gICAgICAgICByZWFkX2VuYWJsZWRfZmlsZV9ib29sLAogCS53cml0ZSA9ICAgICAgICB3cml0ZV9lbmFibGVkX2ZpbGVfYm9vbCwKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwva3RocmVhZC5jIGIva2VybmVsL2t0aHJlYWQuYwppbmRleCA1ZmU3MDk5Li5hYjdhZTU3IDEwMDY0NAotLS0gYS9rZXJuZWwva3RocmVhZC5jCisrKyBiL2tlcm5lbC9rdGhyZWFkLmMKQEAgLTE1MCwyOSArMTUwLDYgQEAKIEVYUE9SVF9TWU1CT0woa3RocmVhZF9jcmVhdGUpOwogCiAvKioKLSAqIGt0aHJlYWRfYmluZCAtIGJpbmQgYSBqdXN0LWNyZWF0ZWQga3RocmVhZCB0byBhIGNwdS4KLSAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgotICogQGNwdTogY3B1IChtaWdodCBub3QgYmUgb25saW5lLCBtdXN0IGJlIHBvc3NpYmxlKSBmb3IgQGsgdG8gcnVuIG9uLgotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0X2NwdXNfYWxsb3dlZCgpLAotICogZXhjZXB0IHRoYXQgQGNwdSBkb2Vzbid0IG5lZWQgdG8gYmUgb25saW5lLCBhbmQgdGhlIHRocmVhZCBtdXN0IGJlCi0gKiBzdG9wcGVkIChpLmUuLCBqdXN0IHJldHVybmVkIGZyb20ga3RocmVhZF9jcmVhdGUoKSkuCi0gKi8KLXZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqaywgdW5zaWduZWQgaW50IGNwdSkKLXsKLQkvKiBNdXN0IGhhdmUgZG9uZSBzY2hlZHVsZSgpIGluIGt0aHJlYWQoKSBiZWZvcmUgd2Ugc2V0X3Rhc2tfY3B1ICovCi0JaWYgKCF3YWl0X3Rhc2tfaW5hY3RpdmUoaywgVEFTS19VTklOVEVSUlVQVElCTEUpKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2V0X3Rhc2tfY3B1KGssIGNwdSk7Ci0Jay0+Y3B1c19hbGxvd2VkID0gY3B1bWFza19vZl9jcHUoY3B1KTsKLQlrLT5ydC5ucl9jcHVzX2FsbG93ZWQgPSAxOwotCWstPmZsYWdzIHw9IFBGX1RIUkVBRF9CT1VORDsKLX0KLUVYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKLQotLyoqCiAgKiBrdGhyZWFkX3N0b3AgLSBzdG9wIGEgdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KICAqIEBrOiB0aHJlYWQgY3JlYXRlZCBieSBrdGhyZWFkX2NyZWF0ZSgpLgogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDM4MTVhYzFkLi45YWY1NjcyIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTE0Miw2ICsxNDIsMTEgQEAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxvY2tfY2xhc3Nfc3RhdHNbTUFYX0xPQ0tERVBfS0VZU10sIGxvY2tfc3RhdHMpOwogCitzdGF0aWMgaW5saW5lIHU2NCBsb2Nrc3RhdF9jbG9jayh2b2lkKQoreworCXJldHVybiBjcHVfY2xvY2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKK30KKwogc3RhdGljIGludCBsb2NrX3BvaW50KHVuc2lnbmVkIGxvbmcgcG9pbnRzW10sIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJaW50IGk7CkBAIC0xNTgsNyArMTYzLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIHZvaWQgbG9ja190aW1lX2luYyhzdHJ1Y3QgbG9ja190aW1lICpsdCwgczY0IHRpbWUpCitzdGF0aWMgdm9pZCBsb2NrX3RpbWVfaW5jKHN0cnVjdCBsb2NrX3RpbWUgKmx0LCB1NjQgdGltZSkKIHsKIAlpZiAodGltZSA+IGx0LT5tYXgpCiAJCWx0LT5tYXggPSB0aW1lOwpAQCAtMjM0LDEyICsyMzksMTIgQEAKIHN0YXRpYyB2b2lkIGxvY2tfcmVsZWFzZV9ob2xkdGltZShzdHJ1Y3QgaGVsZF9sb2NrICpobG9jaykKIHsKIAlzdHJ1Y3QgbG9ja19jbGFzc19zdGF0cyAqc3RhdHM7Ci0JczY0IGhvbGR0aW1lOworCXU2NCBob2xkdGltZTsKIAogCWlmICghbG9ja19zdGF0KQogCQlyZXR1cm47CiAKLQlob2xkdGltZSA9IHNjaGVkX2Nsb2NrKCkgLSBobG9jay0+aG9sZHRpbWVfc3RhbXA7CisJaG9sZHRpbWUgPSBsb2Nrc3RhdF9jbG9jaygpIC0gaGxvY2stPmhvbGR0aW1lX3N0YW1wOwogCiAJc3RhdHMgPSBnZXRfbG9ja19zdGF0cyhobG9ja19jbGFzcyhobG9jaykpOwogCWlmIChobG9jay0+cmVhZCkKQEAgLTI3OTIsNyArMjc5Nyw3IEBACiAJaGxvY2stPnJlZmVyZW5jZXMgPSByZWZlcmVuY2VzOwogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIAlobG9jay0+d2FpdHRpbWVfc3RhbXAgPSAwOwotCWhsb2NrLT5ob2xkdGltZV9zdGFtcCA9IHNjaGVkX2Nsb2NrKCk7CisJaGxvY2stPmhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTsKICNlbmRpZgogCiAJaWYgKGNoZWNrID09IDIgJiYgIW1hcmtfaXJxZmxhZ3MoY3VyciwgaGxvY2spKQpAQCAtMzMyMiw3ICszMzI3LDcgQEAKIAlpZiAoaGxvY2stPmluc3RhbmNlICE9IGxvY2spCiAJCXJldHVybjsKIAotCWhsb2NrLT53YWl0dGltZV9zdGFtcCA9IHNjaGVkX2Nsb2NrKCk7CisJaGxvY2stPndhaXR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTsKIAogCWNvbnRlbnRpb25fcG9pbnQgPSBsb2NrX3BvaW50KGhsb2NrX2NsYXNzKGhsb2NrKS0+Y29udGVudGlvbl9wb2ludCwgaXApOwogCWNvbnRlbmRpbmdfcG9pbnQgPSBsb2NrX3BvaW50KGhsb2NrX2NsYXNzKGhsb2NrKS0+Y29udGVuZGluZ19wb2ludCwKQEAgLTMzNDUsOCArMzM1MCw3IEBACiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssICpwcmV2X2hsb2NrOwogCXN0cnVjdCBsb2NrX2NsYXNzX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBpbnQgZGVwdGg7Ci0JdTY0IG5vdzsKLQlzNjQgd2FpdHRpbWUgPSAwOworCXU2NCBub3csIHdhaXR0aW1lID0gMDsKIAlpbnQgaSwgY3B1OwogCiAJZGVwdGggPSBjdXJyLT5sb2NrZGVwX2RlcHRoOwpAQCAtMzM3NCw3ICszMzc4LDcgQEAKIAogCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlpZiAoaGxvY2stPndhaXR0aW1lX3N0YW1wKSB7Ci0JCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CisJCW5vdyA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAJCXdhaXR0aW1lID0gbm93IC0gaGxvY2stPndhaXR0aW1lX3N0YW1wOwogCQlobG9jay0+aG9sZHRpbWVfc3RhbXAgPSBub3c7CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IDVhMjkzOTcuLjhiN2Q4ODAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTE5OTIsMTIgKzE5OTIsMTQgQEAKIAkJCQkJICBFbGZfU2hkciAqc2VjaGRycywKIAkJCQkJICB1bnNpZ25lZCBpbnQgc3ltaW5kZXgsCiAJCQkJCSAgdW5zaWduZWQgaW50IHN0cmluZGV4LAotCQkJCQkgIGNvbnN0IEVsZl9IZHIgKmhkciwKKwkJCQkJICBjb25zdCBFbGZfRWhkciAqaGRyLAogCQkJCQkgIGNvbnN0IGNoYXIgKnNlY3N0cmluZ3MsCiAJCQkJCSAgdW5zaWduZWQgbG9uZyAqcHN0cm9mZnMsCiAJCQkJCSAgdW5zaWduZWQgbG9uZyAqc3RybWFwKQogeworCXJldHVybiAwOwogfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJCQlFbGZfU2hkciAqc2VjaGRycywKIAkJCQl1bnNpZ25lZCBpbnQgc2hudW0sCkBAIC0yMDgxLDkgKzIwODMsOCBAQAogCXN0cnVjdCBtb2R1bGUgKm1vZDsKIAlsb25nIGVyciA9IDA7CiAJdm9pZCAqcGVyY3B1ID0gTlVMTCwgKnB0ciA9IE5VTEw7IC8qIFN0b3BzIHNwdXJpb3VzIGdjYyB3YXJuaW5nICovCi0jaWZkZWYgQ09ORklHX0tBTExTWU1TCiAJdW5zaWduZWQgbG9uZyBzeW1vZmZzLCBzdHJvZmZzLCAqc3RybWFwOwotI2VuZGlmCisKIAltbV9zZWdtZW50X3Qgb2xkX2ZzOwogCiAJREVCVUdQKCJsb2FkX21vZHVsZTogdW1vZD0lcCwgbGVuPSVsdSwgdWFyZ3M9JXBcbiIsCkBAIC0zMDkxLDcgKzMwOTIsNiBAQAogCQkgICBzdHJ1Y3QgbW9kdmVyc2lvbl9pbmZvICp2ZXIsCiAJCSAgIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwLAogCQkgICBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqa3MsCi0JCSAgIHN0cnVjdCBtYXJrZXIgKm1hcmtlciwKIAkJICAgc3RydWN0IHRyYWNlcG9pbnQgKnRwKQogewogfQpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmMgYi9rZXJuZWwvbXV0ZXgtZGVidWcuYwppbmRleCA1MGQwMjJlLi5lYzgxNWE5IDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuYworKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IGJjZGVmMjYuLjk2YjQ1ZDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC05MCw2ICs5MCw4IEBACiAKIAlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmcGFuaWNfbm90aWZpZXJfbGlzdCwgMCwgYnVmKTsKIAorCWJ1c3Rfc3BpbmxvY2tzKDApOworCiAJaWYgKCFwYW5pY19ibGluaykKIAkJcGFuaWNfYmxpbmsgPSBub19ibGluazsKIApAQCAtMTM2LDcgKzEzOCw2IEBACiAJCW1kZWxheSgxKTsKIAkJaSsrOwogCX0KLQlidXN0X3NwaW5sb2NrcygwKTsKIH0KIAogRVhQT1JUX1NZTUJPTChwYW5pYyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggOWRhNThlYS4uZDY1NmMyNyAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtMjE4LDE1ICsyMTgsMTEgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQogCi0JaWYgKGtwLT5mbGFncyAmIEtQQVJBTV9LTUFMTE9DRUQpCi0JCWtmcmVlKCooY2hhciAqKilrcC0+YXJnKTsKLQogCS8qIFRoaXMgaXMgYSBoYWNrLiAgV2UgY2FuJ3QgbmVlZCB0byBzdHJkdXAgaW4gZWFybHkgYm9vdCwgYW5kIHdlCiAJICogZG9uJ3QgbmVlZCB0bzsgdGhpcyBtYW5nbGVkIGNvbW1hbmRsaW5lIGlzIHByZXNlcnZlZC4gKi8KIAlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkgewotCQlrcC0+ZmxhZ3MgfD0gS1BBUkFNX0tNQUxMT0NFRDsKIAkJKihjaGFyICoqKWtwLT5hcmcgPSBrc3RyZHVwKHZhbCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICgha3AtPmFyZykKKwkJaWYgKCEqKGNoYXIgKiopa3AtPmFyZykKIAkJCXJldHVybiAtRU5PTUVNOwogCX0gZWxzZQogCQkqKGNvbnN0IGNoYXIgKiopa3AtPmFyZyA9IHZhbDsKQEAgLTMwNCw2ICszMDAsNyBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCwKIAkJICAgICAgIHZvaWQgKmVsZW0sIGludCBlbGVtc2l6ZSwKIAkJICAgICAgIGludCAoKnNldCkoY29uc3QgY2hhciAqLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCksCisJCSAgICAgICB1MTYgZmxhZ3MsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgKm51bSkKIHsKIAlpbnQgcmV0OwpAQCAtMzEzLDYgKzMxMCw3IEBACiAJLyogR2V0IHRoZSBuYW1lIHJpZ2h0IGZvciBlcnJvcnMuICovCiAJa3AubmFtZSA9IG5hbWU7CiAJa3AuYXJnID0gZWxlbTsKKwlrcC5mbGFncyA9IGZsYWdzOwogCiAJLyogTm8gZXF1YWxzIHNpZ24/ICovCiAJaWYgKCF2YWwpIHsKQEAgLTM1OCw3ICszNTYsOCBAQAogCXVuc2lnbmVkIGludCB0ZW1wX251bTsKIAogCXJldHVybiBwYXJhbV9hcnJheShrcC0+bmFtZSwgdmFsLCAxLCBhcnItPm1heCwgYXJyLT5lbGVtLAotCQkJICAgYXJyLT5lbGVtc2l6ZSwgYXJyLT5zZXQsIGFyci0+bnVtID86ICZ0ZW1wX251bSk7CisJCQkgICBhcnItPmVsZW1zaXplLCBhcnItPnNldCwga3AtPmZsYWdzLAorCQkJICAgYXJyLT5udW0gPzogJnRlbXBfbnVtKTsKIH0KIAogaW50IHBhcmFtX2FycmF5X2dldChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQpAQCAtNjA1LDExICs2MDQsNyBAQAogCiB2b2lkIGRlc3Ryb3lfcGFyYW1zKGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKnBhcmFtcywgdW5zaWduZWQgbnVtKQogewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQotCQlpZiAocGFyYW1zW2ldLmZsYWdzICYgS1BBUkFNX0tNQUxMT0NFRCkKLQkJCWtmcmVlKCooY2hhciAqKilwYXJhbXNbaV0uYXJnKTsKKwkvKiBGSVhNRTogVGhpcyBzaG91bGQgZnJlZSBrbWFsbG9jZWQgY2hhcnAgcGFyYW1ldGVycy4gIEl0IGRvZXNuJ3QuICovCiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA3NmFjNGRiLi43ZjI5NjQzIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC0xMDMwLDE0ICsxMDMxLDEwIEBACiAJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCiAJcGVyZl9kaXNhYmxlKCk7Ci0JaWYgKGN0eC0+bnJfYWN0aXZlKSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7Ci0JCQlpZiAoZXZlbnQgIT0gZXZlbnQtPmdyb3VwX2xlYWRlcikKLQkJCQlldmVudF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKLQkJCWVsc2UKLQkJCQlncm91cF9zY2hlZF9vdXQoZXZlbnQsIGNwdWN0eCwgY3R4KTsKLQkJfQotCX0KKwlpZiAoY3R4LT5ucl9hY3RpdmUpCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZjdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KQorCQkJZ3JvdXBfc2NoZWRfb3V0KGV2ZW50LCBjcHVjdHgsIGN0eCk7CisKIAlwZXJmX2VuYWJsZSgpOwogIG91dDoKIAlzcGluX3VubG9jaygmY3R4LT5sb2NrKTsKQEAgLTEyNTgsMTIgKzEyNTUsOCBAQAogCQlpZiAoZXZlbnQtPmNwdSAhPSAtMSAmJiBldmVudC0+Y3B1ICE9IGNwdSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQotCQkJZXZlbnRfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOwotCQllbHNlIHsKLQkJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCi0JCQkJZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpOwotCQl9CisJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgMSkpCisJCQlncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSk7CiAKIAkJLyoKIAkJICogSWYgdGhpcyBwaW5uZWQgZ3JvdXAgaGFzbid0IGJlZW4gc2NoZWR1bGVkLApAQCAtMTI5MSwxNSArMTI4NCw5IEBACiAJCWlmIChldmVudC0+Y3B1ICE9IC0xICYmIGV2ZW50LT5jcHUgIT0gY3B1KQogCQkJY29udGludWU7CiAKLQkJaWYgKGV2ZW50ICE9IGV2ZW50LT5ncm91cF9sZWFkZXIpIHsKLQkJCWlmIChldmVudF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCisJCWlmIChncm91cF9jYW5fZ29fb24oZXZlbnQsIGNwdWN0eCwgY2FuX2FkZF9odykpCisJCQlpZiAoZ3JvdXBfc2NoZWRfaW4oZXZlbnQsIGNwdWN0eCwgY3R4LCBjcHUpKQogCQkJCWNhbl9hZGRfaHcgPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKGdyb3VwX2Nhbl9nb19vbihldmVudCwgY3B1Y3R4LCBjYW5fYWRkX2h3KSkgewotCQkJCWlmIChncm91cF9zY2hlZF9pbihldmVudCwgY3B1Y3R4LCBjdHgsIGNwdSkpCi0JCQkJCWNhbl9hZGRfaHcgPSAwOwotCQkJfQotCQl9CiAJfQogCXBlcmZfZW5hYmxlKCk7CiAgb3V0OgpAQCAtMTM2OCw3ICsxMzU1LDcgQEAKIAl1NjQgaW50ZXJydXB0cywgZnJlcTsKIAogCXNwaW5fbG9jaygmY3R4LT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3R4LT5ncm91cF9saXN0LCBncm91cF9lbnRyeSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCAmY3R4LT5ldmVudF9saXN0LCBldmVudF9lbnRyeSkgewogCQlpZiAoZXZlbnQtPnN0YXRlICE9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFKQogCQkJY29udGludWU7CiAKQEAgLTIxMDUsNDkgKzIwOTIsMzEgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGludCBwZXJmX21tYXBfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGVyZl9kYXRhX3NpemUoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQogewotCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKLQlpbnQgcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwotCi0JaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX01LV1JJVEUpIHsKLQkJaWYgKHZtZi0+cGdvZmYgPT0gMCkKLQkJCXJldCA9IDA7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmN1X3JlYWRfbG9jaygpOwotCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOwotCWlmICghZGF0YSkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAodm1mLT5wZ29mZiA9PSAwKSB7Ci0JCXZtZi0+cGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhLT51c2VyX3BhZ2UpOwotCX0gZWxzZSB7Ci0JCWludCBuciA9IHZtZi0+cGdvZmYgLSAxOwotCi0JCWlmICgodW5zaWduZWQpbnIgPiBkYXRhLT5ucl9wYWdlcykKLQkJCWdvdG8gdW5sb2NrOwotCi0JCWlmICh2bWYtPmZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKLQkJCWdvdG8gdW5sb2NrOwotCi0JCXZtZi0+cGFnZSA9IHZpcnRfdG9fcGFnZShkYXRhLT5kYXRhX3BhZ2VzW25yXSk7Ci0JfQotCi0JZ2V0X3BhZ2Uodm1mLT5wYWdlKTsKLQl2bWYtPnBhZ2UtPm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKLQl2bWYtPnBhZ2UtPmluZGV4ICAgPSB2bWYtPnBnb2ZmOwotCi0JcmV0ID0gMDsKLXVubG9jazoKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGRhdGEtPm5yX3BhZ2VzIDw8IChQQUdFX1NISUZUICsgZGF0YS0+ZGF0YV9vcmRlcik7CiB9CiAKLXN0YXRpYyBpbnQgcGVyZl9tbWFwX2RhdGFfYWxsb2Moc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgbnJfcGFnZXMpCisjaWZuZGVmIENPTkZJR19QRVJGX1VTRV9WTUFMTE9DCisKKy8qCisgKiBCYWNrIHBlcmZfbW1hcCgpIHdpdGggcmVndWxhciBHRlBfS0VSTkVMLTAgcGFnZXMuCisgKi8KKworc3RhdGljIHN0cnVjdCBwYWdlICoKK3BlcmZfbW1hcF90b19wYWdlKHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSwgdW5zaWduZWQgbG9uZyBwZ29mZikKK3sKKwlpZiAocGdvZmYgPiBkYXRhLT5ucl9wYWdlcykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocGdvZmYgPT0gMCkKKwkJcmV0dXJuIHZpcnRfdG9fcGFnZShkYXRhLT51c2VyX3BhZ2UpOworCisJcmV0dXJuIHZpcnRfdG9fcGFnZShkYXRhLT5kYXRhX3BhZ2VzW3Bnb2ZmIC0gMV0pOworfQorCitzdGF0aWMgc3RydWN0IHBlcmZfbW1hcF9kYXRhICoKK3BlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQogewogCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC0yMTcyLDE5ICsyMTQxLDEwIEBACiAJCQlnb3RvIGZhaWxfZGF0YV9wYWdlczsKIAl9CiAKKwlkYXRhLT5kYXRhX29yZGVyID0gMDsKIAlkYXRhLT5ucl9wYWdlcyA9IG5yX3BhZ2VzOwotCWF0b21pY19zZXQoJmRhdGEtPmxvY2ssIC0xKTsKIAotCWlmIChldmVudC0+YXR0ci53YXRlcm1hcmspIHsKLQkJZGF0YS0+d2F0ZXJtYXJrID0gbWluX3QobG9uZywgUEFHRV9TSVpFICogbnJfcGFnZXMsCi0JCQkJICAgICAgZXZlbnQtPmF0dHIud2FrZXVwX3dhdGVybWFyayk7Ci0JfQotCWlmICghZGF0YS0+d2F0ZXJtYXJrKQotCQlkYXRhLT53YXRlcm1hcmsgPSBtYXgoUEFHRV9TSVpFLCBQQUdFX1NJWkUgKiBucl9wYWdlcyAvIDQpOwotCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5kYXRhLCBkYXRhKTsKLQotCXJldHVybiAwOworCXJldHVybiBkYXRhOwogCiBmYWlsX2RhdGFfcGFnZXM6CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQpAQCAtMjE5Niw3ICsyMTU2LDcgQEAKIAlrZnJlZShkYXRhKTsKIAogZmFpbDoKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9tbWFwX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIGFkZHIpCkBAIC0yMjA3LDI4ICsyMTY3LDE2OSBAQAogCV9fZnJlZV9wYWdlKHBhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBfX3BlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZCkKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQogewotCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKIAlpbnQgaTsKIAotCWRhdGEgPSBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCBwZXJmX21tYXBfZGF0YSwgcmN1X2hlYWQpOwotCiAJcGVyZl9tbWFwX2ZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkYXRhLT51c2VyX3BhZ2UpOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucl9wYWdlczsgaSsrKQogCQlwZXJmX21tYXBfZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRhdGEtPmRhdGFfcGFnZXNbaV0pOworfQogCisjZWxzZQorCisvKgorICogQmFjayBwZXJmX21tYXAoKSB3aXRoIHZtYWxsb2MgbWVtb3J5LgorICoKKyAqIFJlcXVpcmVkIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBkLWNhY2hlIGFsaWFzaW5nIGlzc3Vlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IHBhZ2UgKgorcGVyZl9tbWFwX3RvX3BhZ2Uoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQoreworCWlmIChwZ29mZiA+ICgxVUwgPDwgZGF0YS0+ZGF0YV9vcmRlcikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWRhdGEtPnVzZXJfcGFnZSArIHBnb2ZmICogUEFHRV9TSVpFKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX3VubWFya19wYWdlKHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisKKwlwYWdlLT5tYXBwaW5nID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfZnJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CisJdm9pZCAqYmFzZTsKKwlpbnQgaSwgbnI7CisKKwlkYXRhID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwZXJmX21tYXBfZGF0YSwgd29yayk7CisJbnIgPSAxIDw8IGRhdGEtPmRhdGFfb3JkZXI7CisKKwliYXNlID0gZGF0YS0+dXNlcl9wYWdlOworCWZvciAoaSA9IDA7IGkgPCBuciArIDE7IGkrKykKKwkJcGVyZl9tbWFwX3VubWFya19wYWdlKGJhc2UgKyAoaSAqIFBBR0VfU0laRSkpOworCisJdmZyZWUoYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhKQoreworCXNjaGVkdWxlX3dvcmsoJmRhdGEtPndvcmspOworfQorCitzdGF0aWMgc3RydWN0IHBlcmZfbW1hcF9kYXRhICoKK3BlcmZfbW1hcF9kYXRhX2FsbG9jKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IG5yX3BhZ2VzKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdm9pZCAqYWxsX2J1ZjsKKworCVdBUk5fT04oYXRvbWljX3JlYWQoJmV2ZW50LT5tbWFwX2NvdW50KSk7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBwZXJmX21tYXBfZGF0YSk7CisJc2l6ZSArPSBzaXplb2Yodm9pZCAqKTsKKworCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJZ290byBmYWlsOworCisJSU5JVF9XT1JLKCZkYXRhLT53b3JrLCBwZXJmX21tYXBfZGF0YV9mcmVlX3dvcmspOworCisJYWxsX2J1ZiA9IHZtYWxsb2NfdXNlcigobnJfcGFnZXMgKyAxKSAqIFBBR0VfU0laRSk7CisJaWYgKCFhbGxfYnVmKQorCQlnb3RvIGZhaWxfYWxsX2J1ZjsKKworCWRhdGEtPnVzZXJfcGFnZSA9IGFsbF9idWY7CisJZGF0YS0+ZGF0YV9wYWdlc1swXSA9IGFsbF9idWYgKyBQQUdFX1NJWkU7CisJZGF0YS0+ZGF0YV9vcmRlciA9IGlsb2cyKG5yX3BhZ2VzKTsKKwlkYXRhLT5ucl9wYWdlcyA9IDE7CisKKwlyZXR1cm4gZGF0YTsKKworZmFpbF9hbGxfYnVmOgorCWtmcmVlKGRhdGEpOworCitmYWlsOgorCXJldHVybiBOVUxMOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBwZXJmX21tYXBfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKwlpbnQgcmV0ID0gVk1fRkFVTFRfU0lHQlVTOworCisJaWYgKHZtZi0+ZmxhZ3MgJiBGQVVMVF9GTEFHX01LV1JJVEUpIHsKKwkJaWYgKHZtZi0+cGdvZmYgPT0gMCkKKwkJCXJldCA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCWRhdGEgPSByY3VfZGVyZWZlcmVuY2UoZXZlbnQtPmRhdGEpOworCWlmICghZGF0YSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAodm1mLT5wZ29mZiAmJiAodm1mLT5mbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpKQorCQlnb3RvIHVubG9jazsKKworCXZtZi0+cGFnZSA9IHBlcmZfbW1hcF90b19wYWdlKGRhdGEsIHZtZi0+cGdvZmYpOworCWlmICghdm1mLT5wYWdlKQorCQlnb3RvIHVubG9jazsKKworCWdldF9wYWdlKHZtZi0+cGFnZSk7CisJdm1mLT5wYWdlLT5tYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CisJdm1mLT5wYWdlLT5pbmRleCAgID0gdm1mLT5wZ29mZjsKKworCXJldCA9IDA7Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorcGVyZl9tbWFwX2RhdGFfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YSkKK3sKKwlsb25nIG1heF9zaXplID0gcGVyZl9kYXRhX3NpemUoZGF0YSk7CisKKwlhdG9taWNfc2V0KCZkYXRhLT5sb2NrLCAtMSk7CisKKwlpZiAoZXZlbnQtPmF0dHIud2F0ZXJtYXJrKSB7CisJCWRhdGEtPndhdGVybWFyayA9IG1pbl90KGxvbmcsIG1heF9zaXplLAorCQkJCQlldmVudC0+YXR0ci53YWtldXBfd2F0ZXJtYXJrKTsKKwl9CisKKwlpZiAoIWRhdGEtPndhdGVybWFyaykKKwkJZGF0YS0+d2F0ZXJtYXJrID0gbWF4X3QobG9uZywgUEFHRV9TSVpFLCBtYXhfc2l6ZSAvIDIpOworCisKKwlyY3VfYXNzaWduX3BvaW50ZXIoZXZlbnQtPmRhdGEsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBwZXJmX21tYXBfZGF0YV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKQoreworCXN0cnVjdCBwZXJmX21tYXBfZGF0YSAqZGF0YTsKKworCWRhdGEgPSBjb250YWluZXJfb2YocmN1X2hlYWQsIHN0cnVjdCBwZXJmX21tYXBfZGF0YSwgcmN1X2hlYWQpOworCXBlcmZfbW1hcF9kYXRhX2ZyZWUoZGF0YSk7CiAJa2ZyZWUoZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfbW1hcF9kYXRhX2ZyZWUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQorc3RhdGljIHZvaWQgcGVyZl9tbWFwX2RhdGFfcmVsZWFzZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfbW1hcF9kYXRhICpkYXRhID0gZXZlbnQtPmRhdGE7CiAKIAlXQVJOX09OKGF0b21pY19yZWFkKCZldmVudC0+bW1hcF9jb3VudCkpOwogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGV2ZW50LT5kYXRhLCBOVUxMKTsKLQljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIF9fcGVyZl9tbWFwX2RhdGFfZnJlZSk7CisJY2FsbF9yY3UoJmRhdGEtPnJjdV9oZWFkLCBwZXJmX21tYXBfZGF0YV9mcmVlX3JjdSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfbW1hcF9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpAQCAtMjI0NCwxNiArMjM0NSwxNyBAQAogCiAJV0FSTl9PTl9PTkNFKGV2ZW50LT5jdHgtPnBhcmVudF9jdHgpOwogCWlmIChhdG9taWNfZGVjX2FuZF9tdXRleF9sb2NrKCZldmVudC0+bW1hcF9jb3VudCwgJmV2ZW50LT5tbWFwX211dGV4KSkgeworCQl1bnNpZ25lZCBsb25nIHNpemUgPSBwZXJmX2RhdGFfc2l6ZShldmVudC0+ZGF0YSk7CiAJCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlciA9IGN1cnJlbnRfdXNlcigpOwogCi0JCWF0b21pY19sb25nX3N1YihldmVudC0+ZGF0YS0+bnJfcGFnZXMgKyAxLCAmdXNlci0+bG9ja2VkX3ZtKTsKKwkJYXRvbWljX2xvbmdfc3ViKChzaXplID4+IFBBR0VfU0hJRlQpICsgMSwgJnVzZXItPmxvY2tlZF92bSk7CiAJCXZtYS0+dm1fbW0tPmxvY2tlZF92bSAtPSBldmVudC0+ZGF0YS0+bnJfbG9ja2VkOwotCQlwZXJmX21tYXBfZGF0YV9mcmVlKGV2ZW50KTsKKwkJcGVyZl9tbWFwX2RhdGFfcmVsZWFzZShldmVudCk7CiAJCW11dGV4X3VubG9jaygmZXZlbnQtPm1tYXBfbXV0ZXgpOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBwZXJmX21tYXBfdm1vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBlcmZfbW1hcF92bW9wcyA9IHsKIAkub3BlbgkJPSBwZXJmX21tYXBfb3BlbiwKIAkuY2xvc2UJCT0gcGVyZl9tbWFwX2Nsb3NlLAogCS5mYXVsdAkJPSBwZXJmX21tYXBfZmF1bHQsCkBAIC0yMjY2LDYgKzIzNjgsNyBAQAogCXVuc2lnbmVkIGxvbmcgdXNlcl9sb2NrZWQsIHVzZXJfbG9ja19saW1pdDsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXIgPSBjdXJyZW50X3VzZXIoKTsKIAl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKKwlzdHJ1Y3QgcGVyZl9tbWFwX2RhdGEgKmRhdGE7CiAJdW5zaWduZWQgbG9uZyB2bWFfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzOwogCWxvbmcgdXNlcl9leHRyYSwgZXh0cmE7CkBAIC0yMzI4LDEwICsyNDMxLDE1IEBACiAJfQogCiAJV0FSTl9PTihldmVudC0+ZGF0YSk7Ci0JcmV0ID0gcGVyZl9tbWFwX2RhdGFfYWxsb2MoZXZlbnQsIG5yX3BhZ2VzKTsKLQlpZiAocmV0KQorCisJZGF0YSA9IHBlcmZfbW1hcF9kYXRhX2FsbG9jKGV2ZW50LCBucl9wYWdlcyk7CisJcmV0ID0gLUVOT01FTTsKKwlpZiAoIWRhdGEpCiAJCWdvdG8gdW5sb2NrOwogCisJcmV0ID0gMDsKKwlwZXJmX21tYXBfZGF0YV9pbml0KGV2ZW50LCBkYXRhKTsKKwogCWF0b21pY19zZXQoJmV2ZW50LT5tbWFwX2NvdW50LCAxKTsKIAlhdG9taWNfbG9uZ19hZGQodXNlcl9leHRyYSwgJnVzZXItPmxvY2tlZF92bSk7CiAJdm1hLT52bV9tbS0+bG9ja2VkX3ZtICs9IGV4dHJhOwpAQCAtMjUxOSw3ICsyNjI3LDcgQEAKIAlpZiAoIWRhdGEtPndyaXRhYmxlKQogCQlyZXR1cm4gdHJ1ZTsKIAotCW1hc2sgPSAoZGF0YS0+bnJfcGFnZXMgPDwgUEFHRV9TSElGVCkgLSAxOworCW1hc2sgPSBwZXJmX2RhdGFfc2l6ZShkYXRhKSAtIDE7CiAKIAlvZmZzZXQgPSAob2Zmc2V0IC0gdGFpbCkgJiBtYXNrOwogCWhlYWQgICA9IChoZWFkICAgLSB0YWlsKSAmIG1hc2s7CkBAIC0yNjI0LDcgKzI3MzIsNyBAQAogCQkgICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IHBhZ2VzX21hc2s7Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl2b2lkICoqcGFnZXM7CiAKQEAgLTI2MzMsMTIgKzI3NDEsMTQgQEAKIAlwYWdlcwkJPSBoYW5kbGUtPmRhdGEtPmRhdGFfcGFnZXM7CiAKIAlkbyB7Ci0JCXVuc2lnbmVkIGludCBwYWdlX29mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBwYWdlX29mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBwYWdlX3NpemU7CiAJCWludCBucjsKIAogCQlucgkgICAgPSAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpICYgcGFnZXNfbWFzazsKLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFIC0gMSk7Ci0JCXNpemUJICAgID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUgLSBwYWdlX29mZnNldCwgbGVuKTsKKwkJcGFnZV9zaXplICAgPSAxVUwgPDwgKGhhbmRsZS0+ZGF0YS0+ZGF0YV9vcmRlciArIFBBR0VfU0hJRlQpOworCQlwYWdlX29mZnNldCA9IG9mZnNldCAmIChwYWdlX3NpemUgLSAxKTsKKwkJc2l6ZQkgICAgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2Vfc2l6ZSAtIHBhZ2Vfb2Zmc2V0LCBsZW4pOwogCiAJCW1lbWNweShwYWdlc1tucl0gKyBwYWdlX29mZnNldCwgYnVmLCBzaXplKTsKIApAQCAtMzg0OSw4ICszOTU5LDkgQEAKIAkJcmVncyA9IHRhc2tfcHRfcmVncyhjdXJyZW50KTsKIAogCWlmIChyZWdzKSB7Ci0JCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCAmZGF0YSwgcmVncykpCi0JCQlyZXQgPSBIUlRJTUVSX05PUkVTVEFSVDsKKwkJaWYgKCEoZXZlbnQtPmF0dHIuZXhjbHVkZV9pZGxlICYmIGN1cnJlbnQtPnBpZCA9PSAwKSkKKwkJCWlmIChwZXJmX2V2ZW50X292ZXJmbG93KGV2ZW50LCAwLCAmZGF0YSwgcmVncykpCisJCQkJcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CiAJfQogCiAJcGVyaW9kID0gbWF4X3QodTY0LCAxMDAwMCwgZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2QpOwpAQCAtMzg1OSw2ICszOTcwLDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgcGVyZl9zd2V2ZW50X3N0YXJ0X2hydGltZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3OworCisJaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHdjLT5ocnRpbWVyLmZ1bmN0aW9uID0gcGVyZl9zd2V2ZW50X2hydGltZXI7CisJaWYgKGh3Yy0+c2FtcGxlX3BlcmlvZCkgeworCQl1NjQgcGVyaW9kOworCisJCWlmIChod2MtPnJlbWFpbmluZykgeworCQkJaWYgKGh3Yy0+cmVtYWluaW5nIDwgMCkKKwkJCQlwZXJpb2QgPSAxMDAwMDsKKwkJCWVsc2UKKwkJCQlwZXJpb2QgPSBod2MtPnJlbWFpbmluZzsKKwkJCWh3Yy0+cmVtYWluaW5nID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7CisJCX0KKwkJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZod2MtPmhydGltZXIsCisJCQkJbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwKKwkJCQlIUlRJTUVSX01PREVfUkVMLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfc3dldmVudF9jYW5jZWxfaHJ0aW1lcihzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7CisKKwlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7CisJCWt0aW1lX3QgcmVtYWluaW5nID0gaHJ0aW1lcl9nZXRfcmVtYWluaW5nKCZod2MtPmhydGltZXIpOworCQlod2MtPnJlbWFpbmluZyA9IGt0aW1lX3RvX25zKHJlbWFpbmluZyk7CisKKwkJaHJ0aW1lcl9jYW5jZWwoJmh3Yy0+aHJ0aW1lcik7CisJfQorfQorCiAvKgogICogU29mdHdhcmUgZXZlbnQ6IGNwdSB3YWxsIHRpbWUgY2xvY2sKICAqLwpAQCAtMzg4MSwyMiArNDAyOCwxNCBAQAogCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJYXRvbWljNjRfc2V0KCZod2MtPnByZXZfY291bnQsIGNwdV9jbG9jayhjcHUpKTsKLQlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7Ci0JCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKLQkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAotCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOwotCX0KKwlwZXJmX3N3ZXZlbnRfc3RhcnRfaHJ0aW1lcihldmVudCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgY3B1X2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQotCQlocnRpbWVyX2NhbmNlbCgmZXZlbnQtPmh3LmhydGltZXIpOworCXBlcmZfc3dldmVudF9jYW5jZWxfaHJ0aW1lcihldmVudCk7CiAJY3B1X2Nsb2NrX3BlcmZfZXZlbnRfdXBkYXRlKGV2ZW50KTsKIH0KIApAQCAtMzkzMywyMiArNDA3MiwxNSBAQAogCW5vdyA9IGV2ZW50LT5jdHgtPnRpbWU7CiAKIAlhdG9taWM2NF9zZXQoJmh3Yy0+cHJldl9jb3VudCwgbm93KTsKLQlocnRpbWVyX2luaXQoJmh3Yy0+aHJ0aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKLQlod2MtPmhydGltZXIuZnVuY3Rpb24gPSBwZXJmX3N3ZXZlbnRfaHJ0aW1lcjsKLQlpZiAoaHdjLT5zYW1wbGVfcGVyaW9kKSB7Ci0JCXU2NCBwZXJpb2QgPSBtYXhfdCh1NjQsIDEwMDAwLCBod2MtPnNhbXBsZV9wZXJpb2QpOwotCQlfX2hydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmh3Yy0+aHJ0aW1lciwKLQkJCQluc190b19rdGltZShwZXJpb2QpLCAwLAotCQkJCUhSVElNRVJfTU9ERV9SRUwsIDApOwotCX0KKworCXBlcmZfc3dldmVudF9zdGFydF9ocnRpbWVyKGV2ZW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0YXNrX2Nsb2NrX3BlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0JaWYgKGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQotCQlocnRpbWVyX2NhbmNlbCgmZXZlbnQtPmh3LmhydGltZXIpOworCXBlcmZfc3dldmVudF9jYW5jZWxfaHJ0aW1lcihldmVudCk7CiAJdGFza19jbG9ja19wZXJmX2V2ZW50X3VwZGF0ZShldmVudCwgZXZlbnQtPmN0eC0+dGltZSk7CiAKIH0KQEAgLTQ3ODEsOSArNDkxMyw3IEBACiAJICogV2UgZG9udCBoYXZlIHRvIGRpc2FibGUgTk1JcyAtIHdlIGFyZSBvbmx5IGxvb2tpbmcgYXQKIAkgKiB0aGUgbGlzdCwgbm90IG1hbmlwdWxhdGluZyBpdDoKIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShldmVudCwgJnBhcmVudF9jdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KSB7Ci0JCWlmIChldmVudCAhPSBldmVudC0+Z3JvdXBfbGVhZGVyKQotCQkJY29udGludWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJnBhcmVudF9jdHgtPmdyb3VwX2xpc3QsIGdyb3VwX2VudHJ5KSB7CiAKIAkJaWYgKCFldmVudC0+YXR0ci5pbmhlcml0KSB7CiAJCQlpbmhlcml0ZWRfYWxsID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwppbmRleCAwNGIzYTgzLi4wNGE5ZTkwIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKKysrIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCkBAIC02OTMsMjEgKzY5MywyMiBAQAogCS8qIFRoZSBzbmFwc2hvdCBkZXZpY2Ugc2hvdWxkIG5vdCBiZSBvcGVuZWQgd2hpbGUgd2UncmUgcnVubmluZyAqLwogCWlmICghYXRvbWljX2FkZF91bmxlc3MoJnNuYXBzaG90X2RldmljZV9hdmFpbGFibGUsIC0xLCAwKSkgewogCQllcnJvciA9IC1FQlVTWTsKKwkJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOwogCQlnb3RvIFVubG9jazsKIAl9CiAKIAlwbV9wcmVwYXJlX2NvbnNvbGUoKTsKIAllcnJvciA9IHBtX25vdGlmaWVyX2NhbGxfY2hhaW4oUE1fUkVTVE9SRV9QUkVQQVJFKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gRmluaXNoOworCQlnb3RvIGNsb3NlX2ZpbmlzaDsKIAogCWVycm9yID0gdXNlcm1vZGVoZWxwZXJfZGlzYWJsZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBGaW5pc2g7CisJCWdvdG8gY2xvc2VfZmluaXNoOwogCiAJZXJyb3IgPSBjcmVhdGVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gRmluaXNoOworCQlnb3RvIGNsb3NlX2ZpbmlzaDsKIAogCXByX2RlYnVnKCJQTTogUHJlcGFyaW5nIHByb2Nlc3NlcyBmb3IgcmVzdG9yZS5cbiIpOwogCWVycm9yID0gcHJlcGFyZV9wcm9jZXNzZXMoKTsKQEAgLTcxOSw2ICs3MjAsNyBAQAogCXByX2RlYnVnKCJQTTogUmVhZGluZyBoaWJlcm5hdGlvbiBpbWFnZS5cbiIpOwogCiAJZXJyb3IgPSBzd3N1c3BfcmVhZCgmZmxhZ3MpOworCXN3c3VzcF9jbG9zZShGTU9ERV9SRUFEKTsKIAlpZiAoIWVycm9yKQogCQloaWJlcm5hdGlvbl9yZXN0b3JlKGZsYWdzICYgU0ZfUExBVEZPUk1fTU9ERSk7CiAKQEAgLTczNyw2ICs3MzksOSBAQAogCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOwogCXByX2RlYnVnKCJQTTogUmVzdW1lIGZyb20gZGlzayBmYWlsZWQuXG4iKTsKIAlyZXR1cm4gZXJyb3I7CitjbG9zZV9maW5pc2g6CisJc3dzdXNwX2Nsb3NlKEZNT0RFX1JFQUQpOworCWdvdG8gRmluaXNoOwogfQogCiBsYXRlX2luaXRjYWxsKHNvZnR3YXJlX3Jlc3VtZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKaW5kZXggMTdkOGJiMWEuLjI1NTk2ZTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kX3Rlc3QuYworKysgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZF90ZXN0LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIFRoZSB0aW1lIGl0IHRha2VzIGlzIHN5c3RlbS1zcGVjaWZpYyB0aG91Z2gsIHNvIHdoZW4gd2UgdGVzdCB0aGlzCiAgKiBkdXJpbmcgc3lzdGVtIGJvb3R1cCB3ZSBhbGxvdyBhIExPVCBvZiB0aW1lLgogICovCi0jZGVmaW5lIFRFU1RfU1VTUEVORF9TRUNPTkRTCTUKKyNkZWZpbmUgVEVTVF9TVVNQRU5EX1NFQ09ORFMJMTAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VzcGVuZF90ZXN0X3N0YXJ0X3RpbWU7CiAKQEAgLTQ5LDcgKzQ5LDggQEAKIAkgKiBoYXMgc29tZSBwZXJmb3JtYW5jZSBpc3N1ZXMuICBUaGUgc3RhY2sgZHVtcCBvZiBhIFdBUk5fT04KIAkgKiBpcyBtb3JlIGxpa2VseSB0byBnZXQgdGhlIHJpZ2h0IGF0dGVudGlvbiB0aGFuIGEgcHJpbnRrLi4uCiAJICovCi0JV0FSTihtc2VjID4gKFRFU1RfU1VTUEVORF9TRUNPTkRTICogMTAwMCksICJDb21wb25lbnQ6ICVzXG4iLCBsYWJlbCk7CisJV0FSTihtc2VjID4gKFRFU1RfU1VTUEVORF9TRUNPTkRTICogMTAwMCksCisJICAgICAiQ29tcG9uZW50OiAlcywgdGltZTogJXVcbiIsIGxhYmVsLCBtc2VjKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd2FwLmMgYi9rZXJuZWwvcG93ZXIvc3dhcC5jCmluZGV4IGIxMDFjZGMuLjg5MGY2YjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zd2FwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3YXAuYwpAQCAtMzE0LDcgKzMxNCw2IEBACiB7CiAJdW5zaWduZWQgaW50IG07CiAJaW50IHJldDsKLQlpbnQgZXJyb3IgPSAwOwogCWludCBucl9wYWdlczsKIAlpbnQgZXJyMjsKIAlzdHJ1Y3QgYmlvICpiaW87CkBAIC0zMjksMjYgKzMyOCwyNyBAQAogCW5yX3BhZ2VzID0gMDsKIAliaW8gPSBOVUxMOwogCWRvX2dldHRpbWVvZmRheSgmc3RhcnQpOwotCWRvIHsKKwl3aGlsZSAoMSkgewogCQlyZXQgPSBzbmFwc2hvdF9yZWFkX25leHQoc25hcHNob3QsIFBBR0VfU0laRSk7Ci0JCWlmIChyZXQgPiAwKSB7Ci0JCQllcnJvciA9IHN3YXBfd3JpdGVfcGFnZShoYW5kbGUsIGRhdGFfb2YoKnNuYXBzaG90KSwKLQkJCQkJCSZiaW8pOwotCQkJaWYgKGVycm9yKQotCQkJCWJyZWFrOwotCQkJaWYgKCEobnJfcGFnZXMgJSBtKSkKLQkJCQlwcmludGsoIlxiXGJcYlxiJTNkJSUiLCBucl9wYWdlcyAvIG0pOwotCQkJbnJfcGFnZXMrKzsKLQkJfQotCX0gd2hpbGUgKHJldCA+IDApOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwkJcmV0ID0gc3dhcF93cml0ZV9wYWdlKGhhbmRsZSwgZGF0YV9vZigqc25hcHNob3QpLCAmYmlvKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlpZiAoIShucl9wYWdlcyAlIG0pKQorCQkJcHJpbnRrKCJcYlxiXGJcYiUzZCUlIiwgbnJfcGFnZXMgLyBtKTsKKwkJbnJfcGFnZXMrKzsKKwl9CiAJZXJyMiA9IHdhaXRfb25fYmlvX2NoYWluKCZiaW8pOwogCWRvX2dldHRpbWVvZmRheSgmc3RvcCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBlcnIyOwotCWlmICghZXJyb3IpCisJaWYgKCFyZXQpCisJCXJldCA9IGVycjI7CisJaWYgKCFyZXQpCiAJCXByaW50aygiXGJcYlxiXGJkb25lXG4iKTsKKwllbHNlCisJCXByaW50aygiXG4iKTsKIAlzd3N1c3Bfc2hvd19zcGVlZCgmc3RhcnQsICZzdG9wLCBucl90b193cml0ZSwgIldyb3RlIik7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNTM2LDcgKzUzNiw4IEBACiAJCXNuYXBzaG90X3dyaXRlX2ZpbmFsaXplKHNuYXBzaG90KTsKIAkJaWYgKCFzbmFwc2hvdF9pbWFnZV9sb2FkZWQoc25hcHNob3QpKQogCQkJZXJyb3IgPSAtRU5PREFUQTsKLQl9CisJfSBlbHNlCisJCXByaW50aygiXG4iKTsKIAlzd3N1c3Bfc2hvd19zcGVlZCgmc3RhcnQsICZzdG9wLCBucl90b19yZWFkLCAiUmVhZCIpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTU3Miw4ICs1NzMsNiBAQAogCQllcnJvciA9IGxvYWRfaW1hZ2UoJmhhbmRsZSwgJnNuYXBzaG90LCBoZWFkZXItPnBhZ2VzIC0gMSk7CiAJcmVsZWFzZV9zd2FwX3JlYWRlcigmaGFuZGxlKTsKIAotCWJsa2Rldl9wdXQocmVzdW1lX2JkZXYsIEZNT0RFX1JFQUQpOwotCiAJaWYgKCFlcnJvcikKIAkJcHJfZGVidWcoIlBNOiBJbWFnZSBzdWNjZXNzZnVsbHkgbG9hZGVkXG4iKTsKIAllbHNlCkBAIC01OTYsNyArNTk1LDcgQEAKIAkJZXJyb3IgPSBiaW9fcmVhZF9wYWdlKHN3c3VzcF9yZXN1bWVfYmxvY2ssCiAJCQkJCXN3c3VzcF9oZWFkZXIsIE5VTEwpOwogCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7CisJCQlnb3RvIHB1dDsKIAogCQlpZiAoIW1lbWNtcChTV1NVU1BfU0lHLCBzd3N1c3BfaGVhZGVyLT5zaWcsIDEwKSkgewogCQkJbWVtY3B5KHN3c3VzcF9oZWFkZXItPnNpZywgc3dzdXNwX2hlYWRlci0+b3JpZ19zaWcsIDEwKTsKQEAgLTYwNCw4ICs2MDMsMTAgQEAKIAkJCWVycm9yID0gYmlvX3dyaXRlX3BhZ2Uoc3dzdXNwX3Jlc3VtZV9ibG9jaywKIAkJCQkJCXN3c3VzcF9oZWFkZXIsIE5VTEwpOwogCQl9IGVsc2UgewotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllcnJvciA9IC1FSU5WQUw7CiAJCX0KKworcHV0OgogCQlpZiAoZXJyb3IpCiAJCQlibGtkZXZfcHV0KHJlc3VtZV9iZGV2LCBGTU9ERV9SRUFEKTsKIAkJZWxzZQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXBkYXRlLmMgYi9rZXJuZWwvcmN1cGRhdGUuYwppbmRleCAzN2FjNDU0Li40MDAxODMzIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1cGRhdGUuYworKysgYi9rZXJuZWwvcmN1cGRhdGUuYwpAQCAtNDYsMjIgKzQ2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAotZW51bSByY3VfYmFycmllciB7Ci0JUkNVX0JBUlJJRVJfU1RELAotCVJDVV9CQVJSSUVSX0JILAotCVJDVV9CQVJSSUVSX1NDSEVELAotfTsKKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7CitzdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwID0KKwlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9jayIsICZyY3VfbG9ja19rZXkpOworRVhQT1JUX1NZTUJPTF9HUEwocmN1X2xvY2tfbWFwKTsKKyNlbmRpZgogCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9oZWFkLCByY3VfYmFycmllcl9oZWFkKSA9IHtOVUxMfTsKLXN0YXRpYyBhdG9taWNfdCByY3VfYmFycmllcl9jcHVfY291bnQ7Ci1zdGF0aWMgREVGSU5FX01VVEVYKHJjdV9iYXJyaWVyX211dGV4KTsKLXN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiByY3VfYmFycmllcl9jb21wbGV0aW9uOwogaW50IHJjdV9zY2hlZHVsZXJfYWN0aXZlIF9fcmVhZF9tb3N0bHk7CiAKLXN0YXRpYyBhdG9taWNfdCByY3VfbWlncmF0ZV90eXBlX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV9taWdyYXRlX2hlYWRbM107Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmN1X21pZ3JhdGVfd3EpOwotCiAvKgogICogQXdha2VuIHRoZSBjb3JyZXNwb25kaW5nIHN5bmNocm9uaXplX3JjdSgpIGluc3RhbmNlIG5vdyB0aGF0IGEKICAqIGdyYWNlIHBlcmlvZCBoYXMgZWxhcHNlZC4KQEAgLTE2NCwxMjkgKzE1NywxMCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2JoKTsKIAotc3RhdGljIHZvaWQgcmN1X2JhcnJpZXJfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfYmFycmllcl9jcHVfY291bnQpKQotCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgZnJvbSBjcm9zcy1jcHUgSVJRIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2Z1bmModm9pZCAqdHlwZSkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCByY3VfaGVhZCAqaGVhZCA9ICZwZXJfY3B1KHJjdV9iYXJyaWVyX2hlYWQsIGNwdSk7Ci0KLQlhdG9taWNfaW5jKCZyY3VfYmFycmllcl9jcHVfY291bnQpOwotCXN3aXRjaCAoKGVudW0gcmN1X2JhcnJpZXIpdHlwZSkgewotCWNhc2UgUkNVX0JBUlJJRVJfU1REOgotCQljYWxsX3JjdShoZWFkLCByY3VfYmFycmllcl9jYWxsYmFjayk7Ci0JCWJyZWFrOwotCWNhc2UgUkNVX0JBUlJJRVJfQkg6Ci0JCWNhbGxfcmN1X2JoKGhlYWQsIHJjdV9iYXJyaWVyX2NhbGxiYWNrKTsKLQkJYnJlYWs7Ci0JY2FzZSBSQ1VfQkFSUklFUl9TQ0hFRDoKLQkJY2FsbF9yY3Vfc2NoZWQoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKQotewotCXdhaXRfZXZlbnQocmN1X21pZ3JhdGVfd3EsICFhdG9taWNfcmVhZCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpOwotCXNtcF9tYigpOyAvKiBJbiBjYXNlIHdlIGRpZG4ndCBzbGVlcC4gKi8KLX0KLQotLyoKLSAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCi0gKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KLSAqLwotc3RhdGljIHZvaWQgX3JjdV9iYXJyaWVyKGVudW0gcmN1X2JhcnJpZXIgdHlwZSkKLXsKLQlCVUdfT04oaW5faW50ZXJydXB0KCkpOwotCS8qIFRha2UgY3B1Y29udHJvbCBtdXRleCB0byBwcm90ZWN0IGFnYWluc3QgQ1BVIGhvdHBsdWcgKi8KLQltdXRleF9sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQkvKgotCSAqIEluaXRpYWxpemUgcmN1X2JhcnJpZXJfY3B1X2NvdW50IHRvIDEsIHRoZW4gaW52b2tlCi0JICogcmN1X2JhcnJpZXJfZnVuYygpIG9uIGVhY2ggQ1BVLCBzbyB0aGF0IGVhY2ggQ1BVIGFsc28gaGFzCi0JICogaW5jcmVtZW50ZWQgcmN1X2JhcnJpZXJfY3B1X2NvdW50LiAgT25seSB0aGVuIGlzIGl0IHNhZmUgdG8KLQkgKiBkZWNyZW1lbnQgcmN1X2JhcnJpZXJfY3B1X2NvdW50IC0tIG90aGVyd2lzZSB0aGUgZmlyc3QgQ1BVCi0JICogbWlnaHQgY29tcGxldGUgaXRzIGdyYWNlIHBlcmlvZCBiZWZvcmUgYWxsIG9mIHRoZSBvdGhlciBDUFVzCi0JICogZGlkIHRoZWlyIGluY3JlbWVudCwgY2F1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiB0b28KLQkgKiBlYXJseS4KLQkgKi8KLQlhdG9taWNfc2V0KCZyY3VfYmFycmllcl9jcHVfY291bnQsIDEpOwotCW9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCi0JCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKLQltdXRleF91bmxvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKLQl3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcygpOwotfQotCi0vKioKLSAqIHJjdV9iYXJyaWVyIC0gV2FpdCB1bnRpbCBhbGwgaW4tZmxpZ2h0IGNhbGxfcmN1KCkgY2FsbGJhY2tzIGNvbXBsZXRlLgotICovCi12b2lkIHJjdV9iYXJyaWVyKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX1NURCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcik7Ci0KLS8qKgotICogcmN1X2JhcnJpZXJfYmggLSBXYWl0IHVudGlsIGFsbCBpbi1mbGlnaHQgY2FsbF9yY3VfYmgoKSBjYWxsYmFja3MgY29tcGxldGUuCi0gKi8KLXZvaWQgcmN1X2JhcnJpZXJfYmgodm9pZCkKLXsKLQlfcmN1X2JhcnJpZXIoUkNVX0JBUlJJRVJfQkgpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfYmgpOwotCi0vKioKLSAqIHJjdV9iYXJyaWVyX3NjaGVkIC0gV2FpdCBmb3IgaW4tZmxpZ2h0IGNhbGxfcmN1X3NjaGVkKCkgY2FsbGJhY2tzLgotICovCi12b2lkIHJjdV9iYXJyaWVyX3NjaGVkKHZvaWQpCi17Ci0JX3JjdV9iYXJyaWVyKFJDVV9CQVJSSUVSX1NDSEVEKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyX3NjaGVkKTsKLQotc3RhdGljIHZvaWQgcmN1X21pZ3JhdGVfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpub3R1c2VkKQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyY3VfbWlncmF0ZV90eXBlX2NvdW50KSkKLQkJd2FrZV91cCgmcmN1X21pZ3JhdGVfd3EpOwotfQotCi1leHRlcm4gaW50IHJjdV9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKLQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpOwotCiBzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfYmFycmllcl9jcHVfaG90cGx1ZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewotCXJjdV9jcHVfbm90aWZ5KHNlbGYsIGFjdGlvbiwgaGNwdSk7Ci0JaWYgKGFjdGlvbiA9PSBDUFVfRFlJTkcpIHsKLQkJLyoKLQkJICogcHJlZW1wdF9kaXNhYmxlKCkgaW4gb25fZWFjaF9jcHUoKSBwcmV2ZW50cyBzdG9wX21hY2hpbmUoKSwKLQkJICogc28gd2hlbiAib25fZWFjaF9jcHUocmN1X2JhcnJpZXJfZnVuYywgKHZvaWQgKil0eXBlLCAxKTsiCi0JCSAqIHJldHVybnMsIGFsbCBvbmxpbmUgY3B1cyBoYXZlIHF1ZXVlZCByY3VfYmFycmllcl9mdW5jKCksCi0JCSAqIGFuZCB0aGUgZGVhZCBjcHUoaWYgaXQgZXhpc3QpIHF1ZXVlcyByY3VfbWlncmF0ZV9jYWxsYmFjaygpcy4KLQkJICoKLQkJICogVGhlc2UgY2FsbGJhY2tzIGVuc3VyZSBfcmN1X2JhcnJpZXIoKSB3YWl0cyBmb3IgYWxsCi0JCSAqIFJDVSBjYWxsYmFja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRvIGNvbXBsZXRlLgotCQkgKi8KLQkJYXRvbWljX3NldCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCwgMyk7Ci0JCWNhbGxfcmN1X2JoKHJjdV9taWdyYXRlX2hlYWQsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQkJY2FsbF9yY3Vfc2NoZWQocmN1X21pZ3JhdGVfaGVhZCArIDEsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQkJY2FsbF9yY3UocmN1X21pZ3JhdGVfaGVhZCArIDIsIHJjdV9taWdyYXRlX2NhbGxiYWNrKTsKLQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBDUFVfRE9XTl9QUkVQQVJFKSB7Ci0JCS8qIERvbid0IG5lZWQgdG8gd2FpdCB1bnRpbCBuZXh0IHJlbW92YWwgb3BlcmF0aW9uLiAqLwotCQkvKiByY3VfbWlncmF0ZV9oZWFkIGlzIHByb3RlY3RlZCBieSBjcHVfYWRkX3JlbW92ZV9sb2NrICovCi0JCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9PSzsKKwlyZXR1cm4gcmN1X2NwdV9ub3RpZnkoc2VsZiwgYWN0aW9uLCBoY3B1KTsKIH0KIAogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCmluZGV4IDIzMzc2OGYuLjY5N2MwYTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0b3J0dXJlLmMKKysrIGIva2VybmVsL3JjdXRvcnR1cmUuYwpAQCAtNjA2LDggKzYwNiw2IEBACiAJLm5hbWUJCT0gInNjaGVkX3N5bmMiCiB9OwogCi1leHRlcm4gaW50IHJjdV9leHBlZGl0ZWRfdG9ydHVyZV9zdGF0cyhjaGFyICpwYWdlKTsKLQogc3RhdGljIHN0cnVjdCByY3VfdG9ydHVyZV9vcHMgc2NoZWRfZXhwZWRpdGVkX29wcyA9IHsKIAkuaW5pdAkJPSByY3Vfc3luY190b3J0dXJlX2luaXQsCiAJLmNsZWFudXAJPSBOVUxMLApAQCAtNjUwLDcgKzY0OCw3IEBACiAJCW9sZF9ycCA9IHJjdV90b3J0dXJlX2N1cnJlbnQ7CiAJCXJwLT5ydG9ydF9tYnRlc3QgPSAxOwogCQlyY3VfYXNzaWduX3BvaW50ZXIocmN1X3RvcnR1cmVfY3VycmVudCwgcnApOwotCQlzbXBfd21iKCk7CisJCXNtcF93bWIoKTsgLyogTW9kcyB0byBvbGRfcnAgbXVzdCBmb2xsb3cgcmN1X2Fzc2lnbl9wb2ludGVyKCkgKi8KIAkJaWYgKG9sZF9ycCkgewogCQkJaSA9IG9sZF9ycC0+cnRvcnRfcGlwZV9jb3VudDsKIAkJCWlmIChpID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dHJlZS5jIGIva2VybmVsL3JjdXRyZWUuYwppbmRleCA1MmIwNmY2Li5mMzA3N2MwIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dHJlZS5jCisrKyBiL2tlcm5lbC9yY3V0cmVlLmMKQEAgLTQ5LDEzICs0OSw2IEBACiAKICNpbmNsdWRlICJyY3V0cmVlLmgiCiAKLSNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwotc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSByY3VfbG9ja19rZXk7Ci1zdHJ1Y3QgbG9ja2RlcF9tYXAgcmN1X2xvY2tfbWFwID0KLQlTVEFUSUNfTE9DS0RFUF9NQVBfSU5JVCgicmN1X3JlYWRfbG9jayIsICZyY3VfbG9ja19rZXkpOwotRVhQT1JUX1NZTUJPTF9HUEwocmN1X2xvY2tfbWFwKTsKLSNlbmRpZgotCiAvKiBEYXRhIHN0cnVjdHVyZXMuICovCiAKICNkZWZpbmUgUkNVX1NUQVRFX0lOSVRJQUxJWkVSKG5hbWUpIHsgXApAQCAtNjYsMTAgKzU5LDEzIEBACiAJCU5VTV9SQ1VfTFZMXzIsIFwKIAkJTlVNX1JDVV9MVkxfMywgLyogPT0gTUFYX1JDVV9MVkxTICovIFwKIAl9LCBcCi0JLnNpZ25hbGVkID0gUkNVX1NJR05BTF9JTklULCBcCisJLnNpZ25hbGVkID0gUkNVX0dQX0lETEUsIFwKIAkuZ3BudW0gPSAtMzAwLCBcCiAJLmNvbXBsZXRlZCA9IC0zMDAsIFwKIAkub25vZmZsb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoJm5hbWUub25vZmZsb2NrKSwgXAorCS5vcnBoYW5fY2JzX2xpc3QgPSBOVUxMLCBcCisJLm9ycGhhbl9jYnNfdGFpbCA9ICZuYW1lLm9ycGhhbl9jYnNfbGlzdCwgXAorCS5vcnBoYW5fcWxlbiA9IDAsIFwKIAkuZnFzbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKCZuYW1lLmZxc2xvY2spLCBcCiAJLm5fZm9yY2VfcXMgPSAwLCBcCiAJLm5fZm9yY2VfcXNfbmdwID0gMCwgXApAQCAtODEsMjQgKzc3LDE2IEBACiBzdHJ1Y3QgcmN1X3N0YXRlIHJjdV9iaF9zdGF0ZSA9IFJDVV9TVEFURV9JTklUSUFMSVpFUihyY3VfYmhfc3RhdGUpOwogREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV9kYXRhLCByY3VfYmhfZGF0YSk7CiAKLWV4dGVybiBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKTsKLXN0YXRpYyBzdHJ1Y3QgcmN1X25vZGUgKnJjdV9nZXRfcm9vdChzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotc3RhdGljIHZvaWQgY3B1X3F1aWV0X21zayh1bnNpZ25lZCBsb25nIG1hc2ssIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCSAgc3RydWN0IHJjdV9ub2RlICpybnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotc3RhdGljIHZvaWQgY3B1X3F1aWV0X21za19maW5pc2goc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyB2b2lkIF9fcmN1X29mZmxpbmVfY3B1KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7Ci0jZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwotc3RhdGljIHZvaWQgX19yY3VfcHJvY2Vzc19jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7Ci1zdGF0aWMgdm9pZCBfX2NhbGxfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCwKLQkJICAgICAgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKnJjdSksCi0JCSAgICAgICBzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApOwotc3RhdGljIGludCBfX3JjdV9wZW5kaW5nKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApOwotc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9pbml0X3BlcmNwdV9kYXRhKGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkJICAgaW50IHByZWVtcHRhYmxlKTsKIAotI2luY2x1ZGUgInJjdXRyZWVfcGx1Z2luLmgiCisvKgorICogUmV0dXJuIHRydWUgaWYgYW4gUkNVIGdyYWNlIHBlcmlvZCBpcyBpbiBwcm9ncmVzcy4gIFRoZSBBQ0NFU1NfT05DRSgpcworICogcGVybWl0IHRoaXMgZnVuY3Rpb24gdG8gYmUgaW52b2tlZCB3aXRob3V0IGhvbGRpbmcgdGhlIHJvb3QgcmN1X25vZGUKKyAqIHN0cnVjdHVyZSdzIC0+bG9jaywgYnV0IG9mIGNvdXJzZSByZXN1bHRzIGNhbiBiZSBzdWJqZWN0IHRvIGNoYW5nZS4KKyAqLworc3RhdGljIGludCByY3VfZ3BfaW5fcHJvZ3Jlc3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQoreworCXJldHVybiBBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgIT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSk7Cit9CiAKIC8qCiAgKiBOb3RlIGEgcXVpZXNjZW50IHN0YXRlLiAgQmVjYXVzZSB3ZSBkbyBub3QgbmVlZCB0byBrbm93CkBAIC0xMzcsNiArMTI1LDEwIEBACiBzdGF0aWMgaW50IHFoaW1hcmsgPSAxMDAwMDsJLyogSWYgdGhpcyBtYW55IHBlbmRpbmcsIGlnbm9yZSBibGltaXQuICovCiBzdGF0aWMgaW50IHFsb3dtYXJrID0gMTAwOwkvKiBPbmNlIG9ubHkgdGhpcyBtYW55IHBlbmRpbmcsIHVzZSBibGltaXQuICovCiAKK21vZHVsZV9wYXJhbShibGltaXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocWhpbWFyaywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShxbG93bWFyaywgaW50LCAwKTsKKwogc3RhdGljIHZvaWQgZm9yY2VfcXVpZXNjZW50X3N0YXRlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IHJlbGF4ZWQpOwogc3RhdGljIGludCByY3VfcGVuZGluZyhpbnQgY3B1KTsKIApAQCAtMTczLDkgKzE2NSw3IEBACiBzdGF0aWMgaW50CiBjcHVfbmVlZHNfYW5vdGhlcl9ncChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewotCS8qIEFDQ0VTU19PTkNFKCkgYmVjYXVzZSB3ZSBhcmUgYWNjZXNzaW5nIG91dHNpZGUgb2YgbG9jay4gKi8KLQlyZXR1cm4gKnJkcC0+bnh0dGFpbFtSQ1VfRE9ORV9UQUlMXSAmJgotCSAgICAgICBBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgPT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSk7CisJcmV0dXJuICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gJiYgIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApOwogfQogCiAvKgpAQCAtMzY5LDcgKzM1OSw3IEBACiAvKgogICogU25hcHNob3QgdGhlIHNwZWNpZmllZCBDUFUncyBkeW50aWNrcyBjb3VudGVyIHNvIHRoYXQgd2UgY2FuIGxhdGVyCiAgKiBjcmVkaXQgdGhlbSB3aXRoIGFuIGltcGxpY2l0IHF1aWVzY2VudCBzdGF0ZS4gIFJldHVybiAxIGlmIHRoaXMgQ1BVCi0gKiBpcyBhbHJlYWR5IGluIGEgcXVpZXNjZW50IHN0YXRlIGNvdXJ0ZXN5IG9mIGR5bnRpY2tzIGlkbGUgbW9kZS4KKyAqIGlzIGluIGR5bnRpY2tzIGlkbGUgbW9kZSwgd2hpY2ggaXMgYW4gZXh0ZW5kZWQgcXVpZXNjZW50IHN0YXRlLgogICovCiBzdGF0aWMgaW50IGR5bnRpY2tfc2F2ZV9wcm9ncmVzc19jb3VudGVyKHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewpAQCAtNDc1LDMwICs0NjUsMzQgQEAKIAlsb25nIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9jdXIgPSByc3AtPmxldmVsW05VTV9SQ1VfTFZMUyAtIDFdOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wX2VuZCA9ICZyc3AtPm5vZGVbTlVNX1JDVV9OT0RFU107CiAKIAkvKiBPbmx5IGxldCBvbmUgQ1BVIGNvbXBsYWluIGFib3V0IG90aGVycyBwZXIgdGltZSBpbnRlcnZhbC4gKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlkZWx0YSA9IGppZmZpZXMgLSByc3AtPmppZmZpZXNfc3RhbGw7Ci0JaWYgKGRlbHRhIDwgUkNVX1NUQUxMX1JBVF9ERUxBWSB8fCByc3AtPmdwbnVtID09IHJzcC0+Y29tcGxldGVkKSB7CisJaWYgKGRlbHRhIDwgUkNVX1NUQUxMX1JBVF9ERUxBWSB8fCAhcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJcnNwLT5qaWZmaWVzX3N0YWxsID0gamlmZmllcyArIFJDVV9TRUNPTkRTX1RJTExfU1RBTExfUkVDSEVDSzsKKworCS8qCisJICogTm93IHJhdCBvbiBhbnkgdGFza3MgdGhhdCBnb3Qga2lja2VkIHVwIHRvIHRoZSByb290IHJjdV9ub2RlCisJICogZHVlIHRvIENQVSBvZmZsaW5pbmcuCisJICovCisJcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIE9LLCB0aW1lIHRvIHJhdCBvbiBvdXIgYnVkZHkuLi4gKi8KIAogCXByaW50ayhLRVJOX0VSUiAiSU5GTzogUkNVIGRldGVjdGVkIENQVSBzdGFsbHM6Iik7Ci0JZm9yICg7IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspIHsKKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCXJjdV9wcmludF90YXNrX3N0YWxsKHJucCk7Ci0JCWlmIChybnBfY3VyLT5xc21hc2sgPT0gMCkKKwkJaWYgKHJucC0+cXNtYXNrID09IDApCiAJCQljb250aW51ZTsKLQkJZm9yIChjcHUgPSAwOyBjcHUgPD0gcm5wX2N1ci0+Z3JwaGkgLSBybnBfY3VyLT5ncnBsbzsgY3B1KyspCi0JCQlpZiAocm5wX2N1ci0+cXNtYXNrICYgKDFVTCA8PCBjcHUpKQotCQkJCXByaW50aygiICVkIiwgcm5wX2N1ci0+Z3JwbG8gKyBjcHUpOworCQlmb3IgKGNwdSA9IDA7IGNwdSA8PSBybnAtPmdycGhpIC0gcm5wLT5ncnBsbzsgY3B1KyspCisJCQlpZiAocm5wLT5xc21hc2sgJiAoMVVMIDw8IGNwdSkpCisJCQkJcHJpbnRrKCIgJWQiLCBybnAtPmdycGxvICsgY3B1KTsKIAl9CiAJcHJpbnRrKCIgKGRldGVjdGVkIGJ5ICVkLCB0PSVsZCBqaWZmaWVzKVxuIiwKIAkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCAobG9uZykoamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQpKTsKQEAgLTUzNyw4ICs1MzEsNyBAQAogCQkvKiBXZSBoYXZlbid0IGNoZWNrZWQgaW4sIHNvIGdvIGR1bXAgc3RhY2suICovCiAJCXByaW50X2NwdV9zdGFsbChyc3ApOwogCi0JfSBlbHNlIGlmIChyc3AtPmdwbnVtICE9IHJzcC0+Y29tcGxldGVkICYmCi0JCSAgIGRlbHRhID49IFJDVV9TVEFMTF9SQVRfREVMQVkpIHsKKwl9IGVsc2UgaWYgKHJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApICYmIGRlbHRhID49IFJDVV9TVEFMTF9SQVRfREVMQVkpIHsKIAogCQkvKiBUaGV5IGhhZCB0d28gdGltZSB1bml0cyB0byBkdW1wIHN0YWNrLCBzbyBjb21wbGFpbi4gKi8KIAkJcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHJzcCk7CkBAIC02MTcsOSArNjEwLDE1IEBACiAJbm90ZV9uZXdfZ3BudW0ocnNwLCByZHApOwogCiAJLyoKLQkgKiBCZWNhdXNlIHdlIGFyZSBmaXJzdCwgd2Uga25vdyB0aGF0IGFsbCBvdXIgY2FsbGJhY2tzIHdpbGwKLQkgKiBiZSBjb3ZlcmVkIGJ5IHRoaXMgdXBjb21pbmcgZ3JhY2UgcGVyaW9kLCBldmVuIHRoZSBvbmVzCi0JICogdGhhdCB3ZXJlIHJlZ2lzdGVyZWQgYXJiaXRyYXJpbHkgcmVjZW50bHkuCisJICogQmVjYXVzZSB0aGlzIENQVSBqdXN0IG5vdyBzdGFydGVkIHRoZSBuZXcgZ3JhY2UgcGVyaW9kLCB3ZSBrbm93CisJICogdGhhdCBhbGwgb2YgaXRzIGNhbGxiYWNrcyB3aWxsIGJlIGNvdmVyZWQgYnkgdGhpcyB1cGNvbWluZyBncmFjZQorCSAqIHBlcmlvZCwgZXZlbiB0aGUgb25lcyB0aGF0IHdlcmUgcmVnaXN0ZXJlZCBhcmJpdHJhcmlseSByZWNlbnRseS4KKwkgKiBUaGVyZWZvcmUsIGFkdmFuY2UgYWxsIG91dHN0YW5kaW5nIGNhbGxiYWNrcyB0byBSQ1VfV0FJVF9UQUlMLgorCSAqCisJICogT3RoZXIgQ1BVcyBjYW5ub3QgYmUgc3VyZSBleGFjdGx5IHdoZW4gdGhlIGdyYWNlIHBlcmlvZCBzdGFydGVkLgorCSAqIFRoZXJlZm9yZSwgdGhlaXIgcmVjZW50bHkgcmVnaXN0ZXJlZCBjYWxsYmFja3MgbXVzdCBwYXNzIHRocm91Z2gKKwkgKiBhbiBhZGRpdGlvbmFsIFJDVV9ORVhUX1JFQURZIHN0YWdlLCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBoYW5kbGVkCisJICogYnkgdGhlIG5leHQgUkNVIGdyYWNlIHBlcmlvZC4KIAkgKi8KIAlyZHAtPm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0gPSByZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF07CiAJcmRwLT5ueHR0YWlsW1JDVV9XQUlUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwpAQCAtNjU3LDE1ICs2NTYsMTggQEAKIAkgKiBvbmUgY29ycmVzcG9uZGluZyB0byB0aGlzIENQVSwgZHVlIHRvIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZQogCSAqIGlycXMgZGlzYWJsZWQuCiAJICovCi0JZm9yIChybnAgPSAmcnNwLT5ub2RlWzBdOyBybnAgPCAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyBybnArKykgewotCQlzcGluX2xvY2soJnJucC0+bG9jayk7CS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KKwlyY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSB7CisJCXNwaW5fbG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgYWxyZWFkeSBkaXNhYmxlZC4gKi8KIAkJcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhybnApOwogCQlybnAtPnFzbWFzayA9IHJucC0+cXNtYXNraW5pdDsKIAkJcm5wLT5ncG51bSA9IHJzcC0+Z3BudW07Ci0JCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIGFscmVhZHkgZGlzYWJsZWQuICovCisJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAl9CiAKKwlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKKwlzcGluX2xvY2soJnJucC0+bG9jayk7CQkJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwogCXJzcC0+c2lnbmFsZWQgPSBSQ1VfU0lHTkFMX0lOSVQ7IC8qIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSBub3cgT0suICovCisJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7CQkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOwogfQogCkBAIC03MDMsMTAgKzcwNSwxMSBAQAogICogaG9sZCBybnAtPmxvY2ssIGFzIHJlcXVpcmVkIGJ5IHJjdV9zdGFydF9ncCgpLCB3aGljaCB3aWxsIHJlbGVhc2UgaXQuCiAgKi8KIHN0YXRpYyB2b2lkIGNwdV9xdWlldF9tc2tfZmluaXNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgdW5zaWduZWQgbG9uZyBmbGFncykKLQlfX3JlbGVhc2VzKHJucC0+bG9jaykKKwlfX3JlbGVhc2VzKHJjdV9nZXRfcm9vdChyc3ApLT5sb2NrKQogewotCVdBUk5fT05fT05DRShyc3AtPmNvbXBsZXRlZCA9PSByc3AtPmdwbnVtKTsKKwlXQVJOX09OX09OQ0UoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKTsKIAlyc3AtPmNvbXBsZXRlZCA9IHJzcC0+Z3BudW07CisJcnNwLT5zaWduYWxlZCA9IFJDVV9HUF9JRExFOwogCXJjdV9wcm9jZXNzX2dwX2VuZChyc3AsIHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCXJjdV9zdGFydF9ncChyc3AsIGZsYWdzKTsgIC8qIHJlbGVhc2VzIHJvb3Qgbm9kZSdzIHJucC0+bG9jay4gKi8KIH0KQEAgLTg0MiwxNyArODQ1LDYzIEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAKIC8qCisgKiBNb3ZlIGEgZHlpbmcgQ1BVJ3MgUkNVIGNhbGxiYWNrcyB0byB0aGUgLT5vcnBoYW5fY2JzX2xpc3QgZm9yIHRoZQorICogc3BlY2lmaWVkIGZsYXZvciBvZiBSQ1UuICBUaGUgY2FsbGJhY2tzIHdpbGwgYmUgYWRvcHRlZCBieSB0aGUgbmV4dAorICogX3JjdV9iYXJyaWVyKCkgaW52b2NhdGlvbiBvciBieSB0aGUgQ1BVX0RFQUQgbm90aWZpZXIsIHdoaWNoZXZlcgorICogY29tZXMgZmlyc3QuICBCZWNhdXNlIHRoaXMgaXMgaW52b2tlZCBmcm9tIHRoZSBDUFVfRFlJTkcgbm90aWZpZXIsCisgKiBpcnFzIGFyZSBhbHJlYWR5IGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCByY3Vfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHJzcC0+cmRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlpZiAocmRwLT5ueHRsaXN0ID09IE5VTEwpCisJCXJldHVybjsgIC8qIGlycXMgZGlzYWJsZWQsIHNvIGNvbXBhcmlzb24gaXMgc3RhYmxlLiAqLworCXNwaW5fbG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCSpyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0bGlzdDsKKwlyc3AtPm9ycGhhbl9jYnNfdGFpbCA9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXTsKKwlyZHAtPm54dGxpc3QgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBSQ1VfTkVYVF9TSVpFOyBpKyspCisJCXJkcC0+bnh0dGFpbFtpXSA9ICZyZHAtPm54dGxpc3Q7CisJcnNwLT5vcnBoYW5fcWxlbiArPSByZHAtPnFsZW47CisJcmRwLT5xbGVuID0gMDsKKwlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOyAgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCit9CisKKy8qCisgKiBBZG9wdCBwcmV2aW91c2x5IG9ycGhhbmVkIFJDVSBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByY3VfZGF0YSAqcmRwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzcC0+b25vZmZsb2NrLCBmbGFncyk7CisJcmRwID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwlpZiAocnNwLT5vcnBoYW5fY2JzX2xpc3QgPT0gTlVMTCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc3AtPm9ub2ZmbG9jaywgZmxhZ3MpOworCQlyZXR1cm47CisJfQorCSpyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfbGlzdDsKKwlyZHAtPm54dHRhaWxbUkNVX05FWFRfVEFJTF0gPSByc3AtPm9ycGhhbl9jYnNfdGFpbDsKKwlyZHAtPnFsZW4gKz0gcnNwLT5vcnBoYW5fcWxlbjsKKwlyc3AtPm9ycGhhbl9jYnNfbGlzdCA9IE5VTEw7CisJcnNwLT5vcnBoYW5fY2JzX3RhaWwgPSAmcnNwLT5vcnBoYW5fY2JzX2xpc3Q7CisJcnNwLT5vcnBoYW5fcWxlbiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKK30KKworLyoKICAqIFJlbW92ZSB0aGUgb3V0Z29pbmcgQ1BVIGZyb20gdGhlIGJpdG1hc2tzIGluIHRoZSByY3Vfbm9kZSBoaWVyYXJjaHkKICAqIGFuZCBtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgb3V0Z29pbmcgQ1BVIHRvIHRoZSBjdXJyZW50IG9uZS4KICAqLwogc3RhdGljIHZvaWQgX19yY3Vfb2ZmbGluZV9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewotCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBsYXN0Y29tcDsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJc3RydWN0IHJjdV9kYXRhICpyZHAgPSByc3AtPnJkYVtjcHVdOwotCXN0cnVjdCByY3VfZGF0YSAqcmRwX21lOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJLyogRXhjbHVkZSBhbnkgYXR0ZW1wdHMgdG8gc3RhcnQgYSBuZXcgZ3JhY2UgcGVyaW9kLiAqLwpAQCAtODY4LDM5ICs5MTcsMjkgQEAKIAkJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJCWJyZWFrOwogCQl9Ci0JCXJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MocnNwLCBybnAsIHJkcCk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUgd2FzIGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QsCisJCSAqIGFuZCBpZiBhbGwgQ1BVcyBoYXZlIGNoZWNrZWQgaW4sIHdlIG5lZWQgdG8gcHJvcGFnYXRlCisJCSAqIHRoZSBxdWllc2NlbnQgc3RhdGUgdXAgdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gIEJ1dCB0aGF0CisJCSAqIGlzIGluY29udmVuaWVudCBhdCB0aGUgbW9tZW50IGR1ZSB0byBkZWFkbG9jayBpc3N1ZXMgaWYKKwkJICogdGhpcyBzaG91bGQgZW5kIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZC4gIFNvIHNldCB0aGUKKwkJICogb2ZmbGluZWQgQ1BVJ3MgYml0IGluIC0+cXNtYXNrIGluIG9yZGVyIHRvIGZvcmNlIHRoZQorCQkgKiBuZXh0IGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpIGludm9jYXRpb24gdG8gY2xlYW4gdXAgdGhpcworCQkgKiBtZXNzIGluIGEgZGVhZGxvY2stZnJlZSBtYW5uZXIuCisJCSAqLworCQlpZiAocmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhyc3AsIHJucCwgcmRwKSAmJiAhcm5wLT5xc21hc2spCisJCQlybnAtPnFzbWFzayB8PSBtYXNrOworCiAJCW1hc2sgPSBybnAtPmdycG1hc2s7CiAJCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwkvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJcm5wID0gcm5wLT5wYXJlbnQ7CiAJfSB3aGlsZSAocm5wICE9IE5VTEwpOwogCWxhc3Rjb21wID0gcnNwLT5jb21wbGV0ZWQ7CiAKLQlzcGluX3VubG9jaygmcnNwLT5vbm9mZmxvY2spOwkJLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vbm9mZmxvY2ssIGZsYWdzKTsKIAotCS8qCi0JICogTW92ZSBjYWxsYmFja3MgZnJvbSB0aGUgb3V0Z29pbmcgQ1BVIHRvIHRoZSBydW5uaW5nIENQVS4KLQkgKiBOb3RlIHRoYXQgdGhlIG91dGdvaW5nIENQVSBpcyBub3cgcXVpc2NlbnQsIHNvIGl0IGlzIG5vdwotCSAqICh1bmNoYXJhY3RlcmlzdGljYWxseSkgc2FmZSB0byBhY2Nlc3MgaXRzIHJjdV9kYXRhIHN0cnVjdHVyZS4KLQkgKiBOb3RlIGFsc28gdGhhdCB3ZSBtdXN0IGNhcmVmdWxseSByZXRhaW4gdGhlIG9yZGVyIG9mIHRoZQotCSAqIG91dGdvaW5nIENQVSdzIGNhbGxiYWNrcyBpbiBvcmRlciBmb3IgcmN1X2JhcnJpZXIoKSB0byB3b3JrCi0JICogY29ycmVjdGx5LiAgRmluYWxseSwgbm90ZSB0aGF0IHdlIHN0YXJ0IGFsbCB0aGUgY2FsbGJhY2tzCi0JICogYWZyZXNoLCBldmVuIHRob3NlIHRoYXQgaGF2ZSBwYXNzZWQgdGhyb3VnaCBhIGdyYWNlIHBlcmlvZAotCSAqIGFuZCBhcmUgdGhlcmVmb3JlIHJlYWR5IHRvIGludm9rZS4gIFRoZSB0aGVvcnkgaXMgdGhhdCBob3RwbHVnCi0JICogZXZlbnRzIGFyZSByYXJlLCBhbmQgdGhhdCBpZiB0aGV5IGFyZSBmcmVxdWVudCBlbm91Z2ggdG8KLQkgKiBpbmRlZmluaXRlbHkgZGVsYXkgY2FsbGJhY2tzLCB5b3UgaGF2ZSBmYXIgd29yc2UgdGhpbmdzIHRvCi0JICogYmUgd29ycnlpbmcgYWJvdXQuCi0JICovCi0JcmRwX21lID0gcnNwLT5yZGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlpZiAocmRwLT5ueHRsaXN0ICE9IE5VTEwpIHsKLQkJKnJkcF9tZS0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSA9IHJkcC0+bnh0bGlzdDsKLQkJcmRwX21lLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdOwotCQlyZHAtPm54dGxpc3QgPSBOVUxMOwotCQlmb3IgKGkgPSAwOyBpIDwgUkNVX05FWFRfU0laRTsgaSsrKQotCQkJcmRwLT5ueHR0YWlsW2ldID0gJnJkcC0+bnh0bGlzdDsKLQkJcmRwX21lLT5xbGVuICs9IHJkcC0+cWxlbjsKLQkJcmRwLT5xbGVuID0gMDsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJjdV9hZG9wdF9vcnBoYW5fY2JzKHJzcCk7CiB9CiAKIC8qCkBAIC05MTgsNiArOTU3LDE0IEBACiAKICNlbHNlIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAorc3RhdGljIHZvaWQgcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZShzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7Cit9CisKK3N0YXRpYyB2b2lkIHJjdV9hZG9wdF9vcnBoYW5fY2JzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3sKK30KKwogc3RhdGljIHZvaWQgcmN1X29mZmxpbmVfY3B1KGludCBjcHUpCiB7CiB9CkBAIC05MjgsNyArOTc1LDcgQEAKICAqIEludm9rZSBhbnkgUkNVIGNhbGxiYWNrcyB0aGF0IGhhdmUgbWFkZSBpdCB0byB0aGUgZW5kIG9mIHRoZWlyIGdyYWNlCiAgKiBwZXJpb2QuICBUaG90dGxlIGFzIHNwZWNpZmllZCBieSByZHAtPmJsaW1pdC4KICAqLwotc3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3VfZGF0YSAqcmRwKQorc3RhdGljIHZvaWQgcmN1X2RvX2JhdGNoKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5leHQsICpsaXN0LCAqKnRhaWw7CkBAIC05ODEsNiArMTAyOCwxMyBAQAogCWlmIChyZHAtPmJsaW1pdCA9PSBMT05HX01BWCAmJiByZHAtPnFsZW4gPD0gcWxvd21hcmspCiAJCXJkcC0+YmxpbWl0ID0gYmxpbWl0OwogCisJLyogUmVzZXQgLT5xbGVuX2xhc3RfZnFzX2NoZWNrIHRyaWdnZXIgaWYgZW5vdWdoIENCcyBoYXZlIGRyYWluZWQuICovCisJaWYgKHJkcC0+cWxlbiA9PSAwICYmIHJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayAhPSAwKSB7CisJCXJkcC0+cWxlbl9sYXN0X2Zxc19jaGVjayA9IDA7CisJCXJkcC0+bl9mb3JjZV9xc19zbmFwID0gcnNwLT5uX2ZvcmNlX3FzOworCX0gZWxzZSBpZiAocmRwLT5xbGVuIDwgcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrIC0gcWhpbWFyaykKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOworCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJLyogUmUtcmFpc2UgdGhlIFJDVSBzb2Z0aXJxIGlmIHRoZXJlIGFyZSBjYWxsYmFja3MgcmVtYWluaW5nLiAqLwpAQCAtMTA1MCwzMyArMTEwNCwzMiBAQAogCWludCBjcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIG1hc2s7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfY3VyID0gcnNwLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucF9lbmQgPSAmcnNwLT5ub2RlW05VTV9SQ1VfTk9ERVNdOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCi0JZm9yICg7IHJucF9jdXIgPCBybnBfZW5kOyBybnBfY3VyKyspIHsKKwlyY3VfZm9yX2VhY2hfbGVhZl9ub2RlKHJzcCwgcm5wKSB7CiAJCW1hc2sgPSAwOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCWlmIChyc3AtPmNvbXBsZXRlZCAhPSBsYXN0Y29tcCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wX2N1ci0+bG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAocm5wX2N1ci0+cXNtYXNrID09IDApIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJaWYgKHJucC0+cXNtYXNrID09IDApIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCQkJY29udGludWU7CiAJCX0KLQkJY3B1ID0gcm5wX2N1ci0+Z3JwbG87CisJCWNwdSA9IHJucC0+Z3JwbG87CiAJCWJpdCA9IDE7Ci0JCWZvciAoOyBjcHUgPD0gcm5wX2N1ci0+Z3JwaGk7IGNwdSsrLCBiaXQgPDw9IDEpIHsKLQkJCWlmICgocm5wX2N1ci0+cXNtYXNrICYgYml0KSAhPSAwICYmIGYocnNwLT5yZGFbY3B1XSkpCisJCWZvciAoOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyssIGJpdCA8PD0gMSkgeworCQkJaWYgKChybnAtPnFzbWFzayAmIGJpdCkgIT0gMCAmJiBmKHJzcC0+cmRhW2NwdV0pKQogCQkJCW1hc2sgfD0gYml0OwogCQl9CiAJCWlmIChtYXNrICE9IDAgJiYgcnNwLT5jb21wbGV0ZWQgPT0gbGFzdGNvbXApIHsKIAotCQkJLyogY3B1X3F1aWV0X21zaygpIHJlbGVhc2VzIHJucF9jdXItPmxvY2suICovCi0JCQljcHVfcXVpZXRfbXNrKG1hc2ssIHJzcCwgcm5wX2N1ciwgZmxhZ3MpOworCQkJLyogY3B1X3F1aWV0X21zaygpIHJlbGVhc2VzIHJucC0+bG9jay4gKi8KKwkJCWNwdV9xdWlldF9tc2sobWFzaywgcnNwLCBybnAsIGZsYWdzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucF9jdXItPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTA5Miw3ICsxMTQ1LDcgQEAKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCXU4IHNpZ25hbGVkOwogCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSkKKwlpZiAoIXJjdV9ncF9pbl9wcm9ncmVzcyhyc3ApKQogCQlyZXR1cm47ICAvKiBObyBncmFjZSBwZXJpb2QgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZm9yY2UuICovCiAJaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcnNwLT5mcXNsb2NrLCBmbGFncykpIHsKIAkJcnNwLT5uX2ZvcmNlX3FzX2xoKys7IC8qIEluZXhhY3QsIGNhbiBsb3NlIGNvdW50cy4gIFRvdWdoISAqLwpAQCAtMTExMyw5ICsxMTY2LDEwIEBACiAJfQogCXNwaW5fdW5sb2NrKCZybnAtPmxvY2spOwogCXN3aXRjaCAoc2lnbmFsZWQpIHsKKwljYXNlIFJDVV9HUF9JRExFOgogCWNhc2UgUkNVX0dQX0lOSVQ6CiAKLQkJYnJlYWs7IC8qIGdyYWNlIHBlcmlvZCBzdGlsbCBpbml0aWFsaXppbmcsIGlnbm9yZS4gKi8KKwkJYnJlYWs7IC8qIGdyYWNlIHBlcmlvZCBpZGxlIG9yIGluaXRpYWxpemluZywgaWdub3JlLiAqLwogCiAJY2FzZSBSQ1VfU0FWRV9EWU5USUNLOgogCkBAIC0xMTI5LDcgKzExODMsOCBAQAogCiAJCS8qIFVwZGF0ZSBzdGF0ZSwgcmVjb3JkIGNvbXBsZXRpb24gY291bnRlci4gKi8KIAkJc3Bpbl9sb2NrKCZybnAtPmxvY2spOwotCQlpZiAobGFzdGNvbXAgPT0gcnNwLT5jb21wbGV0ZWQpIHsKKwkJaWYgKGxhc3Rjb21wID09IHJzcC0+Y29tcGxldGVkICYmCisJCSAgICByc3AtPnNpZ25hbGVkID09IFJDVV9TQVZFX0RZTlRJQ0spIHsKIAkJCXJzcC0+c2lnbmFsZWQgPSBSQ1VfRk9SQ0VfUVM7CiAJCQlkeW50aWNrX3JlY29yZF9jb21wbGV0ZWQocnNwLCBsYXN0Y29tcCk7CiAJCX0KQEAgLTExOTUsNyArMTI1MCw3IEBACiAJfQogCiAJLyogSWYgdGhlcmUgYXJlIGNhbGxiYWNrcyByZWFkeSwgaW52b2tlIHRoZW0uICovCi0JcmN1X2RvX2JhdGNoKHJkcCk7CisJcmN1X2RvX2JhdGNoKHJzcCwgcmRwKTsKIH0KIAogLyoKQEAgLTEyNTEsNyArMTMwNiw3IEBACiAJcmRwLT5ueHR0YWlsW1JDVV9ORVhUX1RBSUxdID0gJmhlYWQtPm5leHQ7CiAKIAkvKiBTdGFydCBhIG5ldyBncmFjZSBwZXJpb2QgaWYgb25lIG5vdCBhbHJlYWR5IHN0YXJ0ZWQuICovCi0JaWYgKEFDQ0VTU19PTkNFKHJzcC0+Y29tcGxldGVkKSA9PSBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSkgeworCWlmICghcmN1X2dwX2luX3Byb2dyZXNzKHJzcCkpIHsKIAkJdW5zaWduZWQgbG9uZyBuZXN0ZmxhZzsKIAkJc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCkBAIC0xMjU5LDEwICsxMzE0LDIwIEBACiAJCXJjdV9zdGFydF9ncChyc3AsIG5lc3RmbGFnKTsgIC8qIHJlbGVhc2VzIHJucF9yb290LT5sb2NrLiAqLwogCX0KIAotCS8qIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuICovCi0JaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcWhpbWFyaykpIHsKKwkvKgorCSAqIEZvcmNlIHRoZSBncmFjZSBwZXJpb2QgaWYgdG9vIG1hbnkgY2FsbGJhY2tzIG9yIHRvbyBsb25nIHdhaXRpbmcuCisJICogRW5mb3JjZSBoeXN0ZXJlc2lzLCBhbmQgZG9uJ3QgaW52b2tlIGZvcmNlX3F1aWVzY2VudF9zdGF0ZSgpCisJICogaWYgc29tZSBvdGhlciBDUFUgaGFzIHJlY2VudGx5IGRvbmUgc28uICBBbHNvLCBkb24ndCBib3RoZXIKKwkgKiBpbnZva2luZyBmb3JjZV9xdWllc2NlbnRfc3RhdGUoKSBpZiB0aGUgbmV3bHkgZW5xdWV1ZWQgY2FsbGJhY2sKKwkgKiBpcyB0aGUgb25seSBvbmUgd2FpdGluZyBmb3IgYSBncmFjZSBwZXJpb2QgdG8gY29tcGxldGUuCisJICovCisJaWYgKHVubGlrZWx5KCsrcmRwLT5xbGVuID4gcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrICsgcWhpbWFyaykpIHsKIAkJcmRwLT5ibGltaXQgPSBMT05HX01BWDsKLQkJZm9yY2VfcXVpZXNjZW50X3N0YXRlKHJzcCwgMCk7CisJCWlmIChyc3AtPm5fZm9yY2VfcXMgPT0gcmRwLT5uX2ZvcmNlX3FzX3NuYXAgJiYKKwkJICAgICpyZHAtPm54dHRhaWxbUkNVX0RPTkVfVEFJTF0gIT0gaGVhZCkKKwkJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDApOworCQlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKKwkJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gcmRwLT5xbGVuOwogCX0gZWxzZSBpZiAoKGxvbmcpKEFDQ0VTU19PTkNFKHJzcC0+amlmZmllc19mb3JjZV9xcykgLSBqaWZmaWVzKSA8IDApCiAJCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3AsIDEpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTEzMzEsNyArMTM5Niw3IEBACiAJfQogCiAJLyogSGFzIGFuIFJDVSBHUCBnb25lIGxvbmcgZW5vdWdoIHRvIHNlbmQgcmVzY2hlZCBJUElzICZjPyAqLwotCWlmIChBQ0NFU1NfT05DRShyc3AtPmNvbXBsZXRlZCkgIT0gQUNDRVNTX09OQ0UocnNwLT5ncG51bSkgJiYKKwlpZiAocmN1X2dwX2luX3Byb2dyZXNzKHJzcCkgJiYKIAkgICAgKChsb25nKShBQ0NFU1NfT05DRShyc3AtPmppZmZpZXNfZm9yY2VfcXMpIC0gamlmZmllcykgPCAwKSkgewogCQlyZHAtPm5fcnBfbmVlZF9mcXMrKzsKIAkJcmV0dXJuIDE7CkBAIC0xMzY4LDYgKzE0MzMsODIgQEAKIAkgICAgICAgcmN1X3ByZWVtcHRfbmVlZHNfY3B1KGNwdSk7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2hlYWQsIHJjdV9iYXJyaWVyX2hlYWQpID0ge05VTEx9Oworc3RhdGljIGF0b21pY190IHJjdV9iYXJyaWVyX2NwdV9jb3VudDsKK3N0YXRpYyBERUZJTkVfTVVURVgocmN1X2JhcnJpZXJfbXV0ZXgpOworc3RhdGljIHN0cnVjdCBjb21wbGV0aW9uIHJjdV9iYXJyaWVyX2NvbXBsZXRpb247CisKK3N0YXRpYyB2b2lkIHJjdV9iYXJyaWVyX2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqbm90dXNlZCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50KSkKKwkJY29tcGxldGUoJnJjdV9iYXJyaWVyX2NvbXBsZXRpb24pOworfQorCisvKgorICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCwgYW5kIGZyb20gY3Jvc3MtY3B1IElSUSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCByY3VfYmFycmllcl9mdW5jKHZvaWQgKnR5cGUpCit7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQgPSAmcGVyX2NwdShyY3VfYmFycmllcl9oZWFkLCBjcHUpOworCXZvaWQgKCpjYWxsX3JjdV9mdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCisJCQkgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSk7CisKKwlhdG9taWNfaW5jKCZyY3VfYmFycmllcl9jcHVfY291bnQpOworCWNhbGxfcmN1X2Z1bmMgPSB0eXBlOworCWNhbGxfcmN1X2Z1bmMoaGVhZCwgcmN1X2JhcnJpZXJfY2FsbGJhY2spOworfQorCisvKgorICogT3JjaGVzdHJhdGUgdGhlIHNwZWNpZmllZCB0eXBlIG9mIFJDVSBiYXJyaWVyLCB3YWl0aW5nIGZvciBhbGwKKyAqIFJDVSBjYWxsYmFja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRvIGNvbXBsZXRlLgorICovCitzdGF0aWMgdm9pZCBfcmN1X2JhcnJpZXIoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJIHZvaWQgKCpjYWxsX3JjdV9mdW5jKShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQsCisJCQkJCSAgICAgICB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpoZWFkKSkpCit7CisJQlVHX09OKGluX2ludGVycnVwdCgpKTsKKwkvKiBUYWtlIG11dGV4IHRvIHNlcmlhbGl6ZSBjb25jdXJyZW50IHJjdV9iYXJyaWVyKCkgcmVxdWVzdHMuICovCisJbXV0ZXhfbG9jaygmcmN1X2JhcnJpZXJfbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CisJLyoKKwkgKiBJbml0aWFsaXplIHJjdV9iYXJyaWVyX2NwdV9jb3VudCB0byAxLCB0aGVuIGludm9rZQorCSAqIHJjdV9iYXJyaWVyX2Z1bmMoKSBvbiBlYWNoIENQVSwgc28gdGhhdCBlYWNoIENQVSBhbHNvIGhhcworCSAqIGluY3JlbWVudGVkIHJjdV9iYXJyaWVyX2NwdV9jb3VudC4gIE9ubHkgdGhlbiBpcyBpdCBzYWZlIHRvCisJICogZGVjcmVtZW50IHJjdV9iYXJyaWVyX2NwdV9jb3VudCAtLSBvdGhlcndpc2UgdGhlIGZpcnN0IENQVQorCSAqIG1pZ2h0IGNvbXBsZXRlIGl0cyBncmFjZSBwZXJpb2QgYmVmb3JlIGFsbCBvZiB0aGUgb3RoZXIgQ1BVcworCSAqIGRpZCB0aGVpciBpbmNyZW1lbnQsIGNhdXNpbmcgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gdG9vCisJICogZWFybHkuCisJICovCisJYXRvbWljX3NldCgmcmN1X2JhcnJpZXJfY3B1X2NvdW50LCAxKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsgLyogc3RvcCBDUFVfRFlJTkcgZnJvbSBmaWxsaW5nIG9ycGhhbl9jYnNfbGlzdCAqLworCXJjdV9hZG9wdF9vcnBoYW5fY2JzKHJzcCk7CisJb25fZWFjaF9jcHUocmN1X2JhcnJpZXJfZnVuYywgKHZvaWQgKiljYWxsX3JjdV9mdW5jLCAxKTsKKwlwcmVlbXB0X2VuYWJsZSgpOyAvKiBDUFVfRFlJTkcgY2FuIGFnYWluIGZpbGwgb3JwaGFuX2Nic19saXN0ICovCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9iYXJyaWVyX2NwdV9jb3VudCkpCisJCWNvbXBsZXRlKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyY3VfYmFycmllcl9jb21wbGV0aW9uKTsKKwltdXRleF91bmxvY2soJnJjdV9iYXJyaWVyX211dGV4KTsKK30KKworLyoqCisgKiByY3VfYmFycmllcl9iaCAtIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCBjYWxsX3JjdV9iaCgpIGNhbGxiYWNrcyBjb21wbGV0ZS4KKyAqLwordm9pZCByY3VfYmFycmllcl9iaCh2b2lkKQoreworCV9yY3VfYmFycmllcigmcmN1X2JoX3N0YXRlLCBjYWxsX3JjdV9iaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9iaCk7CisKKy8qKgorICogcmN1X2JhcnJpZXJfc2NoZWQgLSBXYWl0IGZvciBpbi1mbGlnaHQgY2FsbF9yY3Vfc2NoZWQoKSBjYWxsYmFja3MuCisgKi8KK3ZvaWQgcmN1X2JhcnJpZXJfc2NoZWQodm9pZCkKK3sKKwlfcmN1X2JhcnJpZXIoJnJjdV9zY2hlZF9zdGF0ZSwgY2FsbF9yY3Vfc2NoZWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhcnJpZXJfc2NoZWQpOworCiAvKgogICogRG8gYm9vdC10aW1lIGluaXRpYWxpemF0aW9uIG9mIGEgQ1BVJ3MgcGVyLUNQVSBSQ1UgZGF0YS4KICAqLwpAQCAtMTQxOCw2ICsxNTU5LDggQEAKIAlyZHAtPmJlZW5vbmxpbmUgPSAxOwkgLyogV2UgaGF2ZSBub3cgYmVlbiBvbmxpbmUuICovCiAJcmRwLT5wcmVlbXB0YWJsZSA9IHByZWVtcHRhYmxlOwogCXJkcC0+cGFzc2VkX3F1aWVzY19jb21wbGV0ZWQgPSBsYXN0Y29tcCAtIDE7CisJcmRwLT5xbGVuX2xhc3RfZnFzX2NoZWNrID0gMDsKKwlyZHAtPm5fZm9yY2VfcXNfc25hcCA9IHJzcC0+bl9mb3JjZV9xczsKIAlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKIAlzcGluX3VubG9jaygmcm5wLT5sb2NrKTsJCS8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwogCkBAIC0xNDY0LDYgKzE2MDcsMjIgQEAKIAljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJcmN1X29ubGluZV9jcHUoY3B1KTsKIAkJYnJlYWs7CisJY2FzZSBDUFVfRFlJTkc6CisJY2FzZSBDUFVfRFlJTkdfRlJPWkVOOgorCQkvKgorCQkgKiBwcmVlbXB0X2Rpc2FibGUoKSBpbiBfcmN1X2JhcnJpZXIoKSBwcmV2ZW50cyBzdG9wX21hY2hpbmUoKSwKKwkJICogc28gd2hlbiAib25fZWFjaF9jcHUocmN1X2JhcnJpZXJfZnVuYywgKHZvaWQgKil0eXBlLCAxKTsiCisJCSAqIHJldHVybnMsIGFsbCBvbmxpbmUgY3B1cyBoYXZlIHF1ZXVlZCByY3VfYmFycmllcl9mdW5jKCkuCisJCSAqIFRoZSBkeWluZyBDUFUgY2xlYXJzIGl0cyBjcHVfb25saW5lX21hc2sgYml0IGFuZAorCQkgKiBtb3ZlcyBhbGwgb2YgaXRzIFJDVSBjYWxsYmFja3MgdG8gLT5vcnBoYW5fY2JzX2xpc3QKKwkJICogaW4gdGhlIGNvbnRleHQgb2Ygc3RvcF9tYWNoaW5lKCksIHNvIHN1YnNlcXVlbnQgY2FsbHMKKwkJICogdG8gX3JjdV9iYXJyaWVyKCkgd2lsbCBhZG9wdCB0aGVzZSBjYWxsYmFja3MgYW5kIG9ubHkKKwkJICogdGhlbiBxdWV1ZSByY3VfYmFycmllcl9mdW5jKCkgb24gYWxsIHJlbWFpbmluZyBDUFVzLgorCQkgKi8KKwkJcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgmcmN1X2JoX3N0YXRlKTsKKwkJcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgmcmN1X3NjaGVkX3N0YXRlKTsKKwkJcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKCk7CisJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CiAJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CkBAIC0xNTI2LDcgKzE2ODUsOCBAQAogCQljcHVzdHJpZGUgKj0gcnNwLT5sZXZlbHNwcmVhZFtpXTsKIAkJcm5wID0gcnNwLT5sZXZlbFtpXTsKIAkJZm9yIChqID0gMDsgaiA8IHJzcC0+bGV2ZWxjbnRbaV07IGorKywgcm5wKyspIHsKLQkJCXNwaW5fbG9ja19pbml0KCZybnAtPmxvY2spOworCQkJaWYgKHJucCAhPSByY3VfZ2V0X3Jvb3QocnNwKSkKKwkJCQlzcGluX2xvY2tfaW5pdCgmcm5wLT5sb2NrKTsKIAkJCXJucC0+Z3BudW0gPSAwOwogCQkJcm5wLT5xc21hc2sgPSAwOwogCQkJcm5wLT5xc21hc2tpbml0ID0gMDsKQEAgLTE1NDksNiArMTcwOSw3IEBACiAJCQlJTklUX0xJU1RfSEVBRCgmcm5wLT5ibG9ja2VkX3Rhc2tzWzFdKTsKIAkJfQogCX0KKwlzcGluX2xvY2tfaW5pdCgmcmN1X2dldF9yb290KHJzcCktPmxvY2spOwogfQogCiAvKgpAQCAtMTU1OCw2ICsxNzE5LDEwIEBACiAgKi8KICNkZWZpbmUgUkNVX0lOSVRfRkxBVk9SKHJzcCwgcmN1X2RhdGEpIFwKIGRvIHsgXAorCWludCBpOyBcCisJaW50IGo7IFwKKwlzdHJ1Y3QgcmN1X25vZGUgKnJucDsgXAorCVwKIAlyY3VfaW5pdF9vbmUocnNwKTsgXAogCXJucCA9IChyc3ApLT5sZXZlbFtOVU1fUkNVX0xWTFMgLSAxXTsgXAogCWogPSAwOyBcCkBAIC0xNTcwLDMxICsxNzM1LDggQEAKIAl9IFwKIH0gd2hpbGUgKDApCiAKLSNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVQotCi12b2lkIF9faW5pdCBfX3JjdV9pbml0X3ByZWVtcHQodm9pZCkKLXsKLQlpbnQgaTsJCQkvKiBBbGwgdXNlZCBieSBSQ1VfSU5JVF9GTEFWT1IoKS4gKi8KLQlpbnQgajsKLQlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKLQotCVJDVV9JTklUX0ZMQVZPUigmcmN1X3ByZWVtcHRfc3RhdGUsIHJjdV9wcmVlbXB0X2RhdGEpOwotfQotCi0jZWxzZSAvKiAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KLQotdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCi17Ci19Ci0KLSNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KLQogdm9pZCBfX2luaXQgX19yY3VfaW5pdCh2b2lkKQogewotCWludCBpOwkJCS8qIEFsbCB1c2VkIGJ5IFJDVV9JTklUX0ZMQVZPUigpLiAqLwotCWludCBqOwotCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwotCiAJcmN1X2Jvb3R1cF9hbm5vdW5jZSgpOwogI2lmZGVmIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SCiAJcHJpbnRrKEtFUk5fSU5GTyAiUkNVLWJhc2VkIGRldGVjdGlvbiBvZiBzdGFsbGVkIENQVXMgaXMgZW5hYmxlZC5cbiIpOwpAQCAtMTYwNSw2ICsxNzQ3LDQgQEAKIAlvcGVuX3NvZnRpcnEoUkNVX1NPRlRJUlEsIHJjdV9wcm9jZXNzX2NhbGxiYWNrcyk7CiB9CiAKLW1vZHVsZV9wYXJhbShibGltaXQsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocWhpbWFyaywgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShxbG93bWFyaywgaW50LCAwKTsKKyNpbmNsdWRlICJyY3V0cmVlX3BsdWdpbi5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRyZWUuaCBiL2tlcm5lbC9yY3V0cmVlLmgKaW5kZXggOGU4Mjg3YS4uMTg5OTAyMyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWUuaAorKysgYi9rZXJuZWwvcmN1dHJlZS5oCkBAIC00OCwxNCArNDgsMTQgQEAKICNlbGlmIE5SX0NQVVMgPD0gUkNVX0ZBTk9VVF9TUQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMUwkgICAgICAyCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMAkgICAgICAxCi0jICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICAoKChOUl9DUFVTKSArIFJDVV9GQU5PVVQgLSAxKSAvIFJDVV9GQU5PVVQpCisjICBkZWZpbmUgTlVNX1JDVV9MVkxfMQkgICAgICBESVZfUk9VTkRfVVAoTlJfQ1BVUywgUkNVX0ZBTk9VVCkKICMgIGRlZmluZSBOVU1fUkNVX0xWTF8yCSAgICAgIChOUl9DUFVTKQogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzMJICAgICAgMAogI2VsaWYgTlJfQ1BVUyA8PSBSQ1VfRkFOT1VUX0NVQkUKICMgIGRlZmluZSBOVU1fUkNVX0xWTFMJICAgICAgMwogIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzAJICAgICAgMQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzEJICAgICAgKCgoTlJfQ1BVUykgKyBSQ1VfRkFOT1VUX1NRIC0gMSkgLyBSQ1VfRkFOT1VUX1NRKQotIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgKCgoTlJfQ1BVUykgKyAoUkNVX0ZBTk9VVCkgLSAxKSAvIChSQ1VfRkFOT1VUKSkKKyMgIGRlZmluZSBOVU1fUkNVX0xWTF8xCSAgICAgIERJVl9ST1VORF9VUChOUl9DUFVTLCBSQ1VfRkFOT1VUX1NRKQorIyAgZGVmaW5lIE5VTV9SQ1VfTFZMXzIJICAgICAgRElWX1JPVU5EX1VQKE5SX0NQVVMsIFJDVV9GQU5PVVQpCiAjICBkZWZpbmUgTlVNX1JDVV9MVkxfMwkgICAgICBOUl9DUFVTCiAjZWxzZQogIyBlcnJvciAiQ09ORklHX1JDVV9GQU5PVVQgaW5zdWZmaWNpZW50IGZvciBOUl9DUFVTIgpAQCAtNzksMTUgKzc5LDIxIEBACiAgKiBEZWZpbml0aW9uIGZvciBub2RlIHdpdGhpbiB0aGUgUkNVIGdyYWNlLXBlcmlvZC1kZXRlY3Rpb24gaGllcmFyY2h5LgogICovCiBzdHJ1Y3QgcmN1X25vZGUgewotCXNwaW5sb2NrX3QgbG9jazsKKwlzcGlubG9ja190IGxvY2s7CS8qIFJvb3QgcmN1X25vZGUncyBsb2NrIHByb3RlY3RzIHNvbWUgKi8KKwkJCQkvKiAgcmN1X3N0YXRlIGZpZWxkcyBhcyB3ZWxsIGFzIGZvbGxvd2luZy4gKi8KIAlsb25nCWdwbnVtOwkJLyogQ3VycmVudCBncmFjZSBwZXJpb2QgZm9yIHRoaXMgbm9kZS4gKi8KIAkJCQkvKiAgVGhpcyB3aWxsIGVpdGhlciBiZSBlcXVhbCB0byBvciBvbmUgKi8KIAkJCQkvKiAgYmVoaW5kIHRoZSByb290IHJjdV9ub2RlJ3MgZ3BudW0uICovCiAJdW5zaWduZWQgbG9uZyBxc21hc2s7CS8qIENQVXMgb3IgZ3JvdXBzIHRoYXQgbmVlZCB0byBzd2l0Y2ggaW4gKi8KIAkJCQkvKiAgb3JkZXIgZm9yIGN1cnJlbnQgZ3JhY2UgcGVyaW9kIHRvIHByb2NlZWQuKi8KKwkJCQkvKiAgSW4gbGVhZiByY3Vfbm9kZSwgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gKi8KKwkJCQkvKiAgYW4gcmN1X2RhdGEgc3RydWN0dXJlLCBvdGhlcndpc2UsIGVhY2ggKi8KKwkJCQkvKiAgYml0IGNvcnJlc3BvbmRzIHRvIGEgY2hpbGQgcmN1X25vZGUgKi8KKwkJCQkvKiAgc3RydWN0dXJlLiAqLwogCXVuc2lnbmVkIGxvbmcgcXNtYXNraW5pdDsKIAkJCQkvKiBQZXItR1AgaW5pdGlhbGl6YXRpb24gZm9yIHFzbWFzay4gKi8KIAl1bnNpZ25lZCBsb25nIGdycG1hc2s7CS8qIE1hc2sgdG8gYXBwbHkgdG8gcGFyZW50IHFzbWFzay4gKi8KKwkJCQkvKiAgT25seSBvbmUgYml0IHdpbGwgYmUgc2V0IGluIHRoaXMgbWFzay4gKi8KIAlpbnQJZ3JwbG87CQkvKiBsb3dlc3QtbnVtYmVyZWQgQ1BVIG9yIGdyb3VwIGhlcmUuICovCiAJaW50CWdycGhpOwkJLyogaGlnaGVzdC1udW1iZXJlZCBDUFUgb3IgZ3JvdXAgaGVyZS4gKi8KIAl1OAlncnBudW07CQkvKiBDUFUvZ3JvdXAgbnVtYmVyIGZvciBuZXh0IGxldmVsIHVwLiAqLwpAQCAtOTUsOCArMTAxLDIzIEBACiAJc3RydWN0IHJjdV9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IGxpc3RfaGVhZCBibG9ja2VkX3Rhc2tzWzJdOwogCQkJCS8qIFRhc2tzIGJsb2NrZWQgaW4gUkNVIHJlYWQtc2lkZSBjcml0c2VjdC4gKi8KKwkJCQkvKiAgR3JhY2UgcGVyaW9kIG51bWJlciAoLT5ncG51bSkgeCBibG9ja2VkICovCisJCQkJLyogIGJ5IHRhc2tzIG9uIHRoZSAoeCAmIDB4MSkgZWxlbWVudCBvZiB0aGUgKi8KKwkJCQkvKiAgYmxvY2tlZF90YXNrc1tdIGFycmF5LiAqLwogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCisvKgorICogRG8gYSBmdWxsIGJyZWFkdGgtZmlyc3Qgc2NhbiBvZiB0aGUgcmN1X25vZGUgc3RydWN0dXJlcyBmb3IgdGhlCisgKiBzcGVjaWZpZWQgcmN1X3N0YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSByY3VfZm9yX2VhY2hfbm9kZV9icmVhZHRoX2ZpcnN0KHJzcCwgcm5wKSBcCisJZm9yICgocm5wKSA9ICYocnNwKS0+bm9kZVswXTsgXAorCSAgICAgKHJucCkgPCAmKHJzcCktPm5vZGVbTlVNX1JDVV9OT0RFU107IChybnApKyspCisKKyNkZWZpbmUgcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyc3AsIHJucCkgXAorCWZvciAoKHJucCkgPSAocnNwKS0+bGV2ZWxbTlVNX1JDVV9MVkxTIC0gMV07IFwKKwkgICAgIChybnApIDwgJihyc3ApLT5ub2RlW05VTV9SQ1VfTk9ERVNdOyAocm5wKSsrKQorCiAvKiBJbmRleCB2YWx1ZXMgZm9yIG54dHRhaWwgYXJyYXkgaW4gc3RydWN0IHJjdV9kYXRhLiAqLwogI2RlZmluZSBSQ1VfRE9ORV9UQUlMCQkwCS8qIEFsc28gUkNVX1dBSVQgaGVhZC4gKi8KICNkZWZpbmUgUkNVX1dBSVRfVEFJTAkJMQkvKiBBbHNvIFJDVV9ORVhUX1JFQURZIGhlYWQuICovCkBAIC0xMjYsMjMgKzE0NywzMCBAQAogCSAqIEFueSBvZiB0aGUgcGFydGl0aW9ucyBtaWdodCBiZSBlbXB0eSwgaW4gd2hpY2ggY2FzZSB0aGUKIAkgKiBwb2ludGVyIHRvIHRoYXQgcGFydGl0aW9uIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHBvaW50ZXIgZm9yCiAJICogdGhlIGZvbGxvd2luZyBwYXJ0aXRpb24uICBXaGVuIHRoZSBsaXN0IGlzIGVtcHR5LCBhbGwgb2YKLQkgKiB0aGUgbnh0dGFpbCBlbGVtZW50cyBwb2ludCB0byBueHRsaXN0LCB3aGljaCBpcyBOVUxMLgorCSAqIHRoZSBueHR0YWlsIGVsZW1lbnRzIHBvaW50IHRvIHRoZSAtPm54dGxpc3QgcG9pbnRlciBpdHNlbGYsCisJICogd2hpY2ggaW4gdGhhdCBjYXNlIGlzIE5VTEwuCiAJICoKLQkgKiBbKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0sIE5VTEwgPSAqbnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSk6Ci0JICoJRW50cmllcyB0aGF0IG1pZ2h0IGhhdmUgYXJyaXZlZCBhZnRlciBjdXJyZW50IEdQIGVuZGVkCi0JICogWypueHR0YWlsW1JDVV9XQUlUX1RBSUxdLCAqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSk6Ci0JICoJRW50cmllcyBrbm93biB0byBoYXZlIGFycml2ZWQgYmVmb3JlIGN1cnJlbnQgR1AgZW5kZWQKLQkgKiBbKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0sICpueHR0YWlsW1JDVV9XQUlUX1RBSUxdKToKLQkgKglFbnRyaWVzIHRoYXQgYmF0Y2ggIyA8PSAtPmNvbXBsZXRlZCAtIDE6IHdhaXRpbmcgZm9yIGN1cnJlbnQgR1AKIAkgKiBbbnh0bGlzdCwgKm54dHRhaWxbUkNVX0RPTkVfVEFJTF0pOgogCSAqCUVudHJpZXMgdGhhdCBiYXRjaCAjIDw9IC0+Y29tcGxldGVkCiAJICoJVGhlIGdyYWNlIHBlcmlvZCBmb3IgdGhlc2UgZW50cmllcyBoYXMgY29tcGxldGVkLCBhbmQKIAkgKgl0aGUgb3RoZXIgZ3JhY2UtcGVyaW9kLWNvbXBsZXRlZCBlbnRyaWVzIG1heSBiZSBtb3ZlZAogCSAqCWhlcmUgdGVtcG9yYXJpbHkgaW4gcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKCkuCisJICogWypueHR0YWlsW1JDVV9ET05FX1RBSUxdLCAqbnh0dGFpbFtSQ1VfV0FJVF9UQUlMXSk6CisJICoJRW50cmllcyB0aGF0IGJhdGNoICMgPD0gLT5jb21wbGV0ZWQgLSAxOiB3YWl0aW5nIGZvciBjdXJyZW50IEdQCisJICogWypueHR0YWlsW1JDVV9XQUlUX1RBSUxdLCAqbnh0dGFpbFtSQ1VfTkVYVF9SRUFEWV9UQUlMXSk6CisJICoJRW50cmllcyBrbm93biB0byBoYXZlIGFycml2ZWQgYmVmb3JlIGN1cnJlbnQgR1AgZW5kZWQKKwkgKiBbKm54dHRhaWxbUkNVX05FWFRfUkVBRFlfVEFJTF0sICpueHR0YWlsW1JDVV9ORVhUX1RBSUxdKToKKwkgKglFbnRyaWVzIHRoYXQgbWlnaHQgaGF2ZSBhcnJpdmVkIGFmdGVyIGN1cnJlbnQgR1AgZW5kZWQKKwkgKglOb3RlIHRoYXQgdGhlIHZhbHVlIG9mICpueHR0YWlsW1JDVV9ORVhUX1RBSUxdIHdpbGwKKwkgKglhbHdheXMgYmUgTlVMTCwgYXMgdGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBsaXN0LgogCSAqLwogCXN0cnVjdCByY3VfaGVhZCAqbnh0bGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgKipueHR0YWlsW1JDVV9ORVhUX1NJWkVdOwogCWxvbmcJCXFsZW47CQkvKiAjIG9mIHF1ZXVlZCBjYWxsYmFja3MgKi8KKwlsb25nCQlxbGVuX2xhc3RfZnFzX2NoZWNrOworCQkJCQkvKiBxbGVuIGF0IGxhc3QgY2hlY2sgZm9yIFFTIGZvcmNpbmcgKi8KKwl1bnNpZ25lZCBsb25nCW5fZm9yY2VfcXNfc25hcDsKKwkJCQkJLyogZGlkIG90aGVyIENQVSBmb3JjZSBRUyByZWNlbnRseT8gKi8KIAlsb25nCQlibGltaXQ7CQkvKiBVcHBlciBsaW1pdCBvbiBhIHByb2Nlc3NlZCBiYXRjaCAqLwogCiAjaWZkZWYgQ09ORklHX05PX0haCkBAIC0xNzMsOSArMjAxLDEwIEBACiB9OwogCiAvKiBWYWx1ZXMgZm9yIHNpZ25hbGVkIGZpZWxkIGluIHN0cnVjdCByY3Vfc3RhdGUuICovCi0jZGVmaW5lIFJDVV9HUF9JTklUCQkwCS8qIEdyYWNlIHBlcmlvZCBiZWluZyBpbml0aWFsaXplZC4gKi8KLSNkZWZpbmUgUkNVX1NBVkVfRFlOVElDSwkxCS8qIE5lZWQgdG8gc2NhbiBkeW50aWNrIHN0YXRlLiAqLwotI2RlZmluZSBSQ1VfRk9SQ0VfUVMJCTIJLyogTmVlZCB0byBmb3JjZSBxdWllc2NlbnQgc3RhdGUuICovCisjZGVmaW5lIFJDVV9HUF9JRExFCQkwCS8qIE5vIGdyYWNlIHBlcmlvZCBpbiBwcm9ncmVzcy4gKi8KKyNkZWZpbmUgUkNVX0dQX0lOSVQJCTEJLyogR3JhY2UgcGVyaW9kIGJlaW5nIGluaXRpYWxpemVkLiAqLworI2RlZmluZSBSQ1VfU0FWRV9EWU5USUNLCTIJLyogTmVlZCB0byBzY2FuIGR5bnRpY2sgc3RhdGUuICovCisjZGVmaW5lIFJDVV9GT1JDRV9RUwkJMwkvKiBOZWVkIHRvIGZvcmNlIHF1aWVzY2VudCBzdGF0ZS4gKi8KICNpZmRlZiBDT05GSUdfTk9fSFoKICNkZWZpbmUgUkNVX1NJR05BTF9JTklUCQlSQ1VfU0FWRV9EWU5USUNLCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX05PX0haICovCkBAIC0yMTYsOCArMjQ1LDE5IEBACiAJCQkJCQkvKiBGb3JjZSBRUyBzdGF0ZS4gKi8KIAlsb25nCWdwbnVtOwkJCQkvKiBDdXJyZW50IGdwIG51bWJlci4gKi8KIAlsb25nCWNvbXBsZXRlZDsJCQkvKiAjIG9mIGxhc3QgY29tcGxldGVkIGdwLiAqLworCisJLyogRW5kICBvZiBmaWVsZHMgZ3VhcmRlZCBieSByb290IHJjdV9ub2RlJ3MgbG9jay4gKi8KKwogCXNwaW5sb2NrX3Qgb25vZmZsb2NrOwkJCS8qIGV4Y2x1ZGUgb24vb2ZmbGluZSBhbmQgKi8KLQkJCQkJCS8qICBzdGFydGluZyBuZXcgR1AuICovCisJCQkJCQkvKiAgc3RhcnRpbmcgbmV3IEdQLiAgQWxzbyAqLworCQkJCQkJLyogIHByb3RlY3RzIHRoZSBmb2xsb3dpbmcgKi8KKwkJCQkJCS8qICBvcnBoYW5fY2JzIGZpZWxkcy4gKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgKm9ycGhhbl9jYnNfbGlzdDsJLyogbGlzdCBvZiByY3VfaGVhZCBzdHJ1Y3RzICovCisJCQkJCQkvKiAgb3JwaGFuZWQgYnkgYWxsIENQVXMgaW4gKi8KKwkJCQkJCS8qICBhIGdpdmVuIGxlYWYgcmN1X25vZGUgKi8KKwkJCQkJCS8qICBnb2luZyBvZmZsaW5lLiAqLworCXN0cnVjdCByY3VfaGVhZCAqKm9ycGhhbl9jYnNfdGFpbDsJLyogQW5kIHRhaWwgcG9pbnRlci4gKi8KKwlsb25nIG9ycGhhbl9xbGVuOwkJCS8qIE51bWJlciBvZiBvcnBoYW5lZCBjYnMuICovCiAJc3BpbmxvY2tfdCBmcXNsb2NrOwkJCS8qIE9ubHkgb25lIHRhc2sgZm9yY2luZyAqLwogCQkJCQkJLyogIHF1aWVzY2VudCBzdGF0ZXMuICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzX2ZvcmNlX3FzOwkJLyogVGltZSBhdCB3aGljaCB0byBpbnZva2UgKi8KQEAgLTI1NSw1ICsyOTUsMzAgQEAKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmN1X2RhdGEsIHJjdV9wcmVlbXB0X2RhdGEpOwogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSAqLwogCi0jZW5kaWYgLyogI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KKyNlbHNlIC8qICNpZmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciByY3V0cmVlX3BsdWdpbi5oICovCitzdGF0aWMgaW5saW5lIHZvaWQgcmN1X2Jvb3R1cF9hbm5vdW5jZSh2b2lkKTsKK2xvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkKHZvaWQpOworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfbm90ZV9jb250ZXh0X3N3aXRjaChpbnQgY3B1KTsKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKKyNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgorc3RhdGljIHZvaWQgcmN1X3ByaW50X3Rhc2tfc3RhbGwoc3RydWN0IHJjdV9ub2RlICpybnApOworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX2NwdShpbnQgY3B1KTsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKTsKK3ZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfcGVuZGluZyhpbnQgY3B1KTsKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfbmVlZHNfY3B1KGludCBjcHUpOworc3RhdGljIHZvaWQgX19jcHVpbml0IHJjdV9wcmVlbXB0X2luaXRfcGVyY3B1X2RhdGEoaW50IGNwdSk7CitzdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9zZW5kX2Nic190b19vcnBoYW5hZ2Uodm9pZCk7CitzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpOworCisjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIFJDVV9UUkVFX05PTkNPUkUgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3BsdWdpbi5oIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKaW5kZXggMWNlZTA0Zi4uZWYyYTU4YyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKKysrIGIva2VybmVsL3JjdXRyZWVfcGx1Z2luLmgKQEAgLTE1MCw2ICsxNTAsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fcmN1X3JlYWRfbG9jayk7CiAKKy8qCisgKiBDaGVjayBmb3IgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZAorICogZm9yIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLiAgSWYgdGhlIGNhbGxlciBuZWVkcyBhIHJlbGlhYmxlCisgKiBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncyAtPmxvY2suCisgKi8KK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQoreworCXJldHVybiAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKTsKK30KKwogc3RhdGljIHZvaWQgcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewogCWludCBlbXB0eTsKQEAgLTE5Niw3ICsyMDYsNyBAQAogCQkJCWJyZWFrOwogCQkJc3Bpbl91bmxvY2soJnJucC0+bG9jayk7ICAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJfQotCQllbXB0eSA9IGxpc3RfZW1wdHkoJnJucC0+YmxvY2tlZF90YXNrc1tybnAtPmdwbnVtICYgMHgxXSk7CisJCWVtcHR5ID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApOwogCQlsaXN0X2RlbF9pbml0KCZ0LT5yY3Vfbm9kZV9lbnRyeSk7CiAJCXQtPnJjdV9ibG9ja2VkX25vZGUgPSBOVUxMOwogCkBAIC0yMDcsNyArMjE3LDcgQEAKIAkJICogZHJvcCBybnAtPmxvY2sgYW5kIHJlc3RvcmUgaXJxLgogCQkgKi8KIAkJaWYgKCFlbXB0eSAmJiBybnAtPnFzbWFzayA9PSAwICYmCi0JCSAgICBsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pKSB7CisJCSAgICAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpIHsKIAkJCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3A7CiAKIAkJCWlmIChybnAtPnBhcmVudCA9PSBOVUxMKSB7CkBAIC0yNTcsMTIgKzI2NywxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqbHA7Ci0JaW50IHBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsKKwlpbnQgcGhhc2U7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCi0JaWYgKCFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbcGhhc2VdKSkgeworCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnMocm5wKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0JCXBoYXNlID0gcm5wLT5ncG51bSAmIDB4MTsgLyogcmUtcmVhZCB1bmRlciBsb2NrLiAqLworCQlwaGFzZSA9IHJucC0+Z3BudW0gJiAweDE7CiAJCWxwID0gJnJucC0+YmxvY2tlZF90YXNrc1twaGFzZV07CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgbHAsIHJjdV9ub2RlX2VudHJ5KQogCQkJcHJpbnRrKCIgUCVkIiwgdC0+cGlkKTsKQEAgLTI4MSwyMCArMjkxLDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0JV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3Nbcm5wLT5ncG51bSAmIDB4MV0pKTsKKwlXQVJOX09OX09OQ0UocmN1X3ByZWVtcHRlZF9yZWFkZXJzKHJucCkpOwogCVdBUk5fT05fT05DRShybnAtPnFzbWFzayk7CiB9CiAKLS8qCi0gKiBDaGVjayBmb3IgcHJlZW1wdGVkIFJDVSByZWFkZXJzIGZvciB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KLSAqIElmIHRoZSBjYWxsZXIgbmVlZHMgYSByZWxpYWJsZSBhbnN3ZXIsIGl0IG11c3QgaG9sZCB0aGUgcmN1X25vZGUncwotICogPmxvY2suCi0gKi8KLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRlZF9yZWFkZXJzKHN0cnVjdCByY3Vfbm9kZSAqcm5wKQotewotCXJldHVybiAhbGlzdF9lbXB0eSgmcm5wLT5ibG9ja2VkX3Rhc2tzW3JucC0+Z3BudW0gJiAweDFdKTsKLX0KLQogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCiAvKgpAQCAtMzA0LDIxICszMDQsMjUgQEAKICAqIHBhcmVudCBpcyB0byByZW1vdmUgdGhlIG5lZWQgZm9yIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKCkgdG8KICAqIG1ha2UgbW9yZSB0aGFuIHR3byBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSB0YXJnZXQgcmN1X25vZGUncyBsb2NrLgogICoKKyAqIFJldHVybnMgMSBpZiB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHRhc2sgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UKKyAqIHBlcmlvZCBvbiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZS4KKyAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBybnAtPmxvY2sgd2l0aCBpcnFzIGRpc2FibGVkLgogICovCi1zdGF0aWMgdm9pZCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKK3N0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCisJCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKKwkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQogewogCWludCBpOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxwX3Jvb3Q7CisJaW50IHJldHZhbCA9IHJjdV9wcmVlbXB0ZWRfcmVhZGVycyhybnApOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wX3Jvb3QgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRwOwogCiAJaWYgKHJucCA9PSBybnBfcm9vdCkgewogCQlXQVJOX09OQ0UoMSwgIkxhc3QgQ1BVIHRob3VnaHQgdG8gYmUgb2ZmbGluZWQ/Iik7Ci0JCXJldHVybjsgIC8qIFNob3VsZG4ndCBoYXBwZW46IGF0IGxlYXN0IG9uZSBDUFUgb25saW5lLiAqLworCQlyZXR1cm4gMDsgIC8qIFNob3VsZG4ndCBoYXBwZW46IGF0IGxlYXN0IG9uZSBDUFUgb25saW5lLiAqLwogCX0KIAlXQVJOX09OX09OQ0Uocm5wICE9IHJkcC0+bXlub2RlICYmCiAJCSAgICAgKCFsaXN0X2VtcHR5KCZybnAtPmJsb2NrZWRfdGFza3NbMF0pIHx8CkBAIC0zNDIsNiArMzQ2LDggQEAKIAkJCXNwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkICovCiAJCX0KIAl9CisKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgpAQCAtMzkzLDYgKzM5OSwxNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCiAvKgorICogV2FpdCBmb3IgYW4gcmN1LXByZWVtcHQgZ3JhY2UgcGVyaW9kLiAgV2UgYXJlIHN1cHBvc2VkIHRvIGV4cGVkaXRlIHRoZQorICogZ3JhY2UgcGVyaW9kLCBidXQgdGhpcyBpcyB0aGUgY3J1ZGUgc2xvdyBjb21wYXRhYmlsaXR5IGhhY2ssIHNvIGp1c3QKKyAqIGludm9rZSBzeW5jaHJvbml6ZV9yY3UoKS4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCit7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKTsKKworLyoKICAqIENoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgaW1tZWRpYXRlIHByZWVtcHRhYmxlLVJDVS1yZWxhdGVkIHdvcmsKICAqIHRvIGJlIGRvbmUuCiAgKi8KQEAgLTQxMCw2ICs0MjcsMTUgQEAKIAlyZXR1cm4gISFwZXJfY3B1KHJjdV9wcmVlbXB0X2RhdGEsIGNwdSkubnh0bGlzdDsKIH0KIAorLyoqCisgKiByY3VfYmFycmllciAtIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCBjYWxsX3JjdSgpIGNhbGxiYWNrcyBjb21wbGV0ZS4KKyAqLwordm9pZCByY3VfYmFycmllcih2b2lkKQoreworCV9yY3VfYmFycmllcigmcmN1X3ByZWVtcHRfc3RhdGUsIGNhbGxfcmN1KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyKTsKKwogLyoKICAqIEluaXRpYWxpemUgcHJlZW1wdGFibGUgUkNVJ3MgcGVyLUNQVSBkYXRhLgogICovCkBAIC00MTksNiArNDQ1LDIyIEBACiB9CiAKIC8qCisgKiBNb3ZlIHByZWVtcHRhYmxlIFJDVSdzIGNhbGxiYWNrcyB0byAtPm9ycGhhbl9jYnNfbGlzdC4KKyAqLworc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfc2VuZF9jYnNfdG9fb3JwaGFuYWdlKHZvaWQpCit7CisJcmN1X3NlbmRfY2JzX3RvX29ycGhhbmFnZSgmcmN1X3ByZWVtcHRfc3RhdGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBwcmVlbXB0YWJsZSBSQ1UncyBzdGF0ZSBzdHJ1Y3R1cmVzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCit7CisJUkNVX0lOSVRfRkxBVk9SKCZyY3VfcHJlZW1wdF9zdGF0ZSwgcmN1X3ByZWVtcHRfZGF0YSk7Cit9CisKKy8qCiAgKiBDaGVjayBmb3IgYSB0YXNrIGV4aXRpbmcgd2hpbGUgaW4gYSBwcmVlbXB0YWJsZS1SQ1UgcmVhZC1zaWRlCiAgKiBjcml0aWNhbCBzZWN0aW9uLCBjbGVhbiB1cCBpZiBzby4gIE5vIG5lZWQgdG8gaXNzdWUgd2FybmluZ3MsCiAgKiBhcyBkZWJ1Z19jaGVja19ub19sb2Nrc19oZWxkKCkgYWxyZWFkeSBkb2VzIHRoaXMgaWYgbG9ja2RlcApAQCAtNDYxLDYgKzUwMywxNSBAQAogewogfQogCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGFyZSBuZXZlciBhbnkgcHJlZW1wdGVkCisgKiBSQ1UgcmVhZGVycy4KKyAqLworc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCit7CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUgogCiAvKgpAQCAtNDgzLDI1ICs1MzQsMTkgQEAKIAlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOwogfQogCi0vKgotICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHRoZXJlIGFyZSBuZXZlciBhbnkgcHJlZW1wdGVkCi0gKiBSQ1UgcmVhZGVycy4KLSAqLwotc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnMoc3RydWN0IHJjdV9ub2RlICpybnApCi17Ci0JcmV0dXJuIDA7Ci19Ci0KICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAogLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBuZWVkcyB0byBtaWdyYXRlCi0gKiB0YXNrcyB0aGF0IHdlcmUgYmxvY2tlZCB3aXRoaW4gUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucy4KKyAqIHRhc2tzIHRoYXQgd2VyZSBibG9ja2VkIHdpdGhpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zLCBhbmQKKyAqIHN1Y2ggbm9uLWV4aXN0ZW50IHRhc2tzIGNhbm5vdCBwb3NzaWJseSBoYXZlIGJlZW4gYmxvY2tpbmcgdGhlIGN1cnJlbnQKKyAqIGdyYWNlIHBlcmlvZC4KICAqLwotc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApCitzdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAorCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCisJCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKIHsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTUxOCw3ICs1NjMsNyBAQAogICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5ldmVyIGhhcyBhbnkgY2FsbGJhY2tzCiAgKiB0byBjaGVjay4KICAqLwotdm9pZCByY3VfcHJlZW1wdF9jaGVja19jYWxsYmFja3MoaW50IGNwdSkKK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyhpbnQgY3B1KQogewogfQogCkBAIC01MjYsNyArNTcxLDcgQEAKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gcHJvY2Vzcy4KICAqLwotdm9pZCByY3VfcHJlZW1wdF9wcm9jZXNzX2NhbGxiYWNrcyh2b2lkKQorc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfcHJvY2Vzc19jYWxsYmFja3Modm9pZCkKIHsKIH0KIApAQCAtNTQwLDYgKzU4NSwxNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoY2FsbF9yY3UpOwogCiAvKgorICogV2FpdCBmb3IgYW4gcmN1LXByZWVtcHQgZ3JhY2UgcGVyaW9kLCBidXQgbWFrZSBpdCBoYXBwZW4gcXVpY2tseS4KKyAqIEJ1dCBiZWNhdXNlIHByZWVtcHRhYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbWFwIHRvIHJjdS1zY2hlZC4KKyAqLwordm9pZCBzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKHZvaWQpCit7CisJc3luY2hyb25pemVfc2NoZWRfZXhwZWRpdGVkKCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzeW5jaHJvbml6ZV9yY3VfZXhwZWRpdGVkKTsKKworLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IHdvcmsgdG8gZG8uCiAgKi8KIHN0YXRpYyBpbnQgcmN1X3ByZWVtcHRfcGVuZGluZyhpbnQgY3B1KQpAQCAtNTU2LDYgKzYxMSwxNiBAQAogfQogCiAvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIHJjdV9iYXJyaWVyKCkgaXMganVzdAorICogYW5vdGhlciBuYW1lIGZvciByY3VfYmFycmllcl9zY2hlZCgpLgorICovCit2b2lkIHJjdV9iYXJyaWVyKHZvaWQpCit7CisJcmN1X2JhcnJpZXJfc2NoZWQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXJyaWVyKTsKKworLyoKICAqIEJlY2F1c2UgcHJlZW1wdGFibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBpcyBubyBwZXItQ1BVCiAgKiBkYXRhIHRvIGluaXRpYWxpemUuCiAgKi8KQEAgLTU2Myw0ICs2MjgsMTggQEAKIHsKIH0KIAorLyoKKyAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGFibGUgUkNVLCB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzIHRvIG1vdmUuCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X3NlbmRfY2JzX3RvX29ycGhhbmFnZSh2b2lkKQoreworfQorCisvKgorICogQmVjYXVzZSBwcmVlbXB0YWJsZSBSQ1UgZG9lcyBub3QgZXhpc3QsIGl0IG5lZWQgbm90IGJlIGluaXRpYWxpemVkLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpCit7Cit9CisKICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMgYi9rZXJuZWwvcmN1dHJlZV90cmFjZS5jCmluZGV4IGM4OWY1ZTkuLjRiMzFjNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3V0cmVlX3RyYWNlLmMKKysrIGIva2VybmVsL3JjdXRyZWVfdHJhY2UuYwpAQCAtOTMsNyArOTMsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWRhdGEsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VkYXRhX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VkYXRhX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdWRhdGFfY3N2LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1ZGF0YV9jc3ZfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWRhdGFfY3N2X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VkYXRhX2Nzdl9vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xNTksMTMgKzE1OSwxMyBAQAogCXN0cnVjdCByY3Vfbm9kZSAqcm5wOwogCiAJc2VxX3ByaW50ZihtLCAiYz0lbGQgZz0lbGQgcz0lZCBqZnE9JWxkIGo9JXggIgotCSAgICAgICAgICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdVxuIiwKKwkJICAgICAgIm5mcXM9JWx1L25mcXNuZz0lbHUoJWx1KSBmcWxoPSVsdSBvcWxlbj0lbGRcbiIsCiAJCSAgIHJzcC0+Y29tcGxldGVkLCByc3AtPmdwbnVtLCByc3AtPnNpZ25hbGVkLAogCQkgICAobG9uZykocnNwLT5qaWZmaWVzX2ZvcmNlX3FzIC0gamlmZmllcyksCiAJCSAgIChpbnQpKGppZmZpZXMgJiAweGZmZmYpLAogCQkgICByc3AtPm5fZm9yY2VfcXMsIHJzcC0+bl9mb3JjZV9xc19uZ3AsCiAJCSAgIHJzcC0+bl9mb3JjZV9xcyAtIHJzcC0+bl9mb3JjZV9xc19uZ3AsCi0JCSAgIHJzcC0+bl9mb3JjZV9xc19saCk7CisJCSAgIHJzcC0+bl9mb3JjZV9xc19saCwgcnNwLT5vcnBoYW5fcWxlbik7CiAJZm9yIChybnAgPSAmcnNwLT5ub2RlWzBdOyBybnAgLSAmcnNwLT5ub2RlWzBdIDwgTlVNX1JDVV9OT0RFUzsgcm5wKyspIHsKIAkJaWYgKHJucC0+bGV2ZWwgIT0gbGV2ZWwpIHsKIAkJCXNlcV9wdXRzKG0sICJcbiIpOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1aGllciwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWhpZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdWhpZXJfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWhpZXJfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjIyLDcgKzIyMiw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfcmN1Z3AsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByY3VncF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1Z3BfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHJjdWdwX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKQEAgLTI3Niw3ICsyNzYsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzaG93X3JjdV9wZW5kaW5nLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmN1X3BlbmRpbmdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjdV9wZW5kaW5nX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSByY3VfcGVuZGluZ19vcGVuLAogCS5yZWFkID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IGJjMTg4NTQuLjc2MGMyNjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC02MCw3ICs2MCw3IEBACiAvKgogICogdm1fb3BzIGZvciByZWxheSBmaWxlIG1hcHBpbmdzLgogICovCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJlbGF5X2ZpbGVfbW1hcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHJlbGF5X2ZpbGVfbW1hcF9vcHMgPSB7CiAJLmZhdWx0ID0gcmVsYXlfYnVmX2ZhdWx0LAogCS5jbG9zZSA9IHJlbGF5X2ZpbGVfbW1hcF9jbG9zZSwKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzX2NvdW50ZXIuYyBiL2tlcm5lbC9yZXNfY291bnRlci5jCmluZGV4IDg4ZmFlYzIuLmJjZGFiZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNfY291bnRlci5jCisrKyBiL2tlcm5lbC9yZXNfY291bnRlci5jCkBAIC0zNywyNyArMzcsMTcgQEAKIH0KIAogaW50IHJlc19jb3VudGVyX2NoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJc3RydWN0IHJlc19jb3VudGVyICoqbGltaXRfZmFpbF9hdCwKLQkJCXN0cnVjdCByZXNfY291bnRlciAqKnNvZnRfbGltaXRfZmFpbF9hdCkKKwkJCXN0cnVjdCByZXNfY291bnRlciAqKmxpbWl0X2ZhaWxfYXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByZXNfY291bnRlciAqYywgKnU7CiAKIAkqbGltaXRfZmFpbF9hdCA9IE5VTEw7Ci0JaWYgKHNvZnRfbGltaXRfZmFpbF9hdCkKLQkJKnNvZnRfbGltaXRfZmFpbF9hdCA9IE5VTEw7CiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvciAoYyA9IGNvdW50ZXI7IGMgIT0gTlVMTDsgYyA9IGMtPnBhcmVudCkgewogCQlzcGluX2xvY2soJmMtPmxvY2spOwogCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2VfbG9ja2VkKGMsIHZhbCk7Ci0JCS8qCi0JCSAqIFdpdGggc29mdCBsaW1pdHMsIHdlIHJldHVybiB0aGUgaGlnaGVzdCBhbmNlc3RvcgotCQkgKiB0aGF0IGV4Y2VlZHMgaXRzIHNvZnQgbGltaXQKLQkJICovCi0JCWlmIChzb2Z0X2xpbWl0X2ZhaWxfYXQgJiYKLQkJCSFyZXNfY291bnRlcl9zb2Z0X2xpbWl0X2NoZWNrX2xvY2tlZChjKSkKLQkJCSpzb2Z0X2xpbWl0X2ZhaWxfYXQgPSBjOwogCQlzcGluX3VubG9jaygmYy0+bG9jayk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQkqbGltaXRfZmFpbF9hdCA9IGM7CkBAIC04NSw4ICs3NSw3IEBACiAJY291bnRlci0+dXNhZ2UgLT0gdmFsOwogfQogCi12b2lkIHJlc19jb3VudGVyX3VuY2hhcmdlKHN0cnVjdCByZXNfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCQkJYm9vbCAqd2FzX3NvZnRfbGltaXRfZXhjZXNzKQordm9pZCByZXNfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcmVzX2NvdW50ZXIgKmNvdW50ZXIsIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJlc19jb3VudGVyICpjOwpAQCAtOTQsOSArODMsNiBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3IgKGMgPSBjb3VudGVyOyBjICE9IE5VTEw7IGMgPSBjLT5wYXJlbnQpIHsKIAkJc3Bpbl9sb2NrKCZjLT5sb2NrKTsKLQkJaWYgKHdhc19zb2Z0X2xpbWl0X2V4Y2VzcykKLQkJCSp3YXNfc29mdF9saW1pdF9leGNlc3MgPQotCQkJCSFyZXNfY291bnRlcl9zb2Z0X2xpbWl0X2NoZWNrX2xvY2tlZChjKTsKIAkJcmVzX2NvdW50ZXJfdW5jaGFyZ2VfbG9ja2VkKGMsIHZhbCk7CiAJCXNwaW5fdW5sb2NrKCZjLT5sb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGVlNjFmNDUuLjNjMTFhZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC0zMDksNiArMzA5LDggQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNrX2dyb3VwX2xvY2spOwogCisjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKKwogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQgcm9vdF90YXNrX2dyb3VwX2VtcHR5KHZvaWQpCiB7CkBAIC0zMTYsNyArMzE4LDYgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJKDIqTklDRV8wX0xPQUQpCiAjZWxzZSAvKiAhQ09ORklHX1VTRVJfU0NIRUQgKi8KQEAgLTY3Niw2ICs2NzcsNyBAQAogCiAvKioKICAqIHJ1bnF1ZXVlX2lzX2xvY2tlZAorICogQGNwdTogdGhlIHByb2Nlc3NvciBpbiBxdWVzdGlvbi4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgY3B1IHJ1bnF1ZXVlIGlzIGxvY2tlZC4KICAqIFRoaXMgaW50ZXJmYWNlIGFsbG93cyBwcmludGsgdG8gYmUgY2FsbGVkIHdpdGggdGhlIHJ1bnF1ZXVlIGxvY2sKQEAgLTc4MCw3ICs3ODIsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCBzY2hlZF9mZWF0X3Nob3csIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9mZWF0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY2hlZF9mZWF0X2ZvcHMgPSB7CiAJLm9wZW4JCT0gc2NoZWRfZmVhdF9vcGVuLAogCS53cml0ZQkJPSBzY2hlZF9mZWF0X3dyaXRlLAogCS5yZWFkCQk9IHNlcV9yZWFkLApAQCAtMTU2MywxMSArMTU2NSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCi1zdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhIHsKLQl1bnNpZ25lZCBsb25nIHJxX3dlaWdodFtOUl9DUFVTXTsKLX07Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhLCB1cGRhdGVfc2hhcmVzX2RhdGEpOworc3RhdGljIF9fcmVhZF9tb3N0bHkgdW5zaWduZWQgbG9uZyAqdXBkYXRlX3NoYXJlc19kYXRhOwogCiBzdGF0aWMgdm9pZCBfX3NldF9zZV9zaGFyZXMoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsIHVuc2lnbmVkIGxvbmcgc2hhcmVzKTsKIApAQCAtMTU3NywxMiArMTU3NSwxMiBAQAogc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwX3NoYXJlc19jcHUoc3RydWN0IHRhc2tfZ3JvdXAgKnRnLCBpbnQgY3B1LAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNkX3NoYXJlcywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBzZF9ycV93ZWlnaHQsCi0JCQkJICAgIHN0cnVjdCB1cGRhdGVfc2hhcmVzX2RhdGEgKnVzZCkKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodCkKIHsKIAl1bnNpZ25lZCBsb25nIHNoYXJlcywgcnFfd2VpZ2h0OwogCWludCBib29zdCA9IDA7CiAKLQlycV93ZWlnaHQgPSB1c2QtPnJxX3dlaWdodFtjcHVdOworCXJxX3dlaWdodCA9IHVzZF9ycV93ZWlnaHRbY3B1XTsKIAlpZiAoIXJxX3dlaWdodCkgewogCQlib29zdCA9IDE7CiAJCXJxX3dlaWdodCA9IE5JQ0VfMF9MT0FEOwpAQCAtMTYxNyw3ICsxNjE1LDcgQEAKIHN0YXRpYyBpbnQgdGdfc2hhcmVzX3VwKHN0cnVjdCB0YXNrX2dyb3VwICp0Zywgdm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHdlaWdodCwgcnFfd2VpZ2h0ID0gMCwgc2hhcmVzID0gMDsKLQlzdHJ1Y3QgdXBkYXRlX3NoYXJlc19kYXRhICp1c2Q7CisJdW5zaWduZWQgbG9uZyAqdXNkX3JxX3dlaWdodDsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKQEAgLTE2MjYsMTEgKzE2MjQsMTEgQEAKIAkJcmV0dXJuIDA7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdXNkID0gJl9fZ2V0X2NwdV92YXIodXBkYXRlX3NoYXJlc19kYXRhKTsKKwl1c2RfcnFfd2VpZ2h0ID0gcGVyX2NwdV9wdHIodXBkYXRlX3NoYXJlc19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkgewogCQl3ZWlnaHQgPSB0Zy0+Y2ZzX3JxW2ldLT5sb2FkLndlaWdodDsKLQkJdXNkLT5ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7CisJCXVzZF9ycV93ZWlnaHRbaV0gPSB3ZWlnaHQ7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgYXJlIGN1cnJlbnRseSBubyB0YXNrcyBvbiB0aGUgY3B1IHByZXRlbmQgdGhlcmUKQEAgLTE2NTEsNyArMTY0OSw3IEBACiAJCXNoYXJlcyA9IHRnLT5zaGFyZXM7CiAKIAlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKQotCQl1cGRhdGVfZ3JvdXBfc2hhcmVzX2NwdSh0ZywgaSwgc2hhcmVzLCBycV93ZWlnaHQsIHVzZCk7CisJCXVwZGF0ZV9ncm91cF9zaGFyZXNfY3B1KHRnLCBpLCBzaGFyZXMsIHJxX3dlaWdodCwgdXNkX3JxX3dlaWdodCk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKQEAgLTE5OTUsNiArMTk5MywzOCBAQAogCQlwLT5zY2hlZF9jbGFzcy0+cHJpb19jaGFuZ2VkKHJxLCBwLCBvbGRwcmlvLCBydW5uaW5nKTsKIH0KIAorLyoqCisgKiBrdGhyZWFkX2JpbmQgLSBiaW5kIGEganVzdC1jcmVhdGVkIGt0aHJlYWQgdG8gYSBjcHUuCisgKiBAcDogdGhyZWFkIGNyZWF0ZWQgYnkga3RocmVhZF9jcmVhdGUoKS4KKyAqIEBjcHU6IGNwdSAobWlnaHQgbm90IGJlIG9ubGluZSwgbXVzdCBiZSBwb3NzaWJsZSkgZm9yIEBrIHRvIHJ1biBvbi4KKyAqCisgKiBEZXNjcmlwdGlvbjogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldF9jcHVzX2FsbG93ZWQoKSwKKyAqIGV4Y2VwdCB0aGF0IEBjcHUgZG9lc24ndCBuZWVkIHRvIGJlIG9ubGluZSwgYW5kIHRoZSB0aHJlYWQgbXVzdCBiZQorICogc3RvcHBlZCAoaS5lLiwganVzdCByZXR1cm5lZCBmcm9tIGt0aHJlYWRfY3JlYXRlKCkpLgorICoKKyAqIEZ1bmN0aW9uIGxpdmVzIGhlcmUgaW5zdGVhZCBvZiBrdGhyZWFkLmMgYmVjYXVzZSBpdCBtZXNzZXMgd2l0aAorICogc2NoZWR1bGVyIGludGVybmFscyB3aGljaCByZXF1aXJlIGxvY2tpbmcuCisgKi8KK3ZvaWQga3RocmVhZF9iaW5kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE11c3QgaGF2ZSBkb25lIHNjaGVkdWxlKCkgaW4ga3RocmVhZCgpIGJlZm9yZSB3ZSBzZXRfdGFza19jcHUgKi8KKwlpZiAoIXdhaXRfdGFza19pbmFjdGl2ZShwLCBUQVNLX1VOSU5URVJSVVBUSUJMRSkpIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCXNldF90YXNrX2NwdShwLCBjcHUpOworCXAtPmNwdXNfYWxsb3dlZCA9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisJcC0+cnQubnJfY3B1c19hbGxvd2VkID0gMTsKKwlwLT5mbGFncyB8PSBQRl9USFJFQURfQk9VTkQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woa3RocmVhZF9iaW5kKTsKKwogI2lmZGVmIENPTkZJR19TTVAKIC8qCiAgKiBJcyB0aGlzIHRhc2sgbGlrZWx5IGNhY2hlLWhvdDoKQEAgLTIwMDcsNyArMjAzNyw3IEBACiAJLyoKIAkgKiBCdWRkeSBjYW5kaWRhdGVzIGFyZSBjYWNoZSBob3Q6CiAJICovCi0JaWYgKHNjaGVkX2ZlYXQoQ0FDSEVfSE9UX0JVRERZKSAmJgorCWlmIChzY2hlZF9mZWF0KENBQ0hFX0hPVF9CVUREWSkgJiYgdGhpc19ycSgpLT5ucl9ydW5uaW5nICYmCiAJCQkoJnAtPnNlID09IGNmc19ycV9vZigmcC0+c2UpLT5uZXh0IHx8CiAJCQkgJnAtPnNlID09IGNmc19ycV9vZigmcC0+c2UpLT5sYXN0KSkKIAkJcmV0dXJuIDE7CkBAIC0yMzExLDcgKzIzNDEsNyBAQAogewogCWludCBjcHUsIG9yaWdfY3B1LCB0aGlzX2NwdSwgc3VjY2VzcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcnEgKnJxOworCXN0cnVjdCBycSAqcnEsICpvcmlnX3JxOwogCiAJaWYgKCFzY2hlZF9mZWF0KFNZTkNfV0FLRVVQUykpCiAJCXdha2VfZmxhZ3MgJj0gfldGX1NZTkM7CkBAIC0yMzE5LDcgKzIzNDksNyBAQAogCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOwogCiAJc21wX3dtYigpOwotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJcnEgPSBvcmlnX3JxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAlpZiAoIShwLT5zdGF0ZSAmIHN0YXRlKSkKIAkJZ290byBvdXQ7CkBAIC0yMzUwLDYgKzIzODAsMTAgQEAKIAkJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7CiAKIAlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCisJaWYgKHJxICE9IG9yaWdfcnEpCisJCXVwZGF0ZV9ycV9jbG9jayhycSk7CisKIAlXQVJOX09OKHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HKTsKIAljcHUgPSB0YXNrX2NwdShwKTsKIApAQCAtMjUxNSwyMiArMjU0OSwxNyBAQAogCV9fc2NoZWRfZm9yayhwKTsKIAogCS8qCi0JICogTWFrZSBzdXJlIHdlIGRvIG5vdCBsZWFrIFBJIGJvb3N0aW5nIHByaW9yaXR5IHRvIHRoZSBjaGlsZC4KLQkgKi8KLQlwLT5wcmlvID0gY3VycmVudC0+bm9ybWFsX3ByaW87Ci0KLQkvKgogCSAqIFJldmVydCB0byBkZWZhdWx0IHByaW9yaXR5L3BvbGljeSBvbiBmb3JrIGlmIHJlcXVlc3RlZC4KIAkgKi8KIAlpZiAodW5saWtlbHkocC0+c2NoZWRfcmVzZXRfb25fZm9yaykpIHsKLQkJaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9GSUZPIHx8IHAtPnBvbGljeSA9PSBTQ0hFRF9SUikKKwkJaWYgKHAtPnBvbGljeSA9PSBTQ0hFRF9GSUZPIHx8IHAtPnBvbGljeSA9PSBTQ0hFRF9SUikgewogCQkJcC0+cG9saWN5ID0gU0NIRURfTk9STUFMOwotCi0JCWlmIChwLT5ub3JtYWxfcHJpbyA8IERFRkFVTFRfUFJJTykKLQkJCXAtPnByaW8gPSBERUZBVUxUX1BSSU87CisJCQlwLT5ub3JtYWxfcHJpbyA9IHAtPnN0YXRpY19wcmlvOworCQl9CiAKIAkJaWYgKFBSSU9fVE9fTklDRShwLT5zdGF0aWNfcHJpbykgPCAwKSB7CiAJCQlwLT5zdGF0aWNfcHJpbyA9IE5JQ0VfVE9fUFJJTygwKTsKKwkJCXAtPm5vcm1hbF9wcmlvID0gcC0+c3RhdGljX3ByaW87CiAJCQlzZXRfbG9hZF93ZWlnaHQocCk7CiAJCX0KIApAQCAtMjU0MSw2ICsyNTcwLDExIEBACiAJCXAtPnNjaGVkX3Jlc2V0X29uX2ZvcmsgPSAwOwogCX0KIAorCS8qCisJICogTWFrZSBzdXJlIHdlIGRvIG5vdCBsZWFrIFBJIGJvb3N0aW5nIHByaW9yaXR5IHRvIHRoZSBjaGlsZC4KKwkgKi8KKwlwLT5wcmlvID0gY3VycmVudC0+bm9ybWFsX3ByaW87CisKIAlpZiAoIXJ0X3ByaW8ocC0+cHJpbykpCiAJCXAtPnNjaGVkX2NsYXNzID0gJmZhaXJfc2NoZWRfY2xhc3M7CiAKQEAgLTI1ODEsOCArMjYxNSw2IEBACiAJQlVHX09OKHAtPnN0YXRlICE9IFRBU0tfUlVOTklORyk7CiAJdXBkYXRlX3JxX2Nsb2NrKHJxKTsKIAotCXAtPnByaW8gPSBlZmZlY3RpdmVfcHJpbyhwKTsKLQogCWlmICghcC0+c2NoZWRfY2xhc3MtPnRhc2tfbmV3IHx8ICFjdXJyZW50LT5zZS5vbl9ycSkgewogCQlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAl9IGVsc2UgewpAQCAtMzY1OCw2ICszNjkwLDcgQEAKIAogLyoqCiAgKiB1cGRhdGVfc2dfbGJfc3RhdHMgLSBVcGRhdGUgc2NoZWRfZ3JvdXAncyBzdGF0aXN0aWNzIGZvciBsb2FkIGJhbGFuY2luZy4KKyAqIEBzZDogVGhlIHNjaGVkX2RvbWFpbiB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQGdyb3VwOiBzY2hlZF9ncm91cCB3aG9zZSBzdGF0aXN0aWNzIGFyZSB0byBiZSB1cGRhdGVkLgogICogQHRoaXNfY3B1OiBDcHUgZm9yIHdoaWNoIGxvYWQgYmFsYW5jZSBpcyBjdXJyZW50bHkgcGVyZm9ybWVkLgogICogQGlkbGU6IElkbGUgc3RhdHVzIG9mIHRoaXNfY3B1CkBAIC02NzIwLDkgKzY3NTMsNiBAQAogLyoKICAqIFRoaXMgdGFzayBpcyBhYm91dCB0byBnbyB0byBzbGVlcCBvbiBJTy4gSW5jcmVtZW50IHJxLT5ucl9pb3dhaXQgc28KICAqIHRoYXQgcHJvY2VzcyBhY2NvdW50aW5nIGtub3dzIHRoYXQgdGhpcyBpcyBhIHRhc2sgaW4gSU8gd2FpdCBzdGF0ZS4KLSAqCi0gKiBCdXQgZG9uJ3QgZG8gdGhhdCBpZiBpdCBpcyBhIGRlbGliZXJhdGUsIHRocm90dGxpbmcgSU8gd2FpdCAodGhpcyB0YXNrCi0gKiBoYXMgc2V0IGl0cyBiYWNraW5nX2Rldl9pbmZvOiB0aGUgcXVldWUgYWdhaW5zdCB3aGljaCBpdCBzaG91bGQgdGhyb3R0bGUpCiAgKi8KIHZvaWQgX19zY2hlZCBpb19zY2hlZHVsZSh2b2lkKQogewpAQCAtOTQwNiw2ICs5NDM2LDEwIEBACiAjZW5kaWYgLyogQ09ORklHX1VTRVJfU0NIRUQgKi8KICNlbmRpZiAvKiBDT05GSUdfR1JPVVBfU0NIRUQgKi8KIAorI2lmIGRlZmluZWQgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgJiYgZGVmaW5lZCBDT05GSUdfU01QCisJdXBkYXRlX3NoYXJlc19kYXRhID0gX19hbGxvY19wZXJjcHUobnJfY3B1X2lkcyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJCQkJICAgIF9fYWxpZ25vZl9fKHVuc2lnbmVkIGxvbmcpKTsKKyNlbmRpZgogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCXN0cnVjdCBycSAqcnE7CiAKQEAgLTk1MzEsMTMgKzk1NjUsMTMgQEAKIAljdXJyZW50LT5zY2hlZF9jbGFzcyA9ICZmYWlyX3NjaGVkX2NsYXNzOwogCiAJLyogQWxsb2NhdGUgdGhlIG5vaHpfY3B1X21hc2sgaWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KLQlhbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CisJemFsbG9jX2NwdW1hc2tfdmFyKCZub2h6X2NwdV9tYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfU01QCiAjaWZkZWYgQ09ORklHX05PX0haCi0JYWxsb2NfY3B1bWFza192YXIoJm5vaHouY3B1X21hc2ssIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oei5jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAJYWxsb2NfY3B1bWFza192YXIoJm5vaHouaWxiX2dycF9ub2h6X21hc2ssIEdGUF9OT1dBSVQpOwogI2VuZGlmCi0JYWxsb2NfY3B1bWFza192YXIoJmNwdV9pc29sYXRlZF9tYXAsIEdGUF9OT1dBSVQpOworCXphbGxvY19jcHVtYXNrX3ZhcigmY3B1X2lzb2xhdGVkX21hcCwgR0ZQX05PV0FJVCk7CiAjZW5kaWYgLyogU01QICovCiAKIAlwZXJmX2V2ZW50X2luaXQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggYWMyZTFkYy4uNDc5Y2U1NiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWNsb2NrID0gd3JhcF9tYXgoY2xvY2ssIG1pbl9jbG9jayk7CiAJY2xvY2sgPSB3cmFwX21pbihjbG9jaywgbWF4X2Nsb2NrKTsKIAotCWlmIChjbXB4Y2hnKCZzY2QtPmNsb2NrLCBvbGRfY2xvY2ssIGNsb2NrKSAhPSBvbGRfY2xvY2spCisJaWYgKGNtcHhjaGc2NCgmc2NkLT5jbG9jaywgb2xkX2Nsb2NrLCBjbG9jaykgIT0gb2xkX2Nsb2NrKQogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIGNsb2NrOwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCXZhbCA9IHJlbW90ZV9jbG9jazsKIAl9CiAKLQlpZiAoY21weGNoZyhwdHIsIG9sZF92YWwsIHZhbCkgIT0gb2xkX3ZhbCkKKwlpZiAoY21weGNoZzY0KHB0ciwgb2xkX3ZhbCwgdmFsKSAhPSBvbGRfdmFsKQogCQlnb3RvIGFnYWluOwogCiAJcmV0dXJuIHZhbDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDRlNzc3YjQuLjM3MDg3YTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtODIyLDYgKzgyMiwyNiBAQAogCQkgKiByZS1lbGVjdGVkIGR1ZSB0byBidWRkeSBmYXZvdXJzLgogCQkgKi8KIAkJY2xlYXJfYnVkZGllcyhjZnNfcnEsIGN1cnIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBFbnN1cmUgdGhhdCBhIHRhc2sgdGhhdCBtaXNzZWQgd2FrZXVwIHByZWVtcHRpb24gYnkgYQorCSAqIG5hcnJvdyBtYXJnaW4gZG9lc24ndCBoYXZlIHRvIHdhaXQgZm9yIGEgZnVsbCBzbGljZS4KKwkgKiBUaGlzIGFsc28gbWl0aWdhdGVzIGJ1ZGR5IGluZHVjZWQgbGF0ZW5jaWVzIHVuZGVyIGxvYWQuCisJICovCisJaWYgKCFzY2hlZF9mZWF0KFdBS0VVUF9QUkVFTVBUKSkKKwkJcmV0dXJuOworCisJaWYgKGRlbHRhX2V4ZWMgPCBzeXNjdGxfc2NoZWRfbWluX2dyYW51bGFyaXR5KQorCQlyZXR1cm47CisKKwlpZiAoY2ZzX3JxLT5ucl9ydW5uaW5nID4gMSkgeworCQlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCQlzNjQgZGVsdGEgPSBjdXJyLT52cnVudGltZSAtIHNlLT52cnVudGltZTsKKworCQlpZiAoZGVsdGEgPiBpZGVhbF9ydW50aW1lKQorCQkJcmVzY2hlZF90YXNrKHJxX29mKGNmc19ycSktPmN1cnIpOwogCX0KIH0KIApAQCAtODYxLDEyICs4ODEsMTggQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpwaWNrX25leHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSA9IF9fcGlja19uZXh0X2VudGl0eShjZnNfcnEpOworCXN0cnVjdCBzY2hlZF9lbnRpdHkgKmxlZnQgPSBzZTsKIAotCWlmIChjZnNfcnEtPm5leHQgJiYgd2FrZXVwX3ByZWVtcHRfZW50aXR5KGNmc19ycS0+bmV4dCwgc2UpIDwgMSkKLQkJcmV0dXJuIGNmc19ycS0+bmV4dDsKKwlpZiAoY2ZzX3JxLT5uZXh0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPm5leHQsIGxlZnQpIDwgMSkKKwkJc2UgPSBjZnNfcnEtPm5leHQ7CiAKLQlpZiAoY2ZzX3JxLT5sYXN0ICYmIHdha2V1cF9wcmVlbXB0X2VudGl0eShjZnNfcnEtPmxhc3QsIHNlKSA8IDEpCi0JCXJldHVybiBjZnNfcnEtPmxhc3Q7CisJLyoKKwkgKiBQcmVmZXIgbGFzdCBidWRkeSwgdHJ5IHRvIHJldHVybiB0aGUgQ1BVIHRvIGEgcHJlZW1wdGVkIHRhc2suCisJICovCisJaWYgKGNmc19ycS0+bGFzdCAmJiB3YWtldXBfcHJlZW1wdF9lbnRpdHkoY2ZzX3JxLT5sYXN0LCBsZWZ0KSA8IDEpCisJCXNlID0gY2ZzX3JxLT5sYXN0OworCisJY2xlYXJfYnVkZGllcyhjZnNfcnEsIHNlKTsKIAogCXJldHVybiBzZTsKIH0KQEAgLTE1NjgsNiArMTU5NCw3IEBACiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmY3Vyci0+c2UsICpwc2UgPSAmcC0+c2U7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gdGFza19jZnNfcnEoY3Vycik7CiAJaW50IHN5bmMgPSB3YWtlX2ZsYWdzICYgV0ZfU1lOQzsKKwlpbnQgc2NhbGUgPSBjZnNfcnEtPm5yX3J1bm5pbmcgPj0gc2NoZWRfbnJfbGF0ZW5jeTsKIAogCXVwZGF0ZV9jdXJyKGNmc19ycSk7CiAKQEAgLTE1ODIsMTggKzE2MDksNyBAQAogCWlmICh1bmxpa2VseShzZSA9PSBwc2UpKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIE9ubHkgc2V0IHRoZSBiYWNrd2FyZCBidWRkeSB3aGVuIHRoZSBjdXJyZW50IHRhc2sgaXMgc3RpbGwgb24gdGhlCi0JICogcnEuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgd2FrZXVwIGdldHMgaW50ZXJsZWF2ZWQgd2l0aCBzY2hlZHVsZSBvbgotCSAqIHRoZSAtPnByZV9zY2hlZHVsZSgpIG9yIGlkbGVfYmFsYW5jZSgpIHBvaW50LCBlaXRoZXIgb2Ygd2hpY2ggY2FuCi0JICogZHJvcCB0aGUgcnEgbG9jay4KLQkgKgotCSAqIEFsc28sIGR1cmluZyBlYXJseSBib290IHRoZSBpZGxlIHRocmVhZCBpcyBpbiB0aGUgZmFpciBjbGFzcywgZm9yCi0JICogb2J2aW91cyByZWFzb25zIGl0cyBhIGJhZCBpZGVhIHRvIHNjaGVkdWxlIGJhY2sgdG8gdGhlIGlkbGUgdGhyZWFkLgotCSAqLwotCWlmIChzY2hlZF9mZWF0KExBU1RfQlVERFkpICYmIGxpa2VseShzZS0+b25fcnEgJiYgY3VyciAhPSBycS0+aWRsZSkpCi0JCXNldF9sYXN0X2J1ZGR5KHNlKTsKLQlpZiAoc2NoZWRfZmVhdChORVhUX0JVRERZKSAmJiAhKHdha2VfZmxhZ3MgJiBXRl9GT1JLKSkKKwlpZiAoc2NoZWRfZmVhdChORVhUX0JVRERZKSAmJiBzY2FsZSAmJiAhKHdha2VfZmxhZ3MgJiBXRl9GT1JLKSkKIAkJc2V0X25leHRfYnVkZHkocHNlKTsKIAogCS8qCkBAIC0xNjM5LDggKzE2NTUsMjIgQEAKIAogCUJVR19PTighcHNlKTsKIAotCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoc2UsIHBzZSkgPT0gMSkKKwlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpIHsKIAkJcmVzY2hlZF90YXNrKGN1cnIpOworCQkvKgorCQkgKiBPbmx5IHNldCB0aGUgYmFja3dhcmQgYnVkZHkgd2hlbiB0aGUgY3VycmVudCB0YXNrIGlzIHN0aWxsCisJCSAqIG9uIHRoZSBycS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSB3YWtldXAgZ2V0cyBpbnRlcmxlYXZlZAorCQkgKiB3aXRoIHNjaGVkdWxlIG9uIHRoZSAtPnByZV9zY2hlZHVsZSgpIG9yIGlkbGVfYmFsYW5jZSgpCisJCSAqIHBvaW50LCBlaXRoZXIgb2Ygd2hpY2ggY2FuICogZHJvcCB0aGUgcnEgbG9jay4KKwkJICoKKwkJICogQWxzbywgZHVyaW5nIGVhcmx5IGJvb3QgdGhlIGlkbGUgdGhyZWFkIGlzIGluIHRoZSBmYWlyIGNsYXNzLAorCQkgKiBmb3Igb2J2aW91cyByZWFzb25zIGl0cyBhIGJhZCBpZGVhIHRvIHNjaGVkdWxlIGJhY2sgdG8gaXQuCisJCSAqLworCQlpZiAodW5saWtlbHkoIXNlLT5vbl9ycSB8fCBjdXJyID09IHJxLT5pZGxlKSkKKwkJCXJldHVybjsKKwkJaWYgKHNjaGVkX2ZlYXQoTEFTVF9CVUREWSkgJiYgc2NhbGUgJiYgZW50aXR5X2lzX3Rhc2soc2UpKQorCQkJc2V0X2xhc3RfYnVkZHkoc2UpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfZmFpcihzdHJ1Y3QgcnEgKnJxKQpAQCAtMTY1NCwxNiArMTY4NCw2IEBACiAKIAlkbyB7CiAJCXNlID0gcGlja19uZXh0X2VudGl0eShjZnNfcnEpOwotCQkvKgotCQkgKiBJZiBzZSB3YXMgYSBidWRkeSwgY2xlYXIgaXQgc28gdGhhdCBpdCB3aWxsIGhhdmUgdG8gZWFybgotCQkgKiB0aGUgZmF2b3VyIGFnYWluLgotCQkgKgotCQkgKiBJZiBzZSB3YXMgbm90IGEgYnVkZHksIGNsZWFyIHRoZSBidWRkaWVzIGJlY2F1c2UgbmVpdGhlcgotCQkgKiB3YXMgZWxlZ2libGUgdG8gcnVuLCBsZXQgdGhlbSBlYXJuIGl0IGFnYWluLgotCQkgKgotCQkgKiBJT1cuIHVuY29uZGl0aW9uYWxseSBjbGVhciBidWRkaWVzLgotCQkgKi8KLQkJX19jbGVhcl9idWRkaWVzKGNmc19ycSwgTlVMTCk7CiAJCXNldF9uZXh0X2VudGl0eShjZnNfcnEsIHNlKTsKIAkJY2ZzX3JxID0gZ3JvdXBfY2ZzX3JxKHNlKTsKIAl9IHdoaWxlIChjZnNfcnEpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDI1NTQ3NWQuLmNlMTc3NjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTExMTAsNiArMTExMCw4IEBACiAJZXJyID0gc2Vzc2lvbjsKIG91dDoKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAoZXJyID4gMCkKKwkJcHJvY19zaWRfY29ubmVjdG9yKGdyb3VwX2xlYWRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU0NiwyNCArMTU0OCwzNyBAQAogCQkJaWYgKGFyZzQgfCBhcmc1KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3dpdGNoIChhcmcyKSB7Ci0JCQljYXNlIDA6CisJCQljYXNlIFBSX01DRV9LSUxMX0NMRUFSOgogCQkJCWlmIChhcmczICE9IDApCiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9NQ0VfUFJPQ0VTUzsKIAkJCQlicmVhazsKLQkJCWNhc2UgMToKKwkJCWNhc2UgUFJfTUNFX0tJTExfU0VUOgogCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9QUk9DRVNTOwotCQkJCWlmIChhcmczICE9IDApCisJCQkJaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfRUFSTFkpCiAJCQkJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01DRV9FQVJMWTsKLQkJCQllbHNlCisJCQkJZWxzZSBpZiAoYXJnMyA9PSBQUl9NQ0VfS0lMTF9MQVRFKQogCQkJCQljdXJyZW50LT5mbGFncyAmPSB+UEZfTUNFX0VBUkxZOworCQkJCWVsc2UgaWYgKGFyZzMgPT0gUFJfTUNFX0tJTExfREVGQVVMVCkKKwkJCQkJY3VycmVudC0+ZmxhZ3MgJj0KKwkJCQkJCX4oUEZfTUNFX0VBUkxZfFBGX01DRV9QUk9DRVNTKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWVycm9yID0gMDsKIAkJCWJyZWFrOwotCisJCWNhc2UgUFJfTUNFX0tJTExfR0VUOgorCQkJaWYgKGFyZzIgfCBhcmczIHwgYXJnNCB8IGFyZzUpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NQ0VfUFJPQ0VTUykKKwkJCQllcnJvciA9IChjdXJyZW50LT5mbGFncyAmIFBGX01DRV9FQVJMWSkgPworCQkJCQlQUl9NQ0VfS0lMTF9FQVJMWSA6IFBSX01DRV9LSUxMX0xBVEU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBQUl9NQ0VfS0lMTF9ERUZBVUxUOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcnJvciA9IC1FSU5WQUw7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwppbmRleCBiMzg0MjNjLi5iNmU3YWFlYSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCWlmICghdGFibGUtPmN0bF9uYW1lICYmIHRhYmxlLT5zdHJhdGVneSkKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJTdHJhdGVneSB3aXRob3V0IGN0bF9uYW1lIik7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCQkJaWYgKHRhYmxlLT5wcm9jbmFtZSAmJiAhdGFibGUtPnByb2NfaGFuZGxlcikKIAkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBwcm9jX2hhbmRsZXIiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggMDkxMTMzNC4uNWUxOGM2YSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zOTQsMTUgKzM5NCwxMSBAQAogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7CiAKLQltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNzLCAmY2xvY2tzb3VyY2VfbGlzdCwgbGlzdCkKIAkJaWYgKGNzLT5yZXN1bWUpCiAJCQljcy0+cmVzdW1lKCk7CiAKIAljbG9ja3NvdXJjZV9yZXN1bWVfd2F0Y2hkb2coKTsKLQotCW11dGV4X3VubG9jaygmY2xvY2tzb3VyY2VfbXV0ZXgpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyBiL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYwppbmRleCBlMGY1OWEyLi44OWFlZDU5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCkBAIC0yMzEsNiArMjMxLDEzIEBACiAJaWYgKCFpbmlkbGUgJiYgIXRzLT5pbmlkbGUpCiAJCWdvdG8gZW5kOwogCisJLyoKKwkgKiBTZXQgdHMtPmluaWRsZSB1bmNvbmRpdGlvbmFsbHkuIEV2ZW4gaWYgdGhlIHN5c3RlbSBkaWQgbm90CisJICogc3dpdGNoIHRvIE5PSFogbW9kZSB0aGUgY3B1IGZyZXF1ZW5jeSBnb3Zlcm5lcnMgcmVseSBvbiB0aGUKKwkgKiB1cGRhdGUgb2YgdGhlIGlkbGUgdGltZSBhY2NvdW50aW5nIGluIHRpY2tfbm9oel9zdGFydF9pZGxlKCkuCisJICovCisJdHMtPmluaWRsZSA9IDE7CisKIAlub3cgPSB0aWNrX25vaHpfc3RhcnRfaWRsZSh0cyk7CiAKIAkvKgpAQCAtMjQ4LDggKzI1NSw2IEBACiAJaWYgKHVubGlrZWx5KHRzLT5ub2h6X21vZGUgPT0gTk9IWl9NT0RFX0lOQUNUSVZFKSkKIAkJZ290byBlbmQ7CiAKLQl0cy0+aW5pZGxlID0gMTsKLQogCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJZ290byBlbmQ7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IGZiMGY0NmYuLmMzYTRlMjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggZmRkZDY5ZC4uMWI1YjdhYSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIHRpbWVyX2xpc3Rfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbWVyX2xpc3RfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRpbWVyX2xpc3RfZm9wcyA9IHsKIAkub3BlbgkJPSB0aW1lcl9saXN0X29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jIGIva2VybmVsL3RpbWUvdGltZXJfc3RhdHMuYwppbmRleCA0Y2RlOGI5Li5lZTU2ODFmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aW1lcl9zdGF0cy5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX3N0YXRzLmMKQEAgLTM5NSw3ICszOTUsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB0c3RhdHNfc2hvdywgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzdGF0c19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHN0YXRzX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHN0YXRzX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLndyaXRlCQk9IHRzdGF0c193cml0ZSwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKaW5kZXggM2ViMTU5Yy4uZDlkNjIwNiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMKQEAgLTg1Niw2ICs4NTYsMzcgQEAKIH0KIAogLyoqCisgKiBibGtfYWRkX3RyYWNlX3JxX3JlbWFwIC0gQWRkIGEgdHJhY2UgZm9yIGEgcmVxdWVzdC1yZW1hcCBvcGVyYXRpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQHJxOgkJdGhlIHNvdXJjZSByZXF1ZXN0CisgKiBAZGV2Ogl0YXJnZXQgZGV2aWNlCisgKiBAZnJvbToJc291cmNlIHNlY3RvcgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIERldmljZSBtYXBwZXIgcmVtYXBzIHJlcXVlc3QgdG8gb3RoZXIgZGV2aWNlcy4KKyAqICAgICBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCisgKgorICoqLworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9yZW1hcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldiwKKwkJCQkgICBzZWN0b3JfdCBmcm9tKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgcjsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJci5kZXZpY2VfZnJvbSA9IGNwdV90b19iZTMyKGRldik7CisJci5kZXZpY2VfdG8gICA9IGNwdV90b19iZTMyKGRpc2tfZGV2dChycS0+cnFfZGlzaykpOworCXIuc2VjdG9yX2Zyb20gPSBjcHVfdG9fYmU2NChmcm9tKTsKKworCV9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksCisJCQlycV9kYXRhX2RpcihycSksIEJMS19UQV9SRU1BUCwgISFycS0+ZXJyb3JzLAorCQkJc2l6ZW9mKHIpLCAmcik7Cit9CisKKy8qKgogICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCiAgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKICAqIEBycToJCWlvIHJlcXVlc3QKQEAgLTkyMiwxMCArOTUzLDEzIEBACiAJV0FSTl9PTihyZXQpOwogCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOwogCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwKTsKKwlXQVJOX09OKHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZW1hcChibGtfYWRkX3RyYWNlX3JxX3JlbWFwKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOwogCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCk7CiAJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOwpAQCAtMTY1Nyw2ICsxNjkxLDExIEBACiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmYmxrX3RyYWNlX2F0dHJfZ3JvdXApOwogfQogCit2b2lkIGJsa190cmFjZV9yZW1vdmVfc3lzZnMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmYmxrX3RyYWNlX2F0dHJfZ3JvdXApOworfQorCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi8KIAogI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDSU5HCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggYTE0MjU3OS4uNmRjNGU1ZSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMjI1LDcgKzIyNSwxMSBAQAogCWlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPT0gZnRyYWNlX3N0dWIpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCiAJZnVuYyA9IGZ0cmFjZV90cmFjZV9mdW5jdGlvbjsKKyNlbHNlCisJZnVuYyA9IF9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOworI2VuZGlmCiAKIAlpZiAoZnRyYWNlX3BpZF90cmFjZSkgewogCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKQEAgLTczNiw3ICs3NDAsNyBAQAogIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9wcm9maWxlX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0xMDc0LDE0ICsxMDc4LDkgQEAKIAkJZmFpbGVkID0gX19mdHJhY2VfcmVwbGFjZV9jb2RlKHJlYywgZW5hYmxlKTsKIAkJaWYgKGZhaWxlZCkgewogCQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwotCQkJaWYgKChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHx8Ci0JCQkgICAgIWNvcmVfa2VybmVsX3RleHQocmVjLT5pcCkpIHsKLQkJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKLQkJCQl9IGVsc2UgewotCQkJCWZ0cmFjZV9idWcoZmFpbGVkLCByZWMtPmlwKTsKLQkJCQkJLyogU3RvcCBwcm9jZXNzaW5nICovCi0JCQkJCXJldHVybjsKLQkJCQl9CisJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7CisJCQkvKiBTdG9wIHByb2Nlc3NpbmcgKi8KKwkJCXJldHVybjsKIAkJfQogCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwogfQpAQCAtMTYyMSw4ICsxNjIwLDEwIEBACiAJCWlmICghcmV0KSB7CiAJCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJCQltLT5wcml2YXRlID0gaXRlcjsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CisJCQl0cmFjZV9wYXJzZXJfcHV0KCZpdGVyLT5wYXJzZXIpOwogCQkJa2ZyZWUoaXRlcik7CisJCX0KIAl9IGVsc2UKIAkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaXRlcjsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKQEAgLTIyMDIsNyArMjIwMyw3IEBACiAJc3RydWN0IHRyYWNlX3BhcnNlciAqcGFyc2VyOwogCXNzaXplX3QgcmV0LCByZWFkOwogCi0JaWYgKCFjbnQgfHwgY250IDwgMCkKKwlpZiAoIWNudCkKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CkBAIC0yMjE2LDIwICsyMjE3LDIwIEBACiAJcGFyc2VyID0gJml0ZXItPnBhcnNlcjsKIAlyZWFkID0gdHJhY2VfZ2V0X3VzZXIocGFyc2VyLCB1YnVmLCBjbnQsIHBwb3MpOwogCi0JaWYgKHRyYWNlX3BhcnNlcl9sb2FkZWQocGFyc2VyKSAmJgorCWlmIChyZWFkID49IDAgJiYgdHJhY2VfcGFyc2VyX2xvYWRlZChwYXJzZXIpICYmCiAJICAgICF0cmFjZV9wYXJzZXJfY29udChwYXJzZXIpKSB7CiAJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KHBhcnNlci0+YnVmZmVyLAogCQkJCQkgICBwYXJzZXItPmlkeCwgZW5hYmxlKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfdW5sb2NrOwogCiAJCXRyYWNlX3BhcnNlcl9jbGVhcihwYXJzZXIpOwogCX0KIAogCXJldCA9IHJlYWQ7Ci0KK291dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7Ci1vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNTUyLDggKzI1NTMsNyBAQAogCQkgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHRyYWNlX3BhcnNlciBwYXJzZXI7Ci0Jc2l6ZV90IHJlYWQgPSAwOwotCXNzaXplX3QgcmV0OworCXNzaXplX3QgcmVhZCwgcmV0OwogCiAJaWYgKCFjbnQgfHwgY250IDwgMCkKIAkJcmV0dXJuIDA7CkBAIC0yNTYyLDI5ICsyNTYyLDMxIEBACiAKIAlpZiAoZnRyYWNlX2dyYXBoX2NvdW50ID49IEZUUkFDRV9HUkFQSF9NQVhfRlVOQ1MpIHsKIAkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCWlmICh0cmFjZV9wYXJzZXJfZ2V0X2luaXQoJnBhcnNlciwgRlRSQUNFX0JVRkZfTUFYKSkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJlYWQgPSB0cmFjZV9nZXRfdXNlcigmcGFyc2VyLCB1YnVmLCBjbnQsIHBwb3MpOwogCi0JaWYgKHRyYWNlX3BhcnNlcl9sb2FkZWQoKCZwYXJzZXIpKSkgeworCWlmIChyZWFkID49IDAgJiYgdHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CiAJCXBhcnNlci5idWZmZXJbcGFyc2VyLmlkeF0gPSAwOwogCiAJCS8qIHdlIGFsbG93IG9ubHkgb25lIGV4cHJlc3Npb24gYXQgYSB0aW1lICovCiAJCXJldCA9IGZ0cmFjZV9zZXRfZnVuYyhmdHJhY2VfZ3JhcGhfZnVuY3MsICZmdHJhY2VfZ3JhcGhfY291bnQsCiAJCQkJCXBhcnNlci5idWZmZXIpOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlOwogCX0KIAogCXJldCA9IHJlYWQ7Ci0gb3V0OgorCitvdXRfZnJlZToKIAl0cmFjZV9wYXJzZXJfcHV0KCZwYXJzZXIpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmdyYXBoX2xvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTI2NTUsMTkgKzI2NTcsMTcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19NT0RVTEVTCi12b2lkIGZ0cmFjZV9yZWxlYXNlKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit2b2lkIGZ0cmFjZV9yZWxlYXNlX21vZChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwotCXVuc2lnbmVkIGxvbmcgcyA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZSA9ICh1bnNpZ25lZCBsb25nKWVuZDsKIAotCWlmIChmdHJhY2VfZGlzYWJsZWQgfHwgIXN0YXJ0IHx8IHN0YXJ0ID09IGVuZCkKKwlpZiAoZnRyYWNlX2Rpc2FibGVkKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7Ci0JCWlmICgocmVjLT5pcCA+PSBzKSAmJiAocmVjLT5pcCA8IGUpKSB7CisJCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUocmVjLT5pcCwgbW9kKSkgewogCQkJLyoKIAkJCSAqIHJlYy0+aXAgaXMgY2hhbmdlZCBpbiBmdHJhY2VfZnJlZV9yZWMoKQogCQkJICogSXQgc2hvdWxkIG5vdCBiZXR3ZWVuIHMgYW5kIGUgaWYgcmVjb3JkIHdhcyBmcmVlZC4KQEAgLTI2OTksOSArMjY5OSw3IEBACiAJCQkJICAgbW9kLT5udW1fZnRyYWNlX2NhbGxzaXRlcyk7CiAJCWJyZWFrOwogCWNhc2UgTU9EVUxFX1NUQVRFX0dPSU5HOgotCQlmdHJhY2VfcmVsZWFzZShtb2QtPmZ0cmFjZV9jYWxsc2l0ZXMsCi0JCQkgICAgICAgbW9kLT5mdHJhY2VfY2FsbHNpdGVzICsKLQkJCSAgICAgICBtb2QtPm51bV9mdHJhY2VfY2FsbHNpdGVzKTsKKwkJZnRyYWNlX3JlbGVhc2VfbW9kKG1vZCk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCmluZGV4IDgxYjE2NDUuLmE5MWRhNjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2Uva21lbXRyYWNlLmMKQEAgLTUwMSw3ICs1MDEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIXJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpKSB7CisJaWYgKHJlZ2lzdGVyX3RyYWNlcigma21lbV90cmFjZXIpICE9IDApIHsKIAkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIHRoZSBrbWVtIHRyYWNlclxuIik7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggZDRmZjAxOS4uNWRkMDE3ZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTQ4Myw3ICs0ODMsNyBAQAogLyogVXAgdGhpcyBpZiB5b3Ugd2FudCB0byB0ZXN0IHRoZSBUSU1FX0VYVEVOVFMgYW5kIG5vcm1hbGl6YXRpb24gKi8KICNkZWZpbmUgREVCVUdfU0hJRlQgMAogCi1zdGF0aWMgaW5saW5lIHU2NCByYl90aW1lX3N0YW1wKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQorc3RhdGljIGlubGluZSB1NjQgcmJfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcikKIHsKIAkvKiBzaGlmdCB0byBkZWJ1Zy90ZXN0IG5vcm1hbGl6YXRpb24gYW5kIFRJTUVfRVhURU5UUyAqLwogCXJldHVybiBidWZmZXItPmNsb2NrKCkgPDwgREVCVUdfU0hJRlQ7CkBAIC00OTQsNyArNDk0LDcgQEAKIAl1NjQgdGltZTsKIAogCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7Ci0JdGltZSA9IHJiX3RpbWVfc3RhbXAoYnVmZmVyLCBjcHUpOworCXRpbWUgPSByYl90aW1lX3N0YW1wKGJ1ZmZlcik7CiAJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7CiAKIAlyZXR1cm4gdGltZTsKQEAgLTU5OSw3ICs1OTksNyBAQAogfQogCiAvKgotICogcmJfaXNfaGVhZF9wYWdlIC0gdGVzdCBpZiB0aGUgZ2l2ZSBwYWdlIGlzIHRoZSBoZWFkIHBhZ2UKKyAqIHJiX2lzX2hlYWRfcGFnZSAtIHRlc3QgaWYgdGhlIGdpdmVuIHBhZ2UgaXMgdGhlIGhlYWQgcGFnZQogICoKICAqIEJlY2F1c2UgdGhlIHJlYWRlciBtYXkgbW92ZSB0aGUgaGVhZF9wYWdlIHBvaW50ZXIsIHdlIGNhbgogICogbm90IHRydXN0IHdoYXQgdGhlIGhlYWQgcGFnZSBpcyAoaXQgbWF5IGJlIHBvaW50aW5nIHRvCkBAIC0xMTkzLDYgKzExOTMsNyBAQAogCWF0b21pY19pbmMoJmNwdV9idWZmZXItPnJlY29yZF9kaXNhYmxlZCk7CiAJc3luY2hyb25pemVfc2NoZWQoKTsKIAorCXNwaW5fbG9ja19pcnEoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrKTsKIAlyYl9oZWFkX3BhZ2VfZGVhY3RpdmF0ZShjcHVfYnVmZmVyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CkBAIC0xMjA3LDYgKzEyMDgsNyBAQAogCQlyZXR1cm47CiAKIAlyYl9yZXNldF9jcHUoY3B1X2J1ZmZlcik7CisJc3Bpbl91bmxvY2tfaXJxKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jayk7CiAKIAlyYl9jaGVja19wYWdlcyhjcHVfYnVmZmVyKTsKIApAQCAtMTg2OCw3ICsxODcwLDcgQEAKIAkJICogTmVzdGVkIGNvbW1pdHMgYWx3YXlzIGhhdmUgemVybyBkZWx0YXMsIHNvCiAJCSAqIGp1c3QgcmVyZWFkIHRoZSB0aW1lIHN0YW1wCiAJCSAqLwotCQkqdHMgPSByYl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKKwkJKnRzID0gcmJfdGltZV9zdGFtcChidWZmZXIpOwogCQluZXh0X3BhZ2UtPnBhZ2UtPnRpbWVfc3RhbXAgPSAqdHM7CiAJfQogCkBAIC0yMTExLDcgKzIxMTMsNyBAQAogCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsICsrbnJfbG9vcHMgPiAxMDAwKSkKIAkJZ290byBvdXRfZmFpbDsKIAotCXRzID0gcmJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CisJdHMgPSByYl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmJ1ZmZlcik7CiAKIAkvKgogCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCkBAIC0yNjgxLDcgKzI2ODMsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW50cmllcyk7CiAKIC8qKgotICogcmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUgLSBnZXQgdGhlIG51bWJlciBvZiBvdmVycnVucyBpbiBidWZmZXIKKyAqIHJpbmdfYnVmZmVyX292ZXJydW5zIC0gZ2V0IHRoZSBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gYnVmZmVyCiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIKICAqCiAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2Ygb3ZlcnJ1bnMgaW4gdGhlIHJpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDQxMWFmMzcuLmIyMGQzZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAogCS8qIHJlYWQgdGhlIG5vbi1zcGFjZSBpbnB1dCAqLwogCXdoaWxlIChjbnQgJiYgIWlzc3BhY2UoY2gpKSB7Ci0JCWlmIChwYXJzZXItPmlkeCA8IHBhcnNlci0+c2l6ZSkKKwkJaWYgKHBhcnNlci0+aWR4IDwgcGFyc2VyLT5zaXplIC0gMSkKIAkJCXBhcnNlci0+YnVmZmVyW3BhcnNlci0+aWR4KytdID0gY2g7CiAJCWVsc2UgewogCQkJcmV0ID0gLUVJTlZBTDsKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAKIGludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCXJldHVybiB0cmFjZV9hcnJheV9wcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CisJcmV0dXJuIHRyYWNlX2FycmF5X3ZwcmludGsoJmdsb2JhbF90cmFjZSwgaXAsIGZtdCwgYXJncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKIApAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNTgyLDcgKzI1ODIsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JZmlscC0+Zl9wb3MgKz0gY250OworCSpwcG9zICs9IGNudDsKIAogCXJldHVybiBjbnQ7CiB9CkBAIC0yNzY0LDcgKzI3NjQsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlmaWxwLT5mX3BvcyArPSByZXQ7CisJKnBwb3MgKz0gcmV0OwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMyOTksNyArMzI5OSw3IEBACiAJCX0KIAl9CiAKLQlmaWxwLT5mX3BvcyArPSBjbnQ7CisJKnBwb3MgKz0gY250OwogCiAJLyogSWYgY2hlY2sgcGFnZXMgZmFpbGVkLCByZXR1cm4gRU5PTUVNICovCiAJaWYgKHRyYWNpbmdfZGlzYWJsZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKaW5kZXggN2E3YTlmZC4uNGExOTRmMCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwpAQCAtMzQsNiArMzQsNyBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBicmFuY2hfdHJhY2VyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2JyYW5jaCAqZW50cnk7CisJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY3B1LCBwYzsKIAljb25zdCBjaGFyICpwOwpAQCAtNTQsNyArNTUsOCBAQAogCQlnb3RvIG91dDsKIAogCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQlJBTkNILAorCWJ1ZmZlciA9IHRyLT5idWZmZXI7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQlJBTkNILAogCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwpAQCAtNzQsOCArNzYsOCBAQAogCWVudHJ5LT5saW5lID0gZi0+bGluZTsKIAllbnRyeS0+Y29ycmVjdCA9IHZhbCA9PSBleHBlY3Q7CiAKLQlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCB0ci0+YnVmZmVyLCBldmVudCkpCi0JCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIGJ1ZmZlciwgZXZlbnQpKQorCQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJ1ZmZlciwgZXZlbnQpOwogCiAgb3V0OgogCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcHJvZmlsZS5jCmluZGV4IGRkNDRiODcuLjhkNWMxNzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYwpAQCAtMzEsNyArMzEsNyBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmZXZlbnQtPnByb2ZpbGVfY291bnQpKQogCQlyZXR1cm4gMDsKIAotCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCsrKSB7CisJaWYgKCF0b3RhbF9wcm9maWxlX2NvdW50KSB7CiAJCWJ1ZiA9IChjaGFyICopYWxsb2NfcGVyY3B1KHByb2ZpbGVfYnVmX3QpOwogCQlpZiAoIWJ1ZikKIAkJCWdvdG8gZmFpbF9idWY7CkBAIC00NiwxNCArNDYsMTkgQEAKIAl9CiAKIAlyZXQgPSBldmVudC0+cHJvZmlsZV9lbmFibGUoKTsKLQlpZiAoIXJldCkKKwlpZiAoIXJldCkgeworCQl0b3RhbF9wcm9maWxlX2NvdW50Kys7CiAJCXJldHVybiAwOworCX0KIAotCWtmcmVlKHRyYWNlX3Byb2ZpbGVfYnVmX25taSk7CiBmYWlsX2J1Zl9ubWk6Ci0Ja2ZyZWUodHJhY2VfcHJvZmlsZV9idWYpOworCWlmICghdG90YWxfcHJvZmlsZV9jb3VudCkgeworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zl9ubWkpOworCQlmcmVlX3BlcmNwdSh0cmFjZV9wcm9maWxlX2J1Zik7CisJCXRyYWNlX3Byb2ZpbGVfYnVmX25taSA9IE5VTEw7CisJCXRyYWNlX3Byb2ZpbGVfYnVmID0gTlVMTDsKKwl9CiBmYWlsX2J1ZjoKLQl0b3RhbF9wcm9maWxlX2NvdW50LS07CiAJYXRvbWljX2RlYygmZXZlbnQtPnByb2ZpbGVfY291bnQpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCA2ZjAzYzhhLi5kMTI4ZjY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCkBAIC0yMzIsMTAgKzIzMiw5IEBACiAJCSAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyIHBhcnNlcjsKLQlzaXplX3QgcmVhZCA9IDA7Ci0Jc3NpemVfdCByZXQ7CisJc3NpemVfdCByZWFkLCByZXQ7CiAKLQlpZiAoIWNudCB8fCBjbnQgPCAwKQorCWlmICghY250KQogCQlyZXR1cm4gMDsKIAogCXJldCA9IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMoKTsKQEAgLTI0Nyw3ICsyNDYsNyBAQAogCiAJcmVhZCA9IHRyYWNlX2dldF91c2VyKCZwYXJzZXIsIHVidWYsIGNudCwgcHBvcyk7CiAKLQlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZCgoJnBhcnNlcikpKSB7CisJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKCgmcGFyc2VyKSkpIHsKIAkJaW50IHNldCA9IDE7CiAKIAkJaWYgKCpwYXJzZXIuYnVmZmVyID09ICchJykKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX2ZpbHRlci5jCmluZGV4IDIzMjQ1NzguLjk4YTZjYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYwpAQCAtOTMzLDggKzkzMyw5IEBACiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnBzLT5wb3N0Zml4KSkgewogCQllbHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZwcy0+cG9zdGZpeCwgc3RydWN0IHBvc3RmaXhfZWx0LCBsaXN0KTsKLQkJa2ZyZWUoZWx0LT5vcGVyYW5kKTsKIAkJbGlzdF9kZWwoJmVsdC0+bGlzdCk7CisJCWtmcmVlKGVsdC0+b3BlcmFuZCk7CisJCWtmcmVlKGVsdCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfaHdfYnJhbmNoZXMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCmluZGV4IDIzYjYzODUuLjY5NTQzYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jCkBAIC0xNjUsNiArMTY1LDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAmZXZlbnRfaHdfYnJhbmNoOwogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBod19icmFuY2hfdHJhY2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZjsKIAlzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5ICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIGlycTE7CiAJaW50IGNwdTsKQEAgLTE4MCw3ICsxODEsOCBAQAogCWlmIChhdG9taWNfaW5jX3JldHVybigmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpICE9IDEpCiAJCWdvdG8gb3V0OwogCi0JZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9IV19CUkFOQ0hFUywKKwlidWYgPSB0ci0+YnVmZmVyOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWYsIFRSQUNFX0hXX0JSQU5DSEVTLAogCQkJCQkgIHNpemVvZigqZW50cnkpLCAwLCAwKTsKIAlpZiAoIWV2ZW50KQogCQlnb3RvIG91dDsKQEAgLTE4OSw4ICsxOTEsOCBAQAogCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX0hXX0JSQU5DSEVTOwogCWVudHJ5LT5mcm9tID0gZnJvbTsKIAllbnRyeS0+dG8gICA9IHRvOwotCWlmICghZmlsdGVyX2NoZWNrX2Rpc2NhcmQoY2FsbCwgZW50cnksIHRyLT5idWZmZXIsIGV2ZW50KSkKLQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKwlpZiAoIWZpbHRlcl9jaGVja19kaXNjYXJkKGNhbGwsIGVudHJ5LCBidWYsIGV2ZW50KSkKKwkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYnVmLCBldmVudCwgMCwgMCk7CiAKICBvdXQ6CiAJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCmluZGV4IGY1NzJmNDQuLmI2YzEyYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTY5LDYgKzY5LDkgQEAKICAqIEBzOiB0cmFjZSBzZXF1ZW5jZSBkZXNjcmlwdG9yCiAgKiBAZm10OiBwcmludGYgZm9ybWF0IHN0cmluZwogICoKKyAqIEl0IHJldHVybnMgMCBpZiB0aGUgdHJhY2Ugb3ZlcnNpemVzIHRoZSBidWZmZXIncyBmcmVlCisgKiBzcGFjZSwgMSBvdGhlcndpc2UuCisgKgogICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KICAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKICAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCkBAIC05NSw3ICs5OCw3IEBACiAKIAlzLT5sZW4gKz0gcmV0OwogCi0JcmV0dXJuIGxlbjsKKwlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3NlcV9wcmludGYpOwogCkBAIC00ODYsMTYgKzQ4OSwxOCBAQAogCQkJCWhhcmRpcnEgPyAnaCcgOiBzb2Z0aXJxID8gJ3MnIDogJy4nKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoZW50cnktPmxvY2tfZGVwdGggPCAwKQotCQlyZXQgPSB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXgiLCBlbnRyeS0+cHJlZW1wdF9jb3VudCk7CiAJZWxzZQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlZCIsIGVudHJ5LT5sb2NrX2RlcHRoKTsKKwkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJy4nKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIAotCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOwotCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCWlmIChlbnRyeS0+bG9ja19kZXB0aCA8IDApCisJCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnLicpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVkIiwgZW50cnktPmxvY2tfZGVwdGgpOwogfQogCiBzdGF0aWMgaW50CkBAIC04ODMsNyArODg4LDcgQEAKIAl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKIAogCWlmICghUykKLQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CiAJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CiAJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIlZCAlZCAlYyAlZCAlZCAlZCAlY1xuIiwKIAkJCSAgICAgIGZpZWxkLT5wcmV2X3BpZCwKQEAgLTkxOCw3ICs5MjMsNyBAQAogCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOwogCiAJaWYgKCFTKQotCQl0YXNrX3N0YXRlX2NoYXIoZmllbGQtPnByZXZfc3RhdGUpOworCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKIAlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKIAogCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCA5ZmJjZTZjLi41MjdlMTdlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iCiAJCQkgICAgICAgIlx0ZmllbGQ6JXMgJXM7XHRvZmZzZXQ6JXp1O1x0c2l6ZTolenU7XG4iLAogCQkJICAgICAgIFNZU0NBTExfRklFTEQoaW50LCBuciksCi0JCQkgICAgICAgU1lTQ0FMTF9GSUVMRCh1bnNpZ25lZCBsb25nLCByZXQpKTsKKwkJCSAgICAgICBTWVNDQUxMX0ZJRUxEKGxvbmcsIHJldCkpOwogCWlmICghcmV0KQogCQlyZXR1cm4gMDsKIApAQCAtMjEyLDcgKzIxMiw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHRyYWNlX2RlZmluZV9maWVsZChjYWxsLCBTWVNDQUxMX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldCksIDAsCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGNhbGwsIFNZU0NBTExfRklFTEQobG9uZywgcmV0KSwgMCwKIAkJCQkgRklMVEVSX09USEVSKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvdXNlci5jIGIva2VybmVsL3VzZXIuYwppbmRleCAyYzAwMGU3Li40NmQwMTY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdXNlci5jCisrKyBiL2tlcm5lbC91c2VyLmMKQEAgLTMzMCw5ICszMzAsOSBAQAogICovCiBzdGF0aWMgdm9pZCBmcmVlX3VzZXIoc3RydWN0IHVzZXJfc3RydWN0ICp1cCwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1aWRoYXNoX2xvY2ssIGZsYWdzKTsKIAlJTklUX0RFTEFZRURfV09SSygmdXAtPndvcmssIGNsZWFudXBfdXNlcl9zdHJ1Y3QpOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdXAtPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVpZGhhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAjZWxzZQkvKiBDT05GSUdfVVNFUl9TQ0hFRCAmJiBDT05GSUdfU1lTRlMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBhZGRmZTJkLi42N2U1MjZiIDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC02NDAsNiArNjQwLDI0IEBACiBFWFBPUlRfU1lNQk9MKHNjaGVkdWxlX2RlbGF5ZWRfd29yayk7CiAKIC8qKgorICogZmx1c2hfZGVsYXllZF93b3JrIC0gYmxvY2sgdW50aWwgYSBkd29ya19zdHJ1Y3QncyBjYWxsYmFjayBoYXMgdGVybWluYXRlZAorICogQGR3b3JrOiB0aGUgZGVsYXllZCB3b3JrIHdoaWNoIGlzIHRvIGJlIGZsdXNoZWQKKyAqCisgKiBBbnkgdGltZW91dCBpcyBjYW5jZWxsZWQsIGFuZCBhbnkgcGVuZGluZyB3b3JrIGlzIHJ1biBpbW1lZGlhdGVseS4KKyAqLwordm9pZCBmbHVzaF9kZWxheWVkX3dvcmsoc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmspCit7CisJaWYgKGRlbF90aW1lcl9zeW5jKCZkd29yay0+dGltZXIpKSB7CisJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxOworCQljd3EgPSB3cV9wZXJfY3B1KGtldmVudGRfd3EsIGdldF9jcHUoKSk7CisJCV9fcXVldWVfd29yayhjd3EsICZkd29yay0+d29yayk7CisJCXB1dF9jcHUoKTsKKwl9CisJZmx1c2hfd29yaygmZHdvcmstPndvcmspOworfQorRVhQT1JUX1NZTUJPTChmbHVzaF9kZWxheWVkX3dvcmspOworCisvKioKICAqIHNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbiAtIHF1ZXVlIHdvcmsgaW4gZ2xvYmFsIHdvcmtxdWV1ZSBvbiBDUFUgYWZ0ZXIgZGVsYXkKICAqIEBjcHU6IGNwdSB0byB1c2UKICAqIEBkd29yazogam9iIHRvIGJlIGRvbmUKQEAgLTY2Nyw2ICs2ODUsNyBAQAogaW50IHNjaGVkdWxlX29uX2VhY2hfY3B1KHdvcmtfZnVuY190IGZ1bmMpCiB7CiAJaW50IGNwdTsKKwlpbnQgb3JpZyA9IC0xOwogCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29ya3M7CiAKIAl3b3JrcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgd29ya19zdHJ1Y3QpOwpAQCAtNjc0LDE0ICs2OTMsMjggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlnZXRfb25saW5lX2NwdXMoKTsKKworCS8qCisJICogV2hlbiBydW5uaW5nIGluIGtldmVudGQgZG9uJ3Qgc2NoZWR1bGUgYSB3b3JrIGl0ZW0gb24KKwkgKiBpdHNlbGYuICBDYW4ganVzdCBjYWxsIGRpcmVjdGx5IGJlY2F1c2UgdGhlIHdvcmsgcXVldWUgaXMKKwkgKiBhbHJlYWR5IGJvdW5kLiAgVGhpcyBhbHNvIGlzIGZhc3Rlci4KKwkgKi8KKwlpZiAoY3VycmVudF9pc19rZXZlbnRkKCkpCisJCW9yaWcgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrID0gcGVyX2NwdV9wdHIod29ya3MsIGNwdSk7CiAKIAkJSU5JVF9XT1JLKHdvcmssIGZ1bmMpOwotCQlzY2hlZHVsZV93b3JrX29uKGNwdSwgd29yayk7CisJCWlmIChjcHUgIT0gb3JpZykKKwkJCXNjaGVkdWxlX3dvcmtfb24oY3B1LCB3b3JrKTsKIAl9CisJaWYgKG9yaWcgPj0gMCkKKwkJZnVuYyhwZXJfY3B1X3B0cih3b3Jrcywgb3JpZykpOworCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiAJCWZsdXNoX3dvcmsocGVyX2NwdV9wdHIod29ya3MsIGNwdSkpOworCiAJcHV0X29ubGluZV9jcHVzKCk7CiAJZnJlZV9wZXJjcHUod29ya3MpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA4OTExNTU4Li4yMzRjZWIxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtMzQ2LDggKzM0Niw5IEBACiAKIGNvbmZpZyBERUJVR19LTUVNTEVBSwogCWJvb2wgIktlcm5lbCBtZW1vcnkgbGVhayBkZXRlY3RvciIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBFWFBFUklNRU5UQUwgJiYgKFg4NiB8fCBBUk0gfHwgUFBDKSAmJiBcCi0JCSFNRU1PUllfSE9UUExVRworCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEVYUEVSSU1FTlRBTCAmJiAhTUVNT1JZX0hPVFBMVUcgJiYgXAorCQkoWDg2IHx8IEFSTSB8fCBQUEMgfHwgUzM5MCkKKwogCXNlbGVjdCBERUJVR19GUyBpZiBTWVNGUwogCXNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVAogCXNlbGVjdCBLQUxMU1lNUwpAQCAtMzcwLDcgKzM3MSw3IEBACiBjb25maWcgREVCVUdfS01FTUxFQUtfRUFSTFlfTE9HX1NJWkUKIAlpbnQgIk1heGltdW0ga21lbWxlYWsgZWFybHkgbG9nIGVudHJpZXMiCiAJZGVwZW5kcyBvbiBERUJVR19LTUVNTEVBSwotCXJhbmdlIDIwMCAyMDAwCisJcmFuZ2UgMjAwIDQwMDAwCiAJZGVmYXVsdCA0MDAKIAloZWxwCiAJICBLbWVtbGVhayBtdXN0IHRyYWNrIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRpb25zIHRvIGF2b2lkCkBAIC0zOTEsNyArMzkyLDcgQEAKIAogY29uZmlnIERFQlVHX1BSRUVNUFQKIAlib29sICJEZWJ1ZyBwcmVlbXB0aWJsZSBrZXJuZWwiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgUFJFRU1QVCAmJiAoVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCB8fCBQUEM2NCkKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBQUkVFTVBUICYmIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGVuIHRoZSBrZXJuZWwgd2lsbCB1c2UgYSBkZWJ1ZyB2YXJpYW50IG9mIHRoZQpkaWZmIC0tZ2l0IGEvbGliL2RlYnVnb2JqZWN0cy5jIGIvbGliL2RlYnVnb2JqZWN0cy5jCmluZGV4IDI3NTVhM2IuLmVhZTU2ZmQgMTAwNjQ0Ci0tLSBhL2xpYi9kZWJ1Z29iamVjdHMuYworKysgYi9saWIvZGVidWdvYmplY3RzLmMKQEAgLTksNiArOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z29iamVjdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KZGlmZiAtLWdpdCBhL2xpYi9kbWEtZGVidWcuYyBiL2xpYi9kbWEtZGVidWcuYwppbmRleCA1OGE5ZjlmLi5jZTZiN2VhIDEwMDY0NAotLS0gYS9saWIvZG1hLWRlYnVnLmMKKysrIGIvbGliL2RtYS1kZWJ1Zy5jCkBAIC04MTksOSArODE5LDExIEBACiAJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCiAJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBDUFUgYWRkcmVzcyAiCiAJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgotCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0lcF0gW2NwdSBmcmVlIGFkZHJlc3M9JXBdIiwKKwkJCSAgICJbY3B1IGFsbG9jIGFkZHJlc3M9MHglMDE2bGx4XSAiCisJCQkgICAiW2NwdSBmcmVlIGFkZHJlc3M9MHglMDE2bGx4XSIsCiAJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCi0JCQkgICAodm9pZCAqKWVudHJ5LT5wYWRkciwgKHZvaWQgKilyZWYtPnBhZGRyKTsKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpZW50cnktPnBhZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZWYtPnBhZGRyKTsKIAl9CiAKIAlpZiAocmVmLT5zZ19jYWxsX2VudHMgJiYgcmVmLT50eXBlID09IGRtYV9kZWJ1Z19zZyAmJgpkaWZmIC0tZ2l0IGEvbGliL2ZhdWx0LWluamVjdC5jIGIvbGliL2ZhdWx0LWluamVjdC5jCmluZGV4IGY5N2FmNTViLi43ZTY1YWY3IDEwMDY0NAotLS0gYS9saWIvZmF1bHQtaW5qZWN0LmMKKysrIGIvbGliL2ZhdWx0LWluamVjdC5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9saWIvc3RyaW5nLmMgYi9saWIvc3RyaW5nLmMKaW5kZXggYjE5Yjg3YS4uZTk2NDIxYSAxMDA2NDQKLS0tIGEvbGliL3N0cmluZy5jCisrKyBiL2xpYi9zdHJpbmcuYwpAQCAtMjQ2LDEzICsyNDYsMTcgQEAKICN1bmRlZiBzdHJjbXAKIGludCBzdHJjbXAoY29uc3QgY2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KQogewotCXNpZ25lZCBjaGFyIF9fcmVzOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOwogCiAJd2hpbGUgKDEpIHsKLQkJaWYgKChfX3JlcyA9ICpjcyAtICpjdCsrKSAhPSAwIHx8ICEqY3MrKykKKwkJYzEgPSAqY3MrKzsKKwkJYzIgPSAqY3QrKzsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIGMxIDwgYzIgPyAtMSA6IDE7CisJCWlmICghYzEpCiAJCQlicmVhazsKIAl9Ci0JcmV0dXJuIF9fcmVzOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzdHJjbXApOwogI2VuZGlmCkBAIC0yNjYsMTQgKzI3MCwxOCBAQAogICovCiBpbnQgc3RybmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QsIHNpemVfdCBjb3VudCkKIHsKLQlzaWduZWQgY2hhciBfX3JlcyA9IDA7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKIAl3aGlsZSAoY291bnQpIHsKLQkJaWYgKChfX3JlcyA9ICpjcyAtICpjdCsrKSAhPSAwIHx8ICEqY3MrKykKKwkJYzEgPSAqY3MrKzsKKwkJYzIgPSAqY3QrKzsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIGMxIDwgYzIgPyAtMSA6IDE7CisJCWlmICghYzEpCiAJCQlicmVhazsKIAkJY291bnQtLTsKIAl9Ci0JcmV0dXJuIF9fcmVzOworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzdHJuY21wKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBiOTE4MzllLi4zM2JlZDVlIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtMTc3MSw3ICsxNzcxLDcgQEAKIAkJICogYWR2YW5jZSBib3RoIHN0cmluZ3MgdG8gbmV4dCB3aGl0ZSBzcGFjZQogCQkgKi8KIAkJaWYgKCpmbXQgPT0gJyonKSB7Ci0JCQl3aGlsZSAoIWlzc3BhY2UoKmZtdCkgJiYgKmZtdCkKKwkJCXdoaWxlICghaXNzcGFjZSgqZm10KSAmJiAqZm10ICE9ICclJyAmJiAqZm10KQogCQkJCWZtdCsrOwogCQkJd2hpbGUgKCFpc3NwYWNlKCpzdHIpICYmICpzdHIpCiAJCQkJc3RyKys7CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAyNDc3NjA3Li40NGNmNmYwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTY3LDcgKzY3LDcgQEAKIAogY29uZmlnIFNQQVJTRU1FTQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTV9NQU5VQUwKKwlkZXBlbmRzIG9uICghU0VMRUNUX01FTU9SWV9NT0RFTCAmJiBBUkNIX1NQQVJTRU1FTV9FTkFCTEUpIHx8IFNQQVJTRU1FTV9NQU5VQUwKIAogY29uZmlnIEZMQVRNRU0KIAlkZWZfYm9vbCB5CkBAIC0xMjgsMTEgKzEyOCw4IEBACiBjb25maWcgTUVNT1JZX0hPVFBMVUcKIAlib29sICJBbGxvdyBmb3IgbWVtb3J5IGhvdC1hZGQiCiAJZGVwZW5kcyBvbiBTUEFSU0VNRU0gfHwgWDg2XzY0X0FDUElfTlVNQQotCWRlcGVuZHMgb24gSE9UUExVRyAmJiAhKEhJQkVSTkFUSU9OICYmICFTMzkwKSAmJiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwotCWRlcGVuZHMgb24gKElBNjQgfHwgWDg2IHx8IFBQQzY0IHx8IFNVUEVSSCB8fCBTMzkwKQotCi1jb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIEhJQkVSTkFUSU9OICYmICFTMzkwCisJZGVwZW5kcyBvbiBIT1RQTFVHICYmIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiAoSUE2NCB8fCBYODYgfHwgUFBDX0JPT0szU182NCB8fCBTVVBFUkggfHwgUzM5MCkKIAogY29uZmlnIE1FTU9SWV9IT1RQTFVHX1NQQVJTRQogCWRlZl9ib29sIHkKQEAgLTIyNCw3ICsyMjEsOSBAQAogCSAgdGhlIG1hbnkgaW5zdGFuY2VzIGJ5IGEgc2luZ2xlIHJlc2lkZW50IHBhZ2Ugd2l0aCB0aGF0IGNvbnRlbnQsIHNvCiAJICBzYXZpbmcgbWVtb3J5IHVudGlsIG9uZSBvciBhbm90aGVyIGFwcCBuZWVkcyB0byBtb2RpZnkgdGhlIGNvbnRlbnQuCiAJICBSZWNvbW1lbmRlZCBmb3IgdXNlIHdpdGggS1ZNLCBvciB3aXRoIG90aGVyIGR1cGxpY2F0aXZlIGFwcGxpY2F0aW9ucy4KLQkgIFNlZSBEb2N1bWVudGF0aW9uL3ZtL2tzbS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICBTZWUgRG9jdW1lbnRhdGlvbi92bS9rc20udHh0IGZvciBtb3JlIGluZm9ybWF0aW9uOiBLU00gaXMgaW5hY3RpdmUKKwkgIHVudGlsIGEgcHJvZ3JhbSBoYXMgbWFkdmlzZWQgdGhhdCBhbiBhcmVhIGlzIE1BRFZfTUVSR0VBQkxFLCBhbmQKKwkgIHJvb3QgaGFzIHNldCAvc3lzL2tlcm5lbC9tbS9rc20vcnVuIHRvIDEgKGlmIENPTkZJR19TWVNGUyBpcyBzZXQpLgogCiBjb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSCiAgICAgICAgIGludCAiTG93IGFkZHJlc3Mgc3BhY2UgdG8gcHJvdGVjdCBmcm9tIHVzZXIgYWxsb2NhdGlvbiIKQEAgLTI0NCwxMCArMjQzLDEyIEBACiAJICBUaGlzIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIGJvb3QgdXNpbmcgdGhlCiAJICAvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciB0dW5hYmxlLgogCitjb25maWcgQVJDSF9TVVBQT1JUU19NRU1PUllfRkFJTFVSRQorCWJvb2wKIAogY29uZmlnIE1FTU9SWV9GQUlMVVJFCiAJZGVwZW5kcyBvbiBNTVUKLQlkZXBlbmRzIG9uIFg4Nl9NQ0UKKwlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkUKIAlib29sICJFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzIgogCWhlbHAKIAkgIEVuYWJsZXMgY29kZSB0byByZWNvdmVyIGZyb20gc29tZSBtZW1vcnkgZmFpbHVyZXMgb24gc3lzdGVtcwpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCA1MTVmZDc5Li5lYmY4NDkwIDEwMDY0NAotLS0gYS9tbS9NYWtlZmlsZQorKysgYi9tbS9NYWtlZmlsZQpAQCAtNSwxNCArNSwxNCBAQAogbW11LXkJCQk6PSBub21tdS5vCiBtbXUtJChDT05GSUdfTU1VKQk6PSBmcmVtYXAubyBoaWdobWVtLm8gbWFkdmlzZS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcCiAJCQkgICBtbG9jay5vIG1tYXAubyBtcHJvdGVjdC5vIG1yZW1hcC5vIG1zeW5jLm8gcm1hcC5vIFwKLQkJCSAgIHZtYWxsb2MubworCQkJICAgdm1hbGxvYy5vIHBhZ2V3YWxrLm8KIAogb2JqLXkJCQk6PSBib290bWVtLm8gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcCiAJCQkgICBtYWNjZXNzLm8gcGFnZV9hbGxvYy5vIHBhZ2Utd3JpdGViYWNrLm8gXAogCQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2htZW0ubyBcCiAJCQkgICBwcmlvX3RyZWUubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcCiAJCQkgICBwYWdlX2lzb2xhdGlvbi5vIG1tX2luaXQubyBtbXVfY29udGV4dC5vIFwKLQkJCSAgIHBhZ2V3YWxrLm8gJChtbXUteSkKKwkJCSAgICQobW11LXkpCiBvYmoteSArPSBpbml0LW1tLm8KIAogb2JqLSQoQ09ORklHX0JPVU5DRSkJKz0gYm91bmNlLm8KZGlmZiAtLWdpdCBhL21tL2JhY2tpbmctZGV2LmMgYi9tbS9iYWNraW5nLWRldi5jCmluZGV4IDNkM2FjY2IuLjExYWVlMDkgMTAwNjQ0Ci0tLSBhL21tL2JhY2tpbmctZGV2LmMKKysrIGIvbW0vYmFja2luZy1kZXYuYwpAQCAtOTIsNyArOTIsNyBAQAogCQkgICAiQmRpRGlydHlUaHJlc2g6ICAgJThsdSBrQlxuIgogCQkgICAiRGlydHlUaHJlc2g6ICAgICAgJThsdSBrQlxuIgogCQkgICAiQmFja2dyb3VuZFRocmVzaDogJThsdSBrQlxuIgotCQkgICAiV3JpdGVCYWNrIHRocmVhZHM6JThsdVxuIgorCQkgICAiV3JpdGViYWNrVGhyZWFkczogJThsdVxuIgogCQkgICAiYl9kaXJ0eTogICAgICAgICAgJThsdVxuIgogCQkgICAiYl9pbzogICAgICAgICAgICAgJThsdVxuIgogCQkgICAiYl9tb3JlX2lvOiAgICAgICAgJThsdVxuIgpAQCAtNjEwLDkgKzYxMCwyNiBAQAogCQlrdGhyZWFkX3N0b3Aod2ItPnRhc2spOwogfQogCisvKgorICogVGhpcyBiZGkgaXMgZ29pbmcgYXdheSBub3csIG1ha2Ugc3VyZSB0aGF0IG5vIHN1cGVyX2Jsb2NrcyBwb2ludCB0byBpdAorICovCitzdGF0aWMgdm9pZCBiZGlfcHJ1bmVfc2Ioc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCisJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCAmc3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKKwkJaWYgKHNiLT5zX2JkaSA9PSBiZGkpCisJCQlzYi0+c19iZGkgPSBOVUxMOworCX0KKwlzcGluX3VubG9jaygmc2JfbG9jayk7Cit9CisKIHZvaWQgYmRpX3VucmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSkKIHsKIAlpZiAoYmRpLT5kZXYpIHsKKwkJYmRpX3BydW5lX3NiKGJkaSk7CisKIAkJaWYgKCFiZGlfY2FwX2ZsdXNoX2ZvcmtlcihiZGkpKQogCQkJYmRpX3diX3NodXRkb3duKGJkaSk7CiAJCWJkaV9kZWJ1Z191bnJlZ2lzdGVyKGJkaSk7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNmM4NGU1OTguLmVmMTY5ZjMgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTE2MTEsNyArMTYxMSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZpbGVtYXBfZmF1bHQpOwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0gewogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogfTsKIApkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcF94aXAuYyBiL21tL2ZpbGVtYXBfeGlwLmMKaW5kZXggNDI3ZGZlMy4uMTg4OGIyZCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcF94aXAuYworKysgYi9tbS9maWxlbWFwX3hpcC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGlwX2ZpbGVfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4aXBfZmlsZV92bV9vcHMgPSB7CiAJLmZhdWx0CT0geGlwX2ZpbGVfZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggMjU4NzhjYy4uOWMxZTYyNyAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDI2LDE2ICs0MjYsMjEgQEAKIAogdm9pZCBkZWJ1Z19rbWFwX2F0b21pYyhlbnVtIGttX3R5cGUgdHlwZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgd2Fybl9jb3VudCA9IDEwOworCXN0YXRpYyBpbnQgd2Fybl9jb3VudCA9IDEwOwogCi0JaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPT0gMCkpCisJaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPCAwKSkKIAkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkgewotCQlpZiAoaW5faXJxKCkpIHsKKwkJaWYgKGluX25taSgpKSB7CisJCQlpZiAodHlwZSAhPSBLTV9OTUkgJiYgdHlwZSAhPSBLTV9OTUlfUFRFKSB7CisJCQkJV0FSTl9PTigxKTsKKwkJCQl3YXJuX2NvdW50LS07CisJCQl9CisJCX0gZWxzZSBpZiAoaW5faXJxKCkpIHsKIAkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCiAJCQkgICAgdHlwZSAhPSBLTV9CSU9fU1JDX0lSUSAmJiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmCi0JCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQgJiYgdHlwZSAhPSBLTV9JUlFfUFRFKSB7CiAJCQkJV0FSTl9PTigxKTsKIAkJCQl3YXJuX2NvdW50LS07CiAJCQl9CkBAIC00NTIsNyArNDU3LDkgQEAKIAl9CiAKIAlpZiAodHlwZSA9PSBLTV9JUlEwIHx8IHR5cGUgPT0gS01fSVJRMSB8fCB0eXBlID09IEtNX0JPVU5DRV9SRUFEIHx8Ci0JCQl0eXBlID09IEtNX0JJT19TUkNfSVJRIHx8IHR5cGUgPT0gS01fQklPX0RTVF9JUlEpIHsKKwkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSB8fAorCQkJdHlwZSA9PSBLTV9JUlFfUFRFIHx8IHR5cGUgPT0gS01fTk1JIHx8CisJCQl0eXBlID09IEtNX05NSV9QVEUgKSB7CiAJCWlmICghaXJxc19kaXNhYmxlZCgpKSB7CiAJCQlXQVJOX09OKDEpOwogCQkJd2Fybl9jb3VudC0tOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDZmMDQ4ZmMuLjVkNzYwMWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTE3MjEsNyArMTcyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBodWdldGxiX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBodWdldGxiX3ZtX29wX2ZhdWx0LAogCS5vcGVuID0gaHVnZXRsYl92bV9vcF9vcGVuLAogCS5jbG9zZSA9IGh1Z2V0bGJfdm1fb3BfY2xvc2UsCmRpZmYgLS1naXQgYS9tbS9rbWVtbGVhay5jIGIvbW0va21lbWxlYWsuYwppbmRleCA0ZWE0NTEwLi44YmY3NjVjIDEwMDY0NAotLS0gYS9tbS9rbWVtbGVhay5jCisrKyBiL21tL2ttZW1sZWFrLmMKQEAgLTgzMywxMiArODMzLDE1IEBACiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCW9iamVjdCA9IGNyZWF0ZV9vYmplY3QoKHVuc2lnbmVkIGxvbmcpbG9nLT5wdHIsIGxvZy0+c2l6ZSwKLQkJCSAgICAgICBsb2ctPm1pbl9jb3VudCwgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgbG9nLT5taW5fY291bnQsIEdGUF9BVE9NSUMpOworCWlmICghb2JqZWN0KQorCQlnb3RvIG91dDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGxvZy0+dHJhY2VfbGVuOyBpKyspCiAJCW9iamVjdC0+dHJhY2VbaV0gPSBsb2ctPnRyYWNlW2ldOwogCW9iamVjdC0+dHJhY2VfbGVuID0gbG9nLT50cmFjZV9sZW47CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2JqZWN0LT5sb2NrLCBmbGFncyk7CitvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL2tzbS5jIGIvbW0va3NtLmMKaW5kZXggZjdlZGFjMy4uNTU3NWY4NiAxMDA2NDQKLS0tIGEvbW0va3NtLmMKKysrIGIvbW0va3NtLmMKQEAgLTE4NCwxMSArMTg0LDYgQEAKIAkJc2l6ZW9mKHN0cnVjdCBfX3N0cnVjdCksIF9fYWxpZ25vZl9fKHN0cnVjdCBfX3N0cnVjdCksXAogCQkoX19mbGFncyksIE5VTEwpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBrc21faW5pdF9tYXhfa2VybmVsX3BhZ2VzKHZvaWQpCi17Ci0Ja3NtX21heF9rZXJuZWxfcGFnZXMgPSBucl9mcmVlX2J1ZmZlcl9wYWdlcygpIC8gNDsKLX0KLQogc3RhdGljIGludCBfX2luaXQga3NtX3NsYWJfaW5pdCh2b2lkKQogewogCXJtYXBfaXRlbV9jYWNoZSA9IEtTTV9LTUVNX0NBQ0hFKHJtYXBfaXRlbSwgMCk7CkBAIC0xMDE3LDYgKzEwMTIsNyBAQAogCQlzdHJ1Y3Qgcm1hcF9pdGVtICp0cmVlX3JtYXBfaXRlbTsKIAkJaW50IHJldDsKIAorCQljb25kX3Jlc2NoZWQoKTsKIAkJdHJlZV9ybWFwX2l0ZW0gPSByYl9lbnRyeSgqbmV3LCBzdHJ1Y3Qgcm1hcF9pdGVtLCBub2RlKTsKIAkJcGFnZTJbMF0gPSBnZXRfbWVyZ2VhYmxlX3BhZ2UodHJlZV9ybWFwX2l0ZW0pOwogCQlpZiAoIXBhZ2UyWzBdKQpAQCAtMTY3Myw3ICsxNjY5LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtzbV90aHJlYWQ7CiAJaW50IGVycjsKIAotCWtzbV9pbml0X21heF9rZXJuZWxfcGFnZXMoKTsKKwlrc21fbWF4X2tlcm5lbF9wYWdlcyA9IHRvdGFscmFtX3BhZ2VzIC8gNDsKIAogCWVyciA9IGtzbV9zbGFiX2luaXQoKTsKIAlpZiAoZXJyKQpAQCAtMTY5Nyw2ICsxNjkzLDkgQEAKIAkJa3RocmVhZF9zdG9wKGtzbV90aHJlYWQpOwogCQlnb3RvIG91dF9mcmVlMjsKIAl9CisjZWxzZQorCWtzbV9ydW4gPSBLU01fUlVOX01FUkdFOwkvKiBubyB3YXkgZm9yIHVzZXIgdG8gc3RhcnQgaXQgKi8KKwogI2VuZGlmIC8qIENPTkZJR19TWVNGUyAqLwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZTJiOThhNi4uZjk5ZjU5OSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMzEzLDcgKzMxMyw4IEBACiBzdGF0aWMgdm9pZAogX19tZW1fY2dyb3VwX2luc2VydF9leGNlZWRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiwKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICptY3R6KQorCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHosCisJCQkJdW5zaWduZWQgbG9uZyBsb25nIG5ld191c2FnZV9pbl9leGNlc3MpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJm1jdHotPnJiX3Jvb3QucmJfbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKQEAgLTMyMiw3ICszMjMsOSBAQAogCWlmIChtei0+b25fdHJlZSkKIAkJcmV0dXJuOwogCi0JbXotPnVzYWdlX2luX2V4Y2VzcyA9IHJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtZW0tPnJlcyk7CisJbXotPnVzYWdlX2luX2V4Y2VzcyA9IG5ld191c2FnZV9pbl9leGNlc3M7CisJaWYgKCFtei0+dXNhZ2VfaW5fZXhjZXNzKQorCQlyZXR1cm47CiAJd2hpbGUgKCpwKSB7CiAJCXBhcmVudCA9ICpwOwogCQltel9ub2RlID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfem9uZSwKQEAgLTM1MywxNiArMzU2LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCi0JCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAotCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCi17Ci0Jc3Bpbl9sb2NrKCZtY3R6LT5sb2NrKTsKLQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG1lbSwgbXosIG1jdHopOwotCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQKIG1lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16LAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHopCkBAIC0zOTIsMzQgKzM4NSwzNiBAQAogCiBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3VwZGF0ZV90cmVlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBwcmV2X3VzYWdlX2luX2V4Y2VzcywgbmV3X3VzYWdlX2luX2V4Y2VzczsKLQlib29sIHVwZGF0ZWRfdHJlZSA9IGZhbHNlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBleGNlc3M7CiAJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHo7Ci0KLQlteiA9IG1lbV9jZ3JvdXBfem9uZWluZm8obWVtLCBwYWdlX3RvX25pZChwYWdlKSwgcGFnZV96b25lbnVtKHBhZ2UpKTsKKwlpbnQgbmlkID0gcGFnZV90b19uaWQocGFnZSk7CisJaW50IHppZCA9IHBhZ2Vfem9uZW51bShwYWdlKTsKIAltY3R6ID0gc29mdF9saW1pdF90cmVlX2Zyb21fcGFnZShwYWdlKTsKIAogCS8qCi0JICogV2UgZG8gdXBkYXRlcyBpbiBsYXp5IG1vZGUsIG1lbSdzIGFyZSByZW1vdmVkCi0JICogbGF6aWx5IGZyb20gdGhlIHBlci16b25lLCBwZXItbm9kZSByYiB0cmVlCisJICogTmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgYW5jZXN0b3JzIHdoZW4gaGllcmFyY2h5IGlzIHVzZWQuCisJICogYmVjYXVzZSB0aGVpciBldmVudCBjb3VudGVyIGlzIG5vdCB0b3VjaGVkLgogCSAqLwotCXByZXZfdXNhZ2VfaW5fZXhjZXNzID0gbXotPnVzYWdlX2luX2V4Y2VzczsKLQotCW5ld191c2FnZV9pbl9leGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbWVtLT5yZXMpOwotCWlmIChwcmV2X3VzYWdlX2luX2V4Y2VzcykgewotCQltZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKLQkJdXBkYXRlZF90cmVlID0gdHJ1ZTsKLQl9Ci0JaWYgKCFuZXdfdXNhZ2VfaW5fZXhjZXNzKQotCQlnb3RvIGRvbmU7Ci0JbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobWVtLCBteiwgbWN0eik7Ci0KLWRvbmU6Ci0JaWYgKHVwZGF0ZWRfdHJlZSkgewotCQlzcGluX2xvY2soJm1jdHotPmxvY2spOwotCQltei0+dXNhZ2VfaW5fZXhjZXNzID0gbmV3X3VzYWdlX2luX2V4Y2VzczsKLQkJc3Bpbl91bmxvY2soJm1jdHotPmxvY2spOworCWZvciAoOyBtZW07IG1lbSA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbSkpIHsKKwkJbXogPSBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOworCQlleGNlc3MgPSByZXNfY291bnRlcl9zb2Z0X2xpbWl0X2V4Y2VzcygmbWVtLT5yZXMpOworCQkvKgorCQkgKiBXZSBoYXZlIHRvIHVwZGF0ZSB0aGUgdHJlZSBpZiBteiBpcyBvbiBSQi10cmVlIG9yCisJCSAqIG1lbSBpcyBvdmVyIGl0cyBzb2Z0bGltaXQuCisJCSAqLworCQlpZiAoZXhjZXNzIHx8IG16LT5vbl90cmVlKSB7CisJCQlzcGluX2xvY2soJm1jdHotPmxvY2spOworCQkJLyogaWYgb24tdHJlZSwgcmVtb3ZlIGl0ICovCisJCQlpZiAobXotPm9uX3RyZWUpCisJCQkJX19tZW1fY2dyb3VwX3JlbW92ZV9leGNlZWRlZChtZW0sIG16LCBtY3R6KTsKKwkJCS8qCisJCQkgKiBJbnNlcnQgYWdhaW4uIG16LT51c2FnZV9pbl9leGNlc3Mgd2lsbCBiZSB1cGRhdGVkLgorCQkJICogSWYgZXhjZXNzIGlzIDAsIG5vIHRyZWUgb3BzLgorCQkJICovCisJCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG1lbSwgbXosIG1jdHosIGV4Y2Vzcyk7CisJCQlzcGluX3VubG9jaygmbWN0ei0+bG9jayk7CisJCX0KIAl9CiB9CiAKQEAgLTQ0Nyw5ICs0NDIsMTAgQEAKIF9fbWVtX2Nncm91cF9sYXJnZXN0X3NvZnRfbGltaXRfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICptY3R6KQogewogCXN0cnVjdCByYl9ub2RlICpyaWdodG1vc3QgPSBOVUxMOwotCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICpteiA9IE5VTEw7CisJc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUgKm16OwogCiByZXRyeToKKwlteiA9IE5VTEw7CiAJcmlnaHRtb3N0ID0gcmJfbGFzdCgmbWN0ei0+cmJfcm9vdCk7CiAJaWYgKCFyaWdodG1vc3QpCiAJCWdvdG8gZG9uZTsJCS8qIE5vdGhpbmcgdG8gcmVjbGFpbSBmcm9tICovCkBAIC0xMjcwLDkgKzEyNjYsOSBAQAogCQkJZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2csCiAJCQlib29sIG9vbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgKm1lbV9vdmVyX2xpbWl0LCAqbWVtX292ZXJfc29mdF9saW1pdDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQ7CiAJaW50IG5yX3JldHJpZXMgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKLQlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzLCAqc29mdF9mYWlsX3JlcyA9IE5VTEw7CisJc3RydWN0IHJlc19jb3VudGVyICpmYWlsX3JlczsKIAogCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKSkgewogCQkvKiBEb24ndCBhY2NvdW50IHRoaXMhICovCkBAIC0xMzA0LDE3ICsxMzAwLDE2IEBACiAKIAkJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKQogCQkJZ290byBkb25lOwotCQlyZXQgPSByZXNfY291bnRlcl9jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUsICZmYWlsX3JlcywKLQkJCQkJCSZzb2Z0X2ZhaWxfcmVzKTsKKwkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCAmZmFpbF9yZXMpOwogCQlpZiAobGlrZWx5KCFyZXQpKSB7CiAJCQlpZiAoIWRvX3N3YXBfYWNjb3VudCkKIAkJCQlicmVhazsKIAkJCXJldCA9IHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFLAotCQkJCQkJCSZmYWlsX3JlcywgTlVMTCk7CisJCQkJCQkJJmZhaWxfcmVzKTsKIAkJCWlmIChsaWtlbHkoIXJldCkpCiAJCQkJYnJlYWs7CiAJCQkvKiBtZW0rc3dhcCBjb3VudGVyIGZhaWxzICovCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCQlmbGFncyB8PSBNRU1fQ0dST1VQX1JFQ0xBSU1fTk9TV0FQOwogCQkJbWVtX292ZXJfbGltaXQgPSBtZW1fY2dyb3VwX2Zyb21fcmVzX2NvdW50ZXIoZmFpbF9yZXMsCiAJCQkJCQkJCQltZW1zdyk7CkBAIC0xMzUzLDE2ICsxMzQ4LDExIEBACiAJCX0KIAl9CiAJLyoKLQkgKiBJbnNlcnQganVzdCB0aGUgYW5jZXN0b3IsIHdlIHNob3VsZCB0cmlja2xlIGRvd24gdG8gdGhlIGNvcnJlY3QKLQkgKiBjZ3JvdXAgZm9yIHJlY2xhaW0sIHNpbmNlIHRoZSBvdGhlciBub2RlcyB3aWxsIGJlIGJlbG93IHRoZWlyCi0JICogc29mdCBsaW1pdAorCSAqIEluc2VydCBhbmNlc3RvciAoYW5kIGFuY2VzdG9yJ3MgYW5jZXN0b3JzKSwgdG8gc29mdGxpbWl0IFJCLXRyZWUuCisJICogaWYgdGhleSBleGNlZWRzIHNvZnRsaW1pdC4KIAkgKi8KLQlpZiAoc29mdF9mYWlsX3JlcykgewotCQltZW1fb3Zlcl9zb2Z0X2xpbWl0ID0KLQkJCW1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihzb2Z0X2ZhaWxfcmVzLCByZXMpOwotCQlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbV9vdmVyX3NvZnRfbGltaXQpKQotCQkJbWVtX2Nncm91cF91cGRhdGVfdHJlZShtZW1fb3Zlcl9zb2Z0X2xpbWl0LCBwYWdlKTsKLQl9CisJaWYgKG1lbV9jZ3JvdXBfc29mdF9saW1pdF9jaGVjayhtZW0pKQorCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CiBkb25lOgogCXJldHVybiAwOwogbm9tZW06CkBAIC0xNDM3LDEwICsxNDI3LDkgQEAKIAlpZiAodW5saWtlbHkoUGFnZUNncm91cFVzZWQocGMpKSkgewogCQl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJTlVMTCk7CisJCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7CiAJCX0KIAkJY3NzX3B1dCgmbWVtLT5jc3MpOwogCQlyZXR1cm47CkBAIC0xNTE5LDcgKzE1MDgsNyBAQAogCQlnb3RvIG91dDsKIAogCWlmICghbWVtX2Nncm91cF9pc19yb290KGZyb20pKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+cmVzLCBQQUdFX1NJWkUsIE5VTEwpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+cmVzLCBQQUdFX1NJWkUpOwogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MoZnJvbSwgcGMsIGZhbHNlKTsKIAogCXBhZ2UgPSBwYy0+cGFnZTsKQEAgLTE1MzksNyArMTUyOCw3IEBACiAJfQogCiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhbWVtX2Nncm91cF9pc19yb290KGZyb20pKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFKTsKIAljc3NfcHV0KCZmcm9tLT5jc3MpOwogCiAJY3NzX2dldCgmdG8tPmNzcyk7CkBAIC0xNjEwLDkgKzE1OTksOSBAQAogCWNzc19wdXQoJnBhcmVudC0+Y3NzKTsKIAkvKiB1bmNoYXJnZSBpZiBtb3ZlIGZhaWxzICovCiAJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QocGFyZW50KSkgewotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmcGFyZW50LT5yZXMsIFBBR0VfU0laRSwgTlVMTCk7CisJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPnJlcywgUEFHRV9TSVpFKTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZwYXJlbnQtPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJnBhcmVudC0+bWVtc3csIFBBR0VfU0laRSk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xODAzLDggKzE3OTIsNyBAQAogCQkJICogY2FsbGluZyBjc3NfdHJ5Z2V0CiAJCQkgKi8KIAkJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUsCi0JCQkJCQkJTlVMTCk7CisJCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbWNnLCBmYWxzZSk7CiAJCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJCX0KQEAgLTE4MzEsOSArMTgxOSw5IEBACiAJaWYgKCFtZW0pCiAJCXJldHVybjsKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCBOVUxMKTsKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOwogCQlpZiAoZG9fc3dhcF9hY2NvdW50KQotCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSwgTlVMTCk7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5tZW1zdywgUEFHRV9TSVpFKTsKIAl9CiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogfQpAQCAtMTg0OCw3ICsxODM2LDYgQEAKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKLQlib29sIHNvZnRfbGltaXRfZXhjZXNzID0gZmFsc2U7CiAKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE4ODgsMTAgKzE4NzUsMTAgQEAKIAl9CiAKIAlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7Ci0JCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPnJlcywgUEFHRV9TSVpFLCAmc29mdF9saW1pdF9leGNlc3MpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJCWlmIChkb19zd2FwX2FjY291bnQgJiYKIAkJCQkoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKSkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7CiAJfQogCWlmIChjdHlwZSA9PSBNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NXQVBPVVQpCiAJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbSwgdHJ1ZSk7CkBAIC0xOTA4LDcgKzE4OTUsNyBAQAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAKLQlpZiAoc29mdF9saW1pdF9leGNlc3MgJiYgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCisJaWYgKG1lbV9jZ3JvdXBfc29mdF9saW1pdF9jaGVjayhtZW0pKQogCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CiAJLyogYXQgc3dhcG91dCwgdGhpcyBtZW1jZyB3aWxsIGJlIGFjY2Vzc2VkIHRvIHJlY29yZCB0byBzd2FwICovCiAJaWYgKGN0eXBlICE9IE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCkKQEAgLTE5ODYsNyArMTk3Myw3IEBACiAJCSAqIFRoaXMgbWVtY2cgY2FuIGJlIG9ic29sZXRlIG9uZS4gV2UgYXZvaWQgY2FsbGluZyBjc3NfdHJ5Z2V0CiAJCSAqLwogCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW1jZykpCi0JCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUsIE5VTEwpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1zdywgUEFHRV9TSVpFKTsKIAkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKIAkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCX0KQEAgLTIyMzMsNiArMjIyMCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWNsYWltZWQ7CiAJaW50IGxvb3AgPSAwOwogCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKm1jdHo7CisJdW5zaWduZWQgbG9uZyBsb25nIGV4Y2VzczsKIAogCWlmIChvcmRlciA+IDApCiAJCXJldHVybiAwOwpAQCAtMjI4NCw5ICsyMjcyLDggQEAKIAkJCQkJYnJlYWs7CiAJCQl9IHdoaWxlICgxKTsKIAkJfQotCQltei0+dXNhZ2VfaW5fZXhjZXNzID0KLQkJCXJlc19jb3VudGVyX3NvZnRfbGltaXRfZXhjZXNzKCZtei0+bWVtLT5yZXMpOwogCQlfX21lbV9jZ3JvdXBfcmVtb3ZlX2V4Y2VlZGVkKG16LT5tZW0sIG16LCBtY3R6KTsKKwkJZXhjZXNzID0gcmVzX2NvdW50ZXJfc29mdF9saW1pdF9leGNlc3MoJm16LT5tZW0tPnJlcyk7CiAJCS8qCiAJCSAqIE9uZSBzY2hvb2wgb2YgdGhvdWdodCBzYXlzIHRoYXQgd2Ugc2hvdWxkIG5vdCBhZGQKIAkJICogYmFjayB0aGUgbm9kZSB0byB0aGUgdHJlZSBpZiByZWNsYWltIHJldHVybnMgMC4KQEAgLTIyOTUsOCArMjI4Miw4IEBACiAJCSAqIG1lbW9yeSB0byByZWNsYWltIGZyb20uIENvbnNpZGVyIHRoaXMgYXMgYSBsb25nZXIKIAkJICogdGVybSBUT0RPLgogCQkgKi8KLQkJaWYgKG16LT51c2FnZV9pbl9leGNlc3MpCi0JCQlfX21lbV9jZ3JvdXBfaW5zZXJ0X2V4Y2VlZGVkKG16LT5tZW0sIG16LCBtY3R6KTsKKwkJLyogSWYgZXhjZXNzID09IDAsIG5vIHRyZWUgb3BzICovCisJCV9fbWVtX2Nncm91cF9pbnNlcnRfZXhjZWVkZWQobXotPm1lbSwgbXosIG1jdHosIGV4Y2Vzcyk7CiAJCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKIAkJY3NzX3B1dCgmbXotPm1lbS0+Y3NzKTsKIAkJbG9vcCsrOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggNzI5ZDRiMS4uZGFjYzY0MSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rc20uaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KQEAgLTM3MCw5ICszNzEsNiBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAKLQlpZiAoIWlzb2xhdGVfbHJ1X3BhZ2UocCkpCi0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQogCS8qCiAJICogRm9yIGFub255bW91cyBwYWdlcyB3ZSdyZSBkb25lIHRoZSBvbmx5IHJlZmVyZW5jZSBsZWZ0CiAJICogc2hvdWxkIGJlIHRoZSBvbmUgbV9mKCkgaG9sZHMuCkBAIC00OTgsMzAgKzQ5NiwxOCBAQAogICovCiBzdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9kaXJ0eShzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JaW50IHJldCA9IEZBSUxFRDsKLQogCUNsZWFyUGFnZURpcnR5KHApOwogCS8qIFRyaWdnZXIgRUlPIGluIHNobWVtOiAqLwogCUNsZWFyUGFnZVVwdG9kYXRlKHApOwogCi0JaWYgKCFpc29sYXRlX2xydV9wYWdlKHApKSB7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwKTsKLQkJcmV0ID0gREVMQVlFRDsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBERUxBWUVEOwogfQogCiBzdGF0aWMgaW50IG1lX3N3YXBjYWNoZV9jbGVhbihzdHJ1Y3QgcGFnZSAqcCwgdW5zaWduZWQgbG9uZyBwZm4pCiB7Ci0JaW50IHJldCA9IEZBSUxFRDsKLQotCWlmICghaXNvbGF0ZV9scnVfcGFnZShwKSkgewotCQlwYWdlX2NhY2hlX3JlbGVhc2UocCk7Ci0JCXJldCA9IFJFQ09WRVJFRDsKLQl9CiAJZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShwKTsKLQlyZXR1cm4gcmV0OworCisJcmV0dXJuIFJFQ09WRVJFRDsKIH0KIAogLyoKQEAgLTYxMSw4ICs1OTcsNiBAQAogCXsgMCwJCTAsCQkidW5rbm93biBwYWdlIHN0YXRlIiwJbWVfdW5rbm93biB9LAogfTsKIAotI3VuZGVmIGxydQotCiBzdGF0aWMgdm9pZCBhY3Rpb25fcmVzdWx0KHVuc2lnbmVkIGxvbmcgcGZuLCBjaGFyICptc2csIGludCByZXN1bHQpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwpAQCAtNjI5LDEzICs2MTMsMTYgQEAKIAkJCXVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcmVmKQogewogCWludCByZXN1bHQ7CisJaW50IGNvdW50OwogCiAJcmVzdWx0ID0gcHMtPmFjdGlvbihwLCBwZm4pOwogCWFjdGlvbl9yZXN1bHQocGZuLCBwcy0+bXNnLCByZXN1bHQpOwotCWlmIChwYWdlX2NvdW50KHApICE9IDEgKyByZWYpCisKKwljb3VudCA9IHBhZ2VfY291bnQocCkgLSAxIC0gcmVmOworCWlmIChjb3VudCAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJNQ0UgJSNseDogJXMgcGFnZSBzdGlsbCByZWZlcmVuY2VkIGJ5ICVkIHVzZXJzXG4iLAotCQkgICAgICAgcGZuLCBwcy0+bXNnLCBwYWdlX2NvdW50KHApIC0gMSk7CisJCSAgICAgICBwZm4sIHBzLT5tc2csIGNvdW50KTsKIAogCS8qIENvdWxkIGRvIG1vcmUgY2hlY2tzIGhlcmUgaWYgcGFnZSBsb29rcyBvayAqLwogCS8qCkBAIC02NjEsMTIgKzY0OCw5IEBACiAJaW50IGk7CiAJaW50IGtpbGwgPSAxOwogCi0JaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlQ29tcG91bmQocCkgfHwgUGFnZVNsYWIocCkpCisJaWYgKFBhZ2VSZXNlcnZlZChwKSB8fCBQYWdlQ29tcG91bmQocCkgfHwgUGFnZVNsYWIocCkgfHwgUGFnZUtzbShwKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFQYWdlTFJVKHApKQotCQlscnVfYWRkX2RyYWluX2FsbCgpOwotCiAJLyoKIAkgKiBUaGlzIGNoZWNrIGltcGxpZXMgd2UgZG9uJ3Qga2lsbCBwcm9jZXNzZXMgaWYgdGhlaXIgcGFnZXMKIAkgKiBhcmUgaW4gdGhlIHN3YXAgY2FjaGUgZWFybHkuIFRob3NlIGFyZSBhbHdheXMgbGF0ZSBraWxscy4KQEAgLTczOCw2ICs3MjIsNyBAQAogCiBpbnQgX19tZW1vcnlfZmFpbHVyZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IHRyYXBubywgaW50IHJlZikKIHsKKwl1bnNpZ25lZCBsb25nIGxydV9mbGFnOwogCXN0cnVjdCBwYWdlX3N0YXRlICpwczsKIAlzdHJ1Y3QgcGFnZSAqcDsKIAlpbnQgcmVzOwpAQCAtNzc1LDYgKzc2MCwyNCBAQAogCX0KIAogCS8qCisJICogV2UgaWdub3JlIG5vbi1MUlUgcGFnZXMgZm9yIGdvb2QgcmVhc29ucy4KKwkgKiAtIFBHX2xvY2tlZCBpcyBvbmx5IHdlbGwgZGVmaW5lZCBmb3IgTFJVIHBhZ2VzIGFuZCBhIGZldyBvdGhlcnMKKwkgKiAtIHRvIGF2b2lkIHJhY2VzIHdpdGggX19zZXRfcGFnZV9sb2NrZWQoKQorCSAqIC0gdG8gYXZvaWQgcmFjZXMgd2l0aCBfX1NldFBhZ2VTbGFiKigpIChhbmQgbW9yZSBub24tYXRvbWljIG9wcykKKwkgKiBUaGUgY2hlY2sgKHVubmVjZXNzYXJpbHkpIGlnbm9yZXMgTFJVIHBhZ2VzIGJlaW5nIGlzb2xhdGVkIGFuZAorCSAqIHdhbGtlZCBieSB0aGUgcGFnZSByZWNsYWltIGNvZGUsIGhvd2V2ZXIgdGhhdCdzIG5vdCBhIGJpZyBsb3NzLgorCSAqLworCWlmICghUGFnZUxSVShwKSkKKwkJbHJ1X2FkZF9kcmFpbl9hbGwoKTsKKwlscnVfZmxhZyA9IHAtPmZsYWdzICYgbHJ1OworCWlmIChpc29sYXRlX2xydV9wYWdlKHApKSB7CisJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOworCQlwdXRfcGFnZShwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcGFnZV9jYWNoZV9yZWxlYXNlKHApOworCisJLyoKIAkgKiBMb2NrIHRoZSBwYWdlIGFuZCB3YWl0IGZvciB3cml0ZWJhY2sgdG8gZmluaXNoLgogCSAqIEl0J3MgdmVyeSBkaWZmaWN1bHQgdG8gbWVzcyB3aXRoIHBhZ2VzIGN1cnJlbnRseSB1bmRlciBJTwogCSAqIGFuZCBpbiBtYW55IGNhc2VzIGltcG9zc2libGUsIHNvIHdlIGp1c3QgYXZvaWQgaXQgaGVyZS4KQEAgLTc5MCw3ICs3OTMsNyBAQAogCS8qCiAJICogVG9ybiBkb3duIGJ5IHNvbWVvbmUgZWxzZT8KIAkgKi8KLQlpZiAoUGFnZUxSVShwKSAmJiAhUGFnZVN3YXBDYWNoZShwKSAmJiBwLT5tYXBwaW5nID09IE5VTEwpIHsKKwlpZiAoKGxydV9mbGFnICYgbHJ1KSAmJiAhUGFnZVN3YXBDYWNoZShwKSAmJiBwLT5tYXBwaW5nID09IE5VTEwpIHsKIAkJYWN0aW9uX3Jlc3VsdChwZm4sICJhbHJlYWR5IHRydW5jYXRlZCBMUlUiLCBJR05PUkVEKTsKIAkJcmVzID0gMDsKIAkJZ290byBvdXQ7CkBAIC03OTgsNyArODAxLDcgQEAKIAogCXJlcyA9IC1FQlVTWTsKIAlmb3IgKHBzID0gZXJyb3Jfc3RhdGVzOzsgcHMrKykgewotCQlpZiAoKHAtPmZsYWdzICYgcHMtPm1hc2spID09IHBzLT5yZXMpIHsKKwkJaWYgKCgocC0+ZmxhZ3MgfCBscnVfZmxhZykmIHBzLT5tYXNrKSA9PSBwcy0+cmVzKSB7CiAJCQlyZXMgPSBwYWdlX2FjdGlvbihwcywgcCwgcGZuLCByZWYpOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggN2U5MWI1Zi4uNmFiMTlkZCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTY0MSw2ICs2NDEsNyBAQAogCQlwbWRfdCAqZHN0X3BtZCwgcG1kX3QgKnNyY19wbWQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQogeworCXB0ZV90ICpvcmlnX3NyY19wdGUsICpvcmlnX2RzdF9wdGU7CiAJcHRlX3QgKnNyY19wdGUsICpkc3RfcHRlOwogCXNwaW5sb2NrX3QgKnNyY19wdGwsICpkc3RfcHRsOwogCWludCBwcm9ncmVzcyA9IDA7CkBAIC02NTQsNiArNjU1LDggQEAKIAlzcmNfcHRlID0gcHRlX29mZnNldF9tYXBfbmVzdGVkKHNyY19wbWQsIGFkZHIpOwogCXNyY19wdGwgPSBwdGVfbG9ja3B0cihzcmNfbW0sIHNyY19wbWQpOwogCXNwaW5fbG9ja19uZXN0ZWQoc3JjX3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCW9yaWdfc3JjX3B0ZSA9IHNyY19wdGU7CisJb3JpZ19kc3RfcHRlID0gZHN0X3B0ZTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKIAogCWRvIHsKQEAgLTY3Nyw5ICs2ODAsOSBAQAogCiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJc3Bpbl91bmxvY2soc3JjX3B0bCk7Ci0JcHRlX3VubWFwX25lc3RlZChzcmNfcHRlIC0gMSk7CisJcHRlX3VubWFwX25lc3RlZChvcmlnX3NyY19wdGUpOwogCWFkZF9tbV9yc3MoZHN0X21tLCByc3NbMF0sIHJzc1sxXSk7Ci0JcHRlX3VubWFwX3VubG9jayhkc3RfcHRlIC0gMSwgZHN0X3B0bCk7CisJcHRlX3VubWFwX3VubG9jayhvcmlnX2RzdF9wdGUsIGRzdF9wdGwpOwogCWNvbmRfcmVzY2hlZCgpOwogCWlmIChhZGRyICE9IGVuZCkKIAkJZ290byBhZ2FpbjsKQEAgLTE4MjAsMTAgKzE4MjMsMTAgQEAKIAl0b2tlbiA9IHBtZF9wZ3RhYmxlKCpwbWQpOwogCiAJZG8gewotCQllcnIgPSBmbihwdGUsIHRva2VuLCBhZGRyLCBkYXRhKTsKKwkJZXJyID0gZm4ocHRlKyssIHRva2VuLCBhZGRyLCBkYXRhKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwotCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOworCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAKIAlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIApAQCAtMjUzOSw3ICsyNTQyLDcgQEAKIAl9IGVsc2UgaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSkgewogCQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjsKIAkJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX1NXQVBJTik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9yZWxlYXNlOwogCX0KIAogCWxvY2tfcGFnZShwYWdlKTsKQEAgLTI2MTEsNiArMjYxNCw3IEBACiAJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogb3V0X3BhZ2U6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CitvdXRfcmVsZWFzZToKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDgyMWRlZTUuLjIwNDc0NjUgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWlzb2xhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCkBAIC00NDcsNyArNDQ4LDggQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFICovCiAKLXN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9uZXdfcGdkYXQoaW50IG5pZCwgdTY0IHN0YXJ0KQorLyogd2UgYXJlIE9LIGNhbGxpbmcgX19tZW1pbml0IHN0dWZmIGhlcmUgLSB3ZSBoYXZlIENPTkZJR19NRU1PUllfSE9UUExVRyAqLworc3RhdGljIHBnX2RhdGFfdCBfX3JlZiAqaG90YWRkX25ld19wZ2RhdChpbnQgbmlkLCB1NjQgc3RhcnQpCiB7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdDsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXSA9IHswfTsKQEAgLTQ4NCwxNCArNDg2LDE4IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAorCWxvY2tfc3lzdGVtX3NsZWVwKCk7CisKIAlyZXMgPSByZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2Uoc3RhcnQsIHNpemUpOworCXJldCA9IC1FRVhJU1Q7CiAJaWYgKCFyZXMpCi0JCXJldHVybiAtRUVYSVNUOworCQlnb3RvIG91dDsKIAogCWlmICghbm9kZV9vbmxpbmUobmlkKSkgewogCQlwZ2RhdCA9IGhvdGFkZF9uZXdfcGdkYXQobmlkLCBzdGFydCk7CisJCXJldCA9IC1FTk9NRU07CiAJCWlmICghcGdkYXQpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCWdvdG8gb3V0OwogCQluZXdfcGdkYXQgPSAxOwogCX0KIApAQCAtNTE0LDcgKzUyMCw4IEBACiAJCUJVR19PTihyZXQpOwogCX0KIAotCXJldHVybiByZXQ7CisJZ290byBvdXQ7CisKIGVycm9yOgogCS8qIHJvbGxiYWNrIHBnZGF0IGFsbG9jYXRpb24gYW5kIG90aGVycyAqLwogCWlmIChuZXdfcGdkYXQpCkBAIC01MjIsNiArNTI5LDggQEAKIAlpZiAocmVzKQogCQlyZWxlYXNlX21lbW9yeV9yZXNvdXJjZShyZXMpOwogCitvdXQ6CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTsKQEAgLTc1OCw2ICs3NjcsOCBAQAogCWlmICghdGVzdF9wYWdlc19pbl9hX3pvbmUoc3RhcnRfcGZuLCBlbmRfcGZuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlsb2NrX3N5c3RlbV9zbGVlcCgpOworCiAJem9uZSA9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKTsKIAlub2RlID0gem9uZV90b19uaWQoem9uZSk7CiAJbnJfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwpAQCAtNzY1LDcgKzc3Niw3IEBACiAJLyogc2V0IGFib3ZlIHJhbmdlIGFzIGlzb2xhdGVkICovCiAJcmV0ID0gc3RhcnRfaXNvbGF0ZV9wYWdlX3JhbmdlKHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBvdXQ7CiAKIAlhcmcuc3RhcnRfcGZuID0gc3RhcnRfcGZuOwogCWFyZy5ucl9wYWdlcyA9IG5yX3BhZ2VzOwpAQCAtODQzLDYgKzg1NCw3IEBACiAJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAogCW1lbW9yeV9ub3RpZnkoTUVNX09GRkxJTkUsICZhcmcpOworCXVubG9ja19zeXN0ZW1fc2xlZXAoKTsKIAlyZXR1cm4gMDsKIAogZmFpbGVkX3JlbW92YWw6CkBAIC04NTIsNiArODY0LDggQEAKIAkvKiBwdXNoYmFjayB0byBmcmVlIGFyZWEgKi8KIAl1bmRvX2lzb2xhdGVfcGFnZV9yYW5nZShzdGFydF9wZm4sIGVuZF9wZm4pOwogCitvdXQ6CisJdW5sb2NrX3N5c3RlbV9zbGVlcCgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggN2RkOWQ5Zi4uNDU0NWQ1OSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAKIAkJZXJyID0gbWlncmF0ZV9wcmVwKCk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOworCQkJZ290byBtcG9sX291dDsKIAl9CiAJewogCQlOT0RFTUFTS19TQ1JBVENIKHNjcmF0Y2gpOwpAQCAtMTAzOSwxMCArMTAzOSw5IEBACiAJCQllcnIgPSAtRU5PTUVNOwogCQlOT0RFTUFTS19TQ1JBVENIX0ZSRUUoc2NyYXRjaCk7CiAJfQotCWlmIChlcnIpIHsKLQkJbXBvbF9wdXQobmV3KTsKLQkJcmV0dXJuIGVycjsKLQl9CisJaWYgKGVycikKKwkJZ290byBtcG9sX291dDsKKwogCXZtYSA9IGNoZWNrX3JhbmdlKG1tLCBzdGFydCwgZW5kLCBubWFzaywKIAkJCSAgZmxhZ3MgfCBNUE9MX01GX0lOVkVSVCwgJnBhZ2VsaXN0KTsKIApAQCAtMTA1OCw5ICsxMDU3LDExIEBACiAKIAkJaWYgKCFlcnIgJiYgbnJfZmFpbGVkICYmIChmbGFncyAmIE1QT0xfTUZfU1RSSUNUKSkKIAkJCWVyciA9IC1FSU87Ci0JfQorCX0gZWxzZQorCQlwdXRiYWNrX2xydV9wYWdlcygmcGFnZWxpc3QpOwogCiAJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisgbXBvbF9vdXQ6CiAJbXBvbF9wdXQobmV3KTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDFhNGJmNDguLjdkYmNiMjIgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXN0cnVjdCBwYWdlICpuZXdwYWdlID0gZ2V0X25ld19wYWdlKHBhZ2UsIHByaXZhdGUsICZyZXN1bHQpOwogCWludCByY3VfbG9ja2VkID0gMDsKIAlpbnQgY2hhcmdlID0gMDsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBOVUxMOwogCiAJaWYgKCFuZXdwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAyMWQ0MDI5Li43M2Y1ZTRiIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMjgyLDcgKzIyODIsNyBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNwZWNpYWxfbWFwcGluZ192bW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3BlY2lhbF9tYXBwaW5nX3Ztb3BzID0gewogCS5jbG9zZSA9IHNwZWNpYWxfbWFwcGluZ19jbG9zZSwKIAkuZmF1bHQgPSBzcGVjaWFsX21hcHBpbmdfZmF1bHQsCiB9OwpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNTZhNDQ2Zi4uOTg3NmZhMCAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC03OSw3ICs3OSw3IEBACiBzdHJ1Y3QgcmJfcm9vdCBub21tdV9yZWdpb25fdHJlZSA9IFJCX1JPT1Q7CiBERUNMQVJFX1JXU0VNKG5vbW11X3JlZ2lvbl9zZW0pOwogCi1zdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wcyA9IHsKK2NvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBnZW5lcmljX2ZpbGVfdm1fb3BzID0gewogfTsKIAogLyoKQEAgLTgyNiw3ICs4MjYsNyBAQAogCWludCByZXQ7CiAKIAkvKiBkbyB0aGUgc2ltcGxlIGNoZWNrcyBmaXJzdCAqLwotCWlmIChmbGFncyAmIE1BUF9GSVhFRCB8fCBhZGRyKSB7CisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCSAgICAgICAiJWQ6IENhbid0IGRvIGZpeGVkLWFkZHJlc3Mvb3ZlcmxheSBtbWFwIG9mIFJBTVxuIiwKIAkJICAgICAgIGN1cnJlbnQtPnBpZCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQAogCXJldCA9IHZtYS0+dm1fZmlsZS0+Zl9vcC0+bW1hcCh2bWEtPnZtX2ZpbGUsIHZtYSk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXZtYS0+dm1fcmVnaW9uLT52bV90b3AgPSB2bWEtPnZtX3JlZ2lvbi0+dm1fZW5kOwotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHJldCAhPSAtRU5PU1lTKQogCQlyZXR1cm4gcmV0OwpAQCAtMTA1MSw3ICsxMDUxLDggQEAKICAqLwogc3RhdGljIGludCBkb19tbWFwX3ByaXZhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICBzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb24sCi0JCQkgICB1bnNpZ25lZCBsb25nIGxlbikKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgdG90YWwsIHBvaW50LCBuLCBybGVuOwpAQCAtMTA2MiwxMyArMTA2MywxMyBAQAogCSAqIHNoYXJlZCBtYXBwaW5ncyBvbiBkZXZpY2VzIG9yIG1lbW9yeQogCSAqIC0gVk1fTUFZU0hBUkUgd2lsbCBiZSBzZXQgaWYgaXQgbWF5IGF0dGVtcHQgdG8gc2hhcmUKIAkgKi8KLQlpZiAodm1hLT52bV9maWxlKSB7CisJaWYgKGNhcGFiaWxpdGllcyAmIEJESV9DQVBfTUFQX0RJUkVDVCkgewogCQlyZXQgPSB2bWEtPnZtX2ZpbGUtPmZfb3AtPm1tYXAodm1hLT52bV9maWxlLCB2bWEpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCS8qIHNob3VsZG4ndCByZXR1cm4gc3VjY2VzcyBpZiB3ZSdyZSBub3Qgc2hhcmluZyAqLwogCQkJQlVHX09OKCEodm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFKSk7CiAJCQl2bWEtPnZtX3JlZ2lvbi0+dm1fdG9wID0gdm1hLT52bV9yZWdpb24tPnZtX2VuZDsKLQkJCXJldHVybiByZXQ7CisJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAocmV0ICE9IC1FTk9TWVMpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMTE4MSw5ICsxMTgyLDYgQEAKIAogCWtlbnRlcigiLCVseCwlbHgsJWx4LCVseCwlbHgiLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CiAKLQlpZiAoIShmbGFncyAmIE1BUF9GSVhFRCkpCi0JCWFkZHIgPSByb3VuZF9oaW50X3RvX21pbihhZGRyKTsKLQogCS8qIGRlY2lkZSB3aGV0aGVyIHdlIHNob3VsZCBhdHRlbXB0IHRoZSBtYXBwaW5nLCBhbmQgaWYgc28gd2hhdCBzb3J0IG9mCiAJICogbWFwcGluZyAqLwogCXJldCA9IHZhbGlkYXRlX21tYXBfcmVxdWVzdChmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZiwKQEAgLTExOTMsNiArMTE5MSw5IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogd2UgaWdub3JlIHRoZSBhZGRyZXNzIGhpbnQgKi8KKwlhZGRyID0gMDsKKwogCS8qIHdlJ3ZlIGRldGVybWluZWQgdGhhdCB3ZSBjYW4gbWFrZSB0aGUgbWFwcGluZywgbm93IHRyYW5zbGF0ZSB3aGF0IHdlCiAJICogbm93IGtub3cgaW50byBWTUEgZmxhZ3MgKi8KIAl2bV9mbGFncyA9IGRldGVybWluZV92bV9mbGFncyhmaWxlLCBwcm90LCBmbGFncywgY2FwYWJpbGl0aWVzKTsKQEAgLTEzMDYsNyArMTMwNyw3IEBACiAJCSAqIC0gdGhpcyBpcyB0aGUgaG9vayBmb3IgcXVhc2ktbWVtb3J5IGNoYXJhY3RlciBkZXZpY2VzIHRvCiAJCSAqICAgdGVsbCB1cyB0aGUgbG9jYXRpb24gb2YgYSBzaGFyZWQgbWFwcGluZwogCQkgKi8KLQkJaWYgKGZpbGUgJiYgZmlsZS0+Zl9vcC0+Z2V0X3VubWFwcGVkX2FyZWEpIHsKKwkJaWYgKGNhcGFiaWxpdGllcyAmIEJESV9DQVBfTUFQX0RJUkVDVCkgewogCQkJYWRkciA9IGZpbGUtPmZfb3AtPmdldF91bm1hcHBlZF9hcmVhKGZpbGUsIGFkZHIsIGxlbiwKIAkJCQkJCQkgICAgIHBnb2ZmLCBmbGFncyk7CiAJCQlpZiAoSVNfRVJSKCh2b2lkICopIGFkZHIpKSB7CkBAIC0xMzMwLDE1ICsxMzMxLDE3IEBACiAJfQogCiAJdm1hLT52bV9yZWdpb24gPSByZWdpb247Ci0JYWRkX25vbW11X3JlZ2lvbihyZWdpb24pOwogCi0JLyogc2V0IHVwIHRoZSBtYXBwaW5nICovCisJLyogc2V0IHVwIHRoZSBtYXBwaW5nCisJICogLSB0aGUgcmVnaW9uIGlzIGZpbGxlZCBpbiBpZiBCRElfQ0FQX01BUF9ESVJFQ1QgaXMgc3RpbGwgc2V0CisJICovCiAJaWYgKGZpbGUgJiYgdm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkKIAkJcmV0ID0gZG9fbW1hcF9zaGFyZWRfZmlsZSh2bWEpOwogCWVsc2UKLQkJcmV0ID0gZG9fbW1hcF9wcml2YXRlKHZtYSwgcmVnaW9uLCBsZW4pOworCQlyZXQgPSBkb19tbWFwX3ByaXZhdGUodm1hLCByZWdpb24sIGxlbiwgY2FwYWJpbGl0aWVzKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcl9wdXRfcmVnaW9uOworCQlnb3RvIGVycm9yX2p1c3RfZnJlZTsKKwlhZGRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7CiAKIAkvKiBva2F5Li4uIHdlIGhhdmUgYSBtYXBwaW5nOyBub3cgd2UgaGF2ZSB0byByZWdpc3RlciBpdCAqLwogCXJlc3VsdCA9IHZtYS0+dm1fc3RhcnQ7CkBAIC0xMzU2LDI1ICsxMzU5LDE0IEBACiAJa2xlYXZlKCIgPSAlbHgiLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiAKLWVycm9yX3B1dF9yZWdpb246Ci0JX19wdXRfbm9tbXVfcmVnaW9uKHJlZ2lvbik7Ci0JaWYgKHZtYSkgewotCQlpZiAodm1hLT52bV9maWxlKSB7Ci0JCQlmcHV0KHZtYS0+dm1fZmlsZSk7Ci0JCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCi0JCQkJcmVtb3ZlZF9leGVfZmlsZV92bWEodm1hLT52bV9tbSk7Ci0JCX0KLQkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwotCX0KLQlrbGVhdmUoIiA9ICVkIFtwcl0iLCByZXQpOwotCXJldHVybiByZXQ7Ci0KIGVycm9yX2p1c3RfZnJlZToKIAl1cF93cml0ZSgmbm9tbXVfcmVnaW9uX3NlbSk7CiBlcnJvcjoKLQlmcHV0KHJlZ2lvbi0+dm1fZmlsZSk7CisJaWYgKHJlZ2lvbi0+dm1fZmlsZSkKKwkJZnB1dChyZWdpb24tPnZtX2ZpbGUpOwogCWttZW1fY2FjaGVfZnJlZSh2bV9yZWdpb25famFyLCByZWdpb24pOwotCWZwdXQodm1hLT52bV9maWxlKTsKKwlpZiAodm1hLT52bV9maWxlKQorCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDVVRBQkxFKQogCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYSh2bWEtPnZtX21tKTsKIAlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCBkOTk2NjRlLi4yYzVkNzkyIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTQ0LDE4ICs0NCwyMSBAQAogLyoKICAqIFdoZW4gYmFsYW5jZV9kaXJ0eV9wYWdlcyBkZWNpZGVzIHRoYXQgdGhlIGNhbGxlciBuZWVkcyB0byBwZXJmb3JtIHNvbWUKICAqIG5vbi1iYWNrZ3JvdW5kIHdyaXRlYmFjaywgdGhpcyBpcyBob3cgbWFueSBwYWdlcyBpdCB3aWxsIGF0dGVtcHQgdG8gd3JpdGUuCi0gKiBJdCBzaG91bGQgYmUgc29tZXdoYXQgbGFyZ2VyIHRoYW4gUkFURUxJTUlUX1BBR0VTIHRvIGVuc3VyZSB0aGF0IHJlYXNvbmFibHkKKyAqIEl0IHNob3VsZCBiZSBzb21ld2hhdCBsYXJnZXIgdGhhbiBkaXJ0aWVkIHBhZ2VzIHRvIGVuc3VyZSB0aGF0IHJlYXNvbmFibHkKICAqIGxhcmdlIGFtb3VudHMgb2YgSS9PIGFyZSBzdWJtaXR0ZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyBzeW5jX3dyaXRlYmFja19wYWdlcyh2b2lkKQorc3RhdGljIGlubGluZSBsb25nIHN5bmNfd3JpdGViYWNrX3BhZ2VzKHVuc2lnbmVkIGxvbmcgZGlydGllZCkKIHsKLQlyZXR1cm4gcmF0ZWxpbWl0X3BhZ2VzICsgcmF0ZWxpbWl0X3BhZ2VzIC8gMjsKKwlpZiAoZGlydGllZCA8IHJhdGVsaW1pdF9wYWdlcykKKwkJZGlydGllZCA9IHJhdGVsaW1pdF9wYWdlczsKKworCXJldHVybiBkaXJ0aWVkICsgZGlydGllZCAvIDI7CiB9CiAKIC8qIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZXhwb3J0ZWQgdmlhIC9wcm9jL3N5cy92bSAqLwogCiAvKgotICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKKyAqIFN0YXJ0IGJhY2tncm91bmQgd3JpdGViYWNrICh2aWEgd3JpdGViYWNrIHRocmVhZHMpIGF0IHRoaXMgcGVyY2VudGFnZQogICovCiBpbnQgZGlydHlfYmFja2dyb3VuZF9yYXRpbyA9IDEwOwogCkBAIC00NzQsMTAgKzQ3NywxMSBAQAogICogYmFsYW5jZV9kaXJ0eV9wYWdlcygpIG11c3QgYmUgY2FsbGVkIGJ5IHByb2Nlc3NlcyB3aGljaCBhcmUgZ2VuZXJhdGluZyBkaXJ0eQogICogZGF0YS4gIEl0IGxvb2tzIGF0IHRoZSBudW1iZXIgb2YgZGlydHkgcGFnZXMgaW4gdGhlIG1hY2hpbmUgYW5kIHdpbGwgZm9yY2UKICAqIHRoZSBjYWxsZXIgdG8gcGVyZm9ybSB3cml0ZWJhY2sgaWYgdGhlIHN5c3RlbSBpcyBvdmVyIGB2bV9kaXJ0eV9yYXRpbycuCi0gKiBJZiB3ZSdyZSBvdmVyIGBiYWNrZ3JvdW5kX3RocmVzaCcgdGhlbiBwZGZsdXNoIGlzIHdva2VuIHRvIHBlcmZvcm0gc29tZQotICogd3JpdGVvdXQuCisgKiBJZiB3ZSdyZSBvdmVyIGBiYWNrZ3JvdW5kX3RocmVzaCcgdGhlbiB0aGUgd3JpdGViYWNrIHRocmVhZHMgYXJlIHdva2VuIHRvCisgKiBwZXJmb3JtIHNvbWUgd3JpdGVvdXQuCiAgKi8KLXN0YXRpYyB2b2lkIGJhbGFuY2VfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCitzdGF0aWMgdm9pZCBiYWxhbmNlX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCXVuc2lnbmVkIGxvbmcgd3JpdGVfY2h1bmspCiB7CiAJbG9uZyBucl9yZWNsYWltYWJsZSwgYmRpX25yX3JlY2xhaW1hYmxlOwogCWxvbmcgbnJfd3JpdGViYWNrLCBiZGlfbnJfd3JpdGViYWNrOwpAQCAtNDg1LDcgKzQ4OSw2IEBACiAJdW5zaWduZWQgbG9uZyBkaXJ0eV90aHJlc2g7CiAJdW5zaWduZWQgbG9uZyBiZGlfdGhyZXNoOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfd3JpdHRlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyB3cml0ZV9jaHVuayA9IHN5bmNfd3JpdGViYWNrX3BhZ2VzKCk7CiAJdW5zaWduZWQgbG9uZyBwYXVzZSA9IDE7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKQEAgLTU2Myw3ICs1NjYsOCBAQAogCQlpZiAocGFnZXNfd3JpdHRlbiA+PSB3cml0ZV9jaHVuaykKIAkJCWJyZWFrOwkJLyogV2UndmUgZG9uZSBvdXIgZHV0eSAqLwogCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShwYXVzZSk7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJaW9fc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CiAKIAkJLyoKIAkJICogSW5jcmVhc2UgdGhlIGRlbGF5IGZvciBlYWNoIGxvb3AsIHVwIHRvIG91ciBwcmV2aW91cwpAQCAtNTc5LDcgKzU4Myw3IEBACiAJCWJkaS0+ZGlydHlfZXhjZWVkZWQgPSAwOwogCiAJaWYgKHdyaXRlYmFja19pbl9wcm9ncmVzcyhiZGkpKQotCQlyZXR1cm47CQkvKiBwZGZsdXNoIGlzIGFscmVhZHkgd29ya2luZyB0aGlzIHF1ZXVlICovCisJCXJldHVybjsKIAogCS8qCiAJICogSW4gbGFwdG9wIG1vZGUsIHdlIHdhaXQgdW50aWwgaGl0dGluZyB0aGUgaGlnaGVyIHRocmVzaG9sZCBiZWZvcmUKQEAgLTU5MCwxMCArNTk0LDEwIEBACiAJICogYmFja2dyb3VuZF90aHJlc2gsIHRvIGtlZXAgdGhlIGFtb3VudCBvZiBkaXJ0eSBtZW1vcnkgbG93LgogCSAqLwogCWlmICgobGFwdG9wX21vZGUgJiYgcGFnZXNfd3JpdHRlbikgfHwKLQkgICAgKCFsYXB0b3BfbW9kZSAmJiAoKG5yX3dyaXRlYmFjayA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpCi0JCQkJCSAgKyBnbG9iYWxfcGFnZV9zdGF0ZShOUl9VTlNUQUJMRV9ORlMpKQorCSAgICAoIWxhcHRvcF9tb2RlICYmICgoZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSkKKwkJCSAgICAgICArIGdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykpCiAJCQkJCSAgPiBiYWNrZ3JvdW5kX3RocmVzaCkpKQotCQliZGlfc3RhcnRfd3JpdGViYWNrKGJkaSwgbnJfd3JpdGViYWNrKTsKKwkJYmRpX3N0YXJ0X3dyaXRlYmFjayhiZGksIE5VTEwsIDApOwogfQogCiB2b2lkIHNldF9wYWdlX2RpcnR5X2JhbGFuY2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBwYWdlX21rd3JpdGUpCkBAIC02NDAsOSArNjQ0LDEwIEBACiAJcCA9ICAmX19nZXRfY3B1X3ZhcihiZHBfcmF0ZWxpbWl0cyk7CiAJKnAgKz0gbnJfcGFnZXNfZGlydGllZDsKIAlpZiAodW5saWtlbHkoKnAgPj0gcmF0ZWxpbWl0KSkgeworCQlyYXRlbGltaXQgPSBzeW5jX3dyaXRlYmFja19wYWdlcygqcCk7CiAJCSpwID0gMDsKIAkJcHJlZW1wdF9lbmFibGUoKTsKLQkJYmFsYW5jZV9kaXJ0eV9wYWdlcyhtYXBwaW5nKTsKKwkJYmFsYW5jZV9kaXJ0eV9wYWdlcyhtYXBwaW5nLCByYXRlbGltaXQpOwogCQlyZXR1cm47CiAJfQogCXByZWVtcHRfZW5hYmxlKCk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYmY3MjA1NS4uMmJjMmFjNiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMTc2OSw3ICsxNzY5LDcgQEAKIAkJICogU2VlIGFsc28gY3B1c2V0X3pvbmVfYWxsb3dlZCgpIGNvbW1lbnQgaW4ga2VybmVsL2NwdXNldC5jLgogCQkgKi8KIAkJYWxsb2NfZmxhZ3MgJj0gfkFMTE9DX0NQVVNFVDsKLQl9IGVsc2UgaWYgKHVubGlrZWx5KHJ0X3Rhc2socCkpKQorCX0gZWxzZSBpZiAodW5saWtlbHkocnRfdGFzayhwKSkgJiYgIWluX2ludGVycnVwdCgpKQogCQlhbGxvY19mbGFncyB8PSBBTExPQ19IQVJERVI7CiAKIAlpZiAobGlrZWx5KCEoZ2ZwX21hc2sgJiBfX0dGUF9OT01FTUFMTE9DKSkpIHsKQEAgLTE4MTcsOSArMTgxNyw5IEBACiAJaWYgKE5VTUFfQlVJTEQgJiYgKGdmcF9tYXNrICYgR0ZQX1RISVNOT0RFKSA9PSBHRlBfVEhJU05PREUpCiAJCWdvdG8gbm9wYWdlOwogCityZXN0YXJ0OgogCXdha2VfYWxsX2tzd2FwZChvcmRlciwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCk7CiAKLXJlc3RhcnQ6CiAJLyoKIAkgKiBPSywgd2UncmUgYmVsb3cgdGhlIGtzd2FwZCB3YXRlcm1hcmsgYW5kIGhhdmUga2lja2VkIGJhY2tncm91bmQKIAkgKiByZWNsYWltLiBOb3cgdGhpbmdzIGdldCBtb3JlIGNvbXBsZXgsIHNvIHNldCB1cCBhbGxvY19mbGFncyBhY2NvcmRpbmcKQEAgLTIxODMsNyArMjE4Myw3IEBACiAJcHJpbnRrKCJhY3RpdmVfYW5vbjolbHUgaW5hY3RpdmVfYW5vbjolbHUgaXNvbGF0ZWRfYW5vbjolbHVcbiIKIAkJIiBhY3RpdmVfZmlsZTolbHUgaW5hY3RpdmVfZmlsZTolbHUgaXNvbGF0ZWRfZmlsZTolbHVcbiIKIAkJIiB1bmV2aWN0YWJsZTolbHUiCi0JCSIgZGlydHk6JWx1IHdyaXRlYmFjazolbHUgdW5zdGFibGU6JWx1IGJ1ZmZlcjolbHVcbiIKKwkJIiBkaXJ0eTolbHUgd3JpdGViYWNrOiVsdSB1bnN0YWJsZTolbHVcbiIKIAkJIiBmcmVlOiVsdSBzbGFiX3JlY2xhaW1hYmxlOiVsdSBzbGFiX3VucmVjbGFpbWFibGU6JWx1XG4iCiAJCSIgbWFwcGVkOiVsdSBzaG1lbTolbHUgcGFnZXRhYmxlczolbHUgYm91bmNlOiVsdVxuIiwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQUNUSVZFX0FOT04pLApAQCAtMjE5Niw3ICsyMTk2LDYgQEAKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfRklMRV9ESVJUWSksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1dSSVRFQkFDSyksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUyksCi0JCW5yX2Jsb2NrZGV2X3BhZ2VzKCksCiAJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZSRUVfUEFHRVMpLAogCQlnbG9iYWxfcGFnZV9zdGF0ZShOUl9TTEFCX1JFQ0xBSU1BQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfU0xBQl9VTlJFQ0xBSU1BQkxFKSwKZGlmZiAtLWdpdCBhL21tL3BlcmNwdS5jIGIvbW0vcGVyY3B1LmMKaW5kZXggNDNkOGNhYy4uNWFkZmMyNiAxMDA2NDQKLS0tIGEvbW0vcGVyY3B1LmMKKysrIGIvbW0vcGVyY3B1LmMKQEAgLTE1Myw3ICsxNTMsMTAgQEAKICAqCiAgKiBEdXJpbmcgYWxsb2NhdGlvbiwgcGNwdV9hbGxvY19tdXRleCBpcyBrZXB0IGxvY2tlZCBhbGwgdGhlIHRpbWUgYW5kCiAgKiBwY3B1X2xvY2sgaXMgZ3JhYmJlZCBhbmQgcmVsZWFzZWQgYXMgbmVjZXNzYXJ5LiAgQWxsIGFjdHVhbCBtZW1vcnkKLSAqIGFsbG9jYXRpb25zIGFyZSBkb25lIHVzaW5nIEdGUF9LRVJORUwgd2l0aCBwY3B1X2xvY2sgcmVsZWFzZWQuCisgKiBhbGxvY2F0aW9ucyBhcmUgZG9uZSB1c2luZyBHRlBfS0VSTkVMIHdpdGggcGNwdV9sb2NrIHJlbGVhc2VkLiAgSW4KKyAqIGdlbmVyYWwsIHBlcmNwdSBtZW1vcnkgY2FuJ3QgYmUgYWxsb2NhdGVkIHdpdGggaXJxIG9mZiBidXQKKyAqIGlycXNhdmUvcmVzdG9yZSBhcmUgc3RpbGwgdXNlZCBpbiBhbGxvYyBwYXRoIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQKKyAqIGZyb20gZWFybHkgaW5pdCBwYXRoIC0gc2NoZWRfaW5pdCgpIHNwZWNpZmljYWxseS4KICAqCiAgKiBGcmVlIHBhdGggYWNjZXNzZXMgYW5kIGFsdGVycyBvbmx5IHRoZSBpbmRleCBkYXRhIHN0cnVjdHVyZXMsIHNvIGl0CiAgKiBjYW4gYmUgc2FmZWx5IGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0LiAgV2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUKQEAgLTM1Miw2MiArMzU1LDg2IEBACiB9CiAKIC8qKgotICogcGNwdV9leHRlbmRfYXJlYV9tYXAgLSBleHRlbmQgYXJlYSBtYXAgZm9yIGFsbG9jYXRpb24KLSAqIEBjaHVuazogdGFyZ2V0IGNodW5rCisgKiBwY3B1X25lZWRfdG9fZXh0ZW5kIC0gZGV0ZXJtaW5lIHdoZXRoZXIgY2h1bmsgYXJlYSBtYXAgbmVlZHMgdG8gYmUgZXh0ZW5kZWQKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKICAqCi0gKiBFeHRlbmQgYXJlYSBtYXAgb2YgQGNodW5rIHNvIHRoYXQgaXQgY2FuIGFjY29tb2RhdGUgYW4gYWxsb2NhdGlvbi4KLSAqIEEgc2luZ2xlIGFsbG9jYXRpb24gY2FuIHNwbGl0IGFuIGFyZWEgaW50byB0aHJlZSBhcmVhcywgc28gdGhpcwotICogZnVuY3Rpb24gbWFrZXMgc3VyZSB0aGF0IEBjaHVuay0+bWFwIGhhcyBhdCBsZWFzdCB0d28gZXh0cmEgc2xvdHMuCisgKiBEZXRlcm1pbmUgd2hldGhlciBhcmVhIG1hcCBvZiBAY2h1bmsgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgdG8KKyAqIGFjY29tb2RhdGUgYSBuZXcgYWxsb2NhdGlvbi4KICAqCiAgKiBDT05URVhUOgotICogcGNwdV9hbGxvY19tdXRleCwgcGNwdV9sb2NrLiAgcGNwdV9sb2NrIGlzIHJlbGVhc2VkIGFuZCByZWFjcXVpcmVkCi0gKiBpZiBhcmVhIG1hcCBpcyBleHRlbmRlZC4KKyAqIHBjcHVfbG9jay4KICAqCiAgKiBSRVRVUk5TOgotICogMCBpZiBub29wLCAxIGlmIHN1Y2Nlc3NmdWxseSBleHRlbmRlZCwgLWVycm5vIG9uIGZhaWx1cmUuCisgKiBOZXcgdGFyZ2V0IG1hcCBhbGxvY2F0aW9uIGxlbmd0aCBpZiBleHRlbnNpb24gaXMgbmVjZXNzYXJ5LCAwCisgKiBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBpbnQgcGNwdV9leHRlbmRfYXJlYV9tYXAoc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rKQorc3RhdGljIGludCBwY3B1X25lZWRfdG9fZXh0ZW5kKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaykKIHsKIAlpbnQgbmV3X2FsbG9jOwotCWludCAqbmV3OwotCXNpemVfdCBzaXplOwogCi0JLyogaGFzIGVub3VnaD8gKi8KIAlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBjaHVuay0+bWFwX3VzZWQgKyAyKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKLQogCW5ld19hbGxvYyA9IFBDUFVfREZMX01BUF9BTExPQzsKIAl3aGlsZSAobmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMikKIAkJbmV3X2FsbG9jICo9IDI7CiAKLQluZXcgPSBwY3B1X21lbV9hbGxvYyhuZXdfYWxsb2MgKiBzaXplb2YobmV3WzBdKSk7Ci0JaWYgKCFuZXcpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlyZXR1cm4gbmV3X2FsbG9jOworfQorCisvKioKKyAqIHBjcHVfZXh0ZW5kX2FyZWFfbWFwIC0gZXh0ZW5kIGFyZWEgbWFwIG9mIGEgY2h1bmsKKyAqIEBjaHVuazogY2h1bmsgb2YgaW50ZXJlc3QKKyAqIEBuZXdfYWxsb2M6IG5ldyB0YXJnZXQgYWxsb2NhdGlvbiBsZW5ndGggb2YgdGhlIGFyZWEgbWFwCisgKgorICogRXh0ZW5kIGFyZWEgbWFwIG9mIEBjaHVuayB0byBoYXZlIEBuZXdfYWxsb2MgZW50cmllcy4KKyAqCisgKiBDT05URVhUOgorICogRG9lcyBHRlBfS0VSTkVMIGFsbG9jYXRpb24uICBHcmFicyBhbmQgcmVsZWFzZXMgcGNwdV9sb2NrLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHBjcHVfZXh0ZW5kX2FyZWFfbWFwKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG5ld19hbGxvYykKK3sKKwlpbnQgKm9sZCA9IE5VTEwsICpuZXcgPSBOVUxMOworCXNpemVfdCBvbGRfc2l6ZSA9IDAsIG5ld19zaXplID0gbmV3X2FsbG9jICogc2l6ZW9mKG5ld1swXSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW5ldyA9IHBjcHVfbWVtX2FsbG9jKG5ld19zaXplKTsKKwlpZiAoIW5ldykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCi0JLyoKLQkgKiBBY3F1aXJlIHBjcHVfbG9jayBhbmQgc3dpdGNoIHRvIG5ldyBhcmVhIG1hcC4gIE9ubHkgZnJlZQotCSAqIGNvdWxkIGhhdmUgaGFwcGVuZWQgaW5iZXR3ZWVuLCBzbyBtYXBfdXNlZCBjb3VsZG4ndCBoYXZlCi0JICogZ3Jvd24uCi0JICovCi0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKLQlCVUdfT04obmV3X2FsbG9jIDwgY2h1bmstPm1hcF91c2VkICsgMik7CisJLyogYWNxdWlyZSBwY3B1X2xvY2sgYW5kIHN3aXRjaCB0byBuZXcgYXJlYSBtYXAgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKLQlzaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKLQltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBzaXplKTsKKwlpZiAobmV3X2FsbG9jIDw9IGNodW5rLT5tYXBfYWxsb2MpCisJCWdvdG8gb3V0X3VubG9jazsKKworCW9sZF9zaXplID0gY2h1bmstPm1hcF9hbGxvYyAqIHNpemVvZihjaHVuay0+bWFwWzBdKTsKKwltZW1jcHkobmV3LCBjaHVuay0+bWFwLCBvbGRfc2l6ZSk7CiAKIAkvKgogCSAqIG1hcF9hbGxvYyA8IFBDUFVfREZMX01BUF9BTExPQyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2h1bmsgaXMKIAkgKiBvbmUgb2YgdGhlIGZpcnN0IGNodW5rcyBhbmQgc3RpbGwgdXNpbmcgc3RhdGljIG1hcC4KIAkgKi8KIAlpZiAoY2h1bmstPm1hcF9hbGxvYyA+PSBQQ1BVX0RGTF9NQVBfQUxMT0MpCi0JCXBjcHVfbWVtX2ZyZWUoY2h1bmstPm1hcCwgc2l6ZSk7CisJCW9sZCA9IGNodW5rLT5tYXA7CiAKIAljaHVuay0+bWFwX2FsbG9jID0gbmV3X2FsbG9jOwogCWNodW5rLT5tYXAgPSBuZXc7CisJbmV3ID0gTlVMTDsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKworCS8qCisJICogcGNwdV9tZW1fZnJlZSgpIG1pZ2h0IGVuZCB1cCBjYWxsaW5nIHZmcmVlKCkgd2hpY2ggdXNlcworCSAqIElSUS11bnNhZmUgbG9jayBhbmQgdGh1cyBjYW4ndCBiZSBjYWxsZWQgdW5kZXIgcGNwdV9sb2NrLgorCSAqLworCXBjcHVfbWVtX2ZyZWUob2xkLCBvbGRfc2l6ZSk7CisJcGNwdV9tZW1fZnJlZShuZXcsIG5ld19zaXplKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0xMDQzLDggKzEwNzAsMTEgQEAKICAqLwogc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKIHsKKwlzdGF0aWMgaW50IHdhcm5fbGltaXQgPSAxMDsKIAlzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bms7Ci0JaW50IHNsb3QsIG9mZjsKKwljb25zdCBjaGFyICplcnI7CisJaW50IHNsb3QsIG9mZiwgbmV3X2FsbG9jOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkoIXNpemUgfHwgc2l6ZSA+IFBDUFVfTUlOX1VOSVRfU0laRSB8fCBhbGlnbiA+IFBBR0VfU0laRSkpIHsKIAkJV0FSTih0cnVlLCAiaWxsZWdhbCBzaXplICglenUpIG9yIGFsaWduICglenUpIGZvciAiCkBAIC0xMDUzLDE3ICsxMDgzLDMxIEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcGNwdV9hbGxvY19tdXRleCk7Ci0Jc3Bpbl9sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAkvKiBzZXJ2ZSByZXNlcnZlZCBhbGxvY2F0aW9ucyBmcm9tIHRoZSByZXNlcnZlZCBjaHVuayBpZiBhdmFpbGFibGUgKi8KIAlpZiAocmVzZXJ2ZWQgJiYgcGNwdV9yZXNlcnZlZF9jaHVuaykgewogCQljaHVuayA9IHBjcHVfcmVzZXJ2ZWRfY2h1bms7Ci0JCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50IHx8Ci0JCSAgICBwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaykgPCAwKQorCisJCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50KSB7CisJCQllcnIgPSAiYWxsb2MgZnJvbSByZXNlcnZlZCBjaHVuayBmYWlsZWQiOwogCQkJZ290byBmYWlsX3VubG9jazsKKwkJfQorCisJCXdoaWxlICgobmV3X2FsbG9jID0gcGNwdV9uZWVkX3RvX2V4dGVuZChjaHVuaykpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJCWlmIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaywgbmV3X2FsbG9jKSA8IDApIHsKKwkJCQllcnIgPSAiZmFpbGVkIHRvIGV4dGVuZCBhcmVhIG1hcCBvZiByZXNlcnZlZCBjaHVuayI7CisJCQkJZ290byBmYWlsX3VubG9ja19tdXRleDsKKwkJCX0KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwY3B1X2xvY2ssIGZsYWdzKTsKKwkJfQorCiAJCW9mZiA9IHBjcHVfYWxsb2NfYXJlYShjaHVuaywgc2l6ZSwgYWxpZ24pOwogCQlpZiAob2ZmID49IDApCiAJCQlnb3RvIGFyZWFfZm91bmQ7CisKKwkJZXJyID0gImFsbG9jIGZyb20gcmVzZXJ2ZWQgY2h1bmsgZmFpbGVkIjsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKQEAgLTEwNzQsMTMgKzExMTgsMjAgQEAKIAkJCWlmIChzaXplID4gY2h1bmstPmNvbnRpZ19oaW50KQogCQkJCWNvbnRpbnVlOwogCi0JCQlzd2l0Y2ggKHBjcHVfZXh0ZW5kX2FyZWFfbWFwKGNodW5rKSkgewotCQkJY2FzZSAwOgotCQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWdvdG8gcmVzdGFydDsJLyogcGNwdV9sb2NrIGRyb3BwZWQsIHJlc3RhcnQgKi8KLQkJCWRlZmF1bHQ6Ci0JCQkJZ290byBmYWlsX3VubG9jazsKKwkJCW5ld19hbGxvYyA9IHBjcHVfbmVlZF90b19leHRlbmQoY2h1bmspOworCQkJaWYgKG5ld19hbGxvYykgeworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOworCQkJCWlmIChwY3B1X2V4dGVuZF9hcmVhX21hcChjaHVuaywKKwkJCQkJCQkgbmV3X2FsbG9jKSA8IDApIHsKKwkJCQkJZXJyID0gImZhaWxlZCB0byBleHRlbmQgYXJlYSBtYXAiOworCQkJCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCQkJCX0KKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CisJCQkJLyoKKwkJCQkgKiBwY3B1X2xvY2sgaGFzIGJlZW4gZHJvcHBlZCwgbmVlZCB0bworCQkJCSAqIHJlc3RhcnQgY3B1X3Nsb3QgbGlzdCB3YWxraW5nLgorCQkJCSAqLworCQkJCWdvdG8gcmVzdGFydDsKIAkJCX0KIAogCQkJb2ZmID0gcGNwdV9hbGxvY19hcmVhKGNodW5rLCBzaXplLCBhbGlnbik7CkBAIC0xMDkwLDIzICsxMTQxLDI2IEBACiAJfQogCiAJLyogaG1tbS4uLiBubyBzcGFjZSBsZWZ0LCBjcmVhdGUgYSBuZXcgY2h1bmsgKi8KLQlzcGluX3VubG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAKIAljaHVuayA9IGFsbG9jX3BjcHVfY2h1bmsoKTsKLQlpZiAoIWNodW5rKQorCWlmICghY2h1bmspIHsKKwkJZXJyID0gImZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgY2h1bmsiOwogCQlnb3RvIGZhaWxfdW5sb2NrX211dGV4OworCX0KIAotCXNwaW5fbG9ja19pcnEoJnBjcHVfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCXBjcHVfY2h1bmtfcmVsb2NhdGUoY2h1bmssIC0xKTsKIAlnb3RvIHJlc3RhcnQ7CiAKIGFyZWFfZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwY3B1X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjcHVfbG9jaywgZmxhZ3MpOwogCiAJLyogcG9wdWxhdGUsIG1hcCBhbmQgY2xlYXIgdGhlIGFyZWEgKi8KIAlpZiAocGNwdV9wb3B1bGF0ZV9jaHVuayhjaHVuaywgb2ZmLCBzaXplKSkgewotCQlzcGluX2xvY2tfaXJxKCZwY3B1X2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNwdV9sb2NrLCBmbGFncyk7CiAJCXBjcHVfZnJlZV9hcmVhKGNodW5rLCBvZmYpOworCQllcnIgPSAiZmFpbGVkIHRvIHBvcHVsYXRlIjsKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKQEAgLTExMTYsOSArMTE3MCwxNiBAQAogCXJldHVybiBfX2FkZHJfdG9fcGNwdV9wdHIoY2h1bmstPmJhc2VfYWRkciArIG9mZik7CiAKIGZhaWxfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycSgmcGNwdV9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY3B1X2xvY2ssIGZsYWdzKTsKIGZhaWxfdW5sb2NrX211dGV4OgogCW11dGV4X3VubG9jaygmcGNwdV9hbGxvY19tdXRleCk7CisJaWYgKHdhcm5fbGltaXQpIHsKKwkJcHJfd2FybmluZygiUEVSQ1BVOiBhbGxvY2F0aW9uIGZhaWxlZCwgc2l6ZT0lenUgYWxpZ249JXp1LCAiCisJCQkgICAiJXNcbiIsIHNpemUsIGFsaWduLCBlcnIpOworCQlkdW1wX3N0YWNrKCk7CisJCWlmICghLS13YXJuX2xpbWl0KQorCQkJcHJfaW5mbygiUEVSQ1BVOiBsaW1pdCByZWFjaGVkLCBkaXNhYmxlIHdhcm5pbmdcbiIpOworCX0KIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMTM0Nyw2ICsxNDA4LDEwIEBACiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7CiAJdW5zaWduZWQgaW50ICpjcHVfbWFwOwogCisJLyogdGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzICovCisJbWVtc2V0KGdyb3VwX21hcCwgMCwgc2l6ZW9mKGdyb3VwX21hcCkpOworCW1lbXNldChncm91cF9jbnQsIDAsIHNpemVvZihncm91cF9tYXApKTsKKwogCS8qCiAJICogRGV0ZXJtaW5lIG1pbl91bml0X3NpemUsIGFsbG9jX3NpemUgYW5kIG1heF91cGEgc3VjaCB0aGF0CiAJICogYWxsb2Nfc2l6ZSBpcyBtdWx0aXBsZSBvZiBhdG9tX3NpemUgYW5kIGlzIHRoZSBzbWFsbGVzdApAQCAtMTU3NCw2ICsxNjM5LDcgQEAKIGludCBfX2luaXQgcGNwdV9zZXR1cF9maXJzdF9jaHVuayhjb25zdCBzdHJ1Y3QgcGNwdV9hbGxvY19pbmZvICphaSwKIAkJCQkgIHZvaWQgKmJhc2VfYWRkcikKIHsKKwlzdGF0aWMgY2hhciBjcHVzX2J1Zls0MDk2XSBfX2luaXRkYXRhOwogCXN0YXRpYyBpbnQgc21hcFsyXSwgZG1hcFsyXTsKIAlzaXplX3QgZHluX3NpemUgPSBhaS0+ZHluX3NpemU7CiAJc2l6ZV90IHNpemVfc3VtID0gYWktPnN0YXRpY19zaXplICsgYWktPnJlc2VydmVkX3NpemUgKyBkeW5fc2l6ZTsKQEAgLTE1ODUsMTcgKzE2NTEsMjYgQEAKIAlpbnQgKnVuaXRfbWFwOwogCWludCBncm91cCwgdW5pdCwgaTsKIAorCWNwdW1hc2tfc2NucHJpbnRmKGNwdXNfYnVmLCBzaXplb2YoY3B1c19idWYpLCBjcHVfcG9zc2libGVfbWFzayk7CisKKyNkZWZpbmUgUENQVV9TRVRVUF9CVUdfT04oY29uZCkJZG8gewkJCQkJXAorCWlmICh1bmxpa2VseShjb25kKSkgewkJCQkJCVwKKwkJcHJfZW1lcmcoIlBFUkNQVTogZmFpbGVkIHRvIGluaXRpYWxpemUsICVzIiwgI2NvbmQpOwlcCisJCXByX2VtZXJnKCJQRVJDUFU6IGNwdV9wb3NzaWJsZV9tYXNrPSVzXG4iLCBjcHVzX2J1Zik7CVwKKwkJcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9FTUVSRywgYWkpOwkJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAJLyogc2FuaXR5IGNoZWNrcyAqLwogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHNtYXApID49IFBDUFVfREZMX01BUF9BTExPQyB8fAogCQkgICAgIEFSUkFZX1NJWkUoZG1hcCkgPj0gUENQVV9ERkxfTUFQX0FMTE9DKTsKLQlCVUdfT04oYWktPm5yX2dyb3VwcyA8PSAwKTsKLQlCVUdfT04oIWFpLT5zdGF0aWNfc2l6ZSk7Ci0JQlVHX09OKCFiYXNlX2FkZHIpOwotCUJVR19PTihhaS0+dW5pdF9zaXplIDwgc2l6ZV9zdW0pOwotCUJVR19PTihhaS0+dW5pdF9zaXplICYgflBBR0VfTUFTSyk7Ci0JQlVHX09OKGFpLT51bml0X3NpemUgPCBQQ1BVX01JTl9VTklUX1NJWkUpOwotCi0JcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9ERUJVRywgYWkpOworCVBDUFVfU0VUVVBfQlVHX09OKGFpLT5ucl9ncm91cHMgPD0gMCk7CisJUENQVV9TRVRVUF9CVUdfT04oIWFpLT5zdGF0aWNfc2l6ZSk7CisJUENQVV9TRVRVUF9CVUdfT04oIWJhc2VfYWRkcik7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSA8IHNpemVfc3VtKTsKKwlQQ1BVX1NFVFVQX0JVR19PTihhaS0+dW5pdF9zaXplICYgflBBR0VfTUFTSyk7CisJUENQVV9TRVRVUF9CVUdfT04oYWktPnVuaXRfc2l6ZSA8IFBDUFVfTUlOX1VOSVRfU0laRSk7CiAKIAkvKiBwcm9jZXNzIGdyb3VwIGluZm9ybWF0aW9uIGFuZCBidWlsZCBjb25maWcgdGFibGVzIGFjY29yZGluZ2x5ICovCiAJZ3JvdXBfb2Zmc2V0cyA9IGFsbG9jX2Jvb3RtZW0oYWktPm5yX2dyb3VwcyAqIHNpemVvZihncm91cF9vZmZzZXRzWzBdKSk7CkBAIC0xNjA0LDcgKzE2NzksNyBAQAogCXVuaXRfb2ZmID0gYWxsb2NfYm9vdG1lbShucl9jcHVfaWRzICogc2l6ZW9mKHVuaXRfb2ZmWzBdKSk7CiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKQotCQl1bml0X21hcFtjcHVdID0gTlJfQ1BVUzsKKwkJdW5pdF9tYXBbY3B1XSA9IFVJTlRfTUFYOwogCXBjcHVfZmlyc3RfdW5pdF9jcHUgPSBOUl9DUFVTOwogCiAJZm9yIChncm91cCA9IDAsIHVuaXQgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyssIHVuaXQgKz0gaSkgewpAQCAtMTYxOCw4ICsxNjkzLDkgQEAKIAkJCWlmIChjcHUgPT0gTlJfQ1BVUykKIAkJCQljb250aW51ZTsKIAotCQkJQlVHX09OKGNwdSA+IG5yX2NwdV9pZHMgfHwgIWNwdV9wb3NzaWJsZShjcHUpKTsKLQkJCUJVR19PTih1bml0X21hcFtjcHVdICE9IE5SX0NQVVMpOworCQkJUENQVV9TRVRVUF9CVUdfT04oY3B1ID4gbnJfY3B1X2lkcyk7CisJCQlQQ1BVX1NFVFVQX0JVR19PTighY3B1X3Bvc3NpYmxlKGNwdSkpOworCQkJUENQVV9TRVRVUF9CVUdfT04odW5pdF9tYXBbY3B1XSAhPSBVSU5UX01BWCk7CiAKIAkJCXVuaXRfbWFwW2NwdV0gPSB1bml0ICsgaTsKIAkJCXVuaXRfb2ZmW2NwdV0gPSBnaS0+YmFzZV9vZmZzZXQgKyBpICogYWktPnVuaXRfc2l6ZTsKQEAgLTE2MzIsNyArMTcwOCwxMSBAQAogCXBjcHVfbnJfdW5pdHMgPSB1bml0OwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKLQkJQlVHX09OKHVuaXRfbWFwW2NwdV0gPT0gTlJfQ1BVUyk7CisJCVBDUFVfU0VUVVBfQlVHX09OKHVuaXRfbWFwW2NwdV0gPT0gVUlOVF9NQVgpOworCisJLyogd2UncmUgZG9uZSBwYXJzaW5nIHRoZSBpbnB1dCwgdW5kZWZpbmUgQlVHIG1hY3JvIGFuZCBkdW1wIGNvbmZpZyAqLworI3VuZGVmIFBDUFVfU0VUVVBfQlVHX09OCisJcGNwdV9kdW1wX2FsbG9jX2luZm8oS0VSTl9JTkZPLCBhaSk7CiAKIAlwY3B1X25yX2dyb3VwcyA9IGFpLT5ucl9ncm91cHM7CiAJcGNwdV9ncm91cF9vZmZzZXRzID0gZ3JvdXBfb2Zmc2V0czsKQEAgLTE3ODIsNyArMTg2Miw3IEBACiAJdm9pZCAqYmFzZSA9ICh2b2lkICopVUxPTkdfTUFYOwogCXZvaWQgKiphcmVhcyA9IE5VTEw7CiAJc3RydWN0IHBjcHVfYWxsb2NfaW5mbyAqYWk7Ci0Jc2l6ZV90IHNpemVfc3VtLCBhcmVhc19zaXplOworCXNpemVfdCBzaXplX3N1bSwgYXJlYXNfc2l6ZSwgbWF4X2Rpc3RhbmNlOwogCWludCBncm91cCwgaSwgcmM7CiAKIAlhaSA9IHBjcHVfYnVpbGRfYWxsb2NfaW5mbyhyZXNlcnZlZF9zaXplLCBkeW5fc2l6ZSwgYXRvbV9zaXplLApAQCAtMTgzMiw4ICsxOTEyLDI1IEBACiAJfQogCiAJLyogYmFzZSBhZGRyZXNzIGlzIG5vdyBrbm93biwgZGV0ZXJtaW5lIGdyb3VwIGJhc2Ugb2Zmc2V0cyAqLwotCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IGFpLT5ucl9ncm91cHM7IGdyb3VwKyspCisJbWF4X2Rpc3RhbmNlID0gMDsKKwlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBhaS0+bnJfZ3JvdXBzOyBncm91cCsrKSB7CiAJCWFpLT5ncm91cHNbZ3JvdXBdLmJhc2Vfb2Zmc2V0ID0gYXJlYXNbZ3JvdXBdIC0gYmFzZTsKKwkJbWF4X2Rpc3RhbmNlID0gbWF4X3Qoc2l6ZV90LCBtYXhfZGlzdGFuY2UsCisJCQkJICAgICBhaS0+Z3JvdXBzW2dyb3VwXS5iYXNlX29mZnNldCk7CisJfQorCW1heF9kaXN0YW5jZSArPSBhaS0+dW5pdF9zaXplOworCisJLyogd2FybiBpZiBtYXhpbXVtIGRpc3RhbmNlIGlzIGZ1cnRoZXIgdGhhbiA3NSUgb2Ygdm1hbGxvYyBzcGFjZSAqLworCWlmIChtYXhfZGlzdGFuY2UgPiAoVk1BTExPQ19FTkQgLSBWTUFMTE9DX1NUQVJUKSAqIDMgLyA0KSB7CisJCXByX3dhcm5pbmcoIlBFUkNQVTogbWF4X2Rpc3RhbmNlPTB4JXp4IHRvbyBsYXJnZSBmb3Igdm1hbGxvYyAiCisJCQkgICAic3BhY2UgMHglbHhcbiIsCisJCQkgICBtYXhfZGlzdGFuY2UsIFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TVEFSVCk7CisjaWZkZWYgQ09ORklHX05FRURfUEVSX0NQVV9QQUdFX0ZJUlNUX0NIVU5LCisJCS8qIGFuZCBmYWlsIGlmIHdlIGhhdmUgZmFsbGJhY2sgKi8KKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworI2VuZGlmCisJfQogCiAJcHJfaW5mbygiUEVSQ1BVOiBFbWJlZGRlZCAlenUgcGFnZXMvY3B1IEAlcCBzJXp1IHIlenUgZCV6dSB1JXp1XG4iLAogCQlQRk5fRE9XTihzaXplX3N1bSksIGJhc2UsIGFpLT5zdGF0aWNfc2l6ZSwgYWktPnJlc2VydmVkX3NpemUsCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMjhhYWZlMi4uZGQ0MzM3MyAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtMjQyLDggKzI0Miw4IEBACiB9CiAKIC8qCi0gKiBBdCB3aGF0IHVzZXIgdmlydHVhbCBhZGRyZXNzIGlzIHBhZ2UgZXhwZWN0ZWQgaW4gdm1hPyBjaGVja2luZyB0aGF0IHRoZQotICogcGFnZSBtYXRjaGVzIHRoZSB2bWE6IGN1cnJlbnRseSBvbmx5IHVzZWQgb24gYW5vbiBwYWdlcywgYnkgdW51c2Vfdm1hOworICogQXQgd2hhdCB1c2VyIHZpcnR1YWwgYWRkcmVzcyBpcyBwYWdlIGV4cGVjdGVkIGluIHZtYT8KKyAqIGNoZWNraW5nIHRoYXQgdGhlIHBhZ2UgbWF0Y2hlcyB0aGUgdm1hLgogICovCiB1bnNpZ25lZCBsb25nIHBhZ2VfYWRkcmVzc19pbl92bWEoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggOTg2MzFjMi4uMzU2ZGQ5OTUgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjE4LDcgKzIxOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKIAkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KQEAgLTEwNDYsOCArMTA0Niw5IEBACiAJICogc3luYyBmcm9tIGV2ZXIgY2FsbGluZyBzaG1lbV93cml0ZXBhZ2U7IGJ1dCBhIHN0YWNraW5nIGZpbGVzeXN0ZW0KIAkgKiBtYXkgdXNlIHRoZSAtPndyaXRlcGFnZSBvZiBpdHMgdW5kZXJseWluZyBmaWxlc3lzdGVtLCBpbiB3aGljaCBjYXNlCiAJICogdG1wZnMgc2hvdWxkIHdyaXRlIG91dCB0byBzd2FwIG9ubHkgaW4gcmVzcG9uc2UgdG8gbWVtb3J5IHByZXNzdXJlLAotCSAqIGFuZCBub3QgZm9yIHBkZmx1c2ggb3Igc3luYy4gIEhvd2V2ZXIsIGluIHRob3NlIGNhc2VzLCB3ZSBkbyBzdGlsbAotCSAqIHdhbnQgdG8gY2hlY2sgaWYgdGhlcmUncyBhIHJlZHVuZGFudCBzd2FwcGFnZSB0byBiZSBkaXNjYXJkZWQuCisJICogYW5kIG5vdCBmb3IgdGhlIHdyaXRlYmFjayB0aHJlYWRzIG9yIHN5bmMuICBIb3dldmVyLCBpbiB0aG9zZSBjYXNlcywKKwkgKiB3ZSBkbyBzdGlsbCB3YW50IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYSByZWR1bmRhbnQgc3dhcHBhZ2UgdG8gYmUKKwkgKiBkaXNjYXJkZWQuCiAJICovCiAJaWYgKHdiYy0+Zm9yX3JlY2xhaW0pCiAJCXN3YXAgPSBnZXRfc3dhcF9wYWdlKCk7CkBAIC0yNDk3LDcgKzI0OTgsNyBAQAogCS5wdXRfc3VwZXIJPSBzaG1lbV9wdXRfc3VwZXIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNobWVtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzID0gewogCS5mYXVsdAkJPSBzaG1lbV9mYXVsdCwKICNpZmRlZiBDT05GSUdfTlVNQQogCS5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksCmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCA0ZGU3ZjAyLi45YzU5MGVlIDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCisrKyBiL21tL3N3YXBmaWxlLmMKQEAgLTExNTEsOCArMTE1MSw3IEBACiAJCQkJfSBlbHNlCiAJCQkJCXJldHZhbCA9IHVudXNlX21tKG1tLCBlbnRyeSwgcGFnZSk7CiAKLQkJCQlpZiAoc2V0X3N0YXJ0X21tICYmCi0JCQkJICAgIHN3YXBfY291bnQoKnN3YXBfbWFwKSA8IHN3Y291bnQpIHsKKwkJCQlpZiAoc2V0X3N0YXJ0X21tICYmICpzd2FwX21hcCA8IHN3Y291bnQpIHsKIAkJCQkJbW1wdXQobmV3X3N0YXJ0X21tKTsKIAkJCQkJYXRvbWljX2luYygmbW0tPm1tX3VzZXJzKTsKIAkJCQkJbmV3X3N0YXJ0X21tID0gbW07CkBAIC0xOTc0LDEyICsxOTczLDE0IEBACiAJCWdvdG8gYmFkX3N3YXA7CiAJfQogCi0JaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7Ci0JCXAtPmZsYWdzIHw9IFNXUF9TT0xJRFNUQVRFOwotCQlwLT5jbHVzdGVyX25leHQgPSAxICsgKHJhbmRvbTMyKCkgJSBwLT5oaWdoZXN0X2JpdCk7CisJaWYgKHAtPmJkZXYpIHsKKwkJaWYgKGJsa19xdWV1ZV9ub25yb3QoYmRldl9nZXRfcXVldWUocC0+YmRldikpKSB7CisJCQlwLT5mbGFncyB8PSBTV1BfU09MSURTVEFURTsKKwkJCXAtPmNsdXN0ZXJfbmV4dCA9IDEgKyAocmFuZG9tMzIoKSAlIHAtPmhpZ2hlc3RfYml0KTsKKwkJfQorCQlpZiAoZGlzY2FyZF9zd2FwKHApID09IDApCisJCQlwLT5mbGFncyB8PSBTV1BfRElTQ0FSREFCTEU7CiAJfQotCWlmIChkaXNjYXJkX3N3YXAocCkgPT0gMCkKLQkJcC0+ZmxhZ3MgfD0gU1dQX0RJU0NBUkRBQkxFOwogCiAJbXV0ZXhfbG9jaygmc3dhcG9uX211dGV4KTsKIAlzcGluX2xvY2soJnN3YXBfbG9jayk7CmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggNjk1MTFlNi4uMGY1NTFhNCAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0yNSwxMCArMjYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogCiAKIC8qKiogUGFnZSB0YWJsZSBtYW5pcHVsYXRpb24gZnVuY3Rpb25zICoqKi8KQEAgLTExNTYsMTIgKzExNTcsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsCi0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQlpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmNhbGxlcikKKwkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaywgdm9pZCAqY2FsbGVyKQogewogCXN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICp2YTsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwotCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSAxOwogCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlpZiAoZmxhZ3MgJiBWTV9JT1JFTUFQKSB7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQAogc3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgc3RhcnQsIGVuZCwgLTEsIEdGUF9LRVJORUwsCiAJCQkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoX19nZXRfdm1fYXJlYSk7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCQkgICAgICAgdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIHN0YXJ0LCBlbmQsIC0xLCBHRlBfS0VSTkVMLAogCQkJCSAgY2FsbGVyKTsKIH0KIApAQCAtMTIyNSwyMiArMTIyNSwyMiBAQAogICovCiBzdHJ1Y3Qgdm1fc3RydWN0ICpnZXRfdm1fYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0JcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCisJcmV0dXJuIF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCAxLCBmbGFncywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCiAJCQkJLTEsIEdGUF9LRVJORUwsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX2NhbGxlcih1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJdm9pZCAqY2FsbGVyKQogewotCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAogCQkJCQkJLTEsIEdGUF9LRVJORUwsIGNhbGxlcik7CiB9CiAKIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCQkJCSAgIGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlyZXR1cm4gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGZsYWdzLCBWTUFMTE9DX1NUQVJULCBWTUFMTE9DX0VORCwgbm9kZSwKLQkJCQkgIGdmcF9tYXNrLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXJldHVybiBfX2dldF92bV9hcmVhX25vZGUoc2l6ZSwgMSwgZmxhZ3MsIFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELAorCQkJCSAgbm9kZSwgZ2ZwX21hc2ssIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICpmaW5kX3ZtX2FyZWEoY29uc3Qgdm9pZCAqYWRkcikKQEAgLTE0MDMsNyArMTQwMyw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtYXApOwogCi1zdGF0aWMgdm9pZCAqX192bWFsbG9jX25vZGUodW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKK3N0YXRpYyB2b2lkICpfX3ZtYWxsb2Nfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkgICAgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCiAJCQkgICAgaW50IG5vZGUsIHZvaWQgKmNhbGxlcik7CiBzdGF0aWMgdm9pZCAqX192bWFsbG9jX2FyZWFfbm9kZShzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhLCBnZnBfdCBnZnBfbWFzaywKIAkJCQkgcGdwcm90X3QgcHJvdCwgaW50IG5vZGUsIHZvaWQgKmNhbGxlcikKQEAgLTE0MTcsNyArMTQxOCw3IEBACiAJYXJlYS0+bnJfcGFnZXMgPSBucl9wYWdlczsKIAkvKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSByZWN1cnNpb24gaXMgc3RyaWN0bHkgYm91bmRlZC4gKi8KIAlpZiAoYXJyYXlfc2l6ZSA+IFBBR0VfU0laRSkgewotCQlwYWdlcyA9IF9fdm1hbGxvY19ub2RlKGFycmF5X3NpemUsIGdmcF9tYXNrIHwgX19HRlBfWkVSTywKKwkJcGFnZXMgPSBfX3ZtYWxsb2Nfbm9kZShhcnJheV9zaXplLCAxLCBnZnBfbWFzayB8IF9fR0ZQX1pFUk8sCiAJCQkJUEFHRV9LRVJORUwsIG5vZGUsIGNhbGxlcik7CiAJCWFyZWEtPmZsYWdzIHw9IFZNX1ZQQUdFUzsKIAl9IGVsc2UgewpAQCAtMTQ3Niw2ICsxNDc3LDcgQEAKIC8qKgogICoJX192bWFsbG9jX25vZGUgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeQogICoJQHNpemU6CQlhbGxvY2F0aW9uIHNpemUKKyAqCUBhbGlnbjoJCWRlc2lyZWQgYWxpZ25tZW50CiAgKglAZ2ZwX21hc2s6CWZsYWdzIGZvciB0aGUgcGFnZSBsZXZlbCBhbGxvY2F0b3IKICAqCUBwcm90OgkJcHJvdGVjdGlvbiBtYXNrIGZvciB0aGUgYWxsb2NhdGVkIHBhZ2VzCiAgKglAbm9kZToJCW5vZGUgdG8gdXNlIGZvciBhbGxvY2F0aW9uIG9yIC0xCkBAIC0xNDg1LDggKzE0ODcsOSBAQAogICoJYWxsb2NhdG9yIHdpdGggQGdmcF9tYXNrIGZsYWdzLiAgTWFwIHRoZW0gaW50byBjb250aWd1b3VzCiAgKglrZXJuZWwgdmlydHVhbCBzcGFjZSwgdXNpbmcgYSBwYWdldGFibGUgcHJvdGVjdGlvbiBvZiBAcHJvdC4KICAqLwotc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QsCi0JCQkJCQlpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQorc3RhdGljIHZvaWQgKl9fdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCSAgICBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCwKKwkJCSAgICBpbnQgbm9kZSwgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqYWRkcjsKQEAgLTE0OTYsOCArMTQ5OSw4IEBACiAJaWYgKCFzaXplIHx8IChzaXplID4+IFBBR0VfU0hJRlQpID4gdG90YWxyYW1fcGFnZXMpCiAJCXJldHVybiBOVUxMOwogCi0JYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfbm9kZShzaXplLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsCi0JCQkJCQlub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKKwlhcmVhID0gX19nZXRfdm1fYXJlYV9ub2RlKHNpemUsIGFsaWduLCBWTV9BTExPQywgVk1BTExPQ19TVEFSVCwKKwkJCQkgIFZNQUxMT0NfRU5ELCBub2RlLCBnZnBfbWFzaywgY2FsbGVyKTsKIAogCWlmICghYXJlYSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNTE2LDcgKzE1MTksNyBAQAogCiB2b2lkICpfX3ZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBnZnBfdCBnZnBfbWFzaywgcGdwcm90X3QgcHJvdCkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgZ2ZwX21hc2ssIHByb3QsIC0xLAorCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCAxLCBnZnBfbWFzaywgcHJvdCwgLTEsCiAJCQkJX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woX192bWFsbG9jKTsKQEAgLTE1MzIsNyArMTUzNSw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSwgUEFHRV9LRVJORUwsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKIAkJCQkJLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZtYWxsb2MpOwpAQCAtMTU0OSw3ICsxNTUyLDggQEAKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXZvaWQgKnJldDsKIAotCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKKwlyZXQgPSBfX3ZtYWxsb2Nfbm9kZShzaXplLCBTSE1MQkEsCisJCQkgICAgIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKIAkJCSAgICAgUEFHRV9LRVJORUwsIC0xLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWlmIChyZXQpIHsKIAkJYXJlYSA9IGZpbmRfdm1fYXJlYShyZXQpOwpAQCAtMTU3Miw3ICsxNTc2LDcgQEAKICAqLwogdm9pZCAqdm1hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpCiB7Ci0JcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMLAogCQkJCQlub2RlLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTCh2bWFsbG9jX25vZGUpOwpAQCAtMTU5NSw3ICsxNTk5LDcgQEAKIAogdm9pZCAqdm1hbGxvY19leGVjKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0sIFBBR0VfS0VSTkVMX0VYRUMsCisJcmV0dXJuIF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNLCBQQUdFX0tFUk5FTF9FWEVDLAogCQkJICAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKQEAgLTE2MTYsNyArMTYyMCw3IEBACiAgKi8KIHZvaWQgKnZtYWxsb2NfMzIodW5zaWduZWQgbG9uZyBzaXplKQogewotCXJldHVybiBfX3ZtYWxsb2Nfbm9kZShzaXplLCBHRlBfVk1BTExPQzMyLCBQQUdFX0tFUk5FTCwKKwlyZXR1cm4gX192bWFsbG9jX25vZGUoc2l6ZSwgMSwgR0ZQX1ZNQUxMT0MzMiwgUEFHRV9LRVJORUwsCiAJCQkgICAgICAtMSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1hbGxvY18zMik7CkBAIC0xNjMzLDcgKzE2MzcsNyBAQAogCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7CiAJdm9pZCAqcmV0OwogCi0JcmV0ID0gX192bWFsbG9jX25vZGUoc2l6ZSwgR0ZQX1ZNQUxMT0MzMiB8IF9fR0ZQX1pFUk8sIFBBR0VfS0VSTkVMLAorCXJldCA9IF9fdm1hbGxvY19ub2RlKHNpemUsIDEsIEdGUF9WTUFMTE9DMzIgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCwKIAkJCSAgICAgLTEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJaWYgKHJldCkgewogCQlhcmVhID0gZmluZF92bV9hcmVhKHJldCk7CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDEyMTljZWIuLjc3N2FmNTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC01NDQsNiArNTQ0LDE2IEBACiAJCSAqLwogCQlscnUgPSBMUlVfVU5FVklDVEFCTEU7CiAJCWFkZF9wYWdlX3RvX3VuZXZpY3RhYmxlX2xpc3QocGFnZSk7CisJCS8qCisJCSAqIFdoZW4gcmFjaW5nIHdpdGggYW4gbWxvY2sgY2xlYXJpbmcgKHBhZ2UgaXMKKwkJICogdW5sb2NrZWQpLCBtYWtlIHN1cmUgdGhhdCBpZiB0aGUgb3RoZXIgdGhyZWFkIGRvZXMKKwkJICogbm90IG9ic2VydmUgb3VyIHNldHRpbmcgb2YgUEdfbHJ1IGFuZCBmYWlscworCQkgKiBpc29sYXRpb24sIHdlIHNlZSBQR19tbG9ja2VkIGNsZWFyZWQgYmVsb3cgYW5kIG1vdmUKKwkJICogdGhlIHBhZ2UgYmFjayB0byB0aGUgZXZpY3RhYmxlIGxpc3QuCisJCSAqCisJCSAqIFRoZSBvdGhlciBzaWRlIGlzIFRlc3RDbGVhclBhZ2VNbG9ja2VkKCkuCisJCSAqLworCQlzbXBfbWIoKTsKIAl9CiAKIAkvKgpAQCAtMTA4OCw3ICsxMDk4LDcgQEAKIAlpbnQgbHVtcHlfcmVjbGFpbSA9IDA7CiAKIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQoem9uZSwgZmlsZSwgc2MpKSkgewotCQljb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKKwkJY29uZ2VzdGlvbl93YWl0KEJMS19SV19BU1lOQywgSFovMTApOwogCiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KIAkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQpAQCAtMTM1Niw3ICsxMzY2LDcgQEAKIAkJCSAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIHBhZ2VzLAogCQkJICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS4KIAkJCSAqLwotCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmICFQYWdlQW5vbihwYWdlKSkgeworCQkJaWYgKCh2bV9mbGFncyAmIFZNX0VYRUMpICYmIHBhZ2VfaXNfZmlsZV9jYWNoZShwYWdlKSkgewogCQkJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZsX2FjdGl2ZSk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0xNzA5LDEwICsxNzE5LDEwIEBACiAgKgogICogSWYgdGhlIGNhbGxlciBpcyAhX19HRlBfRlMgdGhlbiB0aGUgcHJvYmFiaWxpdHkgb2YgYSBmYWlsdXJlIGlzIHJlYXNvbmFibHkKICAqIGhpZ2ggLSB0aGUgem9uZSBtYXkgYmUgZnVsbCBvZiBkaXJ0eSBvciB1bmRlci13cml0ZWJhY2sgcGFnZXMsIHdoaWNoIHRoaXMKLSAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayBwZGZsdXNoIGFuZCB0YWtlIGV4cGxpY2l0IG5hcHMgaW4gdGhlCi0gKiBob3BlIHRoYXQgc29tZSBvZiB0aGVzZSBwYWdlcyBjYW4gYmUgd3JpdHRlbi4gIEJ1dCBpZiB0aGUgYWxsb2NhdGluZyB0YXNrCi0gKiBob2xkcyBmaWxlc3lzdGVtIGxvY2tzIHdoaWNoIHByZXZlbnQgd3JpdGVvdXQgdGhpcyBtaWdodCBub3Qgd29yaywgYW5kIHRoZQotICogYWxsb2NhdGlvbiBhdHRlbXB0IHdpbGwgZmFpbC4KKyAqIGNhbGxlciBjYW4ndCBkbyBtdWNoIGFib3V0LiAgV2Uga2ljayB0aGUgd3JpdGViYWNrIHRocmVhZHMgYW5kIHRha2UgZXhwbGljaXQKKyAqIG5hcHMgaW4gdGhlIGhvcGUgdGhhdCBzb21lIG9mIHRoZXNlIHBhZ2VzIGNhbiBiZSB3cml0dGVuLiAgQnV0IGlmIHRoZQorICogYWxsb2NhdGluZyB0YXNrIGhvbGRzIGZpbGVzeXN0ZW0gbG9ja3Mgd2hpY2ggcHJldmVudCB3cml0ZW91dCB0aGlzIG1pZ2h0IG5vdAorICogd29yaywgYW5kIHRoZSBhbGxvY2F0aW9uIGF0dGVtcHQgd2lsbCBmYWlsLgogICoKICAqIHJldHVybnM6CTAsIGlmIG5vIHBhZ2VzIHJlY2xhaW1lZAogICogCQllbHNlLCB0aGUgbnVtYmVyIG9mIHBhZ2VzIHJlY2xhaW1lZApkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDViZjVmMjIuLjhhZjk1YjIgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTU4MiwxMSArNTgyLDkgQEAKIAogCW1lbXNldCgmZmlkLT5xaWQsIDAsIHNpemVvZihzdHJ1Y3QgcDlfcWlkKSk7CiAJZmlkLT5tb2RlID0gLTE7Ci0JZmlkLT5yZGlyX2Zwb3MgPSAwOwogCWZpZC0+dWlkID0gY3VycmVudF9mc3VpZCgpOwogCWZpZC0+Y2xudCA9IGNsbnQ7Ci0JZmlkLT5hdXggPSBOVUxMOwotCisJZmlkLT5yZGlyID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xudC0+bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkKCZmaWQtPmZsaXN0LCAmY2xudC0+ZmlkbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOwpAQCAtNjA5LDYgKzYwNyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsbnQtPmxvY2ssIGZsYWdzKTsKIAlsaXN0X2RlbCgmZmlkLT5mbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xudC0+bG9jaywgZmxhZ3MpOworCWtmcmVlKGZpZC0+cmRpcik7CiAJa2ZyZWUoZmlkKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGIyZTA3ZjAuLmVhMWUzZGEgMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC92aXJ0aW8uaD4KLSNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvXzlwLmg+CiAKICNkZWZpbmUgVklSVFFVRVVFX05VTQkxMjgKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNmViOGQ0Ny4uNTRjNjM0ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM2Myw2ICszNjMsNyBAQAogCQkJCSAgKiBkZXZpY2UgbmFtZSAobm90IHdoZW4gdGhlIGluamVjdCBpcwogCQkJCSAgKiBzdGFydGVkIGFzIGl0IHVzZWQgdG8gZG8uKQogCQkJCSAgKi8KKwljaGFyIG9kZXZuYW1lWzMyXTsKIAlzdHJ1Y3QgZmxvd19zdGF0ZSAqZmxvd3M7CiAJdW5zaWduZWQgY2Zsb3dzOwkvKiBDb25jdXJyZW50IGZsb3dzIChjb25maWcpICovCiAJdW5zaWduZWQgbGZsb3c7CQkvKiBGbG93IGxlbmd0aCAgKGNvbmZpZykgKi8KQEAgLTUyOCw3ICs1MjksNyBAQAogCXNlcV9wcmludGYoc2VxLAogCQkgICAiICAgICBmcmFnczogJWQgIGRlbGF5OiAlbGx1ICBjbG9uZV9za2I6ICVkICBpZm5hbWU6ICVzXG4iLAogCQkgICBwa3RfZGV2LT5uZnJhZ3MsICh1bnNpZ25lZCBsb25nIGxvbmcpIHBrdF9kZXYtPmRlbGF5LAotCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICBwa3RfZGV2LT5jbG9uZV9za2IsIHBrdF9kZXYtPm9kZXZuYW1lKTsKIAogCXNlcV9wcmludGYoc2VxLCAiICAgICBmbG93czogJXUgZmxvd2xlbjogJXVcbiIsIHBrdF9kZXYtPmNmbG93cywKIAkJICAgcGt0X2Rldi0+bGZsb3cpOwpAQCAtMTY4OCwxMyArMTY4OSwxMyBAQAogCWlmX2xvY2sodCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwa3RfZGV2LCAmdC0+aWZfbGlzdCwgbGlzdCkKIAkJaWYgKHBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuU3RvcHBlZDogIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KQogCQlpZiAoIXBrdF9kZXYtPnJ1bm5pbmcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAKIAlpZiAodC0+cmVzdWx0WzBdKQogCQlzZXFfcHJpbnRmKHNlcSwgIlxuUmVzdWx0OiAlc1xuIiwgdC0+cmVzdWx0KTsKQEAgLTE5OTQsNyArMTk5NSw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21pbiAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9taW4sIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWluID0gbnR4cSAtIDE7CiAJfQogCWlmIChwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID49IG50eHEpIHsKQEAgLTIwMDIsNyArMjAwMyw3IEBACiAJCSAgICAgICAicXVldWVfbWFwX21heCAoemVyby1iYXNlZCkgKCVkKSBleGNlZWRzIHZhbGlkIHJhbmdlICIKIAkJICAgICAgICJbMCAtICVkXSBmb3IgKCVkKSBxdWV1ZXMgb24gJXMsIHJlc2V0dGluZ1xuIiwKIAkJICAgICAgIHBrdF9kZXYtPnF1ZXVlX21hcF9tYXgsIChudHhxID86IDEpIC0gMSwgbnR4cSwKLQkJICAgICAgIHBrdF9kZXYtPm9kZXYtPm5hbWUpOworCQkgICAgICAgcGt0X2Rldi0+b2Rldm5hbWUpOwogCQlwa3RfZGV2LT5xdWV1ZV9tYXBfbWF4ID0gbnR4cSAtIDE7CiAJfQogCkBAIC0zMjYyLDcgKzMyNjMsNyBAQAogCiAJaWYgKCFwa3RfZGV2LT5ydW5uaW5nKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInBrdGdlbjogaW50ZXJmYWNlOiAlcyBpcyBhbHJlYWR5ICIKLQkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2LT5uYW1lKTsKKwkJICAgICAgICJzdG9wcGVkXG4iLCBwa3RfZGV2LT5vZGV2bmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzQ2NCw3ICszNDY1LDcgQEAKIAlkZWZhdWx0OiAvKiBEcml2ZXJzIGFyZSBub3Qgc3VwcG9zZWQgdG8gcmV0dXJuIG90aGVyIHZhbHVlcyEgKi8KIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInBrdGdlbjogJXMgeG1pdCBlcnJvcjogJWRcbiIsCi0JCQkJb2Rldi0+bmFtZSwgcmV0KTsKKwkJCQlwa3RfZGV2LT5vZGV2bmFtZSwgcmV0KTsKIAkJcGt0X2Rldi0+ZXJyb3JzKys7CiAJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSBORVRERVZfVFhfTE9DS0VEOgpAQCAtMzU3Miw3ICszNTczLDcgQEAKIAlpZl9sb2NrKHQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdC0+aWZfbGlzdCwgbGlzdCkKLQkJaWYgKHN0cm5jbXAocC0+b2Rldi0+bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgeworCQlpZiAoc3RybmNtcChwLT5vZGV2bmFtZSwgaWZuYW1lLCBJRk5BTVNJWikgPT0gMCkgewogCQkJcGt0X2RldiA9IHA7CiAJCQlicmVhazsKIAkJfQpAQCAtMzYyOCw2ICszNjI5LDcgQEAKIAlpZiAoIXBrdF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJc3RyY3B5KHBrdF9kZXYtPm9kZXZuYW1lLCBpZm5hbWUpOwogCXBrdF9kZXYtPmZsb3dzID0gdm1hbGxvYyhNQVhfQ0ZMT1dTICogc2l6ZW9mKHN0cnVjdCBmbG93X3N0YXRlKSk7CiAJaWYgKHBrdF9kZXYtPmZsb3dzID09IE5VTEwpIHsKIAkJa2ZyZWUocGt0X2Rldik7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IGVhZmMwMTAuLjNjMTc1NDAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC0zMCw2ICszMCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmxtcC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwppbmRleCA2MjExNjgyLi4zMTVlYWQzIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCmluZGV4IDdiNmI2MzEuLmQzNDAxMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jIGIvbmV0L2lyZGEvaXJuZXQvaXJuZXRfaXJkYS5jCmluZGV4IGNmOWE0YjUuLmNjY2MyZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0L2lybmV0X2lyZGEuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9pcmRhLmMKQEAgLTksNiArOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImlybmV0X2lyZGEuaCIJCS8qIFByaXZhdGUgaGVhZGVyICovCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJuZXQvaXJuZXRfcHBwLmMgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwppbmRleCA2OGNiY2IxLi43ZGVhODgyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYworKysgYi9uZXQvaXJkYS9pcm5ldC9pcm5ldF9wcHAuYwpAQCAtMTMsNiArMTMsNyBAQAogICoJMikgYXMgYSBjb250cm9sIGNoYW5uZWwgKHdyaXRlIGNvbW1hbmRzLCByZWFkIGV2ZW50cykKICAqLwogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgImlybmV0X3BwcC5oIgkJLyogUHJpdmF0ZSBoZWFkZXIgKi8KIC8qIFBsZWFzZSBwdXQgb3RoZXIgaGVhZGVycyBpbiBpcm5ldC5oIC0gVGhhbmtzICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYwppbmRleCBhNTkwNDNmYi4uNDU2NjcwNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2RlYnVnZnMuYworKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfZGVidWdmcy5jCkBAIC02LDYgKzYsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMGNkZmIzOC4uYjkxNjhjMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggYzkzNDk0Zi4uZDY1ZDM0OCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xMjgsOSArMTI4LDggQEAKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCAqc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKFJDVSkKIHsKLQlyY3VfcmVhZF9sb2NrKCk7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAogCWlmICgqcG9zID49IEFSUkFZX1NJWkUobmZfbG9nZ2VycykpCiAJCXJldHVybiBOVUxMOwpAQCAtMTQ5LDkgKzE0OCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIHNlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLQlfX3JlbGVhc2VzKFJDVSkKIHsKLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQpAQCAtMTYxLDcgKzE1OSw3IEBACiAJc3RydWN0IG5mX2xvZ2dlciAqdDsKIAlpbnQgcmV0OwogCi0JbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOworCWxvZ2dlciA9IG5mX2xvZ2dlcnNbKnBvc107CiAKIAlpZiAoIWxvZ2dlcikKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CkBAIC0xNzEsMjIgKzE2OSwxNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbKnBvc10sIGxpc3RbKnBvc10pIHsKIAkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJXMiLCB0LT5uYW1lKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgewogCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIAogCXJldHVybiBzZXFfcHJpbnRmKHMsICIpXG4iKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwppbmRleCAyZTgwODllLi4yNzczYmU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogCXByaXYgPSBrbWFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmIChwcml2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZmFsc2U7CiAKIAkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2Ygc3RhdGUuICovCiAJci0+bWFzdGVyID0gcHJpdjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCmluZGV4IDYzZTE5MDUuLjRkMWE0MWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwpAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJc3RydWN0IHh0X29zZl91c2VyX2ZpbmdlciAqZjsKIAlzdHJ1Y3QgeHRfb3NmX2ZpbmdlciAqc2Y7Ci0JaW50IGVyciA9IEVOT0VOVDsKKwlpbnQgZXJyID0gLUVOT0VOVDsKIAogCWlmICghb3NmX2F0dHJzW09TRl9BVFRSX0ZJTkdFUl0pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggNDhiMThkYS4uZjJkMTE2YSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0yMDgxLDcgKzIwODEsNyBAQAogCQlhdG9taWNfZGVjKCZwa3Rfc2soc2spLT5tYXBwZWQpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHBhY2tldF9tbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGFja2V0X21tYXBfb3BzID0gewogCS5vcGVuCT0JcGFja2V0X21tX29wZW4sCiAJLmNsb3NlCT0JcGFja2V0X21tX2Nsb3NlLAogfTsKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvY29yZS5jIGIvbmV0L3Jma2lsbC9jb3JlLmMKaW5kZXggN2NiNTdmZi4uYTAwMWY3YyAxMDA2NDQKLS0tIGEvbmV0L3Jma2lsbC9jb3JlLmMKKysrIGIvbmV0L3Jma2lsbC9jb3JlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3RyYW5zcG9ydC5jCmluZGV4IDBjZjVlOGMuLjNmYTU3NTEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV90cmFuc3BvcnQuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdmNfeHBydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9ycGNfcmRtYS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCA0NWIyYmUzLi5hNTk1ZjcxIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgogI2luY2x1ZGUgIm5sODAyMTEuaCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwppbmRleCA5Y2Y4MGExLi4yNmZhYjMzIDEwMDY0NAotLS0gYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJcmV0dXJuIC1FUEVSTTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFya19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKIAkub3BlbiA9IG15X29wZW4sCiB9OwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQppbmRleCA0ZjljMTkwLi5jNjdlNzNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCisrKyBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKQEAgLTEwMCw3ICsxMDAsNyBAQAogIyBVc2FnZTogY2ZsYWdzLXkgKz0gJChjYWxsIGFzLWluc3RyLGluc3RyLG9wdGlvbjEsb3B0aW9uMikKIAogYXMtaW5zdHIgPSAkKGNhbGwgdHJ5LXJ1bixcCi0JZWNobyAtZSAiJCgxKSIgfCAkKENDKSAkKEtCVUlMRF9BRkxBR1MpIC1jIC14YXNzZW1ibGVyIC1vICIkJFRNUCIgLSwkKDIpLCQoMykpCisJL2Jpbi9lY2hvIC1lICIkKDEpIiB8ICQoQ0MpICQoS0JVSUxEX0FGTEFHUykgLWMgLXhhc3NlbWJsZXIgLW8gIiQkVE1QIiAtLCQoMiksJCgzKSkKIAogIyBjYy1vcHRpb24KICMgVXNhZ2U6IGNmbGFncy15ICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXdpbmNoaXAtYzYsLW1hcmNoPWk1ODYpCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmxpYiBiL3NjcmlwdHMvTWFrZWZpbGUubGliCmluZGV4IDdhNzc3ODcuLmZmZGFmYjIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUubGliCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubGliCkBAIC0yMDgsNyArMjA4LDcgQEAKIAogIyBCemlwMiBhbmQgTFpNQSBkbyBub3QgaW5jbHVkZSBzaXplIGluIGZpbGUuLi4gc28gd2UgaGF2ZSB0byBmYWtlIHRoYXQ7CiAjIGFwcGVuZCB0aGUgc2l6ZSBhcyBhIDMyLWJpdCBsaXR0bGVlbmRpYW4gbnVtYmVyIGFzIGd6aXAgZG9lcy4KLXNpemVfYXBwZW5kID0gZWNobyAtbmUgJChzaGVsbAkJCQkJCVwKK3NpemVfYXBwZW5kID0gL2Jpbi9lY2hvIC1uZSAkKHNoZWxsCQkJCQlcCiBkZWNfc2l6ZT0wOwkJCQkJCQkJXAogZm9yIEYgaW4gJDE7IGRvCQkJCQkJCQlcCiAJZnNpemU9JCQoc3RhdCAtYyAiJXMiICQkRik7CQkJCQlcCmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2ggYi9zY3JpcHRzL2NoZWNra2NvbmZpZ3N5bWJvbHMuc2gKaW5kZXggMzk2NzdjOC4uNDZiZTNjNSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja2tjb25maWdzeW1ib2xzLnNoCisrKyBiL3NjcmlwdHMvY2hlY2trY29uZmlnc3ltYm9scy5zaApAQCAtOSw3ICs5LDcgQEAKICMgRG9pbmcgdGhpcyBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgc2F2ZXMgYSBsb3Qgb2YgdGltZSwgb24gYSBjYWNoZS1ob3QgdHJlZS4KIEtjb25maWdzPSJgZmluZCAuIC1uYW1lICdLY29uZmlnJyAtbyAtbmFtZSAnS2NvbmZpZypbXn5dJ2AiCiAKLWVjaG8gLWUgIkZpbGUgbGlzdCBcdHVuZGVmaW5lZCBzeW1ib2wgdXNlZCIKKy9iaW4vZWNobyAtZSAiRmlsZSBsaXN0IFx0dW5kZWZpbmVkIHN5bWJvbCB1c2VkIgogZmluZCAkcGF0aHMgLW5hbWUgJyouW2NoU10nIC1vIC1uYW1lICdNYWtlZmlsZScgLW8gLW5hbWUgJ01ha2VmaWxlKltefl0nfCB3aGlsZSByZWFkIGkKIGRvCiAJIyBPdXRwdXQgdGhlIGJhcmUgS2NvbmZpZyB2YXJpYWJsZSBhbmQgdGhlIGZpbGVuYW1lOyB0aGUgX01PRFVMRSBwYXJ0IGF0CkBAIC01NCw2ICs1NCw2IEBACiAJIyBiZXlvbmQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzY3JpcHQuCiAJc3ltYl9iYXJlPWBlY2hvICRzeW1iIHwgc2VkIC1lICdzL19NT0RVTEUvLydgCiAJaWYgISBncmVwIC1xICJcPCRzeW1iX2JhcmVcPiIgJEtjb25maWdzOyB0aGVuCi0JCWVjaG8gLWUgIiRmaWxlczogXHQkc3ltYiIKKwkJL2Jpbi9lY2hvIC1lICIkZmlsZXM6IFx0JHN5bWIiCiAJZmkKIGRvbmV8c29ydApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDg3YmJiOGIuLmJjNDExNGYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTIsNyArMiw3IEBACiAjIChjKSAyMDAxLCBEYXZlIEpvbmVzLiA8ZGF2ZWpAcmVkaGF0LmNvbT4gKHRoZSBmaWxlIGhhbmRsaW5nIGJpdCkKICMgKGMpIDIwMDUsIEpvZWwgU2Nob3BwIDxqc2Nob3BwQGF1c3Rpbi5pYm0uY29tPiAodGhlIHVnbHkgYml0KQogIyAoYykgMjAwNywyMDA4LCBBbmR5IFdoaXRjcm9mdCA8YXB3QHVrLmlibS5jb20+IChuZXcgY29uZGl0aW9ucywgdGVzdCBzdWl0ZSkKLSMgKGMpIDIwMDgsIEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKyMgKGMpIDIwMDgsMjAwOSwgQW5keSBXaGl0Y3JvZnQgPGFwd0BjYW5vbmljYWwuY29tPgogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKQEAgLTEwLDcgKzEwLDcgQEAKIG15ICRQID0gJDA7CiAkUCA9fiBzQC4qL0BAZzsKIAotbXkgJFYgPSAnMC4yOSc7CitteSAkViA9ICcwLjMwJzsKIAogdXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIG5vX2F1dG9fYWJicmV2KTsKIApAQCAtMTMwLDcgKzEzMCwxMCBAQAogCiBteSAkZW1pdHRlZF9jb3JydXB0ID0gMDsKIAotb3VyICRJZGVudCAgICAgICA9IHFye1tBLVphLXpfXVtBLVphLXpcZF9dKn07CitvdXIgJElkZW50CT0gcXJ7CisJCQlbQS1aYS16X11bQS1aYS16XGRfXSoKKwkJCSg/OlxzKlwjXCNccypbQS1aYS16X11bQS1aYS16XGRfXSopKgorCQl9eDsKIG91ciAkU3RvcmFnZQk9IHFye2V4dGVybnxzdGF0aWN8YXNtbGlua2FnZX07CiBvdXIgJFNwYXJzZQk9IHFyewogCQkJX191c2VyfApAQCAtOTk3LDIzICsxMDAwLDI1IEBACiAKIHN1YiBwb3NzaWJsZSB7CiAJbXkgKCRwb3NzaWJsZSwgJGxpbmUpID0gQF87Ci0KLQlwcmludCAiQ0hFQ0s8JHBvc3NpYmxlPiAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlID4gMik7Ci0JaWYgKCRwb3NzaWJsZSAhfiAvKD86CisJbXkgJG5vdFBlcm1pdHRlZCA9IHFyeyg/OgogCQleKD86CiAJCQkkTW9kaWZpZXJ8CiAJCQkkU3RvcmFnZXwKIAkJCSRUeXBlfAotCQkJREVGSU5FX1xTK3wKKwkJCURFRklORV9cUysKKwkJKSR8CisJCV4oPzoKIAkJCWdvdG98CiAJCQlyZXR1cm58CiAJCQljYXNlfAogCQkJZWxzZXwKIAkJCWFzbXxfX2FzbV9ffAogCQkJZG8KLQkJKSR8CisJCSkoPzpcc3wkKXwKIAkJXig/OnR5cGVkZWZ8c3RydWN0fGVudW0pXGIKLQkgICAgKS94KSB7CisJICAgICl9eDsKKwl3YXJuICJDSEVDSzwkcG9zc2libGU+ICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUgPiAyKTsKKwlpZiAoJHBvc3NpYmxlICF+ICRub3RQZXJtaXR0ZWQpIHsKIAkJIyBDaGVjayBmb3IgbW9kaWZpZXJzLgogCQkkcG9zc2libGUgPX4gcy9ccyokU3RvcmFnZVxzKi8vZzsKIAkJJHBvc3NpYmxlID1+IHMvXHMqJFNwYXJzZVxzKi8vZzsKQEAgLTEwMjIsOCArMTAyNywxMCBAQAogCQl9IGVsc2lmICgkcG9zc2libGUgPX4gL1xzLykgewogCQkJJHBvc3NpYmxlID1+IHMvXHMqJFR5cGVccyovL2c7CiAJCQlmb3IgbXkgJG1vZGlmaWVyIChzcGxpdCgnICcsICRwb3NzaWJsZSkpIHsKLQkJCQl3YXJuICJNT0RJRklFUjogJG1vZGlmaWVyICgkcG9zc2libGUpICgkbGluZSlcbiIgaWYgKCRkYmdfcG9zc2libGUpOwotCQkJCXB1c2goQG1vZGlmaWVyTGlzdCwgJG1vZGlmaWVyKTsKKwkJCQlpZiAoJG1vZGlmaWVyICF+ICRub3RQZXJtaXR0ZWQpIHsKKwkJCQkJd2FybiAiTU9ESUZJRVI6ICRtb2RpZmllciAoJHBvc3NpYmxlKSAoJGxpbmUpXG4iIGlmICgkZGJnX3Bvc3NpYmxlKTsKKwkJCQkJcHVzaChAbW9kaWZpZXJMaXN0LCAkbW9kaWZpZXIpOworCQkJCX0KIAkJCX0KIAogCQl9IGVsc2UgewpAQCAtMTEzOCw2ICsxMTQ1LDcgQEAKIAkjIHN1cHByZXNzaW9uIGZsYWdzCiAJbXkgJXN1cHByZXNzX2lmYnJhY2VzOwogCW15ICVzdXBwcmVzc193aGlsZXRyYWlsZXJzOworCW15ICVzdXBwcmVzc19leHBvcnQ7CiAKIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBzYW5pdGl6aW5nIHRoZSBsaW5lcy4KIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBsb29raW5nIGZvciBhbnkgX19zZXR1cCBkb2N1bWVudGF0aW9uLgpAQCAtMTIzMCw3ICsxMjM4LDYgQEAKIAkJJGxpbmVucisrOwogCiAJCW15ICRyYXdsaW5lID0gJHJhd2xpbmVzWyRsaW5lbnIgLSAxXTsKLQkJbXkgJGh1bmtfbGluZSA9ICgkcmVhbGNudCAhPSAwKTsKIAogI2V4dHJhY3QgdGhlIGxpbmUgcmFuZ2UgaW4gdGhlIGZpbGUgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQKIAkJaWYgKCRsaW5lPX4vXlxAXEAgLVxkKyg/OixcZCspPyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CkBAIC0xMjQ3LDYgKzEyNTQsNyBAQAogCiAJCQklc3VwcHJlc3NfaWZicmFjZXMgPSAoKTsKIAkJCSVzdXBwcmVzc193aGlsZXRyYWlsZXJzID0gKCk7CisJCQklc3VwcHJlc3NfZXhwb3J0ID0gKCk7CiAJCQluZXh0OwogCiAjIHRyYWNrIHRoZSBsaW5lIG51bWJlciBhcyB3ZSBtb3ZlIHRocm91Z2ggdGhlIGh1bmssIG5vdGUgdGhhdApAQCAtMTI3MCw2ICsxMjc4LDggQEAKIAkJCSRyZWFsY250LS07CiAJCX0KIAorCQlteSAkaHVua19saW5lID0gKCRyZWFsY250ICE9IDApOworCiAjbWFrZSB1cCB0aGUgaGFuZGxlIGZvciBhbnkgZXJyb3Igd2UgcmVwb3J0IG9uIHRoaXMgbGluZQogCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokcmVhbGxpbmU6ICIgaWYgKCRlbWFjcyAmJiAkZmlsZSk7CiAJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRsaW5lbnI6ICIgaWYgKCRlbWFjcyAmJiAhJGZpbGUpOwpAQCAtMTQyMCwxMyArMTQzMCwyMiBAQAogCQl9CiAKICMgQ2hlY2sgZm9yIHBvdGVudGlhbCAnYmFyZScgdHlwZXMKLQkJbXkgKCRzdGF0LCAkY29uZCwgJGxpbmVfbnJfbmV4dCwgJHJlbWFpbl9uZXh0LCAkb2ZmX25leHQpOworCQlteSAoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCwKKwkJICAgICRyZWFsbGluZV9uZXh0KTsKIAkJaWYgKCRyZWFsY250ICYmICRsaW5lID1+IC8uXHMqXFMvKSB7CiAJCQkoJHN0YXQsICRjb25kLCAkbGluZV9ucl9uZXh0LCAkcmVtYWluX25leHQsICRvZmZfbmV4dCkgPQogCQkJCWN0eF9zdGF0ZW1lbnRfYmxvY2soJGxpbmVuciwgJHJlYWxjbnQsIDApOwogCQkJJHN0YXQgPX4gcy9cbi4vXG4gL2c7CiAJCQkkY29uZCA9fiBzL1xuLi9cbiAvZzsKIAorCQkJIyBGaW5kIHRoZSByZWFsIG5leHQgbGluZS4KKwkJCSRyZWFsbGluZV9uZXh0ID0gJGxpbmVfbnJfbmV4dDsKKwkJCWlmIChkZWZpbmVkICRyZWFsbGluZV9uZXh0ICYmCisJCQkgICAgKCFkZWZpbmVkICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdIHx8CisJCQkgICAgIHN1YnN0cigkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSwgJG9mZl9uZXh0KSA9fiAvXlxzKiQvKSkgeworCQkJCSRyZWFsbGluZV9uZXh0Kys7CisJCQl9CisKIAkJCW15ICRzID0gJHN0YXQ7CiAJCQkkcyA9fiBzL3suKiQvL3M7CiAKQEAgLTE2NjEsOCArMTY4MCw4IEBACiAJCX0KIAogIyBjaGVjayBmb3IgaW5pdGlhbGlzYXRpb24gdG8gYWdncmVnYXRlcyBvcGVuIGJyYWNlIG9uIHRoZSBuZXh0IGxpbmUKLQkJaWYgKCRwcmV2bGluZSA9fiAvJERlY2xhcmVccyokSWRlbnRccyo9XHMqJC8gJiYKLQkJICAgICRsaW5lID1+IC9eLlxzKnsvKSB7CisJCWlmICgkbGluZSA9fiAvXi5ccyp7LyAmJgorCQkgICAgJHByZXZsaW5lID1+IC8oPzpefFtePV0pPVxzKiQvKSB7CiAJCQlFUlJPUigidGhhdCBvcGVuIGJyYWNlIHsgc2hvdWxkIGJlIG9uIHRoZSBwcmV2aW91cyBsaW5lXG4iIC4gJGhlcmVwcmV2KTsKIAkJfQogCkBAIC0xNjg3LDIxICsxNzA2LDQwIEBACiAJCSRsaW5lID1+IHNALy8uKkBAOwogCQkkb3BsaW5lID1+IHNALy8uKkBAOwogCi0jRVhQT1JUX1NZTUJPTCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IGl0cyBmdW5jdGlvbiBjbG9zaW5nIH0uCi0JCWlmICgoJGxpbmUgPX4gL0VYUE9SVF9TWU1CT0wuKlwoKC4qKVwpLykgfHwKLQkJICAgICgkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyMgRVhQT1JUX1NZTUJPTCBzaG91bGQgaW1tZWRpYXRlbHkgZm9sbG93IHRoZSB0aGluZyBpdCBpcyBleHBvcnRpbmcsIGNvbnNpZGVyCisjIHRoZSB3aG9sZSBzdGF0ZW1lbnQuCisjcHJpbnQgIkFQVyA8JGxpbmVzWyRyZWFsbGluZV9uZXh0IC0gMV0+XG4iOworCQlpZiAoZGVmaW5lZCAkcmVhbGxpbmVfbmV4dCAmJgorCQkgICAgZXhpc3RzICRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdICYmCisJCSAgICAhZGVmaW5lZCAkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSAmJgorCQkgICAgKCRsaW5lc1skcmVhbGxpbmVfbmV4dCAtIDFdID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKIAkJCW15ICRuYW1lID0gJDE7Ci0JCQlpZiAoJHByZXZsaW5lICF+IC8oPzoKLQkJCQleLn18CisJCQlpZiAoJHN0YXQgIX4gLyg/OgorCQkJCVxuLn1ccyokfAogCQkJCV4uREVGSU5FXyRJZGVudFwoXFEkbmFtZVxFXCl8CiAJCQkJXi5ERUNMQVJFXyRJZGVudFwoXFEkbmFtZVxFXCl8CiAJCQkJXi5MSVNUX0hFQURcKFxRJG5hbWVcRVwpfAotCQkJCV4uJFR5cGVccypcKFxzKlwqXHMqXFEkbmFtZVxFXHMqXClccypcKHwKLQkJCQlcYlxRJG5hbWVcRSg/OlxzKyRBdHRyaWJ1dGUpP1xzKig/Ojt8PXxcWykKKwkJCQleLig/OiRTdG9yYWdlXHMrKT8kVHlwZVxzKlwoXHMqXCpccypcUSRuYW1lXEVccypcKVxzKlwofAorCQkJCVxiXFEkbmFtZVxFKD86XHMrJEF0dHJpYnV0ZSkqXHMqKD86O3w9fFxbfFwoKQogCQkJICAgICkveCkgewotCQkJCVdBUk4oIkVYUE9SVF9TWU1CT0woZm9vKTsgc2hvdWxkIGltbWVkaWF0ZWx5IGZvbGxvdyBpdHMgZnVuY3Rpb24vdmFyaWFibGVcbiIgLiAkaGVyZWN1cnIpOworI3ByaW50ICJGT08gQTwkbGluZXNbJHJlYWxsaW5lX25leHQgLSAxXT4gc3RhdDwkc3RhdD4gbmFtZTwkbmFtZT5cbiI7CisJCQkJJHN1cHByZXNzX2V4cG9ydHskcmVhbGxpbmVfbmV4dH0gPSAyOworCQkJfSBlbHNlIHsKKwkJCQkkc3VwcHJlc3NfZXhwb3J0eyRyZWFsbGluZV9uZXh0fSA9IDE7CiAJCQl9CiAJCX0KKwkJaWYgKCFkZWZpbmVkICRzdXBwcmVzc19leHBvcnR7JGxpbmVucn0gJiYKKwkJICAgICRwcmV2bGluZSA9fiAvXi5ccyokLyAmJgorCQkgICAgKCRsaW5lID1+IC9FWFBPUlRfU1lNQk9MLipcKCguKilcKS8gfHwKKwkJICAgICAkbGluZSA9fiAvRVhQT1JUX1VOVVNFRF9TWU1CT0wuKlwoKC4qKVwpLykpIHsKKyNwcmludCAiRk9PIEIgPCRsaW5lc1skbGluZW5yIC0gMV0+XG4iOworCQkJJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9IDI7CisJCX0KKwkJaWYgKGRlZmluZWQgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSAmJgorCQkgICAgJHN1cHByZXNzX2V4cG9ydHskbGluZW5yfSA9PSAyKSB7CisJCQlXQVJOKCJFWFBPUlRfU1lNQk9MKGZvbyk7IHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uL3ZhcmlhYmxlXG4iIC4gJGhlcmVjdXJyKTsKKwkJfQogCiAjIGNoZWNrIGZvciBleHRlcm5hbCBpbml0aWFsaXNlcnMuCiAJCWlmICgkbGluZSA9fiAvXi4kVHlwZVxzKiRJZGVudFxzKig/OlxzKyRNb2RpZmllcikqXHMqPVxzKigwfE5VTEx8ZmFsc2UpXHMqOy8pIHsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2RhdGEuYyBiL3NjcmlwdHMvZHRjL2RhdGEuYwppbmRleCBkZDJlM2QzLi5mZTU1NWU4IDEwMDY0NAotLS0gYS9zY3JpcHRzL2R0Yy9kYXRhLmMKKysrIGIvc2NyaXB0cy9kdGMvZGF0YS5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlyZXR1cm4gZDsKIH0KIAotc3RydWN0IGRhdGEgZGF0YV9hcHBlbmRfbWFya2VycyhzdHJ1Y3QgZGF0YSBkLCBzdHJ1Y3QgbWFya2VyICptKQorc3RhdGljIHN0cnVjdCBkYXRhIGRhdGFfYXBwZW5kX21hcmtlcnMoc3RydWN0IGRhdGEgZCwgc3RydWN0IG1hcmtlciAqbSkKIHsKIAlzdHJ1Y3QgbWFya2VyICoqbXAgPSAmZC5tYXJrZXJzOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2R0Yy9kdGMtbGV4ZXIubCBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCmluZGV4IDQ0ZGJmZDMuLmE2MjdiYmUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCisrKyBiL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU0EKICAqLwogCi0lb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQgeXlsaW5lbm8KKyVvcHRpb24gbm95eXdyYXAgbm9pbnB1dCBub3VucHV0IHl5bGluZW5vCiAKICV4IElOQ0xVREUKICV4IEJZVEVTVFJJTkcKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2R0Yy1sZXhlci5sZXguY19zaGlwcGVkIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKaW5kZXggYWMzOTJjYi4uZTI3Y2M2MyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9kdGMvZHRjLWxleGVyLmxleC5jX3NoaXBwZWQKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzQKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM1CiAjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNTQsNyArNTQsNiBAQAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBmbGV4X3VpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNlbmRpZiAvKiAhIEM5OSAqLwogCiAvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCiAjaWZuZGVmIElOVDhfTUlOCkBAIC04NSw2ICs4NCw4IEBACiAjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQogI2VuZGlmCiAKKyNlbmRpZiAvKiAhIEM5OSAqLworCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xNDEsNyArMTQyLDE1IEBACiAKIC8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCiAjaWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNlCiAjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgpAQCAtMTkyLDEzICsyMDEsNiBAQAogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQogCi0vKiBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2Ugd2UgY2Fubm90IHBvcnRhYmx5IGdldCBvdXIgaGFuZHMgb24gc2l6ZV90Ci0gKiAod2l0aG91dCBhdXRvY29uZidzIGhlbHAsIHdoaWNoIGlzbid0IGF2YWlsYWJsZSBiZWNhdXNlIHdlIHdhbnQKLSAqIGZsZXgtZ2VuZXJhdGVkIHNjYW5uZXJzIHRvIGNvbXBpbGUgb24gdGhlaXIgb3duKS4KLSAqIEdpdmVuIHRoYXQgdGhlIHN0YW5kYXJkIGhhcyBkZWNyZWVkIHRoYXQgc2l6ZV90IGV4aXN0cyBzaW5jZSAxOTg5LAotICogSSBndWVzcyB3ZSBjYW4gYWZmb3JkIHRvIGRlcGVuZCBvbiBpdC4gTWFub2ouCi0gKi8KLQogI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAogI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwpAQCAtNjA0LDYgKzYwNiw3IEBACiAgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTQQogICovCisjZGVmaW5lIFlZX05PX0lOUFVUIDEKIAogCiAKQEAgLTYzNCw3ICs2MzcsNyBAQAogCiBzdGF0aWMgdm9pZCBwdXNoX2lucHV0X2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUpOwogc3RhdGljIGludCBwb3BfaW5wdXRfZmlsZSh2b2lkKTsKLSNsaW5lIDYzOCAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgNjQxICJkdGMtbGV4ZXIubGV4LmMiCiAKICNkZWZpbmUgSU5JVElBTCAwCiAjZGVmaW5lIElOQ0xVREUgMQpAQCAtNjU2LDYgKzY1OSwzNSBAQAogCiBzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOwogCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAodm9pZCApOworCitpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKHZvaWQgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgICk7CisKK0ZJTEUgKnl5Z2V0X2luICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5fc3RyICApOworCitGSUxFICp5eWdldF9vdXQgKHZvaWQgKTsKKwordm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAgKTsKKworaW50IHl5Z2V0X2xlbmcgKHZvaWQgKTsKKworY2hhciAqeXlnZXRfdGV4dCAodm9pZCApOworCitpbnQgeXlnZXRfbGluZW5vICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgbGluZV9udW1iZXIgICk7CisKIC8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCiAgKiBzZWN0aW9uIDEuCiAgKi8KQEAgLTY4OCw3ICs3MjAsMTIgQEAKIAogLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLwogI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKICNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwpAQCAtNjk2LDcgKzczMyw3IEBACiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsCkBAIC03MDcsNyArNzQ0LDcgQEAKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQlpbnQgbjsgXAorCQlzaXplX3QgbjsgXAogCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC03OTEsNyArODI4LDcgQEAKICAgICAKICNsaW5lIDY0ICJkdGMtbGV4ZXIubCIKIAotI2xpbmUgNzk1ICJkdGMtbGV4ZXIubGV4LmMiCisjbGluZSA4MzIgImR0Yy1sZXhlci5sZXguYyIKIAogCWlmICggISh5eV9pbml0KSApCiAJCXsKQEAgLTExMTYsNyArMTE1Myw3IEBACiAjbGluZSAyMjIgImR0Yy1sZXhlci5sIgogRUNITzsKIAlZWV9CUkVBSwotI2xpbmUgMTEyMCAiZHRjLWxleGVyLmxleC5jIgorI2xpbmUgMTE1NyAiZHRjLWxleGVyLmxleC5jIgogCiAJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgogCQl7CkBAIC0xODQwLDggKzE4NzcsOCBAQAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIAogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKi8KZGlmZiAtLWdpdCBhL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYwppbmRleCBmYmJiYTQ0Li4yMmU2OTI5MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9kdGMvbGliZmR0L2ZkdF9yby5jCisrKyBiL3NjcmlwdHMvZHRjL2xpYmZkdC9mZHRfcm8uYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJCQkJCSAgICAgJnBoYW5kbGUsIHNpemVvZihwaGFuZGxlKSk7CiB9CiAKLWludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIGludCBfc3RyaW5nbGlzdF9jb250YWlucyhjb25zdCBjaGFyICpzdHJsaXN0LCBpbnQgbGlzdGxlbiwgY29uc3QgY2hhciAqc3RyKQogewogCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKIAljb25zdCBjaGFyICpwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jIGIvc2NyaXB0cy9kdGMvdHJlZXNvdXJjZS5jCmluZGV4IGViZWI2ZWIuLjE1MjFmZjEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZHRjL3RyZWVzb3VyY2UuYworKysgYi9zY3JpcHRzL2R0Yy90cmVlc291cmNlLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAkJZnB1dGMoJ1x0JywgZik7CiB9CiAKLWludCBpc3N0cmluZyhjaGFyIGMpCitzdGF0aWMgaW50IGlzc3RyaW5nKGNoYXIgYykKIHsKIAlyZXR1cm4gKGlzcHJpbnQoYykKIAkJfHwgKGMgPT0gJ1wwJykKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuY19zaGlwcGVkIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKaW5kZXggOTcxZTAxMS4uMjg3NDY3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKKysrIGIvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5jX3NoaXBwZWQKQEAgLTEsNCArMSw0IEBACi0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4yICovCisvKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCiAvKiBDb21tYW5kLWxpbmU6IGdwZXJmIC1MIEFOU0ktQyAtYSAtQyAtRSAtZyAtSCBpc19yZXNlcnZlZF9oYXNoIC1rICcxLDMsJCcgLU4gaXNfcmVzZXJ2ZWRfd29yZCAtcCAtdCBzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmICAqLwogCiAjaWYgISgoJyAnID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcCkBAIC0zMCw3ICszMCw5IEBACiAKICNsaW5lIDEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAKLSNsaW5lIDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCitzdHJ1Y3QgcmVzd29yZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzd29yZCAqaXNfcmVzZXJ2ZWRfd29yZChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOworI2xpbmUgNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKIHN0cnVjdCByZXN3b3JkIHsgY29uc3QgY2hhciAqbmFtZTsgaW50IHRva2VuOyB9OwogLyogbWF4aW11bSBrZXkgcmFuZ2UgPSA2MiwgZHVwbGljYXRlcyA9IDAgKi8KIApAQCAtNzgsNiArODAsOSBAQAogCiAjaWZkZWYgX19HTlVDX18KIF9faW5saW5lCisjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KK19fYXR0cmlidXRlX18gKChfX2dudV9pbmxpbmVfXykpCisjZW5kaWYKICNlbmRpZgogY29uc3Qgc3RydWN0IHJlc3dvcmQgKgogaXNfcmVzZXJ2ZWRfd29yZCAocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQpAQCAtOTQsMTA1ICs5OSwxMDUgQEAKICAgc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkIHdvcmRsaXN0W10gPQogICAgIHsKICAgICAgIHsiIn0sIHsiIn0sIHsiIn0sCi0jbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJhc20iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDEwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2FzbSIsIEFTTV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA5ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fYXNtX18iLCBBU01fS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX190eXBlb2ZfXyIsIFRZUEVPRl9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2NvbnN0IiwgQ09OU1RfS0VZV30sCi0jbGluZSAxMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsiX19hdHRyaWJ1dGVfXyIsIEFUVFJJQlVURV9LRVlXfSwKICNsaW5lIDEzICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorICAgICAgeyJfX2F0dHJpYnV0ZV9fIiwgQVRUUklCVVRFX0tFWVd9LAorI2xpbmUgMTUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fY29uc3RfXyIsIENPTlNUX0tFWVd9LAotI2xpbmUgMTggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCi0gICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCi0jbGluZSA0NCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKLSAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAogI2xpbmUgMjAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisgICAgICB7Il9fc2lnbmVkX18iLCBTSUdORURfS0VZV30sCisjbGluZSA0NiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyAgICAgIHsic3RhdGljIiwgU1RBVElDX0tFWVd9LAorI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fdm9sYXRpbGVfXyIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW50IiwgSU5UX0tFWVd9LAotI2xpbmUgMzIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiY2hhciIsIENIQVJfS0VZV30sCi0jbGluZSAzMyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJjb25zdCIsIENPTlNUX0tFWVd9LAotI2xpbmUgNDUgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic3RydWN0IiwgU1RSVUNUX0tFWVd9LAotI2xpbmUgMjQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19yZXN0cmljdF9fIiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDI3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJyZXN0cmljdCIsIFJFU1RSSUNUX0tFWVd9LAotI2xpbmUgMjMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX3Jlc3RyaWN0IiwgUkVTVFJJQ1RfS0VZV30sCi0jbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE4ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZV9fIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgMTAgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxMiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19hdHRyaWJ1dGUiLCBBVFRSSUJVVEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMTQgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAxNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX19leHRlbnNpb25fXyIsIEVYVEVOU0lPTl9LRVlXfSwKLSNsaW5lIDM1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImVudW0iLCBFTlVNX0tFWVd9LAotI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyMSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX192b2xhdGlsZSIsIFZPTEFUSUxFX0tFWVd9LAotI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZXh0ZXJuIiwgRVhURVJOX0tFWVd9LAogICAgICAgeyIifSwKLSNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMTkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7Il9fc2lnbmVkIiwgU0lHTkVEX0tFWVd9LAotI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRSIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgNTEgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZW9mIiwgVFlQRU9GX0tFWVd9LAotI2xpbmUgNDYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidHlwZWRlZiIsIFRZUEVERUZfS0VZV30sCi0jbGluZSAxNSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDE3ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJfX2lubGluZSIsIElOTElORV9LRVlXfSwKLSNsaW5lIDMxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImF1dG8iLCBBVVRPX0tFWVd9LAotI2xpbmUgNDcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0OSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidW5pb24iLCBVTklPTl9LRVlXfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGluZSA0OCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJ1bnNpZ25lZCIsIFVOU0lHTkVEX0tFWVd9LAotI2xpbmUgNDkgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA1MSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsidm9pZCIsIFZPSURfS0VZV30sCi0jbGluZSA0MiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDQ0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgogICAgICAgeyJzaG9ydCIsIFNIT1JUX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDUwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNTIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InZvbGF0aWxlIiwgVk9MQVRJTEVfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMzcgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAzOSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiZmxvYXQiLCBGTE9BVF9LRVlXfSwKLSNsaW5lIDM0ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgMzYgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImRvdWJsZSIsIERPVUJMRV9LRVlXfSwKICAgICAgIHsiIn0sCi0jbGluZSA1ICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNyAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiRVhQT1JUX1NZTUJPTCIsIEVYUE9SVF9TWU1CT0xfS0VZV30sCiAgICAgICB7IiJ9LCB7IiJ9LAotI2xpbmUgMzggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0MCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiaW5saW5lIiwgSU5MSU5FX0tFWVd9LAotI2xpbmUgNiAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKKyNsaW5lIDggInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7IkVYUE9SVF9TWU1CT0xfR1BMIiwgRVhQT1JUX1NZTUJPTF9LRVlXfSwKLSNsaW5lIDQxICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7InJlZ2lzdGVyIiwgUkVHSVNURVJfS0VZV30sCiAgICAgICB7IiJ9LAotI2xpbmUgMjIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSAyNCAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsiX0Jvb2wiLCBCT09MX0tFWVd9LAotI2xpbmUgNDMgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCisjbGluZSA0NSAic2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiIKICAgICAgIHsic2lnbmVkIiwgU0lHTkVEX0tFWVd9LAogICAgICAgeyIifSwgeyIifSwKLSNsaW5lIDQwICJzY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmIgorI2xpbmUgNDIgInNjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYiCiAgICAgICB7ImxvbmciLCBMT05HX0tFWVd9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZiBiL3NjcmlwdHMvZ2Vua3N5bXMva2V5d29yZHMuZ3BlcmYKaW5kZXggNWVmMzczMy4uOGZlOTc3YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9nZW5rc3ltcy9rZXl3b3Jkcy5ncGVyZgorKysgYi9zY3JpcHRzL2dlbmtzeW1zL2tleXdvcmRzLmdwZXJmCkBAIC0xLDQgKzEsNiBAQAogJXsKK3N0cnVjdCByZXN3b3JkOworc3RhdGljIGNvbnN0IHN0cnVjdCByZXN3b3JkICppc19yZXNlcnZlZF93b3JkKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CiAlfQogc3RydWN0IHJlc3dvcmQgeyBjb25zdCBjaGFyICpuYW1lOyBpbnQgdG9rZW47IH0KICUlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAppbmRleCBjZGI0NGI2Li44MWE2N2E0IDEwMDc1NQotLS0gYS9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCisrKyBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKQEAgLTUsMTUgKzUsMTUgQEAKICMgUHJpbnQgc2VsZWN0ZWQgTUFJTlRBSU5FUlMgaW5mb3JtYXRpb24gZm9yCiAjIHRoZSBmaWxlcyBtb2RpZmllZCBpbiBhIHBhdGNoIG9yIGZvciBhIGZpbGUKICMKLSMgdXNhZ2U6IHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIDxwYXRjaD4KLSMgICAgICAgIHBlcmwgc2NyaXB0cy9nZXRfbWFpbnRhaW5lcnMucGwgW09QVElPTlNdIC1mIDxmaWxlPgorIyB1c2FnZTogcGVybCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIFtPUFRJT05TXSA8cGF0Y2g+CisjICAgICAgICBwZXJsIHNjcmlwdHMvZ2V0X21haW50YWluZXIucGwgW09QVElPTlNdIC1mIDxmaWxlPgogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIKIAogdXNlIHN0cmljdDsKIAogbXkgJFAgPSAkMDsKLW15ICRWID0gJzAuMjAnOworbXkgJFYgPSAnMC4yMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTM3LDYgKzM3LDcgQEAKIG15ICR3ZWIgPSAwOwogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKK215ICRrZXl3b3JkcyA9IDE7CiBteSAkZnJvbV9maWxlbmFtZSA9IDA7CiBteSAkcGF0dGVybl9kZXB0aCA9IDA7CiBteSAkdmVyc2lvbiA9IDA7CkBAIC04NCw2ICs4NSw3IEBACiAJCSdzY20hJyA9PiBcJHNjbSwKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCisJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCiAJCSdofGhlbHAnID0+IFwkaGVscCwKQEAgLTEzMiw2ICsxMzQsOCBAQAogIyMgUmVhZCBNQUlOVEFJTkVSUyBmb3IgdHlwZS92YWx1ZSBwYWlycwogCiBteSBAdHlwZXZhbHVlID0gKCk7CitteSAla2V5d29yZF9oYXNoOworCiBvcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7CiB3aGlsZSAoPE1BSU5UPikgewogICAgIG15ICRsaW5lID0gJF87CkBAIC0xNDksNiArMTUzLDggQEAKIAkgICAgaWYgKCgtZCAkdmFsdWUpKSB7CiAJCSR2YWx1ZSA9fiBzQChbXi9dKSRAJDEvQDsKIAkgICAgfQorCX0gZWxzaWYgKCR0eXBlIGVxICJLIikgeworCSAgICAka2V5d29yZF9oYXNoe0B0eXBldmFsdWV9ID0gJHZhbHVlOwogCX0KIAlwdXNoKEB0eXBldmFsdWUsICIkdHlwZTokdmFsdWUiKTsKICAgICB9IGVsc2lmICghL14oXHMpKiQvKSB7CkBAIC0xODgsNiArMTk0LDcgQEAKIAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKK215IEBrZXl3b3JkX3R2aSA9ICgpOwogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewogICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKQEAgLTE5OCwxMSArMjA1LDI0IEBACiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7CisJaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgeworCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7CisJICAgIHdoaWxlICg8RklMRT4pIHsKKwkJbXkgJHBhdGNoX2xpbmUgPSAkXzsKKwkJZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7CisJCSAgICBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eLioka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7CisJCQlwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCQkgICAgfQorCQl9CisJICAgIH0KKwkgICAgY2xvc2UoRklMRSk7CisJfQogICAgIH0gZWxzZSB7CiAJbXkgJGZpbGVfY250ID0gQGZpbGVzOwogCW15ICRsYXN0ZmlsZTsKIAlvcGVuKFBBVENILCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwogCXdoaWxlICg8UEFUQ0g+KSB7CisJICAgIG15ICRwYXRjaF9saW5lID0gJF87CiAJICAgIGlmIChtL15cK1wrXCtccysoXFMrKS8pIHsKIAkJbXkgJGZpbGVuYW1lID0gJDE7CiAJCSRmaWxlbmFtZSA9fiBzQF5bXi9dKi9AQDsKQEAgLTIxMyw2ICsyMzMsMTIgQEAKIAkJaWYgKCRlbWFpbF9naXRfYmxhbWUpIHsKIAkJICAgIHB1c2goQHJhbmdlLCAiJGxhc3RmaWxlOiQxOiQyIik7CiAJCX0KKwkgICAgfSBlbHNpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCRwYXRjaF9saW5lID1+IG0vXlsrLV0uKiRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CisJCX0KIAkgICAgfQogCX0KIAljbG9zZShQQVRDSCk7CkBAIC0yODYsNiArMzEyLDEzIEBACiAgICAgfQogfQogCitpZiAoJGtleXdvcmRzKSB7CisgICAgQGtleXdvcmRfdHZpID0gc29ydF9hbmRfdW5pcShAa2V5d29yZF90dmkpOworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBrZXl3b3JkX3R2aSkgeworCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKyAgICB9Cit9CisKIGlmICgkZW1haWwpIHsKICAgICBmb3JlYWNoIG15ICRjaGllZiAoQHBlbmd1aW5fY2hpZWYpIHsKIAlpZiAoJGNoaWVmID1+IG0vXiguKik6KC4qKS8pIHsKQEAgLTM4NCw2ICs0MTcsNyBAQAogCiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCisgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKICAgLS12ZXJzaW9uID0+IHNob3cgdmVyc2lvbgogICAtLWhlbHAgPT4gc2hvdyB0aGlzIGhlbHAgaW5mb3JtYXRpb24KIApAQCAtNDg2LDcgKzUyMCw2IEBACiB9CiAKIHN1YiBmaW5kX3N0YXJ0aW5nX2luZGV4IHsKLQogICAgIG15ICgkaW5kZXgpID0gQF87CiAKICAgICB3aGlsZSAoJGluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9oZWFkZXJzX2luc3RhbGwucGwgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAppbmRleCBjNmFlNDA1Li5iODljYTJjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbAorKysgYi9zY3JpcHRzL2hlYWRlcnNfaW5zdGFsbC5wbApAQCAtMjAsNyArMjAsNyBAQAogCiBteSAoJHJlYWRkaXIsICRpbnN0YWxsZGlyLCAkYXJjaCwgQGZpbGVzKSA9IEBBUkdWOwogCi1teSAkdW5pZmRlZiA9ICJzY3JpcHRzL3VuaWZkZWYgLVVfX0tFUk5FTF9fIjsKK215ICR1bmlmZGVmID0gInNjcmlwdHMvdW5pZmRlZiAtVV9fS0VSTkVMX18gLURfX0VYUE9SVEVEX0hFQURFUlNfXyI7CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgewogCWxvY2FsICpJTkZJTEU7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbGV4Lnpjb25mLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCmluZGV4IGRjM2U4MTguLmZkYzcxMTMgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy9sZXguemNvbmYuY19zaGlwcGVkCkBAIC0xNjAsNyArMTYwLDE1IEBACiAKIC8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCiAjaWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNlCiAjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KICNlbmRpZgogCiAvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgpAQCAtODAyLDcgKzgxMCw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTgxMCw3ICs4MTgsNyBAQAogCSp0ZXh0ID0gMDsKIH0KIAotdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CiAJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgewpAQCAtODI0LDcgKzgzMiw3IEBACiAJdGV4dFt0ZXh0X3NpemVdID0gMDsKIH0KIAotdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCXRleHQgPSBtYWxsb2Moc2l6ZSArIDEpOwogCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOwpAQCAtOTE0LDcgKzkyMiwxMiBAQAogCiAvKiBBbW91bnQgb2Ygc3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCiAjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQogI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLwogI2VuZGlmCiAKIC8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovCkBAIC05MjIsNyArOTM1LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggemNvbmZ0ZXh0LCB6Y29uZmxlbmcsIDEsIHpjb25mb3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHpjb25mdGV4dCwgemNvbmZsZW5nLCAxLCB6Y29uZm91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTIwNjAsOCArMjA3Myw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHpjb25mbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIGIvc2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmCmluZGV4IDI1ZWY1ZDAuLmQ4YmM3NDIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZgorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYKQEAgLTksNiArOSw4IEBACiAKIHN0cnVjdCBrY29uZl9pZDsKIAorc3RhdGljIHN0cnVjdCBrY29uZl9pZCAqa2NvbmZfaWRfbG9va3VwKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0ciwgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGxlbik7CisKICUlCiBtYWlubWVudSwJVF9NQUlOTUVOVSwJVEZfQ09NTUFORAogbWVudSwJCVRfTUVOVSwJCVRGX0NPTU1BTkQKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAppbmRleCA1YzczZDUxMzMuLmMxNzQ4ZmEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAorKysgYi9zY3JpcHRzL2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKQEAgLTMwLDYgKzMwLDggQEAKICNlbmRpZgogCiBzdHJ1Y3Qga2NvbmZfaWQ7CisKK3N0YXRpYyBzdHJ1Y3Qga2NvbmZfaWQgKmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pOwogLyogbWF4aW11bSBrZXkgcmFuZ2UgPSA0NywgZHVwbGljYXRlcyA9IDAgKi8KIAogI2lmZGVmIF9fR05VQ19fCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYubCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCmluZGV4IDIxZmY2OWMuLmQ4ZjcyMzYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi5sCkBAIC0zOSw3ICszOSw3IEBACiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwogc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKIAotdm9pZCBuZXdfc3RyaW5nKHZvaWQpCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCiB7CiAJdGV4dCA9IG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKIAl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsKQEAgLTQ3LDcgKzQ3LDcgQEAKIAkqdGV4dCA9IDA7CiB9CiAKLXZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQogewogCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSArIHNpemUgKyAxOwogCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKQEAgLTYxLDcgKzYxLDcgQEAKIAl0ZXh0W3RleHRfc2l6ZV0gPSAwOwogfQogCi12b2lkIGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQorc3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCiB7CiAJdGV4dCA9IG1hbGxvYyhzaXplICsgMSk7CiAJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZCBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCmluZGV4IDk1ZGY4MzMuLjZlOWRjZDUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi50YWIuY19zaGlwcGVkCkBAIC0xLDI0ICsxLDIzIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNC4xLiAgKi8KIAogLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIAorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CiAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KKyAgIAogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwogCiAvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKICAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCkBAIC0yOSw3ICsyOCw3IEBACiAgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKICAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KLQorICAgCiAgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCiAgICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovCiAKQEAgLTQ3LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuMyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMSIKIAogLyogU2tlbGV0b24gbmFtZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtNTUsMTcgKzU0LDg0IEBACiAvKiBQdXJlIHBhcnNlcnMuICAqLwogI2RlZmluZSBZWVBVUkUgMAogCisvKiBQdXNoIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVTEwgMQorCiAvKiBVc2luZyBsb2NhdGlvbnMuICAqLwogI2RlZmluZSBZWUxTUF9ORUVERUQgMAogCiAvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gbmFtZXMuICAqLwotI2RlZmluZSB5eXBhcnNlIHpjb25mcGFyc2UKLSNkZWZpbmUgeXlsZXggICB6Y29uZmxleAotI2RlZmluZSB5eWVycm9yIHpjb25mZXJyb3IKLSNkZWZpbmUgeXlsdmFsICB6Y29uZmx2YWwKLSNkZWZpbmUgeXljaGFyICB6Y29uZmNoYXIKLSNkZWZpbmUgeXlkZWJ1ZyB6Y29uZmRlYnVnCi0jZGVmaW5lIHl5bmVycnMgemNvbmZuZXJycworI2RlZmluZSB5eXBhcnNlICAgICAgICAgemNvbmZwYXJzZQorI2RlZmluZSB5eWxleCAgICAgICAgICAgemNvbmZsZXgKKyNkZWZpbmUgeXllcnJvciAgICAgICAgIHpjb25mZXJyb3IKKyNkZWZpbmUgeXlsdmFsICAgICAgICAgIHpjb25mbHZhbAorI2RlZmluZSB5eWNoYXIgICAgICAgICAgemNvbmZjaGFyCisjZGVmaW5lIHl5ZGVidWcgICAgICAgICB6Y29uZmRlYnVnCisjZGVmaW5lIHl5bmVycnMgICAgICAgICB6Y29uZm5lcnJzCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjZGVmaW5lIExLQ19ESVJFQ1RfTElOSworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCisKKyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2ludCBjZGVidWcgPSBQUklOVEQ7CisKK2V4dGVybiBpbnQgemNvbmZsZXgodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mZXJyb3IoY29uc3QgY2hhciAqZXJyKTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFsyNTddOworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7CisKKyNkZWZpbmUgWVlERUJVRyAwCisjaWYgWVlERUJVRworI2RlZmluZSBZWUVSUk9SX1ZFUkJPU0UKKyNlbmRpZgorCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJST1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4gICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2VuZGlmCiAKIAogLyogVG9rZW5zLiAgKi8KQEAgLTEwOCwxMjkgKzE3NCwzNiBAQAogICAgICBUX05PVCA9IDI4OQogICAgfTsKICNlbmRpZgotLyogVG9rZW5zLiAgKi8KLSNkZWZpbmUgVF9NQUlOTUVOVSAyNTgKLSNkZWZpbmUgVF9NRU5VIDI1OQotI2RlZmluZSBUX0VORE1FTlUgMjYwCi0jZGVmaW5lIFRfU09VUkNFIDI2MQotI2RlZmluZSBUX0NIT0lDRSAyNjIKLSNkZWZpbmUgVF9FTkRDSE9JQ0UgMjYzCi0jZGVmaW5lIFRfQ09NTUVOVCAyNjQKLSNkZWZpbmUgVF9DT05GSUcgMjY1Ci0jZGVmaW5lIFRfTUVOVUNPTkZJRyAyNjYKLSNkZWZpbmUgVF9IRUxQIDI2NwotI2RlZmluZSBUX0hFTFBURVhUIDI2OAotI2RlZmluZSBUX0lGIDI2OQotI2RlZmluZSBUX0VORElGIDI3MAotI2RlZmluZSBUX0RFUEVORFMgMjcxCi0jZGVmaW5lIFRfT1BUSU9OQUwgMjcyCi0jZGVmaW5lIFRfUFJPTVBUIDI3MwotI2RlZmluZSBUX1RZUEUgMjc0Ci0jZGVmaW5lIFRfREVGQVVMVCAyNzUKLSNkZWZpbmUgVF9TRUxFQ1QgMjc2Ci0jZGVmaW5lIFRfUkFOR0UgMjc3Ci0jZGVmaW5lIFRfT1BUSU9OIDI3OAotI2RlZmluZSBUX09OIDI3OQotI2RlZmluZSBUX1dPUkQgMjgwCi0jZGVmaW5lIFRfV09SRF9RVU9URSAyODEKLSNkZWZpbmUgVF9VTkVRVUFMIDI4MgotI2RlZmluZSBUX0NMT1NFX1BBUkVOIDI4MwotI2RlZmluZSBUX09QRU5fUEFSRU4gMjg0Ci0jZGVmaW5lIFRfRU9MIDI4NQotI2RlZmluZSBUX09SIDI4NgotI2RlZmluZSBUX0FORCAyODcKLSNkZWZpbmUgVF9FUVVBTCAyODgKLSNkZWZpbmUgVF9OT1QgMjg5CiAKIAogCi0KLS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Ci0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KLSAqLwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLQotI2RlZmluZSBMS0NfRElSRUNUX0xJTksKLSNpbmNsdWRlICJsa2MuaCIKLQotI2luY2x1ZGUgInpjb25mLmhhc2guYyIKLQotI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQotCi0jZGVmaW5lIFBSSU5URAkJMHgwMDAxCi0jZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgotCi1pbnQgY2RlYnVnID0gUFJJTlREOwotCi1leHRlcm4gaW50IHpjb25mbGV4KHZvaWQpOwotc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZmVycm9yKGNvbnN0IGNoYXIgKmVycik7Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKLQotc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbMjU3XTsKLQotc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OwotCi0jZGVmaW5lIFlZREVCVUcgMAotI2lmIFlZREVCVUcKLSNkZWZpbmUgWVlFUlJPUl9WRVJCT1NFCi0jZW5kaWYKLQotCi0vKiBFbmFibGluZyB0cmFjZXMuICAqLwotI2lmbmRlZiBZWURFQlVHCi0jIGRlZmluZSBZWURFQlVHIDAKLSNlbmRpZgotCi0vKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8KLSNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKLSMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMQotI2Vsc2UKLSMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCi0jZW5kaWYKLQotLyogRW5hYmxpbmcgdGhlIHRva2VuIHRhYmxlLiAgKi8KLSNpZm5kZWYgWVlUT0tFTl9UQUJMRQotIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAwCi0jZW5kaWYKLQogI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECiB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKLQogeworCisKIAljaGFyICpzdHJpbmc7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IHN5bWJvbCAqc3ltYm9sOwogCXN0cnVjdCBleHByICpleHByOwogCXN0cnVjdCBtZW51ICptZW51OwogCXN0cnVjdCBrY29uZl9pZCAqaWQ7Ci19Ci0vKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLwogCi0JWVlTVFlQRTsKKworCit9IFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwogIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQogI2VuZGlmCiAKIAotCiAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCiAKIAotLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKy8qIEluY2x1ZGUgemNvbmYuaGFzaC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLworI2luY2x1ZGUgInpjb25mLmhhc2guYyIKKwogCiAKICNpZmRlZiBzaG9ydApAQCAtMzA2LDE0ICsyNzksMTQgQEAKICNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAogICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCiBzdGF0aWMgaW50Ci1ZWUlEIChpbnQgaSkKK1lZSUQgKGludCB5eWkpCiAjZWxzZQogc3RhdGljIGludAotWVlJRCAoaSkKLSAgICBpbnQgaTsKK1lZSUQgKHl5aSkKKyAgICBpbnQgeXlpOwogI2VuZGlmCiB7Ci0gIHJldHVybiBpOworICByZXR1cm4geXlpOwogfQogI2VuZGlmCiAKQEAgLTM5NCw5ICszNjcsOSBAQAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCiB7Ci0gIHl5dHlwZV9pbnQxNiB5eXNzOwotICBZWVNUWVBFIHl5dnM7Ci0gIH07CisgIHl5dHlwZV9pbnQxNiB5eXNzX2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OwogCiAvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwogIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCkBAIC00MzAsMTIgKzQwMywxMiBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKICAgICBkbwkJCQkJCQkJCVwKICAgICAgIHsJCQkJCQkJCQlcCiAJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCi0JWVlDT1BZICgmeXlwdHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAotCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAogCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKIAl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCiAgICAgICB9CQkJCQkJCQkJXApAQCAtNTU4LDE4ICs1MzEsMTggQEAKIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgIDEwNCwgICAxMDQsICAgMTA2LCAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLAotICAgICAxMTQsICAgMTE4LCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjYsCi0gICAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTM1LCAgIDEzNiwgICAxNDIsICAgMTUwLCAgIDE1NiwKLSAgICAgMTY0LCAgIDE3NCwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTgwLCAgIDE4MSwgICAxODQsICAgMTkyLAotICAgICAxOTgsICAgMjA4LCAgIDIxNCwgICAyMjAsICAgMjIzLCAgIDIyNSwgICAyMzYsICAgMjM3LCAgIDI0MiwgICAyNTEsCi0gICAgIDI1NiwgICAyNjQsICAgMjY3LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc2LCAgIDI4MiwKLSAgICAgMjkzLCAgIDI5OSwgICAzMDksICAgMzExLCAgIDMxNiwgICAzMjQsICAgMzMyLCAgIDMzNSwgICAzMzcsICAgMzM4LAotICAgICAzMzksICAgMzQ0LCAgIDM1MSwgICAzNTYsICAgMzY0LCAgIDM2NywgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzQsCi0gICAgIDM4MiwgICAzODksICAgMzk2LCAgIDQwMiwgICA0MDksICAgNDExLCAgIDQxMiwgICA0MTMsICAgNDE2LCAgIDQyNCwKLSAgICAgNDI2LCAgIDQzMSwgICA0MzIsICAgNDM1LCAgIDQzNiwgICA0MzcsICAgNDQxLCAgIDQ0MiwgICA0NDUsICAgNDQ2LAotICAgICA0NDksICAgNDUwLCAgIDQ1MSwgICA0NTIsICAgNDUzLCAgIDQ1NCwgICA0NTUsICAgNDU4LCAgIDQ1OSwgICA0NjIsCi0gICAgIDQ2MworICAgICAgIDAsICAgMTA3LCAgIDEwNywgICAxMDksICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsCisgICAgIDExNywgICAxMjEsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyNSwgICAxMjUsICAgMTI1LCAgIDEyOSwKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgIDEzNCwgICAxMzgsICAgMTM5LCAgIDE0NSwgICAxNTMsICAgMTU5LAorICAgICAxNjcsICAgMTc3LCAgIDE3OSwgICAxODAsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NywgICAxOTUsCisgICAgIDIwMSwgICAyMTEsICAgMjE3LCAgIDIyMywgICAyMjYsICAgMjI4LCAgIDIzOSwgICAyNDAsICAgMjQ1LCAgIDI1NCwKKyAgICAgMjU5LCAgIDI2NywgICAyNzAsICAgMjcyLCAgIDI3MywgICAyNzQsICAgMjc1LCAgIDI3NiwgICAyNzksICAgMjg1LAorICAgICAyOTYsICAgMzAyLCAgIDMxMiwgICAzMTQsICAgMzE5LCAgIDMyNywgICAzMzUsICAgMzM4LCAgIDM0MCwgICAzNDEsCisgICAgIDM0MiwgICAzNDcsICAgMzU0LCAgIDM1OSwgICAzNjcsICAgMzcwLCAgIDM3MiwgICAzNzMsICAgMzc0LCAgIDM3NywKKyAgICAgMzg1LCAgIDM5MiwgICAzOTksICAgNDA1LCAgIDQxMiwgICA0MTQsICAgNDE1LCAgIDQxNiwgICA0MTksICAgNDI3LAorICAgICA0MjksICAgNDM0LCAgIDQzNSwgICA0MzgsICAgNDM5LCAgIDQ0MCwgICA0NDQsICAgNDQ1LCAgIDQ0OCwgICA0NDksCisgICAgIDQ1MiwgICA0NTMsICAgNDU0LCAgIDQ1NSwgICA0NTYsICAgNDU3LCAgIDQ1OCwgICA0NjEsICAgNDYyLCAgIDQ2NSwKKyAgICAgNDY2CiB9OwogI2VuZGlmCiAKQEAgLTk4NSwxNyArOTU4LDIwIEBACiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKICAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQogc3RhdGljIHZvaWQKLXl5X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKmJvdHRvbSwgeXl0eXBlX2ludDE2ICp0b3ApCit5eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkKICNlbHNlCiBzdGF0aWMgdm9pZAoteXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQotICAgIHl5dHlwZV9pbnQxNiAqYm90dG9tOwotICAgIHl5dHlwZV9pbnQxNiAqdG9wOworeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKKyAgICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOworICAgIHl5dHlwZV9pbnQxNiAqeXl0b3A7CiAjZW5kaWYKIHsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKLSAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsrYm90dG9tKQotICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAgICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKKyAgICB9CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIApAQCAtMTAyOSwxMSArMTAwNSwxMSBAQAogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sCiAJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKIAkJICAgICAgIAkJICAgICAgICk7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIApAQCAtMTM0MywxMCArMTMxOSw4IEBACiAJYnJlYWs7CiAgICAgfQogfQotDAogCiAvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwotCiAjaWZkZWYgWVlQQVJTRV9QQVJBTQogI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cwogaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOwpAQCAtMTM2MiwxMSArMTMzNiwxMCBAQAogI2VuZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLwogCiAKLQotLyogVGhlIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIGludCB5eWNoYXI7CiAKLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KIFlZU1RZUEUgeXlsdmFsOwogCiAvKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLwpAQCAtMTM3NCw5ICsxMzQ3LDkgQEAKIAogCiAKLS8qLS0tLS0tLS0tLS4KLXwgeXlwYXJzZS4gIHwKLWAtLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlwYXJzZSBvciB5eXB1c2hfcGFyc2UuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRlZiBZWVBBUlNFX1BBUkFNCiAjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKQEAgLTE0MDAsMTQgKzEzNzMsMzkgQEAKICNlbmRpZgogI2VuZGlmCiB7Ci0gIAotICBpbnQgeXlzdGF0ZTsKKworCisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisgICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgYHl5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4KKyAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgorCisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQRSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKwogICBpbnQgeXluOwogICBpbnQgeXlyZXN1bHQ7Ci0gIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLwotICBpbnQgeXllcnJzdGF0dXM7Ci0gIC8qIExvb2stYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovCi0gIGludCB5eXRva2VuID0gMDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbjsKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKwogI2lmIFlZRVJST1JfVkVSQk9TRQogICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8KICAgY2hhciB5eW1zZ2J1ZlsxMjhdOwpAQCAtMTQxNSw1MSArMTQxMywyOCBAQAogICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKICNlbmRpZgogCi0gIC8qIFRocmVlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6Ci0gICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCi0gICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCi0gICAgIGB5eWxzJzogcmVsYXRlZCB0byBsb2NhdGlvbnMuCi0KLSAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93Ci0gICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUuICAqLwotCi0gIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07Ci0gIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3NhOwotICB5eXR5cGVfaW50MTYgKnl5c3NwOwotCi0gIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOwotICBZWVNUWVBFICp5eXZzID0geXl2c2E7Ci0gIFlZU1RZUEUgKnl5dnNwOwotCi0KLQogI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQogCi0gIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKLSAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KLSAgWVlTVFlQRSB5eXZhbDsKLQotCiAgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCiAgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KICAgaW50IHl5bGVuID0gMDsKIAorICB5eXRva2VuID0gMDsKKyAgeXlzcyA9IHl5c3NhOworICB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisKICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKIAogICB5eXN0YXRlID0gMDsKICAgeXllcnJzdGF0dXMgPSAwOwogICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsJCS8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCiAKICAgLyogSW5pdGlhbGl6ZSBzdGFjayBwb2ludGVycy4KICAgICAgV2FzdGUgb25lIGVsZW1lbnQgb2YgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrCiAgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KICAgICAgVGhlIHdhc3RlZCBlbGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLwotCiAgIHl5c3NwID0geXlzczsKICAgeXl2c3AgPSB5eXZzOwogCkBAIC0xNDg5LDcgKzE0NjQsNiBAQAogCVlZU1RZUEUgKnl5dnMxID0geXl2czsKIAl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKIAotCiAJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCiAJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQogCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKQEAgLTE0OTcsNyArMTQ3MSw2IEBACiAJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCiAJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKIAkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotCiAJCSAgICAmeXlzdGFja3NpemUpOwogCiAJeXlzcyA9IHl5c3MxOwpAQCAtMTUyMCw5ICsxNDkzLDggQEAKIAkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CiAJaWYgKCEgeXlwdHIpCiAJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOwotCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOwotCisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCiAJaWYgKHl5c3MxICE9IHl5c3NhKQogCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CkBAIC0xNTMzLDcgKzE1MDUsNiBAQAogICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKICAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CiAKLQogICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAogCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIApAQCAtMTU0Myw2ICsxNTE0LDkgQEAKIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwogCisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKICAgZ290byB5eWJhY2t1cDsKIAogLyotLS0tLS0tLS0tLS4KQEAgLTE1NTEsMTYgKzE1MjUsMTYgQEAKIHl5YmFja3VwOgogCiAgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9vay1haGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCiAKLSAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2stYWhlYWQgdG9rZW4uICAqLworICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICBpZiAoeXluID09IFlZUEFDVF9OSU5GKQogICAgIGdvdG8geXlkZWZhdWx0OwogCi0gIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLwogCi0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KKyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4gICovCiAgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKICAgICB7CiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKQEAgLTE1OTIsMjAgKzE1NjYsMTYgQEAKICAgICAgIGdvdG8geXlyZWR1Y2U7CiAgICAgfQogCi0gIGlmICh5eW4gPT0gWVlGSU5BTCkKLSAgICBZWUFDQ0VQVDsKLQogICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCiAgICAgIHN0YXR1cy4gICovCiAgIGlmICh5eWVycnN0YXR1cykKICAgICB5eWVycnN0YXR1cy0tOwogCi0gIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCiAgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CiAKLSAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbiB1bmxlc3MgaXQgaXMgZW9mLiAgKi8KLSAgaWYgKHl5Y2hhciAhPSBZWUVPRikKLSAgICB5eWNoYXIgPSBZWUVNUFRZOworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXljaGFyID0gWVlFTVBUWTsKIAogICB5eXN0YXRlID0geXluOwogICAqKyt5eXZzcCA9IHl5bHZhbDsKQEAgLTIwMjksNyArMTk5OSw2IEBACiAgICAgYnJlYWs7CiAKIAotLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCiAKICAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KQEAgLTIwNDEsNyArMjAxMCw2IEBACiAKICAgKisreXl2c3AgPSB5eXZhbDsKIAotCiAgIC8qIE5vdyBgc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4gIERldGVybWluZSB3aGF0IHN0YXRlCiAgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQogICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovCkBAIC0yMTA2LDcgKzIwNzQsNyBAQAogCiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rLWFoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCiAJIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKQEAgLTIxMjMsNyArMjA5MSw3IEBACiAJfQogICAgIH0KIAotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgogICAgICB0b2tlbi4gICovCiAgIGdvdG8geXllcnJsYWIxOwogCkBAIC0yMTgwLDkgKzIxNDgsNiBAQAogICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKICAgICB9CiAKLSAgaWYgKHl5biA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCiAgICorK3l5dnNwID0geXlsdmFsOwogCiAKQEAgLTIyMDcsNyArMjE3Miw3IEBACiAgIHl5cmVzdWx0ID0gMTsKICAgZ290byB5eXJldHVybjsKIAotI2lmbmRlZiB5eW92ZXJmbG93CisjaWYgIWRlZmluZWQoeXlvdmVyZmxvdykgfHwgWVlFUlJPUl9WRVJCT1NFCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCiB8IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yMjE4LDcgKzIxODMsNyBAQAogI2VuZGlmCiAKIHl5cmV0dXJuOgotICBpZiAoeXljaGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCiAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCiAJCSB5eXRva2VuLCAmeXlsdmFsKTsKICAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hpY2ggYWN0aW9uIHRyaWdnZXJlZApAQCAtMjI4NCw3ICsyMjQ5LDcgQEAKIAlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKIH0KIAotY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQogewogCXN3aXRjaCAodG9rZW4pIHsKIAljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CkBAIC0yMzQ4LDcgKzIzMTMsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJY29uc3QgY2hhciAqcDsKIAlpbnQgbGVuOwpAQCAtMjM2NSw3ICsyMzMwLDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvemNvbmYueSBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CmluZGV4IDk3MTBiODIuLjhjNDM0OTEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CisrKyBiL3NjcmlwdHMva2NvbmZpZy96Y29uZi55CkBAIC0xNCw4ICsxNCw2IEBACiAjZGVmaW5lIExLQ19ESVJFQ1RfTElOSwogI2luY2x1ZGUgImxrYy5oIgogCi0jaW5jbHVkZSAiemNvbmYuaGFzaC5jIgotCiAjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCiAKICNkZWZpbmUgUFJJTlRECQkweDAwMDEKQEAgLTEwMCw2ICs5OCwxMSBAQAogCQltZW51X2VuZF9tZW51KCk7CiB9IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CiAKKyV7CisvKiBJbmNsdWRlIHpjb25mLmhhc2guYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJ6Y29uZi5oYXNoLmMiCislfQorCiAlJQogaW5wdXQ6IHN0bXRfbGlzdDsKIApAQCAtNTAxLDcgKzUwNCw3IEBACiAJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7CiB9CiAKLWNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKIHsKIAlzd2l0Y2ggKHRva2VuKSB7CiAJY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwpAQCAtNTY1LDcgKzU2OCw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQorc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAljb25zdCBjaGFyICpwOwogCWludCBsZW47CkBAIC01ODIsNyArNTg1LDcgQEAKIAlwdXRjKCciJywgb3V0KTsKIH0KIAotdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQogewogCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKIAlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21rY29tcGlsZV9oIGIvc2NyaXB0cy9ta2NvbXBpbGVfaAppbmRleCA2YTEyZGQ5Li5iY2UzZDBmIDEwMDc1NQotLS0gYS9zY3JpcHRzL21rY29tcGlsZV9oCisrKyBiL3NjcmlwdHMvbWtjb21waWxlX2gKQEAgLTEsMyArMSw1IEBACisjIS9iaW4vc2gKKwogVEFSR0VUPSQxCiBBUkNIPSQyCiBTTVA9JDMKQEAgLTUwLDcgKzUyLDcgQEAKICMgVHJ1bmNhdGUgdG8gbWF4aW11bSBsZW5ndGgKIAogVVRTX0xFTj02NAotVVRTX1RSVU5DQVRFPSJzZWQgLWUgcy9cKC5cezEsJFVUU19MRU5cfVwpLiovXDEvIgorVVRTX1RSVU5DQVRFPSJjdXQgLWIgLSRVVFNfTEVOIgogCiAjIEdlbmVyYXRlIGEgdGVtcG9yYXJ5IGNvbXBpbGUuaAogCkBAIC02Niw5ICs2OCwxMyBAQAogICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfSE9TVCBcImBob3N0bmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKIAogICBpZiBbIC14IC9iaW4vZG5zZG9tYWlubmFtZSBdOyB0aGVuCi0gICAgZWNobyBcI2RlZmluZSBMSU5VWF9DT01QSUxFX0RPTUFJTiBcImBkbnNkb21haW5uYW1lIHwgJFVUU19UUlVOQ0FURWBcIgorICAgIGRvbWFpbj1gZG5zZG9tYWlubmFtZSAyPiAvZGV2L251bGxgCiAgIGVsaWYgWyAteCAvYmluL2RvbWFpbm5hbWUgXTsgdGhlbgotICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4gXCJgZG9tYWlubmFtZSB8ICRVVFNfVFJVTkNBVEVgXCIKKyAgICBkb21haW49YGRvbWFpbm5hbWUgMj4gL2Rldi9udWxsYAorICBmaQorCisgIGlmIFsgLW4gIiRkb21haW4iIF07IHRoZW4KKyAgICBlY2hvIFwjZGVmaW5lIExJTlVYX0NPTVBJTEVfRE9NQUlOIFwiYGVjaG8gJGRvbWFpbiB8ICRVVFNfVFJVTkNBVEVgXCIKICAgZWxzZQogICAgIGVjaG8gXCNkZWZpbmUgTElOVVhfQ09NUElMRV9ET01BSU4KICAgZmkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZSBiL3NjcmlwdHMvcGFja2FnZS9NYWtlZmlsZQppbmRleCBmYTRhMGExLi5mNjdjYzg4IDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvTWFrZWZpbGUKKysrIGIvc2NyaXB0cy9wYWNrYWdlL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw5IEBACiAjIGUpIGdlbmVyYXRlIHRoZSBycG0gZmlsZXMsIGJhc2VkIG9uIGtlcm5lbC5zcGVjCiAjIC0gVXNlIC8uIHRvIGF2b2lkIHRhciBwYWNraW5nIGp1c3QgdGhlIHN5bWxpbmsKIAorIyBOb3RlIHRoYXQgdGhlIHJwbS1wa2cgdGFyZ2V0IGNhbm5vdCBiZSB1c2VkIHdpdGggS0JVSUxEX09VVFBVVCwKKyMgYnV0IHRoZSBiaW5ycG0tcGtnIHRhcmdldCBjYW47IGZvciBzb21lIHJlYXNvbiBPPSBnZXRzIGlnbm9yZWQuCisKICMgRG8gd2UgaGF2ZSBycG1idWlsZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byB0aGUgb2xkZXIgcnBtCiBSUE0gOj0gJChzaGVsbCBpZiBbIC14ICIvdXNyL2Jpbi9ycG1idWlsZCIgXTsgdGhlbiBlY2hvIHJwbWJ1aWxkOyBcCiAJICAgICAgICAgICBlbHNlIGVjaG8gcnBtOyBmaSkKQEAgLTMzLDYgKzM2LDEyIEBACiAJJChDT05GSUdfU0hFTEwpICQoTUtTUEVDKSA+ICRACiAKIHJwbS1wa2cgcnBtOiAkKG9ianRyZWUpL2tlcm5lbC5zcGVjIEZPUkNFCisJQGlmIHRlc3QgLW4gIiQoS0JVSUxEX09VVFBVVCkiOyB0aGVuIFwKKwkJZWNobyAiQnVpbGRpbmcgc291cmNlICsgYmluYXJ5IFJQTSBpcyBub3QgcG9zc2libGUgb3V0c2lkZSB0aGUiOyBcCisJCWVjaG8gImtlcm5lbCBzb3VyY2UgdHJlZS4gRG9uJ3Qgc2V0IEtCVUlMRF9PVVRQVVQsIG9yIHVzZSB0aGUiOyBcCisJCWVjaG8gImJpbnJwbS1wa2cgdGFyZ2V0IGluc3RlYWQuIjsgXAorCQlmYWxzZTsgXAorCWZpCiAJJChNQUtFKSBjbGVhbgogCSQoUFJFVikgbG4gLXNmICQoc3JjdHJlZSkgJChLRVJORUxQQVRIKQogCSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uID4gJChvYmp0cmVlKS8uc2NtdmVyc2lvbgpAQCAtNjEsNyArNzAsNyBAQAogCXNldCAtZTsgXAogCW12IC1mICQob2JqdHJlZSkvLnRtcF92ZXJzaW9uICQob2JqdHJlZSkvLnZlcnNpb24KIAotCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChzcmN0cmVlKSIgLS10YXJnZXQgXAorCSQoUlBNKSAkKFJQTU9QVFMpIC0tZGVmaW5lICJfYnVpbGRkaXIgJChvYmp0cmVlKSIgLS10YXJnZXQgXAogCQkkKFVUU19NQUNISU5FKSAtYmIgJDwKIAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9iaW5rZXJuZWwuc3BlYwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYyBiL3NjcmlwdHMvcGFja2FnZS9ta3NwZWMKaW5kZXggM2Q5M2Y4Yy4uNDdiZGQyZiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9wYWNrYWdlL21rc3BlYworKysgYi9zY3JpcHRzL3BhY2thZ2UvbWtzcGVjCkBAIC03MCw3ICs3MCw3IEBACiBlY2hvICdta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvbGliL2Zpcm13YXJlJwogZWNobyAiJWVuZGlmIgogCi1lY2hvICdJTlNUQUxMX01PRF9QQVRIPSRSUE1fQlVJTERfUk9PVCBtYWtlICV7X3NtcF9tZmxhZ3N9IG1vZHVsZXNfaW5zdGFsbCcKK2VjaG8gJ0lOU1RBTExfTU9EX1BBVEg9JFJQTV9CVUlMRF9ST09UIG1ha2UgJXtfc21wX21mbGFnc30gS0JVSUxEX1NSQz0gbW9kdWxlc19pbnN0YWxsJwogZWNobyAiJWlmYXJjaCBpYTY0IgogZWNobyAnY3AgJEtCVUlMRF9JTUFHRSAkUlBNX0JVSUxEX1JPT1QnIi9ib290L2VmaS92bWxpbnV6LSRLRVJORUxSRUxFQVNFIgogZWNobyAnbG4gLXMgJyJlZmkvdm1saW51ei0kS0VSTkVMUkVMRUFTRSIgJyRSUE1fQlVJTERfUk9PVCciL2Jvb3QvIgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2ZzLmMKaW5kZXggOGU5Nzc3Yi4uMGM3MmM5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfZnMuYworKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9mcy5jCkBAIC00Myw3ICs0Myw3IEBACiAJcmV0dXJuIGltYV9zaG93X2h0YWJsZV92YWx1ZShidWYsIGNvdW50LCBwcG9zLCAmaW1hX2h0YWJsZS52aW9sYXRpb25zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2h0YWJsZV92aW9sYXRpb25zX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9odGFibGVfdmlvbGF0aW9uc19vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19odGFibGVfdmlvbGF0aW9ucwogfTsKIApAQCAtNTUsNyArNTUsNyBAQAogCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfY291bnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19jb3VudF9vcHMgPSB7CiAJLnJlYWQgPSBpbWFfc2hvd19tZWFzdXJlbWVudHNfY291bnQKIH07CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXJldHVybiBzZXFfb3BlbihmaWxlLCAmaW1hX21lYXN1cm1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMjMzLDcgKzIzMyw3IEBACiAJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX3NlcW9wcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9hc2NpaV9tZWFzdXJlbWVudHNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW1hX2FzY2lpX21lYXN1cmVtZW50c19vcHMgPSB7CiAJLm9wZW4gPSBpbWFfYXNjaWlfbWVhc3VyZW1lbnRzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLApAQCAtMzEzLDcgKzMxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGltYV9tZWFzdXJlX3BvbGljeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbWFfbWVhc3VyZV9wb2xpY3lfb3BzID0gewogCS5vcGVuID0gaW1hX29wZW5fcG9saWN5LAogCS53cml0ZSA9IGltYV93cml0ZV9wb2xpY3ksCiAJLnJlbGVhc2UgPSBpbWFfcmVsZWFzZV9wb2xpY3kKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hX2lpbnQuYwppbmRleCBiOGRkNjkzLi5hNGUyYjFkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYV9paW50LmMKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9pbWFfaWludC5jCkBAIC01OCwxMSArNTgsMTEgQEAKIAogCWlmICghaW1hX2luaXRpYWxpemVkKQogCQlyZXR1cm4gaWludDsKLQlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpaW50ID0ga21lbV9jYWNoZV9hbGxvYyhpaW50X2NhY2hlLCBHRlBfTk9GUyk7CiAJaWYgKCFpaW50KQogCQlyZXR1cm4gaWludDsKIAotCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCXJjID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9OT0ZTKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYyBiL3NlY3VyaXR5L2tleXMva2V5Y3RsLmMKaW5kZXggMmZiMjhlZi4uMDZlYzcyMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXljdGwuYworKysgYi9zZWN1cml0eS9rZXlzL2tleWN0bC5jCkBAIC04NzMsNyArODczLDcgQEAKIAkvKiBvdGhlcndpc2Ugc3BlY2lmeSB0aGUgZGVzdGluYXRpb24ga2V5cmluZyByZWNvcmRlZCBpbiB0aGUKIAkgKiBhdXRob3Jpc2F0aW9uIGtleSAoYW55IEtFWV9TUEVDXypfS0VZUklORykgKi8KIAlpZiAocmluZ2lkID49IEtFWV9TUEVDX1JFUVVFU1RPUl9LRVlSSU5HKSB7Ci0JCSpfZGVzdF9rZXlyaW5nID0gcmthLT5kZXN0X2tleXJpbmc7CisJCSpfZGVzdF9rZXlyaW5nID0ga2V5X2dldChya2EtPmRlc3Rfa2V5cmluZyk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvZGVjcy90YXMuYyBiL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKaW5kZXggZjBlYmM5NzEuLjFkZDY2ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKKysrIGIvc291bmQvYW9hL2NvZGVjcy90YXMuYwpAQCAtODk3LDYgKzg5NywxNSBAQAogCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKIAlpZiAoIWNsaWVudCkKIAkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBXZSBrbm93IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisJICogYWxyZWFkeSBib3VuZC4gSWYgbm90IGl0IG1lYW5zIGJpbmRpbmcgZmFpbGVkLCBhbmQgdGhlbiB0aGVyZQorCSAqIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQuCisJICovCisJaWYgKCFjbGllbnQtPmRyaXZlcikgeworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyoKIAkgKiBMZXQgaTJjLWNvcmUgZGVsZXRlIHRoYXQgZGV2aWNlIG9uIGRyaXZlciByZW1vdmFsLgpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggZGM3ODI3Mi4uMWYwZjgyMSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC05MzcsNiArOTM3LDcgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CiAJaW50IHJldDsKIAorCXdyaXRlbCgwLCBhYWNpLT5iYXNlICsgQUM5N19QT1dFUkRPV04pOwogCS8qCiAJICogQXNzZXJ0IEFBQ0lSRVNFVCBmb3IgMnVzCiAJICovCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDRlMzRkMTkuLmI0YjQ4YWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0xMzcsOSArMTM3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMTU5LDkgKzE1OSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlCi0jZGVmaW5lIHB4YTJ4eF9hYzk3X3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAorc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHB4YTJ4eF9hYzk3X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCit9OwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTI0MSwxMSArMjQyLDEyIEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF9hYzk3X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2FjOTdfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZweGEyeHhfYWM5N19wbV9vcHMsCisjZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY20uYyBiL3NvdW5kL2NvcmUvcGNtLmMKaW5kZXggMGMxNDQwMS4uYzY5YzYwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY20uYworKysgYi9zb3VuZC9jb3JlL3BjbS5jCkBAIC05NTMsMTEgKzk1MywxMiBAQAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCXN0cnVjdCBzbmRfcGNtX25vdGlmeSAqbm90aWZ5OwogCWNoYXIgc3RyWzE2XTsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWlmIChzbmRfQlVHX09OKCFwY20gfHwgIWRldmljZSkpCisJaWYgKHNuZF9CVUdfT04oIWRldmljZSB8fCAhZGV2aWNlLT5kZXZpY2VfZGF0YSkpCiAJCXJldHVybiAtRU5YSU87CisJcGNtID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJZXJyID0gc25kX3BjbV9hZGQocGNtKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IDU2MWQ2ZDkuLmFiNzNlZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0yOTg1LDcgKzI5ODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX3N0YXR1cyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX3N0YXR1cyA9CiB7CiAJLmZhdWx0ID0Jc25kX3BjbV9tbWFwX3N0YXR1c19mYXVsdCwKIH07CkBAIC0zMDI0LDcgKzMwMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2NvbnRyb2wgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19jb250cm9sID0KIHsKIAkuZmF1bHQgPQlzbmRfcGNtX21tYXBfY29udHJvbF9mYXVsdCwKIH07CkBAIC0zMDk0LDcgKzMwOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGEgPQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBzbmRfcGNtX3ZtX29wc19kYXRhID0KIHsKIAkub3BlbiA9CQlzbmRfcGNtX21tYXBfZGF0YV9vcGVuLAogCS5jbG9zZSA9CXNuZF9wY21fbW1hcF9kYXRhX2Nsb3NlLApAQCAtMzExOCw3ICszMTE4LDcgQEAKICAqIG1tYXAgdGhlIERNQSBidWZmZXIgb24gSS9PIG1lbW9yeSBhcmVhCiAgKi8KICNpZiBTTkRSVl9QQ01fSU5GT19NTUFQX0lPTUVNCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGFfbW1pbyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF9wY21fdm1fb3BzX2RhdGFfbW1pbyA9CiB7CiAJLm9wZW4gPQkJc25kX3BjbV9tbWFwX2RhdGFfb3BlbiwKIAkuY2xvc2UgPQlzbmRfcGNtX21tYXBfZGF0YV9jbG9zZSwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jIGIvc291bmQvY29yZS9yYXdtaWRpLmMKaW5kZXggYzBhZGMxNC4uNzBkNmYyNSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9yYXdtaWRpLmMKKysrIGIvc291bmQvY29yZS9yYXdtaWRpLmMKQEAgLTI0OCw3ICsyNDgsOCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Vic3RyZWFtLCAmcy0+c3Vic3RyZWFtcywgbGlzdCkgewogCQlpZiAoc3Vic3RyZWFtLT5vcGVuZWQpIHsKIAkJCWlmIChzdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgfHwKLQkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSkKKwkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSB8fAorCQkJICAgICFzdWJzdHJlYW0tPmFwcGVuZCkKIAkJCQljb250aW51ZTsKIAkJfQogCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCBzdWJkZXZpY2UgPT0gc3Vic3RyZWFtLT5udW1iZXIpIHsKQEAgLTI2NiwxNyArMjY3LDIxIEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHN1YnN0cmVhbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JZXJyID0gc3Vic3RyZWFtLT5vcHMtPm9wZW4oc3Vic3RyZWFtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlzdWJzdHJlYW0tPm9wZW5lZCA9IDE7Ci0JaWYgKHN1YnN0cmVhbS0+dXNlX2NvdW50KysgPT0gMCkKKwlpZiAoc3Vic3RyZWFtLT51c2VfY291bnQgPT0gMCkgeworCQllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJc3Vic3RyZWFtLT5vcGVuZWQgPSAxOwogCQlzdWJzdHJlYW0tPmFjdGl2ZV9zZW5zaW5nID0gMDsKLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19BUFBFTkQpCi0JCXN1YnN0cmVhbS0+YXBwZW5kID0gMTsKKwkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQorCQkJc3Vic3RyZWFtLT5hcHBlbmQgPSAxOworCX0KKwlzdWJzdHJlYW0tPnVzZV9jb3VudCsrOwogCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkKys7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTcsMjcgKzMwMiwyNyBAQAogCQkJCSAgICAgICBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwKIAkJCQkgICAgICAgbW9kZSwgJnNpbnB1dCk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7CiAJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKIAkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAogCQkJCSAgICAgICBtb2RlLCAmc291dHB1dCk7CiAJCWlmIChlcnIgPCAwKQotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoc2lucHV0KSB7CiAJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIG1vZGUpOwogCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKKwkJCXJldHVybiBlcnI7CiAJfQogCWlmIChzb3V0cHV0KSB7CiAJCWVyciA9IG9wZW5fc3Vic3RyZWFtKHJtaWRpLCBzb3V0cHV0LCBtb2RlKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWlmIChzaW5wdXQpCiAJCQkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCBzaW5wdXQsIDApOwotCQkJZ290byBfX2Vycm9yOworCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KIApAQCAtMzI1LDEzICszMzAsNiBAQAogCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKIAlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKIAlyZXR1cm4gMDsKLQotICAgICAgX19lcnJvcjoKLQlpZiAoc2lucHV0ICYmIHNpbnB1dC0+cnVudGltZSkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7Ci0JaWYgKHNvdXRwdXQgJiYgc291dHB1dC0+cnVudGltZSkKLQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOwotCXJldHVybiBlcnI7CiB9CiAKIC8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwppbmRleCA2YmEwNjZjLi4yNTJlMDRjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMKKysrIGIvc291bmQvZHJpdmVycy9kdW1teS5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShwY21fZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGNtX2RldnMsICJQQ00gZGV2aWNlcyAjICgwLTQpIGZvciBkdW1teSBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkocGNtX3N1YnN0cmVhbXMsIGludCwgTlVMTCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBjbV9zdWJzdHJlYW1zLCAiUENNIHN1YnN0cmVhbXMgIyAoMS0xNikgZm9yIGR1bW15IGRyaXZlci4iKTsKK01PRFVMRV9QQVJNX0RFU0MocGNtX3N1YnN0cmVhbXMsICJQQ00gc3Vic3RyZWFtcyAjICgxLTEyOCkgZm9yIGR1bW15IGRyaXZlci4iKTsKIC8vbW9kdWxlX3BhcmFtX2FycmF5KG1pZGlfZGV2cywgaW50LCBOVUxMLCAwNDQ0KTsKIC8vTU9EVUxFX1BBUk1fREVTQyhtaWRpX2RldnMsICJNSURJIGRldmljZXMgIyAoMC0yKSBmb3IgZHVtbXkgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtKGZha2VfYnVmZmVyLCBib29sLCAwNDQ0KTsKQEAgLTgwOCw4ICs4MDgsNiBAQAogCXVuc2lnbmVkIGludCBpZHg7CiAJaW50IGVycjsKIAotCWlmIChzbmRfQlVHX09OKCFkdW1teSkpCi0JCXJldHVybiAtRUlOVkFMOwogCXNwaW5fbG9ja19pbml0KCZkdW1teS0+bWl4ZXJfbG9jayk7CiAJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIkR1bW15IE1peGVyIik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCA2ZTdkMDlhLi43ZDcyMmEwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC0yOSw2ICsyOSw4IEBACiAKIGV4dGVybiBpbnQgdXNlX2ludGVybmFsX2RydW1zOwogCitzdGF0aWMgdm9pZCBzbmRfb3BsM19ub3RlX29mZl91bnNhZmUodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbik7CiAvKgogICogVGhlIG5leHQgdGFibGUgbG9va3MgbWFnaWNhbCwgYnV0IGl0IGNlcnRhaW5seSBpcyBub3QuIEl0cyB2YWx1ZXMgaGF2ZQogICogYmVlbiBjYWxjdWxhdGVkIGFzIHRhYmxlW2ldPTgqbG9nKGkvNjQpL2xvZygyKSB3aXRoIGFuIG9idmlvdXMgZXhjZXB0aW9uCkBAIC0yNDIsMTYgKzI0NCwyMCBAQAogCWludCBhZ2FpbiA9IDA7CiAJaW50IGk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBvcGwzLT5tYXhfdm9pY2VzOyBpKyspIHsKIAkJc3RydWN0IHNuZF9vcGwzX3ZvaWNlICp2cCA9ICZvcGwzLT52b2ljZXNbaV07CiAJCWlmICh2cC0+c3RhdGUgPiAwICYmIHZwLT5ub3RlX29mZl9jaGVjaykgewogCQkJaWYgKHZwLT5ub3RlX29mZiA9PSBqaWZmaWVzKQotCQkJCXNuZF9vcGwzX25vdGVfb2ZmKG9wbDMsIHZwLT5ub3RlLCAwLCB2cC0+Y2hhbik7CisJCQkJc25kX29wbDNfbm90ZV9vZmZfdW5zYWZlKG9wbDMsIHZwLT5ub3RlLCAwLAorCQkJCQkJCSB2cC0+Y2hhbik7CiAJCQllbHNlCiAJCQkJYWdhaW4rKzsKIAkJfQogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKIAlpZiAoYWdhaW4pIHsKIAkJb3BsMy0+dGxpc3QuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwkvKiBpbnZva2UgYWdhaW4gKi8KIAkJYWRkX3RpbWVyKCZvcGwzLT50bGlzdCk7CkBAIC02NTgsMTUgKzY2NCwxNCBAQAogLyoKICAqIFJlbGVhc2UgYSBub3RlIGluIHJlc3BvbnNlIHRvIGEgbWlkaSBub3RlIG9mZi4KICAqLwotdm9pZCBzbmRfb3BsM19ub3RlX29mZih2b2lkICpwLCBpbnQgbm90ZSwgaW50IHZlbCwgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBzbmRfb3BsM19ub3RlX29mZl91bnNhZmUodm9pZCAqcCwgaW50IG5vdGUsIGludCB2ZWwsCisJCQkJICAgICBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbikKIHsKICAgCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAogCWludCB2b2ljZTsKIAlzdHJ1Y3Qgc25kX29wbDNfdm9pY2UgKnZwOwogCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCW9wbDMgPSBwOwogCiAjaWZkZWYgREVCVUdfTUlESQpAQCAtNjc0LDEyICs2NzksOSBAQAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSk7CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAob3BsMy0+c3ludGhfbW9kZSA9PSBTTkRSVl9PUEwzX01PREVfU0VRKSB7CiAJCWlmIChjaGFuLT5kcnVtX2NoYW5uZWwgJiYgdXNlX2ludGVybmFsX2RydW1zKSB7CiAJCQlzbmRfb3BsM19kcnVtX3N3aXRjaChvcGwzLCBub3RlLCB2ZWwsIDAsIGNoYW4pOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+dm9pY2VfbG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuOwogCQl9CiAJCS8qIHRoaXMgbG9vcCB3aWxsIGhvcGVmdWxseSBraWxsIGFsbCBleHRyYSB2b2ljZXMsIGJlY2F1c2UKQEAgLTY5Nyw2ICs2OTksMTYgQEAKIAkJCXNuZF9vcGwzX2tpbGxfdm9pY2Uob3BsMywgdm9pY2UpOwogCQl9CiAJfQorfQorCit2b2lkIHNuZF9vcGwzX25vdGVfb2ZmKHZvaWQgKnAsIGludCBub3RlLCBpbnQgdmVsLAorCQkgICAgICAgc3RydWN0IHNuZF9taWRpX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IHNuZF9vcGwzICpvcGwzID0gcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKKwlzbmRfb3BsM19ub3RlX29mZl91bnNhZmUocCwgbm90ZSwgdmVsLCBjaGFuKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT52b2ljZV9sb2NrLCBmbGFncyk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMKaW5kZXggODRjYzI2NS4uZTExNDVhYzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2xpYi5jCkBAIC0zOSwyNSArMzksMjAgQEAKIC8qIHdyaXRlIHRoZSBwb3J0IGFuZCByZXR1cm5zIHRoZSBuZXh0IGV4cGlyZSB0aW1lIGluIG5zOwogICogY2FsbGVkIGF0IHRoZSB0cmlnZ2VyLXN0YXJ0IGFuZCBpbiBocnRpbWVyIGNhbGxiYWNrCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBocnRpbWVyICpoYW5kbGUpCitzdGF0aWMgdTY0IHBjc3BfdGltZXJfdXBkYXRlKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKIAl1bnNpZ25lZCBjaGFyIHRpbWVyX2NudCwgdmFsOwogCXU2NCBuczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY2hpcC0+dGhhbGYpIHsKIAkJb3V0YihjaGlwLT52YWw2MSwgMHg2MSk7CiAJCWNoaXAtPnRoYWxmID0gMDsKLQkJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSkKLQkJCXJldHVybiAwOwogCQlyZXR1cm4gY2hpcC0+bnNfcmVtOwogCX0KIAotCWlmICghYXRvbWljX3JlYWQoJmNoaXAtPnRpbWVyX2FjdGl2ZSkpCi0JCXJldHVybiAwOwogCXN1YnN0cmVhbSA9IGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbTsKIAlpZiAoIXN1YnN0cmVhbSkKIAkJcmV0dXJuIDA7CkBAIC04OCwyNCArODMsMTcgQEAKIAlyZXR1cm4gbnM7CiB9CiAKLWVudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3N0YXRpYyB2b2lkIHBjc3BfcG9pbnRlcl91cGRhdGUoc3RydWN0IHNuZF9wY3NwICpjaGlwKQogewotCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihoYW5kbGUsIHN0cnVjdCBzbmRfcGNzcCwgdGltZXIpOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBwZXJpb2RzX2VsYXBzZWQsIHBvaW50ZXJfdXBkYXRlOwogCXNpemVfdCBwZXJpb2RfYnl0ZXMsIGJ1ZmZlcl9ieXRlczsKLQl1bnNpZ25lZCBsb25nIG5zOworCWludCBwZXJpb2RzX2VsYXBzZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBvaW50ZXJfdXBkYXRlID0gIWNoaXAtPnRoYWxmOwotCW5zID0gcGNzcF90aW1lcl91cGRhdGUoaGFuZGxlKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Ci0KIAkvKiB1cGRhdGUgdGhlIHBsYXliYWNrIHBvc2l0aW9uICovCiAJc3Vic3RyZWFtID0gY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtOwogCWlmICghc3Vic3RyZWFtKQotCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisJCXJldHVybjsKIAogCXBlcmlvZF9ieXRlcyA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOwogCWJ1ZmZlcl9ieXRlcyA9IHNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pOwpAQCAtMTM0LDYgKzEyMiwyNiBAQAogCiAJaWYgKHBlcmlvZHNfZWxhcHNlZCkKIAkJdGFza2xldF9zY2hlZHVsZSgmcGNzcF9wY21fdGFza2xldCk7Cit9CisKK2VudW0gaHJ0aW1lcl9yZXN0YXJ0IHBjc3BfZG9fdGltZXIoc3RydWN0IGhydGltZXIgKmhhbmRsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Bjc3AgKmNoaXAgPSBjb250YWluZXJfb2YoaGFuZGxlLCBzdHJ1Y3Qgc25kX3Bjc3AsIHRpbWVyKTsKKwlpbnQgcG9pbnRlcl91cGRhdGU7CisJdTY0IG5zOworCisJaWYgKCFhdG9taWNfcmVhZCgmY2hpcC0+dGltZXJfYWN0aXZlKSB8fCAhY2hpcC0+cGxheWJhY2tfc3Vic3RyZWFtKQorCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlwb2ludGVyX3VwZGF0ZSA9ICFjaGlwLT50aGFsZjsKKwlucyA9IHBjc3BfdGltZXJfdXBkYXRlKGNoaXApOworCWlmICghbnMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENTUDogdW5leHBlY3RlZCBzdG9wXG4iKTsKKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOworCX0KKworCWlmIChwb2ludGVyX3VwZGF0ZSkKKwkJcGNzcF9wb2ludGVyX3VwZGF0ZShjaGlwKTsKIAogCWhydGltZXJfZm9yd2FyZChoYW5kbGUsIGhydGltZXJfZ2V0X2V4cGlyZXMoaGFuZGxlKSwgbnNfdG9fa3RpbWUobnMpKTsKIApAQCAtMTQyLDggKzE1MCw2IEBACiAKIHN0YXRpYyBpbnQgcGNzcF9zdGFydF9wbGF5aW5nKHN0cnVjdCBzbmRfcGNzcCAqY2hpcCkKIHsKLQl1bnNpZ25lZCBsb25nIG5zOwotCiAjaWYgUENTUF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHN0YXJ0X3BsYXlpbmcgY2FsbGVkXG4iKTsKICNlbmRpZgpAQCAtMTU5LDExICsxNjUsNyBAQAogCWF0b21pY19zZXQoJmNoaXAtPnRpbWVyX2FjdGl2ZSwgMSk7CiAJY2hpcC0+dGhhbGYgPSAwOwogCi0JbnMgPSBwY3NwX3RpbWVyX3VwZGF0ZSgmcGNzcF9jaGlwLnRpbWVyKTsKLQlpZiAoIW5zKQotCQlyZXR1cm4gLUVJTzsKLQotCWhydGltZXJfc3RhcnQoJnBjc3BfY2hpcC50aW1lciwga3RpbWVfc2V0KDAsIG5zKSwgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9zdGFydCgmcGNzcF9jaGlwLnRpbWVyLCBrdGltZV9zZXQoMCwgMCksIEhSVElNRVJfTU9ERV9SRUwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzIsMjEgKzIzNCwyMiBAQAogc3RhdGljIGludCBzbmRfcGNzcF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfcGNzcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSNpZiBQQ1NQX0RFQlVHCi0JcHJpbnRrKEtFUk5fSU5GTyAiUENTUDogcHJlcGFyZSBjYWxsZWQsICIKLQkJCSJzaXplPSV6aSBwc2l6ZT0lemkgZj0lemkgZjE9JWlcbiIsCi0JCQlzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKSwKLQkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAotCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSkgLwotCQkJc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSksCi0JCQlzdWJzdHJlYW0tPnJ1bnRpbWUtPnBlcmlvZHMpOwotI2VuZGlmCiAJcGNzcF9zeW5jX3N0b3AoY2hpcCk7CiAJY2hpcC0+cGxheWJhY2tfcHRyID0gMDsKIAljaGlwLT5wZXJpb2RfcHRyID0gMDsKIAljaGlwLT5mbXRfc2l6ZSA9CiAJCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHN1YnN0cmVhbS0+cnVudGltZS0+Zm9ybWF0KSA+PiAzOwogCWNoaXAtPmlzX3NpZ25lZCA9IHNuZF9wY21fZm9ybWF0X3NpZ25lZChzdWJzdHJlYW0tPnJ1bnRpbWUtPmZvcm1hdCk7CisjaWYgUENTUF9ERUJVRworCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHByZXBhcmUgY2FsbGVkLCAiCisJCQkic2l6ZT0lemkgcHNpemU9JXppIGY9JXppIGYxPSVpIGZzaXplPSVpXG4iLAorCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSksCisJCQlzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKSwKKwkJCXNuZF9wY21fbGliX2J1ZmZlcl9ieXRlcyhzdWJzdHJlYW0pIC8KKwkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pLAorCQkJc3Vic3RyZWFtLT5ydW50aW1lLT5wZXJpb2RzLAorCQkJY2hpcC0+Zm10X3NpemUpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9taXhlci5jCmluZGV4IDE5OWIwMzMuLjkwM2JjODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX21peGVyLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbWl4ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCWlmICh0cmVibGUgIT0gY2hpcC0+dHJlYmxlKSB7CiAJCWNoaXAtPnRyZWJsZSA9IHRyZWJsZTsKICNpZiBQQ1NQX0RFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVpXG4iLCBQQ1NQX1JBVEUoKSk7CisJCXByaW50ayhLRVJOX0lORk8gIlBDU1A6IHJhdGUgc2V0IHRvICVsaVxuIiwgUENTUF9SQVRFKCkpOwogI2VuZGlmCiAJCWNoYW5nZWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvaGFsMi5jIGIvc291bmQvbWlwcy9oYWwyLmMKaW5kZXggYzUyNjkxYy4uOWE4OGNkZiAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9oYWwyLmMKKysrIGIvc291bmQvbWlwcy9oYWwyLmMKQEAgLTkxNSw3ICs5MTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBoYWwyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgaGFsMl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwppbmRleCBlNDk3NTI1Li44NjkxZjRjIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYworKysgYi9zb3VuZC9taXBzL3NnaW8yYXVkaW8uYwpAQCAtOTczLDcgKzk3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IHNuZF9zZ2lvMmF1ZGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc25kX3NnaW8yYXVkaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IDc5M2I3ZjQuLjNmM2MzZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMjE5LDcgKzIxOSw5IEBACiAgICAgICogIE1pZCBsZXZlbCBzdHVmZgogICAgICAqLwogCi1zdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7IC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEIH07CitzdHJ1Y3Qgc291bmRfc2V0dGluZ3MgZG1hc291bmQgPSB7CisJLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChkbWFzb3VuZC5sb2NrKQorfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHNvdW5kX3NpbGVuY2Uodm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9oZXgyaGV4LmMgYi9zb3VuZC9vc3MvaGV4MmhleC5jCmluZGV4IDU0NjBmYWEuLjA0MWVmNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9oZXgyaGV4LmMKKysrIGIvc291bmQvb3NzL2hleDJoZXguYwpAQCAtMTIsNyArMTIsNyBAQAogI2RlZmluZSBNQVhfU0laRSAoMjU2KjEwMjQpCiB1bnNpZ25lZCBjaGFyIGJ1ZltNQVhfU0laRV07CiAKLWludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIGludCBsb2FkaGV4KEZJTEUgKmluZiwgdW5zaWduZWQgY2hhciAqYnVmKQogewogCWludCBsPTAsIGMsIGk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zYl9jb21tb24uYyBiL3NvdW5kL29zcy9zYl9jb21tb24uYwppbmRleCA3N2QwZTVlLi5jZTRkYjQ5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc2JfY29tbW9uLmMKKysrIGIvc291bmQvb3NzL3NiX2NvbW1vbi5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQkvKiBwcmludGsoS0VSTl9XQVJOICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCisJCQkJLyogcHJpbnRrKEtFUk5fV0FSTklORyAiU291bmQgQmxhc3RlcjogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCQkJCTsKIAkJfQogCX0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgotCQkJCS8qIHByaW50ayhLRVJOX1dBUk4gIlNvdW5kIEJsYXN0ZXI6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCQkvKiBwcmludGsoS0VSTl9XQVJOSU5HICJTb3VuZCBCbGFzdGVyOiBVbmV4cGVjdGVkIGludGVycnVwdFxuIik7ICovCiAJCQkJOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NiX2Vzcy5jIGIvc291bmQvb3NzL3NiX2Vzcy5jCmluZGV4IDE4MGU5NWMuLjUxYTNkMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zYl9lc3MuYworKysgYi9zb3VuZC9vc3Mvc2JfZXNzLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDo7Ci0JCQkvKiBwcmludGsoS0VSTl9XQVJOICJFU1M6IFVuZXhwZWN0ZWQgaW50ZXJydXB0XG4iKTsgKi8KKwkJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcgIkVTUzogVW5leHBlY3RlZCBpbnRlcnJ1cHRcbiIpOyAqLwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKaW5kZXggZTkyNDQ5Mi4uZjQ3ZjllMiAxMDA2NDQKLS0tIGEvc291bmQvcGFyaXNjL2hhcm1vbnkuYworKysgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCkBAIC02MjQsNiArNjI0LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKKwlpZiAoc25kX0JVR19PTighaCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJaGFybW9ueV9kaXNhYmxlX2ludGVycnVwdHMoaCk7CiAJCiAgICAJZXJyID0gc25kX3BjbV9uZXcoaC0+Y2FyZCwgImhhcm1vbnkiLCAwLCAxLCAxLCAmcGNtKTsKQEAgLTg2NSwxMSArODY4LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdAogc25kX2hhcm1vbnlfbWl4ZXJfaW5pdChzdHJ1Y3Qgc25kX2hhcm1vbnkgKmgpCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gaC0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGlkeCwgZXJyOwogCiAJaWYgKHNuZF9CVUdfT04oIWgpKQogCQlyZXR1cm4gLUVJTlZBTDsKKwljYXJkID0gaC0+Y2FyZDsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCAiSGFybW9ueSBHYWluIGNvbnRyb2wgaW50ZXJmYWNlIik7CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEhBUk1PTllfQ09OVFJPTFM7IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGZiNWVlM2MuLjc1YzYwMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC0yNTksNyArMjU5LDYgQEAKIAogY29uZmlnIFNORF9DUzU1MzVBVURJTwogCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IEF1ZGlvIgotCWRlcGVuZHMgb24gWDg2ICYmICFYODZfNjQKIAlzZWxlY3QgU05EX1BDTQogCXNlbGVjdCBTTkRfQUM5N19DT0RFQwogCWhlbHAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwppbmRleCBiNDU4ZDIwLi5hYWY0ZGE2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKKysrIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCkBAIC05NzMsNyArOTczLDcgQEAKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAKIAlzbmRfYWxpX3ByaW50aygiZnJlZV92b2ljZTogY2hhbm5lbD0lZFxuIixwdm9pY2UtPm51bWJlcik7Ci0JaWYgKHB2b2ljZSA9PSBOVUxMIHx8ICFwdm9pY2UtPnVzZSkKKwlpZiAoIXB2b2ljZS0+dXNlKQogCQlyZXR1cm47CiAJc25kX2FsaV9jbGVhcl92b2ljZXMoY29kZWMsIHB2b2ljZS0+bnVtYmVyLCBwdm9pY2UtPm51bWJlcik7CiAJc3Bpbl9sb2NrX2lycSgmY29kZWMtPnZvaWNlX2FsbG9jKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMjQ1ODVjNi4uNGUyYjkyNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTgwOCw2ICs4MDgsOCBAQAogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTAwMiwgMHgwMDAxLCBHRU5FUklDKSwKIAkvKiBMZWFkdGVrIFdpbmZhc3QgdHYgMjAwMHhwIGRlbHV4ICovCiAJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgMHgxMDdkLCAweDY2MDYsIEdFTkVSSUMpLAorCS8qIFBpbm5hY2xlIFBDVFYgKi8KKwlCVF9ERVZJQ0UoUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc4LCAweDExYmQsIDB4MDAxMiwgR0VORVJJQyksCiAJLyogVm9vZG9vIFRWIDIwMCAqLwogCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIDB4MTIxYSwgMHgzMDAwLCBHRU5FUklDKSwKIAkvKiBBc2tleSBDb21wdXRlciBDb3JwLiBNYWdpY1RWaWV3Jzk5ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RhdGMuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCmluZGV4IGIxYjNhNjQuLjc1NDU0NjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGF0Yy5jCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiBzdGF0aWMgaW50IGF0Y19saW5lX3N1cnJvdW5kX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCiB7Ci0JcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzQpOworCXJldHVybiBhdGNfZGFpb191bm11dGUoYXRjLCBzdGF0ZSwgTElORU8yKTsKIH0KIAogc3RhdGljIGludCBhdGNfbGluZV9jbGZlX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCiBzdGF0aWMgaW50IGF0Y19saW5lX3JlYXJfdW5tdXRlKHN0cnVjdCBjdF9hdGMgKmF0YywgdW5zaWduZWQgY2hhciBzdGF0ZSkKIHsKLQlyZXR1cm4gYXRjX2RhaW9fdW5tdXRlKGF0Yywgc3RhdGUsIExJTkVPMik7CisJcmV0dXJuIGF0Y19kYWlvX3VubXV0ZShhdGMsIHN0YXRlLCBMSU5FTzQpOwogfQogCiBzdGF0aWMgaW50IGF0Y19saW5lX2luX3VubXV0ZShzdHJ1Y3QgY3RfYXRjICphdGMsIHVuc2lnbmVkIGNoYXIgc3RhdGUpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwppbmRleCBkYTIwNjVjLi4xMzA1ZjdjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKQEAgLTk1MCw3ICs5NTAsNyBAQAogCUNvbnRyb2wgaW50ZXJmYWNlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2lmICFkZWZpbmVkKEVDSE9DQVJEX0hBU19WTUlYRVIpIHx8IGRlZmluZWQoRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4pCiAKIC8qKioqKioqKioqKioqKioqKioqIFBDTSBvdXRwdXQgdm9sdW1lICoqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0xMDAzLDYgKzEwMDMsMTkgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAorI2lmZGVmIEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOCisvKiBPbiB0aGUgTWlhIHRoaXMgb25lIGNvbnRyb2xzIHRoZSBsaW5lLW91dCB2b2x1bWUgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19saW5lX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CisJLm5hbWUgPSAiTGluZSBQbGF5YmFjayBWb2x1bWUiLAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJLmluZm8gPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9pbmZvLAorCS5nZXQgPSBzbmRfZWNob19vdXRwdXRfZ2Fpbl9nZXQsCisJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKKwkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAorfTsKKyNlbHNlCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fcGNtX291dHB1dF9nYWluIF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCiAJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xMDEyLDkgKzEwMjUsMTAgQEAKIAkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAogCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCiB9OwotCiAjZW5kaWYKIAorI2VuZGlmIC8qICFFQ0hPQ0FSRF9IQVNfVk1JWEVSIHx8IEVDSE9DQVJEX0hBU19MSU5FX09VVF9HQUlOICovCisKIAogCiAjaWZkZWYgRUNIT0NBUkRfSEFTX0lOUFVUX0dBSU4KQEAgLTIwMzAsMTAgKzIwNDQsMTggQEAKIAlzbmRfZWNob192bWl4ZXIuY291bnQgPSBudW1fcGlwZXNfb3V0KGNoaXApICogbnVtX2J1c3Nlc19vdXQoY2hpcCk7CiAJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3ZtaXhlciwgY2hpcCkpKSA8IDApCiAJCWdvdG8gY3RsX2Vycm9yOwotI2Vsc2UKLQlpZiAoKGVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fcGNtX291dHB1dF9nYWluLCBjaGlwKSkpIDwgMCkKKyNpZmRlZiBFQ0hPQ0FSRF9IQVNfTElORV9PVVRfR0FJTgorCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiwgY2hpcCkpOworCWlmIChlcnIgPCAwKQogCQlnb3RvIGN0bF9lcnJvcjsKICNlbmRpZgorI2Vsc2UgLyogRUNIT0NBUkRfSEFTX1ZNSVhFUiAqLworCWVyciA9IHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsCisJCQkgIHNuZF9jdGxfbmV3MSgmc25kX2VjaG9fcGNtX291dHB1dF9nYWluLCBjaGlwKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gY3RsX2Vycm9yOworI2VuZGlmIC8qIEVDSE9DQVJEX0hBU19WTUlYRVIgKi8KIAogI2lmZGVmIEVDSE9DQVJEX0hBU19JTlBVVF9HQUlOCiAJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX2xpbmVfaW5wdXRfZ2FpbiwgY2hpcCkpKSA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCBmM2I5YjQ1Li5mMDVjOGMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgRUNIT0NBUkRfSEFTX0FEQVQJRkFMU0UKICNkZWZpbmUgRUNIT0NBUkRfSEFTX1NURVJFT19CSUdfRU5ESUFOMzIKICNkZWZpbmUgRUNIT0NBUkRfSEFTX01JREkKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX0xJTkVfT1VUX0dBSU4KIAogLyogUGlwZSBpbmRleGVzICovCiAjZGVmaW5lIFBYX0FOQUxPR19PVVQJMAkvKiA4ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCAyMGE2NmY4Li42NTE3ZjU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTcyMiw5ICs3MjIsMTAgQEAKIAkJICAgY2hpcC0+bGFzdF9jbWRbYWRkcl0pOwogCWNoaXAtPnNpbmdsZV9jbWQgPSAxOwogCWJ1cy0+cmVzcG9uc2VfcmVzZXQgPSAwOwotCS8qIHJlLWluaXRpYWxpemUgQ09SQi9SSVJCICovCisJLyogcmVsZWFzZSBDT1JCL1JJUkIgKi8KIAlhenhfZnJlZV9jbWRfaW8oY2hpcCk7Ci0JYXp4X2luaXRfY21kX2lvKGNoaXApOworCS8qIGRpc2FibGUgdW5zb2xpY2l0ZWQgcmVzcG9uc2VzICovCisJYXp4X3dyaXRlbChjaGlwLCBHQ1RMLCBhenhfcmVhZGwoY2hpcCwgR0NUTCkgJiB+SUNINl9HQ1RMX1VOU09MKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTg2NSw3ICs4NjYsOSBAQAogCX0KIAogCS8qIEFjY2VwdCB1bnNvbGljaXRlZCByZXNwb25zZXMgKi8KLQlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSB8IElDSDZfR0NUTF9VTlNPTCk7CisJaWYgKCFjaGlwLT5zaW5nbGVfY21kKQorCQlhenhfd3JpdGVsKGNoaXAsIEdDVEwsIGF6eF9yZWFkbChjaGlwLCBHQ1RMKSB8CisJCQkgICBJQ0g2X0dDVExfVU5TT0wpOwogCiAJLyogZGV0ZWN0IGNvZGVjcyAqLwogCWlmICghY2hpcC0+Y29kZWNfbWFzaykgewpAQCAtOTgwLDcgKzk4Myw4IEBACiAJYXp4X2ludF9lbmFibGUoY2hpcCk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBjb2RlYyBjb21tYW5kIEkvTyAqLwotCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKKwlpZiAoIWNoaXAtPnNpbmdsZV9jbWQpCisJCWF6eF9pbml0X2NtZF9pbyhjaGlwKTsKIAogCS8qIHByb2dyYW0gdGhlIHBvc2l0aW9uIGJ1ZmZlciAqLwogCWF6eF93cml0ZWwoY2hpcCwgRFBMQkFTRSwgKHUzMiljaGlwLT5wb3NidWYuYWRkcik7CkBAIC0yMzAzLDYgKzIzMDcsNyBAQAogICogd2hpdGUtbGlzdCBmb3IgZW5hYmxlX21zaQogICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX3doaXRlX2xpc3RbXSBfX2RldmluaXRkYXRhID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwZjcsICJIUCBQYXZpbGlvbiBkdjR0LTEzMDAiLCAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjA3LCAiSFAgQ29tcGEgQ1E0MCIsIDEpLAogCXt9CiB9OwpAQCAtMjY3Myw2ICsyNjc4LDcgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA0NGIpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDU1YyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNTVkKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA1OTApLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MDc3NCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwNzc1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDA3NzYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggMjE1ZTcyYS4uMmQ2MDNmNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC00MDMyLDYgKzQwMzIsMTI3IEBACiB9CiAKIC8qCisgKiBIUCBUb3VjaHNtYXJ0CisgKiBwb3J0LUEgKDB4MTEpICAgICAgLSBmcm9udCBocC1vdXQKKyAqIHBvcnQtQiAoMHgxNCkgICAgICAtIHVudXNlZAorICogcG9ydC1DICgweDE1KSAgICAgIC0gdW51c2VkCisgKiBwb3J0LUQgKDB4MTIpICAgICAgLSByZWFyIGxpbmUgb3V0CisgKiBwb3J0LUUgKDB4MWMpICAgICAgLSBmcm9udCBtaWMtaW4KKyAqIHBvcnQtRiAoMHgxNikgICAgICAtIEludGVybmFsIHNwZWFrZXJzCisgKiBkaWdpdGFsLW1pYyAoMHgxNykgLSBJbnRlcm5hbCBtaWMKKyAqLworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFkMTk4NGFfdG91Y2hzbWFydF92ZXJic1tdID0geworCS8qIERBQ3M7IHVubXV0ZSBhcyBkZWZhdWx0ICovCisJezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4Mjd9LCAvKiAwZEIgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgyN30sIC8qIDBkQiAqLworCS8qIFBvcnQtQSAoSFApIG1peGVyIC0gcm91dGUgb25seSBmcm9tIGFuYWxvZyBtaXhlciAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCS8qIFBvcnQtQSBwaW4gKi8KKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCS8qIFBvcnQtQSAoSFApIHBpbiAtIGFsd2F5cyB1bm11dGVkICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBQb3J0LUUgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgyNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHgwM30sCisJLyogUG9ydC1FIHBpbiAqLworCXsweDFjLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9JTn0sCisJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwkvKiBQb3J0LUYgKGludCBzcGVha2VyKSBtaXhlciAtIHJvdXRlIG9ubHkgZnJvbSBhbmFsb2cgbWl4ZXIgKi8KKwl7MHgwYiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKKwkvKiBQb3J0LUYgcGluICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiBBbmFsb2cgbWl4ZXI7IG11dGUgYXMgZGVmYXVsdCAqLworCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMil9LAorCXsweDIwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sCisJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDQpfSwKKwl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNSl9LAorCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLworCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCS8qIGNhcHR1cmUgc291cmNlcyAqLworCS8qIHsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwgKi8gLyogc2V0IHZpYSB1bnNvbCAqLworCXsweDBjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDBkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKKwl7MHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwkvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgcGluLXNlbnNlICovCisJezB4MTEsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBRDE4ODRBX0hQX0VWRU5UfSwKKwl7MHgxYywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFEMTg4NEFfTUlDX0VWRU5UfSwKKwkvKiBhbGxvdyB0byB0b3VjaCBHUElPMSAoZm9yIG11dGUgY29udHJvbCkgKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAyfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDJ9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDJ9LCAvKiBmaXJzdCBtdXRlZCAqLworCS8qIGludGVybmFsIG1pYyAtIGRtaWMgKi8KKwl7MHgxNywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCS8qIHNldCBtYWdpYyBDT0VGcyBmb3IgZG1pYyAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCAweDEzZjd9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4MDh9LAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhZDE5ODRhX3RvdWNoc21hcnRfbWl4ZXJzW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCisvKglIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksKi8KKwl7CisJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJLmluZm8gPSBzbmRfaGRhX21peGVyX2FtcF9zd2l0Y2hfaW5mbywKKwkJLmdldCA9IHNuZF9oZGFfbWl4ZXJfYW1wX3N3aXRjaF9nZXQsCisJCS5wdXQgPSBhZDE4ODRhX21vYmlsZV9tYXN0ZXJfc3dfcHV0LAorCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwoMHgyMSwgMywgMCwgSERBX09VVFBVVCksCisJfSwKKwlIREFfQ09ERUNfVk9MVU1FKCJQQ00gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJQQ00gUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHg1LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaWYgcGx1Z2dlZCAqLworc3RhdGljIHZvaWQgYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYywgMCwKKwkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwKSB7CisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MGMsIDAsCisJCQkJICAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHg0KTsKKwl9IGVsc2UgeworCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDBjLCAwLAorCQkJCSAgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4NSk7CisJfQorfQorCisKKy8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KK3N0YXRpYyB2b2lkIGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwl1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBRDE4ODRBX0hQX0VWRU5UOgorCQlhZDE4ODRhX2hwX2F1dG9tdXRlKGNvZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBBRDE4ODRBX01JQ19FVkVOVDoKKwkJYWQxOTg0YV90b3VjaHNtYXJ0X2F1dG9taWMoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKKy8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KK3N0YXRpYyBpbnQgYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJYWQxOTh4X2luaXQoY29kZWMpOworCWFkMTg4NGFfaHBfYXV0b211dGUoY29kZWMpOworCWFkMTk4NGFfdG91Y2hzbWFydF9hdXRvbWljKGNvZGVjKTsKKwlyZXR1cm4gMDsKK30KKworCisvKgogICovCiAKIGVudW0gewpAQCAtNDAzOSw2ICs0MTYwLDcgQEAKIAlBRDE4ODRBX0xBUFRPUCwKIAlBRDE4ODRBX01PQklMRSwKIAlBRDE4ODRBX1RISU5LUEFELAorCUFEMTk4NEFfVE9VQ0hTTUFSVCwKIAlBRDE4ODRBX01PREVMUwogfTsKIApAQCAtNDA0Nyw2ICs0MTY5LDcgQEAKIAlbQUQxODg0QV9MQVBUT1BdCT0gImxhcHRvcCIsCiAJW0FEMTg4NEFfTU9CSUxFXQk9ICJtb2JpbGUiLAogCVtBRDE4ODRBX1RISU5LUEFEXQk9ICJ0aGlua3BhZCIsCisJW0FEMTk4NEFfVE9VQ0hTTUFSVF0JPSAidG91Y2hzbWFydCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxODg0YV9jZmdfdGJsW10gPSB7CkBAIC00MDU5LDYgKzQxODIsNyBAQAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzNjAwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmZmMCwgMHg3MDEwLCAiSFAgbGFwdG9wIiwgQUQxODg0QV9NT0JJTEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIwYWMsICJUaGlua3BhZCBYMzAwIiwgQUQxODg0QV9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE4MiwgIlRvdWNoc21hcnQiLCBBRDE5ODRBX1RPVUNIU01BUlQpLAogCXt9CiB9OwogCkBAIC00MTQyLDYgKzQyNjYsMjEgQEAKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdGhpbmtwYWRfdW5zb2xfZXZlbnQ7CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGFkMTk4NGFfdGhpbmtwYWRfaW5pdDsKIAkJYnJlYWs7CisJY2FzZSBBRDE5ODRBX1RPVUNIU01BUlQ6CisJCXNwZWMtPm1peGVyc1swXSA9IGFkMTk4NGFfdG91Y2hzbWFydF9taXhlcnM7CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhZDE5ODRhX3RvdWNoc21hcnRfdmVyYnM7CisJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gMDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGFkMTk4NGFfdG91Y2hzbWFydF91bnNvbF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxOTg0YV90b3VjaHNtYXJ0X2luaXQ7CisJCS8qIHNldCB0aGUgdXBwZXItbGltaXQgZm9yIG1peGVyIGFtcCB0byAwZEIgZm9yIGF2b2lkaW5nIHRoZQorCQkgKiBwb3NzaWJsZSBkYW1hZ2UgYnkgb3ZlcmxvYWRpbmcKKwkJICovCisJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MjAsIEhEQV9JTlBVVCwKKwkJCQkJICAoMHgxNyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAorCQkJCQkgICgweDA1IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKKwkJCQkJICAoMSA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5ZDg5OWVkLi45MDU4NTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0xMTAsNiArMTEwLDcgQEAKIAogCXVuc2lnbmVkIGludCBkZWxsX2F1dG9tdXRlOwogCXVuc2lnbmVkIGludCBwb3J0X2RfbW9kZTsKKwl1bnNpZ25lZCBjaGFyIGV4dF9taWNfYmlhczsKIH07CiAKIHN0YXRpYyBpbnQgY29uZXhhbnRfcGxheWJhY2tfcGNtX29wZW4oc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKQEAgLTY4MiwxMSArNjgzLDEzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0NV9jYXB0dXJlX3NvdXJjZV9iZW5xID0gewotCS5udW1faXRlbXMgPSAzLAorCS5udW1faXRlbXMgPSA1LAogCS5pdGVtcyA9IHsKIAkJeyAiSW50TWljIiwgMHgxIH0sCiAJCXsgIkV4dE1pYyIsIDB4MiB9LAogCQl7ICJMaW5lSW4iLCAweDMgfSwKKwkJeyAiQ0QiLCAgICAgMHg0IH0sCisJCXsgIk1peGVyIiwgIDB4MCB9LAogCX0KIH07CiAKQEAgLTgxMSwxMSArODE0LDE5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9iZW5xX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkNEIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwNCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDA0LCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTcsIDB4NCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxNywgMHg0LCBIREFfSU5QVVQpLAorCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBJbiBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkxpbmUgSW4gQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgSW4gUGxheWJhY2sgVm9sdW1lIiwgMHgxNywgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIEluIFBsYXliYWNrIFN3aXRjaCIsIDB4MTcsIDB4MywgSERBX0lOUFVUKSwKIAorCUhEQV9DT0RFQ19WT0xVTUUoIk1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaXhlciBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX0lOUFVUKSwKKwogCXt9CiB9OwogCkBAIC0xOTE3LDYgKzE5MjgsMTEgQEAKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9jYXBzcmNfbmlkc1sxXSA9IHsgMHgxNyB9OwogI2RlZmluZSBDWFQ1MDY2X1NQRElGX09VVAkweDIxCiAKKy8qIE9MUEMncyBtaWNyb3Bob25lIHBvcnQgaXMgREMgY291cGxlZCBmb3IgdXNlIHdpdGggZXh0ZXJuYWwgc2Vuc29ycywKKyAqIHRoZXJlZm9yZSB3ZSB1c2UgYSA1MCUgbWljIGJpYXMgaW4gb3JkZXIgdG8gY2VudGVyIHRoZSBpbnB1dCBzaWduYWwgd2l0aAorICogdGhlIERDIGlucHV0IHJhbmdlIG9mIHRoZSBjb2RlYy4gKi8KKyNkZWZpbmUgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBUyBQSU5fVlJFRjUwCisKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBjeHQ1MDY2X21vZGVzWzFdID0gewogCXsgMiwgTlVMTCB9LAogfTsKQEAgLTE5NzAsOSArMTk4NiwxMCBAQAogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X2F1dG9taWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfdmVyYiBleHRfbWljX3ByZXNlbnRbXSA9IHsKIAkJLyogZW5hYmxlIGV4dGVybmFsIG1pYywgcG9ydCBCICovCi0JCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAorCQl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBzcGVjLT5leHRfbWljX2JpYXN9LAogCiAJCS8qIHN3aXRjaCB0byBleHRlcm5hbCBtaWMgaW5wdXQgKi8KIAkJezB4MTcsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKQEAgLTIyMjUsNyArMjI0Miw3IEBACiAJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwgLyogREFDMSAqLwogCiAJLyogUG9ydCBCOiBleHRlcm5hbCBtaWNyb3Bob25lICovCi0JezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MWEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgQ1hUNTA2Nl9PTFBDX0VYVF9NSUNfQklBU30sCiAKIAkvKiBQb3J0IEM6IGludGVybmFsIG1pY3JvcGhvbmUgKi8KIAl7MHgxYiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKQEAgLTIzMTUsNiArMjMzMiw3IEBACiAJCSAgICAgIENYVDUwNjZfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMmY1LCAiRGVsbCIsCiAJCSAgICAgIENYVDUwNjZfREVMTF9MQVBUT1ApLAorCVNORF9QQ0lfUVVJUksoMHgxNTJkLCAweDA4MzMsICJPTFBDIFhPLTEuNSIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCXt9CiB9OwogCkBAIC0yMzQyLDYgKzIzNjAsNyBAQAogCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDY2X2NhcHR1cmVfc291cmNlOwogCiAJc3BlYy0+cG9ydF9kX21vZGUgPSBQSU5fSFA7CisJc3BlYy0+ZXh0X21pY19iaWFzID0gUElOX1ZSRUY4MDsKIAogCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMTsKIAlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzOwpAQCAtMjM3Myw2ICsyMzkyLDcgQEAKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwogCQlzcGVjLT5wb3J0X2RfbW9kZSA9IDA7CisJCXNwZWMtPmV4dF9taWNfYmlhcyA9IENYVDUwNjZfT0xQQ19FWFRfTUlDX0JJQVM7CiAKIAkJLyogbm8gUy9QRElGIG91dCAqLwogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCBjODQzNWM5Li42YWZkYWIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTI5LDYgKzI5LDkgQEAKICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKIAorLyogZGVmaW5lIGJlbG93IHRvIHJlc3RyaWN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIGZvcm1hdHMgKi8KKy8qICNkZWZpbmUgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUICovCisKIHN0cnVjdCBudmhkbWlfc3BlYyB7CiAJc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7CiAKQEAgLTYwLDYgKzYzLDIyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorI2lmZGVmIExJTUlURURfUkFURV9GTVRfU1VQUE9SVAorLyogc3VwcG9ydCBvbmx5IHRoZSBzYWZlIGZvcm1hdCBhbmQgcmF0ZSAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMJCVNORFJWX1BDTV9SQVRFXzQ4MDAwCisjZGVmaW5lIFNVUFBPUlRFRF9NQVhCUFMJMTYKKyNkZWZpbmUgU1VQUE9SVEVEX0ZPUk1BVFMJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUKKyNlbHNlCisvKiBzdXBwb3J0IGFsbCByYXRlcyBhbmQgZm9ybWF0cyAqLworI2RlZmluZSBTVVBQT1JURURfUkFURVMgXAorCShTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfFwKKwlTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgU05EUlZfUENNX1JBVEVfMTc2NDAwIHxcCisJIFNORFJWX1BDTV9SQVRFXzE5MjAwMCkKKyNkZWZpbmUgU1VQUE9SVEVEX01BWEJQUwkyNAorI2RlZmluZSBTVVBQT1JURURfRk9STUFUUyBcCisJKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUpCisjZW5kaWYKKwogLyoKICAqIENvbnRyb2xzCiAgKi8KQEAgLTI1OCw5ICsyNzcsOSBAQAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LAogCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCi0JLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCi0JLm1heGJwcyA9IDE2LAotCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAorCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAorCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV84Y2gsCkBAIC0yNzMsOSArMjkyLDkgQEAKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkubmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAotCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCS5tYXhicHMgPSAxNiwKLQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKKwkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKKwkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLAogCS5vcHMgPSB7CiAJCS5vcGVuID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fb3BlbiwKIAkJLmNsb3NlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfMmNoLApAQCAtMzc4LDYgKzM5Nyw3IEBACiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfbnZoZG1pW10gPSB7CiAJeyAuaWQgPSAweDEwZGUwMDAyLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwMywgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDUsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDA2LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAogCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQN0EgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwNjcsIC5uYW1lID0gIk1DUDY3IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfMmNoIH0sCkBAIC0zODcsNiArNDA3LDcgQEAKIAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDAyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDMiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwNSIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA2Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA2NyIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCAxMjk2MDU4Li43MDU4MzcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcF9taXhlcjsJLyogY2FwdHVyZSBtaXhlciAqLwogCXVuc2lnbmVkIGludCBiZWVwX2FtcDsJLyogYmVlcCBhbXAgdmFsdWUsIHNldCB2aWEgc2V0X2JlZXBfYW1wKCkgKi8KIAotCWNvbnN0IHN0cnVjdCBoZGFfdmVyYiAqaW5pdF92ZXJic1s1XTsJLyogaW5pdGlhbGl6YXRpb24gdmVyYnMKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbMTBdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKIAkJCQkJCSAqIHRlcm1pbmF0aW9uIQogCQkJCQkJICovCkBAIC05NjUsNiArOTY1LDggQEAKIAl1bnNpZ25lZCBpbnQgbmlkID0gc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdOwogCWludCBpOwogCisJaWYgKCFuaWQpCisJCXJldHVybjsKIAlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVFJJR19SRVEpIC8qIG5lZWQgdHJpZ2dlcj8gKi8KIAkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CkBAIC0xMzMyLDE1ICsxMzM0LDIwIEBACiAJICoJICAgICAgICB3aGVuIHRoZSBleHRlcm5hbCBoZWFkcGhvbmUgb3V0IGphY2sgaXMgcGx1Z2dlZCIKIAkgKi8KIAlpZiAoIXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSkgeworCQloZGFfbmlkX3QgbmlkOwogCQl0bXAgPSAoYXNzID4+IDExKSAmIDB4MzsJLyogSFAgdG8gY2hhc3NpcyAqLwogCQlpZiAodG1wID09IDApCi0JCQlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSBwb3J0YTsKKwkJCW5pZCA9IHBvcnRhOwogCQllbHNlIGlmICh0bXAgPT0gMSkKLQkJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IHBvcnRlOworCQkJbmlkID0gcG9ydGU7CiAJCWVsc2UgaWYgKHRtcCA9PSAyKQotCQkJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gcG9ydGQ7CisJCQluaWQgPSBwb3J0ZDsKIAkJZWxzZQogCQkJcmV0dXJuIDE7CisJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0czsgaSsrKQorCQkJaWYgKHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGluc1tpXSA9PSBuaWQpCisJCQkJcmV0dXJuIDE7CisJCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IG5pZDsKIAl9CiAKIAlhbGNfaW5pdF9hdXRvX2hwKGNvZGVjKTsKQEAgLTEzNjIsNyArMTM2OSw3IEBACiB9CiAKIC8qCi0gKiBGaXgtdXAgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbnMKKyAqIEZpeC11cCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgYWRkIGRlZmF1bHQgdmVyYnMKICAqLwogCiBzdHJ1Y3QgYWxjX3BpbmNmZyB7CkBAIC0xMzcwLDkgKzEzNzcsMTQgQEAKIAl1MzIgdmFsOwogfTsKIAotc3RhdGljIHZvaWQgYWxjX2ZpeF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCitzdHJ1Y3QgYWxjX2ZpeHVwIHsKKwljb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqcGluczsKKwljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKnZlcmJzOworfTsKKworc3RhdGljIHZvaWQgYWxjX3BpY2tfZml4dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkgICBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcXVpcmssCi0JCQkgICBjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqKnBpbmZpeCkKKwkJCSAgIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgKmZpeCkKIHsKIAljb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZyAqY2ZnOwogCkBAIC0xMzgwLDkgKzEzOTIsMTQgQEAKIAlpZiAoIXF1aXJrKQogCQlyZXR1cm47CiAKLQljZmcgPSBwaW5maXhbcXVpcmstPnZhbHVlXTsKLQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQotCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CisJZml4ICs9IHF1aXJrLT52YWx1ZTsKKwljZmcgPSBmaXgtPnBpbnM7CisJaWYgKGNmZykgeworCQlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQorCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCBjZmctPm5pZCwgY2ZnLT52YWwpOworCX0KKwlpZiAoZml4LT52ZXJicykKKwkJYWRkX3ZlcmIoY29kZWMtPnNwZWMsIGZpeC0+dmVyYnMpOwogfQogCiAvKgpAQCAtNDY2Nyw5ICs0Njg0LDkgQEAKIAkJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX25pZDsKIAkJZWxzZSB7CiAJCQlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHNwZWMtPnNsYXZlX2RpZ19vdXRzOwotCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKLQkJCWlmIChpID09IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKKwkJCWlmIChpID49IEFSUkFZX1NJWkUoc3BlYy0+c2xhdmVfZGlnX291dHMpIC0gMSkKIAkJCQlicmVhazsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CiAJCX0KIAl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKQEAgLTYyMzIsNyArNjI0OSw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4NDU0MCwgIkZhdm9yaXQgMTAwWFMiLCBBTEMyNjBfRkFWT1JJVDEwMCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwOCwgIkhQIGQ1NzAwIiwgQUxDMjYwX0hQXzMwMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9IUF8zMDEzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODBhLCAiSFAgZDU3NTAiLCBBTEMyNjBfQVVUTyksIC8qIG5vIHF1aXJrICovCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAxMCwgIkhQIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwMTEsICJIUCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEyLCAiSFAiLCBBTEMyNjBfSFBfREM3NjAwKSwKQEAgLTg4OTQsMTAgKzg5MTEsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzODAwLCAiTWFjYm9va1BybyA0LDEiLCBBTEM4ODVfTUJQMyksCiAJU05EX1BDSV9RVUlSSygweDEwNmIsIDB4M2UwMCwgImlNYWMgMjQgQWx1bWludW0iLCBBTEM4ODVfSU1BQzI0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHgzZjAwLCAiTWFjYm9vayA1LDEiLCBBTEM4ODVfTUI1KSwKLQkvKiBGSVhNRTogSFAgamFjayBzZW5zZSBzZWVtcyBub3Qgd29ya2luZyBmb3IgTUJQIDUsMSwgc28gYXBwYXJlbnRseQotCSAqIG5vIHBlcmZlY3Qgc29sdXRpb24geWV0CisJLyogRklYTUU6IEhQIGphY2sgc2Vuc2Ugc2VlbXMgbm90IHdvcmtpbmcgZm9yIE1CUCA1LDEgb3IgNSwyLAorCSAqIHNvIGFwcGFyZW50bHkgbm8gcGVyZmVjdCBzb2x1dGlvbiB5ZXQKIAkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0MDAwLCAiTWFjYm9va1BybyA1LDEiLCBBTEM4ODVfTUI1KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA2YiwgMHg0NjAwLCAiTWFjYm9va1BybyA1LDIiLCBBTEM4ODVfTUI1KSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC05NTkzLDExICs5NjExLDEzIEBACiAJeyB9CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFsY19waW5jZmcgKmFsYzg4Ml9waW5fZml4ZXNbXSA9IHsKLQlbUElORklYX0FCSVRfQVc5RF9NQVhdID0gYWxjODgyX2FiaXRfYXc5ZF9waW5maXgsCitzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGM4ODJfZml4dXBzW10gPSB7CisJW1BJTkZJWF9BQklUX0FXOURfTUFYXSA9IHsKKwkJLnBpbnMgPSBhbGM4ODJfYWJpdF9hdzlkX3BpbmZpeAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjODgyX3BpbmZpeF90YmxbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfZml4dXBfdGJsW10gPSB7CiAJU05EX1BDSV9RVUlSSygweDE0N2IsIDB4MTA3YSwgIkFiaXQgQVc5RC1NQVgiLCBQSU5GSVhfQUJJVF9BVzlEX01BWCksCiAJe30KIH07CkBAIC05Nzk0LDkgKzk4MTQsOSBAQAogCQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBkaWdfbmlkOwogCQllbHNlIHsKIAkJCXNwZWMtPm11bHRpb3V0LnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+c2xhdmVfZGlnX291dHM7Ci0JCQlzcGVjLT5zbGF2ZV9kaWdfb3V0c1tpIC0gMV0gPSBkaWdfbmlkOwotCQkJaWYgKGkgPT0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQorCQkJaWYgKGkgPj0gQVJSQVlfU0laRShzcGVjLT5zbGF2ZV9kaWdfb3V0cykgLSAxKQogCQkJCWJyZWFrOworCQkJc3BlYy0+c2xhdmVfZGlnX291dHNbaSAtIDFdID0gZGlnX25pZDsKIAkJfQogCX0KIAlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKQpAQCAtOTg2OSw3ICs5ODg5LDcgQEAKIAkJYm9hcmRfY29uZmlnID0gQUxDODgyX0FVVE87CiAJfQogCi0JYWxjX2ZpeF9waW5jZmcoY29kZWMsIGFsYzg4Ml9waW5maXhfdGJsLCBhbGM4ODJfcGluX2ZpeGVzKTsKKwlhbGNfcGlja19maXh1cChjb2RlYywgYWxjODgyX2ZpeHVwX3RibCwgYWxjODgyX2ZpeHVwcyk7CiAKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzg4Ml9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwpAQCAtMTE0NDEsNiArMTE0NjEsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDI1LCAiU29ueSBWQUlPIFoyMU1OIiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDM1LCAiU29ueSBWQUlPIFZHTi1GVzE3MEoiLCBBTEMyNjJfQVVUTyksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTA0NywgIlNvbnkgVkFJTyBUeXBlIEciLCBBTEMyNjJfQVVUTyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTA0ZCwgMHhmZjAwLCAweDkwMDAsICJTb255IFZBSU8iLAogCQkJICAgQUxDMjYyX1NPTllfQVNTQU1EKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHgwMDAxLCAiVG9zaGliYSBkeW5hYm9vayBTUyBSWDEiLApAQCAtMTI1ODUsNyArMTI2MDcsOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIE1pbmk5IiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMjgsIDB4ZmZmMCwgMHgwMmIwLAorCQkJIkRlbGwgSW5zcGlyb24gTWluaTkvVm9zdHJvIEE5MCIsIEFMQzI2OF9ERUxMKSwKIAkvKiBhbG1vc3QgY29tcGF0aWJsZSB3aXRoIHRvc2hpYmEgYnV0IHdpdGggb3B0aW9uYWwgZGlnaXRhbCBvdXRzOwogCSAqIGF1dG8tcHJvYmluZyBzZWVtcyB3b3JraW5nIGZpbmUKIAkgKi8KQEAgLTEyNjYwLDcgKzEyNjgzLDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzI2OF90b3NoaWJhX2F1dG9tdXRlLAogCX0sCiAJW0FMQzI2OF9BQ0VSXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfbWl4ZXIsIGFsYzI2OF9jYXB0dXJlX25vc3JjX21peGVyLAorCQkubWl4ZXJzID0geyBhbGMyNjhfYWNlcl9taXhlciwgYWxjMjY4X2NhcHR1cmVfYWx0X21peGVyLAogCQkJICAgIGFsYzI2OF9iZWVwX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzLCBhbGMyNjhfZWFwZF92ZXJicywKIAkJCQlhbGMyNjhfYWNlcl92ZXJicyB9LApAQCAtMTI4NDIsMTIgKzEyODY1LDE1IEBACiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKIAkJaW50IGk7CiAKKwkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGMyNjhfY2Fwc3JjX25pZHM7CiAJCS8qIGdldCB0eXBlICovCiAJCXdjYXAgPSBnZXRfd2NhcHNfdHlwZSh3Y2FwKTsKIAkJaWYgKHNwZWMtPmF1dG9fbWljIHx8CiAJCSAgICB3Y2FwICE9IEFDX1dJRF9BVURfSU4gfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkgewogCQkJc3BlYy0+YWRjX25pZHMgPSBhbGMyNjhfYWRjX25pZHNfYWx0OwogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHNfYWx0KTsKKwkJCWlmIChzcGVjLT5hdXRvX21pYykKKwkJCQlmaXh1cF9hdXRvbWljX2FkYyhjb2RlYyk7CiAJCQlpZiAoc3BlYy0+YXV0b19taWMgfHwgc3BlYy0+aW5wdXRfbXV4LT5udW1faXRlbXMgPT0gMSkKIAkJCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2NhcHR1cmVfbm9zcmNfbWl4ZXIpOwogCQkJZWxzZQpAQCAtMTI4NTcsNyArMTI4ODMsNiBAQAogCQkJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGMyNjhfYWRjX25pZHMpOwogCQkJYWRkX21peGVyKHNwZWMsIGFsYzI2OF9jYXB0dXJlX21peGVyKTsKIAkJfQotCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OF9jYXBzcmNfbmlkczsKIAkJLyogc2V0IGRlZmF1bHQgaW5wdXQgc291cmNlICovCiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fYWRjX25pZHM7IGkrKykKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGFsYzI2OF9jYXBzcmNfbmlkc1tpXSwKQEAgLTE0MzU3LDE1ICsxNDM4MiwxNiBAQAogc3RhdGljIHZvaWQgYWxjODYxX2F1dG9faW5pdF9ocF9vdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IHBpbjsKIAotCXBpbiA9IHNwZWMtPmF1dG9jZmcuaHBfcGluc1swXTsKLQlpZiAocGluKQotCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX0hQLAorCWlmIChzcGVjLT5hdXRvY2ZnLmhwX291dHMpCisJCWFsYzg2MV9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywKKwkJCQkJCSAgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCQkJCQkJICBQSU5fSFAsCiAJCQkJCQkgIHNwZWMtPm11bHRpb3V0LmhwX25pZCk7Ci0JcGluID0gc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF07Ci0JaWYgKHBpbikKLQkJYWxjODYxX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsCisJaWYgKHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9vdXRzKQorCQlhbGM4NjFfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsCisJCQkJCQkgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAorCQkJCQkJICBQSU5fT1VULAogCQkJCQkJICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSk7CiB9CiAKQEAgLTE1MTU4LDcgKzE1MTg0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHhhODhkLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiZiwgIkhQIFRYMTAwMCIsIEFMQzg2MVZEX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmUyLCAiQXN1cyB6MzVtIiwgQUxDNjYwVkRfM1NUKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQXN1cyBHMSIsIEFMQzY2MFZEXzNTVCksCisJLypTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQXN1cyBHMSIsIEFMQzY2MFZEXzNTVCksKi8gLyogYXV0byAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2MzMsICJBc3VzIFYxU24iLCBBTEM2NjBWRF9BU1VTX1YxUyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFlNywgIkFTVVMiLCBBTEM2NjBWRF8zU1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBkZSwgMHgwM2YwLCAiUmVhbHRlayBBTEM2NjAgZGVtbyIsIEFMQzY2MFZEXzNTVCksCkBAIC0xNTU1MSw2ICsxNTU3NywyOSBAQAogCQlhbGNfaW5pdGhvb2soY29kZWMpOwogfQogCitlbnVtIHsKKwlBTEM2NjBWRF9GSVhfQVNVU19HUElPMQorfTsKKworLyogcmVzZXQgR1BJTzEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgYWxjNjYwdmRfZml4X2FzdXNfZ3BpbzFfdmVyYnNbXSA9IHsKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDAzfSwKKwl7MHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDF9LAorCXsgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjODYxdmRfZml4dXBzW10gPSB7CisJW0FMQzY2MFZEX0ZJWF9BU1VTX0dQSU8xXSA9IHsKKwkJLnZlcmJzID0gYWxjNjYwdmRfZml4X2FzdXNfZ3BpbzFfdmVyYnMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4NjF2ZF9maXh1cF90YmxbXSA9IHsKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMzM5LCAiQVNVUyBBNy1LIiwgQUxDNjYwVkRfRklYX0FTVVNfR1BJTzEpLAorCXt9Cit9OworCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg2MXZkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKQEAgLTE1NTcyLDYgKzE1NjIxLDggQEAKIAkJYm9hcmRfY29uZmlnID0gQUxDODYxVkRfQVVUTzsKIAl9CiAKKwlhbGNfcGlja19maXh1cChjb2RlYywgYWxjODYxdmRfZml4dXBfdGJsLCBhbGM4NjF2ZF9maXh1cHMpOworCiAJaWYgKGJvYXJkX2NvbmZpZyA9PSBBTEM4NjFWRF9BVVRPKSB7CiAJCS8qIGF1dG9tYXRpYyBwYXJzZSBmcm9tIHRoZSBCSU9TIGNvbmZpZyAqLwogCQllcnIgPSBhbGM4NjF2ZF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CkBAIC0xNjg1Miw2ICsxNjkwMyw3IEBACiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGNkNiwgIkZveGNvbm4iLCBBTEM2NjJfRUNTKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA1YiwgMHgwZDQ3LCAiRm94Y29ubiA0NUNNWC80NUdNWC80NUNNWC1LIiwKIAkJICAgICAgQUxDNjYyXzNTVF82Y2hfRElHKSwKKwlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjZlLCAiVG9zaGliYSBOQjIwMCIsIEFMQzY2M19BU1VTX01PREU0KSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjYTAwLCAiU2Ftc3VuZyBOQzEwIiwgQUxDMjcyX1NBTVNVTkdfTkMxMCksCiAJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLApAQCAtMTcxNDUsNzAgKzE3MTk3LDE0NSBAQAogICogQklPUyBhdXRvIGNvbmZpZ3VyYXRpb24KICAqLwogCi0vKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZnJvbSB0aGUgcGFyc2VkIERBQyB0YWJsZSAqLwotc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKKy8qIGNvbnZlcnQgZnJvbSBNSVggbmlkIHRvIERBQyAqLworc3RhdGljIGlubGluZSBoZGFfbmlkX3QgYWxjNjYyX21peF90b19kYWMoaGRhX25pZF90IG5pZCkKK3sKKwlpZiAobmlkID09IDB4MGYpCisJCXJldHVybiAweDAyOworCWVsc2UgaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDBlKQorCQlyZXR1cm4gbmlkIC0gMHgwYyArIDB4MDI7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogZ2V0IE1JWCBuaWQgY29ubmVjdGVkIHRvIHRoZSBnaXZlbiBwaW4gdGFyZ2V0ZWQgdG8gREFDICovCitzdGF0aWMgaGRhX25pZF90IGFsYzY2Ml9kYWNfdG9fbWl4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluLAorCQkJCSAgIGhkYV9uaWRfdCBkYWMpCit7CisJaGRhX25pZF90IG1peFs0XTsKKwlpbnQgaSwgbnVtOworCisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbiwgbWl4LCBBUlJBWV9TSVpFKG1peCkpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAoYWxjNjYyX21peF90b19kYWMobWl4W2ldKSA9PSBkYWMpCisJCQlyZXR1cm4gbWl4W2ldOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbG9vayBmb3IgYW4gZW1wdHkgREFDIHNsb3QgKi8KK3N0YXRpYyBoZGFfbmlkX3QgYWxjNjYyX2xvb2tfZm9yX2RhYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbikKK3sKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3Qgc3Jjc1s1XTsKKwlpbnQgaSwgaiwgbnVtOworCisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbiwgc3JjcywgQVJSQVlfU0laRShzcmNzKSk7CisJaWYgKG51bSA8IDApCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQloZGFfbmlkX3QgbmlkID0gYWxjNjYyX21peF90b19kYWMoc3Jjc1tpXSk7CisJCWlmICghbmlkKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBzcGVjLT5tdWx0aW91dC5udW1fZGFjczsgaisrKQorCQkJaWYgKHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2pdID09IG5pZCkKKwkJCQlicmVhazsKKwkJaWYgKGogPj0gc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MpCisJCQlyZXR1cm4gbmlkOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogZmlsbCBpbiB0aGUgZGFjX25pZHMgdGFibGUgZnJvbSB0aGUgcGFyc2VkIHBpbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2ZpbGxfZGFjX25pZHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisJaGRhX25pZF90IGRhYzsKKworCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5saW5lX291dHM7IGkrKykgeworCQlkYWMgPSBhbGM2NjJfbG9va19mb3JfZGFjKGNvZGVjLCBjZmctPmxpbmVfb3V0X3BpbnNbaV0pOworCQlpZiAoIWRhYykKKwkJCWNvbnRpbnVlOworCQlzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tzcGVjLT5tdWx0aW91dC5udW1fZGFjcysrXSA9IGRhYzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxjNjYyX2FkZF92b2xfY3RsKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywgY29uc3QgY2hhciAqcGZ4LAorCQkJICAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNocykKIHsKIAljaGFyIG5hbWVbMzJdOworCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIHBmeCk7CisJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKKwkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIDAsIEhEQV9PVVRQVVQpKTsKK30KKworc3RhdGljIGludCBhbGM2NjJfYWRkX3N3X2N0bChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGNvbnN0IGNoYXIgKnBmeCwKKwkJCSAgICAgaGRhX25pZF90IG5pZCwgdW5zaWduZWQgaW50IGNocykKK3sKKwljaGFyIG5hbWVbMzJdOworCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7CisJcmV0dXJuIGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCisJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfSU5QVVQpKTsKK30KKworI2RlZmluZSBhbGM2NjJfYWRkX3N0ZXJlb192b2woc3BlYywgcGZ4LCBuaWQpIFwKKwlhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpCisjZGVmaW5lIGFsYzY2Ml9hZGRfc3RlcmVvX3N3KHNwZWMsIHBmeCwgbmlkKSBcCisJYWxjNjYyX2FkZF9zd19jdGwoc3BlYywgcGZ4LCBuaWQsIDMpCisKKy8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCitzdGF0aWMgaW50IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCit7CisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmNobmFtZVs0XSA9IHsKIAkJIkZyb250IiwgIlN1cnJvdW5kIiwgTlVMTCAvKkNMRkUqLywgIlNpZGUiCiAJfTsKLQloZGFfbmlkX3QgbmlkOworCWhkYV9uaWRfdCBuaWQsIG1peDsKIAlpbnQgaSwgZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bGluZV9vdXRzOyBpKyspIHsKLQkJaWYgKCFzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXSkKKwkJbmlkID0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbaV07CisJCWlmICghbmlkKQogCQkJY29udGludWU7Ci0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGkpOworCQltaXggPSBhbGM2NjJfZGFjX3RvX21peChjb2RlYywgY2ZnLT5saW5lX291dF9waW5zW2ldLCBuaWQpOworCQlpZiAoIW1peCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoaSA9PSAyKSB7CiAJCQkvKiBDZW50ZXIvTEZFICovCi0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCi0JCQkJCSAgIkNlbnRlciBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAxLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsCi0JCQkJCSAgIkxGRSBQbGF5YmFjayBWb2x1bWUiLAotCQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAyLCAwLAotCQkJCQkJCSAgICAgIEhEQV9PVVRQVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfdm9sX2N0bChzcGVjLCAiTEZFIiwgbmlkLCAyKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJDZW50ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGUsIDEsIDAsCi0JCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCAiQ2VudGVyIiwgbWl4LCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLAotCQkJCQkgICJMRkUgUGxheWJhY2sgU3dpdGNoIiwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKDB4MGUsIDIsIDAsCi0JCQkJCQkJICAgICAgSERBX0lOUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3N3X2N0bChzcGVjLCAiTEZFIiwgbWl4LCAyKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpwZng7CiAJCQlpZiAoY2ZnLT5saW5lX291dHMgPT0gMSAmJgogCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCkgewotCQkJCWlmICghY2ZnLT5ocF9waW5zKQorCQkJCWlmIChjZmctPmhwX291dHMpCiAJCQkJCXBmeCA9ICJTcGVha2VyIjsKIAkJCQllbHNlCiAJCQkJCXBmeCA9ICJQQ00iOwogCQkJfSBlbHNlCiAJCQkJcGZ4ID0gY2huYW1lW2ldOwotCQkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgVm9sdW1lIiwgcGZ4KTsKLQkJCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX1ZPTCwgbmFtZSwKLQkJCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwKLQkJCQkJCQkgICAgICBIREFfT1VUUFVUKSk7CisJCQllcnIgPSBhbGM2NjJfYWRkX3ZvbF9jdGwoc3BlYywgcGZ4LCBuaWQsIDMpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIAkJCWlmIChjZmctPmxpbmVfb3V0cyA9PSAxICYmCiAJCQkgICAgY2ZnLT5saW5lX291dF90eXBlID09IEFVVE9fUElOX1NQRUFLRVJfT1VUKQogCQkJCXBmeCA9ICJTcGVha2VyIjsKLQkJCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAotCQkJCUhEQV9DT01QT1NFX0FNUF9WQUwoYWxjODgwX2lkeF90b19taXhlcihpKSwKLQkJCQkJCSAgICAzLCAwLCBIREFfSU5QVVQpKTsKKwkJCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsIHBmeCwgbWl4LCAzKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7CiAJCX0KQEAgLTE3MjE3LDg2ICsxNzM0NCw3NSBAQAogfQogCiAvKiBhZGQgcGxheWJhY2sgY29udHJvbHMgZm9yIHNwZWFrZXIgYW5kIEhQIG91dHB1dHMgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIGhkYV9uaWRfdCBwaW4sCisvKiByZXR1cm4gREFDIG5pZCBpZiBhbnkgbmV3IERBQyBpcyBhc3NpZ25lZCAqLworc3RhdGljIGludCBhbGM2NjJfYXV0b19jcmVhdGVfZXh0cmFfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluLAogCQkJCQljb25zdCBjaGFyICpwZngpCiB7Ci0JaGRhX25pZF90IG5pZDsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgbmlkLCBtaXg7CiAJaW50IGVycjsKLQljaGFyIG5hbWVbMzJdOwogCiAJaWYgKCFwaW4pCiAJCXJldHVybiAwOwotCi0JaWYgKHBpbiA9PSAweDE3KSB7Ci0JCS8qIEFMQzY2MyBoYXMgYSBtb25vIG91dHB1dCBwaW4gb24gMHgxNyAqLworCW5pZCA9IGFsYzY2Ml9sb29rX2Zvcl9kYWMoY29kZWMsIHBpbik7CisJaWYgKCFuaWQpIHsKKwkJY2hhciBuYW1lWzMyXTsKKwkJLyogdGhlIGNvcnJlc3BvbmRpbmcgREFDIGlzIGFscmVhZHkgb2NjdXBpZWQgKi8KKwkJaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBwaW4pICYgQUNfV0NBUF9PVVRfQU1QKSkKKwkJCXJldHVybiAwOyAvKiBubyB3YXkgKi8KKwkJLyogY3JlYXRlIGEgc3dpdGNoIG9ubHkgKi8KIAkJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQkJZXJyID0gYWRkX2NvbnRyb2woc3BlYywgQUxDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKLQkJCQkgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAyLCAwLCBIREFfT1VUUFVUKSk7CisJCXJldHVybiBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9NVVRFLCBuYW1lLAorCQkJCSAgIEhEQV9DT01QT1NFX0FNUF9WQUwocGluLCAzLCAwLCBIREFfT1VUUFVUKSk7CisJfQorCisJbWl4ID0gYWxjNjYyX2RhY190b19taXgoY29kZWMsIHBpbiwgbmlkKTsKKwlpZiAoIW1peCkKKwkJcmV0dXJuIDA7CisJZXJyID0gYWxjNjYyX2FkZF92b2xfY3RsKHNwZWMsIHBmeCwgbmlkLCAzKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAoYWxjODgwX2lzX2ZpeGVkX3BpbihwaW4pKSB7Ci0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiREFDIG5pZD0leFxuIixuaWQpOyAqLwotCQkvKiBzcGVjaWZ5IHRoZSBEQUMgYXMgdGhlIGV4dHJhIG91dHB1dCAqLwotCQlpZiAoIXNwZWMtPm11bHRpb3V0LmhwX25pZCkKLQkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IG5pZDsKLQkJZWxzZQotCQkJc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFswXSA9IG5pZDsKLQkJLyogY29udHJvbCBIUCB2b2x1bWUvc3dpdGNoIG9uIHRoZSBvdXRwdXQgbWl4ZXIgYW1wICovCi0JCW5pZCA9IGFsYzg4MF9pZHhfdG9fZGFjKGFsYzg4MF9maXhlZF9waW5faWR4KHBpbikpOwotCQlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCQllcnIgPSBhZGRfY29udHJvbChzcGVjLCBBTENfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfQklORF9NVVRFLCBuYW1lLAotCQkJCSAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIDIsIEhEQV9JTlBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfSBlbHNlIGlmIChhbGM4ODBfaXNfbXVsdGlfcGluKHBpbikpIHsKLQkJLyogc2V0IG1hbnVhbCBjb25uZWN0aW9uICovCi0JCS8qIHdlIGhhdmUgb25seSBhIHN3aXRjaCBvbiBIUC1vdXQgUElOICovCi0JCXNwcmludGYobmFtZSwgIiVzIFBsYXliYWNrIFN3aXRjaCIsIHBmeCk7Ci0JCWVyciA9IGFkZF9jb250cm9sKHNwZWMsIEFMQ19DVExfV0lER0VUX01VVEUsIG5hbWUsCi0JCQkJICBIREFfQ09NUE9TRV9BTVBfVkFMKHBpbiwgMywgMCwgSERBX09VVFBVVCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQotCXJldHVybiAwOworCWVyciA9IGFsYzY2Ml9hZGRfc3dfY3RsKHNwZWMsIHBmeCwgbWl4LCAzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbmlkOwogfQogCiAvKiBjcmVhdGUgcGxheWJhY2svY2FwdHVyZSBjb250cm9scyBmb3IgaW5wdXQgcGlucyAqLwogI2RlZmluZSBhbGM2NjJfYXV0b19jcmVhdGVfaW5wdXRfY3RscyBcCi0JYWxjODgwX2F1dG9fY3JlYXRlX2lucHV0X2N0bHMKKwlhbGM4ODJfYXV0b19jcmVhdGVfaW5wdXRfY3RscwogCiBzdGF0aWMgdm9pZCBhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSAgICAgIGhkYV9uaWRfdCBuaWQsIGludCBwaW5fdHlwZSwKLQkJCQkJICAgICAgaW50IGRhY19pZHgpCisJCQkJCSAgICAgIGhkYV9uaWRfdCBkYWMpCiB7CisJaW50IGksIG51bTsKKwloZGFfbmlkX3Qgc3Jjc1s0XTsKKwogCWFsY19zZXRfcGluX291dHB1dChjb2RlYywgbmlkLCBwaW5fdHlwZSk7CiAJLyogbmVlZCB0aGUgbWFudWFsIGNvbm5lY3Rpb24/ICovCi0JaWYgKGFsYzg4MF9pc19tdWx0aV9waW4obmlkKSkgewotCQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQkJaW50IGlkeCA9IGFsYzg4MF9tdWx0aV9waW5faWR4KG5pZCk7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIGFsYzg4MF9pZHhfdG9fc2VsZWN0b3IoaWR4KSwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCi0JCQkJICAgIGFsYzg4MF9kYWNfdG9faWR4KHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2RhY19pZHhdKSk7CisJbnVtID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgc3JjcywgQVJSQVlfU0laRShzcmNzKSk7CisJaWYgKG51bSA8PSAxKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWlmIChhbGM2NjJfbWl4X3RvX2RhYyhzcmNzW2ldKSAhPSBkYWMpCisJCQljb250aW51ZTsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgaSk7CisJCXJldHVybjsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfbXVsdGlfb3V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8PSBIREFfU0lERTsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3BpbnNbaV07Ci0JCWludCBwaW5fdHlwZSA9IGdldF9waW5fdHlwZShzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUpOwogCQlpZiAobmlkKQogCQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBuaWQsIHBpbl90eXBlLAotCQkJCQkJCSAgaSk7CisJCQkJCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldKTsKIAl9CiB9CiAKQEAgLTE3MzA2LDEyICsxNzQyMiwxMyBAQAogCWhkYV9uaWRfdCBwaW47CiAKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF07Ci0JaWYgKHBpbikgLyogY29ubmVjdCB0byBmcm9udCAqLwotCQkvKiB1c2UgZGFjIDAgKi8KLQkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwgMCk7CisJaWYgKHBpbikKKwkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9IUCwKKwkJCQkJCSAgc3BlYy0+bXVsdGlvdXQuaHBfbmlkKTsKIAlwaW4gPSBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXTsKIAlpZiAocGluKQotCQlhbGM2NjJfYXV0b19zZXRfb3V0cHV0X2FuZF91bm11dGUoY29kZWMsIHBpbiwgUElOX09VVCwgMCk7CisJCWFsYzY2Ml9hdXRvX3NldF9vdXRwdXRfYW5kX3VubXV0ZShjb2RlYywgcGluLCBQSU5fT1VULAorCQkJCQlzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkWzBdKTsKIH0KIAogI2RlZmluZSBBTEM2NjJfUElOX0NEX05JRAkJQUxDODgwX1BJTl9DRF9OSUQKQEAgLTE3MzQ5LDIxICsxNzQ2NiwyNSBAQAogCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBmaW5kIHZhbGlkIEJJT1MgcGluIGNvbmZpZyAqLwogCi0JZXJyID0gYWxjODgwX2F1dG9fZmlsbF9kYWNfbmlkcyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fZmlsbF9kYWNfbmlkcyhjb2RlYywgJnNwZWMtPmF1dG9jZmcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9tdWx0aV9vdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChzcGVjLAorCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoY29kZWMsCiAJCQkJCSAgIHNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdLAogCQkJCQkgICAiU3BlYWtlciIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9leHRyYV9vdXQoc3BlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAorCWlmIChlcnIpCisJCXNwZWMtPm11bHRpb3V0LmV4dHJhX291dF9uaWRbMF0gPSBlcnI7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2V4dHJhX291dChjb2RlYywgc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdLAogCQkJCQkgICAiSGVhZHBob25lIik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJaWYgKGVycikKKwkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZXJyOwogCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKaW5kZXggODI2MTM3ZS4uODZkZTMwNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KQEAgLTE1OCw2ICsxNTksNyBAQAogCVNUQUNfRDk2NV81U1RfTk9fRlAsCiAJU1RBQ19ERUxMXzNTVCwKIAlTVEFDX0RFTExfQklPUywKKwlTVEFDXzkyN1hfVk9MS05PQiwKIAlTVEFDXzkyN1hfTU9ERUxTCiB9OwogCkBAIC0xODIsOCArMTg0LDggQEAKIAogc3RydWN0IHNpZ21hdGVsX21pY19yb3V0ZSB7CiAJaGRhX25pZF90IHBpbjsKLQl1bnNpZ25lZCBjaGFyIG11eF9pZHg7Ci0JdW5zaWduZWQgY2hhciBkbXV4X2lkeDsKKwlzaWduZWQgY2hhciBtdXhfaWR4OworCXNpZ25lZCBjaGFyIGRtdXhfaWR4OwogfTsKIAogc3RydWN0IHNpZ21hdGVsX3NwZWMgewpAQCAtOTA3LDYgKzkwOSwxNiBAQAogCXt9CiB9OwogCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGRlbGxfM3N0X2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogdW5tdXRlIG5vZGUgMHgxYiAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAorCS8qIHNlbGVjdCBub2RlIDB4MDMgYXMgREFDICovCisJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAxfSwKKwl7fQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF9jb3JlX2luaXRbXSA9IHsKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8JCiAJeyAweDI0LCBBQ19WRVJCX1NFVF9WT0xVTUVfS05PQl9DT05UUk9MLCAweGZmfSwKQEAgLTkxNSw2ICs5MjcsMTQgQEAKIAl7fQogfTsKIAorc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTI3eF92b2xrbm9iX2NvcmVfaW5pdFtdID0geworCS8qIGRvbid0IHNldCBkZWx0YSBiaXQgKi8KKwl7MHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHg3Zn0sCisJLyogZW5hYmxlIGFuYWxvZyBwYyBiZWVwIHBhdGggKi8KKwl7MHgwMSwgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsIDEgPDwgNX0sCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyMDVfY29yZV9pbml0W10gPSB7CiAJLyogc2V0IG1hc3RlciB2b2x1bWUgYW5kIGRpcmVjdCBjb250cm9sICovCQogCXsgMHgyNCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCkBAIC0xNTcwLDYgKzE1OTAsOCBAQAogCQkJCSJEZWxsIFN0dWRpbyAxNyIsIFNUQUNfREVMTF9NNl9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMmJlLAogCQkJCSJEZWxsIFN0dWRpbyAxNTU1IiwgU1RBQ19ERUxMX002X0RNSUMpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmQsCisJCQkJIkRlbGwgU3R1ZGlvIDE1NTciLCBTVEFDX0RFTExfTTZfRE1JQyksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtMTY3NCw2ICsxNjk2LDggQEAKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZmIsCiAJCSAgICAgICJIUCBkdjQtMTIyMm5yIiwgU1RBQ19IUF9EVjRfMTIyMk5SKSwKKwlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDE3MjAsCisJCQkgICJIUCIsIFNUQUNfSFBfRFY1KSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwODAsCiAJCSAgICAgICJIUCIsIFNUQUNfSFBfRFY1KSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9IUCwgMHhmZmYwLCAweDMwZjAsCkBAIC0xOTk5LDYgKzIwMjMsNyBAQAogCVtTVEFDX0Q5NjVfNVNUX05PX0ZQXSAgPSBkOTY1XzVzdF9ub19mcF9waW5fY29uZmlncywKIAlbU1RBQ19ERUxMXzNTVF0gID0gZGVsbF8zc3RfcGluX2NvbmZpZ3MsCiAJW1NUQUNfREVMTF9CSU9TXSA9IE5VTEwsCisJW1NUQUNfOTI3WF9WT0xLTk9CXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyN3hfbW9kZWxzW1NUQUNfOTI3WF9NT0RFTFNdID0gewpAQCAtMjAxMCw2ICsyMDM1LDcgQEAKIAlbU1RBQ19EOTY1XzVTVF9OT19GUF0JPSAiNXN0YWNrLW5vLWZwIiwKIAlbU1RBQ19ERUxMXzNTVF0JCT0gImRlbGwtM3N0YWNrIiwKIAlbU1RBQ19ERUxMX0JJT1NdCT0gImRlbGwtYmlvcyIsCisJW1NUQUNfOTI3WF9WT0xLTk9CXQk9ICJ2b2xrbm9iIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI3eF9jZmdfdGJsW10gPSB7CkBAIC0yMDQ1LDYgKzIwNzEsOCBAQAogCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKIAlTTkRfUENJX1FVSVJLX01BU0soUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHhmZjAwLCAweDI1MDAsCiAJCQkgICAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCS8qIHZvbHVtZS1rbm9iIGZpeGVzICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMGNmLCAiRlNDIiwgU1RBQ185MjdYX1ZPTEtOT0IpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKQEAgLTM0NjksMTggKzM0OTcsMjYgQEAKIAkJCWJyZWFrOwogCWlmIChpIDw9IEFVVE9fUElOX0ZST05UX01JQykgewogCQkvKiBhbmFsb2cgcGluICovCi0JCW1pYy0+ZG11eF9pZHggPSAwOwogCQlpID0gZ2V0X2Nvbm5lY3Rpb25faW5kZXgoY29kZWMsIHNwZWMtPm11eF9uaWRzWzBdLCBwaW4pOwogCQlpZiAoaSA8IDApCiAJCQlyZXR1cm4gLTE7CiAJCW1pYy0+bXV4X2lkeCA9IGk7CisJCW1pYy0+ZG11eF9pZHggPSAtMTsKKwkJaWYgKHNwZWMtPmRtdXhfbmlkcykKKwkJCW1pYy0+ZG11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgIHNwZWMtPmRtdXhfbmlkc1swXSwKKwkJCQkJCQkgICAgIHNwZWMtPm11eF9uaWRzWzBdKTsKIAl9ICBlbHNlIGlmIChzcGVjLT5kbXV4X25pZHMpIHsKIAkJLyogZGlnaXRhbCBwaW4gKi8KLQkJbWljLT5tdXhfaWR4ID0gMDsKIAkJaSA9IGdldF9jb25uZWN0aW9uX2luZGV4KGNvZGVjLCBzcGVjLT5kbXV4X25pZHNbMF0sIHBpbik7CiAJCWlmIChpIDwgMCkKIAkJCXJldHVybiAtMTsKIAkJbWljLT5kbXV4X2lkeCA9IGk7CisJCW1pYy0+bXV4X2lkeCA9IC0xOworCQlpZiAoc3BlYy0+bXV4X25pZHMpCisJCQltaWMtPm11eF9pZHggPSBnZXRfY29ubmVjdGlvbl9pbmRleChjb2RlYywKKwkJCQkJCQkgICAgc3BlYy0+bXV4X25pZHNbMF0sCisJCQkJCQkJICAgIHNwZWMtPmRtdXhfbmlkc1swXSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNDU1NywxMSArNDU5MywxMSBAQAogCQltaWMgPSAmc3BlYy0+ZXh0X21pYzsKIAllbHNlCiAJCW1pYyA9ICZzcGVjLT5pbnRfbWljOwotCWlmIChtaWMtPmRtdXhfaWR4KQorCWlmIChtaWMtPmRtdXhfaWR4ID49IDApCiAJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIHNwZWMtPmRtdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPmRtdXhfaWR4KTsKLQllbHNlCisJaWYgKG1pYy0+bXV4X2lkeCA+PSAwKQogCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBzcGVjLT5tdXhfbmlkc1swXSwgMCwKIAkJCQkJICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKIAkJCQkJICBtaWMtPm11eF9pZHgpOwpAQCAtNDYzNCw2ICs0NjcwLDI2IEBACiAJfQogfQogCitzdGF0aWMgaW50IGhwX2JzZXJpZXNfc3lzdGVtKHUzMiBzdWJzeXN0ZW1faWQpCit7CisJc3dpdGNoIChzdWJzeXN0ZW1faWQpIHsKKwljYXNlIDB4MTAzYzMwN2U6CisJY2FzZSAweDEwM2MzMDdmOgorCWNhc2UgMHgxMDNjMzA4MDoKKwljYXNlIDB4MTAzYzMwODE6CisJY2FzZSAweDEwM2MxNzIyOgorCWNhc2UgMHgxMDNjMTcyMzoKKwljYXNlIDB4MTAzYzE3MjQ6CisJY2FzZSAweDEwM2MxNzI1OgorCWNhc2UgMHgxMDNjMTcyNjoKKwljYXNlIDB4MTAzYzE3Mjc6CisJY2FzZSAweDEwM2MxNzI4OgorCWNhc2UgMHgxMDNjMTcyOToKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB2b2lkIHN0YWM5MmhkX3Byb2NfaG9vayhzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIsCiAJCQkgICAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCkBAIC00NzIzLDYgKzQ3NzksMTEgQEAKIAkJZWxzZQogCQkJc3BlYy0+Z3Bpb19kYXRhIHw9IHNwZWMtPmdwaW9fbGVkOyAvKiB3aGl0ZSAqLwogCisJCWlmIChocF9ic2VyaWVzX3N5c3RlbShjb2RlYy0+c3Vic3lzdGVtX2lkKSkgeworCQkJLyogTEVEIHN0YXRlIGlzIGludmVydGVkIG9uIHRoZXNlIHN5c3RlbXMgKi8KKwkJCXNwZWMtPmdwaW9fZGF0YSBePSBzcGVjLT5ncGlvX2xlZDsKKwkJfQorCiAJCXN0YWNfZ3Bpb19zZXQoY29kZWMsIHNwZWMtPmdwaW9fbWFzaywKIAkJCSAgICAgIHNwZWMtPmdwaW9fZGlyLAogCQkJICAgICAgc3BlYy0+Z3Bpb19kYXRhKTsKQEAgLTUyMTIsNiArNTI3Myw3IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWM7CiAJc3RydWN0IGhkYV92ZXJiICp1bm11dGVfaW5pdCA9IHN0YWM5MmhkNzFieHhfdW5tdXRlX2NvcmVfaW5pdDsKKwl1bnNpZ25lZCBpbnQgcGluX2NmZzsKIAlpbnQgZXJyID0gMDsKIAogCXNwZWMgID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKQEAgLTUzOTUsNiArNTQ1Nyw0NSBAQAogCQlicmVhazsKIAl9CiAKKwlpZiAoaHBfYnNlcmllc19zeXN0ZW0oY29kZWMtPnN1YnN5c3RlbV9pZCkpIHsKKwkJcGluX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CisJCWlmIChnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0xJTkVfT1VUIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX1NQRUFLRVIgIHx8CisJCQlnZXRfZGVmY2ZnX2RldmljZShwaW5fY2ZnKSA9PSBBQ19KQUNLX0hQX09VVCkgeworCQkJLyogSXQgd2FzIGNoYW5nZWQgaW4gdGhlIEJJT1MgdG8ganVzdCBzYXRpc2Z5IE1TIERUTS4KKwkJCSAqIExldHMgdHVybiBpdCBiYWNrIGludG8gc2xhdmVkIEhQCisJCQkgKi8KKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+QUNfREVGQ0ZHX0RFVklDRSkpCisJCQkJCXwgKEFDX0pBQ0tfSFBfT1VUIDw8CisJCQkJCQlBQ19ERUZDRkdfREVWSUNFX1NISUZUKTsKKwkJCXBpbl9jZmcgPSAocGluX2NmZyAmICh+KEFDX0RFRkNGR19ERUZfQVNTT0MKKwkJCQkJCQl8IEFDX0RFRkNGR19TRVFVRU5DRSkpKQorCQkJCQkJCQl8IDB4MWY7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIHBpbl9jZmcpOworCQl9CisJfQorCisJaWYgKChjb2RlYy0+c3Vic3lzdGVtX2lkID4+IDE2KSA9PSBQQ0lfVkVORE9SX0lEX0hQKSB7CisJCWNvbnN0IHN0cnVjdCBkbWlfZGV2aWNlICpkZXYgPSBOVUxMOworCQl3aGlsZSAoKGRldiA9IGRtaV9maW5kX2RldmljZShETUlfREVWX1RZUEVfT0VNX1NUUklORywKKwkJCQkJICAgICAgTlVMTCwgZGV2KSkpIHsKKwkJCWlmIChzdHJjbXAoZGV2LT5uYW1lLCAiSFBfTXV0ZV9MRURfMSIpKSB7CisJCQkJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CisJCQkJY2FzZSAweDExMWQ3NjA4OgorCQkJCQlzcGVjLT5ncGlvX2xlZCA9IDB4MDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHgxMTFkNzYwMDoKKwkJCQljYXNlIDB4MTExZDc2MDE6CisJCQkJY2FzZSAweDExMWQ3NjAyOgorCQkJCWNhc2UgMHgxMTFkNzYwMzoKKwkJCQkJc3BlYy0+Z3Bpb19sZWQgPSAweDA4OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJaWYgKHNwZWMtPmdwaW9fbGVkKSB7CiAJCXNwZWMtPmdwaW9fbWFzayB8PSBzcGVjLT5ncGlvX2xlZDsKQEAgLTU2MDQsMTAgKzU3MDUsMTQgQEAKIAkJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyN3hfZG1pY19uaWRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBTVEFDOTI3WF9OVU1fRE1JQ1M7CiAKLQkJc3BlYy0+aW5pdCA9IGQ5NjVfY29yZV9pbml0OworCQlzcGVjLT5pbml0ID0gZGVsbF8zc3RfY29yZV9pbml0OwogCQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTI3eF9kbXV4X25pZHM7CiAJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5Mjd4X2RtdXhfbmlkcyk7CiAJCWJyZWFrOworCWNhc2UgU1RBQ185MjdYX1ZPTEtOT0I6CisJCXNwZWMtPm51bV9kbWljcyA9IDA7CisJCXNwZWMtPmluaXQgPSBzdGFjOTI3eF92b2xrbm9iX2NvcmVfaW5pdDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3BlYy0+bnVtX2RtaWNzID0gMDsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5Mjd4X2NvcmVfaW5pdDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2FtcC5jIGIvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKaW5kZXggMzc1NjQzMC4uNmRhMjFhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvYW1wLmMKQEAgLTUyLDExICs1MiwxMyBAQAogCiAJLyogb25seSB1c2UgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3Igbm93ICovCiAKLQlpY2UtPm51bV90b3RhbF9kYWNzID0gMjsJLyogb25seSBQU0RPVVQwIGlzIGNvbm5lY3RlZCAqLworCS8qIFZUMTYxNiA2Y2ggY29kZWMgY29ubmVjdGVkIHRvIFBTRE9VVDAgdXNpbmcgcGFja2VkIG1vZGUgKi8KKwlpY2UtPm51bV90b3RhbF9kYWNzID0gNjsKIAlpY2UtPm51bV90b3RhbF9hZGNzID0gMjsKIAotCS8qIENoYWludGVjaCBBVi03MTAgaGFzIGFub3RoZXIgY29kZWNzLCB3aGljaCBuZWVkIGluaXRpYWxpemF0aW9uICovCi0JLyogaW5pdGlhbGl6ZSBXTTg3MjggY29kZWMgKi8KKwkvKiBDaGFpbnRlY2ggQVYtNzEwIGhhcyBhbm90aGVyIFdNODcyOCBjb2RlYyBjb25uZWN0ZWQgdG8gUFNET1VUNAorCSAgIChzaGFyZWQgd2l0aCB0aGUgU1BESUYgb3V0cHV0KS4gTWl4ZXIgY29udHJvbCBmb3IgdGhpcyBjb2RlYworCSAgIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLiAqLwogCWlmIChpY2UtPmVlcHJvbS5zdWJ2ZW5kb3IgPT0gVlQxNzI0X1NVQkRFVklDRV9BVjcxMCkgewogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bV9pbml0cyk7IGkgKz0gMikKIAkJCXdtX3B1dChpY2UsIHdtX2luaXRzW2ldLCB3bV9pbml0c1tpKzFdKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBjZWNmMWZmLi5kNzQwMzNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC0yMjU5LDcgKzIyNTksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2ljZTE3MTJfbWl4ZXJfcHJvX3BlYWsgX19kZXZpbml0ZGF0YSA9IHsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUGVhayIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAogCS5pbmZvID0gc25kX2ljZTE3MTJfcHJvX3BlYWtfaW5mbywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuaAppbmRleCA5ZGEyZGFlLi5kMDYzMTQ5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5oCkBAIC0zODIsOCArMzgyLDggQEAKICNpZmRlZiBDT05GSUdfUE0KIAlpbnQgKCpwbV9zdXNwZW5kKShzdHJ1Y3Qgc25kX2ljZTE3MTIgKik7CiAJaW50ICgqcG1fcmVzdW1lKShzdHJ1Y3Qgc25kX2ljZTE3MTIgKik7Ci0JaW50IHBtX3N1c3BlbmRfZW5hYmxlZDoxOwotCWludCBwbV9zYXZlZF9pc19zcGRpZl9tYXN0ZXI6MTsKKwl1bnNpZ25lZCBpbnQgcG1fc3VzcGVuZF9lbmFibGVkOjE7CisJdW5zaWduZWQgaW50IHBtX3NhdmVkX2lzX3NwZGlmX21hc3RlcjoxOwogCXVuc2lnbmVkIGludCBwbV9zYXZlZF9zcGRpZl9jdHJsOwogCXVuc2lnbmVkIGNoYXIgcG1fc2F2ZWRfc3BkaWZfY2ZnOwogCXVuc2lnbmVkIGludCBwbV9zYXZlZF9yb3V0ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwppbmRleCBhZjZlMDAxLi4xMGZjOTJjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAkgICAgKGluYihJQ0VNVDE3MjQoaWNlLCBETUFfUEFVU0UpKSAmIERNQV9QQVVTRVMpKSB7CiAJCS8qIHJ1bm5pbmc/IHdlIGNhbm5vdCBjaGFuZ2UgdGhlIHJhdGUgbm93Li4uICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljZS0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmV0dXJuICgocmF0ZSA9PSBpY2UtPmN1cl9yYXRlKSAmJiAhZm9yY2UpID8gMCA6IC1FQlVTWTsKIAl9CiAJaWYgKCFmb3JjZSAmJiBpc19wcm9fcmF0ZV9sb2NrZWQoaWNlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2UtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogCiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShpY2UtPnBjaSksCi0JCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworCQkJCQkgICAgICAyNTYqMTAyNCwgMjU2KjEwMjQpOwogCiAJaWNlLT5wY20gPSBwY207CiAKQEAgLTE0MDgsNyArMTQwOCw3IEBACiAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGljZS0+cGNpKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7CisJCQkJCSAgICAgIDI1NioxMDI0LCAyNTYqMTAyNCk7CiAKIAlpY2UtPnBjbV9kcyA9IHBjbTsKIApAQCAtMjExMCw3ICsyMTEwLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF92dDE3MjRfbWl4ZXJfcHJvX3BlYWsgX19kZXZpbml0ZGF0YSA9IHsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9QQ00sCiAJLm5hbWUgPSAiTXVsdGkgVHJhY2sgUGVhayIsCiAJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEIHwgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1ZPTEFUSUxFLAogCS5pbmZvID0gc25kX3Z0MTcyNF9wcm9fcGVha19pbmZvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvcHJvZGlneV9oaWZpLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwppbmRleCBjNzU1MTVmLi42YTlmZWUzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9wcm9kaWd5X2hpZmkuYwpAQCAtMTEwMCw3ICsxMTAwLDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBfX2RldmluaXQgcHJvZGlneV9oZDJfcmVzdW1lKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlKQorc3RhdGljIGludCBwcm9kaWd5X2hkMl9yZXN1bWUoc3RydWN0IHNuZF9pY2UxNzEyICppY2UpCiB7CiAJLyogaW5pdGlhbGl6ZSBhazQzOTYgY29kZWMgYW5kIHJlc3RvcmUgcHJldmlvdXMgbWl4ZXIgdm9sdW1lcyAqLwogCXN0cnVjdCBwcm9kaWd5X2hpZmlfc3BlYyAqc3BlYyA9IGljZS0+c3BlYzsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jIGIvc291bmQvcGNpL2ludGVsOHgwLmMKaW5kZXggMTcxYWRhNS4uYWFjMjBmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ludGVsOHgwLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwLmMKQEAgLTE5NTAsMTAgKzE5NTAsMjggQEAKIAl9LAogCXsKIAkJLnN1YnZlbmRvciA9IDB4MTA0ZCwKKwkJLnN1YmRldmljZSA9IDB4ODE0NCwKKwkJLm5hbWUgPSAiU29ueSIsCisJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECisJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCiAJCS5zdWJkZXZpY2UgPSAweDgxOTcsCiAJCS5uYW1lID0gIlNvbnkgUzFYUCIsCiAJCS50eXBlID0gQUM5N19UVU5FX0lOVl9FQVBECiAJfSwKKwl7CisJCS5zdWJ2ZW5kb3IgPSAweDEwNGQsCisJCS5zdWJkZXZpY2UgPSAweDgxYzAsCisJCS5uYW1lID0gIlNvbnkgVkFJTyBWR04tVDM1MFAiLCAvKkFEMTk4MUIqLworCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCisJeworCQkuc3VidmVuZG9yID0gMHgxMDRkLAorCQkuc3ViZGV2aWNlID0gMHg4MWM1LAorCQkubmFtZSA9ICJTb255IFZBSU8gVkdOLUIxVlAiLCAvKkFEMTk4MUIqLworCQkudHlwZSA9IEFDOTdfVFVORV9JTlZfRUFQRAorCX0sCiAgCXsKIAkJLnN1YnZlbmRvciA9IDB4MTA0MywKIAkJLnN1YmRldmljZSA9IDB4ODBmMywKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4LmMgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCmluZGV4IGFjZmE0NzYuLjhhMzMyZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4LmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHguYwpAQCAtMzg2LDYgKzM4Niw3IEBACiAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtc1syXTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmR4c19jb250cm9sc1s0XTsKIAogCXN0cnVjdCBzbmRfYWM5N19idXMgKmFjOTdfYnVzOwogCXN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKQEAgLTEyMTYsOSArMTIxNyw5IEBACiAKIAogLyoKLSAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NiBhbmQgdmlhODIzeCBEU1gKKyAqIG9wZW4gY2FsbGJhY2sgZm9yIHBsYXliYWNrIG9uIHZpYTY4NgogICovCi1zdGF0aWMgaW50IHNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitzdGF0aWMgaW50IHNuZF92aWE2ODZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlzdHJ1Y3QgdmlhZGV2ICp2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKQEAgLTEyMzAsNiArMTIzMSwzMiBAQAogfQogCiAvKgorICogb3BlbiBjYWxsYmFjayBmb3IgcGxheWJhY2sgb24gdmlhODIzeCBEWFMKKyAqLworc3RhdGljIGludCBzbmRfdmlhODIzM19wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldjsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtOworCWludCBlcnI7CisKKwl2aWFkZXYgPSAmY2hpcC0+ZGV2c1tjaGlwLT5wbGF5YmFja19kZXZubyArIHN1YnN0cmVhbS0+bnVtYmVyXTsKKwlpZiAoKGVyciA9IHNuZF92aWE4Mnh4X3BjbV9vcGVuKGNoaXAsIHZpYWRldiwgc3Vic3RyZWFtKSkgPCAwKQorCQlyZXR1cm4gZXJyOworCXN0cmVhbSA9IHZpYWRldi0+cmVnX29mZnNldCAvIDB4MTA7CisJaWYgKGNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dKSB7CisJCWNoaXAtPnBsYXliYWNrX3ZvbHVtZVtzdHJlYW1dWzBdID0gMDsKKwkJY2hpcC0+cGxheWJhY2tfdm9sdW1lW3N0cmVhbV1bMV0gPSAwOworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzICY9CisJCQl+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFOworCQlzbmRfY3RsX25vdGlmeShjaGlwLT5jYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSB8CisJCQkgICAgICAgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTywKKwkJCSAgICAgICAmY2hpcC0+ZHhzX2NvbnRyb2xzW3N0cmVhbV0tPmlkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBvcGVuIGNhbGxiYWNrIGZvciBwbGF5YmFjayBvbiB2aWE4MjN4IG11bHRpLWNoYW5uZWwKICAqLwogc3RhdGljIGludCBzbmRfdmlhODIzM19tdWx0aV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtMTMwMiwxMCArMTMyOSwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCB2aWFkZXYgKnZpYWRldiA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBzdHJlYW07CisKKwlzdHJlYW0gPSB2aWFkZXYtPnJlZ19vZmZzZXQgLyAweDEwOworCWlmIChjaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXSkgeworCQljaGlwLT5keHNfY29udHJvbHNbc3RyZWFtXS0+dmRbMF0uYWNjZXNzIHw9CisJCQlTTkRSVl9DVExfRUxFTV9BQ0NFU1NfSU5BQ1RJVkU7CisJCXNuZF9jdGxfbm90aWZ5KGNoaXAtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX0lORk8sCisJCQkgICAgICAgJmNoaXAtPmR4c19jb250cm9sc1tzdHJlYW1dLT5pZCk7CisJfQorCXJldHVybiBzbmRfdmlhODJ4eF9wY21fY2xvc2Uoc3Vic3RyZWFtKTsKK30KKwogCiAvKiB2aWE2ODYgcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE2ODZfcGxheWJhY2tfb3BzID0gewotCS5vcGVuID0JCXNuZF92aWE4Mnh4X3BsYXliYWNrX29wZW4sCisJLm9wZW4gPQkJc25kX3ZpYTY4Nl9wbGF5YmFja19vcGVuLAogCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKIAkuaW9jdGwgPQlzbmRfcGNtX2xpYl9pb2N0bCwKIAkuaHdfcGFyYW1zID0Jc25kX3ZpYTgyeHhfaHdfcGFyYW1zLApAQCAtMTMzMSw4ICsxMzc0LDggQEAKIAogLyogdmlhODIzeCBEU1ggcGxheWJhY2sgY2FsbGJhY2tzICovCiBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF92aWE4MjMzX3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9CQlzbmRfdmlhODJ4eF9wbGF5YmFja19vcGVuLAotCS5jbG9zZSA9CXNuZF92aWE4Mnh4X3BjbV9jbG9zZSwKKwkub3BlbiA9CQlzbmRfdmlhODIzM19wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9CXNuZF92aWE4MjMzX3BsYXliYWNrX2Nsb3NlLAogCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAogCS5od19wYXJhbXMgPQlzbmRfdmlhODJ4eF9od19wYXJhbXMsCiAJLmh3X2ZyZWUgPQlzbmRfdmlhODJ4eF9od19mcmVlLApAQCAtMTYyNiw3ICsxNjY5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQl1bnNpZ25lZCBpbnQgaWR4ID0gc25kX2N0bF9nZXRfaW9mZihrY29udHJvbCwgJnVjb250cm9sLT5pZCk7CisJdW5zaWduZWQgaW50IGlkeCA9IGtjb250cm9sLT5pZC5zdWJkZXZpY2U7CiAKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IFZJQV9EWFNfTUFYX1ZPTFVNRSAtIGNoaXAtPnBsYXliYWNrX3ZvbHVtZVtpZHhdWzBdOwogCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gVklBX0RYU19NQVhfVk9MVU1FIC0gY2hpcC0+cGxheWJhY2tfdm9sdW1lW2lkeF1bMV07CkBAIC0xNjQ2LDcgKzE2ODksNyBAQAogCQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQogewogCXN0cnVjdCB2aWE4Mnh4ICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXVuc2lnbmVkIGludCBpZHggPSBzbmRfY3RsX2dldF9pb2ZmKGtjb250cm9sLCAmdWNvbnRyb2wtPmlkKTsKKwl1bnNpZ25lZCBpbnQgaWR4ID0ga2NvbnRyb2wtPmlkLnN1YmRldmljZTsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBjaGlwLT5wb3J0ICsgMHgxMCAqIGlkeDsKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAlpbnQgaSwgY2hhbmdlID0gMDsKQEAgLTE3MDUsMTEgKzE3NDgsMTMgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wgX19kZXZpbml0ZGF0YSA9IHsKLQkubmFtZSA9ICJWSUEgRFhTIFBsYXliYWNrIFZvbHVtZSIsCi0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLmFjY2VzcyA9IChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKLQkJICAgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEKSwKLQkuY291bnQgPSA0LAorCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTSwKKwkuZGV2aWNlID0gMCwKKwkvKiAuc3ViZGV2aWNlIHNldCBsYXRlciAqLworCS5uYW1lID0gIlBDTSBQbGF5YmFjayBWb2x1bWUiLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQgfAorCQkgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSwKIAkuaW5mbyA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfaW5mbywKIAkuZ2V0ID0gc25kX3ZpYTgyMzNfZHhzX3ZvbHVtZV9nZXQsCiAJLnB1dCA9IHNuZF92aWE4MjMzX2R4c192b2x1bWVfcHV0LApAQCAtMTkzNiwxMCArMTk4MSwxOSBAQAogCQl9CiAJCWVsc2UgLyogVXNpbmcgRFhTIHdoZW4gUENNIGVtdWxhdGlvbiBpcyBlbmFibGVkIGlzIHJlYWxseSB3ZWlyZCAqLwogCQl7Ci0JCQkvKiBTdGFuZGFsb25lIERYUyBjb250cm9scyAqLwotCQkJZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wsIGNoaXApKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7CisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKworCQkJCWtjdGwgPSBzbmRfY3RsX25ldzEoCisJCQkJCSZzbmRfdmlhODIzM19keHNfdm9sdW1lX2NvbnRyb2wsIGNoaXApOworCQkJCWlmICgha2N0bCkKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJa2N0bC0+aWQuc3ViZGV2aWNlID0gaTsKKwkJCQllcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBrY3RsKTsKKwkJCQlpZiAoZXJyIDwgMCkKKwkJCQkJcmV0dXJuIGVycjsKKwkJCQljaGlwLT5keHNfY29udHJvbHNbaV0gPSBrY3RsOworCQkJfQogCQl9CiAJfQogCS8qIHNlbGVjdCBzcGRpZiBkYXRhIHNsb3QgMTAvMTEgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMgYi9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5jCmluZGV4IDdkZWE3NGIuLjY0Yjg1OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmMKKysrIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuYwpAQCAtMjE3LDIwICsyMTcsMjUgQEAKICAqIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgcGRhY2ZfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCBzbmRfcGRhY2YgKnBkYWNmID0gbGluay0+cHJpdjsKLQlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CisJaW50IHJldDsKIAogCXNuZF9wcmludGRkKEtFUk5fREVCVUcgInBkYWNmX2NvbmZpZyBjYWxsZWRcbiIpOwogCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAweDU7CiAKLQlDU19DSEVDSyhSZXF1ZXN0SU8sIHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykpOwotCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWQ7CiAKIAlpZiAoc25kX3BkYWNmX2Fzc2lnbl9yZXNvdXJjZXMocGRhY2YsIGxpbmstPmlvLkJhc2VQb3J0MSwgbGluay0+aXJxLkFzc2lnbmVkSVJRKSA8IDApCiAJCWdvdG8gZmFpbGVkOwpAQCAtMjM4LDggKzI0Myw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmcGRhY2YtPm5vZGU7CiAJcmV0dXJuIDA7CiAKLWNzX2ZhaWxlZDoKLQljc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CiBmYWlsZWQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOwogCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNtY2lhL3Z4L3Z4cG9ja2V0LmMgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwppbmRleCA3NDQ1Y2M4Li4xNDkyNzQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYworKysgYi9zb3VuZC9wY21jaWEvdngvdnhwb2NrZXQuYwpAQCAtMjEzLDE0ICsyMTMsMTEgQEAKICAqIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sKICAqLwogCi0jZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKLWRvIHsgbGFzdF9mbiA9IChmbik7IGlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgZ290byBjc19mYWlsZWQ7IH0gd2hpbGUgKDApCi0KIHN0YXRpYyBpbnQgdnhwb2NrZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewogCXN0cnVjdCB2eF9jb3JlICpjaGlwID0gbGluay0+cHJpdjsKIAlzdHJ1Y3Qgc25kX3Z4cG9ja2V0ICp2eHAgPSAoc3RydWN0IHNuZF92eHBvY2tldCAqKWNoaXA7Ci0JaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCWludCByZXQ7CiAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICJ2eHBvY2tldF9jb25maWcgY2FsbGVkXG4iKTsKIApAQCAtMjM1LDkgKzIzMiwxNyBAQAogCQlzdHJjcHkoY2hpcC0+Y2FyZC0+ZHJpdmVyLCB2eHA0NDBfaHcubmFtZSk7CiAJfQogCi0JQ1NfQ0hFQ0soUmVxdWVzdElPLCBwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pKTsKLQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLCBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJcmV0ID0gcGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOwogCiAJY2hpcC0+ZGV2ID0gJmhhbmRsZV90b19kZXYobGluayk7CiAJc25kX2NhcmRfc2V0X2RldihjaGlwLT5jYXJkLCBjaGlwLT5kZXYpOwpAQCAtMjQ4LDggKzI1Myw2IEBACiAJbGluay0+ZGV2X25vZGUgPSAmdnhwLT5ub2RlOwogCXJldHVybiAwOwogCi1jc19mYWlsZWQ6Ci0JY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogZmFpbGVkOgogCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIAlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9LY29uZmlnIGIvc291bmQvcHBjL0tjb25maWcKaW5kZXggYmQyMzM4YS4uMDUxOWM2MCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL0tjb25maWcKKysrIGIvc291bmQvcHBjL0tjb25maWcKQEAgLTIsNyArMiw3IEBACiAKIG1lbnVjb25maWcgU05EX1BQQwogCWJvb2wgIlBvd2VyUEMgc291bmQgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IFBQQzMyCisJZGVwZW5kcyBvbiBQUEMKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTdXBwb3J0IGZvciBzb3VuZCBkZXZpY2VzIHNwZWNpZmljIHRvIFBvd2VyUEMgYXJjaGl0ZWN0dXJlcy4KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9rZXl3ZXN0LmMgYi9zb3VuZC9wcGMva2V5d2VzdC5jCmluZGV4IDgzNWZhMTkuLmQwNmY3ODAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9rZXl3ZXN0LmMKKysrIGIvc291bmQvcHBjL2tleXdlc3QuYwpAQCAtNTksNiArNTksMTggQEAKIAlzdHJsY3B5KGluZm8udHlwZSwgImtleXdlc3QiLCBJMkNfTkFNRV9TSVpFKTsKIAlpbmZvLmFkZHIgPSBrZXl3ZXN0X2N0eC0+YWRkcjsKIAlrZXl3ZXN0X2N0eC0+Y2xpZW50ID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCWlmICgha2V5d2VzdF9jdHgtPmNsaWVudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyoKKwkgKiBXZSBrbm93IHRoZSBkcml2ZXIgaXMgYWxyZWFkeSBsb2FkZWQsIHNvIHRoZSBkZXZpY2Ugc2hvdWxkIGJlCisJICogYWxyZWFkeSBib3VuZC4gSWYgbm90IGl0IG1lYW5zIGJpbmRpbmcgZmFpbGVkLCBhbmQgdGhlbiB0aGVyZQorCSAqIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQuCisJICovCisJaWYgKCFrZXl3ZXN0X2N0eC0+Y2xpZW50LT5kcml2ZXIpIHsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGtleXdlc3RfY3R4LT5jbGllbnQpOworCQlrZXl3ZXN0X2N0eC0+Y2xpZW50ID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCQogCS8qCiAJICogTGV0IGkyYy1jb3JlIGRlbGV0ZSB0aGF0IGRldmljZSBvbiBkcml2ZXIgcmVtb3ZhbC4KQEAgLTg2LDcgKzk4LDcgQEAKIAl7IH0KIH07CiAKLXN0cnVjdCBpMmNfZHJpdmVyIGtleXdlc3RfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGtleXdlc3RfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIlBNYWMgS2V5d2VzdCBBdWRpbyIsCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NoL2FpY2EuYyBiL3NvdW5kL3NoL2FpY2EuYwppbmRleCA1ODNhMzY5Li5hMGRmNDAxIDEwMDY0NAotLS0gYS9zb3VuZC9zaC9haWNhLmMKKysrIGIvc291bmQvc2gvYWljYS5jCkBAIC00OSw2ICs0OSw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyZWFtY2FzdCBBSUNBIHNvdW5kIChwY20pIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7WWFtYWhhL1NFR0EsIEFJQ0F9fSIpOworTU9EVUxFX0ZJUk1XQVJFKCJhaWNhX2Zpcm13YXJlLmJpbiIpOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogI2RlZmluZSBDQVJEX05BTUUgIkFJQ0EiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCmluZGV4IGFjOTI3ZmYuLjk3ZjFhMjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9LY29uZmlnCkBAIC03LDE1ICs3LDYgQEAKIAkgIG1vZGUgKHN1cHBvcnRzIHNpbmdsZSBzdGVyZW8gSW4vT3V0KS4KIAkgIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QgdGhlIGF1ZGlvIGludGVyZmFjZXMgdG8gc3VwcG9ydCBiZWxvdy4KIAotY29uZmlnIFNORF9CRjVYWF9URE0KLQl0cmlzdGF0ZSAiU29DIEkyUyhURE0gbW9kZSkgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKLQlkZXBlbmRzIG9uIChCTEFDS0ZJTiAmJiBTTkRfU09DKQotCWhlbHAKLQkgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIGNvZGVjcyBhdHRhY2hlZCB0bwotCSAgdGhlIEJsYWNrZmluIFNQT1JUIChzeW5jaHJvbm91cyBzZXJpYWwgcG9ydHMpIGludGVyZmFjZSBpbiBURE0KLQkgIG1vZGUuCi0JICBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gc2VsZWN0IHRoZSBhdWRpbyBpbnRlcmZhY2VzIHRvIHN1cHBvcnQgYmVsb3cuCi0KIGNvbmZpZyBTTkRfQkY1WFhfU09DX1NTTTI2MDIKIAl0cmlzdGF0ZSAiU29DIFNTTTI2MDIgQXVkaW8gc3VwcG9ydCBmb3IgQkY1MnggZXpraXQiCiAJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSTJTCkBAIC00MSw2ICszMiwzMSBAQAogCSAgRW50ZXIgdGhlIEdQSU8gdXNlZCB0byBjb250cm9sIEFENzMzMTEncyBTRSBwaW4uIEFjY2VwdGFibGUKIAkgIHZhbHVlcyBhcmUgMCB0byA3CiAKK2NvbmZpZyBTTkRfQkY1WFhfVERNCisJdHJpc3RhdGUgIlNvQyBJMlMoVERNIG1vZGUpIEF1ZGlvIGZvciB0aGUgQURJIEJGNXh4IGNoaXAiCisJZGVwZW5kcyBvbiAoQkxBQ0tGSU4gJiYgU05EX1NPQykKKwloZWxwCisJICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBjb2RlY3MgYXR0YWNoZWQgdG8KKwkgIHRoZSBCbGFja2ZpbiBTUE9SVCAoc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzKSBpbnRlcmZhY2UgaW4gVERNCisJICBtb2RlLgorCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE4MzYKKwl0cmlzdGF0ZSAiU29DIEFEMTgzNiBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KKwlzZWxlY3QgU05EX1NPQ19BRDE4MzYKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgorCitjb25maWcgU05EX0JGNVhYX1NPQ19BRDE5MzgKKwl0cmlzdGF0ZSAiU29DIEFEMTkzOCBBdWRpbyBzdXBwb3J0IGZvciBCbGFja2ZpbiIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KKwlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KKwlzZWxlY3QgU05EX1NPQ19BRDE5MzgKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQUQxOTM4IGNvZGVjIG9uIEJsYWNrZmluLgorCiBjb25maWcgU05EX0JGNVhYX0FDOTcKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gZm9yIHRoZSBBREkgQkY1eHggY2hpcCIKIAlkZXBlbmRzIG9uIEJMQUNLRklOCkBAIC03MSw2ICs4NywzMCBAQAogCSAgU2F5IHkgaWYgeW91IHdhbnQgQUM5NyBkcml2ZXIgdG8gc3VwcG9ydCB1cCB0byA1LjEgY2hhbm5lbCBhdWRpby4KIAkgIHRoaXMgbW9kZSB3aWxsIGNvbnN1bWUgbXVjaCBtb3JlIG1lbW9yeSBmb3IgRE1BLgogCitjb25maWcgU05EX0JGNVhYX0hBVkVfQ09MRF9SRVNFVAorCWJvb2wgIkJPQVJEIGhhcyBDT0xEIFJlc2V0IEdQSU8iCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfQUM5NworCWRlZmF1bHQgeSBpZiBCRklONTQ4X0VaS0lUCisJZGVmYXVsdCBuIGlmICFCRklONTQ4X0VaS0lUCisKK2NvbmZpZyBTTkRfQkY1WFhfUkVTRVRfR1BJT19OVU0KKwlpbnQgIlNldCBhIEdQSU8gZm9yIGNvbGQgcmVzZXQiCisJZGVwZW5kcyBvbiBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCisJcmFuZ2UgMCAxNTkKKwlkZWZhdWx0IDE5IGlmIEJGSU41NDhfRVpLSVQKKwlkZWZhdWx0IDUgaWYgQkZJTjUzN19TVEFNUAorCWRlZmF1bHQgMAorCWhlbHAKKwkgIFNldCB0aGUgY29ycmVjdCBHUElPIGZvciBSRVNFVCB0aGUgc291bmQgY2hpcC4KKworY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTgwCisJdHJpc3RhdGUgIlNvQyBBRDE5ODAvMSBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKKwlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3CisJc2VsZWN0IFNORF9CRjVYWF9TT0NfQUM5NworCXNlbGVjdCBTTkRfU09DX0FEMTk4MAorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQkY1eHggU1RBTVAvRVpLSVQuCisKIGNvbmZpZyBTTkRfQkY1WFhfU09DX1NQT1JUCiAJdHJpc3RhdGUKIApAQCAtODgsMzAgKzEyOCw2IEBACiAJc2VsZWN0IFNORF9TT0NfQUM5N19CVVMKIAlzZWxlY3QgU05EX0JGNVhYX1NPQ19TUE9SVAogCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE4MzYKLQl0cmlzdGF0ZSAiU29DIEFEMTgzNiBBdWRpbyBzdXBwb3J0IGZvciBCRjV4eCIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KLQlzZWxlY3QgU05EX0JGNVhYX1NPQ19URE0KLQlzZWxlY3QgU05EX1NPQ19BRDE4MzYKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIEJGNXh4IFNUQU1QL0VaS0lULgotCi1jb25maWcgU05EX0JGNVhYX1NPQ19BRDE5ODAKLQl0cmlzdGF0ZSAiU29DIEFEMTk4MC8xIEF1ZGlvIHN1cHBvcnQgZm9yIEJGNXh4IgotCWRlcGVuZHMgb24gU05EX0JGNVhYX0FDOTcKLQlzZWxlY3QgU05EX0JGNVhYX1NPQ19BQzk3Ci0Jc2VsZWN0IFNORF9TT0NfQUQxOTgwCi0JaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiBCRjV4eCBTVEFNUC9FWktJVC4KLQotY29uZmlnIFNORF9CRjVYWF9TT0NfQUQxOTM4Ci0gICAgICAgIHRyaXN0YXRlICJTb0MgQUQxOTM4IEF1ZGlvIHN1cHBvcnQgZm9yIEJsYWNrZmluIgotICAgICAgICBkZXBlbmRzIG9uIFNORF9CRjVYWF9URE0KLSAgICAgICAgc2VsZWN0IFNORF9CRjVYWF9TT0NfVERNCi0gICAgICAgIHNlbGVjdCBTTkRfU09DX0FEMTkzOAotICAgICAgICBoZWxwCi0gICAgICAgICAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIEFEMTkzOCBjb2RlYyBvbiBCbGFja2Zpbi4KLQogY29uZmlnIFNORF9CRjVYWF9TUE9SVF9OVU0KIAlpbnQgIlNldCBhIFNQT1JUIGZvciBTb3VuZCBjaGlwIgogCWRlcGVuZHMgb24gKFNORF9CRjVYWF9JMlMgfHwgU05EX0JGNVhYX0FDOTcgfHwgU05EX0JGNVhYX1RETSkKQEAgLTEyMCwxOSArMTM2LDMgQEAKIAlkZWZhdWx0IDAKIAloZWxwCiAJICBTZXQgdGhlIGNvcnJlY3QgU1BPUlQgZm9yIHNvdW5kIGNoaXAuCi0KLWNvbmZpZyBTTkRfQkY1WFhfSEFWRV9DT0xEX1JFU0VUCi0JYm9vbCAiQk9BUkQgaGFzIENPTEQgUmVzZXQgR1BJTyIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9BQzk3Ci0JZGVmYXVsdCB5IGlmIEJGSU41NDhfRVpLSVQKLQlkZWZhdWx0IG4gaWYgIUJGSU41NDhfRVpLSVQKLQotY29uZmlnIFNORF9CRjVYWF9SRVNFVF9HUElPX05VTQotCWludCAiU2V0IGEgR1BJTyBmb3IgY29sZCByZXNldCIKLQlkZXBlbmRzIG9uIFNORF9CRjVYWF9IQVZFX0NPTERfUkVTRVQKLQlyYW5nZSAwIDE1OQotCWRlZmF1bHQgMTkgaWYgQkZJTjU0OF9FWktJVAotCWRlZmF1bHQgNSBpZiBCRklONTM3X1NUQU1QCi0JZGVmYXVsdCAwCi0JaGVscAotCSAgU2V0IHRoZSBjb3JyZWN0IEdQSU8gZm9yIFJFU0VUIHRoZSBzb3VuZCBjaGlwLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWkycy5jCmluZGV4IDFlOWQxNjEuLjA4NGI2ODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtaTJzLmMKQEAgLTc3LDEyICs3NywxMiBAQAogICogVEZTLiBXaGVuIFBvcnQgRyBpcyBzZWxlY3RlZCBhbmQgRU1BQyB0aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbgogICogdGhlIFBIWSBpbnRlcnJ1cHQgbGluZSBhbmQgVEZTLiAgQ3VycmVudCBzZXR0aW5ncyBwcmV2ZW50IHRoZSBjb25mbGljdAogICogYnkgaWdub3JpbmcgdGhlIFRGUyBwaW4gd2hlbiBQb3J0IEcgaXMgc2VsZWN0ZWQuIFRoaXMgYWxsb3dzIGJvdGgKLSAqIHNzbTI2MDIgdXNpbmcgUG9ydCBHIGFuZCBFTUFDIGNvbmN1cnJlbnRseS4KKyAqIGNvZGVjcyBhbmQgRU1BQyB1c2luZyBQb3J0IEcgY29uY3VycmVudGx5LgogICovCi0jaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURgotI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTIChQX1NQT1JUMF9URlMpCi0jZWxzZQorI2lmZGVmIENPTkZJR19CRjUyN19TUE9SVDBfUE9SVEcKICNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoMCkKKyNlbHNlCisjZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKICNlbmRpZgogCiBzdGF0aWMgdTE2IHNwb3J0X3JlcVtdWzddID0geyB7UF9TUE9SVDBfRFRQUkksIFBfU1BPUlQwX1RTQ0xLLCBQX1NQT1JUMF9SRlMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtdGRtLmMKaW5kZXggMzA5NmJhZC4uZmY1NDZlOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXRkbS5jCisrKyBiL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC10ZG0uYwpAQCAtNzgsMTIgKzc4LDEyIEBACiAgKiBURlMuIFdoZW4gUG9ydCBHIGlzIHNlbGVjdGVkIGFuZCBFTUFDIHRoZW4gdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuCiAgKiB0aGUgUEhZIGludGVycnVwdCBsaW5lIGFuZCBURlMuICBDdXJyZW50IHNldHRpbmdzIHByZXZlbnQgdGhlIGNvbmZsaWN0CiAgKiBieSBpZ25vcmluZyB0aGUgVEZTIHBpbiB3aGVuIFBvcnQgRyBpcyBzZWxlY3RlZC4gVGhpcyBhbGxvd3MgYm90aAotICogc3NtMjYwMiB1c2luZyBQb3J0IEcgYW5kIEVNQUMgY29uY3VycmVudGx5LgorICogY29kZWNzIGFuZCBFTUFDIHVzaW5nIFBvcnQgRyBjb25jdXJyZW50bHkuCiAgKi8KLSNpZmRlZiBDT05GSUdfQkY1MjdfU1BPUlQwX1BPUlRGCi0jZGVmaW5lIExPQ0FMX1NQT1JUMF9URlMgKFBfU1BPUlQwX1RGUykKLSNlbHNlCisjaWZkZWYgQ09ORklHX0JGNTI3X1NQT1JUMF9QT1JURwogI2RlZmluZSBMT0NBTF9TUE9SVDBfVEZTICgwKQorI2Vsc2UKKyNkZWZpbmUgTE9DQUxfU1BPUlQwX1RGUyAoUF9TUE9SVDBfVEZTKQogI2VuZGlmCiAKIHN0YXRpYyB1MTYgc3BvcnRfcmVxW11bN10gPSB7IHtQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljMjMuYwppbmRleCAwYjhkY2I1Li42YjI0ZDhiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMyMy5jCkBAIC0yNjUsOCArMjY1LDggQEAKICNkZWZpbmUgVVBQRVJfR1JPVVAgKCgxPDw4KSB8ICgxPDw5KSB8ICgxPDwxMCkgfCAoMTw8MTEpICAgICAgICB8ICgxPDwxNSkpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc3JfdmFsaWRfbWFza1tdID0gewogCUxPV0VSX0dST1VQfFVQUEVSX0dST1VQLAkvKiBOb3JtYWwsIGJvc3IgLSAwKi8KLQlMT1dFUl9HUk9VUHxVUFBFUl9HUk9VUCwJLyogTm9ybWFsLCBib3NyIC0gMSovCiAJTE9XRVJfR1JPVVAsCQkJLyogVXNiLCBib3NyIC0gMCovCisJTE9XRVJfR1JPVVB8VVBQRVJfR1JPVVAsCS8qIE5vcm1hbCwgYm9zciAtIDEqLwogCVVQUEVSX0dST1VQLAkJCS8qIFVzYiwgYm9zciAtIDEqLwogfTsKIC8qCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwppbmRleCAzZmYwMzczLi41OTNkNWI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTU3OSw3ICs1NzksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX0wsIDksIDcsIDAsIG91dF9taXhfdGx2KSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQSBDYXB0dXJlIFN3aXRjaCIsCi0JCQlXTTgzNTBfTEVGVF9JTlBVVF9WT0xVTUUsIDE0LCAxLCAwKSwKKwkJCVdNODM1MF9MRUZUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogUmlnaHQgSW5wdXQgTWl4ZXIgKi8KQEAgLTU4OSw3ICs1ODksNyBAQAogCVNPQ19EQVBNX1NJTkdMRV9UTFYoIkwzIENhcHR1cmUgVm9sdW1lIiwKIAkJCSAgICBXTTgzNTBfSU5QVVRfTUlYRVJfVk9MVU1FX1IsIDEzLCA3LCAwLCBvdXRfbWl4X3RsdiksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0EgQ2FwdHVyZSBTd2l0Y2giLAotCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDApLAorCQkJV004MzUwX1JJR0hUX0lOUFVUX1ZPTFVNRSwgMTQsIDEsIDEpLAogfTsKIAogLyogTGVmdCBNaWMgTWl4ZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk0MC5jCmluZGV4IGRhOTdhYWUuLjFlZjI0NTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NDAuYwpAQCAtNzkwLDcgKzc5MCw3IEBACiAJY29kZWMtPnJlZ19jYWNoZSA9ICZ3bTg5NDAtPnJlZ19jYWNoZTsKIAogCXJldCA9IHNuZF9zb2NfY29kZWNfc2V0X2NhY2hlX2lvKGNvZGVjLCA4LCAxNiwgY29udHJvbCk7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBjYWNoZSBJL086ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWkycy5jCmluZGV4IDEyYTZjNTQuLjRhZTcwNzAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktaTJzLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1pMnMuYwpAQCAtOTcsMjIgKzk3LDE5IEBACiAJREFWSU5DSV9NQ0JTUF9XT1JEXzMyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zIGRhdmluY2lfaTJzX3BjbV9vdXQgPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBkYXZpbmNpX2kyc19wY21faW4gPSB7Ci0JLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gaW4iLAotfTsKLQogc3RydWN0IGRhdmluY2lfbWNic3BfZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMJZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0JCQkqYmFzZTsKICNkZWZpbmUgTU9EX0RTUF9BCTAKICNkZWZpbmUgTU9EX0RTUF9CCTEKIAlpbnQJCQkJbW9kZTsKIAl1MzIJCQkJcGNyOwogCXN0cnVjdCBjbGsJCQkqY2xrOwotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zCSpkbWFfcGFyYW1zWzJdOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGRhdmluY2lfbWNic3Bfd3JpdGVfcmVnKHN0cnVjdCBkYXZpbmNpX21jYnNwX2RldiAqZGV2LApAQCAtMjE1LDE0ICsyMTIsNiBAQAogCXRvZ2dsZV9jbG9jayhkZXYsIHBsYXliYWNrKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX2kyc19zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKLXsKLQlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQljcHVfZGFpLT5kbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgREVGQVVMVF9CSVRQRVJTQU1QTEUJMTYKIAogc3RhdGljIGludCBkYXZpbmNpX2kyc19zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCkBAIC0zNTMsOCArMzQyLDkgQEAKIAkJCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCiAJCQkJIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewotCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0gZGFpLT5kbWFfZGF0YTsKIAlzdHJ1Y3QgZGF2aW5jaV9tY2JzcF9kZXYgKmRldiA9IGRhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zID0KKwkJCQkJJmRldi0+ZG1hX3BhcmFtc1tzdWJzdHJlYW0tPnN0cmVhbV07CiAJc3RydWN0IHNuZF9pbnRlcnZhbCAqaSA9IE5VTEw7CiAJaW50IG1jYnNwX3dvcmRfbGVuZ3RoOwogCXVuc2lnbmVkIGludCByY3IsIHhjciwgc3JncjsKQEAgLTQ3Miw3ICs0NjIsNiBAQAogI2RlZmluZSBEQVZJTkNJX0kyU19SQVRFUwlTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIGRhdmluY2lfaTJzX2RhaV9vcHMgPSB7Ci0JLnN0YXJ0dXAgCT0gZGF2aW5jaV9pMnNfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBkYXZpbmNpX2kyc19zaHV0ZG93biwKIAkucHJlcGFyZQk9IGRhdmluY2lfaTJzX3ByZXBhcmUsCiAJLnRyaWdnZXIJPSBkYXZpbmNpX2kyc190cmlnZ2VyLApAQCAtNTM0LDEyICs1MjMsMTAgQEAKIAogCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKG1lbS0+c3RhcnQpOwogCi0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdID0gJmRhdmluY2lfaTJzX3BjbV9vdXQ7Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5kbWFfYWRkciA9CisJZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EWFJfUkVHKTsKIAotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gJmRhdmluY2lfaTJzX3BjbV9pbjsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS0+ZG1hX2FkZHIgPQorCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYV9hZGRyID0KIAkgICAgKGRtYV9hZGRyX3QpKGlvX3YycChkZXYtPmJhc2UpICsgREFWSU5DSV9NQ0JTUF9EUlJfUkVHKTsKIAogCS8qIGZpcnN0IFRYLCB0aGVuIFJYICovCkBAIC01NDksNyArNTM2LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLT5jaGFubmVsID0gcmVzLT5zdGFydDsKKwlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC01NTcsNyArNTQ0LDcgQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycl9mcmVlX21lbTsKIAl9Ci0JZGV2LT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0tPmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OwogCiAJZGF2aW5jaV9pMnNfZGFpLnByaXZhdGVfZGF0YSA9IGRldjsKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2RhaSgmZGF2aW5jaV9pMnNfZGFpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwppbmRleCA3YTA2YzBhLi41ZDFmOThhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKKysrIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCkBAIC0zMzIsMTQgKzMzMiw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiR0JMQ1RMIHdyaXRlIGVycm9yXG4iKTsKIH0KIAotc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCi17Ci0Jc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0JY3B1X2RhaS0+ZG1hX2RhdGEgPSBkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBtY2FzcF9zdGFydF9yeChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldikKIHsKIAltY2FzcF9zZXRfY3RsX3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX0dCTENUTFJfUkVHLCBSWEhDTEtSU1QpOwpAQCAtMzg2LDE3ICszNzgsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdGFydChzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYgKmRldiwgaW50IHN0cmVhbSkKIHsKLQlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJaWYgKHN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7CisJCWlmIChkZXYtPnR4bnVtZXZ0KQkvKiBlbmFibGUgRklGTyAqLworCQkJbWNhc3Bfc2V0X2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdGFydF90eChkZXYpOwotCWVsc2UKKwl9IGVsc2UgeworCQlpZiAoZGV2LT5yeG51bWV2dCkJLyogZW5hYmxlIEZJRk8gKi8KKwkJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RhcnRfcngoZGV2KTsKLQotCS8qIGVuYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9zZXRfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBtY2FzcF9zdG9wX3J4KHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2KQpAQCAtNDEzLDE3ICs0MDUsMTcgQEAKIAogc3RhdGljIHZvaWQgZGF2aW5jaV9tY2FzcF9zdG9wKHN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2LCBpbnQgc3RyZWFtKQogewotCWlmIChzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwlpZiAoc3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKKwkJaWYgKGRldi0+dHhudW1ldnQpCS8qIGRpc2FibGUgRklGTyAqLworCQkJbWNhc3BfY2xyX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9XRklGT0NUTCwKKwkJCQkJCQkJRklGT19FTkFCTEUpOwogCQltY2FzcF9zdG9wX3R4KGRldik7Ci0JZWxzZQorCX0gZWxzZSB7CisJCWlmIChkZXYtPnJ4bnVtZXZ0KQkvKiBkaXNhYmxlIEZJRk8gKi8KKwkJCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfUkZJRk9DVEwsCisJCQkJCQkJCUZJRk9fRU5BQkxFKTsKIAkJbWNhc3Bfc3RvcF9yeChkZXYpOwotCi0JLyogZGlzYWJsZSBGSUZPICovCi0JaWYgKGRldi0+dHhudW1ldnQpCi0JCW1jYXNwX2Nscl9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfV0ZJRk9DVEwsIEZJRk9fRU5BQkxFKTsKLQotCWlmIChkZXYtPnJ4bnVtZXZ0KQotCQltY2FzcF9jbHJfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1JGSUZPQ1RMLCBGSUZPX0VOQUJMRSk7CisJfQogfQogCiBzdGF0aWMgaW50IGRhdmluY2lfbWNhc3Bfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpLApAQCAtNzIwLDcgKzcxMiw3IEBACiB7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKmRtYV9wYXJhbXMgPQotCQkJCQlkZXYtPmRtYV9wYXJhbXNbc3Vic3RyZWFtLT5zdHJlYW1dOworCQkJCQkmZGV2LT5kbWFfcGFyYW1zW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlpbnQgd29yZF9sZW5ndGg7CiAJdTggbnVtZXZ0OwogCkBAIC03OTgsNyArNzkwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgZGF2aW5jaV9tY2FzcF9kYWlfb3BzID0gewotCS5zdGFydHVwIAk9IGRhdmluY2lfbWNhc3Bfc3RhcnR1cCwKIAkudHJpZ2dlcgk9IGRhdmluY2lfbWNhc3BfdHJpZ2dlciwKIAkuaHdfcGFyYW1zCT0gZGF2aW5jaV9tY2FzcF9od19wYXJhbXMsCiAJLnNldF9mbXQJPSBkYXZpbmNpX21jYXNwX3NldF9kYWlfZm10LApAQCAtODQ5LDIwICs4NDAsMTIgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgKmlvYXJlYSwgKnJlczsKIAlzdHJ1Y3Qgc25kX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkYXZpbmNpX2F1ZGlvX2RldiAqZGV2OwotCWludCBjb3VudCA9IDA7CiAJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9hdWRpb19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuCS1FTk9NRU07CiAKLQlkbWFfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkYXZpbmNpX3BjbV9kbWFfcGFyYW1zKSAqIDIsCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCWlmICghZG1hX2RhdGEpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmVsZWFzZV9kZXY7Ci0JfQotCiAJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKQEAgLTg5NywxMSArODgwLDEwIEBACiAJZGV2LT50eG51bWV2dCA9IHBkYXRhLT50eG51bWV2dDsKIAlkZXYtPnJ4bnVtZXZ0ID0gcGRhdGEtPnJ4bnVtZXZ0OwogCi0JZG1hX2RhdGFbY291bnRdLm5hbWUgPSAiSTJTIFBDTSBTdGVyZW8gb3V0IjsKLQlkbWFfZGF0YVtjb3VudF0uZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKLQlkbWFfZGF0YVtjb3VudF0uZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkgKHBkYXRhLT50eF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS107CisJZG1hX2RhdGEtPmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87CisJZG1hX2RhdGEtPmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpIChwZGF0YS0+dHhfZG1hX29mZnNldCArCiAJCQkJCQkJaW9fdjJwKGRldi0+YmFzZSkpOwotCWRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAkvKiBmaXJzdCBUWCwgdGhlbiBSWCAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0RNQSwgMCk7CkBAIC05MTAsMTMgKzg5MiwxMiBAQAogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQlkbWFfZGF0YVtjb3VudF0uY2hhbm5lbCA9IHJlcy0+c3RhcnQ7Ci0JY291bnQrKzsKLQlkbWFfZGF0YVtjb3VudF0ubmFtZSA9ICJJMlMgUENNIFN0ZXJlbyBpbiI7Ci0JZG1hX2RhdGFbY291bnRdLmV2ZW50cV9ubyA9IHBkYXRhLT5ldmVudHFfbm87Ci0JZG1hX2RhdGFbY291bnRdLmRtYV9hZGRyID0gKGRtYV9hZGRyX3QpKHBkYXRhLT5yeF9kbWFfb2Zmc2V0ICsKKwlkbWFfZGF0YS0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisKKwlkbWFfZGF0YSA9ICZkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXTsKKwlkbWFfZGF0YS0+ZXZlbnRxX25vID0gcGRhdGEtPmV2ZW50cV9ubzsKKwlkbWFfZGF0YS0+ZG1hX2FkZHIgPSAoZG1hX2FkZHJfdCkocGRhdGEtPnJ4X2RtYV9vZmZzZXQgKwogCQkJCQkJCWlvX3YycChkZXYtPmJhc2UpKTsKLQlkZXYtPmRtYV9wYXJhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSA9ICZkbWFfZGF0YVtjb3VudF07CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwogCWlmICghcmVzKSB7CkBAIC05MjQsNyArOTA1LDcgQEAKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQogCi0JZG1hX2RhdGFbY291bnRdLmNoYW5uZWwgPSByZXMtPnN0YXJ0OworCWRtYV9kYXRhLT5jaGFubmVsID0gcmVzLT5zdGFydDsKIAlkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0ucHJpdmF0ZV9kYXRhID0gZGV2OwogCWRhdmluY2lfbWNhc3BfZGFpW3BkYXRhLT5vcF9tb2RlXS5kZXYgPSAmcGRldi0+ZGV2OwogCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpKCZkYXZpbmNpX21jYXNwX2RhaVtwZGF0YS0+b3BfbW9kZV0pOwpAQCAtOTM2LDggKzkxNyw2IEBACiBlcnJfcmVsZWFzZV9yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiBlcnJfcmVsZWFzZV9kYXRhOgotCWtmcmVlKGRtYV9kYXRhKTsKLWVycl9yZWxlYXNlX2RldjoKIAlrZnJlZShkZXYpOwogCiAJcmV0dXJuIHJldDsKQEAgLTk0Niw3ICs5MjUsNiBAQAogc3RhdGljIGludCBkYXZpbmNpX21jYXNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGE7CiAJc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAKQEAgLTk1OSw4ICs5MzcsNiBAQAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIChtZW0tPmVuZCAtIG1lbS0+c3RhcnQpICsgMSk7CiAKLQlkbWFfZGF0YSA9IGRldi0+ZG1hX3BhcmFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKLQlrZnJlZShkbWFfZGF0YSk7CiAJa2ZyZWUoZGV2KTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5oCmluZGV4IDU1NDM1NGMuLjlkMTc5Y2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmgKQEAgLTM5LDEwICszOSwxNSBAQAogfTsKIAogc3RydWN0IGRhdmluY2lfYXVkaW9fZGV2IHsKKwkvKgorCSAqIGRtYV9wYXJhbXMgbXVzdCBiZSBmaXJzdCBiZWNhdXNlIHJ0ZC0+ZGFpLT5jcHVfZGFpLT5wcml2YXRlX2RhdGEKKwkgKiBpcyBjYXN0IHRvIGEgcG9pbnRlciBvZiBhbiBhcnJheSBvZiBzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyBpbgorCSAqIGRhdmluY2lfcGNtX29wZW4uCisJICovCisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgZG1hX3BhcmFtc1syXTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHNhbXBsZV9yYXRlOwogCXN0cnVjdCBjbGsgKmNsazsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX3BhcmFtc1syXTsKIAl1bnNpZ25lZCBpbnQgY29kZWNfZm10OwogCiAJLyogTWNBU1Agc3BlY2lmaWMgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmMKaW5kZXggMmY3ZGE0OS4uYzczYTkxNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5jCkBAIC0xMjYsMTYgKzEyNiw5IEBACiBzdGF0aWMgaW50IGRhdmluY2lfcGNtX2RtYV9yZXF1ZXN0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZCA9IHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqZG1hX2RhdGEgPSBydGQtPmRhaS0+Y3B1X2RhaS0+ZG1hX2RhdGE7CiAJc3RydWN0IGVkbWFjY19wYXJhbSBwX3JhbTsKIAlpbnQgcmV0OwogCi0JaWYgKCFkbWFfZGF0YSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcnRkLT5wYXJhbXMgPSBkbWFfZGF0YTsKLQogCS8qIFJlcXVlc3QgbWFzdGVyIERNQSBjaGFubmVsICovCiAJcmV0ID0gZWRtYV9hbGxvY19jaGFubmVsKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKIAkJCQkgIGRhdmluY2lfcGNtX2RtYV9pcnEsIHN1YnN0cmVhbSwKQEAgLTI0NCw2ICsyMzcsMTEgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXN0cnVjdCBkYXZpbmNpX3J1bnRpbWVfZGF0YSAqcHJ0ZDsKIAlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgKnBhID0gcnRkLT5kYWktPmNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV9wY21fZG1hX3BhcmFtcyAqcGFyYW1zID0gJnBhW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlpZiAoIXBhcmFtcykKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzbmRfc29jX3NldF9ydW50aW1lX2h3cGFyYW1zKHN1YnN0cmVhbSwgJmRhdmluY2lfcGNtX2hhcmR3YXJlKTsKIAkvKiBlbnN1cmUgdGhhdCBidWZmZXIgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBlcmlvZCBzaXplICovCkBAIC0yNTcsNiArMjU1LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcGluX2xvY2tfaW5pdCgmcHJ0ZC0+bG9jayk7CisJcHJ0ZC0+cGFyYW1zID0gcGFyYW1zOwogCiAJcnVudGltZS0+cHJpdmF0ZV9kYXRhID0gcHJ0ZDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaCBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktcGNtLmgKaW5kZXggNjNkOTYyNS4uODc0NjYwNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1wY20uaAorKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLXBjbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAKIAogc3RydWN0IGRhdmluY2lfcGNtX2RtYV9wYXJhbXMgewotCWNoYXIgKm5hbWU7CQkJLyogc3RyZWFtIGlkZW50aWZpZXIgKi8KIAlpbnQgY2hhbm5lbDsJCQkvKiBzeW5jIGRtYSBjaGFubmVsIElEICovCiAJdW5zaWduZWQgc2hvcnQgYWNudDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogZGV2aWNlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9teGMtc3NpLmMgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwppbmRleCAzODA2ZmYyLi5jY2RlZmU2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW14L214Yy1zc2kuYworKysgYi9zb3VuZC9zb2MvaW14L214Yy1zc2kuYwpAQCAtMzk3LDE0ICszOTcsNiBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBzeW5jICovCi0JaWYgKCEoZm10ICYgU05EX1NPQ19EQUlGTVRfQVNZTkMpKQotCQlzY3IgfD0gU1NJX1NDUl9TWU47Ci0KLQkvKiB0ZG0gLSBvbmx5IGZvciBzdGVyZW8gYXRtICovCi0JaWYgKGZtdCAmIFNORF9TT0NfREFJRk1UX1RETSkKLQkJc2NyIHw9IFNTSV9TQ1JfTkVUOwotCiAJaWYgKGNwdV9kYWktPmlkID09IElNWF9EQUlfU1NJMCB8fCBjcHVfZGFpLT5pZCA9PSBJTVhfREFJX1NTSTIpIHsKIAkJU1NJMV9TVENSID0gc3RjcjsKIAkJU1NJMV9TUkNSID0gc3JjcjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcgYi9zb3VuZC9zb2Mvb21hcC9LY29uZmlnCmluZGV4IDJkZWU5ODMuLjY1M2EzNjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL0tjb25maWcKKysrIGIvc291bmQvc29jL29tYXAvS2NvbmZpZwpAQCAtMjEsNyArMjEsMTggQEAKIAlzZWxlY3QgU05EX09NQVBfU09DX01DQlNQCiAJc2VsZWN0IFNORF9TT0NfQ1gyMDQ0MgogCWhlbHAKLQkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gQW1zdHJhZCBEZWx0YS4KKwkgIFNheSBZICBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCAgZm9yIFNvQyBhdWRpbyBkZXZpY2UgIGNvbm5lY3RlZCB0bworCSAgYSBoYW5kc2V0IGFuZCBhIHNwZWFrZXJwaG9uZSBmb3VuZCBvbiBBbXN0cmFkIEUzIChEZWx0YSkgdmlkZW9waG9uZS4KKworCSAgTm90ZSB0aGF0IGluIG9yZGVyIHRvIGdldCB0aG9zZSBkZXZpY2VzIGZ1bGx5IHN1cHBvcnRlZCwgIHlvdSBoYXZlIHRvCisJICBidWlsZCAgdGhlIGtlcm5lbCAgd2l0aCAgc3RhbmRhcmQgIHNlcmlhbCBwb3J0ICBkcml2ZXIgIGluY2x1ZGVkICBhbmQKKwkgIGNvbmZpZ3VyZWQgZm9yIGF0IGxlYXN0IDQgcG9ydHMuICBUaGVuLCBmcm9tIHVzZXJzcGFjZSwgeW91IG11c3QgbG9hZAorCSAgYSBsaW5lIGRpc2NpcGxpbmUgIzE5IG9uIHRoZSBtb2RlbSAodHR5UzMpIHNlcmlhbCBsaW5lLiAgVGhlIHNpbXBsZXN0CisJICB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIGluc3RhbGwgdXRpbC1saW51eC1uZyAgYW5kIHVzZSB0aGUgaW5jbHVkZWQKKwkgIGxkYXR0YWNoICB1dGlsaXR5LiAgVGhpcyAgY2FuIGJlICBzdGFydGVkICBhdXRvbWF0aWNhbGx5ICBmcm9tICB1ZGV2LAorCSAgYSBzaW1wbGUgcnVsZSBsaWtlIHRoaXMgb25lIHNob3VsZCBkbyB0aGUgdHJpY2sgKGl0IGRvZXMgZm9yIG1lKToKKwkgIAlBQ1RJT049PSJhZGQiLCBLRVJORUw9PSJjb250cm9sQzAiLCBcCisJCQkJUlVOKz0iL3Vzci9zYmluL2xkYXR0YWNoIDE5IC9kZXYvdHR5UzMiCiAKIGNvbmZpZyBTTkRfT01BUF9TT0NfT1NLNTkxMgogCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3Igb21hcCBvc2s1OTEyIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtcGNtLmMKaW5kZXggNTczNTk0NS4uNmE4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1wY20uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLXBjbS5jCkBAIC0xOTUsOCArMTk1LDEyIEBACiAJZWxzZQogCQlvbWFwX2VuYWJsZV9kbWFfaXJxKHBydGQtPmRtYV9jaCwgT01BUF9ETUFfRlJBTUVfSVJRKTsKIAotCW9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShwcnRkLT5kbWFfY2gsIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOwotCW9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUocHJ0ZC0+ZG1hX2NoLCBPTUFQX0RNQV9EQVRBX0JVUlNUXzE2KTsKKwlpZiAoIShjcHVfY2xhc3NfaXNfb21hcDEoKSkpIHsKKwkJb21hcF9zZXRfZG1hX3NyY19idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCQlvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKHBydGQtPmRtYV9jaCwKKwkJCQkJCU9NQVBfRE1BX0RBVEFfQlVSU1RfMTYpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzZXZtLmMKaW5kZXggOTExNGMyNi4uMTNhYTM4MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcDNldm0uYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwM2V2bS5jCkBAIC0xNDQsNCArMTQ0LDQgQEAKIAogTU9EVUxFX0FVVEhPUigiQW51aiBBZ2dhcndhbCA8YW51ai5hZ2dhcndhbEB0aS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIE9NQVAzIEVWTSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTHYyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwM3BhbmRvcmEuYyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCmluZGV4IGFkMjE5YWEuLjBjZDA2ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAzcGFuZG9yYS5jCkBAIC0xMzQsNyArMTM0LDcgQEAKICAqICB8UHwgPC0tLSBUV0w0MDMwIDwtLS0tLS0tLS0gTGluZSBJbiBhbmQgTUlDcwogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgb21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHNbXSA9IHsKLQlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIlBsYXliYWNrIiwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fREFDKCJQQ00gREFDIiwgIkhpRmkgUGxheWJhY2siLCBTTkRfU09DX05PUE0sIDAsIDApLAogCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcGxpZmllciIsIFNORF9TT0NfTk9QTSwKIAkJCSAgIDAsIDAsIE5VTEwsIDAsIG9tYXAzcGFuZG9yYV9ocF9ldmVudCwKIAkJCSAgIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKQEAgLTE4MSw2ICsxODEsNyBAQAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRSIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhGTCIpOwogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJIRlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiVklCUkEiKTsKIAogCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIG9tYXAzcGFuZG9yYV9vdXRfZGFwbV93aWRnZXRzLAogCQkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX291dF9kYXBtX3dpZGdldHMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCA2Mzc1YjRlLi5kY2IzMTgxYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKIGNvbmZpZyBTTkRfUFhBMlhYX1NPQ19JTU9URTIKICAgICAgICB0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIElNb3RlIDIiCi0gICAgICAgZGVwZW5kcyBvbiBTTkRfUFhBMlhYX1NPQyAmJiBNQUNIX0lOVEVMTU9URTIKKyAgICAgICBkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfSU5URUxNT1RFMiAmJiBJMkMKICAgICAgICBzZWxlY3QgU05EX1BYQTJYWF9TT0NfSTJTCiAgICAgICAgc2VsZWN0IFNORF9TT0NfV004OTQwCiAgICAgICAgaGVscApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYyBiL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzI0eHgtcGNtLmMKaW5kZXggNWNiYmRjOC4uMWYzNWM2ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3MzYzI0eHgvczNjMjR4eC1wY20uYworKysgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2MyNHh4LXBjbS5jCkBAIC03NSwxMSArNzUsMTkgQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9ydW50aW1lX2RhdGEgKnBydGQgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAlkbWFfYWRkcl90IHBvcyA9IHBydGQtPmRtYV9wb3M7CisJdW5zaWduZWQgaW50IGxpbWl0OwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwogCi0Jd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBwcnRkLT5kbWFfbGltaXQpIHsKKwlpZiAoczNjX2RtYV9oYXNfY2lyY3VsYXIoKSkgeworCQlsaW1pdCA9IChwcnRkLT5kbWFfZW5kIC0gcHJ0ZC0+ZG1hX3N0YXJ0KSAvIHBydGQtPmRtYV9wZXJpb2Q7CisJfSBlbHNlCisJCWxpbWl0ID0gcHJ0ZC0+ZG1hX2xpbWl0OworCisJcHJfZGVidWcoIiVzOiBsb2FkZWQgJWQsIGxpbWl0ICVkXG4iLCBfX2Z1bmNfXywgcHJ0ZC0+ZG1hX2xvYWRlZCwgbGltaXQpOworCisJd2hpbGUgKHBydGQtPmRtYV9sb2FkZWQgPCBsaW1pdCkgewogCQl1bnNpZ25lZCBsb25nIGxlbiA9IHBydGQtPmRtYV9wZXJpb2Q7CiAKIAkJcHJfZGVidWcoImRtYV9sb2FkZWQ6ICVkXG4iLCBwcnRkLT5kbWFfbG9hZGVkKTsKQEAgLTEyMyw3ICsxMzEsNyBAQAogCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAKIAlzcGluX2xvY2soJnBydGQtPmxvY2spOwotCWlmIChwcnRkLT5zdGF0ZSAmIFNUX1JVTk5JTkcpIHsKKwlpZiAocHJ0ZC0+c3RhdGUgJiBTVF9SVU5OSU5HICYmICFzM2NfZG1hX2hhc19jaXJjdWxhcigpKSB7CiAJCXBydGQtPmRtYV9sb2FkZWQtLTsKIAkJczNjMjR4eF9wY21fZW5xdWV1ZShzdWJzdHJlYW0pOwogCX0KQEAgLTE2NCw2ICsxNzIsMTEgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBkbWEgY2hhbm5lbFxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisKKwkJLyogdXNlIHRoZSBjaXJjdWxhciBidWZmZXJpbmcgaWYgd2UgaGF2ZSBpdCBhdmFpbGFibGUuICovCisJCWlmIChzM2NfZG1hX2hhc19jaXJjdWxhcigpKQorCQkJczNjMjQxMF9kbWFfc2V0ZmxhZ3MocHJ0ZC0+cGFyYW1zLT5jaGFubmVsLAorCQkJCQkgICAgIFMzQzI0MTBfRE1BRl9DSVJDVUxBUik7CiAJfQogCiAJczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHBydGQtPnBhcmFtcy0+Y2hhbm5lbCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IDNjMDZjNDAuLjEwNWE3N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMjIwLDYgKzIyMCw4IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCWNsa19lbmFibGUoaTJzLT5paXNfY2Nsayk7CisKIAlyZXQgPSBzM2NfaTJzdjJfcHJvYmUocGRldiwgZGFpLCBpMnMsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2NsazsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtY29yZS5jIGIvc291bmQvc29jL3NvYy1jb3JlLmMKaW5kZXggN2ZmMDRhZC4uMGExYjJmNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb3JlLmMKKysrIGIvc291bmQvc29jL3NvYy1jb3JlLmMKQEAgLTgzNCw2ICs4MzQsOSBAQAogI2RlZmluZSBzb2NfcmVzdW1lCU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBudWxsX2RhaV9vcHMgPSB7Cit9OworCiBzdGF0aWMgdm9pZCBzbmRfc29jX2luc3RhbnRpYXRlX2NhcmQoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29udGFpbmVyX29mKGNhcmQtPmRldiwKQEAgLTg3Nyw2ICs4ODAsMTEgQEAKIAkJCWFjOTcgPSAxOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgeworCQlpZiAoIWNhcmQtPmRhaV9saW5rW2ldLmNvZGVjX2RhaS0+b3BzKQorCQkJY2FyZC0+ZGFpX2xpbmtbaV0uY29kZWNfZGFpLT5vcHMgPSAmbnVsbF9kYWlfb3BzOworCX0KKwogCS8qIElmIHdlIGhhdmUgQUM5NyBpbiB0aGUgc3lzdGVtIHRoZW4gZG9uJ3Qgd2FpdCBmb3IgdGhlCiAJICogY29kZWMuICBUaGlzIHdpbGwgbmVlZCByZXZpc2l0aW5nIGlmIHdlIGhhdmUgdG8gaGFuZGxlCiAJICogc3lzdGVtcyB3aXRoIG1peGVkIEFDOTcgYW5kIG5vbi1BQzk3IHBhcnRzLiAgT25seSBjaGVjayBmb3IKQEAgLTIzMjksOSArMjMzNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIG51bGxfZGFpX29wcyA9IHsKLX07Ci0KIC8qKgogICogc25kX3NvY19yZWdpc3Rlcl9kYWkgLSBSZWdpc3RlciBhIERBSSB3aXRoIHRoZSBBU29DIGNvcmUKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IGY3OTcxMWIuLmQ4OWY2ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC01MjQsNyArNTI0LDcgQEAKIAogCQkvKiBjb25uZWN0ZWQgamFjayBvciBzcGsgPyAqLwogCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1faHAgfHwgd2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fc3BrIHx8Ci0JCQl3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQkgICAgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX2xpbmUgJiYgIWxpc3RfZW1wdHkoJndpZGdldC0+c291cmNlcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC01NzMsNyArNTczLDggQEAKIAkJCXJldHVybiAxOwogCiAJCS8qIGNvbm5lY3RlZCBqYWNrID8gKi8KLQkJaWYgKHdpZGdldC0+aWQgPT0gc25kX3NvY19kYXBtX21pYyB8fCB3aWRnZXQtPmlkID09IHNuZF9zb2NfZGFwbV9saW5lKQorCQlpZiAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbWljIHx8CisJCSAgICAod2lkZ2V0LT5pZCA9PSBzbmRfc29jX2RhcG1fbGluZSAmJiAhbGlzdF9lbXB0eSgmd2lkZ2V0LT5zaW5rcykpKQogCQkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMDcxLDkgKzIwNzIsOSBAQAogCQkJfQogCQl9CiAJfQotCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAogCWRhcG1fcG93ZXJfd2lkZ2V0cyhjb2RlYywgZXZlbnQpOworCW11dGV4X3VubG9jaygmY29kZWMtPm11dGV4KTsKIAlkdW1wX2RhcG0oY29kZWMsIF9fZnVuY19fKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9hdWRpby5jIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKaW5kZXggMTIxYWYwNi4uODZiMmMzYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMKQEAgLTYyLDEwICs2MiwxNCBAQAogYWN0aXZhdGVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfdXNiX2NhaWFxZGV2ICpkZXYsCiAJICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YikKIHsKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCiAJCWRldi0+c3ViX3BsYXliYWNrW3N1Yi0+bnVtYmVyXSA9IHN1YjsKIAllbHNlCiAJCWRldi0+c3ViX2NhcHR1cmVbc3ViLT5udW1iZXJdID0gc3ViOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjY5LDE2ICsyNzMsMjIgQEAKIHsKIAlpbnQgaW5kZXggPSBzdWItPm51bWJlcjsKIAlzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWIpOworCXNuZF9wY21fdWZyYW1lc190IHB0cjsKKworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CiAKIAlpZiAoZGV2LT5pbnB1dF9wYW5pYyB8fCBkZXYtPm91dHB1dF9wYW5pYykKLQkJcmV0dXJuIFNORFJWX1BDTV9QT1NfWFJVTjsKKwkJcHRyID0gU05EUlZfUENNX1BPU19YUlVOOwogCiAJaWYgKHN1Yi0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCi0JCXJldHVybiBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAorCQlwdHIgPSBieXRlc190b19mcmFtZXMoc3ViLT5ydW50aW1lLAogCQkJCQlkZXYtPmF1ZGlvX291dF9idWZfcG9zW2luZGV4XSk7CiAJZWxzZQotCQlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKKwkJcHRyID0gYnl0ZXNfdG9fZnJhbWVzKHN1Yi0+cnVudGltZSwKIAkJCQkJZGV2LT5hdWRpb19pbl9idWZfcG9zW2luZGV4XSk7CisKKwlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJcmV0dXJuIHB0cjsKIH0KIAogLyogb3BlcmF0b3JzIGZvciBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMgYi9zb3VuZC91c2IvY2FpYXEvZGV2aWNlLmMKaW5kZXggODNlNmMxMy4uYTNmMDJkZCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL2NhaWFxL2RldmljZS5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9kZXZpY2UuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgImlucHV0LmgiCiAKIE1PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oImNhaWFxIFVTQiBhdWRpbywgdmVyc2lvbiAxLjMuMTkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiY2FpYXEgVVNCIGF1ZGlvLCB2ZXJzaW9uIDEuMy4yMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sMn0sIgogCQkJICJ7TmF0aXZlIEluc3RydW1lbnRzLCBSaWdLb250cm9sM30sIgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmggYi9zb3VuZC91c2IvdXNiYXVkaW8uaAppbmRleCA4ZTdmNzg5Li5lOWEzYTlkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uaAorKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uaApAQCAtMjEwLDcgKzIxMCw3IEBACiAvKgogICovCiAKLSNkZWZpbmUgY29tYmluZV93b3JkKHMpICAgICgoKnMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzFdIDw8IDgpKQorI2RlZmluZSBjb21iaW5lX3dvcmQocykgICAgKCgqKHMpKSB8ICgodW5zaWduZWQgaW50KShzKVsxXSA8PCA4KSkKICNkZWZpbmUgY29tYmluZV90cmlwbGUocykgIChjb21iaW5lX3dvcmQocykgfCAoKHVuc2lnbmVkIGludCkocylbMl0gPDwgMTYpKQogI2RlZmluZSBjb21iaW5lX3F1YWQocykgICAgKGNvbWJpbmVfdHJpcGxlKHMpIHwgKCh1bnNpZ25lZCBpbnQpKHMpWzNdIDw8IDI0KSkKIApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyLmMgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwppbmRleCBhYjVhM2FjLi5jOTk4MjIwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWl4ZXIuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXIuYwpAQCAtODk4LDYgKzg5OCwxMSBAQAogICogYnVpbGQgYSBmZWF0dXJlIGNvbnRyb2wKICAqLwogCitzdGF0aWMgc2l6ZV90IGFwcGVuZF9jdGxfbmFtZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsLCBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0cmxjYXQoa2N0bC0+aWQubmFtZSwgc3RyLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworfQorCiBzdGF0aWMgdm9pZCBidWlsZF9mZWF0dXJlX2N0bChzdHJ1Y3QgbWl4ZXJfYnVpbGQgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkZXNjLAogCQkJICAgICAgdW5zaWduZWQgaW50IGN0bF9tYXNrLCBpbnQgY29udHJvbCwKIAkJCSAgICAgIHN0cnVjdCB1c2JfYXVkaW9fdGVybSAqaXRlcm0sIGludCB1bml0aWQpCkBAIC05NzgsMTMgKzk4MywxMyBAQAogCQkgKi8KIAkJaWYgKCEgbWFwcGVkX25hbWUgJiYgISAoc3RhdGUtPm90ZXJtLnR5cGUgPj4gMTYpKSB7CiAJCQlpZiAoKHN0YXRlLT5vdGVybS50eXBlICYgMHhmZjAwKSA9PSAweDAxMDApIHsKLQkJCQlsZW4gPSBzdHJsY2F0KGtjdGwtPmlkLm5hbWUsICIgQ2FwdHVyZSIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CisJCQkJbGVuID0gYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgQ2FwdHVyZSIpOwogCQkJfSBlbHNlIHsKLQkJCQlsZW4gPSBzdHJsY2F0KGtjdGwtPmlkLm5hbWUgKyBsZW4sICIgUGxheWJhY2siLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJCWxlbiA9IGFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFBsYXliYWNrIik7CiAJCQl9CiAJCX0KLQkJc3RybGNhdChrY3RsLT5pZC5uYW1lICsgbGVuLCBjb250cm9sID09IFVTQl9GRUFUVVJFX01VVEUgPyAiIFN3aXRjaCIgOiAiIFZvbHVtZSIsCi0JCQlzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQlhcHBlbmRfY3RsX25hbWUoa2N0bCwgY29udHJvbCA9PSBVU0JfRkVBVFVSRV9NVVRFID8KKwkJCQkiIFN3aXRjaCIgOiAiIFZvbHVtZSIpOwogCQlpZiAoY29udHJvbCA9PSBVU0JfRkVBVFVSRV9WT0xVTUUpIHsKIAkJCWtjdGwtPnRsdi5jID0gbWl4ZXJfdm9sX3RsdjsKIAkJCWtjdGwtPnZkWzBdLmFjY2VzcyB8PSAKQEAgLTEwNjYsNiArMTA3MSwxNSBAQAogCWNoYW5uZWxzID0gKGZ0clswXSAtIDcpIC8gY3NpemUgLSAxOwogCiAJbWFzdGVyX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiwgY3NpemUpOworCS8qIG1hc3RlciBjb25maWd1cmF0aW9uIHF1aXJrcyAqLworCXN3aXRjaCAoc3RhdGUtPmNoaXAtPnVzYl9pZCkgeworCWNhc2UgVVNCX0lEKDB4MDhiYiwgMHgyNzAyKToKKwkJc25kX3ByaW50ayhLRVJOX0lORk8KKwkJCSAgICJ1c2JtaXhlcjogbWFzdGVyIHZvbHVtZSBxdWlyayBmb3IgUENNMjcwMiBjaGlwXG4iKTsKKwkJLyogZGlzYWJsZSBub24tZnVuY3Rpb25hbCB2b2x1bWUgY29udHJvbCAqLworCQltYXN0ZXJfYml0cyAmPSB+KDEgPDwgKFVTQl9GRUFUVVJFX1ZPTFVNRSAtIDEpKTsKKwkJYnJlYWs7CisJfQogCWlmIChjaGFubmVscyA+IDApCiAJCWZpcnN0X2NoX2JpdHMgPSBzbmRfdXNiX2NvbWJpbmVfYnl0ZXMoZnRyICsgNiArIGNzaXplLCBjc2l6ZSk7CiAJZWxzZQpAQCAtMTE0Myw3ICsxMTU3LDcgQEAKIAkJbGVuID0gZ2V0X3Rlcm1fbmFtZShzdGF0ZSwgaXRlcm0sIGtjdGwtPmlkLm5hbWUsIHNpemVvZihrY3RsLT5pZC5uYW1lKSwgMCk7CiAJaWYgKCEgbGVuKQogCQlsZW4gPSBzcHJpbnRmKGtjdGwtPmlkLm5hbWUsICJNaXhlciBTb3VyY2UgJWQiLCBpbl9jaCArIDEpOwotCXN0cmxjYXQoa2N0bC0+aWQubmFtZSArIGxlbiwgIiBWb2x1bWUiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIFZvbHVtZSIpOwogCiAJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJbJWRdIE1VIFslc10gY2ggPSAlZCwgdmFsID0gJWQvJWRcbiIsCiAJCSAgICBjdmFsLT5pZCwga2N0bC0+aWQubmFtZSwgY3ZhbC0+Y2hhbm5lbHMsIGN2YWwtPm1pbiwgY3ZhbC0+bWF4KTsKQEAgLTE0MDAsOCArMTQxNCw4IEBACiAJCQlpZiAoISBsZW4pCiAJCQkJc3RybGNweShrY3RsLT5pZC5uYW1lLCBuYW1lLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwogCQl9Ci0JCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiAiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOwotCQlzdHJsY2F0KGtjdGwtPmlkLm5hbWUsIHZhbGluZm8tPnN1ZmZpeCwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgIik7CisJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCB2YWxpbmZvLT5zdWZmaXgpOwogCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiWyVkXSBQVSBbJXNdIGNoID0gJWQsIHZhbCA9ICVkLyVkXG4iLAogCQkJICAgIGN2YWwtPmlkLCBrY3RsLT5pZC5uYW1lLCBjdmFsLT5jaGFubmVscywgY3ZhbC0+bWluLCBjdmFsLT5tYXgpOwpAQCAtMTYxMCw5ICsxNjI0LDkgQEAKIAkJCXN0cmxjcHkoa2N0bC0+aWQubmFtZSwgIlVTQiIsIHNpemVvZihrY3RsLT5pZC5uYW1lKSk7CiAKIAkJaWYgKChzdGF0ZS0+b3Rlcm0udHlwZSAmIDB4ZmYwMCkgPT0gMHgwMTAwKQotCQkJc3RybGNhdChrY3RsLT5pZC5uYW1lLCAiIENhcHR1cmUgU291cmNlIiwgc2l6ZW9mKGtjdGwtPmlkLm5hbWUpKTsKKwkJCWFwcGVuZF9jdGxfbmFtZShrY3RsLCAiIENhcHR1cmUgU291cmNlIik7CiAJCWVsc2UKLQkJCXN0cmxjYXQoa2N0bC0+aWQubmFtZSwgIiBQbGF5YmFjayBTb3VyY2UiLCBzaXplb2Yoa2N0bC0+aWQubmFtZSkpOworCQkJYXBwZW5kX2N0bF9uYW1lKGtjdGwsICIgUGxheWJhY2sgU291cmNlIik7CiAJfQogCiAJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJbJWRdIFNVIFslc10gaXRlbXMgPSAlZFxuIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwppbmRleCBmZDQ0OTQ2Li45OWYzMzc2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlzbmRfcHJpbnRkZChLRVJOX0RFQlVHICIlaVxuIiwgYXRvbWljX3JlYWQoJnVzMTIybC0+bW1hcF9jb3VudCkpOwogfQogCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVzYl9zdHJlYW1faHdkZXBfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX29wcyA9IHsKIAkub3BlbiA9IHVzYl9zdHJlYW1faHdkZXBfdm1fb3BlbiwKIAkuZmF1bHQgPSB1c2Jfc3RyZWFtX2h3ZGVwX3ZtX2ZhdWx0LAogCS5jbG9zZSA9IHVzYl9zdHJlYW1faHdkZXBfdm1fY2xvc2UsCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwppbmRleCBmM2Q4ZjcxLi41MmUwNGIyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1czQyOGN0bHNfdm1fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB1czQyOGN0bHNfdm1fb3BzID0gewogCS5mYXVsdCA9IHNuZF91czQyOGN0bHNfdm1fZmF1bHQsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uYwppbmRleCAxMTc5NDZmLi40YjIzMDRjIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmMKQEAgLTY5Nyw3ICs2OTcsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc25kX3VzWDJZX2h3ZGVwX3BjbV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNuZF91c1gyWV9od2RlcF9wY21fdm1fb3BzID0gewogCS5vcGVuID0gc25kX3VzWDJZX2h3ZGVwX3BjbV92bV9vcGVuLAogCS5jbG9zZSA9IHNuZF91c1gyWV9od2RlcF9wY21fdm1fY2xvc2UsCiAJLmZhdWx0ID0gc25kX3VzWDJZX2h3ZGVwX3BjbV92bV9mYXVsdCwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZSBiL3Rvb2xzL3BlcmYvLmdpdGlnbm9yZQppbmRleCBkNjlhNzU5Li4wODU0ZjExIDEwMDY0NAotLS0gYS90b29scy9wZXJmLy5naXRpZ25vcmUKKysrIGIvdG9vbHMvcGVyZi8uZ2l0aWdub3JlCkBAIC0xMCw2ICsxMCw3IEBACiBwZXJmLXRvcAogcGVyZiouMQogcGVyZioueG1sCitwZXJmKi5odG1sCiBjb21tb24tY21kcy5oCiB0YWdzCiBUQUdTCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtdGltZWNoYXJ0LnR4dAppbmRleCAxYzJlZDMwLi5hNzkxMDA5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi10aW1lY2hhcnQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXRpbWVjaGFydC50eHQKQEAgLTMxLDYgKzMxLDkgQEAKIC13OjoKIC0td2lkdGg9OjoKICAgICAgICAgU2VsZWN0IHRoZSB3aWR0aCBvZiB0aGUgU1ZHIGZpbGUgKGRlZmF1bHQ6IDEwMDApCistcDo6CistLXBvd2VyLW9ubHk6OgorICAgICAgICBPbmx5IG91dHB1dCB0aGUgQ1BVIHBvd2VyIHNlY3Rpb24gb2YgdGhlIGRpYWdyYW0KIAogCiBTRUUgQUxTTwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggYjVmMTk1My4uN2UxOTBkNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0xNTcsMTEgKzE1NywxOCBAQAogdW5hbWVfUCA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCiB1bmFtZV9WIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC12IDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKIAotIyBJZiB3ZSdyZSBvbiBhIDY0LWJpdCBrZXJuZWwsIHVzZSAtbTY0Ci1pZm5kZWYgTk9fNjRCSVQKLQlpZm5lcSAoJChwYXRzdWJzdCAlNjQsJSwkKHVuYW1lX00pKSwkKHVuYW1lX00pKQotCSAgTTY0IDo9IC1tNjQKLQllbmRpZgorIworIyBBZGQgLW0zMiBmb3IgY3Jvc3MtYnVpbGRzOgorIworaWZkZWYgTk9fNjRCSVQKKyAgTUJJVFMgOj0gLW0zMgorZWxzZQorICAjCisgICMgSWYgd2UncmUgb24gYSA2NC1iaXQga2VybmVsLCB1c2UgLW02NDoKKyAgIworICBpZm5lcSAoJChwYXRzdWJzdCAlNjQsJSwkKHVuYW1lX00pKSwkKHVuYW1lX00pKQorICAgIE1CSVRTIDo9IC1tNjQKKyAgZW5kaWYKIGVuZGlmCiAKICMgQ0ZMQUdTIGFuZCBMREZMQUdTIGFyZSBmb3IgdGhlIHVzZXJzIHRvIG92ZXJyaWRlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KQEAgLTE3MCw4ICsxNzcsNyBAQAogIyBJbmNsdWRlIHNhbmVyIHdhcm5pbmdzIGhlcmUsIHdoaWNoIGNhbiBjYXRjaCBidWdzOgogIwogCi1FWFRSQV9XQVJOSU5HUyA6PSAtV2Nhc3QtYWxpZ24KLUVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0CitFWFRSQV9XQVJOSU5HUyA6PSAtV2Zvcm1hdAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdmb3JtYXQtc2VjdXJpdHkKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XZm9ybWF0LXkyawogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzaGFkb3cKQEAgLTE5NCw3ICsyMDAsNyBAQAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdHJpY3QtcHJvdG90eXBlcwogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQKIAotQ0ZMQUdTID0gJChNNjQpIC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAtTzYgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1EX0ZPUlRJRllfU09VUkNFPTIgJChFWFRSQV9XQVJOSU5HUykKK0NGTEFHUyA9ICQoTUJJVFMpIC1nZ2RiMyAtV2FsbCAtV2V4dHJhIC1zdGQ9Z251OTkgLVdlcnJvciAtTzYgLWZzdGFjay1wcm90ZWN0b3ItYWxsIC1EX0ZPUlRJRllfU09VUkNFPTIgJChFWFRSQV9XQVJOSU5HUykKIExERkxBR1MgPSAtbHB0aHJlYWQgLWxydCAtbGVsZiAtbG0KIEFMTF9DRkxBR1MgPSAkKENGTEFHUykKIEFMTF9MREZMQUdTID0gJChMREZMQUdTKQpAQCAtNDE1LDggKzQyMSwxMiBAQAogCVBUSFJFQURfTElCUyA9CiBlbmRpZgogCi1pZm5lcSAoJChzaGVsbCBzaCAtYyAiKGVjaG8gJ1wjaW5jbHVkZSA8bGliZWxmLmg+JzsgZWNobyAnaW50IG1haW4odm9pZCkgeyBFbGYgKiBlbGYgPSBlbGZfYmVnaW4oMCwgRUxGX0NfUkVBRF9NTUFQLCAwKTsgcmV0dXJuIChsb25nKWVsZjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCi0JbXNnIDo9ICQoZXJyb3IgTm8gbGliZWxmLmgvbGliZWxmIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBsaWJlbGYtZGV2L2VsZnV0aWxzLWxpYmVsZi1kZXZlbCk7CitpZmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxsaWJlbGYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IEVsZiAqIGVsZiA9IGVsZl9iZWdpbigwLCBFTEZfQ19SRUFELCAwKTsgcmV0dXJuIChsb25nKWVsZjsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLW8gL2Rldi9udWxsICQoQUxMX0xERkxBR1MpID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5IiksIHkpCisJaWZuZXEgKCQoc2hlbGwgc2ggLWMgIihlY2hvICdcI2luY2x1ZGUgPGxpYmVsZi5oPic7IGVjaG8gJ2ludCBtYWluKHZvaWQpIHsgRWxmICogZWxmID0gZWxmX2JlZ2luKDAsIEVMRl9DX1JFQURfTU1BUCwgMCk7IHJldHVybiAobG9uZyllbGY7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1vIC9kZXYvbnVsbCAkKEFMTF9MREZMQUdTKSA+IC9kZXYvbnVsbCAyPiYxICYmIGVjaG8geSIpLCB5KQorCQlCQVNJQ19DRkxBR1MgKz0gLURMSUJFTEZfTk9fTU1BUAorCWVuZGlmCitlbHNlCisJbXNnIDo9ICQoZXJyb3IgTm8gbGliZWxmLmgvbGliZWxmIGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBsaWJlbGYtZGV2L2VsZnV0aWxzLWxpYmVsZi1kZXZlbCBhbmQgZ2xpYmMtZGV2W2VsXSk7CiBlbmRpZgogCiBpZmRlZiBOT19ERU1BTkdMRQpAQCAtNzI4LDcgKzczOCw3IEBACiBjb21tb24tY21kcy5oOiB1dGlsL2dlbmVyYXRlLWNtZGxpc3Quc2ggY29tbWFuZC1saXN0LnR4dAogCiBjb21tb24tY21kcy5oOiAkKHdpbGRjYXJkIERvY3VtZW50YXRpb24vcGVyZi0qLnR4dCkKLQkkKFFVSUVUX0dFTil1dGlsL2dlbmVyYXRlLWNtZGxpc3Quc2ggPiAkQCsgJiYgbXYgJEArICRACisJJChRVUlFVF9HRU4pLiB1dGlsL2dlbmVyYXRlLWNtZGxpc3Quc2ggPiAkQCsgJiYgbXYgJEArICRACiAKICQocGF0c3Vic3QgJS5zaCwlLCQoU0NSSVBUX1NIKSkgOiAlIDogJS5zaAogCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggYTVhMDUwYS4uYTRiZTQ1MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNDEsNiArNDEsNyBAQAogc3RhdGljIGludAkJCXN5c3RlbV93aWRlCQkJPSAwOwogc3RhdGljIGludAkJCXByb2ZpbGVfY3B1CQkJPSAtMTsKIHN0YXRpYyBwaWRfdAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJY2hpbGRfcGlkCQkJPSAtMTsKIHN0YXRpYyBpbnQJCQlpbmhlcml0CQkJCT0gMTsKIHN0YXRpYyBpbnQJCQlmb3JjZQkJCQk9IDA7CiBzdGF0aWMgaW50CQkJYXBwZW5kX2ZpbGUJCQk9IDA7CkBAIC0xODQsNiArMTg1LDkgQEAKIAogc3RhdGljIHZvaWQgc2lnX2F0ZXhpdCh2b2lkKQogeworCWlmIChjaGlsZF9waWQgIT0gLTEpCisJCWtpbGwoY2hpbGRfcGlkLCBTSUdURVJNKTsKKwogCWlmIChzaWduciA9PSAtMSkKIAkJcmV0dXJuOwogCkBAIC00MjIsNyArNDI2LDcgQEAKIAlpZiAoZmRbbnJfY3B1XVtjb3VudGVyXSA8IDApIHsKIAkJaW50IGVyciA9IGVycm5vOwogCi0JCWlmIChlcnIgPT0gRVBFUk0pCisJCWlmIChlcnIgPT0gRVBFUk0gfHwgZXJyID09IEVBQ0NFUykKIAkJCWRpZSgiUGVybWlzc2lvbiBlcnJvciAtIGFyZSB5b3Ugcm9vdD9cbiIpOwogCQllbHNlIGlmIChlcnIgPT0gIEVOT0RFViAmJiBwcm9maWxlX2NwdSAhPSAtMSkKIAkJCWRpZSgiTm8gc3VjaCBkZXZpY2UgLSBkaWQgeW91IHNwZWNpZnkgYW4gb3V0LW9mLXJhbmdlIHByb2ZpbGUgQ1BVP1xuIik7CkBAIC02MTAsNiArNjE0LDggQEAKIAkJCQlleGl0KC0xKTsKIAkJCX0KIAkJfQorCisJCWNoaWxkX3BpZCA9IHBpZDsKIAl9CiAKIAlpZiAocmVhbHRpbWVfcHJpbykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjaGVkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwppbmRleCBlYTljMTVjLi5jZTJkNWJlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTI4Nyw3ICsxMjg3LDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChzb3J0X2xpc3QpOwogCi1zdGF0aWMgaW50IHNvcnRfZGltZW5zaW9uX19hZGQoY2hhciAqdG9rLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorc3RhdGljIGludCBzb3J0X2RpbWVuc2lvbl9fYWRkKGNvbnN0IGNoYXIgKnRvaywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlpbnQgaTsKIApAQCAtMTkxNyw3ICsxOTE3LDcgQEAKIAogCWZyZWUoc3RyKTsKIAotCXNvcnRfZGltZW5zaW9uX19hZGQoKGNoYXIgKikicGlkIiwgJmNtcF9waWQpOworCXNvcnRfZGltZW5zaW9uX19hZGQoInBpZCIsICZjbXBfcGlkKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnJlY29yZF9hcmdzW10gPSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCAxNmFmMmQ4Li4zZGIzMWU3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTY5LDcgKzY5LDggQEAKIHN0YXRpYyBpbnQJCQlydW5fY291bnQJCQk9ICAxOwogc3RhdGljIGludAkJCWluaGVyaXQJCQkJPSAgMTsKIHN0YXRpYyBpbnQJCQlzY2FsZQkJCQk9ICAxOwotc3RhdGljIGludAkJCXRhcmdldF9waWQJCQk9IC0xOworc3RhdGljIHBpZF90CQkJdGFyZ2V0X3BpZAkJCT0gLTE7CitzdGF0aWMgcGlkX3QJCQljaGlsZF9waWQJCQk9IC0xOwogc3RhdGljIGludAkJCW51bGxfcnVuCQkJPSAgMDsKIAogc3RhdGljIGludAkJCWZkW01BWF9OUl9DUFVTXVtNQVhfQ09VTlRFUlNdOwpAQCAtMjg1LDYgKzI4Niw4IEBACiAJCWV4aXQoLTEpOwogCX0KIAorCWNoaWxkX3BpZCA9IHBpZDsKKwogCS8qCiAJICogV2FpdCBmb3IgdGhlIGNoaWxkIHRvIGJlIHJlYWR5IHRvIGV4ZWMuCiAJICovCkBAIC0zMzgsMTQgKzM0MSwyNCBAQAogCiBzdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNvdW50ZXIsIGRvdWJsZSBhdmcpCiB7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwogCWZwcmludGYoc3RkZXJyLCAiICUxNC4wZiAgJS0yNHMiLCBhdmcsIGV2ZW50X25hbWUoY291bnRlcikpOwogCiAJaWYgKE1BVENIX0VWRU5UKEhBUkRXQVJFLCBIV19JTlNUUlVDVElPTlMsIGNvdW50ZXIpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIElQQyAgIiwKLQkJCQlhdmcgLyBhdmdfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzKSk7CisJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0cyk7CisKKwkJaWYgKHRvdGFsKQorCQkJcmF0aW8gPSBhdmcgLyB0b3RhbDsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBJUEMgICIsIHJhdGlvKTsKIAl9IGVsc2UgewotCQlmcHJpbnRmKHN0ZGVyciwgIiAjICUxMC4zZiBNL3NlYyIsCi0JCQkJMTAwMC4wICogYXZnIC8gYXZnX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzKSk7CisJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzKTsKKworCQlpZiAodG90YWwpCisJCQlyYXRpbyA9IDEwMDAuMCAqIGF2ZyAvIHRvdGFsOworCisJCWZwcmludGYoc3RkZXJyLCAiICMgJTEwLjNmIE0vc2VjIiwgcmF0aW8pOwogCX0KIH0KIApAQCAtNDIzLDYgKzQzNiw5IEBACiAKIHN0YXRpYyB2b2lkIHNpZ19hdGV4aXQodm9pZCkKIHsKKwlpZiAoY2hpbGRfcGlkICE9IC0xKQorCQlraWxsKGNoaWxkX3BpZCwgU0lHVEVSTSk7CisKIAlpZiAoc2lnbnIgPT0gLTEpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDQ0MDU2ODEuLmU4YTUxMGQ5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCkBAIC00Niw2ICs0Niw4IEBACiAKIHN0YXRpYyB1NjQJCWZpcnN0X3RpbWUsIGxhc3RfdGltZTsKIAorc3RhdGljIGludAkJcG93ZXJfb25seTsKKwogCiBzdGF0aWMgc3RydWN0IHBlcmZfaGVhZGVyCSpoZWFkZXI7CiAKQEAgLTU0Nyw3ICs1NDksNyBAQAogCXU2NCBjcHU7CiAJc3RydWN0IHBvd2VyX2V2ZW50ICpwd3I7CiAKLQlmb3IgKGNwdSA9IDA7IGNwdSA8IG51bWNwdXM7IGNwdSsrKSB7CisJZm9yIChjcHUgPSAwOyBjcHUgPD0gbnVtY3B1czsgY3B1KyspIHsKIAkJcHdyID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgcG93ZXJfZXZlbnQpKTsKIAkJaWYgKCFwd3IpCiAJCQlyZXR1cm47CkBAIC03NjMsMTkgKzc2NSw0MCBAQAogCQkJCQlpZiAoYy0+WSAmJiBjLT5zdGFydF90aW1lIDw9IHdlLT50aW1lICYmIGMtPmVuZF90aW1lID49IHdlLT50aW1lKSB7CiAJCQkJCQlpZiAocC0+cGlkID09IHdlLT53YWtlcikgewogCQkJCQkJCWZyb20gPSBjLT5ZOwotCQkJCQkJCXRhc2tfZnJvbSA9IGMtPmNvbW07CisJCQkJCQkJdGFza19mcm9tID0gc3RyZHVwKGMtPmNvbW0pOwogCQkJCQkJfQogCQkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZWUpIHsKIAkJCQkJCQl0byA9IGMtPlk7Ci0JCQkJCQkJdGFza190byA9IGMtPmNvbW07CisJCQkJCQkJdGFza190byA9IHN0cmR1cChjLT5jb21tKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQljID0gYy0+bmV4dDsKIAkJCQl9CisJCQkJYyA9IHAtPmFsbDsKKwkJCQl3aGlsZSAoYykgeworCQkJCQlpZiAocC0+cGlkID09IHdlLT53YWtlciAmJiAhZnJvbSkgeworCQkJCQkJZnJvbSA9IGMtPlk7CisJCQkJCQl0YXNrX2Zyb20gPSBzdHJkdXAoYy0+Y29tbSk7CisJCQkJCX0KKwkJCQkJaWYgKHAtPnBpZCA9PSB3ZS0+d2FrZWUgJiYgIXRvKSB7CisJCQkJCQl0byA9IGMtPlk7CisJCQkJCQl0YXNrX3RvID0gc3RyZHVwKGMtPmNvbW0pOworCQkJCQl9CisJCQkJCWMgPSBjLT5uZXh0OworCQkJCX0KIAkJCX0KIAkJCXAgPSBwLT5uZXh0OwogCQl9CiAKKwkJaWYgKCF0YXNrX2Zyb20pIHsKKwkJCXRhc2tfZnJvbSA9IG1hbGxvYyg0MCk7CisJCQlzcHJpbnRmKHRhc2tfZnJvbSwgIlslaV0iLCB3ZS0+d2FrZXIpOworCQl9CisJCWlmICghdGFza190bykgeworCQkJdGFza190byA9IG1hbGxvYyg0MCk7CisJCQlzcHJpbnRmKHRhc2tfdG8sICJbJWldIiwgd2UtPndha2VlKTsKKwkJfQorCiAJCWlmICh3ZS0+d2FrZXIgPT0gLTEpCiAJCQlzdmdfaW50ZXJydXB0KHdlLT50aW1lLCB0byk7CiAJCWVsc2UgaWYgKGZyb20gJiYgdG8gJiYgYWJzKGZyb20gLSB0bykgPT0gMSkKQEAgLTc4Myw2ICs4MDYsOSBAQAogCQllbHNlCiAJCQlzdmdfcGFydGlhbF93YWtlbGluZSh3ZS0+dGltZSwgZnJvbSwgdGFza19mcm9tLCB0bywgdGFza190byk7CiAJCXdlID0gd2UtPm5leHQ7CisKKwkJZnJlZSh0YXNrX2Zyb20pOworCQlmcmVlKHRhc2tfdG8pOwogCX0KIH0KIApAQCAtODcxLDcgKzg5Nyw3IEBACiAJCS8qIG5vIGV4aXQgbWFya2VyLCB0YXNrIGtlcHQgcnVubmluZyB0byB0aGUgZW5kICovCiAJCWlmIChwLT5lbmRfdGltZSA9PSAwKQogCQkJcC0+ZW5kX3RpbWUgPSBsYXN0X3RpbWU7Ci0JCWlmIChwLT50b3RhbF90aW1lID49IHRocmVzaG9sZCkKKwkJaWYgKHAtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkICYmICFwb3dlcl9vbmx5KQogCQkJcC0+ZGlzcGxheSA9IDE7CiAKIAkJYyA9IHAtPmFsbDsKQEAgLTg4Miw3ICs5MDgsNyBAQAogCQkJaWYgKGMtPnN0YXJ0X3RpbWUgPT0gMSkKIAkJCQljLT5zdGFydF90aW1lID0gZmlyc3RfdGltZTsKIAotCQkJaWYgKGMtPnRvdGFsX3RpbWUgPj0gdGhyZXNob2xkKSB7CisJCQlpZiAoYy0+dG90YWxfdGltZSA+PSB0aHJlc2hvbGQgJiYgIXBvd2VyX29ubHkpIHsKIAkJCQljLT5kaXNwbGF5ID0gMTsKIAkJCQljb3VudCsrOwogCQkJfQpAQCAtMTEzNCw2ICsxMTYwLDggQEAKIAkJICAgICJvdXRwdXQgZmlsZSBuYW1lIiksCiAJT1BUX0lOVEVHRVIoJ3cnLCAid2lkdGgiLCAmc3ZnX3BhZ2Vfd2lkdGgsCiAJCSAgICAicGFnZSB3aWR0aCIpLAorCU9QVF9CT09MRUFOKCdwJywgInBvd2VyLW9ubHkiLCAmcG93ZXJfb25seSwKKwkJICAgICJvdXRwdXQgcG93ZXIgZGF0YSBvbmx5IiksCiAJT1BUX0VORCgpCiB9OwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggMWNhODg4OS4uZTIzYmM3NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtNjg2LDYgKzY4Niw4IEBACiAJc3dpdGNoIChjKSB7CiAJCWNhc2UgJ2QnOgogCQkJcHJvbXB0X2ludGVnZXIoJmRlbGF5X3NlY3MsICJFbnRlciBkaXNwbGF5IGRlbGF5Iik7CisJCQlpZiAoZGVsYXlfc2VjcyA8IDEpCisJCQkJZGVsYXlfc2VjcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSAnZSc6CiAJCQlwcm9tcHRfaW50ZWdlcigmcHJpbnRfZW50cmllcywgIkVudGVyIGRpc3BsYXkgZW50cmllcyAobGluZXMpIik7CkBAIC03ODIsNiArNzg0LDcgQEAKIAkiZXhpdF9pZGxlIiwKIAkibXdhaXRfaWRsZSIsCiAJIm13YWl0X2lkbGVfd2l0aF9oaW50cyIsCisJInBvbGxfaWRsZSIsCiAJInBwYzY0X3J1bmxhdGNoX29mZiIsCiAJInBzZXJpZXNfZGVkaWNhdGVkX2lkbGVfc2xlZXAiLAogCU5VTEwKQEAgLTEwMjQsNyArMTAyNyw3IEBACiAJaWYgKGZkW2ldW2NvdW50ZXJdIDwgMCkgewogCQlpbnQgZXJyID0gZXJybm87CiAKLQkJaWYgKGVyciA9PSBFUEVSTSkKKwkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKQogCQkJZGllKCJObyBwZXJtaXNzaW9uIC0gYXJlIHlvdSByb290P1xuIik7CiAJCS8qCiAJCSAqIElmIGl0J3MgY3ljbGVzIHRoZW4gZmFsbCBiYWNrIHRvIGhydGltZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10cmFjZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKaW5kZXggZTlkMjU2ZS4uMGM1ZTRmNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTIxOSwxMCArMjE5LDYgQEAKIG1vcmU6CiAJZXZlbnQgPSAoZXZlbnRfdCAqKShidWYgKyBoZWFkKTsKIAotCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7Ci0JaWYgKCFzaXplKQotCQlzaXplID0gODsKLQogCWlmIChoZWFkICsgZXZlbnQtPmhlYWRlci5zaXplID49IHBhZ2Vfc2l6ZSAqIG1tYXBfd2luZG93KSB7CiAJCXVuc2lnbmVkIGxvbmcgc2hpZnQgPSBwYWdlX3NpemUgKiAoaGVhZCAvIHBhZ2Vfc2l6ZSk7CiAJCWludCByZXM7CkBAIC0yMzcsNyArMjMzLDYgQEAKIAogCXNpemUgPSBldmVudC0+aGVhZGVyLnNpemU7CiAKLQogCWlmICghc2l6ZSB8fCBwcm9jZXNzX2V2ZW50KGV2ZW50LCBvZmZzZXQsIGhlYWQpIDwgMCkgewogCiAJCS8qCkBAIC0yOTAsNyArMjg1LDYgQEAKIAkJCXVzYWdlX3dpdGhfb3B0aW9ucyhhbm5vdGF0ZV91c2FnZSwgb3B0aW9ucyk7CiAJfQogCi0KIAlzZXR1cF9wYWdlcigpOwogCiAJcmV0dXJuIF9fY21kX3RyYWNlKCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2Rlc2lnbi50eHQgYi90b29scy9wZXJmL2Rlc2lnbi50eHQKaW5kZXggZjE5NDZkMS4uZmRkNDJhOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9kZXNpZ24udHh0CisrKyBiL3Rvb2xzL3BlcmYvZGVzaWduLnR4dApAQCAtNDU1LDMgKzQ1NSw2IEBACiAKIElmIHlvdXIgYXJjaGl0ZWN0dXJlIGRvZXMgaGF2ZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlCiB3ZWFrIHN0dWIgaHdfcGVyZl9ldmVudF9pbml0KCkgdG8gcmVnaXN0ZXIgaGFyZHdhcmUgY291bnRlcnMuCisKK0FyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIGQtY2FjaGUgYWxpYXNzaW5nIGlzc3Vlcywgc3VjaCBhcyBTcGFyYyBhbmQgQVJNLAorc2hvdWxkIHNlbGVjdCBQRVJGX1VTRV9WTUFMTE9DIGluIG9yZGVyIHRvIGF2b2lkIHRoZXNlIGZvciBwZXJmIG1tYXAoKS4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KaW5kZXggYzU2MWQxNS4uNTQ1NTJhMCAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KKysrIGIvdG9vbHMvcGVyZi91dGlsL1BFUkYtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPVBFUkYtVkVSU0lPTi1GSUxFCi1ERUZfVkVSPXYwLjAuMS5QRVJGCitERUZfVkVSPXYwLjAuMi5QRVJGCiAKIExGPScKICcKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwppbmRleCAzZDU2N2ZlLi4wZDhjODVkZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL21vZHVsZS5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9tb2R1bGUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlICJtb2R1bGUuaCIKIAogI2luY2x1ZGUgPGxpYmVsZi5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgogI2luY2x1ZGUgPGdlbGYuaD4KICNpbmNsdWRlIDxlbGYuaD4KICNpbmNsdWRlIDxkaXJlbnQuaD4KQEAgLTQwOSwzNSArNDEwLDQwIEBACiBzdGF0aWMgaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlX3BhdGhzKHN0cnVjdCBtb2RfZHNvICpzZWxmKQogewogCXN0cnVjdCB1dHNuYW1lIHV0czsKLQlpbnQgY291bnQgPSAwLCBsZW47CisJaW50IGNvdW50ID0gMCwgbGVuLCBlcnIgPSAtMTsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlGSUxFICpmaWxlOwotCWNoYXIgKnBhdGg7CisJY2hhciAqZHBhdGgsICpkaXI7CiAJc2l6ZV90IG47CiAKIAlpZiAodW5hbWUoJnV0cykgPCAwKQotCQlnb3RvIG91dF9mYWlsdXJlOworCQlyZXR1cm4gZXJyOwogCiAJbGVuID0gc3RybGVuKCIvbGliL21vZHVsZXMvIik7CiAJbGVuICs9IHN0cmxlbih1dHMucmVsZWFzZSk7CiAJbGVuICs9IHN0cmxlbigiL21vZHVsZXMuZGVwIik7CiAKLQlwYXRoID0gY2FsbG9jKDEsIGxlbik7Ci0JaWYgKHBhdGggPT0gTlVMTCkKLQkJZ290byBvdXRfZmFpbHVyZTsKKwlkcGF0aCA9IGNhbGxvYygxLCBsZW4gKyAxKTsKKwlpZiAoZHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIGVycjsKIAotCXN0cmNhdChwYXRoLCAiL2xpYi9tb2R1bGVzLyIpOwotCXN0cmNhdChwYXRoLCB1dHMucmVsZWFzZSk7Ci0Jc3RyY2F0KHBhdGgsICIvbW9kdWxlcy5kZXAiKTsKKwlzdHJjYXQoZHBhdGgsICIvbGliL21vZHVsZXMvIik7CisJc3RyY2F0KGRwYXRoLCB1dHMucmVsZWFzZSk7CisJc3RyY2F0KGRwYXRoLCAiL21vZHVsZXMuZGVwIik7CiAKLQlmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKLQlmcmVlKHBhdGgpOworCWZpbGUgPSBmb3BlbihkcGF0aCwgInIiKTsKIAlpZiAoZmlsZSA9PSBOVUxMKQogCQlnb3RvIG91dF9mYWlsdXJlOwogCisJZGlyID0gZGlybmFtZShkcGF0aCk7CisJaWYgKCFkaXIpCisJCWdvdG8gb3V0X2ZhaWx1cmU7CisJc3RyY2F0KGRpciwgIi8iKTsKKwogCXdoaWxlICghZmVvZihmaWxlKSkgewotCQljaGFyICpuYW1lLCAqdG1wOwogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJCWNoYXIgKm5hbWUsICpwYXRoLCAqdG1wOworCQlGSUxFICptb2RmaWxlOwogCQlpbnQgbGluZV9sZW47CiAKIAkJbGluZV9sZW4gPSBnZXRsaW5lKCZsaW5lLCAmbiwgZmlsZSk7CkBAIC00NDUsMTcgKzQ1MSw0MSBAQAogCQkJYnJlYWs7CiAKIAkJaWYgKCFsaW5lKQotCQkJZ290byBvdXRfZmFpbHVyZTsKKwkJCWJyZWFrOwogCiAJCWxpbmVbLS1saW5lX2xlbl0gPSAnXDAnOyAvKiBcbiAqLwogCi0JCXBhdGggPSBzdHJ0b2sobGluZSwgIjoiKTsKKwkJcGF0aCA9IHN0cmNocihsaW5lLCAnOicpOwogCQlpZiAoIXBhdGgpCi0JCQlnb3RvIG91dF9mYWlsdXJlOworCQkJYnJlYWs7CisJCSpwYXRoID0gJ1wwJzsKKworCQlwYXRoID0gc3RyZHVwKGxpbmUpOworCQlpZiAoIXBhdGgpCisJCQlicmVhazsKKworCQlpZiAoIXN0cnN0cihwYXRoLCBkaXIpKSB7CisJCQlpZiAoc3RybmNtcChwYXRoLCAia2VybmVsLyIsIDcpKQorCQkJCWJyZWFrOworCisJCQlmcmVlKHBhdGgpOworCQkJcGF0aCA9IGNhbGxvYygxLCBzdHJsZW4oZGlyKSArIHN0cmxlbihsaW5lKSArIDEpOworCQkJaWYgKCFwYXRoKQorCQkJCWJyZWFrOworCQkJc3RyY2F0KHBhdGgsIGRpcik7CisJCQlzdHJjYXQocGF0aCwgbGluZSk7CisJCX0KKworCQltb2RmaWxlID0gZm9wZW4ocGF0aCwgInIiKTsKKwkJaWYgKG1vZGZpbGUgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlmY2xvc2UobW9kZmlsZSk7CiAKIAkJbmFtZSA9IHN0cmR1cChwYXRoKTsKLQkJbmFtZSA9IHN0cnRvayhuYW1lLCAiLyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKIAorCQluYW1lID0gc3RydG9rKG5hbWUsICIvIik7CiAJCXRtcCA9IG5hbWU7CiAKIAkJd2hpbGUgKHRtcCkgewpAQCAtNDYzLDI2ICs0OTMsMjUgQEAKIAkJCWlmICh0bXApCiAJCQkJbmFtZSA9IHRtcDsKIAkJfQotCQluYW1lID0gc3Ryc2VwKCZuYW1lLCAiLiIpOwogCi0JCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBzb3VuZCBtb2R1bGVzICovCisJCW5hbWUgPSBzdHJzZXAoJm5hbWUsICIuIik7CisJCWlmICghbmFtZSkKKwkJCWJyZWFrOworCisJCS8qIFF1aXJrOiByZXBsYWNlICctJyB3aXRoICdfJyBpbiBhbGwgbW9kdWxlcyAqLwogCQlmb3IgKGxlbiA9IHN0cmxlbihuYW1lKTsgbGVuOyBsZW4tLSkgewogCQkJaWYgKCoobmFtZStsZW4pID09ICctJykKIAkJCQkqKG5hbWUrbGVuKSA9ICdfJzsKIAkJfQogCiAJCW1vZHVsZSA9IG1vZHVsZV9fbmV3KG5hbWUsIHBhdGgpOwotCQlpZiAoIW1vZHVsZSkgewotCQkJZnByaW50ZihzdGRlcnIsICJsb2FkX21vZHVsZV9wYXRoczogYWxsb2NhdGlvbiBlcnJvclxuIik7Ci0JCQlnb3RvIG91dF9mYWlsdXJlOwotCQl9CisJCWlmICghbW9kdWxlKQorCQkJYnJlYWs7CiAJCW1vZF9kc29fX2luc2VydF9tb2R1bGUoc2VsZiwgbW9kdWxlKTsKIAogCQltb2R1bGUtPnNlY3Rpb25zID0gc2VjX2Rzb19fbmV3X2Rzbygic2VjdGlvbnMiKTsKLQkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImxvYWRfbW9kdWxlX3BhdGhzOiBhbGxvY2F0aW9uIGVycm9yXG4iKTsKLQkJCWdvdG8gb3V0X2ZhaWx1cmU7Ci0JCX0KKwkJaWYgKCFtb2R1bGUtPnNlY3Rpb25zKQorCQkJYnJlYWs7CiAKIAkJbW9kdWxlLT5hY3RpdmUgPSBtb2RfZHNvX19sb2FkX3NlY3Rpb25zKG1vZHVsZSk7CiAKQEAgLTQ5MCwxMyArNTE5LDIwIEBACiAJCQljb3VudCsrOwogCX0KIAotCWZyZWUobGluZSk7Ci0JZmNsb3NlKGZpbGUpOwotCi0JcmV0dXJuIGNvdW50OworCWlmIChmZW9mKGZpbGUpKQorCQllcnIgPSBjb3VudDsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAibG9hZF9tb2R1bGVfcGF0aHM6IG1vZHVsZXMuZGVwIHBhcnNpbmcgZmFpbHVyZSFcbiIpOwogCiBvdXRfZmFpbHVyZToKLQlyZXR1cm4gLTE7CisJaWYgKGRwYXRoKQorCQlmcmVlKGRwYXRoKTsKKwlpZiAoZmlsZSkKKwkJZmNsb3NlKGZpbGUpOworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworCisJcmV0dXJuIGVycjsKIH0KIAogaW50IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhzdHJ1Y3QgbW9kX2RzbyAqZHNvKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IDEzYWI0YjguLjhjZmI0OGMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTE2NSwzMyArMTY1LDMxIEBACiAJRElSICpzeXNfZGlyLCAqZXZ0X2RpcjsKIAlzdHJ1Y3QgZGlyZW50ICpzeXNfbmV4dCwgKmV2dF9uZXh0LCBzeXNfZGlyZW50LCBldnRfZGlyZW50OwogCWNoYXIgaWRfYnVmWzRdOwotCWludCBzeXNfZGlyX2ZkLCBmZDsKKwlpbnQgZmQ7CiAJdTY0IGlkOwogCWNoYXIgZXZ0X3BhdGhbTUFYUEFUSExFTl07CisJY2hhciBkaXJfcGF0aFtNQVhQQVRITEVOXTsKIAogCWlmICh2YWxpZF9kZWJ1Z2ZzX21vdW50KGRlYnVnZnNfcGF0aCkpCiAJCXJldHVybiBOVUxMOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybiBOVUxMOwogCiAJZm9yX2VhY2hfc3Vic3lzdGVtKHN5c19kaXIsIHN5c19kaXJlbnQsIHN5c19uZXh0KSB7Ci0JCWludCBkZmQgPSBvcGVuYXQoc3lzX2Rpcl9mZCwgc3lzX2RpcmVudC5kX25hbWUsCi0JCQkJIE9fUkRPTkxZfE9fRElSRUNUT1JZKSwgZXZ0X2Rpcl9mZDsKLQkJaWYgKGRmZCA9PSAtMSkKKworCQlzbnByaW50ZihkaXJfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgZGVidWdmc19wYXRoLAorCQkJIHN5c19kaXJlbnQuZF9uYW1lKTsKKwkJZXZ0X2RpciA9IG9wZW5kaXIoZGlyX3BhdGgpOworCQlpZiAoIWV2dF9kaXIpCiAJCQljb250aW51ZTsKLQkJZXZ0X2RpciA9IGZkb3BlbmRpcihkZmQpOwotCQlpZiAoIWV2dF9kaXIpIHsKLQkJCWNsb3NlKGRmZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlldnRfZGlyX2ZkID0gZGlyZmQoZXZ0X2Rpcik7CisKIAkJZm9yX2VhY2hfZXZlbnQoc3lzX2RpcmVudCwgZXZ0X2RpciwgZXZ0X2RpcmVudCwgZXZ0X25leHQpIHsKLQkJCXNucHJpbnRmKGV2dF9wYXRoLCBNQVhQQVRITEVOLCAiJXMvaWQiLAorCisJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzLyVzL2lkIiwgZGlyX3BhdGgsCiAJCQkJIGV2dF9kaXJlbnQuZF9uYW1lKTsKLQkJCWZkID0gb3BlbmF0KGV2dF9kaXJfZmQsIGV2dF9wYXRoLCBPX1JET05MWSk7CisJCQlmZCA9IG9wZW4oZXZ0X3BhdGgsIE9fUkRPTkxZKTsKIAkJCWlmIChmZCA8IDApCiAJCQkJY29udGludWU7CiAJCQlpZiAocmVhZChmZCwgaWRfYnVmLCBzaXplb2YoaWRfYnVmKSkgPCAwKSB7CkBAIC0yMjUsNyArMjIzLDYgQEAKIAkJY2xvc2VkaXIoZXZ0X2Rpcik7CiAJfQogCi1jbGVhbnVwOgogCWNsb3NlZGlyKHN5c19kaXIpOwogCXJldHVybiBOVUxMOwogfQpAQCAtNjk0LDcgKzY5MSwxMCBAQAogCUZJTEUgKmZpbGU7CiAJaW50IGlkOwogCi0Jc3ByaW50ZihmaWxlbmFtZSwgIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvZXZlbnRzLyVzL2lkIiwgb3JnbmFtZSk7CisJc3ByaW50ZihmaWxlbmFtZSwgIiVzLyIsIGRlYnVnZnNfcGF0aCk7CisJc3RybmNhdChmaWxlbmFtZSwgb3JnbmFtZSwgc3RybGVuKG9yZ25hbWUpKTsKKwlzdHJjYXQoZmlsZW5hbWUsICIvaWQiKTsKKwogCWMgPSBzdHJjaHIoZmlsZW5hbWUsICc6Jyk7CiAJaWYgKGMpCiAJCSpjID0gJy8nOwpAQCAtNzYxLDI4ICs3NjEsMjQgQEAKIHsKIAlESVIgKnN5c19kaXIsICpldnRfZGlyOwogCXN0cnVjdCBkaXJlbnQgKnN5c19uZXh0LCAqZXZ0X25leHQsIHN5c19kaXJlbnQsIGV2dF9kaXJlbnQ7Ci0JaW50IHN5c19kaXJfZmQ7CiAJY2hhciBldnRfcGF0aFtNQVhQQVRITEVOXTsKKwljaGFyIGRpcl9wYXRoW01BWFBBVEhMRU5dOwogCiAJaWYgKHZhbGlkX2RlYnVnZnNfbW91bnQoZGVidWdmc19wYXRoKSkKIAkJcmV0dXJuOwogCiAJc3lzX2RpciA9IG9wZW5kaXIoZGVidWdmc19wYXRoKTsKIAlpZiAoIXN5c19kaXIpCi0JCWdvdG8gY2xlYW51cDsKLQlzeXNfZGlyX2ZkID0gZGlyZmQoc3lzX2Rpcik7CisJCXJldHVybjsKIAogCWZvcl9lYWNoX3N1YnN5c3RlbShzeXNfZGlyLCBzeXNfZGlyZW50LCBzeXNfbmV4dCkgewotCQlpbnQgZGZkID0gb3BlbmF0KHN5c19kaXJfZmQsIHN5c19kaXJlbnQuZF9uYW1lLAotCQkJCSBPX1JET05MWXxPX0RJUkVDVE9SWSksIGV2dF9kaXJfZmQ7Ci0JCWlmIChkZmQgPT0gLTEpCisKKwkJc25wcmludGYoZGlyX3BhdGgsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGRlYnVnZnNfcGF0aCwKKwkJCSBzeXNfZGlyZW50LmRfbmFtZSk7CisJCWV2dF9kaXIgPSBvcGVuZGlyKGRpcl9wYXRoKTsKKwkJaWYgKCFldnRfZGlyKQogCQkJY29udGludWU7Ci0JCWV2dF9kaXIgPSBmZG9wZW5kaXIoZGZkKTsKLQkJaWYgKCFldnRfZGlyKSB7Ci0JCQljbG9zZShkZmQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJZXZ0X2Rpcl9mZCA9IGRpcmZkKGV2dF9kaXIpOworCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7CiAJCQlzbnByaW50ZihldnRfcGF0aCwgTUFYUEFUSExFTiwgIiVzOiVzIiwKIAkJCQkgc3lzX2RpcmVudC5kX25hbWUsIGV2dF9kaXJlbnQuZF9uYW1lKTsKQEAgLTc5MSw4ICs3ODcsNiBAQAogCQl9CiAJCWNsb3NlZGlyKGV2dF9kaXIpOwogCX0KLQotY2xlYW51cDoKIAljbG9zZWRpcihzeXNfZGlyKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jIGIvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCmluZGV4IGE3NzhmZDAuLmIzNjM3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogaW50IHN2Z19wYWdlX3dpZHRoID0gMTAwMDsKIAotI2RlZmluZSBNSU5fVEVYVF9TSVpFIDAuMDAxCisjZGVmaW5lIE1JTl9URVhUX1NJWkUgMC4wMQogCiBzdGF0aWMgdTY0IHRvdGFsX2hlaWdodDsKIHN0YXRpYyBGSUxFICpzdmdmaWxlOwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5wcm9jZXNzMiB7IGZpbGw6cmdiKDE4MCwxODAsMTgwKTsgZmlsbC1vcGFjaXR5OjAuOTsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnNhbXBsZSAgIHsgZmlsbDpyZ2IoICAwLCAgMCwyNTUpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuYmxvY2tlZCAgeyBmaWxsOnJnYigyNTUsICAwLCAgMCk7IGZpbGwtb3BhY2l0eTowLjU7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7Ci0JZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC53YWl0aW5nICB7IGZpbGw6cmdiKDIxNCwyMTQsICAwKTsgZmlsbC1vcGFjaXR5OjAuMzsgc3Ryb2tlLXdpZHRoOjA7ICAgc3Ryb2tlOnJnYiggIDAsICAwLCAgMCk7IH0gXG4iKTsKKwlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LndhaXRpbmcgIHsgZmlsbDpyZ2IoMjI0LDIxNCwgIDApOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgICBzdHJva2U6cmdiKCAgMCwgIDAsICAwKTsgfSBcbiIpOwogCWZwcmludGYoc3ZnZmlsZSwgIiAgICAgIHJlY3QuV0FJVElORyAgeyBmaWxsOnJnYigyNTUsMjE0LCA0OCk7IGZpbGwtb3BhY2l0eTowLjY7IHN0cm9rZS13aWR0aDowOyAgIHN0cm9rZTpyZ2IoICAwLCAgMCwgIDApOyB9IFxuIik7CiAJZnByaW50ZihzdmdmaWxlLCAiICAgICAgcmVjdC5jcHUgICAgICB7IGZpbGw6cmdiKDE5MiwxOTIsMTkyKTsgZmlsbC1vcGFjaXR5OjAuMjsgc3Ryb2tlLXdpZHRoOjAuNTsgc3Ryb2tlOnJnYigxMjgsMTI4LDEyOCk7IH0gXG4iKTsKIAlmcHJpbnRmKHN2Z2ZpbGUsICIgICAgICByZWN0LnBzdGF0ZSAgIHsgZmlsbDpyZ2IoMTI4LDEyOCwxMjgpOyBmaWxsLW9wYWNpdHk6MC44OyBzdHJva2Utd2lkdGg6MDsgfSBcbiIpOwpAQCAtMjE3LDYgKzIxNywxOCBAQAogCQl9CiAJCWZjbG9zZShmaWxlKTsKIAl9CisKKwkvKiBDUFUgdHlwZSAqLworCWZpbGUgPSBmb3BlbigiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwgInIiKTsKKwlpZiAoZmlsZSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCAyNTUsIGZpbGUpKSB7CisJCQl1bnNpZ25lZCBpbnQgZnJlcTsKKwkJCWZyZXEgPSBzdHJ0b3VsbChidWYsIE5VTEwsIDEwKTsKKwkJCWlmIChmcmVxID4gbWF4X2ZyZXEpCisJCQkJbWF4X2ZyZXEgPSBmcmVxOworCQl9CisJCWZjbG9zZShmaWxlKTsKKwl9CiAJcmV0dXJuIGNwdV9tOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKaW5kZXggZmQzZDljOC4uMjI2ZjQ0YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwpAQCAtMzI0LDggKzMyNCw3IEBACiB7CiAJcmV0dXJuIGVsZl9zeW1fX3R5cGUoc3ltKSA9PSBTVFRfRlVOQyAmJgogCSAgICAgICBzeW0tPnN0X25hbWUgIT0gMCAmJgotCSAgICAgICBzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgotCSAgICAgICBzeW0tPnN0X3NpemUgIT0gMDsKKwkgICAgICAgc3ltLT5zdF9zaG5keCAhPSBTSE5fVU5ERUY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVsZl9zeW1fX2lzX2xhYmVsKGNvbnN0IEdFbGZfU3ltICpzeW0pCkBAIC00MTQsNyArNDEzLDcgQEAKIAlpZiAoZmQgPCAwKQogCQlnb3RvIG91dDsKIAotCWVsZiA9IGVsZl9iZWdpbihmZCwgRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKKwllbGYgPSBlbGZfYmVnaW4oZmQsIFBFUkZfRUxGX0NfUkVBRF9NTUFQLCBOVUxMKTsKIAlpZiAoZWxmID09IE5VTEwpCiAJCWdvdG8gb3V0X2Nsb3NlOwogCkBAIC01MzQsNyArNTMzLDcgQEAKIAlFbGYgKmVsZjsKIAlpbnQgbnIgPSAwLCBrZXJuZWwgPSAhc3RyY21wKCJba2VybmVsXSIsIHNlbGYtPm5hbWUpOwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTY3Niw3ICs2NzUsNyBAQAogCWlmIChmZCA8IDApCiAJCWdvdG8gb3V0OwogCi0JZWxmID0gZWxmX2JlZ2luKGZkLCBFTEZfQ19SRUFEX01NQVAsIE5VTEwpOworCWVsZiA9IGVsZl9iZWdpbihmZCwgUEVSRl9FTEZfQ19SRUFEX01NQVAsIE5VTEwpOwogCWlmIChlbGYgPT0gTlVMTCkgewogCQlpZiAodikKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbm5vdCByZWFkICVzIEVMRiBmaWxlLlxuIiwKQEAgLTgzMyw3ICs4MzIsNyBAQAogCXN0cnVjdCBtb2RfZHNvICptb2RzID0gbW9kX2Rzb19fbmV3X2RzbygibW9kdWxlcyIpOwogCXN0cnVjdCBtb2R1bGUgKnBvczsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQlpbnQgZXJyOworCWludCBlcnIsIGNvdW50ID0gMDsKIAogCWVyciA9IG1vZF9kc29fX2xvYWRfbW9kdWxlcyhtb2RzKTsKIApAQCAtODUyLDE0ICs4NTEsMTYgQEAKIAkJCWJyZWFrOwogCiAJCW5leHQgPSByYl9uZXh0KCZwb3MtPnJiX25vZGUpOworCQljb3VudCArPSBlcnI7CiAJfQogCiAJaWYgKGVyciA8IDApIHsKIAkJbW9kX2Rzb19fZGVsZXRlX21vZHVsZXMobW9kcyk7CiAJCW1vZF9kc29fX2RlbGV0ZV9zZWxmKG1vZHMpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlcnI7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHNvX19maWxsX3N5bWJvbF9ob2xlcyhzdHJ1Y3QgZHNvICpzZWxmKQpAQCAtOTEzLDggKzkxNCwxNSBAQAogCiAJaWYgKHZtbGludXgpIHsKIAkJZXJyID0gZHNvX19sb2FkX3ZtbGludXgoc2VsZiwgdm1saW51eCwgZmlsdGVyLCB2KTsKLQkJaWYgKGVyciA+IDAgJiYgdXNlX21vZHVsZXMpCi0JCQllcnIgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCQlpZiAoZXJyID4gMCAmJiB1c2VfbW9kdWxlcykgeworCQkJaW50IHN5bXMgPSBkc29fX2xvYWRfbW9kdWxlcyhzZWxmLCBmaWx0ZXIsIHYpOworCisJCQlpZiAoc3ltcyA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRzb19fbG9hZF9tb2R1bGVzIGZhaWxlZCFcbiIpOworCQkJCXJldHVybiBzeW1zOworCQkJfQorCQkJZXJyICs9IHN5bXM7CisJCX0KIAl9CiAKIAlpZiAoZXJyIDw9IDApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNmU4NDkwNy4uODI5ZGE5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtMjcsNiArMjcsMTYgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBsaWJlbGYgMC44LnggYW5kIGVhcmxpZXIgZG8gbm90IHN1cHBvcnQgRUxGX0NfUkVBRF9NTUFQOworICogZm9yIG5ld2VyIHZlcnNpb25zIHdlIGNhbiB1c2UgbW1hcCB0byByZWR1Y2UgbWVtb3J5IHVzYWdlOgorICovCisjaWZkZWYgTElCRUxGX05PX01NQVAKKyMgZGVmaW5lIFBFUkZfRUxGX0NfUkVBRF9NTUFQIEVMRl9DX1JFQUQKKyNlbHNlCisjIGRlZmluZSBQRVJGX0VMRl9DX1JFQURfTU1BUCBFTEZfQ19SRUFEX01NQVAKKyNlbmRpZgorCiAjaWZuZGVmIERNR0xfUEFSQU1TCiAjZGVmaW5lIERNR0xfUEFSQU1TICAgICAgKDEgPDwgMCkgICAgICAgLyogSW5jbHVkZSBmdW5jdGlvbiBhcmdzICovCiAjZGVmaW5lIERNR0xfQU5TSSAgICAgICAgKDEgPDwgMSkgICAgICAgLyogSW5jbHVkZSBjb25zdCwgdm9sYXRpbGUsIGV0YyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3RyYWNlLWV2ZW50LXBhcnNlLmMgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwppbmRleCBmNmE4NDM3Li41NWM5NjU5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYworKysgYi90b29scy9wZXJmL3V0aWwvdHJhY2UtZXZlbnQtcGFyc2UuYwpAQCAtNjE4LDcgKzYxOCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgdGVzdF90eXBlX3Rva2VuKGVudW0gZXZlbnRfdHlwZSB0eXBlLCBjaGFyICp0b2tlbiwKLQkJICAgIGVudW0gZXZlbnRfdHlwZSBleHBlY3QsIGNoYXIgKmV4cGVjdF90b2spCisJCSAgICBlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpleHBlY3RfdG9rKQogewogCWlmICh0eXBlICE9IGV4cGVjdCkgewogCQlkaWUoIkVycm9yOiBleHBlY3RlZCB0eXBlICVkIGJ1dCByZWFkICVkIiwKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiBfX3JlYWRfZXhwZWN0X3R5cGUoZXhwZWN0LCB0b2ssIDEpOwogfQogCi1zdGF0aWMgaW50IF9fcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIsIGludCBuZXdsaW5lX29rKQorc3RhdGljIGludCBfX3JlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgbmV3bGluZV9vaykKIHsKIAllbnVtIGV2ZW50X3R5cGUgdHlwZTsKIAljaGFyICp0b2tlbjsKQEAgLTY2OCwxMiArNjY4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9leHBlY3RlZChlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWQoZW51bSBldmVudF90eXBlIGV4cGVjdCwgY29uc3QgY2hhciAqc3RyKQogewogCXJldHVybiBfX3JlYWRfZXhwZWN0ZWQoZXhwZWN0LCBzdHIsIDEpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjaGFyICpzdHIpCitzdGF0aWMgaW50IHJlYWRfZXhwZWN0ZWRfaXRlbShlbnVtIGV2ZW50X3R5cGUgZXhwZWN0LCBjb25zdCBjaGFyICpzdHIpCiB7CiAJcmV0dXJuIF9fcmVhZF9leHBlY3RlZChleHBlY3QsIHN0ciwgMCk7CiB9CkBAIC0xOTY4LDEwICsxOTY4LDExIEBACiAJeyAiTkVUX1RYX1NPRlRJUlEiLCAyIH0sCiAJeyAiTkVUX1JYX1NPRlRJUlEiLCAzIH0sCiAJeyAiQkxPQ0tfU09GVElSUSIsIDQgfSwKLQl7ICJUQVNLTEVUX1NPRlRJUlEiLCA1IH0sCi0JeyAiU0NIRURfU09GVElSUSIsIDYgfSwKLQl7ICJIUlRJTUVSX1NPRlRJUlEiLCA3IH0sCi0JeyAiUkNVX1NPRlRJUlEiLCA4IH0sCisJeyAiQkxPQ0tfSU9QT0xMX1NPRlRJUlEiLCA1IH0sCisJeyAiVEFTS0xFVF9TT0ZUSVJRIiwgNiB9LAorCXsgIlNDSEVEX1NPRlRJUlEiLCA3IH0sCisJeyAiSFJUSU1FUl9TT0ZUSVJRIiwgOCB9LAorCXsgIlJDVV9TT0ZUSVJRIiwgOSB9LAogCiAJeyAiSFJUSU1FUl9OT1JFU1RBUlQiLCAwIH0sCiAJeyAiSFJUSU1FUl9SRVNUQVJUIiwgMSB9LApkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMDM0YTc5OC4uNzQ5NWNlMyAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC04NTAsNiArODUwLDE5IEBACiAKIH0KIAorc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlKHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAorCQkJCQlzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQlwdGVfdCBwdGUpCit7CisJc3RydWN0IGt2bSAqa3ZtID0gbW11X25vdGlmaWVyX3RvX2t2bShtbik7CisKKwlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOworCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOworCWt2bV9zZXRfc3B0ZV9odmEoa3ZtLCBhZGRyZXNzLCBwdGUpOworCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKK30KKwogc3RhdGljIHZvaWQga3ZtX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXIgKm1uLAogCQkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCkBAIC05MjksNiArOTQyLDcgQEAKIAkuaW52YWxpZGF0ZV9yYW5nZV9zdGFydAk9IGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwKIAkuaW52YWxpZGF0ZV9yYW5nZV9lbmQJPSBrdm1fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kLAogCS5jbGVhcl9mbHVzaF95b3VuZwk9IGt2bV9tbXVfbm90aWZpZXJfY2xlYXJfZmx1c2hfeW91bmcsCisJLmNoYW5nZV9wdGUJCT0ga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlLAogCS5yZWxlYXNlCQk9IGt2bV9tbXVfbm90aWZpZXJfcmVsZWFzZSwKIH07CiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUiAqLwpAQCAtMTcxMyw3ICsxNzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBrdm1fdmNwdV92bV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGt2bV92Y3B1X3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdmNwdV9mYXVsdCwKIH07CiAKQEAgLTIzMTcsNyArMjMzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qga3ZtX3ZtX3ZtX29wcyA9IHsKIAkuZmF1bHQgPSBrdm1fdm1fZmF1bHQsCiB9OwogCkBAIC0yNjI1LDcgKzI2MzksNyBAQAogCiBERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2Y3B1X3N0YXRfZm9wcywgdmNwdV9zdGF0X2dldCwgTlVMTCwgIiVsbHVcbiIpOwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdF9mb3BzW10gPSB7CiAJW0tWTV9TVEFUX1ZDUFVdID0gJnZjcHVfc3RhdF9mb3BzLAogCVtLVk1fU1RBVF9WTV0gICA9ICZ2bV9zdGF0X2ZvcHMsCiB9OwpAQCAtMjcwMyw4ICsyNzE3LDYgQEAKIAlpbnQgcjsKIAlpbnQgY3B1OwogCi0Ja3ZtX2luaXRfZGVidWcoKTsKLQogCXIgPSBrdm1fYXJjaF9pbml0KG9wYXF1ZSk7CiAJaWYgKHIpCiAJCWdvdG8gb3V0X2ZhaWw7CkBAIC0yNzcxLDYgKzI3ODMsOCBAQAogCWt2bV9wcmVlbXB0X29wcy5zY2hlZF9pbiA9IGt2bV9zY2hlZF9pbjsKIAlrdm1fcHJlZW1wdF9vcHMuc2NoZWRfb3V0ID0ga3ZtX3NjaGVkX291dDsKIAorCWt2bV9pbml0X2RlYnVnKCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWU6CkBAIC0yNzkzLDcgKzI4MDcsNiBAQAogb3V0OgogCWt2bV9hcmNoX2V4aXQoKTsKIG91dF9mYWlsOgotCWt2bV9leGl0X2RlYnVnKCk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1faW5pdCk7CkBAIC0yODAxLDYgKzI4MTQsNyBAQAogdm9pZCBrdm1fZXhpdCh2b2lkKQogewogCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOworCWt2bV9leGl0X2RlYnVnKCk7CiAJbWlzY19kZXJlZ2lzdGVyKCZrdm1fZGV2KTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koa3ZtX3ZjcHVfY2FjaGUpOwogCXN5c2Rldl91bnJlZ2lzdGVyKCZrdm1fc3lzZGV2KTsKQEAgLTI4MTAsNyArMjgyNCw2IEBACiAJb25fZWFjaF9jcHUoaGFyZHdhcmVfZGlzYWJsZSwgTlVMTCwgMSk7CiAJa3ZtX2FyY2hfaGFyZHdhcmVfdW5zZXR1cCgpOwogCWt2bV9hcmNoX2V4aXQoKTsKLQlrdm1fZXhpdF9kZWJ1ZygpOwogCWZyZWVfY3B1bWFza192YXIoY3B1c19oYXJkd2FyZV9lbmFibGVkKTsKIAlfX2ZyZWVfcGFnZShiYWRfcGFnZSk7CiB9Cg==